diff --git a/.obsidian/app.json b/.obsidian/app.json index 719855f..509b1cc 100644 --- a/.obsidian/app.json +++ b/.obsidian/app.json @@ -1,4 +1,4 @@ { "alwaysUpdateLinks": true, - "newLinkFormat": "absolute" + "newLinkFormat": "relative" } \ No newline at end of file diff --git a/.obsidian/workspace.json b/.obsidian/workspace.json index 19bde1c..f41ac25 100644 --- a/.obsidian/workspace.json +++ b/.obsidian/workspace.json @@ -182,39 +182,54 @@ "obsidian-excalidraw-plugin:New drawing": false } }, - "active": "0644bc4d722f4d8a", + "active": "7cf6e446d7bedc7b", "lastOpenFiles": [ + "Perlite/web/config/perlite.conf", + "Perlite/web/config", + "Perlite/web", + "Perlite/screenshots/screenshot.png", + "Perlite/screenshots/plugin_options.png", + "Perlite/screenshots/plugin.png", + "Perlite/screenshots/link.png", + "Perlite/screenshots/graph.png", + "Perlite/screenshots/folders.png", + "Perlite/screenshots", + "Perlite/perlite/vendor/erusev/parsedown/composer.json", + "Perlite/perlite/vendor/erusev/parsedown/README.md", + "Perlite/perlite/vendor/erusev/parsedown/Parsedown.php", + "Perlite/perlite/vendor/erusev/parsedown/LICENSE.txt", + "Perlite/perlite/vendor/erusev/parsedown", + "Perlite/perlite/vendor/composer/platform_check.php", + "Perlite/perlite/vendor/composer/installed.php", + "Perlite/perlite/vendor/composer/installed.json", + "Perlite/perlite/perlite.svg", + "Perlite/perlite/logo.svg", + "Perlite/perlite/Demo/README.md", + "Perlite/perlite/Demo/Demo Documents/docs/aufbau.webp", + "Perlite/perlite/Demo/Demo Documents/background.png", + "Perlite/perlite/Demo/Demo Documents/Markdown Samples.md", + "Perlite/perlite/Demo/Demo Documents/Links and Embedded.md", + "Perlite/perlite/Demo/Demo Documents/Latex and Mermaid.md", + "Perlite/perlite/Demo/Demo Documents/Images.md", + "Perlite/perlite/Demo/Demo Documents/Callouts and Frontmatter.md", + "Perlite/SECURITY.md", + "Perlite/README.md", + "Perlite/Changelog.md", "Introducción Quimica/Elementos y átomos.md", - "Ilustraciónes/Drawing 2025-09-01 19.07.05.excalidraw.svg", "Introducción Quimica/Composición de materiales.md", "Introducción Quimica/Iones.md", "Dr.md", - "Introducción Quimica/TablaPeriódica.png", "Ilustraciónes/Drawing 2025-09-01 19.07.05.excalidraw.md", - "Ilustraciónes/Drawing 2025-09-01 19.07.05.excalidraw.excalidraw", - "Ilustraciónes", - "Introducción Quimica", - "Docs/Introducción Quimica/TablaPeriódica.png", "Docs/Introducción Quimica/Iones.md", "Docs/Introducción Quimica/Elementos y átomos.md", "Docs/Introducción Quimica/Composición de materiales.md", "Docs/Ilustraciónes/Drawing 2025-09-01 19.07.05.excalidraw.md", - "Docs/Introducción Quimica", - "Docs/Ilustraciónes", - "Docs", - "site/Introducción Quimica/TablaPeriódica.png", "site/Introducción Quimica/Iones.md", "site/Introducción Quimica/Elementos y átomos.md", "site/Introducción Quimica/Composición de materiales.md", "site/Ilustraciónes/Drawing 2025-09-01 19.07.05.excalidraw.md", - "site/Introducción Quimica", - "site/Ilustraciónes", - "site", - "Dockerfile", "Introducción Quimica/Ilustraciónes/Ilustración1.md", "Excalidraw/Drawing 2025-09-01 18.57.37.excalidraw.md", - "Excalidraw/Drawing 2025-09-01 18.57.14.excalidraw.md", - "Untitled.canvas", - "2025-09-01.md" + "Untitled.canvas" ] } \ No newline at end of file diff --git a/Perlite/.gitignore b/Perlite/.gitignore new file mode 100644 index 0000000..48ea2a6 --- /dev/null +++ b/Perlite/.gitignore @@ -0,0 +1,29 @@ +.trash +notes +perlite/Demo/.trash +perlite/Demo/Thumbs.db +perlite/Demo/.obsidian/plugins +perlite/Demo/.obsidian/app.json +perlite/Demo/.obsidian/community-plugins.json +perlite/Demo/.obsidian/core-plugins-migration.json +perlite/Demo/.obsidian/core-plugins.json +perlite/Demo/.obsidian/graph.json +perlite/Demo/.obsidian/hotkeys.json +perlite/Demo/.obsidian/workspace.json +perlite/Demo/Test Canvas.canvas +perlite/logo2.svg +Thumbs.db +perlite-dev +_Notes +perlite/.scripts/vendor +perlite/.scripts/release.sh +perlite/.scripts/canvas.js +perlite/Link Tests/root_image.png +perlite/Link Tests/folder1/image_parentFolder.png +perlite/Link Tests/folder1/folder 2/image_sameFolder.png +perlite/Link Tests/folder1/folder 2/parent_andRoot_folder_test.md +perlite/Link Tests/folder1/folder 2/same_folder_test.md +perlite/Link Tests/folder1/folder 2/subfolder_test.md +perlite/Link Tests/folder1/folder 2/docs/image_subFolder.png +perlite/Link Tests/folder1/folder 2/docs/subfolder_document.md +perlite/sec.jpg diff --git a/Perlite/Changelog.md b/Perlite/Changelog.md new file mode 100644 index 0000000..df26bfc --- /dev/null +++ b/Perlite/Changelog.md @@ -0,0 +1,277 @@ +## 1.6 +- get rid of mb_strlen, fixed issue [#151](https://github.com/secure-77/Perlite/issues/151) thanks to @Sephral +- hide X / Twitter when not set, issue [#152](https://github.com/secure-77/Perlite/issues/152), thanks to @EKNr1 +- implemented settings.php, issue [#119](https://github.com/secure-77/Perlite/issues/119), thanks to @EKNr1 +- implemented pretty urls, issue [#140](https://github.com/secure-77/Perlite/issues/140) +- removed not used Dockerfile +- fixed issue [#148](https://github.com/secure-77/Perlite/issues/148) +- fixed issue [#149](https://github.com/secure-77/Perlite/issues/149) +- implemented highlight support [#150](https://github.com/secure-77/Perlite/issues/150) +- implemented TOC mobile support [#141](https://github.com/secure-77/Perlite/issues/141) +- implemented Tags in side view [#122](https://github.com/secure-77/Perlite/issues/122) +- added possibility to allow access to MD files in hidden folders via HIDDEN_FILE_ACCESS variable, thanks to @EKNr1 for the idea. +- updated katex to 0.16.22 +- updated highlight.js to 11.11.1 +- updated mermaid to 11.6.0 + +\ +**Important Update Note**\ +As Perlite is now using pretty URLs you need to change your Nginx / Webserver config to make perlite work again after this release! This affects also the docker version, you need to get the latest [perlite.conf](https://github.com/secure-77/Perlite/blob/main/web/config/perlite.conf) +Please take a look at the [updated wiki](https://github.com/secure-77/Perlite/wiki/01---Setup-(no-Docker)#adjust-the-nginx-config) for more details. + + +## 1.5.9 +- added YouTube link support [#133](https://github.com/secure-77/Perlite/issues/133) thanks to @rsubr +- added image postion support thanks to @ar0x4 +- fixed direct page links [#90](https://github.com/secure-77/Perlite/issues/90) +- added support for webp images [#126](https://github.com/secure-77/Perlite/issues/126) +- fixed kartex problem PR [#131](https://github.com/secure-77/Perlite/pull/131) thanks to @Yaro2709 +- fixed obsidian edit link thanks to klgzzz +- changed site title to use the env. variable site_title +- fixed issue [#128](https://github.com/secure-77/Perlite/issues/128) thanks to @rgaricano +- added m4a support thanks to @rgaricano +- added img link support to external urls issue [#89](https://github.com/secure-77/Perlite/issues/89) +- added tasks support, issue [#118](https://github.com/secure-77/Perlite/issues/118) +- updated mermaid to 11.2.1 +- updated katex to 0.16.11 +- updated highlight.js to 11.10.0 +- changed base image for perlite_web to nginx:stable, issue [#100](https://github.com/secure-77/Perlite/issues/100) + + +## 1.5.8 +- merged PR #111 thanks to @selfiens +- merged PR #112 thanks to @selfiens +- merged PR #106 thanks to @Shardbyte +- updated obsidian app.css +- fixed yaml frontmatter [#107](https://github.com/secure-77/Perlite/issues/107) +- added support for alternate image text [#92](https://github.com/secure-77/Perlite/issues/92) +- added support for collapsed callouts [#113](https://github.com/secure-77/Perlite/issues/113) +- added support for embedded pdf and videos [#105](https://github.com/secure-77/Perlite/issues/105) +- added random node function [#109](https://github.com/secure-77/Perlite/issues/109) +- added support for absolut pathes [#90](https://github.com/secure-77/Perlite/issues/90) +- updated Demo Documetns and Themes +- updated build.sh to force composer updates +- updated highlight.js to 11.9.0 +- updated katex to 0.16.9 +- updated vis-network to 9.1.9 +- added new custom logo and social media section +- fixed issue Folder arrow marker randomly disappears [#94](https://github.com/secure-77/Perlite/issues/94) +- changed to show TOC and local Graph at the same time + + +## 1.5.7 +- added social media meta tags and variables +- added github action for docker build process and arm support, issue #65 +- improved loading performance, the graph linking will only be done at the first page load, issue #97 +- provided a python script to perform as alternative for the link generation, issue #97 +- included mermaid 10.3.0 via cdn as composer had issues to load it +- updated highlight.js to 11.8.0 +- updated katex to 0.16.8 +- updated jquery to 3.7.1 +- fixed issue #74 (custom heading links) +- fixed heading references in links to other notes +- implemented copy code button issue #68 +- added a little padding for the headers +- merged PR #102 (thx to @selfiens) +- seperated php composer into two files (npm-assets and php-assets) +- fixed issue #91 + + +## 1.5.6 +- fixed heading references (issue #74) +- added safemode environment variable (PR #88) thanks to @NotGovernor +- added default side panel size related of screen size (issue #85) + + +## 1.5.5 +- updated some html structure to fit the latest app.css and theme styles +- updated app.css +- removed Bootstrap dependency +- fixed ampersand problem in global graph (issue #47) +- added default font size environment variable (issue #80) +- added escape key function for modal close button (PR #82) thank to @stellarix +- added homepage environment variable (PR #84) thanks to @NotGovernor +- added composer +- added build script +- updated highlight.js to 11.7.0 +- updated jquery to 3.7.0 +- updated mermaid to 8.12.1 +- updated vis-network to 9.1.6 + + +## 1.5.4 +- fixed img max width +- fixed image modal (issue #58) +- fixed double links to nodes (issue #45) thanks to @catrone3 +- added svg format, thanks to @lennartbrandin +- added variable for allowed file link types, thanks to @dbohn +- changed the gprah render solver from barnesHut to forceAtlas2Based to improve perfomance (issue #66) +- added graph loading text +- added option and default behavior to disable Pop Hovers +- added default behavior to show table of content instead of local graph + + +## 1.5.3 +- support file links with exclamation mark and aliases (issue #55) +- support image resizing (issue #54) +- fixed $refName missing php variable (PR #56) + + +## 1.5.2 +- fixed $closing variable error +- set focus to search field +- fixed #Header reference in internal links (Issue #32) +- fixed error with links to non existing files (Graph) +- fixed ampersand problem in internal links and graph (Issue #47) +- added mousehover for internal links, feature request #43 +- added popup feature for internal links on mobile (setting), feature request #43 +- fixed padding-right issue on mobile view +- moved some instructions to the wiki +- added light mode (in the settings) +- updated katex to 0.16.4 +- fixed problem with two _ (underscorces) per line in katex context + + +## 1.5.1 +- fixed tags containing a hyphen or slash (Issue #39) +- fixed docker-compose-dev.yml config +- fixed callouts and contiuned quotes (Issue #40 and #27) +- fixed logo position +- Demo Vault is default if no NOTES_PATH is defined +- fixed line breaks if LINE_BREAKS isn´t defined + + +## 1.5 +- Complete redesign based on obsidian css +- support for Obsidian themes +- added tag search +- added metadata support +- added different settings for the graph styling +- added different settings for the viewer, like text size +- settings stored in local browser storage +- updated JQuery to version 3.6.1 +- updated HighlightJS to version 11.6.0 +- updated Docker image to use latest php:fpm-alpine version (8.1.11) +- updatet Nginx config to allow Themes +- added docker compose variable for markdown linebreaks + + +## 1.4.5 RC +- added "edit button", enable it via cookie, thx to @Tooa + + +## 1.4.4 +- some code cleanup +- replaced mermaid.min.js with the correct one (29.1.) +- implemented start page (README.md) for non mobile view +- hide graph display, when node has no graph +- some visual graph updates +- changed order: folders are now always on top +- fixed sort order to be case insensitive +- adjusted the docker image and container naming +- updated the nginx version to 1.22 and php to 7.4.30 for docker +- adjusted blockquote style and added callouts support (thanks to @Tooa) +- fixed sidebar menu height +- fixed problem with direct links and `&` chars +- fixed a graph linking error when some files are missing from the metadata.json + + +## 1.4.3 +- added mermaid 8.7.0 (mermaid.min.js) +- changed order for folders and files with underscores (they are now on top) +- added sec77/perlite:latest to the docker hub +- changed the docker compose files, the hub images is used now +- updated vis-js to version 9.1.2 +- fixed problems with multiple links in one line + + +## 1.4.2 +- enabled simple line break in parsedown +- fixed sidebar height +- fixed max img width & height +- removed # from title +- added Perlite Discord Server +- added support for custom internal Obsidian link names +- improved style of tables +- url update in browser + + +## 1.4.1 +- some code cleanup +- added separate perlite.svg for the about header +- changed nginx docker config +- fixed multibyte utf basename to support chinese characters in file name and path +- fixed menu collapse problem when folder name contains dots or begins with a number +- fixed image size in mobile view +- fixed image line break issue +- fixed full graph view when current node has no links and no-link filter is enabled +- changed color of current node in the graph view +- LaTeX support + - added katex.min.js + - added katex.min.css + - added fonts + - added auto-render.min.js +- fixed navigator when file or folder names are to long + + +## 1.4 +- updated highlight.js to 11.4.0 +- updated Bootstrap JS files to 5.1.3 +- changed default (dark) theme from darkly to Bootswatch theme "slate" +- fixed direct links when Perlite is in a subfolder of the root direcotry +- removed the flatly theme, a11y-light theme and disabled the "light mode" +- many layout redesigns like + - changed the header size + - moved the searchbar to the navbar + - added Nerd Fonts as default Font + - added a right navbar for the graph + - highlight current navbar entry + - set focus on current navbar entry if called by a link + - other small layout changes +- added separated scrollbars for navbar and content +- added rel="noopener noreferrer" attributes for external links +- added icon for external links +- added a visual graph via vis.js + - metadata.json parsing (only adds nodes if they really exists in the folder structure) + - show graph and direct links for every note in the right navbar + - added modal for full graph view + - added filter (hide nodes without link) in the full graph view (saved via cookie) +- improved the search + - enabled case insensitive + - included filename for the search + - removed the "open recent search" (because its unnecessary) +- updated the Readme +- updated the Demo Documents + + +## 1.3 +- added support for inplace links +- added support for PDF files / links +- changed in place image behaviour +- new logo +- added favicon +- adjust image view in about modal +- changed "About" behaviour +- added changelog +- outsourced docker instructions from readme +- changes link behaviour (added link get parameter to fix problems with unwanted queries) +- removed "not allowed" content +- added cookie for theme settings +- adjust mobile margins + + +## 1.2 +- added Docker +- added direct Links +- changed base dir logic +- update Readme + + +## 1.1 +- added mobile responsive +- added search +- added theme support and darkmode + + +## 1.0 +- First prod. ready release diff --git a/Perlite/LICENSE b/Perlite/LICENSE new file mode 100644 index 0000000..78a519b --- /dev/null +++ b/Perlite/LICENSE @@ -0,0 +1,21 @@ +MIT License + +Copyright (c) 2025 secure-77 + +Permission is hereby granted, free of charge, to any person obtaining a copy +of this software and associated documentation files (the "Software"), to deal +in the Software without restriction, including without limitation the rights +to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +copies of the Software, and to permit persons to whom the Software is +furnished to do so, subject to the following conditions: + +The above copyright notice and this permission notice shall be included in all +copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE +SOFTWARE. diff --git a/Perlite/README.md b/Perlite/README.md new file mode 100644 index 0000000..72fbb1b --- /dev/null +++ b/Perlite/README.md @@ -0,0 +1,77 @@ +# Perlite + +![GitHub release (latest by date)](https://img.shields.io/github/v/release/secure-77/perlite) ![GitHub](https://img.shields.io/github/license/secure-77/perlite) ![GitHub last commit](https://img.shields.io/github/last-commit/secure-77/Perlite) + + +A web based markdown viewer optimized for [Obsidian](https://obsidian.md/) Notes + +Just put your whole Obsidian vault or markdown folder/file structure in your web directory. The page builds itself. + +Its an open source alternative to [obsidian publish](https://obsidian.md/publish). + +Read more about Perlite and staging tips on my blog post: [Perlite on Secure77](https://secure77.de/perlite). +If you want to discuss Perlite you can join the [Perlite Discord Server](https://discord.gg/pkJ347ssWT) + + +## Demo + +[Perlite Demo](https://perlite.secure77.de/) + + +![Demo Screenshot](https://raw.githubusercontent.com/secure-77/Perlite/main/screenshots/screenshot.png "Demo Screenshot") + +![Graph Screenshot](https://raw.githubusercontent.com/secure-77/Perlite/main/screenshots/graph.png "Graph Screenshot") + +## Features + +- Auto build up, based on your folder (vault) structure +- No Database required +- Obsidian Themes Support +- Fully Responsive +- No manual parsing or converting necessary +- Full interactive Graph +- LaTeX and Mermaid Support +- Link to Obsidian Vault +- Search +- Obsidian tags, links, images and preview Support +- Dark and Light Mode + + +## Install +Please make sure you read the [required settings](https://github.com/secure-77/Perlite/wiki/03---Perlite-Settings#required-settings) first! + +You can download the latest release from github or git clone the project and use docker. + +- For non Docker please check [Setup](https://github.com/secure-77/Perlite/wiki/01---Setup-(no-Docker)) +- For Docker, please check [Docker Setup](https://github.com/secure-77/Perlite/wiki/02---Setup-Docker) + + +## Wiki +Please check the [wiki](https://github.com/secure-77/Perlite/wiki), here you will find further information, for example: + +- [Themes](https://github.com/secure-77/Perlite/wiki/Themes) +- [Graph Setup and Settings](https://github.com/secure-77/Perlite/wiki/Graph) +- [Perlite Settings](https://github.com/secure-77/Perlite/wiki/03---Perlite-Settings) +- [Troubleshooting](https://github.com/secure-77/Perlite/wiki/Troubleshooting) + + +## Security +- The [Safemode](https://github.com/erusev/parsedown#security) from Parsedown is active, but I would not recommend to allow untrusted user input. +- You should prevent that the .md files are direct accessible via the browser (only the php engine need access to it) or at least make sure that the md files will be downloaded and not be rendered by browser +- You should prevent that the metadata.json file is direct accessible via the browser (only the php engine need access to it). The extracted metadata.json contains the whole obsidian structure, so this file could be sensitive if you plan to exclude some files or folders from Perlite. However, the parsing is done by the php engine and it checks for every path if the file really exists in the provided vault, so files you excluded from the vault will also not be visible in the graph, but they are still present in the metadata.json. This is why you should prevent access to it. + + +## Contributing +Want to contribute? Awesome! Please use the [dev branch](https://github.com/secure-77/Perlite/tree/dev) for pull requests. + + +## Why Perlite? +[Wiki](https://en.wikipedia.org/wiki/Perlite): +*Perlite is an amorphous volcanic glass ... typically formed by the hydration of obsidian.* + + +## Previous Versions and Changelog + +- [Changelog](https://github.com/secure-77/Perlite/blob/main/Changelog.md) +- [Perlite 1.4.4 Demo](https://perlite.secure77.de/1.4.4) +- [Perlite 1.3 Demo](https://perlite.secure77.de/1.3) diff --git a/Perlite/SECURITY.md b/Perlite/SECURITY.md new file mode 100644 index 0000000..bdce158 --- /dev/null +++ b/Perlite/SECURITY.md @@ -0,0 +1,5 @@ +# Security Policy + +## Reporting a Vulnerability + +If you have found a vulnerability, please send an email to sec77@ secure77.de or contact me via direct message on Discord sec77#5109 diff --git a/Perlite/docker-compose-build.yml b/Perlite/docker-compose-build.yml new file mode 100644 index 0000000..ef89ac6 --- /dev/null +++ b/Perlite/docker-compose-build.yml @@ -0,0 +1,44 @@ +services: + perlite: + image: sec77/perlite:dev + container_name: perlite-build + environment: + - NOTES_PATH=Demo + - HIDE_FOLDERS=docs,private,trash + - HIDDEN_FILE_ACCESS=false + - LINE_BREAKS=true + - ABSOLUTE_PATHS=false + - ALLOWED_FILE_LINK_TYPES=pdf,mp4 + - DISABLE_POP_HOVER=true + - SHOW_TOC=true + - SHOW_LOCAL_GRAPH=true + - HOME_FILE=README + - FONT_SIZE=15 + - HTML_SAFE_MODE=true + - TEMP_PATH=/tmp + - SITE_TITLE=Demo + - SITE_TYPE=article + - SITE_URL= + - SITE_IMAGE= + - SITE_DESC= + - SITE_NAME=Perlite + - SITE_TWITTER=https://x.com/ + - SITE_LOGO=perlite.svg + - SITE_HOMEPAGE=https://perlite.secure77.de/ + - SITE_GITHUB=https://github.com/ + volumes: + - ./perlite:/var/www/perlite + - ./perlite/Demo:/var/www/perlite/Demo:ro + + web: + image: nginx:stable + container_name: perlite_web-build + ports: + - 80:80 + volumes: + - ./web/config/perlite.conf:/etc/nginx/conf.d/default.conf:ro + - ./perlite:/var/www/perlite + - ./perlite/Demo:/var/www/perlite/Demo:ro + depends_on: + - perlite + diff --git a/Perlite/docker-compose-dev.yml b/Perlite/docker-compose-dev.yml new file mode 100644 index 0000000..491c285 --- /dev/null +++ b/Perlite/docker-compose-dev.yml @@ -0,0 +1,45 @@ +services: + perlite: + image: sec77/perlite:dev + container_name: perlite-dev + restart: unless-stopped + environment: + - NOTES_PATH=Demo + - HIDE_FOLDERS=docs,private,trash + - HIDDEN_FILE_ACCESS=false + - LINE_BREAKS=true + - ABSOLUTE_PATHS=false + - ALLOWED_FILE_LINK_TYPES=pdf,mp4 + - DISABLE_POP_HOVER=false + - SHOW_TOC=true + - SHOW_LOCAL_GRAPH=true + - HOME_FILE=README + - FONT_SIZE=15 + - HTML_SAFE_MODE=true + - TEMP_PATH=/tmp + - SITE_TITLE=Demo + - SITE_TYPE=article + - SITE_URL= + - SITE_IMAGE= + - SITE_DESC= + - SITE_NAME=Perlite + - SITE_TWITTER=https://x.com/ + - SITE_LOGO=perlite.svg + - SITE_HOMEPAGE=https://perlite.secure77.de/ + - SITE_GITHUB=https://github.com/ + volumes: + - ./perlite/Demo:/var/www/perlite/Demo:ro + + web: + image: nginx:stable + container_name: perlite_web + restart: unless-stopped + ports: + - 80:80 + volumes: + - ./web/config/perlite.conf:/etc/nginx/conf.d/default.conf:ro + volumes_from: + - perlite + depends_on: + - perlite + diff --git a/Perlite/docker-compose.yml b/Perlite/docker-compose.yml new file mode 100644 index 0000000..ace23a0 --- /dev/null +++ b/Perlite/docker-compose.yml @@ -0,0 +1,45 @@ +services: + perlite: + image: sec77/perlite:latest + container_name: perlite + restart: unless-stopped + environment: + - NOTES_PATH=School + - HIDE_FOLDERS=docs,private,trash + - HIDDEN_FILE_ACCESS=false + - LINE_BREAKS=true + - ABSOLUTE_PATHS=false + - ALLOWED_FILE_LINK_TYPES=pdf,mp4 + - DISABLE_POP_HOVER=false + - SHOW_TOC=true + - SHOW_LOCAL_GRAPH=true + - HOME_FILE=README + - FONT_SIZE=15 + - HTML_SAFE_MODE=true + - TEMP_PATH=/tmp + - SITE_TITLE=Chewico Docs + - SITE_TYPE=article + - SITE_URL= + - SITE_IMAGE= + - SITE_DESC= + - SITE_NAME=Chewico Docs + - SITE_TWITTER=https://x.com/ + - SITE_LOGO=perlite.svg + - SITE_HOMEPAGE= + - SITE_GITHUB=https://git.frostdeer.com/Chewico/School.git + volumes: + - ./perlite/School:/var/www/perlite/School:ro + + web: + image: nginx:stable + container_name: perlite_web + restart: unless-stopped + ports: + - 80:80 + volumes: + - ./web/config/perlite.conf:/etc/nginx/conf.d/default.conf:ro + volumes_from: + - perlite + depends_on: + - perlite + diff --git a/Perlite/perlite/.js/auto-render.min.js b/Perlite/perlite/.js/auto-render.min.js new file mode 100644 index 0000000..32a7dd8 --- /dev/null +++ b/Perlite/perlite/.js/auto-render.min.js @@ -0,0 +1 @@ +!function(e,t){"object"==typeof exports&&"object"==typeof module?module.exports=t(require("katex")):"function"==typeof define&&define.amd?define(["katex"],t):"object"==typeof exports?exports.renderMathInElement=t(require("katex")):e.renderMathInElement=t(e.katex)}("undefined"!=typeof self?self:this,(function(e){return function(){"use strict";var t={757:function(t){t.exports=e}},n={};function r(e){var o=n[e];if(void 0!==o)return o.exports;var i=n[e]={exports:{}};return t[e](i,i.exports,r),i.exports}r.n=function(e){var t=e&&e.__esModule?function(){return e.default}:function(){return e};return r.d(t,{a:t}),t},r.d=function(e,t){for(var n in t)r.o(t,n)&&!r.o(e,n)&&Object.defineProperty(e,n,{enumerable:!0,get:t[n]})},r.o=function(e,t){return Object.prototype.hasOwnProperty.call(e,t)};var o={};r.d(o,{default:function(){return p}});var i=r(757),a=r.n(i);const l=function(e,t,n){let r=n,o=0;const i=e.length;for(;re.left.replace(/[-/\\^$*+?.()|[\]{}]/g,"\\$&"))).join("|")+")");for(;n=e.search(o),-1!==n;){n>0&&(r.push({type:"text",data:e.slice(0,n)}),e=e.slice(n));const o=t.findIndex((t=>e.startsWith(t.left)));if(n=l(t[o].right,e,t[o].left.length),-1===n)break;const i=e.slice(0,n+t[o].right.length),a=s.test(i)?i:e.slice(t[o].left.length,n);r.push({type:"math",data:a,rawData:i,display:t[o].display}),e=e.slice(n+t[o].right.length)}return""!==e&&r.push({type:"text",data:e}),r};const c=function(e,t){const n=d(e,t.delimiters);if(1===n.length&&"text"===n[0].type)return null;const r=document.createDocumentFragment();for(let e=0;e-1===e.indexOf(" "+t+" ")))&&f(r,t)}}};var p=function(e,t){if(!e)throw new Error("No element provided to render");const n={};for(const e in t)t.hasOwnProperty(e)&&(n[e]=t[e]);n.delimiters=n.delimiters||[{left:"$$",right:"$$",display:!0},{left:"\\(",right:"\\)",display:!1},{left:"\\begin{equation}",right:"\\end{equation}",display:!0},{left:"\\begin{align}",right:"\\end{align}",display:!0},{left:"\\begin{alignat}",right:"\\end{alignat}",display:!0},{left:"\\begin{gather}",right:"\\end{gather}",display:!0},{left:"\\begin{CD}",right:"\\end{CD}",display:!0},{left:"\\[",right:"\\]",display:!0}],n.ignoredTags=n.ignoredTags||["script","noscript","style","textarea","pre","code","option"],n.ignoredClasses=n.ignoredClasses||[],n.errorCallback=n.errorCallback||console.error,n.macros=n.macros||{},f(e,n)};return o=o.default}()})); \ No newline at end of file diff --git a/Perlite/perlite/.js/highlight.min.js b/Perlite/perlite/.js/highlight.min.js new file mode 100644 index 0000000..6e1a09e --- /dev/null +++ b/Perlite/perlite/.js/highlight.min.js @@ -0,0 +1,1244 @@ +/*! + Highlight.js v11.11.1 (git: 08cb242e7d) + (c) 2006-2024 Josh Goebel and other contributors + License: BSD-3-Clause + */ +var hljs=function(){"use strict";function e(n){ +return n instanceof Map?n.clear=n.delete=n.set=()=>{ +throw Error("map is read-only")}:n instanceof Set&&(n.add=n.clear=n.delete=()=>{ +throw Error("set is read-only") +}),Object.freeze(n),Object.getOwnPropertyNames(n).forEach((t=>{ +const a=n[t],i=typeof a;"object"!==i&&"function"!==i||Object.isFrozen(a)||e(a) +})),n}class n{constructor(e){ +void 0===e.data&&(e.data={}),this.data=e.data,this.isMatchIgnored=!1} +ignoreMatch(){this.isMatchIgnored=!0}}function t(e){ +return e.replace(/&/g,"&").replace(//g,">").replace(/"/g,""").replace(/'/g,"'") +}function a(e,...n){const t=Object.create(null);for(const n in e)t[n]=e[n] +;return n.forEach((e=>{for(const n in e)t[n]=e[n]})),t}const i=e=>!!e.scope +;class r{constructor(e,n){ +this.buffer="",this.classPrefix=n.classPrefix,e.walk(this)}addText(e){ +this.buffer+=t(e)}openNode(e){if(!i(e))return;const n=((e,{prefix:n})=>{ +if(e.startsWith("language:"))return e.replace("language:","language-") +;if(e.includes(".")){const t=e.split(".") +;return[`${n}${t.shift()}`,...t.map(((e,n)=>`${e}${"_".repeat(n+1)}`))].join(" ") +}return`${n}${e}`})(e.scope,{prefix:this.classPrefix});this.span(n)} +closeNode(e){i(e)&&(this.buffer+="")}value(){return this.buffer}span(e){ +this.buffer+=``}}const s=(e={})=>{const n={children:[]} +;return Object.assign(n,e),n};class o{constructor(){ +this.rootNode=s(),this.stack=[this.rootNode]}get top(){ +return this.stack[this.stack.length-1]}get root(){return this.rootNode}add(e){ +this.top.children.push(e)}openNode(e){const n=s({scope:e}) +;this.add(n),this.stack.push(n)}closeNode(){ +if(this.stack.length>1)return this.stack.pop()}closeAllNodes(){ +for(;this.closeNode(););}toJSON(){return JSON.stringify(this.rootNode,null,4)} +walk(e){return this.constructor._walk(e,this.rootNode)}static _walk(e,n){ +return"string"==typeof n?e.addText(n):n.children&&(e.openNode(n), +n.children.forEach((n=>this._walk(e,n))),e.closeNode(n)),e}static _collapse(e){ +"string"!=typeof e&&e.children&&(e.children.every((e=>"string"==typeof e))?e.children=[e.children.join("")]:e.children.forEach((e=>{ +o._collapse(e)})))}}class l extends o{constructor(e){super(),this.options=e} +addText(e){""!==e&&this.add(e)}startScope(e){this.openNode(e)}endScope(){ +this.closeNode()}__addSublanguage(e,n){const t=e.root +;n&&(t.scope="language:"+n),this.add(t)}toHTML(){ +return new r(this,this.options).value()}finalize(){ +return this.closeAllNodes(),!0}}function c(e){ +return e?"string"==typeof e?e:e.source:null}function d(e){return b("(?=",e,")")} +function g(e){return b("(?:",e,")*")}function u(e){return b("(?:",e,")?")} +function b(...e){return e.map((e=>c(e))).join("")}function m(...e){const n=(e=>{ +const n=e[e.length-1] +;return"object"==typeof n&&n.constructor===Object?(e.splice(e.length-1,1),n):{} +})(e);return"("+(n.capture?"":"?:")+e.map((e=>c(e))).join("|")+")"} +function p(e){return RegExp(e.toString()+"|").exec("").length-1} +const _=/\[(?:[^\\\]]|\\.)*\]|\(\??|\\([1-9][0-9]*)|\\./ +;function h(e,{joinWith:n}){let t=0;return e.map((e=>{t+=1;const n=t +;let a=c(e),i="";for(;a.length>0;){const e=_.exec(a);if(!e){i+=a;break} +i+=a.substring(0,e.index), +a=a.substring(e.index+e[0].length),"\\"===e[0][0]&&e[1]?i+="\\"+(Number(e[1])+n):(i+=e[0], +"("===e[0]&&t++)}return i})).map((e=>`(${e})`)).join(n)} +const f="[a-zA-Z]\\w*",E="[a-zA-Z_]\\w*",y="\\b\\d+(\\.\\d+)?",w="(-?)(\\b0[xX][a-fA-F0-9]+|(\\b\\d+(\\.\\d*)?|\\.\\d+)([eE][-+]?\\d+)?)",v="\\b(0b[01]+)",N={ +begin:"\\\\[\\s\\S]",relevance:0},k={scope:"string",begin:"'",end:"'", +illegal:"\\n",contains:[N]},x={scope:"string",begin:'"',end:'"',illegal:"\\n", +contains:[N]},O=(e,n,t={})=>{const i=a({scope:"comment",begin:e,end:n, +contains:[]},t);i.contains.push({scope:"doctag", +begin:"[ ]*(?=(TODO|FIXME|NOTE|BUG|OPTIMIZE|HACK|XXX):)", +end:/(TODO|FIXME|NOTE|BUG|OPTIMIZE|HACK|XXX):/,excludeBegin:!0,relevance:0}) +;const r=m("I","a","is","so","us","to","at","if","in","it","on",/[A-Za-z]+['](d|ve|re|ll|t|s|n)/,/[A-Za-z]+[-][a-z]+/,/[A-Za-z][a-z]{2,}/) +;return i.contains.push({begin:b(/[ ]+/,"(",r,/[.]?[:]?([.][ ]|[ ])/,"){3}")}),i +},M=O("//","$"),A=O("/\\*","\\*/"),S=O("#","$");var C=Object.freeze({ +__proto__:null,APOS_STRING_MODE:k,BACKSLASH_ESCAPE:N,BINARY_NUMBER_MODE:{ +scope:"number",begin:v,relevance:0},BINARY_NUMBER_RE:v,COMMENT:O, +C_BLOCK_COMMENT_MODE:A,C_LINE_COMMENT_MODE:M,C_NUMBER_MODE:{scope:"number", +begin:w,relevance:0},C_NUMBER_RE:w,END_SAME_AS_BEGIN:e=>Object.assign(e,{ +"on:begin":(e,n)=>{n.data._beginMatch=e[1]},"on:end":(e,n)=>{ +n.data._beginMatch!==e[1]&&n.ignoreMatch()}}),HASH_COMMENT_MODE:S,IDENT_RE:f, +MATCH_NOTHING_RE:/\b\B/,METHOD_GUARD:{begin:"\\.\\s*"+E,relevance:0}, +NUMBER_MODE:{scope:"number",begin:y,relevance:0},NUMBER_RE:y, +PHRASAL_WORDS_MODE:{ +begin:/\b(a|an|the|are|I'm|isn't|don't|doesn't|won't|but|just|should|pretty|simply|enough|gonna|going|wtf|so|such|will|you|your|they|like|more)\b/ +},QUOTE_STRING_MODE:x,REGEXP_MODE:{scope:"regexp",begin:/\/(?=[^/\n]*\/)/, +end:/\/[gimuy]*/,contains:[N,{begin:/\[/,end:/\]/,relevance:0,contains:[N]}]}, +RE_STARTERS_RE:"!|!=|!==|%|%=|&|&&|&=|\\*|\\*=|\\+|\\+=|,|-|-=|/=|/|:|;|<<|<<=|<=|<|===|==|=|>>>=|>>=|>=|>>>|>>|>|\\?|\\[|\\{|\\(|\\^|\\^=|\\||\\|=|\\|\\||~", +SHEBANG:(e={})=>{const n=/^#![ ]*\// +;return e.binary&&(e.begin=b(n,/.*\b/,e.binary,/\b.*/)),a({scope:"meta",begin:n, +end:/$/,relevance:0,"on:begin":(e,n)=>{0!==e.index&&n.ignoreMatch()}},e)}, +TITLE_MODE:{scope:"title",begin:f,relevance:0},UNDERSCORE_IDENT_RE:E, +UNDERSCORE_TITLE_MODE:{scope:"title",begin:E,relevance:0}});function T(e,n){ +"."===e.input[e.index-1]&&n.ignoreMatch()}function R(e,n){ +void 0!==e.className&&(e.scope=e.className,delete e.className)}function D(e,n){ +n&&e.beginKeywords&&(e.begin="\\b("+e.beginKeywords.split(" ").join("|")+")(?!\\.)(?=\\b|\\s)", +e.__beforeBegin=T,e.keywords=e.keywords||e.beginKeywords,delete e.beginKeywords, +void 0===e.relevance&&(e.relevance=0))}function I(e,n){ +Array.isArray(e.illegal)&&(e.illegal=m(...e.illegal))}function L(e,n){ +if(e.match){ +if(e.begin||e.end)throw Error("begin & end are not supported with match") +;e.begin=e.match,delete e.match}}function B(e,n){ +void 0===e.relevance&&(e.relevance=1)}const $=(e,n)=>{if(!e.beforeMatch)return +;if(e.starts)throw Error("beforeMatch cannot be used with starts") +;const t=Object.assign({},e);Object.keys(e).forEach((n=>{delete e[n] +})),e.keywords=t.keywords,e.begin=b(t.beforeMatch,d(t.begin)),e.starts={ +relevance:0,contains:[Object.assign(t,{endsParent:!0})] +},e.relevance=0,delete t.beforeMatch +},F=["of","and","for","in","not","or","if","then","parent","list","value"] +;function z(e,n,t="keyword"){const a=Object.create(null) +;return"string"==typeof e?i(t,e.split(" ")):Array.isArray(e)?i(t,e):Object.keys(e).forEach((t=>{ +Object.assign(a,z(e[t],n,t))})),a;function i(e,t){ +n&&(t=t.map((e=>e.toLowerCase()))),t.forEach((n=>{const t=n.split("|") +;a[t[0]]=[e,j(t[0],t[1])]}))}}function j(e,n){ +return n?Number(n):(e=>F.includes(e.toLowerCase()))(e)?0:1}const U={},P=e=>{ +console.error(e)},K=(e,...n)=>{console.log("WARN: "+e,...n)},q=(e,n)=>{ +U[`${e}/${n}`]||(console.log(`Deprecated as of ${e}. ${n}`),U[`${e}/${n}`]=!0) +},H=Error();function G(e,n,{key:t}){let a=0;const i=e[t],r={},s={} +;for(let e=1;e<=n.length;e++)s[e+a]=i[e],r[e+a]=!0,a+=p(n[e-1]) +;e[t]=s,e[t]._emit=r,e[t]._multi=!0}function Z(e){(e=>{ +e.scope&&"object"==typeof e.scope&&null!==e.scope&&(e.beginScope=e.scope, +delete e.scope)})(e),"string"==typeof e.beginScope&&(e.beginScope={ +_wrap:e.beginScope}),"string"==typeof e.endScope&&(e.endScope={_wrap:e.endScope +}),(e=>{if(Array.isArray(e.begin)){ +if(e.skip||e.excludeBegin||e.returnBegin)throw P("skip, excludeBegin, returnBegin not compatible with beginScope: {}"), +H +;if("object"!=typeof e.beginScope||null===e.beginScope)throw P("beginScope must be object"), +H;G(e,e.begin,{key:"beginScope"}),e.begin=h(e.begin,{joinWith:""})}})(e),(e=>{ +if(Array.isArray(e.end)){ +if(e.skip||e.excludeEnd||e.returnEnd)throw P("skip, excludeEnd, returnEnd not compatible with endScope: {}"), +H +;if("object"!=typeof e.endScope||null===e.endScope)throw P("endScope must be object"), +H;G(e,e.end,{key:"endScope"}),e.end=h(e.end,{joinWith:""})}})(e)}function W(e){ +function n(n,t){ +return RegExp(c(n),"m"+(e.case_insensitive?"i":"")+(e.unicodeRegex?"u":"")+(t?"g":"")) +}class t{constructor(){ +this.matchIndexes={},this.regexes=[],this.matchAt=1,this.position=0} +addRule(e,n){ +n.position=this.position++,this.matchIndexes[this.matchAt]=n,this.regexes.push([n,e]), +this.matchAt+=p(e)+1}compile(){0===this.regexes.length&&(this.exec=()=>null) +;const e=this.regexes.map((e=>e[1]));this.matcherRe=n(h(e,{joinWith:"|" +}),!0),this.lastIndex=0}exec(e){this.matcherRe.lastIndex=this.lastIndex +;const n=this.matcherRe.exec(e);if(!n)return null +;const t=n.findIndex(((e,n)=>n>0&&void 0!==e)),a=this.matchIndexes[t] +;return n.splice(0,t),Object.assign(n,a)}}class i{constructor(){ +this.rules=[],this.multiRegexes=[], +this.count=0,this.lastIndex=0,this.regexIndex=0}getMatcher(e){ +if(this.multiRegexes[e])return this.multiRegexes[e];const n=new t +;return this.rules.slice(e).forEach((([e,t])=>n.addRule(e,t))), +n.compile(),this.multiRegexes[e]=n,n}resumingScanAtSamePosition(){ +return 0!==this.regexIndex}considerAll(){this.regexIndex=0}addRule(e,n){ +this.rules.push([e,n]),"begin"===n.type&&this.count++}exec(e){ +const n=this.getMatcher(this.regexIndex);n.lastIndex=this.lastIndex +;let t=n.exec(e) +;if(this.resumingScanAtSamePosition())if(t&&t.index===this.lastIndex);else{ +const n=this.getMatcher(0);n.lastIndex=this.lastIndex+1,t=n.exec(e)} +return t&&(this.regexIndex+=t.position+1, +this.regexIndex===this.count&&this.considerAll()),t}} +if(e.compilerExtensions||(e.compilerExtensions=[]), +e.contains&&e.contains.includes("self"))throw Error("ERR: contains `self` is not supported at the top-level of a language. See documentation.") +;return e.classNameAliases=a(e.classNameAliases||{}),function t(r,s){const o=r +;if(r.isCompiled)return o +;[R,L,Z,$].forEach((e=>e(r,s))),e.compilerExtensions.forEach((e=>e(r,s))), +r.__beforeBegin=null,[D,I,B].forEach((e=>e(r,s))),r.isCompiled=!0;let l=null +;return"object"==typeof r.keywords&&r.keywords.$pattern&&(r.keywords=Object.assign({},r.keywords), +l=r.keywords.$pattern, +delete r.keywords.$pattern),l=l||/\w+/,r.keywords&&(r.keywords=z(r.keywords,e.case_insensitive)), +o.keywordPatternRe=n(l,!0), +s&&(r.begin||(r.begin=/\B|\b/),o.beginRe=n(o.begin),r.end||r.endsWithParent||(r.end=/\B|\b/), +r.end&&(o.endRe=n(o.end)), +o.terminatorEnd=c(o.end)||"",r.endsWithParent&&s.terminatorEnd&&(o.terminatorEnd+=(r.end?"|":"")+s.terminatorEnd)), +r.illegal&&(o.illegalRe=n(r.illegal)), +r.contains||(r.contains=[]),r.contains=[].concat(...r.contains.map((e=>(e=>(e.variants&&!e.cachedVariants&&(e.cachedVariants=e.variants.map((n=>a(e,{ +variants:null},n)))),e.cachedVariants?e.cachedVariants:Q(e)?a(e,{ +starts:e.starts?a(e.starts):null +}):Object.isFrozen(e)?a(e):e))("self"===e?r:e)))),r.contains.forEach((e=>{t(e,o) +})),r.starts&&t(r.starts,s),o.matcher=(e=>{const n=new i +;return e.contains.forEach((e=>n.addRule(e.begin,{rule:e,type:"begin" +}))),e.terminatorEnd&&n.addRule(e.terminatorEnd,{type:"end" +}),e.illegal&&n.addRule(e.illegal,{type:"illegal"}),n})(o),o}(e)}function Q(e){ +return!!e&&(e.endsWithParent||Q(e.starts))}class X extends Error{ +constructor(e,n){super(e),this.name="HTMLInjectionError",this.html=n}} +const V=t,J=a,Y=Symbol("nomatch"),ee=t=>{ +const a=Object.create(null),i=Object.create(null),r=[];let s=!0 +;const o="Could not find the language '{}', did you forget to load/include a language module?",c={ +disableAutodetect:!0,name:"Plain text",contains:[]};let p={ +ignoreUnescapedHTML:!1,throwUnescapedHTML:!1,noHighlightRe:/^(no-?highlight)$/i, +languageDetectRe:/\blang(?:uage)?-([\w-]+)\b/i,classPrefix:"hljs-", +cssSelector:"pre code",languages:null,__emitter:l};function _(e){ +return p.noHighlightRe.test(e)}function h(e,n,t){let a="",i="" +;"object"==typeof n?(a=e, +t=n.ignoreIllegals,i=n.language):(q("10.7.0","highlight(lang, code, ...args) has been deprecated."), +q("10.7.0","Please use highlight(code, options) instead.\nhttps://github.com/highlightjs/highlight.js/issues/2277"), +i=e,a=n),void 0===t&&(t=!0);const r={code:a,language:i};O("before:highlight",r) +;const s=r.result?r.result:f(r.language,r.code,t) +;return s.code=r.code,O("after:highlight",s),s}function f(e,t,i,r){ +const l=Object.create(null);function c(){if(!O.keywords)return void A.addText(S) +;let e=0;O.keywordPatternRe.lastIndex=0;let n=O.keywordPatternRe.exec(S),t="" +;for(;n;){t+=S.substring(e,n.index) +;const i=v.case_insensitive?n[0].toLowerCase():n[0],r=(a=i,O.keywords[a]);if(r){ +const[e,a]=r +;if(A.addText(t),t="",l[i]=(l[i]||0)+1,l[i]<=7&&(C+=a),e.startsWith("_"))t+=n[0];else{ +const t=v.classNameAliases[e]||e;g(n[0],t)}}else t+=n[0] +;e=O.keywordPatternRe.lastIndex,n=O.keywordPatternRe.exec(S)}var a +;t+=S.substring(e),A.addText(t)}function d(){null!=O.subLanguage?(()=>{ +if(""===S)return;let e=null;if("string"==typeof O.subLanguage){ +if(!a[O.subLanguage])return void A.addText(S) +;e=f(O.subLanguage,S,!0,M[O.subLanguage]),M[O.subLanguage]=e._top +}else e=E(S,O.subLanguage.length?O.subLanguage:null) +;O.relevance>0&&(C+=e.relevance),A.__addSublanguage(e._emitter,e.language) +})():c(),S=""}function g(e,n){ +""!==e&&(A.startScope(n),A.addText(e),A.endScope())}function u(e,n){let t=1 +;const a=n.length-1;for(;t<=a;){if(!e._emit[t]){t++;continue} +const a=v.classNameAliases[e[t]]||e[t],i=n[t];a?g(i,a):(S=i,c(),S=""),t++}} +function b(e,n){ +return e.scope&&"string"==typeof e.scope&&A.openNode(v.classNameAliases[e.scope]||e.scope), +e.beginScope&&(e.beginScope._wrap?(g(S,v.classNameAliases[e.beginScope._wrap]||e.beginScope._wrap), +S=""):e.beginScope._multi&&(u(e.beginScope,n),S="")),O=Object.create(e,{parent:{ +value:O}}),O}function m(e,t,a){let i=((e,n)=>{const t=e&&e.exec(n) +;return t&&0===t.index})(e.endRe,a);if(i){if(e["on:end"]){const a=new n(e) +;e["on:end"](t,a),a.isMatchIgnored&&(i=!1)}if(i){ +for(;e.endsParent&&e.parent;)e=e.parent;return e}} +if(e.endsWithParent)return m(e.parent,t,a)}function _(e){ +return 0===O.matcher.regexIndex?(S+=e[0],1):(D=!0,0)}function h(e){ +const n=e[0],a=t.substring(e.index),i=m(O,e,a);if(!i)return Y;const r=O +;O.endScope&&O.endScope._wrap?(d(), +g(n,O.endScope._wrap)):O.endScope&&O.endScope._multi?(d(), +u(O.endScope,e)):r.skip?S+=n:(r.returnEnd||r.excludeEnd||(S+=n), +d(),r.excludeEnd&&(S=n));do{ +O.scope&&A.closeNode(),O.skip||O.subLanguage||(C+=O.relevance),O=O.parent +}while(O!==i.parent);return i.starts&&b(i.starts,e),r.returnEnd?0:n.length} +let y={};function w(a,r){const o=r&&r[0];if(S+=a,null==o)return d(),0 +;if("begin"===y.type&&"end"===r.type&&y.index===r.index&&""===o){ +if(S+=t.slice(r.index,r.index+1),!s){const n=Error(`0 width match regex (${e})`) +;throw n.languageName=e,n.badRule=y.rule,n}return 1} +if(y=r,"begin"===r.type)return(e=>{ +const t=e[0],a=e.rule,i=new n(a),r=[a.__beforeBegin,a["on:begin"]] +;for(const n of r)if(n&&(n(e,i),i.isMatchIgnored))return _(t) +;return a.skip?S+=t:(a.excludeBegin&&(S+=t), +d(),a.returnBegin||a.excludeBegin||(S=t)),b(a,e),a.returnBegin?0:t.length})(r) +;if("illegal"===r.type&&!i){ +const e=Error('Illegal lexeme "'+o+'" for mode "'+(O.scope||"")+'"') +;throw e.mode=O,e}if("end"===r.type){const e=h(r);if(e!==Y)return e} +if("illegal"===r.type&&""===o)return S+="\n",1 +;if(R>1e5&&R>3*r.index)throw Error("potential infinite loop, way more iterations than matches") +;return S+=o,o.length}const v=N(e) +;if(!v)throw P(o.replace("{}",e)),Error('Unknown language: "'+e+'"') +;const k=W(v);let x="",O=r||k;const M={},A=new p.__emitter(p);(()=>{const e=[] +;for(let n=O;n!==v;n=n.parent)n.scope&&e.unshift(n.scope) +;e.forEach((e=>A.openNode(e)))})();let S="",C=0,T=0,R=0,D=!1;try{ +if(v.__emitTokens)v.__emitTokens(t,A);else{for(O.matcher.considerAll();;){ +R++,D?D=!1:O.matcher.considerAll(),O.matcher.lastIndex=T +;const e=O.matcher.exec(t);if(!e)break;const n=w(t.substring(T,e.index),e) +;T=e.index+n}w(t.substring(T))}return A.finalize(),x=A.toHTML(),{language:e, +value:x,relevance:C,illegal:!1,_emitter:A,_top:O}}catch(n){ +if(n.message&&n.message.includes("Illegal"))return{language:e,value:V(t), +illegal:!0,relevance:0,_illegalBy:{message:n.message,index:T, +context:t.slice(T-100,T+100),mode:n.mode,resultSoFar:x},_emitter:A};if(s)return{ +language:e,value:V(t),illegal:!1,relevance:0,errorRaised:n,_emitter:A,_top:O} +;throw n}}function E(e,n){n=n||p.languages||Object.keys(a);const t=(e=>{ +const n={value:V(e),illegal:!1,relevance:0,_top:c,_emitter:new p.__emitter(p)} +;return n._emitter.addText(e),n})(e),i=n.filter(N).filter(x).map((n=>f(n,e,!1))) +;i.unshift(t);const r=i.sort(((e,n)=>{ +if(e.relevance!==n.relevance)return n.relevance-e.relevance +;if(e.language&&n.language){if(N(e.language).supersetOf===n.language)return 1 +;if(N(n.language).supersetOf===e.language)return-1}return 0})),[s,o]=r,l=s +;return l.secondBest=o,l}function y(e){let n=null;const t=(e=>{ +let n=e.className+" ";n+=e.parentNode?e.parentNode.className:"" +;const t=p.languageDetectRe.exec(n);if(t){const n=N(t[1]) +;return n||(K(o.replace("{}",t[1])), +K("Falling back to no-highlight mode for this block.",e)),n?t[1]:"no-highlight"} +return n.split(/\s+/).find((e=>_(e)||N(e)))})(e);if(_(t))return +;if(O("before:highlightElement",{el:e,language:t +}),e.dataset.highlighted)return void console.log("Element previously highlighted. To highlight again, first unset `dataset.highlighted`.",e) +;if(e.children.length>0&&(p.ignoreUnescapedHTML||(console.warn("One of your code blocks includes unescaped HTML. This is a potentially serious security risk."), +console.warn("https://github.com/highlightjs/highlight.js/wiki/security"), +console.warn("The element with unescaped HTML:"), +console.warn(e)),p.throwUnescapedHTML))throw new X("One of your code blocks includes unescaped HTML.",e.innerHTML) +;n=e;const a=n.textContent,r=t?h(a,{language:t,ignoreIllegals:!0}):E(a) +;e.innerHTML=r.value,e.dataset.highlighted="yes",((e,n,t)=>{const a=n&&i[n]||t +;e.classList.add("hljs"),e.classList.add("language-"+a) +})(e,t,r.language),e.result={language:r.language,re:r.relevance, +relevance:r.relevance},r.secondBest&&(e.secondBest={ +language:r.secondBest.language,relevance:r.secondBest.relevance +}),O("after:highlightElement",{el:e,result:r,text:a})}let w=!1;function v(){ +if("loading"===document.readyState)return w||window.addEventListener("DOMContentLoaded",(()=>{ +v()}),!1),void(w=!0);document.querySelectorAll(p.cssSelector).forEach(y)} +function N(e){return e=(e||"").toLowerCase(),a[e]||a[i[e]]} +function k(e,{languageName:n}){"string"==typeof e&&(e=[e]),e.forEach((e=>{ +i[e.toLowerCase()]=n}))}function x(e){const n=N(e) +;return n&&!n.disableAutodetect}function O(e,n){const t=e;r.forEach((e=>{ +e[t]&&e[t](n)}))}Object.assign(t,{highlight:h,highlightAuto:E,highlightAll:v, +highlightElement:y, +highlightBlock:e=>(q("10.7.0","highlightBlock will be removed entirely in v12.0"), +q("10.7.0","Please use highlightElement now."),y(e)),configure:e=>{p=J(p,e)}, +initHighlighting:()=>{ +v(),q("10.6.0","initHighlighting() deprecated. Use highlightAll() now.")}, +initHighlightingOnLoad:()=>{ +v(),q("10.6.0","initHighlightingOnLoad() deprecated. Use highlightAll() now.") +},registerLanguage:(e,n)=>{let i=null;try{i=n(t)}catch(n){ +if(P("Language definition for '{}' could not be registered.".replace("{}",e)), +!s)throw n;P(n),i=c} +i.name||(i.name=e),a[e]=i,i.rawDefinition=n.bind(null,t),i.aliases&&k(i.aliases,{ +languageName:e})},unregisterLanguage:e=>{delete a[e] +;for(const n of Object.keys(i))i[n]===e&&delete i[n]}, +listLanguages:()=>Object.keys(a),getLanguage:N,registerAliases:k, +autoDetection:x,inherit:J,addPlugin:e=>{(e=>{ +e["before:highlightBlock"]&&!e["before:highlightElement"]&&(e["before:highlightElement"]=n=>{ +e["before:highlightBlock"](Object.assign({block:n.el},n)) +}),e["after:highlightBlock"]&&!e["after:highlightElement"]&&(e["after:highlightElement"]=n=>{ +e["after:highlightBlock"](Object.assign({block:n.el},n))})})(e),r.push(e)}, +removePlugin:e=>{const n=r.indexOf(e);-1!==n&&r.splice(n,1)}}),t.debugMode=()=>{ +s=!1},t.safeMode=()=>{s=!0},t.versionString="11.11.1",t.regex={concat:b, +lookahead:d,either:m,optional:u,anyNumberOfTimes:g} +;for(const n in C)"object"==typeof C[n]&&e(C[n]);return Object.assign(t,C),t +},ne=ee({});ne.newInstance=()=>ee({});const te=e=>({IMPORTANT:{scope:"meta", +begin:"!important"},BLOCK_COMMENT:e.C_BLOCK_COMMENT_MODE,HEXCOLOR:{ +scope:"number",begin:/#(([0-9a-fA-F]{3,4})|(([0-9a-fA-F]{2}){3,4}))\b/}, +FUNCTION_DISPATCH:{className:"built_in",begin:/[\w-]+(?=\()/}, +ATTRIBUTE_SELECTOR_MODE:{scope:"selector-attr",begin:/\[/,end:/\]/,illegal:"$", +contains:[e.APOS_STRING_MODE,e.QUOTE_STRING_MODE]},CSS_NUMBER_MODE:{ +scope:"number", +begin:e.NUMBER_RE+"(%|em|ex|ch|rem|vw|vh|vmin|vmax|cm|mm|in|pt|pc|px|deg|grad|rad|turn|s|ms|Hz|kHz|dpi|dpcm|dppx)?", +relevance:0},CSS_VARIABLE:{className:"attr",begin:/--[A-Za-z_][A-Za-z0-9_-]*/} +}),ae=["a","abbr","address","article","aside","audio","b","blockquote","body","button","canvas","caption","cite","code","dd","del","details","dfn","div","dl","dt","em","fieldset","figcaption","figure","footer","form","h1","h2","h3","h4","h5","h6","header","hgroup","html","i","iframe","img","input","ins","kbd","label","legend","li","main","mark","menu","nav","object","ol","optgroup","option","p","picture","q","quote","samp","section","select","source","span","strong","summary","sup","table","tbody","td","textarea","tfoot","th","thead","time","tr","ul","var","video","defs","g","marker","mask","pattern","svg","switch","symbol","feBlend","feColorMatrix","feComponentTransfer","feComposite","feConvolveMatrix","feDiffuseLighting","feDisplacementMap","feFlood","feGaussianBlur","feImage","feMerge","feMorphology","feOffset","feSpecularLighting","feTile","feTurbulence","linearGradient","radialGradient","stop","circle","ellipse","image","line","path","polygon","polyline","rect","text","use","textPath","tspan","foreignObject","clipPath"],ie=["any-hover","any-pointer","aspect-ratio","color","color-gamut","color-index","device-aspect-ratio","device-height","device-width","display-mode","forced-colors","grid","height","hover","inverted-colors","monochrome","orientation","overflow-block","overflow-inline","pointer","prefers-color-scheme","prefers-contrast","prefers-reduced-motion","prefers-reduced-transparency","resolution","scan","scripting","update","width","min-width","max-width","min-height","max-height"].sort().reverse(),re=["active","any-link","blank","checked","current","default","defined","dir","disabled","drop","empty","enabled","first","first-child","first-of-type","fullscreen","future","focus","focus-visible","focus-within","has","host","host-context","hover","indeterminate","in-range","invalid","is","lang","last-child","last-of-type","left","link","local-link","not","nth-child","nth-col","nth-last-child","nth-last-col","nth-last-of-type","nth-of-type","only-child","only-of-type","optional","out-of-range","past","placeholder-shown","read-only","read-write","required","right","root","scope","target","target-within","user-invalid","valid","visited","where"].sort().reverse(),se=["after","backdrop","before","cue","cue-region","first-letter","first-line","grammar-error","marker","part","placeholder","selection","slotted","spelling-error"].sort().reverse(),oe=["accent-color","align-content","align-items","align-self","alignment-baseline","all","anchor-name","animation","animation-composition","animation-delay","animation-direction","animation-duration","animation-fill-mode","animation-iteration-count","animation-name","animation-play-state","animation-range","animation-range-end","animation-range-start","animation-timeline","animation-timing-function","appearance","aspect-ratio","backdrop-filter","backface-visibility","background","background-attachment","background-blend-mode","background-clip","background-color","background-image","background-origin","background-position","background-position-x","background-position-y","background-repeat","background-size","baseline-shift","block-size","border","border-block","border-block-color","border-block-end","border-block-end-color","border-block-end-style","border-block-end-width","border-block-start","border-block-start-color","border-block-start-style","border-block-start-width","border-block-style","border-block-width","border-bottom","border-bottom-color","border-bottom-left-radius","border-bottom-right-radius","border-bottom-style","border-bottom-width","border-collapse","border-color","border-end-end-radius","border-end-start-radius","border-image","border-image-outset","border-image-repeat","border-image-slice","border-image-source","border-image-width","border-inline","border-inline-color","border-inline-end","border-inline-end-color","border-inline-end-style","border-inline-end-width","border-inline-start","border-inline-start-color","border-inline-start-style","border-inline-start-width","border-inline-style","border-inline-width","border-left","border-left-color","border-left-style","border-left-width","border-radius","border-right","border-right-color","border-right-style","border-right-width","border-spacing","border-start-end-radius","border-start-start-radius","border-style","border-top","border-top-color","border-top-left-radius","border-top-right-radius","border-top-style","border-top-width","border-width","bottom","box-align","box-decoration-break","box-direction","box-flex","box-flex-group","box-lines","box-ordinal-group","box-orient","box-pack","box-shadow","box-sizing","break-after","break-before","break-inside","caption-side","caret-color","clear","clip","clip-path","clip-rule","color","color-interpolation","color-interpolation-filters","color-profile","color-rendering","color-scheme","column-count","column-fill","column-gap","column-rule","column-rule-color","column-rule-style","column-rule-width","column-span","column-width","columns","contain","contain-intrinsic-block-size","contain-intrinsic-height","contain-intrinsic-inline-size","contain-intrinsic-size","contain-intrinsic-width","container","container-name","container-type","content","content-visibility","counter-increment","counter-reset","counter-set","cue","cue-after","cue-before","cursor","cx","cy","direction","display","dominant-baseline","empty-cells","enable-background","field-sizing","fill","fill-opacity","fill-rule","filter","flex","flex-basis","flex-direction","flex-flow","flex-grow","flex-shrink","flex-wrap","float","flood-color","flood-opacity","flow","font","font-display","font-family","font-feature-settings","font-kerning","font-language-override","font-optical-sizing","font-palette","font-size","font-size-adjust","font-smooth","font-smoothing","font-stretch","font-style","font-synthesis","font-synthesis-position","font-synthesis-small-caps","font-synthesis-style","font-synthesis-weight","font-variant","font-variant-alternates","font-variant-caps","font-variant-east-asian","font-variant-emoji","font-variant-ligatures","font-variant-numeric","font-variant-position","font-variation-settings","font-weight","forced-color-adjust","gap","glyph-orientation-horizontal","glyph-orientation-vertical","grid","grid-area","grid-auto-columns","grid-auto-flow","grid-auto-rows","grid-column","grid-column-end","grid-column-start","grid-gap","grid-row","grid-row-end","grid-row-start","grid-template","grid-template-areas","grid-template-columns","grid-template-rows","hanging-punctuation","height","hyphenate-character","hyphenate-limit-chars","hyphens","icon","image-orientation","image-rendering","image-resolution","ime-mode","initial-letter","initial-letter-align","inline-size","inset","inset-area","inset-block","inset-block-end","inset-block-start","inset-inline","inset-inline-end","inset-inline-start","isolation","justify-content","justify-items","justify-self","kerning","left","letter-spacing","lighting-color","line-break","line-height","line-height-step","list-style","list-style-image","list-style-position","list-style-type","margin","margin-block","margin-block-end","margin-block-start","margin-bottom","margin-inline","margin-inline-end","margin-inline-start","margin-left","margin-right","margin-top","margin-trim","marker","marker-end","marker-mid","marker-start","marks","mask","mask-border","mask-border-mode","mask-border-outset","mask-border-repeat","mask-border-slice","mask-border-source","mask-border-width","mask-clip","mask-composite","mask-image","mask-mode","mask-origin","mask-position","mask-repeat","mask-size","mask-type","masonry-auto-flow","math-depth","math-shift","math-style","max-block-size","max-height","max-inline-size","max-width","min-block-size","min-height","min-inline-size","min-width","mix-blend-mode","nav-down","nav-index","nav-left","nav-right","nav-up","none","normal","object-fit","object-position","offset","offset-anchor","offset-distance","offset-path","offset-position","offset-rotate","opacity","order","orphans","outline","outline-color","outline-offset","outline-style","outline-width","overflow","overflow-anchor","overflow-block","overflow-clip-margin","overflow-inline","overflow-wrap","overflow-x","overflow-y","overlay","overscroll-behavior","overscroll-behavior-block","overscroll-behavior-inline","overscroll-behavior-x","overscroll-behavior-y","padding","padding-block","padding-block-end","padding-block-start","padding-bottom","padding-inline","padding-inline-end","padding-inline-start","padding-left","padding-right","padding-top","page","page-break-after","page-break-before","page-break-inside","paint-order","pause","pause-after","pause-before","perspective","perspective-origin","place-content","place-items","place-self","pointer-events","position","position-anchor","position-visibility","print-color-adjust","quotes","r","resize","rest","rest-after","rest-before","right","rotate","row-gap","ruby-align","ruby-position","scale","scroll-behavior","scroll-margin","scroll-margin-block","scroll-margin-block-end","scroll-margin-block-start","scroll-margin-bottom","scroll-margin-inline","scroll-margin-inline-end","scroll-margin-inline-start","scroll-margin-left","scroll-margin-right","scroll-margin-top","scroll-padding","scroll-padding-block","scroll-padding-block-end","scroll-padding-block-start","scroll-padding-bottom","scroll-padding-inline","scroll-padding-inline-end","scroll-padding-inline-start","scroll-padding-left","scroll-padding-right","scroll-padding-top","scroll-snap-align","scroll-snap-stop","scroll-snap-type","scroll-timeline","scroll-timeline-axis","scroll-timeline-name","scrollbar-color","scrollbar-gutter","scrollbar-width","shape-image-threshold","shape-margin","shape-outside","shape-rendering","speak","speak-as","src","stop-color","stop-opacity","stroke","stroke-dasharray","stroke-dashoffset","stroke-linecap","stroke-linejoin","stroke-miterlimit","stroke-opacity","stroke-width","tab-size","table-layout","text-align","text-align-all","text-align-last","text-anchor","text-combine-upright","text-decoration","text-decoration-color","text-decoration-line","text-decoration-skip","text-decoration-skip-ink","text-decoration-style","text-decoration-thickness","text-emphasis","text-emphasis-color","text-emphasis-position","text-emphasis-style","text-indent","text-justify","text-orientation","text-overflow","text-rendering","text-shadow","text-size-adjust","text-transform","text-underline-offset","text-underline-position","text-wrap","text-wrap-mode","text-wrap-style","timeline-scope","top","touch-action","transform","transform-box","transform-origin","transform-style","transition","transition-behavior","transition-delay","transition-duration","transition-property","transition-timing-function","translate","unicode-bidi","user-modify","user-select","vector-effect","vertical-align","view-timeline","view-timeline-axis","view-timeline-inset","view-timeline-name","view-transition-name","visibility","voice-balance","voice-duration","voice-family","voice-pitch","voice-range","voice-rate","voice-stress","voice-volume","white-space","white-space-collapse","widows","width","will-change","word-break","word-spacing","word-wrap","writing-mode","x","y","z-index","zoom"].sort().reverse(),le=re.concat(se).sort().reverse() +;var ce="[0-9](_*[0-9])*",de=`\\.(${ce})`,ge="[0-9a-fA-F](_*[0-9a-fA-F])*",ue={ +className:"number",variants:[{ +begin:`(\\b(${ce})((${de})|\\.)?|(${de}))[eE][+-]?(${ce})[fFdD]?\\b`},{ +begin:`\\b(${ce})((${de})[fFdD]?\\b|\\.([fFdD]\\b)?)`},{ +begin:`(${de})[fFdD]?\\b`},{begin:`\\b(${ce})[fFdD]\\b`},{ +begin:`\\b0[xX]((${ge})\\.?|(${ge})?\\.(${ge}))[pP][+-]?(${ce})[fFdD]?\\b`},{ +begin:"\\b(0|[1-9](_*[0-9])*)[lL]?\\b"},{begin:`\\b0[xX](${ge})[lL]?\\b`},{ +begin:"\\b0(_*[0-7])*[lL]?\\b"},{begin:"\\b0[bB][01](_*[01])*[lL]?\\b"}], +relevance:0};function be(e,n,t){return-1===t?"":e.replace(n,(a=>be(e,n,t-1)))} +const me="[A-Za-z$_][0-9A-Za-z$_]*",pe=["as","in","of","if","for","while","finally","var","new","function","do","return","void","else","break","catch","instanceof","with","throw","case","default","try","switch","continue","typeof","delete","let","yield","const","class","debugger","async","await","static","import","from","export","extends","using"],_e=["true","false","null","undefined","NaN","Infinity"],he=["Object","Function","Boolean","Symbol","Math","Date","Number","BigInt","String","RegExp","Array","Float32Array","Float64Array","Int8Array","Uint8Array","Uint8ClampedArray","Int16Array","Int32Array","Uint16Array","Uint32Array","BigInt64Array","BigUint64Array","Set","Map","WeakSet","WeakMap","ArrayBuffer","SharedArrayBuffer","Atomics","DataView","JSON","Promise","Generator","GeneratorFunction","AsyncFunction","Reflect","Proxy","Intl","WebAssembly"],fe=["Error","EvalError","InternalError","RangeError","ReferenceError","SyntaxError","TypeError","URIError"],Ee=["setInterval","setTimeout","clearInterval","clearTimeout","require","exports","eval","isFinite","isNaN","parseFloat","parseInt","decodeURI","decodeURIComponent","encodeURI","encodeURIComponent","escape","unescape"],ye=["arguments","this","super","console","window","document","localStorage","sessionStorage","module","global"],we=[].concat(Ee,he,fe) +;function ve(e){const n=e.regex,t=me,a={begin:/<[A-Za-z0-9\\._:-]+/, +end:/\/[A-Za-z0-9\\._:-]+>|\/>/,isTrulyOpeningTag:(e,n)=>{ +const t=e[0].length+e.index,a=e.input[t] +;if("<"===a||","===a)return void n.ignoreMatch();let i +;">"===a&&(((e,{after:n})=>{const t="e+"\\s*\\(")), +n.concat("(?!",N.join("|"),")")),t,n.lookahead(/\s*\(/)), +className:"title.function",relevance:0};var N;const k={ +begin:n.concat(/\./,n.lookahead(n.concat(t,/(?![0-9A-Za-z$_(])/))),end:t, +excludeBegin:!0,keywords:"prototype",className:"property",relevance:0},x={ +match:[/get|set/,/\s+/,t,/(?=\()/],className:{1:"keyword",3:"title.function"}, +contains:[{begin:/\(\)/},f] +},O="(\\([^()]*(\\([^()]*(\\([^()]*\\)[^()]*)*\\)[^()]*)*\\)|"+e.UNDERSCORE_IDENT_RE+")\\s*=>",M={ +match:[/const|var|let/,/\s+/,t,/\s*/,/=\s*/,/(async\s*)?/,n.lookahead(O)], +keywords:"async",className:{1:"keyword",3:"title.function"},contains:[f]} +;return{name:"JavaScript",aliases:["js","jsx","mjs","cjs"],keywords:i,exports:{ +PARAMS_CONTAINS:h,CLASS_REFERENCE:y},illegal:/#(?![$_A-z])/, +contains:[e.SHEBANG({label:"shebang",binary:"node",relevance:5}),{ +label:"use_strict",className:"meta",relevance:10, +begin:/^\s*['"]use (strict|asm)['"]/ +},e.APOS_STRING_MODE,e.QUOTE_STRING_MODE,d,g,u,b,m,{match:/\$\d+/},l,y,{ +scope:"attr",match:t+n.lookahead(":"),relevance:0},M,{ +begin:"("+e.RE_STARTERS_RE+"|\\b(case|return|throw)\\b)\\s*", +keywords:"return throw case",relevance:0,contains:[m,e.REGEXP_MODE,{ +className:"function",begin:O,returnBegin:!0,end:"\\s*=>",contains:[{ +className:"params",variants:[{begin:e.UNDERSCORE_IDENT_RE,relevance:0},{ +className:null,begin:/\(\s*\)/,skip:!0},{begin:/(\s*)\(/,end:/\)/, +excludeBegin:!0,excludeEnd:!0,keywords:i,contains:h}]}]},{begin:/,/,relevance:0 +},{match:/\s+/,relevance:0},{variants:[{begin:"<>",end:""},{ +match:/<[A-Za-z0-9\\._:-]+\s*\/>/},{begin:a.begin, +"on:begin":a.isTrulyOpeningTag,end:a.end}],subLanguage:"xml",contains:[{ +begin:a.begin,end:a.end,skip:!0,contains:["self"]}]}]},w,{ +beginKeywords:"while if switch catch for"},{ +begin:"\\b(?!function)"+e.UNDERSCORE_IDENT_RE+"\\([^()]*(\\([^()]*(\\([^()]*\\)[^()]*)*\\)[^()]*)*\\)\\s*\\{", +returnBegin:!0,label:"func.def",contains:[f,e.inherit(e.TITLE_MODE,{begin:t, +className:"title.function"})]},{match:/\.\.\./,relevance:0},k,{match:"\\$"+t, +relevance:0},{match:[/\bconstructor(?=\s*\()/],className:{1:"title.function"}, +contains:[f]},v,{relevance:0,match:/\b[A-Z][A-Z_0-9]+\b/, +className:"variable.constant"},E,x,{match:/\$[(.]/}]}} +const Ne=e=>b(/\b/,e,/\w$/.test(e)?/\b/:/\B/),ke=["Protocol","Type"].map(Ne),xe=["init","self"].map(Ne),Oe=["Any","Self"],Me=["actor","any","associatedtype","async","await",/as\?/,/as!/,"as","borrowing","break","case","catch","class","consume","consuming","continue","convenience","copy","default","defer","deinit","didSet","distributed","do","dynamic","each","else","enum","extension","fallthrough",/fileprivate\(set\)/,"fileprivate","final","for","func","get","guard","if","import","indirect","infix",/init\?/,/init!/,"inout",/internal\(set\)/,"internal","in","is","isolated","nonisolated","lazy","let","macro","mutating","nonmutating",/open\(set\)/,"open","operator","optional","override","package","postfix","precedencegroup","prefix",/private\(set\)/,"private","protocol",/public\(set\)/,"public","repeat","required","rethrows","return","set","some","static","struct","subscript","super","switch","throws","throw",/try\?/,/try!/,"try","typealias",/unowned\(safe\)/,/unowned\(unsafe\)/,"unowned","var","weak","where","while","willSet"],Ae=["false","nil","true"],Se=["assignment","associativity","higherThan","left","lowerThan","none","right"],Ce=["#colorLiteral","#column","#dsohandle","#else","#elseif","#endif","#error","#file","#fileID","#fileLiteral","#filePath","#function","#if","#imageLiteral","#keyPath","#line","#selector","#sourceLocation","#warning"],Te=["abs","all","any","assert","assertionFailure","debugPrint","dump","fatalError","getVaList","isKnownUniquelyReferenced","max","min","numericCast","pointwiseMax","pointwiseMin","precondition","preconditionFailure","print","readLine","repeatElement","sequence","stride","swap","swift_unboxFromSwiftValueWithType","transcode","type","unsafeBitCast","unsafeDowncast","withExtendedLifetime","withUnsafeMutablePointer","withUnsafePointer","withVaList","withoutActuallyEscaping","zip"],Re=m(/[/=\-+!*%<>&|^~?]/,/[\u00A1-\u00A7]/,/[\u00A9\u00AB]/,/[\u00AC\u00AE]/,/[\u00B0\u00B1]/,/[\u00B6\u00BB\u00BF\u00D7\u00F7]/,/[\u2016-\u2017]/,/[\u2020-\u2027]/,/[\u2030-\u203E]/,/[\u2041-\u2053]/,/[\u2055-\u205E]/,/[\u2190-\u23FF]/,/[\u2500-\u2775]/,/[\u2794-\u2BFF]/,/[\u2E00-\u2E7F]/,/[\u3001-\u3003]/,/[\u3008-\u3020]/,/[\u3030]/),De=m(Re,/[\u0300-\u036F]/,/[\u1DC0-\u1DFF]/,/[\u20D0-\u20FF]/,/[\uFE00-\uFE0F]/,/[\uFE20-\uFE2F]/),Ie=b(Re,De,"*"),Le=m(/[a-zA-Z_]/,/[\u00A8\u00AA\u00AD\u00AF\u00B2-\u00B5\u00B7-\u00BA]/,/[\u00BC-\u00BE\u00C0-\u00D6\u00D8-\u00F6\u00F8-\u00FF]/,/[\u0100-\u02FF\u0370-\u167F\u1681-\u180D\u180F-\u1DBF]/,/[\u1E00-\u1FFF]/,/[\u200B-\u200D\u202A-\u202E\u203F-\u2040\u2054\u2060-\u206F]/,/[\u2070-\u20CF\u2100-\u218F\u2460-\u24FF\u2776-\u2793]/,/[\u2C00-\u2DFF\u2E80-\u2FFF]/,/[\u3004-\u3007\u3021-\u302F\u3031-\u303F\u3040-\uD7FF]/,/[\uF900-\uFD3D\uFD40-\uFDCF\uFDF0-\uFE1F\uFE30-\uFE44]/,/[\uFE47-\uFEFE\uFF00-\uFFFD]/),Be=m(Le,/\d/,/[\u0300-\u036F\u1DC0-\u1DFF\u20D0-\u20FF\uFE20-\uFE2F]/),$e=b(Le,Be,"*"),Fe=b(/[A-Z]/,Be,"*"),ze=["attached","autoclosure",b(/convention\(/,m("swift","block","c"),/\)/),"discardableResult","dynamicCallable","dynamicMemberLookup","escaping","freestanding","frozen","GKInspectable","IBAction","IBDesignable","IBInspectable","IBOutlet","IBSegueAction","inlinable","main","nonobjc","NSApplicationMain","NSCopying","NSManaged",b(/objc\(/,$e,/\)/),"objc","objcMembers","propertyWrapper","requires_stored_property_inits","resultBuilder","Sendable","testable","UIApplicationMain","unchecked","unknown","usableFromInline","warn_unqualified_access"],je=["iOS","iOSApplicationExtension","macOS","macOSApplicationExtension","macCatalyst","macCatalystApplicationExtension","watchOS","watchOSApplicationExtension","tvOS","tvOSApplicationExtension","swift"] +;var Ue=Object.freeze({__proto__:null,grmr_bash:e=>{const n=e.regex,t={},a={ +begin:/\$\{/,end:/\}/,contains:["self",{begin:/:-/,contains:[t]}]} +;Object.assign(t,{className:"variable",variants:[{ +begin:n.concat(/\$[\w\d#@][\w\d_]*/,"(?![\\w\\d])(?![$])")},a]});const i={ +className:"subst",begin:/\$\(/,end:/\)/,contains:[e.BACKSLASH_ESCAPE] +},r=e.inherit(e.COMMENT(),{match:[/(^|\s)/,/#.*$/],scope:{2:"comment"}}),s={ +begin:/<<-?\s*(?=\w+)/,starts:{contains:[e.END_SAME_AS_BEGIN({begin:/(\w+)/, +end:/(\w+)/,className:"string"})]}},o={className:"string",begin:/"/,end:/"/, +contains:[e.BACKSLASH_ESCAPE,t,i]};i.contains.push(o);const l={begin:/\$?\(\(/, +end:/\)\)/,contains:[{begin:/\d+#[0-9a-f]+/,className:"number"},e.NUMBER_MODE,t] +},c=e.SHEBANG({binary:"(fish|bash|zsh|sh|csh|ksh|tcsh|dash|scsh)",relevance:10 +}),d={className:"function",begin:/\w[\w\d_]*\s*\(\s*\)\s*\{/,returnBegin:!0, +contains:[e.inherit(e.TITLE_MODE,{begin:/\w[\w\d_]*/})],relevance:0};return{ +name:"Bash",aliases:["sh","zsh"],keywords:{$pattern:/\b[a-z][a-z0-9._-]+\b/, +keyword:["if","then","else","elif","fi","time","for","while","until","in","do","done","case","esac","coproc","function","select"], +literal:["true","false"], +built_in:["break","cd","continue","eval","exec","exit","export","getopts","hash","pwd","readonly","return","shift","test","times","trap","umask","unset","alias","bind","builtin","caller","command","declare","echo","enable","help","let","local","logout","mapfile","printf","read","readarray","source","sudo","type","typeset","ulimit","unalias","set","shopt","autoload","bg","bindkey","bye","cap","chdir","clone","comparguments","compcall","compctl","compdescribe","compfiles","compgroups","compquote","comptags","comptry","compvalues","dirs","disable","disown","echotc","echoti","emulate","fc","fg","float","functions","getcap","getln","history","integer","jobs","kill","limit","log","noglob","popd","print","pushd","pushln","rehash","sched","setcap","setopt","stat","suspend","ttyctl","unfunction","unhash","unlimit","unsetopt","vared","wait","whence","where","which","zcompile","zformat","zftp","zle","zmodload","zparseopts","zprof","zpty","zregexparse","zsocket","zstyle","ztcp","chcon","chgrp","chown","chmod","cp","dd","df","dir","dircolors","ln","ls","mkdir","mkfifo","mknod","mktemp","mv","realpath","rm","rmdir","shred","sync","touch","truncate","vdir","b2sum","base32","base64","cat","cksum","comm","csplit","cut","expand","fmt","fold","head","join","md5sum","nl","numfmt","od","paste","ptx","pr","sha1sum","sha224sum","sha256sum","sha384sum","sha512sum","shuf","sort","split","sum","tac","tail","tr","tsort","unexpand","uniq","wc","arch","basename","chroot","date","dirname","du","echo","env","expr","factor","groups","hostid","id","link","logname","nice","nohup","nproc","pathchk","pinky","printenv","printf","pwd","readlink","runcon","seq","sleep","stat","stdbuf","stty","tee","test","timeout","tty","uname","unlink","uptime","users","who","whoami","yes"] +},contains:[c,e.SHEBANG(),d,l,r,s,{match:/(\/[a-z._-]+)+/},o,{match:/\\"/},{ +className:"string",begin:/'/,end:/'/},{match:/\\'/},t]}},grmr_c:e=>{ +const n=e.regex,t=e.COMMENT("//","$",{contains:[{begin:/\\\n/}] +}),a="decltype\\(auto\\)",i="[a-zA-Z_]\\w*::",r="("+a+"|"+n.optional(i)+"[a-zA-Z_]\\w*"+n.optional("<[^<>]+>")+")",s={ +className:"type",variants:[{begin:"\\b[a-z\\d_]*_t\\b"},{ +match:/\batomic_[a-z]{3,6}\b/}]},o={className:"string",variants:[{ +begin:'(u8?|U|L)?"',end:'"',illegal:"\\n",contains:[e.BACKSLASH_ESCAPE]},{ +begin:"(u8?|U|L)?'(\\\\(x[0-9A-Fa-f]{2}|u[0-9A-Fa-f]{4,8}|[0-7]{3}|\\S)|.)", +end:"'",illegal:"."},e.END_SAME_AS_BEGIN({ +begin:/(?:u8?|U|L)?R"([^()\\ ]{0,16})\(/,end:/\)([^()\\ ]{0,16})"/})]},l={ +className:"number",variants:[{match:/\b(0b[01']+)/},{ +match:/(-?)\b([\d']+(\.[\d']*)?|\.[\d']+)((ll|LL|l|L)(u|U)?|(u|U)(ll|LL|l|L)?|f|F|b|B)/ +},{ +match:/(-?)\b(0[xX][a-fA-F0-9]+(?:'[a-fA-F0-9]+)*(?:\.[a-fA-F0-9]*(?:'[a-fA-F0-9]*)*)?(?:[pP][-+]?[0-9]+)?(l|L)?(u|U)?)/ +},{match:/(-?)\b\d+(?:'\d+)*(?:\.\d*(?:'\d*)*)?(?:[eE][-+]?\d+)?/}],relevance:0 +},c={className:"meta",begin:/#\s*[a-z]+\b/,end:/$/,keywords:{ +keyword:"if else elif endif define undef warning error line pragma _Pragma ifdef ifndef elifdef elifndef include" +},contains:[{begin:/\\\n/,relevance:0},e.inherit(o,{className:"string"}),{ +className:"string",begin:/<.*?>/},t,e.C_BLOCK_COMMENT_MODE]},d={ +className:"title",begin:n.optional(i)+e.IDENT_RE,relevance:0 +},g=n.optional(i)+e.IDENT_RE+"\\s*\\(",u={ +keyword:["asm","auto","break","case","continue","default","do","else","enum","extern","for","fortran","goto","if","inline","register","restrict","return","sizeof","typeof","typeof_unqual","struct","switch","typedef","union","volatile","while","_Alignas","_Alignof","_Atomic","_Generic","_Noreturn","_Static_assert","_Thread_local","alignas","alignof","noreturn","static_assert","thread_local","_Pragma"], +type:["float","double","signed","unsigned","int","short","long","char","void","_Bool","_BitInt","_Complex","_Imaginary","_Decimal32","_Decimal64","_Decimal96","_Decimal128","_Decimal64x","_Decimal128x","_Float16","_Float32","_Float64","_Float128","_Float32x","_Float64x","_Float128x","const","static","constexpr","complex","bool","imaginary"], +literal:"true false NULL", +built_in:"std string wstring cin cout cerr clog stdin stdout stderr stringstream istringstream ostringstream auto_ptr deque list queue stack vector map set pair bitset multiset multimap unordered_set unordered_map unordered_multiset unordered_multimap priority_queue make_pair array shared_ptr abort terminate abs acos asin atan2 atan calloc ceil cosh cos exit exp fabs floor fmod fprintf fputs free frexp fscanf future isalnum isalpha iscntrl isdigit isgraph islower isprint ispunct isspace isupper isxdigit tolower toupper labs ldexp log10 log malloc realloc memchr memcmp memcpy memset modf pow printf putchar puts scanf sinh sin snprintf sprintf sqrt sscanf strcat strchr strcmp strcpy strcspn strlen strncat strncmp strncpy strpbrk strrchr strspn strstr tanh tan vfprintf vprintf vsprintf endl initializer_list unique_ptr" +},b=[c,s,t,e.C_BLOCK_COMMENT_MODE,l,o],m={variants:[{begin:/=/,end:/;/},{ +begin:/\(/,end:/\)/},{beginKeywords:"new throw return else",end:/;/}], +keywords:u,contains:b.concat([{begin:/\(/,end:/\)/,keywords:u, +contains:b.concat(["self"]),relevance:0}]),relevance:0},p={ +begin:"("+r+"[\\*&\\s]+)+"+g,returnBegin:!0,end:/[{;=]/,excludeEnd:!0, +keywords:u,illegal:/[^\w\s\*&:<>.]/,contains:[{begin:a,keywords:u,relevance:0},{ +begin:g,returnBegin:!0,contains:[e.inherit(d,{className:"title.function"})], +relevance:0},{relevance:0,match:/,/},{className:"params",begin:/\(/,end:/\)/, +keywords:u,relevance:0,contains:[t,e.C_BLOCK_COMMENT_MODE,o,l,s,{begin:/\(/, +end:/\)/,keywords:u,relevance:0,contains:["self",t,e.C_BLOCK_COMMENT_MODE,o,l,s] +}]},s,t,e.C_BLOCK_COMMENT_MODE,c]};return{name:"C",aliases:["h"],keywords:u, +disableAutodetect:!0,illegal:"=]/,contains:[{ +beginKeywords:"final class struct"},e.TITLE_MODE]}]),exports:{preprocessor:c, +strings:o,keywords:u}}},grmr_cpp:e=>{const n=e.regex,t=e.COMMENT("//","$",{ +contains:[{begin:/\\\n/}] +}),a="decltype\\(auto\\)",i="[a-zA-Z_]\\w*::",r="(?!struct)("+a+"|"+n.optional(i)+"[a-zA-Z_]\\w*"+n.optional("<[^<>]+>")+")",s={ +className:"type",begin:"\\b[a-z\\d_]*_t\\b"},o={className:"string",variants:[{ +begin:'(u8?|U|L)?"',end:'"',illegal:"\\n",contains:[e.BACKSLASH_ESCAPE]},{ +begin:"(u8?|U|L)?'(\\\\(x[0-9A-Fa-f]{2}|u[0-9A-Fa-f]{4,8}|[0-7]{3}|\\S)|.)", +end:"'",illegal:"."},e.END_SAME_AS_BEGIN({ +begin:/(?:u8?|U|L)?R"([^()\\ ]{0,16})\(/,end:/\)([^()\\ ]{0,16})"/})]},l={ +className:"number",variants:[{ +begin:"[+-]?(?:(?:[0-9](?:'?[0-9])*\\.(?:[0-9](?:'?[0-9])*)?|\\.[0-9](?:'?[0-9])*)(?:[Ee][+-]?[0-9](?:'?[0-9])*)?|[0-9](?:'?[0-9])*[Ee][+-]?[0-9](?:'?[0-9])*|0[Xx](?:[0-9A-Fa-f](?:'?[0-9A-Fa-f])*(?:\\.(?:[0-9A-Fa-f](?:'?[0-9A-Fa-f])*)?)?|\\.[0-9A-Fa-f](?:'?[0-9A-Fa-f])*)[Pp][+-]?[0-9](?:'?[0-9])*)(?:[Ff](?:16|32|64|128)?|(BF|bf)16|[Ll]|)" +},{ +begin:"[+-]?\\b(?:0[Bb][01](?:'?[01])*|0[Xx][0-9A-Fa-f](?:'?[0-9A-Fa-f])*|0(?:'?[0-7])*|[1-9](?:'?[0-9])*)(?:[Uu](?:LL?|ll?)|[Uu][Zz]?|(?:LL?|ll?)[Uu]?|[Zz][Uu]|)" +}],relevance:0},c={className:"meta",begin:/#\s*[a-z]+\b/,end:/$/,keywords:{ +keyword:"if else elif endif define undef warning error line pragma _Pragma ifdef ifndef include" +},contains:[{begin:/\\\n/,relevance:0},e.inherit(o,{className:"string"}),{ +className:"string",begin:/<.*?>/},t,e.C_BLOCK_COMMENT_MODE]},d={ +className:"title",begin:n.optional(i)+e.IDENT_RE,relevance:0 +},g=n.optional(i)+e.IDENT_RE+"\\s*\\(",u={ +type:["bool","char","char16_t","char32_t","char8_t","double","float","int","long","short","void","wchar_t","unsigned","signed","const","static"], +keyword:["alignas","alignof","and","and_eq","asm","atomic_cancel","atomic_commit","atomic_noexcept","auto","bitand","bitor","break","case","catch","class","co_await","co_return","co_yield","compl","concept","const_cast|10","consteval","constexpr","constinit","continue","decltype","default","delete","do","dynamic_cast|10","else","enum","explicit","export","extern","false","final","for","friend","goto","if","import","inline","module","mutable","namespace","new","noexcept","not","not_eq","nullptr","operator","or","or_eq","override","private","protected","public","reflexpr","register","reinterpret_cast|10","requires","return","sizeof","static_assert","static_cast|10","struct","switch","synchronized","template","this","thread_local","throw","transaction_safe","transaction_safe_dynamic","true","try","typedef","typeid","typename","union","using","virtual","volatile","while","xor","xor_eq"], +literal:["NULL","false","nullopt","nullptr","true"],built_in:["_Pragma"], +_type_hints:["any","auto_ptr","barrier","binary_semaphore","bitset","complex","condition_variable","condition_variable_any","counting_semaphore","deque","false_type","flat_map","flat_set","future","imaginary","initializer_list","istringstream","jthread","latch","lock_guard","multimap","multiset","mutex","optional","ostringstream","packaged_task","pair","promise","priority_queue","queue","recursive_mutex","recursive_timed_mutex","scoped_lock","set","shared_future","shared_lock","shared_mutex","shared_timed_mutex","shared_ptr","stack","string_view","stringstream","timed_mutex","thread","true_type","tuple","unique_lock","unique_ptr","unordered_map","unordered_multimap","unordered_multiset","unordered_set","variant","vector","weak_ptr","wstring","wstring_view"] +},b={className:"function.dispatch",relevance:0,keywords:{ +_hint:["abort","abs","acos","apply","as_const","asin","atan","atan2","calloc","ceil","cerr","cin","clog","cos","cosh","cout","declval","endl","exchange","exit","exp","fabs","floor","fmod","forward","fprintf","fputs","free","frexp","fscanf","future","invoke","isalnum","isalpha","iscntrl","isdigit","isgraph","islower","isprint","ispunct","isspace","isupper","isxdigit","labs","launder","ldexp","log","log10","make_pair","make_shared","make_shared_for_overwrite","make_tuple","make_unique","malloc","memchr","memcmp","memcpy","memset","modf","move","pow","printf","putchar","puts","realloc","scanf","sin","sinh","snprintf","sprintf","sqrt","sscanf","std","stderr","stdin","stdout","strcat","strchr","strcmp","strcpy","strcspn","strlen","strncat","strncmp","strncpy","strpbrk","strrchr","strspn","strstr","swap","tan","tanh","terminate","to_underlying","tolower","toupper","vfprintf","visit","vprintf","vsprintf"] +}, +begin:n.concat(/\b/,/(?!decltype)/,/(?!if)/,/(?!for)/,/(?!switch)/,/(?!while)/,e.IDENT_RE,n.lookahead(/(<[^<>]+>|)\s*\(/)) +},m=[b,c,s,t,e.C_BLOCK_COMMENT_MODE,l,o],p={variants:[{begin:/=/,end:/;/},{ +begin:/\(/,end:/\)/},{beginKeywords:"new throw return else",end:/;/}], +keywords:u,contains:m.concat([{begin:/\(/,end:/\)/,keywords:u, +contains:m.concat(["self"]),relevance:0}]),relevance:0},_={className:"function", +begin:"("+r+"[\\*&\\s]+)+"+g,returnBegin:!0,end:/[{;=]/,excludeEnd:!0, +keywords:u,illegal:/[^\w\s\*&:<>.]/,contains:[{begin:a,keywords:u,relevance:0},{ +begin:g,returnBegin:!0,contains:[d],relevance:0},{begin:/::/,relevance:0},{ +begin:/:/,endsWithParent:!0,contains:[o,l]},{relevance:0,match:/,/},{ +className:"params",begin:/\(/,end:/\)/,keywords:u,relevance:0, +contains:[t,e.C_BLOCK_COMMENT_MODE,o,l,s,{begin:/\(/,end:/\)/,keywords:u, +relevance:0,contains:["self",t,e.C_BLOCK_COMMENT_MODE,o,l,s]}] +},s,t,e.C_BLOCK_COMMENT_MODE,c]};return{name:"C++", +aliases:["cc","c++","h++","hpp","hh","hxx","cxx"],keywords:u,illegal:"",keywords:u,contains:["self",s]},{begin:e.IDENT_RE+"::",keywords:u},{ +match:[/\b(?:enum(?:\s+(?:class|struct))?|class|struct|union)/,/\s+/,/\w+/], +className:{1:"keyword",3:"title.class"}}])}},grmr_csharp:e=>{const n={ +keyword:["abstract","as","base","break","case","catch","class","const","continue","do","else","event","explicit","extern","finally","fixed","for","foreach","goto","if","implicit","in","interface","internal","is","lock","namespace","new","operator","out","override","params","private","protected","public","readonly","record","ref","return","scoped","sealed","sizeof","stackalloc","static","struct","switch","this","throw","try","typeof","unchecked","unsafe","using","virtual","void","volatile","while"].concat(["add","alias","and","ascending","args","async","await","by","descending","dynamic","equals","file","from","get","global","group","init","into","join","let","nameof","not","notnull","on","or","orderby","partial","record","remove","required","scoped","select","set","unmanaged","value|0","var","when","where","with","yield"]), +built_in:["bool","byte","char","decimal","delegate","double","dynamic","enum","float","int","long","nint","nuint","object","sbyte","short","string","ulong","uint","ushort"], +literal:["default","false","null","true"]},t=e.inherit(e.TITLE_MODE,{ +begin:"[a-zA-Z](\\.?\\w)*"}),a={className:"number",variants:[{ +begin:"\\b(0b[01']+)"},{ +begin:"(-?)\\b([\\d']+(\\.[\\d']*)?|\\.[\\d']+)(u|U|l|L|ul|UL|f|F|b|B)"},{ +begin:"(-?)(\\b0[xX][a-fA-F0-9']+|(\\b[\\d']+(\\.[\\d']*)?|\\.[\\d']+)([eE][-+]?[\\d']+)?)" +}],relevance:0},i={className:"string",begin:'@"',end:'"',contains:[{begin:'""'}] +},r=e.inherit(i,{illegal:/\n/}),s={className:"subst",begin:/\{/,end:/\}/, +keywords:n},o=e.inherit(s,{illegal:/\n/}),l={className:"string",begin:/\$"/, +end:'"',illegal:/\n/,contains:[{begin:/\{\{/},{begin:/\}\}/ +},e.BACKSLASH_ESCAPE,o]},c={className:"string",begin:/\$@"/,end:'"',contains:[{ +begin:/\{\{/},{begin:/\}\}/},{begin:'""'},s]},d=e.inherit(c,{illegal:/\n/, +contains:[{begin:/\{\{/},{begin:/\}\}/},{begin:'""'},o]}) +;s.contains=[c,l,i,e.APOS_STRING_MODE,e.QUOTE_STRING_MODE,a,e.C_BLOCK_COMMENT_MODE], +o.contains=[d,l,r,e.APOS_STRING_MODE,e.QUOTE_STRING_MODE,a,e.inherit(e.C_BLOCK_COMMENT_MODE,{ +illegal:/\n/})];const g={variants:[{className:"string", +begin:/"""("*)(?!")(.|\n)*?"""\1/,relevance:1 +},c,l,i,e.APOS_STRING_MODE,e.QUOTE_STRING_MODE]},u={begin:"<",end:">", +contains:[{beginKeywords:"in out"},t] +},b=e.IDENT_RE+"(<"+e.IDENT_RE+"(\\s*,\\s*"+e.IDENT_RE+")*>)?(\\[\\])?",m={ +begin:"@"+e.IDENT_RE,relevance:0};return{name:"C#",aliases:["cs","c#"], +keywords:n,illegal:/::/,contains:[e.COMMENT("///","$",{returnBegin:!0, +contains:[{className:"doctag",variants:[{begin:"///",relevance:0},{ +begin:"\x3c!--|--\x3e"},{begin:""}]}] +}),e.C_LINE_COMMENT_MODE,e.C_BLOCK_COMMENT_MODE,{className:"meta",begin:"#", +end:"$",keywords:{ +keyword:"if else elif endif define undef warning error line region endregion pragma checksum" +}},g,a,{beginKeywords:"class interface",relevance:0,end:/[{;=]/, +illegal:/[^\s:,]/,contains:[{beginKeywords:"where class" +},t,u,e.C_LINE_COMMENT_MODE,e.C_BLOCK_COMMENT_MODE]},{beginKeywords:"namespace", +relevance:0,end:/[{;=]/,illegal:/[^\s:]/, +contains:[t,e.C_LINE_COMMENT_MODE,e.C_BLOCK_COMMENT_MODE]},{ +beginKeywords:"record",relevance:0,end:/[{;=]/,illegal:/[^\s:]/, +contains:[t,u,e.C_LINE_COMMENT_MODE,e.C_BLOCK_COMMENT_MODE]},{className:"meta", +begin:"^\\s*\\[(?=[\\w])",excludeBegin:!0,end:"\\]",excludeEnd:!0,contains:[{ +className:"string",begin:/"/,end:/"/}]},{ +beginKeywords:"new return throw await else",relevance:0},{className:"function", +begin:"("+b+"\\s+)+"+e.IDENT_RE+"\\s*(<[^=]+>\\s*)?\\(",returnBegin:!0, +end:/\s*[{;=]/,excludeEnd:!0,keywords:n,contains:[{ +beginKeywords:"public private protected static internal protected abstract async extern override unsafe virtual new sealed partial", +relevance:0},{begin:e.IDENT_RE+"\\s*(<[^=]+>\\s*)?\\(",returnBegin:!0, +contains:[e.TITLE_MODE,u],relevance:0},{match:/\(\)/},{className:"params", +begin:/\(/,end:/\)/,excludeBegin:!0,excludeEnd:!0,keywords:n,relevance:0, +contains:[g,a,e.C_BLOCK_COMMENT_MODE] +},e.C_LINE_COMMENT_MODE,e.C_BLOCK_COMMENT_MODE]},m]}},grmr_css:e=>{ +const n=e.regex,t=te(e),a=[e.APOS_STRING_MODE,e.QUOTE_STRING_MODE];return{ +name:"CSS",case_insensitive:!0,illegal:/[=|'\$]/,keywords:{ +keyframePosition:"from to"},classNameAliases:{keyframePosition:"selector-tag"}, +contains:[t.BLOCK_COMMENT,{begin:/-(webkit|moz|ms|o)-(?=[a-z])/ +},t.CSS_NUMBER_MODE,{className:"selector-id",begin:/#[A-Za-z0-9_-]+/,relevance:0 +},{className:"selector-class",begin:"\\.[a-zA-Z-][a-zA-Z0-9_-]*",relevance:0 +},t.ATTRIBUTE_SELECTOR_MODE,{className:"selector-pseudo",variants:[{ +begin:":("+re.join("|")+")"},{begin:":(:)?("+se.join("|")+")"}] +},t.CSS_VARIABLE,{className:"attribute",begin:"\\b("+oe.join("|")+")\\b"},{ +begin:/:/,end:/[;}{]/, +contains:[t.BLOCK_COMMENT,t.HEXCOLOR,t.IMPORTANT,t.CSS_NUMBER_MODE,...a,{ +begin:/(url|data-uri)\(/,end:/\)/,relevance:0,keywords:{built_in:"url data-uri" +},contains:[...a,{className:"string",begin:/[^)]/,endsWithParent:!0, +excludeEnd:!0}]},t.FUNCTION_DISPATCH]},{begin:n.lookahead(/@/),end:"[{;]", +relevance:0,illegal:/:/,contains:[{className:"keyword",begin:/@-?\w[\w]*(-\w+)*/ +},{begin:/\s/,endsWithParent:!0,excludeEnd:!0,relevance:0,keywords:{ +$pattern:/[a-z-]+/,keyword:"and or not only",attribute:ie.join(" ")},contains:[{ +begin:/[a-z-]+(?=:)/,className:"attribute"},...a,t.CSS_NUMBER_MODE]}]},{ +className:"selector-tag",begin:"\\b("+ae.join("|")+")\\b"}]}},grmr_diff:e=>{ +const n=e.regex;return{name:"Diff",aliases:["patch"],contains:[{ +className:"meta",relevance:10, +match:n.either(/^@@ +-\d+,\d+ +\+\d+,\d+ +@@/,/^\*\*\* +\d+,\d+ +\*\*\*\*$/,/^--- +\d+,\d+ +----$/) +},{className:"comment",variants:[{ +begin:n.either(/Index: /,/^index/,/={3,}/,/^-{3}/,/^\*{3} /,/^\+{3}/,/^diff --git/), +end:/$/},{match:/^\*{15}$/}]},{className:"addition",begin:/^\+/,end:/$/},{ +className:"deletion",begin:/^-/,end:/$/},{className:"addition",begin:/^!/, +end:/$/}]}},grmr_go:e=>{const n={ +keyword:["break","case","chan","const","continue","default","defer","else","fallthrough","for","func","go","goto","if","import","interface","map","package","range","return","select","struct","switch","type","var"], +type:["bool","byte","complex64","complex128","error","float32","float64","int8","int16","int32","int64","string","uint8","uint16","uint32","uint64","int","uint","uintptr","rune"], +literal:["true","false","iota","nil"], +built_in:["append","cap","close","complex","copy","imag","len","make","new","panic","print","println","real","recover","delete"] +};return{name:"Go",aliases:["golang"],keywords:n,illegal:"{const n=e.regex +;return{name:"GraphQL",aliases:["gql"],case_insensitive:!0,disableAutodetect:!1, +keywords:{ +keyword:["query","mutation","subscription","type","input","schema","directive","interface","union","scalar","fragment","enum","on"], +literal:["true","false","null"]}, +contains:[e.HASH_COMMENT_MODE,e.QUOTE_STRING_MODE,e.NUMBER_MODE,{ +scope:"punctuation",match:/[.]{3}/,relevance:0},{scope:"punctuation", +begin:/[\!\(\)\:\=\[\]\{\|\}]{1}/,relevance:0},{scope:"variable",begin:/\$/, +end:/\W/,excludeEnd:!0,relevance:0},{scope:"meta",match:/@\w+/,excludeEnd:!0},{ +scope:"symbol",begin:n.concat(/[_A-Za-z][_0-9A-Za-z]*/,n.lookahead(/\s*:/)), +relevance:0}],illegal:[/[;<']/,/BEGIN/]}},grmr_ini:e=>{const n=e.regex,t={ +className:"number",relevance:0,variants:[{begin:/([+-]+)?[\d]+_[\d_]+/},{ +begin:e.NUMBER_RE}]},a=e.COMMENT();a.variants=[{begin:/;/,end:/$/},{begin:/#/, +end:/$/}];const i={className:"variable",variants:[{begin:/\$[\w\d"][\w\d_]*/},{ +begin:/\$\{(.*?)\}/}]},r={className:"literal", +begin:/\bon|off|true|false|yes|no\b/},s={className:"string", +contains:[e.BACKSLASH_ESCAPE],variants:[{begin:"'''",end:"'''",relevance:10},{ +begin:'"""',end:'"""',relevance:10},{begin:'"',end:'"'},{begin:"'",end:"'"}] +},o={begin:/\[/,end:/\]/,contains:[a,r,i,s,t,"self"],relevance:0 +},l=n.either(/[A-Za-z0-9_-]+/,/"(\\"|[^"])*"/,/'[^']*'/);return{ +name:"TOML, also INI",aliases:["toml"],case_insensitive:!0,illegal:/\S/, +contains:[a,{className:"section",begin:/\[+/,end:/\]+/},{ +begin:n.concat(l,"(\\s*\\.\\s*",l,")*",n.lookahead(/\s*=\s*[^#\s]/)), +className:"attr",starts:{end:/$/,contains:[a,o,r,i,s,t]}}]}},grmr_java:e=>{ +const n=e.regex,t="[\xc0-\u02b8a-zA-Z_$][\xc0-\u02b8a-zA-Z_$0-9]*",a=t+be("(?:<"+t+"~~~(?:\\s*,\\s*"+t+"~~~)*>)?",/~~~/g,2),i={ +keyword:["synchronized","abstract","private","var","static","if","const ","for","while","strictfp","finally","protected","import","native","final","void","enum","else","break","transient","catch","instanceof","volatile","case","assert","package","default","public","try","switch","continue","throws","protected","public","private","module","requires","exports","do","sealed","yield","permits","goto","when"], +literal:["false","true","null"], +type:["char","boolean","long","float","int","byte","short","double"], +built_in:["super","this"]},r={className:"meta",begin:"@"+t,contains:[{ +begin:/\(/,end:/\)/,contains:["self"]}]},s={className:"params",begin:/\(/, +end:/\)/,keywords:i,relevance:0,contains:[e.C_BLOCK_COMMENT_MODE],endsParent:!0} +;return{name:"Java",aliases:["jsp"],keywords:i,illegal:/<\/|#/, +contains:[e.COMMENT("/\\*\\*","\\*/",{relevance:0,contains:[{begin:/\w+@/, +relevance:0},{className:"doctag",begin:"@[A-Za-z]+"}]}),{ +begin:/import java\.[a-z]+\./,keywords:"import",relevance:2 +},e.C_LINE_COMMENT_MODE,e.C_BLOCK_COMMENT_MODE,{begin:/"""/,end:/"""/, +className:"string",contains:[e.BACKSLASH_ESCAPE] +},e.APOS_STRING_MODE,e.QUOTE_STRING_MODE,{ +match:[/\b(?:class|interface|enum|extends|implements|new)/,/\s+/,t],className:{ +1:"keyword",3:"title.class"}},{match:/non-sealed/,scope:"keyword"},{ +begin:[n.concat(/(?!else)/,t),/\s+/,t,/\s+/,/=(?!=)/],className:{1:"type", +3:"variable",5:"operator"}},{begin:[/record/,/\s+/,t],className:{1:"keyword", +3:"title.class"},contains:[s,e.C_LINE_COMMENT_MODE,e.C_BLOCK_COMMENT_MODE]},{ +beginKeywords:"new throw return else",relevance:0},{ +begin:["(?:"+a+"\\s+)",e.UNDERSCORE_IDENT_RE,/\s*(?=\()/],className:{ +2:"title.function"},keywords:i,contains:[{className:"params",begin:/\(/, +end:/\)/,keywords:i,relevance:0, +contains:[r,e.APOS_STRING_MODE,e.QUOTE_STRING_MODE,ue,e.C_BLOCK_COMMENT_MODE] +},e.C_LINE_COMMENT_MODE,e.C_BLOCK_COMMENT_MODE]},ue,r]}},grmr_javascript:ve, +grmr_json:e=>{const n=["true","false","null"],t={scope:"literal", +beginKeywords:n.join(" ")};return{name:"JSON",aliases:["jsonc"],keywords:{ +literal:n},contains:[{className:"attr",begin:/"(\\.|[^\\"\r\n])*"(?=\s*:)/, +relevance:1.01},{match:/[{}[\],:]/,className:"punctuation",relevance:0 +},e.QUOTE_STRING_MODE,t,e.C_NUMBER_MODE,e.C_LINE_COMMENT_MODE,e.C_BLOCK_COMMENT_MODE], +illegal:"\\S"}},grmr_kotlin:e=>{const n={ +keyword:"abstract as val var vararg get set class object open private protected public noinline crossinline dynamic final enum if else do while for when throw try catch finally import package is in fun override companion reified inline lateinit init interface annotation data sealed internal infix operator out by constructor super tailrec where const inner suspend typealias external expect actual", +built_in:"Byte Short Char Int Long Boolean Float Double Void Unit Nothing", +literal:"true false null"},t={className:"symbol",begin:e.UNDERSCORE_IDENT_RE+"@" +},a={className:"subst",begin:/\$\{/,end:/\}/,contains:[e.C_NUMBER_MODE]},i={ +className:"variable",begin:"\\$"+e.UNDERSCORE_IDENT_RE},r={className:"string", +variants:[{begin:'"""',end:'"""(?=[^"])',contains:[i,a]},{begin:"'",end:"'", +illegal:/\n/,contains:[e.BACKSLASH_ESCAPE]},{begin:'"',end:'"',illegal:/\n/, +contains:[e.BACKSLASH_ESCAPE,i,a]}]};a.contains.push(r);const s={ +className:"meta", +begin:"@(?:file|property|field|get|set|receiver|param|setparam|delegate)\\s*:(?:\\s*"+e.UNDERSCORE_IDENT_RE+")?" +},o={className:"meta",begin:"@"+e.UNDERSCORE_IDENT_RE,contains:[{begin:/\(/, +end:/\)/,contains:[e.inherit(r,{className:"string"}),"self"]}] +},l=ue,c=e.COMMENT("/\\*","\\*/",{contains:[e.C_BLOCK_COMMENT_MODE]}),d={ +variants:[{className:"type",begin:e.UNDERSCORE_IDENT_RE},{begin:/\(/,end:/\)/, +contains:[]}]},g=d;return g.variants[1].contains=[d],d.variants[1].contains=[g], +{name:"Kotlin",aliases:["kt","kts"],keywords:n, +contains:[e.COMMENT("/\\*\\*","\\*/",{relevance:0,contains:[{className:"doctag", +begin:"@[A-Za-z]+"}]}),e.C_LINE_COMMENT_MODE,c,{className:"keyword", +begin:/\b(break|continue|return|this)\b/,starts:{contains:[{className:"symbol", +begin:/@\w+/}]}},t,s,o,{className:"function",beginKeywords:"fun",end:"[(]|$", +returnBegin:!0,excludeEnd:!0,keywords:n,relevance:5,contains:[{ +begin:e.UNDERSCORE_IDENT_RE+"\\s*\\(",returnBegin:!0,relevance:0, +contains:[e.UNDERSCORE_TITLE_MODE]},{className:"type",begin://, +keywords:"reified",relevance:0},{className:"params",begin:/\(/,end:/\)/, +endsParent:!0,keywords:n,relevance:0,contains:[{begin:/:/,end:/[=,\/]/, +endsWithParent:!0,contains:[d,e.C_LINE_COMMENT_MODE,c],relevance:0 +},e.C_LINE_COMMENT_MODE,c,s,o,r,e.C_NUMBER_MODE]},c]},{ +begin:[/class|interface|trait/,/\s+/,e.UNDERSCORE_IDENT_RE],beginScope:{ +3:"title.class"},keywords:"class interface trait",end:/[:\{(]|$/,excludeEnd:!0, +illegal:"extends implements",contains:[{ +beginKeywords:"public protected internal private constructor" +},e.UNDERSCORE_TITLE_MODE,{className:"type",begin://,excludeBegin:!0, +excludeEnd:!0,relevance:0},{className:"type",begin:/[,:]\s*/,end:/[<\(,){\s]|$/, +excludeBegin:!0,returnEnd:!0},s,o]},r,{className:"meta",begin:"^#!/usr/bin/env", +end:"$",illegal:"\n"},l]}},grmr_less:e=>{ +const n=te(e),t=le,a="[\\w-]+",i="("+a+"|@\\{"+a+"\\})",r=[],s=[],o=e=>({ +className:"string",begin:"~?"+e+".*?"+e}),l=(e,n,t)=>({className:e,begin:n, +relevance:t}),c={$pattern:/[a-z-]+/,keyword:"and or not only", +attribute:ie.join(" ")},d={begin:"\\(",end:"\\)",contains:s,keywords:c, +relevance:0} +;s.push(e.C_LINE_COMMENT_MODE,e.C_BLOCK_COMMENT_MODE,o("'"),o('"'),n.CSS_NUMBER_MODE,{ +begin:"(url|data-uri)\\(",starts:{className:"string",end:"[\\)\\n]", +excludeEnd:!0} +},n.HEXCOLOR,d,l("variable","@@?"+a,10),l("variable","@\\{"+a+"\\}"),l("built_in","~?`[^`]*?`"),{ +className:"attribute",begin:a+"\\s*:",end:":",returnBegin:!0,excludeEnd:!0 +},n.IMPORTANT,{beginKeywords:"and not"},n.FUNCTION_DISPATCH);const g=s.concat({ +begin:/\{/,end:/\}/,contains:r}),u={beginKeywords:"when",endsWithParent:!0, +contains:[{beginKeywords:"and not"}].concat(s)},b={begin:i+"\\s*:", +returnBegin:!0,end:/[;}]/,relevance:0,contains:[{begin:/-(webkit|moz|ms|o)-/ +},n.CSS_VARIABLE,{className:"attribute",begin:"\\b("+oe.join("|")+")\\b", +end:/(?=:)/,starts:{endsWithParent:!0,illegal:"[<=$]",relevance:0,contains:s}}] +},m={className:"keyword", +begin:"@(import|media|charset|font-face|(-[a-z]+-)?keyframes|supports|document|namespace|page|viewport|host)\\b", +starts:{end:"[;{}]",keywords:c,returnEnd:!0,contains:s,relevance:0}},p={ +className:"variable",variants:[{begin:"@"+a+"\\s*:",relevance:15},{begin:"@"+a +}],starts:{end:"[;}]",returnEnd:!0,contains:g}},_={variants:[{ +begin:"[\\.#:&\\[>]",end:"[;{}]"},{begin:i,end:/\{/}],returnBegin:!0, +returnEnd:!0,illegal:"[<='$\"]",relevance:0, +contains:[e.C_LINE_COMMENT_MODE,e.C_BLOCK_COMMENT_MODE,u,l("keyword","all\\b"),l("variable","@\\{"+a+"\\}"),{ +begin:"\\b("+ae.join("|")+")\\b",className:"selector-tag" +},n.CSS_NUMBER_MODE,l("selector-tag",i,0),l("selector-id","#"+i),l("selector-class","\\."+i,0),l("selector-tag","&",0),n.ATTRIBUTE_SELECTOR_MODE,{ +className:"selector-pseudo",begin:":("+re.join("|")+")"},{ +className:"selector-pseudo",begin:":(:)?("+se.join("|")+")"},{begin:/\(/, +end:/\)/,relevance:0,contains:g},{begin:"!important"},n.FUNCTION_DISPATCH]},h={ +begin:a+":(:)?"+`(${t.join("|")})`,returnBegin:!0,contains:[_]} +;return r.push(e.C_LINE_COMMENT_MODE,e.C_BLOCK_COMMENT_MODE,m,p,h,b,_,u,n.FUNCTION_DISPATCH), +{name:"Less",case_insensitive:!0,illegal:"[=>'/<($\"]",contains:r}}, +grmr_lua:e=>{const n="\\[=*\\[",t="\\]=*\\]",a={begin:n,end:t,contains:["self"] +},i=[e.COMMENT("--(?!"+n+")","$"),e.COMMENT("--"+n,t,{contains:[a],relevance:10 +})];return{name:"Lua",aliases:["pluto"],keywords:{ +$pattern:e.UNDERSCORE_IDENT_RE,literal:"true false nil", +keyword:"and break do else elseif end for goto if in local not or repeat return then until while", +built_in:"_G _ENV _VERSION __index __newindex __mode __call __metatable __tostring __len __gc __add __sub __mul __div __mod __pow __concat __unm __eq __lt __le assert collectgarbage dofile error getfenv getmetatable ipairs load loadfile loadstring module next pairs pcall print rawequal rawget rawset require select setfenv setmetatable tonumber tostring type unpack xpcall arg self coroutine resume yield status wrap create running debug getupvalue debug sethook getmetatable gethook setmetatable setlocal traceback setfenv getinfo setupvalue getlocal getregistry getfenv io lines write close flush open output type read stderr stdin input stdout popen tmpfile math log max acos huge ldexp pi cos tanh pow deg tan cosh sinh random randomseed frexp ceil floor rad abs sqrt modf asin min mod fmod log10 atan2 exp sin atan os exit setlocale date getenv difftime remove time clock tmpname rename execute package preload loadlib loaded loaders cpath config path seeall string sub upper len gfind rep find match char dump gmatch reverse byte format gsub lower table setn insert getn foreachi maxn foreach concat sort remove" +},contains:i.concat([{className:"function",beginKeywords:"function",end:"\\)", +contains:[e.inherit(e.TITLE_MODE,{ +begin:"([_a-zA-Z]\\w*\\.)*([_a-zA-Z]\\w*:)?[_a-zA-Z]\\w*"}),{className:"params", +begin:"\\(",endsWithParent:!0,contains:i}].concat(i) +},e.C_NUMBER_MODE,e.APOS_STRING_MODE,e.QUOTE_STRING_MODE,{className:"string", +begin:n,end:t,contains:[a],relevance:5}])}},grmr_makefile:e=>{const n={ +className:"variable",variants:[{begin:"\\$\\("+e.UNDERSCORE_IDENT_RE+"\\)", +contains:[e.BACKSLASH_ESCAPE]},{begin:/\$[@%{ +const n={begin:/<\/?[A-Za-z_]/,end:">",subLanguage:"xml",relevance:0},t={ +variants:[{begin:/\[.+?\]\[.*?\]/,relevance:0},{ +begin:/\[.+?\]\(((data|javascript|mailto):|(?:http|ftp)s?:\/\/).*?\)/, +relevance:2},{ +begin:e.regex.concat(/\[.+?\]\(/,/[A-Za-z][A-Za-z0-9+.-]*/,/:\/\/.*?\)/), +relevance:2},{begin:/\[.+?\]\([./?&#].*?\)/,relevance:1},{ +begin:/\[.*?\]\(.*?\)/,relevance:0}],returnBegin:!0,contains:[{match:/\[(?=\])/ +},{className:"string",relevance:0,begin:"\\[",end:"\\]",excludeBegin:!0, +returnEnd:!0},{className:"link",relevance:0,begin:"\\]\\(",end:"\\)", +excludeBegin:!0,excludeEnd:!0},{className:"symbol",relevance:0,begin:"\\]\\[", +end:"\\]",excludeBegin:!0,excludeEnd:!0}]},a={className:"strong",contains:[], +variants:[{begin:/_{2}(?!\s)/,end:/_{2}/},{begin:/\*{2}(?!\s)/,end:/\*{2}/}] +},i={className:"emphasis",contains:[],variants:[{begin:/\*(?![*\s])/,end:/\*/},{ +begin:/_(?![_\s])/,end:/_/,relevance:0}]},r=e.inherit(a,{contains:[] +}),s=e.inherit(i,{contains:[]});a.contains.push(s),i.contains.push(r) +;let o=[n,t];return[a,i,r,s].forEach((e=>{e.contains=e.contains.concat(o) +})),o=o.concat(a,i),{name:"Markdown",aliases:["md","mkdown","mkd"],contains:[{ +className:"section",variants:[{begin:"^#{1,6}",end:"$",contains:o},{ +begin:"(?=^.+?\\n[=-]{2,}$)",contains:[{begin:"^[=-]*$"},{begin:"^",end:"\\n", +contains:o}]}]},n,{className:"bullet",begin:"^[ \t]*([*+-]|(\\d+\\.))(?=\\s+)", +end:"\\s+",excludeEnd:!0},a,i,{className:"quote",begin:"^>\\s+",contains:o, +end:"$"},{className:"code",variants:[{begin:"(`{3,})[^`](.|\\n)*?\\1`*[ ]*"},{ +begin:"(~{3,})[^~](.|\\n)*?\\1~*[ ]*"},{begin:"```",end:"```+[ ]*$"},{ +begin:"~~~",end:"~~~+[ ]*$"},{begin:"`.+?`"},{begin:"(?=^( {4}|\\t))", +contains:[{begin:"^( {4}|\\t)",end:"(\\n)$"}],relevance:0}]},{ +begin:"^[-\\*]{3,}",end:"$"},t,{begin:/^\[[^\n]+\]:/,returnBegin:!0,contains:[{ +className:"symbol",begin:/\[/,end:/\]/,excludeBegin:!0,excludeEnd:!0},{ +className:"link",begin:/:\s*/,end:/$/,excludeBegin:!0}]},{scope:"literal", +match:/&([a-zA-Z0-9]+|#[0-9]{1,7}|#[Xx][0-9a-fA-F]{1,6});/}]}}, +grmr_objectivec:e=>{const n=/[a-zA-Z@][a-zA-Z0-9_]*/,t={$pattern:n, +keyword:["@interface","@class","@protocol","@implementation"]};return{ +name:"Objective-C",aliases:["mm","objc","obj-c","obj-c++","objective-c++"], +keywords:{"variable.language":["this","super"],$pattern:n, +keyword:["while","export","sizeof","typedef","const","struct","for","union","volatile","static","mutable","if","do","return","goto","enum","else","break","extern","asm","case","default","register","explicit","typename","switch","continue","inline","readonly","assign","readwrite","self","@synchronized","id","typeof","nonatomic","IBOutlet","IBAction","strong","weak","copy","in","out","inout","bycopy","byref","oneway","__strong","__weak","__block","__autoreleasing","@private","@protected","@public","@try","@property","@end","@throw","@catch","@finally","@autoreleasepool","@synthesize","@dynamic","@selector","@optional","@required","@encode","@package","@import","@defs","@compatibility_alias","__bridge","__bridge_transfer","__bridge_retained","__bridge_retain","__covariant","__contravariant","__kindof","_Nonnull","_Nullable","_Null_unspecified","__FUNCTION__","__PRETTY_FUNCTION__","__attribute__","getter","setter","retain","unsafe_unretained","nonnull","nullable","null_unspecified","null_resettable","class","instancetype","NS_DESIGNATED_INITIALIZER","NS_UNAVAILABLE","NS_REQUIRES_SUPER","NS_RETURNS_INNER_POINTER","NS_INLINE","NS_AVAILABLE","NS_DEPRECATED","NS_ENUM","NS_OPTIONS","NS_SWIFT_UNAVAILABLE","NS_ASSUME_NONNULL_BEGIN","NS_ASSUME_NONNULL_END","NS_REFINED_FOR_SWIFT","NS_SWIFT_NAME","NS_SWIFT_NOTHROW","NS_DURING","NS_HANDLER","NS_ENDHANDLER","NS_VALUERETURN","NS_VOIDRETURN"], +literal:["false","true","FALSE","TRUE","nil","YES","NO","NULL"], +built_in:["dispatch_once_t","dispatch_queue_t","dispatch_sync","dispatch_async","dispatch_once"], +type:["int","float","char","unsigned","signed","short","long","double","wchar_t","unichar","void","bool","BOOL","id|0","_Bool"] +},illegal:"/,end:/$/,illegal:"\\n" +},e.C_LINE_COMMENT_MODE,e.C_BLOCK_COMMENT_MODE]},{className:"class", +begin:"("+t.keyword.join("|")+")\\b",end:/(\{|$)/,excludeEnd:!0,keywords:t, +contains:[e.UNDERSCORE_TITLE_MODE]},{begin:"\\."+e.UNDERSCORE_IDENT_RE, +relevance:0}]}},grmr_perl:e=>{const n=e.regex,t=/[dualxmsipngr]{0,12}/,a={ +$pattern:/[\w.]+/, +keyword:"abs accept alarm and atan2 bind binmode bless break caller chdir chmod chomp chop chown chr chroot class close closedir connect continue cos crypt dbmclose dbmopen defined delete die do dump each else elsif endgrent endhostent endnetent endprotoent endpwent endservent eof eval exec exists exit exp fcntl field fileno flock for foreach fork format formline getc getgrent getgrgid getgrnam gethostbyaddr gethostbyname gethostent getlogin getnetbyaddr getnetbyname getnetent getpeername getpgrp getpriority getprotobyname getprotobynumber getprotoent getpwent getpwnam getpwuid getservbyname getservbyport getservent getsockname getsockopt given glob gmtime goto grep gt hex if index int ioctl join keys kill last lc lcfirst length link listen local localtime log lstat lt ma map method mkdir msgctl msgget msgrcv msgsnd my ne next no not oct open opendir or ord our pack package pipe pop pos print printf prototype push q|0 qq quotemeta qw qx rand read readdir readline readlink readpipe recv redo ref rename require reset return reverse rewinddir rindex rmdir say scalar seek seekdir select semctl semget semop send setgrent sethostent setnetent setpgrp setpriority setprotoent setpwent setservent setsockopt shift shmctl shmget shmread shmwrite shutdown sin sleep socket socketpair sort splice split sprintf sqrt srand stat state study sub substr symlink syscall sysopen sysread sysseek system syswrite tell telldir tie tied time times tr truncate uc ucfirst umask undef unless unlink unpack unshift untie until use utime values vec wait waitpid wantarray warn when while write x|0 xor y|0" +},i={className:"subst",begin:"[$@]\\{",end:"\\}",keywords:a},r={begin:/->\{/, +end:/\}/},s={scope:"attr",match:/\s+:\s*\w+(\s*\(.*?\))?/},o={scope:"variable", +variants:[{begin:/\$\d/},{ +begin:n.concat(/[$%@](?!")(\^\w\b|#\w+(::\w+)*|\{\w+\}|\w+(::\w*)*)/,"(?![A-Za-z])(?![@$%])") +},{begin:/[$%@](?!")[^\s\w{=]|\$=/,relevance:0}],contains:[s]},l={ +className:"number",variants:[{match:/0?\.[0-9][0-9_]+\b/},{ +match:/\bv?(0|[1-9][0-9_]*(\.[0-9_]+)?|[1-9][0-9_]*)\b/},{ +match:/\b0[0-7][0-7_]*\b/},{match:/\b0x[0-9a-fA-F][0-9a-fA-F_]*\b/},{ +match:/\b0b[0-1][0-1_]*\b/}],relevance:0 +},c=[e.BACKSLASH_ESCAPE,i,o],d=[/!/,/\//,/\|/,/\?/,/'/,/"/,/#/],g=(e,a,i="\\1")=>{ +const r="\\1"===i?i:n.concat(i,a) +;return n.concat(n.concat("(?:",e,")"),a,/(?:\\.|[^\\\/])*?/,r,/(?:\\.|[^\\\/])*?/,i,t) +},u=(e,a,i)=>n.concat(n.concat("(?:",e,")"),a,/(?:\\.|[^\\\/])*?/,i,t),b=[o,e.HASH_COMMENT_MODE,e.COMMENT(/^=\w/,/=cut/,{ +endsWithParent:!0}),r,{className:"string",contains:c,variants:[{ +begin:"q[qwxr]?\\s*\\(",end:"\\)",relevance:5},{begin:"q[qwxr]?\\s*\\[", +end:"\\]",relevance:5},{begin:"q[qwxr]?\\s*\\{",end:"\\}",relevance:5},{ +begin:"q[qwxr]?\\s*\\|",end:"\\|",relevance:5},{begin:"q[qwxr]?\\s*<",end:">", +relevance:5},{begin:"qw\\s+q",end:"q",relevance:5},{begin:"'",end:"'", +contains:[e.BACKSLASH_ESCAPE]},{begin:'"',end:'"'},{begin:"`",end:"`", +contains:[e.BACKSLASH_ESCAPE]},{begin:/\{\w+\}/,relevance:0},{ +begin:"-?\\w+\\s*=>",relevance:0}]},l,{ +begin:"(\\/\\/|"+e.RE_STARTERS_RE+"|\\b(split|return|print|reverse|grep)\\b)\\s*", +keywords:"split return print reverse grep",relevance:0, +contains:[e.HASH_COMMENT_MODE,{className:"regexp",variants:[{ +begin:g("s|tr|y",n.either(...d,{capture:!0}))},{begin:g("s|tr|y","\\(","\\)")},{ +begin:g("s|tr|y","\\[","\\]")},{begin:g("s|tr|y","\\{","\\}")}],relevance:2},{ +className:"regexp",variants:[{begin:/(m|qr)\/\//,relevance:0},{ +begin:u("(?:m|qr)?",/\//,/\//)},{begin:u("m|qr",n.either(...d,{capture:!0 +}),/\1/)},{begin:u("m|qr",/\(/,/\)/)},{begin:u("m|qr",/\[/,/\]/)},{ +begin:u("m|qr",/\{/,/\}/)}]}]},{className:"function",beginKeywords:"sub method", +end:"(\\s*\\(.*?\\))?[;{]",excludeEnd:!0,relevance:5,contains:[e.TITLE_MODE,s] +},{className:"class",beginKeywords:"class",end:"[;{]",excludeEnd:!0,relevance:5, +contains:[e.TITLE_MODE,s,l]},{begin:"-\\w\\b",relevance:0},{begin:"^__DATA__$", +end:"^__END__$",subLanguage:"mojolicious",contains:[{begin:"^@@.*",end:"$", +className:"comment"}]}];return i.contains=b,r.contains=b,{name:"Perl", +aliases:["pl","pm"],keywords:a,contains:b}},grmr_php:e=>{ +const n=e.regex,t=/(?![A-Za-z0-9])(?![$])/,a=n.concat(/[a-zA-Z_\x7f-\xff][a-zA-Z0-9_\x7f-\xff]*/,t),i=n.concat(/(\\?[A-Z][a-z0-9_\x7f-\xff]+|\\?[A-Z]+(?=[A-Z][a-z0-9_\x7f-\xff])){1,}/,t),r=n.concat(/[A-Z]+/,t),s={ +scope:"variable",match:"\\$+"+a},o={scope:"subst",variants:[{begin:/\$\w+/},{ +begin:/\{\$/,end:/\}/}]},l=e.inherit(e.APOS_STRING_MODE,{illegal:null +}),c="[ \t\n]",d={scope:"string",variants:[e.inherit(e.QUOTE_STRING_MODE,{ +illegal:null,contains:e.QUOTE_STRING_MODE.contains.concat(o)}),l,{ +begin:/<<<[ \t]*(?:(\w+)|"(\w+)")\n/,end:/[ \t]*(\w+)\b/, +contains:e.QUOTE_STRING_MODE.contains.concat(o),"on:begin":(e,n)=>{ +n.data._beginMatch=e[1]||e[2]},"on:end":(e,n)=>{ +n.data._beginMatch!==e[1]&&n.ignoreMatch()}},e.END_SAME_AS_BEGIN({ +begin:/<<<[ \t]*'(\w+)'\n/,end:/[ \t]*(\w+)\b/})]},g={scope:"number",variants:[{ +begin:"\\b0[bB][01]+(?:_[01]+)*\\b"},{begin:"\\b0[oO][0-7]+(?:_[0-7]+)*\\b"},{ +begin:"\\b0[xX][\\da-fA-F]+(?:_[\\da-fA-F]+)*\\b"},{ +begin:"(?:\\b\\d+(?:_\\d+)*(\\.(?:\\d+(?:_\\d+)*))?|\\B\\.\\d+)(?:[eE][+-]?\\d+)?" +}],relevance:0 +},u=["false","null","true"],b=["__CLASS__","__DIR__","__FILE__","__FUNCTION__","__COMPILER_HALT_OFFSET__","__LINE__","__METHOD__","__NAMESPACE__","__TRAIT__","die","echo","exit","include","include_once","print","require","require_once","array","abstract","and","as","binary","bool","boolean","break","callable","case","catch","class","clone","const","continue","declare","default","do","double","else","elseif","empty","enddeclare","endfor","endforeach","endif","endswitch","endwhile","enum","eval","extends","final","finally","float","for","foreach","from","global","goto","if","implements","instanceof","insteadof","int","integer","interface","isset","iterable","list","match|0","mixed","new","never","object","or","private","protected","public","readonly","real","return","string","switch","throw","trait","try","unset","use","var","void","while","xor","yield"],m=["Error|0","AppendIterator","ArgumentCountError","ArithmeticError","ArrayIterator","ArrayObject","AssertionError","BadFunctionCallException","BadMethodCallException","CachingIterator","CallbackFilterIterator","CompileError","Countable","DirectoryIterator","DivisionByZeroError","DomainException","EmptyIterator","ErrorException","Exception","FilesystemIterator","FilterIterator","GlobIterator","InfiniteIterator","InvalidArgumentException","IteratorIterator","LengthException","LimitIterator","LogicException","MultipleIterator","NoRewindIterator","OutOfBoundsException","OutOfRangeException","OuterIterator","OverflowException","ParentIterator","ParseError","RangeException","RecursiveArrayIterator","RecursiveCachingIterator","RecursiveCallbackFilterIterator","RecursiveDirectoryIterator","RecursiveFilterIterator","RecursiveIterator","RecursiveIteratorIterator","RecursiveRegexIterator","RecursiveTreeIterator","RegexIterator","RuntimeException","SeekableIterator","SplDoublyLinkedList","SplFileInfo","SplFileObject","SplFixedArray","SplHeap","SplMaxHeap","SplMinHeap","SplObjectStorage","SplObserver","SplPriorityQueue","SplQueue","SplStack","SplSubject","SplTempFileObject","TypeError","UnderflowException","UnexpectedValueException","UnhandledMatchError","ArrayAccess","BackedEnum","Closure","Fiber","Generator","Iterator","IteratorAggregate","Serializable","Stringable","Throwable","Traversable","UnitEnum","WeakReference","WeakMap","Directory","__PHP_Incomplete_Class","parent","php_user_filter","self","static","stdClass"],p={ +keyword:b,literal:(e=>{const n=[];return e.forEach((e=>{ +n.push(e),e.toLowerCase()===e?n.push(e.toUpperCase()):n.push(e.toLowerCase()) +})),n})(u),built_in:m},_=e=>e.map((e=>e.replace(/\|\d+$/,""))),h={variants:[{ +match:[/new/,n.concat(c,"+"),n.concat("(?!",_(m).join("\\b|"),"\\b)"),i],scope:{ +1:"keyword",4:"title.class"}}]},f=n.concat(a,"\\b(?!\\()"),E={variants:[{ +match:[n.concat(/::/,n.lookahead(/(?!class\b)/)),f],scope:{2:"variable.constant" +}},{match:[/::/,/class/],scope:{2:"variable.language"}},{ +match:[i,n.concat(/::/,n.lookahead(/(?!class\b)/)),f],scope:{1:"title.class", +3:"variable.constant"}},{match:[i,n.concat("::",n.lookahead(/(?!class\b)/))], +scope:{1:"title.class"}},{match:[i,/::/,/class/],scope:{1:"title.class", +3:"variable.language"}}]},y={scope:"attr", +match:n.concat(a,n.lookahead(":"),n.lookahead(/(?!::)/))},w={relevance:0, +begin:/\(/,end:/\)/,keywords:p,contains:[y,s,E,e.C_BLOCK_COMMENT_MODE,d,g,h] +},v={relevance:0, +match:[/\b/,n.concat("(?!fn\\b|function\\b|",_(b).join("\\b|"),"|",_(m).join("\\b|"),"\\b)"),a,n.concat(c,"*"),n.lookahead(/(?=\()/)], +scope:{3:"title.function.invoke"},contains:[w]};w.contains.push(v) +;const N=[y,E,e.C_BLOCK_COMMENT_MODE,d,g,h],k={ +begin:n.concat(/#\[\s*\\?/,n.either(i,r)),beginScope:"meta",end:/]/, +endScope:"meta",keywords:{literal:u,keyword:["new","array"]},contains:[{ +begin:/\[/,end:/]/,keywords:{literal:u,keyword:["new","array"]}, +contains:["self",...N]},...N,{scope:"meta",variants:[{match:i},{match:r}]}]} +;return{case_insensitive:!1,keywords:p, +contains:[k,e.HASH_COMMENT_MODE,e.COMMENT("//","$"),e.COMMENT("/\\*","\\*/",{ +contains:[{scope:"doctag",match:"@[A-Za-z]+"}]}),{match:/__halt_compiler\(\);/, +keywords:"__halt_compiler",starts:{scope:"comment",end:e.MATCH_NOTHING_RE, +contains:[{match:/\?>/,scope:"meta",endsParent:!0}]}},{scope:"meta",variants:[{ +begin:/<\?php/,relevance:10},{begin:/<\?=/},{begin:/<\?/,relevance:.1},{ +begin:/\?>/}]},{scope:"variable.language",match:/\$this\b/},s,v,E,{ +match:[/const/,/\s/,a],scope:{1:"keyword",3:"variable.constant"}},h,{ +scope:"function",relevance:0,beginKeywords:"fn function",end:/[;{]/, +excludeEnd:!0,illegal:"[$%\\[]",contains:[{beginKeywords:"use" +},e.UNDERSCORE_TITLE_MODE,{begin:"=>",endsParent:!0},{scope:"params", +begin:"\\(",end:"\\)",excludeBegin:!0,excludeEnd:!0,keywords:p, +contains:["self",k,s,E,e.C_BLOCK_COMMENT_MODE,d,g]}]},{scope:"class",variants:[{ +beginKeywords:"enum",illegal:/[($"]/},{beginKeywords:"class interface trait", +illegal:/[:($"]/}],relevance:0,end:/\{/,excludeEnd:!0,contains:[{ +beginKeywords:"extends implements"},e.UNDERSCORE_TITLE_MODE]},{ +beginKeywords:"namespace",relevance:0,end:";",illegal:/[.']/, +contains:[e.inherit(e.UNDERSCORE_TITLE_MODE,{scope:"title.class"})]},{ +beginKeywords:"use",relevance:0,end:";",contains:[{ +match:/\b(as|const|function)\b/,scope:"keyword"},e.UNDERSCORE_TITLE_MODE]},d,g]} +},grmr_php_template:e=>({name:"PHP template",subLanguage:"xml",contains:[{ +begin:/<\?(php|=)?/,end:/\?>/,subLanguage:"php",contains:[{begin:"/\\*", +end:"\\*/",skip:!0},{begin:'b"',end:'"',skip:!0},{begin:"b'",end:"'",skip:!0 +},e.inherit(e.APOS_STRING_MODE,{illegal:null,className:null,contains:null, +skip:!0}),e.inherit(e.QUOTE_STRING_MODE,{illegal:null,className:null, +contains:null,skip:!0})]}]}),grmr_plaintext:e=>({name:"Plain text", +aliases:["text","txt"],disableAutodetect:!0}),grmr_python:e=>{ +const n=e.regex,t=/[\p{XID_Start}_]\p{XID_Continue}*/u,a=["and","as","assert","async","await","break","case","class","continue","def","del","elif","else","except","finally","for","from","global","if","import","in","is","lambda","match","nonlocal|10","not","or","pass","raise","return","try","while","with","yield"],i={ +$pattern:/[A-Za-z]\w+|__\w+__/,keyword:a, +built_in:["__import__","abs","all","any","ascii","bin","bool","breakpoint","bytearray","bytes","callable","chr","classmethod","compile","complex","delattr","dict","dir","divmod","enumerate","eval","exec","filter","float","format","frozenset","getattr","globals","hasattr","hash","help","hex","id","input","int","isinstance","issubclass","iter","len","list","locals","map","max","memoryview","min","next","object","oct","open","ord","pow","print","property","range","repr","reversed","round","set","setattr","slice","sorted","staticmethod","str","sum","super","tuple","type","vars","zip"], +literal:["__debug__","Ellipsis","False","None","NotImplemented","True"], +type:["Any","Callable","Coroutine","Dict","List","Literal","Generic","Optional","Sequence","Set","Tuple","Type","Union"] +},r={className:"meta",begin:/^(>>>|\.\.\.) /},s={className:"subst",begin:/\{/, +end:/\}/,keywords:i,illegal:/#/},o={begin:/\{\{/,relevance:0},l={ +className:"string",contains:[e.BACKSLASH_ESCAPE],variants:[{ +begin:/([uU]|[bB]|[rR]|[bB][rR]|[rR][bB])?'''/,end:/'''/, +contains:[e.BACKSLASH_ESCAPE,r],relevance:10},{ +begin:/([uU]|[bB]|[rR]|[bB][rR]|[rR][bB])?"""/,end:/"""/, +contains:[e.BACKSLASH_ESCAPE,r],relevance:10},{ +begin:/([fF][rR]|[rR][fF]|[fF])'''/,end:/'''/, +contains:[e.BACKSLASH_ESCAPE,r,o,s]},{begin:/([fF][rR]|[rR][fF]|[fF])"""/, +end:/"""/,contains:[e.BACKSLASH_ESCAPE,r,o,s]},{begin:/([uU]|[rR])'/,end:/'/, +relevance:10},{begin:/([uU]|[rR])"/,end:/"/,relevance:10},{ +begin:/([bB]|[bB][rR]|[rR][bB])'/,end:/'/},{begin:/([bB]|[bB][rR]|[rR][bB])"/, +end:/"/},{begin:/([fF][rR]|[rR][fF]|[fF])'/,end:/'/, +contains:[e.BACKSLASH_ESCAPE,o,s]},{begin:/([fF][rR]|[rR][fF]|[fF])"/,end:/"/, +contains:[e.BACKSLASH_ESCAPE,o,s]},e.APOS_STRING_MODE,e.QUOTE_STRING_MODE] +},c="[0-9](_?[0-9])*",d=`(\\b(${c}))?\\.(${c})|\\b(${c})\\.`,g="\\b|"+a.join("|"),u={ +className:"number",relevance:0,variants:[{ +begin:`(\\b(${c})|(${d}))[eE][+-]?(${c})[jJ]?(?=${g})`},{begin:`(${d})[jJ]?`},{ +begin:`\\b([1-9](_?[0-9])*|0+(_?0)*)[lLjJ]?(?=${g})`},{ +begin:`\\b0[bB](_?[01])+[lL]?(?=${g})`},{begin:`\\b0[oO](_?[0-7])+[lL]?(?=${g})` +},{begin:`\\b0[xX](_?[0-9a-fA-F])+[lL]?(?=${g})`},{begin:`\\b(${c})[jJ](?=${g})` +}]},b={className:"comment",begin:n.lookahead(/# type:/),end:/$/,keywords:i, +contains:[{begin:/# type:/},{begin:/#/,end:/\b\B/,endsWithParent:!0}]},m={ +className:"params",variants:[{className:"",begin:/\(\s*\)/,skip:!0},{begin:/\(/, +end:/\)/,excludeBegin:!0,excludeEnd:!0,keywords:i, +contains:["self",r,u,l,e.HASH_COMMENT_MODE]}]};return s.contains=[l,u,r],{ +name:"Python",aliases:["py","gyp","ipython"],unicodeRegex:!0,keywords:i, +illegal:/(<\/|\?)|=>/,contains:[r,u,{scope:"variable.language",match:/\bself\b/ +},{beginKeywords:"if",relevance:0},{match:/\bor\b/,scope:"keyword" +},l,b,e.HASH_COMMENT_MODE,{match:[/\bdef/,/\s+/,t],scope:{1:"keyword", +3:"title.function"},contains:[m]},{variants:[{ +match:[/\bclass/,/\s+/,t,/\s*/,/\(\s*/,t,/\s*\)/]},{match:[/\bclass/,/\s+/,t]}], +scope:{1:"keyword",3:"title.class",6:"title.class.inherited"}},{ +className:"meta",begin:/^[\t ]*@/,end:/(?=#)|$/,contains:[u,m,l]}]}}, +grmr_python_repl:e=>({aliases:["pycon"],contains:[{className:"meta.prompt", +starts:{end:/ |$/,starts:{end:"$",subLanguage:"python"}},variants:[{ +begin:/^>>>(?=[ ]|$)/},{begin:/^\.\.\.(?=[ ]|$)/}]}]}),grmr_r:e=>{ +const n=e.regex,t=/(?:(?:[a-zA-Z]|\.[._a-zA-Z])[._a-zA-Z0-9]*)|\.(?!\d)/,a=n.either(/0[xX][0-9a-fA-F]+\.[0-9a-fA-F]*[pP][+-]?\d+i?/,/0[xX][0-9a-fA-F]+(?:[pP][+-]?\d+)?[Li]?/,/(?:\d+(?:\.\d*)?|\.\d+)(?:[eE][+-]?\d+)?[Li]?/),i=/[=!<>:]=|\|\||&&|:::?|<-|<<-|->>|->|\|>|[-+*\/?!$&|:<=>@^~]|\*\*/,r=n.either(/[()]/,/[{}]/,/\[\[/,/[[\]]/,/\\/,/,/) +;return{name:"R",keywords:{$pattern:t, +keyword:"function if in break next repeat else for while", +literal:"NULL NA TRUE FALSE Inf NaN NA_integer_|10 NA_real_|10 NA_character_|10 NA_complex_|10", +built_in:"LETTERS letters month.abb month.name pi T F abs acos acosh all any anyNA Arg as.call as.character as.complex as.double as.environment as.integer as.logical as.null.default as.numeric as.raw asin asinh atan atanh attr attributes baseenv browser c call ceiling class Conj cos cosh cospi cummax cummin cumprod cumsum digamma dim dimnames emptyenv exp expression floor forceAndCall gamma gc.time globalenv Im interactive invisible is.array is.atomic is.call is.character is.complex is.double is.environment is.expression is.finite is.function is.infinite is.integer is.language is.list is.logical is.matrix is.na is.name is.nan is.null is.numeric is.object is.pairlist is.raw is.recursive is.single is.symbol lazyLoadDBfetch length lgamma list log max min missing Mod names nargs nzchar oldClass on.exit pos.to.env proc.time prod quote range Re rep retracemem return round seq_along seq_len seq.int sign signif sin sinh sinpi sqrt standardGeneric substitute sum switch tan tanh tanpi tracemem trigamma trunc unclass untracemem UseMethod xtfrm" +},contains:[e.COMMENT(/#'/,/$/,{contains:[{scope:"doctag",match:/@examples/, +starts:{end:n.lookahead(n.either(/\n^#'\s*(?=@[a-zA-Z]+)/,/\n^(?!#')/)), +endsParent:!0}},{scope:"doctag",begin:"@param",end:/$/,contains:[{ +scope:"variable",variants:[{match:t},{match:/`(?:\\.|[^`\\])+`/}],endsParent:!0 +}]},{scope:"doctag",match:/@[a-zA-Z]+/},{scope:"keyword",match:/\\[a-zA-Z]+/}] +}),e.HASH_COMMENT_MODE,{scope:"string",contains:[e.BACKSLASH_ESCAPE], +variants:[e.END_SAME_AS_BEGIN({begin:/[rR]"(-*)\(/,end:/\)(-*)"/ +}),e.END_SAME_AS_BEGIN({begin:/[rR]"(-*)\{/,end:/\}(-*)"/ +}),e.END_SAME_AS_BEGIN({begin:/[rR]"(-*)\[/,end:/\](-*)"/ +}),e.END_SAME_AS_BEGIN({begin:/[rR]'(-*)\(/,end:/\)(-*)'/ +}),e.END_SAME_AS_BEGIN({begin:/[rR]'(-*)\{/,end:/\}(-*)'/ +}),e.END_SAME_AS_BEGIN({begin:/[rR]'(-*)\[/,end:/\](-*)'/}),{begin:'"',end:'"', +relevance:0},{begin:"'",end:"'",relevance:0}]},{relevance:0,variants:[{scope:{ +1:"operator",2:"number"},match:[i,a]},{scope:{1:"operator",2:"number"}, +match:[/%[^%]*%/,a]},{scope:{1:"punctuation",2:"number"},match:[r,a]},{scope:{ +2:"number"},match:[/[^a-zA-Z0-9._]|^/,a]}]},{scope:{3:"operator"}, +match:[t,/\s+/,/<-/,/\s+/]},{scope:"operator",relevance:0,variants:[{match:i},{ +match:/%[^%]*%/}]},{scope:"punctuation",relevance:0,match:r},{begin:"`",end:"`", +contains:[{begin:/\\./}]}]}},grmr_ruby:e=>{ +const n=e.regex,t="([a-zA-Z_]\\w*[!?=]?|[-+~]@|<<|>>|=~|===?|<=>|[<>]=?|\\*\\*|[-/+%^&*~`|]|\\[\\]=?)",a=n.either(/\b([A-Z]+[a-z0-9]+)+/,/\b([A-Z]+[a-z0-9]+)+[A-Z]+/),i=n.concat(a,/(::\w+)*/),r={ +"variable.constant":["__FILE__","__LINE__","__ENCODING__"], +"variable.language":["self","super"], +keyword:["alias","and","begin","BEGIN","break","case","class","defined","do","else","elsif","end","END","ensure","for","if","in","module","next","not","or","redo","require","rescue","retry","return","then","undef","unless","until","when","while","yield","include","extend","prepend","public","private","protected","raise","throw"], +built_in:["proc","lambda","attr_accessor","attr_reader","attr_writer","define_method","private_constant","module_function"], +literal:["true","false","nil"]},s={className:"doctag",begin:"@[A-Za-z]+"},o={ +begin:"#<",end:">"},l=[e.COMMENT("#","$",{contains:[s] +}),e.COMMENT("^=begin","^=end",{contains:[s],relevance:10 +}),e.COMMENT("^__END__",e.MATCH_NOTHING_RE)],c={className:"subst",begin:/#\{/, +end:/\}/,keywords:r},d={className:"string",contains:[e.BACKSLASH_ESCAPE,c], +variants:[{begin:/'/,end:/'/},{begin:/"/,end:/"/},{begin:/`/,end:/`/},{ +begin:/%[qQwWx]?\(/,end:/\)/},{begin:/%[qQwWx]?\[/,end:/\]/},{ +begin:/%[qQwWx]?\{/,end:/\}/},{begin:/%[qQwWx]?/},{begin:/%[qQwWx]?\//, +end:/\//},{begin:/%[qQwWx]?%/,end:/%/},{begin:/%[qQwWx]?-/,end:/-/},{ +begin:/%[qQwWx]?\|/,end:/\|/},{begin:/\B\?(\\\d{1,3})/},{ +begin:/\B\?(\\x[A-Fa-f0-9]{1,2})/},{begin:/\B\?(\\u\{?[A-Fa-f0-9]{1,6}\}?)/},{ +begin:/\B\?(\\M-\\C-|\\M-\\c|\\c\\M-|\\M-|\\C-\\M-)[\x20-\x7e]/},{ +begin:/\B\?\\(c|C-)[\x20-\x7e]/},{begin:/\B\?\\?\S/},{ +begin:n.concat(/<<[-~]?'?/,n.lookahead(/(\w+)(?=\W)[^\n]*\n(?:[^\n]*\n)*?\s*\1\b/)), +contains:[e.END_SAME_AS_BEGIN({begin:/(\w+)/,end:/(\w+)/, +contains:[e.BACKSLASH_ESCAPE,c]})]}]},g="[0-9](_?[0-9])*",u={className:"number", +relevance:0,variants:[{ +begin:`\\b([1-9](_?[0-9])*|0)(\\.(${g}))?([eE][+-]?(${g})|r)?i?\\b`},{ +begin:"\\b0[dD][0-9](_?[0-9])*r?i?\\b"},{begin:"\\b0[bB][0-1](_?[0-1])*r?i?\\b" +},{begin:"\\b0[oO][0-7](_?[0-7])*r?i?\\b"},{ +begin:"\\b0[xX][0-9a-fA-F](_?[0-9a-fA-F])*r?i?\\b"},{ +begin:"\\b0(_?[0-7])+r?i?\\b"}]},b={variants:[{match:/\(\)/},{ +className:"params",begin:/\(/,end:/(?=\))/,excludeBegin:!0,endsParent:!0, +keywords:r}]},m=[d,{variants:[{match:[/class\s+/,i,/\s+<\s+/,i]},{ +match:[/\b(class|module)\s+/,i]}],scope:{2:"title.class", +4:"title.class.inherited"},keywords:r},{match:[/(include|extend)\s+/,i],scope:{ +2:"title.class"},keywords:r},{relevance:0,match:[i,/\.new[. (]/],scope:{ +1:"title.class"}},{relevance:0,match:/\b[A-Z][A-Z_0-9]+\b/, +className:"variable.constant"},{relevance:0,match:a,scope:"title.class"},{ +match:[/def/,/\s+/,t],scope:{1:"keyword",3:"title.function"},contains:[b]},{ +begin:e.IDENT_RE+"::"},{className:"symbol", +begin:e.UNDERSCORE_IDENT_RE+"(!|\\?)?:",relevance:0},{className:"symbol", +begin:":(?!\\s)",contains:[d,{begin:t}],relevance:0},u,{className:"variable", +begin:"(\\$\\W)|((\\$|@@?)(\\w+))(?=[^@$?])(?![A-Za-z])(?![@$?'])"},{ +className:"params",begin:/\|(?!=)/,end:/\|/,excludeBegin:!0,excludeEnd:!0, +relevance:0,keywords:r},{begin:"("+e.RE_STARTERS_RE+"|unless)\\s*", +keywords:"unless",contains:[{className:"regexp",contains:[e.BACKSLASH_ESCAPE,c], +illegal:/\n/,variants:[{begin:"/",end:"/[a-z]*"},{begin:/%r\{/,end:/\}[a-z]*/},{ +begin:"%r\\(",end:"\\)[a-z]*"},{begin:"%r!",end:"![a-z]*"},{begin:"%r\\[", +end:"\\][a-z]*"}]}].concat(o,l),relevance:0}].concat(o,l) +;c.contains=m,b.contains=m;const p=[{begin:/^\s*=>/,starts:{end:"$",contains:m} +},{className:"meta.prompt", +begin:"^([>?]>|[\\w#]+\\(\\w+\\):\\d+:\\d+[>*]|(\\w+-)?\\d+\\.\\d+\\.\\d+(p\\d+)?[^\\d][^>]+>)(?=[ ])", +starts:{end:"$",keywords:r,contains:m}}];return l.unshift(o),{name:"Ruby", +aliases:["rb","gemspec","podspec","thor","irb"],keywords:r,illegal:/\/\*/, +contains:[e.SHEBANG({binary:"ruby"})].concat(p).concat(l).concat(m)}}, +grmr_rust:e=>{ +const n=e.regex,t=/(r#)?/,a=n.concat(t,e.UNDERSCORE_IDENT_RE),i=n.concat(t,e.IDENT_RE),r={ +className:"title.function.invoke",relevance:0, +begin:n.concat(/\b/,/(?!let|for|while|if|else|match\b)/,i,n.lookahead(/\s*\(/)) +},s="([ui](8|16|32|64|128|size)|f(32|64))?",o=["drop ","Copy","Send","Sized","Sync","Drop","Fn","FnMut","FnOnce","ToOwned","Clone","Debug","PartialEq","PartialOrd","Eq","Ord","AsRef","AsMut","Into","From","Default","Iterator","Extend","IntoIterator","DoubleEndedIterator","ExactSizeIterator","SliceConcatExt","ToString","assert!","assert_eq!","bitflags!","bytes!","cfg!","col!","concat!","concat_idents!","debug_assert!","debug_assert_eq!","env!","eprintln!","panic!","file!","format!","format_args!","include_bytes!","include_str!","line!","local_data_key!","module_path!","option_env!","print!","println!","select!","stringify!","try!","unimplemented!","unreachable!","vec!","write!","writeln!","macro_rules!","assert_ne!","debug_assert_ne!"],l=["i8","i16","i32","i64","i128","isize","u8","u16","u32","u64","u128","usize","f32","f64","str","char","bool","Box","Option","Result","String","Vec"] +;return{name:"Rust",aliases:["rs"],keywords:{$pattern:e.IDENT_RE+"!?",type:l, +keyword:["abstract","as","async","await","become","box","break","const","continue","crate","do","dyn","else","enum","extern","false","final","fn","for","if","impl","in","let","loop","macro","match","mod","move","mut","override","priv","pub","ref","return","self","Self","static","struct","super","trait","true","try","type","typeof","union","unsafe","unsized","use","virtual","where","while","yield"], +literal:["true","false","Some","None","Ok","Err"],built_in:o},illegal:""},r]}}, +grmr_scss:e=>{const n=te(e),t=se,a=re,i="@[a-z-]+",r={className:"variable", +begin:"(\\$[a-zA-Z-][a-zA-Z0-9_-]*)\\b",relevance:0};return{name:"SCSS", +case_insensitive:!0,illegal:"[=/|']", +contains:[e.C_LINE_COMMENT_MODE,e.C_BLOCK_COMMENT_MODE,n.CSS_NUMBER_MODE,{ +className:"selector-id",begin:"#[A-Za-z0-9_-]+",relevance:0},{ +className:"selector-class",begin:"\\.[A-Za-z0-9_-]+",relevance:0 +},n.ATTRIBUTE_SELECTOR_MODE,{className:"selector-tag", +begin:"\\b("+ae.join("|")+")\\b",relevance:0},{className:"selector-pseudo", +begin:":("+a.join("|")+")"},{className:"selector-pseudo", +begin:":(:)?("+t.join("|")+")"},r,{begin:/\(/,end:/\)/, +contains:[n.CSS_NUMBER_MODE]},n.CSS_VARIABLE,{className:"attribute", +begin:"\\b("+oe.join("|")+")\\b"},{ +begin:"\\b(whitespace|wait|w-resize|visible|vertical-text|vertical-ideographic|uppercase|upper-roman|upper-alpha|underline|transparent|top|thin|thick|text|text-top|text-bottom|tb-rl|table-header-group|table-footer-group|sw-resize|super|strict|static|square|solid|small-caps|separate|se-resize|scroll|s-resize|rtl|row-resize|ridge|right|repeat|repeat-y|repeat-x|relative|progress|pointer|overline|outside|outset|oblique|nowrap|not-allowed|normal|none|nw-resize|no-repeat|no-drop|newspaper|ne-resize|n-resize|move|middle|medium|ltr|lr-tb|lowercase|lower-roman|lower-alpha|loose|list-item|line|line-through|line-edge|lighter|left|keep-all|justify|italic|inter-word|inter-ideograph|inside|inset|inline|inline-block|inherit|inactive|ideograph-space|ideograph-parenthesis|ideograph-numeric|ideograph-alpha|horizontal|hidden|help|hand|groove|fixed|ellipsis|e-resize|double|dotted|distribute|distribute-space|distribute-letter|distribute-all-lines|disc|disabled|default|decimal|dashed|crosshair|collapse|col-resize|circle|char|center|capitalize|break-word|break-all|bottom|both|bolder|bold|block|bidi-override|below|baseline|auto|always|all-scroll|absolute|table|table-cell)\\b" +},{begin:/:/,end:/[;}{]/,relevance:0, +contains:[n.BLOCK_COMMENT,r,n.HEXCOLOR,n.CSS_NUMBER_MODE,e.QUOTE_STRING_MODE,e.APOS_STRING_MODE,n.IMPORTANT,n.FUNCTION_DISPATCH] +},{begin:"@(page|font-face)",keywords:{$pattern:i,keyword:"@page @font-face"}},{ +begin:"@",end:"[{;]",returnBegin:!0,keywords:{$pattern:/[a-z-]+/, +keyword:"and or not only",attribute:ie.join(" ")},contains:[{begin:i, +className:"keyword"},{begin:/[a-z-]+(?=:)/,className:"attribute" +},r,e.QUOTE_STRING_MODE,e.APOS_STRING_MODE,n.HEXCOLOR,n.CSS_NUMBER_MODE] +},n.FUNCTION_DISPATCH]}},grmr_shell:e=>({name:"Shell Session", +aliases:["console","shellsession"],contains:[{className:"meta.prompt", +begin:/^\s{0,3}[/~\w\d[\]()@-]*[>%$#][ ]?/,starts:{end:/[^\\](?=\s*$)/, +subLanguage:"bash"}}]}),grmr_sql:e=>{ +const n=e.regex,t=e.COMMENT("--","$"),a=["abs","acos","array_agg","asin","atan","avg","cast","ceil","ceiling","coalesce","corr","cos","cosh","count","covar_pop","covar_samp","cume_dist","dense_rank","deref","element","exp","extract","first_value","floor","json_array","json_arrayagg","json_exists","json_object","json_objectagg","json_query","json_table","json_table_primitive","json_value","lag","last_value","lead","listagg","ln","log","log10","lower","max","min","mod","nth_value","ntile","nullif","percent_rank","percentile_cont","percentile_disc","position","position_regex","power","rank","regr_avgx","regr_avgy","regr_count","regr_intercept","regr_r2","regr_slope","regr_sxx","regr_sxy","regr_syy","row_number","sin","sinh","sqrt","stddev_pop","stddev_samp","substring","substring_regex","sum","tan","tanh","translate","translate_regex","treat","trim","trim_array","unnest","upper","value_of","var_pop","var_samp","width_bucket"],i=a,r=["abs","acos","all","allocate","alter","and","any","are","array","array_agg","array_max_cardinality","as","asensitive","asin","asymmetric","at","atan","atomic","authorization","avg","begin","begin_frame","begin_partition","between","bigint","binary","blob","boolean","both","by","call","called","cardinality","cascaded","case","cast","ceil","ceiling","char","char_length","character","character_length","check","classifier","clob","close","coalesce","collate","collect","column","commit","condition","connect","constraint","contains","convert","copy","corr","corresponding","cos","cosh","count","covar_pop","covar_samp","create","cross","cube","cume_dist","current","current_catalog","current_date","current_default_transform_group","current_path","current_role","current_row","current_schema","current_time","current_timestamp","current_path","current_role","current_transform_group_for_type","current_user","cursor","cycle","date","day","deallocate","dec","decimal","decfloat","declare","default","define","delete","dense_rank","deref","describe","deterministic","disconnect","distinct","double","drop","dynamic","each","element","else","empty","end","end_frame","end_partition","end-exec","equals","escape","every","except","exec","execute","exists","exp","external","extract","false","fetch","filter","first_value","float","floor","for","foreign","frame_row","free","from","full","function","fusion","get","global","grant","group","grouping","groups","having","hold","hour","identity","in","indicator","initial","inner","inout","insensitive","insert","int","integer","intersect","intersection","interval","into","is","join","json_array","json_arrayagg","json_exists","json_object","json_objectagg","json_query","json_table","json_table_primitive","json_value","lag","language","large","last_value","lateral","lead","leading","left","like","like_regex","listagg","ln","local","localtime","localtimestamp","log","log10","lower","match","match_number","match_recognize","matches","max","member","merge","method","min","minute","mod","modifies","module","month","multiset","national","natural","nchar","nclob","new","no","none","normalize","not","nth_value","ntile","null","nullif","numeric","octet_length","occurrences_regex","of","offset","old","omit","on","one","only","open","or","order","out","outer","over","overlaps","overlay","parameter","partition","pattern","per","percent","percent_rank","percentile_cont","percentile_disc","period","portion","position","position_regex","power","precedes","precision","prepare","primary","procedure","ptf","range","rank","reads","real","recursive","ref","references","referencing","regr_avgx","regr_avgy","regr_count","regr_intercept","regr_r2","regr_slope","regr_sxx","regr_sxy","regr_syy","release","result","return","returns","revoke","right","rollback","rollup","row","row_number","rows","running","savepoint","scope","scroll","search","second","seek","select","sensitive","session_user","set","show","similar","sin","sinh","skip","smallint","some","specific","specifictype","sql","sqlexception","sqlstate","sqlwarning","sqrt","start","static","stddev_pop","stddev_samp","submultiset","subset","substring","substring_regex","succeeds","sum","symmetric","system","system_time","system_user","table","tablesample","tan","tanh","then","time","timestamp","timezone_hour","timezone_minute","to","trailing","translate","translate_regex","translation","treat","trigger","trim","trim_array","true","truncate","uescape","union","unique","unknown","unnest","update","upper","user","using","value","values","value_of","var_pop","var_samp","varbinary","varchar","varying","versioning","when","whenever","where","width_bucket","window","with","within","without","year","add","asc","collation","desc","final","first","last","view"].filter((e=>!a.includes(e))),s={ +match:n.concat(/\b/,n.either(...i),/\s*\(/),relevance:0,keywords:{built_in:i}} +;function o(e){ +return n.concat(/\b/,n.either(...e.map((e=>e.replace(/\s+/,"\\s+")))),/\b/)} +const l={scope:"keyword", +match:o(["create table","insert into","primary key","foreign key","not null","alter table","add constraint","grouping sets","on overflow","character set","respect nulls","ignore nulls","nulls first","nulls last","depth first","breadth first"]), +relevance:0};return{name:"SQL",case_insensitive:!0,illegal:/[{}]|<\//,keywords:{ +$pattern:/\b[\w\.]+/,keyword:((e,{exceptions:n,when:t}={})=>{const a=t +;return n=n||[],e.map((e=>e.match(/\|\d+$/)||n.includes(e)?e:a(e)?e+"|0":e)) +})(r,{when:e=>e.length<3}),literal:["true","false","unknown"], +type:["bigint","binary","blob","boolean","char","character","clob","date","dec","decfloat","decimal","float","int","integer","interval","nchar","nclob","national","numeric","real","row","smallint","time","timestamp","varchar","varying","varbinary"], +built_in:["current_catalog","current_date","current_default_transform_group","current_path","current_role","current_schema","current_transform_group_for_type","current_user","session_user","system_time","system_user","current_time","localtime","current_timestamp","localtimestamp"] +},contains:[{scope:"type", +match:o(["double precision","large object","with timezone","without timezone"]) +},l,s,{scope:"variable",match:/@[a-z0-9][a-z0-9_]*/},{scope:"string",variants:[{ +begin:/'/,end:/'/,contains:[{match:/''/}]}]},{begin:/"/,end:/"/,contains:[{ +match:/""/}]},e.C_NUMBER_MODE,e.C_BLOCK_COMMENT_MODE,t,{scope:"operator", +match:/[-+*/=%^~]|&&?|\|\|?|!=?|<(?:=>?|<|>)?|>[>=]?/,relevance:0}]}}, +grmr_swift:e=>{const n={match:/\s+/,relevance:0},t=e.COMMENT("/\\*","\\*/",{ +contains:["self"]}),a=[e.C_LINE_COMMENT_MODE,t],i={match:[/\./,m(...ke,...xe)], +className:{2:"keyword"}},r={match:b(/\./,m(...Me)),relevance:0 +},s=Me.filter((e=>"string"==typeof e)).concat(["_|0"]),o={variants:[{ +className:"keyword", +match:m(...Me.filter((e=>"string"!=typeof e)).concat(Oe).map(Ne),...xe)}]},l={ +$pattern:m(/\b\w+/,/#\w+/),keyword:s.concat(Ce),literal:Ae},c=[i,r,o],g=[{ +match:b(/\./,m(...Te)),relevance:0},{className:"built_in", +match:b(/\b/,m(...Te),/(?=\()/)}],u={match:/->/,relevance:0},p=[u,{ +className:"operator",relevance:0,variants:[{match:Ie},{match:`\\.(\\.|${De})+`}] +}],_="([0-9]_*)+",h="([0-9a-fA-F]_*)+",f={className:"number",relevance:0, +variants:[{match:`\\b(${_})(\\.(${_}))?([eE][+-]?(${_}))?\\b`},{ +match:`\\b0x(${h})(\\.(${h}))?([pP][+-]?(${_}))?\\b`},{match:/\b0o([0-7]_*)+\b/ +},{match:/\b0b([01]_*)+\b/}]},E=(e="")=>({className:"subst",variants:[{ +match:b(/\\/,e,/[0\\tnr"']/)},{match:b(/\\/,e,/u\{[0-9a-fA-F]{1,8}\}/)}] +}),y=(e="")=>({className:"subst",match:b(/\\/,e,/[\t ]*(?:[\r\n]|\r\n)/) +}),w=(e="")=>({className:"subst",label:"interpol",begin:b(/\\/,e,/\(/),end:/\)/ +}),v=(e="")=>({begin:b(e,/"""/),end:b(/"""/,e),contains:[E(e),y(e),w(e)] +}),N=(e="")=>({begin:b(e,/"/),end:b(/"/,e),contains:[E(e),w(e)]}),k={ +className:"string", +variants:[v(),v("#"),v("##"),v("###"),N(),N("#"),N("##"),N("###")] +},x=[e.BACKSLASH_ESCAPE,{begin:/\[/,end:/\]/,relevance:0, +contains:[e.BACKSLASH_ESCAPE]}],O={begin:/\/[^\s](?=[^/\n]*\/)/,end:/\//, +contains:x},M=e=>{const n=b(e,/\//),t=b(/\//,e);return{begin:n,end:t, +contains:[...x,{scope:"comment",begin:`#(?!.*${t})`,end:/$/}]}},A={ +scope:"regexp",variants:[M("###"),M("##"),M("#"),O]},S={match:b(/`/,$e,/`/) +},C=[S,{className:"variable",match:/\$\d+/},{className:"variable", +match:`\\$${Be}+`}],T=[{match:/(@|#(un)?)available/,scope:"keyword",starts:{ +contains:[{begin:/\(/,end:/\)/,keywords:je,contains:[...p,f,k]}]}},{ +scope:"keyword",match:b(/@/,m(...ze),d(m(/\(/,/\s+/)))},{scope:"meta", +match:b(/@/,$e)}],R={match:d(/\b[A-Z]/),relevance:0,contains:[{className:"type", +match:b(/(AV|CA|CF|CG|CI|CL|CM|CN|CT|MK|MP|MTK|MTL|NS|SCN|SK|UI|WK|XC)/,Be,"+") +},{className:"type",match:Fe,relevance:0},{match:/[?!]+/,relevance:0},{ +match:/\.\.\./,relevance:0},{match:b(/\s+&\s+/,d(Fe)),relevance:0}]},D={ +begin://,keywords:l,contains:[...a,...c,...T,u,R]};R.contains.push(D) +;const I={begin:/\(/,end:/\)/,relevance:0,keywords:l,contains:["self",{ +match:b($e,/\s*:/),keywords:"_|0",relevance:0 +},...a,A,...c,...g,...p,f,k,...C,...T,R]},L={begin://, +keywords:"repeat each",contains:[...a,R]},B={begin:/\(/,end:/\)/,keywords:l, +contains:[{begin:m(d(b($e,/\s*:/)),d(b($e,/\s+/,$e,/\s*:/))),end:/:/, +relevance:0,contains:[{className:"keyword",match:/\b_\b/},{className:"params", +match:$e}]},...a,...c,...p,f,k,...T,R,I],endsParent:!0,illegal:/["']/},$={ +match:[/(func|macro)/,/\s+/,m(S.match,$e,Ie)],className:{1:"keyword", +3:"title.function"},contains:[L,B,n],illegal:[/\[/,/%/]},F={ +match:[/\b(?:subscript|init[?!]?)/,/\s*(?=[<(])/],className:{1:"keyword"}, +contains:[L,B,n],illegal:/\[|%/},z={match:[/operator/,/\s+/,Ie],className:{ +1:"keyword",3:"title"}},j={begin:[/precedencegroup/,/\s+/,Fe],className:{ +1:"keyword",3:"title"},contains:[R],keywords:[...Se,...Ae],end:/}/},U={ +begin:[/(struct|protocol|class|extension|enum|actor)/,/\s+/,$e,/\s*/], +beginScope:{1:"keyword",3:"title.class"},keywords:l,contains:[L,...c,{begin:/:/, +end:/\{/,keywords:l,contains:[{scope:"title.class.inherited",match:Fe},...c], +relevance:0}]};for(const e of k.variants){ +const n=e.contains.find((e=>"interpol"===e.label));n.keywords=l +;const t=[...c,...g,...p,f,k,...C];n.contains=[...t,{begin:/\(/,end:/\)/, +contains:["self",...t]}]}return{name:"Swift",keywords:l,contains:[...a,$,F,{ +match:[/class\b/,/\s+/,/func\b/,/\s+/,/\b[A-Za-z_][A-Za-z0-9_]*\b/],scope:{ +1:"keyword",3:"keyword",5:"title.function"}},{match:[/class\b/,/\s+/,/var\b/], +scope:{1:"keyword",3:"keyword"}},U,z,j,{beginKeywords:"import",end:/$/, +contains:[...a],relevance:0},A,...c,...g,...p,f,k,...C,...T,R,I]}}, +grmr_typescript:e=>{ +const n=e.regex,t=ve(e),a=me,i=["any","void","number","boolean","string","object","never","symbol","bigint","unknown"],r={ +begin:[/namespace/,/\s+/,e.IDENT_RE],beginScope:{1:"keyword",3:"title.class"} +},s={beginKeywords:"interface",end:/\{/,excludeEnd:!0,keywords:{ +keyword:"interface extends",built_in:i},contains:[t.exports.CLASS_REFERENCE] +},o={$pattern:me, +keyword:pe.concat(["type","interface","public","private","protected","implements","declare","abstract","readonly","enum","override","satisfies"]), +literal:_e,built_in:we.concat(i),"variable.language":ye},l={className:"meta", +begin:"@"+a},c=(e,n,t)=>{const a=e.contains.findIndex((e=>e.label===n)) +;if(-1===a)throw Error("can not find mode to replace");e.contains.splice(a,1,t)} +;Object.assign(t.keywords,o),t.exports.PARAMS_CONTAINS.push(l) +;const d=t.contains.find((e=>"attr"===e.scope)),g=Object.assign({},d,{ +match:n.concat(a,n.lookahead(/\s*\?:/))}) +;return t.exports.PARAMS_CONTAINS.push([t.exports.CLASS_REFERENCE,d,g]), +t.contains=t.contains.concat([l,r,s,g]), +c(t,"shebang",e.SHEBANG()),c(t,"use_strict",{className:"meta",relevance:10, +begin:/^\s*['"]use strict['"]/ +}),t.contains.find((e=>"func.def"===e.label)).relevance=0,Object.assign(t,{ +name:"TypeScript",aliases:["ts","tsx","mts","cts"]}),t},grmr_vbnet:e=>{ +const n=e.regex,t=/\d{1,2}\/\d{1,2}\/\d{4}/,a=/\d{4}-\d{1,2}-\d{1,2}/,i=/(\d|1[012])(:\d+){0,2} *(AM|PM)/,r=/\d{1,2}(:\d{1,2}){1,2}/,s={ +className:"literal",variants:[{begin:n.concat(/# */,n.either(a,t),/ *#/)},{ +begin:n.concat(/# */,r,/ *#/)},{begin:n.concat(/# */,i,/ *#/)},{ +begin:n.concat(/# */,n.either(a,t),/ +/,n.either(i,r),/ *#/)}] +},o=e.COMMENT(/'''/,/$/,{contains:[{className:"doctag",begin:/<\/?/,end:/>/}] +}),l=e.COMMENT(null,/$/,{variants:[{begin:/'/},{begin:/([\t ]|^)REM(?=\s)/}]}) +;return{name:"Visual Basic .NET",aliases:["vb"],case_insensitive:!0, +classNameAliases:{label:"symbol"},keywords:{ +keyword:"addhandler alias aggregate ansi as async assembly auto binary by byref byval call case catch class compare const continue custom declare default delegate dim distinct do each equals else elseif end enum erase error event exit explicit finally for friend from function get global goto group handles if implements imports in inherits interface into iterator join key let lib loop me mid module mustinherit mustoverride mybase myclass namespace narrowing new next notinheritable notoverridable of off on operator option optional order overloads overridable overrides paramarray partial preserve private property protected public raiseevent readonly redim removehandler resume return select set shadows shared skip static step stop structure strict sub synclock take text then throw to try unicode until using when where while widening with withevents writeonly yield", +built_in:"addressof and andalso await directcast gettype getxmlnamespace is isfalse isnot istrue like mod nameof new not or orelse trycast typeof xor cbool cbyte cchar cdate cdbl cdec cint clng cobj csbyte cshort csng cstr cuint culng cushort", +type:"boolean byte char date decimal double integer long object sbyte short single string uinteger ulong ushort", +literal:"true false nothing"}, +illegal:"//|\\{|\\}|endif|gosub|variant|wend|^\\$ ",contains:[{ +className:"string",begin:/"(""|[^/n])"C\b/},{className:"string",begin:/"/, +end:/"/,illegal:/\n/,contains:[{begin:/""/}]},s,{className:"number",relevance:0, +variants:[{begin:/\b\d[\d_]*((\.[\d_]+(E[+-]?[\d_]+)?)|(E[+-]?[\d_]+))[RFD@!#]?/ +},{begin:/\b\d[\d_]*((U?[SIL])|[%&])?/},{begin:/&H[\dA-F_]+((U?[SIL])|[%&])?/},{ +begin:/&O[0-7_]+((U?[SIL])|[%&])?/},{begin:/&B[01_]+((U?[SIL])|[%&])?/}]},{ +className:"label",begin:/^\w+:/},o,l,{className:"meta", +begin:/[\t ]*#(const|disable|else|elseif|enable|end|externalsource|if|region)\b/, +end:/$/,keywords:{ +keyword:"const disable else elseif enable end externalsource if region then"}, +contains:[l]}]}},grmr_wasm:e=>{e.regex;const n=e.COMMENT(/\(;/,/;\)/) +;return n.contains.push("self"),{name:"WebAssembly",keywords:{$pattern:/[\w.]+/, +keyword:["anyfunc","block","br","br_if","br_table","call","call_indirect","data","drop","elem","else","end","export","func","global.get","global.set","local.get","local.set","local.tee","get_global","get_local","global","if","import","local","loop","memory","memory.grow","memory.size","module","mut","nop","offset","param","result","return","select","set_global","set_local","start","table","tee_local","then","type","unreachable"] +},contains:[e.COMMENT(/;;/,/$/),n,{match:[/(?:offset|align)/,/\s*/,/=/], +className:{1:"keyword",3:"operator"}},{className:"variable",begin:/\$[\w_]+/},{ +match:/(\((?!;)|\))+/,className:"punctuation",relevance:0},{ +begin:[/(?:func|call|call_indirect)/,/\s+/,/\$[^\s)]+/],className:{1:"keyword", +3:"title.function"}},e.QUOTE_STRING_MODE,{match:/(i32|i64|f32|f64)(?!\.)/, +className:"type"},{className:"keyword", +match:/\b(f32|f64|i32|i64)(?:\.(?:abs|add|and|ceil|clz|const|convert_[su]\/i(?:32|64)|copysign|ctz|demote\/f64|div(?:_[su])?|eqz?|extend_[su]\/i32|floor|ge(?:_[su])?|gt(?:_[su])?|le(?:_[su])?|load(?:(?:8|16|32)_[su])?|lt(?:_[su])?|max|min|mul|nearest|neg?|or|popcnt|promote\/f32|reinterpret\/[fi](?:32|64)|rem_[su]|rot[lr]|shl|shr_[su]|store(?:8|16|32)?|sqrt|sub|trunc(?:_[su]\/f(?:32|64))?|wrap\/i64|xor))\b/ +},{className:"number",relevance:0, +match:/[+-]?\b(?:\d(?:_?\d)*(?:\.\d(?:_?\d)*)?(?:[eE][+-]?\d(?:_?\d)*)?|0x[\da-fA-F](?:_?[\da-fA-F])*(?:\.[\da-fA-F](?:_?[\da-fA-D])*)?(?:[pP][+-]?\d(?:_?\d)*)?)\b|\binf\b|\bnan(?::0x[\da-fA-F](?:_?[\da-fA-D])*)?\b/ +}]}},grmr_xml:e=>{ +const n=e.regex,t=n.concat(/[\p{L}_]/u,n.optional(/[\p{L}0-9_.-]*:/u),/[\p{L}0-9_.-]*/u),a={ +className:"symbol",begin:/&[a-z]+;|&#[0-9]+;|&#x[a-f0-9]+;/},i={begin:/\s/, +contains:[{className:"keyword",begin:/#?[a-z_][a-z1-9_-]+/,illegal:/\n/}] +},r=e.inherit(i,{begin:/\(/,end:/\)/}),s=e.inherit(e.APOS_STRING_MODE,{ +className:"string"}),o=e.inherit(e.QUOTE_STRING_MODE,{className:"string"}),l={ +endsWithParent:!0,illegal:/`]+/}]}]}]};return{ +name:"HTML, XML", +aliases:["html","xhtml","rss","atom","xjb","xsd","xsl","plist","wsf","svg"], +case_insensitive:!0,unicodeRegex:!0,contains:[{className:"meta",begin://,relevance:10,contains:[i,o,s,r,{begin:/\[/,end:/\]/,contains:[{ +className:"meta",begin://,contains:[i,r,o,s]}]}] +},e.COMMENT(//,{relevance:10}),{begin://, +relevance:10},a,{className:"meta",end:/\?>/,variants:[{begin:/<\?xml/, +relevance:10,contains:[o]},{begin:/<\?[a-z][a-z0-9]+/}]},{className:"tag", +begin:/)/,end:/>/,keywords:{name:"style"},contains:[l],starts:{ +end:/<\/style>/,returnEnd:!0,subLanguage:["css","xml"]}},{className:"tag", +begin:/)/,end:/>/,keywords:{name:"script"},contains:[l],starts:{ +end:/<\/script>/,returnEnd:!0,subLanguage:["javascript","handlebars","xml"]}},{ +className:"tag",begin:/<>|<\/>/},{className:"tag", +begin:n.concat(//,/>/,/\s/)))), +end:/\/?>/,contains:[{className:"name",begin:t,relevance:0,starts:l}]},{ +className:"tag",begin:n.concat(/<\//,n.lookahead(n.concat(t,/>/))),contains:[{ +className:"name",begin:t,relevance:0},{begin:/>/,relevance:0,endsParent:!0}]}]} +},grmr_yaml:e=>{ +const n="true false yes no null",t="[\\w#;/?:@&=+$,.~*'()[\\]]+",a={ +className:"string",relevance:0,variants:[{begin:/"/,end:/"/},{begin:/\S+/}], +contains:[e.BACKSLASH_ESCAPE,{className:"template-variable",variants:[{ +begin:/\{\{/,end:/\}\}/},{begin:/%\{/,end:/\}/}]}]},i=e.inherit(a,{variants:[{ +begin:/'/,end:/'/,contains:[{begin:/''/,relevance:0}]},{begin:/"/,end:/"/},{ +begin:/[^\s,{}[\]]+/}]}),r={end:",",endsWithParent:!0,excludeEnd:!0,keywords:n, +relevance:0},s={begin:/\{/,end:/\}/,contains:[r],illegal:"\\n",relevance:0},o={ +begin:"\\[",end:"\\]",contains:[r],illegal:"\\n",relevance:0},l=[{ +className:"attr",variants:[{begin:/[\w*@][\w*@ :()\./-]*:(?=[ \t]|$)/},{ +begin:/"[\w*@][\w*@ :()\./-]*":(?=[ \t]|$)/},{ +begin:/'[\w*@][\w*@ :()\./-]*':(?=[ \t]|$)/}]},{className:"meta", +begin:"^---\\s*$",relevance:10},{className:"string", +begin:"[\\|>]([1-9]?[+-])?[ ]*\\n( +)[^ ][^\\n]*\\n(\\2[^\\n]+\\n?)*"},{ +begin:"<%[%=-]?",end:"[%-]?%>",subLanguage:"ruby",excludeBegin:!0,excludeEnd:!0, +relevance:0},{className:"type",begin:"!\\w+!"+t},{className:"type", +begin:"!<"+t+">"},{className:"type",begin:"!"+t},{className:"type",begin:"!!"+t +},{className:"meta",begin:"&"+e.UNDERSCORE_IDENT_RE+"$"},{className:"meta", +begin:"\\*"+e.UNDERSCORE_IDENT_RE+"$"},{className:"bullet",begin:"-(?=[ ]|$)", +relevance:0},e.HASH_COMMENT_MODE,{beginKeywords:n,keywords:{literal:n}},{ +className:"number", +begin:"\\b[0-9]{4}(-[0-9][0-9]){0,2}([Tt \\t][0-9][0-9]?(:[0-9][0-9]){2})?(\\.[0-9]*)?([ \\t])*(Z|[-+][0-9][0-9]?(:[0-9][0-9])?)?\\b" +},{className:"number",begin:e.C_NUMBER_RE+"\\b",relevance:0},s,o,{ +className:"string",relevance:0,begin:/'/,end:/'/,contains:[{match:/''/, +scope:"char.escape",relevance:0}]},a],c=[...l] +;return c.pop(),c.push(i),r.contains=c,{name:"YAML",case_insensitive:!0, +aliases:["yml"],contains:l}}});const Pe=ne;for(const e of Object.keys(Ue)){ +const n=e.replace("grmr_","").replace("_","-");Pe.registerLanguage(n,Ue[e])} +return Pe}() +;"object"==typeof exports&&"undefined"!=typeof module&&(module.exports=hljs); \ No newline at end of file diff --git a/Perlite/perlite/.js/jquery.min.js b/Perlite/perlite/.js/jquery.min.js new file mode 100644 index 0000000..7f37b5d --- /dev/null +++ b/Perlite/perlite/.js/jquery.min.js @@ -0,0 +1,2 @@ +/*! jQuery v3.7.1 | (c) OpenJS Foundation and other contributors | jquery.org/license */ +!function(e,t){"use strict";"object"==typeof module&&"object"==typeof module.exports?module.exports=e.document?t(e,!0):function(e){if(!e.document)throw new Error("jQuery requires a window with a document");return t(e)}:t(e)}("undefined"!=typeof window?window:this,function(ie,e){"use strict";var oe=[],r=Object.getPrototypeOf,ae=oe.slice,g=oe.flat?function(e){return oe.flat.call(e)}:function(e){return oe.concat.apply([],e)},s=oe.push,se=oe.indexOf,n={},i=n.toString,ue=n.hasOwnProperty,o=ue.toString,a=o.call(Object),le={},v=function(e){return"function"==typeof e&&"number"!=typeof e.nodeType&&"function"!=typeof e.item},y=function(e){return null!=e&&e===e.window},C=ie.document,u={type:!0,src:!0,nonce:!0,noModule:!0};function m(e,t,n){var r,i,o=(n=n||C).createElement("script");if(o.text=e,t)for(r in u)(i=t[r]||t.getAttribute&&t.getAttribute(r))&&o.setAttribute(r,i);n.head.appendChild(o).parentNode.removeChild(o)}function x(e){return null==e?e+"":"object"==typeof e||"function"==typeof e?n[i.call(e)]||"object":typeof e}var t="3.7.1",l=/HTML$/i,ce=function(e,t){return new ce.fn.init(e,t)};function c(e){var t=!!e&&"length"in e&&e.length,n=x(e);return!v(e)&&!y(e)&&("array"===n||0===t||"number"==typeof t&&0+~]|"+ge+")"+ge+"*"),x=new RegExp(ge+"|>"),j=new RegExp(g),A=new RegExp("^"+t+"$"),D={ID:new RegExp("^#("+t+")"),CLASS:new RegExp("^\\.("+t+")"),TAG:new RegExp("^("+t+"|[*])"),ATTR:new RegExp("^"+p),PSEUDO:new RegExp("^"+g),CHILD:new RegExp("^:(only|first|last|nth|nth-last)-(child|of-type)(?:\\("+ge+"*(even|odd|(([+-]|)(\\d*)n|)"+ge+"*(?:([+-]|)"+ge+"*(\\d+)|))"+ge+"*\\)|)","i"),bool:new RegExp("^(?:"+f+")$","i"),needsContext:new RegExp("^"+ge+"*[>+~]|:(even|odd|eq|gt|lt|nth|first|last)(?:\\("+ge+"*((?:-\\d)?\\d*)"+ge+"*\\)|)(?=[^-]|$)","i")},N=/^(?:input|select|textarea|button)$/i,q=/^h\d$/i,L=/^(?:#([\w-]+)|(\w+)|\.([\w-]+))$/,H=/[+~]/,O=new RegExp("\\\\[\\da-fA-F]{1,6}"+ge+"?|\\\\([^\\r\\n\\f])","g"),P=function(e,t){var n="0x"+e.slice(1)-65536;return t||(n<0?String.fromCharCode(n+65536):String.fromCharCode(n>>10|55296,1023&n|56320))},M=function(){V()},R=J(function(e){return!0===e.disabled&&fe(e,"fieldset")},{dir:"parentNode",next:"legend"});try{k.apply(oe=ae.call(ye.childNodes),ye.childNodes),oe[ye.childNodes.length].nodeType}catch(e){k={apply:function(e,t){me.apply(e,ae.call(t))},call:function(e){me.apply(e,ae.call(arguments,1))}}}function I(t,e,n,r){var i,o,a,s,u,l,c,f=e&&e.ownerDocument,p=e?e.nodeType:9;if(n=n||[],"string"!=typeof t||!t||1!==p&&9!==p&&11!==p)return n;if(!r&&(V(e),e=e||T,C)){if(11!==p&&(u=L.exec(t)))if(i=u[1]){if(9===p){if(!(a=e.getElementById(i)))return n;if(a.id===i)return k.call(n,a),n}else if(f&&(a=f.getElementById(i))&&I.contains(e,a)&&a.id===i)return k.call(n,a),n}else{if(u[2])return k.apply(n,e.getElementsByTagName(t)),n;if((i=u[3])&&e.getElementsByClassName)return k.apply(n,e.getElementsByClassName(i)),n}if(!(h[t+" "]||d&&d.test(t))){if(c=t,f=e,1===p&&(x.test(t)||m.test(t))){(f=H.test(t)&&U(e.parentNode)||e)==e&&le.scope||((s=e.getAttribute("id"))?s=ce.escapeSelector(s):e.setAttribute("id",s=S)),o=(l=Y(t)).length;while(o--)l[o]=(s?"#"+s:":scope")+" "+Q(l[o]);c=l.join(",")}try{return k.apply(n,f.querySelectorAll(c)),n}catch(e){h(t,!0)}finally{s===S&&e.removeAttribute("id")}}}return re(t.replace(ve,"$1"),e,n,r)}function W(){var r=[];return function e(t,n){return r.push(t+" ")>b.cacheLength&&delete e[r.shift()],e[t+" "]=n}}function F(e){return e[S]=!0,e}function $(e){var t=T.createElement("fieldset");try{return!!e(t)}catch(e){return!1}finally{t.parentNode&&t.parentNode.removeChild(t),t=null}}function B(t){return function(e){return fe(e,"input")&&e.type===t}}function _(t){return function(e){return(fe(e,"input")||fe(e,"button"))&&e.type===t}}function z(t){return function(e){return"form"in e?e.parentNode&&!1===e.disabled?"label"in e?"label"in e.parentNode?e.parentNode.disabled===t:e.disabled===t:e.isDisabled===t||e.isDisabled!==!t&&R(e)===t:e.disabled===t:"label"in e&&e.disabled===t}}function X(a){return F(function(o){return o=+o,F(function(e,t){var n,r=a([],e.length,o),i=r.length;while(i--)e[n=r[i]]&&(e[n]=!(t[n]=e[n]))})})}function U(e){return e&&"undefined"!=typeof e.getElementsByTagName&&e}function V(e){var t,n=e?e.ownerDocument||e:ye;return n!=T&&9===n.nodeType&&n.documentElement&&(r=(T=n).documentElement,C=!ce.isXMLDoc(T),i=r.matches||r.webkitMatchesSelector||r.msMatchesSelector,r.msMatchesSelector&&ye!=T&&(t=T.defaultView)&&t.top!==t&&t.addEventListener("unload",M),le.getById=$(function(e){return r.appendChild(e).id=ce.expando,!T.getElementsByName||!T.getElementsByName(ce.expando).length}),le.disconnectedMatch=$(function(e){return i.call(e,"*")}),le.scope=$(function(){return T.querySelectorAll(":scope")}),le.cssHas=$(function(){try{return T.querySelector(":has(*,:jqfake)"),!1}catch(e){return!0}}),le.getById?(b.filter.ID=function(e){var t=e.replace(O,P);return function(e){return e.getAttribute("id")===t}},b.find.ID=function(e,t){if("undefined"!=typeof t.getElementById&&C){var n=t.getElementById(e);return n?[n]:[]}}):(b.filter.ID=function(e){var n=e.replace(O,P);return function(e){var t="undefined"!=typeof e.getAttributeNode&&e.getAttributeNode("id");return t&&t.value===n}},b.find.ID=function(e,t){if("undefined"!=typeof t.getElementById&&C){var n,r,i,o=t.getElementById(e);if(o){if((n=o.getAttributeNode("id"))&&n.value===e)return[o];i=t.getElementsByName(e),r=0;while(o=i[r++])if((n=o.getAttributeNode("id"))&&n.value===e)return[o]}return[]}}),b.find.TAG=function(e,t){return"undefined"!=typeof t.getElementsByTagName?t.getElementsByTagName(e):t.querySelectorAll(e)},b.find.CLASS=function(e,t){if("undefined"!=typeof t.getElementsByClassName&&C)return t.getElementsByClassName(e)},d=[],$(function(e){var t;r.appendChild(e).innerHTML="",e.querySelectorAll("[selected]").length||d.push("\\["+ge+"*(?:value|"+f+")"),e.querySelectorAll("[id~="+S+"-]").length||d.push("~="),e.querySelectorAll("a#"+S+"+*").length||d.push(".#.+[+~]"),e.querySelectorAll(":checked").length||d.push(":checked"),(t=T.createElement("input")).setAttribute("type","hidden"),e.appendChild(t).setAttribute("name","D"),r.appendChild(e).disabled=!0,2!==e.querySelectorAll(":disabled").length&&d.push(":enabled",":disabled"),(t=T.createElement("input")).setAttribute("name",""),e.appendChild(t),e.querySelectorAll("[name='']").length||d.push("\\["+ge+"*name"+ge+"*="+ge+"*(?:''|\"\")")}),le.cssHas||d.push(":has"),d=d.length&&new RegExp(d.join("|")),l=function(e,t){if(e===t)return a=!0,0;var n=!e.compareDocumentPosition-!t.compareDocumentPosition;return n||(1&(n=(e.ownerDocument||e)==(t.ownerDocument||t)?e.compareDocumentPosition(t):1)||!le.sortDetached&&t.compareDocumentPosition(e)===n?e===T||e.ownerDocument==ye&&I.contains(ye,e)?-1:t===T||t.ownerDocument==ye&&I.contains(ye,t)?1:o?se.call(o,e)-se.call(o,t):0:4&n?-1:1)}),T}for(e in I.matches=function(e,t){return I(e,null,null,t)},I.matchesSelector=function(e,t){if(V(e),C&&!h[t+" "]&&(!d||!d.test(t)))try{var n=i.call(e,t);if(n||le.disconnectedMatch||e.document&&11!==e.document.nodeType)return n}catch(e){h(t,!0)}return 0":{dir:"parentNode",first:!0}," ":{dir:"parentNode"},"+":{dir:"previousSibling",first:!0},"~":{dir:"previousSibling"}},preFilter:{ATTR:function(e){return e[1]=e[1].replace(O,P),e[3]=(e[3]||e[4]||e[5]||"").replace(O,P),"~="===e[2]&&(e[3]=" "+e[3]+" "),e.slice(0,4)},CHILD:function(e){return e[1]=e[1].toLowerCase(),"nth"===e[1].slice(0,3)?(e[3]||I.error(e[0]),e[4]=+(e[4]?e[5]+(e[6]||1):2*("even"===e[3]||"odd"===e[3])),e[5]=+(e[7]+e[8]||"odd"===e[3])):e[3]&&I.error(e[0]),e},PSEUDO:function(e){var t,n=!e[6]&&e[2];return D.CHILD.test(e[0])?null:(e[3]?e[2]=e[4]||e[5]||"":n&&j.test(n)&&(t=Y(n,!0))&&(t=n.indexOf(")",n.length-t)-n.length)&&(e[0]=e[0].slice(0,t),e[2]=n.slice(0,t)),e.slice(0,3))}},filter:{TAG:function(e){var t=e.replace(O,P).toLowerCase();return"*"===e?function(){return!0}:function(e){return fe(e,t)}},CLASS:function(e){var t=s[e+" "];return t||(t=new RegExp("(^|"+ge+")"+e+"("+ge+"|$)"))&&s(e,function(e){return t.test("string"==typeof e.className&&e.className||"undefined"!=typeof e.getAttribute&&e.getAttribute("class")||"")})},ATTR:function(n,r,i){return function(e){var t=I.attr(e,n);return null==t?"!="===r:!r||(t+="","="===r?t===i:"!="===r?t!==i:"^="===r?i&&0===t.indexOf(i):"*="===r?i&&-1:\x20\t\r\n\f]*)[\x20\t\r\n\f]*\/?>(?:<\/\1>|)$/i;function T(e,n,r){return v(n)?ce.grep(e,function(e,t){return!!n.call(e,t,e)!==r}):n.nodeType?ce.grep(e,function(e){return e===n!==r}):"string"!=typeof n?ce.grep(e,function(e){return-1)[^>]*|#([\w-]+))$/;(ce.fn.init=function(e,t,n){var r,i;if(!e)return this;if(n=n||k,"string"==typeof e){if(!(r="<"===e[0]&&">"===e[e.length-1]&&3<=e.length?[null,e,null]:S.exec(e))||!r[1]&&t)return!t||t.jquery?(t||n).find(e):this.constructor(t).find(e);if(r[1]){if(t=t instanceof ce?t[0]:t,ce.merge(this,ce.parseHTML(r[1],t&&t.nodeType?t.ownerDocument||t:C,!0)),w.test(r[1])&&ce.isPlainObject(t))for(r in t)v(this[r])?this[r](t[r]):this.attr(r,t[r]);return this}return(i=C.getElementById(r[2]))&&(this[0]=i,this.length=1),this}return e.nodeType?(this[0]=e,this.length=1,this):v(e)?void 0!==n.ready?n.ready(e):e(ce):ce.makeArray(e,this)}).prototype=ce.fn,k=ce(C);var E=/^(?:parents|prev(?:Until|All))/,j={children:!0,contents:!0,next:!0,prev:!0};function A(e,t){while((e=e[t])&&1!==e.nodeType);return e}ce.fn.extend({has:function(e){var t=ce(e,this),n=t.length;return this.filter(function(){for(var e=0;e\x20\t\r\n\f]*)/i,Ce=/^$|^module$|\/(?:java|ecma)script/i;xe=C.createDocumentFragment().appendChild(C.createElement("div")),(be=C.createElement("input")).setAttribute("type","radio"),be.setAttribute("checked","checked"),be.setAttribute("name","t"),xe.appendChild(be),le.checkClone=xe.cloneNode(!0).cloneNode(!0).lastChild.checked,xe.innerHTML="",le.noCloneChecked=!!xe.cloneNode(!0).lastChild.defaultValue,xe.innerHTML="",le.option=!!xe.lastChild;var ke={thead:[1,"","
"],col:[2,"","
"],tr:[2,"","
"],td:[3,"","
"],_default:[0,"",""]};function Se(e,t){var n;return n="undefined"!=typeof e.getElementsByTagName?e.getElementsByTagName(t||"*"):"undefined"!=typeof e.querySelectorAll?e.querySelectorAll(t||"*"):[],void 0===t||t&&fe(e,t)?ce.merge([e],n):n}function Ee(e,t){for(var n=0,r=e.length;n",""]);var je=/<|&#?\w+;/;function Ae(e,t,n,r,i){for(var o,a,s,u,l,c,f=t.createDocumentFragment(),p=[],d=0,h=e.length;d\s*$/g;function Re(e,t){return fe(e,"table")&&fe(11!==t.nodeType?t:t.firstChild,"tr")&&ce(e).children("tbody")[0]||e}function Ie(e){return e.type=(null!==e.getAttribute("type"))+"/"+e.type,e}function We(e){return"true/"===(e.type||"").slice(0,5)?e.type=e.type.slice(5):e.removeAttribute("type"),e}function Fe(e,t){var n,r,i,o,a,s;if(1===t.nodeType){if(_.hasData(e)&&(s=_.get(e).events))for(i in _.remove(t,"handle events"),s)for(n=0,r=s[i].length;n").attr(n.scriptAttrs||{}).prop({charset:n.scriptCharset,src:n.url}).on("load error",i=function(e){r.remove(),i=null,e&&t("error"===e.type?404:200,e.type)}),C.head.appendChild(r[0])},abort:function(){i&&i()}}});var Jt,Kt=[],Zt=/(=)\?(?=&|$)|\?\?/;ce.ajaxSetup({jsonp:"callback",jsonpCallback:function(){var e=Kt.pop()||ce.expando+"_"+jt.guid++;return this[e]=!0,e}}),ce.ajaxPrefilter("json jsonp",function(e,t,n){var r,i,o,a=!1!==e.jsonp&&(Zt.test(e.url)?"url":"string"==typeof e.data&&0===(e.contentType||"").indexOf("application/x-www-form-urlencoded")&&Zt.test(e.data)&&"data");if(a||"jsonp"===e.dataTypes[0])return r=e.jsonpCallback=v(e.jsonpCallback)?e.jsonpCallback():e.jsonpCallback,a?e[a]=e[a].replace(Zt,"$1"+r):!1!==e.jsonp&&(e.url+=(At.test(e.url)?"&":"?")+e.jsonp+"="+r),e.converters["script json"]=function(){return o||ce.error(r+" was not called"),o[0]},e.dataTypes[0]="json",i=ie[r],ie[r]=function(){o=arguments},n.always(function(){void 0===i?ce(ie).removeProp(r):ie[r]=i,e[r]&&(e.jsonpCallback=t.jsonpCallback,Kt.push(r)),o&&v(i)&&i(o[0]),o=i=void 0}),"script"}),le.createHTMLDocument=((Jt=C.implementation.createHTMLDocument("").body).innerHTML="
",2===Jt.childNodes.length),ce.parseHTML=function(e,t,n){return"string"!=typeof e?[]:("boolean"==typeof t&&(n=t,t=!1),t||(le.createHTMLDocument?((r=(t=C.implementation.createHTMLDocument("")).createElement("base")).href=C.location.href,t.head.appendChild(r)):t=C),o=!n&&[],(i=w.exec(e))?[t.createElement(i[1])]:(i=Ae([e],t,o),o&&o.length&&ce(o).remove(),ce.merge([],i.childNodes)));var r,i,o},ce.fn.load=function(e,t,n){var r,i,o,a=this,s=e.indexOf(" ");return-1").append(ce.parseHTML(e)).find(r):e)}).always(n&&function(e,t){a.each(function(){n.apply(this,o||[e.responseText,t,e])})}),this},ce.expr.pseudos.animated=function(t){return ce.grep(ce.timers,function(e){return t===e.elem}).length},ce.offset={setOffset:function(e,t,n){var r,i,o,a,s,u,l=ce.css(e,"position"),c=ce(e),f={};"static"===l&&(e.style.position="relative"),s=c.offset(),o=ce.css(e,"top"),u=ce.css(e,"left"),("absolute"===l||"fixed"===l)&&-1<(o+u).indexOf("auto")?(a=(r=c.position()).top,i=r.left):(a=parseFloat(o)||0,i=parseFloat(u)||0),v(t)&&(t=t.call(e,n,ce.extend({},s))),null!=t.top&&(f.top=t.top-s.top+a),null!=t.left&&(f.left=t.left-s.left+i),"using"in t?t.using.call(e,f):c.css(f)}},ce.fn.extend({offset:function(t){if(arguments.length)return void 0===t?this:this.each(function(e){ce.offset.setOffset(this,t,e)});var e,n,r=this[0];return r?r.getClientRects().length?(e=r.getBoundingClientRect(),n=r.ownerDocument.defaultView,{top:e.top+n.pageYOffset,left:e.left+n.pageXOffset}):{top:0,left:0}:void 0},position:function(){if(this[0]){var e,t,n,r=this[0],i={top:0,left:0};if("fixed"===ce.css(r,"position"))t=r.getBoundingClientRect();else{t=this.offset(),n=r.ownerDocument,e=r.offsetParent||n.documentElement;while(e&&(e===n.body||e===n.documentElement)&&"static"===ce.css(e,"position"))e=e.parentNode;e&&e!==r&&1===e.nodeType&&((i=ce(e).offset()).top+=ce.css(e,"borderTopWidth",!0),i.left+=ce.css(e,"borderLeftWidth",!0))}return{top:t.top-i.top-ce.css(r,"marginTop",!0),left:t.left-i.left-ce.css(r,"marginLeft",!0)}}},offsetParent:function(){return this.map(function(){var e=this.offsetParent;while(e&&"static"===ce.css(e,"position"))e=e.offsetParent;return e||J})}}),ce.each({scrollLeft:"pageXOffset",scrollTop:"pageYOffset"},function(t,i){var o="pageYOffset"===i;ce.fn[t]=function(e){return M(this,function(e,t,n){var r;if(y(e)?r=e:9===e.nodeType&&(r=e.defaultView),void 0===n)return r?r[i]:e[t];r?r.scrollTo(o?r.pageXOffset:n,o?n:r.pageYOffset):e[t]=n},t,e,arguments.length)}}),ce.each(["top","left"],function(e,n){ce.cssHooks[n]=Ye(le.pixelPosition,function(e,t){if(t)return t=Ge(e,n),_e.test(t)?ce(e).position()[n]+"px":t})}),ce.each({Height:"height",Width:"width"},function(a,s){ce.each({padding:"inner"+a,content:s,"":"outer"+a},function(r,o){ce.fn[o]=function(e,t){var n=arguments.length&&(r||"boolean"!=typeof e),i=r||(!0===e||!0===t?"margin":"border");return M(this,function(e,t,n){var r;return y(e)?0===o.indexOf("outer")?e["inner"+a]:e.document.documentElement["client"+a]:9===e.nodeType?(r=e.documentElement,Math.max(e.body["scroll"+a],r["scroll"+a],e.body["offset"+a],r["offset"+a],r["client"+a])):void 0===n?ce.css(e,t,i):ce.style(e,t,n,i)},s,n?e:void 0,n)}})}),ce.each(["ajaxStart","ajaxStop","ajaxComplete","ajaxError","ajaxSuccess","ajaxSend"],function(e,t){ce.fn[t]=function(e){return this.on(t,e)}}),ce.fn.extend({bind:function(e,t,n){return this.on(e,null,t,n)},unbind:function(e,t){return this.off(e,null,t)},delegate:function(e,t,n,r){return this.on(t,e,n,r)},undelegate:function(e,t,n){return 1===arguments.length?this.off(e,"**"):this.off(t,e||"**",n)},hover:function(e,t){return this.on("mouseenter",e).on("mouseleave",t||e)}}),ce.each("blur focus focusin focusout resize scroll click dblclick mousedown mouseup mousemove mouseover mouseout mouseenter mouseleave change select submit keydown keypress keyup contextmenu".split(" "),function(e,n){ce.fn[n]=function(e,t){return 015?"\u2026"+e.slice(n-15,n):e.slice(0,n),a=o+15":">","<":"<",'"':""","'":"'"},i=/[&><"']/g;const a=function(e){return"ordgroup"===e.type||"color"===e.type?1===e.body.length?a(e.body[0]):e:"font"===e.type?a(e.body):e};var l={contains:function(e,t){return-1!==e.indexOf(t)},deflt:function(e,t){return void 0===e?t:e},escape:function(e){return String(e).replace(i,(e=>s[e]))},hyphenate:function(e){return e.replace(o,"-$1").toLowerCase()},getBaseElem:a,isCharacterBox:function(e){const t=a(e);return"mathord"===t.type||"textord"===t.type||"atom"===t.type},protocolFromUrl:function(e){const t=/^[\x00-\x20]*([^\\/#?]*?)(:|�*58|�*3a|&colon)/i.exec(e);return t?":"!==t[2]?null:/^[a-zA-Z][a-zA-Z0-9+\-.]*$/.test(t[1])?t[1].toLowerCase():null:"_relative"}};const h={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:e=>"#"+e},macros:{type:"object",cli:"-m, --macro ",cliDescription:"Define custom macro of the form '\\foo:expansion' (use multiple -m arguments for multiple macros).",cliDefault:[],cliProcessor:(e,t)=>(t.push(e),t)},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:e=>Math.max(0,e),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:e=>Math.max(0,e),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:e=>Math.max(0,e),cli:"-e, --max-expand ",cliProcessor:e=>"Infinity"===e?1/0:parseInt(e)},globalGroup:{type:"boolean",cli:!1}};function c(e){if(e.default)return e.default;const t=e.type,r=Array.isArray(t)?t[0]:t;if("string"!=typeof r)return r.enum[0];switch(r){case"boolean":return!1;case"string":return"";case"number":return 0;case"object":return{}}}class m{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(const t in h)if(h.hasOwnProperty(t)){const r=h[t];this[t]=void 0!==e[t]?r.processor?r.processor(e[t]):e[t]:c(r)}}reportNonstrict(e,t,r){let o=this.strict;if("function"==typeof o&&(o=o(e,t,r)),o&&"ignore"!==o){if(!0===o||"error"===o)throw new n("LaTeX-incompatible input and strict mode is set to 'error': "+t+" ["+e+"]",r);"warn"===o?"undefined"!=typeof console&&console.warn("LaTeX-incompatible input and strict mode is set to 'warn': "+t+" ["+e+"]"):"undefined"!=typeof console&&console.warn("LaTeX-incompatible input and strict mode is set to unrecognized '"+o+"': "+t+" ["+e+"]")}}useStrictBehavior(e,t,r){let n=this.strict;if("function"==typeof n)try{n=n(e,t,r)}catch(e){n="error"}return!(!n||"ignore"===n)&&(!0===n||"error"===n||("warn"===n?("undefined"!=typeof console&&console.warn("LaTeX-incompatible input and strict mode is set to 'warn': "+t+" ["+e+"]"),!1):("undefined"!=typeof console&&console.warn("LaTeX-incompatible input and strict mode is set to unrecognized '"+n+"': "+t+" ["+e+"]"),!1)))}isTrusted(e){if(e.url&&!e.protocol){const t=l.protocolFromUrl(e.url);if(null==t)return!1;e.protocol=t}const t="function"==typeof this.trust?this.trust(e):this.trust;return Boolean(t)}}class p{constructor(e,t,r){this.id=void 0,this.size=void 0,this.cramped=void 0,this.id=e,this.size=t,this.cramped=r}sup(){return u[d[this.id]]}sub(){return u[g[this.id]]}fracNum(){return u[f[this.id]]}fracDen(){return u[b[this.id]]}cramp(){return u[y[this.id]]}text(){return u[x[this.id]]}isTight(){return this.size>=2}}const u=[new p(0,0,!1),new p(1,0,!0),new p(2,1,!1),new p(3,1,!0),new p(4,2,!1),new p(5,2,!0),new p(6,3,!1),new p(7,3,!0)],d=[4,5,4,5,6,7,6,7],g=[5,5,5,5,7,7,7,7],f=[2,3,4,5,6,7,6,7],b=[3,3,5,5,7,7,7,7],y=[1,1,3,3,5,5,7,7],x=[0,1,2,3,2,3,2,3];var w={DISPLAY:u[0],TEXT:u[2],SCRIPT:u[4],SCRIPTSCRIPT:u[6]};const v=[{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]]}];const k=[];function S(e){for(let t=0;t=k[t]&&e<=k[t+1])return!0;return!1}v.forEach((e=>e.blocks.forEach((e=>k.push(...e)))));const M=80,z={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:"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:"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",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",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",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",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:"M40 281 V428 H0 V94 H40 V241 H400000 v40z\nM40 281 V428 H0 V94 H40 V241 H400000 v40z",leftmapsto:"M40 281 V448H0V74H40V241H400000v40z\nM40 281 V448H0V74H40V241H400000v40z",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:"M0 50 h400000 v40H0z m0 194h40000v40H0z\nM0 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:"M399960 241 V94 h40 V428 h-40 V281 H0 v-40z\nM399960 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\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:"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:"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",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:"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:"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",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",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",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:"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",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"};class A{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 l.contains(this.classes,e)}toNode(){const e=document.createDocumentFragment();for(let t=0;te.toText())).join("")}}var T={"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]}};const B={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]},C={"\xc5":"A","\xd0":"D","\xde":"o","\xe5":"a","\xf0":"d","\xfe":"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"};function N(e,t,r){if(!T[t])throw new Error("Font metrics not found for font: "+t+".");let n=e.charCodeAt(0),o=T[t][n];if(!o&&e[0]in C&&(n=C[e[0]].charCodeAt(0),o=T[t][n]),o||"text"!==r||S(n)&&(o=T[t][77]),o)return{depth:o[0],height:o[1],italic:o[2],skew:o[3],width:o[4]}}const q={};const I=[[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]],R=[.5,.6,.7,.8,.9,1,1.2,1.44,1.728,2.074,2.488],H=function(e,t){return t.size<2?e:I[e-1][t.size-1]};class O{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||O.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=R[this.size-1],this.maxSize=e.maxSize,this.minRuleThickness=e.minRuleThickness,this._fontMetrics=void 0}extend(e){const t={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(const r in e)e.hasOwnProperty(r)&&(t[r]=e[r]);return new O(t)}havingStyle(e){return this.style===e?this:this.extend({style:e,size:H(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:R[e-1]})}havingBaseStyle(e){e=e||this.style.text();const t=H(O.BASESIZE,e);return this.size===t&&this.textSize===O.BASESIZE&&this.style===e?this:this.extend({style:e,size:t})}havingBaseSizing(){let 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!==O.BASESIZE?["sizing","reset-size"+this.size,"size"+O.BASESIZE]:[]}fontMetrics(){return this._fontMetrics||(this._fontMetrics=function(e){let t;if(t=e>=5?0:e>=3?1:2,!q[t]){const e=q[t]={cssEmPerMu:B.quad[t]/18};for(const r in B)B.hasOwnProperty(r)&&(e[r]=B[r][t])}return q[t]}(this.size)),this._fontMetrics}getColor(){return this.phantom?"transparent":this.color}}O.BASESIZE=6;var E=O;const L={pt:1,mm:7227/2540,cm:7227/254,in:72.27,bp:1.00375,pc:12,dd:1238/1157,cc:14856/1157,nd:685/642,nc:1370/107,sp:1/65536,px:1.00375},D={ex:!0,em:!0,mu:!0},V=function(e){return"string"!=typeof e&&(e=e.unit),e in L||e in D||"ex"===e},P=function(e,t){let r;if(e.unit in L)r=L[e.unit]/t.fontMetrics().ptPerEm/t.sizeMultiplier;else if("mu"===e.unit)r=t.fontMetrics().cssEmPerMu;else{let o;if(o=t.style.isTight()?t.havingStyle(t.style.text()):t,"ex"===e.unit)r=o.fontMetrics().xHeight;else{if("em"!==e.unit)throw new n("Invalid unit: '"+e.unit+"'");r=o.fontMetrics().quad}o!==t&&(r*=o.sizeMultiplier/t.sizeMultiplier)}return Math.min(e.number*r,t.maxSize)},F=function(e){return+e.toFixed(4)+"em"},G=function(e){return e.filter((e=>e)).join(" ")},U=function(e,t,r){if(this.classes=e||[],this.attributes={},this.height=0,this.depth=0,this.maxFontSize=0,this.style=r||{},t){t.style.isTight()&&this.classes.push("mtight");const e=t.getColor();e&&(this.style.color=e)}},Y=function(e){const t=document.createElement(e);t.className=G(this.classes);for(const e in this.style)this.style.hasOwnProperty(e)&&(t.style[e]=this.style[e]);for(const e in this.attributes)this.attributes.hasOwnProperty(e)&&t.setAttribute(e,this.attributes[e]);for(let e=0;e/=\x00-\x1f]/,W=function(e){let t="<"+e;this.classes.length&&(t+=' class="'+l.escape(G(this.classes))+'"');let r="";for(const e in this.style)this.style.hasOwnProperty(e)&&(r+=l.hyphenate(e)+":"+this.style[e]+";");r&&(t+=' style="'+l.escape(r)+'"');for(const e in this.attributes)if(this.attributes.hasOwnProperty(e)){if(X.test(e))throw new n("Invalid attribute name '"+e+"'");t+=" "+e+'="'+l.escape(this.attributes[e])+'"'}t+=">";for(let e=0;e",t};class _{constructor(e,t,r,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,U.call(this,e,r,n),this.children=t||[]}setAttribute(e,t){this.attributes[e]=t}hasClass(e){return l.contains(this.classes,e)}toNode(){return Y.call(this,"span")}toMarkup(){return W.call(this,"span")}}class j{constructor(e,t,r,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,U.call(this,t,n),this.children=r||[],this.setAttribute("href",e)}setAttribute(e,t){this.attributes[e]=t}hasClass(e){return l.contains(this.classes,e)}toNode(){return Y.call(this,"a")}toMarkup(){return W.call(this,"a")}}class ${constructor(e,t,r){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=t,this.src=e,this.classes=["mord"],this.style=r}hasClass(e){return l.contains(this.classes,e)}toNode(){const e=document.createElement("img");e.src=this.src,e.alt=this.alt,e.className="mord";for(const t in this.style)this.style.hasOwnProperty(t)&&(e.style[t]=this.style[t]);return e}toMarkup(){let e=''+l.escape(this.alt)+'=n[0]&&e<=n[1])return r.name}}return null}(this.text.charCodeAt(0));l&&this.classes.push(l+"_fallback"),/[\xee\xef\xed\xec]/.test(this.text)&&(this.text=Z[this.text])}hasClass(e){return l.contains(this.classes,e)}toNode(){const e=document.createTextNode(this.text);let t=null;this.italic>0&&(t=document.createElement("span"),t.style.marginRight=F(this.italic)),this.classes.length>0&&(t=t||document.createElement("span"),t.className=G(this.classes));for(const e in this.style)this.style.hasOwnProperty(e)&&(t=t||document.createElement("span"),t.style[e]=this.style[e]);return t?(t.appendChild(e),t):e}toMarkup(){let e=!1,t="0&&(r+="margin-right:"+this.italic+"em;");for(const e in this.style)this.style.hasOwnProperty(e)&&(r+=l.hyphenate(e)+":"+this.style[e]+";");r&&(e=!0,t+=' style="'+l.escape(r)+'"');const n=l.escape(this.text);return e?(t+=">",t+=n,t+="
",t):n}}class J{constructor(e,t){this.children=void 0,this.attributes=void 0,this.children=e||[],this.attributes=t||{}}toNode(){const e=document.createElementNS("http://www.w3.org/2000/svg","svg");for(const t in this.attributes)Object.prototype.hasOwnProperty.call(this.attributes,t)&&e.setAttribute(t,this.attributes[t]);for(let t=0;t':''}}class ee{constructor(e){this.attributes=void 0,this.attributes=e||{}}toNode(){const e=document.createElementNS("http://www.w3.org/2000/svg","line");for(const t in this.attributes)Object.prototype.hasOwnProperty.call(this.attributes,t)&&e.setAttribute(t,this.attributes[t]);return e}toMarkup(){let e="","\\gt",!0),ie(ae,he,xe,"\u2208","\\in",!0),ie(ae,he,xe,"\ue020","\\@not"),ie(ae,he,xe,"\u2282","\\subset",!0),ie(ae,he,xe,"\u2283","\\supset",!0),ie(ae,he,xe,"\u2286","\\subseteq",!0),ie(ae,he,xe,"\u2287","\\supseteq",!0),ie(ae,ce,xe,"\u2288","\\nsubseteq",!0),ie(ae,ce,xe,"\u2289","\\nsupseteq",!0),ie(ae,he,xe,"\u22a8","\\models"),ie(ae,he,xe,"\u2190","\\leftarrow",!0),ie(ae,he,xe,"\u2264","\\le"),ie(ae,he,xe,"\u2264","\\leq",!0),ie(ae,he,xe,"<","\\lt",!0),ie(ae,he,xe,"\u2192","\\rightarrow",!0),ie(ae,he,xe,"\u2192","\\to"),ie(ae,ce,xe,"\u2271","\\ngeq",!0),ie(ae,ce,xe,"\u2270","\\nleq",!0),ie(ae,he,we,"\xa0","\\ "),ie(ae,he,we,"\xa0","\\space"),ie(ae,he,we,"\xa0","\\nobreakspace"),ie(le,he,we,"\xa0","\\ "),ie(le,he,we,"\xa0"," "),ie(le,he,we,"\xa0","\\space"),ie(le,he,we,"\xa0","\\nobreakspace"),ie(ae,he,we,null,"\\nobreak"),ie(ae,he,we,null,"\\allowbreak"),ie(ae,he,ye,",",","),ie(ae,he,ye,";",";"),ie(ae,ce,pe,"\u22bc","\\barwedge",!0),ie(ae,ce,pe,"\u22bb","\\veebar",!0),ie(ae,he,pe,"\u2299","\\odot",!0),ie(ae,he,pe,"\u2295","\\oplus",!0),ie(ae,he,pe,"\u2297","\\otimes",!0),ie(ae,he,ve,"\u2202","\\partial",!0),ie(ae,he,pe,"\u2298","\\oslash",!0),ie(ae,ce,pe,"\u229a","\\circledcirc",!0),ie(ae,ce,pe,"\u22a1","\\boxdot",!0),ie(ae,he,pe,"\u25b3","\\bigtriangleup"),ie(ae,he,pe,"\u25bd","\\bigtriangledown"),ie(ae,he,pe,"\u2020","\\dagger"),ie(ae,he,pe,"\u22c4","\\diamond"),ie(ae,he,pe,"\u22c6","\\star"),ie(ae,he,pe,"\u25c3","\\triangleleft"),ie(ae,he,pe,"\u25b9","\\triangleright"),ie(ae,he,be,"{","\\{"),ie(le,he,ve,"{","\\{"),ie(le,he,ve,"{","\\textbraceleft"),ie(ae,he,ue,"}","\\}"),ie(le,he,ve,"}","\\}"),ie(le,he,ve,"}","\\textbraceright"),ie(ae,he,be,"{","\\lbrace"),ie(ae,he,ue,"}","\\rbrace"),ie(ae,he,be,"[","\\lbrack",!0),ie(le,he,ve,"[","\\lbrack",!0),ie(ae,he,ue,"]","\\rbrack",!0),ie(le,he,ve,"]","\\rbrack",!0),ie(ae,he,be,"(","\\lparen",!0),ie(ae,he,ue,")","\\rparen",!0),ie(le,he,ve,"<","\\textless",!0),ie(le,he,ve,">","\\textgreater",!0),ie(ae,he,be,"\u230a","\\lfloor",!0),ie(ae,he,ue,"\u230b","\\rfloor",!0),ie(ae,he,be,"\u2308","\\lceil",!0),ie(ae,he,ue,"\u2309","\\rceil",!0),ie(ae,he,ve,"\\","\\backslash"),ie(ae,he,ve,"\u2223","|"),ie(ae,he,ve,"\u2223","\\vert"),ie(le,he,ve,"|","\\textbar",!0),ie(ae,he,ve,"\u2225","\\|"),ie(ae,he,ve,"\u2225","\\Vert"),ie(le,he,ve,"\u2225","\\textbardbl"),ie(le,he,ve,"~","\\textasciitilde"),ie(le,he,ve,"\\","\\textbackslash"),ie(le,he,ve,"^","\\textasciicircum"),ie(ae,he,xe,"\u2191","\\uparrow",!0),ie(ae,he,xe,"\u21d1","\\Uparrow",!0),ie(ae,he,xe,"\u2193","\\downarrow",!0),ie(ae,he,xe,"\u21d3","\\Downarrow",!0),ie(ae,he,xe,"\u2195","\\updownarrow",!0),ie(ae,he,xe,"\u21d5","\\Updownarrow",!0),ie(ae,he,fe,"\u2210","\\coprod"),ie(ae,he,fe,"\u22c1","\\bigvee"),ie(ae,he,fe,"\u22c0","\\bigwedge"),ie(ae,he,fe,"\u2a04","\\biguplus"),ie(ae,he,fe,"\u22c2","\\bigcap"),ie(ae,he,fe,"\u22c3","\\bigcup"),ie(ae,he,fe,"\u222b","\\int"),ie(ae,he,fe,"\u222b","\\intop"),ie(ae,he,fe,"\u222c","\\iint"),ie(ae,he,fe,"\u222d","\\iiint"),ie(ae,he,fe,"\u220f","\\prod"),ie(ae,he,fe,"\u2211","\\sum"),ie(ae,he,fe,"\u2a02","\\bigotimes"),ie(ae,he,fe,"\u2a01","\\bigoplus"),ie(ae,he,fe,"\u2a00","\\bigodot"),ie(ae,he,fe,"\u222e","\\oint"),ie(ae,he,fe,"\u222f","\\oiint"),ie(ae,he,fe,"\u2230","\\oiiint"),ie(ae,he,fe,"\u2a06","\\bigsqcup"),ie(ae,he,fe,"\u222b","\\smallint"),ie(le,he,de,"\u2026","\\textellipsis"),ie(ae,he,de,"\u2026","\\mathellipsis"),ie(le,he,de,"\u2026","\\ldots",!0),ie(ae,he,de,"\u2026","\\ldots",!0),ie(ae,he,de,"\u22ef","\\@cdots",!0),ie(ae,he,de,"\u22f1","\\ddots",!0),ie(ae,he,ve,"\u22ee","\\varvdots"),ie(le,he,ve,"\u22ee","\\varvdots"),ie(ae,he,me,"\u02ca","\\acute"),ie(ae,he,me,"\u02cb","\\grave"),ie(ae,he,me,"\xa8","\\ddot"),ie(ae,he,me,"~","\\tilde"),ie(ae,he,me,"\u02c9","\\bar"),ie(ae,he,me,"\u02d8","\\breve"),ie(ae,he,me,"\u02c7","\\check"),ie(ae,he,me,"^","\\hat"),ie(ae,he,me,"\u20d7","\\vec"),ie(ae,he,me,"\u02d9","\\dot"),ie(ae,he,me,"\u02da","\\mathring"),ie(ae,he,ge,"\ue131","\\@imath"),ie(ae,he,ge,"\ue237","\\@jmath"),ie(ae,he,ve,"\u0131","\u0131"),ie(ae,he,ve,"\u0237","\u0237"),ie(le,he,ve,"\u0131","\\i",!0),ie(le,he,ve,"\u0237","\\j",!0),ie(le,he,ve,"\xdf","\\ss",!0),ie(le,he,ve,"\xe6","\\ae",!0),ie(le,he,ve,"\u0153","\\oe",!0),ie(le,he,ve,"\xf8","\\o",!0),ie(le,he,ve,"\xc6","\\AE",!0),ie(le,he,ve,"\u0152","\\OE",!0),ie(le,he,ve,"\xd8","\\O",!0),ie(le,he,me,"\u02ca","\\'"),ie(le,he,me,"\u02cb","\\`"),ie(le,he,me,"\u02c6","\\^"),ie(le,he,me,"\u02dc","\\~"),ie(le,he,me,"\u02c9","\\="),ie(le,he,me,"\u02d8","\\u"),ie(le,he,me,"\u02d9","\\."),ie(le,he,me,"\xb8","\\c"),ie(le,he,me,"\u02da","\\r"),ie(le,he,me,"\u02c7","\\v"),ie(le,he,me,"\xa8",'\\"'),ie(le,he,me,"\u02dd","\\H"),ie(le,he,me,"\u25ef","\\textcircled");const ke={"--":!0,"---":!0,"``":!0,"''":!0};ie(le,he,ve,"\u2013","--",!0),ie(le,he,ve,"\u2013","\\textendash"),ie(le,he,ve,"\u2014","---",!0),ie(le,he,ve,"\u2014","\\textemdash"),ie(le,he,ve,"\u2018","`",!0),ie(le,he,ve,"\u2018","\\textquoteleft"),ie(le,he,ve,"\u2019","'",!0),ie(le,he,ve,"\u2019","\\textquoteright"),ie(le,he,ve,"\u201c","``",!0),ie(le,he,ve,"\u201c","\\textquotedblleft"),ie(le,he,ve,"\u201d","''",!0),ie(le,he,ve,"\u201d","\\textquotedblright"),ie(ae,he,ve,"\xb0","\\degree",!0),ie(le,he,ve,"\xb0","\\degree"),ie(le,he,ve,"\xb0","\\textdegree",!0),ie(ae,he,ve,"\xa3","\\pounds"),ie(ae,he,ve,"\xa3","\\mathsterling",!0),ie(le,he,ve,"\xa3","\\pounds"),ie(le,he,ve,"\xa3","\\textsterling",!0),ie(ae,ce,ve,"\u2720","\\maltese"),ie(le,ce,ve,"\u2720","\\maltese");const Se='0123456789/@."';for(let e=0;e<14;e++){const t=Se.charAt(e);ie(ae,he,ve,t,t)}const Me='0123456789!@*()-=+";:?/.,';for(let e=0;e<25;e++){const t=Me.charAt(e);ie(le,he,ve,t,t)}const ze="ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz";for(let e=0;e<52;e++){const t=ze.charAt(e);ie(ae,he,ge,t,t),ie(le,he,ve,t,t)}ie(ae,ce,ve,"C","\u2102"),ie(le,ce,ve,"C","\u2102"),ie(ae,ce,ve,"H","\u210d"),ie(le,ce,ve,"H","\u210d"),ie(ae,ce,ve,"N","\u2115"),ie(le,ce,ve,"N","\u2115"),ie(ae,ce,ve,"P","\u2119"),ie(le,ce,ve,"P","\u2119"),ie(ae,ce,ve,"Q","\u211a"),ie(le,ce,ve,"Q","\u211a"),ie(ae,ce,ve,"R","\u211d"),ie(le,ce,ve,"R","\u211d"),ie(ae,ce,ve,"Z","\u2124"),ie(le,ce,ve,"Z","\u2124"),ie(ae,he,ge,"h","\u210e"),ie(le,he,ge,"h","\u210e");let Ae="";for(let e=0;e<52;e++){const t=ze.charAt(e);Ae=String.fromCharCode(55349,56320+e),ie(ae,he,ge,t,Ae),ie(le,he,ve,t,Ae),Ae=String.fromCharCode(55349,56372+e),ie(ae,he,ge,t,Ae),ie(le,he,ve,t,Ae),Ae=String.fromCharCode(55349,56424+e),ie(ae,he,ge,t,Ae),ie(le,he,ve,t,Ae),Ae=String.fromCharCode(55349,56580+e),ie(ae,he,ge,t,Ae),ie(le,he,ve,t,Ae),Ae=String.fromCharCode(55349,56684+e),ie(ae,he,ge,t,Ae),ie(le,he,ve,t,Ae),Ae=String.fromCharCode(55349,56736+e),ie(ae,he,ge,t,Ae),ie(le,he,ve,t,Ae),Ae=String.fromCharCode(55349,56788+e),ie(ae,he,ge,t,Ae),ie(le,he,ve,t,Ae),Ae=String.fromCharCode(55349,56840+e),ie(ae,he,ge,t,Ae),ie(le,he,ve,t,Ae),Ae=String.fromCharCode(55349,56944+e),ie(ae,he,ge,t,Ae),ie(le,he,ve,t,Ae),e<26&&(Ae=String.fromCharCode(55349,56632+e),ie(ae,he,ge,t,Ae),ie(le,he,ve,t,Ae),Ae=String.fromCharCode(55349,56476+e),ie(ae,he,ge,t,Ae),ie(le,he,ve,t,Ae))}Ae=String.fromCharCode(55349,56668),ie(ae,he,ge,"k",Ae),ie(le,he,ve,"k",Ae);for(let e=0;e<10;e++){const t=e.toString();Ae=String.fromCharCode(55349,57294+e),ie(ae,he,ge,t,Ae),ie(le,he,ve,t,Ae),Ae=String.fromCharCode(55349,57314+e),ie(ae,he,ge,t,Ae),ie(le,he,ve,t,Ae),Ae=String.fromCharCode(55349,57324+e),ie(ae,he,ge,t,Ae),ie(le,he,ve,t,Ae),Ae=String.fromCharCode(55349,57334+e),ie(ae,he,ge,t,Ae),ie(le,he,ve,t,Ae)}const Te="\xd0\xde\xfe";for(let e=0;e<3;e++){const t=Te.charAt(e);ie(ae,he,ge,t,t),ie(le,he,ve,t,t)}const Be=[["mathbf","textbf","Main-Bold"],["mathbf","textbf","Main-Bold"],["mathnormal","textit","Math-Italic"],["mathnormal","textit","Math-Italic"],["boldsymbol","boldsymbol","Main-BoldItalic"],["boldsymbol","boldsymbol","Main-BoldItalic"],["mathscr","textscr","Script-Regular"],["","",""],["","",""],["","",""],["mathfrak","textfrak","Fraktur-Regular"],["mathfrak","textfrak","Fraktur-Regular"],["mathbb","textbb","AMS-Regular"],["mathbb","textbb","AMS-Regular"],["mathboldfrak","textboldfrak","Fraktur-Regular"],["mathboldfrak","textboldfrak","Fraktur-Regular"],["mathsf","textsf","SansSerif-Regular"],["mathsf","textsf","SansSerif-Regular"],["mathboldsf","textboldsf","SansSerif-Bold"],["mathboldsf","textboldsf","SansSerif-Bold"],["mathitsf","textitsf","SansSerif-Italic"],["mathitsf","textitsf","SansSerif-Italic"],["","",""],["","",""],["mathtt","texttt","Typewriter-Regular"],["mathtt","texttt","Typewriter-Regular"]],Ce=[["mathbf","textbf","Main-Bold"],["","",""],["mathsf","textsf","SansSerif-Regular"],["mathboldsf","textboldsf","SansSerif-Bold"],["mathtt","texttt","Typewriter-Regular"]],Ne=function(e,t,r){return se[r][e]&&se[r][e].replace&&(e=se[r][e].replace),{value:e,metrics:N(e,t,r)}},qe=function(e,t,r,n,o){const s=Ne(e,t,r),i=s.metrics;let a;if(e=s.value,i){let t=i.italic;("text"===r||n&&"mathit"===n.font)&&(t=0),a=new K(e,i.height,i.depth,t,i.skew,i.width,o)}else"undefined"!=typeof console&&console.warn("No character metrics for '"+e+"' in style '"+t+"' and mode '"+r+"'"),a=new K(e,0,0,0,0,0,o);if(n){a.maxFontSize=n.sizeMultiplier,n.style.isTight()&&a.classes.push("mtight");const e=n.getColor();e&&(a.style.color=e)}return a},Ie=(e,t)=>{if(G(e.classes)!==G(t.classes)||e.skew!==t.skew||e.maxFontSize!==t.maxFontSize)return!1;if(1===e.classes.length){const t=e.classes[0];if("mbin"===t||"mord"===t)return!1}for(const r in e.style)if(e.style.hasOwnProperty(r)&&e.style[r]!==t.style[r])return!1;for(const r in t.style)if(t.style.hasOwnProperty(r)&&e.style[r]!==t.style[r])return!1;return!0},Re=function(e){let t=0,r=0,n=0;for(let o=0;ot&&(t=s.height),s.depth>r&&(r=s.depth),s.maxFontSize>n&&(n=s.maxFontSize)}e.height=t,e.depth=r,e.maxFontSize=n},He=function(e,t,r,n){const o=new _(e,t,r,n);return Re(o),o},Oe=(e,t,r,n)=>new _(e,t,r,n),Ee=function(e){const t=new A(e);return Re(t),t},Le=function(e,t,r){let n,o="";switch(e){case"amsrm":o="AMS";break;case"textrm":o="Main";break;case"textsf":o="SansSerif";break;case"texttt":o="Typewriter";break;default:o=e}return n="textbf"===t&&"textit"===r?"BoldItalic":"textbf"===t?"Bold":"textit"===t?"Italic":"Regular",o+"-"+n},De={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"}},Ve={vec:["vec",.471,.714],oiintSize1:["oiintSize1",.957,.499],oiintSize2:["oiintSize2",1.472,.659],oiiintSize1:["oiiintSize1",1.304,.499],oiiintSize2:["oiiintSize2",1.98,.659]};var Pe={fontMap:De,makeSymbol:qe,mathsym:function(e,t,r,n){return void 0===n&&(n=[]),"boldsymbol"===r.font&&Ne(e,"Main-Bold",t).metrics?qe(e,"Main-Bold",t,r,n.concat(["mathbf"])):"\\"===e||"main"===se[t][e].font?qe(e,"Main-Regular",t,r,n):qe(e,"AMS-Regular",t,r,n.concat(["amsrm"]))},makeSpan:He,makeSvgSpan:Oe,makeLineSpan:function(e,t,r){const n=He([e],[],t);return n.height=Math.max(r||t.fontMetrics().defaultRuleThickness,t.minRuleThickness),n.style.borderBottomWidth=F(n.height),n.maxFontSize=1,n},makeAnchor:function(e,t,r,n){const o=new j(e,t,r,n);return Re(o),o},makeFragment:Ee,wrapFragment:function(e,t){return e instanceof A?He([],[e],t):e},makeVList:function(e,t){const{children:r,depth:n}=function(e){if("individualShift"===e.positionType){const t=e.children,r=[t[0]],n=-t[0].shift-t[0].elem.depth;let o=n;for(let e=1;e0)return qe(s,h,o,t,i.concat(c));if(l){let e,n;if("boldsymbol"===l){const t=function(e,t,r,n,o){return"textord"!==o&&Ne(e,"Math-BoldItalic",t).metrics?{fontName:"Math-BoldItalic",fontClass:"boldsymbol"}:{fontName:"Main-Bold",fontClass:"mathbf"}}(s,o,0,0,r);e=t.fontName,n=[t.fontClass]}else a?(e=De[l].fontName,n=[l]):(e=Le(l,t.fontWeight,t.fontShape),n=[l,t.fontWeight,t.fontShape]);if(Ne(s,e,o).metrics)return qe(s,e,o,t,i.concat(n));if(ke.hasOwnProperty(s)&&"Typewriter"===e.slice(0,10)){const r=[];for(let a=0;a{const r=He(["mspace"],[],t),n=P(e,t);return r.style.marginRight=F(n),r},staticSvg:function(e,t){const[r,n,o]=Ve[e],s=new Q(r),i=new J([s],{width:F(n),height:F(o),style:"width:"+F(n),viewBox:"0 0 "+1e3*n+" "+1e3*o,preserveAspectRatio:"xMinYMin"}),a=Oe(["overlay"],[i],t);return a.height=o,a.style.height=F(o),a.style.width=F(n),a},svgData:Ve,tryCombineChars:e=>{for(let t=0;t{const r=t.classes[0],n=e.classes[0];"mbin"===r&&l.contains(tt,n)?t.classes[0]="mord":"mbin"===n&&l.contains(et,r)&&(e.classes[0]="mord")}),{node:i},a,h),st(o,((e,t)=>{const r=lt(t),n=lt(e),o=r&&n?e.hasClass("mtight")?Xe[r][n]:Ye[r][n]:null;if(o)return Pe.makeGlue(o,s)}),{node:i},a,h),o},st=function(e,t,r,n,o){n&&e.push(n);let s=0;for(;sr=>{e.splice(t+1,0,r),s++})(s)}n&&e.pop()},it=function(e){return e instanceof A||e instanceof j||e instanceof _&&e.hasClass("enclosing")?e:null},at=function(e,t){const r=it(e);if(r){const e=r.children;if(e.length){if("right"===t)return at(e[e.length-1],"right");if("left"===t)return at(e[0],"left")}}return e},lt=function(e,t){return e?(t&&(e=at(e,t)),nt[e.classes[0]]||null):null},ht=function(e,t){const r=["nulldelimiter"].concat(e.baseSizingClasses());return Qe(t.concat(r))},ct=function(e,t,r){if(!e)return Qe();if(_e[e.type]){let n=_e[e.type](e,t);if(r&&t.size!==r.size){n=Qe(t.sizingClasses(r),[n],t);const e=t.sizeMultiplier/r.sizeMultiplier;n.height*=e,n.depth*=e}return n}throw new n("Got group of unknown type: '"+e.type+"'")};function mt(e,t){const r=Qe(["base"],e,t),n=Qe(["strut"]);return n.style.height=F(r.height+r.depth),r.depth&&(n.style.verticalAlign=F(-r.depth)),r.children.unshift(n),r}function pt(e,t){let r=null;1===e.length&&"tag"===e[0].type&&(r=e[0].tag,e=e[0].body);const n=ot(e,t,"root");let o;2===n.length&&n[1].hasClass("tag")&&(o=n.pop());const s=[];let i,a=[];for(let e=0;e0&&(s.push(mt(a,t)),a=[]),s.push(n[e]));a.length>0&&s.push(mt(a,t)),r?(i=mt(ot(r,t,!0)),i.classes=["tag"],s.push(i)):o&&s.push(o);const l=Qe(["katex-html"],s);if(l.setAttribute("aria-hidden","true"),i){const e=i.children[0];e.style.height=F(l.height+l.depth),l.depth&&(e.style.verticalAlign=F(-l.depth))}return l}function ut(e){return new A(e)}class dt{constructor(e,t,r){this.type=void 0,this.attributes=void 0,this.children=void 0,this.classes=void 0,this.type=e,this.attributes={},this.children=t||[],this.classes=r||[]}setAttribute(e,t){this.attributes[e]=t}getAttribute(e){return this.attributes[e]}toNode(){const e=document.createElementNS("http://www.w3.org/1998/Math/MathML",this.type);for(const t in this.attributes)Object.prototype.hasOwnProperty.call(this.attributes,t)&&e.setAttribute(t,this.attributes[t]);this.classes.length>0&&(e.className=G(this.classes));for(let t=0;t0&&(e+=' class ="'+l.escape(G(this.classes))+'"'),e+=">";for(let t=0;t",e}toText(){return this.children.map((e=>e.toText())).join("")}}class gt{constructor(e){this.text=void 0,this.text=e}toNode(){return document.createTextNode(this.text)}toMarkup(){return l.escape(this.toText())}toText(){return this.text}}var ft={MathNode:dt,TextNode:gt,SpaceNode:class{constructor(e){this.width=void 0,this.character=void 0,this.width=e,this.character=e>=.05555&&e<=.05556?"\u200a":e>=.1666&&e<=.1667?"\u2009":e>=.2222&&e<=.2223?"\u2005":e>=.2777&&e<=.2778?"\u2005\u200a":e>=-.05556&&e<=-.05555?"\u200a\u2063":e>=-.1667&&e<=-.1666?"\u2009\u2063":e>=-.2223&&e<=-.2222?"\u205f\u2063":e>=-.2778&&e<=-.2777?"\u2005\u2063":null}toNode(){if(this.character)return document.createTextNode(this.character);{const e=document.createElementNS("http://www.w3.org/1998/Math/MathML","mspace");return e.setAttribute("width",F(this.width)),e}}toMarkup(){return this.character?""+this.character+"":''}toText(){return this.character?this.character:" "}},newDocumentFragment:ut};const bt=function(e,t,r){return!se[t][e]||!se[t][e].replace||55349===e.charCodeAt(0)||ke.hasOwnProperty(e)&&r&&(r.fontFamily&&"tt"===r.fontFamily.slice(4,6)||r.font&&"tt"===r.font.slice(4,6))||(e=se[t][e].replace),new ft.TextNode(e)},yt=function(e){return 1===e.length?e[0]:new ft.MathNode("mrow",e)},xt=function(e,t){if("texttt"===t.fontFamily)return"monospace";if("textsf"===t.fontFamily)return"textit"===t.fontShape&&"textbf"===t.fontWeight?"sans-serif-bold-italic":"textit"===t.fontShape?"sans-serif-italic":"textbf"===t.fontWeight?"bold-sans-serif":"sans-serif";if("textit"===t.fontShape&&"textbf"===t.fontWeight)return"bold-italic";if("textit"===t.fontShape)return"italic";if("textbf"===t.fontWeight)return"bold";const r=t.font;if(!r||"mathnormal"===r)return null;const n=e.mode;if("mathit"===r)return"italic";if("boldsymbol"===r)return"textord"===e.type?"bold":"bold-italic";if("mathbf"===r)return"bold";if("mathbb"===r)return"double-struck";if("mathsfit"===r)return"sans-serif-italic";if("mathfrak"===r)return"fraktur";if("mathscr"===r||"mathcal"===r)return"script";if("mathsf"===r)return"sans-serif";if("mathtt"===r)return"monospace";let o=e.text;if(l.contains(["\\imath","\\jmath"],o))return null;se[n][o]&&se[n][o].replace&&(o=se[n][o].replace);return N(o,Pe.fontMap[r].fontName,n)?Pe.fontMap[r].variant:null};function wt(e){if(!e)return!1;if("mi"===e.type&&1===e.children.length){const t=e.children[0];return t instanceof gt&&"."===t.text}if("mo"===e.type&&1===e.children.length&&"true"===e.getAttribute("separator")&&"0em"===e.getAttribute("lspace")&&"0em"===e.getAttribute("rspace")){const t=e.children[0];return t instanceof gt&&","===t.text}return!1}const vt=function(e,t,r){if(1===e.length){const n=St(e[0],t);return r&&n instanceof dt&&"mo"===n.type&&(n.setAttribute("lspace","0em"),n.setAttribute("rspace","0em")),[n]}const n=[];let o;for(let r=0;r=1&&("mn"===o.type||wt(o))){const e=s.children[0];e instanceof dt&&"mn"===e.type&&(e.children=[...o.children,...e.children],n.pop())}else if("mi"===o.type&&1===o.children.length){const e=o.children[0];if(e instanceof gt&&"\u0338"===e.text&&("mo"===s.type||"mi"===s.type||"mn"===s.type)){const e=s.children[0];e instanceof gt&&e.text.length>0&&(e.text=e.text.slice(0,1)+"\u0338"+e.text.slice(1),n.pop())}}}n.push(s),o=s}return n},kt=function(e,t,r){return yt(vt(e,t,r))},St=function(e,t){if(!e)return new ft.MathNode("mrow");if(je[e.type]){return je[e.type](e,t)}throw new n("Got group of unknown type: '"+e.type+"'")};function Mt(e,t,r,n,o){const s=vt(e,r);let i;i=1===s.length&&s[0]instanceof dt&&l.contains(["mrow","mtable"],s[0].type)?s[0]:new ft.MathNode("mrow",s);const a=new ft.MathNode("annotation",[new ft.TextNode(t)]);a.setAttribute("encoding","application/x-tex");const h=new ft.MathNode("semantics",[i,a]),c=new ft.MathNode("math",[h]);c.setAttribute("xmlns","http://www.w3.org/1998/Math/MathML"),n&&c.setAttribute("display","block");const m=o?"katex":"katex-mathml";return Pe.makeSpan([m],[c])}const zt=function(e){return new E({style:e.displayMode?w.DISPLAY:w.TEXT,maxSize:e.maxSize,minRuleThickness:e.minRuleThickness})},At=function(e,t){if(t.displayMode){const r=["katex-display"];t.leqno&&r.push("leqno"),t.fleqn&&r.push("fleqn"),e=Pe.makeSpan(r,[e])}return e},Tt=function(e,t,r){const n=zt(r);let o;if("mathml"===r.output)return Mt(e,t,n,r.displayMode,!0);if("html"===r.output){const t=pt(e,n);o=Pe.makeSpan(["katex"],[t])}else{const s=Mt(e,t,n,r.displayMode,!1),i=pt(e,n);o=Pe.makeSpan(["katex"],[s,i])}return At(o,r)};const Bt={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":"="},Ct={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]};var Nt=function(e,t,r,n,o){let s;const i=e.height+e.depth+r+n;if(/fbox|color|angl/.test(t)){if(s=Pe.makeSpan(["stretchy",t],[],o),"fbox"===t){const e=o.color&&o.getColor();e&&(s.style.borderColor=e)}}else{const e=[];/^[bx]cancel$/.test(t)&&e.push(new ee({x1:"0",y1:"0",x2:"100%",y2:"100%","stroke-width":"0.046em"})),/^x?cancel$/.test(t)&&e.push(new ee({x1:"0",y1:"100%",x2:"100%",y2:"0","stroke-width":"0.046em"}));const r=new J(e,{width:"100%",height:F(i)});s=Pe.makeSvgSpan([],[r],o)}return s.height=i,s.style.height=F(i),s},qt=function(e){const t=new ft.MathNode("mo",[new ft.TextNode(Bt[e.replace(/^\\/,"")])]);return t.setAttribute("stretchy","true"),t},It=function(e,t){const{span:r,minWidth:n,height:o}=function(){let r=4e5;const n=e.label.slice(1);if(l.contains(["widehat","widecheck","widetilde","utilde"],n)){const s="ordgroup"===(o=e.base).type?o.body.length:1;let i,a,l;if(s>5)"widehat"===n||"widecheck"===n?(i=420,r=2364,l=.42,a=n+"4"):(i=312,r=2340,l=.34,a="tilde4");else{const e=[1,1,2,2,3,3][s];"widehat"===n||"widecheck"===n?(r=[0,1062,2364,2364,2364][e],i=[0,239,300,360,420][e],l=[0,.24,.3,.3,.36,.42][e],a=n+e):(r=[0,600,1033,2339,2340][e],i=[0,260,286,306,312][e],l=[0,.26,.286,.3,.306,.34][e],a="tilde"+e)}const h=new Q(a),c=new J([h],{width:"100%",height:F(l),viewBox:"0 0 "+r+" "+i,preserveAspectRatio:"none"});return{span:Pe.makeSvgSpan([],[c],t),minWidth:0,height:l}}{const e=[],o=Ct[n],[s,i,a]=o,l=a/1e3,h=s.length;let c,m;if(1===h){c=["hide-tail"],m=[o[3]]}else if(2===h)c=["halfarrow-left","halfarrow-right"],m=["xMinYMin","xMaxYMin"];else{if(3!==h)throw new Error("Correct katexImagesData or update code here to support\n "+h+" children.");c=["brace-left","brace-center","brace-right"],m=["xMinYMin","xMidYMin","xMaxYMin"]}for(let n=0;n0&&(r.style.minWidth=F(n)),r};function Rt(e,t){if(!e||e.type!==t)throw new Error("Expected node of type "+t+", but got "+(e?"node of type "+e.type:String(e)));return e}function Ht(e){const t=Ot(e);if(!t)throw new Error("Expected node of symbol group type, but got "+(e?"node of type "+e.type:String(e)));return t}function Ot(e){return e&&("atom"===e.type||ne.hasOwnProperty(e.type))?e:null}const Et=(e,t)=>{let r,n,o;e&&"supsub"===e.type?(n=Rt(e.base,"accent"),r=n.base,e.base=r,o=function(e){if(e instanceof _)return e;throw new Error("Expected span but got "+String(e)+".")}(ct(e,t)),e.base=n):(n=Rt(e,"accent"),r=n.base);const s=ct(r,t.havingCrampedStyle());let i=0;if(n.isShifty&&l.isCharacterBox(r)){const e=l.getBaseElem(r);i=te(ct(e,t.havingCrampedStyle())).skew}const a="\\c"===n.label;let h,c=a?s.height+s.depth:Math.min(s.height,t.fontMetrics().xHeight);if(n.isStretchy)h=It(n,t),h=Pe.makeVList({positionType:"firstBaseline",children:[{type:"elem",elem:s},{type:"elem",elem:h,wrapperClasses:["svg-align"],wrapperStyle:i>0?{width:"calc(100% - "+F(2*i)+")",marginLeft:F(2*i)}:void 0}]},t);else{let e,r;"\\vec"===n.label?(e=Pe.staticSvg("vec",t),r=Pe.svgData.vec[1]):(e=Pe.makeOrd({mode:n.mode,text:n.label},t,"textord"),e=te(e),e.italic=0,r=e.width,a&&(c+=e.depth)),h=Pe.makeSpan(["accent-body"],[e]);const o="\\textcircled"===n.label;o&&(h.classes.push("accent-full"),c=s.height);let l=i;o||(l-=r/2),h.style.left=F(l),"\\textcircled"===n.label&&(h.style.top=".2em"),h=Pe.makeVList({positionType:"firstBaseline",children:[{type:"elem",elem:s},{type:"kern",size:-c},{type:"elem",elem:h}]},t)}const m=Pe.makeSpan(["mord","accent"],[h],t);return o?(o.children[0]=m,o.height=Math.max(m.height,o.height),o.classes[0]="mord",o):m},Lt=(e,t)=>{const r=e.isStretchy?qt(e.label):new ft.MathNode("mo",[bt(e.label,e.mode)]),n=new ft.MathNode("mover",[St(e.base,t),r]);return n.setAttribute("accent","true"),n},Dt=new RegExp(["\\acute","\\grave","\\ddot","\\tilde","\\bar","\\breve","\\check","\\hat","\\vec","\\dot","\\mathring"].map((e=>"\\"+e)).join("|"));$e({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:(e,t)=>{const r=Ke(t[0]),n=!Dt.test(e.funcName),o=!n||"\\widehat"===e.funcName||"\\widetilde"===e.funcName||"\\widecheck"===e.funcName;return{type:"accent",mode:e.parser.mode,label:e.funcName,isStretchy:n,isShifty:o,base:r}},htmlBuilder:Et,mathmlBuilder:Lt}),$e({type:"accent",names:["\\'","\\`","\\^","\\~","\\=","\\u","\\.",'\\"',"\\c","\\r","\\H","\\v","\\textcircled"],props:{numArgs:1,allowedInText:!0,allowedInMath:!0,argTypes:["primitive"]},handler:(e,t)=>{const r=t[0];let n=e.parser.mode;return"math"===n&&(e.parser.settings.reportNonstrict("mathVsTextAccents","LaTeX's accent "+e.funcName+" works only in text mode"),n="text"),{type:"accent",mode:n,label:e.funcName,isStretchy:!1,isShifty:!0,base:r}},htmlBuilder:Et,mathmlBuilder:Lt}),$e({type:"accentUnder",names:["\\underleftarrow","\\underrightarrow","\\underleftrightarrow","\\undergroup","\\underlinesegment","\\utilde"],props:{numArgs:1},handler:(e,t)=>{let{parser:r,funcName:n}=e;const o=t[0];return{type:"accentUnder",mode:r.mode,label:n,base:o}},htmlBuilder:(e,t)=>{const r=ct(e.base,t),n=It(e,t),o="\\utilde"===e.label?.12:0,s=Pe.makeVList({positionType:"top",positionData:r.height,children:[{type:"elem",elem:n,wrapperClasses:["svg-align"]},{type:"kern",size:o},{type:"elem",elem:r}]},t);return Pe.makeSpan(["mord","accentunder"],[s],t)},mathmlBuilder:(e,t)=>{const r=qt(e.label),n=new ft.MathNode("munder",[St(e.base,t),r]);return n.setAttribute("accentunder","true"),n}});const Vt=e=>{const t=new ft.MathNode("mpadded",e?[e]:[]);return t.setAttribute("width","+0.6em"),t.setAttribute("lspace","0.3em"),t};$e({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(e,t,r){let{parser:n,funcName:o}=e;return{type:"xArrow",mode:n.mode,label:o,body:t[0],below:r[0]}},htmlBuilder(e,t){const r=t.style;let n=t.havingStyle(r.sup());const o=Pe.wrapFragment(ct(e.body,n,t),t),s="\\x"===e.label.slice(0,2)?"x":"cd";let i;o.classes.push(s+"-arrow-pad"),e.below&&(n=t.havingStyle(r.sub()),i=Pe.wrapFragment(ct(e.below,n,t),t),i.classes.push(s+"-arrow-pad"));const a=It(e,t),l=-t.fontMetrics().axisHeight+.5*a.height;let h,c=-t.fontMetrics().axisHeight-.5*a.height-.111;if((o.depth>.25||"\\xleftequilibrium"===e.label)&&(c-=o.depth),i){const e=-t.fontMetrics().axisHeight+i.height+.5*a.height+.111;h=Pe.makeVList({positionType:"individualShift",children:[{type:"elem",elem:o,shift:c},{type:"elem",elem:a,shift:l},{type:"elem",elem:i,shift:e}]},t)}else h=Pe.makeVList({positionType:"individualShift",children:[{type:"elem",elem:o,shift:c},{type:"elem",elem:a,shift:l}]},t);return h.children[0].children[0].children[1].classes.push("svg-align"),Pe.makeSpan(["mrel","x-arrow"],[h],t)},mathmlBuilder(e,t){const r=qt(e.label);let n;if(r.setAttribute("minsize","x"===e.label.charAt(0)?"1.75em":"3.0em"),e.body){const o=Vt(St(e.body,t));if(e.below){const s=Vt(St(e.below,t));n=new ft.MathNode("munderover",[r,s,o])}else n=new ft.MathNode("mover",[r,o])}else if(e.below){const o=Vt(St(e.below,t));n=new ft.MathNode("munder",[r,o])}else n=Vt(),n=new ft.MathNode("mover",[r,n]);return n}});const Pt=Pe.makeSpan;function Ft(e,t){const r=ot(e.body,t,!0);return Pt([e.mclass],r,t)}function Gt(e,t){let r;const n=vt(e.body,t);return"minner"===e.mclass?r=new ft.MathNode("mpadded",n):"mord"===e.mclass?e.isCharacterBox?(r=n[0],r.type="mi"):r=new ft.MathNode("mi",n):(e.isCharacterBox?(r=n[0],r.type="mo"):r=new ft.MathNode("mo",n),"mbin"===e.mclass?(r.attributes.lspace="0.22em",r.attributes.rspace="0.22em"):"mpunct"===e.mclass?(r.attributes.lspace="0em",r.attributes.rspace="0.17em"):"mopen"===e.mclass||"mclose"===e.mclass?(r.attributes.lspace="0em",r.attributes.rspace="0em"):"minner"===e.mclass&&(r.attributes.lspace="0.0556em",r.attributes.width="+0.1111em")),r}$e({type:"mclass",names:["\\mathord","\\mathbin","\\mathrel","\\mathopen","\\mathclose","\\mathpunct","\\mathinner"],props:{numArgs:1,primitive:!0},handler(e,t){let{parser:r,funcName:n}=e;const o=t[0];return{type:"mclass",mode:r.mode,mclass:"m"+n.slice(5),body:Je(o),isCharacterBox:l.isCharacterBox(o)}},htmlBuilder:Ft,mathmlBuilder:Gt});const Ut=e=>{const t="ordgroup"===e.type&&e.body.length?e.body[0]:e;return"atom"!==t.type||"bin"!==t.family&&"rel"!==t.family?"mord":"m"+t.family};$e({type:"mclass",names:["\\@binrel"],props:{numArgs:2},handler(e,t){let{parser:r}=e;return{type:"mclass",mode:r.mode,mclass:Ut(t[0]),body:Je(t[1]),isCharacterBox:l.isCharacterBox(t[1])}}}),$e({type:"mclass",names:["\\stackrel","\\overset","\\underset"],props:{numArgs:2},handler(e,t){let{parser:r,funcName:n}=e;const o=t[1],s=t[0];let i;i="\\stackrel"!==n?Ut(o):"mrel";const a={type:"op",mode:o.mode,limits:!0,alwaysHandleSupSub:!0,parentIsSupSub:!1,symbol:!1,suppressBaseShift:"\\stackrel"!==n,body:Je(o)},h={type:"supsub",mode:s.mode,base:a,sup:"\\underset"===n?null:s,sub:"\\underset"===n?s:null};return{type:"mclass",mode:r.mode,mclass:i,body:[h],isCharacterBox:l.isCharacterBox(h)}},htmlBuilder:Ft,mathmlBuilder:Gt}),$e({type:"pmb",names:["\\pmb"],props:{numArgs:1,allowedInText:!0},handler(e,t){let{parser:r}=e;return{type:"pmb",mode:r.mode,mclass:Ut(t[0]),body:Je(t[0])}},htmlBuilder(e,t){const r=ot(e.body,t,!0),n=Pe.makeSpan([e.mclass],r,t);return n.style.textShadow="0.02em 0.01em 0.04px",n},mathmlBuilder(e,t){const r=vt(e.body,t),n=new ft.MathNode("mstyle",r);return n.setAttribute("style","text-shadow: 0.02em 0.01em 0.04px"),n}});const Yt={">":"\\\\cdrightarrow","<":"\\\\cdleftarrow","=":"\\\\cdlongequal",A:"\\uparrow",V:"\\downarrow","|":"\\Vert",".":"no arrow"},Xt=e=>"textord"===e.type&&"@"===e.text;function Wt(e,t,r){const n=Yt[e];switch(n){case"\\\\cdrightarrow":case"\\\\cdleftarrow":return r.callFunction(n,[t[0]],[t[1]]);case"\\uparrow":case"\\downarrow":{const e={type:"atom",text:n,mode:"math",family:"rel"},o={type:"ordgroup",mode:"math",body:[r.callFunction("\\\\cdleft",[t[0]],[]),r.callFunction("\\Big",[e],[]),r.callFunction("\\\\cdright",[t[1]],[])]};return r.callFunction("\\\\cdparent",[o],[])}case"\\\\cdlongequal":return r.callFunction("\\\\cdlongequal",[],[]);case"\\Vert":{const e={type:"textord",text:"\\Vert",mode:"math"};return r.callFunction("\\Big",[e],[])}default:return{type:"textord",text:" ",mode:"math"}}}$e({type:"cdlabel",names:["\\\\cdleft","\\\\cdright"],props:{numArgs:1},handler(e,t){let{parser:r,funcName:n}=e;return{type:"cdlabel",mode:r.mode,side:n.slice(4),label:t[0]}},htmlBuilder(e,t){const r=t.havingStyle(t.style.sup()),n=Pe.wrapFragment(ct(e.label,r,t),t);return n.classes.push("cd-label-"+e.side),n.style.bottom=F(.8-n.depth),n.height=0,n.depth=0,n},mathmlBuilder(e,t){let r=new ft.MathNode("mrow",[St(e.label,t)]);return r=new ft.MathNode("mpadded",[r]),r.setAttribute("width","0"),"left"===e.side&&r.setAttribute("lspace","-1width"),r.setAttribute("voffset","0.7em"),r=new ft.MathNode("mstyle",[r]),r.setAttribute("displaystyle","false"),r.setAttribute("scriptlevel","1"),r}}),$e({type:"cdlabelparent",names:["\\\\cdparent"],props:{numArgs:1},handler(e,t){let{parser:r}=e;return{type:"cdlabelparent",mode:r.mode,fragment:t[0]}},htmlBuilder(e,t){const r=Pe.wrapFragment(ct(e.fragment,t),t);return r.classes.push("cd-vert-arrow"),r},mathmlBuilder(e,t){return new ft.MathNode("mrow",[St(e.fragment,t)])}}),$e({type:"textord",names:["\\@char"],props:{numArgs:1,allowedInText:!0},handler(e,t){let{parser:r}=e;const o=Rt(t[0],"ordgroup").body;let s="";for(let e=0;e=1114111)throw new n("\\@char with invalid code point "+s);return a<=65535?i=String.fromCharCode(a):(a-=65536,i=String.fromCharCode(55296+(a>>10),56320+(1023&a))),{type:"textord",mode:r.mode,text:i}}});const _t=(e,t)=>{const r=ot(e.body,t.withColor(e.color),!1);return Pe.makeFragment(r)},jt=(e,t)=>{const r=vt(e.body,t.withColor(e.color)),n=new ft.MathNode("mstyle",r);return n.setAttribute("mathcolor",e.color),n};$e({type:"color",names:["\\textcolor"],props:{numArgs:2,allowedInText:!0,argTypes:["color","original"]},handler(e,t){let{parser:r}=e;const n=Rt(t[0],"color-token").color,o=t[1];return{type:"color",mode:r.mode,color:n,body:Je(o)}},htmlBuilder:_t,mathmlBuilder:jt}),$e({type:"color",names:["\\color"],props:{numArgs:1,allowedInText:!0,argTypes:["color"]},handler(e,t){let{parser:r,breakOnTokenText:n}=e;const o=Rt(t[0],"color-token").color;r.gullet.macros.set("\\current@color",o);const s=r.parseExpression(!0,n);return{type:"color",mode:r.mode,color:o,body:s}},htmlBuilder:_t,mathmlBuilder:jt}),$e({type:"cr",names:["\\\\"],props:{numArgs:0,numOptionalArgs:0,allowedInText:!0},handler(e,t,r){let{parser:n}=e;const o="["===n.gullet.future().text?n.parseSizeGroup(!0):null,s=!n.settings.displayMode||!n.settings.useStrictBehavior("newLineInDisplayMode","In LaTeX, \\\\ or \\newline does nothing in display mode");return{type:"cr",mode:n.mode,newLine:s,size:o&&Rt(o,"size").value}},htmlBuilder(e,t){const r=Pe.makeSpan(["mspace"],[],t);return e.newLine&&(r.classes.push("newline"),e.size&&(r.style.marginTop=F(P(e.size,t)))),r},mathmlBuilder(e,t){const r=new ft.MathNode("mspace");return e.newLine&&(r.setAttribute("linebreak","newline"),e.size&&r.setAttribute("height",F(P(e.size,t)))),r}});const $t={"\\global":"\\global","\\long":"\\\\globallong","\\\\globallong":"\\\\globallong","\\def":"\\gdef","\\gdef":"\\gdef","\\edef":"\\xdef","\\xdef":"\\xdef","\\let":"\\\\globallet","\\futurelet":"\\\\globalfuture"},Zt=e=>{const t=e.text;if(/^(?:[\\{}$&#^_]|EOF)$/.test(t))throw new n("Expected a control sequence",e);return t},Kt=(e,t,r,n)=>{let o=e.gullet.macros.get(r.text);null==o&&(r.noexpand=!0,o={tokens:[r],numArgs:0,unexpandable:!e.gullet.isExpandable(r.text)}),e.gullet.macros.set(t,o,n)};$e({type:"internal",names:["\\global","\\long","\\\\globallong"],props:{numArgs:0,allowedInText:!0},handler(e){let{parser:t,funcName:r}=e;t.consumeSpaces();const o=t.fetch();if($t[o.text])return"\\global"!==r&&"\\\\globallong"!==r||(o.text=$t[o.text]),Rt(t.parseFunction(),"internal");throw new n("Invalid token after macro prefix",o)}}),$e({type:"internal",names:["\\def","\\gdef","\\edef","\\xdef"],props:{numArgs:0,allowedInText:!0,primitive:!0},handler(e){let{parser:t,funcName:r}=e,o=t.gullet.popToken();const s=o.text;if(/^(?:[\\{}$&#^_]|EOF)$/.test(s))throw new n("Expected a control sequence",o);let i,a=0;const l=[[]];for(;"{"!==t.gullet.future().text;)if(o=t.gullet.popToken(),"#"===o.text){if("{"===t.gullet.future().text){i=t.gullet.future(),l[a].push("{");break}if(o=t.gullet.popToken(),!/^[1-9]$/.test(o.text))throw new n('Invalid argument number "'+o.text+'"');if(parseInt(o.text)!==a+1)throw new n('Argument number "'+o.text+'" out of order');a++,l.push([])}else{if("EOF"===o.text)throw new n("Expected a macro definition");l[a].push(o.text)}let{tokens:h}=t.gullet.consumeArg();return i&&h.unshift(i),"\\edef"!==r&&"\\xdef"!==r||(h=t.gullet.expandTokens(h),h.reverse()),t.gullet.macros.set(s,{tokens:h,numArgs:a,delimiters:l},r===$t[r]),{type:"internal",mode:t.mode}}}),$e({type:"internal",names:["\\let","\\\\globallet"],props:{numArgs:0,allowedInText:!0,primitive:!0},handler(e){let{parser:t,funcName:r}=e;const n=Zt(t.gullet.popToken());t.gullet.consumeSpaces();const o=(e=>{let t=e.gullet.popToken();return"="===t.text&&(t=e.gullet.popToken()," "===t.text&&(t=e.gullet.popToken())),t})(t);return Kt(t,n,o,"\\\\globallet"===r),{type:"internal",mode:t.mode}}}),$e({type:"internal",names:["\\futurelet","\\\\globalfuture"],props:{numArgs:0,allowedInText:!0,primitive:!0},handler(e){let{parser:t,funcName:r}=e;const n=Zt(t.gullet.popToken()),o=t.gullet.popToken(),s=t.gullet.popToken();return Kt(t,n,s,"\\\\globalfuture"===r),t.gullet.pushToken(s),t.gullet.pushToken(o),{type:"internal",mode:t.mode}}});const Jt=function(e,t,r){const n=N(se.math[e]&&se.math[e].replace||e,t,r);if(!n)throw new Error("Unsupported symbol "+e+" and font size "+t+".");return n},Qt=function(e,t,r,n){const o=r.havingBaseStyle(t),s=Pe.makeSpan(n.concat(o.sizingClasses(r)),[e],r),i=o.sizeMultiplier/r.sizeMultiplier;return s.height*=i,s.depth*=i,s.maxFontSize=o.sizeMultiplier,s},er=function(e,t,r){const n=t.havingBaseStyle(r),o=(1-t.sizeMultiplier/n.sizeMultiplier)*t.fontMetrics().axisHeight;e.classes.push("delimcenter"),e.style.top=F(o),e.height-=o,e.depth+=o},tr=function(e,t,r,n,o,s){const i=function(e,t,r,n){return Pe.makeSymbol(e,"Size"+t+"-Regular",r,n)}(e,t,o,n),a=Qt(Pe.makeSpan(["delimsizing","size"+t],[i],n),w.TEXT,n,s);return r&&er(a,n,w.TEXT),a},rr=function(e,t,r){let n;n="Size1-Regular"===t?"delim-size1":"delim-size4";return{type:"elem",elem:Pe.makeSpan(["delimsizinginner",n],[Pe.makeSpan([],[Pe.makeSymbol(e,t,r)])])}},nr=function(e,t,r){const n=T["Size4-Regular"][e.charCodeAt(0)]?T["Size4-Regular"][e.charCodeAt(0)][4]:T["Size1-Regular"][e.charCodeAt(0)][4],o=new Q("inner",function(e,t){switch(e){case"\u239c":return"M291 0 H417 V"+t+" H291z M291 0 H417 V"+t+" H291z";case"\u2223":return"M145 0 H188 V"+t+" H145z M145 0 H188 V"+t+" H145z";case"\u2225":return"M145 0 H188 V"+t+" H145z M145 0 H188 V"+t+" H145zM367 0 H410 V"+t+" H367z M367 0 H410 V"+t+" H367z";case"\u239f":return"M457 0 H583 V"+t+" H457z M457 0 H583 V"+t+" H457z";case"\u23a2":return"M319 0 H403 V"+t+" H319z M319 0 H403 V"+t+" H319z";case"\u23a5":return"M263 0 H347 V"+t+" H263z M263 0 H347 V"+t+" H263z";case"\u23aa":return"M384 0 H504 V"+t+" H384z M384 0 H504 V"+t+" H384z";case"\u23d0":return"M312 0 H355 V"+t+" H312z M312 0 H355 V"+t+" H312z";case"\u2016":return"M257 0 H300 V"+t+" H257z M257 0 H300 V"+t+" H257zM478 0 H521 V"+t+" H478z M478 0 H521 V"+t+" H478z";default:return""}}(e,Math.round(1e3*t))),s=new J([o],{width:F(n),height:F(t),style:"width:"+F(n),viewBox:"0 0 "+1e3*n+" "+Math.round(1e3*t),preserveAspectRatio:"xMinYMin"}),i=Pe.makeSvgSpan([],[s],r);return i.height=t,i.style.height=F(t),i.style.width=F(n),{type:"elem",elem:i}},or={type:"kern",size:-.008},sr=["|","\\lvert","\\rvert","\\vert"],ir=["\\|","\\lVert","\\rVert","\\Vert"],ar=function(e,t,r,n,o,s){let i,a,h,c,m="",p=0;i=h=c=e,a=null;let u="Size1-Regular";"\\uparrow"===e?h=c="\u23d0":"\\Uparrow"===e?h=c="\u2016":"\\downarrow"===e?i=h="\u23d0":"\\Downarrow"===e?i=h="\u2016":"\\updownarrow"===e?(i="\\uparrow",h="\u23d0",c="\\downarrow"):"\\Updownarrow"===e?(i="\\Uparrow",h="\u2016",c="\\Downarrow"):l.contains(sr,e)?(h="\u2223",m="vert",p=333):l.contains(ir,e)?(h="\u2225",m="doublevert",p=556):"["===e||"\\lbrack"===e?(i="\u23a1",h="\u23a2",c="\u23a3",u="Size4-Regular",m="lbrack",p=667):"]"===e||"\\rbrack"===e?(i="\u23a4",h="\u23a5",c="\u23a6",u="Size4-Regular",m="rbrack",p=667):"\\lfloor"===e||"\u230a"===e?(h=i="\u23a2",c="\u23a3",u="Size4-Regular",m="lfloor",p=667):"\\lceil"===e||"\u2308"===e?(i="\u23a1",h=c="\u23a2",u="Size4-Regular",m="lceil",p=667):"\\rfloor"===e||"\u230b"===e?(h=i="\u23a5",c="\u23a6",u="Size4-Regular",m="rfloor",p=667):"\\rceil"===e||"\u2309"===e?(i="\u23a4",h=c="\u23a5",u="Size4-Regular",m="rceil",p=667):"("===e||"\\lparen"===e?(i="\u239b",h="\u239c",c="\u239d",u="Size4-Regular",m="lparen",p=875):")"===e||"\\rparen"===e?(i="\u239e",h="\u239f",c="\u23a0",u="Size4-Regular",m="rparen",p=875):"\\{"===e||"\\lbrace"===e?(i="\u23a7",a="\u23a8",c="\u23a9",h="\u23aa",u="Size4-Regular"):"\\}"===e||"\\rbrace"===e?(i="\u23ab",a="\u23ac",c="\u23ad",h="\u23aa",u="Size4-Regular"):"\\lgroup"===e||"\u27ee"===e?(i="\u23a7",c="\u23a9",h="\u23aa",u="Size4-Regular"):"\\rgroup"===e||"\u27ef"===e?(i="\u23ab",c="\u23ad",h="\u23aa",u="Size4-Regular"):"\\lmoustache"===e||"\u23b0"===e?(i="\u23a7",c="\u23ad",h="\u23aa",u="Size4-Regular"):"\\rmoustache"!==e&&"\u23b1"!==e||(i="\u23ab",c="\u23a9",h="\u23aa",u="Size4-Regular");const d=Jt(i,u,o),g=d.height+d.depth,f=Jt(h,u,o),b=f.height+f.depth,y=Jt(c,u,o),x=y.height+y.depth;let v=0,k=1;if(null!==a){const e=Jt(a,u,o);v=e.height+e.depth,k=2}const S=g+x+v,M=S+Math.max(0,Math.ceil((t-S)/(k*b)))*k*b;let z=n.fontMetrics().axisHeight;r&&(z*=n.sizeMultiplier);const A=M/2-z,T=[];if(m.length>0){const e=M-g-x,t=Math.round(1e3*M),r=function(e,t){switch(e){case"lbrack":return"M403 1759 V84 H666 V0 H319 V1759 v"+t+" v1759 h347 v-84\nH403z M403 1759 V0 H319 V1759 v"+t+" v1759 h84z";case"rbrack":return"M347 1759 V0 H0 V84 H263 V1759 v"+t+" v1759 H0 v84 H347z\nM347 1759 V0 H263 V1759 v"+t+" v1759 h84z";case"vert":return"M145 15 v585 v"+t+" v585 c2.667,10,9.667,15,21,15\nc10,0,16.667,-5,20,-15 v-585 v"+-t+" v-585 c-2.667,-10,-9.667,-15,-21,-15\nc-10,0,-16.667,5,-20,15z M188 15 H145 v585 v"+t+" v585 h43z";case"doublevert":return"M145 15 v585 v"+t+" v585 c2.667,10,9.667,15,21,15\nc10,0,16.667,-5,20,-15 v-585 v"+-t+" v-585 c-2.667,-10,-9.667,-15,-21,-15\nc-10,0,-16.667,5,-20,15z M188 15 H145 v585 v"+t+" v585 h43z\nM367 15 v585 v"+t+" v585 c2.667,10,9.667,15,21,15\nc10,0,16.667,-5,20,-15 v-585 v"+-t+" v-585 c-2.667,-10,-9.667,-15,-21,-15\nc-10,0,-16.667,5,-20,15z M410 15 H367 v585 v"+t+" v585 h43z";case"lfloor":return"M319 602 V0 H403 V602 v"+t+" v1715 h263 v84 H319z\nMM319 602 V0 H403 V602 v"+t+" v1715 H319z";case"rfloor":return"M319 602 V0 H403 V602 v"+t+" v1799 H0 v-84 H319z\nMM319 602 V0 H403 V602 v"+t+" v1715 H319z";case"lceil":return"M403 1759 V84 H666 V0 H319 V1759 v"+t+" v602 h84z\nM403 1759 V0 H319 V1759 v"+t+" v602 h84z";case"rceil":return"M347 1759 V0 H0 V84 H263 V1759 v"+t+" v602 h84z\nM347 1759 V0 h-84 V1759 v"+t+" 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,"+(t+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,-"+(t+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,"+(t+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,-"+(t+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:throw new Error("Unknown stretchy delimiter.")}}(m,Math.round(1e3*e)),o=new Q(m,r),s=(p/1e3).toFixed(3)+"em",i=(t/1e3).toFixed(3)+"em",a=new J([o],{width:s,height:i,viewBox:"0 0 "+p+" "+t}),l=Pe.makeSvgSpan([],[a],n);l.height=t/1e3,l.style.width=s,l.style.height=i,T.push({type:"elem",elem:l})}else{if(T.push(rr(c,u,o)),T.push(or),null===a){const e=M-g-x+.016;T.push(nr(h,e,n))}else{const e=(M-g-x-v)/2+.016;T.push(nr(h,e,n)),T.push(or),T.push(rr(a,u,o)),T.push(or),T.push(nr(h,e,n))}T.push(or),T.push(rr(i,u,o))}const B=n.havingBaseStyle(w.TEXT),C=Pe.makeVList({positionType:"bottom",positionData:A,children:T},B);return Qt(Pe.makeSpan(["delimsizing","mult"],[C],B),w.TEXT,n,s)},lr=.08,hr=function(e,t,r,n,o){const s=function(e,t,r){t*=1e3;let n="";switch(e){case"sqrtMain":n=function(e,t){return"M95,"+(622+e+t)+"\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"+e/2.075+" -"+e+"\nc5.3,-9.3,12,-14,20,-14\nH400000v"+(40+e)+"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+e)+" "+t+"h400000v"+(40+e)+"h-400000z"}(t,M);break;case"sqrtSize1":n=function(e,t){return"M263,"+(601+e+t)+"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"+e/2.084+" -"+e+"\nc4.7,-7.3,11,-11,19,-11\nH40000v"+(40+e)+"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+e)+" "+t+"h400000v"+(40+e)+"h-400000z"}(t,M);break;case"sqrtSize2":n=function(e,t){return"M983 "+(10+e+t)+"\nl"+e/3.13+" -"+e+"\nc4,-6.7,10,-10,18,-10 H400000v"+(40+e)+"\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+e)+" "+t+"h400000v"+(40+e)+"h-400000z"}(t,M);break;case"sqrtSize3":n=function(e,t){return"M424,"+(2398+e+t)+"\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"+e/4.223+" -"+e+"c4,-6.7,10,-10,18,-10 H400000\nv"+(40+e)+"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+e)+" "+t+"\nh400000v"+(40+e)+"h-400000z"}(t,M);break;case"sqrtSize4":n=function(e,t){return"M473,"+(2713+e+t)+"\nc339.3,-1799.3,509.3,-2700,510,-2702 l"+e/5.298+" -"+e+"\nc3.3,-7.3,9.3,-11,18,-11 H400000v"+(40+e)+"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+e)+" "+t+"h400000v"+(40+e)+"H1017.7z"}(t,M);break;case"sqrtTall":n=function(e,t,r){return"M702 "+(e+t)+"H400000"+(40+e)+"\nH742v"+(r-54-t-e)+"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 "+t+"H400000v"+(40+e)+"H742z"}(t,M,r)}return n}(e,n,r),i=new Q(e,s),a=new J([i],{width:"400em",height:F(t),viewBox:"0 0 400000 "+r,preserveAspectRatio:"xMinYMin slice"});return Pe.makeSvgSpan(["hide-tail"],[a],o)},cr=["(","\\lparen",")","\\rparen","[","\\lbrack","]","\\rbrack","\\{","\\lbrace","\\}","\\rbrace","\\lfloor","\\rfloor","\u230a","\u230b","\\lceil","\\rceil","\u2308","\u2309","\\surd"],mr=["\\uparrow","\\downarrow","\\updownarrow","\\Uparrow","\\Downarrow","\\Updownarrow","|","\\|","\\vert","\\Vert","\\lvert","\\rvert","\\lVert","\\rVert","\\lgroup","\\rgroup","\u27ee","\u27ef","\\lmoustache","\\rmoustache","\u23b0","\u23b1"],pr=["<",">","\\langle","\\rangle","/","\\backslash","\\lt","\\gt"],ur=[0,1.2,1.8,2.4,3],dr=[{type:"small",style:w.SCRIPTSCRIPT},{type:"small",style:w.SCRIPT},{type:"small",style:w.TEXT},{type:"large",size:1},{type:"large",size:2},{type:"large",size:3},{type:"large",size:4}],gr=[{type:"small",style:w.SCRIPTSCRIPT},{type:"small",style:w.SCRIPT},{type:"small",style:w.TEXT},{type:"stack"}],fr=[{type:"small",style:w.SCRIPTSCRIPT},{type:"small",style:w.SCRIPT},{type:"small",style:w.TEXT},{type:"large",size:1},{type:"large",size:2},{type:"large",size:3},{type:"large",size:4},{type:"stack"}],br=function(e){if("small"===e.type)return"Main-Regular";if("large"===e.type)return"Size"+e.size+"-Regular";if("stack"===e.type)return"Size4-Regular";throw new Error("Add support for delim type '"+e.type+"' here.")},yr=function(e,t,r,n){for(let o=Math.min(2,3-n.style.size);ot)return r[o]}return r[r.length-1]},xr=function(e,t,r,n,o,s){let i;"<"===e||"\\lt"===e||"\u27e8"===e?e="\\langle":">"!==e&&"\\gt"!==e&&"\u27e9"!==e||(e="\\rangle"),i=l.contains(pr,e)?dr:l.contains(cr,e)?fr:gr;const a=yr(e,t,i,n);return"small"===a.type?function(e,t,r,n,o,s){const i=Pe.makeSymbol(e,"Main-Regular",o,n),a=Qt(i,t,n,s);return r&&er(a,n,t),a}(e,a.style,r,n,o,s):"large"===a.type?tr(e,a.size,r,n,o,s):ar(e,t,r,n,o,s)};var wr={sqrtImage:function(e,t){const r=t.havingBaseSizing(),n=yr("\\surd",e*r.sizeMultiplier,fr,r);let o=r.sizeMultiplier;const s=Math.max(0,t.minRuleThickness-t.fontMetrics().sqrtRuleThickness);let i,a,l=0,h=0,c=0;return"small"===n.type?(c=1e3+1e3*s+80,e<1?o=1:e<1.4&&(o=.7),l=(1+s+lr)/o,h=(1+s)/o,i=hr("sqrtMain",l,c,s,t),i.style.minWidth="0.853em",a=.833/o):"large"===n.type?(c=1080*ur[n.size],h=(ur[n.size]+s)/o,l=(ur[n.size]+s+lr)/o,i=hr("sqrtSize"+n.size,l,c,s,t),i.style.minWidth="1.02em",a=1/o):(l=e+s+lr,h=e+s,c=Math.floor(1e3*e+s)+80,i=hr("sqrtTall",l,c,s,t),i.style.minWidth="0.742em",a=1.056),i.height=h,i.style.height=F(l),{span:i,advanceWidth:a,ruleWidth:(t.fontMetrics().sqrtRuleThickness+s)*o}},sizedDelim:function(e,t,r,o,s){if("<"===e||"\\lt"===e||"\u27e8"===e?e="\\langle":">"!==e&&"\\gt"!==e&&"\u27e9"!==e||(e="\\rangle"),l.contains(cr,e)||l.contains(pr,e))return tr(e,t,!1,r,o,s);if(l.contains(mr,e))return ar(e,ur[t],!1,r,o,s);throw new n("Illegal delimiter: '"+e+"'")},sizeToMaxHeight:ur,customSizedDelim:xr,leftRightDelim:function(e,t,r,n,o,s){const i=n.fontMetrics().axisHeight*n.sizeMultiplier,a=5/n.fontMetrics().ptPerEm,l=Math.max(t-i,r+i),h=Math.max(l/500*901,2*l-a);return xr(e,h,!0,n,o,s)}};const vr={"\\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}},kr=["(","\\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","."];function Sr(e,t){const r=Ot(e);if(r&&l.contains(kr,r.text))return r;throw new n(r?"Invalid delimiter '"+r.text+"' after '"+t.funcName+"'":"Invalid delimiter type '"+e.type+"'",e)}function Mr(e){if(!e.body)throw new Error("Bug: The leftright ParseNode wasn't fully parsed.")}$e({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:(e,t)=>{const r=Sr(t[0],e);return{type:"delimsizing",mode:e.parser.mode,size:vr[e.funcName].size,mclass:vr[e.funcName].mclass,delim:r.text}},htmlBuilder:(e,t)=>"."===e.delim?Pe.makeSpan([e.mclass]):wr.sizedDelim(e.delim,e.size,t,e.mode,[e.mclass]),mathmlBuilder:e=>{const t=[];"."!==e.delim&&t.push(bt(e.delim,e.mode));const r=new ft.MathNode("mo",t);"mopen"===e.mclass||"mclose"===e.mclass?r.setAttribute("fence","true"):r.setAttribute("fence","false"),r.setAttribute("stretchy","true");const n=F(wr.sizeToMaxHeight[e.size]);return r.setAttribute("minsize",n),r.setAttribute("maxsize",n),r}}),$e({type:"leftright-right",names:["\\right"],props:{numArgs:1,primitive:!0},handler:(e,t)=>{const r=e.parser.gullet.macros.get("\\current@color");if(r&&"string"!=typeof r)throw new n("\\current@color set to non-string in \\right");return{type:"leftright-right",mode:e.parser.mode,delim:Sr(t[0],e).text,color:r}}}),$e({type:"leftright",names:["\\left"],props:{numArgs:1,primitive:!0},handler:(e,t)=>{const r=Sr(t[0],e),n=e.parser;++n.leftrightDepth;const o=n.parseExpression(!1);--n.leftrightDepth,n.expect("\\right",!1);const s=Rt(n.parseFunction(),"leftright-right");return{type:"leftright",mode:n.mode,body:o,left:r.text,right:s.delim,rightColor:s.color}},htmlBuilder:(e,t)=>{Mr(e);const r=ot(e.body,t,!0,["mopen","mclose"]);let n,o,s=0,i=0,a=!1;for(let e=0;e{Mr(e);const r=vt(e.body,t);if("."!==e.left){const t=new ft.MathNode("mo",[bt(e.left,e.mode)]);t.setAttribute("fence","true"),r.unshift(t)}if("."!==e.right){const t=new ft.MathNode("mo",[bt(e.right,e.mode)]);t.setAttribute("fence","true"),e.rightColor&&t.setAttribute("mathcolor",e.rightColor),r.push(t)}return yt(r)}}),$e({type:"middle",names:["\\middle"],props:{numArgs:1,primitive:!0},handler:(e,t)=>{const r=Sr(t[0],e);if(!e.parser.leftrightDepth)throw new n("\\middle without preceding \\left",r);return{type:"middle",mode:e.parser.mode,delim:r.text}},htmlBuilder:(e,t)=>{let r;if("."===e.delim)r=ht(t,[]);else{r=wr.sizedDelim(e.delim,1,t,e.mode,[]);const n={delim:e.delim,options:t};r.isMiddle=n}return r},mathmlBuilder:(e,t)=>{const r="\\vert"===e.delim||"|"===e.delim?bt("|","text"):bt(e.delim,e.mode),n=new ft.MathNode("mo",[r]);return n.setAttribute("fence","true"),n.setAttribute("lspace","0.05em"),n.setAttribute("rspace","0.05em"),n}});const zr=(e,t)=>{const r=Pe.wrapFragment(ct(e.body,t),t),n=e.label.slice(1);let o,s=t.sizeMultiplier,i=0;const a=l.isCharacterBox(e.body);if("sout"===n)o=Pe.makeSpan(["stretchy","sout"]),o.height=t.fontMetrics().defaultRuleThickness/s,i=-.5*t.fontMetrics().xHeight;else if("phase"===n){const e=P({number:.6,unit:"pt"},t),n=P({number:.35,unit:"ex"},t);s/=t.havingBaseSizing().sizeMultiplier;const a=r.height+r.depth+e+n;r.style.paddingLeft=F(a/2+e);const l=Math.floor(1e3*a*s),c="M400000 "+(h=l)+" H0 L"+h/2+" 0 l65 45 L145 "+(h-80)+" H400000z",m=new J([new Q("phase",c)],{width:"400em",height:F(l/1e3),viewBox:"0 0 400000 "+l,preserveAspectRatio:"xMinYMin slice"});o=Pe.makeSvgSpan(["hide-tail"],[m],t),o.style.height=F(a),i=r.depth+e+n}else{/cancel/.test(n)?a||r.classes.push("cancel-pad"):"angl"===n?r.classes.push("anglpad"):r.classes.push("boxpad");let s=0,l=0,h=0;/box/.test(n)?(h=Math.max(t.fontMetrics().fboxrule,t.minRuleThickness),s=t.fontMetrics().fboxsep+("colorbox"===n?0:h),l=s):"angl"===n?(h=Math.max(t.fontMetrics().defaultRuleThickness,t.minRuleThickness),s=4*h,l=Math.max(0,.25-r.depth)):(s=a?.2:0,l=s),o=Nt(r,n,s,l,t),/fbox|boxed|fcolorbox/.test(n)?(o.style.borderStyle="solid",o.style.borderWidth=F(h)):"angl"===n&&.049!==h&&(o.style.borderTopWidth=F(h),o.style.borderRightWidth=F(h)),i=r.depth+l,e.backgroundColor&&(o.style.backgroundColor=e.backgroundColor,e.borderColor&&(o.style.borderColor=e.borderColor))}var h;let c;if(e.backgroundColor)c=Pe.makeVList({positionType:"individualShift",children:[{type:"elem",elem:o,shift:i},{type:"elem",elem:r,shift:0}]},t);else{const e=/cancel|phase/.test(n)?["svg-align"]:[];c=Pe.makeVList({positionType:"individualShift",children:[{type:"elem",elem:r,shift:0},{type:"elem",elem:o,shift:i,wrapperClasses:e}]},t)}return/cancel/.test(n)&&(c.height=r.height,c.depth=r.depth),/cancel/.test(n)&&!a?Pe.makeSpan(["mord","cancel-lap"],[c],t):Pe.makeSpan(["mord"],[c],t)},Ar=(e,t)=>{let r=0;const n=new ft.MathNode(e.label.indexOf("colorbox")>-1?"mpadded":"menclose",[St(e.body,t)]);switch(e.label){case"\\cancel":n.setAttribute("notation","updiagonalstrike");break;case"\\bcancel":n.setAttribute("notation","downdiagonalstrike");break;case"\\phase":n.setAttribute("notation","phasorangle");break;case"\\sout":n.setAttribute("notation","horizontalstrike");break;case"\\fbox":n.setAttribute("notation","box");break;case"\\angl":n.setAttribute("notation","actuarial");break;case"\\fcolorbox":case"\\colorbox":if(r=t.fontMetrics().fboxsep*t.fontMetrics().ptPerEm,n.setAttribute("width","+"+2*r+"pt"),n.setAttribute("height","+"+2*r+"pt"),n.setAttribute("lspace",r+"pt"),n.setAttribute("voffset",r+"pt"),"\\fcolorbox"===e.label){const r=Math.max(t.fontMetrics().fboxrule,t.minRuleThickness);n.setAttribute("style","border: "+r+"em solid "+String(e.borderColor))}break;case"\\xcancel":n.setAttribute("notation","updiagonalstrike downdiagonalstrike")}return e.backgroundColor&&n.setAttribute("mathbackground",e.backgroundColor),n};$e({type:"enclose",names:["\\colorbox"],props:{numArgs:2,allowedInText:!0,argTypes:["color","text"]},handler(e,t,r){let{parser:n,funcName:o}=e;const s=Rt(t[0],"color-token").color,i=t[1];return{type:"enclose",mode:n.mode,label:o,backgroundColor:s,body:i}},htmlBuilder:zr,mathmlBuilder:Ar}),$e({type:"enclose",names:["\\fcolorbox"],props:{numArgs:3,allowedInText:!0,argTypes:["color","color","text"]},handler(e,t,r){let{parser:n,funcName:o}=e;const s=Rt(t[0],"color-token").color,i=Rt(t[1],"color-token").color,a=t[2];return{type:"enclose",mode:n.mode,label:o,backgroundColor:i,borderColor:s,body:a}},htmlBuilder:zr,mathmlBuilder:Ar}),$e({type:"enclose",names:["\\fbox"],props:{numArgs:1,argTypes:["hbox"],allowedInText:!0},handler(e,t){let{parser:r}=e;return{type:"enclose",mode:r.mode,label:"\\fbox",body:t[0]}}}),$e({type:"enclose",names:["\\cancel","\\bcancel","\\xcancel","\\sout","\\phase"],props:{numArgs:1},handler(e,t){let{parser:r,funcName:n}=e;const o=t[0];return{type:"enclose",mode:r.mode,label:n,body:o}},htmlBuilder:zr,mathmlBuilder:Ar}),$e({type:"enclose",names:["\\angl"],props:{numArgs:1,argTypes:["hbox"],allowedInText:!1},handler(e,t){let{parser:r}=e;return{type:"enclose",mode:r.mode,label:"\\angl",body:t[0]}}});const Tr={};function Br(e){let{type:t,names:r,props:n,handler:o,htmlBuilder:s,mathmlBuilder:i}=e;const a={type:t,numArgs:n.numArgs||0,allowedInText:!1,numOptionalArgs:0,handler:o};for(let e=0;e{if(!e.parser.settings.displayMode)throw new n("{"+e.envName+"} can be used only in display mode.")};function Or(e){if(-1===e.indexOf("ed"))return-1===e.indexOf("*")}function Er(e,t,r){let{hskipBeforeAndAfter:o,addJot:s,cols:i,arraystretch:a,colSeparationType:l,autoTag:h,singleRow:c,emptySingleRow:m,maxNumCols:p,leqno:u}=t;if(e.gullet.beginGroup(),c||e.gullet.macros.set("\\cr","\\\\\\relax"),!a){const t=e.gullet.expandMacroAsText("\\arraystretch");if(null==t)a=1;else if(a=parseFloat(t),!a||a<0)throw new n("Invalid \\arraystretch: "+t)}e.gullet.beginGroup();let d=[];const g=[d],f=[],b=[],y=null!=h?[]:void 0;function x(){h&&e.gullet.macros.set("\\@eqnsw","1",!0)}function w(){y&&(e.gullet.macros.get("\\df@tag")?(y.push(e.subparse([new Ir("\\df@tag")])),e.gullet.macros.set("\\df@tag",void 0,!0)):y.push(Boolean(h)&&"1"===e.gullet.macros.get("\\@eqnsw")))}for(x(),b.push(Rr(e));;){let t=e.parseExpression(!1,c?"\\end":"\\\\");e.gullet.endGroup(),e.gullet.beginGroup(),t={type:"ordgroup",mode:e.mode,body:t},r&&(t={type:"styling",mode:e.mode,style:r,body:[t]}),d.push(t);const o=e.fetch().text;if("&"===o){if(p&&d.length===p){if(c||l)throw new n("Too many tab characters: &",e.nextToken);e.settings.reportNonstrict("textEnv","Too few columns specified in the {array} column argument.")}e.consume()}else{if("\\end"===o){w(),1===d.length&&"styling"===t.type&&0===t.body[0].body.length&&(g.length>1||!m)&&g.pop(),b.length0&&(x+=.25),c.push({pos:x,isDashed:e[t]})}for(v(i[0]),r=0;r0&&(p+=y,le)))for(r=0;r=a)continue;(o>0||e.hskipBeforeAndAfter)&&(i=l.deflt(c.pregap,u),0!==i&&(z=Pe.makeSpan(["arraycolsep"],[]),z.style.width=F(i),M.push(z)));let d=[];for(r=0;r0){const e=Pe.makeLineSpan("hline",t,m),r=Pe.makeLineSpan("hdashline",t,m),n=[{type:"elem",elem:h,shift:0}];for(;c.length>0;){const t=c.pop(),o=t.pos-k;t.isDashed?n.push({type:"elem",elem:r,shift:o}):n.push({type:"elem",elem:e,shift:o})}h=Pe.makeVList({positionType:"individualShift",children:n},t)}if(0===T.length)return Pe.makeSpan(["mord"],[h],t);{let e=Pe.makeVList({positionType:"individualShift",children:T},t);return e=Pe.makeSpan(["tag"],[e],t),Pe.makeFragment([h,e])}},Vr={c:"center ",l:"left ",r:"right "},Pr=function(e,t){const r=[],n=new ft.MathNode("mtd",[],["mtr-glue"]),o=new ft.MathNode("mtd",[],["mml-eqn-num"]);for(let s=0;s0){const t=e.cols;let r="",n=!1,o=0,i=t.length;"separator"===t[0].type&&(a+="top ",o=1),"separator"===t[t.length-1].type&&(a+="bottom ",i-=1);for(let e=o;e0?"left ":"",a+=c[c.length-1].length>0?"right ":"";for(let e=1;e-1?"alignat":"align",s="split"===e.envName,i=Er(e.parser,{cols:r,addJot:!0,autoTag:s?void 0:Or(e.envName),emptySingleRow:!0,colSeparationType:o,maxNumCols:s?2:void 0,leqno:e.parser.settings.leqno},"display");let a,l=0;const h={type:"ordgroup",mode:e.mode,body:[]};if(t[0]&&"ordgroup"===t[0].type){let e="";for(let r=0;r0&&c&&(n=1),r[e]={type:"align",align:t,pregap:n,postgap:0}}return i.colSeparationType=c?"align":"alignat",i};Br({type:"array",names:["array","darray"],props:{numArgs:1},handler(e,t){const r=(Ot(t[0])?[t[0]]:Rt(t[0],"ordgroup").body).map((function(e){const t=Ht(e).text;if(-1!=="lcr".indexOf(t))return{type:"align",align:t};if("|"===t)return{type:"separator",separator:"|"};if(":"===t)return{type:"separator",separator:":"};throw new n("Unknown column alignment: "+t,e)})),o={cols:r,hskipBeforeAndAfter:!0,maxNumCols:r.length};return Er(e.parser,o,Lr(e.envName))},htmlBuilder:Dr,mathmlBuilder:Pr}),Br({type:"array",names:["matrix","pmatrix","bmatrix","Bmatrix","vmatrix","Vmatrix","matrix*","pmatrix*","bmatrix*","Bmatrix*","vmatrix*","Vmatrix*"],props:{numArgs:0},handler(e){const t={matrix:null,pmatrix:["(",")"],bmatrix:["[","]"],Bmatrix:["\\{","\\}"],vmatrix:["|","|"],Vmatrix:["\\Vert","\\Vert"]}[e.envName.replace("*","")];let r="c";const o={hskipBeforeAndAfter:!1,cols:[{type:"align",align:r}]};if("*"===e.envName.charAt(e.envName.length-1)){const t=e.parser;if(t.consumeSpaces(),"["===t.fetch().text){if(t.consume(),t.consumeSpaces(),r=t.fetch().text,-1==="lcr".indexOf(r))throw new n("Expected l or c or r",t.nextToken);t.consume(),t.consumeSpaces(),t.expect("]"),t.consume(),o.cols=[{type:"align",align:r}]}}const s=Er(e.parser,o,Lr(e.envName)),i=Math.max(0,...s.body.map((e=>e.length)));return s.cols=new Array(i).fill({type:"align",align:r}),t?{type:"leftright",mode:e.mode,body:[s],left:t[0],right:t[1],rightColor:void 0}:s},htmlBuilder:Dr,mathmlBuilder:Pr}),Br({type:"array",names:["smallmatrix"],props:{numArgs:0},handler(e){const t=Er(e.parser,{arraystretch:.5},"script");return t.colSeparationType="small",t},htmlBuilder:Dr,mathmlBuilder:Pr}),Br({type:"array",names:["subarray"],props:{numArgs:1},handler(e,t){const r=(Ot(t[0])?[t[0]]:Rt(t[0],"ordgroup").body).map((function(e){const t=Ht(e).text;if(-1!=="lc".indexOf(t))return{type:"align",align:t};throw new n("Unknown column alignment: "+t,e)}));if(r.length>1)throw new n("{subarray} can contain only one column");let o={cols:r,hskipBeforeAndAfter:!1,arraystretch:.5};if(o=Er(e.parser,o,"script"),o.body.length>0&&o.body[0].length>1)throw new n("{subarray} can contain only one column");return o},htmlBuilder:Dr,mathmlBuilder:Pr}),Br({type:"array",names:["cases","dcases","rcases","drcases"],props:{numArgs:0},handler(e){const t=Er(e.parser,{arraystretch:1.2,cols:[{type:"align",align:"l",pregap:0,postgap:1},{type:"align",align:"l",pregap:0,postgap:0}]},Lr(e.envName));return{type:"leftright",mode:e.mode,body:[t],left:e.envName.indexOf("r")>-1?".":"\\{",right:e.envName.indexOf("r")>-1?"\\}":".",rightColor:void 0}},htmlBuilder:Dr,mathmlBuilder:Pr}),Br({type:"array",names:["align","align*","aligned","split"],props:{numArgs:0},handler:Fr,htmlBuilder:Dr,mathmlBuilder:Pr}),Br({type:"array",names:["gathered","gather","gather*"],props:{numArgs:0},handler(e){l.contains(["gather","gather*"],e.envName)&&Hr(e);const t={cols:[{type:"align",align:"c"}],addJot:!0,colSeparationType:"gather",autoTag:Or(e.envName),emptySingleRow:!0,leqno:e.parser.settings.leqno};return Er(e.parser,t,"display")},htmlBuilder:Dr,mathmlBuilder:Pr}),Br({type:"array",names:["alignat","alignat*","alignedat"],props:{numArgs:1},handler:Fr,htmlBuilder:Dr,mathmlBuilder:Pr}),Br({type:"array",names:["equation","equation*"],props:{numArgs:0},handler(e){Hr(e);const t={autoTag:Or(e.envName),emptySingleRow:!0,singleRow:!0,maxNumCols:1,leqno:e.parser.settings.leqno};return Er(e.parser,t,"display")},htmlBuilder:Dr,mathmlBuilder:Pr}),Br({type:"array",names:["CD"],props:{numArgs:0},handler(e){return Hr(e),function(e){const t=[];for(e.gullet.beginGroup(),e.gullet.macros.set("\\cr","\\\\\\relax"),e.gullet.beginGroup();;){t.push(e.parseExpression(!1,"\\\\")),e.gullet.endGroup(),e.gullet.beginGroup();const r=e.fetch().text;if("&"!==r&&"\\\\"!==r){if("\\end"===r){0===t[t.length-1].length&&t.pop();break}throw new n("Expected \\\\ or \\cr or \\end",e.nextToken)}e.consume()}let r=[];const o=[r];for(let a=0;a-1);else{if(!("<>AV".indexOf(o)>-1))throw new n('Expected one of "<>AV=|." after @',l[t]);for(let e=0;e<2;e++){let r=!0;for(let h=t+1;h{const r=e.font,n=t.withFont(r);return ct(e.body,n)},Yr=(e,t)=>{const r=e.font,n=t.withFont(r);return St(e.body,n)},Xr={"\\Bbb":"\\mathbb","\\bold":"\\mathbf","\\frak":"\\mathfrak","\\bm":"\\boldsymbol"};$e({type:"font",names:["\\mathrm","\\mathit","\\mathbf","\\mathnormal","\\mathsfit","\\mathbb","\\mathcal","\\mathfrak","\\mathscr","\\mathsf","\\mathtt","\\Bbb","\\bold","\\frak"],props:{numArgs:1,allowedInArgument:!0},handler:(e,t)=>{let{parser:r,funcName:n}=e;const o=Ke(t[0]);let s=n;return s in Xr&&(s=Xr[s]),{type:"font",mode:r.mode,font:s.slice(1),body:o}},htmlBuilder:Ur,mathmlBuilder:Yr}),$e({type:"mclass",names:["\\boldsymbol","\\bm"],props:{numArgs:1},handler:(e,t)=>{let{parser:r}=e;const n=t[0],o=l.isCharacterBox(n);return{type:"mclass",mode:r.mode,mclass:Ut(n),body:[{type:"font",mode:r.mode,font:"boldsymbol",body:n}],isCharacterBox:o}}}),$e({type:"font",names:["\\rm","\\sf","\\tt","\\bf","\\it","\\cal"],props:{numArgs:0,allowedInText:!0},handler:(e,t)=>{let{parser:r,funcName:n,breakOnTokenText:o}=e;const{mode:s}=r,i=r.parseExpression(!0,o);return{type:"font",mode:s,font:"math"+n.slice(1),body:{type:"ordgroup",mode:r.mode,body:i}}},htmlBuilder:Ur,mathmlBuilder:Yr});const Wr=(e,t)=>{let r=t;return"display"===e?r=r.id>=w.SCRIPT.id?r.text():w.DISPLAY:"text"===e&&r.size===w.DISPLAY.size?r=w.TEXT:"script"===e?r=w.SCRIPT:"scriptscript"===e&&(r=w.SCRIPTSCRIPT),r},_r=(e,t)=>{const r=Wr(e.size,t.style),n=r.fracNum(),o=r.fracDen();let s;s=t.havingStyle(n);const i=ct(e.numer,s,t);if(e.continued){const e=8.5/t.fontMetrics().ptPerEm,r=3.5/t.fontMetrics().ptPerEm;i.height=i.height0?3*c:7*c,u=t.fontMetrics().denom1):(h>0?(m=t.fontMetrics().num2,p=c):(m=t.fontMetrics().num3,p=3*c),u=t.fontMetrics().denom2),l){const e=t.fontMetrics().axisHeight;m-i.depth-(e+.5*h){let r=new ft.MathNode("mfrac",[St(e.numer,t),St(e.denom,t)]);if(e.hasBarLine){if(e.barSize){const n=P(e.barSize,t);r.setAttribute("linethickness",F(n))}}else r.setAttribute("linethickness","0px");const n=Wr(e.size,t.style);if(n.size!==t.style.size){r=new ft.MathNode("mstyle",[r]);const e=n.size===w.DISPLAY.size?"true":"false";r.setAttribute("displaystyle",e),r.setAttribute("scriptlevel","0")}if(null!=e.leftDelim||null!=e.rightDelim){const t=[];if(null!=e.leftDelim){const r=new ft.MathNode("mo",[new ft.TextNode(e.leftDelim.replace("\\",""))]);r.setAttribute("fence","true"),t.push(r)}if(t.push(r),null!=e.rightDelim){const r=new ft.MathNode("mo",[new ft.TextNode(e.rightDelim.replace("\\",""))]);r.setAttribute("fence","true"),t.push(r)}return yt(t)}return r};$e({type:"genfrac",names:["\\dfrac","\\frac","\\tfrac","\\dbinom","\\binom","\\tbinom","\\\\atopfrac","\\\\bracefrac","\\\\brackfrac"],props:{numArgs:2,allowedInArgument:!0},handler:(e,t)=>{let{parser:r,funcName:n}=e;const o=t[0],s=t[1];let i,a=null,l=null,h="auto";switch(n){case"\\dfrac":case"\\frac":case"\\tfrac":i=!0;break;case"\\\\atopfrac":i=!1;break;case"\\dbinom":case"\\binom":case"\\tbinom":i=!1,a="(",l=")";break;case"\\\\bracefrac":i=!1,a="\\{",l="\\}";break;case"\\\\brackfrac":i=!1,a="[",l="]";break;default:throw new Error("Unrecognized genfrac command")}switch(n){case"\\dfrac":case"\\dbinom":h="display";break;case"\\tfrac":case"\\tbinom":h="text"}return{type:"genfrac",mode:r.mode,continued:!1,numer:o,denom:s,hasBarLine:i,leftDelim:a,rightDelim:l,size:h,barSize:null}},htmlBuilder:_r,mathmlBuilder:jr}),$e({type:"genfrac",names:["\\cfrac"],props:{numArgs:2},handler:(e,t)=>{let{parser:r,funcName:n}=e;const o=t[0],s=t[1];return{type:"genfrac",mode:r.mode,continued:!0,numer:o,denom:s,hasBarLine:!0,leftDelim:null,rightDelim:null,size:"display",barSize:null}}}),$e({type:"infix",names:["\\over","\\choose","\\atop","\\brace","\\brack"],props:{numArgs:0,infix:!0},handler(e){let t,{parser:r,funcName:n,token:o}=e;switch(n){case"\\over":t="\\frac";break;case"\\choose":t="\\binom";break;case"\\atop":t="\\\\atopfrac";break;case"\\brace":t="\\\\bracefrac";break;case"\\brack":t="\\\\brackfrac";break;default:throw new Error("Unrecognized infix genfrac command")}return{type:"infix",mode:r.mode,replaceWith:t,token:o}}});const $r=["display","text","script","scriptscript"],Zr=function(e){let t=null;return e.length>0&&(t=e,t="."===t?null:t),t};$e({type:"genfrac",names:["\\genfrac"],props:{numArgs:6,allowedInArgument:!0,argTypes:["math","math","size","text","math","math"]},handler(e,t){let{parser:r}=e;const n=t[4],o=t[5],s=Ke(t[0]),i="atom"===s.type&&"open"===s.family?Zr(s.text):null,a=Ke(t[1]),l="atom"===a.type&&"close"===a.family?Zr(a.text):null,h=Rt(t[2],"size");let c,m=null;h.isBlank?c=!0:(m=h.value,c=m.number>0);let p="auto",u=t[3];if("ordgroup"===u.type){if(u.body.length>0){const e=Rt(u.body[0],"textord");p=$r[Number(e.text)]}}else u=Rt(u,"textord"),p=$r[Number(u.text)];return{type:"genfrac",mode:r.mode,numer:n,denom:o,continued:!1,hasBarLine:c,barSize:m,leftDelim:i,rightDelim:l,size:p}},htmlBuilder:_r,mathmlBuilder:jr}),$e({type:"infix",names:["\\above"],props:{numArgs:1,argTypes:["size"],infix:!0},handler(e,t){let{parser:r,funcName:n,token:o}=e;return{type:"infix",mode:r.mode,replaceWith:"\\\\abovefrac",size:Rt(t[0],"size").value,token:o}}}),$e({type:"genfrac",names:["\\\\abovefrac"],props:{numArgs:3,argTypes:["math","size","math"]},handler:(e,t)=>{let{parser:r,funcName:n}=e;const o=t[0],s=function(e){if(!e)throw new Error("Expected non-null, but got "+String(e));return e}(Rt(t[1],"infix").size),i=t[2],a=s.number>0;return{type:"genfrac",mode:r.mode,numer:o,denom:i,continued:!1,hasBarLine:a,barSize:s,leftDelim:null,rightDelim:null,size:"auto"}},htmlBuilder:_r,mathmlBuilder:jr});const Kr=(e,t)=>{const r=t.style;let n,o;"supsub"===e.type?(n=e.sup?ct(e.sup,t.havingStyle(r.sup()),t):ct(e.sub,t.havingStyle(r.sub()),t),o=Rt(e.base,"horizBrace")):o=Rt(e,"horizBrace");const s=ct(o.base,t.havingBaseStyle(w.DISPLAY)),i=It(o,t);let a;if(o.isOver?(a=Pe.makeVList({positionType:"firstBaseline",children:[{type:"elem",elem:s},{type:"kern",size:.1},{type:"elem",elem:i}]},t),a.children[0].children[0].children[1].classes.push("svg-align")):(a=Pe.makeVList({positionType:"bottom",positionData:s.depth+.1+i.height,children:[{type:"elem",elem:i},{type:"kern",size:.1},{type:"elem",elem:s}]},t),a.children[0].children[0].children[0].classes.push("svg-align")),n){const e=Pe.makeSpan(["mord",o.isOver?"mover":"munder"],[a],t);a=o.isOver?Pe.makeVList({positionType:"firstBaseline",children:[{type:"elem",elem:e},{type:"kern",size:.2},{type:"elem",elem:n}]},t):Pe.makeVList({positionType:"bottom",positionData:e.depth+.2+n.height+n.depth,children:[{type:"elem",elem:n},{type:"kern",size:.2},{type:"elem",elem:e}]},t)}return Pe.makeSpan(["mord",o.isOver?"mover":"munder"],[a],t)};$e({type:"horizBrace",names:["\\overbrace","\\underbrace"],props:{numArgs:1},handler(e,t){let{parser:r,funcName:n}=e;return{type:"horizBrace",mode:r.mode,label:n,isOver:/^\\over/.test(n),base:t[0]}},htmlBuilder:Kr,mathmlBuilder:(e,t)=>{const r=qt(e.label);return new ft.MathNode(e.isOver?"mover":"munder",[St(e.base,t),r])}}),$e({type:"href",names:["\\href"],props:{numArgs:2,argTypes:["url","original"],allowedInText:!0},handler:(e,t)=>{let{parser:r}=e;const n=t[1],o=Rt(t[0],"url").url;return r.settings.isTrusted({command:"\\href",url:o})?{type:"href",mode:r.mode,href:o,body:Je(n)}:r.formatUnsupportedCmd("\\href")},htmlBuilder:(e,t)=>{const r=ot(e.body,t,!1);return Pe.makeAnchor(e.href,[],r,t)},mathmlBuilder:(e,t)=>{let r=kt(e.body,t);return r instanceof dt||(r=new dt("mrow",[r])),r.setAttribute("href",e.href),r}}),$e({type:"href",names:["\\url"],props:{numArgs:1,argTypes:["url"],allowedInText:!0},handler:(e,t)=>{let{parser:r}=e;const n=Rt(t[0],"url").url;if(!r.settings.isTrusted({command:"\\url",url:n}))return r.formatUnsupportedCmd("\\url");const o=[];for(let e=0;e{let{parser:r,funcName:o,token:s}=e;const i=Rt(t[0],"raw").string,a=t[1];let l;r.settings.strict&&r.settings.reportNonstrict("htmlExtension","HTML extension is disabled on strict mode");const h={};switch(o){case"\\htmlClass":h.class=i,l={command:"\\htmlClass",class:i};break;case"\\htmlId":h.id=i,l={command:"\\htmlId",id:i};break;case"\\htmlStyle":h.style=i,l={command:"\\htmlStyle",style:i};break;case"\\htmlData":{const e=i.split(",");for(let t=0;t{const r=ot(e.body,t,!1),n=["enclosing"];e.attributes.class&&n.push(...e.attributes.class.trim().split(/\s+/));const o=Pe.makeSpan(n,r,t);for(const t in e.attributes)"class"!==t&&e.attributes.hasOwnProperty(t)&&o.setAttribute(t,e.attributes[t]);return o},mathmlBuilder:(e,t)=>kt(e.body,t)}),$e({type:"htmlmathml",names:["\\html@mathml"],props:{numArgs:2,allowedInText:!0},handler:(e,t)=>{let{parser:r}=e;return{type:"htmlmathml",mode:r.mode,html:Je(t[0]),mathml:Je(t[1])}},htmlBuilder:(e,t)=>{const r=ot(e.html,t,!1);return Pe.makeFragment(r)},mathmlBuilder:(e,t)=>kt(e.mathml,t)});const Jr=function(e){if(/^[-+]? *(\d+(\.\d*)?|\.\d+)$/.test(e))return{number:+e,unit:"bp"};{const t=/([-+]?) *(\d+(?:\.\d*)?|\.\d+) *([a-z]{2})/.exec(e);if(!t)throw new n("Invalid size: '"+e+"' in \\includegraphics");const r={number:+(t[1]+t[2]),unit:t[3]};if(!V(r))throw new n("Invalid unit: '"+r.unit+"' in \\includegraphics.");return r}};$e({type:"includegraphics",names:["\\includegraphics"],props:{numArgs:1,numOptionalArgs:1,argTypes:["raw","url"],allowedInText:!1},handler:(e,t,r)=>{let{parser:o}=e,s={number:0,unit:"em"},i={number:.9,unit:"em"},a={number:0,unit:"em"},l="";if(r[0]){const e=Rt(r[0],"raw").string.split(",");for(let t=0;t{const r=P(e.height,t);let n=0;e.totalheight.number>0&&(n=P(e.totalheight,t)-r);let o=0;e.width.number>0&&(o=P(e.width,t));const s={height:F(r+n)};o>0&&(s.width=F(o)),n>0&&(s.verticalAlign=F(-n));const i=new $(e.src,e.alt,s);return i.height=r,i.depth=n,i},mathmlBuilder:(e,t)=>{const r=new ft.MathNode("mglyph",[]);r.setAttribute("alt",e.alt);const n=P(e.height,t);let o=0;if(e.totalheight.number>0&&(o=P(e.totalheight,t)-n,r.setAttribute("valign",F(-o))),r.setAttribute("height",F(n+o)),e.width.number>0){const n=P(e.width,t);r.setAttribute("width",F(n))}return r.setAttribute("src",e.src),r}}),$e({type:"kern",names:["\\kern","\\mkern","\\hskip","\\mskip"],props:{numArgs:1,argTypes:["size"],primitive:!0,allowedInText:!0},handler(e,t){let{parser:r,funcName:n}=e;const o=Rt(t[0],"size");if(r.settings.strict){const e="m"===n[1],t="mu"===o.value.unit;e?(t||r.settings.reportNonstrict("mathVsTextUnits","LaTeX's "+n+" supports only mu units, not "+o.value.unit+" units"),"math"!==r.mode&&r.settings.reportNonstrict("mathVsTextUnits","LaTeX's "+n+" works only in math mode")):t&&r.settings.reportNonstrict("mathVsTextUnits","LaTeX's "+n+" doesn't support mu units")}return{type:"kern",mode:r.mode,dimension:o.value}},htmlBuilder(e,t){return Pe.makeGlue(e.dimension,t)},mathmlBuilder(e,t){const r=P(e.dimension,t);return new ft.SpaceNode(r)}}),$e({type:"lap",names:["\\mathllap","\\mathrlap","\\mathclap"],props:{numArgs:1,allowedInText:!0},handler:(e,t)=>{let{parser:r,funcName:n}=e;const o=t[0];return{type:"lap",mode:r.mode,alignment:n.slice(5),body:o}},htmlBuilder:(e,t)=>{let r;"clap"===e.alignment?(r=Pe.makeSpan([],[ct(e.body,t)]),r=Pe.makeSpan(["inner"],[r],t)):r=Pe.makeSpan(["inner"],[ct(e.body,t)]);const n=Pe.makeSpan(["fix"],[]);let o=Pe.makeSpan([e.alignment],[r,n],t);const s=Pe.makeSpan(["strut"]);return s.style.height=F(o.height+o.depth),o.depth&&(s.style.verticalAlign=F(-o.depth)),o.children.unshift(s),o=Pe.makeSpan(["thinbox"],[o],t),Pe.makeSpan(["mord","vbox"],[o],t)},mathmlBuilder:(e,t)=>{const r=new ft.MathNode("mpadded",[St(e.body,t)]);if("rlap"!==e.alignment){const t="llap"===e.alignment?"-1":"-0.5";r.setAttribute("lspace",t+"width")}return r.setAttribute("width","0px"),r}}),$e({type:"styling",names:["\\(","$"],props:{numArgs:0,allowedInText:!0,allowedInMath:!1},handler(e,t){let{funcName:r,parser:n}=e;const o=n.mode;n.switchMode("math");const s="\\("===r?"\\)":"$",i=n.parseExpression(!1,s);return n.expect(s),n.switchMode(o),{type:"styling",mode:n.mode,style:"text",body:i}}}),$e({type:"text",names:["\\)","\\]"],props:{numArgs:0,allowedInText:!0,allowedInMath:!1},handler(e,t){throw new n("Mismatched "+e.funcName)}});const Qr=(e,t)=>{switch(t.style.size){case w.DISPLAY.size:return e.display;case w.TEXT.size:return e.text;case w.SCRIPT.size:return e.script;case w.SCRIPTSCRIPT.size:return e.scriptscript;default:return e.text}};$e({type:"mathchoice",names:["\\mathchoice"],props:{numArgs:4,primitive:!0},handler:(e,t)=>{let{parser:r}=e;return{type:"mathchoice",mode:r.mode,display:Je(t[0]),text:Je(t[1]),script:Je(t[2]),scriptscript:Je(t[3])}},htmlBuilder:(e,t)=>{const r=Qr(e,t),n=ot(r,t,!1);return Pe.makeFragment(n)},mathmlBuilder:(e,t)=>{const r=Qr(e,t);return kt(r,t)}});const en=(e,t,r,n,o,s,i)=>{e=Pe.makeSpan([],[e]);const a=r&&l.isCharacterBox(r);let h,c,m;if(t){const e=ct(t,n.havingStyle(o.sup()),n);c={elem:e,kern:Math.max(n.fontMetrics().bigOpSpacing1,n.fontMetrics().bigOpSpacing3-e.depth)}}if(r){const e=ct(r,n.havingStyle(o.sub()),n);h={elem:e,kern:Math.max(n.fontMetrics().bigOpSpacing2,n.fontMetrics().bigOpSpacing4-e.height)}}if(c&&h){const t=n.fontMetrics().bigOpSpacing5+h.elem.height+h.elem.depth+h.kern+e.depth+i;m=Pe.makeVList({positionType:"bottom",positionData:t,children:[{type:"kern",size:n.fontMetrics().bigOpSpacing5},{type:"elem",elem:h.elem,marginLeft:F(-s)},{type:"kern",size:h.kern},{type:"elem",elem:e},{type:"kern",size:c.kern},{type:"elem",elem:c.elem,marginLeft:F(s)},{type:"kern",size:n.fontMetrics().bigOpSpacing5}]},n)}else if(h){const t=e.height-i;m=Pe.makeVList({positionType:"top",positionData:t,children:[{type:"kern",size:n.fontMetrics().bigOpSpacing5},{type:"elem",elem:h.elem,marginLeft:F(-s)},{type:"kern",size:h.kern},{type:"elem",elem:e}]},n)}else{if(!c)return e;{const t=e.depth+i;m=Pe.makeVList({positionType:"bottom",positionData:t,children:[{type:"elem",elem:e},{type:"kern",size:c.kern},{type:"elem",elem:c.elem,marginLeft:F(s)},{type:"kern",size:n.fontMetrics().bigOpSpacing5}]},n)}}const p=[m];if(h&&0!==s&&!a){const e=Pe.makeSpan(["mspace"],[],n);e.style.marginRight=F(s),p.unshift(e)}return Pe.makeSpan(["mop","op-limits"],p,n)},tn=["\\smallint"],rn=(e,t)=>{let r,n,o,s=!1;"supsub"===e.type?(r=e.sup,n=e.sub,o=Rt(e.base,"op"),s=!0):o=Rt(e,"op");const i=t.style;let a,h=!1;if(i.size===w.DISPLAY.size&&o.symbol&&!l.contains(tn,o.name)&&(h=!0),o.symbol){const e=h?"Size2-Regular":"Size1-Regular";let r="";if("\\oiint"!==o.name&&"\\oiiint"!==o.name||(r=o.name.slice(1),o.name="oiint"===r?"\\iint":"\\iiint"),a=Pe.makeSymbol(o.name,e,"math",t,["mop","op-symbol",h?"large-op":"small-op"]),r.length>0){const e=a.italic,n=Pe.staticSvg(r+"Size"+(h?"2":"1"),t);a=Pe.makeVList({positionType:"individualShift",children:[{type:"elem",elem:a,shift:0},{type:"elem",elem:n,shift:h?.08:0}]},t),o.name="\\"+r,a.classes.unshift("mop"),a.italic=e}}else if(o.body){const e=ot(o.body,t,!0);1===e.length&&e[0]instanceof K?(a=e[0],a.classes[0]="mop"):a=Pe.makeSpan(["mop"],e,t)}else{const e=[];for(let r=1;r{let r;if(e.symbol)r=new dt("mo",[bt(e.name,e.mode)]),l.contains(tn,e.name)&&r.setAttribute("largeop","false");else if(e.body)r=new dt("mo",vt(e.body,t));else{r=new dt("mi",[new gt(e.name.slice(1))]);const t=new dt("mo",[bt("\u2061","text")]);r=e.parentIsSupSub?new dt("mrow",[r,t]):ut([r,t])}return r},on={"\u220f":"\\prod","\u2210":"\\coprod","\u2211":"\\sum","\u22c0":"\\bigwedge","\u22c1":"\\bigvee","\u22c2":"\\bigcap","\u22c3":"\\bigcup","\u2a00":"\\bigodot","\u2a01":"\\bigoplus","\u2a02":"\\bigotimes","\u2a04":"\\biguplus","\u2a06":"\\bigsqcup"};$e({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:(e,t)=>{let{parser:r,funcName:n}=e,o=n;return 1===o.length&&(o=on[o]),{type:"op",mode:r.mode,limits:!0,parentIsSupSub:!1,symbol:!0,name:o}},htmlBuilder:rn,mathmlBuilder:nn}),$e({type:"op",names:["\\mathop"],props:{numArgs:1,primitive:!0},handler:(e,t)=>{let{parser:r}=e;const n=t[0];return{type:"op",mode:r.mode,limits:!1,parentIsSupSub:!1,symbol:!1,body:Je(n)}},htmlBuilder:rn,mathmlBuilder:nn});const sn={"\u222b":"\\int","\u222c":"\\iint","\u222d":"\\iiint","\u222e":"\\oint","\u222f":"\\oiint","\u2230":"\\oiiint"};$e({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(e){let{parser:t,funcName:r}=e;return{type:"op",mode:t.mode,limits:!1,parentIsSupSub:!1,symbol:!1,name:r}},htmlBuilder:rn,mathmlBuilder:nn}),$e({type:"op",names:["\\det","\\gcd","\\inf","\\lim","\\max","\\min","\\Pr","\\sup"],props:{numArgs:0},handler(e){let{parser:t,funcName:r}=e;return{type:"op",mode:t.mode,limits:!0,parentIsSupSub:!1,symbol:!1,name:r}},htmlBuilder:rn,mathmlBuilder:nn}),$e({type:"op",names:["\\int","\\iint","\\iiint","\\oint","\\oiint","\\oiiint","\u222b","\u222c","\u222d","\u222e","\u222f","\u2230"],props:{numArgs:0},handler(e){let{parser:t,funcName:r}=e,n=r;return 1===n.length&&(n=sn[n]),{type:"op",mode:t.mode,limits:!1,parentIsSupSub:!1,symbol:!0,name:n}},htmlBuilder:rn,mathmlBuilder:nn});const an=(e,t)=>{let r,n,o,s,i=!1;if("supsub"===e.type?(r=e.sup,n=e.sub,o=Rt(e.base,"operatorname"),i=!0):o=Rt(e,"operatorname"),o.body.length>0){const e=o.body.map((e=>{const t=e.text;return"string"==typeof t?{type:"textord",mode:e.mode,text:t}:e})),r=ot(e,t.withFont("mathrm"),!0);for(let e=0;e{let{parser:r,funcName:n}=e;const o=t[0];return{type:"operatorname",mode:r.mode,body:Je(o),alwaysHandleSupSub:"\\operatornamewithlimits"===n,limits:!1,parentIsSupSub:!1}},htmlBuilder:an,mathmlBuilder:(e,t)=>{let r=vt(e.body,t.withFont("mathrm")),n=!0;for(let e=0;ee.toText())).join("");r=[new ft.TextNode(e)]}const o=new ft.MathNode("mi",r);o.setAttribute("mathvariant","normal");const s=new ft.MathNode("mo",[bt("\u2061","text")]);return e.parentIsSupSub?new ft.MathNode("mrow",[o,s]):ft.newDocumentFragment([o,s])}}),Nr("\\operatorname","\\@ifstar\\operatornamewithlimits\\operatorname@"),Ze({type:"ordgroup",htmlBuilder(e,t){return e.semisimple?Pe.makeFragment(ot(e.body,t,!1)):Pe.makeSpan(["mord"],ot(e.body,t,!0),t)},mathmlBuilder(e,t){return kt(e.body,t,!0)}}),$e({type:"overline",names:["\\overline"],props:{numArgs:1},handler(e,t){let{parser:r}=e;const n=t[0];return{type:"overline",mode:r.mode,body:n}},htmlBuilder(e,t){const r=ct(e.body,t.havingCrampedStyle()),n=Pe.makeLineSpan("overline-line",t),o=t.fontMetrics().defaultRuleThickness,s=Pe.makeVList({positionType:"firstBaseline",children:[{type:"elem",elem:r},{type:"kern",size:3*o},{type:"elem",elem:n},{type:"kern",size:o}]},t);return Pe.makeSpan(["mord","overline"],[s],t)},mathmlBuilder(e,t){const r=new ft.MathNode("mo",[new ft.TextNode("\u203e")]);r.setAttribute("stretchy","true");const n=new ft.MathNode("mover",[St(e.body,t),r]);return n.setAttribute("accent","true"),n}}),$e({type:"phantom",names:["\\phantom"],props:{numArgs:1,allowedInText:!0},handler:(e,t)=>{let{parser:r}=e;const n=t[0];return{type:"phantom",mode:r.mode,body:Je(n)}},htmlBuilder:(e,t)=>{const r=ot(e.body,t.withPhantom(),!1);return Pe.makeFragment(r)},mathmlBuilder:(e,t)=>{const r=vt(e.body,t);return new ft.MathNode("mphantom",r)}}),$e({type:"hphantom",names:["\\hphantom"],props:{numArgs:1,allowedInText:!0},handler:(e,t)=>{let{parser:r}=e;const n=t[0];return{type:"hphantom",mode:r.mode,body:n}},htmlBuilder:(e,t)=>{let r=Pe.makeSpan([],[ct(e.body,t.withPhantom())]);if(r.height=0,r.depth=0,r.children)for(let e=0;e{const r=vt(Je(e.body),t),n=new ft.MathNode("mphantom",r),o=new ft.MathNode("mpadded",[n]);return o.setAttribute("height","0px"),o.setAttribute("depth","0px"),o}}),$e({type:"vphantom",names:["\\vphantom"],props:{numArgs:1,allowedInText:!0},handler:(e,t)=>{let{parser:r}=e;const n=t[0];return{type:"vphantom",mode:r.mode,body:n}},htmlBuilder:(e,t)=>{const r=Pe.makeSpan(["inner"],[ct(e.body,t.withPhantom())]),n=Pe.makeSpan(["fix"],[]);return Pe.makeSpan(["mord","rlap"],[r,n],t)},mathmlBuilder:(e,t)=>{const r=vt(Je(e.body),t),n=new ft.MathNode("mphantom",r),o=new ft.MathNode("mpadded",[n]);return o.setAttribute("width","0px"),o}}),$e({type:"raisebox",names:["\\raisebox"],props:{numArgs:2,argTypes:["size","hbox"],allowedInText:!0},handler(e,t){let{parser:r}=e;const n=Rt(t[0],"size").value,o=t[1];return{type:"raisebox",mode:r.mode,dy:n,body:o}},htmlBuilder(e,t){const r=ct(e.body,t),n=P(e.dy,t);return Pe.makeVList({positionType:"shift",positionData:-n,children:[{type:"elem",elem:r}]},t)},mathmlBuilder(e,t){const r=new ft.MathNode("mpadded",[St(e.body,t)]),n=e.dy.number+e.dy.unit;return r.setAttribute("voffset",n),r}}),$e({type:"internal",names:["\\relax"],props:{numArgs:0,allowedInText:!0,allowedInArgument:!0},handler(e){let{parser:t}=e;return{type:"internal",mode:t.mode}}}),$e({type:"rule",names:["\\rule"],props:{numArgs:2,numOptionalArgs:1,allowedInText:!0,allowedInMath:!0,argTypes:["size","size","size"]},handler(e,t,r){let{parser:n}=e;const o=r[0],s=Rt(t[0],"size"),i=Rt(t[1],"size");return{type:"rule",mode:n.mode,shift:o&&Rt(o,"size").value,width:s.value,height:i.value}},htmlBuilder(e,t){const r=Pe.makeSpan(["mord","rule"],[],t),n=P(e.width,t),o=P(e.height,t),s=e.shift?P(e.shift,t):0;return r.style.borderRightWidth=F(n),r.style.borderTopWidth=F(o),r.style.bottom=F(s),r.width=n,r.height=o+s,r.depth=-s,r.maxFontSize=1.125*o*t.sizeMultiplier,r},mathmlBuilder(e,t){const r=P(e.width,t),n=P(e.height,t),o=e.shift?P(e.shift,t):0,s=t.color&&t.getColor()||"black",i=new ft.MathNode("mspace");i.setAttribute("mathbackground",s),i.setAttribute("width",F(r)),i.setAttribute("height",F(n));const a=new ft.MathNode("mpadded",[i]);return o>=0?a.setAttribute("height",F(o)):(a.setAttribute("height",F(o)),a.setAttribute("depth",F(-o))),a.setAttribute("voffset",F(o)),a}});const hn=["\\tiny","\\sixptsize","\\scriptsize","\\footnotesize","\\small","\\normalsize","\\large","\\Large","\\LARGE","\\huge","\\Huge"];$e({type:"sizing",names:hn,props:{numArgs:0,allowedInText:!0},handler:(e,t)=>{let{breakOnTokenText:r,funcName:n,parser:o}=e;const s=o.parseExpression(!1,r);return{type:"sizing",mode:o.mode,size:hn.indexOf(n)+1,body:s}},htmlBuilder:(e,t)=>{const r=t.havingSize(e.size);return ln(e.body,r,t)},mathmlBuilder:(e,t)=>{const r=t.havingSize(e.size),n=vt(e.body,r),o=new ft.MathNode("mstyle",n);return o.setAttribute("mathsize",F(r.sizeMultiplier)),o}}),$e({type:"smash",names:["\\smash"],props:{numArgs:1,numOptionalArgs:1,allowedInText:!0},handler:(e,t,r)=>{let{parser:n}=e,o=!1,s=!1;const i=r[0]&&Rt(r[0],"ordgroup");if(i){let e="";for(let t=0;t{const r=Pe.makeSpan([],[ct(e.body,t)]);if(!e.smashHeight&&!e.smashDepth)return r;if(e.smashHeight&&(r.height=0,r.children))for(let e=0;e{const r=new ft.MathNode("mpadded",[St(e.body,t)]);return e.smashHeight&&r.setAttribute("height","0px"),e.smashDepth&&r.setAttribute("depth","0px"),r}}),$e({type:"sqrt",names:["\\sqrt"],props:{numArgs:1,numOptionalArgs:1},handler(e,t,r){let{parser:n}=e;const o=r[0],s=t[0];return{type:"sqrt",mode:n.mode,body:s,index:o}},htmlBuilder(e,t){let r=ct(e.body,t.havingCrampedStyle());0===r.height&&(r.height=t.fontMetrics().xHeight),r=Pe.wrapFragment(r,t);const n=t.fontMetrics().defaultRuleThickness;let o=n;t.style.idr.height+r.depth+s&&(s=(s+c-r.height-r.depth)/2);const m=a.height-r.height-s-l;r.style.paddingLeft=F(h);const p=Pe.makeVList({positionType:"firstBaseline",children:[{type:"elem",elem:r,wrapperClasses:["svg-align"]},{type:"kern",size:-(r.height+m)},{type:"elem",elem:a},{type:"kern",size:l}]},t);if(e.index){const r=t.havingStyle(w.SCRIPTSCRIPT),n=ct(e.index,r,t),o=.6*(p.height-p.depth),s=Pe.makeVList({positionType:"shift",positionData:-o,children:[{type:"elem",elem:n}]},t),i=Pe.makeSpan(["root"],[s]);return Pe.makeSpan(["mord","sqrt"],[i,p],t)}return Pe.makeSpan(["mord","sqrt"],[p],t)},mathmlBuilder(e,t){const{body:r,index:n}=e;return n?new ft.MathNode("mroot",[St(r,t),St(n,t)]):new ft.MathNode("msqrt",[St(r,t)])}});const cn={display:w.DISPLAY,text:w.TEXT,script:w.SCRIPT,scriptscript:w.SCRIPTSCRIPT};$e({type:"styling",names:["\\displaystyle","\\textstyle","\\scriptstyle","\\scriptscriptstyle"],props:{numArgs:0,allowedInText:!0,primitive:!0},handler(e,t){let{breakOnTokenText:r,funcName:n,parser:o}=e;const s=o.parseExpression(!0,r),i=n.slice(1,n.length-5);return{type:"styling",mode:o.mode,style:i,body:s}},htmlBuilder(e,t){const r=cn[e.style],n=t.havingStyle(r).withFont("");return ln(e.body,n,t)},mathmlBuilder(e,t){const r=cn[e.style],n=t.havingStyle(r),o=vt(e.body,n),s=new ft.MathNode("mstyle",o),i={display:["0","true"],text:["0","false"],script:["1","false"],scriptscript:["2","false"]}[e.style];return s.setAttribute("scriptlevel",i[0]),s.setAttribute("displaystyle",i[1]),s}});Ze({type:"supsub",htmlBuilder(e,t){const r=function(e,t){const r=e.base;if(r)return"op"===r.type?r.limits&&(t.style.size===w.DISPLAY.size||r.alwaysHandleSupSub)?rn:null:"operatorname"===r.type?r.alwaysHandleSupSub&&(t.style.size===w.DISPLAY.size||r.limits)?an:null:"accent"===r.type?l.isCharacterBox(r.base)?Et:null:"horizBrace"===r.type&&!e.sub===r.isOver?Kr:null;return null}(e,t);if(r)return r(e,t);const{base:n,sup:o,sub:s}=e,i=ct(n,t);let a,h;const c=t.fontMetrics();let m=0,p=0;const u=n&&l.isCharacterBox(n);if(o){const e=t.havingStyle(t.style.sup());a=ct(o,e,t),u||(m=i.height-e.fontMetrics().supDrop*e.sizeMultiplier/t.sizeMultiplier)}if(s){const e=t.havingStyle(t.style.sub());h=ct(s,e,t),u||(p=i.depth+e.fontMetrics().subDrop*e.sizeMultiplier/t.sizeMultiplier)}let d;d=t.style===w.DISPLAY?c.sup1:t.style.cramped?c.sup3:c.sup2;const g=t.sizeMultiplier,f=F(.5/c.ptPerEm/g);let b,y=null;if(h){const t=e.base&&"op"===e.base.type&&e.base.name&&("\\oiint"===e.base.name||"\\oiiint"===e.base.name);(i instanceof K||t)&&(y=F(-i.italic))}if(a&&h){m=Math.max(m,d,a.depth+.25*c.xHeight),p=Math.max(p,c.sub2);const e=4*c.defaultRuleThickness;if(m-a.depth-(h.height-p)0&&(m+=t,p-=t)}const r=[{type:"elem",elem:h,shift:p,marginRight:f,marginLeft:y},{type:"elem",elem:a,shift:-m,marginRight:f}];b=Pe.makeVList({positionType:"individualShift",children:r},t)}else if(h){p=Math.max(p,c.sub1,h.height-.8*c.xHeight);const e=[{type:"elem",elem:h,marginLeft:y,marginRight:f}];b=Pe.makeVList({positionType:"shift",positionData:p,children:e},t)}else{if(!a)throw new Error("supsub must have either sup or sub.");m=Math.max(m,d,a.depth+.25*c.xHeight),b=Pe.makeVList({positionType:"shift",positionData:-m,children:[{type:"elem",elem:a,marginRight:f}]},t)}const x=lt(i,"right")||"mord";return Pe.makeSpan([x],[i,Pe.makeSpan(["msupsub"],[b])],t)},mathmlBuilder(e,t){let r,n,o=!1;e.base&&"horizBrace"===e.base.type&&(n=!!e.sup,n===e.base.isOver&&(o=!0,r=e.base.isOver)),!e.base||"op"!==e.base.type&&"operatorname"!==e.base.type||(e.base.parentIsSupSub=!0);const s=[St(e.base,t)];let i;if(e.sub&&s.push(St(e.sub,t)),e.sup&&s.push(St(e.sup,t)),o)i=r?"mover":"munder";else if(e.sub)if(e.sup){const r=e.base;i=r&&"op"===r.type&&r.limits&&t.style===w.DISPLAY||r&&"operatorname"===r.type&&r.alwaysHandleSupSub&&(t.style===w.DISPLAY||r.limits)?"munderover":"msubsup"}else{const r=e.base;i=r&&"op"===r.type&&r.limits&&(t.style===w.DISPLAY||r.alwaysHandleSupSub)||r&&"operatorname"===r.type&&r.alwaysHandleSupSub&&(r.limits||t.style===w.DISPLAY)?"munder":"msub"}else{const r=e.base;i=r&&"op"===r.type&&r.limits&&(t.style===w.DISPLAY||r.alwaysHandleSupSub)||r&&"operatorname"===r.type&&r.alwaysHandleSupSub&&(r.limits||t.style===w.DISPLAY)?"mover":"msup"}return new ft.MathNode(i,s)}}),Ze({type:"atom",htmlBuilder(e,t){return Pe.mathsym(e.text,e.mode,t,["m"+e.family])},mathmlBuilder(e,t){const r=new ft.MathNode("mo",[bt(e.text,e.mode)]);if("bin"===e.family){const n=xt(e,t);"bold-italic"===n&&r.setAttribute("mathvariant",n)}else"punct"===e.family?r.setAttribute("separator","true"):"open"!==e.family&&"close"!==e.family||r.setAttribute("stretchy","false");return r}});const mn={mi:"italic",mn:"normal",mtext:"normal"};Ze({type:"mathord",htmlBuilder(e,t){return Pe.makeOrd(e,t,"mathord")},mathmlBuilder(e,t){const r=new ft.MathNode("mi",[bt(e.text,e.mode,t)]),n=xt(e,t)||"italic";return n!==mn[r.type]&&r.setAttribute("mathvariant",n),r}}),Ze({type:"textord",htmlBuilder(e,t){return Pe.makeOrd(e,t,"textord")},mathmlBuilder(e,t){const r=bt(e.text,e.mode,t),n=xt(e,t)||"normal";let o;return o="text"===e.mode?new ft.MathNode("mtext",[r]):/[0-9]/.test(e.text)?new ft.MathNode("mn",[r]):"\\prime"===e.text?new ft.MathNode("mo",[r]):new ft.MathNode("mi",[r]),n!==mn[o.type]&&o.setAttribute("mathvariant",n),o}});const pn={"\\nobreak":"nobreak","\\allowbreak":"allowbreak"},un={" ":{},"\\ ":{},"~":{className:"nobreak"},"\\space":{},"\\nobreakspace":{className:"nobreak"}};Ze({type:"spacing",htmlBuilder(e,t){if(un.hasOwnProperty(e.text)){const r=un[e.text].className||"";if("text"===e.mode){const n=Pe.makeOrd(e,t,"textord");return n.classes.push(r),n}return Pe.makeSpan(["mspace",r],[Pe.mathsym(e.text,e.mode,t)],t)}if(pn.hasOwnProperty(e.text))return Pe.makeSpan(["mspace",pn[e.text]],[],t);throw new n('Unknown type of space "'+e.text+'"')},mathmlBuilder(e,t){let r;if(!un.hasOwnProperty(e.text)){if(pn.hasOwnProperty(e.text))return new ft.MathNode("mspace");throw new n('Unknown type of space "'+e.text+'"')}return r=new ft.MathNode("mtext",[new ft.TextNode("\xa0")]),r}});const dn=()=>{const e=new ft.MathNode("mtd",[]);return e.setAttribute("width","50%"),e};Ze({type:"tag",mathmlBuilder(e,t){const r=new ft.MathNode("mtable",[new ft.MathNode("mtr",[dn(),new ft.MathNode("mtd",[kt(e.body,t)]),dn(),new ft.MathNode("mtd",[kt(e.tag,t)])])]);return r.setAttribute("width","100%"),r}});const gn={"\\text":void 0,"\\textrm":"textrm","\\textsf":"textsf","\\texttt":"texttt","\\textnormal":"textrm"},fn={"\\textbf":"textbf","\\textmd":"textmd"},bn={"\\textit":"textit","\\textup":"textup"},yn=(e,t)=>{const r=e.font;return r?gn[r]?t.withTextFontFamily(gn[r]):fn[r]?t.withTextFontWeight(fn[r]):"\\emph"===r?"textit"===t.fontShape?t.withTextFontShape("textup"):t.withTextFontShape("textit"):t.withTextFontShape(bn[r]):t};$e({type:"text",names:["\\text","\\textrm","\\textsf","\\texttt","\\textnormal","\\textbf","\\textmd","\\textit","\\textup","\\emph"],props:{numArgs:1,argTypes:["text"],allowedInArgument:!0,allowedInText:!0},handler(e,t){let{parser:r,funcName:n}=e;const o=t[0];return{type:"text",mode:r.mode,body:Je(o),font:n}},htmlBuilder(e,t){const r=yn(e,t),n=ot(e.body,r,!0);return Pe.makeSpan(["mord","text"],n,r)},mathmlBuilder(e,t){const r=yn(e,t);return kt(e.body,r)}}),$e({type:"underline",names:["\\underline"],props:{numArgs:1,allowedInText:!0},handler(e,t){let{parser:r}=e;return{type:"underline",mode:r.mode,body:t[0]}},htmlBuilder(e,t){const r=ct(e.body,t),n=Pe.makeLineSpan("underline-line",t),o=t.fontMetrics().defaultRuleThickness,s=Pe.makeVList({positionType:"top",positionData:r.height,children:[{type:"kern",size:o},{type:"elem",elem:n},{type:"kern",size:3*o},{type:"elem",elem:r}]},t);return Pe.makeSpan(["mord","underline"],[s],t)},mathmlBuilder(e,t){const r=new ft.MathNode("mo",[new ft.TextNode("\u203e")]);r.setAttribute("stretchy","true");const n=new ft.MathNode("munder",[St(e.body,t),r]);return n.setAttribute("accentunder","true"),n}}),$e({type:"vcenter",names:["\\vcenter"],props:{numArgs:1,argTypes:["original"],allowedInText:!1},handler(e,t){let{parser:r}=e;return{type:"vcenter",mode:r.mode,body:t[0]}},htmlBuilder(e,t){const r=ct(e.body,t),n=t.fontMetrics().axisHeight,o=.5*(r.height-n-(r.depth+n));return Pe.makeVList({positionType:"shift",positionData:o,children:[{type:"elem",elem:r}]},t)},mathmlBuilder(e,t){return new ft.MathNode("mpadded",[St(e.body,t)],["vcenter"])}}),$e({type:"verb",names:["\\verb"],props:{numArgs:0,allowedInText:!0},handler(e,t,r){throw new n("\\verb ended by end of line instead of matching delimiter")},htmlBuilder(e,t){const r=xn(e),n=[],o=t.havingStyle(t.style.text());for(let t=0;te.body.replace(/ /g,e.star?"\u2423":"\xa0");var wn=We;const vn="[ \r\n\t]",kn="(\\\\[a-zA-Z@]+)"+vn+"*",Sn="[\u0300-\u036f]",Mn=new RegExp(Sn+"+$"),zn="("+vn+"+)|\\\\(\n|[ \r\t]+\n?)[ \r\t]*|([!-\\[\\]-\u2027\u202a-\ud7ff\uf900-\uffff]"+Sn+"*|[\ud800-\udbff][\udc00-\udfff]"+Sn+"*|\\\\verb\\*([^]).*?\\4|\\\\verb([^*a-zA-Z]).*?\\5|"+kn+"|\\\\[^\ud800-\udfff])";class An{constructor(e,t){this.input=void 0,this.settings=void 0,this.tokenRegex=void 0,this.catcodes=void 0,this.input=e,this.settings=t,this.tokenRegex=new RegExp(zn,"g"),this.catcodes={"%":14,"~":13}}setCatcode(e,t){this.catcodes[e]=t}lex(){const e=this.input,t=this.tokenRegex.lastIndex;if(t===e.length)return new Ir("EOF",new qr(this,t,t));const r=this.tokenRegex.exec(e);if(null===r||r.index!==t)throw new n("Unexpected character: '"+e[t]+"'",new Ir(e[t],new qr(this,t,t+1)));const o=r[6]||r[3]||(r[2]?"\\ ":" ");if(14===this.catcodes[o]){const t=e.indexOf("\n",this.tokenRegex.lastIndex);return-1===t?(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=t+1,this.lex()}return new Ir(o,new qr(this,t,this.tokenRegex.lastIndex))}}class Tn{constructor(e,t){void 0===e&&(e={}),void 0===t&&(t={}),this.current=void 0,this.builtins=void 0,this.undefStack=void 0,this.current=t,this.builtins=e,this.undefStack=[]}beginGroup(){this.undefStack.push({})}endGroup(){if(0===this.undefStack.length)throw new n("Unbalanced namespace destruction: attempt to pop global namespace; please report this as a bug");const e=this.undefStack.pop();for(const t in e)e.hasOwnProperty(t)&&(null==e[t]?delete this.current[t]:this.current[t]=e[t])}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,t,r){if(void 0===r&&(r=!1),r){for(let t=0;t0&&(this.undefStack[this.undefStack.length-1][e]=t)}else{const t=this.undefStack[this.undefStack.length-1];t&&!t.hasOwnProperty(e)&&(t[e]=this.current[e])}null==t?delete this.current[e]:this.current[e]=t}}var Bn=Cr;Nr("\\noexpand",(function(e){const t=e.popToken();return e.isExpandable(t.text)&&(t.noexpand=!0,t.treatAsRelax=!0),{tokens:[t],numArgs:0}})),Nr("\\expandafter",(function(e){const t=e.popToken();return e.expandOnce(!0),{tokens:[t],numArgs:0}})),Nr("\\@firstoftwo",(function(e){return{tokens:e.consumeArgs(2)[0],numArgs:0}})),Nr("\\@secondoftwo",(function(e){return{tokens:e.consumeArgs(2)[1],numArgs:0}})),Nr("\\@ifnextchar",(function(e){const t=e.consumeArgs(3);e.consumeSpaces();const r=e.future();return 1===t[0].length&&t[0][0].text===r.text?{tokens:t[1],numArgs:0}:{tokens:t[2],numArgs:0}})),Nr("\\@ifstar","\\@ifnextchar *{\\@firstoftwo{#1}}"),Nr("\\TextOrMath",(function(e){const t=e.consumeArgs(2);return"text"===e.mode?{tokens:t[0],numArgs:0}:{tokens:t[1],numArgs:0}}));const Cn={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};Nr("\\char",(function(e){let t,r=e.popToken(),o="";if("'"===r.text)t=8,r=e.popToken();else if('"'===r.text)t=16,r=e.popToken();else if("`"===r.text)if(r=e.popToken(),"\\"===r.text[0])o=r.text.charCodeAt(1);else{if("EOF"===r.text)throw new n("\\char` missing argument");o=r.text.charCodeAt(0)}else t=10;if(t){if(o=Cn[r.text],null==o||o>=t)throw new n("Invalid base-"+t+" digit "+r.text);let s;for(;null!=(s=Cn[e.future().text])&&s{let s=e.consumeArg().tokens;if(1!==s.length)throw new n("\\newcommand's first argument must be a macro name");const i=s[0].text,a=e.isDefined(i);if(a&&!t)throw new n("\\newcommand{"+i+"} attempting to redefine "+i+"; use \\renewcommand");if(!a&&!r)throw new n("\\renewcommand{"+i+"} when command "+i+" does not yet exist; use \\newcommand");let l=0;if(s=e.consumeArg().tokens,1===s.length&&"["===s[0].text){let t="",r=e.expandNextToken();for(;"]"!==r.text&&"EOF"!==r.text;)t+=r.text,r=e.expandNextToken();if(!t.match(/^\s*[0-9]+\s*$/))throw new n("Invalid number of arguments: "+t);l=parseInt(t),s=e.consumeArg().tokens}return a&&o||e.macros.set(i,{tokens:s,numArgs:l}),""};Nr("\\newcommand",(e=>Nn(e,!1,!0,!1))),Nr("\\renewcommand",(e=>Nn(e,!0,!1,!1))),Nr("\\providecommand",(e=>Nn(e,!0,!0,!0))),Nr("\\message",(e=>{const t=e.consumeArgs(1)[0];return console.log(t.reverse().map((e=>e.text)).join("")),""})),Nr("\\errmessage",(e=>{const t=e.consumeArgs(1)[0];return console.error(t.reverse().map((e=>e.text)).join("")),""})),Nr("\\show",(e=>{const t=e.popToken(),r=t.text;return console.log(t,e.macros.get(r),wn[r],se.math[r],se.text[r]),""})),Nr("\\bgroup","{"),Nr("\\egroup","}"),Nr("~","\\nobreakspace"),Nr("\\lq","`"),Nr("\\rq","'"),Nr("\\aa","\\r a"),Nr("\\AA","\\r A"),Nr("\\textcopyright","\\html@mathml{\\textcircled{c}}{\\char`\xa9}"),Nr("\\copyright","\\TextOrMath{\\textcopyright}{\\text{\\textcopyright}}"),Nr("\\textregistered","\\html@mathml{\\textcircled{\\scriptsize R}}{\\char`\xae}"),Nr("\u212c","\\mathscr{B}"),Nr("\u2130","\\mathscr{E}"),Nr("\u2131","\\mathscr{F}"),Nr("\u210b","\\mathscr{H}"),Nr("\u2110","\\mathscr{I}"),Nr("\u2112","\\mathscr{L}"),Nr("\u2133","\\mathscr{M}"),Nr("\u211b","\\mathscr{R}"),Nr("\u212d","\\mathfrak{C}"),Nr("\u210c","\\mathfrak{H}"),Nr("\u2128","\\mathfrak{Z}"),Nr("\\Bbbk","\\Bbb{k}"),Nr("\xb7","\\cdotp"),Nr("\\llap","\\mathllap{\\textrm{#1}}"),Nr("\\rlap","\\mathrlap{\\textrm{#1}}"),Nr("\\clap","\\mathclap{\\textrm{#1}}"),Nr("\\mathstrut","\\vphantom{(}"),Nr("\\underbar","\\underline{\\text{#1}}"),Nr("\\not",'\\html@mathml{\\mathrel{\\mathrlap\\@not}}{\\char"338}'),Nr("\\neq","\\html@mathml{\\mathrel{\\not=}}{\\mathrel{\\char`\u2260}}"),Nr("\\ne","\\neq"),Nr("\u2260","\\neq"),Nr("\\notin","\\html@mathml{\\mathrel{{\\in}\\mathllap{/\\mskip1mu}}}{\\mathrel{\\char`\u2209}}"),Nr("\u2209","\\notin"),Nr("\u2258","\\html@mathml{\\mathrel{=\\kern{-1em}\\raisebox{0.4em}{$\\scriptsize\\frown$}}}{\\mathrel{\\char`\u2258}}"),Nr("\u2259","\\html@mathml{\\stackrel{\\tiny\\wedge}{=}}{\\mathrel{\\char`\u2258}}"),Nr("\u225a","\\html@mathml{\\stackrel{\\tiny\\vee}{=}}{\\mathrel{\\char`\u225a}}"),Nr("\u225b","\\html@mathml{\\stackrel{\\scriptsize\\star}{=}}{\\mathrel{\\char`\u225b}}"),Nr("\u225d","\\html@mathml{\\stackrel{\\tiny\\mathrm{def}}{=}}{\\mathrel{\\char`\u225d}}"),Nr("\u225e","\\html@mathml{\\stackrel{\\tiny\\mathrm{m}}{=}}{\\mathrel{\\char`\u225e}}"),Nr("\u225f","\\html@mathml{\\stackrel{\\tiny?}{=}}{\\mathrel{\\char`\u225f}}"),Nr("\u27c2","\\perp"),Nr("\u203c","\\mathclose{!\\mkern-0.8mu!}"),Nr("\u220c","\\notni"),Nr("\u231c","\\ulcorner"),Nr("\u231d","\\urcorner"),Nr("\u231e","\\llcorner"),Nr("\u231f","\\lrcorner"),Nr("\xa9","\\copyright"),Nr("\xae","\\textregistered"),Nr("\ufe0f","\\textregistered"),Nr("\\ulcorner",'\\html@mathml{\\@ulcorner}{\\mathop{\\char"231c}}'),Nr("\\urcorner",'\\html@mathml{\\@urcorner}{\\mathop{\\char"231d}}'),Nr("\\llcorner",'\\html@mathml{\\@llcorner}{\\mathop{\\char"231e}}'),Nr("\\lrcorner",'\\html@mathml{\\@lrcorner}{\\mathop{\\char"231f}}'),Nr("\\vdots","{\\varvdots\\rule{0pt}{15pt}}"),Nr("\u22ee","\\vdots"),Nr("\\varGamma","\\mathit{\\Gamma}"),Nr("\\varDelta","\\mathit{\\Delta}"),Nr("\\varTheta","\\mathit{\\Theta}"),Nr("\\varLambda","\\mathit{\\Lambda}"),Nr("\\varXi","\\mathit{\\Xi}"),Nr("\\varPi","\\mathit{\\Pi}"),Nr("\\varSigma","\\mathit{\\Sigma}"),Nr("\\varUpsilon","\\mathit{\\Upsilon}"),Nr("\\varPhi","\\mathit{\\Phi}"),Nr("\\varPsi","\\mathit{\\Psi}"),Nr("\\varOmega","\\mathit{\\Omega}"),Nr("\\substack","\\begin{subarray}{c}#1\\end{subarray}"),Nr("\\colon","\\nobreak\\mskip2mu\\mathpunct{}\\mathchoice{\\mkern-3mu}{\\mkern-3mu}{}{}{:}\\mskip6mu\\relax"),Nr("\\boxed","\\fbox{$\\displaystyle{#1}$}"),Nr("\\iff","\\DOTSB\\;\\Longleftrightarrow\\;"),Nr("\\implies","\\DOTSB\\;\\Longrightarrow\\;"),Nr("\\impliedby","\\DOTSB\\;\\Longleftarrow\\;"),Nr("\\dddot","{\\overset{\\raisebox{-0.1ex}{\\normalsize ...}}{#1}}"),Nr("\\ddddot","{\\overset{\\raisebox{-0.1ex}{\\normalsize ....}}{#1}}");const qn={",":"\\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"};Nr("\\dots",(function(e){let t="\\dotso";const r=e.expandAfterFuture().text;return r in qn?t=qn[r]:("\\not"===r.slice(0,4)||r in se.math&&l.contains(["bin","rel"],se.math[r].group))&&(t="\\dotsb"),t}));const In={")":!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};Nr("\\dotso",(function(e){return e.future().text in In?"\\ldots\\,":"\\ldots"})),Nr("\\dotsc",(function(e){const t=e.future().text;return t in In&&","!==t?"\\ldots\\,":"\\ldots"})),Nr("\\cdots",(function(e){return e.future().text in In?"\\@cdots\\,":"\\@cdots"})),Nr("\\dotsb","\\cdots"),Nr("\\dotsm","\\cdots"),Nr("\\dotsi","\\!\\cdots"),Nr("\\dotsx","\\ldots\\,"),Nr("\\DOTSI","\\relax"),Nr("\\DOTSB","\\relax"),Nr("\\DOTSX","\\relax"),Nr("\\tmspace","\\TextOrMath{\\kern#1#3}{\\mskip#1#2}\\relax"),Nr("\\,","\\tmspace+{3mu}{.1667em}"),Nr("\\thinspace","\\,"),Nr("\\>","\\mskip{4mu}"),Nr("\\:","\\tmspace+{4mu}{.2222em}"),Nr("\\medspace","\\:"),Nr("\\;","\\tmspace+{5mu}{.2777em}"),Nr("\\thickspace","\\;"),Nr("\\!","\\tmspace-{3mu}{.1667em}"),Nr("\\negthinspace","\\!"),Nr("\\negmedspace","\\tmspace-{4mu}{.2222em}"),Nr("\\negthickspace","\\tmspace-{5mu}{.277em}"),Nr("\\enspace","\\kern.5em "),Nr("\\enskip","\\hskip.5em\\relax"),Nr("\\quad","\\hskip1em\\relax"),Nr("\\qquad","\\hskip2em\\relax"),Nr("\\tag","\\@ifstar\\tag@literal\\tag@paren"),Nr("\\tag@paren","\\tag@literal{({#1})}"),Nr("\\tag@literal",(e=>{if(e.macros.get("\\df@tag"))throw new n("Multiple \\tag");return"\\gdef\\df@tag{\\text{#1}}"})),Nr("\\bmod","\\mathchoice{\\mskip1mu}{\\mskip1mu}{\\mskip5mu}{\\mskip5mu}\\mathbin{\\rm mod}\\mathchoice{\\mskip1mu}{\\mskip1mu}{\\mskip5mu}{\\mskip5mu}"),Nr("\\pod","\\allowbreak\\mathchoice{\\mkern18mu}{\\mkern8mu}{\\mkern8mu}{\\mkern8mu}(#1)"),Nr("\\pmod","\\pod{{\\rm mod}\\mkern6mu#1}"),Nr("\\mod","\\allowbreak\\mathchoice{\\mkern18mu}{\\mkern12mu}{\\mkern12mu}{\\mkern12mu}{\\rm mod}\\,\\,#1"),Nr("\\newline","\\\\\\relax"),Nr("\\TeX","\\textrm{\\html@mathml{T\\kern-.1667em\\raisebox{-.5ex}{E}\\kern-.125emX}{TeX}}");const Rn=F(T["Main-Regular"]["T".charCodeAt(0)][1]-.7*T["Main-Regular"]["A".charCodeAt(0)][1]);Nr("\\LaTeX","\\textrm{\\html@mathml{L\\kern-.36em\\raisebox{"+Rn+"}{\\scriptstyle A}\\kern-.15em\\TeX}{LaTeX}}"),Nr("\\KaTeX","\\textrm{\\html@mathml{K\\kern-.17em\\raisebox{"+Rn+"}{\\scriptstyle A}\\kern-.15em\\TeX}{KaTeX}}"),Nr("\\hspace","\\@ifstar\\@hspacer\\@hspace"),Nr("\\@hspace","\\hskip #1\\relax"),Nr("\\@hspacer","\\rule{0pt}{0pt}\\hskip #1\\relax"),Nr("\\ordinarycolon",":"),Nr("\\vcentcolon","\\mathrel{\\mathop\\ordinarycolon}"),Nr("\\dblcolon",'\\html@mathml{\\mathrel{\\vcentcolon\\mathrel{\\mkern-.9mu}\\vcentcolon}}{\\mathop{\\char"2237}}'),Nr("\\coloneqq",'\\html@mathml{\\mathrel{\\vcentcolon\\mathrel{\\mkern-1.2mu}=}}{\\mathop{\\char"2254}}'),Nr("\\Coloneqq",'\\html@mathml{\\mathrel{\\dblcolon\\mathrel{\\mkern-1.2mu}=}}{\\mathop{\\char"2237\\char"3d}}'),Nr("\\coloneq",'\\html@mathml{\\mathrel{\\vcentcolon\\mathrel{\\mkern-1.2mu}\\mathrel{-}}}{\\mathop{\\char"3a\\char"2212}}'),Nr("\\Coloneq",'\\html@mathml{\\mathrel{\\dblcolon\\mathrel{\\mkern-1.2mu}\\mathrel{-}}}{\\mathop{\\char"2237\\char"2212}}'),Nr("\\eqqcolon",'\\html@mathml{\\mathrel{=\\mathrel{\\mkern-1.2mu}\\vcentcolon}}{\\mathop{\\char"2255}}'),Nr("\\Eqqcolon",'\\html@mathml{\\mathrel{=\\mathrel{\\mkern-1.2mu}\\dblcolon}}{\\mathop{\\char"3d\\char"2237}}'),Nr("\\eqcolon",'\\html@mathml{\\mathrel{\\mathrel{-}\\mathrel{\\mkern-1.2mu}\\vcentcolon}}{\\mathop{\\char"2239}}'),Nr("\\Eqcolon",'\\html@mathml{\\mathrel{\\mathrel{-}\\mathrel{\\mkern-1.2mu}\\dblcolon}}{\\mathop{\\char"2212\\char"2237}}'),Nr("\\colonapprox",'\\html@mathml{\\mathrel{\\vcentcolon\\mathrel{\\mkern-1.2mu}\\approx}}{\\mathop{\\char"3a\\char"2248}}'),Nr("\\Colonapprox",'\\html@mathml{\\mathrel{\\dblcolon\\mathrel{\\mkern-1.2mu}\\approx}}{\\mathop{\\char"2237\\char"2248}}'),Nr("\\colonsim",'\\html@mathml{\\mathrel{\\vcentcolon\\mathrel{\\mkern-1.2mu}\\sim}}{\\mathop{\\char"3a\\char"223c}}'),Nr("\\Colonsim",'\\html@mathml{\\mathrel{\\dblcolon\\mathrel{\\mkern-1.2mu}\\sim}}{\\mathop{\\char"2237\\char"223c}}'),Nr("\u2237","\\dblcolon"),Nr("\u2239","\\eqcolon"),Nr("\u2254","\\coloneqq"),Nr("\u2255","\\eqqcolon"),Nr("\u2a74","\\Coloneqq"),Nr("\\ratio","\\vcentcolon"),Nr("\\coloncolon","\\dblcolon"),Nr("\\colonequals","\\coloneqq"),Nr("\\coloncolonequals","\\Coloneqq"),Nr("\\equalscolon","\\eqqcolon"),Nr("\\equalscoloncolon","\\Eqqcolon"),Nr("\\colonminus","\\coloneq"),Nr("\\coloncolonminus","\\Coloneq"),Nr("\\minuscolon","\\eqcolon"),Nr("\\minuscoloncolon","\\Eqcolon"),Nr("\\coloncolonapprox","\\Colonapprox"),Nr("\\coloncolonsim","\\Colonsim"),Nr("\\simcolon","\\mathrel{\\sim\\mathrel{\\mkern-1.2mu}\\vcentcolon}"),Nr("\\simcoloncolon","\\mathrel{\\sim\\mathrel{\\mkern-1.2mu}\\dblcolon}"),Nr("\\approxcolon","\\mathrel{\\approx\\mathrel{\\mkern-1.2mu}\\vcentcolon}"),Nr("\\approxcoloncolon","\\mathrel{\\approx\\mathrel{\\mkern-1.2mu}\\dblcolon}"),Nr("\\notni","\\html@mathml{\\not\\ni}{\\mathrel{\\char`\u220c}}"),Nr("\\limsup","\\DOTSB\\operatorname*{lim\\,sup}"),Nr("\\liminf","\\DOTSB\\operatorname*{lim\\,inf}"),Nr("\\injlim","\\DOTSB\\operatorname*{inj\\,lim}"),Nr("\\projlim","\\DOTSB\\operatorname*{proj\\,lim}"),Nr("\\varlimsup","\\DOTSB\\operatorname*{\\overline{lim}}"),Nr("\\varliminf","\\DOTSB\\operatorname*{\\underline{lim}}"),Nr("\\varinjlim","\\DOTSB\\operatorname*{\\underrightarrow{lim}}"),Nr("\\varprojlim","\\DOTSB\\operatorname*{\\underleftarrow{lim}}"),Nr("\\gvertneqq","\\html@mathml{\\@gvertneqq}{\u2269}"),Nr("\\lvertneqq","\\html@mathml{\\@lvertneqq}{\u2268}"),Nr("\\ngeqq","\\html@mathml{\\@ngeqq}{\u2271}"),Nr("\\ngeqslant","\\html@mathml{\\@ngeqslant}{\u2271}"),Nr("\\nleqq","\\html@mathml{\\@nleqq}{\u2270}"),Nr("\\nleqslant","\\html@mathml{\\@nleqslant}{\u2270}"),Nr("\\nshortmid","\\html@mathml{\\@nshortmid}{\u2224}"),Nr("\\nshortparallel","\\html@mathml{\\@nshortparallel}{\u2226}"),Nr("\\nsubseteqq","\\html@mathml{\\@nsubseteqq}{\u2288}"),Nr("\\nsupseteqq","\\html@mathml{\\@nsupseteqq}{\u2289}"),Nr("\\varsubsetneq","\\html@mathml{\\@varsubsetneq}{\u228a}"),Nr("\\varsubsetneqq","\\html@mathml{\\@varsubsetneqq}{\u2acb}"),Nr("\\varsupsetneq","\\html@mathml{\\@varsupsetneq}{\u228b}"),Nr("\\varsupsetneqq","\\html@mathml{\\@varsupsetneqq}{\u2acc}"),Nr("\\imath","\\html@mathml{\\@imath}{\u0131}"),Nr("\\jmath","\\html@mathml{\\@jmath}{\u0237}"),Nr("\\llbracket","\\html@mathml{\\mathopen{[\\mkern-3.2mu[}}{\\mathopen{\\char`\u27e6}}"),Nr("\\rrbracket","\\html@mathml{\\mathclose{]\\mkern-3.2mu]}}{\\mathclose{\\char`\u27e7}}"),Nr("\u27e6","\\llbracket"),Nr("\u27e7","\\rrbracket"),Nr("\\lBrace","\\html@mathml{\\mathopen{\\{\\mkern-3.2mu[}}{\\mathopen{\\char`\u2983}}"),Nr("\\rBrace","\\html@mathml{\\mathclose{]\\mkern-3.2mu\\}}}{\\mathclose{\\char`\u2984}}"),Nr("\u2983","\\lBrace"),Nr("\u2984","\\rBrace"),Nr("\\minuso","\\mathbin{\\html@mathml{{\\mathrlap{\\mathchoice{\\kern{0.145em}}{\\kern{0.145em}}{\\kern{0.1015em}}{\\kern{0.0725em}}\\circ}{-}}}{\\char`\u29b5}}"),Nr("\u29b5","\\minuso"),Nr("\\darr","\\downarrow"),Nr("\\dArr","\\Downarrow"),Nr("\\Darr","\\Downarrow"),Nr("\\lang","\\langle"),Nr("\\rang","\\rangle"),Nr("\\uarr","\\uparrow"),Nr("\\uArr","\\Uparrow"),Nr("\\Uarr","\\Uparrow"),Nr("\\N","\\mathbb{N}"),Nr("\\R","\\mathbb{R}"),Nr("\\Z","\\mathbb{Z}"),Nr("\\alef","\\aleph"),Nr("\\alefsym","\\aleph"),Nr("\\Alpha","\\mathrm{A}"),Nr("\\Beta","\\mathrm{B}"),Nr("\\bull","\\bullet"),Nr("\\Chi","\\mathrm{X}"),Nr("\\clubs","\\clubsuit"),Nr("\\cnums","\\mathbb{C}"),Nr("\\Complex","\\mathbb{C}"),Nr("\\Dagger","\\ddagger"),Nr("\\diamonds","\\diamondsuit"),Nr("\\empty","\\emptyset"),Nr("\\Epsilon","\\mathrm{E}"),Nr("\\Eta","\\mathrm{H}"),Nr("\\exist","\\exists"),Nr("\\harr","\\leftrightarrow"),Nr("\\hArr","\\Leftrightarrow"),Nr("\\Harr","\\Leftrightarrow"),Nr("\\hearts","\\heartsuit"),Nr("\\image","\\Im"),Nr("\\infin","\\infty"),Nr("\\Iota","\\mathrm{I}"),Nr("\\isin","\\in"),Nr("\\Kappa","\\mathrm{K}"),Nr("\\larr","\\leftarrow"),Nr("\\lArr","\\Leftarrow"),Nr("\\Larr","\\Leftarrow"),Nr("\\lrarr","\\leftrightarrow"),Nr("\\lrArr","\\Leftrightarrow"),Nr("\\Lrarr","\\Leftrightarrow"),Nr("\\Mu","\\mathrm{M}"),Nr("\\natnums","\\mathbb{N}"),Nr("\\Nu","\\mathrm{N}"),Nr("\\Omicron","\\mathrm{O}"),Nr("\\plusmn","\\pm"),Nr("\\rarr","\\rightarrow"),Nr("\\rArr","\\Rightarrow"),Nr("\\Rarr","\\Rightarrow"),Nr("\\real","\\Re"),Nr("\\reals","\\mathbb{R}"),Nr("\\Reals","\\mathbb{R}"),Nr("\\Rho","\\mathrm{P}"),Nr("\\sdot","\\cdot"),Nr("\\sect","\\S"),Nr("\\spades","\\spadesuit"),Nr("\\sub","\\subset"),Nr("\\sube","\\subseteq"),Nr("\\supe","\\supseteq"),Nr("\\Tau","\\mathrm{T}"),Nr("\\thetasym","\\vartheta"),Nr("\\weierp","\\wp"),Nr("\\Zeta","\\mathrm{Z}"),Nr("\\argmin","\\DOTSB\\operatorname*{arg\\,min}"),Nr("\\argmax","\\DOTSB\\operatorname*{arg\\,max}"),Nr("\\plim","\\DOTSB\\mathop{\\operatorname{plim}}\\limits"),Nr("\\bra","\\mathinner{\\langle{#1}|}"),Nr("\\ket","\\mathinner{|{#1}\\rangle}"),Nr("\\braket","\\mathinner{\\langle{#1}\\rangle}"),Nr("\\Bra","\\left\\langle#1\\right|"),Nr("\\Ket","\\left|#1\\right\\rangle");const Hn=e=>t=>{const r=t.consumeArg().tokens,n=t.consumeArg().tokens,o=t.consumeArg().tokens,s=t.consumeArg().tokens,i=t.macros.get("|"),a=t.macros.get("\\|");t.macros.beginGroup();const l=t=>r=>{e&&(r.macros.set("|",i),o.length&&r.macros.set("\\|",a));let s=t;if(!t&&o.length){"|"===r.future().text&&(r.popToken(),s=!0)}return{tokens:s?o:n,numArgs:0}};t.macros.set("|",l(!1)),o.length&&t.macros.set("\\|",l(!0));const h=t.consumeArg().tokens,c=t.expandTokens([...s,...h,...r]);return t.macros.endGroup(),{tokens:c.reverse(),numArgs:0}};Nr("\\bra@ket",Hn(!1)),Nr("\\bra@set",Hn(!0)),Nr("\\Braket","\\bra@ket{\\left\\langle}{\\,\\middle\\vert\\,}{\\,\\middle\\vert\\,}{\\right\\rangle}"),Nr("\\Set","\\bra@set{\\left\\{\\:}{\\;\\middle\\vert\\;}{\\;\\middle\\Vert\\;}{\\:\\right\\}}"),Nr("\\set","\\bra@set{\\{\\,}{\\mid}{}{\\,\\}}"),Nr("\\angln","{\\angl n}"),Nr("\\blue","\\textcolor{##6495ed}{#1}"),Nr("\\orange","\\textcolor{##ffa500}{#1}"),Nr("\\pink","\\textcolor{##ff00af}{#1}"),Nr("\\red","\\textcolor{##df0030}{#1}"),Nr("\\green","\\textcolor{##28ae7b}{#1}"),Nr("\\gray","\\textcolor{gray}{#1}"),Nr("\\purple","\\textcolor{##9d38bd}{#1}"),Nr("\\blueA","\\textcolor{##ccfaff}{#1}"),Nr("\\blueB","\\textcolor{##80f6ff}{#1}"),Nr("\\blueC","\\textcolor{##63d9ea}{#1}"),Nr("\\blueD","\\textcolor{##11accd}{#1}"),Nr("\\blueE","\\textcolor{##0c7f99}{#1}"),Nr("\\tealA","\\textcolor{##94fff5}{#1}"),Nr("\\tealB","\\textcolor{##26edd5}{#1}"),Nr("\\tealC","\\textcolor{##01d1c1}{#1}"),Nr("\\tealD","\\textcolor{##01a995}{#1}"),Nr("\\tealE","\\textcolor{##208170}{#1}"),Nr("\\greenA","\\textcolor{##b6ffb0}{#1}"),Nr("\\greenB","\\textcolor{##8af281}{#1}"),Nr("\\greenC","\\textcolor{##74cf70}{#1}"),Nr("\\greenD","\\textcolor{##1fab54}{#1}"),Nr("\\greenE","\\textcolor{##0d923f}{#1}"),Nr("\\goldA","\\textcolor{##ffd0a9}{#1}"),Nr("\\goldB","\\textcolor{##ffbb71}{#1}"),Nr("\\goldC","\\textcolor{##ff9c39}{#1}"),Nr("\\goldD","\\textcolor{##e07d10}{#1}"),Nr("\\goldE","\\textcolor{##a75a05}{#1}"),Nr("\\redA","\\textcolor{##fca9a9}{#1}"),Nr("\\redB","\\textcolor{##ff8482}{#1}"),Nr("\\redC","\\textcolor{##f9685d}{#1}"),Nr("\\redD","\\textcolor{##e84d39}{#1}"),Nr("\\redE","\\textcolor{##bc2612}{#1}"),Nr("\\maroonA","\\textcolor{##ffbde0}{#1}"),Nr("\\maroonB","\\textcolor{##ff92c6}{#1}"),Nr("\\maroonC","\\textcolor{##ed5fa6}{#1}"),Nr("\\maroonD","\\textcolor{##ca337c}{#1}"),Nr("\\maroonE","\\textcolor{##9e034e}{#1}"),Nr("\\purpleA","\\textcolor{##ddd7ff}{#1}"),Nr("\\purpleB","\\textcolor{##c6b9fc}{#1}"),Nr("\\purpleC","\\textcolor{##aa87ff}{#1}"),Nr("\\purpleD","\\textcolor{##7854ab}{#1}"),Nr("\\purpleE","\\textcolor{##543b78}{#1}"),Nr("\\mintA","\\textcolor{##f5f9e8}{#1}"),Nr("\\mintB","\\textcolor{##edf2df}{#1}"),Nr("\\mintC","\\textcolor{##e0e5cc}{#1}"),Nr("\\grayA","\\textcolor{##f6f7f7}{#1}"),Nr("\\grayB","\\textcolor{##f0f1f2}{#1}"),Nr("\\grayC","\\textcolor{##e3e5e6}{#1}"),Nr("\\grayD","\\textcolor{##d6d8da}{#1}"),Nr("\\grayE","\\textcolor{##babec2}{#1}"),Nr("\\grayF","\\textcolor{##888d93}{#1}"),Nr("\\grayG","\\textcolor{##626569}{#1}"),Nr("\\grayH","\\textcolor{##3b3e40}{#1}"),Nr("\\grayI","\\textcolor{##21242c}{#1}"),Nr("\\kaBlue","\\textcolor{##314453}{#1}"),Nr("\\kaGreen","\\textcolor{##71B307}{#1}");const On={"^":!0,_:!0,"\\limits":!0,"\\nolimits":!0};class En{constructor(e,t,r){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=t,this.expansionCount=0,this.feed(e),this.macros=new Tn(Bn,t.macros),this.mode=r,this.stack=[]}feed(e){this.lexer=new An(e,this.settings)}switchMode(e){this.mode=e}beginGroup(){this.macros.beginGroup()}endGroup(){this.macros.endGroup()}endGroups(){this.macros.endGroups()}future(){return 0===this.stack.length&&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){let t,r,n;if(e){if(this.consumeSpaces(),"["!==this.future().text)return null;t=this.popToken(),({tokens:n,end:r}=this.consumeArg(["]"]))}else({tokens:n,start:t,end:r}=this.consumeArg());return this.pushToken(new Ir("EOF",r.loc)),this.pushTokens(n),t.range(r,"")}consumeSpaces(){for(;;){if(" "!==this.future().text)break;this.stack.pop()}}consumeArg(e){const t=[],r=e&&e.length>0;r||this.consumeSpaces();const o=this.future();let s,i=0,a=0;do{if(s=this.popToken(),t.push(s),"{"===s.text)++i;else if("}"===s.text){if(--i,-1===i)throw new n("Extra }",s)}else if("EOF"===s.text)throw new n("Unexpected end of input in a macro argument, expected '"+(e&&r?e[a]:"}")+"'",s);if(e&&r)if((0===i||1===i&&"{"===e[a])&&s.text===e[a]){if(++a,a===e.length){t.splice(-a,a);break}}else a=0}while(0!==i||r);return"{"===o.text&&"}"===t[t.length-1].text&&(t.pop(),t.shift()),t.reverse(),{tokens:t,start:o,end:s}}consumeArgs(e,t){if(t){if(t.length!==e+1)throw new n("The length of delimiters doesn't match the number of args!");const r=t[0];for(let e=0;ethis.settings.maxExpand)throw new n("Too many expansions: infinite loop or need to increase maxExpand setting")}expandOnce(e){const t=this.popToken(),r=t.text,o=t.noexpand?null:this._getExpansion(r);if(null==o||e&&o.unexpandable){if(e&&null==o&&"\\"===r[0]&&!this.isDefined(r))throw new n("Undefined control sequence: "+r);return this.pushToken(t),!1}this.countExpansion(1);let s=o.tokens;const i=this.consumeArgs(o.numArgs,o.delimiters);if(o.numArgs){s=s.slice();for(let e=s.length-1;e>=0;--e){let t=s[e];if("#"===t.text){if(0===e)throw new n("Incomplete placeholder at end of macro body",t);if(t=s[--e],"#"===t.text)s.splice(e+1,1);else{if(!/^[1-9]$/.test(t.text))throw new n("Not a valid argument number",t);s.splice(e,2,...i[+t.text-1])}}}}return this.pushTokens(s),s.length}expandAfterFuture(){return this.expandOnce(),this.future()}expandNextToken(){for(;;)if(!1===this.expandOnce()){const e=this.stack.pop();return e.treatAsRelax&&(e.text="\\relax"),e}throw new Error}expandMacro(e){return this.macros.has(e)?this.expandTokens([new Ir(e)]):void 0}expandTokens(e){const t=[],r=this.stack.length;for(this.pushTokens(e);this.stack.length>r;)if(!1===this.expandOnce(!0)){const e=this.stack.pop();e.treatAsRelax&&(e.noexpand=!1,e.treatAsRelax=!1),t.push(e)}return this.countExpansion(t.length),t}expandMacroAsText(e){const t=this.expandMacro(e);return t?t.map((e=>e.text)).join(""):t}_getExpansion(e){const t=this.macros.get(e);if(null==t)return t;if(1===e.length){const t=this.lexer.catcodes[e];if(null!=t&&13!==t)return}const r="function"==typeof t?t(this):t;if("string"==typeof r){let e=0;if(-1!==r.indexOf("#")){const t=r.replace(/##/g,"");for(;-1!==t.indexOf("#"+(e+1));)++e}const t=new An(r,this.settings),n=[];let o=t.lex();for(;"EOF"!==o.text;)n.push(o),o=t.lex();n.reverse();return{tokens:n,numArgs:e}}return r}isDefined(e){return this.macros.has(e)||wn.hasOwnProperty(e)||se.math.hasOwnProperty(e)||se.text.hasOwnProperty(e)||On.hasOwnProperty(e)}isExpandable(e){const t=this.macros.get(e);return null!=t?"string"==typeof t||"function"==typeof t||!t.unexpandable:wn.hasOwnProperty(e)&&!wn[e].primitive}}const Ln=/^[\u208a\u208b\u208c\u208d\u208e\u2080\u2081\u2082\u2083\u2084\u2085\u2086\u2087\u2088\u2089\u2090\u2091\u2095\u1d62\u2c7c\u2096\u2097\u2098\u2099\u2092\u209a\u1d63\u209b\u209c\u1d64\u1d65\u2093\u1d66\u1d67\u1d68\u1d69\u1d6a]/,Dn=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"}),Vn={"\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"}},Pn={"\xe1":"a\u0301","\xe0":"a\u0300","\xe4":"a\u0308","\u01df":"a\u0308\u0304","\xe3":"a\u0303","\u0101":"a\u0304","\u0103":"a\u0306","\u1eaf":"a\u0306\u0301","\u1eb1":"a\u0306\u0300","\u1eb5":"a\u0306\u0303","\u01ce":"a\u030c","\xe2":"a\u0302","\u1ea5":"a\u0302\u0301","\u1ea7":"a\u0302\u0300","\u1eab":"a\u0302\u0303","\u0227":"a\u0307","\u01e1":"a\u0307\u0304","\xe5":"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","\xe7":"c\u0327","\u010f":"d\u030c","\u1e0b":"d\u0307","\u1e11":"d\u0327","\xe9":"e\u0301","\xe8":"e\u0300","\xeb":"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","\xea":"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","\xed":"i\u0301","\xec":"i\u0300","\xef":"i\u0308","\u1e2f":"i\u0308\u0301","\u0129":"i\u0303","\u012b":"i\u0304","\u012d":"i\u0306","\u01d0":"i\u030c","\xee":"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","\xf1":"n\u0303","\u0148":"n\u030c","\u1e45":"n\u0307","\u0146":"n\u0327","\xf3":"o\u0301","\xf2":"o\u0300","\xf6":"o\u0308","\u022b":"o\u0308\u0304","\xf5":"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","\xf4":"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","\xfa":"u\u0301","\xf9":"u\u0300","\xfc":"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","\xfb":"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","\xfd":"y\u0301","\u1ef3":"y\u0300","\xff":"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","\xc1":"A\u0301","\xc0":"A\u0300","\xc4":"A\u0308","\u01de":"A\u0308\u0304","\xc3":"A\u0303","\u0100":"A\u0304","\u0102":"A\u0306","\u1eae":"A\u0306\u0301","\u1eb0":"A\u0306\u0300","\u1eb4":"A\u0306\u0303","\u01cd":"A\u030c","\xc2":"A\u0302","\u1ea4":"A\u0302\u0301","\u1ea6":"A\u0302\u0300","\u1eaa":"A\u0302\u0303","\u0226":"A\u0307","\u01e0":"A\u0307\u0304","\xc5":"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","\xc7":"C\u0327","\u010e":"D\u030c","\u1e0a":"D\u0307","\u1e10":"D\u0327","\xc9":"E\u0301","\xc8":"E\u0300","\xcb":"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","\xca":"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","\xcd":"I\u0301","\xcc":"I\u0300","\xcf":"I\u0308","\u1e2e":"I\u0308\u0301","\u0128":"I\u0303","\u012a":"I\u0304","\u012c":"I\u0306","\u01cf":"I\u030c","\xce":"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","\xd1":"N\u0303","\u0147":"N\u030c","\u1e44":"N\u0307","\u0145":"N\u0327","\xd3":"O\u0301","\xd2":"O\u0300","\xd6":"O\u0308","\u022a":"O\u0308\u0304","\xd5":"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","\xd4":"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","\xda":"U\u0301","\xd9":"U\u0300","\xdc":"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","\xdb":"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","\xdd":"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"};class Fn{constructor(e,t){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 En(e,t,this.mode),this.settings=t,this.leftrightDepth=0}expect(e,t){if(void 0===t&&(t=!0),this.fetch().text!==e)throw new n("Expected '"+e+"', got '"+this.fetch().text+"'",this.fetch());t&&this.consume()}consume(){this.nextToken=null}fetch(){return null==this.nextToken&&(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{const e=this.parseExpression(!1);return this.expect("EOF"),this.settings.globalGroup||this.gullet.endGroup(),e}finally{this.gullet.endGroups()}}subparse(e){const t=this.nextToken;this.consume(),this.gullet.pushToken(new Ir("}")),this.gullet.pushTokens(e);const r=this.parseExpression(!1);return this.expect("}"),this.nextToken=t,r}parseExpression(e,t){const r=[];for(;;){"math"===this.mode&&this.consumeSpaces();const n=this.fetch();if(-1!==Fn.endOfExpression.indexOf(n.text))break;if(t&&n.text===t)break;if(e&&wn[n.text]&&wn[n.text].infix)break;const o=this.parseAtom(t);if(!o)break;"internal"!==o.type&&r.push(o)}return"text"===this.mode&&this.formLigatures(r),this.handleInfixNodes(r)}handleInfixNodes(e){let t,r=-1;for(let o=0;o=0&&this.settings.reportNonstrict("unicodeTextInMathMode",'Latin-1/Unicode text character "'+t[0]+'" used in math mode',e);const r=se[this.mode][t].group,n=qr.range(e);let s;if(re.hasOwnProperty(r)){const e=r;s={type:"atom",mode:this.mode,family:e,loc:n,text:t}}else s={type:r,mode:this.mode,loc:n,text:t};o=s}else{if(!(t.charCodeAt(0)>=128))return null;this.settings.strict&&(S(t.charCodeAt(0))?"math"===this.mode&&this.settings.reportNonstrict("unicodeTextInMathMode",'Unicode text character "'+t[0]+'" used in math mode',e):this.settings.reportNonstrict("unknownSymbol",'Unrecognized Unicode character "'+t[0]+'" ('+t.charCodeAt(0)+")",e)),o={type:"textord",mode:"text",loc:qr.range(e),text:t}}if(this.consume(),r)for(let t=0;t + +/*! + * Perlite (https://github.com/secure-77/Perlite) + * Author: sec77 (https://secure77.de) + * Licensed under MIT (https://github.com/secure-77/Perlite/blob/main/LICENSE) +*/ + + +//// load default settings + +// define perlite location on webserver +//var uriPath = '/perlite/' +var uriPath = '/' + + +// define home file +var homeFile = "README"; + +if ($('#index').data('option')) { + + homeFile = $('#index').data('option'); +} + +// disable pophovers +if ($('#disablePopHovers').data('option') == true && localStorage.getItem("disablePopUp") === null) { + + $('#disablePopUp').addClass('is-enabled') + localStorage.setItem('disablePopUp', 'true'); + +} + +// show toc +if ($('#showTOC').data('option') == false || localStorage.getItem("showTOC") === false) { + + localStorage.setItem("showTOC", "false") + $('#outline').css('display', 'none') +} + +if ($('#showLocalGraph').data('option') == false || localStorage.getItem("showLocalGraph") === false) { + + localStorage.setItem("showLocalGraph", "false") + $('#localGraph').css('display', 'none') +} + + +/** + * unslugURL + * @param {String} targetPath + */ +function unslugURL(targetPath) { + + decodedURI = decodeURIComponent(targetPath); + decodedURI = decodedURI.replaceAll('-', ' ') + decodedURI = decodedURI.replaceAll('~', '-') + decodedURI = decodedURI.replaceAll('%80', '~') + + // when perlite is in subdirectory remove it for content retrieval + if (decodedURI.startsWith(uriPath)) { + decodedURI = decodedURI.substring(uriPath.length - 1) + } + + return decodedURI; +} + +/** + * slugURL + * @param {String} targetPath + */ +function slugURL(targetPath) { + + encodedURI = decodeURIComponent(targetPath) + encodedURI = encodedURI.replaceAll('~', '%80') + encodedURI = encodedURI.replaceAll('-', '~') + encodedURI = encodedURI.replaceAll(' ', '-') + + // remove absolute path + if (encodedURI.substring(0, 1) == '/') { + encodedURI = encodedURI.substring(1) + } + + // when perlite is in subdirectory remove it for content retrieval + if (encodedURI.startsWith(uriPath)) { + encodedURI = encodedURI.substring(uriPath.length - 1) + } + + + return encodedURI; +} + + + +/** + * scroll to anchor + * @param {String} aid + */ +function scrollToAnchor(aid) { + var aTag = $("a[name='" + aid + "']"); + $('html,body,div').animate({ scrollTop: aTag.offset().top }, 'slow'); +} + + +/** + * get markdown content + * @param {String} str + * @param {Boolean} home + * @param {Boolean} popHover + * @param {String} anchor + */ +function getContent(str, home = false, popHover = false, anchor = "") { + + // reset content if request is empty + if (str.length == 0) { + document.getElementById("mdContent").innerHTML = ""; + document.getElementsByClassName("modal-body")[0].innerHTML = ""; + return; + } else { + + requestPath = uriPath + "content.php?mdfile=" + str; + + if (home) { + if ($("div.no-mobile").css("display") == "none") { + return + } + requestPath = uriPath + "content.php?home"; + + } + + mdContent = $("#mdContent")[0] + + + $.ajax({ + url: requestPath, success: function (result) { + + if (popHover == false) { + + // set content + $("#mdContent").html(result); + + // set word and char count + $("#wordCount").text($(".wordCount").text() + ' words'); + $("#charCount").text($(".charCount").text() + ' characters'); + + // set Browser, document title and nav path + var title = $("div.mdTitleHide").first().text(); + if (title) { + + //hrefTitle = '' + title + '' + title = title.substring(1) + titleElements = title.split('/') + title = titleElements.splice(-1) + parentTitle = titleElements.join(' / ') + if (parentTitle) { + parentTitle = parentTitle + ' / '; + } + $("div.view-header-title-parent").text(parentTitle); + $("div.view-header-title").text(title); + $(".inline-title").text(title); + + $("title").text(title + ' - ' + $("p.vault").text() + ' - ' + $("p.perliteTitle").text()); + + // set edit button url + $('.clickable-icon.view-action[aria-label="Click to edit"]') + .attr("href", "obsidian://open?vault=" + encodeURIComponent($("p.vault").text()) + "&file=" + encodeURIComponent(title)) + } + + // Outlines + var toc = ""; + var level = 0; + + document.getElementById("mdContent").innerHTML = + document.getElementById("mdContent").innerHTML.replace( + /([^<]+)<\/h([\d])>/gi, + function (str, openLevel, titleText, closeLevel) { + + if (openLevel != closeLevel) { + return str; + } + if (openLevel > level) { + toc += (new Array(openLevel - level + 1)).join('
'); + } else if (openLevel < level) { + toc += (new Array(level - openLevel + 1)).join("
"); + } + + level = parseInt(openLevel); + + var anchor = titleText.replace(/ /g, "_"); + toc += ''; + + return "" + + "" + "" + titleText + ""; + + } + ); + + if (level) { + toc += (new Array(level + 1)).join(""); + } + + document.getElementById("toc").innerHTML = toc; + + + // add Image Click popup + $(".pop").on("click", function () { + + var path = $(this).find("img").attr("src"); + result = ''; + $("#img-content").html(result); + $(".modal").css("width", "unset"); + $(".modal").css("height", "unset"); + $(".modal").css("max-width", "100%"); + $(".modal").css("max-height", "100%"); + $(".img-modal-title").text("Image preview"); + $("#img-modal").css("display", "flex"); + + }); + + + // trigger graph render on side bar + renderGraph(false, str); + + //resize graph on windows rezise + $(window).resize(function () { + renderGraph(false, str, false); + }); + + + // update the url + if (home == false) { + + target = slugURL(str) + window.history.pushState({}, "", location.protocol + '//' + location.host + uriPath + target + anchor); + + } + + // add Tag section + $('#tags').html("") + $('.tag').each(function (index) { + const count = index + 1; + const originalHTML = $(this).prop('outerHTML'); + const countTag = '
' + count + '
'; + $('#tags').append(originalHTML); + }); + + // hide them when no tags are found + if ($('#tags').html() == "") { + $('#tags_container').css('display', 'none') + } else { + $('#tags_container').css('display', 'block') + } + + + // on Tag click -> start search + $('.tag').click(function (e) { + + e.preventDefault(); + + target = $(e.target); + $('.workspace-tab-header[data-type="search"]').click(); + $('*[type="search"]').val(this.text); + search(this.text); + + // on mobile go to search + if ($(window).width() < 990) { + + $('.workspace').addClass('is-left-sidedock-open'); + $('.mod-left-split').removeClass('is-sidedock-collapse'); + $('.mod-left').removeClass('is-collapsed'); + $('.workspace-ribbon.side-dock-ribbon.mod-left').css('display', 'flex'); + + } + + }); + + // Toogle Front Matter Meta Container + $('.metadata-properties-heading').click(function (e) { + + e.preventDefault(); + + if ($('.metadata-container').hasClass('is-collapsed')) { + $('.metadata-container').removeClass('is-collapsed'); + } else { + $('.metadata-container').addClass('is-collapsed'); + } + + }); + + // Toogle Collapsable Callout Container + $('.callout-fold').on('click', function (e) { + + e.preventDefault(); + e.stopPropagation(); + target = $(e.target); + + for (let i = 0; i < 5; i++) { + if (target.is('.callout', 'is-collapsible')) { + break; + } + target = target.parent() + } + + calloutContent = target.find('.callout-content') + calloutIcon = target.find('.callout-fold') + + if (calloutContent.hasClass('is-collapsed-callout')) { + calloutContent.removeClass('is-collapsed-callout'); + } else { + calloutContent.addClass('is-collapsed-callout'); + } + + if (calloutIcon.hasClass('is-collapsed')) { + calloutIcon.removeClass('is-collapsed'); + } else { + calloutIcon.addClass('is-collapsed'); + } + + if (target.hasClass('is-collapsed')) { + target.removeClass('is-collapsed'); + } else { + target.addClass('is-collapsed'); + } + + }); + + // popHover (on hover internal links) + target = $('.disablePopUp') + + if (!target.hasClass('is-enabled')) { + + var currentMousePos = { x: -1, y: -1 }; + $(document).mousemove(function (event) { + currentMousePos.x = event.pageX; + currentMousePos.y = event.pageY; + }); + + stopThis = false; + // enter the hover box + $('.popover.hover-popover').mouseenter(function (e) { + stopThis = true + $('.popover.hover-popover').css('display', 'unset'); + }) + // leave the hover box + $('.popover.hover-popover').mouseleave(function (e) { + e.preventDefault(); + + hoverTimer = setTimeout(function () { + + $('.popover.hover-popover').css('display', 'none'); + stopThis = false; + + }, 500); + }) + + // leave the link + $('.internal-link').mouseleave(function (e) { + e.preventDefault(); + + hoverTimer = setTimeout(function () { + + if (stopThis == false) { + $('.popover.hover-popover').css('display', 'none'); + } + }, 1200); + }) + + $('.internal-link').mouseenter(function (e) { + e.preventDefault(); + + // update position for hover element + $('.popover.hover-popover').css({ top: currentMousePos.y, left: currentMousePos.x }); + + const urlParams = new URLSearchParams(this.href.split('?')[1]); + if (urlParams.has('link')) { + var target = urlParams.get('link'); + target = encodeURIComponent(target); + } else { + target = unslugURL(window.location.pathname) + } + + // get content of link + if (target) { + getContent(target, false, true) + } + + }); + + } + + + //check setting if metadata is collapsed or not + if ($('.metadataOption').hasClass('is-enabled')) { + $('.metadata-properties-heading').trigger('click') + } + mdContent = $("#mdContent")[0] + + // handle pop up and hover + } else { + + // set content + $("#mdHoverContent").html(result); + $("#popUpContent").html(result); + + // set title + var title = $("div.mdTitleHide")[1].innerText; + title = title.substring(1) + titleElements = title.split('/') + title = titleElements.splice(-1) + $(".inline-title.pophover-title").text(title); + $(".popup-modal-title").text(title); + + + // show pophover + $('.popover.hover-popover').css('display', 'unset'); + + mdContent = $("#mdHoverContent")[0] + + } + + // highlight code + hljs.highlightAll(); + + var snippets = document.getElementsByTagName('pre'); + var numberOfSnippets = snippets.length; + for (var i = 0; i < numberOfSnippets; i++) { + //code = snippets[i].getElementsByTagName('code')[0].innerText; + + snippets[i].classList.add('hljs'); // append copy button to pre tag + + snippets[i].innerHTML = '' + snippets[i].innerHTML; // append copy button + + snippets[i].getElementsByClassName('copy-code-button')[0].addEventListener("click", function () { + this.innerText = 'Copying..'; + button = this; + code = $(button).next()[0].innerText + navigator.clipboard.writeText(code).then(function () { + button.innerText = 'Copied!'; + }, function (err) { + button.innerText = 'Cant Copy!'; + console.error('Async: Could not copy Code: ', err); + }); + + setTimeout(function () { + button.innerText = 'Copy'; + }, 1000) + + }); + } + + + // run mobile settings + isMobile(); + + //render LaTeX (Katex) + renderMathInElement(mdContent, + { + delimiters: [ + { left: "$$", right: "$$", display: true }, + { left: "\\[", right: "\\]", display: true }, + { left: "$", right: "$", display: false }, + { left: "\\(", right: "\\)", display: false } + ] + } + ); + + // clean internal links in mermaid elements + var mermaids = document.getElementsByClassName("language-mermaid"); + + for (var i = 0; i < mermaids.length; i++) { + + var mermaidLinks = mermaids[i].getElementsByTagName('a'); + + for (f = 0; f < mermaidLinks.length;) { + + var linkElement = mermaidLinks[f] + + if (linkElement.getAttribute("href").startsWith(uriPath)) { + + var textonly = '[[' + linkElement.innerHTML + ']]'; + linkElement.replaceWith(textonly) + } + + } + + } + + //render mermaid + mermaid.init(undefined, document.querySelectorAll(".language-mermaid")); + + //scroll to anchor + + if (anchor != "") { + scrollToAnchor(anchor.substring(1)); + } + + + } + }); + } +}; + +/** + * Gets the state of the graph setting inputs as a list. + * The options in order are: \ + * [showNoLinks, showTags, sizeDepsOnConns] + * @returns {Array} + */ +function getGraphConfig() { + var showNoLinks = !$(".graphNoLinkOption").hasClass('is-enabled') + var showTags = $(".graphShowTagsOption").hasClass("is-enabled") + var sizeDepsOnConns = $(".graphSizeDepsOnConnsOption").hasClass("is-enabled") + + return [showNoLinks, showTags, sizeDepsOnConns]; +} + +/** + * vis js stuff + * @param {Boolean} modal + * @param {String} path + * @param {Boolean} filter_emptyNodes + * @param {Boolean} show_tags + * @param {Boolean} sizeDepsOnConns + */ +function renderGraph(modal, path = "", filter_emptyNodes = false, show_tags = true, sizeDepsOnConns = false) { + + // no graph found exit + if ($("#allGraphNodes").length == 0 || $("#allGraphNodes").text == '[]') { + console.log("Graph: no data found") + return; + } + + + var visNodes = document.getElementById('allGraphNodes').textContent; + var visEdges = document.getElementById('allGraphEdges').textContent; + + var jsonNodes = JSON.parse(visNodes); + var jsonEdges = JSON.parse(visEdges); + + var currId = 0; + path = decodeURIComponent(path); + if (path == 'home') { + path = '/' + homeFile; + } + + + // reset backlings count + + $('#backlinksCount').text(0); + + // get current node + for (const x in jsonNodes) { + if (path == ('/' + (jsonNodes[x]['title']).replace('&', '&'))) { + currId = jsonNodes[x]['id']; + break; + } + else if (modal == false) { + currId = -1; + } + } + + // cancel graph display if no node was found + if (currId == -1) { + return; + } + + // Graph Defaults + + nodeSize = parseInt($('.slider.nodeSize').val()) + varLinkDistance = parseInt($('.slider.linkDistance').val()) + varLinkThickness = parseFloat($('.slider.linkThickness').val()) + varGraphStyle = $('#graphStyleDropdown').val() + + + var options = { + interaction: { + hover: true, + }, + layout: { + improvedLayout: true, + clusterThreshold: 10000, + }, + physics: { + solver: 'forceAtlas2Based', + solver: 'barnesHut', + enabled: true, + stabilization: { + enabled: true, + iterations: 1000, + updateInterval: 10, + onlyDynamicEdges: false, + fit: true + } + }, + // configure: { + // enabled: true, + // filter: 'nodes,edges', + // container: container, + // showButton: true + // } , + edges: { + length: varLinkDistance, + width: varLinkThickness, + color: getComputedStyle(document.querySelector('.graph-view.color-line')).color, + smooth: { + type: varGraphStyle, + enabled: true, + } + }, + + nodes: { + shape: 'dot', + size: nodeSize, + scaling: { + min: 10, + max: 30 + }, + font: { + size: 16, + color: getComputedStyle(document.querySelector('.graph-view.color-text')).color, + }, + borderWidth: 1, + color: { + background: getComputedStyle(document.querySelector('.graph-view.color-fill')).color, + border: getComputedStyle(document.querySelector('.graph-view.color-fill')).color, + highlight: { + border: getComputedStyle(document.querySelector('.graph-view.color-fill')).color, + background: getComputedStyle(document.querySelector('.graph-view.color-fill')).color, + }, + hover: { + border: getComputedStyle(document.querySelector('.graph-view.color-fill')).color, + background: getComputedStyle(document.querySelector('.graph-view.color-fill-highlight')).color, + }, + }, + }, + + groups: { + tag: { + color: { + background: getComputedStyle(document.querySelector('.graph-view.color-fill-tag')).color, + border: getComputedStyle(document.querySelector('.graph-view.color-fill-tag')).color, + highlight: { + border: getComputedStyle(document.querySelector('.graph-view.color-fill-tag')).color, + background: getComputedStyle(document.querySelector('.graph-view.color-fill-tag')).color, + }, + } + } + } + }; + + var network; + + // show the whole graph + if (modal) { + + var container_modal = document.getElementById('graph_all'); + + var nodes = new vis.DataSet(jsonNodes); + var edges = new vis.DataSet(jsonEdges); + + edgeView = edges; + nodeView = nodes; + + if (filter_emptyNodes) { + nodeView = new vis.DataView(nodes, { + filter: function (node) { + connEdges = edgeView.get({ + filter: function (edge) { + if (node.id == currId) { + return true; + } + return ( + (edge.to == node.id) || (edge.from == node.id)); + } + }); + return connEdges.length > 0; + } + }); + + } + + // filter out tags + if (!show_tags) { + nodeView = new vis.DataView(nodes, { + filter: function (node) { + return !(node.group && node.group === "tag"); + } + }) + } + + // overwrite scaling function to make all nodes the same size + if (!sizeDepsOnConns) { + options["nodes"]["scaling"]["customScalingFunction"] = function (min, max, total, value) { + var maxSize = options["nodes"]["scaling"]["max"] + var minSize = options["nodes"]["scaling"]["min"] + + var diff = maxSize - minSize; + + return Math.max(0, (nodeSize - minSize) / diff); // reverse vis size calculation + } + } + + // provide the data in the vis format + var data = { + nodes: nodeView, + edges: edgeView + }; + + network = new vis.Network(container_modal, data, options); + + // show loading status + document.getElementById("loading-text").innerText = "loading graph: 0%"; + document.getElementById("loading-text").style.display = "unset"; + + network.on("stabilizationProgress", function (params) { + var widthFactor = params.iterations / params.total; + document.getElementById("loading-text").innerText = "loading graph: " + Math.round(widthFactor * 100) + "%"; + }); + + network.once("stabilizationIterationsDone", function () { + document.getElementById("loading-text").innerText = "loading graph: 100%"; + // really clean the dom element + setTimeout(function () { + document.getElementById("loading-text").style.display = "none"; + }, 500); + }); + + + + + //network.selectNodes([currId]); + var node = network.body.nodes[currId]; + node.setOptions({ + font: { + size: 20 + }, + color: { + background: getComputedStyle(document.querySelector('.graph-view.color-fill-focused')).color, + }, + }); + + + + // local Graph + } else { + + var myNodes = []; + var myEdges = []; + + options['edges']['length'] = 250; + + // add current node + for (const x in jsonNodes) { + jsonNodes[x]['label'] = (jsonNodes[x]['label']).replace('&', '&') + jsonNodes[x]['title'] = (jsonNodes[x]['title']).replace('&', '&') + if (path == ('/' + jsonNodes[x]['title'])) { + myNodes.push(jsonNodes[x]) + curNode = myNodes[0] + curNode.size = '20'; + curNode.color = { + background: getComputedStyle(document.querySelector('.graph-view.color-fill-focused')).color, + }; + + break; + } + } + + + function idExists(id) { + return myNodes.some(function (el) { + return el.id === id; + }); + } + + + // search linked nodes + for (const y in jsonEdges) { + if (currId == jsonEdges[y]['from']) { + + // add "To" node to the nodes + for (const x in jsonNodes) { + if (jsonEdges[y]['to'] == jsonNodes[x]['id']) { + if (!idExists(jsonNodes[x]['id'])) { + myNodes.push(jsonNodes[x]) + } + break; + } + } + + // add the link + myEdges.push(jsonEdges[y]); + + // search the backlinks + } else if (currId == jsonEdges[y]['to']) { + + // add "From" node to the nodes + for (const x in jsonNodes) { + if (jsonEdges[y]['from'] == jsonNodes[x]['id']) { + if (!idExists(jsonNodes[x]['id'])) { + myNodes.push(jsonNodes[x]) + } + break; + } + } + + // add the backlink + myEdges.push(jsonEdges[y]); + curr = $('#backlinksCount').text(); + $('#backlinksCount').text(parseInt(curr) + 1); + } + + } + + // build network structure + + var nodes = new vis.DataSet(myNodes); + var edges = new vis.DataSet(myEdges); + + // filter out tags + if (!show_tags) { + nodeView = new vis.DataView(nodes, { + filter: function (node) { + return !(node.group && node.group === "tag"); + } + }) + } + + // overwrite scaling function to make all nodes the same size + options["nodes"]["scaling"]["customScalingFunction"] = function (min, max, total, value) { + var maxSize = options["nodes"]["scaling"]["max"] + var minSize = options["nodes"]["scaling"]["min"] + + var diff = maxSize - minSize; + + return Math.max(0, (nodeSize - minSize) / diff); // reverse vis size calculation + } + + var data = { + nodes: nodes, + edges: edges + }; + + // update linked mentions + $("#nodeCount").text(nodes.length - 1); + + var container = document.getElementById('mynetwork'); + network = new vis.Network(container, data, options); + + + } + + // jump to file function + if (network) { + + network.on("click", function (properties) { + + if (!properties.nodes.length) return; + var node = nodes.get(properties.nodes[0]); + + if (node.group && node.group === "tag") { + $('.workspace-tab-header[data-type="search"]').click(); + $('*[type="search"]').val(node.title); + search(node.title); + + } else { + var glink = uriPath + node.title; + window.open(glink, "_self"); + } + }); + } + +}; + +/** + * change mobile settings + */ +function isMobile() { + + if ($(window).width() < 990) { + + hideLeftMobile(); + + //disable mousehover on mobile + $('.internal-link').unbind("mouseenter"); + $('.internal-link').unbind("mouseleave"); + + //override click for internal-links to use popUp instead + if ($('.popUpSetting').hasClass('is-enabled')) { + $('.internal-link').click(function (e) { + e.preventDefault(); + const urlParams = new URLSearchParams(this.href.split('?')[1]); + if (urlParams.has('link')) { + var target = urlParams.get('link'); + target = encodeURIComponent(target); + } else { + + const path = new URL(this.href).pathname; + target = unslugURL(path) + + } + + + if (target) { + getContent(target, false, true) + } + $("#popUp").css("display", "flex"); + $(".goToLink").html(' go to site

') + }) + + } + } + +}; + +function hideLeftMobile() { + + $('.workspace').removeClass('is-left-sidedock-open'); + $('.mod-left-split').addClass('is-sidedock-collapse'); + $('.mod-left').addClass('is-collapsed'); + //$('.workspace-ribbon.side-dock-ribbon.mod-left').css('display', 'none'); + +}; + +/** + * search + * @param {String} str + */ +function search(str) { + if (str.length == 0) { + $("div.search-results-children").html(""); + return; + } else { + + str = encodeURIComponent(str); + + $.ajax({ + url: uriPath + "content.php?search=" + str, success: function (result) { + + $("div.search-results-children").html(result); + let preCodes = $("div.search-results-children").find("pre code") + for (var i = 0; i < preCodes.length; i++) { + hljs.highlightElement(preCodes[i]); + } + } + }); + } +}; + +// edit button + +/** + * @param {String} name + * @returns {string} + */ +function getCookie(name) { + const value = `; ${document.cookie}`; + const parts = value.split(`; ${name}=`); + if (parts.length === 2) return parts.pop().split(';').shift(); +}; + +/** + * helper + * @param {String} oldClass + * @param {String} newClass + */ +function replaceClass(oldClass, newClass) { + var elem = $("." + oldClass); + elem.removeClass(oldClass); + elem.addClass(newClass); +}; + +/** + * search entry + * @param {Event} e + */ +function toggleSearchEntry(e) { + + el = $(e.target); + //e.preventDefault(); + + if (el.hasClass('svg-icon right-triangle')) { + el = el.parent().parent().parent() + } else if (el.hasClass('tree-item-icon collapse-icon')) { + el = el.parent().parent() + } else { + return + } + + if (el.hasClass('is-collapsed')) { + el.removeClass('is-collapsed'); + el.find('.search-result-file-matches').css("display", "unset"); + + } else { + el.addClass('is-collapsed'); + el.find('.search-result-file-matches').css("display", "none"); + } + +}; + +/** + * nav menu collapse functions + * @param {Event} e + */ +function toggleNavFolder(e) { + el = $(e.target); + + + if (el.hasClass('nav-folder-title-content')) { + elIcon = el.prev() + el = el.parent() + el = el.next(el) + } else if (el.hasClass('collapse-icon')) { + elIcon = el + el = el.parent() + el = el.next(el) + } else if (el.hasClass('mod-collapsible')) { + elIcon = el.children()[0] + elIcon = $(elIcon) + el = el.next(el) + } else if (el.hasClass('svg-icon right-triangle')) { + elIcon = el.parent() + el = el.parent().parent() + el = el.next(el) + } else if (el.is('path')) { + el = el.parent().parent().parent() + el = el.next(el) + + } + + if (elIcon.hasClass('is-collapsed')) { + elIcon.removeClass('is-collapsed'); + + } else { + elIcon.addClass('is-collapsed'); + } + + if (el.hasClass('collapse')) { + el.removeClass('collapse'); + + } else { + el.addClass('collapse'); + } + + return +}; + +/** + * + * @param {String} target + * @param {Boolean} openAll + */ +function openNavMenu(target, openAll = false) { + + // open nav menu to target + var navId = decodeURIComponent(target); + linkname = navId.match(/([^\/]*)\/*$/)[1] + + // search and open tree reverse + navId = navId.replace(/[^a-zA-Z0-9\-]/g, '_'); + var next = $('#' + navId).parent().closest('.collapse'); + + do { + next.removeClass('collapse'); + elIcon = next.prev().children()[0] + elIcon = $(elIcon) + elIcon.removeClass('is-collapsed'); + next = next.parent().closest('.collapse'); + } + while (next.length != 0); + + + // set focus to link + var searchText = linkname; + + $("div").filter(function () { + return $(this).text() === searchText; + }).parent().addClass('perlite-link-active is-active'); + +}; + +function hideTooltip() { + $('.tooltip').css("display", "none") +}; + + + +// on document ready stuff +$(document).ready(function () { + + + // load settings from storage + // ---------------------------------------- + + // text size + if (localStorage.getItem('Font_size')) { + $('body').css('--font-text-size', localStorage.getItem('Font_size') + 'px'); + } + + $('.slider.font-size').val(parseInt($('body').css('--font-text-size'))); + + + // popHovers + if (localStorage.getItem('disablePopUp') === 'true') { + $('.disablePopUp').addClass('is-enabled') + } else if (localStorage.getItem('disablePopUp') === 'false') { + $('.disablePopUp').removeClass('is-enabled') + } + + // inline title + if (localStorage.getItem('InlineTitle') === 'hide') { + $('.inlineTitleOption').removeClass('is-enabled') + $('body').removeClass('show-inline-title') + } + + // metadata + if (localStorage.getItem('Metadata') === 'hide') { + $('.metadataOption').addClass('is-enabled') + $('.metadata-container').addClass('is-collapsed'); + } + + // light mode + if (localStorage.getItem('lightMode') === 'true') { + $('body').removeClass('theme-dark') + $('body').addClass('theme-light') + $('.darkModeOption').removeClass('is-enabled') + } + + // popUp Setting + if (localStorage.getItem('popUpEnabled') === 'true') { + $('.popUpSetting').addClass('is-enabled') + } + + + + // graph settings & defaults + + if (localStorage.getItem('Graph_Style')) { + $('#graphStyleDropdown').val(localStorage.getItem('Graph_Style')) + } else { + $('#graphStyleDropdown').val('dynamic') + } + + if (localStorage.getItem('Graph_NodeSize')) { + $('.slider.nodeSize').val(localStorage.getItem('Graph_NodeSize')) + } else { + $('.slider.nodeSize').val(12) + } + + if (localStorage.getItem('Graph_LinkDistance')) { + $('.slider.linkDistance').val(localStorage.getItem('Graph_LinkDistance')) + } else { + $('.slider.linkDistance').val(150) + } + + if (localStorage.getItem('Graph_LinkThickness')) { + $('.slider.linkThickness').val(localStorage.getItem('Graph_LinkThickness')) + } else { + $('.slider.linkThickness').val(1) + } + + if (localStorage.getItem('Graph_Orphans') === 'hide') { + $('.graphNoLinkOption').removeClass('is-enabled') + } + + if (localStorage.getItem('Graph_Tags') === 'hide') { + $('.graphShowTagsOption').removeClass('is-enabled') + } + + if (localStorage.getItem('Graph_NodeScaling') === 'depsOnSize') { + $('.graphSizeDepsOnConnsOption').addClass('is-enabled') + } + + if (localStorage.getItem('Graph_Autoreload') === 'no') { + $('.graphAutoReloadOption').removeClass('is-enabled') + } + + + // panel sizes + if (localStorage.getItem('leftSizePanel')) { + $('.workspace-split.mod-horizontal.mod-left-split').css("width", localStorage.getItem('leftSizePanel')) + } else { + $('.workspace-split.mod-horizontal.mod-left-split').css("width", window.innerWidth / 6) + } + + if (localStorage.getItem('rightSizePanel')) { + $('.workspace-split.mod-horizontal.mod-right-split').css("width", localStorage.getItem('rightSizePanel')) + } else { + $('.workspace-split.mod-horizontal.mod-right-split').css("width", window.innerWidth / 6) + } + + + //check for graph and hide local graph if none exists + if ($("#allGraphNodes").length == 0 || $("#allGraphNodes").text == '[]') { + + $('.clickable-icon.side-dock-ribbon-action[aria-label="Open graph view"]').css('display', 'none') + $('.clickable-icon.view-action[aria-label="Open outline"]').css('display', 'none') + $('.clickable-icon.view-action[aria-label="Open localGraph"]').css('display', 'none') + $('#localGraph').css('display', 'none') + $('#outline').css('display', 'inline') + + } + + + // direct links + const queryString = window.location.search; + const urlParams = new URLSearchParams(queryString); + + var target = ""; + if (urlParams.has('link')) { + var target = urlParams.get('link'); + + } else { + + target = unslugURL(window.location.pathname) + + } + + if (window.location.pathname != uriPath | urlParams.has('link')) { + + target = encodeURIComponent(target) + + var hash = window.location.hash; + + getContent(target, false, false, hash); + openNavMenu(target); + + } else { + + // load index page + getContent("home", true); + } + // on search submit + $('*[type="search"]').on('keypress', function (e) { + if (e.which == 13) { + search(this.value); + return false; + } + + }); + + + //mark current active menu item + $('.perlite-link').click(function (e) { + + e.preventDefault(); + $('.perlite-link').removeClass('perlite-link-active is-active'); + + $(this).addClass('perlite-link-active is-active'); + }); + + + + // toggle left sidedock + $('.sidebar-toggle-button.mod-left.sidebar').click(function (e) { + + e.preventDefault(); + + + if ($('.sidebar-toggle-button.mod-left.sidebar').hasClass('is-collapsed')) { + $('.workspace').addClass('is-left-sidedock-open'); + $('.mod-left-split').removeClass('is-sidedock-collapse'); + $('.mod-left').removeClass('is-collapsed'); + + } else { + + $('.workspace').removeClass('is-left-sidedock-open'); + $('.mod-left-split').addClass('is-sidedock-collapse'); + $('.mod-left').addClass('is-collapsed'); + } + + }); + + + $('.sidebar-toggle-button.mod-left.mobile-display').click(function (e) { + + if ($('.workspace-ribbon.side-dock-ribbon.mod-left').is(':hidden')) { + $('.workspace-ribbon.side-dock-ribbon.mod-left').css('display', 'flex') + } else { + $('.workspace-ribbon.side-dock-ribbon.mod-left').css('display', 'none') + } + + }) + + + + // toggle right sidedock + $('.sidebar-toggle-button.mod-right').click(function (e) { + + e.preventDefault(); + + if ($('.sidebar-toggle-button.mod-right').hasClass('is-collapsed')) { + $('.workspace').addClass('is-right-sidedock-open'); + $('.mod-right-split').removeClass('is-sidedock-collapse'); + $('.mod-right').removeClass('is-collapsed'); + + } else { + + $('.workspace').removeClass('is-right-sidedock-open'); + $('.mod-right-split').addClass('is-sidedock-collapse'); + $('.mod-right').addClass('is-collapsed'); + } + + }); + + + // click search + $('.workspace-tab-header[data-type="search"]').click(function (e) { + e.preventDefault(); + + $('.workspace-leaf-content[data-type="search"]').parent().css("display", "unset"); + $('.workspace-leaf-content[data-type="file-explorer"]').parent().css("display", "none"); + $('.workspace-tab-header[data-type="search"]').addClass('is-active mod-active'); + $('.workspace-tab-header[data-type="file-explorer"]').removeClass('is-active mod-active'); + + // set focus to search field + $('input[type=search]').focus(); + + }); + + // click file-explorer + $('.workspace-tab-header[data-type="file-explorer"]').click(function (e) { + e.preventDefault(); + $('.workspace-leaf-content[data-type="file-explorer"]').parent().css("display", "unset"); + $('.workspace-leaf-content[data-type="search"]').parent().css("display", "none"); + $('.workspace-tab-header[data-type="file-explorer"]').addClass('is-active mod-active'); + $('.workspace-tab-header[data-type="search"]').removeClass('is-active mod-active'); + }); + + // click expand-search-all + $('.clickable-icon.nav-action-button[aria-label="Collapse results"]').click(function (e) { + e.preventDefault(); + + if ($('.tree-item.search-result').hasClass('is-collapsed')) { + $('.tree-item.search-result').removeClass('is-collapsed'); + $('.search-result-file-matches').css("display", "unset"); + $('.clickable-icon.nav-action-button[aria-label="Collapse results"]').removeClass('is-active'); + + } else { + $('.tree-item.search-result').addClass('is-collapsed'); + $('.search-result-file-matches').css("display", "none"); + $('.clickable-icon.nav-action-button[aria-label="Collapse results"]').addClass('is-active'); + } + }); + + + // click expand-file-explorer-all + $('.clickable-icon.nav-action-button[aria-label="Expand all"]').click(function (e) { + e.preventDefault(); + target = $(e.target) + + $('.nav-folder-children.collapse').removeClass('collapse') + $('.nav-folder').removeClass('is-collapsed'); + $('.collapse-icon').removeClass('is-collapsed'); + $('.clickable-icon.nav-action-button[aria-label="Collapse all"]').css('display', 'unset'); + target.css('display', 'none'); + + }); + + + // click collapse file-explorer-all + $('.clickable-icon.nav-action-button[aria-label="Collapse all"]').click(function (e) { + e.preventDefault(); + target = $(e.target) + + parents = $('.nav-folder-children').parent() + + parents.each(function (index, value) { + parent = $(this) + if (!$(this).hasClass('mod-root')) { + parent.find('.nav-folder-children').addClass('collapse'); + parent.find('.collapse-icon').addClass('is-collapsed'); + } + }) + + $('.nav-folder').addClass('is-collapsed'); + $('.clickable-icon.nav-action-button[aria-label="Expand all"]').css('display', 'unset'); + target.css('display', 'none'); + + }); + + + // copy URL function + $('.clickable-icon.view-action[aria-label="Copy URL"]').click(function (e) { + e.preventDefault(); + target = $(e.target) + var text = window.location.href; + $('.tooltip').css("top", target.offset().top + 39); + $('.tooltip').css("left", target.offset().left); + $('.tooltip').css("height", "25px"); + $('.tooltip').css("display", "unset"); + + navigator.clipboard.writeText(text).then(function () { + $('.tooltip').text("URL copied to clipboard!"); + }, function (err) { + $('.tooltip').text("Could not copy URL"); + console.error('Async: Could not copy URL: ', err); + }); + + setTimeout(hideTooltip, 1500); + }); + + + + // rezise Handler right + const rightDockContainer = $('.workspace-split.mod-horizontal.mod-right-split') + $('.workspace-leaf-resize-handle.right-dock').mousedown(function (e) { + + e.preventDefault() + + $(document).mouseup(function (e) { + $(document).unbind('mousemove') + localStorage.setItem('rightSizePanel', rightDockContainer.css("width")) + }); + + $(document).mousemove(function (e) { + e.preventDefault() + rightDockContainer.css("width", $(document).width() - e.pageX) + + }); + + }); + + + // rezise Handler left + const leftDockContainer = $('.workspace-split.mod-horizontal.mod-left-split') + $('.workspace-leaf-resize-handle.left-dock').mousedown(function (e) { + + e.preventDefault() + + + $(document).mouseup(function (e) { + $(document).unbind('mousemove') + localStorage.setItem('leftSizePanel', leftDockContainer.css("width")) + }); + + $(document).mousemove(function (e) { + e.preventDefault() + leftDockContainer.css("width", e.pageX) + + }); + + }); + + + + // Global Settings and Event Handler + // -------------------------------- + + // load themes + var dropDownValues = ''; + var perliteDefault = "" + $('.theme').each(function (i) { + themeName = $(this).data('themename'); + themeId = $('.theme')[i].id; + dropDownValues += '' + + // get current active + if (!$('.theme')[i].disabled) { + perliteDefault = $('.theme')[i].id; + } + + }) + + + // fill dropdown + $('#themeDropdown').html(dropDownValues); + + // change theme + $("#themeDropdown").change(function (e) { + target = $(e.target) + + // disable all themes + $('.theme').attr("disabled", 'disabled'); + + //enable selected if its not default + selectedTheme = target.val() + + if (selectedTheme !== 'Default') { + $('#' + target.val()).attr('disabled', false); + } + + localStorage.setItem('Theme', target.val()); + + }); + + //set active theme + if (localStorage.getItem('Theme')) { + $('#themeDropdown').val(localStorage.getItem('Theme')); + $("#themeDropdown").trigger('change'); + + } else { + $('#themeDropdown').val(perliteDefault); + } + + + // reset Theme + $('#resetTheme').click(function () { + $('#themeDropdown').val(perliteDefault); + $('#themeDropdown').change(); + localStorage.removeItem('Theme'); + }) + + // text size input slider + $('.slider.font-size').click(function (e) { + e.preventDefault(); + target = $(e.target) + + $('body').css('--font-text-size', target.val() + 'px') + localStorage.setItem('Font_size', target.val()); + + $('.slider.font-size').val(parseInt($('body').css('--font-text-size'))); + + }); + + // Textsize Restore Defaults Button + $('.clickable-icon[aria-label="Restore text settings"]').click(function (e) { + e.preventDefault(); + + $('body').css('--font-text-size', '15px') + localStorage.removeItem('Font_size') + $('.slider.font-size').val(parseInt($('body').css('--font-text-size'))); + + }); + + // Panelsize Restore Defaults Button + $('.clickable-icon[aria-label="Restore panel settings"]').click(function (e) { + e.preventDefault(); + + localStorage.removeItem('rightSizePanel') + localStorage.removeItem('leftSizePanel') + + $('.workspace-split.mod-horizontal.mod-left-split').css("width", "450px") + $('.workspace-split.mod-horizontal.mod-right-split').css("width", "450px") + }); + + + + // inLine Title Option + $('.inlineTitleOption').click(function (e) { + e.preventDefault(); + target = $('.inlineTitleOption') + + if (target.hasClass('is-enabled')) { + target.removeClass('is-enabled') + $('body').removeClass('show-inline-title') + localStorage.setItem('InlineTitle', 'hide'); + + } else { + target.addClass('is-enabled') + $('body').addClass('show-inline-title') + localStorage.removeItem('InlineTitle'); + + } + }); + + + // Disable PopHover Option + $('.disablePopUp').click(function (e) { + e.preventDefault(); + target = $('.disablePopUp') + + if (target.hasClass('is-enabled')) { + target.removeClass('is-enabled') + localStorage.setItem('disablePopUp', 'false'); + + } else { + target.addClass('is-enabled') + localStorage.setItem('disablePopUp', 'true'); + + } + }); + + // Darkmode / Lightmode change + $('.darkModeOption').click(function (e) { + e.preventDefault(); + target = $('.darkModeOption') + + if (target.hasClass('is-enabled')) { + target.removeClass('is-enabled') + + $('body').removeClass('theme-dark') + $('body').addClass('theme-light') + localStorage.setItem('lightMode', 'true'); + + } else { + target.addClass('is-enabled') + $('body').removeClass('theme-light') + $('body').addClass('theme-dark') + localStorage.removeItem('lightMode'); + + } + }); + + // PopUp change (mobile only) + $('.popUpSetting').click(function (e) { + e.preventDefault(); + target = $('.popUpSetting') + + if (target.hasClass('is-enabled')) { + target.removeClass('is-enabled') + localStorage.removeItem('popUpEnabled'); + + } else { + target.addClass('is-enabled') + localStorage.setItem('popUpEnabled', 'true'); + + } + }); + + + // collapse Metadata Option + $('.metadataOption').click(function (e) { + e.preventDefault(); + target = $('.metadataOption') + + if (target.hasClass('is-enabled')) { + target.removeClass('is-enabled') + if ($('.metadata-container').hasClass('is-collapsed')) { + $('.metadata-container').removeClass('is-collapsed'); + } + localStorage.removeItem('Metadata'); + + } else { + target.addClass('is-enabled') + + if (!$('.metadata-container').hasClass('is-collapsed')) { + $('.metadata-container').addClass('is-collapsed'); + localStorage.setItem('Metadata', 'hide'); + } + } + }); + + + // Graph Settings and Event Handler + // -------------------------------- + // open Graph + $('.clickable-icon.side-dock-ribbon-action[aria-label="Open graph view"]').click(function (e) { + e.preventDefault(); + + str = document.getElementsByClassName('perlite-link-active'); + isMobile(); + + if (str[0] != undefined) { + str = str[0].getAttribute('onclick'); + str = str.substring(0, str.length - 3); + str = str.substring(12, str.length); + + } else { + str = ""; + } + + [showNoLinks, showTags, sizeDepsOnConns] = getGraphConfig() + renderGraph(true, str, showNoLinks, showTags, sizeDepsOnConns); + + if ($('.view-header-nav-buttons[data-section="close"]').is(':hidden')) { + // show graph and close button + $('.view-header-nav-buttons[data-section="close"]').css('display', 'flex'); + $('#graph_content').css('display', 'unset'); + $('.markdown-reading-view').css('display', 'none'); + + // hide right side-dock + $('.workspace').removeClass('is-right-sidedock-open'); + $('.mod-right-split').addClass('is-sidedock-collapse'); + $('.mod-right').addClass('is-collapsed'); + + } else { + + $('.view-header-nav-buttons[data-section="close"]').click(); + + } + + + }); + + // close Graph + $('.view-header-nav-buttons[data-section="close"]').click(function (e) { + e.preventDefault(); + + // hide graph and close button + $('.view-header-nav-buttons[data-section="close"]').css('display', 'none'); + $('#graph_content').css('display', 'none'); + $('.markdown-reading-view').css('display', 'flex'); + + // show right side-dock + $('.workspace').addClass('is-right-sidedock-open'); + $('.mod-right-split').removeClass('is-sidedock-collapse'); + $('.mod-right').removeClass('is-collapsed'); + }); + // open Graph settings + $('.clickable-icon.graph-controls-button.mod-open[aria-label="Open graph settings"]').click(function (e) { + e.preventDefault(); + + target = $(e.target) + $('.graph-controls').removeClass('is-close') + }); + + // close Graph settings + $('.clickable-icon.graph-controls-button.mod-close[aria-label="Close"]').click(function (e) { + e.preventDefault(); + $('.graph-controls').addClass('is-close') + }); + + // Graph Show Links Option (Orphans) + $('.graphNoLinkOption').click(function (e) { + e.preventDefault(); + target = $('.graphNoLinkOption') + + if (target.hasClass('is-enabled')) { + target.removeClass('is-enabled') + + if ($('.graphAutoReloadOption').hasClass('is-enabled')) { + [showNoLinks, showTags, sizeDepsOnConns] = getGraphConfig() + renderGraph(true, str, true, showTags, sizeDepsOnConns); + } + + localStorage.setItem('Graph_Orphans', 'hide'); + + + } else { + target.addClass('is-enabled') + if ($('.graphAutoReloadOption').hasClass('is-enabled')) { + [showNoLinks, showTags, sizeDepsOnConns] = getGraphConfig() + renderGraph(true, str, false, showTags, sizeDepsOnConns); + } + localStorage.removeItem('Graph_Orphans'); + } + }); + + // Graph Show Tags Option + $('.graphShowTagsOption').click(function (e) { + e.preventDefault(); + target = $('.graphShowTagsOption') + + if (target.hasClass('is-enabled')) { + target.removeClass('is-enabled') + + if ($('.graphAutoReloadOption').hasClass('is-enabled')) { + [showNoLinks, showTags, sizeDepsOnConns] = getGraphConfig() + renderGraph(true, str, showNoLinks, false, sizeDepsOnConns); + } + + localStorage.setItem('Graph_Tags', 'hide'); + + } else { + target.addClass('is-enabled') + if ($('.graphAutoReloadOption').hasClass('is-enabled')) { + [showNoLinks, showTags, sizeDepsOnConns] = getGraphConfig() + renderGraph(true, str, showNoLinks, true, sizeDepsOnConns); + } + localStorage.removeItem('Graph_Tags'); + } + }); + + // Graph Node Size Depends On Node Connection Number Option + $('.graphSizeDepsOnConnsOption').click(function (e) { + e.preventDefault(); + target = $('.graphSizeDepsOnConnsOption') + + if (target.hasClass('is-enabled')) { + target.removeClass('is-enabled') + + if ($('.graphAutoReloadOption').hasClass('is-enabled')) { + [showNoLinks, showTags, sizeDepsOnConns] = getGraphConfig() + renderGraph(true, str, showNoLinks, showTags, false); + } + + localStorage.setItem('Graph_NodeScaling', 'default'); + + } else { + target.addClass('is-enabled') + if ($('.graphAutoReloadOption').hasClass('is-enabled')) { + [showNoLinks, showTags, sizeDepsOnConns] = getGraphConfig() + renderGraph(true, str, showNoLinks, showTags, true); + } + localStorage.setItem('Graph_NodeScaling', 'depsOnSize'); + } + }); + + // Graph Auto-reload Option + $('.graphAutoReloadOption').click(function (e) { + e.preventDefault(); + target = $('.graphAutoReloadOption') + + if (target.hasClass('is-enabled')) { + target.removeClass('is-enabled') + localStorage.setItem('Graph_Autoreload', 'no'); + + } else { + target.addClass('is-enabled') + localStorage.removeItem('Graph_Autoreload'); + } + }); + + // Graph Node Size Option + $('.nodeSize').click(function (e) { + e.preventDefault(); + target = $(e.target) + + $('#nodeSizeVal').text(target.val()) + + if ($('.graphAutoReloadOption').hasClass('is-enabled')) { + [showNoLinks, showTags, sizeDepsOnConns] = getGraphConfig() + renderGraph(true, str, showNoLinks, showTags, sizeDepsOnConns); + } + + localStorage.setItem('Graph_NodeSize', target.val()); + + }); + // Graph Link Distance Option + $('.linkDistance').click(function (e) { + e.preventDefault(); + target = $(e.target) + + $('#linkDistanceVal').text(target.val()) + var showNoLinks = !$(".graphNoLinkOption").hasClass('is-enabled') + if ($('.graphAutoReloadOption').hasClass('is-enabled')) { + [showNoLinks, showTags, sizeDepsOnConns] = getGraphConfig() + renderGraph(true, str, showNoLinks, showTags, sizeDepsOnConns); + } + localStorage.setItem('Graph_LinkDistance', target.val()); + + }); + // Graph Link Thickness Option + $('.linkThickness').click(function (e) { + e.preventDefault(); + target = $(e.target) + + $('#linkThicknessVal').text(target.val()) + var showNoLinks = !$(".graphNoLinkOption").hasClass('is-enabled') + if ($('.graphAutoReloadOption').hasClass('is-enabled')) { + [showNoLinks, showTags, sizeDepsOnConns] = getGraphConfig() + renderGraph(true, str, showNoLinks, showTags, sizeDepsOnConns); + } + localStorage.setItem('Graph_LinkThickness', target.val()); + + }); + + // Graph Style Change + $("#graphStyleDropdown").change(function (e) { + e.preventDefault(); + target = $(e.target) + if ($('.graphAutoReloadOption').hasClass('is-enabled')) { + [showNoLinks, showTags, sizeDepsOnConns] = getGraphConfig() + renderGraph(true, str, showNoLinks, showTags, sizeDepsOnConns); + } + localStorage.setItem('Graph_Style', target.val()); + }); + + // Graph Reload Button + $("#graphReload").click(function (e) { + [showNoLinks, showTags, sizeDepsOnConns] = getGraphConfig() + renderGraph(true, str, showNoLinks, showTags, sizeDepsOnConns); + + }); + + // Graph Restore Defaults Button + $('.clickable-icon.graph-controls-button.mod-reset[aria-label="Restore default settings"]').click(function (e) { + e.preventDefault(); + + if (!$('.graphNoLinkOption').hasClass('is-enabled')) { + $('.graphNoLinkOption').addClass('is-enabled') + } + + if (!$(".graphShowTagsOption").hasClass("is-enabled")) { + $(".graphShowTagsOption").addClass("is-enabled") + } + + if ($(".graphSizeDepsOnConnsOption").hasClass("is-enabled")) { + $(".graphSizeDepsOnConnsOption").removeClass("is-enabled") + } + + if (!$('.graphAutoReloadOption').hasClass('is-enabled')) { + $('.graphAutoReloadOption').addClass('is-enabled') + } + + $('.slider.linkThickness').val(1) + $('.slider.linkDistance').val(150) + $('.slider.nodeSize').val(12) + $('#graphStyleDropdown').val('dynamic') + + localStorage.removeItem('Graph_Orphans'); + localStorage.removeItem('Graph_ShowTags'); + localStorage.removeItem('Graph_NodeScaling') + localStorage.removeItem('Graph_Autoreload'); + localStorage.removeItem('Graph_Style'); + localStorage.removeItem('Graph_LinkDistance'); + localStorage.removeItem('Graph_LinkThickness'); + localStorage.removeItem('Graph_NodeSize'); + + + [showNoLinks, showTags, sizeDepsOnConns] = getGraphConfig() + renderGraph(true, str, showNoLinks, showTags, sizeDepsOnConns); + + }); + + + + + + // Modal Event Handler + // -------------------------------- + + // info modal + $('.clickable-icon.side-dock-ribbon-action[aria-label="Help"]').click(function (e) { + $.ajax({ + url: uriPath + "content.php?about", success: function (result) { + + $("div.aboutContent").html(result); + $("#about").css("display", "flex"); + //$(".modal-title").html('Perlite'); + // hljs.highlightAll(); + + } + }); + + }); + + // setting modal + $('.clickable-icon.side-dock-ribbon-action[aria-label="Settings"]').click(function (e) { + + $("#settings").css("display", "flex"); + + }); + + // open random note + $('.clickable-icon.side-dock-ribbon-action[aria-label="Open random note"]').click(function (e) { + + var nodes = JSON.parse($("#allGraphNodes").text()) + nodesCount = nodes.length + + min = Math.ceil(0); + max = Math.floor(nodesCount); + + // don't load tags as random nodes + do { + tag = true + randomNode = Math.floor(Math.random() * (max - min) + min) + if (nodes[randomNode]['title'].substring(0, 1) != "#") { + tag = false + } + + } while (tag); + + target = '/' + nodes[randomNode]['title'] + target = encodeURIComponent(target); + getContent(target) + + }); + + // open random note + $('.clickable-icon.side-dock-ribbon-action[aria-label="Open TOC"]').click(function (e) { + + console.log("open TOC") + + $("#popUpContent").html($("#toc").html()) + $(".popup-modal-title").text($(".popup-modal-title").text() + ' - Content'); + $("#popUp").css("display", "flex") + + }); + + /** + * close modal + * @param {String[]} elementIds + */ + function hideElements(elementIds) { + elementIds.forEach(function (id) { + $("#" + id).css("display", "none"); + }); + } + + $('.modal-close-button').click(function (e) { + hideElements(["settings", "about", "popUp", "img-modal"]); + }); + + $(document).keydown(function (e) { + if (e.key === "Escape") { + hideElements(["settings", "about", "popUp", "img-modal"]); + } + }); + + // local Graph & Tag & Toc (outline) Switch + $('.clickable-icon.view-action[aria-label="Open outline"]').click(function (e) { + + + if ($('#outline').css('display') == 'inline') { + localStorage.setItem("showTOC", "false") + $('#outline').css('display', 'none') + + + } else { + localStorage.setItem("showTOC", "true") + $('#outline').css('display', 'inline') + } + + }); + + $('.clickable-icon.view-action[aria-label="Open localGraph"]').click(function (e) { + + if ($('#localGraph').css('display') == 'inline') { + localStorage.setItem("showLocalGraph", "false") + $('#localGraph').css('display', 'none') + } else { + localStorage.setItem("showLocalGraph", "true") + $('#localGraph').css('display', 'inline') + } + }); + + $('.clickable-icon.view-action[aria-label="Open Tags"]').click(function (e) { + + if ($('#tags_container').css('display') == 'block') { + localStorage.setItem("showLocalTags", "false") + $('#tags_container').css('display', 'none') + } else { + localStorage.setItem("showLocalTags", "true") + $('#tags_container').css('display', 'block') + } + }); + + + // init mermaid + mermaid.initialize({ startOnLoad: false, 'securityLevel': 'Strict', 'theme': 'dark' }); + + + // handle browser history + window.addEventListener("popstate", function (event) { + + target = unslugURL(window.location.pathname) + getContent(target) + + }); + +}); + diff --git a/Perlite/perlite/.js/vis-network.min.js b/Perlite/perlite/.js/vis-network.min.js new file mode 100644 index 0000000..513a4fd --- /dev/null +++ b/Perlite/perlite/.js/vis-network.min.js @@ -0,0 +1,27 @@ +/** + * vis-network + * https://visjs.github.io/vis-network/ + * + * A dynamic, browser-based visualization library. + * + * @version 9.1.9 + * @date 2023-11-03T01:44:38.007Z + * + * @copyright (c) 2011-2017 Almende B.V, http://almende.com + * @copyright (c) 2017-2019 visjs contributors, https://github.com/visjs + * + * @license + * vis.js is dual licensed under both + * + * 1. The Apache 2.0 License + * http://www.apache.org/licenses/LICENSE-2.0 + * + * and + * + * 2. The MIT License + * http://opensource.org/licenses/MIT + * + * vis.js may be distributed under either license. + */ +!function(t,e){"object"==typeof exports&&"undefined"!=typeof module?e(exports):"function"==typeof define&&define.amd?define(["exports"],e):e((t="undefined"!=typeof globalThis?globalThis:t||self).vis=t.vis||{})}(this,(function(t){"use strict";var e="undefined"!=typeof globalThis?globalThis:"undefined"!=typeof window?window:"undefined"!=typeof global?global:"undefined"!=typeof self?self:{};function i(t){return t&&t.__esModule&&Object.prototype.hasOwnProperty.call(t,"default")?t.default:t}var n=function(t){return t&&t.Math===Math&&t},o=n("object"==typeof globalThis&&globalThis)||n("object"==typeof window&&window)||n("object"==typeof self&&self)||n("object"==typeof e&&e)||function(){return this}()||e||Function("return this")(),r=function(t){try{return!!t()}catch(t){return!0}},s=!r((function(){var t=function(){}.bind();return"function"!=typeof t||t.hasOwnProperty("prototype")})),a=s,h=Function.prototype,l=h.apply,d=h.call,c="object"==typeof Reflect&&Reflect.apply||(a?d.bind(l):function(){return d.apply(l,arguments)}),u=s,f=Function.prototype,p=f.call,v=u&&f.bind.bind(p,p),g=u?v:function(t){return function(){return p.apply(t,arguments)}},y=g,m=y({}.toString),b=y("".slice),w=function(t){return b(m(t),8,-1)},k=w,_=g,x=function(t){if("Function"===k(t))return _(t)},E="object"==typeof document&&document.all,O={all:E,IS_HTMLDDA:void 0===E&&void 0!==E},C=O.all,S=O.IS_HTMLDDA?function(t){return"function"==typeof t||t===C}:function(t){return"function"==typeof t},T={},M=!r((function(){return 7!==Object.defineProperty({},1,{get:function(){return 7}})[1]})),P=s,D=Function.prototype.call,I=P?D.bind(D):function(){return D.apply(D,arguments)},B={},N={}.propertyIsEnumerable,F=Object.getOwnPropertyDescriptor,z=F&&!N.call({1:2},1);B.f=z?function(t){var e=F(this,t);return!!e&&e.enumerable}:N;var A,j,R=function(t,e){return{enumerable:!(1&t),configurable:!(2&t),writable:!(4&t),value:e}},L=r,H=w,W=Object,q=g("".split),V=L((function(){return!W("z").propertyIsEnumerable(0)}))?function(t){return"String"===H(t)?q(t,""):W(t)}:W,U=function(t){return null==t},Y=U,X=TypeError,G=function(t){if(Y(t))throw new X("Can't call method on "+t);return t},K=V,$=G,Z=function(t){return K($(t))},Q=S,J=O.all,tt=O.IS_HTMLDDA?function(t){return"object"==typeof t?null!==t:Q(t)||t===J}:function(t){return"object"==typeof t?null!==t:Q(t)},et={},it=et,nt=o,ot=S,rt=function(t){return ot(t)?t:void 0},st=function(t,e){return arguments.length<2?rt(it[t])||rt(nt[t]):it[t]&&it[t][e]||nt[t]&&nt[t][e]},at=g({}.isPrototypeOf),ht="undefined"!=typeof navigator&&String(navigator.userAgent)||"",lt=o,dt=ht,ct=lt.process,ut=lt.Deno,ft=ct&&ct.versions||ut&&ut.version,pt=ft&&ft.v8;pt&&(j=(A=pt.split("."))[0]>0&&A[0]<4?1:+(A[0]+A[1])),!j&&dt&&(!(A=dt.match(/Edge\/(\d+)/))||A[1]>=74)&&(A=dt.match(/Chrome\/(\d+)/))&&(j=+A[1]);var vt=j,gt=vt,yt=r,mt=o.String,bt=!!Object.getOwnPropertySymbols&&!yt((function(){var t=Symbol("symbol detection");return!mt(t)||!(Object(t)instanceof Symbol)||!Symbol.sham&>&><41})),wt=bt&&!Symbol.sham&&"symbol"==typeof Symbol.iterator,kt=st,_t=S,xt=at,Et=Object,Ot=wt?function(t){return"symbol"==typeof t}:function(t){var e=kt("Symbol");return _t(e)&&xt(e.prototype,Et(t))},Ct=String,St=function(t){try{return Ct(t)}catch(t){return"Object"}},Tt=S,Mt=St,Pt=TypeError,Dt=function(t){if(Tt(t))return t;throw new Pt(Mt(t)+" is not a function")},It=Dt,Bt=U,Nt=function(t,e){var i=t[e];return Bt(i)?void 0:It(i)},Ft=I,zt=S,At=tt,jt=TypeError,Rt={exports:{}},Lt=o,Ht=Object.defineProperty,Wt=function(t,e){try{Ht(Lt,t,{value:e,configurable:!0,writable:!0})}catch(i){Lt[t]=e}return e},qt="__core-js_shared__",Vt=o[qt]||Wt(qt,{}),Ut=Vt;(Rt.exports=function(t,e){return Ut[t]||(Ut[t]=void 0!==e?e:{})})("versions",[]).push({version:"3.33.0",mode:"pure",copyright:"© 2014-2023 Denis Pushkarev (zloirock.ru)",license:"https://github.com/zloirock/core-js/blob/v3.33.0/LICENSE",source:"https://github.com/zloirock/core-js"});var Yt=Rt.exports,Xt=G,Gt=Object,Kt=function(t){return Gt(Xt(t))},$t=Kt,Zt=g({}.hasOwnProperty),Qt=Object.hasOwn||function(t,e){return Zt($t(t),e)},Jt=g,te=0,ee=Math.random(),ie=Jt(1..toString),ne=function(t){return"Symbol("+(void 0===t?"":t)+")_"+ie(++te+ee,36)},oe=Yt,re=Qt,se=ne,ae=bt,he=wt,le=o.Symbol,de=oe("wks"),ce=he?le.for||le:le&&le.withoutSetter||se,ue=function(t){return re(de,t)||(de[t]=ae&&re(le,t)?le[t]:ce("Symbol."+t)),de[t]},fe=I,pe=tt,ve=Ot,ge=Nt,ye=function(t,e){var i,n;if("string"===e&&zt(i=t.toString)&&!At(n=Ft(i,t)))return n;if(zt(i=t.valueOf)&&!At(n=Ft(i,t)))return n;if("string"!==e&&zt(i=t.toString)&&!At(n=Ft(i,t)))return n;throw new jt("Can't convert object to primitive value")},me=TypeError,be=ue("toPrimitive"),we=function(t,e){if(!pe(t)||ve(t))return t;var i,n=ge(t,be);if(n){if(void 0===e&&(e="default"),i=fe(n,t,e),!pe(i)||ve(i))return i;throw new me("Can't convert object to primitive value")}return void 0===e&&(e="number"),ye(t,e)},ke=Ot,_e=function(t){var e=we(t,"string");return ke(e)?e:e+""},xe=tt,Ee=o.document,Oe=xe(Ee)&&xe(Ee.createElement),Ce=function(t){return Oe?Ee.createElement(t):{}},Se=Ce,Te=!M&&!r((function(){return 7!==Object.defineProperty(Se("div"),"a",{get:function(){return 7}}).a})),Me=M,Pe=I,De=B,Ie=R,Be=Z,Ne=_e,Fe=Qt,ze=Te,Ae=Object.getOwnPropertyDescriptor;T.f=Me?Ae:function(t,e){if(t=Be(t),e=Ne(e),ze)try{return Ae(t,e)}catch(t){}if(Fe(t,e))return Ie(!Pe(De.f,t,e),t[e])};var je=r,Re=S,Le=/#|\.prototype\./,He=function(t,e){var i=qe[We(t)];return i===Ue||i!==Ve&&(Re(e)?je(e):!!e)},We=He.normalize=function(t){return String(t).replace(Le,".").toLowerCase()},qe=He.data={},Ve=He.NATIVE="N",Ue=He.POLYFILL="P",Ye=He,Xe=Dt,Ge=s,Ke=x(x.bind),$e=function(t,e){return Xe(t),void 0===e?t:Ge?Ke(t,e):function(){return t.apply(e,arguments)}},Ze={},Qe=M&&r((function(){return 42!==Object.defineProperty((function(){}),"prototype",{value:42,writable:!1}).prototype})),Je=tt,ti=String,ei=TypeError,ii=function(t){if(Je(t))return t;throw new ei(ti(t)+" is not an object")},ni=M,oi=Te,ri=Qe,si=ii,ai=_e,hi=TypeError,li=Object.defineProperty,di=Object.getOwnPropertyDescriptor,ci="enumerable",ui="configurable",fi="writable";Ze.f=ni?ri?function(t,e,i){if(si(t),e=ai(e),si(i),"function"==typeof t&&"prototype"===e&&"value"in i&&fi in i&&!i[fi]){var n=di(t,e);n&&n[fi]&&(t[e]=i.value,i={configurable:ui in i?i[ui]:n[ui],enumerable:ci in i?i[ci]:n[ci],writable:!1})}return li(t,e,i)}:li:function(t,e,i){if(si(t),e=ai(e),si(i),oi)try{return li(t,e,i)}catch(t){}if("get"in i||"set"in i)throw new hi("Accessors not supported");return"value"in i&&(t[e]=i.value),t};var pi=Ze,vi=R,gi=M?function(t,e,i){return pi.f(t,e,vi(1,i))}:function(t,e,i){return t[e]=i,t},yi=o,mi=c,bi=x,wi=S,ki=T.f,_i=Ye,xi=et,Ei=$e,Oi=gi,Ci=Qt,Si=function(t){var e=function(i,n,o){if(this instanceof e){switch(arguments.length){case 0:return new t;case 1:return new t(i);case 2:return new t(i,n)}return new t(i,n,o)}return mi(t,this,arguments)};return e.prototype=t.prototype,e},Ti=function(t,e){var i,n,o,r,s,a,h,l,d,c=t.target,u=t.global,f=t.stat,p=t.proto,v=u?yi:f?yi[c]:(yi[c]||{}).prototype,g=u?xi:xi[c]||Oi(xi,c,{})[c],y=g.prototype;for(r in e)n=!(i=_i(u?r:c+(f?".":"#")+r,t.forced))&&v&&Ci(v,r),a=g[r],n&&(h=t.dontCallGetSet?(d=ki(v,r))&&d.value:v[r]),s=n&&h?h:e[r],n&&typeof a==typeof s||(l=t.bind&&n?Ei(s,yi):t.wrap&&n?Si(s):p&&wi(s)?bi(s):s,(t.sham||s&&s.sham||a&&a.sham)&&Oi(l,"sham",!0),Oi(g,r,l),p&&(Ci(xi,o=c+"Prototype")||Oi(xi,o,{}),Oi(xi[o],r,s),t.real&&y&&(i||!y[r])&&Oi(y,r,s)))},Mi=Math.ceil,Pi=Math.floor,Di=Math.trunc||function(t){var e=+t;return(e>0?Pi:Mi)(e)},Ii=function(t){var e=+t;return e!=e||0===e?0:Di(e)},Bi=Ii,Ni=Math.max,Fi=Math.min,zi=function(t,e){var i=Bi(t);return i<0?Ni(i+e,0):Fi(i,e)},Ai=Ii,ji=Math.min,Ri=function(t){return t>0?ji(Ai(t),9007199254740991):0},Li=function(t){return Ri(t.length)},Hi=Z,Wi=zi,qi=Li,Vi=function(t){return function(e,i,n){var o,r=Hi(e),s=qi(r),a=Wi(n,s);if(t&&i!=i){for(;s>a;)if((o=r[a++])!=o)return!0}else for(;s>a;a++)if((t||a in r)&&r[a]===i)return t||a||0;return!t&&-1}},Ui={includes:Vi(!0),indexOf:Vi(!1)},Yi={},Xi=Qt,Gi=Z,Ki=Ui.indexOf,$i=Yi,Zi=g([].push),Qi=function(t,e){var i,n=Gi(t),o=0,r=[];for(i in n)!Xi($i,i)&&Xi(n,i)&&Zi(r,i);for(;e.length>o;)Xi(n,i=e[o++])&&(~Ki(r,i)||Zi(r,i));return r},Ji=["constructor","hasOwnProperty","isPrototypeOf","propertyIsEnumerable","toLocaleString","toString","valueOf"],tn=Qi,en=Ji,nn=Object.keys||function(t){return tn(t,en)},on={};on.f=Object.getOwnPropertySymbols;var rn=M,sn=g,an=I,hn=r,ln=nn,dn=on,cn=B,un=Kt,fn=V,pn=Object.assign,vn=Object.defineProperty,gn=sn([].concat),yn=!pn||hn((function(){if(rn&&1!==pn({b:1},pn(vn({},"a",{enumerable:!0,get:function(){vn(this,"b",{value:3,enumerable:!1})}}),{b:2})).b)return!0;var t={},e={},i=Symbol("assign detection"),n="abcdefghijklmnopqrst";return t[i]=7,n.split("").forEach((function(t){e[t]=t})),7!==pn({},t)[i]||ln(pn({},e)).join("")!==n}))?function(t,e){for(var i=un(t),n=arguments.length,o=1,r=dn.f,s=cn.f;n>o;)for(var a,h=fn(arguments[o++]),l=r?gn(ln(h),r(h)):ln(h),d=l.length,c=0;d>c;)a=l[c++],rn&&!an(s,h,a)||(i[a]=h[a]);return i}:pn,mn=yn;Ti({target:"Object",stat:!0,arity:2,forced:Object.assign!==mn},{assign:mn});var bn=i(et.Object.assign),wn=g([].slice),kn=g,_n=Dt,xn=tt,En=Qt,On=wn,Cn=s,Sn=Function,Tn=kn([].concat),Mn=kn([].join),Pn={},Dn=Cn?Sn.bind:function(t){var e=_n(this),i=e.prototype,n=On(arguments,1),o=function(){var i=Tn(n,On(arguments));return this instanceof o?function(t,e,i){if(!En(Pn,e)){for(var n=[],o=0;o=.1;)(p=+r[c++%s])>d&&(p=d),f=Math.sqrt(p*p/(1+l*l)),e+=f=a<0?-f:f,i+=l*f,!0===u?t.lineTo(e,i):t.moveTo(e,i),d-=p,u=!u}var Xn={circle:Wn,dashedLine:Yn,database:Un,diamond:function(t,e,i,n){t.beginPath(),t.lineTo(e,i+n),t.lineTo(e+n,i),t.lineTo(e,i-n),t.lineTo(e-n,i),t.closePath()},ellipse:Vn,ellipse_vis:Vn,hexagon:function(t,e,i,n){t.beginPath();var o=2*Math.PI/6;t.moveTo(e+n,i);for(var r=1;r<6;r++)t.lineTo(e+n*Math.cos(o*r),i+n*Math.sin(o*r));t.closePath()},roundRect:qn,square:function(t,e,i,n){t.beginPath(),t.rect(e-n,i-n,2*n,2*n),t.closePath()},star:function(t,e,i,n){t.beginPath(),i+=.1*(n*=.82);for(var o=0;o<10;o++){var r=o%2==0?1.3*n:.5*n;t.lineTo(e+r*Math.sin(2*o*Math.PI/10),i-r*Math.cos(2*o*Math.PI/10))}t.closePath()},triangle:function(t,e,i,n){t.beginPath(),i+=.275*(n*=1.15);var o=2*n,r=o/2,s=Math.sqrt(3)/6*o,a=Math.sqrt(o*o-r*r);t.moveTo(e,i-(a-s)),t.lineTo(e+r,i+s),t.lineTo(e-r,i+s),t.lineTo(e,i-(a-s)),t.closePath()},triangleDown:function(t,e,i,n){t.beginPath(),i-=.275*(n*=1.15);var o=2*n,r=o/2,s=Math.sqrt(3)/6*o,a=Math.sqrt(o*o-r*r);t.moveTo(e,i+(a-s)),t.lineTo(e+r,i-s),t.lineTo(e-r,i-s),t.lineTo(e,i+(a-s)),t.closePath()}};var Gn={exports:{}};!function(t){function e(t){if(t)return function(t){for(var i in e.prototype)t[i]=e.prototype[i];return t}(t)}t.exports=e,e.prototype.on=e.prototype.addEventListener=function(t,e){return this._callbacks=this._callbacks||{},(this._callbacks["$"+t]=this._callbacks["$"+t]||[]).push(e),this},e.prototype.once=function(t,e){function i(){this.off(t,i),e.apply(this,arguments)}return i.fn=e,this.on(t,i),this},e.prototype.off=e.prototype.removeListener=e.prototype.removeAllListeners=e.prototype.removeEventListener=function(t,e){if(this._callbacks=this._callbacks||{},0==arguments.length)return this._callbacks={},this;var i,n=this._callbacks["$"+t];if(!n)return this;if(1==arguments.length)return delete this._callbacks["$"+t],this;for(var o=0;o=a?t?"":void 0:(n=yo(r,s))<55296||n>56319||s+1===a||(o=yo(r,s+1))<56320||o>57343?t?go(r,s):n:t?mo(r,s,s+2):o-56320+(n-55296<<10)+65536}},wo={codeAt:bo(!1),charAt:bo(!0)},ko=S,_o=o.WeakMap,xo=ko(_o)&&/native code/.test(String(_o)),Eo=ne,Oo=Yt("keys"),Co=function(t){return Oo[t]||(Oo[t]=Eo(t))},So=xo,To=o,Mo=tt,Po=gi,Do=Qt,Io=Vt,Bo=Co,No=Yi,Fo="Object already initialized",zo=To.TypeError,Ao=To.WeakMap;if(So||Io.state){var jo=Io.state||(Io.state=new Ao);jo.get=jo.get,jo.has=jo.has,jo.set=jo.set,Zn=function(t,e){if(jo.has(t))throw new zo(Fo);return e.facade=t,jo.set(t,e),e},Qn=function(t){return jo.get(t)||{}},Jn=function(t){return jo.has(t)}}else{var Ro=Bo("state");No[Ro]=!0,Zn=function(t,e){if(Do(t,Ro))throw new zo(Fo);return e.facade=t,Po(t,Ro,e),e},Qn=function(t){return Do(t,Ro)?t[Ro]:{}},Jn=function(t){return Do(t,Ro)}}var Lo={set:Zn,get:Qn,has:Jn,enforce:function(t){return Jn(t)?Qn(t):Zn(t,{})},getterFor:function(t){return function(e){var i;if(!Mo(e)||(i=Qn(e)).type!==t)throw new zo("Incompatible receiver, "+t+" required");return i}}},Ho=M,Wo=Qt,qo=Function.prototype,Vo=Ho&&Object.getOwnPropertyDescriptor,Uo=Wo(qo,"name"),Yo={EXISTS:Uo,PROPER:Uo&&"something"===function(){}.name,CONFIGURABLE:Uo&&(!Ho||Ho&&Vo(qo,"name").configurable)},Xo={},Go=M,Ko=Qe,$o=Ze,Zo=ii,Qo=Z,Jo=nn;Xo.f=Go&&!Ko?Object.defineProperties:function(t,e){Zo(t);for(var i,n=Qo(e),o=Jo(e),r=o.length,s=0;r>s;)$o.f(t,i=o[s++],n[i]);return t};var tr,er=st("document","documentElement"),ir=ii,nr=Xo,or=Ji,rr=Yi,sr=er,ar=Ce,hr="prototype",lr="script",dr=Co("IE_PROTO"),cr=function(){},ur=function(t){return"<"+lr+">"+t+""},fr=function(t){t.write(ur("")),t.close();var e=t.parentWindow.Object;return t=null,e},pr=function(){try{tr=new ActiveXObject("htmlfile")}catch(t){}var t,e,i;pr="undefined"!=typeof document?document.domain&&tr?fr(tr):(e=ar("iframe"),i="java"+lr+":",e.style.display="none",sr.appendChild(e),e.src=String(i),(t=e.contentWindow.document).open(),t.write(ur("document.F=Object")),t.close(),t.F):fr(tr);for(var n=or.length;n--;)delete pr[hr][or[n]];return pr()};rr[dr]=!0;var vr,gr,yr,mr=Object.create||function(t,e){var i;return null!==t?(cr[hr]=ir(t),i=new cr,cr[hr]=null,i[dr]=t):i=pr(),void 0===e?i:nr.f(i,e)},br=!r((function(){function t(){}return t.prototype.constructor=null,Object.getPrototypeOf(new t)!==t.prototype})),wr=Qt,kr=S,_r=Kt,xr=br,Er=Co("IE_PROTO"),Or=Object,Cr=Or.prototype,Sr=xr?Or.getPrototypeOf:function(t){var e=_r(t);if(wr(e,Er))return e[Er];var i=e.constructor;return kr(i)&&e instanceof i?i.prototype:e instanceof Or?Cr:null},Tr=gi,Mr=function(t,e,i,n){return n&&n.enumerable?t[e]=i:Tr(t,e,i),t},Pr=r,Dr=S,Ir=tt,Br=mr,Nr=Sr,Fr=Mr,zr=ue("iterator"),Ar=!1;[].keys&&("next"in(yr=[].keys())?(gr=Nr(Nr(yr)))!==Object.prototype&&(vr=gr):Ar=!0);var jr=!Ir(vr)||Pr((function(){var t={};return vr[zr].call(t)!==t}));Dr((vr=jr?{}:Br(vr))[zr])||Fr(vr,zr,(function(){return this}));var Rr={IteratorPrototype:vr,BUGGY_SAFARI_ITERATORS:Ar},Lr=ao,Hr=to?{}.toString:function(){return"[object "+Lr(this)+"]"},Wr=to,qr=Ze.f,Vr=gi,Ur=Qt,Yr=Hr,Xr=ue("toStringTag"),Gr=function(t,e,i,n){if(t){var o=i?t:t.prototype;Ur(o,Xr)||qr(o,Xr,{configurable:!0,value:e}),n&&!Wr&&Vr(o,"toString",Yr)}},Kr={},$r=Rr.IteratorPrototype,Zr=mr,Qr=R,Jr=Gr,ts=Kr,es=function(){return this},is=g,ns=Dt,os=S,rs=String,ss=TypeError,as=function(t,e,i){try{return is(ns(Object.getOwnPropertyDescriptor(t,e)[i]))}catch(t){}},hs=ii,ls=function(t){if("object"==typeof t||os(t))return t;throw new ss("Can't set "+rs(t)+" as a prototype")},ds=Object.setPrototypeOf||("__proto__"in{}?function(){var t,e=!1,i={};try{(t=as(Object.prototype,"__proto__","set"))(i,[]),e=i instanceof Array}catch(t){}return function(i,n){return hs(i),ls(n),e?t(i,n):i.__proto__=n,i}}():void 0),cs=Ti,us=I,fs=Yo,ps=function(t,e,i,n){var o=e+" Iterator";return t.prototype=Zr($r,{next:Qr(+!n,i)}),Jr(t,o,!1,!0),ts[o]=es,t},vs=Sr,gs=Gr,ys=Mr,ms=Kr,bs=Rr,ws=fs.PROPER,ks=bs.BUGGY_SAFARI_ITERATORS,_s=ue("iterator"),xs="keys",Es="values",Os="entries",Cs=function(){return this},Ss=function(t,e,i,n,o,r,s){ps(i,e,n);var a,h,l,d=function(t){if(t===o&&v)return v;if(!ks&&t&&t in f)return f[t];switch(t){case xs:case Es:case Os:return function(){return new i(this,t)}}return function(){return new i(this)}},c=e+" Iterator",u=!1,f=t.prototype,p=f[_s]||f["@@iterator"]||o&&f[o],v=!ks&&p||d(o),g="Array"===e&&f.entries||p;if(g&&(a=vs(g.call(new t)))!==Object.prototype&&a.next&&(gs(a,c,!0,!0),ms[c]=Cs),ws&&o===Es&&p&&p.name!==Es&&(u=!0,v=function(){return us(p,this)}),o)if(h={values:d(Es),keys:r?v:d(xs),entries:d(Os)},s)for(l in h)(ks||u||!(l in f))&&ys(f,l,h[l]);else cs({target:e,proto:!0,forced:ks||u},h);return s&&f[_s]!==v&&ys(f,_s,v,{name:o}),ms[e]=v,h},Ts=function(t,e){return{value:t,done:e}},Ms=wo.charAt,Ps=co,Ds=Lo,Is=Ss,Bs=Ts,Ns="String Iterator",Fs=Ds.set,zs=Ds.getterFor(Ns);Is(String,"String",(function(t){Fs(this,{type:Ns,string:Ps(t),index:0})}),(function(){var t,e=zs(this),i=e.string,n=e.index;return n>=i.length?Bs(void 0,!0):(t=Ms(i,n),e.index+=t.length,Bs(t,!1))}));var As=I,js=ii,Rs=Nt,Ls=function(t,e,i){var n,o;js(t);try{if(!(n=Rs(t,"return"))){if("throw"===e)throw i;return i}n=As(n,t)}catch(t){o=!0,n=t}if("throw"===e)throw i;if(o)throw n;return js(n),i},Hs=ii,Ws=Ls,qs=Kr,Vs=ue("iterator"),Us=Array.prototype,Ys=function(t){return void 0!==t&&(qs.Array===t||Us[Vs]===t)},Xs=S,Gs=Vt,Ks=g(Function.toString);Xs(Gs.inspectSource)||(Gs.inspectSource=function(t){return Ks(t)});var $s=Gs.inspectSource,Zs=g,Qs=r,Js=S,ta=ao,ea=$s,ia=function(){},na=[],oa=st("Reflect","construct"),ra=/^\s*(?:class|function)\b/,sa=Zs(ra.exec),aa=!ra.test(ia),ha=function(t){if(!Js(t))return!1;try{return oa(ia,na,t),!0}catch(t){return!1}},la=function(t){if(!Js(t))return!1;switch(ta(t)){case"AsyncFunction":case"GeneratorFunction":case"AsyncGeneratorFunction":return!1}try{return aa||!!sa(ra,ea(t))}catch(t){return!0}};la.sham=!0;var da=!oa||Qs((function(){var t;return ha(ha.call)||!ha(Object)||!ha((function(){t=!0}))||t}))?la:ha,ca=_e,ua=Ze,fa=R,pa=function(t,e,i){var n=ca(e);n in t?ua.f(t,n,fa(0,i)):t[n]=i},va=ao,ga=Nt,ya=U,ma=Kr,ba=ue("iterator"),wa=function(t){if(!ya(t))return ga(t,ba)||ga(t,"@@iterator")||ma[va(t)]},ka=I,_a=Dt,xa=ii,Ea=St,Oa=wa,Ca=TypeError,Sa=function(t,e){var i=arguments.length<2?Oa(t):e;if(_a(i))return xa(ka(i,t));throw new Ca(Ea(t)+" is not iterable")},Ta=$e,Ma=I,Pa=Kt,Da=function(t,e,i,n){try{return n?e(Hs(i)[0],i[1]):e(i)}catch(e){Ws(t,"throw",e)}},Ia=Ys,Ba=da,Na=Li,Fa=pa,za=Sa,Aa=wa,ja=Array,Ra=ue("iterator"),La=!1;try{var Ha=0,Wa={next:function(){return{done:!!Ha++}},return:function(){La=!0}};Wa[Ra]=function(){return this},Array.from(Wa,(function(){throw 2}))}catch(t){}var qa=function(t,e){try{if(!e&&!La)return!1}catch(t){return!1}var i=!1;try{var n={};n[Ra]=function(){return{next:function(){return{done:i=!0}}}},t(n)}catch(t){}return i},Va=function(t){var e=Pa(t),i=Ba(this),n=arguments.length,o=n>1?arguments[1]:void 0,r=void 0!==o;r&&(o=Ta(o,n>2?arguments[2]:void 0));var s,a,h,l,d,c,u=Aa(e),f=0;if(!u||this===ja&&Ia(u))for(s=Na(e),a=i?new this(s):ja(s);s>f;f++)c=r?o(e[f],f):e[f],Fa(a,f,c);else for(d=(l=za(e,u)).next,a=i?new this:[];!(h=Ma(d,l)).done;f++)c=r?Da(l,o,[h.value,f],!0):h.value,Fa(a,f,c);return a.length=f,a};Ti({target:"Array",stat:!0,forced:!qa((function(t){Array.from(t)}))},{from:Va});var Ua=et.Array.from,Ya=i(Ua),Xa=Z,Ga=Kr,Ka=Lo;Ze.f;var $a=Ss,Za=Ts,Qa="Array Iterator",Ja=Ka.set,th=Ka.getterFor(Qa);$a(Array,"Array",(function(t,e){Ja(this,{type:Qa,target:Xa(t),index:0,kind:e})}),(function(){var t=th(this),e=t.target,i=t.kind,n=t.index++;if(!e||n>=e.length)return t.target=void 0,Za(void 0,!0);switch(i){case"keys":return Za(n,!1);case"values":return Za(e[n],!1)}return Za([n,e[n]],!1)}),"values"),Ga.Arguments=Ga.Array;var eh=wa,ih={CSSRuleList:0,CSSStyleDeclaration:0,CSSValueList:0,ClientRectList:0,DOMRectList:0,DOMStringList:0,DOMTokenList:1,DataTransferItemList:0,FileList:0,HTMLAllCollection:0,HTMLCollection:0,HTMLFormElement:0,HTMLSelectElement:0,MediaList:0,MimeTypeArray:0,NamedNodeMap:0,NodeList:1,PaintRequestList:0,Plugin:0,PluginArray:0,SVGLengthList:0,SVGNumberList:0,SVGPathSegList:0,SVGPointList:0,SVGStringList:0,SVGTransformList:0,SourceBufferList:0,StyleSheetList:0,TextTrackCueList:0,TextTrackList:0,TouchList:0},nh=o,oh=ao,rh=gi,sh=Kr,ah=ue("toStringTag");for(var hh in ih){var lh=nh[hh],dh=lh&&lh.prototype;dh&&oh(dh)!==ah&&rh(dh,ah,hh),sh[hh]=sh.Array}var ch=eh,uh=i(ch),fh=i(ch);function ph(t,e){if(!(t instanceof e))throw new TypeError("Cannot call a class as a function")}var vh={exports:{}},gh=Ti,yh=M,mh=Ze.f;gh({target:"Object",stat:!0,forced:Object.defineProperty!==mh,sham:!yh},{defineProperty:mh});var bh=et.Object,wh=vh.exports=function(t,e,i){return bh.defineProperty(t,e,i)};bh.defineProperty.sham&&(wh.sham=!0);var kh=vh.exports,_h=kh,xh=i(_h),Eh=w,Oh=Array.isArray||function(t){return"Array"===Eh(t)},Ch=TypeError,Sh=function(t){if(t>9007199254740991)throw Ch("Maximum allowed index exceeded");return t},Th=Oh,Mh=da,Ph=tt,Dh=ue("species"),Ih=Array,Bh=function(t){var e;return Th(t)&&(e=t.constructor,(Mh(e)&&(e===Ih||Th(e.prototype))||Ph(e)&&null===(e=e[Dh]))&&(e=void 0)),void 0===e?Ih:e},Nh=function(t,e){return new(Bh(t))(0===e?0:e)},Fh=r,zh=vt,Ah=ue("species"),jh=function(t){return zh>=51||!Fh((function(){var e=[];return(e.constructor={})[Ah]=function(){return{foo:1}},1!==e[t](Boolean).foo}))},Rh=Ti,Lh=r,Hh=Oh,Wh=tt,qh=Kt,Vh=Li,Uh=Sh,Yh=pa,Xh=Nh,Gh=jh,Kh=vt,$h=ue("isConcatSpreadable"),Zh=Kh>=51||!Lh((function(){var t=[];return t[$h]=!1,t.concat()[0]!==t})),Qh=function(t){if(!Wh(t))return!1;var e=t[$h];return void 0!==e?!!e:Hh(t)};Rh({target:"Array",proto:!0,arity:1,forced:!Zh||!Gh("concat")},{concat:function(t){var e,i,n,o,r,s=qh(this),a=Xh(s,0),h=0;for(e=-1,n=arguments.length;em;m++)if((a||m in v)&&(f=g(u=v[m],m,p),t))if(e)w[m]=f;else if(f)switch(t){case 3:return!0;case 5:return u;case 6:return m;case 2:Bl(w,u)}else switch(t){case 4:return!1;case 7:Bl(w,u)}return r?-1:n||o?o:w}},Fl={forEach:Nl(0),map:Nl(1),filter:Nl(2),some:Nl(3),every:Nl(4),find:Nl(5),findIndex:Nl(6),filterReject:Nl(7)},zl=Ti,Al=o,jl=I,Rl=g,Ll=M,Hl=bt,Wl=r,ql=Qt,Vl=at,Ul=ii,Yl=Z,Xl=_e,Gl=co,Kl=R,$l=mr,Zl=nn,Ql=Jh,Jl=il,td=on,ed=T,id=Ze,nd=Xo,od=B,rd=Mr,sd=vl,ad=Yt,hd=Yi,ld=ne,dd=ue,cd=gl,ud=_l,fd=Sl,pd=Gr,vd=Lo,gd=Fl.forEach,yd=Co("hidden"),md="Symbol",bd="prototype",wd=vd.set,kd=vd.getterFor(md),_d=Object[bd],xd=Al.Symbol,Ed=xd&&xd[bd],Od=Al.RangeError,Cd=Al.TypeError,Sd=Al.QObject,Td=ed.f,Md=id.f,Pd=Jl.f,Dd=od.f,Id=Rl([].push),Bd=ad("symbols"),Nd=ad("op-symbols"),Fd=ad("wks"),zd=!Sd||!Sd[bd]||!Sd[bd].findChild,Ad=function(t,e,i){var n=Td(_d,e);n&&delete _d[e],Md(t,e,i),n&&t!==_d&&Md(_d,e,n)},jd=Ll&&Wl((function(){return 7!==$l(Md({},"a",{get:function(){return Md(this,"a",{value:7}).a}})).a}))?Ad:Md,Rd=function(t,e){var i=Bd[t]=$l(Ed);return wd(i,{type:md,tag:t,description:e}),Ll||(i.description=e),i},Ld=function(t,e,i){t===_d&&Ld(Nd,e,i),Ul(t);var n=Xl(e);return Ul(i),ql(Bd,n)?(i.enumerable?(ql(t,yd)&&t[yd][n]&&(t[yd][n]=!1),i=$l(i,{enumerable:Kl(0,!1)})):(ql(t,yd)||Md(t,yd,Kl(1,{})),t[yd][n]=!0),jd(t,n,i)):Md(t,n,i)},Hd=function(t,e){Ul(t);var i=Yl(e),n=Zl(i).concat(Ud(i));return gd(n,(function(e){Ll&&!jl(Wd,i,e)||Ld(t,e,i[e])})),t},Wd=function(t){var e=Xl(t),i=jl(Dd,this,e);return!(this===_d&&ql(Bd,e)&&!ql(Nd,e))&&(!(i||!ql(this,e)||!ql(Bd,e)||ql(this,yd)&&this[yd][e])||i)},qd=function(t,e){var i=Yl(t),n=Xl(e);if(i!==_d||!ql(Bd,n)||ql(Nd,n)){var o=Td(i,n);return!o||!ql(Bd,n)||ql(i,yd)&&i[yd][n]||(o.enumerable=!0),o}},Vd=function(t){var e=Pd(Yl(t)),i=[];return gd(e,(function(t){ql(Bd,t)||ql(hd,t)||Id(i,t)})),i},Ud=function(t){var e=t===_d,i=Pd(e?Nd:Yl(t)),n=[];return gd(i,(function(t){!ql(Bd,t)||e&&!ql(_d,t)||Id(n,Bd[t])})),n};Hl||(xd=function(){if(Vl(Ed,this))throw new Cd("Symbol is not a constructor");var t=arguments.length&&void 0!==arguments[0]?Gl(arguments[0]):void 0,e=ld(t),i=function(t){this===_d&&jl(i,Nd,t),ql(this,yd)&&ql(this[yd],e)&&(this[yd][e]=!1);var n=Kl(1,t);try{jd(this,e,n)}catch(t){if(!(t instanceof Od))throw t;Ad(this,e,n)}};return Ll&&zd&&jd(_d,e,{configurable:!0,set:i}),Rd(e,t)},rd(Ed=xd[bd],"toString",(function(){return kd(this).tag})),rd(xd,"withoutSetter",(function(t){return Rd(ld(t),t)})),od.f=Wd,id.f=Ld,nd.f=Hd,ed.f=qd,Ql.f=Jl.f=Vd,td.f=Ud,cd.f=function(t){return Rd(dd(t),t)},Ll&&sd(Ed,"description",{configurable:!0,get:function(){return kd(this).description}})),zl({global:!0,constructor:!0,wrap:!0,forced:!Hl,sham:!Hl},{Symbol:xd}),gd(Zl(Fd),(function(t){ud(t)})),zl({target:md,stat:!0,forced:!Hl},{useSetter:function(){zd=!0},useSimple:function(){zd=!1}}),zl({target:"Object",stat:!0,forced:!Hl,sham:!Ll},{create:function(t,e){return void 0===e?$l(t):Hd($l(t),e)},defineProperty:Ld,defineProperties:Hd,getOwnPropertyDescriptor:qd}),zl({target:"Object",stat:!0,forced:!Hl},{getOwnPropertyNames:Vd}),fd(),pd(xd,md),hd[yd]=!0;var Yd=bt&&!!Symbol.for&&!!Symbol.keyFor,Xd=Ti,Gd=st,Kd=Qt,$d=co,Zd=Yt,Qd=Yd,Jd=Zd("string-to-symbol-registry"),tc=Zd("symbol-to-string-registry");Xd({target:"Symbol",stat:!0,forced:!Qd},{for:function(t){var e=$d(t);if(Kd(Jd,e))return Jd[e];var i=Gd("Symbol")(e);return Jd[e]=i,tc[i]=e,i}});var ec=Ti,ic=Qt,nc=Ot,oc=St,rc=Yd,sc=Yt("symbol-to-string-registry");ec({target:"Symbol",stat:!0,forced:!rc},{keyFor:function(t){if(!nc(t))throw new TypeError(oc(t)+" is not a symbol");if(ic(sc,t))return sc[t]}});var ac=Oh,hc=S,lc=w,dc=co,cc=g([].push),uc=Ti,fc=st,pc=c,vc=I,gc=g,yc=r,mc=S,bc=Ot,wc=wn,kc=function(t){if(hc(t))return t;if(ac(t)){for(var e=t.length,i=[],n=0;nt.length)&&(e=t.length);for(var i=0,n=new Array(e);i1?arguments[1]:void 0)}});var Bf=Nn("Array").map,Nf=at,Ff=Bf,zf=Array.prototype,Af=function(t){var e=t.map;return t===zf||Nf(zf,t)&&e===zf.map?Ff:e},jf=i(Af),Rf=Kt,Lf=nn;Ti({target:"Object",stat:!0,forced:r((function(){Lf(1)}))},{keys:function(t){return Lf(Rf(t))}});var Hf=i(et.Object.keys),Wf=Ti,qf=Date,Vf=g(qf.prototype.getTime);Wf({target:"Date",stat:!0},{now:function(){return Vf(new qf)}});var Uf=i(et.Date.now),Yf=r,Xf=function(t,e){var i=[][t];return!!i&&Yf((function(){i.call(null,e||function(){return 1},1)}))},Gf=Fl.forEach,Kf=Xf("forEach")?[].forEach:function(t){return Gf(this,t,arguments.length>1?arguments[1]:void 0)};Ti({target:"Array",proto:!0,forced:[].forEach!==Kf},{forEach:Kf});var $f=Nn("Array").forEach,Zf=ao,Qf=Qt,Jf=at,tp=$f,ep=Array.prototype,ip={DOMTokenList:!0,NodeList:!0},np=function(t){var e=t.forEach;return t===ep||Jf(ep,t)&&e===ep.forEach||Qf(ip,Zf(t))?tp:e},op=i(np),rp=Ti,sp=Oh,ap=g([].reverse),hp=[1,2];rp({target:"Array",proto:!0,forced:String(hp)===String(hp.reverse())},{reverse:function(){return sp(this)&&(this.length=this.length),ap(this)}});var lp=Nn("Array").reverse,dp=at,cp=lp,up=Array.prototype,fp=function(t){var e=t.reverse;return t===up||dp(up,t)&&e===up.reverse?cp:e},pp=fp,vp=i(pp),gp=St,yp=TypeError,mp=function(t,e){if(!delete t[e])throw new yp("Cannot delete property "+gp(e)+" of "+gp(t))},bp=Ti,wp=Kt,kp=zi,_p=Ii,xp=Li,Ep=Pu,Op=Sh,Cp=Nh,Sp=pa,Tp=mp,Mp=jh("splice"),Pp=Math.max,Dp=Math.min;bp({target:"Array",proto:!0,forced:!Mp},{splice:function(t,e){var i,n,o,r,s,a,h=wp(this),l=xp(h),d=kp(t,l),c=arguments.length;for(0===c?i=n=0:1===c?(i=0,n=l-d):(i=c-2,n=Dp(Pp(_p(e),0),l-d)),Op(l+i-n),o=Cp(h,n),r=0;rl-n+i;r--)Tp(h,r-1)}else if(i>n)for(r=l-n;r>d;r--)a=r+i-1,(s=r+n-1)in h?h[a]=h[s]:Tp(h,a);for(r=0;r1?arguments[1]:void 0)}});var Rp=Nn("Array").includes,Lp=tt,Hp=w,Wp=ue("match"),qp=function(t){var e;return Lp(t)&&(void 0!==(e=t[Wp])?!!e:"RegExp"===Hp(t))},Vp=TypeError,Up=ue("match"),Yp=Ti,Xp=function(t){if(qp(t))throw new Vp("The method doesn't accept regular expressions");return t},Gp=G,Kp=co,$p=function(t){var e=/./;try{"/./"[t](e)}catch(i){try{return e[Up]=!1,"/./"[t](e)}catch(t){}}return!1},Zp=g("".indexOf);Yp({target:"String",proto:!0,forced:!$p("includes")},{includes:function(t){return!!~Zp(Kp(Gp(this)),Kp(Xp(t)),arguments.length>1?arguments[1]:void 0)}});var Qp=Nn("String").includes,Jp=at,tv=Rp,ev=Qp,iv=Array.prototype,nv=String.prototype,ov=function(t){var e=t.includes;return t===iv||Jp(iv,t)&&e===iv.includes?tv:"string"==typeof t||t===nv||Jp(nv,t)&&e===nv.includes?ev:e},rv=i(ov),sv=Kt,av=Sr,hv=br;Ti({target:"Object",stat:!0,forced:r((function(){av(1)})),sham:!hv},{getPrototypeOf:function(t){return av(sv(t))}});var lv=et.Object.getPrototypeOf,dv=i(lv),cv=Fl.filter;Ti({target:"Array",proto:!0,forced:!jh("filter")},{filter:function(t){return cv(this,t,arguments.length>1?arguments[1]:void 0)}});var uv=Nn("Array").filter,fv=at,pv=uv,vv=Array.prototype,gv=function(t){var e=t.filter;return t===vv||fv(vv,t)&&e===vv.filter?pv:e},yv=i(gv),mv=M,bv=r,wv=g,kv=Sr,_v=nn,xv=Z,Ev=wv(B.f),Ov=wv([].push),Cv=mv&&bv((function(){var t=Object.create(null);return t[2]=2,!Ev(t,2)})),Sv=function(t){return function(e){for(var i,n=xv(e),o=_v(n),r=Cv&&null===kv(n),s=o.length,a=0,h=[];s>a;)i=o[a++],mv&&!(r?i in n:Ev(n,i))||Ov(h,t?[i,n[i]]:n[i]);return h}},Tv={entries:Sv(!0),values:Sv(!1)},Mv=Tv.values;Ti({target:"Object",stat:!0},{values:function(t){return Mv(t)}});var Pv=i(et.Object.values),Dv="\t\n\v\f\r                 \u2028\u2029\ufeff",Iv=G,Bv=co,Nv=Dv,Fv=g("".replace),zv=RegExp("^["+Nv+"]+"),Av=RegExp("(^|[^"+Nv+"])["+Nv+"]+$"),jv=function(t){return function(e){var i=Bv(Iv(e));return 1&t&&(i=Fv(i,zv,"")),2&t&&(i=Fv(i,Av,"$1")),i}},Rv={start:jv(1),end:jv(2),trim:jv(3)},Lv=o,Hv=r,Wv=g,qv=co,Vv=Rv.trim,Uv=Dv,Yv=Lv.parseInt,Xv=Lv.Symbol,Gv=Xv&&Xv.iterator,Kv=/^[+-]?0x/i,$v=Wv(Kv.exec),Zv=8!==Yv(Uv+"08")||22!==Yv(Uv+"0x16")||Gv&&!Hv((function(){Yv(Object(Gv))}))?function(t,e){var i=Vv(qv(t));return Yv(i,e>>>0||($v(Kv,i)?16:10))}:Yv;Ti({global:!0,forced:parseInt!==Zv},{parseInt:Zv});var Qv=i(et.parseInt),Jv=Ti,tg=Ui.indexOf,eg=Xf,ig=x([].indexOf),ng=!!ig&&1/ig([1],1,-0)<0;Jv({target:"Array",proto:!0,forced:ng||!eg("indexOf")},{indexOf:function(t){var e=arguments.length>1?arguments[1]:void 0;return ng?ig(this,t,e)||0:tg(this,t,e)}});var og=Nn("Array").indexOf,rg=at,sg=og,ag=Array.prototype,hg=function(t){var e=t.indexOf;return t===ag||rg(ag,t)&&e===ag.indexOf?sg:e},lg=i(hg),dg=Tv.entries;Ti({target:"Object",stat:!0},{entries:function(t){return dg(t)}});var cg=i(et.Object.entries);Ti({target:"Object",stat:!0,sham:!M},{create:mr});var ug=et.Object,fg=function(t,e){return ug.create(t,e)},pg=i(fg),vg=et,gg=c;vg.JSON||(vg.JSON={stringify:JSON.stringify});var yg=function(t,e,i){return gg(vg.JSON.stringify,null,arguments)},mg=i(yg),bg="function"==typeof Bun&&Bun&&"string"==typeof Bun.version,wg=TypeError,kg=function(t,e){if(ti,s=Eg(n)?n:Mg(n),a=r?Sg(arguments,i):[],h=r?function(){xg(s,this,a)}:s;return e?t(h,o):t(h)}:t},Ig=Ti,Bg=o,Ng=Dg(Bg.setInterval,!0);Ig({global:!0,bind:!0,forced:Bg.setInterval!==Ng},{setInterval:Ng});var Fg=Ti,zg=o,Ag=Dg(zg.setTimeout,!0);Fg({global:!0,bind:!0,forced:zg.setTimeout!==Ag},{setTimeout:Ag});var jg=i(et.setTimeout),Rg=Kt,Lg=zi,Hg=Li,Wg=function(t){for(var e=Rg(this),i=Hg(e),n=arguments.length,o=Lg(n>1?arguments[1]:void 0,i),r=n>2?arguments[2]:void 0,s=void 0===r?i:Lg(r,i);s>o;)e[o++]=t;return e};Ti({target:"Array",proto:!0},{fill:Wg});var qg,Vg=Nn("Array").fill,Ug=at,Yg=Vg,Xg=Array.prototype,Gg=function(t){var e=t.fill;return t===Xg||Ug(Xg,t)&&e===Xg.fill?Yg:e},Kg=i(Gg);function $g(){return $g=Object.assign||function(t){for(var e=1;e-1}var jy=function(){function t(t,e){this.manager=t,this.set(e)}var e=t.prototype;return e.set=function(t){t===ly&&(t=this.compute()),hy&&this.manager.element.style&&vy[t]&&(this.manager.element.style[ay]=t),this.actions=t.toLowerCase().trim()},e.update=function(){this.set(this.manager.options.touchAction)},e.compute=function(){var t=[];return Fy(this.manager.recognizers,(function(e){zy(e.options.enable,[e])&&(t=t.concat(e.getTouchAction()))})),function(t){if(Ay(t,uy))return uy;var e=Ay(t,fy),i=Ay(t,py);return e&&i?uy:e||i?e?fy:py:Ay(t,cy)?cy:dy}(t.join(" "))},e.preventDefaults=function(t){var e=t.srcEvent,i=t.offsetDirection;if(this.manager.session.prevented)e.preventDefault();else{var n=this.actions,o=Ay(n,uy)&&!vy[uy],r=Ay(n,py)&&!vy[py],s=Ay(n,fy)&&!vy[fy];if(o){var a=1===t.pointers.length,h=t.distance<2,l=t.deltaTime<250;if(a&&h&&l)return}if(!s||!r)return o||r&&i&Py||s&&i&Dy?this.preventSrc(e):void 0}},e.preventSrc=function(t){this.manager.session.prevented=!0,t.preventDefault()},t}();function Ry(t,e){for(;t;){if(t===e)return!0;t=t.parentNode}return!1}function Ly(t){var e=t.length;if(1===e)return{x:ny(t[0].clientX),y:ny(t[0].clientY)};for(var i=0,n=0,o=0;o=oy(e)?t<0?Cy:Sy:e<0?Ty:My}function Uy(t,e,i){return{x:e/t||0,y:i/t||0}}function Yy(t,e){var i=t.session,n=e.pointers,o=n.length;i.firstInput||(i.firstInput=Hy(e)),o>1&&!i.firstMultiple?i.firstMultiple=Hy(e):1===o&&(i.firstMultiple=!1);var r=i.firstInput,s=i.firstMultiple,a=s?s.center:r.center,h=e.center=Ly(n);e.timeStamp=ry(),e.deltaTime=e.timeStamp-r.timeStamp,e.angle=qy(a,h),e.distance=Wy(a,h),function(t,e){var i=e.center,n=t.offsetDelta||{},o=t.prevDelta||{},r=t.prevInput||{};e.eventType!==_y&&r.eventType!==xy||(o=t.prevDelta={x:r.deltaX||0,y:r.deltaY||0},n=t.offsetDelta={x:i.x,y:i.y}),e.deltaX=o.x+(i.x-n.x),e.deltaY=o.y+(i.y-n.y)}(i,e),e.offsetDirection=Vy(e.deltaX,e.deltaY);var l,d,c=Uy(e.deltaTime,e.deltaX,e.deltaY);e.overallVelocityX=c.x,e.overallVelocityY=c.y,e.overallVelocity=oy(c.x)>oy(c.y)?c.x:c.y,e.scale=s?(l=s.pointers,Wy((d=n)[0],d[1],Ny)/Wy(l[0],l[1],Ny)):1,e.rotation=s?function(t,e){return qy(e[1],e[0],Ny)+qy(t[1],t[0],Ny)}(s.pointers,n):0,e.maxPointers=i.prevInput?e.pointers.length>i.prevInput.maxPointers?e.pointers.length:i.prevInput.maxPointers:e.pointers.length,function(t,e){var i,n,o,r,s=t.lastInterval||e,a=e.timeStamp-s.timeStamp;if(e.eventType!==Ey&&(a>ky||void 0===s.velocity)){var h=e.deltaX-s.deltaX,l=e.deltaY-s.deltaY,d=Uy(a,h,l);n=d.x,o=d.y,i=oy(d.x)>oy(d.y)?d.x:d.y,r=Vy(h,l),t.lastInterval=e}else i=s.velocity,n=s.velocityX,o=s.velocityY,r=s.direction;e.velocity=i,e.velocityX=n,e.velocityY=o,e.direction=r}(i,e);var u,f=t.element,p=e.srcEvent;Ry(u=p.composedPath?p.composedPath()[0]:p.path?p.path[0]:p.target,f)&&(f=u),e.target=f}function Xy(t,e,i){var n=i.pointers.length,o=i.changedPointers.length,r=e&_y&&n-o==0,s=e&(xy|Ey)&&n-o==0;i.isFirst=!!r,i.isFinal=!!s,r&&(t.session={}),i.eventType=e,Yy(t,i),t.emit("hammer.input",i),t.recognize(i),t.session.prevInput=i}function Gy(t){return t.trim().split(/\s+/g)}function Ky(t,e,i){Fy(Gy(e),(function(e){t.addEventListener(e,i,!1)}))}function $y(t,e,i){Fy(Gy(e),(function(e){t.removeEventListener(e,i,!1)}))}function Zy(t){var e=t.ownerDocument||t;return e.defaultView||e.parentWindow||window}var Qy=function(){function t(t,e){var i=this;this.manager=t,this.callback=e,this.element=t.element,this.target=t.options.inputTarget,this.domHandler=function(e){zy(t.options.enable,[t])&&i.handler(e)},this.init()}var e=t.prototype;return e.handler=function(){},e.init=function(){this.evEl&&Ky(this.element,this.evEl,this.domHandler),this.evTarget&&Ky(this.target,this.evTarget,this.domHandler),this.evWin&&Ky(Zy(this.element),this.evWin,this.domHandler)},e.destroy=function(){this.evEl&&$y(this.element,this.evEl,this.domHandler),this.evTarget&&$y(this.target,this.evTarget,this.domHandler),this.evWin&&$y(Zy(this.element),this.evWin,this.domHandler)},t}();function Jy(t,e,i){if(t.indexOf&&!i)return t.indexOf(e);for(var n=0;ni[e]})):n.sort()),n}var am={touchstart:_y,touchmove:2,touchend:xy,touchcancel:Ey},hm=function(t){function e(){var i;return e.prototype.evTarget="touchstart touchmove touchend touchcancel",(i=t.apply(this,arguments)||this).targetIds={},i}return Zg(e,t),e.prototype.handler=function(t){var e=am[t.type],i=lm.call(this,t,e);i&&this.callback(this.manager,e,{pointers:i[0],changedPointers:i[1],pointerType:by,srcEvent:t})},e}(Qy);function lm(t,e){var i,n,o=rm(t.touches),r=this.targetIds;if(e&(2|_y)&&1===o.length)return r[o[0].identifier]=!0,[o,o];var s=rm(t.changedTouches),a=[],h=this.target;if(n=o.filter((function(t){return Ry(t.target,h)})),e===_y)for(i=0;i-1&&n.splice(t,1)}),um)}}function pm(t,e){t&_y?(this.primaryTouch=e.changedPointers[0].identifier,fm.call(this,e)):t&(xy|Ey)&&fm.call(this,e)}function vm(t){for(var e=t.srcEvent.clientX,i=t.srcEvent.clientY,n=0;n-1&&this.requireFail.splice(e,1),this},e.hasRequireFailures=function(){return this.requireFail.length>0},e.canRecognizeWith=function(t){return!!this.simultaneous[t.id]},e.emit=function(t){var e=this,i=this.state;function n(i){e.manager.emit(i,t)}i<8&&n(e.options.event+km(i)),n(e.options.event),t.additionalEvent&&n(t.additionalEvent),i>=8&&n(e.options.event+km(i))},e.tryEmit=function(t){if(this.canEmit())return this.emit(t);this.state=mm},e.canEmit=function(){for(var t=0;te.threshold&&o&e.direction},i.attrTest=function(t){return Em.prototype.attrTest.call(this,t)&&(2&this.state||!(2&this.state)&&this.directionTest(t))},i.emit=function(e){this.pX=e.deltaX,this.pY=e.deltaY;var i=Om(e.direction);i&&(e.additionalEvent=this.options.event+i),t.prototype.emit.call(this,e)},e}(Em),Sm=function(t){function e(e){return void 0===e&&(e={}),t.call(this,$g({event:"swipe",threshold:10,velocity:.3,direction:Py|Dy,pointers:1},e))||this}Zg(e,t);var i=e.prototype;return i.getTouchAction=function(){return Cm.prototype.getTouchAction.call(this)},i.attrTest=function(e){var i,n=this.options.direction;return n&(Py|Dy)?i=e.overallVelocity:n&Py?i=e.overallVelocityX:n&Dy&&(i=e.overallVelocityY),t.prototype.attrTest.call(this,e)&&n&e.offsetDirection&&e.distance>this.options.threshold&&e.maxPointers===this.options.pointers&&oy(i)>this.options.velocity&&e.eventType&xy},i.emit=function(t){var e=Om(t.offsetDirection);e&&this.manager.emit(this.options.event+e,t),this.manager.emit(this.options.event,t)},e}(Em),Tm=function(t){function e(e){return void 0===e&&(e={}),t.call(this,$g({event:"pinch",threshold:0,pointers:2},e))||this}Zg(e,t);var i=e.prototype;return i.getTouchAction=function(){return[uy]},i.attrTest=function(e){return t.prototype.attrTest.call(this,e)&&(Math.abs(e.scale-1)>this.options.threshold||2&this.state)},i.emit=function(e){if(1!==e.scale){var i=e.scale<1?"in":"out";e.additionalEvent=this.options.event+i}t.prototype.emit.call(this,e)},e}(Em),Mm=function(t){function e(e){return void 0===e&&(e={}),t.call(this,$g({event:"rotate",threshold:0,pointers:2},e))||this}Zg(e,t);var i=e.prototype;return i.getTouchAction=function(){return[uy]},i.attrTest=function(e){return t.prototype.attrTest.call(this,e)&&(Math.abs(e.rotation)>this.options.threshold||2&this.state)},e}(Em),Pm=function(t){function e(e){var i;return void 0===e&&(e={}),(i=t.call(this,$g({event:"press",pointers:1,time:251,threshold:9},e))||this)._timer=null,i._input=null,i}Zg(e,t);var i=e.prototype;return i.getTouchAction=function(){return[dy]},i.process=function(t){var e=this,i=this.options,n=t.pointers.length===i.pointers,o=t.distancei.time;if(this._input=t,!o||!n||t.eventType&(xy|Ey)&&!r)this.reset();else if(t.eventType&_y)this.reset(),this._timer=setTimeout((function(){e.state=8,e.tryEmit()}),i.time);else if(t.eventType&xy)return 8;return mm},i.reset=function(){clearTimeout(this._timer)},i.emit=function(t){8===this.state&&(t&&t.eventType&xy?this.manager.emit(this.options.event+"up",t):(this._input.timeStamp=ry(),this.manager.emit(this.options.event,this._input)))},e}(_m),Dm={domEvents:!1,touchAction:ly,enable:!0,inputTarget:null,inputClass:null,cssProps:{userSelect:"none",touchSelect:"none",touchCallout:"none",contentZooming:"none",userDrag:"none",tapHighlightColor:"rgba(0,0,0,0)"}},Im=[[Mm,{enable:!1}],[Tm,{enable:!1},["rotate"]],[Sm,{direction:Py}],[Cm,{direction:Py},["swipe"]],[xm],[xm,{event:"doubletap",taps:2},["tap"]],[Pm]];function Bm(t,e){var i,n=t.element;n.style&&(Fy(t.options.cssProps,(function(o,r){i=sy(n.style,r),e?(t.oldCssProps[i]=n.style[i],n.style[i]=o):n.style[i]=t.oldCssProps[i]||""})),e||(t.oldCssProps={}))}var Nm=function(){function t(t,e){var i,n=this;this.options=ty({},Dm,e||{}),this.options.inputTarget=this.options.inputTarget||t,this.handlers={},this.session={},this.recognizers=[],this.oldCssProps={},this.element=t,this.input=new((i=this).options.inputClass||(yy?om:my?hm:gy?gm:cm))(i,Xy),this.touchAction=new jy(this,this.options.touchAction),Bm(this,!0),Fy(this.options.recognizers,(function(t){var e=n.add(new t[0](t[1]));t[2]&&e.recognizeWith(t[2]),t[3]&&e.requireFailure(t[3])}),this)}var e=t.prototype;return e.set=function(t){return ty(this.options,t),t.touchAction&&this.touchAction.update(),t.inputTarget&&(this.input.destroy(),this.input.target=t.inputTarget,this.input.init()),this},e.stop=function(t){this.session.stopped=t?2:1},e.recognize=function(t){var e=this.session;if(!e.stopped){var i;this.touchAction.preventDefaults(t);var n=this.recognizers,o=e.curRecognizer;(!o||o&&8&o.state)&&(e.curRecognizer=null,o=null);for(var r=0;r\s*\(/gm,"{anonymous}()@"):"Unknown Stack Trace",o=window.console&&(window.console.warn||window.console.log);return o&&o.call(window.console,n,i),t.apply(this,arguments)}}var Rm=jm((function(t,e,i){for(var n=Object.keys(e),o=0;o=t.length?{done:!0}:{done:!1,value:t[n++]}},e:function(t){throw t},f:o}}throw new TypeError("Invalid attempt to iterate non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.")}var r,s=!0,a=!1;return{s:function(){i=i.call(t)},n:function(){var t=i.next();return s=t.done,t},e:function(t){a=!0,r=t},f:function(){try{s||null==i.return||i.return()}finally{if(a)throw r}}}}function Ym(t,e){(null==e||e>t.length)&&(e=t.length);for(var i=0,n=new Array(e);i1?i-1:0),o=1;o2)return $m.apply(void 0,_f(n=[Km(e[0],e[1])]).call(n,vf(xf(e).call(e,2))));var o=e[0],r=e[1];if(o instanceof Date&&r instanceof Date)return o.setTime(r.getTime()),o;var s,a=Um(Pf(r));try{for(a.s();!(s=a.n()).done;){var h=s.value;Object.prototype.propertyIsEnumerable.call(r,h)&&(r[h]===Xm?delete o[h]:null===o[h]||null===r[h]||"object"!==bu(o[h])||"object"!==bu(r[h])||Df(o[h])||Df(r[h])?o[h]=Zm(r[h]):o[h]=$m(o[h],r[h]))}}catch(t){a.e(t)}finally{a.f()}return o}function Zm(t){return Df(t)?jf(t).call(t,(function(t){return Zm(t)})):"object"===bu(t)&&null!==t?t instanceof Date?new Date(t.getTime()):$m({},t):t}function Qm(t){for(var e=0,i=Hf(t);e>>0,t=(o*=t)>>>0,t+=4294967296*(o-=t)}return 2.3283064365386963e-10*(t>>>0)}}(),e=t(" "),i=t(" "),n=t(" "),o=0;o2&&void 0!==arguments[2]&&arguments[2];for(var n in t)if(void 0!==e[n])if(null===e[n]||"object"!==bu(e[n]))cb(t,e,n,i);else{var o=t[n],r=e[n];db(o)&&db(r)&&ub(o,r,i)}}var fb=bn;function pb(t,e,i){var n=arguments.length>3&&void 0!==arguments[3]&&arguments[3];if(Df(i))throw new TypeError("Arrays are not supported by deepExtend");for(var o=0;o3&&void 0!==arguments[3]&&arguments[3];if(Df(i))throw new TypeError("Arrays are not supported by deepExtend");for(var o in i)if(Object.prototype.hasOwnProperty.call(i,o)&&!rv(t).call(t,o))if(i[o]&&i[o].constructor===Object)void 0===e[o]&&(e[o]={}),e[o].constructor===Object?gb(e[o],i[o]):cb(e,i,o,n);else if(Df(i[o])){e[o]=[];for(var r=0;r2&&void 0!==arguments[2]&&arguments[2],n=arguments.length>3&&void 0!==arguments[3]&&arguments[3];for(var o in e)if(Object.prototype.hasOwnProperty.call(e,o)||!0===i)if("object"===bu(e[o])&&null!==e[o]&&dv(e[o])===Object.prototype)void 0===t[o]?t[o]=gb({},e[o],i):"object"===bu(t[o])&&null!==t[o]&&dv(t[o])===Object.prototype?gb(t[o],e[o],i):cb(t,e,o,n);else if(Df(e[o])){var r;t[o]=xf(r=e[o]).call(r)}else cb(t,e,o,n);return t}function yb(t,e){var i;return _f(i=[]).call(i,vf(t),[e])}function mb(t){return xf(t).call(t)}function bb(t){return t.getBoundingClientRect().left}function wb(t){return t.getBoundingClientRect().top}function kb(t,e){if(Df(t))for(var i=t.length,n=0;n3&&void 0!==arguments[3]?arguments[3]:{},o=function(t){return null!=t},r=function(t){return null!==t&&"object"===bu(t)};if(!r(t))throw new Error("Parameter mergeTarget must be an object");if(!r(e))throw new Error("Parameter options must be an object");if(!o(i))throw new Error("Parameter option must have a value");if(!r(n))throw new Error("Parameter globalOptions must be an object");var s=e[i],a=r(n)&&!function(t){for(var e in t)if(Object.prototype.hasOwnProperty.call(t,e))return!1;return!0}(n)?n[i]:void 0,h=a?a.enabled:void 0;if(void 0!==s){if("boolean"==typeof s)return r(t[i])||(t[i]={}),void(t[i].enabled=s);if(null===s&&!r(t[i])){if(!o(a))return;t[i]=pg(a)}if(r(s)){var l=!0;void 0!==s.enabled?l=s.enabled:void 0!==h&&(l=a.enabled),function(t,e,i){r(t[i])||(t[i]={});var n=e[i],o=t[i];for(var s in n)Object.prototype.hasOwnProperty.call(n,s)&&(o[s]=n[s])}(t,e,i),t[i].enabled=l}}}var jb={linear:function(t){return t},easeInQuad:function(t){return t*t},easeOutQuad:function(t){return t*(2-t)},easeInOutQuad:function(t){return t<.5?2*t*t:(4-2*t)*t-1},easeInCubic:function(t){return t*t*t},easeOutCubic:function(t){return--t*t*t+1},easeInOutCubic:function(t){return t<.5?4*t*t*t:(t-1)*(2*t-2)*(2*t-2)+1},easeInQuart:function(t){return t*t*t*t},easeOutQuart:function(t){return 1- --t*t*t*t},easeInOutQuart:function(t){return t<.5?8*t*t*t*t:1-8*--t*t*t*t},easeInQuint:function(t){return t*t*t*t*t},easeOutQuint:function(t){return 1+--t*t*t*t*t},easeInOutQuint:function(t){return t<.5?16*t*t*t*t*t:1+16*--t*t*t*t*t}};function Rb(t,e){var i;Df(e)||(e=[e]);var n,o=Um(t);try{for(o.s();!(n=o.n()).done;){var r=n.value;if(r){i=r[e[0]];for(var s=1;s0&&void 0!==arguments[0]?arguments[0]:1;ph(this,t),this.pixelRatio=e,this.generated=!1,this.centerCoordinates={x:144.5,y:144.5},this.r=289*.49,this.color={r:255,g:255,b:255,a:1},this.hueCircle=void 0,this.initialColor={r:255,g:255,b:255,a:1},this.previousColor=void 0,this.applied=!1,this.updateCallback=function(){},this.closeCallback=function(){},this._create()}return xu(t,[{key:"insertTo",value:function(t){void 0!==this.hammer&&(this.hammer.destroy(),this.hammer=void 0),this.container=t,this.container.appendChild(this.frame),this._bindHammer(),this._setSize()}},{key:"setUpdateCallback",value:function(t){if("function"!=typeof t)throw new Error("Function attempted to set as colorPicker update callback is not a function.");this.updateCallback=t}},{key:"setCloseCallback",value:function(t){if("function"!=typeof t)throw new Error("Function attempted to set as colorPicker closing callback is not a function.");this.closeCallback=t}},{key:"_isColorString",value:function(t){if("string"==typeof t)return Lb[t]}},{key:"setColor",value:function(t){var e=!(arguments.length>1&&void 0!==arguments[1])||arguments[1];if("none"!==t){var i,n=this._isColorString(t);if(void 0!==n&&(t=n),!0===lb(t)){if(!0===Nb(t)){var o=t.substr(4).substr(0,t.length-5).split(",");i={r:o[0],g:o[1],b:o[2],a:1}}else if(!0===Fb(t)){var r=t.substr(5).substr(0,t.length-6).split(",");i={r:r[0],g:r[1],b:r[2],a:r[3]}}else if(!0===Bb(t)){var s=Eb(t);i={r:s.r,g:s.g,b:s.b,a:1}}}else if(t instanceof Object&&void 0!==t.r&&void 0!==t.g&&void 0!==t.b){var a=void 0!==t.a?t.a:"1.0";i={r:t.r,g:t.g,b:t.b,a:a}}if(void 0===i)throw new Error("Unknown color passed to the colorPicker. Supported are strings: rgb, hex, rgba. Object: rgb ({r:r,g:g,b:b,[a:a]}). Supplied: "+mg(t));this._setColor(i,e)}}},{key:"show",value:function(){void 0!==this.closeCallback&&(this.closeCallback(),this.closeCallback=void 0),this.applied=!1,this.frame.style.display="block",this._generateHueCircle()}},{key:"_hide",value:function(){var t=this;!0===(!(arguments.length>0&&void 0!==arguments[0])||arguments[0])&&(this.previousColor=bn({},this.color)),!0===this.applied&&this.updateCallback(this.initialColor),this.frame.style.display="none",jg((function(){void 0!==t.closeCallback&&(t.closeCallback(),t.closeCallback=void 0)}),0)}},{key:"_save",value:function(){this.updateCallback(this.color),this.applied=!1,this._hide()}},{key:"_apply",value:function(){this.applied=!0,this.updateCallback(this.color),this._updatePicker(this.color)}},{key:"_loadLast",value:function(){void 0!==this.previousColor?this.setColor(this.previousColor,!1):alert("There is no last color to load...")}},{key:"_setColor",value:function(t){!0===(!(arguments.length>1&&void 0!==arguments[1])||arguments[1])&&(this.initialColor=bn({},t)),this.color=t;var e=Tb(t.r,t.g,t.b),i=2*Math.PI,n=this.r*e.s,o=this.centerCoordinates.x+n*Math.sin(i*e.h),r=this.centerCoordinates.y+n*Math.cos(i*e.h);this.colorPickerSelector.style.left=o-.5*this.colorPickerSelector.clientWidth+"px",this.colorPickerSelector.style.top=r-.5*this.colorPickerSelector.clientHeight+"px",this._updatePicker(t)}},{key:"_setOpacity",value:function(t){this.color.a=t/100,this._updatePicker(this.color)}},{key:"_setBrightness",value:function(t){var e=Tb(this.color.r,this.color.g,this.color.b);e.v=t/100;var i=Pb(e.h,e.s,e.v);i.a=this.color.a,this.color=i,this._updatePicker()}},{key:"_updatePicker",value:function(){var t=arguments.length>0&&void 0!==arguments[0]?arguments[0]:this.color,e=Tb(t.r,t.g,t.b),i=this.colorPickerCanvas.getContext("2d");void 0===this.pixelRation&&(this.pixelRatio=(window.devicePixelRatio||1)/(i.webkitBackingStorePixelRatio||i.mozBackingStorePixelRatio||i.msBackingStorePixelRatio||i.oBackingStorePixelRatio||i.backingStorePixelRatio||1)),i.setTransform(this.pixelRatio,0,0,this.pixelRatio,0,0);var n=this.colorPickerCanvas.clientWidth,o=this.colorPickerCanvas.clientHeight;i.clearRect(0,0,n,o),i.putImageData(this.hueCircle,0,0),i.fillStyle="rgba(0,0,0,"+(1-e.v)+")",i.circle(this.centerCoordinates.x,this.centerCoordinates.y,this.r),Kg(i).call(i),this.brightnessRange.value=100*e.v,this.opacityRange.value=100*t.a,this.initialColorDiv.style.backgroundColor="rgba("+this.initialColor.r+","+this.initialColor.g+","+this.initialColor.b+","+this.initialColor.a+")",this.newColorDiv.style.backgroundColor="rgba("+this.color.r+","+this.color.g+","+this.color.b+","+this.color.a+")"}},{key:"_setSize",value:function(){this.colorPickerCanvas.style.width="100%",this.colorPickerCanvas.style.height="100%",this.colorPickerCanvas.width=289*this.pixelRatio,this.colorPickerCanvas.height=289*this.pixelRatio}},{key:"_create",value:function(){var t,e,i,n;if(this.frame=document.createElement("div"),this.frame.className="vis-color-picker",this.colorPickerDiv=document.createElement("div"),this.colorPickerSelector=document.createElement("div"),this.colorPickerSelector.className="vis-selector",this.colorPickerDiv.appendChild(this.colorPickerSelector),this.colorPickerCanvas=document.createElement("canvas"),this.colorPickerDiv.appendChild(this.colorPickerCanvas),this.colorPickerCanvas.getContext){var o=this.colorPickerCanvas.getContext("2d");this.pixelRatio=(window.devicePixelRatio||1)/(o.webkitBackingStorePixelRatio||o.mozBackingStorePixelRatio||o.msBackingStorePixelRatio||o.oBackingStorePixelRatio||o.backingStorePixelRatio||1),this.colorPickerCanvas.getContext("2d").setTransform(this.pixelRatio,0,0,this.pixelRatio,0,0)}else{var r=document.createElement("DIV");r.style.color="red",r.style.fontWeight="bold",r.style.padding="10px",r.innerText="Error: your browser does not support HTML canvas",this.colorPickerCanvas.appendChild(r)}this.colorPickerDiv.className="vis-color",this.opacityDiv=document.createElement("div"),this.opacityDiv.className="vis-opacity",this.brightnessDiv=document.createElement("div"),this.brightnessDiv.className="vis-brightness",this.arrowDiv=document.createElement("div"),this.arrowDiv.className="vis-arrow",this.opacityRange=document.createElement("input");try{this.opacityRange.type="range",this.opacityRange.min="0",this.opacityRange.max="100"}catch(t){}this.opacityRange.value="100",this.opacityRange.className="vis-range",this.brightnessRange=document.createElement("input");try{this.brightnessRange.type="range",this.brightnessRange.min="0",this.brightnessRange.max="100"}catch(t){}this.brightnessRange.value="100",this.brightnessRange.className="vis-range",this.opacityDiv.appendChild(this.opacityRange),this.brightnessDiv.appendChild(this.brightnessRange);var s=this;this.opacityRange.onchange=function(){s._setOpacity(this.value)},this.opacityRange.oninput=function(){s._setOpacity(this.value)},this.brightnessRange.onchange=function(){s._setBrightness(this.value)},this.brightnessRange.oninput=function(){s._setBrightness(this.value)},this.brightnessLabel=document.createElement("div"),this.brightnessLabel.className="vis-label vis-brightness",this.brightnessLabel.innerText="brightness:",this.opacityLabel=document.createElement("div"),this.opacityLabel.className="vis-label vis-opacity",this.opacityLabel.innerText="opacity:",this.newColorDiv=document.createElement("div"),this.newColorDiv.className="vis-new-color",this.newColorDiv.innerText="new",this.initialColorDiv=document.createElement("div"),this.initialColorDiv.className="vis-initial-color",this.initialColorDiv.innerText="initial",this.cancelButton=document.createElement("div"),this.cancelButton.className="vis-button vis-cancel",this.cancelButton.innerText="cancel",this.cancelButton.onclick=Hn(t=this._hide).call(t,this,!1),this.applyButton=document.createElement("div"),this.applyButton.className="vis-button vis-apply",this.applyButton.innerText="apply",this.applyButton.onclick=Hn(e=this._apply).call(e,this),this.saveButton=document.createElement("div"),this.saveButton.className="vis-button vis-save",this.saveButton.innerText="save",this.saveButton.onclick=Hn(i=this._save).call(i,this),this.loadButton=document.createElement("div"),this.loadButton.className="vis-button vis-load",this.loadButton.innerText="load last",this.loadButton.onclick=Hn(n=this._loadLast).call(n,this),this.frame.appendChild(this.colorPickerDiv),this.frame.appendChild(this.arrowDiv),this.frame.appendChild(this.brightnessLabel),this.frame.appendChild(this.brightnessDiv),this.frame.appendChild(this.opacityLabel),this.frame.appendChild(this.opacityDiv),this.frame.appendChild(this.newColorDiv),this.frame.appendChild(this.initialColorDiv),this.frame.appendChild(this.cancelButton),this.frame.appendChild(this.applyButton),this.frame.appendChild(this.saveButton),this.frame.appendChild(this.loadButton)}},{key:"_bindHammer",value:function(){var t=this;this.drag={},this.pinch={},this.hammer=new tb(this.colorPickerCanvas),this.hammer.get("pinch").set({enable:!0}),this.hammer.on("hammer.input",(function(e){e.isFirst&&t._moveSelector(e)})),this.hammer.on("tap",(function(e){t._moveSelector(e)})),this.hammer.on("panstart",(function(e){t._moveSelector(e)})),this.hammer.on("panmove",(function(e){t._moveSelector(e)})),this.hammer.on("panend",(function(e){t._moveSelector(e)}))}},{key:"_generateHueCircle",value:function(){if(!1===this.generated){var t=this.colorPickerCanvas.getContext("2d");void 0===this.pixelRation&&(this.pixelRatio=(window.devicePixelRatio||1)/(t.webkitBackingStorePixelRatio||t.mozBackingStorePixelRatio||t.msBackingStorePixelRatio||t.oBackingStorePixelRatio||t.backingStorePixelRatio||1)),t.setTransform(this.pixelRatio,0,0,this.pixelRatio,0,0);var e,i,n,o,r=this.colorPickerCanvas.clientWidth,s=this.colorPickerCanvas.clientHeight;t.clearRect(0,0,r,s),this.centerCoordinates={x:.5*r,y:.5*s},this.r=.49*r;var a,h=2*Math.PI/360,l=1/this.r;for(n=0;n<360;n++)for(o=0;o3&&void 0!==arguments[3]?arguments[3]:1,r=arguments.length>4&&void 0!==arguments[4]?arguments[4]:function(){return!1};ph(this,t),this.parent=e,this.changedOptions=[],this.container=i,this.allowCreation=!1,this.hideOption=r,this.options={},this.initialized=!1,this.popupCounter=0,this.defaultOptions={enabled:!1,filter:!0,container:void 0,showButton:!0},bn(this.options,this.defaultOptions),this.configureOptions=n,this.moduleOptions={},this.domElements=[],this.popupDiv={},this.popupLimit=5,this.popupHistory={},this.colorPicker=new Hb(o),this.wrapper=void 0}return xu(t,[{key:"setOptions",value:function(t){if(void 0!==t){this.popupHistory={},this._removePopup();var e=!0;if("string"==typeof t)this.options.filter=t;else if(Df(t))this.options.filter=t.join();else if("object"===bu(t)){if(null==t)throw new TypeError("options cannot be null");void 0!==t.container&&(this.options.container=t.container),void 0!==yv(t)&&(this.options.filter=yv(t)),void 0!==t.showButton&&(this.options.showButton=t.showButton),void 0!==t.enabled&&(e=t.enabled)}else"boolean"==typeof t?(this.options.filter=!0,e=t):"function"==typeof t&&(this.options.filter=t,e=!0);!1===yv(this.options)&&(e=!1),this.options.enabled=e}this._clean()}},{key:"setModuleOptions",value:function(t){this.moduleOptions=t,!0===this.options.enabled&&(this._clean(),void 0!==this.options.container&&(this.container=this.options.container),this._create())}},{key:"_create",value:function(){this._clean(),this.changedOptions=[];var t=yv(this.options),e=0,i=!1;for(var n in this.configureOptions)Object.prototype.hasOwnProperty.call(this.configureOptions,n)&&(this.allowCreation=!1,i=!1,"function"==typeof t?i=(i=t(n,[]))||this._handleObject(this.configureOptions[n],[n],!0):!0!==t&&-1===lg(t).call(t,n)||(i=!0),!1!==i&&(this.allowCreation=!0,e>0&&this._makeItem([]),this._makeHeader(n),this._handleObject(this.configureOptions[n],[n])),e++);this._makeButton(),this._push()}},{key:"_push",value:function(){this.wrapper=document.createElement("div"),this.wrapper.className="vis-configuration-wrapper",this.container.appendChild(this.wrapper);for(var t=0;t1?i-1:0),o=1;o2&&void 0!==arguments[2]&&arguments[2],n=document.createElement("div");if(n.className="vis-configuration vis-config-label vis-config-s"+e.length,!0===i){for(;n.firstChild;)n.removeChild(n.firstChild);n.appendChild(Wb("i","b",t))}else n.innerText=t+":";return n}},{key:"_makeDropdown",value:function(t,e,i){var n=document.createElement("select");n.className="vis-configuration vis-config-select";var o=0;void 0!==e&&-1!==lg(t).call(t,e)&&(o=lg(t).call(t,e));for(var r=0;rr&&1!==r&&(a.max=Math.ceil(e*d),l=a.max,h="range increased"),a.value=e}else a.value=n;var c=document.createElement("input");c.className="vis-configuration vis-config-rangeinput",c.value=a.value;var u=this;a.onchange=function(){c.value=this.value,u._update(Number(this.value),i)},a.oninput=function(){c.value=this.value};var f=this._makeLabel(i[i.length-1],i),p=this._makeItem(i,f,a,c);""!==h&&this.popupHistory[p]!==l&&(this.popupHistory[p]=l,this._setupPopup(h,p))}},{key:"_makeButton",value:function(){var t=this;if(!0===this.options.showButton){var e=document.createElement("div");e.className="vis-configuration vis-config-button",e.innerText="generate options",e.onclick=function(){t._printOptions()},e.onmouseover=function(){e.className="vis-configuration vis-config-button hover"},e.onmouseout=function(){e.className="vis-configuration vis-config-button"},this.optionsContainer=document.createElement("div"),this.optionsContainer.className="vis-configuration vis-config-option-container",this.domElements.push(this.optionsContainer),this.domElements.push(e)}}},{key:"_setupPopup",value:function(t,e){var i=this;if(!0===this.initialized&&!0===this.allowCreation&&this.popupCounter1&&void 0!==arguments[1]?arguments[1]:[],i=arguments.length>2&&void 0!==arguments[2]&&arguments[2],n=!1,o=yv(this.options),r=!1;for(var s in t)if(Object.prototype.hasOwnProperty.call(t,s)){n=!0;var a=t[s],h=yb(e,s);if("function"==typeof o&&!1===(n=o(s,e))&&!Df(a)&&"string"!=typeof a&&"boolean"!=typeof a&&a instanceof Object&&(this.allowCreation=!1,n=this._handleObject(a,h,!0),this.allowCreation=!1===i),!1!==n){r=!0;var l=this._getValue(h);if(Df(a))this._handleArray(a,l,h);else if("string"==typeof a)this._makeTextInput(a,l,h);else if("boolean"==typeof a)this._makeCheckbox(a,l,h);else if(a instanceof Object){if(!this.hideOption(e,s,this.moduleOptions))if(void 0!==a.enabled){var d=yb(h,"enabled"),c=this._getValue(d);if(!0===c){var u=this._makeLabel(s,h,!0);this._makeItem(h,u),r=this._handleObject(a,h)||r}else this._makeCheckbox(a,c,h)}else{var f=this._makeLabel(s,h,!0);this._makeItem(h,f),r=this._handleObject(a,h)||r}}else console.error("dont know how to handle",a,s,h)}}return r}},{key:"_handleArray",value:function(t,e,i){"string"==typeof t[0]&&"color"===t[0]?(this._makeColorField(t,e,i),t[1]!==e&&this.changedOptions.push({path:i,value:e})):"string"==typeof t[0]?(this._makeDropdown(t,e,i),t[0]!==e&&this.changedOptions.push({path:i,value:e})):"number"==typeof t[0]&&(this._makeRange(t,e,i),t[0]!==e&&this.changedOptions.push({path:i,value:Number(e)}))}},{key:"_update",value:function(t,e){var i=this._constructOptions(t,e);this.parent.body&&this.parent.body.emitter&&this.parent.body.emitter.emit&&this.parent.body.emitter.emit("configChange",i),this.initialized=!0,this.parent.setOptions(i)}},{key:"_constructOptions",value:function(t,e){var i=arguments.length>2&&void 0!==arguments[2]?arguments[2]:{},n=i;t="false"!==(t="true"===t||t)&&t;for(var o=0;oo-this.padding&&(a=!0),r=a?this.x-i:this.x,s=h?this.y-e:this.y}else(s=this.y-e)+e+this.padding>n&&(s=n-e-this.padding),so&&(r=o-i-this.padding),rs.distance?" in "+t.printLocation(r.path,e,"")+"Perhaps it was misplaced? Matching option found at: "+t.printLocation(s.path,s.closestMatch,""):r.distance<=8?'. Did you mean "'+r.closestMatch+'"?'+t.printLocation(r.path,e):". Did you mean one of these: "+t.print(Hf(i))+t.printLocation(n,e),console.error('%cUnknown option detected: "'+e+'"'+o,Xb),Yb=!0}},{key:"findInOptions",value:function(e,i,n){var o=arguments.length>3&&void 0!==arguments[3]&&arguments[3],r=1e9,s="",a=[],h=e.toLowerCase(),l=void 0;for(var d in i){var c=void 0;if(void 0!==i[d].__type__&&!0===o){var u=t.findInOptions(e,i[d],yb(n,d));r>u.distance&&(s=u.closestMatch,a=u.path,r=u.distance,l=u.indexMatch)}else{var f;-1!==lg(f=d.toLowerCase()).call(f,h)&&(l=d),r>(c=t.levenshteinDistance(e,d))&&(s=d,a=mb(n),r=c)}}return{closestMatch:s,path:a,distance:r,indexMatch:l}}},{key:"printLocation",value:function(t,e){for(var i="\n\n"+(arguments.length>2&&void 0!==arguments[2]?arguments[2]:"Problem value found at: \n")+"options = {\n",n=0;n0)return"before"==n?Math.max(0,h-1):h;if(o(s,e)<0&&o(a,e)>0)return"before"==n?h:Math.min(t.length-1,h+1);o(s,e)<0?d=h+1:c=h-1,l++}return-1},bridgeObject:zb,copyAndExtendArray:yb,copyArray:mb,deepExtend:gb,deepObjectAssign:Km,easingFunctions:jb,equalArray:function(t,e){if(t.length!==e.length)return!1;for(var i=0,n=t.length;i0&&void 0!==arguments[0]?arguments[0]:window.event,e=null;return t&&(t.target?e=t.target:t.srcElement&&(e=t.srcElement)),e instanceof Element&&(null==e.nodeType||3!=e.nodeType||(e=e.parentNode)instanceof Element)?e:null},getType:function(t){var e=bu(t);return"object"===e?null===t?"null":t instanceof Boolean?"Boolean":t instanceof Number?"Number":t instanceof String?"String":Df(t)?"Array":t instanceof Date?"Date":"Object":"number"===e?"Number":"boolean"===e?"Boolean":"string"===e?"String":void 0===e?"undefined":e},hasParent:function(t,e){for(var i=t;i;){if(i===e)return!0;if(!i.parentNode)return!1;i=i.parentNode}return!1},hexToHSV:Ib,hexToRGB:Eb,insertSort:function(t,e){for(var i=0;i0&&e(n,t[o-1])<0;o--)t[o]=t[o-1];t[o]=n}return t},isDate:function(t){if(t instanceof Date)return!0;if(lb(t)){if(ib.exec(t))return!0;if(!isNaN(Date.parse(t)))return!0}return!1},isNumber:ab,isObject:db,isString:lb,isValidHex:Bb,isValidRGB:Nb,isValidRGBA:Fb,mergeOptions:Ab,option:xb,overrideOpacity:Ob,parseColor:Sb,preventDefault:function(t){t||(t=window.event),t&&(t.preventDefault?t.preventDefault():t.returnValue=!1)},pureDeepObjectAssign:Gm,recursiveDOMDelete:hb,removeClassName:function(t,e){var i=t.className.split(" "),n=e.split(" ");i=yv(i).call(i,(function(t){return!rv(n).call(n,t)})),t.className=i.join(" ")},removeCssText:function(t,e){for(var i=Mb(e),n=0,o=Hf(i);n2?i-2:0),o=2;o":!0,"--":!0},hw="",lw=0,dw="",cw="",uw=sw.NULL;function fw(){lw++,dw=hw.charAt(lw)}function pw(){return hw.charAt(lw+1)}function vw(t){var e=t.charCodeAt(0);return e<47?35===e||46===e:e<59?e>47:e<91?e>64:e<96?95===e:e<123&&e>96}function gw(t,e){if(t||(t={}),e)for(var i in e)e.hasOwnProperty(i)&&(t[i]=e[i]);return t}function yw(t,e,i){for(var n=e.split("."),o=t;n.length;){var r=n.shift();n.length?(o[r]||(o[r]={}),o=o[r]):o[r]=i}}function mw(t,e){for(var i,n,o=null,r=[t],s=t;s.parent;)r.push(s.parent),s=s.parent;if(s.nodes)for(i=0,n=s.nodes.length;i=0;i--){var a,h=r[i];h.nodes||(h.nodes=[]),-1===lg(a=h.nodes).call(a,o)&&h.nodes.push(o)}e.attr&&(o.attr=gw(o.attr,e.attr))}function bw(t,e){if(t.edges||(t.edges=[]),t.edges.push(e),t.edge){var i=gw({},t.edge);e.attr=gw(i,e.attr)}}function ww(t,e,i,n,o){var r={from:e,to:i,type:n};return t.edge&&(r.attr=gw({},t.edge)),r.attr=gw(r.attr||{},o),null!=o&&o.hasOwnProperty("arrows")&&null!=o.arrows&&(r.arrows={to:{enabled:!0,type:o.arrows.type}},o.arrows=null),r}function kw(){for(uw=sw.NULL,cw="";" "===dw||"\t"===dw||"\n"===dw||"\r"===dw;)fw();do{var t=!1;if("#"===dw){for(var e=lw-1;" "===hw.charAt(e)||"\t"===hw.charAt(e);)e--;if("\n"===hw.charAt(e)||""===hw.charAt(e)){for(;""!=dw&&"\n"!=dw;)fw();t=!0}}if("/"===dw&&"/"===pw()){for(;""!=dw&&"\n"!=dw;)fw();t=!0}if("/"===dw&&"*"===pw()){for(;""!=dw;){if("*"===dw&&"/"===pw()){fw(),fw();break}fw()}t=!0}for(;" "===dw||"\t"===dw||"\n"===dw||"\r"===dw;)fw()}while(t);if(""!==dw){var i=dw+pw();if(aw[i])return uw=sw.DELIMITER,cw=i,fw(),void fw();if(aw[dw])return uw=sw.DELIMITER,cw=dw,void fw();if(vw(dw)||"-"===dw){for(cw+=dw,fw();vw(dw);)cw+=dw,fw();return"false"===cw?cw=!1:"true"===cw?cw=!0:isNaN(Number(cw))||(cw=Number(cw)),void(uw=sw.IDENTIFIER)}if('"'===dw){for(fw();""!=dw&&('"'!=dw||'"'===dw&&'"'===pw());)'"'===dw?(cw+=dw,fw()):"\\"===dw&&"n"===pw()?(cw+="\n",fw()):cw+=dw,fw();if('"'!=dw)throw Sw('End of string " expected');return fw(),void(uw=sw.IDENTIFIER)}for(uw=sw.UNKNOWN;""!=dw;)cw+=dw,fw();throw new SyntaxError('Syntax error in part "'+Tw(cw,30)+'"')}uw=sw.DELIMITER}function _w(t){for(;""!==cw&&"}"!=cw;)xw(t),";"===cw&&kw()}function xw(t){var e=Ew(t);if(e)Ow(t,e);else{var i=function(t){if("node"===cw)return kw(),t.node=Cw(),"node";if("edge"===cw)return kw(),t.edge=Cw(),"edge";if("graph"===cw)return kw(),t.graph=Cw(),"graph";return null}(t);if(!i){if(uw!=sw.IDENTIFIER)throw Sw("Identifier expected");var n=cw;if(kw(),"="===cw){if(kw(),uw!=sw.IDENTIFIER)throw Sw("Identifier expected");t[n]=cw,kw()}else!function(t,e){var i={id:e},n=Cw();n&&(i.attr=n);mw(t,i),Ow(t,e)}(t,n)}}}function Ew(t){var e=null;if("subgraph"===cw&&((e={}).type="subgraph",kw(),uw===sw.IDENTIFIER&&(e.id=cw,kw())),"{"===cw){if(kw(),e||(e={}),e.parent=t,e.node=t.node,e.edge=t.edge,e.graph=t.graph,_w(e),"}"!=cw)throw Sw("Angle bracket } expected");kw(),delete e.node,delete e.edge,delete e.graph,delete e.parent,t.subgraphs||(t.subgraphs=[]),t.subgraphs.push(e)}return e}function Ow(t,e){for(;"->"===cw||"--"===cw;){var i,n=cw;kw();var o=Ew(t);if(o)i=o;else{if(uw!=sw.IDENTIFIER)throw Sw("Identifier or subgraph expected");mw(t,{id:i=cw}),kw()}bw(t,ww(t,e,i,n,Cw())),e=i}}function Cw(){for(var t,e,i=null,n={dashed:!0,solid:!1,dotted:[1,5]},o={dot:"circle",box:"box",crow:"crow",curve:"curve",icurve:"inv_curve",normal:"triangle",inv:"inv_triangle",diamond:"diamond",tee:"bar",vee:"vee"},r=new Array,s=new Array;"["===cw;){for(kw(),i={};""!==cw&&"]"!=cw;){if(uw!=sw.IDENTIFIER)throw Sw("Attribute name expected");var a=cw;if(kw(),"="!=cw)throw Sw("Equal sign = expected");if(kw(),uw!=sw.IDENTIFIER)throw Sw("Attribute value expected");var h=cw;"style"===a&&(h=n[h]),"arrowhead"===a&&(a="arrows",h={to:{enabled:!0,type:o[h]}}),"arrowtail"===a&&(a="arrows",h={from:{enabled:!0,type:o[h]}}),r.push({attr:i,name:a,value:h}),s.push(a),kw(),","==cw&&kw()}if("]"!=cw)throw Sw("Bracket ] expected");kw()}if(rv(s).call(s,"dir")){var l={arrows:{}};for(t=0;t"===t.type&&(e.arrows="to"),e};op(o=i.edges).call(o,(function(t){var e,i,o,s,a,h,l;(e=t.from instanceof Object?t.from.nodes:{id:t.from},i=t.to instanceof Object?t.to.nodes:{id:t.to},t.from instanceof Object&&t.from.edges)&&op(o=t.from.edges).call(o,(function(t){var e=r(t);n.edges.push(e)}));(a=i,h=function(e,i){var o=ww(n,e.id,i.id,t.type,t.attr),s=r(o);n.edges.push(s)},Df(s=e)?op(s).call(s,(function(t){Df(a)?op(a).call(a,(function(e){h(t,e)})):h(t,a)})):Df(a)?op(a).call(a,(function(t){h(s,t)})):h(s,a),t.to instanceof Object&&t.to.edges)&&op(l=t.to.edges).call(l,(function(t){var e=r(t);n.edges.push(e)}))}))}return i.attr&&(n.options=i.attr),n}var Iw=Object.freeze({__proto__:null,DOTToGraph:Dw,parseDOT:nw});function Bw(t,e){var i,n={edges:{inheritColor:!1},nodes:{fixed:!1,parseColor:!1}};null!=e&&(null!=e.fixed&&(n.nodes.fixed=e.fixed),null!=e.parseColor&&(n.nodes.parseColor=e.parseColor),null!=e.inheritColor&&(n.edges.inheritColor=e.inheritColor));var o=t.edges,r=jf(o).call(o,(function(t){var e={from:t.source,id:t.id,to:t.target};return null!=t.attributes&&(e.attributes=t.attributes),null!=t.label&&(e.label=t.label),null!=t.attributes&&null!=t.attributes.title&&(e.title=t.attributes.title),"Directed"===t.type&&(e.arrows="to"),t.color&&!1===n.edges.inheritColor&&(e.color=t.color),e}));return{nodes:jf(i=t.nodes).call(i,(function(t){var e={id:t.id,fixed:n.nodes.fixed&&null!=t.x&&null!=t.y};return null!=t.attributes&&(e.attributes=t.attributes),null!=t.label&&(e.label=t.label),null!=t.size&&(e.size=t.size),null!=t.attributes&&null!=t.attributes.title&&(e.title=t.attributes.title),null!=t.title&&(e.title=t.title),null!=t.x&&(e.x=t.x),null!=t.y&&(e.y=t.y),null!=t.color&&(!0===n.nodes.parseColor?e.color=t.color:e.color={background:t.color,border:t.color,highlight:{background:t.color,border:t.color},hover:{background:t.color,border:t.color}}),e})),edges:r}}var Nw=Object.freeze({__proto__:null,parseGephi:Bw}),Fw=Object.freeze({__proto__:null,cn:{addDescription:"单击空白处放置新节点。",addEdge:"添加连接线",addNode:"添加节点",back:"返回",close:"關閉",createEdgeError:"无法将连接线连接到群集。",del:"删除选定",deleteClusterError:"无法删除群集。",edgeDescription:"单击某个节点并将该连接线拖动到另一个节点以连接它们。",edit:"编辑",editClusterError:"无法编辑群集。",editEdge:"编辑连接线",editEdgeDescription:"单击控制节点并将它们拖到节点上连接。",editNode:"编辑节点"},cs:{addDescription:"Kluknutím do prázdného prostoru můžete přidat nový vrchol.",addEdge:"Přidat hranu",addNode:"Přidat vrchol",back:"Zpět",close:"Zavřít",createEdgeError:"Nelze připojit hranu ke shluku.",del:"Smazat výběr",deleteClusterError:"Nelze mazat shluky.",edgeDescription:"Přetažením z jednoho vrcholu do druhého můžete spojit tyto vrcholy novou hranou.",edit:"Upravit",editClusterError:"Nelze upravovat shluky.",editEdge:"Upravit hranu",editEdgeDescription:"Přetažením kontrolního vrcholu hrany ji můžete připojit k jinému vrcholu.",editNode:"Upravit vrchol"},de:{addDescription:"Klicke auf eine freie Stelle, um einen neuen Knoten zu plazieren.",addEdge:"Kante hinzufügen",addNode:"Knoten hinzufügen",back:"Zurück",close:"Schließen",createEdgeError:"Es ist nicht möglich, Kanten mit Clustern zu verbinden.",del:"Lösche Auswahl",deleteClusterError:"Cluster können nicht gelöscht werden.",edgeDescription:"Klicke auf einen Knoten und ziehe die Kante zu einem anderen Knoten, um diese zu verbinden.",edit:"Editieren",editClusterError:"Cluster können nicht editiert werden.",editEdge:"Kante editieren",editEdgeDescription:"Klicke auf die Verbindungspunkte und ziehe diese auf einen Knoten, um sie zu verbinden.",editNode:"Knoten editieren"},en:{addDescription:"Click in an empty space to place a new node.",addEdge:"Add Edge",addNode:"Add Node",back:"Back",close:"Close",createEdgeError:"Cannot link edges to a cluster.",del:"Delete selected",deleteClusterError:"Clusters cannot be deleted.",edgeDescription:"Click on a node and drag the edge to another node to connect them.",edit:"Edit",editClusterError:"Clusters cannot be edited.",editEdge:"Edit Edge",editEdgeDescription:"Click on the control points and drag them to a node to connect to it.",editNode:"Edit Node"},es:{addDescription:"Haga clic en un lugar vacío para colocar un nuevo nodo.",addEdge:"Añadir arista",addNode:"Añadir nodo",back:"Atrás",close:"Cerrar",createEdgeError:"No se puede conectar una arista a un grupo.",del:"Eliminar selección",deleteClusterError:"No es posible eliminar grupos.",edgeDescription:"Haga clic en un nodo y arrastre la arista hacia otro nodo para conectarlos.",edit:"Editar",editClusterError:"No es posible editar grupos.",editEdge:"Editar arista",editEdgeDescription:"Haga clic en un punto de control y arrastrelo a un nodo para conectarlo.",editNode:"Editar nodo"},fr:{addDescription:"Cliquez dans un endroit vide pour placer un nœud.",addEdge:"Ajouter un lien",addNode:"Ajouter un nœud",back:"Retour",close:"Fermer",createEdgeError:"Impossible de créer un lien vers un cluster.",del:"Effacer la sélection",deleteClusterError:"Les clusters ne peuvent pas être effacés.",edgeDescription:"Cliquez sur un nœud et glissez le lien vers un autre nœud pour les connecter.",edit:"Éditer",editClusterError:"Les clusters ne peuvent pas être édités.",editEdge:"Éditer le lien",editEdgeDescription:"Cliquez sur les points de contrôle et glissez-les pour connecter un nœud.",editNode:"Éditer le nœud"},it:{addDescription:"Clicca per aggiungere un nuovo nodo",addEdge:"Aggiungi un vertice",addNode:"Aggiungi un nodo",back:"Indietro",close:"Chiudere",createEdgeError:"Non si possono collegare vertici ad un cluster",del:"Cancella la selezione",deleteClusterError:"I cluster non possono essere cancellati",edgeDescription:"Clicca su un nodo e trascinalo ad un altro nodo per connetterli.",edit:"Modifica",editClusterError:"I clusters non possono essere modificati.",editEdge:"Modifica il vertice",editEdgeDescription:"Clicca sui Punti di controllo e trascinali ad un nodo per connetterli.",editNode:"Modifica il nodo"},nl:{addDescription:"Klik op een leeg gebied om een nieuwe node te maken.",addEdge:"Link toevoegen",addNode:"Node toevoegen",back:"Terug",close:"Sluiten",createEdgeError:"Kan geen link maken naar een cluster.",del:"Selectie verwijderen",deleteClusterError:"Clusters kunnen niet worden verwijderd.",edgeDescription:"Klik op een node en sleep de link naar een andere node om ze te verbinden.",edit:"Wijzigen",editClusterError:"Clusters kunnen niet worden aangepast.",editEdge:"Link wijzigen",editEdgeDescription:"Klik op de verbindingspunten en sleep ze naar een node om daarmee te verbinden.",editNode:"Node wijzigen"},pt:{addDescription:"Clique em um espaço em branco para adicionar um novo nó",addEdge:"Adicionar aresta",addNode:"Adicionar nó",back:"Voltar",close:"Fechar",createEdgeError:"Não foi possível linkar arestas a um cluster.",del:"Remover selecionado",deleteClusterError:"Clusters não puderam ser removidos.",edgeDescription:"Clique em um nó e arraste a aresta até outro nó para conectá-los",edit:"Editar",editClusterError:"Clusters não puderam ser editados.",editEdge:"Editar aresta",editEdgeDescription:"Clique nos pontos de controle e os arraste para um nó para conectá-los",editNode:"Editar nó"},ru:{addDescription:"Кликните в свободное место, чтобы добавить новый узел.",addEdge:"Добавить ребро",addNode:"Добавить узел",back:"Назад",close:"Закрывать",createEdgeError:"Невозможно соединить ребра в кластер.",del:"Удалить выбранное",deleteClusterError:"Кластеры не могут быть удалены",edgeDescription:"Кликните на узел и протяните ребро к другому узлу, чтобы соединить их.",edit:"Редактировать",editClusterError:"Кластеры недоступны для редактирования.",editEdge:"Редактировать ребро",editEdgeDescription:"Кликните на контрольные точки и перетащите их в узел, чтобы подключиться к нему.",editNode:"Редактировать узел"},uk:{addDescription:"Kлікніть на вільне місце, щоб додати новий вузол.",addEdge:"Додати край",addNode:"Додати вузол",back:"Назад",close:"Закрити",createEdgeError:"Не можливо об'єднати краї в групу.",del:"Видалити обране",deleteClusterError:"Групи не можуть бути видалені.",edgeDescription:"Клікніть на вузол і перетягніть край до іншого вузла, щоб їх з'єднати.",edit:"Редагувати",editClusterError:"Групи недоступні для редагування.",editEdge:"Редагувати край",editEdgeDescription:"Клікніть на контрольні точки і перетягніть їх у вузол, щоб підключитися до нього.",editNode:"Редагувати вузол"}});var zw=function(){function t(){ph(this,t),this.NUM_ITERATIONS=4,this.image=new Image,this.canvas=document.createElement("canvas")}return xu(t,[{key:"init",value:function(){if(!this.initialized()){this.src=this.image.src;var t=this.image.width,e=this.image.height;this.width=t,this.height=e;var i=Math.floor(e/2),n=Math.floor(e/4),o=Math.floor(e/8),r=Math.floor(e/16),s=Math.floor(t/2),a=Math.floor(t/4),h=Math.floor(t/8),l=Math.floor(t/16);this.canvas.width=3*a,this.canvas.height=i,this.coordinates=[[0,0,s,i],[s,0,a,n],[s,n,h,o],[5*h,n,l,r]],this._fillMipMap()}}},{key:"initialized",value:function(){return void 0!==this.coordinates}},{key:"_fillMipMap",value:function(){var t=this.canvas.getContext("2d"),e=this.coordinates[0];t.drawImage(this.image,e[0],e[1],e[2],e[3]);for(var i=1;i2){e*=.5;for(var s=0;e>2&&s=this.NUM_ITERATIONS&&(s=this.NUM_ITERATIONS-1);var a=this.coordinates[s];t.drawImage(this.canvas,a[0],a[1],a[2],a[3],i,n,o,r)}else t.drawImage(this.image,i,n,o,r)}}]),t}(),Aw=function(){function t(e){ph(this,t),this.images={},this.imageBroken={},this.callback=e}return xu(t,[{key:"_tryloadBrokenUrl",value:function(t,e,i){void 0!==t&&void 0!==i&&(void 0!==e?(i.image.onerror=function(){console.error("Could not load brokenImage:",e)},i.image.src=e):console.warn("No broken url image defined"))}},{key:"_redrawWithImage",value:function(t){this.callback&&this.callback(t)}},{key:"load",value:function(t,e){var i=this,n=this.images[t];if(n)return n;var o=new zw;return this.images[t]=o,o.image.onload=function(){i._fixImageCoordinates(o.image),o.init(),i._redrawWithImage(o)},o.image.onerror=function(){console.error("Could not load image:",t),i._tryloadBrokenUrl(t,e,o)},o.image.src=t,o}},{key:"_fixImageCoordinates",value:function(t){0===t.width&&(document.body.appendChild(t),t.width=t.offsetWidth,t.height=t.offsetHeight,document.body.removeChild(t))}}]),t}(),jw={exports:{}},Rw=r((function(){if("function"==typeof ArrayBuffer){var t=new ArrayBuffer(8);Object.isExtensible(t)&&Object.defineProperty(t,"a",{value:8})}})),Lw=r,Hw=tt,Ww=w,qw=Rw,Vw=Object.isExtensible,Uw=Lw((function(){Vw(1)}))||qw?function(t){return!!Hw(t)&&((!qw||"ArrayBuffer"!==Ww(t))&&(!Vw||Vw(t)))}:Vw,Yw=!r((function(){return Object.isExtensible(Object.preventExtensions({}))})),Xw=Ti,Gw=g,Kw=Yi,$w=tt,Zw=Qt,Qw=Ze.f,Jw=Jh,tk=il,ek=Uw,ik=Yw,nk=!1,ok=ne("meta"),rk=0,sk=function(t){Qw(t,ok,{value:{objectID:"O"+rk++,weakData:{}}})},ak=jw.exports={enable:function(){ak.enable=function(){},nk=!0;var t=Jw.f,e=Gw([].splice),i={};i[ok]=1,t(i).length&&(Jw.f=function(i){for(var n=t(i),o=0,r=n.length;or;r++)if((a=y(t[r]))&&vk(kk,a))return a;return new wk(!1)}n=gk(t,o)}for(h=u?t.next:n.next;!(l=dk(h,n)).done;){try{a=y(l.value)}catch(t){mk(n,"throw",t)}if("object"==typeof a&&a&&vk(kk,a))return a}return new wk(!1)},xk=at,Ek=TypeError,Ok=function(t,e){if(xk(e,t))return t;throw new Ek("Incorrect invocation")},Ck=Ti,Sk=o,Tk=hk,Mk=r,Pk=gi,Dk=_k,Ik=Ok,Bk=S,Nk=tt,Fk=U,zk=Gr,Ak=Ze.f,jk=Fl.forEach,Rk=M,Lk=Lo.set,Hk=Lo.getterFor,Wk=function(t,e,i){var n,o=-1!==t.indexOf("Map"),r=-1!==t.indexOf("Weak"),s=o?"set":"add",a=Sk[t],h=a&&a.prototype,l={};if(Rk&&Bk(a)&&(r||h.forEach&&!Mk((function(){(new a).entries().next()})))){var d=(n=e((function(e,i){Lk(Ik(e,d),{type:t,collection:new a}),Fk(i)||Dk(i,e[s],{that:e,AS_ENTRIES:o})}))).prototype,c=Hk(t);jk(["add","clear","delete","forEach","get","has","set","keys","values","entries"],(function(t){var e="add"===t||"set"===t;!(t in h)||r&&"clear"===t||Pk(d,t,(function(i,n){var o=c(this).collection;if(!e&&r&&!Nk(i))return"get"===t&&void 0;var s=o[t](0===i?0:i,n);return e?this:s}))})),r||Ak(d,"size",{configurable:!0,get:function(){return c(this).collection.size}})}else n=i.getConstructor(e,t,o,s),Tk.enable();return zk(n,t,!1,!0),l[t]=n,Ck({global:!0,forced:!0},l),r||i.setStrong(n,t,o),n},qk=Mr,Vk=function(t,e,i){for(var n in e)i&&i.unsafe&&t[n]?t[n]=e[n]:qk(t,n,e[n],i);return t},Uk=st,Yk=vl,Xk=M,Gk=ue("species"),Kk=function(t){var e=Uk(t);Xk&&e&&!e[Gk]&&Yk(e,Gk,{configurable:!0,get:function(){return this}})},$k=mr,Zk=vl,Qk=Vk,Jk=$e,t_=Ok,e_=U,i_=_k,n_=Ss,o_=Ts,r_=Kk,s_=M,a_=hk.fastKey,h_=Lo.set,l_=Lo.getterFor,d_={getConstructor:function(t,e,i,n){var o=t((function(t,o){t_(t,r),h_(t,{type:e,index:$k(null),first:void 0,last:void 0,size:0}),s_||(t.size=0),e_(o)||i_(o,t[n],{that:t,AS_ENTRIES:i})})),r=o.prototype,s=l_(e),a=function(t,e,i){var n,o,r=s(t),a=h(t,e);return a?a.value=i:(r.last=a={index:o=a_(e,!0),key:e,value:i,previous:n=r.last,next:void 0,removed:!1},r.first||(r.first=a),n&&(n.next=a),s_?r.size++:t.size++,"F"!==o&&(r.index[o]=a)),t},h=function(t,e){var i,n=s(t),o=a_(e);if("F"!==o)return n.index[o];for(i=n.first;i;i=i.next)if(i.key===e)return i};return Qk(r,{clear:function(){for(var t=s(this),e=t.index,i=t.first;i;)i.removed=!0,i.previous&&(i.previous=i.previous.next=void 0),delete e[i.index],i=i.next;t.first=t.last=void 0,s_?t.size=0:this.size=0},delete:function(t){var e=this,i=s(e),n=h(e,t);if(n){var o=n.next,r=n.previous;delete i.index[n.index],n.removed=!0,r&&(r.next=o),o&&(o.previous=r),i.first===n&&(i.first=o),i.last===n&&(i.last=r),s_?i.size--:e.size--}return!!n},forEach:function(t){for(var e,i=s(this),n=Jk(t,arguments.length>1?arguments[1]:void 0);e=e?e.next:i.first;)for(n(e.value,e.key,this);e&&e.removed;)e=e.previous},has:function(t){return!!h(this,t)}}),Qk(r,i?{get:function(t){var e=h(this,t);return e&&e.value},set:function(t,e){return a(this,0===t?0:t,e)}}:{add:function(t){return a(this,t=0===t?0:t,t)}}),s_&&Zk(r,"size",{configurable:!0,get:function(){return s(this).size}}),o},setStrong:function(t,e,i){var n=e+" Iterator",o=l_(e),r=l_(n);n_(t,e,(function(t,e){h_(this,{type:n,target:t,state:o(t),kind:e,last:void 0})}),(function(){for(var t=r(this),e=t.kind,i=t.last;i&&i.removed;)i=i.previous;return t.target&&(t.last=i=i?i.next:t.state.first)?o_("keys"===e?i.key:"values"===e?i.value:[i.key,i.value],!1):(t.target=void 0,o_(void 0,!0))}),i?"entries":"values",!i,!0),r_(e)}};Wk("Map",(function(t){return function(){return t(this,arguments.length?arguments[0]:void 0)}}),d_);var c_=i(et.Map),u_=function(){function t(){ph(this,t),this.clear(),this._defaultIndex=0,this._groupIndex=0,this._defaultGroups=[{border:"#2B7CE9",background:"#97C2FC",highlight:{border:"#2B7CE9",background:"#D2E5FF"},hover:{border:"#2B7CE9",background:"#D2E5FF"}},{border:"#FFA500",background:"#FFFF00",highlight:{border:"#FFA500",background:"#FFFFA3"},hover:{border:"#FFA500",background:"#FFFFA3"}},{border:"#FA0A10",background:"#FB7E81",highlight:{border:"#FA0A10",background:"#FFAFB1"},hover:{border:"#FA0A10",background:"#FFAFB1"}},{border:"#41A906",background:"#7BE141",highlight:{border:"#41A906",background:"#A1EC76"},hover:{border:"#41A906",background:"#A1EC76"}},{border:"#E129F0",background:"#EB7DF4",highlight:{border:"#E129F0",background:"#F0B3F5"},hover:{border:"#E129F0",background:"#F0B3F5"}},{border:"#7C29F0",background:"#AD85E4",highlight:{border:"#7C29F0",background:"#D3BDF0"},hover:{border:"#7C29F0",background:"#D3BDF0"}},{border:"#C37F00",background:"#FFA807",highlight:{border:"#C37F00",background:"#FFCA66"},hover:{border:"#C37F00",background:"#FFCA66"}},{border:"#4220FB",background:"#6E6EFD",highlight:{border:"#4220FB",background:"#9B9BFD"},hover:{border:"#4220FB",background:"#9B9BFD"}},{border:"#FD5A77",background:"#FFC0CB",highlight:{border:"#FD5A77",background:"#FFD1D9"},hover:{border:"#FD5A77",background:"#FFD1D9"}},{border:"#4AD63A",background:"#C2FABC",highlight:{border:"#4AD63A",background:"#E6FFE3"},hover:{border:"#4AD63A",background:"#E6FFE3"}},{border:"#990000",background:"#EE0000",highlight:{border:"#BB0000",background:"#FF3333"},hover:{border:"#BB0000",background:"#FF3333"}},{border:"#FF6000",background:"#FF6000",highlight:{border:"#FF6000",background:"#FF6000"},hover:{border:"#FF6000",background:"#FF6000"}},{border:"#97C2FC",background:"#2B7CE9",highlight:{border:"#D2E5FF",background:"#2B7CE9"},hover:{border:"#D2E5FF",background:"#2B7CE9"}},{border:"#399605",background:"#255C03",highlight:{border:"#399605",background:"#255C03"},hover:{border:"#399605",background:"#255C03"}},{border:"#B70054",background:"#FF007E",highlight:{border:"#B70054",background:"#FF007E"},hover:{border:"#B70054",background:"#FF007E"}},{border:"#AD85E4",background:"#7C29F0",highlight:{border:"#D3BDF0",background:"#7C29F0"},hover:{border:"#D3BDF0",background:"#7C29F0"}},{border:"#4557FA",background:"#000EA1",highlight:{border:"#6E6EFD",background:"#000EA1"},hover:{border:"#6E6EFD",background:"#000EA1"}},{border:"#FFC0CB",background:"#FD5A77",highlight:{border:"#FFD1D9",background:"#FD5A77"},hover:{border:"#FFD1D9",background:"#FD5A77"}},{border:"#C2FABC",background:"#74D66A",highlight:{border:"#E6FFE3",background:"#74D66A"},hover:{border:"#E6FFE3",background:"#74D66A"}},{border:"#EE0000",background:"#990000",highlight:{border:"#FF3333",background:"#BB0000"},hover:{border:"#FF3333",background:"#BB0000"}}],this.options={},this.defaultOptions={useDefaultGroups:!0},bn(this.options,this.defaultOptions)}return xu(t,[{key:"setOptions",value:function(t){var e=["useDefaultGroups"];if(void 0!==t)for(var i in t)if(Object.prototype.hasOwnProperty.call(t,i)&&-1===lg(e).call(e,i)){var n=t[i];this.add(i,n)}}},{key:"clear",value:function(){this._groups=new c_,this._groupNames=[]}},{key:"get",value:function(t){var e=!(arguments.length>1&&void 0!==arguments[1])||arguments[1],i=this._groups.get(t);if(void 0===i&&e)if(!1===this.options.useDefaultGroups&&this._groupNames.length>0){var n=this._groupIndex%this._groupNames.length;++this._groupIndex,(i={}).color=this._groups.get(this._groupNames[n]),this._groups.set(t,i)}else{var o=this._defaultIndex%this._defaultGroups.length;this._defaultIndex++,(i={}).color=this._defaultGroups[o],this._groups.set(t,i)}return i}},{key:"add",value:function(t,e){return this._groups.has(t)||this._groupNames.push(t),this._groups.set(t,e),e}}]),t}();Ti({target:"Number",stat:!0},{isNaN:function(t){return t!=t}});var f_=i(et.Number.isNaN),p_=o.isFinite,v_=Number.isFinite||function(t){return"number"==typeof t&&p_(t)};Ti({target:"Number",stat:!0},{isFinite:v_});var g_=i(et.Number.isFinite),y_=Fl.some;Ti({target:"Array",proto:!0,forced:!Xf("some")},{some:function(t){return y_(this,t,arguments.length>1?arguments[1]:void 0)}});var m_=Nn("Array").some,b_=at,w_=m_,k_=Array.prototype,__=function(t){var e=t.some;return t===k_||b_(k_,t)&&e===k_.some?w_:e},x_=i(__);function E_(t){if(void 0===t)throw new ReferenceError("this hasn't been initialised - super() hasn't been called");return t}var O_=fg,C_=i(O_);Ti({target:"Object",stat:!0},{setPrototypeOf:ds});var S_=et.Object.setPrototypeOf,T_=i(S_),M_=i(Ln);function P_(t,e){var i;return P_=T_?M_(i=T_).call(i):function(t,e){return t.__proto__=e,t},P_(t,e)}function D_(t,e){if("function"!=typeof e&&null!==e)throw new TypeError("Super expression must either be null or a function");t.prototype=C_(e&&e.prototype,{constructor:{value:t,writable:!0,configurable:!0}}),xh(t,"prototype",{writable:!1}),e&&P_(t,e)}function I_(t,e){if(e&&("object"===bu(e)||"function"==typeof e))return e;if(void 0!==e)throw new TypeError("Derived constructors may only return object or undefined");return E_(t)}var B_=lv,N_=i(B_);function F_(t){var e;return F_=T_?M_(e=N_).call(e):function(t){return t.__proto__||N_(t)},F_(t)}function z_(t,e,i){return(e=ku(e))in t?xh(t,e,{value:i,enumerable:!0,configurable:!0,writable:!0}):t[e]=i,t}var A_={exports:{}},j_={exports:{}};!function(t){var e=pu,i=yu;function n(o){return t.exports=n="function"==typeof e&&"symbol"==typeof i?function(t){return typeof t}:function(t){return t&&"function"==typeof e&&t.constructor===e&&t!==e.prototype?"symbol":typeof t},t.exports.__esModule=!0,t.exports.default=t.exports,n(o)}t.exports=n,t.exports.__esModule=!0,t.exports.default=t.exports}(j_);var R_=j_.exports,L_=np,H_=Qt,W_=Mf,q_=T,V_=Ze,U_=tt,Y_=gi,X_=Error,G_=g("".replace),K_=String(new X_("zxcasd").stack),$_=/\n\s*at [^:]*:[^\n]*/,Z_=$_.test(K_),Q_=R,J_=!r((function(){var t=new Error("a");return!("stack"in t)||(Object.defineProperty(t,"stack",Q_(1,7)),7!==t.stack)})),tx=gi,ex=function(t,e){if(Z_&&"string"==typeof t&&!X_.prepareStackTrace)for(;e--;)t=G_(t,$_,"");return t},ix=J_,nx=Error.captureStackTrace,ox=co,rx=Ti,sx=at,ax=Sr,hx=ds,lx=function(t,e,i){for(var n=W_(e),o=V_.f,r=q_.f,s=0;s2&&fx(i,arguments[2]);var o=[];return vx(t,bx,{that:o}),cx(i,"errors",o),i};hx?hx(wx,mx):lx(wx,mx,{name:!0});var kx=wx.prototype=dx(mx.prototype,{constructor:ux(1,wx),message:ux(1,""),name:ux(1,"AggregateError")});rx({global:!0,constructor:!0,arity:2},{AggregateError:wx});var _x,xx,Ex,Ox,Cx="process"===w(o.process),Sx=da,Tx=St,Mx=TypeError,Px=function(t){if(Sx(t))return t;throw new Mx(Tx(t)+" is not a constructor")},Dx=ii,Ix=Px,Bx=U,Nx=ue("species"),Fx=function(t,e){var i,n=Dx(t).constructor;return void 0===n||Bx(i=Dx(n)[Nx])?e:Ix(i)},zx=/(?:ipad|iphone|ipod).*applewebkit/i.test(ht),Ax=o,jx=c,Rx=$e,Lx=S,Hx=Qt,Wx=r,qx=er,Vx=wn,Ux=Ce,Yx=kg,Xx=zx,Gx=Cx,Kx=Ax.setImmediate,$x=Ax.clearImmediate,Zx=Ax.process,Qx=Ax.Dispatch,Jx=Ax.Function,tE=Ax.MessageChannel,eE=Ax.String,iE=0,nE={},oE="onreadystatechange";Wx((function(){_x=Ax.location}));var rE=function(t){if(Hx(nE,t)){var e=nE[t];delete nE[t],e()}},sE=function(t){return function(){rE(t)}},aE=function(t){rE(t.data)},hE=function(t){Ax.postMessage(eE(t),_x.protocol+"//"+_x.host)};Kx&&$x||(Kx=function(t){Yx(arguments.length,1);var e=Lx(t)?t:Jx(t),i=Vx(arguments,1);return nE[++iE]=function(){jx(e,void 0,i)},xx(iE),iE},$x=function(t){delete nE[t]},Gx?xx=function(t){Zx.nextTick(sE(t))}:Qx&&Qx.now?xx=function(t){Qx.now(sE(t))}:tE&&!Xx?(Ox=(Ex=new tE).port2,Ex.port1.onmessage=aE,xx=Rx(Ox.postMessage,Ox)):Ax.addEventListener&&Lx(Ax.postMessage)&&!Ax.importScripts&&_x&&"file:"!==_x.protocol&&!Wx(hE)?(xx=hE,Ax.addEventListener("message",aE,!1)):xx=oE in Ux("script")?function(t){qx.appendChild(Ux("script"))[oE]=function(){qx.removeChild(this),rE(t)}}:function(t){setTimeout(sE(t),0)});var lE={set:Kx,clear:$x},dE=function(){this.head=null,this.tail=null};dE.prototype={add:function(t){var e={item:t,next:null},i=this.tail;i?i.next=e:this.head=e,this.tail=e},get:function(){var t=this.head;if(t)return null===(this.head=t.next)&&(this.tail=null),t.item}};var cE,uE,fE,pE,vE,gE=dE,yE=/ipad|iphone|ipod/i.test(ht)&&"undefined"!=typeof Pebble,mE=/web0s(?!.*chrome)/i.test(ht),bE=o,wE=$e,kE=T.f,_E=lE.set,xE=gE,EE=zx,OE=yE,CE=mE,SE=Cx,TE=bE.MutationObserver||bE.WebKitMutationObserver,ME=bE.document,PE=bE.process,DE=bE.Promise,IE=kE(bE,"queueMicrotask"),BE=IE&&IE.value;if(!BE){var NE=new xE,FE=function(){var t,e;for(SE&&(t=PE.domain)&&t.exit();e=NE.get();)try{e()}catch(t){throw NE.head&&cE(),t}t&&t.enter()};EE||SE||CE||!TE||!ME?!OE&&DE&&DE.resolve?((pE=DE.resolve(void 0)).constructor=DE,vE=wE(pE.then,pE),cE=function(){vE(FE)}):SE?cE=function(){PE.nextTick(FE)}:(_E=wE(_E,bE),cE=function(){_E(FE)}):(uE=!0,fE=ME.createTextNode(""),new TE(FE).observe(fE,{characterData:!0}),cE=function(){fE.data=uE=!uE}),BE=function(t){NE.head||cE(),NE.add(t)}}var zE=BE,AE=function(t){try{return{error:!1,value:t()}}catch(t){return{error:!0,value:t}}},jE=o.Promise,RE="object"==typeof Deno&&Deno&&"object"==typeof Deno.version,LE=!RE&&!Cx&&"object"==typeof window&&"object"==typeof document,HE=o,WE=jE,qE=S,VE=Ye,UE=$s,YE=ue,XE=LE,GE=RE,KE=vt,$E=WE&&WE.prototype,ZE=YE("species"),QE=!1,JE=qE(HE.PromiseRejectionEvent),tO=VE("Promise",(function(){var t=UE(WE),e=t!==String(WE);if(!e&&66===KE)return!0;if(!$E.catch||!$E.finally)return!0;if(!KE||KE<51||!/native code/.test(t)){var i=new WE((function(t){t(1)})),n=function(t){t((function(){}),(function(){}))};if((i.constructor={})[ZE]=n,!(QE=i.then((function(){}))instanceof n))return!0}return!e&&(XE||GE)&&!JE})),eO={CONSTRUCTOR:tO,REJECTION_EVENT:JE,SUBCLASSING:QE},iO={},nO=Dt,oO=TypeError,rO=function(t){var e,i;this.promise=new t((function(t,n){if(void 0!==e||void 0!==i)throw new oO("Bad Promise constructor");e=t,i=n})),this.resolve=nO(e),this.reject=nO(i)};iO.f=function(t){return new rO(t)};var sO,aO,hO=Ti,lO=Cx,dO=o,cO=I,uO=Mr,fO=Gr,pO=Kk,vO=Dt,gO=S,yO=tt,mO=Ok,bO=Fx,wO=lE.set,kO=zE,_O=function(t,e){try{1===arguments.length?console.error(t):console.error(t,e)}catch(t){}},xO=AE,EO=gE,OO=Lo,CO=jE,SO=eO,TO=iO,MO="Promise",PO=SO.CONSTRUCTOR,DO=SO.REJECTION_EVENT,IO=OO.getterFor(MO),BO=OO.set,NO=CO&&CO.prototype,FO=CO,zO=NO,AO=dO.TypeError,jO=dO.document,RO=dO.process,LO=TO.f,HO=LO,WO=!!(jO&&jO.createEvent&&dO.dispatchEvent),qO="unhandledrejection",VO=function(t){var e;return!(!yO(t)||!gO(e=t.then))&&e},UO=function(t,e){var i,n,o,r=e.value,s=1===e.state,a=s?t.ok:t.fail,h=t.resolve,l=t.reject,d=t.domain;try{a?(s||(2===e.rejection&&$O(e),e.rejection=1),!0===a?i=r:(d&&d.enter(),i=a(r),d&&(d.exit(),o=!0)),i===t.promise?l(new AO("Promise-chain cycle")):(n=VO(i))?cO(n,i,h,l):h(i)):l(r)}catch(t){d&&!o&&d.exit(),l(t)}},YO=function(t,e){t.notified||(t.notified=!0,kO((function(){for(var i,n=t.reactions;i=n.get();)UO(i,t);t.notified=!1,e&&!t.rejection&&GO(t)})))},XO=function(t,e,i){var n,o;WO?((n=jO.createEvent("Event")).promise=e,n.reason=i,n.initEvent(t,!1,!0),dO.dispatchEvent(n)):n={promise:e,reason:i},!DO&&(o=dO["on"+t])?o(n):t===qO&&_O("Unhandled promise rejection",i)},GO=function(t){cO(wO,dO,(function(){var e,i=t.facade,n=t.value;if(KO(t)&&(e=xO((function(){lO?RO.emit("unhandledRejection",n,i):XO(qO,i,n)})),t.rejection=lO||KO(t)?2:1,e.error))throw e.value}))},KO=function(t){return 1!==t.rejection&&!t.parent},$O=function(t){cO(wO,dO,(function(){var e=t.facade;lO?RO.emit("rejectionHandled",e):XO("rejectionhandled",e,t.value)}))},ZO=function(t,e,i){return function(n){t(e,n,i)}},QO=function(t,e,i){t.done||(t.done=!0,i&&(t=i),t.value=e,t.state=2,YO(t,!0))},JO=function(t,e,i){if(!t.done){t.done=!0,i&&(t=i);try{if(t.facade===e)throw new AO("Promise can't be resolved itself");var n=VO(e);n?kO((function(){var i={done:!1};try{cO(n,e,ZO(JO,i,t),ZO(QO,i,t))}catch(e){QO(i,e,t)}})):(t.value=e,t.state=1,YO(t,!1))}catch(e){QO({done:!1},e,t)}}};PO&&(zO=(FO=function(t){mO(this,zO),vO(t),cO(sO,this);var e=IO(this);try{t(ZO(JO,e),ZO(QO,e))}catch(t){QO(e,t)}}).prototype,(sO=function(t){BO(this,{type:MO,done:!1,notified:!1,parent:!1,reactions:new EO,rejection:!1,state:0,value:void 0})}).prototype=uO(zO,"then",(function(t,e){var i=IO(this),n=LO(bO(this,FO));return i.parent=!0,n.ok=!gO(t)||t,n.fail=gO(e)&&e,n.domain=lO?RO.domain:void 0,0===i.state?i.reactions.add(n):kO((function(){UO(n,i)})),n.promise})),aO=function(){var t=new sO,e=IO(t);this.promise=t,this.resolve=ZO(JO,e),this.reject=ZO(QO,e)},TO.f=LO=function(t){return t===FO||undefined===t?new aO(t):HO(t)}),hO({global:!0,constructor:!0,wrap:!0,forced:PO},{Promise:FO}),fO(FO,MO,!1,!0),pO(MO);var tC=jE,eC=eO.CONSTRUCTOR||!qa((function(t){tC.all(t).then(void 0,(function(){}))})),iC=I,nC=Dt,oC=iO,rC=AE,sC=_k;Ti({target:"Promise",stat:!0,forced:eC},{all:function(t){var e=this,i=oC.f(e),n=i.resolve,o=i.reject,r=rC((function(){var i=nC(e.resolve),r=[],s=0,a=1;sC(t,(function(t){var h=s++,l=!1;a++,iC(i,e,t).then((function(t){l||(l=!0,r[h]=t,--a||n(r))}),o)})),--a||n(r)}));return r.error&&o(r.value),i.promise}});var aC=Ti,hC=eO.CONSTRUCTOR;jE&&jE.prototype,aC({target:"Promise",proto:!0,forced:hC,real:!0},{catch:function(t){return this.then(void 0,t)}});var lC=I,dC=Dt,cC=iO,uC=AE,fC=_k;Ti({target:"Promise",stat:!0,forced:eC},{race:function(t){var e=this,i=cC.f(e),n=i.reject,o=uC((function(){var o=dC(e.resolve);fC(t,(function(t){lC(o,e,t).then(i.resolve,n)}))}));return o.error&&n(o.value),i.promise}});var pC=I,vC=iO;Ti({target:"Promise",stat:!0,forced:eO.CONSTRUCTOR},{reject:function(t){var e=vC.f(this);return pC(e.reject,void 0,t),e.promise}});var gC=ii,yC=tt,mC=iO,bC=function(t,e){if(gC(t),yC(e)&&e.constructor===t)return e;var i=mC.f(t);return(0,i.resolve)(e),i.promise},wC=Ti,kC=jE,_C=eO.CONSTRUCTOR,xC=bC,EC=st("Promise"),OC=!_C;wC({target:"Promise",stat:!0,forced:true},{resolve:function(t){return xC(OC&&this===EC?kC:this,t)}});var CC=I,SC=Dt,TC=iO,MC=AE,PC=_k;Ti({target:"Promise",stat:!0,forced:eC},{allSettled:function(t){var e=this,i=TC.f(e),n=i.resolve,o=i.reject,r=MC((function(){var i=SC(e.resolve),o=[],r=0,s=1;PC(t,(function(t){var a=r++,h=!1;s++,CC(i,e,t).then((function(t){h||(h=!0,o[a]={status:"fulfilled",value:t},--s||n(o))}),(function(t){h||(h=!0,o[a]={status:"rejected",reason:t},--s||n(o))}))})),--s||n(o)}));return r.error&&o(r.value),i.promise}});var DC=I,IC=Dt,BC=st,NC=iO,FC=AE,zC=_k,AC="No one promise resolved";Ti({target:"Promise",stat:!0,forced:eC},{any:function(t){var e=this,i=BC("AggregateError"),n=NC.f(e),o=n.resolve,r=n.reject,s=FC((function(){var n=IC(e.resolve),s=[],a=0,h=1,l=!1;zC(t,(function(t){var d=a++,c=!1;h++,DC(n,e,t).then((function(t){c||l||(l=!0,o(t))}),(function(t){c||l||(c=!0,s[d]=t,--h||r(new i(s,AC)))}))})),--h||r(new i(s,AC))}));return s.error&&r(s.value),n.promise}});var jC=Ti,RC=jE,LC=r,HC=st,WC=S,qC=Fx,VC=bC,UC=RC&&RC.prototype;jC({target:"Promise",proto:!0,real:!0,forced:!!RC&&LC((function(){UC.finally.call({then:function(){}},(function(){}))}))},{finally:function(t){var e=qC(this,HC("Promise")),i=WC(t);return this.then(i?function(i){return VC(e,t()).then((function(){return i}))}:t,i?function(i){return VC(e,t()).then((function(){throw i}))}:t)}});var YC=et.Promise,XC=iO;Ti({target:"Promise",stat:!0},{withResolvers:function(){var t=XC.f(this);return{promise:t.promise,resolve:t.resolve,reject:t.reject}}});var GC=YC,KC=iO,$C=AE;Ti({target:"Promise",stat:!0,forced:!0},{try:function(t){var e=KC.f(this),i=$C(t);return(i.error?e.reject:e.resolve)(i.value),e.promise}});var ZC=GC,QC=pp;!function(t){var e=R_.default,i=_h,n=pu,o=O_,r=B_,s=L_,a=Lu,h=S_,l=ZC,d=QC,c=lf;function u(){t.exports=u=function(){return p},t.exports.__esModule=!0,t.exports.default=t.exports;var f,p={},v=Object.prototype,g=v.hasOwnProperty,y=i||function(t,e,i){t[e]=i.value},m="function"==typeof n?n:{},b=m.iterator||"@@iterator",w=m.asyncIterator||"@@asyncIterator",k=m.toStringTag||"@@toStringTag";function _(t,e,n){return i(t,e,{value:n,enumerable:!0,configurable:!0,writable:!0}),t[e]}try{_({},"")}catch(f){_=function(t,e,i){return t[e]=i}}function x(t,e,i,n){var r=e&&e.prototype instanceof P?e:P,s=o(r.prototype),a=new W(n||[]);return y(s,"_invoke",{value:j(t,i,a)}),s}function E(t,e,i){try{return{type:"normal",arg:t.call(e,i)}}catch(t){return{type:"throw",arg:t}}}p.wrap=x;var O="suspendedStart",C="suspendedYield",S="executing",T="completed",M={};function P(){}function D(){}function I(){}var B={};_(B,b,(function(){return this}));var N=r&&r(r(q([])));N&&N!==v&&g.call(N,b)&&(B=N);var F=I.prototype=P.prototype=o(B);function z(t){var e;s(e=["next","throw","return"]).call(e,(function(e){_(t,e,(function(t){return this._invoke(e,t)}))}))}function A(t,i){function n(o,r,s,a){var h=E(t[o],t,r);if("throw"!==h.type){var l=h.arg,d=l.value;return d&&"object"==e(d)&&g.call(d,"__await")?i.resolve(d.__await).then((function(t){n("next",t,s,a)}),(function(t){n("throw",t,s,a)})):i.resolve(d).then((function(t){l.value=t,s(l)}),(function(t){return n("throw",t,s,a)}))}a(h.arg)}var o;y(this,"_invoke",{value:function(t,e){function r(){return new i((function(i,o){n(t,e,i,o)}))}return o=o?o.then(r,r):r()}})}function j(t,e,i){var n=O;return function(o,r){if(n===S)throw new Error("Generator is already running");if(n===T){if("throw"===o)throw r;return{value:f,done:!0}}for(i.method=o,i.arg=r;;){var s=i.delegate;if(s){var a=R(s,i);if(a){if(a===M)continue;return a}}if("next"===i.method)i.sent=i._sent=i.arg;else if("throw"===i.method){if(n===O)throw n=T,i.arg;i.dispatchException(i.arg)}else"return"===i.method&&i.abrupt("return",i.arg);n=S;var h=E(t,e,i);if("normal"===h.type){if(n=i.done?T:C,h.arg===M)continue;return{value:h.arg,done:i.done}}"throw"===h.type&&(n=T,i.method="throw",i.arg=h.arg)}}}function R(t,e){var i=e.method,n=t.iterator[i];if(n===f)return e.delegate=null,"throw"===i&&t.iterator.return&&(e.method="return",e.arg=f,R(t,e),"throw"===e.method)||"return"!==i&&(e.method="throw",e.arg=new TypeError("The iterator does not provide a '"+i+"' method")),M;var o=E(n,t.iterator,e.arg);if("throw"===o.type)return e.method="throw",e.arg=o.arg,e.delegate=null,M;var r=o.arg;return r?r.done?(e[t.resultName]=r.value,e.next=t.nextLoc,"return"!==e.method&&(e.method="next",e.arg=f),e.delegate=null,M):r:(e.method="throw",e.arg=new TypeError("iterator result is not an object"),e.delegate=null,M)}function L(t){var e,i={tryLoc:t[0]};1 in t&&(i.catchLoc=t[1]),2 in t&&(i.finallyLoc=t[2],i.afterLoc=t[3]),a(e=this.tryEntries).call(e,i)}function H(t){var e=t.completion||{};e.type="normal",delete e.arg,t.completion=e}function W(t){this.tryEntries=[{tryLoc:"root"}],s(t).call(t,L,this),this.reset(!0)}function q(t){if(t||""===t){var i=t[b];if(i)return i.call(t);if("function"==typeof t.next)return t;if(!isNaN(t.length)){var n=-1,o=function e(){for(;++n=0;--n){var o=this.tryEntries[n],r=o.completion;if("root"===o.tryLoc)return i("end");if(o.tryLoc<=this.prev){var s=g.call(o,"catchLoc"),a=g.call(o,"finallyLoc");if(s&&a){if(this.prev=0;--i){var n=this.tryEntries[i];if(n.tryLoc<=this.prev&&g.call(n,"finallyLoc")&&this.prev=0;--e){var i=this.tryEntries[e];if(i.finallyLoc===t)return this.complete(i.completion,i.afterLoc),H(i),M}},catch:function(t){for(var e=this.tryEntries.length-1;e>=0;--e){var i=this.tryEntries[e];if(i.tryLoc===t){var n=i.completion;if("throw"===n.type){var o=n.arg;H(i)}return o}}throw new Error("illegal catch attempt")},delegateYield:function(t,e,i){return this.delegate={iterator:q(t),resultName:e,nextLoc:i},"next"===this.method&&(this.arg=f),M}},p}t.exports=u,t.exports.__esModule=!0,t.exports.default=t.exports}(A_);var JC=(0,A_.exports)(),tS=JC;try{regeneratorRuntime=JC}catch(t){"object"==typeof globalThis?globalThis.regeneratorRuntime=JC:Function("r","regeneratorRuntime = r")(JC)}var eS=i(tS),iS=Dt,nS=Kt,oS=V,rS=Li,sS=TypeError,aS=function(t){return function(e,i,n,o){iS(i);var r=nS(e),s=oS(r),a=rS(r),h=t?a-1:0,l=t?-1:1;if(n<2)for(;;){if(h in s){o=s[h],h+=l;break}if(h+=l,t?h<0:a<=h)throw new sS("Reduce of empty array with no initial value")}for(;t?h>=0:a>h;h+=l)h in s&&(o=i(o,s[h],h,r));return o}},hS={left:aS(!1),right:aS(!0)}.left;Ti({target:"Array",proto:!0,forced:!Cx&&vt>79&&vt<83||!Xf("reduce")},{reduce:function(t){var e=arguments.length;return hS(this,t,e,e>1?arguments[1]:void 0)}});var lS=Nn("Array").reduce,dS=at,cS=lS,uS=Array.prototype,fS=function(t){var e=t.reduce;return t===uS||dS(uS,t)&&e===uS.reduce?cS:e},pS=i(fS),vS=Oh,gS=Li,yS=Sh,mS=$e,bS=function(t,e,i,n,o,r,s,a){for(var h,l,d=o,c=0,u=!!s&&mS(s,a);c0&&vS(h)?(l=gS(h),d=bS(t,e,h,l,d,r-1)-1):(yS(d+1),t[d]=h),d++),c++;return d},wS=bS,kS=Dt,_S=Kt,xS=Li,ES=Nh;Ti({target:"Array",proto:!0},{flatMap:function(t){var e,i=_S(this),n=xS(i);return kS(t),(e=ES(i,0)).length=wS(e,i,i,n,0,1,t,arguments.length>1?arguments[1]:void 0),e}});var OS=Nn("Array").flatMap,CS=at,SS=OS,TS=Array.prototype,MS=function(t){var e=t.flatMap;return t===TS||CS(TS,t)&&e===TS.flatMap?SS:e},PS=i(MS);Wk("Set",(function(t){return function(){return t(this,arguments.length?arguments[0]:void 0)}}),d_);var DS=i(et.Set),IS=i(gu),BS=i(Sa),NS=hl,FS=Math.floor,zS=function(t,e){var i=t.length,n=FS(i/2);return i<8?AS(t,e):jS(t,zS(NS(t,0,n),e),zS(NS(t,n),e),e)},AS=function(t,e){for(var i,n,o=t.length,r=1;r0;)t[n]=t[--n];n!==r++&&(t[n]=i)}return t},jS=function(t,e,i,n){for(var o=e.length,r=i.length,s=0,a=0;s3)){if(iT)return!0;if(oT)return oT<603;var t,e,i,n,o="";for(t=65;t<76;t++){switch(e=String.fromCharCode(t),t){case 66:case 69:case 70:case 72:i=3;break;case 68:case 71:i=4;break;default:i=2}for(n=0;n<47;n++)rT.push({k:e+n,v:i})}for(rT.sort((function(t,e){return e.v-t.v})),n=0;nZS(i)?1:-1}}(t)),i=KS(o),n=0;na;)void 0!==(i=o(n,e=r[a++]))&&kM(s,e,i);return s}});var _M=i(et.Object.getOwnPropertyDescriptors),xM={exports:{}},EM=Ti,OM=M,CM=Xo.f;EM({target:"Object",stat:!0,forced:Object.defineProperties!==CM,sham:!OM},{defineProperties:CM});var SM=et.Object,TM=xM.exports=function(t,e){return SM.defineProperties(t,e)};SM.defineProperties.sham&&(TM.sham=!0);var MM=i(xM.exports);let PM;const DM=new Uint8Array(16);function IM(){if(!PM&&(PM="undefined"!=typeof crypto&&crypto.getRandomValues&&crypto.getRandomValues.bind(crypto),!PM))throw new Error("crypto.getRandomValues() not supported. See https://github.com/uuidjs/uuid#getrandomvalues-not-supported");return PM(DM)}const BM=[];for(let t=0;t<256;++t)BM.push((t+256).toString(16).slice(1));var NM,FM={randomUUID:"undefined"!=typeof crypto&&crypto.randomUUID&&crypto.randomUUID.bind(crypto)};function zM(t,e,i){if(FM.randomUUID&&!e&&!t)return FM.randomUUID();const n=(t=t||{}).random||(t.rng||IM)();if(n[6]=15&n[6]|64,n[8]=63&n[8]|128,e){i=i||0;for(let t=0;t<16;++t)e[i+t]=n[t];return e}return function(t,e=0){return BM[t[e+0]]+BM[t[e+1]]+BM[t[e+2]]+BM[t[e+3]]+"-"+BM[t[e+4]]+BM[t[e+5]]+"-"+BM[t[e+6]]+BM[t[e+7]]+"-"+BM[t[e+8]]+BM[t[e+9]]+"-"+BM[t[e+10]]+BM[t[e+11]]+BM[t[e+12]]+BM[t[e+13]]+BM[t[e+14]]+BM[t[e+15]]}(n)}function AM(t,e){var i=Hf(t);if(aM){var n=aM(t);e&&(n=yv(n).call(n,(function(e){return yM(t,e).enumerable}))),i.push.apply(i,n)}return i}function jM(t){for(var e=1;e=t.length?{done:!0}:{done:!1,value:t[n++]}},e:function(t){throw t},f:o}}throw new TypeError("Invalid attempt to iterate non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.")}var r,s=!0,a=!1;return{s:function(){i=i.call(t)},n:function(){var t=i.next();return s=t.done,t},e:function(t){a=!0,r=t},f:function(){try{s||null==i.return||i.return()}finally{if(a)throw r}}}}function HM(t,e){(null==e||e>t.length)&&(e=t.length);for(var i=0,n=new Array(e);ithis.max&&this.flush(),null!=this._timeout&&(clearTimeout(this._timeout),this._timeout=null),this.queue.length>0&&"number"==typeof this.delay&&(this._timeout=jg((function(){t.flush()}),this.delay))}},{key:"flush",value:function(){var t,e;op(t=Ap(e=this._queue).call(e,0)).call(t,(function(t){t.fn.apply(t.context||t.fn,t.args||[])}))}}],[{key:"extend",value:function(e,i){var n=new t(i);if(void 0!==e.flush)throw new Error("Target object already has a property flush");e.flush=function(){n.flush()};var o=[{name:"flush",original:void 0}];if(i&&i.replace)for(var r=0;ro&&(o=h,n=a)}return n}},{key:"min",value:function(t){var e=BS(this._pairs),i=e.next();if(i.done)return null;for(var n=i.value[1],o=t(i.value[1],i.value[0]);!(i=e.next()).done;){var r=pf(i.value,2),s=r[0],a=r[1],h=t(a,s);ho?1:no)&&(n=s,o=a)}}catch(t){r.e(t)}finally{r.f()}return n||null}},{key:"min",value:function(t){var e,i,n=null,o=null,r=LM(FT(e=this._data).call(e));try{for(r.s();!(i=r.n()).done;){var s=i.value,a=s[t];"number"==typeof a&&(null==o||ae.x&&t.tope.y}function mP(t){return"string"==typeof t&&""!==t}function bP(t,e,i,n){var o=n.x,r=n.y;if("function"==typeof n.distanceToBorder){var s=n.distanceToBorder(t,e),a=Math.sin(e)*s,h=Math.cos(e)*s;h===s?(o+=s,r=n.y):a===s?(o=n.x,r-=s):(o+=h,r-=a)}else n.shape.width>n.shape.height?(o=n.x+.5*n.shape.width,r=n.y-i):(o=n.x+i,r=n.y-.5*n.shape.height);return{x:o,y:r}}var wP=function(){function t(e){ph(this,t),this.measureText=e,this.current=0,this.width=0,this.height=0,this.lines=[]}return xu(t,[{key:"_add",value:function(t,e){var i=arguments.length>2&&void 0!==arguments[2]?arguments[2]:"normal";void 0===this.lines[t]&&(this.lines[t]={width:0,height:0,blocks:[]});var n=e;void 0!==e&&""!==e||(n=" ");var o=this.measureText(n,i),r=bn({},FT(o));r.text=e,r.width=o.width,r.mod=i,void 0!==e&&""!==e||(r.width=0),this.lines[t].blocks.push(r),this.lines[t].width+=r.width}},{key:"curWidth",value:function(){var t=this.lines[this.current];return void 0===t?0:t.width}},{key:"append",value:function(t){var e=arguments.length>1&&void 0!==arguments[1]?arguments[1]:"normal";this._add(this.current,t,e)}},{key:"newLine",value:function(t){var e=arguments.length>1&&void 0!==arguments[1]?arguments[1]:"normal";this._add(this.current,t,e),this.current++}},{key:"determineLineHeights",value:function(){for(var t=0;tt&&(t=n.width),e+=n.height}this.width=t,this.height=e}},{key:"removeEmptyBlocks",value:function(){for(var t=[],e=0;e"://,""://,""://,"":/<\/b>/,"":/<\/i>/,"":/<\/code>/,"*":/\*/,_:/_/,"`":/`/,afterBold:/[^*]/,afterItal:/[^_]/,afterMono:/[^`]/},_P=function(){function t(e){ph(this,t),this.text=e,this.bold=!1,this.ital=!1,this.mono=!1,this.spacing=!1,this.position=0,this.buffer="",this.modStack=[],this.blocks=[]}return xu(t,[{key:"mod",value:function(){return 0===this.modStack.length?"normal":this.modStack[0]}},{key:"modName",value:function(){return 0===this.modStack.length?"normal":"mono"===this.modStack[0]?"mono":this.bold&&this.ital?"boldital":this.bold?"bold":this.ital?"ital":void 0}},{key:"emitBlock",value:function(){this.spacing&&(this.add(" "),this.spacing=!1),this.buffer.length>0&&(this.blocks.push({text:this.buffer,mod:this.modName()}),this.buffer="")}},{key:"add",value:function(t){" "===t&&(this.spacing=!0),this.spacing&&(this.buffer+=" ",this.spacing=!1)," "!=t&&(this.buffer+=t)}},{key:"parseWS",value:function(t){return!!/[ \t]/.test(t)&&(this.mono?this.add(t):this.spacing=!0,!0)}},{key:"setTag",value:function(t){this.emitBlock(),this[t]=!0,this.modStack.unshift(t)}},{key:"unsetTag",value:function(t){this.emitBlock(),this[t]=!1,this.modStack.shift()}},{key:"parseStartTag",value:function(t,e){return!(this.mono||this[t]||!this.match(e))&&(this.setTag(t),!0)}},{key:"match",value:function(t){var e=!(arguments.length>1&&void 0!==arguments[1])||arguments[1],i=pf(this.prepareRegExp(t),2),n=i[0],o=i[1],r=n.test(this.text.substr(this.position,o));return r&&e&&(this.position+=o-1),r}},{key:"parseEndTag",value:function(t,e,i){var n=this.mod()===t;return!(!(n="mono"===t?n&&this.mono:n&&!this.mono)||!this.match(e))&&(void 0!==i?(this.position===this.text.length-1||this.match(i,!1))&&this.unsetTag(t):this.unsetTag(t),!0)}},{key:"replace",value:function(t,e){return!!this.match(t)&&(this.add(e),this.position+=length-1,!0)}},{key:"prepareRegExp",value:function(t){var e,i;if(t instanceof RegExp)i=t,e=1;else{var n=kP[t];i=void 0!==n?n:new RegExp(t),e=t.length}return[i,e]}}]),t}(),xP=function(){function t(e,i,n,o){var r=this;ph(this,t),this.ctx=e,this.parent=i,this.selected=n,this.hover=o;this.lines=new wP((function(t,i){if(void 0===t)return 0;var s=r.parent.getFormattingValues(e,n,o,i),a=0;""!==t&&(a=r.ctx.measureText(t).width);return{width:a,values:s}}))}return xu(t,[{key:"process",value:function(t){if(!mP(t))return this.lines.finalize();var e=this.parent.fontOptions;t=(t=t.replace(/\r\n/g,"\n")).replace(/\r/g,"\n");var i=String(t).split("\n"),n=i.length;if(e.multi)for(var o=0;o0)for(var s=0;s0)for(var u=0;u")||e.parseStartTag("ital","")||e.parseStartTag("mono","")||e.parseEndTag("bold","")||e.parseEndTag("ital","")||e.parseEndTag("mono",""))||i(n)||e.add(n),e.position++}return e.emitBlock(),e.blocks}},{key:"splitMarkdownBlocks",value:function(t){for(var e=this,i=new _P(t),n=!0,o=function(t){return!!/\\/.test(t)&&(i.positionthis.parent.fontOptions.maxWdt}},{key:"getLongestFit",value:function(t){for(var e="",i=0;i1&&void 0!==arguments[1]?arguments[1]:"normal",i=arguments.length>2&&void 0!==arguments[2]&&arguments[2];this.parent.getFormattingValues(this.ctx,this.selected,this.hover,e);for(var n=(t=(t=t.replace(/^( +)/g,"$1\r")).replace(/([^\r][^ ]*)( +)/g,"$1\r$2\r")).split("\r");n.length>0;){var o=this.getLongestFit(n);if(0===o){var r=n[0],s=this.getLongestFitWord(r);this.lines.newLine(xf(r).call(r,0,s),e),n[0]=xf(r).call(r,s)}else{var a=o;" "===n[o-1]?o--:" "===n[a]&&a++;var h=xf(n).call(n,0,o).join("");o==n.length&&i?this.lines.append(h,e):this.lines.newLine(h,e),n=xf(n).call(n,a)}}}}]),t}(),EP=["bold","ital","boldital","mono"],OP=function(){function t(e,i){var n=arguments.length>2&&void 0!==arguments[2]&&arguments[2];ph(this,t),this.body=e,this.pointToSelf=!1,this.baseSize=void 0,this.fontOptions={},this.setOptions(i),this.size={top:0,left:0,width:0,height:0,yLine:0},this.isEdgeLabel=n}return xu(t,[{key:"setOptions",value:function(t){if(this.elementOptions=t,this.initFontOptions(t.font),mP(t.label)?this.labelDirty=!0:t.label=void 0,void 0!==t.font&&null!==t.font)if("string"==typeof t.font)this.baseSize=this.fontOptions.size;else if("object"===bu(t.font)){var e=t.font.size;void 0!==e&&(this.baseSize=e)}}},{key:"initFontOptions",value:function(e){var i=this;kb(EP,(function(t){i.fontOptions[t]={}})),t.parseFontString(this.fontOptions,e)?this.fontOptions.vadjust=0:kb(e,(function(t,e){null!=t&&"object"!==bu(t)&&(i.fontOptions[e]=t)}))}},{key:"constrain",value:function(t){var e={constrainWidth:!1,maxWdt:-1,minWdt:-1,constrainHeight:!1,minHgt:-1,valign:"middle"},i=Rb(t,"widthConstraint");if("number"==typeof i)e.maxWdt=Number(i),e.minWdt=Number(i);else if("object"===bu(i)){var n=Rb(t,["widthConstraint","maximum"]);"number"==typeof n&&(e.maxWdt=Number(n));var o=Rb(t,["widthConstraint","minimum"]);"number"==typeof o&&(e.minWdt=Number(o))}var r=Rb(t,"heightConstraint");if("number"==typeof r)e.minHgt=Number(r);else if("object"===bu(r)){var s=Rb(t,["heightConstraint","minimum"]);"number"==typeof s&&(e.minHgt=Number(s));var a=Rb(t,["heightConstraint","valign"]);"string"==typeof a&&("top"!==a&&"bottom"!==a||(e.valign=a))}return e}},{key:"update",value:function(t,e){this.setOptions(t,!0),this.propagateFonts(e),gb(this.fontOptions,this.constrain(e)),this.fontOptions.chooser=gP("label",e)}},{key:"adjustSizes",value:function(t){var e=t?t.right+t.left:0;this.fontOptions.constrainWidth&&(this.fontOptions.maxWdt-=e,this.fontOptions.minWdt-=e);var i=t?t.top+t.bottom:0;this.fontOptions.constrainHeight&&(this.fontOptions.minHgt-=i)}},{key:"addFontOptionsToPile",value:function(t,e){for(var i=0;i5&&void 0!==arguments[5]?arguments[5]:"middle";if(void 0!==this.elementOptions.label){var s=this.fontOptions.size*this.body.view.scale;this.elementOptions.label&&s=this.elementOptions.scaling.label.maxVisible&&(s=Number(this.elementOptions.scaling.label.maxVisible)/this.body.view.scale),this.calculateLabelSize(t,n,o,e,i,r),this._drawBackground(t),this._drawText(t,e,this.size.yLine,r,s))}}},{key:"_drawBackground",value:function(t){if(void 0!==this.fontOptions.background&&"none"!==this.fontOptions.background){t.fillStyle=this.fontOptions.background;var e=this.getSize();t.fillRect(e.left,e.top,e.width,e.height)}}},{key:"_drawText",value:function(t,e,i){var n=arguments.length>3&&void 0!==arguments[3]?arguments[3]:"middle",o=arguments.length>4?arguments[4]:void 0,r=pf(this._setAlignment(t,e,i,n),2);e=r[0],i=r[1],t.textAlign="left",e-=this.size.width/2,this.fontOptions.valign&&this.size.height>this.size.labelHeight&&("top"===this.fontOptions.valign&&(i-=(this.size.height-this.size.labelHeight)/2),"bottom"===this.fontOptions.valign&&(i+=(this.size.height-this.size.labelHeight)/2));for(var s=0;s0&&(t.lineWidth=d.strokeWidth,t.strokeStyle=f,t.lineJoin="round"),t.fillStyle=u,d.strokeWidth>0&&t.strokeText(d.text,e+h,i+d.vadjust),t.fillText(d.text,e+h,i+d.vadjust),h+=d.width}i+=a.height}}}},{key:"_setAlignment",value:function(t,e,i,n){if(this.isEdgeLabel&&"horizontal"!==this.fontOptions.align&&!1===this.pointToSelf){e=0,i=0;"top"===this.fontOptions.align?(t.textBaseline="alphabetic",i-=4):"bottom"===this.fontOptions.align?(t.textBaseline="hanging",i+=4):t.textBaseline="middle"}else t.textBaseline=n;return[e,i]}},{key:"_getColor",value:function(t,e,i){var n=t||"#000000",o=i||"#ffffff";if(e<=this.elementOptions.scaling.label.drawThreshold){var r=Math.max(0,Math.min(1,1-(this.elementOptions.scaling.label.drawThreshold-e)));n=Ob(n,r),o=Ob(o,r)}return[n,o]}},{key:"getTextSize",value:function(t){var e=arguments.length>1&&void 0!==arguments[1]&&arguments[1],i=arguments.length>2&&void 0!==arguments[2]&&arguments[2];return this._processLabel(t,e,i),{width:this.size.width,height:this.size.height,lineCount:this.lineCount}}},{key:"getSize",value:function(){var t=this.size.left,e=this.size.top-1;if(this.isEdgeLabel){var i=.5*-this.size.width;switch(this.fontOptions.align){case"middle":t=i,e=.5*-this.size.height;break;case"top":t=i,e=-(this.size.height+2);break;case"bottom":t=i,e=2}}return{left:t,top:e,width:this.size.width,height:this.size.height}}},{key:"calculateLabelSize",value:function(t,e,i){var n=arguments.length>3&&void 0!==arguments[3]?arguments[3]:0,o=arguments.length>4&&void 0!==arguments[4]?arguments[4]:0,r=arguments.length>5&&void 0!==arguments[5]?arguments[5]:"middle";this._processLabel(t,e,i),this.size.left=n-.5*this.size.width,this.size.top=o-.5*this.size.height,this.size.yLine=o+.5*(1-this.lineCount)*this.fontOptions.size,"hanging"===r&&(this.size.top+=.5*this.fontOptions.size,this.size.top+=4,this.size.yLine+=4)}},{key:"getFormattingValues",value:function(t,e,i,n){var o=function(t,e,i){return"normal"===e?"mod"===i?"":t[i]:void 0!==t[e][i]?t[e][i]:t[i]},r={color:o(this.fontOptions,n,"color"),size:o(this.fontOptions,n,"size"),face:o(this.fontOptions,n,"face"),mod:o(this.fontOptions,n,"mod"),vadjust:o(this.fontOptions,n,"vadjust"),strokeWidth:this.fontOptions.strokeWidth,strokeColor:this.fontOptions.strokeColor};(e||i)&&("normal"===n&&!0===this.fontOptions.chooser&&this.elementOptions.labelHighlightBold?r.mod="bold":"function"==typeof this.fontOptions.chooser&&this.fontOptions.chooser(r,this.elementOptions.id,e,i));var s="";return void 0!==r.mod&&""!==r.mod&&(s+=r.mod+" "),s+=r.size+"px "+r.face,t.font=s.replace(/"/g,""),r.font=t.font,r.height=r.size,r}},{key:"differentState",value:function(t,e){return t!==this.selectedState||e!==this.hoverState}},{key:"_processLabelText",value:function(t,e,i,n){return new xP(t,this,e,i).process(n)}},{key:"_processLabel",value:function(t,e,i){if(!1!==this.labelDirty||this.differentState(e,i)){var n=this._processLabelText(t,e,i,this.elementOptions.label);this.fontOptions.minWdt>0&&n.width0&&n.height0&&(this.enableBorderDashes(t,e),t.stroke(),this.disableBorderDashes(t,e)),t.restore()}},{key:"performFill",value:function(t,e){t.save(),t.fillStyle=e.color,this.enableShadow(t,e),Kg(t).call(t),this.disableShadow(t,e),t.restore(),this.performStroke(t,e)}},{key:"_addBoundingBoxMargin",value:function(t){this.boundingBox.left-=t,this.boundingBox.top-=t,this.boundingBox.bottom+=t,this.boundingBox.right+=t}},{key:"_updateBoundingBox",value:function(t,e,i,n,o){void 0!==i&&this.resize(i,n,o),this.left=t-this.width/2,this.top=e-this.height/2,this.boundingBox.left=this.left,this.boundingBox.top=this.top,this.boundingBox.bottom=this.top+this.height,this.boundingBox.right=this.left+this.width}},{key:"updateBoundingBox",value:function(t,e,i,n,o){this._updateBoundingBox(t,e,i,n,o)}},{key:"getDimensionsFromLabel",value:function(t,e,i){this.textSize=this.labelModule.getTextSize(t,e,i);var n=this.textSize.width,o=this.textSize.height;return 0===n&&(n=14,o=14),{width:n,height:o}}}]),t}();function SP(t){var e=function(){if("undefined"==typeof Reflect||!sM)return!1;if(sM.sham)return!1;if("function"==typeof Proxy)return!0;try{return Boolean.prototype.valueOf.call(sM(Boolean,[],(function(){}))),!0}catch(t){return!1}}();return function(){var i,n=F_(t);if(e){var o=F_(this).constructor;i=sM(n,arguments,o)}else i=n.apply(this,arguments);return I_(this,i)}}var TP=function(t){D_(i,t);var e=SP(i);function i(t,n,o){var r;return ph(this,i),(r=e.call(this,t,n,o))._setMargins(o),r}return xu(i,[{key:"resize",value:function(t){var e=arguments.length>1&&void 0!==arguments[1]?arguments[1]:this.selected,i=arguments.length>2&&void 0!==arguments[2]?arguments[2]:this.hover;if(this.needsRefresh(e,i)){var n=this.getDimensionsFromLabel(t,e,i);this.width=n.width+this.margin.right+this.margin.left,this.height=n.height+this.margin.top+this.margin.bottom,this.radius=this.width/2}}},{key:"draw",value:function(t,e,i,n,o,r){this.resize(t,n,o),this.left=e-this.width/2,this.top=i-this.height/2,this.initContextForDraw(t,r),qn(t,this.left,this.top,this.width,this.height,r.borderRadius),this.performFill(t,r),this.updateBoundingBox(e,i,t,n,o),this.labelModule.draw(t,this.left+this.textSize.width/2+this.margin.left,this.top+this.textSize.height/2+this.margin.top,n,o)}},{key:"updateBoundingBox",value:function(t,e,i,n,o){this._updateBoundingBox(t,e,i,n,o);var r=this.options.shapeProperties.borderRadius;this._addBoundingBoxMargin(r)}},{key:"distanceToBorder",value:function(t,e){t&&this.resize(t);var i=this.options.borderWidth;return Math.min(Math.abs(this.width/2/Math.cos(e)),Math.abs(this.height/2/Math.sin(e)))+i}}]),i}(CP);function MP(t){var e=function(){if("undefined"==typeof Reflect||!sM)return!1;if(sM.sham)return!1;if("function"==typeof Proxy)return!0;try{return Boolean.prototype.valueOf.call(sM(Boolean,[],(function(){}))),!0}catch(t){return!1}}();return function(){var i,n=F_(t);if(e){var o=F_(this).constructor;i=sM(n,arguments,o)}else i=n.apply(this,arguments);return I_(this,i)}}var PP=function(t){D_(i,t);var e=MP(i);function i(t,n,o){var r;return ph(this,i),(r=e.call(this,t,n,o)).labelOffset=0,r.selected=!1,r}return xu(i,[{key:"setOptions",value:function(t,e,i){this.options=t,void 0===e&&void 0===i||this.setImages(e,i)}},{key:"setImages",value:function(t,e){e&&this.selected?(this.imageObj=e,this.imageObjAlt=t):(this.imageObj=t,this.imageObjAlt=e)}},{key:"switchImages",value:function(t){var e=t&&!this.selected||!t&&this.selected;if(this.selected=t,void 0!==this.imageObjAlt&&e){var i=this.imageObj;this.imageObj=this.imageObjAlt,this.imageObjAlt=i}}},{key:"_getImagePadding",value:function(){var t={top:0,right:0,bottom:0,left:0};if(this.options.imagePadding){var e=this.options.imagePadding;"object"==bu(e)?(t.top=e.top,t.right=e.right,t.bottom=e.bottom,t.left=e.left):(t.top=e,t.right=e,t.bottom=e,t.left=e)}return t}},{key:"_resizeImage",value:function(){var t,e;if(!1===this.options.shapeProperties.useImageSize){var i=1,n=1;this.imageObj.width&&this.imageObj.height&&(this.imageObj.width>this.imageObj.height?i=this.imageObj.width/this.imageObj.height:n=this.imageObj.height/this.imageObj.width),t=2*this.options.size*i,e=2*this.options.size*n}else{var o=this._getImagePadding();t=this.imageObj.width+o.left+o.right,e=this.imageObj.height+o.top+o.bottom}this.width=t,this.height=e,this.radius=.5*this.width}},{key:"_drawRawCircle",value:function(t,e,i,n){this.initContextForDraw(t,n),Wn(t,e,i,n.size),this.performFill(t,n)}},{key:"_drawImageAtPosition",value:function(t,e){if(0!=this.imageObj.width){t.globalAlpha=void 0!==e.opacity?e.opacity:1,this.enableShadow(t,e);var i=1;!0===this.options.shapeProperties.interpolation&&(i=this.imageObj.width/this.width/this.body.view.scale);var n=this._getImagePadding(),o=this.left+n.left,r=this.top+n.top,s=this.width-n.left-n.right,a=this.height-n.top-n.bottom;this.imageObj.drawImageAtPosition(t,i,o,r,s,a),this.disableShadow(t,e)}}},{key:"_drawImageLabel",value:function(t,e,i,n,o){var r=0;if(void 0!==this.height){r=.5*this.height;var s=this.labelModule.getTextSize(t,n,o);s.lineCount>=1&&(r+=s.height/2)}var a=i+r;this.options.label&&(this.labelOffset=r),this.labelModule.draw(t,e,a,n,o,"hanging")}}]),i}(CP);function DP(t){var e=function(){if("undefined"==typeof Reflect||!sM)return!1;if(sM.sham)return!1;if("function"==typeof Proxy)return!0;try{return Boolean.prototype.valueOf.call(sM(Boolean,[],(function(){}))),!0}catch(t){return!1}}();return function(){var i,n=F_(t);if(e){var o=F_(this).constructor;i=sM(n,arguments,o)}else i=n.apply(this,arguments);return I_(this,i)}}var IP=function(t){D_(i,t);var e=DP(i);function i(t,n,o){var r;return ph(this,i),(r=e.call(this,t,n,o))._setMargins(o),r}return xu(i,[{key:"resize",value:function(t){var e=arguments.length>1&&void 0!==arguments[1]?arguments[1]:this.selected,i=arguments.length>2&&void 0!==arguments[2]?arguments[2]:this.hover;if(this.needsRefresh(e,i)){var n=this.getDimensionsFromLabel(t,e,i),o=Math.max(n.width+this.margin.right+this.margin.left,n.height+this.margin.top+this.margin.bottom);this.options.size=o/2,this.width=o,this.height=o,this.radius=this.width/2}}},{key:"draw",value:function(t,e,i,n,o,r){this.resize(t,n,o),this.left=e-this.width/2,this.top=i-this.height/2,this._drawRawCircle(t,e,i,r),this.updateBoundingBox(e,i),this.labelModule.draw(t,this.left+this.textSize.width/2+this.margin.left,i,n,o)}},{key:"updateBoundingBox",value:function(t,e){this.boundingBox.top=e-this.options.size,this.boundingBox.left=t-this.options.size,this.boundingBox.right=t+this.options.size,this.boundingBox.bottom=e+this.options.size}},{key:"distanceToBorder",value:function(t){return t&&this.resize(t),.5*this.width}}]),i}(PP);function BP(t){var e=function(){if("undefined"==typeof Reflect||!sM)return!1;if(sM.sham)return!1;if("function"==typeof Proxy)return!0;try{return Boolean.prototype.valueOf.call(sM(Boolean,[],(function(){}))),!0}catch(t){return!1}}();return function(){var i,n=F_(t);if(e){var o=F_(this).constructor;i=sM(n,arguments,o)}else i=n.apply(this,arguments);return I_(this,i)}}var NP=function(t){D_(i,t);var e=BP(i);function i(t,n,o,r,s){var a;return ph(this,i),(a=e.call(this,t,n,o)).setImages(r,s),a}return xu(i,[{key:"resize",value:function(t){var e=arguments.length>1&&void 0!==arguments[1]?arguments[1]:this.selected,i=arguments.length>2&&void 0!==arguments[2]?arguments[2]:this.hover;if(void 0===this.imageObj.src||void 0===this.imageObj.width||void 0===this.imageObj.height){var n=2*this.options.size;return this.width=n,this.height=n,void(this.radius=.5*this.width)}this.needsRefresh(e,i)&&this._resizeImage()}},{key:"draw",value:function(t,e,i,n,o,r){this.switchImages(n),this.resize();var s=e,a=i;"top-left"===this.options.shapeProperties.coordinateOrigin?(this.left=e,this.top=i,s+=this.width/2,a+=this.height/2):(this.left=e-this.width/2,this.top=i-this.height/2),this._drawRawCircle(t,s,a,r),t.save(),t.clip(),this._drawImageAtPosition(t,r),t.restore(),this._drawImageLabel(t,s,a,n,o),this.updateBoundingBox(e,i)}},{key:"updateBoundingBox",value:function(t,e){"top-left"===this.options.shapeProperties.coordinateOrigin?(this.boundingBox.top=e,this.boundingBox.left=t,this.boundingBox.right=t+2*this.options.size,this.boundingBox.bottom=e+2*this.options.size):(this.boundingBox.top=e-this.options.size,this.boundingBox.left=t-this.options.size,this.boundingBox.right=t+this.options.size,this.boundingBox.bottom=e+this.options.size),this.boundingBox.left=Math.min(this.boundingBox.left,this.labelModule.size.left),this.boundingBox.right=Math.max(this.boundingBox.right,this.labelModule.size.left+this.labelModule.size.width),this.boundingBox.bottom=Math.max(this.boundingBox.bottom,this.boundingBox.bottom+this.labelOffset)}},{key:"distanceToBorder",value:function(t){return t&&this.resize(t),.5*this.width}}]),i}(PP);function FP(t){var e=function(){if("undefined"==typeof Reflect||!sM)return!1;if(sM.sham)return!1;if("function"==typeof Proxy)return!0;try{return Boolean.prototype.valueOf.call(sM(Boolean,[],(function(){}))),!0}catch(t){return!1}}();return function(){var i,n=F_(t);if(e){var o=F_(this).constructor;i=sM(n,arguments,o)}else i=n.apply(this,arguments);return I_(this,i)}}var zP=function(t){D_(i,t);var e=FP(i);function i(t,n,o){return ph(this,i),e.call(this,t,n,o)}return xu(i,[{key:"resize",value:function(t){var e=arguments.length>1&&void 0!==arguments[1]?arguments[1]:this.selected,i=arguments.length>2&&void 0!==arguments[2]?arguments[2]:this.hover,n=arguments.length>3&&void 0!==arguments[3]?arguments[3]:{size:this.options.size};if(this.needsRefresh(e,i)){var o,r;this.labelModule.getTextSize(t,e,i);var s=2*n.size;this.width=null!==(o=this.customSizeWidth)&&void 0!==o?o:s,this.height=null!==(r=this.customSizeHeight)&&void 0!==r?r:s,this.radius=.5*this.width}}},{key:"_drawShape",value:function(t,e,i,n,o,r,s,a){var h,l=this;return this.resize(t,r,s,a),this.left=n-this.width/2,this.top=o-this.height/2,this.initContextForDraw(t,a),(h=e,Object.prototype.hasOwnProperty.call(Xn,h)?Xn[h]:function(t){for(var e=arguments.length,i=new Array(e>1?e-1:0),n=1;n0&&(this.boundingBox.left=Math.min(this.boundingBox.left,this.labelModule.size.left),this.boundingBox.right=Math.max(this.boundingBox.right,this.labelModule.size.left+this.labelModule.size.width),this.boundingBox.bottom=Math.max(this.boundingBox.bottom,this.boundingBox.bottom+this.labelModule.size.height))}}]),i}(CP);function AP(t,e){var i=Hf(t);if(aM){var n=aM(t);e&&(n=yv(n).call(n,(function(e){return yM(t,e).enumerable}))),i.push.apply(i,n)}return i}function jP(t){for(var e=1;e1&&void 0!==arguments[1]?arguments[1]:this.selected,i=arguments.length>2&&void 0!==arguments[2]?arguments[2]:this.hover;if(this.needsRefresh(e,i)){var n=this.getDimensionsFromLabel(t,e,i);this.height=2*n.height,this.width=n.width+n.height,this.radius=.5*this.width}}},{key:"draw",value:function(t,e,i,n,o,r){this.resize(t,n,o),this.left=e-.5*this.width,this.top=i-.5*this.height,this.initContextForDraw(t,r),Vn(t,this.left,this.top,this.width,this.height),this.performFill(t,r),this.updateBoundingBox(e,i,t,n,o),this.labelModule.draw(t,e,i,n,o)}},{key:"distanceToBorder",value:function(t,e){t&&this.resize(t);var i=.5*this.width,n=.5*this.height,o=Math.sin(e)*i,r=Math.cos(e)*n;return i*n/Math.sqrt(o*o+r*r)}}]),i}(CP);function KP(t){var e=function(){if("undefined"==typeof Reflect||!sM)return!1;if(sM.sham)return!1;if("function"==typeof Proxy)return!0;try{return Boolean.prototype.valueOf.call(sM(Boolean,[],(function(){}))),!0}catch(t){return!1}}();return function(){var i,n=F_(t);if(e){var o=F_(this).constructor;i=sM(n,arguments,o)}else i=n.apply(this,arguments);return I_(this,i)}}var $P=function(t){D_(i,t);var e=KP(i);function i(t,n,o){var r;return ph(this,i),(r=e.call(this,t,n,o))._setMargins(o),r}return xu(i,[{key:"resize",value:function(t,e,i){this.needsRefresh(e,i)&&(this.iconSize={width:Number(this.options.icon.size),height:Number(this.options.icon.size)},this.width=this.iconSize.width+this.margin.right+this.margin.left,this.height=this.iconSize.height+this.margin.top+this.margin.bottom,this.radius=.5*this.width)}},{key:"draw",value:function(t,e,i,n,o,r){var s=this;return this.resize(t,n,o),this.options.icon.size=this.options.icon.size||50,this.left=e-this.width/2,this.top=i-this.height/2,this._icon(t,e,i,n,o,r),{drawExternalLabel:function(){if(void 0!==s.options.label){s.labelModule.draw(t,s.left+s.iconSize.width/2+s.margin.left,i+s.height/2+5,n)}s.updateBoundingBox(e,i)}}}},{key:"updateBoundingBox",value:function(t,e){if(this.boundingBox.top=e-.5*this.options.icon.size,this.boundingBox.left=t-.5*this.options.icon.size,this.boundingBox.right=t+.5*this.options.icon.size,this.boundingBox.bottom=e+.5*this.options.icon.size,void 0!==this.options.label&&this.labelModule.size.width>0){this.boundingBox.left=Math.min(this.boundingBox.left,this.labelModule.size.left),this.boundingBox.right=Math.max(this.boundingBox.right,this.labelModule.size.left+this.labelModule.size.width),this.boundingBox.bottom=Math.max(this.boundingBox.bottom,this.boundingBox.bottom+this.labelModule.size.height+5)}}},{key:"_icon",value:function(t,e,i,n,o,r){var s=Number(this.options.icon.size);void 0!==this.options.icon.code?(t.font=[null!=this.options.icon.weight?this.options.icon.weight:n?"bold":"",(null!=this.options.icon.weight&&n?5:0)+s+"px",this.options.icon.face].join(" "),t.fillStyle=this.options.icon.color||"black",t.textAlign="center",t.textBaseline="middle",this.enableShadow(t,r),t.fillText(this.options.icon.code,e,i),this.disableShadow(t,r)):console.error("When using the icon shape, you need to define the code in the icon options object. This can be done per node or globally.")}},{key:"distanceToBorder",value:function(t,e){return this._distanceToBorder(t,e)}}]),i}(CP);function ZP(t){var e=function(){if("undefined"==typeof Reflect||!sM)return!1;if(sM.sham)return!1;if("function"==typeof Proxy)return!0;try{return Boolean.prototype.valueOf.call(sM(Boolean,[],(function(){}))),!0}catch(t){return!1}}();return function(){var i,n=F_(t);if(e){var o=F_(this).constructor;i=sM(n,arguments,o)}else i=n.apply(this,arguments);return I_(this,i)}}var QP=function(t){D_(i,t);var e=ZP(i);function i(t,n,o,r,s){var a;return ph(this,i),(a=e.call(this,t,n,o)).setImages(r,s),a}return xu(i,[{key:"resize",value:function(t){var e=arguments.length>1&&void 0!==arguments[1]?arguments[1]:this.selected,i=arguments.length>2&&void 0!==arguments[2]?arguments[2]:this.hover;if(void 0===this.imageObj.src||void 0===this.imageObj.width||void 0===this.imageObj.height){var n=2*this.options.size;return this.width=n,void(this.height=n)}this.needsRefresh(e,i)&&this._resizeImage()}},{key:"draw",value:function(t,e,i,n,o,r){t.save(),this.switchImages(n),this.resize();var s=e,a=i;if("top-left"===this.options.shapeProperties.coordinateOrigin?(this.left=e,this.top=i,s+=this.width/2,a+=this.height/2):(this.left=e-this.width/2,this.top=i-this.height/2),!0===this.options.shapeProperties.useBorderWithImage){var h=this.options.borderWidth,l=this.options.borderWidthSelected||2*this.options.borderWidth,d=(n?l:h)/this.body.view.scale;t.lineWidth=Math.min(this.width,d),t.beginPath();var c=n?this.options.color.highlight.border:o?this.options.color.hover.border:this.options.color.border,u=n?this.options.color.highlight.background:o?this.options.color.hover.background:this.options.color.background;void 0!==r.opacity&&(c=Ob(c,r.opacity),u=Ob(u,r.opacity)),t.strokeStyle=c,t.fillStyle=u,t.rect(this.left-.5*t.lineWidth,this.top-.5*t.lineWidth,this.width+t.lineWidth,this.height+t.lineWidth),Kg(t).call(t),this.performStroke(t,r),t.closePath()}this._drawImageAtPosition(t,r),this._drawImageLabel(t,s,a,n,o),this.updateBoundingBox(e,i),t.restore()}},{key:"updateBoundingBox",value:function(t,e){this.resize(),"top-left"===this.options.shapeProperties.coordinateOrigin?(this.left=t,this.top=e):(this.left=t-this.width/2,this.top=e-this.height/2),this.boundingBox.left=this.left,this.boundingBox.top=this.top,this.boundingBox.bottom=this.top+this.height,this.boundingBox.right=this.left+this.width,void 0!==this.options.label&&this.labelModule.size.width>0&&(this.boundingBox.left=Math.min(this.boundingBox.left,this.labelModule.size.left),this.boundingBox.right=Math.max(this.boundingBox.right,this.labelModule.size.left+this.labelModule.size.width),this.boundingBox.bottom=Math.max(this.boundingBox.bottom,this.boundingBox.bottom+this.labelOffset))}},{key:"distanceToBorder",value:function(t,e){return this._distanceToBorder(t,e)}}]),i}(PP);function JP(t){var e=function(){if("undefined"==typeof Reflect||!sM)return!1;if(sM.sham)return!1;if("function"==typeof Proxy)return!0;try{return Boolean.prototype.valueOf.call(sM(Boolean,[],(function(){}))),!0}catch(t){return!1}}();return function(){var i,n=F_(t);if(e){var o=F_(this).constructor;i=sM(n,arguments,o)}else i=n.apply(this,arguments);return I_(this,i)}}var tD=function(t){D_(i,t);var e=JP(i);function i(t,n,o){return ph(this,i),e.call(this,t,n,o)}return xu(i,[{key:"draw",value:function(t,e,i,n,o,r){return this._drawShape(t,"square",2,e,i,n,o,r)}},{key:"distanceToBorder",value:function(t,e){return this._distanceToBorder(t,e)}}]),i}(zP);function eD(t){var e=function(){if("undefined"==typeof Reflect||!sM)return!1;if(sM.sham)return!1;if("function"==typeof Proxy)return!0;try{return Boolean.prototype.valueOf.call(sM(Boolean,[],(function(){}))),!0}catch(t){return!1}}();return function(){var i,n=F_(t);if(e){var o=F_(this).constructor;i=sM(n,arguments,o)}else i=n.apply(this,arguments);return I_(this,i)}}var iD=function(t){D_(i,t);var e=eD(i);function i(t,n,o){return ph(this,i),e.call(this,t,n,o)}return xu(i,[{key:"draw",value:function(t,e,i,n,o,r){return this._drawShape(t,"hexagon",4,e,i,n,o,r)}},{key:"distanceToBorder",value:function(t,e){return this._distanceToBorder(t,e)}}]),i}(zP);function nD(t){var e=function(){if("undefined"==typeof Reflect||!sM)return!1;if(sM.sham)return!1;if("function"==typeof Proxy)return!0;try{return Boolean.prototype.valueOf.call(sM(Boolean,[],(function(){}))),!0}catch(t){return!1}}();return function(){var i,n=F_(t);if(e){var o=F_(this).constructor;i=sM(n,arguments,o)}else i=n.apply(this,arguments);return I_(this,i)}}var oD=function(t){D_(i,t);var e=nD(i);function i(t,n,o){return ph(this,i),e.call(this,t,n,o)}return xu(i,[{key:"draw",value:function(t,e,i,n,o,r){return this._drawShape(t,"star",4,e,i,n,o,r)}},{key:"distanceToBorder",value:function(t,e){return this._distanceToBorder(t,e)}}]),i}(zP);function rD(t){var e=function(){if("undefined"==typeof Reflect||!sM)return!1;if(sM.sham)return!1;if("function"==typeof Proxy)return!0;try{return Boolean.prototype.valueOf.call(sM(Boolean,[],(function(){}))),!0}catch(t){return!1}}();return function(){var i,n=F_(t);if(e){var o=F_(this).constructor;i=sM(n,arguments,o)}else i=n.apply(this,arguments);return I_(this,i)}}var sD=function(t){D_(i,t);var e=rD(i);function i(t,n,o){var r;return ph(this,i),(r=e.call(this,t,n,o))._setMargins(o),r}return xu(i,[{key:"resize",value:function(t,e,i){this.needsRefresh(e,i)&&(this.textSize=this.labelModule.getTextSize(t,e,i),this.width=this.textSize.width+this.margin.right+this.margin.left,this.height=this.textSize.height+this.margin.top+this.margin.bottom,this.radius=.5*this.width)}},{key:"draw",value:function(t,e,i,n,o,r){this.resize(t,n,o),this.left=e-this.width/2,this.top=i-this.height/2,this.enableShadow(t,r),this.labelModule.draw(t,this.left+this.textSize.width/2+this.margin.left,this.top+this.textSize.height/2+this.margin.top,n,o),this.disableShadow(t,r),this.updateBoundingBox(e,i,t,n,o)}},{key:"distanceToBorder",value:function(t,e){return this._distanceToBorder(t,e)}}]),i}(CP);function aD(t){var e=function(){if("undefined"==typeof Reflect||!sM)return!1;if(sM.sham)return!1;if("function"==typeof Proxy)return!0;try{return Boolean.prototype.valueOf.call(sM(Boolean,[],(function(){}))),!0}catch(t){return!1}}();return function(){var i,n=F_(t);if(e){var o=F_(this).constructor;i=sM(n,arguments,o)}else i=n.apply(this,arguments);return I_(this,i)}}var hD=function(t){D_(i,t);var e=aD(i);function i(t,n,o){return ph(this,i),e.call(this,t,n,o)}return xu(i,[{key:"draw",value:function(t,e,i,n,o,r){return this._drawShape(t,"triangle",3,e,i,n,o,r)}},{key:"distanceToBorder",value:function(t,e){return this._distanceToBorder(t,e)}}]),i}(zP);function lD(t){var e=function(){if("undefined"==typeof Reflect||!sM)return!1;if(sM.sham)return!1;if("function"==typeof Proxy)return!0;try{return Boolean.prototype.valueOf.call(sM(Boolean,[],(function(){}))),!0}catch(t){return!1}}();return function(){var i,n=F_(t);if(e){var o=F_(this).constructor;i=sM(n,arguments,o)}else i=n.apply(this,arguments);return I_(this,i)}}var dD=function(t){D_(i,t);var e=lD(i);function i(t,n,o){return ph(this,i),e.call(this,t,n,o)}return xu(i,[{key:"draw",value:function(t,e,i,n,o,r){return this._drawShape(t,"triangleDown",3,e,i,n,o,r)}},{key:"distanceToBorder",value:function(t,e){return this._distanceToBorder(t,e)}}]),i}(zP);function cD(t,e){var i=Hf(t);if(aM){var n=aM(t);e&&(n=yv(n).call(n,(function(e){return yM(t,e).enumerable}))),i.push.apply(i,n)}return i}function uD(t){for(var e=1;et.left&&this.shape.topt.top}},{key:"isBoundingBoxOverlappingWith",value:function(t){return this.shape.boundingBox.leftt.left&&this.shape.boundingBox.topt.top}}],[{key:"checkOpacity",value:function(t){return 0<=t&&t<=1}},{key:"checkCoordinateOrigin",value:function(t){return void 0===t||"center"===t||"top-left"===t}},{key:"updateGroupOptions",value:function(e,i,n){var o;if(void 0!==n){var r=e.group;if(void 0!==i&&void 0!==i.group&&r!==i.group)throw new Error("updateGroupOptions: group values in options don't match.");if("number"==typeof r||"string"==typeof r&&""!=r){var s=n.get(r);void 0!==s.opacity&&void 0===i.opacity&&(t.checkOpacity(s.opacity)||(console.error("Invalid option for node opacity. Value must be between 0 and 1, found: "+s.opacity),s.opacity=void 0));var a=yv(o=vP(i)).call(o,(function(t){return null!=i[t]}));a.push("font"),vb(a,e,s),e.color=Sb(e.color)}}}},{key:"parseOptions",value:function(e,i){var n=arguments.length>2&&void 0!==arguments[2]&&arguments[2],o=arguments.length>3&&void 0!==arguments[3]?arguments[3]:{},r=arguments.length>4?arguments[4]:void 0;if(vb(["color","fixed","shadow"],e,i,n),t.checkMass(i),void 0!==e.opacity&&(t.checkOpacity(e.opacity)||(console.error("Invalid option for node opacity. Value must be between 0 and 1, found: "+e.opacity),e.opacity=void 0)),void 0!==i.opacity&&(t.checkOpacity(i.opacity)||(console.error("Invalid option for node opacity. Value must be between 0 and 1, found: "+i.opacity),i.opacity=void 0)),i.shapeProperties&&!t.checkCoordinateOrigin(i.shapeProperties.coordinateOrigin)&&console.error("Invalid option for node coordinateOrigin, found: "+i.shapeProperties.coordinateOrigin),Ab(e,i,"shadow",o),void 0!==i.color&&null!==i.color){var s=Sb(i.color);ub(e.color,s)}else!0===n&&null===i.color&&(e.color=zb(o.color));void 0!==i.fixed&&null!==i.fixed&&("boolean"==typeof i.fixed?(e.fixed.x=i.fixed,e.fixed.y=i.fixed):(void 0!==i.fixed.x&&"boolean"==typeof i.fixed.x&&(e.fixed.x=i.fixed.x),void 0!==i.fixed.y&&"boolean"==typeof i.fixed.y&&(e.fixed.y=i.fixed.y))),!0===n&&null===i.font&&(e.font=zb(o.font)),t.updateGroupOptions(e,i,r),void 0!==i.scaling&&Ab(e.scaling,i.scaling,"label",o.scaling)}},{key:"checkMass",value:function(t,e){if(void 0!==t.mass&&t.mass<=0){var i="";void 0!==e&&(i=" in node id: "+e),console.error("%cNegative or zero mass disallowed"+i+", setting mass to 1.",tw),t.mass=1}}}]),t}();function pD(t,e){var i=void 0!==gf&&fh(t)||t["@@iterator"];if(!i){if(Df(t)||(i=function(t,e){var i;if(!t)return;if("string"==typeof t)return vD(t,e);var n=xf(i=Object.prototype.toString.call(t)).call(i,8,-1);"Object"===n&&t.constructor&&(n=t.constructor.name);if("Map"===n||"Set"===n)return Ya(t);if("Arguments"===n||/^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n))return vD(t,e)}(t))||e&&t&&"number"==typeof t.length){i&&(t=i);var n=0,o=function(){};return{s:o,n:function(){return n>=t.length?{done:!0}:{done:!1,value:t[n++]}},e:function(t){throw t},f:o}}throw new TypeError("Invalid attempt to iterate non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.")}var r,s=!0,a=!1;return{s:function(){i=i.call(t)},n:function(){var t=i.next();return s=t.done,t},e:function(t){a=!0,r=t},f:function(){try{s||null==i.return||i.return()}finally{if(a)throw r}}}}function vD(t,e){(null==e||e>t.length)&&(e=t.length);for(var i=0,n=new Array(e);i1?console.error("Invalid option for node opacity. Value must be between 0 and 1, found: "+t.opacity):this.options.opacity=t.opacity),void 0!==t.shape)for(var e in this.body.nodes)Object.prototype.hasOwnProperty.call(this.body.nodes,e)&&this.body.nodes[e].updateShape();if(void 0!==t.font||void 0!==t.widthConstraint||void 0!==t.heightConstraint)for(var i=0,n=Hf(this.body.nodes);i1&&void 0!==arguments[1]&&arguments[1],i=this.body.data.nodes;if(ZM("id",t))this.body.data.nodes=t;else if(Df(t))this.body.data.nodes=new GM,this.body.data.nodes.add(t);else{if(t)throw new TypeError("Array or DataSet expected");this.body.data.nodes=new GM}if(i&&kb(this.nodesListeners,(function(t,e){i.off(e,t)})),this.body.nodes={},this.body.data.nodes){var n=this;kb(this.nodesListeners,(function(t,e){n.body.data.nodes.on(e,t)}));var o=this.body.data.nodes.getIds();this.add(o,!0)}!1===e&&this.body.emitter.emit("_dataChanged")}},{key:"add",value:function(t){for(var e,i=arguments.length>1&&void 0!==arguments[1]&&arguments[1],n=[],o=0;o1&&void 0!==arguments[1]?arguments[1]:fD)(t,this.body,this.images,this.groups,this.options,this.defaultOptions)}},{key:"refresh",value:function(){var t=this,e=arguments.length>0&&void 0!==arguments[0]&&arguments[0];kb(this.body.nodes,(function(i,n){var o=t.body.data.nodes.get(n);void 0!==o&&(!0===e&&i.setOptions({x:null,y:null}),i.setOptions({fixed:!1}),i.setOptions(o))}))}},{key:"getPositions",value:function(t){var e={};if(void 0!==t){if(!0===Df(t)){for(var i=0;i0?(n=i/a)*n:i;return a===1/0?1/0:a*PD(o)}});var DD=i(et.Math.hypot);function ID(t){var e=function(){if("undefined"==typeof Reflect||!sM)return!1;if(sM.sham)return!1;if("function"==typeof Proxy)return!0;try{return Boolean.prototype.valueOf.call(sM(Boolean,[],(function(){}))),!0}catch(t){return!1}}();return function(){var i,n=F_(t);if(e){var o=F_(this).constructor;i=sM(n,arguments,o)}else i=n.apply(this,arguments);return I_(this,i)}}var BD=function(){function t(){ph(this,t)}return xu(t,null,[{key:"transform",value:function(t,e){Df(t)||(t=[t]);for(var i=e.point.x,n=e.point.y,o=e.angle,r=e.length,s=0;s4&&void 0!==arguments[4]?arguments[4]:this.getViaNode();t.strokeStyle=this.getColor(t,e),t.lineWidth=e.width,!1!==e.dashes?this._drawDashedLine(t,e,o):this._drawLine(t,e,o)}},{key:"_drawLine",value:function(t,e,i,n,o){if(this.from!=this.to)this._line(t,e,i,n,o);else{var r=pf(this._getCircleData(t),3),s=r[0],a=r[1],h=r[2];this._circle(t,e,s,a,h)}}},{key:"_drawDashedLine",value:function(t,e,i,n,o){t.lineCap="round";var r=Df(e.dashes)?e.dashes:[5,5];if(void 0!==t.setLineDash){if(t.save(),t.setLineDash(r),t.lineDashOffset=0,this.from!=this.to)this._line(t,e,i);else{var s=pf(this._getCircleData(t),3),a=s[0],h=s[1],l=s[2];this._circle(t,e,a,h,l)}t.setLineDash([0]),t.lineDashOffset=0,t.restore()}else{if(this.from!=this.to)Yn(t,this.from.x,this.from.y,this.to.x,this.to.y,r);else{var d=pf(this._getCircleData(t),3),c=d[0],u=d[1],f=d[2];this._circle(t,e,c,u,f)}this.enableShadow(t,e),t.stroke(),this.disableShadow(t,e)}}},{key:"findBorderPosition",value:function(t,e,i){return this.from!=this.to?this._findBorderPosition(t,e,i):this._findBorderPositionCircle(t,e,i)}},{key:"findBorderPositions",value:function(t){if(this.from!=this.to)return{from:this._findBorderPosition(this.from,t),to:this._findBorderPosition(this.to,t)};var e,i=pf(xf(e=this._getCircleData(t)).call(e,0,2),2),n=i[0],o=i[1];return{from:this._findBorderPositionCircle(this.from,t,{x:n,y:o,low:.25,high:.6,direction:-1}),to:this._findBorderPositionCircle(this.from,t,{x:n,y:o,low:.6,high:.8,direction:1})}}},{key:"_getCircleData",value:function(t){var e=this.options.selfReference.size;void 0!==t&&void 0===this.from.shape.width&&this.from.shape.resize(t);var i=bP(t,this.options.selfReference.angle,e,this.from);return[i.x,i.y,e]}},{key:"_pointOnCircle",value:function(t,e,i,n){var o=2*n*Math.PI;return{x:t+i*Math.cos(o),y:e-i*Math.sin(o)}}},{key:"_findBorderPositionCircle",value:function(t,e,i){var n,o=i.x,r=i.y,s=i.low,a=i.high,h=i.direction,l=this.options.selfReference.size,d=.5*(s+a),c=0;!0===this.options.arrowStrikethrough&&(-1===h?c=this.options.endPointOffset.from:1===h&&(c=this.options.endPointOffset.to));var u=0;do{d=.5*(s+a),n=this._pointOnCircle(o,r,l,d);var f=Math.atan2(t.y-n.y,t.x-n.x),p=t.distanceToBorder(e,f)+c-Math.sqrt(Math.pow(n.x-t.x,2)+Math.pow(n.y-t.y,2));if(Math.abs(p)<.05)break;p>0?h>0?s=d:a=d:h>0?a=d:s=d,++u}while(s<=a&&u<10);return GD(GD({},n),{},{t:d})}},{key:"getLineWidth",value:function(t,e){return!0===t?Math.max(this.selectionWidth,.3/this._body.view.scale):!0===e?Math.max(this.hoverWidth,.3/this._body.view.scale):Math.max(this.options.width,.3/this._body.view.scale)}},{key:"getColor",value:function(t,e){if(!1!==e.inheritsColor){if("both"===e.inheritsColor&&this.from.id!==this.to.id){var i=t.createLinearGradient(this.from.x,this.from.y,this.to.x,this.to.y),n=this.from.options.color.highlight.border,o=this.to.options.color.highlight.border;return!1===this.from.selected&&!1===this.to.selected?(n=Ob(this.from.options.color.border,e.opacity),o=Ob(this.to.options.color.border,e.opacity)):!0===this.from.selected&&!1===this.to.selected?o=this.to.options.color.border:!1===this.from.selected&&!0===this.to.selected&&(n=this.from.options.color.border),i.addColorStop(0,n),i.addColorStop(1,o),i}return"to"===e.inheritsColor?Ob(this.to.options.color.border,e.opacity):Ob(this.from.options.color.border,e.opacity)}return Ob(e.color,e.opacity)}},{key:"_circle",value:function(t,e,i,n,o){this.enableShadow(t,e);var r=0,s=2*Math.PI;if(!this.options.selfReference.renderBehindTheNode){var a=this.options.selfReference.angle,h=this.options.selfReference.angle+Math.PI,l=this._findBorderPositionCircle(this.from,t,{x:i,y:n,low:a,high:h,direction:-1}),d=this._findBorderPositionCircle(this.from,t,{x:i,y:n,low:a,high:h,direction:1});r=Math.atan2(l.y-n,l.x-i),s=Math.atan2(d.y-n,d.x-i)}t.beginPath(),t.arc(i,n,o,r,s,!1),t.stroke(),this.disableShadow(t,e)}},{key:"getDistanceToEdge",value:function(t,e,i,n,o,r){if(this.from!=this.to)return this._getDistanceToEdge(t,e,i,n,o,r);var s=pf(this._getCircleData(void 0),3),a=s[0],h=s[1],l=s[2],d=a-o,c=h-r;return Math.abs(Math.sqrt(d*d+c*c)-l)}},{key:"_getDistanceToLine",value:function(t,e,i,n,o,r){var s=i-t,a=n-e,h=((o-t)*s+(r-e)*a)/(s*s+a*a);h>1?h=1:h<0&&(h=0);var l=t+h*s-o,d=e+h*a-r;return Math.sqrt(l*l+d*d)}},{key:"getArrowData",value:function(t,e,i,n,o,r){var s,a,h,l,d,c,u,f=r.width;"from"===e?(h=this.from,l=this.to,d=r.fromArrowScale<0,c=Math.abs(r.fromArrowScale),u=r.fromArrowType):"to"===e?(h=this.to,l=this.from,d=r.toArrowScale<0,c=Math.abs(r.toArrowScale),u=r.toArrowType):(h=this.to,l=this.from,d=r.middleArrowScale<0,c=Math.abs(r.middleArrowScale),u=r.middleArrowType);var p=15*c+3*f;if(h!=l){var v=p/DD(h.x-l.x,h.y-l.y);if("middle"!==e)if(!0===this.options.smooth.enabled){var g=this._findBorderPosition(h,t,{via:i}),y=this.getPoint(g.t+v*("from"===e?1:-1),i);s=Math.atan2(g.y-y.y,g.x-y.x),a=g}else s=Math.atan2(h.y-l.y,h.x-l.x),a=this._findBorderPosition(h,t);else{var m=(d?-v:v)/2,b=this.getPoint(.5+m,i),w=this.getPoint(.5-m,i);s=Math.atan2(b.y-w.y,b.x-w.x),a=this.getPoint(.5,i)}}else{var k=pf(this._getCircleData(t),3),_=k[0],x=k[1],E=k[2];if("from"===e){var O=this.options.selfReference.angle,C=this.options.selfReference.angle+Math.PI,S=this._findBorderPositionCircle(this.from,t,{x:_,y:x,low:O,high:C,direction:-1});s=-2*S.t*Math.PI+1.5*Math.PI+.1*Math.PI,a=S}else if("to"===e){var T=this.options.selfReference.angle,M=this.options.selfReference.angle+Math.PI,P=this._findBorderPositionCircle(this.from,t,{x:_,y:x,low:T,high:M,direction:1});s=-2*P.t*Math.PI+1.5*Math.PI-1.1*Math.PI,a=P}else{var D=this.options.selfReference.angle/(2*Math.PI);a=this._pointOnCircle(_,x,E,D),s=-2*D*Math.PI+1.5*Math.PI+.1*Math.PI}}return{point:a,core:{x:a.x-.9*p*Math.cos(s),y:a.y-.9*p*Math.sin(s)},angle:s,length:p,type:u}}},{key:"drawArrowHead",value:function(t,e,i,n,o){t.strokeStyle=this.getColor(t,e),t.fillStyle=t.strokeStyle,t.lineWidth=e.width,YD.draw(t,o)&&(this.enableShadow(t,e),Kg(t).call(t),this.disableShadow(t,e))}},{key:"enableShadow",value:function(t,e){!0===e.shadow&&(t.shadowColor=e.shadowColor,t.shadowBlur=e.shadowSize,t.shadowOffsetX=e.shadowX,t.shadowOffsetY=e.shadowY)}},{key:"disableShadow",value:function(t,e){!0===e.shadow&&(t.shadowColor="rgba(0,0,0,0)",t.shadowBlur=0,t.shadowOffsetX=0,t.shadowOffsetY=0)}},{key:"drawBackground",value:function(t,e){if(!1!==e.background){var i={strokeStyle:t.strokeStyle,lineWidth:t.lineWidth,dashes:t.dashes};t.strokeStyle=e.backgroundColor,t.lineWidth=e.backgroundSize,this.setStrokeDashed(t,e.backgroundDashes),t.stroke(),t.strokeStyle=i.strokeStyle,t.lineWidth=i.lineWidth,t.dashes=i.dashes,this.setStrokeDashed(t,e.dashes)}}},{key:"setStrokeDashed",value:function(t,e){if(!1!==e)if(void 0!==t.setLineDash){var i=Df(e)?e:[5,5];t.setLineDash(i)}else console.warn("setLineDash is not supported in this browser. The dashed stroke cannot be used.");else void 0!==t.setLineDash?t.setLineDash([]):console.warn("setLineDash is not supported in this browser. The dashed stroke cannot be used.")}}]),t}();function $D(t,e){var i=Hf(t);if(aM){var n=aM(t);e&&(n=yv(n).call(n,(function(e){return yM(t,e).enumerable}))),i.push.apply(i,n)}return i}function ZD(t){for(var e=1;e2&&void 0!==arguments[2]?arguments[2]:this._getViaCoordinates(),r=!1,s=1,a=0,h=this.to,l=this.options.endPointOffset?this.options.endPointOffset.to:0;t.id===this.from.id&&(h=this.from,r=!0,l=this.options.endPointOffset?this.options.endPointOffset.from:0),!1===this.options.arrowStrikethrough&&(l=0);var d=0;do{n=.5*(a+s),i=this.getPoint(n,o);var c=Math.atan2(h.y-i.y,h.x-i.x),u=h.distanceToBorder(e,c)+l-Math.sqrt(Math.pow(i.x-h.x,2)+Math.pow(i.y-h.y,2));if(Math.abs(u)<.2)break;u<0?!1===r?a=n:s=n:!1===r?s=n:a=n,++d}while(a<=s&&d<10);return ZD(ZD({},i),{},{t:n})}},{key:"_getDistanceToBezierEdge",value:function(t,e,i,n,o,r,s){var a,h,l,d,c,u=1e9,f=t,p=e;for(h=1;h<10;h++)l=.1*h,d=Math.pow(1-l,2)*t+2*l*(1-l)*s.x+Math.pow(l,2)*i,c=Math.pow(1-l,2)*e+2*l*(1-l)*s.y+Math.pow(l,2)*n,h>0&&(u=(a=this._getDistanceToLine(f,p,d,c,o,r))1&&void 0!==arguments[1]?arguments[1]:this.via;if(this.from===this.to){var i=pf(this._getCircleData(),3),n=i[0],o=i[1],r=i[2],s=2*Math.PI*(1-t);return{x:n+r*Math.sin(s),y:o+r-r*(1-Math.cos(s))}}return{x:Math.pow(1-t,2)*this.fromPoint.x+2*t*(1-t)*e.x+Math.pow(t,2)*this.toPoint.x,y:Math.pow(1-t,2)*this.fromPoint.y+2*t*(1-t)*e.y+Math.pow(t,2)*this.toPoint.y}}},{key:"_findBorderPosition",value:function(t,e){return this._findBorderPositionBezier(t,e,this.via)}},{key:"_getDistanceToEdge",value:function(t,e,i,n,o,r){return this._getDistanceToBezierEdge(t,e,i,n,o,r,this.via)}}]),i}(JD);function iI(t){var e=function(){if("undefined"==typeof Reflect||!sM)return!1;if(sM.sham)return!1;if("function"==typeof Proxy)return!0;try{return Boolean.prototype.valueOf.call(sM(Boolean,[],(function(){}))),!0}catch(t){return!1}}();return function(){var i,n=F_(t);if(e){var o=F_(this).constructor;i=sM(n,arguments,o)}else i=n.apply(this,arguments);return I_(this,i)}}var nI=function(t){D_(i,t);var e=iI(i);function i(t,n,o){return ph(this,i),e.call(this,t,n,o)}return xu(i,[{key:"_line",value:function(t,e,i){this._bezierCurve(t,e,i)}},{key:"getViaNode",value:function(){return this._getViaCoordinates()}},{key:"_getViaCoordinates",value:function(){var t,e,i=this.options.smooth.roundness,n=this.options.smooth.type,o=Math.abs(this.from.x-this.to.x),r=Math.abs(this.from.y-this.to.y);if("discrete"===n||"diagonalCross"===n){var s,a;s=a=o<=r?i*r:i*o,this.from.x>this.to.x&&(s=-s),this.from.y>=this.to.y&&(a=-a);var h=this.from.x+s,l=this.from.y+a;return"discrete"===n&&(o<=r?h=othis.to.x&&(t=-t),this.from.y>=this.to.y&&(e=-e);var w=this.from.x+t,k=this.from.y+e;return o<=r?w=this.from.x<=this.to.x?this.to.xw?this.to.x:w:k=this.from.y>=this.to.y?this.to.y>k?this.to.y:k:this.to.y2&&void 0!==arguments[2]?arguments[2]:{};return this._findBorderPositionBezier(t,e,i.via)}},{key:"_getDistanceToEdge",value:function(t,e,i,n,o,r){var s=arguments.length>6&&void 0!==arguments[6]?arguments[6]:this._getViaCoordinates();return this._getDistanceToBezierEdge(t,e,i,n,o,r,s)}},{key:"getPoint",value:function(t){var e=arguments.length>1&&void 0!==arguments[1]?arguments[1]:this._getViaCoordinates(),i=t;return{x:Math.pow(1-i,2)*this.fromPoint.x+2*i*(1-i)*e.x+Math.pow(i,2)*this.toPoint.x,y:Math.pow(1-i,2)*this.fromPoint.y+2*i*(1-i)*e.y+Math.pow(i,2)*this.toPoint.y}}}]),i}(JD);function oI(t){var e=function(){if("undefined"==typeof Reflect||!sM)return!1;if(sM.sham)return!1;if("function"==typeof Proxy)return!0;try{return Boolean.prototype.valueOf.call(sM(Boolean,[],(function(){}))),!0}catch(t){return!1}}();return function(){var i,n=F_(t);if(e){var o=F_(this).constructor;i=sM(n,arguments,o)}else i=n.apply(this,arguments);return I_(this,i)}}var rI=function(t){D_(i,t);var e=oI(i);function i(t,n,o){return ph(this,i),e.call(this,t,n,o)}return xu(i,[{key:"_getDistanceToBezierEdge2",value:function(t,e,i,n,o,r,s,a){for(var h=1e9,l=t,d=e,c=[0,0,0,0],u=1;u<10;u++){var f=.1*u;c[0]=Math.pow(1-f,3),c[1]=3*f*Math.pow(1-f,2),c[2]=3*Math.pow(f,2)*(1-f),c[3]=Math.pow(f,3);var p=c[0]*t+c[1]*s.x+c[2]*a.x+c[3]*i,v=c[0]*e+c[1]*s.y+c[2]*a.y+c[3]*n;if(u>0){var g=this._getDistanceToLine(l,d,p,v,o,r);h=gMath.abs(r)||!0===this.options.smooth.forceDirection||"horizontal"===this.options.smooth.forceDirection)&&"vertical"!==this.options.smooth.forceDirection?(e=this.from.y,n=this.to.y,t=this.from.x-s*o,i=this.to.x+s*o):(e=this.from.y-s*r,n=this.to.y+s*r,t=this.from.x,i=this.to.x),[{x:t,y:e},{x:i,y:n}]}},{key:"getViaNode",value:function(){return this._getViaCoordinates()}},{key:"_findBorderPosition",value:function(t,e){return this._findBorderPositionBezier(t,e)}},{key:"_getDistanceToEdge",value:function(t,e,i,n,o,r){var s=pf(arguments.length>6&&void 0!==arguments[6]?arguments[6]:this._getViaCoordinates(),2),a=s[0],h=s[1];return this._getDistanceToBezierEdge2(t,e,i,n,o,r,a,h)}},{key:"getPoint",value:function(t){var e=pf(arguments.length>1&&void 0!==arguments[1]?arguments[1]:this._getViaCoordinates(),2),i=e[0],n=e[1],o=t,r=[Math.pow(1-o,3),3*o*Math.pow(1-o,2),3*Math.pow(o,2)*(1-o),Math.pow(o,3)];return{x:r[0]*this.fromPoint.x+r[1]*i.x+r[2]*n.x+r[3]*this.toPoint.x,y:r[0]*this.fromPoint.y+r[1]*i.y+r[2]*n.y+r[3]*this.toPoint.y}}}]),i}(rI);function hI(t){var e=function(){if("undefined"==typeof Reflect||!sM)return!1;if(sM.sham)return!1;if("function"==typeof Proxy)return!0;try{return Boolean.prototype.valueOf.call(sM(Boolean,[],(function(){}))),!0}catch(t){return!1}}();return function(){var i,n=F_(t);if(e){var o=F_(this).constructor;i=sM(n,arguments,o)}else i=n.apply(this,arguments);return I_(this,i)}}var lI=function(t){D_(i,t);var e=hI(i);function i(t,n,o){return ph(this,i),e.call(this,t,n,o)}return xu(i,[{key:"_line",value:function(t,e){t.beginPath(),t.moveTo(this.fromPoint.x,this.fromPoint.y),t.lineTo(this.toPoint.x,this.toPoint.y),this.enableShadow(t,e),t.stroke(),this.disableShadow(t,e)}},{key:"getViaNode",value:function(){}},{key:"getPoint",value:function(t){return{x:(1-t)*this.fromPoint.x+t*this.toPoint.x,y:(1-t)*this.fromPoint.y+t*this.toPoint.y}}},{key:"_findBorderPosition",value:function(t,e){var i=this.to,n=this.from;t.id===this.from.id&&(i=this.from,n=this.to);var o=Math.atan2(i.y-n.y,i.x-n.x),r=i.x-n.x,s=i.y-n.y,a=Math.sqrt(r*r+s*s),h=(a-t.distanceToBorder(e,o))/a;return{x:(1-h)*n.x+h*i.x,y:(1-h)*n.y+h*i.y,t:0}}},{key:"_getDistanceToEdge",value:function(t,e,i,n,o,r){return this._getDistanceToLine(t,e,i,n,o,r)}}]),i}(KD),dI=function(){function t(e,i,n,o,r){if(ph(this,t),void 0===i)throw new Error("No body provided");this.options=zb(o),this.globalOptions=o,this.defaultOptions=r,this.body=i,this.imagelist=n,this.id=void 0,this.fromId=void 0,this.toId=void 0,this.selected=!1,this.hover=!1,this.labelDirty=!0,this.baseWidth=this.options.width,this.baseFontSize=this.options.font.size,this.from=void 0,this.to=void 0,this.edgeType=void 0,this.connected=!1,this.labelModule=new OP(this.body,this.options,!0),this.setOptions(e)}return xu(t,[{key:"setOptions",value:function(e){if(e){var i=void 0!==e.physics&&this.options.physics!==e.physics||void 0!==e.hidden&&(this.options.hidden||!1)!==(e.hidden||!1)||void 0!==e.from&&this.options.from!==e.from||void 0!==e.to&&this.options.to!==e.to;t.parseOptions(this.options,e,!0,this.globalOptions),void 0!==e.id&&(this.id=e.id),void 0!==e.from&&(this.fromId=e.from),void 0!==e.to&&(this.toId=e.to),void 0!==e.title&&(this.title=e.title),void 0!==e.value&&(e.value=lP(e.value));var n=[e,this.options,this.defaultOptions];return this.chooser=gP("edge",n),this.updateLabelModule(e),i=this.updateEdgeType()||i,this._setInteractionWidths(),this.connect(),i}}},{key:"getFormattingValues",value:function(){var t=!0===this.options.arrows.to||!0===this.options.arrows.to.enabled,e=!0===this.options.arrows.from||!0===this.options.arrows.from.enabled,i=!0===this.options.arrows.middle||!0===this.options.arrows.middle.enabled,n=this.options.color.inherit,o={toArrow:t,toArrowScale:this.options.arrows.to.scaleFactor,toArrowType:this.options.arrows.to.type,toArrowSrc:this.options.arrows.to.src,toArrowImageWidth:this.options.arrows.to.imageWidth,toArrowImageHeight:this.options.arrows.to.imageHeight,middleArrow:i,middleArrowScale:this.options.arrows.middle.scaleFactor,middleArrowType:this.options.arrows.middle.type,middleArrowSrc:this.options.arrows.middle.src,middleArrowImageWidth:this.options.arrows.middle.imageWidth,middleArrowImageHeight:this.options.arrows.middle.imageHeight,fromArrow:e,fromArrowScale:this.options.arrows.from.scaleFactor,fromArrowType:this.options.arrows.from.type,fromArrowSrc:this.options.arrows.from.src,fromArrowImageWidth:this.options.arrows.from.imageWidth,fromArrowImageHeight:this.options.arrows.from.imageHeight,arrowStrikethrough:this.options.arrowStrikethrough,color:n?void 0:this.options.color.color,inheritsColor:n,opacity:this.options.color.opacity,hidden:this.options.hidden,length:this.options.length,shadow:this.options.shadow.enabled,shadowColor:this.options.shadow.color,shadowSize:this.options.shadow.size,shadowX:this.options.shadow.x,shadowY:this.options.shadow.y,dashes:this.options.dashes,width:this.options.width,background:this.options.background.enabled,backgroundColor:this.options.background.color,backgroundSize:this.options.background.size,backgroundDashes:this.options.background.dashes};if(this.selected||this.hover)if(!0===this.chooser){if(this.selected){var r=this.options.selectionWidth;"function"==typeof r?o.width=r(o.width):"number"==typeof r&&(o.width+=r),o.width=Math.max(o.width,.3/this.body.view.scale),o.color=this.options.color.highlight,o.shadow=this.options.shadow.enabled}else if(this.hover){var s=this.options.hoverWidth;"function"==typeof s?o.width=s(o.width):"number"==typeof s&&(o.width+=s),o.width=Math.max(o.width,.3/this.body.view.scale),o.color=this.options.color.hover,o.shadow=this.options.shadow.enabled}}else"function"==typeof this.chooser&&(this.chooser(o,this.options.id,this.selected,this.hover),void 0!==o.color&&(o.inheritsColor=!1),!1===o.shadow&&(o.shadowColor===this.options.shadow.color&&o.shadowSize===this.options.shadow.size&&o.shadowX===this.options.shadow.x&&o.shadowY===this.options.shadow.y||(o.shadow=!0)));else o.shadow=this.options.shadow.enabled,o.width=Math.max(o.width,.3/this.body.view.scale);return o}},{key:"updateLabelModule",value:function(t){var e=[t,this.options,this.globalOptions,this.defaultOptions];this.labelModule.update(this.options,e),void 0!==this.labelModule.baseSize&&(this.baseFontSize=this.labelModule.baseSize)}},{key:"updateEdgeType",value:function(){var t=this.options.smooth,e=!1,i=!0;return void 0!==this.edgeType&&((this.edgeType instanceof eI&&!0===t.enabled&&"dynamic"===t.type||this.edgeType instanceof aI&&!0===t.enabled&&"cubicBezier"===t.type||this.edgeType instanceof nI&&!0===t.enabled&&"dynamic"!==t.type&&"cubicBezier"!==t.type||this.edgeType instanceof lI&&!1===t.type.enabled)&&(i=!1),!0===i&&(e=this.cleanup())),!0===i?!0===t.enabled?"dynamic"===t.type?(e=!0,this.edgeType=new eI(this.options,this.body,this.labelModule)):"cubicBezier"===t.type?this.edgeType=new aI(this.options,this.body,this.labelModule):this.edgeType=new nI(this.options,this.body,this.labelModule):this.edgeType=new lI(this.options,this.body,this.labelModule):this.edgeType.setOptions(this.options),e}},{key:"connect",value:function(){this.disconnect(),this.from=this.body.nodes[this.fromId]||void 0,this.to=this.body.nodes[this.toId]||void 0,this.connected=void 0!==this.from&&void 0!==this.to,!0===this.connected?(this.from.attachEdge(this),this.to.attachEdge(this)):(this.from&&this.from.detachEdge(this),this.to&&this.to.detachEdge(this)),this.edgeType.connect()}},{key:"disconnect",value:function(){this.from&&(this.from.detachEdge(this),this.from=void 0),this.to&&(this.to.detachEdge(this),this.to=void 0),this.connected=!1}},{key:"getTitle",value:function(){return this.title}},{key:"isSelected",value:function(){return this.selected}},{key:"getValue",value:function(){return this.options.value}},{key:"setValueRange",value:function(t,e,i){if(void 0!==this.options.value){var n=this.options.scaling.customScalingFunction(t,e,i,this.options.value),o=this.options.scaling.max-this.options.scaling.min;if(!0===this.options.scaling.label.enabled){var r=this.options.scaling.label.max-this.options.scaling.label.min;this.options.font.size=this.options.scaling.label.min+n*r}this.options.width=this.options.scaling.min+n*o}else this.options.width=this.baseWidth,this.options.font.size=this.baseFontSize;this._setInteractionWidths(),this.updateLabelModule()}},{key:"_setInteractionWidths",value:function(){"function"==typeof this.options.hoverWidth?this.edgeType.hoverWidth=this.options.hoverWidth(this.options.width):this.edgeType.hoverWidth=this.options.hoverWidth+this.options.width,"function"==typeof this.options.selectionWidth?this.edgeType.selectionWidth=this.options.selectionWidth(this.options.width):this.edgeType.selectionWidth=this.options.selectionWidth+this.options.width}},{key:"draw",value:function(t){var e=this.getFormattingValues();if(!e.hidden){var i=this.edgeType.getViaNode();this.edgeType.drawLine(t,e,this.selected,this.hover,i),this.drawLabel(t,i)}}},{key:"drawArrows",value:function(t){var e=this.getFormattingValues();if(!e.hidden){var i=this.edgeType.getViaNode(),n={};this.edgeType.fromPoint=this.edgeType.from,this.edgeType.toPoint=this.edgeType.to,e.fromArrow&&(n.from=this.edgeType.getArrowData(t,"from",i,this.selected,this.hover,e),!1===e.arrowStrikethrough&&(this.edgeType.fromPoint=n.from.core),e.fromArrowSrc&&(n.from.image=this.imagelist.load(e.fromArrowSrc)),e.fromArrowImageWidth&&(n.from.imageWidth=e.fromArrowImageWidth),e.fromArrowImageHeight&&(n.from.imageHeight=e.fromArrowImageHeight)),e.toArrow&&(n.to=this.edgeType.getArrowData(t,"to",i,this.selected,this.hover,e),!1===e.arrowStrikethrough&&(this.edgeType.toPoint=n.to.core),e.toArrowSrc&&(n.to.image=this.imagelist.load(e.toArrowSrc)),e.toArrowImageWidth&&(n.to.imageWidth=e.toArrowImageWidth),e.toArrowImageHeight&&(n.to.imageHeight=e.toArrowImageHeight)),e.middleArrow&&(n.middle=this.edgeType.getArrowData(t,"middle",i,this.selected,this.hover,e),e.middleArrowSrc&&(n.middle.image=this.imagelist.load(e.middleArrowSrc)),e.middleArrowImageWidth&&(n.middle.imageWidth=e.middleArrowImageWidth),e.middleArrowImageHeight&&(n.middle.imageHeight=e.middleArrowImageHeight)),e.fromArrow&&this.edgeType.drawArrowHead(t,e,this.selected,this.hover,n.from),e.middleArrow&&this.edgeType.drawArrowHead(t,e,this.selected,this.hover,n.middle),e.toArrow&&this.edgeType.drawArrowHead(t,e,this.selected,this.hover,n.to)}}},{key:"drawLabel",value:function(t,e){if(void 0!==this.options.label){var i,n=this.from,o=this.to;if(this.labelModule.differentState(this.selected,this.hover)&&this.labelModule.getTextSize(t,this.selected,this.hover),n.id!=o.id){this.labelModule.pointToSelf=!1,i=this.edgeType.getPoint(.5,e),t.save();var r=this._getRotation(t);0!=r.angle&&(t.translate(r.x,r.y),t.rotate(r.angle)),this.labelModule.draw(t,i.x,i.y,this.selected,this.hover),t.restore()}else{this.labelModule.pointToSelf=!0;var s=bP(t,this.options.selfReference.angle,this.options.selfReference.size,n);i=this._pointOnCircle(s.x,s.y,this.options.selfReference.size,this.options.selfReference.angle),this.labelModule.draw(t,i.x,i.y,this.selected,this.hover)}}}},{key:"getItemsOnPoint",value:function(t){var e=[];if(this.labelModule.visible()){var i=this._getRotation();yP(this.labelModule.getSize(),t,i)&&e.push({edgeId:this.id,labelId:0})}var n={left:t.x,top:t.y};return this.isOverlappingWith(n)&&e.push({edgeId:this.id}),e}},{key:"isOverlappingWith",value:function(t){if(this.connected){var e=this.from.x,i=this.from.y,n=this.to.x,o=this.to.y,r=t.left,s=t.top;return this.edgeType.getDistanceToEdge(e,i,n,o,r,s)<10}return!1}},{key:"_getRotation",value:function(t){var e=this.edgeType.getViaNode(),i=this.edgeType.getPoint(.5,e);void 0!==t&&this.labelModule.calculateLabelSize(t,this.selected,this.hover,i.x,i.y);var n={x:i.x,y:this.labelModule.size.yLine,angle:0};if(!this.labelModule.visible())return n;if("horizontal"===this.options.font.align)return n;var o=this.from.y-this.to.y,r=this.from.x-this.to.x,s=Math.atan2(o,r);return(s<-1&&r<0||s>0&&r<0)&&(s+=Math.PI),n.angle=s,n}},{key:"_pointOnCircle",value:function(t,e,i,n){return{x:t+i*Math.cos(n),y:e-i*Math.sin(n)}}},{key:"select",value:function(){this.selected=!0}},{key:"unselect",value:function(){this.selected=!1}},{key:"cleanup",value:function(){return this.edgeType.cleanup()}},{key:"remove",value:function(){this.cleanup(),this.disconnect(),delete this.body.edges[this.id]}},{key:"endPointsValid",value:function(){return void 0!==this.body.nodes[this.fromId]&&void 0!==this.body.nodes[this.toId]}}],[{key:"parseOptions",value:function(t,e){var i=arguments.length>2&&void 0!==arguments[2]&&arguments[2],n=arguments.length>3&&void 0!==arguments[3]?arguments[3]:{},o=arguments.length>4&&void 0!==arguments[4]&&arguments[4];if(pb(["endPointOffset","arrowStrikethrough","id","from","hidden","hoverWidth","labelHighlightBold","length","line","opacity","physics","scaling","selectionWidth","selfReferenceSize","selfReference","to","title","value","width","font","chosen","widthConstraint"],t,e,i),void 0!==e.endPointOffset&&void 0!==e.endPointOffset.from&&(g_(e.endPointOffset.from)?t.endPointOffset.from=e.endPointOffset.from:(t.endPointOffset.from=void 0!==n.endPointOffset.from?n.endPointOffset.from:0,console.error("endPointOffset.from is not a valid number"))),void 0!==e.endPointOffset&&void 0!==e.endPointOffset.to&&(g_(e.endPointOffset.to)?t.endPointOffset.to=e.endPointOffset.to:(t.endPointOffset.to=void 0!==n.endPointOffset.to?n.endPointOffset.to:0,console.error("endPointOffset.to is not a valid number"))),mP(e.label)?t.label=e.label:mP(t.label)||(t.label=void 0),Ab(t,e,"smooth",n),Ab(t,e,"shadow",n),Ab(t,e,"background",n),void 0!==e.dashes&&null!==e.dashes?t.dashes=e.dashes:!0===i&&null===e.dashes&&(t.dashes=pg(n.dashes)),void 0!==e.scaling&&null!==e.scaling?(void 0!==e.scaling.min&&(t.scaling.min=e.scaling.min),void 0!==e.scaling.max&&(t.scaling.max=e.scaling.max),Ab(t.scaling,e.scaling,"label",n.scaling)):!0===i&&null===e.scaling&&(t.scaling=pg(n.scaling)),void 0!==e.arrows&&null!==e.arrows)if("string"==typeof e.arrows){var r=e.arrows.toLowerCase();t.arrows.to.enabled=-1!=lg(r).call(r,"to"),t.arrows.middle.enabled=-1!=lg(r).call(r,"middle"),t.arrows.from.enabled=-1!=lg(r).call(r,"from")}else{if("object"!==bu(e.arrows))throw new Error("The arrow newOptions can only be an object or a string. Refer to the documentation. You used:"+mg(e.arrows));Ab(t.arrows,e.arrows,"to",n.arrows),Ab(t.arrows,e.arrows,"middle",n.arrows),Ab(t.arrows,e.arrows,"from",n.arrows)}else!0===i&&null===e.arrows&&(t.arrows=pg(n.arrows));if(void 0!==e.color&&null!==e.color){var s=lb(e.color)?{color:e.color,highlight:e.color,hover:e.color,inherit:!1,opacity:1}:e.color,a=t.color;if(o)gb(a,n.color,!1,i);else for(var h in a)Object.prototype.hasOwnProperty.call(a,h)&&delete a[h];if(lb(a))a.color=a,a.highlight=a,a.hover=a,a.inherit=!1,void 0===s.opacity&&(a.opacity=1);else{var l=!1;void 0!==s.color&&(a.color=s.color,l=!0),void 0!==s.highlight&&(a.highlight=s.highlight,l=!0),void 0!==s.hover&&(a.hover=s.hover,l=!0),void 0!==s.inherit&&(a.inherit=s.inherit),void 0!==s.opacity&&(a.opacity=Math.min(1,Math.max(0,s.opacity))),!0===l?a.inherit=!1:void 0===a.inherit&&(a.inherit="from")}}else!0===i&&null===e.color&&(t.color=zb(n.color));!0===i&&null===e.font&&(t.font=zb(n.font)),Object.prototype.hasOwnProperty.call(e,"selfReferenceSize")&&(console.warn("The selfReferenceSize property has been deprecated. Please use selfReference property instead. The selfReference can be set like thise selfReference:{size:30, angle:Math.PI / 4}"),t.selfReference.size=e.selfReferenceSize)}}]),t}(),cI=function(){function t(e,i,n){var o,r=this;ph(this,t),this.body=e,this.images=i,this.groups=n,this.body.functions.createEdge=Hn(o=this.create).call(o,this),this.edgesListeners={add:function(t,e){r.add(e.items)},update:function(t,e){r.update(e.items)},remove:function(t,e){r.remove(e.items)}},this.options={},this.defaultOptions={arrows:{to:{enabled:!1,scaleFactor:1,type:"arrow"},middle:{enabled:!1,scaleFactor:1,type:"arrow"},from:{enabled:!1,scaleFactor:1,type:"arrow"}},endPointOffset:{from:0,to:0},arrowStrikethrough:!0,color:{color:"#848484",highlight:"#848484",hover:"#848484",inherit:"from",opacity:1},dashes:!1,font:{color:"#343434",size:14,face:"arial",background:"none",strokeWidth:2,strokeColor:"#ffffff",align:"horizontal",multi:!1,vadjust:0,bold:{mod:"bold"},boldital:{mod:"bold italic"},ital:{mod:"italic"},mono:{mod:"",size:15,face:"courier new",vadjust:2}},hidden:!1,hoverWidth:1.5,label:void 0,labelHighlightBold:!0,length:void 0,physics:!0,scaling:{min:1,max:15,label:{enabled:!0,min:14,max:30,maxVisible:30,drawThreshold:5},customScalingFunction:function(t,e,i,n){if(e===t)return.5;var o=1/(e-t);return Math.max(0,(n-t)*o)}},selectionWidth:1.5,selfReference:{size:20,angle:Math.PI/4,renderBehindTheNode:!0},shadow:{enabled:!1,color:"rgba(0,0,0,0.5)",size:10,x:5,y:5},background:{enabled:!1,color:"rgba(111,111,111,1)",size:10,dashes:!1},smooth:{enabled:!0,type:"dynamic",forceDirection:"none",roundness:.5},title:void 0,width:1,value:void 0},gb(this.options,this.defaultOptions),this.bindEventListeners()}return xu(t,[{key:"bindEventListeners",value:function(){var t,e,i=this;this.body.emitter.on("_forceDisableDynamicCurves",(function(t){var e=!(arguments.length>1&&void 0!==arguments[1])||arguments[1];"dynamic"===t&&(t="continuous");var n=!1;for(var o in i.body.edges)if(Object.prototype.hasOwnProperty.call(i.body.edges,o)){var r=i.body.edges[o],s=i.body.data.edges.get(o);if(null!=s){var a=s.smooth;void 0!==a&&!0===a.enabled&&"dynamic"===a.type&&(void 0===t?r.setOptions({smooth:!1}):r.setOptions({smooth:{type:t}}),n=!0)}}!0===e&&!0===n&&i.body.emitter.emit("_dataChanged")})),this.body.emitter.on("_dataUpdated",(function(){i.reconnectEdges()})),this.body.emitter.on("refreshEdges",Hn(t=this.refresh).call(t,this)),this.body.emitter.on("refresh",Hn(e=this.refresh).call(e,this)),this.body.emitter.on("destroy",(function(){kb(i.edgesListeners,(function(t,e){i.body.data.edges&&i.body.data.edges.off(e,t)})),delete i.body.functions.createEdge,delete i.edgesListeners.add,delete i.edgesListeners.update,delete i.edgesListeners.remove,delete i.edgesListeners}))}},{key:"setOptions",value:function(t){if(void 0!==t){dI.parseOptions(this.options,t,!0,this.defaultOptions,!0);var e=!1;if(void 0!==t.smooth)for(var i in this.body.edges)Object.prototype.hasOwnProperty.call(this.body.edges,i)&&(e=this.body.edges[i].updateEdgeType()||e);if(void 0!==t.font)for(var n in this.body.edges)Object.prototype.hasOwnProperty.call(this.body.edges,n)&&this.body.edges[n].updateLabelModule();void 0===t.hidden&&void 0===t.physics&&!0!==e||this.body.emitter.emit("_dataChanged")}}},{key:"setData",value:function(t){var e=this,i=arguments.length>1&&void 0!==arguments[1]&&arguments[1],n=this.body.data.edges;if(ZM("id",t))this.body.data.edges=t;else if(Df(t))this.body.data.edges=new GM,this.body.data.edges.add(t);else{if(t)throw new TypeError("Array or DataSet expected");this.body.data.edges=new GM}if(n&&kb(this.edgesListeners,(function(t,e){n.off(e,t)})),this.body.edges={},this.body.data.edges){kb(this.edgesListeners,(function(t,i){e.body.data.edges.on(i,t)}));var o=this.body.data.edges.getIds();this.add(o,!0)}this.body.emitter.emit("_adjustEdgesForHierarchicalLayout"),!1===i&&this.body.emitter.emit("_dataChanged")}},{key:"add",value:function(t){for(var e=arguments.length>1&&void 0!==arguments[1]&&arguments[1],i=this.body.edges,n=this.body.data.edges,o=0;o1&&void 0!==arguments[1])||arguments[1];if(0!==t.length){var i=this.body.edges;kb(t,(function(t){var e=i[t];void 0!==e&&e.remove()})),e&&this.body.emitter.emit("_dataChanged")}}},{key:"refresh",value:function(){var t=this;kb(this.body.edges,(function(e,i){var n=t.body.data.edges.get(i);void 0!==n&&e.setOptions(n)}))}},{key:"create",value:function(t){return new dI(t,this.body,this.images,this.options,this.defaultOptions)}},{key:"reconnectEdges",value:function(){var t,e=this.body.nodes,i=this.body.edges;for(t in e)Object.prototype.hasOwnProperty.call(e,t)&&(e[t].edges=[]);for(t in i)if(Object.prototype.hasOwnProperty.call(i,t)){var n=i[t];n.from=null,n.to=null,n.connect()}}},{key:"getConnectedNodes",value:function(t){var e=[];if(void 0!==this.body.edges[t]){var i=this.body.edges[t];void 0!==i.fromId&&e.push(i.fromId),void 0!==i.toId&&e.push(i.toId)}return e}},{key:"_updateState",value:function(){this._addMissingEdges(),this._removeInvalidEdges()}},{key:"_removeInvalidEdges",value:function(){var t=this,e=[];kb(this.body.edges,(function(i,n){var o=t.body.nodes[i.toId],r=t.body.nodes[i.fromId];void 0!==o&&!0===o.isCluster||void 0!==r&&!0===r.isCluster||void 0!==o&&void 0!==r||e.push(n)})),this.remove(e,!1)}},{key:"_addMissingEdges",value:function(){var t=this.body.data.edges;if(null!=t){var e=this.body.edges,i=[];op(t).call(t,(function(t,n){void 0===e[n]&&i.push(n)})),this.add(i,!0)}}}]),t}(),uI=function(){function t(e,i,n){ph(this,t),this.body=e,this.physicsBody=i,this.barnesHutTree,this.setOptions(n),this._rng=Jm("BARNES HUT SOLVER")}return xu(t,[{key:"setOptions",value:function(t){this.options=t,this.thetaInversed=1/this.options.theta,this.overlapAvoidanceFactor=1-Math.max(0,Math.min(1,this.options.avoidOverlap))}},{key:"solve",value:function(){if(0!==this.options.gravitationalConstant&&this.physicsBody.physicsNodeIndices.length>0){var t,e=this.body.nodes,i=this.physicsBody.physicsNodeIndices,n=i.length,o=this._formBarnesHutTree(e,i);this.barnesHutTree=o;for(var r=0;r0&&this._getForceContributions(o.root,t)}}},{key:"_getForceContributions",value:function(t,e){this._getForceContribution(t.children.NW,e),this._getForceContribution(t.children.NE,e),this._getForceContribution(t.children.SW,e),this._getForceContribution(t.children.SE,e)}},{key:"_getForceContribution",value:function(t,e){if(t.childrenCount>0){var i=t.centerOfMass.x-e.x,n=t.centerOfMass.y-e.y,o=Math.sqrt(i*i+n*n);o*t.calcSize>this.thetaInversed?this._calculateForces(o,i,n,e,t):4===t.childrenCount?this._getForceContributions(t,e):t.children.data.id!=e.id&&this._calculateForces(o,i,n,e,t)}}},{key:"_calculateForces",value:function(t,e,i,n,o){0===t&&(e=t=.1),this.overlapAvoidanceFactor<1&&n.shape.radius&&(t=Math.max(.1+this.overlapAvoidanceFactor*n.shape.radius,t-n.shape.radius));var r=this.options.gravitationalConstant*o.mass*n.options.mass/Math.pow(t,3),s=e*r,a=i*r;this.physicsBody.forces[n.id].x+=s,this.physicsBody.forces[n.id].y+=a}},{key:"_formBarnesHutTree",value:function(t,e){for(var i,n=e.length,o=t[e[0]].x,r=t[e[0]].y,s=t[e[0]].x,a=t[e[0]].y,h=1;h0&&(ds&&(s=d),ca&&(a=c))}var u=Math.abs(s-o)-Math.abs(a-r);u>0?(r-=.5*u,a+=.5*u):(o+=.5*u,s-=.5*u);var f=Math.max(1e-5,Math.abs(s-o)),p=.5*f,v=.5*(o+s),g=.5*(r+a),y={root:{centerOfMass:{x:0,y:0},mass:0,range:{minX:v-p,maxX:v+p,minY:g-p,maxY:g+p},size:f,calcSize:1/f,children:{data:null},maxWidth:0,level:0,childrenCount:4}};this._splitBranch(y.root);for(var m=0;m0&&this._placeInTree(y.root,i);return y}},{key:"_updateBranchMass",value:function(t,e){var i=t.centerOfMass,n=t.mass+e.options.mass,o=1/n;i.x=i.x*t.mass+e.x*e.options.mass,i.x*=o,i.y=i.y*t.mass+e.y*e.options.mass,i.y*=o,t.mass=n;var r=Math.max(Math.max(e.height,e.radius),e.width);t.maxWidth=t.maxWidthe.x?o.maxY>e.y?"NW":"SW":o.maxY>e.y?"NE":"SE",this._placeInRegion(t,e,n)}},{key:"_placeInRegion",value:function(t,e,i){var n=t.children[i];switch(n.childrenCount){case 0:n.children.data=e,n.childrenCount=1,this._updateBranchMass(n,e);break;case 1:n.children.data.x===e.x&&n.children.data.y===e.y?(e.x+=this._rng(),e.y+=this._rng()):(this._splitBranch(n),this._placeInTree(n,e));break;case 4:this._placeInTree(n,e)}}},{key:"_splitBranch",value:function(t){var e=null;1===t.childrenCount&&(e=t.children.data,t.mass=0,t.centerOfMass.x=0,t.centerOfMass.y=0),t.childrenCount=4,t.children.data=null,this._insertRegion(t,"NW"),this._insertRegion(t,"NE"),this._insertRegion(t,"SW"),this._insertRegion(t,"SE"),null!=e&&this._placeInTree(t,e)}},{key:"_insertRegion",value:function(t,e){var i,n,o,r,s=.5*t.size;switch(e){case"NW":i=t.range.minX,n=t.range.minX+s,o=t.range.minY,r=t.range.minY+s;break;case"NE":i=t.range.minX+s,n=t.range.maxX,o=t.range.minY,r=t.range.minY+s;break;case"SW":i=t.range.minX,n=t.range.minX+s,o=t.range.minY+s,r=t.range.maxY;break;case"SE":i=t.range.minX+s,n=t.range.maxX,o=t.range.minY+s,r=t.range.maxY}t.children[e]={centerOfMass:{x:0,y:0},mass:0,range:{minX:i,maxX:n,minY:o,maxY:r},size:.5*t.size,calcSize:2*t.calcSize,children:{data:null},maxWidth:0,level:t.level+1,childrenCount:0}}},{key:"_debug",value:function(t,e){void 0!==this.barnesHutTree&&(t.lineWidth=1,this._drawBranch(this.barnesHutTree.root,t,e))}},{key:"_drawBranch",value:function(t,e,i){void 0===i&&(i="#FF0000"),4===t.childrenCount&&(this._drawBranch(t.children.NW,e),this._drawBranch(t.children.NE,e),this._drawBranch(t.children.SE,e),this._drawBranch(t.children.SW,e)),e.strokeStyle=i,e.beginPath(),e.moveTo(t.range.minX,t.range.minY),e.lineTo(t.range.maxX,t.range.minY),e.stroke(),e.beginPath(),e.moveTo(t.range.maxX,t.range.minY),e.lineTo(t.range.maxX,t.range.maxY),e.stroke(),e.beginPath(),e.moveTo(t.range.maxX,t.range.maxY),e.lineTo(t.range.minX,t.range.maxY),e.stroke(),e.beginPath(),e.moveTo(t.range.minX,t.range.maxY),e.lineTo(t.range.minX,t.range.minY),e.stroke()}}]),t}(),fI=function(){function t(e,i,n){ph(this,t),this._rng=Jm("REPULSION SOLVER"),this.body=e,this.physicsBody=i,this.setOptions(n)}return xu(t,[{key:"setOptions",value:function(t){this.options=t}},{key:"solve",value:function(){for(var t,e,i,n,o,r,s,a,h=this.body.nodes,l=this.physicsBody.physicsNodeIndices,d=this.physicsBody.forces,c=this.options.nodeDistance,u=-2/3/c,f=0;f0){var r=o.edges.length+1,s=this.options.centralGravity*r*o.options.mass;n[o.id].x=e*s,n[o.id].y=i*s}}}]),i}(yI),_I=function(){function t(e){ph(this,t),this.body=e,this.physicsBody={physicsNodeIndices:[],physicsEdgeIndices:[],forces:{},velocities:{}},this.physicsEnabled=!0,this.simulationInterval=1e3/60,this.requiresTimeout=!0,this.previousStates={},this.referenceState={},this.freezeCache={},this.renderTimer=void 0,this.adaptiveTimestep=!1,this.adaptiveTimestepEnabled=!1,this.adaptiveCounter=0,this.adaptiveInterval=3,this.stabilized=!1,this.startedStabilization=!1,this.stabilizationIterations=0,this.ready=!1,this.options={},this.defaultOptions={enabled:!0,barnesHut:{theta:.5,gravitationalConstant:-2e3,centralGravity:.3,springLength:95,springConstant:.04,damping:.09,avoidOverlap:0},forceAtlas2Based:{theta:.5,gravitationalConstant:-50,centralGravity:.01,springConstant:.08,springLength:100,damping:.4,avoidOverlap:0},repulsion:{centralGravity:.2,springLength:200,springConstant:.05,nodeDistance:100,damping:.09,avoidOverlap:0},hierarchicalRepulsion:{centralGravity:0,springLength:100,springConstant:.01,nodeDistance:120,damping:.09},maxVelocity:50,minVelocity:.75,solver:"barnesHut",stabilization:{enabled:!0,iterations:1e3,updateInterval:50,onlyDynamicEdges:!1,fit:!0},timestep:.5,adaptiveTimestep:!0,wind:{x:0,y:0}},bn(this.options,this.defaultOptions),this.timestep=.5,this.layoutFailed=!1,this.bindEventListeners()}return xu(t,[{key:"bindEventListeners",value:function(){var t=this;this.body.emitter.on("initPhysics",(function(){t.initPhysics()})),this.body.emitter.on("_layoutFailed",(function(){t.layoutFailed=!0})),this.body.emitter.on("resetPhysics",(function(){t.stopSimulation(),t.ready=!1})),this.body.emitter.on("disablePhysics",(function(){t.physicsEnabled=!1,t.stopSimulation()})),this.body.emitter.on("restorePhysics",(function(){t.setOptions(t.options),!0===t.ready&&t.startSimulation()})),this.body.emitter.on("startSimulation",(function(){!0===t.ready&&t.startSimulation()})),this.body.emitter.on("stopSimulation",(function(){t.stopSimulation()})),this.body.emitter.on("destroy",(function(){t.stopSimulation(!1),t.body.emitter.off()})),this.body.emitter.on("_dataChanged",(function(){t.updatePhysicsData()}))}},{key:"setOptions",value:function(t){if(void 0!==t)if(!1===t)this.options.enabled=!1,this.physicsEnabled=!1,this.stopSimulation();else if(!0===t)this.options.enabled=!0,this.physicsEnabled=!0,this.startSimulation();else{this.physicsEnabled=!0,vb(["stabilization"],this.options,t),Ab(this.options,t,"stabilization"),void 0===t.enabled&&(this.options.enabled=!0),!1===this.options.enabled&&(this.physicsEnabled=!1,this.stopSimulation());var e=this.options.wind;e&&(("number"!=typeof e.x||f_(e.x))&&(e.x=0),("number"!=typeof e.y||f_(e.y))&&(e.y=0)),this.timestep=this.options.timestep}this.init()}},{key:"init",value:function(){var t;"forceAtlas2Based"===this.options.solver?(t=this.options.forceAtlas2Based,this.nodesSolver=new bI(this.body,this.physicsBody,t),this.edgesSolver=new vI(this.body,this.physicsBody,t),this.gravitySolver=new kI(this.body,this.physicsBody,t)):"repulsion"===this.options.solver?(t=this.options.repulsion,this.nodesSolver=new fI(this.body,this.physicsBody,t),this.edgesSolver=new vI(this.body,this.physicsBody,t),this.gravitySolver=new yI(this.body,this.physicsBody,t)):"hierarchicalRepulsion"===this.options.solver?(t=this.options.hierarchicalRepulsion,this.nodesSolver=new pI(this.body,this.physicsBody,t),this.edgesSolver=new gI(this.body,this.physicsBody,t),this.gravitySolver=new yI(this.body,this.physicsBody,t)):(t=this.options.barnesHut,this.nodesSolver=new uI(this.body,this.physicsBody,t),this.edgesSolver=new vI(this.body,this.physicsBody,t),this.gravitySolver=new yI(this.body,this.physicsBody,t)),this.modelOptions=t}},{key:"initPhysics",value:function(){!0===this.physicsEnabled&&!0===this.options.enabled?!0===this.options.stabilization.enabled?this.stabilize():(this.stabilized=!1,this.ready=!0,this.body.emitter.emit("fit",{},this.layoutFailed),this.startSimulation()):(this.ready=!0,this.body.emitter.emit("fit"))}},{key:"startSimulation",value:function(){var t;!0===this.physicsEnabled&&!0===this.options.enabled?(this.stabilized=!1,this.adaptiveTimestep=!1,this.body.emitter.emit("_resizeNodes"),void 0===this.viewFunction&&(this.viewFunction=Hn(t=this.simulationStep).call(t,this),this.body.emitter.on("initRedraw",this.viewFunction),this.body.emitter.emit("_startRendering"))):this.body.emitter.emit("_redraw")}},{key:"stopSimulation",value:function(){var t=!(arguments.length>0&&void 0!==arguments[0])||arguments[0];this.stabilized=!0,!0===t&&this._emitStabilized(),void 0!==this.viewFunction&&(this.body.emitter.off("initRedraw",this.viewFunction),this.viewFunction=void 0,!0===t&&this.body.emitter.emit("_stopRendering"))}},{key:"simulationStep",value:function(){var t=Uf();this.physicsTick(),(Uf()-t<.4*this.simulationInterval||!0===this.runDoubleSpeed)&&!1===this.stabilized&&(this.physicsTick(),this.runDoubleSpeed=!0),!0===this.stabilized&&this.stopSimulation()}},{key:"_emitStabilized",value:function(){var t=this,e=arguments.length>0&&void 0!==arguments[0]?arguments[0]:this.stabilizationIterations;(this.stabilizationIterations>1||!0===this.startedStabilization)&&jg((function(){t.body.emitter.emit("stabilized",{iterations:e}),t.startedStabilization=!1,t.stabilizationIterations=0}),0)}},{key:"physicsStep",value:function(){this.gravitySolver.solve(),this.nodesSolver.solve(),this.edgesSolver.solve(),this.moveNodes()}},{key:"adjustTimeStep",value:function(){!0===this._evaluateStepQuality()?this.timestep=1.2*this.timestep:this.timestep/1.2.3))return!1;return!0}},{key:"moveNodes",value:function(){for(var t=this.physicsBody.physicsNodeIndices,e=0,i=0,n=0;nn&&(t=t>0?n:-n),t}},{key:"_performStep",value:function(t){var e=this.body.nodes[t],i=this.physicsBody.forces[t];this.options.wind&&(i.x+=this.options.wind.x,i.y+=this.options.wind.y);var n=this.physicsBody.velocities[t];return this.previousStates[t]={x:e.x,y:e.y,vx:n.x,vy:n.y},!1===e.options.fixed.x?(n.x=this.calculateComponentVelocity(n.x,i.x,e.options.mass),e.x+=n.x*this.timestep):(i.x=0,n.x=0),!1===e.options.fixed.y?(n.y=this.calculateComponentVelocity(n.y,i.y,e.options.mass),e.y+=n.y*this.timestep):(i.y=0,n.y=0),Math.sqrt(Math.pow(n.x,2)+Math.pow(n.y,2))}},{key:"_freezeNodes",value:function(){var t=this.body.nodes;for(var e in t)if(Object.prototype.hasOwnProperty.call(t,e)&&t[e].x&&t[e].y){var i=t[e].options.fixed;this.freezeCache[e]={x:i.x,y:i.y},i.x=!0,i.y=!0}}},{key:"_restoreFrozenNodes",value:function(){var t=this.body.nodes;for(var e in t)Object.prototype.hasOwnProperty.call(t,e)&&void 0!==this.freezeCache[e]&&(t[e].options.fixed.x=this.freezeCache[e].x,t[e].options.fixed.y=this.freezeCache[e].y);this.freezeCache={}}},{key:"stabilize",value:function(){var t=this,e=arguments.length>0&&void 0!==arguments[0]?arguments[0]:this.options.stabilization.iterations;"number"!=typeof e&&(e=this.options.stabilization.iterations,console.error("The stabilize method needs a numeric amount of iterations. Switching to default: ",e)),0!==this.physicsBody.physicsNodeIndices.length?(this.adaptiveTimestep=this.options.adaptiveTimestep,this.body.emitter.emit("_resizeNodes"),this.stopSimulation(),this.stabilized=!1,this.body.emitter.emit("_blockRedraw"),this.targetIterations=e,!0===this.options.stabilization.onlyDynamicEdges&&this._freezeNodes(),this.stabilizationIterations=0,jg((function(){return t._stabilizationBatch()}),0)):this.ready=!0}},{key:"_startStabilizing",value:function(){return!0!==this.startedStabilization&&(this.body.emitter.emit("startStabilizing"),this.startedStabilization=!0,!0)}},{key:"_stabilizationBatch",value:function(){var t=this,e=function(){return!1===t.stabilized&&t.stabilizationIterations1&&void 0!==arguments[1]?arguments[1]:[],n=1e9,o=-1e9,r=1e9,s=-1e9;if(i.length>0)for(var a=0;a(e=t[i[a]]).shape.boundingBox.left&&(r=e.shape.boundingBox.left),se.shape.boundingBox.top&&(n=e.shape.boundingBox.top),o1&&void 0!==arguments[1]?arguments[1]:[],n=1e9,o=-1e9,r=1e9,s=-1e9;if(i.length>0)for(var a=0;a(e=t[i[a]]).x&&(r=e.x),se.y&&(n=e.y),o=t&&i.push(o.id)}for(var r=0;r0&&void 0!==arguments[0]?arguments[0]:{},i=!(arguments.length>1&&void 0!==arguments[1])||arguments[1];if(void 0===e.joinCondition)throw new Error("Cannot call clusterByNodeData without a joinCondition function in the options.");e=this._checkOptions(e);var n={},o={};kb(this.body.nodes,(function(i,r){i.options&&!0===e.joinCondition(i.options)&&(n[r]=i,kb(i.edges,(function(e){void 0===t.clusteredEdges[e.id]&&(o[e.id]=e)})))})),this._cluster(n,o,e,i)}},{key:"clusterByEdgeCount",value:function(t,e){var i=this,n=!(arguments.length>2&&void 0!==arguments[2])||arguments[2];e=this._checkOptions(e);for(var o,r,s,a=[],h={},l=function(){var n={},l={},c=i.body.nodeIndices[d],u=i.body.nodes[c];if(void 0===h[c]){s=0,r=[];for(var f=0;f0&&Hf(l).length>0&&!0===v){var m=function(){for(var t=0;t1&&void 0!==arguments[1])||arguments[1];this.clusterByEdgeCount(1,t,e)}},{key:"clusterBridges",value:function(t){var e=!(arguments.length>1&&void 0!==arguments[1])||arguments[1];this.clusterByEdgeCount(2,t,e)}},{key:"clusterByConnection",value:function(t,e){var i,n=!(arguments.length>2&&void 0!==arguments[2])||arguments[2];if(void 0===t)throw new Error("No nodeId supplied to clusterByConnection!");if(void 0===this.body.nodes[t])throw new Error("The nodeId given to clusterByConnection does not exist!");var o=this.body.nodes[t];void 0===(e=this._checkOptions(e,o)).clusterNodeProperties.x&&(e.clusterNodeProperties.x=o.x),void 0===e.clusterNodeProperties.y&&(e.clusterNodeProperties.y=o.y),void 0===e.clusterNodeProperties.fixed&&(e.clusterNodeProperties.fixed={},e.clusterNodeProperties.fixed.x=o.options.fixed.x,e.clusterNodeProperties.fixed.y=o.options.fixed.y);var r={},s={},a=o.id,h=xI.cloneOptions(o);r[a]=o;for(var l=0;l-1&&(s[y.id]=y)}this._cluster(r,s,e,n)}},{key:"_createClusterEdges",value:function(t,e,i,n){for(var o,r,s,a,h,l,d=Hf(t),c=[],u=0;u0&&void 0!==arguments[0]?arguments[0]:{};return void 0===t.clusterEdgeProperties&&(t.clusterEdgeProperties={}),void 0===t.clusterNodeProperties&&(t.clusterNodeProperties={}),t}},{key:"_cluster",value:function(t,e,i){var n=!(arguments.length>3&&void 0!==arguments[3])||arguments[3],o=[];for(var r in t)Object.prototype.hasOwnProperty.call(t,r)&&void 0!==this.clusteredNodes[r]&&o.push(r);for(var s=0;so?e.x:o,r=e.ys?e.y:s;return{x:.5*(n+o),y:.5*(r+s)}}},{key:"openCluster",value:function(t,e){var i=!(arguments.length>2&&void 0!==arguments[2])||arguments[2];if(void 0===t)throw new Error("No clusterNodeId supplied to openCluster.");var n=this.body.nodes[t];if(void 0===n)throw new Error("The clusterNodeId supplied to openCluster does not exist.");if(!0!==n.isCluster||void 0===n.containedNodes||void 0===n.containedEdges)throw new Error("The node:"+t+" is not a valid cluster.");var o=this.findNode(t),r=lg(o).call(o,t)-1;if(r>=0){var s=o[r];return this.body.nodes[s]._openChildCluster(t),delete this.body.nodes[t],void(!0===i&&this.body.emitter.emit("_dataChanged"))}var a=n.containedNodes,h=n.containedEdges;if(void 0!==e&&void 0!==e.releaseFunction&&"function"==typeof e.releaseFunction){var l={},d={x:n.x,y:n.y};for(var c in a)if(Object.prototype.hasOwnProperty.call(a,c)){var u=this.body.nodes[c];l[c]={x:u.x,y:u.y}}var f=e.releaseFunction(d,l);for(var p in a)if(Object.prototype.hasOwnProperty.call(a,p)){var v=this.body.nodes[p];void 0!==f[p]&&(v.x=void 0===f[p].x?n.x:f[p].x,v.y=void 0===f[p].y?n.y:f[p].y)}}else kb(a,(function(t){!1===t.options.fixed.x&&(t.x=n.x),!1===t.options.fixed.y&&(t.y=n.y)}));for(var g in a)if(Object.prototype.hasOwnProperty.call(a,g)){var y=this.body.nodes[g];y.vx=n.vx,y.vy=n.vy,y.setOptions({physics:!0}),delete this.clusteredNodes[g]}for(var m=[],b=0;b0&&o<100;){var r=e.pop();if(void 0!==r){var s=this.body.edges[r];if(void 0!==s){o++;var a=s.clusteringEdgeReplacingIds;if(void 0===a)n.push(r);else for(var h=0;hn&&(n=r.edges.length),t+=r.edges.length,e+=Math.pow(r.edges.length,2),i+=1}t/=i;var s=(e/=i)-Math.pow(t,2),a=Math.sqrt(s),h=Math.floor(t+2*a);return h>n&&(h=n),h}},{key:"_createClusteredEdge",value:function(t,e,i,n,o){var r=xI.cloneOptions(i,"edge");gb(r,n),r.from=t,r.to=e,r.id="clusterEdge:"+zM(),void 0!==o&&gb(r,o);var s=this.body.functions.createEdge(r);return s.clusteringEdgeReplacingIds=[i.id],s.connect(),this.body.edges[s.id]=s,s}},{key:"_clusterEdges",value:function(t,e,i,n){if(e instanceof dI){var o=e,r={};r[o.id]=o,e=r}if(t instanceof fD){var s=t,a={};a[s.id]=s,t=a}if(null==i)throw new Error("_clusterEdges: parameter clusterNode required");for(var h in void 0===n&&(n=i.clusterEdgeProperties),this._createClusterEdges(t,e,i,n),e)if(Object.prototype.hasOwnProperty.call(e,h)&&void 0!==this.body.edges[h]){var l=this.body.edges[h];this._backupEdgeOptions(l),l.setOptions({physics:!1})}for(var d in t)Object.prototype.hasOwnProperty.call(t,d)&&(this.clusteredNodes[d]={clusterId:i.id,node:this.body.nodes[d]},this.body.nodes[d].setOptions({physics:!1}))}},{key:"_getClusterNodeForNode",value:function(t){if(void 0!==t){var e=this.clusteredNodes[t];if(void 0!==e){var i=e.clusterId;if(void 0!==i)return this.body.nodes[i]}}}},{key:"_filter",value:function(t,e){var i=[];return kb(t,(function(t){e(t)&&i.push(t)})),i}},{key:"_updateState",value:function(){var t,e=this,i=[],n={},o=function(t){kb(e.body.nodes,(function(e){!0===e.isCluster&&t(e)}))};for(t in this.clusteredNodes){if(Object.prototype.hasOwnProperty.call(this.clusteredNodes,t))void 0===this.body.nodes[t]&&i.push(t)}o((function(t){for(var e=0;e0}t.endPointsValid()&&o||(n[i]=i)})),o((function(t){kb(n,(function(i){delete t.containedEdges[i],kb(t.edges,(function(o,r){o.id!==i?o.clusteringEdgeReplacingIds=e._filter(o.clusteringEdgeReplacingIds,(function(t){return!n[t]})):t.edges[r]=null})),t.edges=e._filter(t.edges,(function(t){return null!==t}))}))})),kb(n,(function(t){delete e.clusteredEdges[t]})),kb(n,(function(t){delete e.body.edges[t]})),kb(Hf(this.body.edges),(function(t){var i=e.body.edges[t],n=e._isClusteredNode(i.fromId)||e._isClusteredNode(i.toId);if(n!==e._isClusteredEdge(i.id))if(n){var o=e._getClusterNodeForNode(i.fromId);void 0!==o&&e._clusterEdges(e.body.nodes[i.fromId],i,o);var r=e._getClusterNodeForNode(i.toId);void 0!==r&&e._clusterEdges(e.body.nodes[i.toId],i,r)}else delete e._clusterEdges[t],e._restoreEdge(i)}));for(var s=!1,a=!0,h=function(){var t=[];o((function(e){var i=Hf(e.containedNodes).length,n=!0===e.options.allowSingleNodeCluster;(n&&i<1||!n&&i<2)&&t.push(e.id)}));for(var i=0;i0,s=s||a};a;)h();s&&this._updateState()}},{key:"_isClusteredNode",value:function(t){return void 0!==this.clusteredNodes[t]}},{key:"_isClusteredEdge",value:function(t){return void 0!==this.clusteredEdges[t]}}]),t}();var SI=function(){function t(e,i){var n;ph(this,t),void 0!==window&&(n=window.requestAnimationFrame||window.mozRequestAnimationFrame||window.webkitRequestAnimationFrame||window.msRequestAnimationFrame),window.requestAnimationFrame=void 0===n?function(t){t()}:n,this.body=e,this.canvas=i,this.redrawRequested=!1,this.renderTimer=void 0,this.requiresTimeout=!0,this.renderingActive=!1,this.renderRequests=0,this.allowRedraw=!0,this.dragging=!1,this.zooming=!1,this.options={},this.defaultOptions={hideEdgesOnDrag:!1,hideEdgesOnZoom:!1,hideNodesOnDrag:!1},bn(this.options,this.defaultOptions),this._determineBrowserMethod(),this.bindEventListeners()}return xu(t,[{key:"bindEventListeners",value:function(){var t,e=this;this.body.emitter.on("dragStart",(function(){e.dragging=!0})),this.body.emitter.on("dragEnd",(function(){e.dragging=!1})),this.body.emitter.on("zoom",(function(){e.zooming=!0,window.clearTimeout(e.zoomTimeoutId),e.zoomTimeoutId=jg((function(){var t;e.zooming=!1,Hn(t=e._requestRedraw).call(t,e)()}),250)})),this.body.emitter.on("_resizeNodes",(function(){e._resizeNodes()})),this.body.emitter.on("_redraw",(function(){!1===e.renderingActive&&e._redraw()})),this.body.emitter.on("_blockRedraw",(function(){e.allowRedraw=!1})),this.body.emitter.on("_allowRedraw",(function(){e.allowRedraw=!0,e.redrawRequested=!1})),this.body.emitter.on("_requestRedraw",Hn(t=this._requestRedraw).call(t,this)),this.body.emitter.on("_startRendering",(function(){e.renderRequests+=1,e.renderingActive=!0,e._startRendering()})),this.body.emitter.on("_stopRendering",(function(){e.renderRequests-=1,e.renderingActive=e.renderRequests>0,e.renderTimer=void 0})),this.body.emitter.on("destroy",(function(){e.renderRequests=0,e.allowRedraw=!1,e.renderingActive=!1,!0===e.requiresTimeout?clearTimeout(e.renderTimer):window.cancelAnimationFrame(e.renderTimer),e.body.emitter.off()}))}},{key:"setOptions",value:function(t){if(void 0!==t){pb(["hideEdgesOnDrag","hideEdgesOnZoom","hideNodesOnDrag"],this.options,t)}}},{key:"_requestNextFrame",value:function(t,e){if("undefined"!=typeof window){var i,n=window;return!0===this.requiresTimeout?i=jg(t,e):n.requestAnimationFrame&&(i=n.requestAnimationFrame(t)),i}}},{key:"_startRendering",value:function(){var t;!0===this.renderingActive&&(void 0===this.renderTimer&&(this.renderTimer=this._requestNextFrame(Hn(t=this._renderStep).call(t,this),this.simulationInterval)))}},{key:"_renderStep",value:function(){!0===this.renderingActive&&(this.renderTimer=void 0,!0===this.requiresTimeout&&this._startRendering(),this._redraw(),!1===this.requiresTimeout&&this._startRendering())}},{key:"redraw",value:function(){this.body.emitter.emit("setSize"),this._redraw()}},{key:"_requestRedraw",value:function(){var t=this;!0!==this.redrawRequested&&!1===this.renderingActive&&!0===this.allowRedraw&&(this.redrawRequested=!0,this._requestNextFrame((function(){t._redraw(!1)}),0))}},{key:"_redraw",value:function(){var t=arguments.length>0&&void 0!==arguments[0]&&arguments[0];if(!0===this.allowRedraw){this.body.emitter.emit("initRedraw"),this.redrawRequested=!1;var e={drawExternalLabels:null};0!==this.canvas.frame.canvas.width&&0!==this.canvas.frame.canvas.height||this.canvas.setSize(),this.canvas.setTransform();var i=this.canvas.getContext(),n=this.canvas.frame.canvas.clientWidth,o=this.canvas.frame.canvas.clientHeight;if(i.clearRect(0,0,n,o),0===this.canvas.frame.clientWidth)return;if(i.save(),i.translate(this.body.view.translation.x,this.body.view.translation.y),i.scale(this.body.view.scale,this.body.view.scale),i.beginPath(),this.body.emitter.emit("beforeDrawing",i),i.closePath(),!1===t&&(!1===this.dragging||!0===this.dragging&&!1===this.options.hideEdgesOnDrag)&&(!1===this.zooming||!0===this.zooming&&!1===this.options.hideEdgesOnZoom)&&this._drawEdges(i),!1===this.dragging||!0===this.dragging&&!1===this.options.hideNodesOnDrag){var r=this._drawNodes(i,t).drawExternalLabels;e.drawExternalLabels=r}!1===t&&(!1===this.dragging||!0===this.dragging&&!1===this.options.hideEdgesOnDrag)&&(!1===this.zooming||!0===this.zooming&&!1===this.options.hideEdgesOnZoom)&&this._drawArrows(i),null!=e.drawExternalLabels&&e.drawExternalLabels(),!1===t&&this._drawSelectionBox(i),i.beginPath(),this.body.emitter.emit("afterDrawing",i),i.closePath(),i.restore(),!0===t&&i.clearRect(0,0,n,o)}}},{key:"_resizeNodes",value:function(){this.canvas.setTransform();var t=this.canvas.getContext();t.save(),t.translate(this.body.view.translation.x,this.body.view.translation.y),t.scale(this.body.view.scale,this.body.view.scale);var e,i=this.body.nodes;for(var n in i)Object.prototype.hasOwnProperty.call(i,n)&&((e=i[n]).resize(t),e.updateBoundingBox(t,e.selected));t.restore()}},{key:"_drawNodes",value:function(t){for(var e,i,n=arguments.length>1&&void 0!==arguments[1]&&arguments[1],o=this.body.nodes,r=this.body.nodeIndices,s=[],a=[],h=this.canvas.DOMtoCanvas({x:-20,y:-20}),l=this.canvas.DOMtoCanvas({x:this.canvas.frame.canvas.clientWidth+20,y:this.canvas.frame.canvas.clientHeight+20}),d={top:h.y,left:h.x,bottom:l.y,right:l.x},c=[],u=0;u0&&void 0!==arguments[0]?arguments[0]:this.pixelRatio;!0===this.initialized&&(this.cameraState.previousWidth=this.frame.canvas.width/t,this.cameraState.previousHeight=this.frame.canvas.height/t,this.cameraState.scale=this.body.view.scale,this.cameraState.position=this.DOMtoCanvas({x:.5*this.frame.canvas.width/t,y:.5*this.frame.canvas.height/t}))}},{key:"_setCameraState",value:function(){if(void 0!==this.cameraState.scale&&0!==this.frame.canvas.clientWidth&&0!==this.frame.canvas.clientHeight&&0!==this.pixelRatio&&this.cameraState.previousWidth>0&&this.cameraState.previousHeight>0){var t=this.frame.canvas.width/this.pixelRatio/this.cameraState.previousWidth,e=this.frame.canvas.height/this.pixelRatio/this.cameraState.previousHeight,i=this.cameraState.scale;1!=t&&1!=e?i=.5*this.cameraState.scale*(t+e):1!=t?i=this.cameraState.scale*t:1!=e&&(i=this.cameraState.scale*e),this.body.view.scale=i;var n=this.DOMtoCanvas({x:.5*this.frame.canvas.clientWidth,y:.5*this.frame.canvas.clientHeight}),o={x:n.x-this.cameraState.position.x,y:n.y-this.cameraState.position.y};this.body.view.translation.x+=o.x*this.body.view.scale,this.body.view.translation.y+=o.y*this.body.view.scale}}},{key:"_prepareValue",value:function(t){if("number"==typeof t)return t+"px";if("string"==typeof t){if(-1!==lg(t).call(t,"%")||-1!==lg(t).call(t,"px"))return t;if(-1===lg(t).call(t,"%"))return t+"px"}throw new Error("Could not use the value supplied for width or height:"+t)}},{key:"_create",value:function(){for(;this.body.container.hasChildNodes();)this.body.container.removeChild(this.body.container.firstChild);if(this.frame=document.createElement("div"),this.frame.className="vis-network",this.frame.style.position="relative",this.frame.style.overflow="hidden",this.frame.tabIndex=0,this.frame.canvas=document.createElement("canvas"),this.frame.canvas.style.position="relative",this.frame.appendChild(this.frame.canvas),this.frame.canvas.getContext)this._setPixelRatio(),this.setTransform();else{var t=document.createElement("DIV");t.style.color="red",t.style.fontWeight="bold",t.style.padding="10px",t.innerText="Error: your browser does not support HTML canvas",this.frame.canvas.appendChild(t)}this.body.container.appendChild(this.frame),this.body.view.scale=1,this.body.view.translation={x:.5*this.frame.canvas.clientWidth,y:.5*this.frame.canvas.clientHeight},this._bindHammer()}},{key:"_bindHammer",value:function(){var t=this;void 0!==this.hammer&&this.hammer.destroy(),this.drag={},this.pinch={},this.hammer=new Qb(this.frame.canvas),this.hammer.get("pinch").set({enable:!0}),this.hammer.get("pan").set({threshold:5,direction:Qb.DIRECTION_ALL}),MI(this.hammer,(function(e){t.body.eventListeners.onTouch(e)})),this.hammer.on("tap",(function(e){t.body.eventListeners.onTap(e)})),this.hammer.on("doubletap",(function(e){t.body.eventListeners.onDoubleTap(e)})),this.hammer.on("press",(function(e){t.body.eventListeners.onHold(e)})),this.hammer.on("panstart",(function(e){t.body.eventListeners.onDragStart(e)})),this.hammer.on("panmove",(function(e){t.body.eventListeners.onDrag(e)})),this.hammer.on("panend",(function(e){t.body.eventListeners.onDragEnd(e)})),this.hammer.on("pinch",(function(e){t.body.eventListeners.onPinch(e)})),this.frame.canvas.addEventListener("wheel",(function(e){t.body.eventListeners.onMouseWheel(e)})),this.frame.canvas.addEventListener("mousemove",(function(e){t.body.eventListeners.onMouseMove(e)})),this.frame.canvas.addEventListener("contextmenu",(function(e){t.body.eventListeners.onContext(e)})),this.hammerFrame=new Qb(this.frame),PI(this.hammerFrame,(function(e){t.body.eventListeners.onRelease(e)}))}},{key:"setSize",value:function(){var t=arguments.length>0&&void 0!==arguments[0]?arguments[0]:this.options.width,e=arguments.length>1&&void 0!==arguments[1]?arguments[1]:this.options.height;t=this._prepareValue(t),e=this._prepareValue(e);var i=!1,n=this.frame.canvas.width,o=this.frame.canvas.height,r=this.pixelRatio;if(this._setPixelRatio(),t!=this.options.width||e!=this.options.height||this.frame.style.width!=t||this.frame.style.height!=e)this._getCameraState(r),this.frame.style.width=t,this.frame.style.height=e,this.frame.canvas.style.width="100%",this.frame.canvas.style.height="100%",this.frame.canvas.width=Math.round(this.frame.canvas.clientWidth*this.pixelRatio),this.frame.canvas.height=Math.round(this.frame.canvas.clientHeight*this.pixelRatio),this.options.width=t,this.options.height=e,this.canvasViewCenter={x:.5*this.frame.clientWidth,y:.5*this.frame.clientHeight},i=!0;else{var s=Math.round(this.frame.canvas.clientWidth*this.pixelRatio),a=Math.round(this.frame.canvas.clientHeight*this.pixelRatio);this.frame.canvas.width===s&&this.frame.canvas.height===a||this._getCameraState(r),this.frame.canvas.width!==s&&(this.frame.canvas.width=s,i=!0),this.frame.canvas.height!==a&&(this.frame.canvas.height=a,i=!0)}return!0===i&&(this.body.emitter.emit("resize",{width:Math.round(this.frame.canvas.width/this.pixelRatio),height:Math.round(this.frame.canvas.height/this.pixelRatio),oldWidth:Math.round(n/this.pixelRatio),oldHeight:Math.round(o/this.pixelRatio)}),this._setCameraState()),this.initialized=!0,i}},{key:"getContext",value:function(){return this.frame.canvas.getContext("2d")}},{key:"_determinePixelRatio",value:function(){var t=this.getContext();if(void 0===t)throw new Error("Could not get canvax context");var e=1;return"undefined"!=typeof window&&(e=window.devicePixelRatio||1),e/(t.webkitBackingStorePixelRatio||t.mozBackingStorePixelRatio||t.msBackingStorePixelRatio||t.oBackingStorePixelRatio||t.backingStorePixelRatio||1)}},{key:"_setPixelRatio",value:function(){this.pixelRatio=this._determinePixelRatio()}},{key:"setTransform",value:function(){var t=this.getContext();if(void 0===t)throw new Error("Could not get canvax context");t.setTransform(this.pixelRatio,0,0,this.pixelRatio,0,0)}},{key:"_XconvertDOMtoCanvas",value:function(t){return(t-this.body.view.translation.x)/this.body.view.scale}},{key:"_XconvertCanvasToDOM",value:function(t){return t*this.body.view.scale+this.body.view.translation.x}},{key:"_YconvertDOMtoCanvas",value:function(t){return(t-this.body.view.translation.y)/this.body.view.scale}},{key:"_YconvertCanvasToDOM",value:function(t){return t*this.body.view.scale+this.body.view.translation.y}},{key:"canvasToDOM",value:function(t){return{x:this._XconvertCanvasToDOM(t.x),y:this._YconvertCanvasToDOM(t.y)}}},{key:"DOMtoCanvas",value:function(t){return{x:this._XconvertDOMtoCanvas(t.x),y:this._YconvertDOMtoCanvas(t.y)}}}]),t}();var II=function(){function t(e,i){var n,o,r=this;ph(this,t),this.body=e,this.canvas=i,this.animationSpeed=1/this.renderRefreshRate,this.animationEasingFunction="easeInOutQuint",this.easingTime=0,this.sourceScale=0,this.targetScale=0,this.sourceTranslation=0,this.targetTranslation=0,this.lockedOnNodeId=void 0,this.lockedOnNodeOffset=void 0,this.touchTime=0,this.viewFunction=void 0,this.body.emitter.on("fit",Hn(n=this.fit).call(n,this)),this.body.emitter.on("animationFinished",(function(){r.body.emitter.emit("_stopRendering")})),this.body.emitter.on("unlockNode",Hn(o=this.releaseNode).call(o,this))}return xu(t,[{key:"setOptions",value:function(){var t=arguments.length>0&&void 0!==arguments[0]?arguments[0]:{};this.options=t}},{key:"fit",value:function(t){var e=arguments.length>1&&void 0!==arguments[1]&&arguments[1];t=function(t,e){var i=bn({nodes:e,minZoomLevel:Number.MIN_VALUE,maxZoomLevel:1},null!=t?t:{});if(!Df(i.nodes))throw new TypeError("Nodes has to be an array of ids.");if(0===i.nodes.length&&(i.nodes=e),!("number"==typeof i.minZoomLevel&&i.minZoomLevel>0))throw new TypeError("Min zoom level has to be a number higher than zero.");if(!("number"==typeof i.maxZoomLevel&&i.minZoomLevel<=i.maxZoomLevel))throw new TypeError("Max zoom level has to be a number higher than min zoom level.");return i}(t,this.body.nodeIndices);var i,n,o=this.canvas.frame.canvas.clientWidth,r=this.canvas.frame.canvas.clientHeight;if(0===o||0===r)n=1,i=xI.getRange(this.body.nodes,t.nodes);else if(!0===e){var s=0;for(var a in this.body.nodes){if(Object.prototype.hasOwnProperty.call(this.body.nodes,a))!0===this.body.nodes[a].predefinedPosition&&(s+=1)}if(s>.5*this.body.nodeIndices.length)return void this.fit(t,!1);i=xI.getRange(this.body.nodes,t.nodes),n=12.662/(this.body.nodeIndices.length+7.4147)+.0964822,n*=Math.min(o/600,r/600)}else{this.body.emitter.emit("_resizeNodes"),i=xI.getRange(this.body.nodes,t.nodes);var h=o/(1.1*Math.abs(i.maxX-i.minX)),l=r/(1.1*Math.abs(i.maxY-i.minY));n=h<=l?h:l}n>t.maxZoomLevel?n=t.maxZoomLevel:n1&&void 0!==arguments[1]?arguments[1]:{};if(void 0!==this.body.nodes[t]){var i={x:this.body.nodes[t].x,y:this.body.nodes[t].y};e.position=i,e.lockedOnNode=t,this.moveTo(e)}else console.error("Node: "+t+" cannot be found.")}},{key:"moveTo",value:function(t){if(void 0!==t){if(null!=t.offset){if(null!=t.offset.x){if(t.offset.x=+t.offset.x,!g_(t.offset.x))throw new TypeError('The option "offset.x" has to be a finite number.')}else t.offset.x=0;if(null!=t.offset.y){if(t.offset.y=+t.offset.y,!g_(t.offset.y))throw new TypeError('The option "offset.y" has to be a finite number.')}else t.offset.x=0}else t.offset={x:0,y:0};if(null!=t.position){if(null!=t.position.x){if(t.position.x=+t.position.x,!g_(t.position.x))throw new TypeError('The option "position.x" has to be a finite number.')}else t.position.x=0;if(null!=t.position.y){if(t.position.y=+t.position.y,!g_(t.position.y))throw new TypeError('The option "position.y" has to be a finite number.')}else t.position.x=0}else t.position=this.getViewPosition();if(null!=t.scale){if(t.scale=+t.scale,!(t.scale>0))throw new TypeError('The option "scale" has to be a number greater than zero.')}else t.scale=this.body.view.scale;void 0===t.animation&&(t.animation={duration:0}),!1===t.animation&&(t.animation={duration:0}),!0===t.animation&&(t.animation={}),void 0===t.animation.duration&&(t.animation.duration=1e3),void 0===t.animation.easingFunction&&(t.animation.easingFunction="easeInOutQuad"),this.animateView(t)}else t={}}},{key:"animateView",value:function(t){if(void 0!==t){this.animationEasingFunction=t.animation.easingFunction,this.releaseNode(),!0===t.locked&&(this.lockedOnNodeId=t.lockedOnNode,this.lockedOnNodeOffset=t.offset),0!=this.easingTime&&this._transitionRedraw(!0),this.sourceScale=this.body.view.scale,this.sourceTranslation=this.body.view.translation,this.targetScale=t.scale,this.body.view.scale=this.targetScale;var e,i,n=this.canvas.DOMtoCanvas({x:.5*this.canvas.frame.canvas.clientWidth,y:.5*this.canvas.frame.canvas.clientHeight}),o=n.x-t.position.x,r=n.y-t.position.y;if(this.targetTranslation={x:this.sourceTranslation.x+o*this.targetScale+t.offset.x,y:this.sourceTranslation.y+r*this.targetScale+t.offset.y},0===t.animation.duration)if(null!=this.lockedOnNodeId)this.viewFunction=Hn(e=this._lockedRedraw).call(e,this),this.body.emitter.on("initRedraw",this.viewFunction);else this.body.view.scale=this.targetScale,this.body.view.translation=this.targetTranslation,this.body.emitter.emit("_requestRedraw");else this.animationSpeed=1/(60*t.animation.duration*.001)||1/60,this.animationEasingFunction=t.animation.easingFunction,this.viewFunction=Hn(i=this._transitionRedraw).call(i,this),this.body.emitter.on("initRedraw",this.viewFunction),this.body.emitter.emit("_startRendering")}}},{key:"_lockedRedraw",value:function(){var t=this.body.nodes[this.lockedOnNodeId].x,e=this.body.nodes[this.lockedOnNodeId].y,i=this.canvas.DOMtoCanvas({x:.5*this.canvas.frame.canvas.clientWidth,y:.5*this.canvas.frame.canvas.clientHeight}),n=i.x-t,o=i.y-e,r=this.body.view.translation,s={x:r.x+n*this.body.view.scale+this.lockedOnNodeOffset.x,y:r.y+o*this.body.view.scale+this.lockedOnNodeOffset.y};this.body.view.translation=s}},{key:"releaseNode",value:function(){void 0!==this.lockedOnNodeId&&void 0!==this.viewFunction&&(this.body.emitter.off("initRedraw",this.viewFunction),this.lockedOnNodeId=void 0,this.lockedOnNodeOffset=void 0)}},{key:"_transitionRedraw",value:function(){var t=arguments.length>0&&void 0!==arguments[0]&&arguments[0];this.easingTime+=this.animationSpeed,this.easingTime=!0===t?1:this.easingTime;var e=jb[this.animationEasingFunction](this.easingTime);if(this.body.view.scale=this.sourceScale+(this.targetScale-this.sourceScale)*e,this.body.view.translation={x:this.sourceTranslation.x+(this.targetTranslation.x-this.sourceTranslation.x)*e,y:this.sourceTranslation.y+(this.targetTranslation.y-this.sourceTranslation.y)*e},this.easingTime>=1){var i;if(this.body.emitter.off("initRedraw",this.viewFunction),this.easingTime=0,null!=this.lockedOnNodeId)this.viewFunction=Hn(i=this._lockedRedraw).call(i,this),this.body.emitter.on("initRedraw",this.viewFunction);this.body.emitter.emit("animationFinished")}}},{key:"getScale",value:function(){return this.body.view.scale}},{key:"getViewPosition",value:function(){return this.canvas.DOMtoCanvas({x:.5*this.canvas.frame.canvas.clientWidth,y:.5*this.canvas.frame.canvas.clientHeight})}}]),t}();function BI(t){var e,i=t&&t.preventDefault||!1,n=t&&t.container||window,o={},r={keydown:{},keyup:{}},s={};for(e=97;e<=122;e++)s[String.fromCharCode(e)]={code:e-97+65,shift:!1};for(e=65;e<=90;e++)s[String.fromCharCode(e)]={code:e,shift:!0};for(e=0;e<=9;e++)s[""+e]={code:48+e,shift:!1};for(e=1;e<=12;e++)s["F"+e]={code:111+e,shift:!1};for(e=0;e<=9;e++)s["num"+e]={code:96+e,shift:!1};s["num*"]={code:106,shift:!1},s["num+"]={code:107,shift:!1},s["num-"]={code:109,shift:!1},s["num/"]={code:111,shift:!1},s["num."]={code:110,shift:!1},s.left={code:37,shift:!1},s.up={code:38,shift:!1},s.right={code:39,shift:!1},s.down={code:40,shift:!1},s.space={code:32,shift:!1},s.enter={code:13,shift:!1},s.shift={code:16,shift:void 0},s.esc={code:27,shift:!1},s.backspace={code:8,shift:!1},s.tab={code:9,shift:!1},s.ctrl={code:17,shift:!1},s.alt={code:18,shift:!1},s.delete={code:46,shift:!1},s.pageup={code:33,shift:!1},s.pagedown={code:34,shift:!1},s["="]={code:187,shift:!1},s["-"]={code:189,shift:!1},s["]"]={code:221,shift:!1},s["["]={code:219,shift:!1};var a=function(t){l(t,"keydown")},h=function(t){l(t,"keyup")},l=function(t,e){if(void 0!==r[e][t.keyCode]){for(var n=r[e][t.keyCode],o=0;o700&&(this.body.emitter.emit("fit",{duration:700}),this.touchTime=(new Date).valueOf())}},{key:"_stopMovement",value:function(){for(var t in this.boundFunctions)Object.prototype.hasOwnProperty.call(this.boundFunctions,t)&&(this.body.emitter.off("initRedraw",this.boundFunctions[t]),this.body.emitter.emit("_stopRendering"));this.boundFunctions={}}},{key:"_moveUp",value:function(){this.body.view.translation.y+=this.options.keyboard.speed.y}},{key:"_moveDown",value:function(){this.body.view.translation.y-=this.options.keyboard.speed.y}},{key:"_moveLeft",value:function(){this.body.view.translation.x+=this.options.keyboard.speed.x}},{key:"_moveRight",value:function(){this.body.view.translation.x-=this.options.keyboard.speed.x}},{key:"_zoomIn",value:function(){var t=this.body.view.scale,e=this.body.view.scale*(1+this.options.keyboard.speed.zoom),i=this.body.view.translation,n=e/t,o=(1-n)*this.canvas.canvasViewCenter.x+i.x*n,r=(1-n)*this.canvas.canvasViewCenter.y+i.y*n;this.body.view.scale=e,this.body.view.translation={x:o,y:r},this.body.emitter.emit("zoom",{direction:"+",scale:this.body.view.scale,pointer:null})}},{key:"_zoomOut",value:function(){var t=this.body.view.scale,e=this.body.view.scale/(1+this.options.keyboard.speed.zoom),i=this.body.view.translation,n=e/t,o=(1-n)*this.canvas.canvasViewCenter.x+i.x*n,r=(1-n)*this.canvas.canvasViewCenter.y+i.y*n;this.body.view.scale=e,this.body.view.translation={x:o,y:r},this.body.emitter.emit("zoom",{direction:"-",scale:this.body.view.scale,pointer:null})}},{key:"configureKeyboardBindings",value:function(){var t,e,i,n,o,r,s,a,h,l,d,c,u,f,p,v,g,y,m,b,w,k,_,x,E=this;(void 0!==this.keycharm&&this.keycharm.destroy(),!0===this.options.keyboard.enabled)&&(!0===this.options.keyboard.bindToWindow?this.keycharm=BI({container:window,preventDefault:!0}):this.keycharm=BI({container:this.canvas.frame,preventDefault:!0}),this.keycharm.reset(),!0===this.activated&&(Hn(t=this.keycharm).call(t,"up",(function(){E.bindToRedraw("_moveUp")}),"keydown"),Hn(e=this.keycharm).call(e,"down",(function(){E.bindToRedraw("_moveDown")}),"keydown"),Hn(i=this.keycharm).call(i,"left",(function(){E.bindToRedraw("_moveLeft")}),"keydown"),Hn(n=this.keycharm).call(n,"right",(function(){E.bindToRedraw("_moveRight")}),"keydown"),Hn(o=this.keycharm).call(o,"=",(function(){E.bindToRedraw("_zoomIn")}),"keydown"),Hn(r=this.keycharm).call(r,"num+",(function(){E.bindToRedraw("_zoomIn")}),"keydown"),Hn(s=this.keycharm).call(s,"num-",(function(){E.bindToRedraw("_zoomOut")}),"keydown"),Hn(a=this.keycharm).call(a,"-",(function(){E.bindToRedraw("_zoomOut")}),"keydown"),Hn(h=this.keycharm).call(h,"[",(function(){E.bindToRedraw("_zoomOut")}),"keydown"),Hn(l=this.keycharm).call(l,"]",(function(){E.bindToRedraw("_zoomIn")}),"keydown"),Hn(d=this.keycharm).call(d,"pageup",(function(){E.bindToRedraw("_zoomIn")}),"keydown"),Hn(c=this.keycharm).call(c,"pagedown",(function(){E.bindToRedraw("_zoomOut")}),"keydown"),Hn(u=this.keycharm).call(u,"up",(function(){E.unbindFromRedraw("_moveUp")}),"keyup"),Hn(f=this.keycharm).call(f,"down",(function(){E.unbindFromRedraw("_moveDown")}),"keyup"),Hn(p=this.keycharm).call(p,"left",(function(){E.unbindFromRedraw("_moveLeft")}),"keyup"),Hn(v=this.keycharm).call(v,"right",(function(){E.unbindFromRedraw("_moveRight")}),"keyup"),Hn(g=this.keycharm).call(g,"=",(function(){E.unbindFromRedraw("_zoomIn")}),"keyup"),Hn(y=this.keycharm).call(y,"num+",(function(){E.unbindFromRedraw("_zoomIn")}),"keyup"),Hn(m=this.keycharm).call(m,"num-",(function(){E.unbindFromRedraw("_zoomOut")}),"keyup"),Hn(b=this.keycharm).call(b,"-",(function(){E.unbindFromRedraw("_zoomOut")}),"keyup"),Hn(w=this.keycharm).call(w,"[",(function(){E.unbindFromRedraw("_zoomOut")}),"keyup"),Hn(k=this.keycharm).call(k,"]",(function(){E.unbindFromRedraw("_zoomIn")}),"keyup"),Hn(_=this.keycharm).call(_,"pageup",(function(){E.unbindFromRedraw("_zoomIn")}),"keyup"),Hn(x=this.keycharm).call(x,"pagedown",(function(){E.unbindFromRedraw("_zoomOut")}),"keyup")))}}]),t}();function zI(t,e){var i=void 0!==gf&&fh(t)||t["@@iterator"];if(!i){if(Df(t)||(i=function(t,e){var i;if(!t)return;if("string"==typeof t)return AI(t,e);var n=xf(i=Object.prototype.toString.call(t)).call(i,8,-1);"Object"===n&&t.constructor&&(n=t.constructor.name);if("Map"===n||"Set"===n)return Ya(t);if("Arguments"===n||/^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n))return AI(t,e)}(t))||e&&t&&"number"==typeof t.length){i&&(t=i);var n=0,o=function(){};return{s:o,n:function(){return n>=t.length?{done:!0}:{done:!1,value:t[n++]}},e:function(t){throw t},f:o}}throw new TypeError("Invalid attempt to iterate non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.")}var r,s=!0,a=!1;return{s:function(){i=i.call(t)},n:function(){var t=i.next();return s=t.done,t},e:function(t){a=!0,r=t},f:function(){try{s||null==i.return||i.return()}finally{if(a)throw r}}}}function AI(t,e){(null==e||e>t.length)&&(e=t.length);for(var i=0,n=new Array(e);i50&&(this.drag.pointer=this.getPointer(t.center),this.drag.pinched=!1,this.pinch.scale=this.body.view.scale,this.touchTime=(new Date).valueOf())}},{key:"onTap",value:function(t){var e=this.getPointer(t.center),i=this.selectionHandler.options.multiselect&&(t.changedPointers[0].ctrlKey||t.changedPointers[0].metaKey);this.checkSelectionChanges(e,i),this.selectionHandler.commitAndEmit(e,t),this.selectionHandler.generateClickEvent("click",t,e)}},{key:"onDoubleTap",value:function(t){var e=this.getPointer(t.center);this.selectionHandler.generateClickEvent("doubleClick",t,e)}},{key:"onHold",value:function(t){var e=this.getPointer(t.center),i=this.selectionHandler.options.multiselect;this.checkSelectionChanges(e,i),this.selectionHandler.commitAndEmit(e,t),this.selectionHandler.generateClickEvent("click",t,e),this.selectionHandler.generateClickEvent("hold",t,e)}},{key:"onRelease",value:function(t){if((new Date).valueOf()-this.touchTime>10){var e=this.getPointer(t.center);this.selectionHandler.generateClickEvent("release",t,e),this.touchTime=(new Date).valueOf()}}},{key:"onContext",value:function(t){var e=this.getPointer({x:t.clientX,y:t.clientY});this.selectionHandler.generateClickEvent("oncontext",t,e)}},{key:"checkSelectionChanges",value:function(t){!0===(arguments.length>1&&void 0!==arguments[1]&&arguments[1])?this.selectionHandler.selectAdditionalOnPoint(t):this.selectionHandler.selectOnPoint(t)}},{key:"_determineDifference",value:function(t,e){var i=function(t,e){for(var i=[],n=0;n=o.minX&&i.x<=o.maxX&&i.y>=o.minY&&i.y<=o.maxY}));op(r).call(r,(function(t){return e.selectionHandler.selectObject(e.body.nodes[t])}));var s=this.getPointer(t.center);this.selectionHandler.commitAndEmit(s,t),this.selectionHandler.generateClickEvent("dragEnd",t,this.getPointer(t.center),void 0,!0),this.body.emitter.emit("_requestRedraw")}else{var a=this.drag.selection;a&&a.length?(op(a).call(a,(function(t){t.node.options.fixed.x=t.xFixed,t.node.options.fixed.y=t.yFixed})),this.selectionHandler.generateClickEvent("dragEnd",t,this.getPointer(t.center)),this.body.emitter.emit("startSimulation")):(this.selectionHandler.generateClickEvent("dragEnd",t,this.getPointer(t.center),void 0,!0),this.body.emitter.emit("_requestRedraw"))}}},{key:"onPinch",value:function(t){var e=this.getPointer(t.center);this.drag.pinched=!0,void 0===this.pinch.scale&&(this.pinch.scale=1);var i=this.pinch.scale*t.scale;this.zoom(i,e)}},{key:"zoom",value:function(t,e){if(!0===this.options.zoomView){var i=this.body.view.scale;t<1e-5&&(t=1e-5),t>10&&(t=10);var n=void 0;void 0!==this.drag&&!0===this.drag.dragging&&(n=this.canvas.DOMtoCanvas(this.drag.pointer));var o=this.body.view.translation,r=t/i,s=(1-r)*e.x+o.x*r,a=(1-r)*e.y+o.y*r;if(this.body.view.scale=t,this.body.view.translation={x:s,y:a},null!=n){var h=this.canvas.canvasToDOM(n);this.drag.pointer.x=h.x,this.drag.pointer.y=h.y}this.body.emitter.emit("_requestRedraw"),i0&&(this.popupObj=l[d[d.length-1]],r=!0)}if(void 0===this.popupObj&&!1===r){for(var u,f=this.body.edgeIndices,p=this.body.edges,v=[],g=0;g0&&(this.popupObj=p[v[v.length-1]],s="edge")}void 0!==this.popupObj?this.popupObj.id!==o&&(void 0===this.popup&&(this.popup=new Jb(this.canvas.frame)),this.popup.popupTargetType=s,this.popup.popupTargetId=this.popupObj.id,this.popup.setPosition(t.x+3,t.y-5),this.popup.setText(this.popupObj.getTitle()),this.popup.show(),this.body.emitter.emit("showPopup",this.popupObj.id)):void 0!==this.popup&&(this.popup.hide(),this.body.emitter.emit("hidePopup"))}},{key:"_checkHidePopup",value:function(t){var e=this.selectionHandler._pointerToPositionObject(t),i=!1;if("node"===this.popup.popupTargetType){if(void 0!==this.body.nodes[this.popup.popupTargetId]&&!0===(i=this.body.nodes[this.popup.popupTargetId].isOverlappingWith(e))){var n=this.selectionHandler.getNodeAt(t);i=void 0!==n&&n.id===this.popup.popupTargetId}}else void 0===this.selectionHandler.getNodeAt(t)&&void 0!==this.body.edges[this.popup.popupTargetId]&&(i=this.body.edges[this.popup.popupTargetId].isOverlappingWith(e));!1===i&&(this.popupObj=void 0,this.popup.hide(),this.body.emitter.emit("hidePopup"))}}]),t}(),RI=g,LI=Vk,HI=hk.getWeakData,WI=Ok,qI=ii,VI=U,UI=tt,YI=_k,XI=Qt,GI=Lo.set,KI=Lo.getterFor,$I=Fl.find,ZI=Fl.findIndex,QI=RI([].splice),JI=0,tB=function(t){return t.frozen||(t.frozen=new eB)},eB=function(){this.entries=[]},iB=function(t,e){return $I(t.entries,(function(t){return t[0]===e}))};eB.prototype={get:function(t){var e=iB(this,t);if(e)return e[1]},has:function(t){return!!iB(this,t)},set:function(t,e){var i=iB(this,t);i?i[1]=e:this.entries.push([t,e])},delete:function(t){var e=ZI(this.entries,(function(e){return e[0]===t}));return~e&&QI(this.entries,e,1),!!~e}};var nB,oB={getConstructor:function(t,e,i,n){var o=t((function(t,o){WI(t,r),GI(t,{type:e,id:JI++,frozen:void 0}),VI(o)||YI(o,t[n],{that:t,AS_ENTRIES:i})})),r=o.prototype,s=KI(e),a=function(t,e,i){var n=s(t),o=HI(qI(e),!0);return!0===o?tB(n).set(e,i):o[n.id]=i,t};return LI(r,{delete:function(t){var e=s(this);if(!UI(t))return!1;var i=HI(t);return!0===i?tB(e).delete(t):i&&XI(i,e.id)&&delete i[e.id]},has:function(t){var e=s(this);if(!UI(t))return!1;var i=HI(t);return!0===i?tB(e).has(t):i&&XI(i,e.id)}}),LI(r,i?{get:function(t){var e=s(this);if(UI(t)){var i=HI(t);return!0===i?tB(e).get(t):i?i[e.id]:void 0}},set:function(t,e){return a(this,t,e)}}:{add:function(t){return a(this,t,!0)}}),o}},rB=Yw,sB=o,aB=g,hB=Vk,lB=hk,dB=Wk,cB=oB,uB=tt,fB=Lo.enforce,pB=r,vB=xo,gB=Object,yB=Array.isArray,mB=gB.isExtensible,bB=gB.isFrozen,wB=gB.isSealed,kB=gB.freeze,_B=gB.seal,xB={},EB={},OB=!sB.ActiveXObject&&"ActiveXObject"in sB,CB=function(t){return function(){return t(this,arguments.length?arguments[0]:void 0)}},SB=dB("WeakMap",CB,cB),TB=SB.prototype,MB=aB(TB.set);if(vB)if(OB){nB=cB.getConstructor(CB,"WeakMap",!0),lB.enable();var PB=aB(TB.delete),DB=aB(TB.has),IB=aB(TB.get);hB(TB,{delete:function(t){if(uB(t)&&!mB(t)){var e=fB(this);return e.frozen||(e.frozen=new nB),PB(this,t)||e.frozen.delete(t)}return PB(this,t)},has:function(t){if(uB(t)&&!mB(t)){var e=fB(this);return e.frozen||(e.frozen=new nB),DB(this,t)||e.frozen.has(t)}return DB(this,t)},get:function(t){if(uB(t)&&!mB(t)){var e=fB(this);return e.frozen||(e.frozen=new nB),DB(this,t)?IB(this,t):e.frozen.get(t)}return IB(this,t)},set:function(t,e){if(uB(t)&&!mB(t)){var i=fB(this);i.frozen||(i.frozen=new nB),DB(this,t)?MB(this,t,e):i.frozen.set(t,e)}else MB(this,t,e);return this}})}else rB&&pB((function(){var t=kB([]);return MB(new SB,t,1),!bB(t)}))&&hB(TB,{set:function(t,e){var i;return yB(t)&&(bB(t)?i=xB:wB(t)&&(i=EB)),MB(this,t,e),i===xB&&kB(t),i===EB&&_B(t),this}});var BB,NB,FB,zB,AB,jB=i(et.WeakMap);function RB(t,e,i,n){if("a"===i&&!n)throw new TypeError("Private accessor was defined without a getter");if("function"==typeof e?t!==e||!n:!e.has(t))throw new TypeError("Cannot read private member from an object whose class did not declare it");return"m"===i?n:"a"===i?n.call(t):n?n.value:e.get(t)}function LB(t,e,i,n,o){if("m"===n)throw new TypeError("Private method is not writable");if("a"===n&&!o)throw new TypeError("Private accessor was defined without a setter");if("function"==typeof e?t!==e||!o:!e.has(t))throw new TypeError("Cannot write private member to an object whose class did not declare it");return"a"===n?o.call(t,i):o?o.value=i:e.set(t,i),i}function HB(t,e){var i=void 0!==gf&&fh(t)||t["@@iterator"];if(!i){if(Df(t)||(i=function(t,e){var i;if(!t)return;if("string"==typeof t)return WB(t,e);var n=xf(i=Object.prototype.toString.call(t)).call(i,8,-1);"Object"===n&&t.constructor&&(n=t.constructor.name);if("Map"===n||"Set"===n)return Ya(t);if("Arguments"===n||/^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n))return WB(t,e)}(t))||e&&t&&"number"==typeof t.length){i&&(t=i);var n=0,o=function(){};return{s:o,n:function(){return n>=t.length?{done:!0}:{done:!1,value:t[n++]}},e:function(t){throw t},f:o}}throw new TypeError("Invalid attempt to iterate non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.")}var r,s=!0,a=!1;return{s:function(){i=i.call(t)},n:function(){var t=i.next();return s=t.done,t},e:function(t){a=!0,r=t},f:function(){try{s||null==i.return||i.return()}finally{if(a)throw r}}}}function WB(t,e){(null==e||e>t.length)&&(e=t.length);for(var i=0,n=new Array(e);i0&&void 0!==arguments[0]?arguments[0]:function(){};ph(this,t),FB.set(this,new VB),zB.set(this,new VB),AB.set(this,void 0),LB(this,AB,e,"f")}return xu(t,[{key:"sizeNodes",get:function(){return RB(this,FB,"f").size}},{key:"sizeEdges",get:function(){return RB(this,zB,"f").size}},{key:"getNodes",value:function(){return RB(this,FB,"f").getSelection()}},{key:"getEdges",value:function(){return RB(this,zB,"f").getSelection()}},{key:"addNodes",value:function(){var t;(t=RB(this,FB,"f")).add.apply(t,arguments)}},{key:"addEdges",value:function(){var t;(t=RB(this,zB,"f")).add.apply(t,arguments)}},{key:"deleteNodes",value:function(t){RB(this,FB,"f").delete(t)}},{key:"deleteEdges",value:function(t){RB(this,zB,"f").delete(t)}},{key:"clear",value:function(){RB(this,FB,"f").clear(),RB(this,zB,"f").clear()}},{key:"commit",value:function(){for(var t,e,i={nodes:RB(this,FB,"f").commit(),edges:RB(this,zB,"f").commit()},n=arguments.length,o=new Array(n),r=0;r=t.length?{done:!0}:{done:!1,value:t[n++]}},e:function(t){throw t},f:o}}throw new TypeError("Invalid attempt to iterate non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.")}var r,s=!0,a=!1;return{s:function(){i=i.call(t)},n:function(){var t=i.next();return s=t.done,t},e:function(t){a=!0,r=t},f:function(){try{s||null==i.return||i.return()}finally{if(a)throw r}}}}function XB(t,e){(null==e||e>t.length)&&(e=t.length);for(var i=0,n=new Array(e);i4&&void 0!==arguments[4]&&arguments[4],r=this._initBaseEvent(e,i);if(!0===o)r.nodes=[],r.edges=[];else{var s=this.getSelection();r.nodes=s.nodes,r.edges=s.edges}void 0!==n&&(r.previousSelection=n),"click"==t&&(r.items=this.getClickedItems(i)),void 0!==e.controlEdge&&(r.controlEdge=e.controlEdge),this.body.emitter.emit(t,r)}},{key:"selectObject",value:function(t){var e=arguments.length>1&&void 0!==arguments[1]?arguments[1]:this.options.selectConnectedEdges;if(void 0!==t){if(t instanceof fD){var i;if(!0===e)(i=this._selectionAccumulator).addEdges.apply(i,vf(t.edges));this._selectionAccumulator.addNodes(t)}else this._selectionAccumulator.addEdges(t);return!0}return!1}},{key:"deselectObject",value:function(t){!0===t.isSelected()&&(t.selected=!1,this._removeFromSelection(t))}},{key:"_getAllNodesOverlappingWith",value:function(t){for(var e=[],i=this.body.nodes,n=0;n1&&void 0!==arguments[1])||arguments[1],i=this._pointerToPositionObject(t),n=this._getAllNodesOverlappingWith(i);return n.length>0?!0===e?this.body.nodes[n[n.length-1]]:n[n.length-1]:void 0}},{key:"_getEdgesOverlappingWith",value:function(t,e){for(var i=this.body.edges,n=0;n1&&void 0!==arguments[1])||arguments[1],i=this.canvas.DOMtoCanvas(t),n=10,o=null,r=this.body.edges,s=0;s0&&(this.generateClickEvent("deselectEdge",e,t,o),i=!0),n.nodes.deleted.length>0&&(this.generateClickEvent("deselectNode",e,t,o),i=!0),n.nodes.added.length>0&&(this.generateClickEvent("selectNode",e,t),i=!0),n.edges.added.length>0&&(this.generateClickEvent("selectEdge",e,t),i=!0),!0===i&&this.generateClickEvent("select",e,t)}},{key:"getSelection",value:function(){return{nodes:this.getSelectedNodeIds(),edges:this.getSelectedEdgeIds()}}},{key:"getSelectedNodes",value:function(){return this._selectionAccumulator.getNodes()}},{key:"getSelectedEdges",value:function(){return this._selectionAccumulator.getEdges()}},{key:"getSelectedNodeIds",value:function(){var t;return jf(t=this._selectionAccumulator.getNodes()).call(t,(function(t){return t.id}))}},{key:"getSelectedEdgeIds",value:function(){var t;return jf(t=this._selectionAccumulator.getEdges()).call(t,(function(t){return t.id}))}},{key:"setSelection",value:function(t){var e=arguments.length>1&&void 0!==arguments[1]?arguments[1]:{};if(!t||!t.nodes&&!t.edges)throw new TypeError("Selection must be an object with nodes and/or edges properties");if((e.unselectAll||void 0===e.unselectAll)&&this.unselectAll(),t.nodes){var i,n=YB(t.nodes);try{for(n.s();!(i=n.n()).done;){var o=i.value,r=this.body.nodes[o];if(!r)throw new RangeError('Node with id "'+o+'" not found');this.selectObject(r,e.highlightEdges)}}catch(t){n.e(t)}finally{n.f()}}if(t.edges){var s,a=YB(t.edges);try{for(a.s();!(s=a.n()).done;){var h=s.value,l=this.body.edges[h];if(!l)throw new RangeError('Edge with id "'+h+'" not found');this.selectObject(l)}}catch(t){a.e(t)}finally{a.f()}}this.body.emitter.emit("_requestRedraw"),this._selectionAccumulator.commit()}},{key:"selectNodes",value:function(t){var e=!(arguments.length>1&&void 0!==arguments[1])||arguments[1];if(!t||void 0===t.length)throw"Selection must be an array with ids";this.setSelection({nodes:t},{highlightEdges:e})}},{key:"selectEdges",value:function(t){if(!t||void 0===t.length)throw"Selection must be an array with ids";this.setSelection({edges:t})}},{key:"updateSelection",value:function(){for(var t in this._selectionAccumulator.getNodes())Object.prototype.hasOwnProperty.call(this.body.nodes,t.id)||this._selectionAccumulator.deleteNodes(t);for(var e in this._selectionAccumulator.getEdges())Object.prototype.hasOwnProperty.call(this.body.edges,e.id)||this._selectionAccumulator.deleteEdges(e)}},{key:"getClickedItems",value:function(t){for(var e=this.canvas.DOMtoCanvas(t),i=[],n=this.body.nodeIndices,o=this.body.nodes,r=n.length-1;r>=0;r--){var s=o[n[r]].getItemsOnPoint(e);i.push.apply(i,s)}for(var a=this.body.edgeIndices,h=this.body.edges,l=a.length-1;l>=0;l--){var d=h[a[l]].getItemsOnPoint(e);i.push.apply(i,d)}return i}}]),t}();function KB(t){var e=function(){if("undefined"==typeof Reflect||!sM)return!1;if(sM.sham)return!1;if("function"==typeof Proxy)return!0;try{return Boolean.prototype.valueOf.call(sM(Boolean,[],(function(){}))),!0}catch(t){return!1}}();return function(){var i,n=F_(t);if(e){var o=F_(this).constructor;i=sM(n,arguments,o)}else i=n.apply(this,arguments);return I_(this,i)}}var $B=function(){function t(){ph(this,t)}return xu(t,[{key:"abstract",value:function(){throw new Error("Can't instantiate abstract class!")}},{key:"fake_use",value:function(){}},{key:"curveType",value:function(){return this.abstract()}},{key:"getPosition",value:function(t){return this.fake_use(t),this.abstract()}},{key:"setPosition",value:function(t,e){var i=arguments.length>2&&void 0!==arguments[2]?arguments[2]:void 0;this.fake_use(t,e,i),this.abstract()}},{key:"getTreeSize",value:function(t){return this.fake_use(t),this.abstract()}},{key:"sort",value:function(t){this.fake_use(t),this.abstract()}},{key:"fix",value:function(t,e){this.fake_use(t,e),this.abstract()}},{key:"shift",value:function(t,e){this.fake_use(t,e),this.abstract()}}]),t}(),ZB=function(t){D_(i,t);var e=KB(i);function i(t){var n;return ph(this,i),(n=e.call(this)).layout=t,n}return xu(i,[{key:"curveType",value:function(){return"horizontal"}},{key:"getPosition",value:function(t){return t.x}},{key:"setPosition",value:function(t,e){var i=arguments.length>2&&void 0!==arguments[2]?arguments[2]:void 0;void 0!==i&&this.layout.hierarchical.addToOrdering(t,i),t.x=e}},{key:"getTreeSize",value:function(t){var e=this.layout.hierarchical.getTreeSize(this.layout.body.nodes,t);return{min:e.min_x,max:e.max_x}}},{key:"sort",value:function(t){yT(t).call(t,(function(t,e){return t.x-e.x}))}},{key:"fix",value:function(t,e){t.y=this.layout.options.hierarchical.levelSeparation*e,t.options.fixed.y=!0}},{key:"shift",value:function(t,e){this.layout.body.nodes[t].x+=e}}]),i}($B),QB=function(t){D_(i,t);var e=KB(i);function i(t){var n;return ph(this,i),(n=e.call(this)).layout=t,n}return xu(i,[{key:"curveType",value:function(){return"vertical"}},{key:"getPosition",value:function(t){return t.y}},{key:"setPosition",value:function(t,e){var i=arguments.length>2&&void 0!==arguments[2]?arguments[2]:void 0;void 0!==i&&this.layout.hierarchical.addToOrdering(t,i),t.y=e}},{key:"getTreeSize",value:function(t){var e=this.layout.hierarchical.getTreeSize(this.layout.body.nodes,t);return{min:e.min_y,max:e.max_y}}},{key:"sort",value:function(t){yT(t).call(t,(function(t,e){return t.y-e.y}))}},{key:"fix",value:function(t,e){t.x=this.layout.options.hierarchical.levelSeparation*e,t.options.fixed.x=!0}},{key:"shift",value:function(t,e){this.layout.body.nodes[t].y+=e}}]),i}($B),JB=Fl.every;Ti({target:"Array",proto:!0,forced:!Xf("every")},{every:function(t){return JB(this,t,arguments.length>1?arguments[1]:void 0)}});var tN=Nn("Array").every,eN=at,iN=tN,nN=Array.prototype,oN=function(t){var e=t.every;return t===nN||eN(nN,t)&&e===nN.every?iN:e},rN=i(oN);function sN(t,e){var i=void 0!==gf&&fh(t)||t["@@iterator"];if(!i){if(Df(t)||(i=function(t,e){var i;if(!t)return;if("string"==typeof t)return aN(t,e);var n=xf(i=Object.prototype.toString.call(t)).call(i,8,-1);"Object"===n&&t.constructor&&(n=t.constructor.name);if("Map"===n||"Set"===n)return Ya(t);if("Arguments"===n||/^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n))return aN(t,e)}(t))||e&&t&&"number"==typeof t.length){i&&(t=i);var n=0,o=function(){};return{s:o,n:function(){return n>=t.length?{done:!0}:{done:!1,value:t[n++]}},e:function(t){throw t},f:o}}throw new TypeError("Invalid attempt to iterate non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.")}var r,s=!0,a=!1;return{s:function(){i=i.call(t)},n:function(){var t=i.next();return s=t.done,t},e:function(t){a=!0,r=t},f:function(){try{s||null==i.return||i.return()}finally{if(a)throw r}}}}function aN(t,e){(null==e||e>t.length)&&(e=t.length);for(var i=0,n=new Array(e);i=e[n])&&(e[n]=e[i]+1)})),e}function lN(t,e,i,n){var o,r,s=pg(null),a=pS(o=vf(FT(n).call(n))).call(o,(function(t,e){return t+1+e.edges.length}),0),h=i+"Id",l="to"===i?1:-1,d=sN(n);try{var c,u=function(){var o=pf(r.value,2),d=o[0],c=o[1];if(!n.has(d)||!t(c))return 0;s[d]=0;for(var u,f,p=[c],v=0,g=function(){var t,o;if(!n.has(d))return 0;var r=s[u.id]+l;if(op(t=yv(o=u.edges).call(o,(function(t){return t.connected&&t.to!==t.from&&t[i]!==u&&n.has(t.toId)&&n.has(t.fromId)}))).call(t,(function(t){var n=t[h],o=s[n];(null==o||e(r,o))&&(s[n]=r,p.push(t[i]))})),v>a)return{v:{v:hN(n,s)}};++v};u=p.pop();)if(0!==(f=g())&&f)return f.v};for(d.s();!(r=d.n()).done;)if(0!==(c=u())&&c)return c.v}catch(t){d.e(t)}finally{d.f()}return s}var dN=function(){function t(){ph(this,t),this.childrenReference={},this.parentReference={},this.trees={},this.distributionOrdering={},this.levels={},this.distributionIndex={},this.isTree=!1,this.treeIndex=-1}return xu(t,[{key:"addRelation",value:function(t,e){void 0===this.childrenReference[t]&&(this.childrenReference[t]=[]),this.childrenReference[t].push(e),void 0===this.parentReference[e]&&(this.parentReference[e]=[]),this.parentReference[e].push(t)}},{key:"checkIfTree",value:function(){for(var t in this.parentReference)if(this.parentReference[t].length>1)return void(this.isTree=!1);this.isTree=!0}},{key:"numTrees",value:function(){return this.treeIndex+1}},{key:"setTreeIndex",value:function(t,e){void 0!==e&&void 0===this.trees[t.id]&&(this.trees[t.id]=e,this.treeIndex=Math.max(e,this.treeIndex))}},{key:"ensureLevel",value:function(t){void 0===this.levels[t]&&(this.levels[t]=0)}},{key:"getMaxLevel",value:function(t){var e=this,i={};return function t(n){if(void 0!==i[n])return i[n];var o=e.levels[n];if(e.childrenReference[n]){var r=e.childrenReference[n];if(r.length>0)for(var s=0;s0&&(i.levelSeparation*=-1):i.levelSeparation<0&&(i.levelSeparation*=-1),this.setDirectionStrategy(),this.body.emitter.emit("_resetHierarchicalLayout"),this.adaptAllOptionsForHierarchicalLayout(e);if(!0===n)return this.body.emitter.emit("refresh"),gb(e,this.optionsBackup)}return e}},{key:"_resetRNG",value:function(t){this.initialRandomSeed=t,this._rng=Jm(this.initialRandomSeed)}},{key:"adaptAllOptionsForHierarchicalLayout",value:function(t){if(!0===this.options.hierarchical.enabled){var e=this.optionsBackup.physics;void 0===t.physics||!0===t.physics?(t.physics={enabled:void 0===e.enabled||e.enabled,solver:"hierarchicalRepulsion"},e.enabled=void 0===e.enabled||e.enabled,e.solver=e.solver||"barnesHut"):"object"===bu(t.physics)?(e.enabled=void 0===t.physics.enabled||t.physics.enabled,e.solver=t.physics.solver||"barnesHut",t.physics.solver="hierarchicalRepulsion"):!1!==t.physics&&(e.solver="barnesHut",t.physics={solver:"hierarchicalRepulsion"});var i=this.direction.curveType();if(void 0===t.edges)this.optionsBackup.edges={smooth:{enabled:!0,type:"dynamic"}},t.edges={smooth:!1};else if(void 0===t.edges.smooth)this.optionsBackup.edges={smooth:{enabled:!0,type:"dynamic"}},t.edges.smooth=!1;else if("boolean"==typeof t.edges.smooth)this.optionsBackup.edges={smooth:t.edges.smooth},t.edges.smooth={enabled:t.edges.smooth,type:i};else{var n=t.edges.smooth;void 0!==n.type&&"dynamic"!==n.type&&(i=n.type),this.optionsBackup.edges={smooth:{enabled:void 0===n.enabled||n.enabled,type:void 0===n.type?"dynamic":n.type,roundness:void 0===n.roundness?.5:n.roundness,forceDirection:void 0!==n.forceDirection&&n.forceDirection}},t.edges.smooth={enabled:void 0===n.enabled||n.enabled,type:i,roundness:void 0===n.roundness?.5:n.roundness,forceDirection:void 0!==n.forceDirection&&n.forceDirection}}this.body.emitter.emit("_forceDisableDynamicCurves",i)}return t}},{key:"positionInitially",value:function(t){if(!0!==this.options.hierarchical.enabled){this._resetRNG(this.initialRandomSeed);for(var e=t.length+50,i=0;io){for(var s=t.length;t.length>o&&n<=10;){n+=1;var a=t.length;if(n%3==0?this.body.modules.clustering.clusterBridges(r):this.body.modules.clustering.clusterOutliers(r),a==t.length&&n%3!=0)return this._declusterAll(),this.body.emitter.emit("_layoutFailed"),void console.info("This network could not be positioned by this version of the improved layout algorithm. Please disable improvedLayout for better performance.")}this.body.modules.kamadaKawai.setOptions({springLength:Math.max(150,2*s)})}n>10&&console.info("The clustering didn't succeed within the amount of interations allowed, progressing with partial result."),this.body.modules.kamadaKawai.solve(t,this.body.edgeIndices,!0),this._shiftToCenter();for(var h=0;h0){var t,e,i=!1,n=!1;for(e in this.lastNodeOnLevel={},this.hierarchical=new dN,this.body.nodes)Object.prototype.hasOwnProperty.call(this.body.nodes,e)&&(void 0!==(t=this.body.nodes[e]).options.level?(i=!0,this.hierarchical.levels[e]=t.options.level):n=!0);if(!0===n&&!0===i)throw new Error("To use the hierarchical layout, nodes require either no predefined levels or levels have to be defined for all nodes.");if(!0===n){var o=this.options.hierarchical.sortMethod;"hubsize"===o?this._determineLevelsByHubsize():"directed"===o?this._determineLevelsDirected():"custom"===o&&this._determineLevelsCustomCallback()}for(var r in this.body.nodes)Object.prototype.hasOwnProperty.call(this.body.nodes,r)&&this.hierarchical.ensureLevel(r);var s=this._getDistribution();this._generateMap(),this._placeNodesByHierarchy(s),this._condenseHierarchy(),this._shiftToCenter()}}},{key:"_condenseHierarchy",value:function(){var t=this,e=!1,i={},n=function(e,i){var n=t.hierarchical.trees;for(var o in n)Object.prototype.hasOwnProperty.call(n,o)&&n[o]===e&&t.direction.shift(o,i)},o=function(){for(var e=[],i=0;i0)for(var r=0;r1&&void 0!==arguments[1]?arguments[1]:1e9,n=1e9,o=1e9,r=1e9,s=-1e9;for(var a in e)if(Object.prototype.hasOwnProperty.call(e,a)){var h=t.body.nodes[a],l=t.hierarchical.levels[h.id],d=t.direction.getPosition(h),c=pf(t._getSpaceAroundNode(h,e),2),u=c[0],f=c[1];n=Math.min(u,n),o=Math.min(f,o),l<=i&&(r=Math.min(d,r),s=Math.max(d,s))}return[r,s,n,o]},a=function(e,i,n){for(var o=t.hierarchical,r=0;r1)for(var h=0;h2&&void 0!==arguments[2]&&arguments[2],a=t.direction.getPosition(i),h=t.direction.getPosition(n),l=Math.abs(h-a),d=t.options.hierarchical.nodeSpacing;if(l>d){var c={},u={};r(i,c),r(n,u);var f=function(e,i){var n=t.hierarchical.getMaxLevel(e.id),o=t.hierarchical.getMaxLevel(i.id);return Math.min(n,o)}(i,n),p=s(c,f),v=s(u,f),g=p[1],y=v[0],m=v[2];if(Math.abs(g-y)>d){var b=g-y+d;b<-m+d&&(b=-m+d),b<0&&(t._shiftBlock(n.id,b),e=!0,!0===o&&t._centerParent(n))}}},l=function(n,o){for(var a=o.id,h=o.edges,l=t.hierarchical.levels[o.id],d=t.options.hierarchical.levelSeparation*t.options.hierarchical.levelSeparation,c={},u=[],f=0;f0?f=Math.min(u,c-t.options.hierarchical.nodeSpacing):u<0&&(f=-Math.min(-u,d-t.options.hierarchical.nodeSpacing)),0!=f&&(t._shiftBlock(o.id,f),e=!0)}(b),function(i){var n=t.direction.getPosition(o),r=pf(t._getSpaceAroundNode(o),2),s=r[0],a=r[1],h=i-n,l=n;h>0?l=Math.min(n+(a-t.options.hierarchical.nodeSpacing),i):h<0&&(l=Math.max(n-(s-t.options.hierarchical.nodeSpacing),i)),l!==n&&(t.direction.setPosition(o,l),e=!0)}(b=m(n,h))};!0===this.options.hierarchical.blockShifting&&(function(i){var n=t.hierarchical.getLevels();n=vp(n).call(n);for(var o=0;o0&&Math.abs(c)0&&(h=this.direction.getPosition(n[r-1])+a),this.direction.setPosition(s,h,e),this._validatePositionAndContinue(s,e,h),o++}}}}},{key:"_placeBranchNodes",value:function(t,e){var i,n=this.hierarchical.childrenReference[t];if(void 0!==n){for(var o=[],r=0;re&&void 0===this.positionedNodes[a.id]))return;var l=this.options.hierarchical.nodeSpacing,d=void 0;d=0===s?this.direction.getPosition(this.body.nodes[t]):this.direction.getPosition(o[s-1])+l,this.direction.setPosition(a,d,h),this._validatePositionAndContinue(a,h,d)}var c=this._getCenterPosition(o);this.direction.setPosition(this.body.nodes[t],c,e)}}},{key:"_validatePositionAndContinue",value:function(t,e,i){if(this.hierarchical.isTree){if(void 0!==this.lastNodeOnLevel[e]){var n=this.direction.getPosition(this.body.nodes[this.lastNodeOnLevel[e]]);if(i-nt}),"from",t)}(i),this.hierarchical.setMinLevelToZero(this.body.nodes)}},{key:"_generateMap",value:function(){var t=this;this._crawlNetwork((function(e,i){t.hierarchical.levels[i.id]>t.hierarchical.levels[e.id]&&t.hierarchical.addRelation(e.id,i.id)})),this.hierarchical.checkIfTree()}},{key:"_crawlNetwork",value:function(){var t=this,e=arguments.length>0&&void 0!==arguments[0]?arguments[0]:function(){},i=arguments.length>1?arguments[1]:void 0,n={},o=function i(o,r){if(void 0===n[o.id]){var s;t.hierarchical.setTreeIndex(o,r),n[o.id]=!0;for(var a=t._getActiveEdges(o),h=0;h=t.length?{done:!0}:{done:!1,value:t[n++]}},e:function(t){throw t},f:o}}throw new TypeError("Invalid attempt to iterate non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.")}var r,s=!0,a=!1;return{s:function(){i=i.call(t)},n:function(){var t=i.next();return s=t.done,t},e:function(t){a=!0,r=t},f:function(){try{s||null==i.return||i.return()}finally{if(a)throw r}}}}function fN(t,e){(null==e||e>t.length)&&(e=t.length);for(var i=0,n=new Array(e);i0&&!1!==this.options.deleteNode||0===i&&!1!==this.options.deleteEdge)&&(!0===s&&this._createSeperator(4),this._createDeleteButton(r)),this._bindElementEvents(this.closeDiv,Hn(t=this.toggleEditMode).call(t,this)),this._temporaryBindEvent("select",Hn(e=this.showManipulatorToolbar).call(e,this))}this.body.emitter.emit("_redraw")}},{key:"addNodeMode",value:function(){var t;if(!0!==this.editMode&&this.enableEditMode(),this._clean(),this.inMode="addNode",!0===this.guiEnabled){var e,i=this.options.locales[this.options.locale];this.manipulationDOM={},this._createBackButton(i),this._createSeperator(),this._createDescription(i.addDescription||this.options.locales.en.addDescription),this._bindElementEvents(this.closeDiv,Hn(e=this.toggleEditMode).call(e,this))}this._temporaryBindEvent("click",Hn(t=this._performAddNode).call(t,this))}},{key:"editNode",value:function(){var t=this;!0!==this.editMode&&this.enableEditMode(),this._clean();var e=this.selectionHandler.getSelectedNodes()[0];if(void 0!==e){if(this.inMode="editNode","function"!=typeof this.options.editNode)throw new Error("No function has been configured to handle the editing of nodes.");if(!0!==e.isCluster){var i=gb({},e.options,!1);if(i.x=e.x,i.y=e.y,2!==this.options.editNode.length)throw new Error("The function for edit does not support two arguments (data, callback)");this.options.editNode(i,(function(e){null!=e&&"editNode"===t.inMode&&t.body.data.nodes.getDataSet().update(e),t.showManipulatorToolbar()}))}else alert(this.options.locales[this.options.locale].editClusterError||this.options.locales.en.editClusterError)}else this.showManipulatorToolbar()}},{key:"addEdgeMode",value:function(){var t,e,i,n,o;if(!0!==this.editMode&&this.enableEditMode(),this._clean(),this.inMode="addEdge",!0===this.guiEnabled){var r,s=this.options.locales[this.options.locale];this.manipulationDOM={},this._createBackButton(s),this._createSeperator(),this._createDescription(s.edgeDescription||this.options.locales.en.edgeDescription),this._bindElementEvents(this.closeDiv,Hn(r=this.toggleEditMode).call(r,this))}this._temporaryBindUI("onTouch",Hn(t=this._handleConnect).call(t,this)),this._temporaryBindUI("onDragEnd",Hn(e=this._finishConnect).call(e,this)),this._temporaryBindUI("onDrag",Hn(i=this._dragControlNode).call(i,this)),this._temporaryBindUI("onRelease",Hn(n=this._finishConnect).call(n,this)),this._temporaryBindUI("onDragStart",Hn(o=this._dragStartEdge).call(o,this)),this._temporaryBindUI("onHold",(function(){}))}},{key:"editEdgeMode",value:function(){if(!0!==this.editMode&&this.enableEditMode(),this._clean(),this.inMode="editEdge","object"!==bu(this.options.editEdge)||"function"!=typeof this.options.editEdge.editWithoutDrag||(this.edgeBeingEditedId=this.selectionHandler.getSelectedEdgeIds()[0],void 0===this.edgeBeingEditedId)){if(!0===this.guiEnabled){var t,e=this.options.locales[this.options.locale];this.manipulationDOM={},this._createBackButton(e),this._createSeperator(),this._createDescription(e.editEdgeDescription||this.options.locales.en.editEdgeDescription),this._bindElementEvents(this.closeDiv,Hn(t=this.toggleEditMode).call(t,this))}if(this.edgeBeingEditedId=this.selectionHandler.getSelectedEdgeIds()[0],void 0!==this.edgeBeingEditedId){var i,n,o,r,s=this.body.edges[this.edgeBeingEditedId],a=this._getNewTargetNode(s.from.x,s.from.y),h=this._getNewTargetNode(s.to.x,s.to.y);this.temporaryIds.nodes.push(a.id),this.temporaryIds.nodes.push(h.id),this.body.nodes[a.id]=a,this.body.nodeIndices.push(a.id),this.body.nodes[h.id]=h,this.body.nodeIndices.push(h.id),this._temporaryBindUI("onTouch",Hn(i=this._controlNodeTouch).call(i,this)),this._temporaryBindUI("onTap",(function(){})),this._temporaryBindUI("onHold",(function(){})),this._temporaryBindUI("onDragStart",Hn(n=this._controlNodeDragStart).call(n,this)),this._temporaryBindUI("onDrag",Hn(o=this._controlNodeDrag).call(o,this)),this._temporaryBindUI("onDragEnd",Hn(r=this._controlNodeDragEnd).call(r,this)),this._temporaryBindUI("onMouseMove",(function(){})),this._temporaryBindEvent("beforeDrawing",(function(t){var e=s.edgeType.findBorderPositions(t);!1===a.selected&&(a.x=e.from.x,a.y=e.from.y),!1===h.selected&&(h.x=e.to.x,h.y=e.to.y)})),this.body.emitter.emit("_redraw")}else this.showManipulatorToolbar()}else{var l=this.body.edges[this.edgeBeingEditedId];this._performEditEdge(l.from.id,l.to.id)}}},{key:"deleteSelected",value:function(){var t=this;!0!==this.editMode&&this.enableEditMode(),this._clean(),this.inMode="delete";var e=this.selectionHandler.getSelectedNodeIds(),i=this.selectionHandler.getSelectedEdgeIds(),n=void 0;if(e.length>0){for(var o=0;o0&&"function"==typeof this.options.deleteEdge&&(n=this.options.deleteEdge);if("function"==typeof n){var r={nodes:e,edges:i};if(2!==n.length)throw new Error("The function for delete does not support two arguments (data, callback)");n(r,(function(e){null!=e&&"delete"===t.inMode?(t.body.data.edges.getDataSet().remove(e.edges),t.body.data.nodes.getDataSet().remove(e.nodes),t.body.emitter.emit("startSimulation"),t.showManipulatorToolbar()):(t.body.emitter.emit("startSimulation"),t.showManipulatorToolbar())}))}else this.body.data.edges.getDataSet().remove(i),this.body.data.nodes.getDataSet().remove(e),this.body.emitter.emit("startSimulation"),this.showManipulatorToolbar()}},{key:"_setup",value:function(){!0===this.options.enabled?(this.guiEnabled=!0,this._createWrappers(),!1===this.editMode?this._createEditButton():this.showManipulatorToolbar()):(this._removeManipulationDOM(),this.guiEnabled=!1)}},{key:"_createWrappers",value:function(){var t,e;(void 0===this.manipulationDiv&&(this.manipulationDiv=document.createElement("div"),this.manipulationDiv.className="vis-manipulation",!0===this.editMode?this.manipulationDiv.style.display="block":this.manipulationDiv.style.display="none",this.canvas.frame.appendChild(this.manipulationDiv)),void 0===this.editModeDiv&&(this.editModeDiv=document.createElement("div"),this.editModeDiv.className="vis-edit-mode",!0===this.editMode?this.editModeDiv.style.display="none":this.editModeDiv.style.display="block",this.canvas.frame.appendChild(this.editModeDiv)),void 0===this.closeDiv)&&(this.closeDiv=document.createElement("button"),this.closeDiv.className="vis-close",this.closeDiv.setAttribute("aria-label",null!==(t=null===(e=this.options.locales[this.options.locale])||void 0===e?void 0:e.close)&&void 0!==t?t:this.options.locales.en.close),this.closeDiv.style.display=this.manipulationDiv.style.display,this.canvas.frame.appendChild(this.closeDiv))}},{key:"_getNewTargetNode",value:function(t,e){var i=gb({},this.options.controlNodeStyle);i.id="targetNode"+zM(),i.hidden=!1,i.physics=!1,i.x=t,i.y=e;var n=this.body.functions.createNode(i);return n.shape.boundingBox={left:t,right:t,top:e,bottom:e},n}},{key:"_createEditButton",value:function(){var t;this._clean(),this.manipulationDOM={},hb(this.editModeDiv);var e=this.options.locales[this.options.locale],i=this._createButton("editMode","vis-edit vis-edit-mode",e.edit||this.options.locales.en.edit);this.editModeDiv.appendChild(i),this._bindElementEvents(i,Hn(t=this.toggleEditMode).call(t,this))}},{key:"_clean",value:function(){this.inMode=!1,!0===this.guiEnabled&&(hb(this.editModeDiv),hb(this.manipulationDiv),this._cleanupDOMEventListeners()),this._cleanupTemporaryNodesAndEdges(),this._unbindTemporaryUIs(),this._unbindTemporaryEvents(),this.body.emitter.emit("restorePhysics")}},{key:"_cleanupDOMEventListeners",value:function(){var t,e,i=uN(Ap(t=this._domEventListenerCleanupQueue).call(t,0));try{for(i.s();!(e=i.n()).done;){(0,e.value)()}}catch(t){i.e(t)}finally{i.f()}}},{key:"_removeManipulationDOM",value:function(){this._clean(),hb(this.manipulationDiv),hb(this.editModeDiv),hb(this.closeDiv),this.manipulationDiv&&this.canvas.frame.removeChild(this.manipulationDiv),this.editModeDiv&&this.canvas.frame.removeChild(this.editModeDiv),this.closeDiv&&this.canvas.frame.removeChild(this.closeDiv),this.manipulationDiv=void 0,this.editModeDiv=void 0,this.closeDiv=void 0}},{key:"_createSeperator",value:function(){var t=arguments.length>0&&void 0!==arguments[0]?arguments[0]:1;this.manipulationDOM["seperatorLineDiv"+t]=document.createElement("div"),this.manipulationDOM["seperatorLineDiv"+t].className="vis-separator-line",this.manipulationDiv.appendChild(this.manipulationDOM["seperatorLineDiv"+t])}},{key:"_createAddNodeButton",value:function(t){var e,i=this._createButton("addNode","vis-add",t.addNode||this.options.locales.en.addNode);this.manipulationDiv.appendChild(i),this._bindElementEvents(i,Hn(e=this.addNodeMode).call(e,this))}},{key:"_createAddEdgeButton",value:function(t){var e,i=this._createButton("addEdge","vis-connect",t.addEdge||this.options.locales.en.addEdge);this.manipulationDiv.appendChild(i),this._bindElementEvents(i,Hn(e=this.addEdgeMode).call(e,this))}},{key:"_createEditNodeButton",value:function(t){var e,i=this._createButton("editNode","vis-edit",t.editNode||this.options.locales.en.editNode);this.manipulationDiv.appendChild(i),this._bindElementEvents(i,Hn(e=this.editNode).call(e,this))}},{key:"_createEditEdgeButton",value:function(t){var e,i=this._createButton("editEdge","vis-edit",t.editEdge||this.options.locales.en.editEdge);this.manipulationDiv.appendChild(i),this._bindElementEvents(i,Hn(e=this.editEdgeMode).call(e,this))}},{key:"_createDeleteButton",value:function(t){var e,i;i=this.options.rtl?"vis-delete-rtl":"vis-delete";var n=this._createButton("delete",i,t.del||this.options.locales.en.del);this.manipulationDiv.appendChild(n),this._bindElementEvents(n,Hn(e=this.deleteSelected).call(e,this))}},{key:"_createBackButton",value:function(t){var e,i=this._createButton("back","vis-back",t.back||this.options.locales.en.back);this.manipulationDiv.appendChild(i),this._bindElementEvents(i,Hn(e=this.showManipulatorToolbar).call(e,this))}},{key:"_createButton",value:function(t,e,i){var n=arguments.length>3&&void 0!==arguments[3]?arguments[3]:"vis-label";return this.manipulationDOM[t+"Div"]=document.createElement("button"),this.manipulationDOM[t+"Div"].className="vis-button "+e,this.manipulationDOM[t+"Label"]=document.createElement("div"),this.manipulationDOM[t+"Label"].className=n,this.manipulationDOM[t+"Label"].innerText=i,this.manipulationDOM[t+"Div"].appendChild(this.manipulationDOM[t+"Label"]),this.manipulationDOM[t+"Div"]}},{key:"_createDescription",value:function(t){this.manipulationDOM.descriptionLabel=document.createElement("div"),this.manipulationDOM.descriptionLabel.className="vis-none",this.manipulationDOM.descriptionLabel.innerText=t,this.manipulationDiv.appendChild(this.manipulationDOM.descriptionLabel)}},{key:"_temporaryBindEvent",value:function(t,e){this.temporaryEventFunctions.push({event:t,boundFunction:e}),this.body.emitter.on(t,e)}},{key:"_temporaryBindUI",value:function(t,e){if(void 0===this.body.eventListeners[t])throw new Error("This UI function does not exist. Typo? You tried: "+t+" possible are: "+mg(Hf(this.body.eventListeners)));this.temporaryUIFunctions[t]=this.body.eventListeners[t],this.body.eventListeners[t]=e}},{key:"_unbindTemporaryUIs",value:function(){for(var t in this.temporaryUIFunctions)Object.prototype.hasOwnProperty.call(this.temporaryUIFunctions,t)&&(this.body.eventListeners[t]=this.temporaryUIFunctions[t],delete this.temporaryUIFunctions[t]);this.temporaryUIFunctions={}}},{key:"_unbindTemporaryEvents",value:function(){for(var t=0;t=0;s--)if(o[s]!==this.selectedControlNode.id){r=this.body.nodes[o[s]];break}if(void 0!==r&&void 0!==this.selectedControlNode)if(!0===r.isCluster)alert(this.options.locales[this.options.locale].createEdgeError||this.options.locales.en.createEdgeError);else{var a=this.body.nodes[this.temporaryIds.nodes[0]];this.selectedControlNode.id===a.id?this._performEditEdge(r.id,n.to.id):this._performEditEdge(n.from.id,r.id)}else n.updateEdgeType(),this.body.emitter.emit("restorePhysics");this.body.emitter.emit("_redraw")}}},{key:"_handleConnect",value:function(t){if((new Date).valueOf()-this.touchTime>100){this.lastTouch=this.body.functions.getPointer(t.center),this.lastTouch.translation=bn({},this.body.view.translation),this.interactionHandler.drag.pointer=this.lastTouch,this.interactionHandler.drag.translation=this.lastTouch.translation;var e=this.lastTouch,i=this.selectionHandler.getNodeAt(e);if(void 0!==i)if(!0===i.isCluster)alert(this.options.locales[this.options.locale].createEdgeError||this.options.locales.en.createEdgeError);else{var n=this._getNewTargetNode(i.x,i.y);this.body.nodes[n.id]=n,this.body.nodeIndices.push(n.id);var o=this.body.functions.createEdge({id:"connectionEdge"+zM(),from:i.id,to:n.id,physics:!1,smooth:{enabled:!0,type:"continuous",roundness:.5}});this.body.edges[o.id]=o,this.body.edgeIndices.push(o.id),this.temporaryIds.nodes.push(n.id),this.temporaryIds.edges.push(o.id)}this.touchTime=(new Date).valueOf()}}},{key:"_dragControlNode",value:function(t){var e=this.body.functions.getPointer(t.center),i=this.selectionHandler._pointerToPositionObject(e),n=void 0;void 0!==this.temporaryIds.edges[0]&&(n=this.body.edges[this.temporaryIds.edges[0]].fromId);for(var o=this.selectionHandler._getAllNodesOverlappingWith(i),r=void 0,s=o.length-1;s>=0;s--){var a;if(-1===lg(a=this.temporaryIds.nodes).call(a,o[s])){r=this.body.nodes[o[s]];break}}if(t.controlEdge={from:n,to:r?r.id:void 0},this.selectionHandler.generateClickEvent("controlNodeDragging",t,e),void 0!==this.temporaryIds.nodes[0]){var h=this.body.nodes[this.temporaryIds.nodes[0]];h.x=this.canvas._XconvertDOMtoCanvas(e.x),h.y=this.canvas._YconvertDOMtoCanvas(e.y),this.body.emitter.emit("_redraw")}else this.interactionHandler.onDrag(t)}},{key:"_finishConnect",value:function(t){var e=this.body.functions.getPointer(t.center),i=this.selectionHandler._pointerToPositionObject(e),n=void 0;void 0!==this.temporaryIds.edges[0]&&(n=this.body.edges[this.temporaryIds.edges[0]].fromId);for(var o=this.selectionHandler._getAllNodesOverlappingWith(i),r=void 0,s=o.length-1;s>=0;s--){var a;if(-1===lg(a=this.temporaryIds.nodes).call(a,o[s])){r=this.body.nodes[o[s]];break}}this._cleanupTemporaryNodesAndEdges(),void 0!==r&&(!0===r.isCluster?alert(this.options.locales[this.options.locale].createEdgeError||this.options.locales.en.createEdgeError):void 0!==this.body.nodes[n]&&void 0!==this.body.nodes[r.id]&&this._performAddEdge(n,r.id)),t.controlEdge={from:n,to:r?r.id:void 0},this.selectionHandler.generateClickEvent("controlNodeDragEnd",t,e),this.body.emitter.emit("_redraw")}},{key:"_dragStartEdge",value:function(t){var e=this.lastTouch;this.selectionHandler.generateClickEvent("dragStart",t,e,void 0,!0)}},{key:"_performAddNode",value:function(t){var e=this,i={id:zM(),x:t.pointer.canvas.x,y:t.pointer.canvas.y,label:"new"};if("function"==typeof this.options.addNode){if(2!==this.options.addNode.length)throw this.showManipulatorToolbar(),new Error("The function for add does not support two arguments (data,callback)");this.options.addNode(i,(function(t){null!=t&&"addNode"===e.inMode&&e.body.data.nodes.getDataSet().add(t),e.showManipulatorToolbar()}))}else this.body.data.nodes.getDataSet().add(i),this.showManipulatorToolbar()}},{key:"_performAddEdge",value:function(t,e){var i=this,n={from:t,to:e};if("function"==typeof this.options.addEdge){if(2!==this.options.addEdge.length)throw new Error("The function for connect does not support two arguments (data,callback)");this.options.addEdge(n,(function(t){null!=t&&"addEdge"===i.inMode&&(i.body.data.edges.getDataSet().add(t),i.selectionHandler.unselectAll(),i.showManipulatorToolbar())}))}else this.body.data.edges.getDataSet().add(n),this.selectionHandler.unselectAll(),this.showManipulatorToolbar()}},{key:"_performEditEdge",value:function(t,e){var i=this,n={id:this.edgeBeingEditedId,from:t,to:e,label:this.body.data.edges.get(this.edgeBeingEditedId).label},o=this.options.editEdge;if("object"===bu(o)&&(o=o.editWithoutDrag),"function"==typeof o){if(2!==o.length)throw new Error("The function for edit does not support two arguments (data, callback)");o(n,(function(t){null==t||"editEdge"!==i.inMode?(i.body.edges[n.id].updateEdgeType(),i.body.emitter.emit("_redraw"),i.showManipulatorToolbar()):(i.body.data.edges.getDataSet().update(t),i.selectionHandler.unselectAll(),i.showManipulatorToolbar())}))}else this.body.data.edges.getDataSet().update(n),this.selectionHandler.unselectAll(),this.showManipulatorToolbar()}}]),t}(),vN="string",gN="boolean",yN="number",mN="array",bN="object",wN=["arrow","bar","box","circle","crow","curve","diamond","image","inv_curve","inv_triangle","triangle","vee"],kN={borderWidth:{number:yN},borderWidthSelected:{number:yN,undefined:"undefined"},brokenImage:{string:vN,undefined:"undefined"},chosen:{label:{boolean:gN,function:"function"},node:{boolean:gN,function:"function"},__type__:{object:bN,boolean:gN}},color:{border:{string:vN},background:{string:vN},highlight:{border:{string:vN},background:{string:vN},__type__:{object:bN,string:vN}},hover:{border:{string:vN},background:{string:vN},__type__:{object:bN,string:vN}},__type__:{object:bN,string:vN}},opacity:{number:yN,undefined:"undefined"},fixed:{x:{boolean:gN},y:{boolean:gN},__type__:{object:bN,boolean:gN}},font:{align:{string:vN},color:{string:vN},size:{number:yN},face:{string:vN},background:{string:vN},strokeWidth:{number:yN},strokeColor:{string:vN},vadjust:{number:yN},multi:{boolean:gN,string:vN},bold:{color:{string:vN},size:{number:yN},face:{string:vN},mod:{string:vN},vadjust:{number:yN},__type__:{object:bN,string:vN}},boldital:{color:{string:vN},size:{number:yN},face:{string:vN},mod:{string:vN},vadjust:{number:yN},__type__:{object:bN,string:vN}},ital:{color:{string:vN},size:{number:yN},face:{string:vN},mod:{string:vN},vadjust:{number:yN},__type__:{object:bN,string:vN}},mono:{color:{string:vN},size:{number:yN},face:{string:vN},mod:{string:vN},vadjust:{number:yN},__type__:{object:bN,string:vN}},__type__:{object:bN,string:vN}},group:{string:vN,number:yN,undefined:"undefined"},heightConstraint:{minimum:{number:yN},valign:{string:vN},__type__:{object:bN,boolean:gN,number:yN}},hidden:{boolean:gN},icon:{face:{string:vN},code:{string:vN},size:{number:yN},color:{string:vN},weight:{string:vN,number:yN},__type__:{object:bN}},id:{string:vN,number:yN},image:{selected:{string:vN,undefined:"undefined"},unselected:{string:vN,undefined:"undefined"},__type__:{object:bN,string:vN}},imagePadding:{top:{number:yN},right:{number:yN},bottom:{number:yN},left:{number:yN},__type__:{object:bN,number:yN}},label:{string:vN,undefined:"undefined"},labelHighlightBold:{boolean:gN},level:{number:yN,undefined:"undefined"},margin:{top:{number:yN},right:{number:yN},bottom:{number:yN},left:{number:yN},__type__:{object:bN,number:yN}},mass:{number:yN},physics:{boolean:gN},scaling:{min:{number:yN},max:{number:yN},label:{enabled:{boolean:gN},min:{number:yN},max:{number:yN},maxVisible:{number:yN},drawThreshold:{number:yN},__type__:{object:bN,boolean:gN}},customScalingFunction:{function:"function"},__type__:{object:bN}},shadow:{enabled:{boolean:gN},color:{string:vN},size:{number:yN},x:{number:yN},y:{number:yN},__type__:{object:bN,boolean:gN}},shape:{string:["custom","ellipse","circle","database","box","text","image","circularImage","diamond","dot","star","triangle","triangleDown","square","icon","hexagon"]},ctxRenderer:{function:"function"},shapeProperties:{borderDashes:{boolean:gN,array:mN},borderRadius:{number:yN},interpolation:{boolean:gN},useImageSize:{boolean:gN},useBorderWithImage:{boolean:gN},coordinateOrigin:{string:["center","top-left"]},__type__:{object:bN}},size:{number:yN},title:{string:vN,dom:"dom",undefined:"undefined"},value:{number:yN,undefined:"undefined"},widthConstraint:{minimum:{number:yN},maximum:{number:yN},__type__:{object:bN,boolean:gN,number:yN}},x:{number:yN},y:{number:yN},__type__:{object:bN}},_N={configure:{enabled:{boolean:gN},filter:{boolean:gN,string:vN,array:mN,function:"function"},container:{dom:"dom"},showButton:{boolean:gN},__type__:{object:bN,boolean:gN,string:vN,array:mN,function:"function"}},edges:{arrows:{to:{enabled:{boolean:gN},scaleFactor:{number:yN},type:{string:wN},imageHeight:{number:yN},imageWidth:{number:yN},src:{string:vN},__type__:{object:bN,boolean:gN}},middle:{enabled:{boolean:gN},scaleFactor:{number:yN},type:{string:wN},imageWidth:{number:yN},imageHeight:{number:yN},src:{string:vN},__type__:{object:bN,boolean:gN}},from:{enabled:{boolean:gN},scaleFactor:{number:yN},type:{string:wN},imageWidth:{number:yN},imageHeight:{number:yN},src:{string:vN},__type__:{object:bN,boolean:gN}},__type__:{string:["from","to","middle"],object:bN}},endPointOffset:{from:{number:yN},to:{number:yN},__type__:{object:bN,number:yN}},arrowStrikethrough:{boolean:gN},background:{enabled:{boolean:gN},color:{string:vN},size:{number:yN},dashes:{boolean:gN,array:mN},__type__:{object:bN,boolean:gN}},chosen:{label:{boolean:gN,function:"function"},edge:{boolean:gN,function:"function"},__type__:{object:bN,boolean:gN}},color:{color:{string:vN},highlight:{string:vN},hover:{string:vN},inherit:{string:["from","to","both"],boolean:gN},opacity:{number:yN},__type__:{object:bN,string:vN}},dashes:{boolean:gN,array:mN},font:{color:{string:vN},size:{number:yN},face:{string:vN},background:{string:vN},strokeWidth:{number:yN},strokeColor:{string:vN},align:{string:["horizontal","top","middle","bottom"]},vadjust:{number:yN},multi:{boolean:gN,string:vN},bold:{color:{string:vN},size:{number:yN},face:{string:vN},mod:{string:vN},vadjust:{number:yN},__type__:{object:bN,string:vN}},boldital:{color:{string:vN},size:{number:yN},face:{string:vN},mod:{string:vN},vadjust:{number:yN},__type__:{object:bN,string:vN}},ital:{color:{string:vN},size:{number:yN},face:{string:vN},mod:{string:vN},vadjust:{number:yN},__type__:{object:bN,string:vN}},mono:{color:{string:vN},size:{number:yN},face:{string:vN},mod:{string:vN},vadjust:{number:yN},__type__:{object:bN,string:vN}},__type__:{object:bN,string:vN}},hidden:{boolean:gN},hoverWidth:{function:"function",number:yN},label:{string:vN,undefined:"undefined"},labelHighlightBold:{boolean:gN},length:{number:yN,undefined:"undefined"},physics:{boolean:gN},scaling:{min:{number:yN},max:{number:yN},label:{enabled:{boolean:gN},min:{number:yN},max:{number:yN},maxVisible:{number:yN},drawThreshold:{number:yN},__type__:{object:bN,boolean:gN}},customScalingFunction:{function:"function"},__type__:{object:bN}},selectionWidth:{function:"function",number:yN},selfReferenceSize:{number:yN},selfReference:{size:{number:yN},angle:{number:yN},renderBehindTheNode:{boolean:gN},__type__:{object:bN}},shadow:{enabled:{boolean:gN},color:{string:vN},size:{number:yN},x:{number:yN},y:{number:yN},__type__:{object:bN,boolean:gN}},smooth:{enabled:{boolean:gN},type:{string:["dynamic","continuous","discrete","diagonalCross","straightCross","horizontal","vertical","curvedCW","curvedCCW","cubicBezier"]},roundness:{number:yN},forceDirection:{string:["horizontal","vertical","none"],boolean:gN},__type__:{object:bN,boolean:gN}},title:{string:vN,undefined:"undefined"},width:{number:yN},widthConstraint:{maximum:{number:yN},__type__:{object:bN,boolean:gN,number:yN}},value:{number:yN,undefined:"undefined"},__type__:{object:bN}},groups:{useDefaultGroups:{boolean:gN},__any__:kN,__type__:{object:bN}},interaction:{dragNodes:{boolean:gN},dragView:{boolean:gN},hideEdgesOnDrag:{boolean:gN},hideEdgesOnZoom:{boolean:gN},hideNodesOnDrag:{boolean:gN},hover:{boolean:gN},keyboard:{enabled:{boolean:gN},speed:{x:{number:yN},y:{number:yN},zoom:{number:yN},__type__:{object:bN}},bindToWindow:{boolean:gN},autoFocus:{boolean:gN},__type__:{object:bN,boolean:gN}},multiselect:{boolean:gN},navigationButtons:{boolean:gN},selectable:{boolean:gN},selectConnectedEdges:{boolean:gN},hoverConnectedEdges:{boolean:gN},tooltipDelay:{number:yN},zoomView:{boolean:gN},zoomSpeed:{number:yN},__type__:{object:bN}},layout:{randomSeed:{undefined:"undefined",number:yN,string:vN},improvedLayout:{boolean:gN},clusterThreshold:{number:yN},hierarchical:{enabled:{boolean:gN},levelSeparation:{number:yN},nodeSpacing:{number:yN},treeSpacing:{number:yN},blockShifting:{boolean:gN},edgeMinimization:{boolean:gN},parentCentralization:{boolean:gN},direction:{string:["UD","DU","LR","RL"]},sortMethod:{string:["hubsize","directed"]},shakeTowards:{string:["leaves","roots"]},__type__:{object:bN,boolean:gN}},__type__:{object:bN}},manipulation:{enabled:{boolean:gN},initiallyActive:{boolean:gN},addNode:{boolean:gN,function:"function"},addEdge:{boolean:gN,function:"function"},editNode:{function:"function"},editEdge:{editWithoutDrag:{function:"function"},__type__:{object:bN,boolean:gN,function:"function"}},deleteNode:{boolean:gN,function:"function"},deleteEdge:{boolean:gN,function:"function"},controlNodeStyle:kN,__type__:{object:bN,boolean:gN}},nodes:kN,physics:{enabled:{boolean:gN},barnesHut:{theta:{number:yN},gravitationalConstant:{number:yN},centralGravity:{number:yN},springLength:{number:yN},springConstant:{number:yN},damping:{number:yN},avoidOverlap:{number:yN},__type__:{object:bN}},forceAtlas2Based:{theta:{number:yN},gravitationalConstant:{number:yN},centralGravity:{number:yN},springLength:{number:yN},springConstant:{number:yN},damping:{number:yN},avoidOverlap:{number:yN},__type__:{object:bN}},repulsion:{centralGravity:{number:yN},springLength:{number:yN},springConstant:{number:yN},nodeDistance:{number:yN},damping:{number:yN},__type__:{object:bN}},hierarchicalRepulsion:{centralGravity:{number:yN},springLength:{number:yN},springConstant:{number:yN},nodeDistance:{number:yN},damping:{number:yN},avoidOverlap:{number:yN},__type__:{object:bN}},maxVelocity:{number:yN},minVelocity:{number:yN},solver:{string:["barnesHut","repulsion","hierarchicalRepulsion","forceAtlas2Based"]},stabilization:{enabled:{boolean:gN},iterations:{number:yN},updateInterval:{number:yN},onlyDynamicEdges:{boolean:gN},fit:{boolean:gN},__type__:{object:bN,boolean:gN}},timestep:{number:yN},adaptiveTimestep:{boolean:gN},wind:{x:{number:yN},y:{number:yN},__type__:{object:bN}},__type__:{object:bN,boolean:gN}},autoResize:{boolean:gN},clickToUse:{boolean:gN},locale:{string:vN},locales:{__any__:{any:"any"},__type__:{object:bN}},height:{string:vN},width:{string:vN},__type__:{object:bN}},xN={nodes:{borderWidth:[1,0,10,1],borderWidthSelected:[2,0,10,1],color:{border:["color","#2B7CE9"],background:["color","#97C2FC"],highlight:{border:["color","#2B7CE9"],background:["color","#D2E5FF"]},hover:{border:["color","#2B7CE9"],background:["color","#D2E5FF"]}},opacity:[0,0,1,.1],fixed:{x:!1,y:!1},font:{color:["color","#343434"],size:[14,0,100,1],face:["arial","verdana","tahoma"],background:["color","none"],strokeWidth:[0,0,50,1],strokeColor:["color","#ffffff"]},hidden:!1,labelHighlightBold:!0,physics:!0,scaling:{min:[10,0,200,1],max:[30,0,200,1],label:{enabled:!1,min:[14,0,200,1],max:[30,0,200,1],maxVisible:[30,0,200,1],drawThreshold:[5,0,20,1]}},shadow:{enabled:!1,color:"rgba(0,0,0,0.5)",size:[10,0,20,1],x:[5,-30,30,1],y:[5,-30,30,1]},shape:["ellipse","box","circle","database","diamond","dot","square","star","text","triangle","triangleDown","hexagon"],shapeProperties:{borderDashes:!1,borderRadius:[6,0,20,1],interpolation:!0,useImageSize:!1},size:[25,0,200,1]},edges:{arrows:{to:{enabled:!1,scaleFactor:[1,0,3,.05],type:"arrow"},middle:{enabled:!1,scaleFactor:[1,0,3,.05],type:"arrow"},from:{enabled:!1,scaleFactor:[1,0,3,.05],type:"arrow"}},endPointOffset:{from:[0,-10,10,1],to:[0,-10,10,1]},arrowStrikethrough:!0,color:{color:["color","#848484"],highlight:["color","#848484"],hover:["color","#848484"],inherit:["from","to","both",!0,!1],opacity:[1,0,1,.05]},dashes:!1,font:{color:["color","#343434"],size:[14,0,100,1],face:["arial","verdana","tahoma"],background:["color","none"],strokeWidth:[2,0,50,1],strokeColor:["color","#ffffff"],align:["horizontal","top","middle","bottom"]},hidden:!1,hoverWidth:[1.5,0,5,.1],labelHighlightBold:!0,physics:!0,scaling:{min:[1,0,100,1],max:[15,0,100,1],label:{enabled:!0,min:[14,0,200,1],max:[30,0,200,1],maxVisible:[30,0,200,1],drawThreshold:[5,0,20,1]}},selectionWidth:[1.5,0,5,.1],selfReferenceSize:[20,0,200,1],selfReference:{size:[20,0,200,1],angle:[Math.PI/2,-6*Math.PI,6*Math.PI,Math.PI/8],renderBehindTheNode:!0},shadow:{enabled:!1,color:"rgba(0,0,0,0.5)",size:[10,0,20,1],x:[5,-30,30,1],y:[5,-30,30,1]},smooth:{enabled:!0,type:["dynamic","continuous","discrete","diagonalCross","straightCross","horizontal","vertical","curvedCW","curvedCCW","cubicBezier"],forceDirection:["horizontal","vertical","none"],roundness:[.5,0,1,.05]},width:[1,0,30,1]},layout:{hierarchical:{enabled:!1,levelSeparation:[150,20,500,5],nodeSpacing:[100,20,500,5],treeSpacing:[200,20,500,5],blockShifting:!0,edgeMinimization:!0,parentCentralization:!0,direction:["UD","DU","LR","RL"],sortMethod:["hubsize","directed"],shakeTowards:["leaves","roots"]}},interaction:{dragNodes:!0,dragView:!0,hideEdgesOnDrag:!1,hideEdgesOnZoom:!1,hideNodesOnDrag:!1,hover:!1,keyboard:{enabled:!1,speed:{x:[10,0,40,1],y:[10,0,40,1],zoom:[.02,0,.1,.005]},bindToWindow:!0,autoFocus:!0},multiselect:!1,navigationButtons:!1,selectable:!0,selectConnectedEdges:!0,hoverConnectedEdges:!0,tooltipDelay:[300,0,1e3,25],zoomView:!0,zoomSpeed:[1,.1,2,.1]},manipulation:{enabled:!1,initiallyActive:!1},physics:{enabled:!0,barnesHut:{theta:[.5,.1,1,.05],gravitationalConstant:[-2e3,-3e4,0,50],centralGravity:[.3,0,10,.05],springLength:[95,0,500,5],springConstant:[.04,0,1.2,.005],damping:[.09,0,1,.01],avoidOverlap:[0,0,1,.01]},forceAtlas2Based:{theta:[.5,.1,1,.05],gravitationalConstant:[-50,-500,0,1],centralGravity:[.01,0,1,.005],springLength:[95,0,500,5],springConstant:[.08,0,1.2,.005],damping:[.4,0,1,.01],avoidOverlap:[0,0,1,.01]},repulsion:{centralGravity:[.2,0,10,.05],springLength:[200,0,500,5],springConstant:[.05,0,1.2,.005],nodeDistance:[100,0,500,5],damping:[.09,0,1,.01]},hierarchicalRepulsion:{centralGravity:[.2,0,10,.05],springLength:[100,0,500,5],springConstant:[.01,0,1.2,.005],nodeDistance:[120,0,500,5],damping:[.09,0,1,.01],avoidOverlap:[0,0,1,.01]},maxVelocity:[50,0,150,1],minVelocity:[.1,.01,.5,.01],solver:["barnesHut","forceAtlas2Based","repulsion","hierarchicalRepulsion"],timestep:[.5,.01,1,.01],wind:{x:[0,-10,10,.1],y:[0,-10,10,.1]}}},EN=function(t,e,i){var n;return!(!rv(t).call(t,"physics")||!rv(n=xN.physics.solver).call(n,e)||i.physics.solver===e||"wind"===e)},ON=Object.freeze({__proto__:null,allOptions:_N,configuratorHideOption:EN,configureOptions:xN}),CN=function(){function t(){ph(this,t)}return xu(t,[{key:"getDistances",value:function(t,e,i){for(var n={},o=t.edges,r=0;r2&&void 0!==arguments[2]&&arguments[2],n=this.distanceSolver.getDistances(this.body,t,e);this._createL_matrix(n),this._createK_matrix(n),this._createE_matrix();for(var o=0,r=Math.max(1e3,Math.min(10*this.body.nodeIndices.length,6e3)),s=1e9,a=0,h=0,l=0,d=0,c=0;s>.01&&o1&&c<5;){c+=1,this._moveNode(a,h,l);var f=pf(this._getEnergy(a),3);d=f[0],h=f[1],l=f[2]}}}},{key:"_getHighestEnergyNode",value:function(t){for(var e=this.body.nodeIndices,i=this.body.nodes,n=0,o=e[0],r=0,s=0,a=0;a0?(n=e[t].redundant[0],e[t].redundant.shift()):(n=document.createElementNS("http://www.w3.org/2000/svg",t),i.appendChild(n)):(n=document.createElementNS("http://www.w3.org/2000/svg",t),e[t]={used:[],redundant:[]},i.appendChild(n)),e[t].used.push(n),n}Kn(TN.prototype),TN.prototype.setOptions=function(t){var e=this;if(null===t&&(t=void 0),void 0!==t){!0===ew.validate(t,_N)&&console.error("%cErrors have been found in the supplied options object.",tw);if(pb(["locale","locales","clickToUse"],this.options,t),void 0!==t.locale&&(t.locale=function(t,e){try{var i=pf(e.split(/[-_ /]/,2),2),n=i[0],o=i[1],r=null!=n?n.toLowerCase():null,s=null!=o?o.toUpperCase():null;if(r&&s){var a,h=r+"-"+s;if(Object.prototype.hasOwnProperty.call(t,h))return h;console.warn(_f(a="Unknown variant ".concat(s," of language ")).call(a,r,"."))}if(r){var l=r;if(Object.prototype.hasOwnProperty.call(t,l))return l;console.warn("Unknown language ".concat(r))}return console.warn("Unknown locale ".concat(e,", falling back to English.")),"en"}catch(t){return console.error(t),console.warn("Unexpected error while normalizing locale ".concat(e,", falling back to English.")),"en"}}(t.locales||this.options.locales,t.locale)),t=this.layoutEngine.setOptions(t.layout,t),this.canvas.setOptions(t),this.groups.setOptions(t.groups),this.nodesHandler.setOptions(t.nodes),this.edgesHandler.setOptions(t.edges),this.physics.setOptions(t.physics),this.manipulation.setOptions(t.manipulation,t,this.options),this.interactionHandler.setOptions(t.interaction),this.renderer.setOptions(t.interaction),this.selectionHandler.setOptions(t.interaction),void 0!==t.groups&&this.body.emitter.emit("refreshNodes"),"configure"in t&&(this.configurator||(this.configurator=new Zb(this,this.body.container,xN,this.canvas.pixelRatio,EN)),this.configurator.setOptions(t.configure)),this.configurator&&!0===this.configurator.options.enabled){var i={nodes:{},edges:{},layout:{},interaction:{},manipulation:{},physics:{},global:{}};gb(i.nodes,this.nodesHandler.options),gb(i.edges,this.edgesHandler.options),gb(i.layout,this.layoutEngine.options),gb(i.interaction,this.selectionHandler.options),gb(i.interaction,this.renderer.options),gb(i.interaction,this.interactionHandler.options),gb(i.manipulation,this.manipulation.options),gb(i.physics,this.physics.options),gb(i.global,this.canvas.options),gb(i.global,this.options),this.configurator.setModuleOptions(i)}void 0!==t.clickToUse?!0===t.clickToUse?void 0===this.activator&&(this.activator=new Kb(this.canvas.frame),this.activator.on("change",(function(){e.body.emitter.emit("activate")}))):(void 0!==this.activator&&(this.activator.destroy(),delete this.activator),this.body.emitter.emit("activate")):this.body.emitter.emit("activate"),this.canvas.setSize(),this.body.emitter.emit("startSimulation")}},TN.prototype._updateVisibleIndices=function(){var t=this.body.nodes,e=this.body.edges;for(var i in this.body.nodeIndices=[],this.body.edgeIndices=[],t)Object.prototype.hasOwnProperty.call(t,i)&&(this.clustering._isClusteredNode(i)||!1!==t[i].options.hidden||this.body.nodeIndices.push(t[i].id));for(var n in e)if(Object.prototype.hasOwnProperty.call(e,n)){var o=e[n],r=t[o.fromId],s=t[o.toId],a=void 0!==r&&void 0!==s;!this.clustering._isClusteredEdge(n)&&!1===o.options.hidden&&a&&!1===r.options.hidden&&!1===s.options.hidden&&this.body.edgeIndices.push(o.id)}},TN.prototype.bindEventListeners=function(){var t=this;this.body.emitter.on("_dataChanged",(function(){t.edgesHandler._updateState(),t.body.emitter.emit("_dataUpdated")})),this.body.emitter.on("_dataUpdated",(function(){t.clustering._updateState(),t._updateVisibleIndices(),t._updateValueRange(t.body.nodes),t._updateValueRange(t.body.edges),t.body.emitter.emit("startSimulation"),t.body.emitter.emit("_requestRedraw")}))},TN.prototype.setData=function(t){if(this.body.emitter.emit("resetPhysics"),this.body.emitter.emit("_resetData"),this.selectionHandler.unselectAll(),t&&t.dot&&(t.nodes||t.edges))throw new SyntaxError('Data must contain either parameter "dot" or parameter pair "nodes" and "edges", but not both.');if(this.setOptions(t&&t.options),t&&t.dot){console.warn("The dot property has been deprecated. Please use the static convertDot method to convert DOT into vis.network format and use the normal data format with nodes and edges. This converter is used like this: var data = vis.network.convertDot(dotString);");var e=Dw(t.dot);this.setData(e)}else if(t&&t.gephi){console.warn("The gephi property has been deprecated. Please use the static convertGephi method to convert gephi into vis.network format and use the normal data format with nodes and edges. This converter is used like this: var data = vis.network.convertGephi(gephiJson);");var i=Bw(t.gephi);this.setData(i)}else this.nodesHandler.setData(t&&t.nodes,!0),this.edgesHandler.setData(t&&t.edges,!0),this.body.emitter.emit("_dataChanged"),this.body.emitter.emit("_dataLoaded"),this.body.emitter.emit("initPhysics")},TN.prototype.destroy=function(){for(var t in this.body.emitter.emit("destroy"),this.body.emitter.off(),this.off(),delete this.groups,delete this.canvas,delete this.selectionHandler,delete this.interactionHandler,delete this.view,delete this.renderer,delete this.physics,delete this.layoutEngine,delete this.clustering,delete this.manipulation,delete this.nodesHandler,delete this.edgesHandler,delete this.configurator,delete this.images,this.body.nodes)Object.prototype.hasOwnProperty.call(this.body.nodes,t)&&delete this.body.nodes[t];for(var e in this.body.edges)Object.prototype.hasOwnProperty.call(this.body.edges,e)&&delete this.body.edges[e];hb(this.body.container)},TN.prototype._updateValueRange=function(t){var e,i=void 0,n=void 0,o=0;for(e in t)if(Object.prototype.hasOwnProperty.call(t,e)){var r=t[e].getValue();void 0!==r&&(i=void 0===i?r:Math.min(r,i),n=void 0===n?r:Math.max(r,n),o+=r)}if(void 0!==i&&void 0!==n)for(e in t)Object.prototype.hasOwnProperty.call(t,e)&&t[e].setValueRange(i,n,o)},TN.prototype.isActive=function(){return!this.activator||this.activator.active},TN.prototype.setSize=function(){return this.canvas.setSize.apply(this.canvas,arguments)},TN.prototype.canvasToDOM=function(){return this.canvas.canvasToDOM.apply(this.canvas,arguments)},TN.prototype.DOMtoCanvas=function(){return this.canvas.DOMtoCanvas.apply(this.canvas,arguments)},TN.prototype.findNode=function(){return this.clustering.findNode.apply(this.clustering,arguments)},TN.prototype.isCluster=function(){return this.clustering.isCluster.apply(this.clustering,arguments)},TN.prototype.openCluster=function(){return this.clustering.openCluster.apply(this.clustering,arguments)},TN.prototype.cluster=function(){return this.clustering.cluster.apply(this.clustering,arguments)},TN.prototype.getNodesInCluster=function(){return this.clustering.getNodesInCluster.apply(this.clustering,arguments)},TN.prototype.clusterByConnection=function(){return this.clustering.clusterByConnection.apply(this.clustering,arguments)},TN.prototype.clusterByHubsize=function(){return this.clustering.clusterByHubsize.apply(this.clustering,arguments)},TN.prototype.updateClusteredNode=function(){return this.clustering.updateClusteredNode.apply(this.clustering,arguments)},TN.prototype.getClusteredEdges=function(){return this.clustering.getClusteredEdges.apply(this.clustering,arguments)},TN.prototype.getBaseEdge=function(){return this.clustering.getBaseEdge.apply(this.clustering,arguments)},TN.prototype.getBaseEdges=function(){return this.clustering.getBaseEdges.apply(this.clustering,arguments)},TN.prototype.updateEdge=function(){return this.clustering.updateEdge.apply(this.clustering,arguments)},TN.prototype.clusterOutliers=function(){return this.clustering.clusterOutliers.apply(this.clustering,arguments)},TN.prototype.getSeed=function(){return this.layoutEngine.getSeed.apply(this.layoutEngine,arguments)},TN.prototype.enableEditMode=function(){return this.manipulation.enableEditMode.apply(this.manipulation,arguments)},TN.prototype.disableEditMode=function(){return this.manipulation.disableEditMode.apply(this.manipulation,arguments)},TN.prototype.addNodeMode=function(){return this.manipulation.addNodeMode.apply(this.manipulation,arguments)},TN.prototype.editNode=function(){return this.manipulation.editNode.apply(this.manipulation,arguments)},TN.prototype.editNodeMode=function(){return console.warn("Deprecated: Please use editNode instead of editNodeMode."),this.manipulation.editNode.apply(this.manipulation,arguments)},TN.prototype.addEdgeMode=function(){return this.manipulation.addEdgeMode.apply(this.manipulation,arguments)},TN.prototype.editEdgeMode=function(){return this.manipulation.editEdgeMode.apply(this.manipulation,arguments)},TN.prototype.deleteSelected=function(){return this.manipulation.deleteSelected.apply(this.manipulation,arguments)},TN.prototype.getPositions=function(){return this.nodesHandler.getPositions.apply(this.nodesHandler,arguments)},TN.prototype.getPosition=function(){return this.nodesHandler.getPosition.apply(this.nodesHandler,arguments)},TN.prototype.storePositions=function(){return this.nodesHandler.storePositions.apply(this.nodesHandler,arguments)},TN.prototype.moveNode=function(){return this.nodesHandler.moveNode.apply(this.nodesHandler,arguments)},TN.prototype.getBoundingBox=function(){return this.nodesHandler.getBoundingBox.apply(this.nodesHandler,arguments)},TN.prototype.getConnectedNodes=function(t){return void 0!==this.body.nodes[t]?this.nodesHandler.getConnectedNodes.apply(this.nodesHandler,arguments):this.edgesHandler.getConnectedNodes.apply(this.edgesHandler,arguments)},TN.prototype.getConnectedEdges=function(){return this.nodesHandler.getConnectedEdges.apply(this.nodesHandler,arguments)},TN.prototype.startSimulation=function(){return this.physics.startSimulation.apply(this.physics,arguments)},TN.prototype.stopSimulation=function(){return this.physics.stopSimulation.apply(this.physics,arguments)},TN.prototype.stabilize=function(){return this.physics.stabilize.apply(this.physics,arguments)},TN.prototype.getSelection=function(){return this.selectionHandler.getSelection.apply(this.selectionHandler,arguments)},TN.prototype.setSelection=function(){return this.selectionHandler.setSelection.apply(this.selectionHandler,arguments)},TN.prototype.getSelectedNodes=function(){return this.selectionHandler.getSelectedNodeIds.apply(this.selectionHandler,arguments)},TN.prototype.getSelectedEdges=function(){return this.selectionHandler.getSelectedEdgeIds.apply(this.selectionHandler,arguments)},TN.prototype.getNodeAt=function(){var t=this.selectionHandler.getNodeAt.apply(this.selectionHandler,arguments);return void 0!==t&&void 0!==t.id?t.id:t},TN.prototype.getEdgeAt=function(){var t=this.selectionHandler.getEdgeAt.apply(this.selectionHandler,arguments);return void 0!==t&&void 0!==t.id?t.id:t},TN.prototype.selectNodes=function(){return this.selectionHandler.selectNodes.apply(this.selectionHandler,arguments)},TN.prototype.selectEdges=function(){return this.selectionHandler.selectEdges.apply(this.selectionHandler,arguments)},TN.prototype.unselectAll=function(){this.selectionHandler.unselectAll.apply(this.selectionHandler,arguments),this.selectionHandler.commitWithoutEmitting.apply(this.selectionHandler),this.redraw()},TN.prototype.redraw=function(){return this.renderer.redraw.apply(this.renderer,arguments)},TN.prototype.getScale=function(){return this.view.getScale.apply(this.view,arguments)},TN.prototype.getViewPosition=function(){return this.view.getViewPosition.apply(this.view,arguments)},TN.prototype.fit=function(){return this.view.fit.apply(this.view,arguments)},TN.prototype.moveTo=function(){return this.view.moveTo.apply(this.view,arguments)},TN.prototype.focus=function(){return this.view.focus.apply(this.view,arguments)},TN.prototype.releaseNode=function(){return this.view.releaseNode.apply(this.view,arguments)},TN.prototype.getOptionsFromConfigurator=function(){var t={};return this.configurator&&(t=this.configurator.getOptions.apply(this.configurator)),t};var IN=Object.freeze({__proto__:null,cleanupElements:PN,drawBar:function(t,e,i,n,o,r,s,a){if(0!=n){n<0&&(e-=n*=-1);var h=DN("rect",r,s);h.setAttributeNS(null,"x",t-.5*i),h.setAttributeNS(null,"y",e),h.setAttributeNS(null,"width",i),h.setAttributeNS(null,"height",n),h.setAttributeNS(null,"class",o),a&&h.setAttributeNS(null,"style",a)}},drawPoint:function(t,e,i,n,o,r){var s;if("circle"==i.style?((s=DN("circle",n,o)).setAttributeNS(null,"cx",t),s.setAttributeNS(null,"cy",e),s.setAttributeNS(null,"r",.5*i.size)):((s=DN("rect",n,o)).setAttributeNS(null,"x",t-.5*i.size),s.setAttributeNS(null,"y",e-.5*i.size),s.setAttributeNS(null,"width",i.size),s.setAttributeNS(null,"height",i.size)),void 0!==i.styles&&s.setAttributeNS(null,"style",i.styles),s.setAttributeNS(null,"class",i.className+" vis-point"),r){var a=DN("text",n,o);r.xOffset&&(t+=r.xOffset),r.yOffset&&(e+=r.yOffset),r.content&&(a.textContent=r.content),r.className&&a.setAttributeNS(null,"class",r.className+" vis-label"),a.setAttributeNS(null,"x",t),a.setAttributeNS(null,"y",e)}return s},getDOMElement:function(t,e,i,n){var o;return Object.prototype.hasOwnProperty.call(e,t)?e[t].redundant.length>0?(o=e[t].redundant[0],e[t].redundant.shift()):(o=document.createElement(t),void 0!==n?i.insertBefore(o,n):i.appendChild(o)):(o=document.createElement(t),e[t]={used:[],redundant:[]},void 0!==n?i.insertBefore(o,n):i.appendChild(o)),e[t].used.push(o),o},getSVGElement:DN,prepareElements:MN,resetElements:function(t){MN(t),PN(t),MN(t)}}),BN={Images:Aw,dotparser:Iw,gephiParser:Nw,allOptions:ON,convertDot:Dw,convertGephi:Bw},NN=Object.freeze({__proto__:null,DOMutil:IN,DataSet:GM,DataView:KM,Hammer:Qb,Network:TN,Queue:UM,data:QM,keycharm:NI,network:BN,util:iw});t.DOMutil=IN,t.DataSet=GM,t.DataView=KM,t.Hammer=Qb,t.Network=TN,t.Queue=UM,t.data=QM,t.default=NN,t.keycharm=NI,t.network=BN,t.util=iw,Object.defineProperty(t,"__esModule",{value:!0})})); +//# sourceMappingURL=vis-network.min.js.map diff --git a/Perlite/perlite/.js/vis-network.min.js.map b/Perlite/perlite/.js/vis-network.min.js.map new file mode 100644 index 0000000..9304f30 --- /dev/null +++ b/Perlite/perlite/.js/vis-network.min.js.map @@ -0,0 +1 @@ +{"version":3,"file":"vis-network.min.js","sources":["../node_modules/core-js-pure/internals/global.js","../node_modules/core-js-pure/internals/fails.js","../node_modules/core-js-pure/internals/function-bind-native.js","../node_modules/core-js-pure/internals/function-apply.js","../node_modules/core-js-pure/internals/function-uncurry-this.js","../node_modules/core-js-pure/internals/classof-raw.js","../node_modules/core-js-pure/internals/function-uncurry-this-clause.js","../node_modules/core-js-pure/internals/document-all.js","../node_modules/core-js-pure/internals/is-callable.js","../node_modules/core-js-pure/internals/descriptors.js","../node_modules/core-js-pure/internals/function-call.js","../node_modules/core-js-pure/internals/object-property-is-enumerable.js","../node_modules/core-js-pure/internals/create-property-descriptor.js","../node_modules/core-js-pure/internals/engine-v8-version.js","../node_modules/core-js-pure/internals/indexed-object.js","../node_modules/core-js-pure/internals/is-null-or-undefined.js","../node_modules/core-js-pure/internals/require-object-coercible.js","../node_modules/core-js-pure/internals/to-indexed-object.js","../node_modules/core-js-pure/internals/is-object.js","../node_modules/core-js-pure/internals/path.js","../node_modules/core-js-pure/internals/get-built-in.js","../node_modules/core-js-pure/internals/object-is-prototype-of.js","../node_modules/core-js-pure/internals/engine-user-agent.js","../node_modules/core-js-pure/internals/symbol-constructor-detection.js","../node_modules/core-js-pure/internals/use-symbol-as-uid.js","../node_modules/core-js-pure/internals/is-symbol.js","../node_modules/core-js-pure/internals/try-to-string.js","../node_modules/core-js-pure/internals/a-callable.js","../node_modules/core-js-pure/internals/get-method.js","../node_modules/core-js-pure/internals/ordinary-to-primitive.js","../node_modules/core-js-pure/internals/define-global-property.js","../node_modules/core-js-pure/internals/shared-store.js","../node_modules/core-js-pure/internals/shared.js","../node_modules/core-js-pure/internals/to-object.js","../node_modules/core-js-pure/internals/has-own-property.js","../node_modules/core-js-pure/internals/uid.js","../node_modules/core-js-pure/internals/well-known-symbol.js","../node_modules/core-js-pure/internals/to-primitive.js","../node_modules/core-js-pure/internals/to-property-key.js","../node_modules/core-js-pure/internals/document-create-element.js","../node_modules/core-js-pure/internals/ie8-dom-define.js","../node_modules/core-js-pure/internals/object-get-own-property-descriptor.js","../node_modules/core-js-pure/internals/is-forced.js","../node_modules/core-js-pure/internals/function-bind-context.js","../node_modules/core-js-pure/internals/v8-prototype-define-bug.js","../node_modules/core-js-pure/internals/an-object.js","../node_modules/core-js-pure/internals/object-define-property.js","../node_modules/core-js-pure/internals/create-non-enumerable-property.js","../node_modules/core-js-pure/internals/export.js","../node_modules/core-js-pure/internals/math-trunc.js","../node_modules/core-js-pure/internals/to-integer-or-infinity.js","../node_modules/core-js-pure/internals/to-absolute-index.js","../node_modules/core-js-pure/internals/to-length.js","../node_modules/core-js-pure/internals/length-of-array-like.js","../node_modules/core-js-pure/internals/array-includes.js","../node_modules/core-js-pure/internals/hidden-keys.js","../node_modules/core-js-pure/internals/object-keys-internal.js","../node_modules/core-js-pure/internals/enum-bug-keys.js","../node_modules/core-js-pure/internals/object-keys.js","../node_modules/core-js-pure/internals/object-get-own-property-symbols.js","../node_modules/core-js-pure/internals/object-assign.js","../node_modules/core-js-pure/modules/es.object.assign.js","../node_modules/core-js-pure/es/object/assign.js","../node_modules/core-js-pure/internals/array-slice.js","../node_modules/core-js-pure/internals/function-bind.js","../node_modules/core-js-pure/modules/es.function.bind.js","../node_modules/core-js-pure/internals/entry-virtual.js","../node_modules/core-js-pure/es/function/virtual/bind.js","../node_modules/core-js-pure/es/instance/bind.js","../node_modules/core-js-pure/stable/instance/bind.js","../node_modules/@babel/runtime-corejs3/core-js-stable/instance/bind.js","../lib/network/shapes.ts","../node_modules/component-emitter/index.js","../node_modules/core-js-pure/internals/to-string-tag-support.js","../node_modules/core-js-pure/internals/internal-state.js","../node_modules/core-js-pure/internals/classof.js","../node_modules/core-js-pure/internals/to-string.js","../node_modules/core-js-pure/internals/string-multibyte.js","../node_modules/core-js-pure/internals/weak-map-basic-detection.js","../node_modules/core-js-pure/internals/shared-key.js","../node_modules/core-js-pure/internals/function-name.js","../node_modules/core-js-pure/internals/object-define-properties.js","../node_modules/core-js-pure/internals/html.js","../node_modules/core-js-pure/internals/object-create.js","../node_modules/core-js-pure/internals/iterators-core.js","../node_modules/core-js-pure/internals/correct-prototype-getter.js","../node_modules/core-js-pure/internals/object-get-prototype-of.js","../node_modules/core-js-pure/internals/define-built-in.js","../node_modules/core-js-pure/internals/object-to-string.js","../node_modules/core-js-pure/internals/set-to-string-tag.js","../node_modules/core-js-pure/internals/iterators.js","../node_modules/core-js-pure/internals/iterator-create-constructor.js","../node_modules/core-js-pure/internals/function-uncurry-this-accessor.js","../node_modules/core-js-pure/internals/a-possible-prototype.js","../node_modules/core-js-pure/internals/object-set-prototype-of.js","../node_modules/core-js-pure/internals/iterator-define.js","../node_modules/core-js-pure/internals/create-iter-result-object.js","../node_modules/core-js-pure/modules/es.string.iterator.js","../node_modules/core-js-pure/internals/iterator-close.js","../node_modules/core-js-pure/internals/call-with-safe-iteration-closing.js","../node_modules/core-js-pure/internals/is-array-iterator-method.js","../node_modules/core-js-pure/internals/inspect-source.js","../node_modules/core-js-pure/internals/is-constructor.js","../node_modules/core-js-pure/internals/create-property.js","../node_modules/core-js-pure/internals/get-iterator-method.js","../node_modules/core-js-pure/internals/get-iterator.js","../node_modules/core-js-pure/internals/array-from.js","../node_modules/core-js-pure/internals/check-correctness-of-iteration.js","../node_modules/core-js-pure/modules/es.array.from.js","../node_modules/core-js-pure/es/array/from.js","../node_modules/core-js-pure/stable/array/from.js","../node_modules/@babel/runtime-corejs3/core-js-stable/array/from.js","../node_modules/core-js-pure/modules/es.array.iterator.js","../node_modules/core-js-pure/es/get-iterator-method.js","../node_modules/core-js-pure/modules/web.dom-collections.iterator.js","../node_modules/core-js-pure/internals/dom-iterables.js","../node_modules/core-js-pure/stable/get-iterator-method.js","../node_modules/core-js-pure/features/get-iterator-method.js","../node_modules/@babel/runtime-corejs3/core-js/get-iterator-method.js","../node_modules/@babel/runtime-corejs3/helpers/esm/classCallCheck.js","../node_modules/core-js-pure/modules/es.object.define-property.js","../node_modules/core-js-pure/es/object/define-property.js","../node_modules/core-js-pure/stable/object/define-property.js","../node_modules/core-js-pure/features/object/define-property.js","../node_modules/core-js-pure/actual/object/define-property.js","../node_modules/core-js-pure/internals/is-array.js","../node_modules/core-js-pure/internals/does-not-exceed-safe-integer.js","../node_modules/core-js-pure/internals/array-species-constructor.js","../node_modules/core-js-pure/internals/array-species-create.js","../node_modules/core-js-pure/internals/array-method-has-species-support.js","../node_modules/core-js-pure/modules/es.array.concat.js","../node_modules/core-js-pure/internals/object-get-own-property-names.js","../node_modules/core-js-pure/internals/array-slice-simple.js","../node_modules/core-js-pure/internals/object-get-own-property-names-external.js","../node_modules/core-js-pure/internals/define-built-in-accessor.js","../node_modules/core-js-pure/internals/well-known-symbol-wrapped.js","../node_modules/core-js-pure/internals/well-known-symbol-define.js","../node_modules/core-js-pure/internals/symbol-define-to-primitive.js","../node_modules/core-js-pure/internals/array-iteration.js","../node_modules/core-js-pure/modules/es.symbol.constructor.js","../node_modules/core-js-pure/internals/symbol-registry-detection.js","../node_modules/core-js-pure/modules/es.symbol.for.js","../node_modules/core-js-pure/modules/es.symbol.key-for.js","../node_modules/core-js-pure/internals/get-json-replacer-function.js","../node_modules/core-js-pure/modules/es.json.stringify.js","../node_modules/core-js-pure/modules/es.object.get-own-property-symbols.js","../node_modules/core-js-pure/modules/es.symbol.async-iterator.js","../node_modules/core-js-pure/modules/es.symbol.has-instance.js","../node_modules/core-js-pure/modules/es.symbol.is-concat-spreadable.js","../node_modules/core-js-pure/modules/es.symbol.iterator.js","../node_modules/core-js-pure/modules/es.symbol.match.js","../node_modules/core-js-pure/modules/es.symbol.match-all.js","../node_modules/core-js-pure/modules/es.symbol.replace.js","../node_modules/core-js-pure/modules/es.symbol.search.js","../node_modules/core-js-pure/modules/es.symbol.species.js","../node_modules/core-js-pure/modules/es.symbol.split.js","../node_modules/core-js-pure/modules/es.symbol.to-primitive.js","../node_modules/core-js-pure/modules/es.symbol.to-string-tag.js","../node_modules/core-js-pure/modules/es.symbol.unscopables.js","../node_modules/core-js-pure/modules/es.json.to-string-tag.js","../node_modules/core-js-pure/es/symbol/index.js","../node_modules/core-js-pure/stable/symbol/index.js","../node_modules/core-js-pure/modules/esnext.function.metadata.js","../node_modules/core-js-pure/modules/esnext.symbol.async-dispose.js","../node_modules/core-js-pure/modules/esnext.symbol.dispose.js","../node_modules/core-js-pure/modules/esnext.symbol.metadata.js","../node_modules/core-js-pure/actual/symbol/index.js","../node_modules/core-js-pure/internals/symbol-is-registered.js","../node_modules/core-js-pure/modules/esnext.symbol.is-registered-symbol.js","../node_modules/core-js-pure/internals/symbol-is-well-known.js","../node_modules/core-js-pure/modules/esnext.symbol.is-well-known-symbol.js","../node_modules/core-js-pure/modules/esnext.symbol.matcher.js","../node_modules/core-js-pure/modules/esnext.symbol.observable.js","../node_modules/core-js-pure/modules/esnext.symbol.is-registered.js","../node_modules/core-js-pure/modules/esnext.symbol.is-well-known.js","../node_modules/core-js-pure/modules/esnext.symbol.metadata-key.js","../node_modules/core-js-pure/modules/esnext.symbol.pattern-match.js","../node_modules/core-js-pure/modules/esnext.symbol.replace-all.js","../node_modules/core-js-pure/full/symbol/index.js","../node_modules/core-js-pure/features/symbol/index.js","../node_modules/core-js-pure/stable/symbol/iterator.js","../node_modules/core-js-pure/es/symbol/iterator.js","../node_modules/core-js-pure/features/symbol/iterator.js","../node_modules/core-js-pure/actual/symbol/iterator.js","../node_modules/@babel/runtime-corejs3/helpers/esm/typeof.js","../node_modules/core-js-pure/es/symbol/to-primitive.js","../node_modules/@babel/runtime-corejs3/helpers/esm/toPropertyKey.js","../node_modules/@babel/runtime-corejs3/helpers/esm/toPrimitive.js","../node_modules/@babel/runtime-corejs3/helpers/esm/createClass.js","../node_modules/core-js-pure/modules/es.array.is-array.js","../node_modules/core-js-pure/es/array/is-array.js","../node_modules/core-js-pure/stable/array/is-array.js","../node_modules/core-js-pure/actual/array/is-array.js","../node_modules/core-js-pure/internals/array-set-length.js","../node_modules/core-js-pure/modules/es.array.push.js","../node_modules/core-js-pure/es/array/virtual/push.js","../node_modules/core-js-pure/es/instance/push.js","../node_modules/core-js-pure/stable/instance/push.js","../node_modules/core-js-pure/features/instance/push.js","../node_modules/core-js-pure/modules/es.array.slice.js","../node_modules/core-js-pure/es/array/virtual/slice.js","../node_modules/core-js-pure/es/instance/slice.js","../node_modules/core-js-pure/stable/instance/slice.js","../node_modules/core-js-pure/features/instance/slice.js","../node_modules/core-js-pure/actual/instance/slice.js","../node_modules/core-js-pure/actual/array/from.js","../node_modules/@babel/runtime-corejs3/helpers/esm/arrayLikeToArray.js","../node_modules/@babel/runtime-corejs3/helpers/esm/unsupportedIterableToArray.js","../node_modules/@babel/runtime-corejs3/helpers/esm/slicedToArray.js","../node_modules/@babel/runtime-corejs3/helpers/esm/arrayWithHoles.js","../node_modules/@babel/runtime-corejs3/helpers/esm/iterableToArrayLimit.js","../node_modules/@babel/runtime-corejs3/helpers/esm/nonIterableRest.js","../node_modules/@babel/runtime-corejs3/helpers/esm/toConsumableArray.js","../node_modules/@babel/runtime-corejs3/helpers/esm/arrayWithoutHoles.js","../node_modules/@babel/runtime-corejs3/helpers/esm/iterableToArray.js","../node_modules/@babel/runtime-corejs3/helpers/esm/nonIterableSpread.js","../node_modules/@babel/runtime-corejs3/core-js-stable/symbol.js","../node_modules/core-js-pure/es/array/virtual/concat.js","../node_modules/core-js-pure/es/instance/concat.js","../node_modules/core-js-pure/stable/instance/concat.js","../node_modules/@babel/runtime-corejs3/core-js-stable/instance/slice.js","../node_modules/core-js-pure/internals/own-keys.js","../node_modules/core-js-pure/modules/es.reflect.own-keys.js","../node_modules/core-js-pure/es/reflect/own-keys.js","../node_modules/@babel/runtime-corejs3/core-js-stable/array/is-array.js","../node_modules/core-js-pure/modules/es.array.map.js","../node_modules/core-js-pure/es/array/virtual/map.js","../node_modules/core-js-pure/es/instance/map.js","../node_modules/core-js-pure/stable/instance/map.js","../node_modules/core-js-pure/modules/es.object.keys.js","../node_modules/core-js-pure/es/object/keys.js","../node_modules/core-js-pure/modules/es.date.now.js","../node_modules/core-js-pure/es/date/now.js","../node_modules/core-js-pure/internals/array-method-is-strict.js","../node_modules/core-js-pure/internals/array-for-each.js","../node_modules/core-js-pure/modules/es.array.for-each.js","../node_modules/core-js-pure/es/array/virtual/for-each.js","../node_modules/core-js-pure/stable/instance/for-each.js","../node_modules/core-js-pure/stable/array/virtual/for-each.js","../node_modules/@babel/runtime-corejs3/core-js-stable/instance/for-each.js","../node_modules/core-js-pure/modules/es.array.reverse.js","../node_modules/core-js-pure/es/array/virtual/reverse.js","../node_modules/core-js-pure/es/instance/reverse.js","../node_modules/core-js-pure/stable/instance/reverse.js","../node_modules/@babel/runtime-corejs3/core-js-stable/instance/reverse.js","../node_modules/core-js-pure/internals/delete-property-or-throw.js","../node_modules/core-js-pure/modules/es.array.splice.js","../node_modules/core-js-pure/es/array/virtual/splice.js","../node_modules/core-js-pure/es/instance/splice.js","../node_modules/core-js-pure/stable/instance/splice.js","../node_modules/core-js-pure/modules/es.array.includes.js","../node_modules/core-js-pure/es/array/virtual/includes.js","../node_modules/core-js-pure/internals/is-regexp.js","../node_modules/core-js-pure/internals/not-a-regexp.js","../node_modules/core-js-pure/internals/correct-is-regexp-logic.js","../node_modules/core-js-pure/modules/es.string.includes.js","../node_modules/core-js-pure/es/string/virtual/includes.js","../node_modules/core-js-pure/es/instance/includes.js","../node_modules/core-js-pure/stable/instance/includes.js","../node_modules/core-js-pure/modules/es.object.get-prototype-of.js","../node_modules/core-js-pure/es/object/get-prototype-of.js","../node_modules/core-js-pure/stable/object/get-prototype-of.js","../node_modules/@babel/runtime-corejs3/core-js-stable/object/get-prototype-of.js","../node_modules/core-js-pure/modules/es.array.filter.js","../node_modules/core-js-pure/es/array/virtual/filter.js","../node_modules/core-js-pure/es/instance/filter.js","../node_modules/core-js-pure/stable/instance/filter.js","../node_modules/core-js-pure/internals/object-to-array.js","../node_modules/core-js-pure/modules/es.object.values.js","../node_modules/core-js-pure/es/object/values.js","../node_modules/core-js-pure/internals/whitespaces.js","../node_modules/core-js-pure/internals/string-trim.js","../node_modules/core-js-pure/internals/number-parse-int.js","../node_modules/core-js-pure/modules/es.parse-int.js","../node_modules/core-js-pure/es/parse-int.js","../node_modules/core-js-pure/modules/es.array.index-of.js","../node_modules/core-js-pure/es/array/virtual/index-of.js","../node_modules/core-js-pure/es/instance/index-of.js","../node_modules/core-js-pure/stable/instance/index-of.js","../node_modules/core-js-pure/modules/es.object.entries.js","../node_modules/core-js-pure/es/object/entries.js","../node_modules/core-js-pure/modules/es.object.create.js","../node_modules/core-js-pure/es/object/create.js","../node_modules/core-js-pure/stable/object/create.js","../node_modules/@babel/runtime-corejs3/core-js-stable/object/create.js","../node_modules/core-js-pure/es/json/stringify.js","../node_modules/core-js-pure/stable/json/stringify.js","../node_modules/core-js-pure/internals/engine-is-bun.js","../node_modules/core-js-pure/internals/validate-arguments-length.js","../node_modules/core-js-pure/internals/schedulers-fix.js","../node_modules/core-js-pure/modules/web.set-interval.js","../node_modules/core-js-pure/modules/web.set-timeout.js","../node_modules/core-js-pure/stable/set-timeout.js","../node_modules/core-js-pure/internals/array-fill.js","../node_modules/core-js-pure/modules/es.array.fill.js","../node_modules/core-js-pure/es/array/virtual/fill.js","../node_modules/@egjs/hammerjs/dist/hammer.esm.js","../node_modules/core-js-pure/es/instance/fill.js","../node_modules/core-js-pure/stable/instance/fill.js","../node_modules/vis-util/esnext/esm/vis-util.js","../lib/network/dotparser.js","../lib/network/gephiParser.ts","../lib/network/locales.ts","../lib/network/CachedImage.js","../lib/network/Images.js","../node_modules/core-js-pure/internals/array-buffer-non-extensible.js","../node_modules/core-js-pure/internals/object-is-extensible.js","../node_modules/core-js-pure/internals/freezing.js","../node_modules/core-js-pure/internals/internal-metadata.js","../node_modules/core-js-pure/internals/iterate.js","../node_modules/core-js-pure/internals/an-instance.js","../node_modules/core-js-pure/internals/collection.js","../node_modules/core-js-pure/internals/define-built-ins.js","../node_modules/core-js-pure/internals/set-species.js","../node_modules/core-js-pure/internals/collection-strong.js","../node_modules/core-js-pure/modules/es.map.constructor.js","../node_modules/core-js-pure/es/map/index.js","../lib/network/modules/Groups.js","../node_modules/core-js-pure/modules/es.number.is-nan.js","../node_modules/core-js-pure/es/number/is-nan.js","../node_modules/core-js-pure/internals/number-is-finite.js","../node_modules/core-js-pure/modules/es.number.is-finite.js","../node_modules/core-js-pure/es/number/is-finite.js","../node_modules/core-js-pure/modules/es.array.some.js","../node_modules/core-js-pure/es/array/virtual/some.js","../node_modules/core-js-pure/es/instance/some.js","../node_modules/core-js-pure/stable/instance/some.js","../node_modules/@babel/runtime-corejs3/helpers/esm/assertThisInitialized.js","../node_modules/core-js-pure/actual/object/create.js","../node_modules/core-js-pure/features/object/create.js","../node_modules/core-js-pure/modules/es.object.set-prototype-of.js","../node_modules/core-js-pure/es/object/set-prototype-of.js","../node_modules/core-js-pure/features/object/set-prototype-of.js","../node_modules/core-js-pure/actual/instance/bind.js","../node_modules/@babel/runtime-corejs3/helpers/esm/setPrototypeOf.js","../node_modules/@babel/runtime-corejs3/helpers/esm/inherits.js","../node_modules/@babel/runtime-corejs3/helpers/esm/possibleConstructorReturn.js","../node_modules/core-js-pure/actual/object/get-prototype-of.js","../node_modules/core-js-pure/features/object/get-prototype-of.js","../node_modules/@babel/runtime-corejs3/helpers/esm/getPrototypeOf.js","../node_modules/@babel/runtime-corejs3/helpers/esm/defineProperty.js","../node_modules/@babel/runtime-corejs3/helpers/typeof.js","../node_modules/core-js-pure/features/instance/for-each.js","../node_modules/core-js-pure/actual/instance/for-each.js","../node_modules/core-js-pure/internals/copy-constructor-properties.js","../node_modules/core-js-pure/internals/install-error-cause.js","../node_modules/core-js-pure/internals/error-stack-clear.js","../node_modules/core-js-pure/internals/error-stack-installable.js","../node_modules/core-js-pure/internals/error-stack-install.js","../node_modules/core-js-pure/internals/normalize-string-argument.js","../node_modules/core-js-pure/modules/es.aggregate-error.constructor.js","../node_modules/core-js-pure/internals/engine-is-node.js","../node_modules/core-js-pure/internals/task.js","../node_modules/core-js-pure/internals/a-constructor.js","../node_modules/core-js-pure/internals/species-constructor.js","../node_modules/core-js-pure/internals/engine-is-ios.js","../node_modules/core-js-pure/internals/queue.js","../node_modules/core-js-pure/internals/microtask.js","../node_modules/core-js-pure/internals/engine-is-ios-pebble.js","../node_modules/core-js-pure/internals/engine-is-webos-webkit.js","../node_modules/core-js-pure/internals/perform.js","../node_modules/core-js-pure/internals/promise-native-constructor.js","../node_modules/core-js-pure/internals/engine-is-deno.js","../node_modules/core-js-pure/internals/engine-is-browser.js","../node_modules/core-js-pure/internals/promise-constructor-detection.js","../node_modules/core-js-pure/internals/new-promise-capability.js","../node_modules/core-js-pure/modules/es.promise.constructor.js","../node_modules/core-js-pure/internals/host-report-errors.js","../node_modules/core-js-pure/internals/promise-statics-incorrect-iteration.js","../node_modules/core-js-pure/modules/es.promise.all.js","../node_modules/core-js-pure/modules/es.promise.catch.js","../node_modules/core-js-pure/modules/es.promise.race.js","../node_modules/core-js-pure/modules/es.promise.reject.js","../node_modules/core-js-pure/internals/promise-resolve.js","../node_modules/core-js-pure/modules/es.promise.resolve.js","../node_modules/core-js-pure/internals/is-pure.js","../node_modules/core-js-pure/modules/es.promise.all-settled.js","../node_modules/core-js-pure/modules/es.promise.any.js","../node_modules/core-js-pure/modules/es.promise.finally.js","../node_modules/core-js-pure/es/promise/index.js","../node_modules/core-js-pure/stable/promise/index.js","../node_modules/core-js-pure/modules/esnext.promise.with-resolvers.js","../node_modules/core-js-pure/actual/promise/index.js","../node_modules/core-js-pure/modules/esnext.promise.try.js","../node_modules/core-js-pure/full/promise/index.js","../node_modules/core-js-pure/features/promise/index.js","../node_modules/core-js-pure/features/instance/reverse.js","../node_modules/core-js-pure/actual/instance/reverse.js","../node_modules/@babel/runtime-corejs3/helpers/regeneratorRuntime.js","../node_modules/@babel/runtime-corejs3/regenerator/index.js","../node_modules/core-js-pure/internals/array-reduce.js","../node_modules/core-js-pure/modules/es.array.reduce.js","../node_modules/core-js-pure/es/array/virtual/reduce.js","../node_modules/core-js-pure/es/instance/reduce.js","../node_modules/core-js-pure/stable/instance/reduce.js","../node_modules/core-js-pure/internals/flatten-into-array.js","../node_modules/core-js-pure/modules/es.array.flat-map.js","../node_modules/core-js-pure/es/array/virtual/flat-map.js","../node_modules/core-js-pure/es/instance/flat-map.js","../node_modules/core-js-pure/stable/instance/flat-map.js","../node_modules/core-js-pure/modules/es.set.constructor.js","../node_modules/core-js-pure/es/set/index.js","../node_modules/@babel/runtime-corejs3/core-js-stable/symbol/iterator.js","../node_modules/core-js-pure/es/get-iterator.js","../node_modules/core-js-pure/internals/array-sort.js","../node_modules/core-js-pure/internals/engine-ff-version.js","../node_modules/core-js-pure/internals/engine-is-ie-or-edge.js","../node_modules/core-js-pure/internals/engine-webkit-version.js","../node_modules/core-js-pure/modules/es.array.sort.js","../node_modules/core-js-pure/es/array/virtual/sort.js","../node_modules/core-js-pure/es/instance/sort.js","../node_modules/core-js-pure/stable/instance/sort.js","../node_modules/core-js-pure/es/array/virtual/keys.js","../node_modules/core-js-pure/stable/instance/keys.js","../node_modules/core-js-pure/stable/array/virtual/keys.js","../node_modules/@babel/runtime-corejs3/core-js-stable/instance/keys.js","../node_modules/core-js-pure/es/array/virtual/values.js","../node_modules/core-js-pure/stable/instance/values.js","../node_modules/core-js-pure/stable/array/virtual/values.js","../node_modules/@babel/runtime-corejs3/core-js-stable/instance/values.js","../node_modules/core-js-pure/es/array/virtual/entries.js","../node_modules/core-js-pure/stable/instance/entries.js","../node_modules/core-js-pure/stable/array/virtual/entries.js","../node_modules/@babel/runtime-corejs3/core-js-stable/instance/entries.js","../node_modules/@babel/runtime-corejs3/core-js-stable/object/define-property.js","../node_modules/core-js-pure/modules/es.reflect.construct.js","../node_modules/core-js-pure/es/reflect/construct.js","../node_modules/core-js-pure/es/object/get-own-property-symbols.js","../node_modules/core-js-pure/modules/es.object.get-own-property-descriptor.js","../node_modules/core-js-pure/es/object/get-own-property-descriptor.js","../node_modules/core-js-pure/stable/object/get-own-property-descriptor.js","../node_modules/@babel/runtime-corejs3/core-js-stable/object/get-own-property-descriptor.js","../node_modules/core-js-pure/modules/es.object.get-own-property-descriptors.js","../node_modules/core-js-pure/es/object/get-own-property-descriptors.js","../node_modules/core-js-pure/modules/es.object.define-properties.js","../node_modules/core-js-pure/es/object/define-properties.js","../node_modules/uuid/dist/esm-browser/rng.js","../node_modules/uuid/dist/esm-browser/stringify.js","../node_modules/uuid/dist/esm-browser/native.js","../node_modules/uuid/dist/esm-browser/v4.js","../node_modules/vis-data/esnext/esm/vis-data.js","../node_modules/core-js-pure/internals/number-parse-float.js","../node_modules/core-js-pure/modules/es.parse-float.js","../node_modules/core-js-pure/es/parse-float.js","../node_modules/core-js-pure/modules/es.object.get-own-property-names.js","../node_modules/core-js-pure/es/object/get-own-property-names.js","../node_modules/core-js-pure/stable/object/get-own-property-names.js","../lib/network/modules/components/shared/ComponentUtil.js","../lib/network/modules/components/shared/LabelAccumulator.js","../lib/network/modules/components/shared/LabelSplitter.js","../lib/network/modules/components/shared/Label.js","../lib/network/modules/components/nodes/util/NodeBase.js","../lib/network/modules/components/nodes/shapes/Box.js","../lib/network/modules/components/nodes/util/CircleImageBase.js","../lib/network/modules/components/nodes/shapes/Circle.js","../lib/network/modules/components/nodes/shapes/CircularImage.js","../lib/network/modules/components/nodes/util/ShapeBase.js","../lib/network/modules/components/nodes/shapes/CustomShape.js","../lib/network/modules/components/nodes/shapes/Database.js","../lib/network/modules/components/nodes/shapes/Diamond.js","../lib/network/modules/components/nodes/shapes/Dot.js","../lib/network/modules/components/nodes/shapes/Ellipse.js","../lib/network/modules/components/nodes/shapes/Icon.js","../lib/network/modules/components/nodes/shapes/Image.js","../lib/network/modules/components/nodes/shapes/Square.js","../lib/network/modules/components/nodes/shapes/Hexagon.js","../lib/network/modules/components/nodes/shapes/Star.js","../lib/network/modules/components/nodes/shapes/Text.js","../lib/network/modules/components/nodes/shapes/Triangle.js","../lib/network/modules/components/nodes/shapes/TriangleDown.js","../lib/network/modules/components/Node.js","../lib/network/modules/NodesHandler.js","../node_modules/core-js-pure/internals/is-data-descriptor.js","../node_modules/core-js-pure/modules/es.reflect.get.js","../node_modules/core-js-pure/es/reflect/get.js","../node_modules/core-js-pure/actual/object/get-own-property-descriptor.js","../node_modules/@babel/runtime-corejs3/helpers/esm/get.js","../node_modules/@babel/runtime-corejs3/helpers/esm/superPropBase.js","../node_modules/core-js-pure/modules/es.math.hypot.js","../node_modules/core-js-pure/es/math/hypot.js","../lib/network/modules/components/edges/util/end-points.ts","../lib/network/modules/components/edges/util/edge-base.ts","../lib/network/modules/components/edges/util/bezier-edge-base.ts","../lib/network/modules/components/edges/bezier-edge-dynamic.ts","../lib/network/modules/components/edges/bezier-edge-static.ts","../lib/network/modules/components/edges/util/cubic-bezier-edge-base.ts","../lib/network/modules/components/edges/cubic-bezier-edge.ts","../lib/network/modules/components/edges/straight-edge.ts","../lib/network/modules/components/Edge.js","../lib/network/modules/EdgesHandler.js","../lib/network/modules/components/physics/BarnesHutSolver.js","../lib/network/modules/components/physics/RepulsionSolver.js","../lib/network/modules/components/physics/HierarchicalRepulsionSolver.js","../lib/network/modules/components/physics/SpringSolver.js","../lib/network/modules/components/physics/HierarchicalSpringSolver.js","../lib/network/modules/components/physics/CentralGravitySolver.js","../lib/network/modules/components/physics/FA2BasedRepulsionSolver.js","../lib/network/modules/components/physics/FA2BasedCentralGravitySolver.js","../lib/network/modules/PhysicsEngine.js","../lib/network/NetworkUtil.js","../lib/network/modules/components/nodes/Cluster.js","../lib/network/modules/Clustering.js","../lib/network/modules/CanvasRenderer.js","../node_modules/core-js-pure/stable/set-interval.js","../lib/hammerUtil.js","../lib/network/modules/Canvas.js","../lib/network/modules/View.js","../lib/network/modules/view-handler/index.ts","../node_modules/keycharm/src/keycharm.js","../lib/network/modules/components/NavigationHandler.js","../lib/network/modules/InteractionHandler.js","../node_modules/core-js-pure/internals/collection-weak.js","../node_modules/core-js-pure/modules/es.weak-map.constructor.js","../node_modules/core-js-pure/es/weak-map/index.js","../lib/network/modules/selection/selection-accumulator.ts","../lib/network/modules/SelectionHandler.js","../lib/network/modules/components/DirectionStrategy.js","../node_modules/core-js-pure/modules/es.array.every.js","../node_modules/core-js-pure/es/array/virtual/every.js","../node_modules/core-js-pure/es/instance/every.js","../node_modules/core-js-pure/stable/instance/every.js","../lib/network/modules/layout-engine/index.ts","../lib/network/modules/LayoutEngine.js","../lib/network/modules/ManipulationSystem.js","../lib/network/options.ts","../lib/network/modules/components/algorithms/FloydWarshall.js","../lib/network/modules/KamadaKawai.js","../lib/network/Network.js","../lib/DOMutil.js","../lib/network/locale-utils.ts","../lib/index-legacy.ts"],"sourcesContent":["'use strict';\nvar check = function (it) {\n return it && it.Math === Math && it;\n};\n\n// https://github.com/zloirock/core-js/issues/86#issuecomment-115759028\nmodule.exports =\n // eslint-disable-next-line es/no-global-this -- safe\n check(typeof globalThis == 'object' && globalThis) ||\n check(typeof window == 'object' && window) ||\n // eslint-disable-next-line no-restricted-globals -- safe\n check(typeof self == 'object' && self) ||\n check(typeof global == 'object' && global) ||\n // eslint-disable-next-line no-new-func -- fallback\n (function () { return this; })() || this || Function('return this')();\n","'use strict';\nmodule.exports = function (exec) {\n try {\n return !!exec();\n } catch (error) {\n return true;\n }\n};\n","'use strict';\nvar fails = require('../internals/fails');\n\nmodule.exports = !fails(function () {\n // eslint-disable-next-line es/no-function-prototype-bind -- safe\n var test = (function () { /* empty */ }).bind();\n // eslint-disable-next-line no-prototype-builtins -- safe\n return typeof test != 'function' || test.hasOwnProperty('prototype');\n});\n","'use strict';\nvar NATIVE_BIND = require('../internals/function-bind-native');\n\nvar FunctionPrototype = Function.prototype;\nvar apply = FunctionPrototype.apply;\nvar call = FunctionPrototype.call;\n\n// eslint-disable-next-line es/no-reflect -- safe\nmodule.exports = typeof Reflect == 'object' && Reflect.apply || (NATIVE_BIND ? call.bind(apply) : function () {\n return call.apply(apply, arguments);\n});\n","'use strict';\nvar NATIVE_BIND = require('../internals/function-bind-native');\n\nvar FunctionPrototype = Function.prototype;\nvar call = FunctionPrototype.call;\nvar uncurryThisWithBind = NATIVE_BIND && FunctionPrototype.bind.bind(call, call);\n\nmodule.exports = NATIVE_BIND ? uncurryThisWithBind : function (fn) {\n return function () {\n return call.apply(fn, arguments);\n };\n};\n","'use strict';\nvar uncurryThis = require('../internals/function-uncurry-this');\n\nvar toString = uncurryThis({}.toString);\nvar stringSlice = uncurryThis(''.slice);\n\nmodule.exports = function (it) {\n return stringSlice(toString(it), 8, -1);\n};\n","'use strict';\nvar classofRaw = require('../internals/classof-raw');\nvar uncurryThis = require('../internals/function-uncurry-this');\n\nmodule.exports = function (fn) {\n // Nashorn bug:\n // https://github.com/zloirock/core-js/issues/1128\n // https://github.com/zloirock/core-js/issues/1130\n if (classofRaw(fn) === 'Function') return uncurryThis(fn);\n};\n","'use strict';\nvar documentAll = typeof document == 'object' && document.all;\n\n// https://tc39.es/ecma262/#sec-IsHTMLDDA-internal-slot\n// eslint-disable-next-line unicorn/no-typeof-undefined -- required for testing\nvar IS_HTMLDDA = typeof documentAll == 'undefined' && documentAll !== undefined;\n\nmodule.exports = {\n all: documentAll,\n IS_HTMLDDA: IS_HTMLDDA\n};\n","'use strict';\nvar $documentAll = require('../internals/document-all');\n\nvar documentAll = $documentAll.all;\n\n// `IsCallable` abstract operation\n// https://tc39.es/ecma262/#sec-iscallable\nmodule.exports = $documentAll.IS_HTMLDDA ? function (argument) {\n return typeof argument == 'function' || argument === documentAll;\n} : function (argument) {\n return typeof argument == 'function';\n};\n","'use strict';\nvar fails = require('../internals/fails');\n\n// Detect IE8's incomplete defineProperty implementation\nmodule.exports = !fails(function () {\n // eslint-disable-next-line es/no-object-defineproperty -- required for testing\n return Object.defineProperty({}, 1, { get: function () { return 7; } })[1] !== 7;\n});\n","'use strict';\nvar NATIVE_BIND = require('../internals/function-bind-native');\n\nvar call = Function.prototype.call;\n\nmodule.exports = NATIVE_BIND ? call.bind(call) : function () {\n return call.apply(call, arguments);\n};\n","'use strict';\nvar $propertyIsEnumerable = {}.propertyIsEnumerable;\n// eslint-disable-next-line es/no-object-getownpropertydescriptor -- safe\nvar getOwnPropertyDescriptor = Object.getOwnPropertyDescriptor;\n\n// Nashorn ~ JDK8 bug\nvar NASHORN_BUG = getOwnPropertyDescriptor && !$propertyIsEnumerable.call({ 1: 2 }, 1);\n\n// `Object.prototype.propertyIsEnumerable` method implementation\n// https://tc39.es/ecma262/#sec-object.prototype.propertyisenumerable\nexports.f = NASHORN_BUG ? function propertyIsEnumerable(V) {\n var descriptor = getOwnPropertyDescriptor(this, V);\n return !!descriptor && descriptor.enumerable;\n} : $propertyIsEnumerable;\n","'use strict';\nmodule.exports = function (bitmap, value) {\n return {\n enumerable: !(bitmap & 1),\n configurable: !(bitmap & 2),\n writable: !(bitmap & 4),\n value: value\n };\n};\n","'use strict';\nvar global = require('../internals/global');\nvar userAgent = require('../internals/engine-user-agent');\n\nvar process = global.process;\nvar Deno = global.Deno;\nvar versions = process && process.versions || Deno && Deno.version;\nvar v8 = versions && versions.v8;\nvar match, version;\n\nif (v8) {\n match = v8.split('.');\n // in old Chrome, versions of V8 isn't V8 = Chrome / 10\n // but their correct versions are not interesting for us\n version = match[0] > 0 && match[0] < 4 ? 1 : +(match[0] + match[1]);\n}\n\n// BrowserFS NodeJS `process` polyfill incorrectly set `.v8` to `0.0`\n// so check `userAgent` even if `.v8` exists, but 0\nif (!version && userAgent) {\n match = userAgent.match(/Edge\\/(\\d+)/);\n if (!match || match[1] >= 74) {\n match = userAgent.match(/Chrome\\/(\\d+)/);\n if (match) version = +match[1];\n }\n}\n\nmodule.exports = version;\n","'use strict';\nvar uncurryThis = require('../internals/function-uncurry-this');\nvar fails = require('../internals/fails');\nvar classof = require('../internals/classof-raw');\n\nvar $Object = Object;\nvar split = uncurryThis(''.split);\n\n// fallback for non-array-like ES3 and non-enumerable old V8 strings\nmodule.exports = fails(function () {\n // throws an error in rhino, see https://github.com/mozilla/rhino/issues/346\n // eslint-disable-next-line no-prototype-builtins -- safe\n return !$Object('z').propertyIsEnumerable(0);\n}) ? function (it) {\n return classof(it) === 'String' ? split(it, '') : $Object(it);\n} : $Object;\n","'use strict';\n// we can't use just `it == null` since of `document.all` special case\n// https://tc39.es/ecma262/#sec-IsHTMLDDA-internal-slot-aec\nmodule.exports = function (it) {\n return it === null || it === undefined;\n};\n","'use strict';\nvar isNullOrUndefined = require('../internals/is-null-or-undefined');\n\nvar $TypeError = TypeError;\n\n// `RequireObjectCoercible` abstract operation\n// https://tc39.es/ecma262/#sec-requireobjectcoercible\nmodule.exports = function (it) {\n if (isNullOrUndefined(it)) throw new $TypeError(\"Can't call method on \" + it);\n return it;\n};\n","'use strict';\n// toObject with fallback for non-array-like ES3 strings\nvar IndexedObject = require('../internals/indexed-object');\nvar requireObjectCoercible = require('../internals/require-object-coercible');\n\nmodule.exports = function (it) {\n return IndexedObject(requireObjectCoercible(it));\n};\n","'use strict';\nvar isCallable = require('../internals/is-callable');\nvar $documentAll = require('../internals/document-all');\n\nvar documentAll = $documentAll.all;\n\nmodule.exports = $documentAll.IS_HTMLDDA ? function (it) {\n return typeof it == 'object' ? it !== null : isCallable(it) || it === documentAll;\n} : function (it) {\n return typeof it == 'object' ? it !== null : isCallable(it);\n};\n","'use strict';\nmodule.exports = {};\n","'use strict';\nvar path = require('../internals/path');\nvar global = require('../internals/global');\nvar isCallable = require('../internals/is-callable');\n\nvar aFunction = function (variable) {\n return isCallable(variable) ? variable : undefined;\n};\n\nmodule.exports = function (namespace, method) {\n return arguments.length < 2 ? aFunction(path[namespace]) || aFunction(global[namespace])\n : path[namespace] && path[namespace][method] || global[namespace] && global[namespace][method];\n};\n","'use strict';\nvar uncurryThis = require('../internals/function-uncurry-this');\n\nmodule.exports = uncurryThis({}.isPrototypeOf);\n","'use strict';\nmodule.exports = typeof navigator != 'undefined' && String(navigator.userAgent) || '';\n","'use strict';\n/* eslint-disable es/no-symbol -- required for testing */\nvar V8_VERSION = require('../internals/engine-v8-version');\nvar fails = require('../internals/fails');\nvar global = require('../internals/global');\n\nvar $String = global.String;\n\n// eslint-disable-next-line es/no-object-getownpropertysymbols -- required for testing\nmodule.exports = !!Object.getOwnPropertySymbols && !fails(function () {\n var symbol = Symbol('symbol detection');\n // Chrome 38 Symbol has incorrect toString conversion\n // `get-own-property-symbols` polyfill symbols converted to object are not Symbol instances\n // nb: Do not call `String` directly to avoid this being optimized out to `symbol+''` which will,\n // of course, fail.\n return !$String(symbol) || !(Object(symbol) instanceof Symbol) ||\n // Chrome 38-40 symbols are not inherited from DOM collections prototypes to instances\n !Symbol.sham && V8_VERSION && V8_VERSION < 41;\n});\n","'use strict';\n/* eslint-disable es/no-symbol -- required for testing */\nvar NATIVE_SYMBOL = require('../internals/symbol-constructor-detection');\n\nmodule.exports = NATIVE_SYMBOL\n && !Symbol.sham\n && typeof Symbol.iterator == 'symbol';\n","'use strict';\nvar getBuiltIn = require('../internals/get-built-in');\nvar isCallable = require('../internals/is-callable');\nvar isPrototypeOf = require('../internals/object-is-prototype-of');\nvar USE_SYMBOL_AS_UID = require('../internals/use-symbol-as-uid');\n\nvar $Object = Object;\n\nmodule.exports = USE_SYMBOL_AS_UID ? function (it) {\n return typeof it == 'symbol';\n} : function (it) {\n var $Symbol = getBuiltIn('Symbol');\n return isCallable($Symbol) && isPrototypeOf($Symbol.prototype, $Object(it));\n};\n","'use strict';\nvar $String = String;\n\nmodule.exports = function (argument) {\n try {\n return $String(argument);\n } catch (error) {\n return 'Object';\n }\n};\n","'use strict';\nvar isCallable = require('../internals/is-callable');\nvar tryToString = require('../internals/try-to-string');\n\nvar $TypeError = TypeError;\n\n// `Assert: IsCallable(argument) is true`\nmodule.exports = function (argument) {\n if (isCallable(argument)) return argument;\n throw new $TypeError(tryToString(argument) + ' is not a function');\n};\n","'use strict';\nvar aCallable = require('../internals/a-callable');\nvar isNullOrUndefined = require('../internals/is-null-or-undefined');\n\n// `GetMethod` abstract operation\n// https://tc39.es/ecma262/#sec-getmethod\nmodule.exports = function (V, P) {\n var func = V[P];\n return isNullOrUndefined(func) ? undefined : aCallable(func);\n};\n","'use strict';\nvar call = require('../internals/function-call');\nvar isCallable = require('../internals/is-callable');\nvar isObject = require('../internals/is-object');\n\nvar $TypeError = TypeError;\n\n// `OrdinaryToPrimitive` abstract operation\n// https://tc39.es/ecma262/#sec-ordinarytoprimitive\nmodule.exports = function (input, pref) {\n var fn, val;\n if (pref === 'string' && isCallable(fn = input.toString) && !isObject(val = call(fn, input))) return val;\n if (isCallable(fn = input.valueOf) && !isObject(val = call(fn, input))) return val;\n if (pref !== 'string' && isCallable(fn = input.toString) && !isObject(val = call(fn, input))) return val;\n throw new $TypeError(\"Can't convert object to primitive value\");\n};\n","'use strict';\nvar global = require('../internals/global');\n\n// eslint-disable-next-line es/no-object-defineproperty -- safe\nvar defineProperty = Object.defineProperty;\n\nmodule.exports = function (key, value) {\n try {\n defineProperty(global, key, { value: value, configurable: true, writable: true });\n } catch (error) {\n global[key] = value;\n } return value;\n};\n","'use strict';\nvar global = require('../internals/global');\nvar defineGlobalProperty = require('../internals/define-global-property');\n\nvar SHARED = '__core-js_shared__';\nvar store = global[SHARED] || defineGlobalProperty(SHARED, {});\n\nmodule.exports = store;\n","'use strict';\nvar IS_PURE = require('../internals/is-pure');\nvar store = require('../internals/shared-store');\n\n(module.exports = function (key, value) {\n return store[key] || (store[key] = value !== undefined ? value : {});\n})('versions', []).push({\n version: '3.33.0',\n mode: IS_PURE ? 'pure' : 'global',\n copyright: '© 2014-2023 Denis Pushkarev (zloirock.ru)',\n license: 'https://github.com/zloirock/core-js/blob/v3.33.0/LICENSE',\n source: 'https://github.com/zloirock/core-js'\n});\n","'use strict';\nvar requireObjectCoercible = require('../internals/require-object-coercible');\n\nvar $Object = Object;\n\n// `ToObject` abstract operation\n// https://tc39.es/ecma262/#sec-toobject\nmodule.exports = function (argument) {\n return $Object(requireObjectCoercible(argument));\n};\n","'use strict';\nvar uncurryThis = require('../internals/function-uncurry-this');\nvar toObject = require('../internals/to-object');\n\nvar hasOwnProperty = uncurryThis({}.hasOwnProperty);\n\n// `HasOwnProperty` abstract operation\n// https://tc39.es/ecma262/#sec-hasownproperty\n// eslint-disable-next-line es/no-object-hasown -- safe\nmodule.exports = Object.hasOwn || function hasOwn(it, key) {\n return hasOwnProperty(toObject(it), key);\n};\n","'use strict';\nvar uncurryThis = require('../internals/function-uncurry-this');\n\nvar id = 0;\nvar postfix = Math.random();\nvar toString = uncurryThis(1.0.toString);\n\nmodule.exports = function (key) {\n return 'Symbol(' + (key === undefined ? '' : key) + ')_' + toString(++id + postfix, 36);\n};\n","'use strict';\nvar global = require('../internals/global');\nvar shared = require('../internals/shared');\nvar hasOwn = require('../internals/has-own-property');\nvar uid = require('../internals/uid');\nvar NATIVE_SYMBOL = require('../internals/symbol-constructor-detection');\nvar USE_SYMBOL_AS_UID = require('../internals/use-symbol-as-uid');\n\nvar Symbol = global.Symbol;\nvar WellKnownSymbolsStore = shared('wks');\nvar createWellKnownSymbol = USE_SYMBOL_AS_UID ? Symbol['for'] || Symbol : Symbol && Symbol.withoutSetter || uid;\n\nmodule.exports = function (name) {\n if (!hasOwn(WellKnownSymbolsStore, name)) {\n WellKnownSymbolsStore[name] = NATIVE_SYMBOL && hasOwn(Symbol, name)\n ? Symbol[name]\n : createWellKnownSymbol('Symbol.' + name);\n } return WellKnownSymbolsStore[name];\n};\n","'use strict';\nvar call = require('../internals/function-call');\nvar isObject = require('../internals/is-object');\nvar isSymbol = require('../internals/is-symbol');\nvar getMethod = require('../internals/get-method');\nvar ordinaryToPrimitive = require('../internals/ordinary-to-primitive');\nvar wellKnownSymbol = require('../internals/well-known-symbol');\n\nvar $TypeError = TypeError;\nvar TO_PRIMITIVE = wellKnownSymbol('toPrimitive');\n\n// `ToPrimitive` abstract operation\n// https://tc39.es/ecma262/#sec-toprimitive\nmodule.exports = function (input, pref) {\n if (!isObject(input) || isSymbol(input)) return input;\n var exoticToPrim = getMethod(input, TO_PRIMITIVE);\n var result;\n if (exoticToPrim) {\n if (pref === undefined) pref = 'default';\n result = call(exoticToPrim, input, pref);\n if (!isObject(result) || isSymbol(result)) return result;\n throw new $TypeError(\"Can't convert object to primitive value\");\n }\n if (pref === undefined) pref = 'number';\n return ordinaryToPrimitive(input, pref);\n};\n","'use strict';\nvar toPrimitive = require('../internals/to-primitive');\nvar isSymbol = require('../internals/is-symbol');\n\n// `ToPropertyKey` abstract operation\n// https://tc39.es/ecma262/#sec-topropertykey\nmodule.exports = function (argument) {\n var key = toPrimitive(argument, 'string');\n return isSymbol(key) ? key : key + '';\n};\n","'use strict';\nvar global = require('../internals/global');\nvar isObject = require('../internals/is-object');\n\nvar document = global.document;\n// typeof document.createElement is 'object' in old IE\nvar EXISTS = isObject(document) && isObject(document.createElement);\n\nmodule.exports = function (it) {\n return EXISTS ? document.createElement(it) : {};\n};\n","'use strict';\nvar DESCRIPTORS = require('../internals/descriptors');\nvar fails = require('../internals/fails');\nvar createElement = require('../internals/document-create-element');\n\n// Thanks to IE8 for its funny defineProperty\nmodule.exports = !DESCRIPTORS && !fails(function () {\n // eslint-disable-next-line es/no-object-defineproperty -- required for testing\n return Object.defineProperty(createElement('div'), 'a', {\n get: function () { return 7; }\n }).a !== 7;\n});\n","'use strict';\nvar DESCRIPTORS = require('../internals/descriptors');\nvar call = require('../internals/function-call');\nvar propertyIsEnumerableModule = require('../internals/object-property-is-enumerable');\nvar createPropertyDescriptor = require('../internals/create-property-descriptor');\nvar toIndexedObject = require('../internals/to-indexed-object');\nvar toPropertyKey = require('../internals/to-property-key');\nvar hasOwn = require('../internals/has-own-property');\nvar IE8_DOM_DEFINE = require('../internals/ie8-dom-define');\n\n// eslint-disable-next-line es/no-object-getownpropertydescriptor -- safe\nvar $getOwnPropertyDescriptor = Object.getOwnPropertyDescriptor;\n\n// `Object.getOwnPropertyDescriptor` method\n// https://tc39.es/ecma262/#sec-object.getownpropertydescriptor\nexports.f = DESCRIPTORS ? $getOwnPropertyDescriptor : function getOwnPropertyDescriptor(O, P) {\n O = toIndexedObject(O);\n P = toPropertyKey(P);\n if (IE8_DOM_DEFINE) try {\n return $getOwnPropertyDescriptor(O, P);\n } catch (error) { /* empty */ }\n if (hasOwn(O, P)) return createPropertyDescriptor(!call(propertyIsEnumerableModule.f, O, P), O[P]);\n};\n","'use strict';\nvar fails = require('../internals/fails');\nvar isCallable = require('../internals/is-callable');\n\nvar replacement = /#|\\.prototype\\./;\n\nvar isForced = function (feature, detection) {\n var value = data[normalize(feature)];\n return value === POLYFILL ? true\n : value === NATIVE ? false\n : isCallable(detection) ? fails(detection)\n : !!detection;\n};\n\nvar normalize = isForced.normalize = function (string) {\n return String(string).replace(replacement, '.').toLowerCase();\n};\n\nvar data = isForced.data = {};\nvar NATIVE = isForced.NATIVE = 'N';\nvar POLYFILL = isForced.POLYFILL = 'P';\n\nmodule.exports = isForced;\n","'use strict';\nvar uncurryThis = require('../internals/function-uncurry-this-clause');\nvar aCallable = require('../internals/a-callable');\nvar NATIVE_BIND = require('../internals/function-bind-native');\n\nvar bind = uncurryThis(uncurryThis.bind);\n\n// optional / simple context binding\nmodule.exports = function (fn, that) {\n aCallable(fn);\n return that === undefined ? fn : NATIVE_BIND ? bind(fn, that) : function (/* ...args */) {\n return fn.apply(that, arguments);\n };\n};\n","'use strict';\nvar DESCRIPTORS = require('../internals/descriptors');\nvar fails = require('../internals/fails');\n\n// V8 ~ Chrome 36-\n// https://bugs.chromium.org/p/v8/issues/detail?id=3334\nmodule.exports = DESCRIPTORS && fails(function () {\n // eslint-disable-next-line es/no-object-defineproperty -- required for testing\n return Object.defineProperty(function () { /* empty */ }, 'prototype', {\n value: 42,\n writable: false\n }).prototype !== 42;\n});\n","'use strict';\nvar isObject = require('../internals/is-object');\n\nvar $String = String;\nvar $TypeError = TypeError;\n\n// `Assert: Type(argument) is Object`\nmodule.exports = function (argument) {\n if (isObject(argument)) return argument;\n throw new $TypeError($String(argument) + ' is not an object');\n};\n","'use strict';\nvar DESCRIPTORS = require('../internals/descriptors');\nvar IE8_DOM_DEFINE = require('../internals/ie8-dom-define');\nvar V8_PROTOTYPE_DEFINE_BUG = require('../internals/v8-prototype-define-bug');\nvar anObject = require('../internals/an-object');\nvar toPropertyKey = require('../internals/to-property-key');\n\nvar $TypeError = TypeError;\n// eslint-disable-next-line es/no-object-defineproperty -- safe\nvar $defineProperty = Object.defineProperty;\n// eslint-disable-next-line es/no-object-getownpropertydescriptor -- safe\nvar $getOwnPropertyDescriptor = Object.getOwnPropertyDescriptor;\nvar ENUMERABLE = 'enumerable';\nvar CONFIGURABLE = 'configurable';\nvar WRITABLE = 'writable';\n\n// `Object.defineProperty` method\n// https://tc39.es/ecma262/#sec-object.defineproperty\nexports.f = DESCRIPTORS ? V8_PROTOTYPE_DEFINE_BUG ? function defineProperty(O, P, Attributes) {\n anObject(O);\n P = toPropertyKey(P);\n anObject(Attributes);\n if (typeof O === 'function' && P === 'prototype' && 'value' in Attributes && WRITABLE in Attributes && !Attributes[WRITABLE]) {\n var current = $getOwnPropertyDescriptor(O, P);\n if (current && current[WRITABLE]) {\n O[P] = Attributes.value;\n Attributes = {\n configurable: CONFIGURABLE in Attributes ? Attributes[CONFIGURABLE] : current[CONFIGURABLE],\n enumerable: ENUMERABLE in Attributes ? Attributes[ENUMERABLE] : current[ENUMERABLE],\n writable: false\n };\n }\n } return $defineProperty(O, P, Attributes);\n} : $defineProperty : function defineProperty(O, P, Attributes) {\n anObject(O);\n P = toPropertyKey(P);\n anObject(Attributes);\n if (IE8_DOM_DEFINE) try {\n return $defineProperty(O, P, Attributes);\n } catch (error) { /* empty */ }\n if ('get' in Attributes || 'set' in Attributes) throw new $TypeError('Accessors not supported');\n if ('value' in Attributes) O[P] = Attributes.value;\n return O;\n};\n","'use strict';\nvar DESCRIPTORS = require('../internals/descriptors');\nvar definePropertyModule = require('../internals/object-define-property');\nvar createPropertyDescriptor = require('../internals/create-property-descriptor');\n\nmodule.exports = DESCRIPTORS ? function (object, key, value) {\n return definePropertyModule.f(object, key, createPropertyDescriptor(1, value));\n} : function (object, key, value) {\n object[key] = value;\n return object;\n};\n","'use strict';\nvar global = require('../internals/global');\nvar apply = require('../internals/function-apply');\nvar uncurryThis = require('../internals/function-uncurry-this-clause');\nvar isCallable = require('../internals/is-callable');\nvar getOwnPropertyDescriptor = require('../internals/object-get-own-property-descriptor').f;\nvar isForced = require('../internals/is-forced');\nvar path = require('../internals/path');\nvar bind = require('../internals/function-bind-context');\nvar createNonEnumerableProperty = require('../internals/create-non-enumerable-property');\nvar hasOwn = require('../internals/has-own-property');\n\nvar wrapConstructor = function (NativeConstructor) {\n var Wrapper = function (a, b, c) {\n if (this instanceof Wrapper) {\n switch (arguments.length) {\n case 0: return new NativeConstructor();\n case 1: return new NativeConstructor(a);\n case 2: return new NativeConstructor(a, b);\n } return new NativeConstructor(a, b, c);\n } return apply(NativeConstructor, this, arguments);\n };\n Wrapper.prototype = NativeConstructor.prototype;\n return Wrapper;\n};\n\n/*\n options.target - name of the target object\n options.global - target is the global object\n options.stat - export as static methods of target\n options.proto - export as prototype methods of target\n options.real - real prototype method for the `pure` version\n options.forced - export even if the native feature is available\n options.bind - bind methods to the target, required for the `pure` version\n options.wrap - wrap constructors to preventing global pollution, required for the `pure` version\n options.unsafe - use the simple assignment of property instead of delete + defineProperty\n options.sham - add a flag to not completely full polyfills\n options.enumerable - export as enumerable property\n options.dontCallGetSet - prevent calling a getter on target\n options.name - the .name of the function if it does not match the key\n*/\nmodule.exports = function (options, source) {\n var TARGET = options.target;\n var GLOBAL = options.global;\n var STATIC = options.stat;\n var PROTO = options.proto;\n\n var nativeSource = GLOBAL ? global : STATIC ? global[TARGET] : (global[TARGET] || {}).prototype;\n\n var target = GLOBAL ? path : path[TARGET] || createNonEnumerableProperty(path, TARGET, {})[TARGET];\n var targetPrototype = target.prototype;\n\n var FORCED, USE_NATIVE, VIRTUAL_PROTOTYPE;\n var key, sourceProperty, targetProperty, nativeProperty, resultProperty, descriptor;\n\n for (key in source) {\n FORCED = isForced(GLOBAL ? key : TARGET + (STATIC ? '.' : '#') + key, options.forced);\n // contains in native\n USE_NATIVE = !FORCED && nativeSource && hasOwn(nativeSource, key);\n\n targetProperty = target[key];\n\n if (USE_NATIVE) if (options.dontCallGetSet) {\n descriptor = getOwnPropertyDescriptor(nativeSource, key);\n nativeProperty = descriptor && descriptor.value;\n } else nativeProperty = nativeSource[key];\n\n // export native or implementation\n sourceProperty = (USE_NATIVE && nativeProperty) ? nativeProperty : source[key];\n\n if (USE_NATIVE && typeof targetProperty == typeof sourceProperty) continue;\n\n // bind methods to global for calling from export context\n if (options.bind && USE_NATIVE) resultProperty = bind(sourceProperty, global);\n // wrap global constructors for prevent changes in this version\n else if (options.wrap && USE_NATIVE) resultProperty = wrapConstructor(sourceProperty);\n // make static versions for prototype methods\n else if (PROTO && isCallable(sourceProperty)) resultProperty = uncurryThis(sourceProperty);\n // default case\n else resultProperty = sourceProperty;\n\n // add a flag to not completely full polyfills\n if (options.sham || (sourceProperty && sourceProperty.sham) || (targetProperty && targetProperty.sham)) {\n createNonEnumerableProperty(resultProperty, 'sham', true);\n }\n\n createNonEnumerableProperty(target, key, resultProperty);\n\n if (PROTO) {\n VIRTUAL_PROTOTYPE = TARGET + 'Prototype';\n if (!hasOwn(path, VIRTUAL_PROTOTYPE)) {\n createNonEnumerableProperty(path, VIRTUAL_PROTOTYPE, {});\n }\n // export virtual prototype methods\n createNonEnumerableProperty(path[VIRTUAL_PROTOTYPE], key, sourceProperty);\n // export real prototype methods\n if (options.real && targetPrototype && (FORCED || !targetPrototype[key])) {\n createNonEnumerableProperty(targetPrototype, key, sourceProperty);\n }\n }\n }\n};\n","'use strict';\nvar ceil = Math.ceil;\nvar floor = Math.floor;\n\n// `Math.trunc` method\n// https://tc39.es/ecma262/#sec-math.trunc\n// eslint-disable-next-line es/no-math-trunc -- safe\nmodule.exports = Math.trunc || function trunc(x) {\n var n = +x;\n return (n > 0 ? floor : ceil)(n);\n};\n","'use strict';\nvar trunc = require('../internals/math-trunc');\n\n// `ToIntegerOrInfinity` abstract operation\n// https://tc39.es/ecma262/#sec-tointegerorinfinity\nmodule.exports = function (argument) {\n var number = +argument;\n // eslint-disable-next-line no-self-compare -- NaN check\n return number !== number || number === 0 ? 0 : trunc(number);\n};\n","'use strict';\nvar toIntegerOrInfinity = require('../internals/to-integer-or-infinity');\n\nvar max = Math.max;\nvar min = Math.min;\n\n// Helper for a popular repeating case of the spec:\n// Let integer be ? ToInteger(index).\n// If integer < 0, let result be max((length + integer), 0); else let result be min(integer, length).\nmodule.exports = function (index, length) {\n var integer = toIntegerOrInfinity(index);\n return integer < 0 ? max(integer + length, 0) : min(integer, length);\n};\n","'use strict';\nvar toIntegerOrInfinity = require('../internals/to-integer-or-infinity');\n\nvar min = Math.min;\n\n// `ToLength` abstract operation\n// https://tc39.es/ecma262/#sec-tolength\nmodule.exports = function (argument) {\n return argument > 0 ? min(toIntegerOrInfinity(argument), 0x1FFFFFFFFFFFFF) : 0; // 2 ** 53 - 1 == 9007199254740991\n};\n","'use strict';\nvar toLength = require('../internals/to-length');\n\n// `LengthOfArrayLike` abstract operation\n// https://tc39.es/ecma262/#sec-lengthofarraylike\nmodule.exports = function (obj) {\n return toLength(obj.length);\n};\n","'use strict';\nvar toIndexedObject = require('../internals/to-indexed-object');\nvar toAbsoluteIndex = require('../internals/to-absolute-index');\nvar lengthOfArrayLike = require('../internals/length-of-array-like');\n\n// `Array.prototype.{ indexOf, includes }` methods implementation\nvar createMethod = function (IS_INCLUDES) {\n return function ($this, el, fromIndex) {\n var O = toIndexedObject($this);\n var length = lengthOfArrayLike(O);\n var index = toAbsoluteIndex(fromIndex, length);\n var value;\n // Array#includes uses SameValueZero equality algorithm\n // eslint-disable-next-line no-self-compare -- NaN check\n if (IS_INCLUDES && el !== el) while (length > index) {\n value = O[index++];\n // eslint-disable-next-line no-self-compare -- NaN check\n if (value !== value) return true;\n // Array#indexOf ignores holes, Array#includes - not\n } else for (;length > index; index++) {\n if ((IS_INCLUDES || index in O) && O[index] === el) return IS_INCLUDES || index || 0;\n } return !IS_INCLUDES && -1;\n };\n};\n\nmodule.exports = {\n // `Array.prototype.includes` method\n // https://tc39.es/ecma262/#sec-array.prototype.includes\n includes: createMethod(true),\n // `Array.prototype.indexOf` method\n // https://tc39.es/ecma262/#sec-array.prototype.indexof\n indexOf: createMethod(false)\n};\n","'use strict';\nmodule.exports = {};\n","'use strict';\nvar uncurryThis = require('../internals/function-uncurry-this');\nvar hasOwn = require('../internals/has-own-property');\nvar toIndexedObject = require('../internals/to-indexed-object');\nvar indexOf = require('../internals/array-includes').indexOf;\nvar hiddenKeys = require('../internals/hidden-keys');\n\nvar push = uncurryThis([].push);\n\nmodule.exports = function (object, names) {\n var O = toIndexedObject(object);\n var i = 0;\n var result = [];\n var key;\n for (key in O) !hasOwn(hiddenKeys, key) && hasOwn(O, key) && push(result, key);\n // Don't enum bug & hidden keys\n while (names.length > i) if (hasOwn(O, key = names[i++])) {\n ~indexOf(result, key) || push(result, key);\n }\n return result;\n};\n","'use strict';\n// IE8- don't enum bug keys\nmodule.exports = [\n 'constructor',\n 'hasOwnProperty',\n 'isPrototypeOf',\n 'propertyIsEnumerable',\n 'toLocaleString',\n 'toString',\n 'valueOf'\n];\n","'use strict';\nvar internalObjectKeys = require('../internals/object-keys-internal');\nvar enumBugKeys = require('../internals/enum-bug-keys');\n\n// `Object.keys` method\n// https://tc39.es/ecma262/#sec-object.keys\n// eslint-disable-next-line es/no-object-keys -- safe\nmodule.exports = Object.keys || function keys(O) {\n return internalObjectKeys(O, enumBugKeys);\n};\n","'use strict';\n// eslint-disable-next-line es/no-object-getownpropertysymbols -- safe\nexports.f = Object.getOwnPropertySymbols;\n","'use strict';\nvar DESCRIPTORS = require('../internals/descriptors');\nvar uncurryThis = require('../internals/function-uncurry-this');\nvar call = require('../internals/function-call');\nvar fails = require('../internals/fails');\nvar objectKeys = require('../internals/object-keys');\nvar getOwnPropertySymbolsModule = require('../internals/object-get-own-property-symbols');\nvar propertyIsEnumerableModule = require('../internals/object-property-is-enumerable');\nvar toObject = require('../internals/to-object');\nvar IndexedObject = require('../internals/indexed-object');\n\n// eslint-disable-next-line es/no-object-assign -- safe\nvar $assign = Object.assign;\n// eslint-disable-next-line es/no-object-defineproperty -- required for testing\nvar defineProperty = Object.defineProperty;\nvar concat = uncurryThis([].concat);\n\n// `Object.assign` method\n// https://tc39.es/ecma262/#sec-object.assign\nmodule.exports = !$assign || fails(function () {\n // should have correct order of operations (Edge bug)\n if (DESCRIPTORS && $assign({ b: 1 }, $assign(defineProperty({}, 'a', {\n enumerable: true,\n get: function () {\n defineProperty(this, 'b', {\n value: 3,\n enumerable: false\n });\n }\n }), { b: 2 })).b !== 1) return true;\n // should work with symbols and should have deterministic property order (V8 bug)\n var A = {};\n var B = {};\n // eslint-disable-next-line es/no-symbol -- safe\n var symbol = Symbol('assign detection');\n var alphabet = 'abcdefghijklmnopqrst';\n A[symbol] = 7;\n alphabet.split('').forEach(function (chr) { B[chr] = chr; });\n return $assign({}, A)[symbol] !== 7 || objectKeys($assign({}, B)).join('') !== alphabet;\n}) ? function assign(target, source) { // eslint-disable-line no-unused-vars -- required for `.length`\n var T = toObject(target);\n var argumentsLength = arguments.length;\n var index = 1;\n var getOwnPropertySymbols = getOwnPropertySymbolsModule.f;\n var propertyIsEnumerable = propertyIsEnumerableModule.f;\n while (argumentsLength > index) {\n var S = IndexedObject(arguments[index++]);\n var keys = getOwnPropertySymbols ? concat(objectKeys(S), getOwnPropertySymbols(S)) : objectKeys(S);\n var length = keys.length;\n var j = 0;\n var key;\n while (length > j) {\n key = keys[j++];\n if (!DESCRIPTORS || call(propertyIsEnumerable, S, key)) T[key] = S[key];\n }\n } return T;\n} : $assign;\n","'use strict';\nvar $ = require('../internals/export');\nvar assign = require('../internals/object-assign');\n\n// `Object.assign` method\n// https://tc39.es/ecma262/#sec-object.assign\n// eslint-disable-next-line es/no-object-assign -- required for testing\n$({ target: 'Object', stat: true, arity: 2, forced: Object.assign !== assign }, {\n assign: assign\n});\n","'use strict';\nrequire('../../modules/es.object.assign');\nvar path = require('../../internals/path');\n\nmodule.exports = path.Object.assign;\n","'use strict';\nvar uncurryThis = require('../internals/function-uncurry-this');\n\nmodule.exports = uncurryThis([].slice);\n","'use strict';\nvar uncurryThis = require('../internals/function-uncurry-this');\nvar aCallable = require('../internals/a-callable');\nvar isObject = require('../internals/is-object');\nvar hasOwn = require('../internals/has-own-property');\nvar arraySlice = require('../internals/array-slice');\nvar NATIVE_BIND = require('../internals/function-bind-native');\n\nvar $Function = Function;\nvar concat = uncurryThis([].concat);\nvar join = uncurryThis([].join);\nvar factories = {};\n\nvar construct = function (C, argsLength, args) {\n if (!hasOwn(factories, argsLength)) {\n var list = [];\n var i = 0;\n for (; i < argsLength; i++) list[i] = 'a[' + i + ']';\n factories[argsLength] = $Function('C,a', 'return new C(' + join(list, ',') + ')');\n } return factories[argsLength](C, args);\n};\n\n// `Function.prototype.bind` method implementation\n// https://tc39.es/ecma262/#sec-function.prototype.bind\n// eslint-disable-next-line es/no-function-prototype-bind -- detection\nmodule.exports = NATIVE_BIND ? $Function.bind : function bind(that /* , ...args */) {\n var F = aCallable(this);\n var Prototype = F.prototype;\n var partArgs = arraySlice(arguments, 1);\n var boundFunction = function bound(/* args... */) {\n var args = concat(partArgs, arraySlice(arguments));\n return this instanceof boundFunction ? construct(F, args.length, args) : F.apply(that, args);\n };\n if (isObject(Prototype)) boundFunction.prototype = Prototype;\n return boundFunction;\n};\n","'use strict';\n// TODO: Remove from `core-js@4`\nvar $ = require('../internals/export');\nvar bind = require('../internals/function-bind');\n\n// `Function.prototype.bind` method\n// https://tc39.es/ecma262/#sec-function.prototype.bind\n// eslint-disable-next-line es/no-function-prototype-bind -- detection\n$({ target: 'Function', proto: true, forced: Function.bind !== bind }, {\n bind: bind\n});\n","'use strict';\nvar path = require('../internals/path');\n\nmodule.exports = function (CONSTRUCTOR) {\n return path[CONSTRUCTOR + 'Prototype'];\n};\n","'use strict';\nrequire('../../../modules/es.function.bind');\nvar entryVirtual = require('../../../internals/entry-virtual');\n\nmodule.exports = entryVirtual('Function').bind;\n","'use strict';\nvar isPrototypeOf = require('../../internals/object-is-prototype-of');\nvar method = require('../function/virtual/bind');\n\nvar FunctionPrototype = Function.prototype;\n\nmodule.exports = function (it) {\n var own = it.bind;\n return it === FunctionPrototype || (isPrototypeOf(FunctionPrototype, it) && own === FunctionPrototype.bind) ? method : own;\n};\n","'use strict';\nvar parent = require('../../es/instance/bind');\n\nmodule.exports = parent;\n","module.exports = require(\"core-js-pure/stable/instance/bind\");","/**\n * Draw a circle.\n *\n * @param ctx - The context this shape will be rendered to.\n * @param x - The position of the center on the x axis.\n * @param y - The position of the center on the y axis.\n * @param r - The radius of the circle.\n */\nexport function drawCircle(\n ctx: CanvasRenderingContext2D,\n x: number,\n y: number,\n r: number\n): void {\n ctx.beginPath();\n ctx.arc(x, y, r, 0, 2 * Math.PI, false);\n ctx.closePath();\n}\n\n/**\n * Draw a square.\n *\n * @param ctx - The context this shape will be rendered to.\n * @param x - The position of the center on the x axis.\n * @param y - The position of the center on the y axis.\n * @param r - Half of the width and height of the square.\n */\nexport function drawSquare(\n ctx: CanvasRenderingContext2D,\n x: number,\n y: number,\n r: number\n): void {\n ctx.beginPath();\n ctx.rect(x - r, y - r, r * 2, r * 2);\n ctx.closePath();\n}\n\n/**\n * Draw an equilateral triangle standing on a side.\n *\n * @param ctx - The context this shape will be rendered to.\n * @param x - The position of the center on the x axis.\n * @param y - The position of the center on the y axis.\n * @param r - Half of the length of the sides.\n * @remarks\n * http://en.wikipedia.org/wiki/Equilateral_triangle\n */\nexport function drawTriangle(\n ctx: CanvasRenderingContext2D,\n x: number,\n y: number,\n r: number\n): void {\n ctx.beginPath();\n\n // the change in radius and the offset is here to center the shape\n r *= 1.15;\n y += 0.275 * r;\n\n const s = r * 2;\n const s2 = s / 2;\n const ir = (Math.sqrt(3) / 6) * s; // radius of inner circle\n const h = Math.sqrt(s * s - s2 * s2); // height\n\n ctx.moveTo(x, y - (h - ir));\n ctx.lineTo(x + s2, y + ir);\n ctx.lineTo(x - s2, y + ir);\n ctx.lineTo(x, y - (h - ir));\n ctx.closePath();\n}\n\n/**\n * Draw an equilateral triangle standing on a vertex.\n *\n * @param ctx - The context this shape will be rendered to.\n * @param x - The position of the center on the x axis.\n * @param y - The position of the center on the y axis.\n * @param r - Half of the length of the sides.\n * @remarks\n * http://en.wikipedia.org/wiki/Equilateral_triangle\n */\nexport function drawTriangleDown(\n ctx: CanvasRenderingContext2D,\n x: number,\n y: number,\n r: number\n): void {\n ctx.beginPath();\n\n // the change in radius and the offset is here to center the shape\n r *= 1.15;\n y -= 0.275 * r;\n\n const s = r * 2;\n const s2 = s / 2;\n const ir = (Math.sqrt(3) / 6) * s; // radius of inner circle\n const h = Math.sqrt(s * s - s2 * s2); // height\n\n ctx.moveTo(x, y + (h - ir));\n ctx.lineTo(x + s2, y - ir);\n ctx.lineTo(x - s2, y - ir);\n ctx.lineTo(x, y + (h - ir));\n ctx.closePath();\n}\n\n/**\n * Draw a star.\n *\n * @param ctx - The context this shape will be rendered to.\n * @param x - The position of the center on the x axis.\n * @param y - The position of the center on the y axis.\n * @param r - The outer radius of the star.\n */\nexport function drawStar(\n ctx: CanvasRenderingContext2D,\n x: number,\n y: number,\n r: number\n): void {\n // http://www.html5canvastutorials.com/labs/html5-canvas-star-spinner/\n ctx.beginPath();\n\n // the change in radius and the offset is here to center the shape\n r *= 0.82;\n y += 0.1 * r;\n\n for (let n = 0; n < 10; n++) {\n const radius = n % 2 === 0 ? r * 1.3 : r * 0.5;\n ctx.lineTo(\n x + radius * Math.sin((n * 2 * Math.PI) / 10),\n y - radius * Math.cos((n * 2 * Math.PI) / 10)\n );\n }\n\n ctx.closePath();\n}\n\n/**\n * Draw a diamond.\n *\n * @param ctx - The context this shape will be rendered to.\n * @param x - The position of the center on the x axis.\n * @param y - The position of the center on the y axis.\n * @param r - Half of the width and height of the diamond.\n * @remarks\n * http://www.html5canvastutorials.com/labs/html5-canvas-star-spinner/\n */\nexport function drawDiamond(\n ctx: CanvasRenderingContext2D,\n x: number,\n y: number,\n r: number\n): void {\n ctx.beginPath();\n\n ctx.lineTo(x, y + r);\n ctx.lineTo(x + r, y);\n ctx.lineTo(x, y - r);\n ctx.lineTo(x - r, y);\n\n ctx.closePath();\n}\n\n/**\n * Draw a rectangle with rounded corners.\n *\n * @param ctx - The context this shape will be rendered to.\n * @param x - The position of the center on the x axis.\n * @param y - The position of the center on the y axis.\n * @param w - The width of the rectangle.\n * @param h - The height of the rectangle.\n * @param r - The radius of the corners.\n * @remarks\n * http://stackoverflow.com/questions/1255512/how-to-draw-a-rounded-rectangle-on-html-canvas\n */\nexport function drawRoundRect(\n ctx: CanvasRenderingContext2D,\n x: number,\n y: number,\n w: number,\n h: number,\n r: number\n): void {\n const r2d = Math.PI / 180;\n if (w - 2 * r < 0) {\n r = w / 2;\n } //ensure that the radius isn't too large for x\n if (h - 2 * r < 0) {\n r = h / 2;\n } //ensure that the radius isn't too large for y\n ctx.beginPath();\n ctx.moveTo(x + r, y);\n ctx.lineTo(x + w - r, y);\n ctx.arc(x + w - r, y + r, r, r2d * 270, r2d * 360, false);\n ctx.lineTo(x + w, y + h - r);\n ctx.arc(x + w - r, y + h - r, r, 0, r2d * 90, false);\n ctx.lineTo(x + r, y + h);\n ctx.arc(x + r, y + h - r, r, r2d * 90, r2d * 180, false);\n ctx.lineTo(x, y + r);\n ctx.arc(x + r, y + r, r, r2d * 180, r2d * 270, false);\n ctx.closePath();\n}\n\n/**\n * Draw an ellipse.\n *\n * @param ctx - The context this shape will be rendered to.\n * @param x - The position of the center on the x axis.\n * @param y - The position of the center on the y axis.\n * @param w - The width of the ellipse.\n * @param h - The height of the ellipse.\n * @remarks\n * http://stackoverflow.com/questions/2172798/how-to-draw-an-oval-in-html5-canvas\n *\n * Postfix '_vis' added to discern it from standard method ellipse().\n */\nexport function drawEllipse(\n ctx: CanvasRenderingContext2D,\n x: number,\n y: number,\n w: number,\n h: number\n): void {\n const kappa = 0.5522848,\n ox = (w / 2) * kappa, // control point offset horizontal\n oy = (h / 2) * kappa, // control point offset vertical\n xe = x + w, // x-end\n ye = y + h, // y-end\n xm = x + w / 2, // x-middle\n ym = y + h / 2; // y-middle\n\n ctx.beginPath();\n ctx.moveTo(x, ym);\n ctx.bezierCurveTo(x, ym - oy, xm - ox, y, xm, y);\n ctx.bezierCurveTo(xm + ox, y, xe, ym - oy, xe, ym);\n ctx.bezierCurveTo(xe, ym + oy, xm + ox, ye, xm, ye);\n ctx.bezierCurveTo(xm - ox, ye, x, ym + oy, x, ym);\n ctx.closePath();\n}\n\n/**\n * Draw an isometric cylinder.\n *\n * @param ctx - The context this shape will be rendered to.\n * @param x - The position of the center on the x axis.\n * @param y - The position of the center on the y axis.\n * @param w - The width of the database.\n * @param h - The height of the database.\n * @remarks\n * http://stackoverflow.com/questions/2172798/how-to-draw-an-oval-in-html5-canvas\n */\nexport function drawDatabase(\n ctx: CanvasRenderingContext2D,\n x: number,\n y: number,\n w: number,\n h: number\n): void {\n const f = 1 / 3;\n const wEllipse = w;\n const hEllipse = h * f;\n\n const kappa = 0.5522848,\n ox = (wEllipse / 2) * kappa, // control point offset horizontal\n oy = (hEllipse / 2) * kappa, // control point offset vertical\n xe = x + wEllipse, // x-end\n ye = y + hEllipse, // y-end\n xm = x + wEllipse / 2, // x-middle\n ym = y + hEllipse / 2, // y-middle\n ymb = y + (h - hEllipse / 2), // y-midlle, bottom ellipse\n yeb = y + h; // y-end, bottom ellipse\n\n ctx.beginPath();\n ctx.moveTo(xe, ym);\n\n ctx.bezierCurveTo(xe, ym + oy, xm + ox, ye, xm, ye);\n ctx.bezierCurveTo(xm - ox, ye, x, ym + oy, x, ym);\n\n ctx.bezierCurveTo(x, ym - oy, xm - ox, y, xm, y);\n ctx.bezierCurveTo(xm + ox, y, xe, ym - oy, xe, ym);\n\n ctx.lineTo(xe, ymb);\n\n ctx.bezierCurveTo(xe, ymb + oy, xm + ox, yeb, xm, yeb);\n ctx.bezierCurveTo(xm - ox, yeb, x, ymb + oy, x, ymb);\n\n ctx.lineTo(x, ym);\n}\n\n/**\n * Draw a dashed line.\n *\n * @param ctx - The context this shape will be rendered to.\n * @param x - The start position on the x axis.\n * @param y - The start position on the y axis.\n * @param x2 - The end position on the x axis.\n * @param y2 - The end position on the y axis.\n * @param pattern - List of lengths starting with line and then alternating between space and line.\n * @author David Jordan\n * @remarks\n * date 2012-08-08\n * http://stackoverflow.com/questions/4576724/dotted-stroke-in-canvas\n */\nexport function drawDashedLine(\n ctx: CanvasRenderingContext2D,\n x: number,\n y: number,\n x2: number,\n y2: number,\n pattern: number[]\n): void {\n ctx.beginPath();\n ctx.moveTo(x, y);\n\n const patternLength = pattern.length;\n const dx = x2 - x;\n const dy = y2 - y;\n const slope = dy / dx;\n let distRemaining = Math.sqrt(dx * dx + dy * dy);\n let patternIndex = 0;\n let draw = true;\n let xStep = 0;\n let dashLength = +pattern[0];\n\n while (distRemaining >= 0.1) {\n dashLength = +pattern[patternIndex++ % patternLength];\n if (dashLength > distRemaining) {\n dashLength = distRemaining;\n }\n\n xStep = Math.sqrt((dashLength * dashLength) / (1 + slope * slope));\n xStep = dx < 0 ? -xStep : xStep;\n x += xStep;\n y += slope * xStep;\n\n if (draw === true) {\n ctx.lineTo(x, y);\n } else {\n ctx.moveTo(x, y);\n }\n\n distRemaining -= dashLength;\n draw = !draw;\n }\n}\n\n/**\n * Draw a hexagon.\n *\n * @param ctx - The context this shape will be rendered to.\n * @param x - The position of the center on the x axis.\n * @param y - The position of the center on the y axis.\n * @param r - The radius of the hexagon.\n */\nexport function drawHexagon(\n ctx: CanvasRenderingContext2D,\n x: number,\n y: number,\n r: number\n): void {\n ctx.beginPath();\n const sides = 6;\n const a = (Math.PI * 2) / sides;\n ctx.moveTo(x + r, y);\n for (let i = 1; i < sides; i++) {\n ctx.lineTo(x + r * Math.cos(a * i), y + r * Math.sin(a * i));\n }\n ctx.closePath();\n}\n\nconst shapeMap = {\n circle: drawCircle,\n dashedLine: drawDashedLine,\n database: drawDatabase,\n diamond: drawDiamond,\n ellipse: drawEllipse,\n ellipse_vis: drawEllipse,\n hexagon: drawHexagon,\n roundRect: drawRoundRect,\n square: drawSquare,\n star: drawStar,\n triangle: drawTriangle,\n triangleDown: drawTriangleDown,\n};\n\n/**\n * Returns either custom or native drawing function base on supplied name.\n *\n * @param name - The name of the function. Either the name of a\n * CanvasRenderingContext2D property or an export from shapes.ts without the\n * draw prefix.\n * @returns The function that can be used for rendering. In case of native\n * CanvasRenderingContext2D function the API is normalized to\n * `(ctx: CanvasRenderingContext2D, ...originalArgs) => void`.\n */\nexport function getShape(\n name: keyof CanvasRenderingContext2D | keyof typeof shapeMap\n): any {\n if (Object.prototype.hasOwnProperty.call(shapeMap, name)) {\n return (shapeMap as any)[name];\n } else {\n return function (ctx: CanvasRenderingContext2D, ...args: any[]): void {\n (CanvasRenderingContext2D.prototype as any)[name].call(ctx, args);\n };\n }\n}\n","\r\n/**\r\n * Expose `Emitter`.\r\n */\r\n\r\nif (typeof module !== 'undefined') {\r\n module.exports = Emitter;\r\n}\r\n\r\n/**\r\n * Initialize a new `Emitter`.\r\n *\r\n * @api public\r\n */\r\n\r\nfunction Emitter(obj) {\r\n if (obj) return mixin(obj);\r\n};\r\n\r\n/**\r\n * Mixin the emitter properties.\r\n *\r\n * @param {Object} obj\r\n * @return {Object}\r\n * @api private\r\n */\r\n\r\nfunction mixin(obj) {\r\n for (var key in Emitter.prototype) {\r\n obj[key] = Emitter.prototype[key];\r\n }\r\n return obj;\r\n}\r\n\r\n/**\r\n * Listen on the given `event` with `fn`.\r\n *\r\n * @param {String} event\r\n * @param {Function} fn\r\n * @return {Emitter}\r\n * @api public\r\n */\r\n\r\nEmitter.prototype.on =\r\nEmitter.prototype.addEventListener = function(event, fn){\r\n this._callbacks = this._callbacks || {};\r\n (this._callbacks['$' + event] = this._callbacks['$' + event] || [])\r\n .push(fn);\r\n return this;\r\n};\r\n\r\n/**\r\n * Adds an `event` listener that will be invoked a single\r\n * time then automatically removed.\r\n *\r\n * @param {String} event\r\n * @param {Function} fn\r\n * @return {Emitter}\r\n * @api public\r\n */\r\n\r\nEmitter.prototype.once = function(event, fn){\r\n function on() {\r\n this.off(event, on);\r\n fn.apply(this, arguments);\r\n }\r\n\r\n on.fn = fn;\r\n this.on(event, on);\r\n return this;\r\n};\r\n\r\n/**\r\n * Remove the given callback for `event` or all\r\n * registered callbacks.\r\n *\r\n * @param {String} event\r\n * @param {Function} fn\r\n * @return {Emitter}\r\n * @api public\r\n */\r\n\r\nEmitter.prototype.off =\r\nEmitter.prototype.removeListener =\r\nEmitter.prototype.removeAllListeners =\r\nEmitter.prototype.removeEventListener = function(event, fn){\r\n this._callbacks = this._callbacks || {};\r\n\r\n // all\r\n if (0 == arguments.length) {\r\n this._callbacks = {};\r\n return this;\r\n }\r\n\r\n // specific event\r\n var callbacks = this._callbacks['$' + event];\r\n if (!callbacks) return this;\r\n\r\n // remove all handlers\r\n if (1 == arguments.length) {\r\n delete this._callbacks['$' + event];\r\n return this;\r\n }\r\n\r\n // remove specific handler\r\n var cb;\r\n for (var i = 0; i < callbacks.length; i++) {\r\n cb = callbacks[i];\r\n if (cb === fn || cb.fn === fn) {\r\n callbacks.splice(i, 1);\r\n break;\r\n }\r\n }\r\n\r\n // Remove event specific arrays for event types that no\r\n // one is subscribed for to avoid memory leak.\r\n if (callbacks.length === 0) {\r\n delete this._callbacks['$' + event];\r\n }\r\n\r\n return this;\r\n};\r\n\r\n/**\r\n * Emit `event` with the given args.\r\n *\r\n * @param {String} event\r\n * @param {Mixed} ...\r\n * @return {Emitter}\r\n */\r\n\r\nEmitter.prototype.emit = function(event){\r\n this._callbacks = this._callbacks || {};\r\n\r\n var args = new Array(arguments.length - 1)\r\n , callbacks = this._callbacks['$' + event];\r\n\r\n for (var i = 1; i < arguments.length; i++) {\r\n args[i - 1] = arguments[i];\r\n }\r\n\r\n if (callbacks) {\r\n callbacks = callbacks.slice(0);\r\n for (var i = 0, len = callbacks.length; i < len; ++i) {\r\n callbacks[i].apply(this, args);\r\n }\r\n }\r\n\r\n return this;\r\n};\r\n\r\n/**\r\n * Return array of callbacks for `event`.\r\n *\r\n * @param {String} event\r\n * @return {Array}\r\n * @api public\r\n */\r\n\r\nEmitter.prototype.listeners = function(event){\r\n this._callbacks = this._callbacks || {};\r\n return this._callbacks['$' + event] || [];\r\n};\r\n\r\n/**\r\n * Check if this emitter has `event` handlers.\r\n *\r\n * @param {String} event\r\n * @return {Boolean}\r\n * @api public\r\n */\r\n\r\nEmitter.prototype.hasListeners = function(event){\r\n return !! this.listeners(event).length;\r\n};\r\n","'use strict';\nvar wellKnownSymbol = require('../internals/well-known-symbol');\n\nvar TO_STRING_TAG = wellKnownSymbol('toStringTag');\nvar test = {};\n\ntest[TO_STRING_TAG] = 'z';\n\nmodule.exports = String(test) === '[object z]';\n","'use strict';\nvar NATIVE_WEAK_MAP = require('../internals/weak-map-basic-detection');\nvar global = require('../internals/global');\nvar isObject = require('../internals/is-object');\nvar createNonEnumerableProperty = require('../internals/create-non-enumerable-property');\nvar hasOwn = require('../internals/has-own-property');\nvar shared = require('../internals/shared-store');\nvar sharedKey = require('../internals/shared-key');\nvar hiddenKeys = require('../internals/hidden-keys');\n\nvar OBJECT_ALREADY_INITIALIZED = 'Object already initialized';\nvar TypeError = global.TypeError;\nvar WeakMap = global.WeakMap;\nvar set, get, has;\n\nvar enforce = function (it) {\n return has(it) ? get(it) : set(it, {});\n};\n\nvar getterFor = function (TYPE) {\n return function (it) {\n var state;\n if (!isObject(it) || (state = get(it)).type !== TYPE) {\n throw new TypeError('Incompatible receiver, ' + TYPE + ' required');\n } return state;\n };\n};\n\nif (NATIVE_WEAK_MAP || shared.state) {\n var store = shared.state || (shared.state = new WeakMap());\n /* eslint-disable no-self-assign -- prototype methods protection */\n store.get = store.get;\n store.has = store.has;\n store.set = store.set;\n /* eslint-enable no-self-assign -- prototype methods protection */\n set = function (it, metadata) {\n if (store.has(it)) throw new TypeError(OBJECT_ALREADY_INITIALIZED);\n metadata.facade = it;\n store.set(it, metadata);\n return metadata;\n };\n get = function (it) {\n return store.get(it) || {};\n };\n has = function (it) {\n return store.has(it);\n };\n} else {\n var STATE = sharedKey('state');\n hiddenKeys[STATE] = true;\n set = function (it, metadata) {\n if (hasOwn(it, STATE)) throw new TypeError(OBJECT_ALREADY_INITIALIZED);\n metadata.facade = it;\n createNonEnumerableProperty(it, STATE, metadata);\n return metadata;\n };\n get = function (it) {\n return hasOwn(it, STATE) ? it[STATE] : {};\n };\n has = function (it) {\n return hasOwn(it, STATE);\n };\n}\n\nmodule.exports = {\n set: set,\n get: get,\n has: has,\n enforce: enforce,\n getterFor: getterFor\n};\n","'use strict';\nvar TO_STRING_TAG_SUPPORT = require('../internals/to-string-tag-support');\nvar isCallable = require('../internals/is-callable');\nvar classofRaw = require('../internals/classof-raw');\nvar wellKnownSymbol = require('../internals/well-known-symbol');\n\nvar TO_STRING_TAG = wellKnownSymbol('toStringTag');\nvar $Object = Object;\n\n// ES3 wrong here\nvar CORRECT_ARGUMENTS = classofRaw(function () { return arguments; }()) === 'Arguments';\n\n// fallback for IE11 Script Access Denied error\nvar tryGet = function (it, key) {\n try {\n return it[key];\n } catch (error) { /* empty */ }\n};\n\n// getting tag from ES6+ `Object.prototype.toString`\nmodule.exports = TO_STRING_TAG_SUPPORT ? classofRaw : function (it) {\n var O, tag, result;\n return it === undefined ? 'Undefined' : it === null ? 'Null'\n // @@toStringTag case\n : typeof (tag = tryGet(O = $Object(it), TO_STRING_TAG)) == 'string' ? tag\n // builtinTag case\n : CORRECT_ARGUMENTS ? classofRaw(O)\n // ES3 arguments fallback\n : (result = classofRaw(O)) === 'Object' && isCallable(O.callee) ? 'Arguments' : result;\n};\n","'use strict';\nvar classof = require('../internals/classof');\n\nvar $String = String;\n\nmodule.exports = function (argument) {\n if (classof(argument) === 'Symbol') throw new TypeError('Cannot convert a Symbol value to a string');\n return $String(argument);\n};\n","'use strict';\nvar uncurryThis = require('../internals/function-uncurry-this');\nvar toIntegerOrInfinity = require('../internals/to-integer-or-infinity');\nvar toString = require('../internals/to-string');\nvar requireObjectCoercible = require('../internals/require-object-coercible');\n\nvar charAt = uncurryThis(''.charAt);\nvar charCodeAt = uncurryThis(''.charCodeAt);\nvar stringSlice = uncurryThis(''.slice);\n\nvar createMethod = function (CONVERT_TO_STRING) {\n return function ($this, pos) {\n var S = toString(requireObjectCoercible($this));\n var position = toIntegerOrInfinity(pos);\n var size = S.length;\n var first, second;\n if (position < 0 || position >= size) return CONVERT_TO_STRING ? '' : undefined;\n first = charCodeAt(S, position);\n return first < 0xD800 || first > 0xDBFF || position + 1 === size\n || (second = charCodeAt(S, position + 1)) < 0xDC00 || second > 0xDFFF\n ? CONVERT_TO_STRING\n ? charAt(S, position)\n : first\n : CONVERT_TO_STRING\n ? stringSlice(S, position, position + 2)\n : (first - 0xD800 << 10) + (second - 0xDC00) + 0x10000;\n };\n};\n\nmodule.exports = {\n // `String.prototype.codePointAt` method\n // https://tc39.es/ecma262/#sec-string.prototype.codepointat\n codeAt: createMethod(false),\n // `String.prototype.at` method\n // https://github.com/mathiasbynens/String.prototype.at\n charAt: createMethod(true)\n};\n","'use strict';\nvar global = require('../internals/global');\nvar isCallable = require('../internals/is-callable');\n\nvar WeakMap = global.WeakMap;\n\nmodule.exports = isCallable(WeakMap) && /native code/.test(String(WeakMap));\n","'use strict';\nvar shared = require('../internals/shared');\nvar uid = require('../internals/uid');\n\nvar keys = shared('keys');\n\nmodule.exports = function (key) {\n return keys[key] || (keys[key] = uid(key));\n};\n","'use strict';\nvar DESCRIPTORS = require('../internals/descriptors');\nvar hasOwn = require('../internals/has-own-property');\n\nvar FunctionPrototype = Function.prototype;\n// eslint-disable-next-line es/no-object-getownpropertydescriptor -- safe\nvar getDescriptor = DESCRIPTORS && Object.getOwnPropertyDescriptor;\n\nvar EXISTS = hasOwn(FunctionPrototype, 'name');\n// additional protection from minified / mangled / dropped function names\nvar PROPER = EXISTS && (function something() { /* empty */ }).name === 'something';\nvar CONFIGURABLE = EXISTS && (!DESCRIPTORS || (DESCRIPTORS && getDescriptor(FunctionPrototype, 'name').configurable));\n\nmodule.exports = {\n EXISTS: EXISTS,\n PROPER: PROPER,\n CONFIGURABLE: CONFIGURABLE\n};\n","'use strict';\nvar DESCRIPTORS = require('../internals/descriptors');\nvar V8_PROTOTYPE_DEFINE_BUG = require('../internals/v8-prototype-define-bug');\nvar definePropertyModule = require('../internals/object-define-property');\nvar anObject = require('../internals/an-object');\nvar toIndexedObject = require('../internals/to-indexed-object');\nvar objectKeys = require('../internals/object-keys');\n\n// `Object.defineProperties` method\n// https://tc39.es/ecma262/#sec-object.defineproperties\n// eslint-disable-next-line es/no-object-defineproperties -- safe\nexports.f = DESCRIPTORS && !V8_PROTOTYPE_DEFINE_BUG ? Object.defineProperties : function defineProperties(O, Properties) {\n anObject(O);\n var props = toIndexedObject(Properties);\n var keys = objectKeys(Properties);\n var length = keys.length;\n var index = 0;\n var key;\n while (length > index) definePropertyModule.f(O, key = keys[index++], props[key]);\n return O;\n};\n","'use strict';\nvar getBuiltIn = require('../internals/get-built-in');\n\nmodule.exports = getBuiltIn('document', 'documentElement');\n","'use strict';\n/* global ActiveXObject -- old IE, WSH */\nvar anObject = require('../internals/an-object');\nvar definePropertiesModule = require('../internals/object-define-properties');\nvar enumBugKeys = require('../internals/enum-bug-keys');\nvar hiddenKeys = require('../internals/hidden-keys');\nvar html = require('../internals/html');\nvar documentCreateElement = require('../internals/document-create-element');\nvar sharedKey = require('../internals/shared-key');\n\nvar GT = '>';\nvar LT = '<';\nvar PROTOTYPE = 'prototype';\nvar SCRIPT = 'script';\nvar IE_PROTO = sharedKey('IE_PROTO');\n\nvar EmptyConstructor = function () { /* empty */ };\n\nvar scriptTag = function (content) {\n return LT + SCRIPT + GT + content + LT + '/' + SCRIPT + GT;\n};\n\n// Create object with fake `null` prototype: use ActiveX Object with cleared prototype\nvar NullProtoObjectViaActiveX = function (activeXDocument) {\n activeXDocument.write(scriptTag(''));\n activeXDocument.close();\n var temp = activeXDocument.parentWindow.Object;\n activeXDocument = null; // avoid memory leak\n return temp;\n};\n\n// Create object with fake `null` prototype: use iframe Object with cleared prototype\nvar NullProtoObjectViaIFrame = function () {\n // Thrash, waste and sodomy: IE GC bug\n var iframe = documentCreateElement('iframe');\n var JS = 'java' + SCRIPT + ':';\n var iframeDocument;\n iframe.style.display = 'none';\n html.appendChild(iframe);\n // https://github.com/zloirock/core-js/issues/475\n iframe.src = String(JS);\n iframeDocument = iframe.contentWindow.document;\n iframeDocument.open();\n iframeDocument.write(scriptTag('document.F=Object'));\n iframeDocument.close();\n return iframeDocument.F;\n};\n\n// Check for document.domain and active x support\n// No need to use active x approach when document.domain is not set\n// see https://github.com/es-shims/es5-shim/issues/150\n// variation of https://github.com/kitcambridge/es5-shim/commit/4f738ac066346\n// avoid IE GC bug\nvar activeXDocument;\nvar NullProtoObject = function () {\n try {\n activeXDocument = new ActiveXObject('htmlfile');\n } catch (error) { /* ignore */ }\n NullProtoObject = typeof document != 'undefined'\n ? document.domain && activeXDocument\n ? NullProtoObjectViaActiveX(activeXDocument) // old IE\n : NullProtoObjectViaIFrame()\n : NullProtoObjectViaActiveX(activeXDocument); // WSH\n var length = enumBugKeys.length;\n while (length--) delete NullProtoObject[PROTOTYPE][enumBugKeys[length]];\n return NullProtoObject();\n};\n\nhiddenKeys[IE_PROTO] = true;\n\n// `Object.create` method\n// https://tc39.es/ecma262/#sec-object.create\n// eslint-disable-next-line es/no-object-create -- safe\nmodule.exports = Object.create || function create(O, Properties) {\n var result;\n if (O !== null) {\n EmptyConstructor[PROTOTYPE] = anObject(O);\n result = new EmptyConstructor();\n EmptyConstructor[PROTOTYPE] = null;\n // add \"__proto__\" for Object.getPrototypeOf polyfill\n result[IE_PROTO] = O;\n } else result = NullProtoObject();\n return Properties === undefined ? result : definePropertiesModule.f(result, Properties);\n};\n","'use strict';\nvar fails = require('../internals/fails');\nvar isCallable = require('../internals/is-callable');\nvar isObject = require('../internals/is-object');\nvar create = require('../internals/object-create');\nvar getPrototypeOf = require('../internals/object-get-prototype-of');\nvar defineBuiltIn = require('../internals/define-built-in');\nvar wellKnownSymbol = require('../internals/well-known-symbol');\nvar IS_PURE = require('../internals/is-pure');\n\nvar ITERATOR = wellKnownSymbol('iterator');\nvar BUGGY_SAFARI_ITERATORS = false;\n\n// `%IteratorPrototype%` object\n// https://tc39.es/ecma262/#sec-%iteratorprototype%-object\nvar IteratorPrototype, PrototypeOfArrayIteratorPrototype, arrayIterator;\n\n/* eslint-disable es/no-array-prototype-keys -- safe */\nif ([].keys) {\n arrayIterator = [].keys();\n // Safari 8 has buggy iterators w/o `next`\n if (!('next' in arrayIterator)) BUGGY_SAFARI_ITERATORS = true;\n else {\n PrototypeOfArrayIteratorPrototype = getPrototypeOf(getPrototypeOf(arrayIterator));\n if (PrototypeOfArrayIteratorPrototype !== Object.prototype) IteratorPrototype = PrototypeOfArrayIteratorPrototype;\n }\n}\n\nvar NEW_ITERATOR_PROTOTYPE = !isObject(IteratorPrototype) || fails(function () {\n var test = {};\n // FF44- legacy iterators case\n return IteratorPrototype[ITERATOR].call(test) !== test;\n});\n\nif (NEW_ITERATOR_PROTOTYPE) IteratorPrototype = {};\nelse if (IS_PURE) IteratorPrototype = create(IteratorPrototype);\n\n// `%IteratorPrototype%[@@iterator]()` method\n// https://tc39.es/ecma262/#sec-%iteratorprototype%-@@iterator\nif (!isCallable(IteratorPrototype[ITERATOR])) {\n defineBuiltIn(IteratorPrototype, ITERATOR, function () {\n return this;\n });\n}\n\nmodule.exports = {\n IteratorPrototype: IteratorPrototype,\n BUGGY_SAFARI_ITERATORS: BUGGY_SAFARI_ITERATORS\n};\n","'use strict';\nvar fails = require('../internals/fails');\n\nmodule.exports = !fails(function () {\n function F() { /* empty */ }\n F.prototype.constructor = null;\n // eslint-disable-next-line es/no-object-getprototypeof -- required for testing\n return Object.getPrototypeOf(new F()) !== F.prototype;\n});\n","'use strict';\nvar hasOwn = require('../internals/has-own-property');\nvar isCallable = require('../internals/is-callable');\nvar toObject = require('../internals/to-object');\nvar sharedKey = require('../internals/shared-key');\nvar CORRECT_PROTOTYPE_GETTER = require('../internals/correct-prototype-getter');\n\nvar IE_PROTO = sharedKey('IE_PROTO');\nvar $Object = Object;\nvar ObjectPrototype = $Object.prototype;\n\n// `Object.getPrototypeOf` method\n// https://tc39.es/ecma262/#sec-object.getprototypeof\n// eslint-disable-next-line es/no-object-getprototypeof -- safe\nmodule.exports = CORRECT_PROTOTYPE_GETTER ? $Object.getPrototypeOf : function (O) {\n var object = toObject(O);\n if (hasOwn(object, IE_PROTO)) return object[IE_PROTO];\n var constructor = object.constructor;\n if (isCallable(constructor) && object instanceof constructor) {\n return constructor.prototype;\n } return object instanceof $Object ? ObjectPrototype : null;\n};\n","'use strict';\nvar createNonEnumerableProperty = require('../internals/create-non-enumerable-property');\n\nmodule.exports = function (target, key, value, options) {\n if (options && options.enumerable) target[key] = value;\n else createNonEnumerableProperty(target, key, value);\n return target;\n};\n","'use strict';\nvar TO_STRING_TAG_SUPPORT = require('../internals/to-string-tag-support');\nvar classof = require('../internals/classof');\n\n// `Object.prototype.toString` method implementation\n// https://tc39.es/ecma262/#sec-object.prototype.tostring\nmodule.exports = TO_STRING_TAG_SUPPORT ? {}.toString : function toString() {\n return '[object ' + classof(this) + ']';\n};\n","'use strict';\nvar TO_STRING_TAG_SUPPORT = require('../internals/to-string-tag-support');\nvar defineProperty = require('../internals/object-define-property').f;\nvar createNonEnumerableProperty = require('../internals/create-non-enumerable-property');\nvar hasOwn = require('../internals/has-own-property');\nvar toString = require('../internals/object-to-string');\nvar wellKnownSymbol = require('../internals/well-known-symbol');\n\nvar TO_STRING_TAG = wellKnownSymbol('toStringTag');\n\nmodule.exports = function (it, TAG, STATIC, SET_METHOD) {\n if (it) {\n var target = STATIC ? it : it.prototype;\n if (!hasOwn(target, TO_STRING_TAG)) {\n defineProperty(target, TO_STRING_TAG, { configurable: true, value: TAG });\n }\n if (SET_METHOD && !TO_STRING_TAG_SUPPORT) {\n createNonEnumerableProperty(target, 'toString', toString);\n }\n }\n};\n","'use strict';\nmodule.exports = {};\n","'use strict';\nvar IteratorPrototype = require('../internals/iterators-core').IteratorPrototype;\nvar create = require('../internals/object-create');\nvar createPropertyDescriptor = require('../internals/create-property-descriptor');\nvar setToStringTag = require('../internals/set-to-string-tag');\nvar Iterators = require('../internals/iterators');\n\nvar returnThis = function () { return this; };\n\nmodule.exports = function (IteratorConstructor, NAME, next, ENUMERABLE_NEXT) {\n var TO_STRING_TAG = NAME + ' Iterator';\n IteratorConstructor.prototype = create(IteratorPrototype, { next: createPropertyDescriptor(+!ENUMERABLE_NEXT, next) });\n setToStringTag(IteratorConstructor, TO_STRING_TAG, false, true);\n Iterators[TO_STRING_TAG] = returnThis;\n return IteratorConstructor;\n};\n","'use strict';\nvar uncurryThis = require('../internals/function-uncurry-this');\nvar aCallable = require('../internals/a-callable');\n\nmodule.exports = function (object, key, method) {\n try {\n // eslint-disable-next-line es/no-object-getownpropertydescriptor -- safe\n return uncurryThis(aCallable(Object.getOwnPropertyDescriptor(object, key)[method]));\n } catch (error) { /* empty */ }\n};\n","'use strict';\nvar isCallable = require('../internals/is-callable');\n\nvar $String = String;\nvar $TypeError = TypeError;\n\nmodule.exports = function (argument) {\n if (typeof argument == 'object' || isCallable(argument)) return argument;\n throw new $TypeError(\"Can't set \" + $String(argument) + ' as a prototype');\n};\n","'use strict';\n/* eslint-disable no-proto -- safe */\nvar uncurryThisAccessor = require('../internals/function-uncurry-this-accessor');\nvar anObject = require('../internals/an-object');\nvar aPossiblePrototype = require('../internals/a-possible-prototype');\n\n// `Object.setPrototypeOf` method\n// https://tc39.es/ecma262/#sec-object.setprototypeof\n// Works with __proto__ only. Old v8 can't work with null proto objects.\n// eslint-disable-next-line es/no-object-setprototypeof -- safe\nmodule.exports = Object.setPrototypeOf || ('__proto__' in {} ? function () {\n var CORRECT_SETTER = false;\n var test = {};\n var setter;\n try {\n setter = uncurryThisAccessor(Object.prototype, '__proto__', 'set');\n setter(test, []);\n CORRECT_SETTER = test instanceof Array;\n } catch (error) { /* empty */ }\n return function setPrototypeOf(O, proto) {\n anObject(O);\n aPossiblePrototype(proto);\n if (CORRECT_SETTER) setter(O, proto);\n else O.__proto__ = proto;\n return O;\n };\n}() : undefined);\n","'use strict';\nvar $ = require('../internals/export');\nvar call = require('../internals/function-call');\nvar IS_PURE = require('../internals/is-pure');\nvar FunctionName = require('../internals/function-name');\nvar isCallable = require('../internals/is-callable');\nvar createIteratorConstructor = require('../internals/iterator-create-constructor');\nvar getPrototypeOf = require('../internals/object-get-prototype-of');\nvar setPrototypeOf = require('../internals/object-set-prototype-of');\nvar setToStringTag = require('../internals/set-to-string-tag');\nvar createNonEnumerableProperty = require('../internals/create-non-enumerable-property');\nvar defineBuiltIn = require('../internals/define-built-in');\nvar wellKnownSymbol = require('../internals/well-known-symbol');\nvar Iterators = require('../internals/iterators');\nvar IteratorsCore = require('../internals/iterators-core');\n\nvar PROPER_FUNCTION_NAME = FunctionName.PROPER;\nvar CONFIGURABLE_FUNCTION_NAME = FunctionName.CONFIGURABLE;\nvar IteratorPrototype = IteratorsCore.IteratorPrototype;\nvar BUGGY_SAFARI_ITERATORS = IteratorsCore.BUGGY_SAFARI_ITERATORS;\nvar ITERATOR = wellKnownSymbol('iterator');\nvar KEYS = 'keys';\nvar VALUES = 'values';\nvar ENTRIES = 'entries';\n\nvar returnThis = function () { return this; };\n\nmodule.exports = function (Iterable, NAME, IteratorConstructor, next, DEFAULT, IS_SET, FORCED) {\n createIteratorConstructor(IteratorConstructor, NAME, next);\n\n var getIterationMethod = function (KIND) {\n if (KIND === DEFAULT && defaultIterator) return defaultIterator;\n if (!BUGGY_SAFARI_ITERATORS && KIND && KIND in IterablePrototype) return IterablePrototype[KIND];\n\n switch (KIND) {\n case KEYS: return function keys() { return new IteratorConstructor(this, KIND); };\n case VALUES: return function values() { return new IteratorConstructor(this, KIND); };\n case ENTRIES: return function entries() { return new IteratorConstructor(this, KIND); };\n }\n\n return function () { return new IteratorConstructor(this); };\n };\n\n var TO_STRING_TAG = NAME + ' Iterator';\n var INCORRECT_VALUES_NAME = false;\n var IterablePrototype = Iterable.prototype;\n var nativeIterator = IterablePrototype[ITERATOR]\n || IterablePrototype['@@iterator']\n || DEFAULT && IterablePrototype[DEFAULT];\n var defaultIterator = !BUGGY_SAFARI_ITERATORS && nativeIterator || getIterationMethod(DEFAULT);\n var anyNativeIterator = NAME === 'Array' ? IterablePrototype.entries || nativeIterator : nativeIterator;\n var CurrentIteratorPrototype, methods, KEY;\n\n // fix native\n if (anyNativeIterator) {\n CurrentIteratorPrototype = getPrototypeOf(anyNativeIterator.call(new Iterable()));\n if (CurrentIteratorPrototype !== Object.prototype && CurrentIteratorPrototype.next) {\n if (!IS_PURE && getPrototypeOf(CurrentIteratorPrototype) !== IteratorPrototype) {\n if (setPrototypeOf) {\n setPrototypeOf(CurrentIteratorPrototype, IteratorPrototype);\n } else if (!isCallable(CurrentIteratorPrototype[ITERATOR])) {\n defineBuiltIn(CurrentIteratorPrototype, ITERATOR, returnThis);\n }\n }\n // Set @@toStringTag to native iterators\n setToStringTag(CurrentIteratorPrototype, TO_STRING_TAG, true, true);\n if (IS_PURE) Iterators[TO_STRING_TAG] = returnThis;\n }\n }\n\n // fix Array.prototype.{ values, @@iterator }.name in V8 / FF\n if (PROPER_FUNCTION_NAME && DEFAULT === VALUES && nativeIterator && nativeIterator.name !== VALUES) {\n if (!IS_PURE && CONFIGURABLE_FUNCTION_NAME) {\n createNonEnumerableProperty(IterablePrototype, 'name', VALUES);\n } else {\n INCORRECT_VALUES_NAME = true;\n defaultIterator = function values() { return call(nativeIterator, this); };\n }\n }\n\n // export additional methods\n if (DEFAULT) {\n methods = {\n values: getIterationMethod(VALUES),\n keys: IS_SET ? defaultIterator : getIterationMethod(KEYS),\n entries: getIterationMethod(ENTRIES)\n };\n if (FORCED) for (KEY in methods) {\n if (BUGGY_SAFARI_ITERATORS || INCORRECT_VALUES_NAME || !(KEY in IterablePrototype)) {\n defineBuiltIn(IterablePrototype, KEY, methods[KEY]);\n }\n } else $({ target: NAME, proto: true, forced: BUGGY_SAFARI_ITERATORS || INCORRECT_VALUES_NAME }, methods);\n }\n\n // define iterator\n if ((!IS_PURE || FORCED) && IterablePrototype[ITERATOR] !== defaultIterator) {\n defineBuiltIn(IterablePrototype, ITERATOR, defaultIterator, { name: DEFAULT });\n }\n Iterators[NAME] = defaultIterator;\n\n return methods;\n};\n","'use strict';\n// `CreateIterResultObject` abstract operation\n// https://tc39.es/ecma262/#sec-createiterresultobject\nmodule.exports = function (value, done) {\n return { value: value, done: done };\n};\n","'use strict';\nvar charAt = require('../internals/string-multibyte').charAt;\nvar toString = require('../internals/to-string');\nvar InternalStateModule = require('../internals/internal-state');\nvar defineIterator = require('../internals/iterator-define');\nvar createIterResultObject = require('../internals/create-iter-result-object');\n\nvar STRING_ITERATOR = 'String Iterator';\nvar setInternalState = InternalStateModule.set;\nvar getInternalState = InternalStateModule.getterFor(STRING_ITERATOR);\n\n// `String.prototype[@@iterator]` method\n// https://tc39.es/ecma262/#sec-string.prototype-@@iterator\ndefineIterator(String, 'String', function (iterated) {\n setInternalState(this, {\n type: STRING_ITERATOR,\n string: toString(iterated),\n index: 0\n });\n// `%StringIteratorPrototype%.next` method\n// https://tc39.es/ecma262/#sec-%stringiteratorprototype%.next\n}, function next() {\n var state = getInternalState(this);\n var string = state.string;\n var index = state.index;\n var point;\n if (index >= string.length) return createIterResultObject(undefined, true);\n point = charAt(string, index);\n state.index += point.length;\n return createIterResultObject(point, false);\n});\n","'use strict';\nvar call = require('../internals/function-call');\nvar anObject = require('../internals/an-object');\nvar getMethod = require('../internals/get-method');\n\nmodule.exports = function (iterator, kind, value) {\n var innerResult, innerError;\n anObject(iterator);\n try {\n innerResult = getMethod(iterator, 'return');\n if (!innerResult) {\n if (kind === 'throw') throw value;\n return value;\n }\n innerResult = call(innerResult, iterator);\n } catch (error) {\n innerError = true;\n innerResult = error;\n }\n if (kind === 'throw') throw value;\n if (innerError) throw innerResult;\n anObject(innerResult);\n return value;\n};\n","'use strict';\nvar anObject = require('../internals/an-object');\nvar iteratorClose = require('../internals/iterator-close');\n\n// call something on iterator step with safe closing on error\nmodule.exports = function (iterator, fn, value, ENTRIES) {\n try {\n return ENTRIES ? fn(anObject(value)[0], value[1]) : fn(value);\n } catch (error) {\n iteratorClose(iterator, 'throw', error);\n }\n};\n","'use strict';\nvar wellKnownSymbol = require('../internals/well-known-symbol');\nvar Iterators = require('../internals/iterators');\n\nvar ITERATOR = wellKnownSymbol('iterator');\nvar ArrayPrototype = Array.prototype;\n\n// check on default Array iterator\nmodule.exports = function (it) {\n return it !== undefined && (Iterators.Array === it || ArrayPrototype[ITERATOR] === it);\n};\n","'use strict';\nvar uncurryThis = require('../internals/function-uncurry-this');\nvar isCallable = require('../internals/is-callable');\nvar store = require('../internals/shared-store');\n\nvar functionToString = uncurryThis(Function.toString);\n\n// this helper broken in `core-js@3.4.1-3.4.4`, so we can't use `shared` helper\nif (!isCallable(store.inspectSource)) {\n store.inspectSource = function (it) {\n return functionToString(it);\n };\n}\n\nmodule.exports = store.inspectSource;\n","'use strict';\nvar uncurryThis = require('../internals/function-uncurry-this');\nvar fails = require('../internals/fails');\nvar isCallable = require('../internals/is-callable');\nvar classof = require('../internals/classof');\nvar getBuiltIn = require('../internals/get-built-in');\nvar inspectSource = require('../internals/inspect-source');\n\nvar noop = function () { /* empty */ };\nvar empty = [];\nvar construct = getBuiltIn('Reflect', 'construct');\nvar constructorRegExp = /^\\s*(?:class|function)\\b/;\nvar exec = uncurryThis(constructorRegExp.exec);\nvar INCORRECT_TO_STRING = !constructorRegExp.test(noop);\n\nvar isConstructorModern = function isConstructor(argument) {\n if (!isCallable(argument)) return false;\n try {\n construct(noop, empty, argument);\n return true;\n } catch (error) {\n return false;\n }\n};\n\nvar isConstructorLegacy = function isConstructor(argument) {\n if (!isCallable(argument)) return false;\n switch (classof(argument)) {\n case 'AsyncFunction':\n case 'GeneratorFunction':\n case 'AsyncGeneratorFunction': return false;\n }\n try {\n // we can't check .prototype since constructors produced by .bind haven't it\n // `Function#toString` throws on some built-it function in some legacy engines\n // (for example, `DOMQuad` and similar in FF41-)\n return INCORRECT_TO_STRING || !!exec(constructorRegExp, inspectSource(argument));\n } catch (error) {\n return true;\n }\n};\n\nisConstructorLegacy.sham = true;\n\n// `IsConstructor` abstract operation\n// https://tc39.es/ecma262/#sec-isconstructor\nmodule.exports = !construct || fails(function () {\n var called;\n return isConstructorModern(isConstructorModern.call)\n || !isConstructorModern(Object)\n || !isConstructorModern(function () { called = true; })\n || called;\n}) ? isConstructorLegacy : isConstructorModern;\n","'use strict';\nvar toPropertyKey = require('../internals/to-property-key');\nvar definePropertyModule = require('../internals/object-define-property');\nvar createPropertyDescriptor = require('../internals/create-property-descriptor');\n\nmodule.exports = function (object, key, value) {\n var propertyKey = toPropertyKey(key);\n if (propertyKey in object) definePropertyModule.f(object, propertyKey, createPropertyDescriptor(0, value));\n else object[propertyKey] = value;\n};\n","'use strict';\nvar classof = require('../internals/classof');\nvar getMethod = require('../internals/get-method');\nvar isNullOrUndefined = require('../internals/is-null-or-undefined');\nvar Iterators = require('../internals/iterators');\nvar wellKnownSymbol = require('../internals/well-known-symbol');\n\nvar ITERATOR = wellKnownSymbol('iterator');\n\nmodule.exports = function (it) {\n if (!isNullOrUndefined(it)) return getMethod(it, ITERATOR)\n || getMethod(it, '@@iterator')\n || Iterators[classof(it)];\n};\n","'use strict';\nvar call = require('../internals/function-call');\nvar aCallable = require('../internals/a-callable');\nvar anObject = require('../internals/an-object');\nvar tryToString = require('../internals/try-to-string');\nvar getIteratorMethod = require('../internals/get-iterator-method');\n\nvar $TypeError = TypeError;\n\nmodule.exports = function (argument, usingIterator) {\n var iteratorMethod = arguments.length < 2 ? getIteratorMethod(argument) : usingIterator;\n if (aCallable(iteratorMethod)) return anObject(call(iteratorMethod, argument));\n throw new $TypeError(tryToString(argument) + ' is not iterable');\n};\n","'use strict';\nvar bind = require('../internals/function-bind-context');\nvar call = require('../internals/function-call');\nvar toObject = require('../internals/to-object');\nvar callWithSafeIterationClosing = require('../internals/call-with-safe-iteration-closing');\nvar isArrayIteratorMethod = require('../internals/is-array-iterator-method');\nvar isConstructor = require('../internals/is-constructor');\nvar lengthOfArrayLike = require('../internals/length-of-array-like');\nvar createProperty = require('../internals/create-property');\nvar getIterator = require('../internals/get-iterator');\nvar getIteratorMethod = require('../internals/get-iterator-method');\n\nvar $Array = Array;\n\n// `Array.from` method implementation\n// https://tc39.es/ecma262/#sec-array.from\nmodule.exports = function from(arrayLike /* , mapfn = undefined, thisArg = undefined */) {\n var O = toObject(arrayLike);\n var IS_CONSTRUCTOR = isConstructor(this);\n var argumentsLength = arguments.length;\n var mapfn = argumentsLength > 1 ? arguments[1] : undefined;\n var mapping = mapfn !== undefined;\n if (mapping) mapfn = bind(mapfn, argumentsLength > 2 ? arguments[2] : undefined);\n var iteratorMethod = getIteratorMethod(O);\n var index = 0;\n var length, result, step, iterator, next, value;\n // if the target is not iterable or it's an array with the default iterator - use a simple case\n if (iteratorMethod && !(this === $Array && isArrayIteratorMethod(iteratorMethod))) {\n iterator = getIterator(O, iteratorMethod);\n next = iterator.next;\n result = IS_CONSTRUCTOR ? new this() : [];\n for (;!(step = call(next, iterator)).done; index++) {\n value = mapping ? callWithSafeIterationClosing(iterator, mapfn, [step.value, index], true) : step.value;\n createProperty(result, index, value);\n }\n } else {\n length = lengthOfArrayLike(O);\n result = IS_CONSTRUCTOR ? new this(length) : $Array(length);\n for (;length > index; index++) {\n value = mapping ? mapfn(O[index], index) : O[index];\n createProperty(result, index, value);\n }\n }\n result.length = index;\n return result;\n};\n","'use strict';\nvar wellKnownSymbol = require('../internals/well-known-symbol');\n\nvar ITERATOR = wellKnownSymbol('iterator');\nvar SAFE_CLOSING = false;\n\ntry {\n var called = 0;\n var iteratorWithReturn = {\n next: function () {\n return { done: !!called++ };\n },\n 'return': function () {\n SAFE_CLOSING = true;\n }\n };\n iteratorWithReturn[ITERATOR] = function () {\n return this;\n };\n // eslint-disable-next-line es/no-array-from, no-throw-literal -- required for testing\n Array.from(iteratorWithReturn, function () { throw 2; });\n} catch (error) { /* empty */ }\n\nmodule.exports = function (exec, SKIP_CLOSING) {\n try {\n if (!SKIP_CLOSING && !SAFE_CLOSING) return false;\n } catch (error) { return false; } // workaround of old WebKit + `eval` bug\n var ITERATION_SUPPORT = false;\n try {\n var object = {};\n object[ITERATOR] = function () {\n return {\n next: function () {\n return { done: ITERATION_SUPPORT = true };\n }\n };\n };\n exec(object);\n } catch (error) { /* empty */ }\n return ITERATION_SUPPORT;\n};\n","'use strict';\nvar $ = require('../internals/export');\nvar from = require('../internals/array-from');\nvar checkCorrectnessOfIteration = require('../internals/check-correctness-of-iteration');\n\nvar INCORRECT_ITERATION = !checkCorrectnessOfIteration(function (iterable) {\n // eslint-disable-next-line es/no-array-from -- required for testing\n Array.from(iterable);\n});\n\n// `Array.from` method\n// https://tc39.es/ecma262/#sec-array.from\n$({ target: 'Array', stat: true, forced: INCORRECT_ITERATION }, {\n from: from\n});\n","'use strict';\nrequire('../../modules/es.string.iterator');\nrequire('../../modules/es.array.from');\nvar path = require('../../internals/path');\n\nmodule.exports = path.Array.from;\n","'use strict';\nvar parent = require('../../es/array/from');\n\nmodule.exports = parent;\n","module.exports = require(\"core-js-pure/stable/array/from\");","'use strict';\nvar toIndexedObject = require('../internals/to-indexed-object');\nvar addToUnscopables = require('../internals/add-to-unscopables');\nvar Iterators = require('../internals/iterators');\nvar InternalStateModule = require('../internals/internal-state');\nvar defineProperty = require('../internals/object-define-property').f;\nvar defineIterator = require('../internals/iterator-define');\nvar createIterResultObject = require('../internals/create-iter-result-object');\nvar IS_PURE = require('../internals/is-pure');\nvar DESCRIPTORS = require('../internals/descriptors');\n\nvar ARRAY_ITERATOR = 'Array Iterator';\nvar setInternalState = InternalStateModule.set;\nvar getInternalState = InternalStateModule.getterFor(ARRAY_ITERATOR);\n\n// `Array.prototype.entries` method\n// https://tc39.es/ecma262/#sec-array.prototype.entries\n// `Array.prototype.keys` method\n// https://tc39.es/ecma262/#sec-array.prototype.keys\n// `Array.prototype.values` method\n// https://tc39.es/ecma262/#sec-array.prototype.values\n// `Array.prototype[@@iterator]` method\n// https://tc39.es/ecma262/#sec-array.prototype-@@iterator\n// `CreateArrayIterator` internal method\n// https://tc39.es/ecma262/#sec-createarrayiterator\nmodule.exports = defineIterator(Array, 'Array', function (iterated, kind) {\n setInternalState(this, {\n type: ARRAY_ITERATOR,\n target: toIndexedObject(iterated), // target\n index: 0, // next index\n kind: kind // kind\n });\n// `%ArrayIteratorPrototype%.next` method\n// https://tc39.es/ecma262/#sec-%arrayiteratorprototype%.next\n}, function () {\n var state = getInternalState(this);\n var target = state.target;\n var kind = state.kind;\n var index = state.index++;\n if (!target || index >= target.length) {\n state.target = undefined;\n return createIterResultObject(undefined, true);\n }\n switch (kind) {\n case 'keys': return createIterResultObject(index, false);\n case 'values': return createIterResultObject(target[index], false);\n } return createIterResultObject([index, target[index]], false);\n}, 'values');\n\n// argumentsList[@@iterator] is %ArrayProto_values%\n// https://tc39.es/ecma262/#sec-createunmappedargumentsobject\n// https://tc39.es/ecma262/#sec-createmappedargumentsobject\nvar values = Iterators.Arguments = Iterators.Array;\n\n// https://tc39.es/ecma262/#sec-array.prototype-@@unscopables\naddToUnscopables('keys');\naddToUnscopables('values');\naddToUnscopables('entries');\n\n// V8 ~ Chrome 45- bug\nif (!IS_PURE && DESCRIPTORS && values.name !== 'values') try {\n defineProperty(values, 'name', { value: 'values' });\n} catch (error) { /* empty */ }\n","'use strict';\nrequire('../modules/es.array.iterator');\nrequire('../modules/es.string.iterator');\nvar getIteratorMethod = require('../internals/get-iterator-method');\n\nmodule.exports = getIteratorMethod;\n","'use strict';\nrequire('../modules/es.array.iterator');\nvar DOMIterables = require('../internals/dom-iterables');\nvar global = require('../internals/global');\nvar classof = require('../internals/classof');\nvar createNonEnumerableProperty = require('../internals/create-non-enumerable-property');\nvar Iterators = require('../internals/iterators');\nvar wellKnownSymbol = require('../internals/well-known-symbol');\n\nvar TO_STRING_TAG = wellKnownSymbol('toStringTag');\n\nfor (var COLLECTION_NAME in DOMIterables) {\n var Collection = global[COLLECTION_NAME];\n var CollectionPrototype = Collection && Collection.prototype;\n if (CollectionPrototype && classof(CollectionPrototype) !== TO_STRING_TAG) {\n createNonEnumerableProperty(CollectionPrototype, TO_STRING_TAG, COLLECTION_NAME);\n }\n Iterators[COLLECTION_NAME] = Iterators.Array;\n}\n","'use strict';\n// iterable DOM collections\n// flag - `iterable` interface - 'entries', 'keys', 'values', 'forEach' methods\nmodule.exports = {\n CSSRuleList: 0,\n CSSStyleDeclaration: 0,\n CSSValueList: 0,\n ClientRectList: 0,\n DOMRectList: 0,\n DOMStringList: 0,\n DOMTokenList: 1,\n DataTransferItemList: 0,\n FileList: 0,\n HTMLAllCollection: 0,\n HTMLCollection: 0,\n HTMLFormElement: 0,\n HTMLSelectElement: 0,\n MediaList: 0,\n MimeTypeArray: 0,\n NamedNodeMap: 0,\n NodeList: 1,\n PaintRequestList: 0,\n Plugin: 0,\n PluginArray: 0,\n SVGLengthList: 0,\n SVGNumberList: 0,\n SVGPathSegList: 0,\n SVGPointList: 0,\n SVGStringList: 0,\n SVGTransformList: 0,\n SourceBufferList: 0,\n StyleSheetList: 0,\n TextTrackCueList: 0,\n TextTrackList: 0,\n TouchList: 0\n};\n","'use strict';\nvar parent = require('../es/get-iterator-method');\nrequire('../modules/web.dom-collections.iterator');\n\nmodule.exports = parent;\n","'use strict';\nmodule.exports = require('../full/get-iterator-method');\n","module.exports = require(\"core-js-pure/features/get-iterator-method\");","export default function _classCallCheck(instance, Constructor) {\n if (!(instance instanceof Constructor)) {\n throw new TypeError(\"Cannot call a class as a function\");\n }\n}","'use strict';\nvar $ = require('../internals/export');\nvar DESCRIPTORS = require('../internals/descriptors');\nvar defineProperty = require('../internals/object-define-property').f;\n\n// `Object.defineProperty` method\n// https://tc39.es/ecma262/#sec-object.defineproperty\n// eslint-disable-next-line es/no-object-defineproperty -- safe\n$({ target: 'Object', stat: true, forced: Object.defineProperty !== defineProperty, sham: !DESCRIPTORS }, {\n defineProperty: defineProperty\n});\n","'use strict';\nrequire('../../modules/es.object.define-property');\nvar path = require('../../internals/path');\n\nvar Object = path.Object;\n\nvar defineProperty = module.exports = function defineProperty(it, key, desc) {\n return Object.defineProperty(it, key, desc);\n};\n\nif (Object.defineProperty.sham) defineProperty.sham = true;\n","'use strict';\nvar parent = require('../../es/object/define-property');\n\nmodule.exports = parent;\n","'use strict';\nmodule.exports = require('../../full/object/define-property');\n","'use strict';\nvar parent = require('../../stable/object/define-property');\n\nmodule.exports = parent;\n","'use strict';\nvar classof = require('../internals/classof-raw');\n\n// `IsArray` abstract operation\n// https://tc39.es/ecma262/#sec-isarray\n// eslint-disable-next-line es/no-array-isarray -- safe\nmodule.exports = Array.isArray || function isArray(argument) {\n return classof(argument) === 'Array';\n};\n","'use strict';\nvar $TypeError = TypeError;\nvar MAX_SAFE_INTEGER = 0x1FFFFFFFFFFFFF; // 2 ** 53 - 1 == 9007199254740991\n\nmodule.exports = function (it) {\n if (it > MAX_SAFE_INTEGER) throw $TypeError('Maximum allowed index exceeded');\n return it;\n};\n","'use strict';\nvar isArray = require('../internals/is-array');\nvar isConstructor = require('../internals/is-constructor');\nvar isObject = require('../internals/is-object');\nvar wellKnownSymbol = require('../internals/well-known-symbol');\n\nvar SPECIES = wellKnownSymbol('species');\nvar $Array = Array;\n\n// a part of `ArraySpeciesCreate` abstract operation\n// https://tc39.es/ecma262/#sec-arrayspeciescreate\nmodule.exports = function (originalArray) {\n var C;\n if (isArray(originalArray)) {\n C = originalArray.constructor;\n // cross-realm fallback\n if (isConstructor(C) && (C === $Array || isArray(C.prototype))) C = undefined;\n else if (isObject(C)) {\n C = C[SPECIES];\n if (C === null) C = undefined;\n }\n } return C === undefined ? $Array : C;\n};\n","'use strict';\nvar arraySpeciesConstructor = require('../internals/array-species-constructor');\n\n// `ArraySpeciesCreate` abstract operation\n// https://tc39.es/ecma262/#sec-arrayspeciescreate\nmodule.exports = function (originalArray, length) {\n return new (arraySpeciesConstructor(originalArray))(length === 0 ? 0 : length);\n};\n","'use strict';\nvar fails = require('../internals/fails');\nvar wellKnownSymbol = require('../internals/well-known-symbol');\nvar V8_VERSION = require('../internals/engine-v8-version');\n\nvar SPECIES = wellKnownSymbol('species');\n\nmodule.exports = function (METHOD_NAME) {\n // We can't use this feature detection in V8 since it causes\n // deoptimization and serious performance degradation\n // https://github.com/zloirock/core-js/issues/677\n return V8_VERSION >= 51 || !fails(function () {\n var array = [];\n var constructor = array.constructor = {};\n constructor[SPECIES] = function () {\n return { foo: 1 };\n };\n return array[METHOD_NAME](Boolean).foo !== 1;\n });\n};\n","'use strict';\nvar $ = require('../internals/export');\nvar fails = require('../internals/fails');\nvar isArray = require('../internals/is-array');\nvar isObject = require('../internals/is-object');\nvar toObject = require('../internals/to-object');\nvar lengthOfArrayLike = require('../internals/length-of-array-like');\nvar doesNotExceedSafeInteger = require('../internals/does-not-exceed-safe-integer');\nvar createProperty = require('../internals/create-property');\nvar arraySpeciesCreate = require('../internals/array-species-create');\nvar arrayMethodHasSpeciesSupport = require('../internals/array-method-has-species-support');\nvar wellKnownSymbol = require('../internals/well-known-symbol');\nvar V8_VERSION = require('../internals/engine-v8-version');\n\nvar IS_CONCAT_SPREADABLE = wellKnownSymbol('isConcatSpreadable');\n\n// We can't use this feature detection in V8 since it causes\n// deoptimization and serious performance degradation\n// https://github.com/zloirock/core-js/issues/679\nvar IS_CONCAT_SPREADABLE_SUPPORT = V8_VERSION >= 51 || !fails(function () {\n var array = [];\n array[IS_CONCAT_SPREADABLE] = false;\n return array.concat()[0] !== array;\n});\n\nvar isConcatSpreadable = function (O) {\n if (!isObject(O)) return false;\n var spreadable = O[IS_CONCAT_SPREADABLE];\n return spreadable !== undefined ? !!spreadable : isArray(O);\n};\n\nvar FORCED = !IS_CONCAT_SPREADABLE_SUPPORT || !arrayMethodHasSpeciesSupport('concat');\n\n// `Array.prototype.concat` method\n// https://tc39.es/ecma262/#sec-array.prototype.concat\n// with adding support of @@isConcatSpreadable and @@species\n$({ target: 'Array', proto: true, arity: 1, forced: FORCED }, {\n // eslint-disable-next-line no-unused-vars -- required for `.length`\n concat: function concat(arg) {\n var O = toObject(this);\n var A = arraySpeciesCreate(O, 0);\n var n = 0;\n var i, k, length, len, E;\n for (i = -1, length = arguments.length; i < length; i++) {\n E = i === -1 ? O : arguments[i];\n if (isConcatSpreadable(E)) {\n len = lengthOfArrayLike(E);\n doesNotExceedSafeInteger(n + len);\n for (k = 0; k < len; k++, n++) if (k in E) createProperty(A, n, E[k]);\n } else {\n doesNotExceedSafeInteger(n + 1);\n createProperty(A, n++, E);\n }\n }\n A.length = n;\n return A;\n }\n});\n","'use strict';\nvar internalObjectKeys = require('../internals/object-keys-internal');\nvar enumBugKeys = require('../internals/enum-bug-keys');\n\nvar hiddenKeys = enumBugKeys.concat('length', 'prototype');\n\n// `Object.getOwnPropertyNames` method\n// https://tc39.es/ecma262/#sec-object.getownpropertynames\n// eslint-disable-next-line es/no-object-getownpropertynames -- safe\nexports.f = Object.getOwnPropertyNames || function getOwnPropertyNames(O) {\n return internalObjectKeys(O, hiddenKeys);\n};\n","'use strict';\nvar toAbsoluteIndex = require('../internals/to-absolute-index');\nvar lengthOfArrayLike = require('../internals/length-of-array-like');\nvar createProperty = require('../internals/create-property');\n\nvar $Array = Array;\nvar max = Math.max;\n\nmodule.exports = function (O, start, end) {\n var length = lengthOfArrayLike(O);\n var k = toAbsoluteIndex(start, length);\n var fin = toAbsoluteIndex(end === undefined ? length : end, length);\n var result = $Array(max(fin - k, 0));\n var n = 0;\n for (; k < fin; k++, n++) createProperty(result, n, O[k]);\n result.length = n;\n return result;\n};\n","'use strict';\n/* eslint-disable es/no-object-getownpropertynames -- safe */\nvar classof = require('../internals/classof-raw');\nvar toIndexedObject = require('../internals/to-indexed-object');\nvar $getOwnPropertyNames = require('../internals/object-get-own-property-names').f;\nvar arraySlice = require('../internals/array-slice-simple');\n\nvar windowNames = typeof window == 'object' && window && Object.getOwnPropertyNames\n ? Object.getOwnPropertyNames(window) : [];\n\nvar getWindowNames = function (it) {\n try {\n return $getOwnPropertyNames(it);\n } catch (error) {\n return arraySlice(windowNames);\n }\n};\n\n// fallback for IE11 buggy Object.getOwnPropertyNames with iframe and window\nmodule.exports.f = function getOwnPropertyNames(it) {\n return windowNames && classof(it) === 'Window'\n ? getWindowNames(it)\n : $getOwnPropertyNames(toIndexedObject(it));\n};\n","'use strict';\nvar defineProperty = require('../internals/object-define-property');\n\nmodule.exports = function (target, name, descriptor) {\n return defineProperty.f(target, name, descriptor);\n};\n","'use strict';\nvar wellKnownSymbol = require('../internals/well-known-symbol');\n\nexports.f = wellKnownSymbol;\n","'use strict';\nvar path = require('../internals/path');\nvar hasOwn = require('../internals/has-own-property');\nvar wrappedWellKnownSymbolModule = require('../internals/well-known-symbol-wrapped');\nvar defineProperty = require('../internals/object-define-property').f;\n\nmodule.exports = function (NAME) {\n var Symbol = path.Symbol || (path.Symbol = {});\n if (!hasOwn(Symbol, NAME)) defineProperty(Symbol, NAME, {\n value: wrappedWellKnownSymbolModule.f(NAME)\n });\n};\n","'use strict';\nvar call = require('../internals/function-call');\nvar getBuiltIn = require('../internals/get-built-in');\nvar wellKnownSymbol = require('../internals/well-known-symbol');\nvar defineBuiltIn = require('../internals/define-built-in');\n\nmodule.exports = function () {\n var Symbol = getBuiltIn('Symbol');\n var SymbolPrototype = Symbol && Symbol.prototype;\n var valueOf = SymbolPrototype && SymbolPrototype.valueOf;\n var TO_PRIMITIVE = wellKnownSymbol('toPrimitive');\n\n if (SymbolPrototype && !SymbolPrototype[TO_PRIMITIVE]) {\n // `Symbol.prototype[@@toPrimitive]` method\n // https://tc39.es/ecma262/#sec-symbol.prototype-@@toprimitive\n // eslint-disable-next-line no-unused-vars -- required for .length\n defineBuiltIn(SymbolPrototype, TO_PRIMITIVE, function (hint) {\n return call(valueOf, this);\n }, { arity: 1 });\n }\n};\n","'use strict';\nvar bind = require('../internals/function-bind-context');\nvar uncurryThis = require('../internals/function-uncurry-this');\nvar IndexedObject = require('../internals/indexed-object');\nvar toObject = require('../internals/to-object');\nvar lengthOfArrayLike = require('../internals/length-of-array-like');\nvar arraySpeciesCreate = require('../internals/array-species-create');\n\nvar push = uncurryThis([].push);\n\n// `Array.prototype.{ forEach, map, filter, some, every, find, findIndex, filterReject }` methods implementation\nvar createMethod = function (TYPE) {\n var IS_MAP = TYPE === 1;\n var IS_FILTER = TYPE === 2;\n var IS_SOME = TYPE === 3;\n var IS_EVERY = TYPE === 4;\n var IS_FIND_INDEX = TYPE === 6;\n var IS_FILTER_REJECT = TYPE === 7;\n var NO_HOLES = TYPE === 5 || IS_FIND_INDEX;\n return function ($this, callbackfn, that, specificCreate) {\n var O = toObject($this);\n var self = IndexedObject(O);\n var boundFunction = bind(callbackfn, that);\n var length = lengthOfArrayLike(self);\n var index = 0;\n var create = specificCreate || arraySpeciesCreate;\n var target = IS_MAP ? create($this, length) : IS_FILTER || IS_FILTER_REJECT ? create($this, 0) : undefined;\n var value, result;\n for (;length > index; index++) if (NO_HOLES || index in self) {\n value = self[index];\n result = boundFunction(value, index, O);\n if (TYPE) {\n if (IS_MAP) target[index] = result; // map\n else if (result) switch (TYPE) {\n case 3: return true; // some\n case 5: return value; // find\n case 6: return index; // findIndex\n case 2: push(target, value); // filter\n } else switch (TYPE) {\n case 4: return false; // every\n case 7: push(target, value); // filterReject\n }\n }\n }\n return IS_FIND_INDEX ? -1 : IS_SOME || IS_EVERY ? IS_EVERY : target;\n };\n};\n\nmodule.exports = {\n // `Array.prototype.forEach` method\n // https://tc39.es/ecma262/#sec-array.prototype.foreach\n forEach: createMethod(0),\n // `Array.prototype.map` method\n // https://tc39.es/ecma262/#sec-array.prototype.map\n map: createMethod(1),\n // `Array.prototype.filter` method\n // https://tc39.es/ecma262/#sec-array.prototype.filter\n filter: createMethod(2),\n // `Array.prototype.some` method\n // https://tc39.es/ecma262/#sec-array.prototype.some\n some: createMethod(3),\n // `Array.prototype.every` method\n // https://tc39.es/ecma262/#sec-array.prototype.every\n every: createMethod(4),\n // `Array.prototype.find` method\n // https://tc39.es/ecma262/#sec-array.prototype.find\n find: createMethod(5),\n // `Array.prototype.findIndex` method\n // https://tc39.es/ecma262/#sec-array.prototype.findIndex\n findIndex: createMethod(6),\n // `Array.prototype.filterReject` method\n // https://github.com/tc39/proposal-array-filtering\n filterReject: createMethod(7)\n};\n","'use strict';\nvar $ = require('../internals/export');\nvar global = require('../internals/global');\nvar call = require('../internals/function-call');\nvar uncurryThis = require('../internals/function-uncurry-this');\nvar IS_PURE = require('../internals/is-pure');\nvar DESCRIPTORS = require('../internals/descriptors');\nvar NATIVE_SYMBOL = require('../internals/symbol-constructor-detection');\nvar fails = require('../internals/fails');\nvar hasOwn = require('../internals/has-own-property');\nvar isPrototypeOf = require('../internals/object-is-prototype-of');\nvar anObject = require('../internals/an-object');\nvar toIndexedObject = require('../internals/to-indexed-object');\nvar toPropertyKey = require('../internals/to-property-key');\nvar $toString = require('../internals/to-string');\nvar createPropertyDescriptor = require('../internals/create-property-descriptor');\nvar nativeObjectCreate = require('../internals/object-create');\nvar objectKeys = require('../internals/object-keys');\nvar getOwnPropertyNamesModule = require('../internals/object-get-own-property-names');\nvar getOwnPropertyNamesExternal = require('../internals/object-get-own-property-names-external');\nvar getOwnPropertySymbolsModule = require('../internals/object-get-own-property-symbols');\nvar getOwnPropertyDescriptorModule = require('../internals/object-get-own-property-descriptor');\nvar definePropertyModule = require('../internals/object-define-property');\nvar definePropertiesModule = require('../internals/object-define-properties');\nvar propertyIsEnumerableModule = require('../internals/object-property-is-enumerable');\nvar defineBuiltIn = require('../internals/define-built-in');\nvar defineBuiltInAccessor = require('../internals/define-built-in-accessor');\nvar shared = require('../internals/shared');\nvar sharedKey = require('../internals/shared-key');\nvar hiddenKeys = require('../internals/hidden-keys');\nvar uid = require('../internals/uid');\nvar wellKnownSymbol = require('../internals/well-known-symbol');\nvar wrappedWellKnownSymbolModule = require('../internals/well-known-symbol-wrapped');\nvar defineWellKnownSymbol = require('../internals/well-known-symbol-define');\nvar defineSymbolToPrimitive = require('../internals/symbol-define-to-primitive');\nvar setToStringTag = require('../internals/set-to-string-tag');\nvar InternalStateModule = require('../internals/internal-state');\nvar $forEach = require('../internals/array-iteration').forEach;\n\nvar HIDDEN = sharedKey('hidden');\nvar SYMBOL = 'Symbol';\nvar PROTOTYPE = 'prototype';\n\nvar setInternalState = InternalStateModule.set;\nvar getInternalState = InternalStateModule.getterFor(SYMBOL);\n\nvar ObjectPrototype = Object[PROTOTYPE];\nvar $Symbol = global.Symbol;\nvar SymbolPrototype = $Symbol && $Symbol[PROTOTYPE];\nvar RangeError = global.RangeError;\nvar TypeError = global.TypeError;\nvar QObject = global.QObject;\nvar nativeGetOwnPropertyDescriptor = getOwnPropertyDescriptorModule.f;\nvar nativeDefineProperty = definePropertyModule.f;\nvar nativeGetOwnPropertyNames = getOwnPropertyNamesExternal.f;\nvar nativePropertyIsEnumerable = propertyIsEnumerableModule.f;\nvar push = uncurryThis([].push);\n\nvar AllSymbols = shared('symbols');\nvar ObjectPrototypeSymbols = shared('op-symbols');\nvar WellKnownSymbolsStore = shared('wks');\n\n// Don't use setters in Qt Script, https://github.com/zloirock/core-js/issues/173\nvar USE_SETTER = !QObject || !QObject[PROTOTYPE] || !QObject[PROTOTYPE].findChild;\n\n// fallback for old Android, https://code.google.com/p/v8/issues/detail?id=687\nvar fallbackDefineProperty = function (O, P, Attributes) {\n var ObjectPrototypeDescriptor = nativeGetOwnPropertyDescriptor(ObjectPrototype, P);\n if (ObjectPrototypeDescriptor) delete ObjectPrototype[P];\n nativeDefineProperty(O, P, Attributes);\n if (ObjectPrototypeDescriptor && O !== ObjectPrototype) {\n nativeDefineProperty(ObjectPrototype, P, ObjectPrototypeDescriptor);\n }\n};\n\nvar setSymbolDescriptor = DESCRIPTORS && fails(function () {\n return nativeObjectCreate(nativeDefineProperty({}, 'a', {\n get: function () { return nativeDefineProperty(this, 'a', { value: 7 }).a; }\n })).a !== 7;\n}) ? fallbackDefineProperty : nativeDefineProperty;\n\nvar wrap = function (tag, description) {\n var symbol = AllSymbols[tag] = nativeObjectCreate(SymbolPrototype);\n setInternalState(symbol, {\n type: SYMBOL,\n tag: tag,\n description: description\n });\n if (!DESCRIPTORS) symbol.description = description;\n return symbol;\n};\n\nvar $defineProperty = function defineProperty(O, P, Attributes) {\n if (O === ObjectPrototype) $defineProperty(ObjectPrototypeSymbols, P, Attributes);\n anObject(O);\n var key = toPropertyKey(P);\n anObject(Attributes);\n if (hasOwn(AllSymbols, key)) {\n if (!Attributes.enumerable) {\n if (!hasOwn(O, HIDDEN)) nativeDefineProperty(O, HIDDEN, createPropertyDescriptor(1, {}));\n O[HIDDEN][key] = true;\n } else {\n if (hasOwn(O, HIDDEN) && O[HIDDEN][key]) O[HIDDEN][key] = false;\n Attributes = nativeObjectCreate(Attributes, { enumerable: createPropertyDescriptor(0, false) });\n } return setSymbolDescriptor(O, key, Attributes);\n } return nativeDefineProperty(O, key, Attributes);\n};\n\nvar $defineProperties = function defineProperties(O, Properties) {\n anObject(O);\n var properties = toIndexedObject(Properties);\n var keys = objectKeys(properties).concat($getOwnPropertySymbols(properties));\n $forEach(keys, function (key) {\n if (!DESCRIPTORS || call($propertyIsEnumerable, properties, key)) $defineProperty(O, key, properties[key]);\n });\n return O;\n};\n\nvar $create = function create(O, Properties) {\n return Properties === undefined ? nativeObjectCreate(O) : $defineProperties(nativeObjectCreate(O), Properties);\n};\n\nvar $propertyIsEnumerable = function propertyIsEnumerable(V) {\n var P = toPropertyKey(V);\n var enumerable = call(nativePropertyIsEnumerable, this, P);\n if (this === ObjectPrototype && hasOwn(AllSymbols, P) && !hasOwn(ObjectPrototypeSymbols, P)) return false;\n return enumerable || !hasOwn(this, P) || !hasOwn(AllSymbols, P) || hasOwn(this, HIDDEN) && this[HIDDEN][P]\n ? enumerable : true;\n};\n\nvar $getOwnPropertyDescriptor = function getOwnPropertyDescriptor(O, P) {\n var it = toIndexedObject(O);\n var key = toPropertyKey(P);\n if (it === ObjectPrototype && hasOwn(AllSymbols, key) && !hasOwn(ObjectPrototypeSymbols, key)) return;\n var descriptor = nativeGetOwnPropertyDescriptor(it, key);\n if (descriptor && hasOwn(AllSymbols, key) && !(hasOwn(it, HIDDEN) && it[HIDDEN][key])) {\n descriptor.enumerable = true;\n }\n return descriptor;\n};\n\nvar $getOwnPropertyNames = function getOwnPropertyNames(O) {\n var names = nativeGetOwnPropertyNames(toIndexedObject(O));\n var result = [];\n $forEach(names, function (key) {\n if (!hasOwn(AllSymbols, key) && !hasOwn(hiddenKeys, key)) push(result, key);\n });\n return result;\n};\n\nvar $getOwnPropertySymbols = function (O) {\n var IS_OBJECT_PROTOTYPE = O === ObjectPrototype;\n var names = nativeGetOwnPropertyNames(IS_OBJECT_PROTOTYPE ? ObjectPrototypeSymbols : toIndexedObject(O));\n var result = [];\n $forEach(names, function (key) {\n if (hasOwn(AllSymbols, key) && (!IS_OBJECT_PROTOTYPE || hasOwn(ObjectPrototype, key))) {\n push(result, AllSymbols[key]);\n }\n });\n return result;\n};\n\n// `Symbol` constructor\n// https://tc39.es/ecma262/#sec-symbol-constructor\nif (!NATIVE_SYMBOL) {\n $Symbol = function Symbol() {\n if (isPrototypeOf(SymbolPrototype, this)) throw new TypeError('Symbol is not a constructor');\n var description = !arguments.length || arguments[0] === undefined ? undefined : $toString(arguments[0]);\n var tag = uid(description);\n var setter = function (value) {\n if (this === ObjectPrototype) call(setter, ObjectPrototypeSymbols, value);\n if (hasOwn(this, HIDDEN) && hasOwn(this[HIDDEN], tag)) this[HIDDEN][tag] = false;\n var descriptor = createPropertyDescriptor(1, value);\n try {\n setSymbolDescriptor(this, tag, descriptor);\n } catch (error) {\n if (!(error instanceof RangeError)) throw error;\n fallbackDefineProperty(this, tag, descriptor);\n }\n };\n if (DESCRIPTORS && USE_SETTER) setSymbolDescriptor(ObjectPrototype, tag, { configurable: true, set: setter });\n return wrap(tag, description);\n };\n\n SymbolPrototype = $Symbol[PROTOTYPE];\n\n defineBuiltIn(SymbolPrototype, 'toString', function toString() {\n return getInternalState(this).tag;\n });\n\n defineBuiltIn($Symbol, 'withoutSetter', function (description) {\n return wrap(uid(description), description);\n });\n\n propertyIsEnumerableModule.f = $propertyIsEnumerable;\n definePropertyModule.f = $defineProperty;\n definePropertiesModule.f = $defineProperties;\n getOwnPropertyDescriptorModule.f = $getOwnPropertyDescriptor;\n getOwnPropertyNamesModule.f = getOwnPropertyNamesExternal.f = $getOwnPropertyNames;\n getOwnPropertySymbolsModule.f = $getOwnPropertySymbols;\n\n wrappedWellKnownSymbolModule.f = function (name) {\n return wrap(wellKnownSymbol(name), name);\n };\n\n if (DESCRIPTORS) {\n // https://github.com/tc39/proposal-Symbol-description\n defineBuiltInAccessor(SymbolPrototype, 'description', {\n configurable: true,\n get: function description() {\n return getInternalState(this).description;\n }\n });\n if (!IS_PURE) {\n defineBuiltIn(ObjectPrototype, 'propertyIsEnumerable', $propertyIsEnumerable, { unsafe: true });\n }\n }\n}\n\n$({ global: true, constructor: true, wrap: true, forced: !NATIVE_SYMBOL, sham: !NATIVE_SYMBOL }, {\n Symbol: $Symbol\n});\n\n$forEach(objectKeys(WellKnownSymbolsStore), function (name) {\n defineWellKnownSymbol(name);\n});\n\n$({ target: SYMBOL, stat: true, forced: !NATIVE_SYMBOL }, {\n useSetter: function () { USE_SETTER = true; },\n useSimple: function () { USE_SETTER = false; }\n});\n\n$({ target: 'Object', stat: true, forced: !NATIVE_SYMBOL, sham: !DESCRIPTORS }, {\n // `Object.create` method\n // https://tc39.es/ecma262/#sec-object.create\n create: $create,\n // `Object.defineProperty` method\n // https://tc39.es/ecma262/#sec-object.defineproperty\n defineProperty: $defineProperty,\n // `Object.defineProperties` method\n // https://tc39.es/ecma262/#sec-object.defineproperties\n defineProperties: $defineProperties,\n // `Object.getOwnPropertyDescriptor` method\n // https://tc39.es/ecma262/#sec-object.getownpropertydescriptors\n getOwnPropertyDescriptor: $getOwnPropertyDescriptor\n});\n\n$({ target: 'Object', stat: true, forced: !NATIVE_SYMBOL }, {\n // `Object.getOwnPropertyNames` method\n // https://tc39.es/ecma262/#sec-object.getownpropertynames\n getOwnPropertyNames: $getOwnPropertyNames\n});\n\n// `Symbol.prototype[@@toPrimitive]` method\n// https://tc39.es/ecma262/#sec-symbol.prototype-@@toprimitive\ndefineSymbolToPrimitive();\n\n// `Symbol.prototype[@@toStringTag]` property\n// https://tc39.es/ecma262/#sec-symbol.prototype-@@tostringtag\nsetToStringTag($Symbol, SYMBOL);\n\nhiddenKeys[HIDDEN] = true;\n","'use strict';\nvar NATIVE_SYMBOL = require('../internals/symbol-constructor-detection');\n\n/* eslint-disable es/no-symbol -- safe */\nmodule.exports = NATIVE_SYMBOL && !!Symbol['for'] && !!Symbol.keyFor;\n","'use strict';\nvar $ = require('../internals/export');\nvar getBuiltIn = require('../internals/get-built-in');\nvar hasOwn = require('../internals/has-own-property');\nvar toString = require('../internals/to-string');\nvar shared = require('../internals/shared');\nvar NATIVE_SYMBOL_REGISTRY = require('../internals/symbol-registry-detection');\n\nvar StringToSymbolRegistry = shared('string-to-symbol-registry');\nvar SymbolToStringRegistry = shared('symbol-to-string-registry');\n\n// `Symbol.for` method\n// https://tc39.es/ecma262/#sec-symbol.for\n$({ target: 'Symbol', stat: true, forced: !NATIVE_SYMBOL_REGISTRY }, {\n 'for': function (key) {\n var string = toString(key);\n if (hasOwn(StringToSymbolRegistry, string)) return StringToSymbolRegistry[string];\n var symbol = getBuiltIn('Symbol')(string);\n StringToSymbolRegistry[string] = symbol;\n SymbolToStringRegistry[symbol] = string;\n return symbol;\n }\n});\n","'use strict';\nvar $ = require('../internals/export');\nvar hasOwn = require('../internals/has-own-property');\nvar isSymbol = require('../internals/is-symbol');\nvar tryToString = require('../internals/try-to-string');\nvar shared = require('../internals/shared');\nvar NATIVE_SYMBOL_REGISTRY = require('../internals/symbol-registry-detection');\n\nvar SymbolToStringRegistry = shared('symbol-to-string-registry');\n\n// `Symbol.keyFor` method\n// https://tc39.es/ecma262/#sec-symbol.keyfor\n$({ target: 'Symbol', stat: true, forced: !NATIVE_SYMBOL_REGISTRY }, {\n keyFor: function keyFor(sym) {\n if (!isSymbol(sym)) throw new TypeError(tryToString(sym) + ' is not a symbol');\n if (hasOwn(SymbolToStringRegistry, sym)) return SymbolToStringRegistry[sym];\n }\n});\n","'use strict';\nvar uncurryThis = require('../internals/function-uncurry-this');\nvar isArray = require('../internals/is-array');\nvar isCallable = require('../internals/is-callable');\nvar classof = require('../internals/classof-raw');\nvar toString = require('../internals/to-string');\n\nvar push = uncurryThis([].push);\n\nmodule.exports = function (replacer) {\n if (isCallable(replacer)) return replacer;\n if (!isArray(replacer)) return;\n var rawLength = replacer.length;\n var keys = [];\n for (var i = 0; i < rawLength; i++) {\n var element = replacer[i];\n if (typeof element == 'string') push(keys, element);\n else if (typeof element == 'number' || classof(element) === 'Number' || classof(element) === 'String') push(keys, toString(element));\n }\n var keysLength = keys.length;\n var root = true;\n return function (key, value) {\n if (root) {\n root = false;\n return value;\n }\n if (isArray(this)) return value;\n for (var j = 0; j < keysLength; j++) if (keys[j] === key) return value;\n };\n};\n","'use strict';\nvar $ = require('../internals/export');\nvar getBuiltIn = require('../internals/get-built-in');\nvar apply = require('../internals/function-apply');\nvar call = require('../internals/function-call');\nvar uncurryThis = require('../internals/function-uncurry-this');\nvar fails = require('../internals/fails');\nvar isCallable = require('../internals/is-callable');\nvar isSymbol = require('../internals/is-symbol');\nvar arraySlice = require('../internals/array-slice');\nvar getReplacerFunction = require('../internals/get-json-replacer-function');\nvar NATIVE_SYMBOL = require('../internals/symbol-constructor-detection');\n\nvar $String = String;\nvar $stringify = getBuiltIn('JSON', 'stringify');\nvar exec = uncurryThis(/./.exec);\nvar charAt = uncurryThis(''.charAt);\nvar charCodeAt = uncurryThis(''.charCodeAt);\nvar replace = uncurryThis(''.replace);\nvar numberToString = uncurryThis(1.0.toString);\n\nvar tester = /[\\uD800-\\uDFFF]/g;\nvar low = /^[\\uD800-\\uDBFF]$/;\nvar hi = /^[\\uDC00-\\uDFFF]$/;\n\nvar WRONG_SYMBOLS_CONVERSION = !NATIVE_SYMBOL || fails(function () {\n var symbol = getBuiltIn('Symbol')('stringify detection');\n // MS Edge converts symbol values to JSON as {}\n return $stringify([symbol]) !== '[null]'\n // WebKit converts symbol values to JSON as null\n || $stringify({ a: symbol }) !== '{}'\n // V8 throws on boxed symbols\n || $stringify(Object(symbol)) !== '{}';\n});\n\n// https://github.com/tc39/proposal-well-formed-stringify\nvar ILL_FORMED_UNICODE = fails(function () {\n return $stringify('\\uDF06\\uD834') !== '\"\\\\udf06\\\\ud834\"'\n || $stringify('\\uDEAD') !== '\"\\\\udead\"';\n});\n\nvar stringifyWithSymbolsFix = function (it, replacer) {\n var args = arraySlice(arguments);\n var $replacer = getReplacerFunction(replacer);\n if (!isCallable($replacer) && (it === undefined || isSymbol(it))) return; // IE8 returns string on undefined\n args[1] = function (key, value) {\n // some old implementations (like WebKit) could pass numbers as keys\n if (isCallable($replacer)) value = call($replacer, this, $String(key), value);\n if (!isSymbol(value)) return value;\n };\n return apply($stringify, null, args);\n};\n\nvar fixIllFormed = function (match, offset, string) {\n var prev = charAt(string, offset - 1);\n var next = charAt(string, offset + 1);\n if ((exec(low, match) && !exec(hi, next)) || (exec(hi, match) && !exec(low, prev))) {\n return '\\\\u' + numberToString(charCodeAt(match, 0), 16);\n } return match;\n};\n\nif ($stringify) {\n // `JSON.stringify` method\n // https://tc39.es/ecma262/#sec-json.stringify\n $({ target: 'JSON', stat: true, arity: 3, forced: WRONG_SYMBOLS_CONVERSION || ILL_FORMED_UNICODE }, {\n // eslint-disable-next-line no-unused-vars -- required for `.length`\n stringify: function stringify(it, replacer, space) {\n var args = arraySlice(arguments);\n var result = apply(WRONG_SYMBOLS_CONVERSION ? stringifyWithSymbolsFix : $stringify, null, args);\n return ILL_FORMED_UNICODE && typeof result == 'string' ? replace(result, tester, fixIllFormed) : result;\n }\n });\n}\n","'use strict';\nvar $ = require('../internals/export');\nvar NATIVE_SYMBOL = require('../internals/symbol-constructor-detection');\nvar fails = require('../internals/fails');\nvar getOwnPropertySymbolsModule = require('../internals/object-get-own-property-symbols');\nvar toObject = require('../internals/to-object');\n\n// V8 ~ Chrome 38 and 39 `Object.getOwnPropertySymbols` fails on primitives\n// https://bugs.chromium.org/p/v8/issues/detail?id=3443\nvar FORCED = !NATIVE_SYMBOL || fails(function () { getOwnPropertySymbolsModule.f(1); });\n\n// `Object.getOwnPropertySymbols` method\n// https://tc39.es/ecma262/#sec-object.getownpropertysymbols\n$({ target: 'Object', stat: true, forced: FORCED }, {\n getOwnPropertySymbols: function getOwnPropertySymbols(it) {\n var $getOwnPropertySymbols = getOwnPropertySymbolsModule.f;\n return $getOwnPropertySymbols ? $getOwnPropertySymbols(toObject(it)) : [];\n }\n});\n","'use strict';\nvar defineWellKnownSymbol = require('../internals/well-known-symbol-define');\n\n// `Symbol.asyncIterator` well-known symbol\n// https://tc39.es/ecma262/#sec-symbol.asynciterator\ndefineWellKnownSymbol('asyncIterator');\n","'use strict';\nvar defineWellKnownSymbol = require('../internals/well-known-symbol-define');\n\n// `Symbol.hasInstance` well-known symbol\n// https://tc39.es/ecma262/#sec-symbol.hasinstance\ndefineWellKnownSymbol('hasInstance');\n","'use strict';\nvar defineWellKnownSymbol = require('../internals/well-known-symbol-define');\n\n// `Symbol.isConcatSpreadable` well-known symbol\n// https://tc39.es/ecma262/#sec-symbol.isconcatspreadable\ndefineWellKnownSymbol('isConcatSpreadable');\n","'use strict';\nvar defineWellKnownSymbol = require('../internals/well-known-symbol-define');\n\n// `Symbol.iterator` well-known symbol\n// https://tc39.es/ecma262/#sec-symbol.iterator\ndefineWellKnownSymbol('iterator');\n","'use strict';\nvar defineWellKnownSymbol = require('../internals/well-known-symbol-define');\n\n// `Symbol.match` well-known symbol\n// https://tc39.es/ecma262/#sec-symbol.match\ndefineWellKnownSymbol('match');\n","'use strict';\nvar defineWellKnownSymbol = require('../internals/well-known-symbol-define');\n\n// `Symbol.matchAll` well-known symbol\n// https://tc39.es/ecma262/#sec-symbol.matchall\ndefineWellKnownSymbol('matchAll');\n","'use strict';\nvar defineWellKnownSymbol = require('../internals/well-known-symbol-define');\n\n// `Symbol.replace` well-known symbol\n// https://tc39.es/ecma262/#sec-symbol.replace\ndefineWellKnownSymbol('replace');\n","'use strict';\nvar defineWellKnownSymbol = require('../internals/well-known-symbol-define');\n\n// `Symbol.search` well-known symbol\n// https://tc39.es/ecma262/#sec-symbol.search\ndefineWellKnownSymbol('search');\n","'use strict';\nvar defineWellKnownSymbol = require('../internals/well-known-symbol-define');\n\n// `Symbol.species` well-known symbol\n// https://tc39.es/ecma262/#sec-symbol.species\ndefineWellKnownSymbol('species');\n","'use strict';\nvar defineWellKnownSymbol = require('../internals/well-known-symbol-define');\n\n// `Symbol.split` well-known symbol\n// https://tc39.es/ecma262/#sec-symbol.split\ndefineWellKnownSymbol('split');\n","'use strict';\nvar defineWellKnownSymbol = require('../internals/well-known-symbol-define');\nvar defineSymbolToPrimitive = require('../internals/symbol-define-to-primitive');\n\n// `Symbol.toPrimitive` well-known symbol\n// https://tc39.es/ecma262/#sec-symbol.toprimitive\ndefineWellKnownSymbol('toPrimitive');\n\n// `Symbol.prototype[@@toPrimitive]` method\n// https://tc39.es/ecma262/#sec-symbol.prototype-@@toprimitive\ndefineSymbolToPrimitive();\n","'use strict';\nvar getBuiltIn = require('../internals/get-built-in');\nvar defineWellKnownSymbol = require('../internals/well-known-symbol-define');\nvar setToStringTag = require('../internals/set-to-string-tag');\n\n// `Symbol.toStringTag` well-known symbol\n// https://tc39.es/ecma262/#sec-symbol.tostringtag\ndefineWellKnownSymbol('toStringTag');\n\n// `Symbol.prototype[@@toStringTag]` property\n// https://tc39.es/ecma262/#sec-symbol.prototype-@@tostringtag\nsetToStringTag(getBuiltIn('Symbol'), 'Symbol');\n","'use strict';\nvar defineWellKnownSymbol = require('../internals/well-known-symbol-define');\n\n// `Symbol.unscopables` well-known symbol\n// https://tc39.es/ecma262/#sec-symbol.unscopables\ndefineWellKnownSymbol('unscopables');\n","'use strict';\nvar global = require('../internals/global');\nvar setToStringTag = require('../internals/set-to-string-tag');\n\n// JSON[@@toStringTag] property\n// https://tc39.es/ecma262/#sec-json-@@tostringtag\nsetToStringTag(global.JSON, 'JSON', true);\n","'use strict';\nrequire('../../modules/es.array.concat');\nrequire('../../modules/es.object.to-string');\nrequire('../../modules/es.symbol');\nrequire('../../modules/es.symbol.async-iterator');\nrequire('../../modules/es.symbol.description');\nrequire('../../modules/es.symbol.has-instance');\nrequire('../../modules/es.symbol.is-concat-spreadable');\nrequire('../../modules/es.symbol.iterator');\nrequire('../../modules/es.symbol.match');\nrequire('../../modules/es.symbol.match-all');\nrequire('../../modules/es.symbol.replace');\nrequire('../../modules/es.symbol.search');\nrequire('../../modules/es.symbol.species');\nrequire('../../modules/es.symbol.split');\nrequire('../../modules/es.symbol.to-primitive');\nrequire('../../modules/es.symbol.to-string-tag');\nrequire('../../modules/es.symbol.unscopables');\nrequire('../../modules/es.json.to-string-tag');\nrequire('../../modules/es.math.to-string-tag');\nrequire('../../modules/es.reflect.to-string-tag');\nvar path = require('../../internals/path');\n\nmodule.exports = path.Symbol;\n","'use strict';\nvar parent = require('../../es/symbol');\nrequire('../../modules/web.dom-collections.iterator');\n\nmodule.exports = parent;\n","'use strict';\nvar wellKnownSymbol = require('../internals/well-known-symbol');\nvar defineProperty = require('../internals/object-define-property').f;\n\nvar METADATA = wellKnownSymbol('metadata');\nvar FunctionPrototype = Function.prototype;\n\n// Function.prototype[@@metadata]\n// https://github.com/tc39/proposal-decorator-metadata\nif (FunctionPrototype[METADATA] === undefined) {\n defineProperty(FunctionPrototype, METADATA, {\n value: null\n });\n}\n","'use strict';\nvar defineWellKnownSymbol = require('../internals/well-known-symbol-define');\n\n// `Symbol.asyncDispose` well-known symbol\n// https://github.com/tc39/proposal-async-explicit-resource-management\ndefineWellKnownSymbol('asyncDispose');\n","'use strict';\nvar defineWellKnownSymbol = require('../internals/well-known-symbol-define');\n\n// `Symbol.dispose` well-known symbol\n// https://github.com/tc39/proposal-explicit-resource-management\ndefineWellKnownSymbol('dispose');\n","'use strict';\n// TODO: Remove from `core-js@4`\nvar defineWellKnownSymbol = require('../internals/well-known-symbol-define');\n\n// `Symbol.metadata` well-known symbol\n// https://github.com/tc39/proposal-decorators\ndefineWellKnownSymbol('metadata');\n","'use strict';\nvar parent = require('../../stable/symbol');\n\nrequire('../../modules/esnext.function.metadata');\nrequire('../../modules/esnext.symbol.async-dispose');\nrequire('../../modules/esnext.symbol.dispose');\nrequire('../../modules/esnext.symbol.metadata');\n\nmodule.exports = parent;\n","'use strict';\nvar getBuiltIn = require('../internals/get-built-in');\nvar uncurryThis = require('../internals/function-uncurry-this');\n\nvar Symbol = getBuiltIn('Symbol');\nvar keyFor = Symbol.keyFor;\nvar thisSymbolValue = uncurryThis(Symbol.prototype.valueOf);\n\n// `Symbol.isRegisteredSymbol` method\n// https://tc39.es/proposal-symbol-predicates/#sec-symbol-isregisteredsymbol\nmodule.exports = Symbol.isRegisteredSymbol || function isRegisteredSymbol(value) {\n try {\n return keyFor(thisSymbolValue(value)) !== undefined;\n } catch (error) {\n return false;\n }\n};\n","'use strict';\nvar $ = require('../internals/export');\nvar isRegisteredSymbol = require('../internals/symbol-is-registered');\n\n// `Symbol.isRegisteredSymbol` method\n// https://tc39.es/proposal-symbol-predicates/#sec-symbol-isregisteredsymbol\n$({ target: 'Symbol', stat: true }, {\n isRegisteredSymbol: isRegisteredSymbol\n});\n","'use strict';\nvar shared = require('../internals/shared');\nvar getBuiltIn = require('../internals/get-built-in');\nvar uncurryThis = require('../internals/function-uncurry-this');\nvar isSymbol = require('../internals/is-symbol');\nvar wellKnownSymbol = require('../internals/well-known-symbol');\n\nvar Symbol = getBuiltIn('Symbol');\nvar $isWellKnownSymbol = Symbol.isWellKnownSymbol;\nvar getOwnPropertyNames = getBuiltIn('Object', 'getOwnPropertyNames');\nvar thisSymbolValue = uncurryThis(Symbol.prototype.valueOf);\nvar WellKnownSymbolsStore = shared('wks');\n\nfor (var i = 0, symbolKeys = getOwnPropertyNames(Symbol), symbolKeysLength = symbolKeys.length; i < symbolKeysLength; i++) {\n // some old engines throws on access to some keys like `arguments` or `caller`\n try {\n var symbolKey = symbolKeys[i];\n if (isSymbol(Symbol[symbolKey])) wellKnownSymbol(symbolKey);\n } catch (error) { /* empty */ }\n}\n\n// `Symbol.isWellKnownSymbol` method\n// https://tc39.es/proposal-symbol-predicates/#sec-symbol-iswellknownsymbol\n// We should patch it for newly added well-known symbols. If it's not required, this module just will not be injected\nmodule.exports = function isWellKnownSymbol(value) {\n if ($isWellKnownSymbol && $isWellKnownSymbol(value)) return true;\n try {\n var symbol = thisSymbolValue(value);\n for (var j = 0, keys = getOwnPropertyNames(WellKnownSymbolsStore), keysLength = keys.length; j < keysLength; j++) {\n // eslint-disable-next-line eqeqeq -- polyfilled symbols case\n if (WellKnownSymbolsStore[keys[j]] == symbol) return true;\n }\n } catch (error) { /* empty */ }\n return false;\n};\n","'use strict';\nvar $ = require('../internals/export');\nvar isWellKnownSymbol = require('../internals/symbol-is-well-known');\n\n// `Symbol.isWellKnownSymbol` method\n// https://tc39.es/proposal-symbol-predicates/#sec-symbol-iswellknownsymbol\n// We should patch it for newly added well-known symbols. If it's not required, this module just will not be injected\n$({ target: 'Symbol', stat: true, forced: true }, {\n isWellKnownSymbol: isWellKnownSymbol\n});\n","'use strict';\nvar defineWellKnownSymbol = require('../internals/well-known-symbol-define');\n\n// `Symbol.matcher` well-known symbol\n// https://github.com/tc39/proposal-pattern-matching\ndefineWellKnownSymbol('matcher');\n","'use strict';\nvar defineWellKnownSymbol = require('../internals/well-known-symbol-define');\n\n// `Symbol.observable` well-known symbol\n// https://github.com/tc39/proposal-observable\ndefineWellKnownSymbol('observable');\n","'use strict';\nvar $ = require('../internals/export');\nvar isRegisteredSymbol = require('../internals/symbol-is-registered');\n\n// `Symbol.isRegistered` method\n// obsolete version of https://tc39.es/proposal-symbol-predicates/#sec-symbol-isregisteredsymbol\n$({ target: 'Symbol', stat: true, name: 'isRegisteredSymbol' }, {\n isRegistered: isRegisteredSymbol\n});\n","'use strict';\nvar $ = require('../internals/export');\nvar isWellKnownSymbol = require('../internals/symbol-is-well-known');\n\n// `Symbol.isWellKnown` method\n// obsolete version of https://tc39.es/proposal-symbol-predicates/#sec-symbol-iswellknownsymbol\n// We should patch it for newly added well-known symbols. If it's not required, this module just will not be injected\n$({ target: 'Symbol', stat: true, name: 'isWellKnownSymbol', forced: true }, {\n isWellKnown: isWellKnownSymbol\n});\n","'use strict';\nvar defineWellKnownSymbol = require('../internals/well-known-symbol-define');\n\n// `Symbol.metadataKey` well-known symbol\n// https://github.com/tc39/proposal-decorator-metadata\ndefineWellKnownSymbol('metadataKey');\n","'use strict';\n// TODO: remove from `core-js@4`\nvar defineWellKnownSymbol = require('../internals/well-known-symbol-define');\n\n// `Symbol.patternMatch` well-known symbol\n// https://github.com/tc39/proposal-pattern-matching\ndefineWellKnownSymbol('patternMatch');\n","'use strict';\n// TODO: remove from `core-js@4`\nvar defineWellKnownSymbol = require('../internals/well-known-symbol-define');\n\ndefineWellKnownSymbol('replaceAll');\n","'use strict';\nvar parent = require('../../actual/symbol');\nrequire('../../modules/esnext.symbol.is-registered-symbol');\nrequire('../../modules/esnext.symbol.is-well-known-symbol');\nrequire('../../modules/esnext.symbol.matcher');\nrequire('../../modules/esnext.symbol.observable');\n// TODO: Remove from `core-js@4`\nrequire('../../modules/esnext.symbol.is-registered');\nrequire('../../modules/esnext.symbol.is-well-known');\nrequire('../../modules/esnext.symbol.metadata-key');\nrequire('../../modules/esnext.symbol.pattern-match');\nrequire('../../modules/esnext.symbol.replace-all');\n\nmodule.exports = parent;\n","'use strict';\nmodule.exports = require('../../full/symbol');\n","'use strict';\nvar parent = require('../../es/symbol/iterator');\nrequire('../../modules/web.dom-collections.iterator');\n\nmodule.exports = parent;\n","'use strict';\nrequire('../../modules/es.array.iterator');\nrequire('../../modules/es.object.to-string');\nrequire('../../modules/es.string.iterator');\nrequire('../../modules/es.symbol.iterator');\nvar WrappedWellKnownSymbolModule = require('../../internals/well-known-symbol-wrapped');\n\nmodule.exports = WrappedWellKnownSymbolModule.f('iterator');\n","'use strict';\nmodule.exports = require('../../full/symbol/iterator');\n","'use strict';\nvar parent = require('../../stable/symbol/iterator');\n\nmodule.exports = parent;\n","import _Symbol from \"core-js-pure/features/symbol/index.js\";\nimport _Symbol$iterator from \"core-js-pure/features/symbol/iterator.js\";\nexport default function _typeof(o) {\n \"@babel/helpers - typeof\";\n\n return _typeof = \"function\" == typeof _Symbol && \"symbol\" == typeof _Symbol$iterator ? function (o) {\n return typeof o;\n } : function (o) {\n return o && \"function\" == typeof _Symbol && o.constructor === _Symbol && o !== _Symbol.prototype ? \"symbol\" : typeof o;\n }, _typeof(o);\n}","'use strict';\nrequire('../../modules/es.date.to-primitive');\nrequire('../../modules/es.symbol.to-primitive');\nvar WrappedWellKnownSymbolModule = require('../../internals/well-known-symbol-wrapped');\n\nmodule.exports = WrappedWellKnownSymbolModule.f('toPrimitive');\n","import _typeof from \"./typeof.js\";\nimport toPrimitive from \"./toPrimitive.js\";\nexport default function _toPropertyKey(arg) {\n var key = toPrimitive(arg, \"string\");\n return _typeof(key) === \"symbol\" ? key : String(key);\n}","import _typeof from \"./typeof.js\";\nimport _Symbol$toPrimitive from \"core-js-pure/features/symbol/to-primitive.js\";\nexport default function _toPrimitive(input, hint) {\n if (_typeof(input) !== \"object\" || input === null) return input;\n var prim = input[_Symbol$toPrimitive];\n if (prim !== undefined) {\n var res = prim.call(input, hint || \"default\");\n if (_typeof(res) !== \"object\") return res;\n throw new TypeError(\"@@toPrimitive must return a primitive value.\");\n }\n return (hint === \"string\" ? String : Number)(input);\n}","import _Object$defineProperty from \"core-js-pure/features/object/define-property.js\";\nimport toPropertyKey from \"./toPropertyKey.js\";\nfunction _defineProperties(target, props) {\n for (var i = 0; i < props.length; i++) {\n var descriptor = props[i];\n descriptor.enumerable = descriptor.enumerable || false;\n descriptor.configurable = true;\n if (\"value\" in descriptor) descriptor.writable = true;\n _Object$defineProperty(target, toPropertyKey(descriptor.key), descriptor);\n }\n}\nexport default function _createClass(Constructor, protoProps, staticProps) {\n if (protoProps) _defineProperties(Constructor.prototype, protoProps);\n if (staticProps) _defineProperties(Constructor, staticProps);\n _Object$defineProperty(Constructor, \"prototype\", {\n writable: false\n });\n return Constructor;\n}","'use strict';\nvar $ = require('../internals/export');\nvar isArray = require('../internals/is-array');\n\n// `Array.isArray` method\n// https://tc39.es/ecma262/#sec-array.isarray\n$({ target: 'Array', stat: true }, {\n isArray: isArray\n});\n","'use strict';\nrequire('../../modules/es.array.is-array');\nvar path = require('../../internals/path');\n\nmodule.exports = path.Array.isArray;\n","'use strict';\nvar parent = require('../../es/array/is-array');\n\nmodule.exports = parent;\n","'use strict';\nvar parent = require('../../stable/array/is-array');\n\nmodule.exports = parent;\n","'use strict';\nvar DESCRIPTORS = require('../internals/descriptors');\nvar isArray = require('../internals/is-array');\n\nvar $TypeError = TypeError;\n// eslint-disable-next-line es/no-object-getownpropertydescriptor -- safe\nvar getOwnPropertyDescriptor = Object.getOwnPropertyDescriptor;\n\n// Safari < 13 does not throw an error in this case\nvar SILENT_ON_NON_WRITABLE_LENGTH_SET = DESCRIPTORS && !function () {\n // makes no sense without proper strict mode support\n if (this !== undefined) return true;\n try {\n // eslint-disable-next-line es/no-object-defineproperty -- safe\n Object.defineProperty([], 'length', { writable: false }).length = 1;\n } catch (error) {\n return error instanceof TypeError;\n }\n}();\n\nmodule.exports = SILENT_ON_NON_WRITABLE_LENGTH_SET ? function (O, length) {\n if (isArray(O) && !getOwnPropertyDescriptor(O, 'length').writable) {\n throw new $TypeError('Cannot set read only .length');\n } return O.length = length;\n} : function (O, length) {\n return O.length = length;\n};\n","'use strict';\nvar $ = require('../internals/export');\nvar toObject = require('../internals/to-object');\nvar lengthOfArrayLike = require('../internals/length-of-array-like');\nvar setArrayLength = require('../internals/array-set-length');\nvar doesNotExceedSafeInteger = require('../internals/does-not-exceed-safe-integer');\nvar fails = require('../internals/fails');\n\nvar INCORRECT_TO_LENGTH = fails(function () {\n return [].push.call({ length: 0x100000000 }, 1) !== 4294967297;\n});\n\n// V8 and Safari <= 15.4, FF < 23 throws InternalError\n// https://bugs.chromium.org/p/v8/issues/detail?id=12681\nvar properErrorOnNonWritableLength = function () {\n try {\n // eslint-disable-next-line es/no-object-defineproperty -- safe\n Object.defineProperty([], 'length', { writable: false }).push();\n } catch (error) {\n return error instanceof TypeError;\n }\n};\n\nvar FORCED = INCORRECT_TO_LENGTH || !properErrorOnNonWritableLength();\n\n// `Array.prototype.push` method\n// https://tc39.es/ecma262/#sec-array.prototype.push\n$({ target: 'Array', proto: true, arity: 1, forced: FORCED }, {\n // eslint-disable-next-line no-unused-vars -- required for `.length`\n push: function push(item) {\n var O = toObject(this);\n var len = lengthOfArrayLike(O);\n var argCount = arguments.length;\n doesNotExceedSafeInteger(len + argCount);\n for (var i = 0; i < argCount; i++) {\n O[len] = arguments[i];\n len++;\n }\n setArrayLength(O, len);\n return len;\n }\n});\n","'use strict';\nrequire('../../../modules/es.array.push');\nvar entryVirtual = require('../../../internals/entry-virtual');\n\nmodule.exports = entryVirtual('Array').push;\n","'use strict';\nvar isPrototypeOf = require('../../internals/object-is-prototype-of');\nvar method = require('../array/virtual/push');\n\nvar ArrayPrototype = Array.prototype;\n\nmodule.exports = function (it) {\n var own = it.push;\n return it === ArrayPrototype || (isPrototypeOf(ArrayPrototype, it) && own === ArrayPrototype.push) ? method : own;\n};\n","'use strict';\nvar parent = require('../../es/instance/push');\n\nmodule.exports = parent;\n","'use strict';\nmodule.exports = require('../../full/instance/push');\n","'use strict';\nvar $ = require('../internals/export');\nvar isArray = require('../internals/is-array');\nvar isConstructor = require('../internals/is-constructor');\nvar isObject = require('../internals/is-object');\nvar toAbsoluteIndex = require('../internals/to-absolute-index');\nvar lengthOfArrayLike = require('../internals/length-of-array-like');\nvar toIndexedObject = require('../internals/to-indexed-object');\nvar createProperty = require('../internals/create-property');\nvar wellKnownSymbol = require('../internals/well-known-symbol');\nvar arrayMethodHasSpeciesSupport = require('../internals/array-method-has-species-support');\nvar nativeSlice = require('../internals/array-slice');\n\nvar HAS_SPECIES_SUPPORT = arrayMethodHasSpeciesSupport('slice');\n\nvar SPECIES = wellKnownSymbol('species');\nvar $Array = Array;\nvar max = Math.max;\n\n// `Array.prototype.slice` method\n// https://tc39.es/ecma262/#sec-array.prototype.slice\n// fallback for not array-like ES3 strings and DOM objects\n$({ target: 'Array', proto: true, forced: !HAS_SPECIES_SUPPORT }, {\n slice: function slice(start, end) {\n var O = toIndexedObject(this);\n var length = lengthOfArrayLike(O);\n var k = toAbsoluteIndex(start, length);\n var fin = toAbsoluteIndex(end === undefined ? length : end, length);\n // inline `ArraySpeciesCreate` for usage native `Array#slice` where it's possible\n var Constructor, result, n;\n if (isArray(O)) {\n Constructor = O.constructor;\n // cross-realm fallback\n if (isConstructor(Constructor) && (Constructor === $Array || isArray(Constructor.prototype))) {\n Constructor = undefined;\n } else if (isObject(Constructor)) {\n Constructor = Constructor[SPECIES];\n if (Constructor === null) Constructor = undefined;\n }\n if (Constructor === $Array || Constructor === undefined) {\n return nativeSlice(O, k, fin);\n }\n }\n result = new (Constructor === undefined ? $Array : Constructor)(max(fin - k, 0));\n for (n = 0; k < fin; k++, n++) if (k in O) createProperty(result, n, O[k]);\n result.length = n;\n return result;\n }\n});\n","'use strict';\nrequire('../../../modules/es.array.slice');\nvar entryVirtual = require('../../../internals/entry-virtual');\n\nmodule.exports = entryVirtual('Array').slice;\n","'use strict';\nvar isPrototypeOf = require('../../internals/object-is-prototype-of');\nvar method = require('../array/virtual/slice');\n\nvar ArrayPrototype = Array.prototype;\n\nmodule.exports = function (it) {\n var own = it.slice;\n return it === ArrayPrototype || (isPrototypeOf(ArrayPrototype, it) && own === ArrayPrototype.slice) ? method : own;\n};\n","'use strict';\nvar parent = require('../../es/instance/slice');\n\nmodule.exports = parent;\n","'use strict';\nmodule.exports = require('../../full/instance/slice');\n","'use strict';\nvar parent = require('../../stable/instance/slice');\n\nmodule.exports = parent;\n","'use strict';\nvar parent = require('../../stable/array/from');\n\nmodule.exports = parent;\n","export default function _arrayLikeToArray(arr, len) {\n if (len == null || len > arr.length) len = arr.length;\n for (var i = 0, arr2 = new Array(len); i < len; i++) arr2[i] = arr[i];\n return arr2;\n}","import _sliceInstanceProperty from \"core-js-pure/features/instance/slice.js\";\nimport _Array$from from \"core-js-pure/features/array/from.js\";\nimport arrayLikeToArray from \"./arrayLikeToArray.js\";\nexport default function _unsupportedIterableToArray(o, minLen) {\n var _context;\n if (!o) return;\n if (typeof o === \"string\") return arrayLikeToArray(o, minLen);\n var n = _sliceInstanceProperty(_context = Object.prototype.toString.call(o)).call(_context, 8, -1);\n if (n === \"Object\" && o.constructor) n = o.constructor.name;\n if (n === \"Map\" || n === \"Set\") return _Array$from(o);\n if (n === \"Arguments\" || /^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n)) return arrayLikeToArray(o, minLen);\n}","import arrayWithHoles from \"./arrayWithHoles.js\";\nimport iterableToArrayLimit from \"./iterableToArrayLimit.js\";\nimport unsupportedIterableToArray from \"./unsupportedIterableToArray.js\";\nimport nonIterableRest from \"./nonIterableRest.js\";\nexport default function _slicedToArray(arr, i) {\n return arrayWithHoles(arr) || iterableToArrayLimit(arr, i) || unsupportedIterableToArray(arr, i) || nonIterableRest();\n}","import _Array$isArray from \"core-js-pure/features/array/is-array.js\";\nexport default function _arrayWithHoles(arr) {\n if (_Array$isArray(arr)) return arr;\n}","import _Symbol from \"core-js-pure/features/symbol/index.js\";\nimport _getIteratorMethod from \"core-js-pure/features/get-iterator-method.js\";\nimport _pushInstanceProperty from \"core-js-pure/features/instance/push.js\";\nexport default function _iterableToArrayLimit(r, l) {\n var t = null == r ? null : \"undefined\" != typeof _Symbol && _getIteratorMethod(r) || r[\"@@iterator\"];\n if (null != t) {\n var e,\n n,\n i,\n u,\n a = [],\n f = !0,\n o = !1;\n try {\n if (i = (t = t.call(r)).next, 0 === l) {\n if (Object(t) !== t) return;\n f = !1;\n } else for (; !(f = (e = i.call(t)).done) && (_pushInstanceProperty(a).call(a, e.value), a.length !== l); f = !0);\n } catch (r) {\n o = !0, n = r;\n } finally {\n try {\n if (!f && null != t[\"return\"] && (u = t[\"return\"](), Object(u) !== u)) return;\n } finally {\n if (o) throw n;\n }\n }\n return a;\n }\n}","export default function _nonIterableRest() {\n throw new TypeError(\"Invalid attempt to destructure non-iterable instance.\\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.\");\n}","import arrayWithoutHoles from \"./arrayWithoutHoles.js\";\nimport iterableToArray from \"./iterableToArray.js\";\nimport unsupportedIterableToArray from \"./unsupportedIterableToArray.js\";\nimport nonIterableSpread from \"./nonIterableSpread.js\";\nexport default function _toConsumableArray(arr) {\n return arrayWithoutHoles(arr) || iterableToArray(arr) || unsupportedIterableToArray(arr) || nonIterableSpread();\n}","import _Array$isArray from \"core-js-pure/features/array/is-array.js\";\nimport arrayLikeToArray from \"./arrayLikeToArray.js\";\nexport default function _arrayWithoutHoles(arr) {\n if (_Array$isArray(arr)) return arrayLikeToArray(arr);\n}","import _Symbol from \"core-js-pure/features/symbol/index.js\";\nimport _getIteratorMethod from \"core-js-pure/features/get-iterator-method.js\";\nimport _Array$from from \"core-js-pure/features/array/from.js\";\nexport default function _iterableToArray(iter) {\n if (typeof _Symbol !== \"undefined\" && _getIteratorMethod(iter) != null || iter[\"@@iterator\"] != null) return _Array$from(iter);\n}","export default function _nonIterableSpread() {\n throw new TypeError(\"Invalid attempt to spread non-iterable instance.\\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.\");\n}","module.exports = require(\"core-js-pure/stable/symbol\");","'use strict';\nrequire('../../../modules/es.array.concat');\nvar entryVirtual = require('../../../internals/entry-virtual');\n\nmodule.exports = entryVirtual('Array').concat;\n","'use strict';\nvar isPrototypeOf = require('../../internals/object-is-prototype-of');\nvar method = require('../array/virtual/concat');\n\nvar ArrayPrototype = Array.prototype;\n\nmodule.exports = function (it) {\n var own = it.concat;\n return it === ArrayPrototype || (isPrototypeOf(ArrayPrototype, it) && own === ArrayPrototype.concat) ? method : own;\n};\n","'use strict';\nvar parent = require('../../es/instance/concat');\n\nmodule.exports = parent;\n","module.exports = require(\"core-js-pure/stable/instance/slice\");","'use strict';\nvar getBuiltIn = require('../internals/get-built-in');\nvar uncurryThis = require('../internals/function-uncurry-this');\nvar getOwnPropertyNamesModule = require('../internals/object-get-own-property-names');\nvar getOwnPropertySymbolsModule = require('../internals/object-get-own-property-symbols');\nvar anObject = require('../internals/an-object');\n\nvar concat = uncurryThis([].concat);\n\n// all object keys, includes non-enumerable and symbols\nmodule.exports = getBuiltIn('Reflect', 'ownKeys') || function ownKeys(it) {\n var keys = getOwnPropertyNamesModule.f(anObject(it));\n var getOwnPropertySymbols = getOwnPropertySymbolsModule.f;\n return getOwnPropertySymbols ? concat(keys, getOwnPropertySymbols(it)) : keys;\n};\n","'use strict';\nvar $ = require('../internals/export');\nvar ownKeys = require('../internals/own-keys');\n\n// `Reflect.ownKeys` method\n// https://tc39.es/ecma262/#sec-reflect.ownkeys\n$({ target: 'Reflect', stat: true }, {\n ownKeys: ownKeys\n});\n","'use strict';\nrequire('../../modules/es.reflect.own-keys');\nvar path = require('../../internals/path');\n\nmodule.exports = path.Reflect.ownKeys;\n","module.exports = require(\"core-js-pure/stable/array/is-array\");","'use strict';\nvar $ = require('../internals/export');\nvar $map = require('../internals/array-iteration').map;\nvar arrayMethodHasSpeciesSupport = require('../internals/array-method-has-species-support');\n\nvar HAS_SPECIES_SUPPORT = arrayMethodHasSpeciesSupport('map');\n\n// `Array.prototype.map` method\n// https://tc39.es/ecma262/#sec-array.prototype.map\n// with adding support of @@species\n$({ target: 'Array', proto: true, forced: !HAS_SPECIES_SUPPORT }, {\n map: function map(callbackfn /* , thisArg */) {\n return $map(this, callbackfn, arguments.length > 1 ? arguments[1] : undefined);\n }\n});\n","'use strict';\nrequire('../../../modules/es.array.map');\nvar entryVirtual = require('../../../internals/entry-virtual');\n\nmodule.exports = entryVirtual('Array').map;\n","'use strict';\nvar isPrototypeOf = require('../../internals/object-is-prototype-of');\nvar method = require('../array/virtual/map');\n\nvar ArrayPrototype = Array.prototype;\n\nmodule.exports = function (it) {\n var own = it.map;\n return it === ArrayPrototype || (isPrototypeOf(ArrayPrototype, it) && own === ArrayPrototype.map) ? method : own;\n};\n","'use strict';\nvar parent = require('../../es/instance/map');\n\nmodule.exports = parent;\n","'use strict';\nvar $ = require('../internals/export');\nvar toObject = require('../internals/to-object');\nvar nativeKeys = require('../internals/object-keys');\nvar fails = require('../internals/fails');\n\nvar FAILS_ON_PRIMITIVES = fails(function () { nativeKeys(1); });\n\n// `Object.keys` method\n// https://tc39.es/ecma262/#sec-object.keys\n$({ target: 'Object', stat: true, forced: FAILS_ON_PRIMITIVES }, {\n keys: function keys(it) {\n return nativeKeys(toObject(it));\n }\n});\n","'use strict';\nrequire('../../modules/es.object.keys');\nvar path = require('../../internals/path');\n\nmodule.exports = path.Object.keys;\n","'use strict';\n// TODO: Remove from `core-js@4`\nvar $ = require('../internals/export');\nvar uncurryThis = require('../internals/function-uncurry-this');\n\nvar $Date = Date;\nvar thisTimeValue = uncurryThis($Date.prototype.getTime);\n\n// `Date.now` method\n// https://tc39.es/ecma262/#sec-date.now\n$({ target: 'Date', stat: true }, {\n now: function now() {\n return thisTimeValue(new $Date());\n }\n});\n","'use strict';\nrequire('../../modules/es.date.now');\nvar path = require('../../internals/path');\n\nmodule.exports = path.Date.now;\n","'use strict';\nvar fails = require('../internals/fails');\n\nmodule.exports = function (METHOD_NAME, argument) {\n var method = [][METHOD_NAME];\n return !!method && fails(function () {\n // eslint-disable-next-line no-useless-call -- required for testing\n method.call(null, argument || function () { return 1; }, 1);\n });\n};\n","'use strict';\nvar $forEach = require('../internals/array-iteration').forEach;\nvar arrayMethodIsStrict = require('../internals/array-method-is-strict');\n\nvar STRICT_METHOD = arrayMethodIsStrict('forEach');\n\n// `Array.prototype.forEach` method implementation\n// https://tc39.es/ecma262/#sec-array.prototype.foreach\nmodule.exports = !STRICT_METHOD ? function forEach(callbackfn /* , thisArg */) {\n return $forEach(this, callbackfn, arguments.length > 1 ? arguments[1] : undefined);\n// eslint-disable-next-line es/no-array-prototype-foreach -- safe\n} : [].forEach;\n","'use strict';\nvar $ = require('../internals/export');\nvar forEach = require('../internals/array-for-each');\n\n// `Array.prototype.forEach` method\n// https://tc39.es/ecma262/#sec-array.prototype.foreach\n// eslint-disable-next-line es/no-array-prototype-foreach -- safe\n$({ target: 'Array', proto: true, forced: [].forEach !== forEach }, {\n forEach: forEach\n});\n","'use strict';\nrequire('../../../modules/es.array.for-each');\nvar entryVirtual = require('../../../internals/entry-virtual');\n\nmodule.exports = entryVirtual('Array').forEach;\n","'use strict';\nrequire('../../modules/web.dom-collections.iterator');\nvar classof = require('../../internals/classof');\nvar hasOwn = require('../../internals/has-own-property');\nvar isPrototypeOf = require('../../internals/object-is-prototype-of');\nvar method = require('../array/virtual/for-each');\n\nvar ArrayPrototype = Array.prototype;\n\nvar DOMIterables = {\n DOMTokenList: true,\n NodeList: true\n};\n\nmodule.exports = function (it) {\n var own = it.forEach;\n return it === ArrayPrototype || (isPrototypeOf(ArrayPrototype, it) && own === ArrayPrototype.forEach)\n || hasOwn(DOMIterables, classof(it)) ? method : own;\n};\n","'use strict';\nvar parent = require('../../../es/array/virtual/for-each');\n\nmodule.exports = parent;\n","module.exports = require(\"core-js-pure/stable/instance/for-each\");","'use strict';\nvar $ = require('../internals/export');\nvar uncurryThis = require('../internals/function-uncurry-this');\nvar isArray = require('../internals/is-array');\n\nvar nativeReverse = uncurryThis([].reverse);\nvar test = [1, 2];\n\n// `Array.prototype.reverse` method\n// https://tc39.es/ecma262/#sec-array.prototype.reverse\n// fix for Safari 12.0 bug\n// https://bugs.webkit.org/show_bug.cgi?id=188794\n$({ target: 'Array', proto: true, forced: String(test) === String(test.reverse()) }, {\n reverse: function reverse() {\n // eslint-disable-next-line no-self-assign -- dirty hack\n if (isArray(this)) this.length = this.length;\n return nativeReverse(this);\n }\n});\n","'use strict';\nrequire('../../../modules/es.array.reverse');\nvar entryVirtual = require('../../../internals/entry-virtual');\n\nmodule.exports = entryVirtual('Array').reverse;\n","'use strict';\nvar isPrototypeOf = require('../../internals/object-is-prototype-of');\nvar method = require('../array/virtual/reverse');\n\nvar ArrayPrototype = Array.prototype;\n\nmodule.exports = function (it) {\n var own = it.reverse;\n return it === ArrayPrototype || (isPrototypeOf(ArrayPrototype, it) && own === ArrayPrototype.reverse) ? method : own;\n};\n","'use strict';\nvar parent = require('../../es/instance/reverse');\n\nmodule.exports = parent;\n","module.exports = require(\"core-js-pure/stable/instance/reverse\");","'use strict';\nvar tryToString = require('../internals/try-to-string');\n\nvar $TypeError = TypeError;\n\nmodule.exports = function (O, P) {\n if (!delete O[P]) throw new $TypeError('Cannot delete property ' + tryToString(P) + ' of ' + tryToString(O));\n};\n","'use strict';\nvar $ = require('../internals/export');\nvar toObject = require('../internals/to-object');\nvar toAbsoluteIndex = require('../internals/to-absolute-index');\nvar toIntegerOrInfinity = require('../internals/to-integer-or-infinity');\nvar lengthOfArrayLike = require('../internals/length-of-array-like');\nvar setArrayLength = require('../internals/array-set-length');\nvar doesNotExceedSafeInteger = require('../internals/does-not-exceed-safe-integer');\nvar arraySpeciesCreate = require('../internals/array-species-create');\nvar createProperty = require('../internals/create-property');\nvar deletePropertyOrThrow = require('../internals/delete-property-or-throw');\nvar arrayMethodHasSpeciesSupport = require('../internals/array-method-has-species-support');\n\nvar HAS_SPECIES_SUPPORT = arrayMethodHasSpeciesSupport('splice');\n\nvar max = Math.max;\nvar min = Math.min;\n\n// `Array.prototype.splice` method\n// https://tc39.es/ecma262/#sec-array.prototype.splice\n// with adding support of @@species\n$({ target: 'Array', proto: true, forced: !HAS_SPECIES_SUPPORT }, {\n splice: function splice(start, deleteCount /* , ...items */) {\n var O = toObject(this);\n var len = lengthOfArrayLike(O);\n var actualStart = toAbsoluteIndex(start, len);\n var argumentsLength = arguments.length;\n var insertCount, actualDeleteCount, A, k, from, to;\n if (argumentsLength === 0) {\n insertCount = actualDeleteCount = 0;\n } else if (argumentsLength === 1) {\n insertCount = 0;\n actualDeleteCount = len - actualStart;\n } else {\n insertCount = argumentsLength - 2;\n actualDeleteCount = min(max(toIntegerOrInfinity(deleteCount), 0), len - actualStart);\n }\n doesNotExceedSafeInteger(len + insertCount - actualDeleteCount);\n A = arraySpeciesCreate(O, actualDeleteCount);\n for (k = 0; k < actualDeleteCount; k++) {\n from = actualStart + k;\n if (from in O) createProperty(A, k, O[from]);\n }\n A.length = actualDeleteCount;\n if (insertCount < actualDeleteCount) {\n for (k = actualStart; k < len - actualDeleteCount; k++) {\n from = k + actualDeleteCount;\n to = k + insertCount;\n if (from in O) O[to] = O[from];\n else deletePropertyOrThrow(O, to);\n }\n for (k = len; k > len - actualDeleteCount + insertCount; k--) deletePropertyOrThrow(O, k - 1);\n } else if (insertCount > actualDeleteCount) {\n for (k = len - actualDeleteCount; k > actualStart; k--) {\n from = k + actualDeleteCount - 1;\n to = k + insertCount - 1;\n if (from in O) O[to] = O[from];\n else deletePropertyOrThrow(O, to);\n }\n }\n for (k = 0; k < insertCount; k++) {\n O[k + actualStart] = arguments[k + 2];\n }\n setArrayLength(O, len - actualDeleteCount + insertCount);\n return A;\n }\n});\n","'use strict';\nrequire('../../../modules/es.array.splice');\nvar entryVirtual = require('../../../internals/entry-virtual');\n\nmodule.exports = entryVirtual('Array').splice;\n","'use strict';\nvar isPrototypeOf = require('../../internals/object-is-prototype-of');\nvar method = require('../array/virtual/splice');\n\nvar ArrayPrototype = Array.prototype;\n\nmodule.exports = function (it) {\n var own = it.splice;\n return it === ArrayPrototype || (isPrototypeOf(ArrayPrototype, it) && own === ArrayPrototype.splice) ? method : own;\n};\n","'use strict';\nvar parent = require('../../es/instance/splice');\n\nmodule.exports = parent;\n","'use strict';\nvar $ = require('../internals/export');\nvar $includes = require('../internals/array-includes').includes;\nvar fails = require('../internals/fails');\nvar addToUnscopables = require('../internals/add-to-unscopables');\n\n// FF99+ bug\nvar BROKEN_ON_SPARSE = fails(function () {\n // eslint-disable-next-line es/no-array-prototype-includes -- detection\n return !Array(1).includes();\n});\n\n// `Array.prototype.includes` method\n// https://tc39.es/ecma262/#sec-array.prototype.includes\n$({ target: 'Array', proto: true, forced: BROKEN_ON_SPARSE }, {\n includes: function includes(el /* , fromIndex = 0 */) {\n return $includes(this, el, arguments.length > 1 ? arguments[1] : undefined);\n }\n});\n\n// https://tc39.es/ecma262/#sec-array.prototype-@@unscopables\naddToUnscopables('includes');\n","'use strict';\nrequire('../../../modules/es.array.includes');\nvar entryVirtual = require('../../../internals/entry-virtual');\n\nmodule.exports = entryVirtual('Array').includes;\n","'use strict';\nvar isObject = require('../internals/is-object');\nvar classof = require('../internals/classof-raw');\nvar wellKnownSymbol = require('../internals/well-known-symbol');\n\nvar MATCH = wellKnownSymbol('match');\n\n// `IsRegExp` abstract operation\n// https://tc39.es/ecma262/#sec-isregexp\nmodule.exports = function (it) {\n var isRegExp;\n return isObject(it) && ((isRegExp = it[MATCH]) !== undefined ? !!isRegExp : classof(it) === 'RegExp');\n};\n","'use strict';\nvar isRegExp = require('../internals/is-regexp');\n\nvar $TypeError = TypeError;\n\nmodule.exports = function (it) {\n if (isRegExp(it)) {\n throw new $TypeError(\"The method doesn't accept regular expressions\");\n } return it;\n};\n","'use strict';\nvar wellKnownSymbol = require('../internals/well-known-symbol');\n\nvar MATCH = wellKnownSymbol('match');\n\nmodule.exports = function (METHOD_NAME) {\n var regexp = /./;\n try {\n '/./'[METHOD_NAME](regexp);\n } catch (error1) {\n try {\n regexp[MATCH] = false;\n return '/./'[METHOD_NAME](regexp);\n } catch (error2) { /* empty */ }\n } return false;\n};\n","'use strict';\nvar $ = require('../internals/export');\nvar uncurryThis = require('../internals/function-uncurry-this');\nvar notARegExp = require('../internals/not-a-regexp');\nvar requireObjectCoercible = require('../internals/require-object-coercible');\nvar toString = require('../internals/to-string');\nvar correctIsRegExpLogic = require('../internals/correct-is-regexp-logic');\n\nvar stringIndexOf = uncurryThis(''.indexOf);\n\n// `String.prototype.includes` method\n// https://tc39.es/ecma262/#sec-string.prototype.includes\n$({ target: 'String', proto: true, forced: !correctIsRegExpLogic('includes') }, {\n includes: function includes(searchString /* , position = 0 */) {\n return !!~stringIndexOf(\n toString(requireObjectCoercible(this)),\n toString(notARegExp(searchString)),\n arguments.length > 1 ? arguments[1] : undefined\n );\n }\n});\n","'use strict';\nrequire('../../../modules/es.string.includes');\nvar entryVirtual = require('../../../internals/entry-virtual');\n\nmodule.exports = entryVirtual('String').includes;\n","'use strict';\nvar isPrototypeOf = require('../../internals/object-is-prototype-of');\nvar arrayMethod = require('../array/virtual/includes');\nvar stringMethod = require('../string/virtual/includes');\n\nvar ArrayPrototype = Array.prototype;\nvar StringPrototype = String.prototype;\n\nmodule.exports = function (it) {\n var own = it.includes;\n if (it === ArrayPrototype || (isPrototypeOf(ArrayPrototype, it) && own === ArrayPrototype.includes)) return arrayMethod;\n if (typeof it == 'string' || it === StringPrototype || (isPrototypeOf(StringPrototype, it) && own === StringPrototype.includes)) {\n return stringMethod;\n } return own;\n};\n","'use strict';\nvar parent = require('../../es/instance/includes');\n\nmodule.exports = parent;\n","'use strict';\nvar $ = require('../internals/export');\nvar fails = require('../internals/fails');\nvar toObject = require('../internals/to-object');\nvar nativeGetPrototypeOf = require('../internals/object-get-prototype-of');\nvar CORRECT_PROTOTYPE_GETTER = require('../internals/correct-prototype-getter');\n\nvar FAILS_ON_PRIMITIVES = fails(function () { nativeGetPrototypeOf(1); });\n\n// `Object.getPrototypeOf` method\n// https://tc39.es/ecma262/#sec-object.getprototypeof\n$({ target: 'Object', stat: true, forced: FAILS_ON_PRIMITIVES, sham: !CORRECT_PROTOTYPE_GETTER }, {\n getPrototypeOf: function getPrototypeOf(it) {\n return nativeGetPrototypeOf(toObject(it));\n }\n});\n\n","'use strict';\nrequire('../../modules/es.object.get-prototype-of');\nvar path = require('../../internals/path');\n\nmodule.exports = path.Object.getPrototypeOf;\n","'use strict';\nvar parent = require('../../es/object/get-prototype-of');\n\nmodule.exports = parent;\n","module.exports = require(\"core-js-pure/stable/object/get-prototype-of\");","'use strict';\nvar $ = require('../internals/export');\nvar $filter = require('../internals/array-iteration').filter;\nvar arrayMethodHasSpeciesSupport = require('../internals/array-method-has-species-support');\n\nvar HAS_SPECIES_SUPPORT = arrayMethodHasSpeciesSupport('filter');\n\n// `Array.prototype.filter` method\n// https://tc39.es/ecma262/#sec-array.prototype.filter\n// with adding support of @@species\n$({ target: 'Array', proto: true, forced: !HAS_SPECIES_SUPPORT }, {\n filter: function filter(callbackfn /* , thisArg */) {\n return $filter(this, callbackfn, arguments.length > 1 ? arguments[1] : undefined);\n }\n});\n","'use strict';\nrequire('../../../modules/es.array.filter');\nvar entryVirtual = require('../../../internals/entry-virtual');\n\nmodule.exports = entryVirtual('Array').filter;\n","'use strict';\nvar isPrototypeOf = require('../../internals/object-is-prototype-of');\nvar method = require('../array/virtual/filter');\n\nvar ArrayPrototype = Array.prototype;\n\nmodule.exports = function (it) {\n var own = it.filter;\n return it === ArrayPrototype || (isPrototypeOf(ArrayPrototype, it) && own === ArrayPrototype.filter) ? method : own;\n};\n","'use strict';\nvar parent = require('../../es/instance/filter');\n\nmodule.exports = parent;\n","'use strict';\nvar DESCRIPTORS = require('../internals/descriptors');\nvar fails = require('../internals/fails');\nvar uncurryThis = require('../internals/function-uncurry-this');\nvar objectGetPrototypeOf = require('../internals/object-get-prototype-of');\nvar objectKeys = require('../internals/object-keys');\nvar toIndexedObject = require('../internals/to-indexed-object');\nvar $propertyIsEnumerable = require('../internals/object-property-is-enumerable').f;\n\nvar propertyIsEnumerable = uncurryThis($propertyIsEnumerable);\nvar push = uncurryThis([].push);\n\n// in some IE versions, `propertyIsEnumerable` returns incorrect result on integer keys\n// of `null` prototype objects\nvar IE_BUG = DESCRIPTORS && fails(function () {\n // eslint-disable-next-line es/no-object-create -- safe\n var O = Object.create(null);\n O[2] = 2;\n return !propertyIsEnumerable(O, 2);\n});\n\n// `Object.{ entries, values }` methods implementation\nvar createMethod = function (TO_ENTRIES) {\n return function (it) {\n var O = toIndexedObject(it);\n var keys = objectKeys(O);\n var IE_WORKAROUND = IE_BUG && objectGetPrototypeOf(O) === null;\n var length = keys.length;\n var i = 0;\n var result = [];\n var key;\n while (length > i) {\n key = keys[i++];\n if (!DESCRIPTORS || (IE_WORKAROUND ? key in O : propertyIsEnumerable(O, key))) {\n push(result, TO_ENTRIES ? [key, O[key]] : O[key]);\n }\n }\n return result;\n };\n};\n\nmodule.exports = {\n // `Object.entries` method\n // https://tc39.es/ecma262/#sec-object.entries\n entries: createMethod(true),\n // `Object.values` method\n // https://tc39.es/ecma262/#sec-object.values\n values: createMethod(false)\n};\n","'use strict';\nvar $ = require('../internals/export');\nvar $values = require('../internals/object-to-array').values;\n\n// `Object.values` method\n// https://tc39.es/ecma262/#sec-object.values\n$({ target: 'Object', stat: true }, {\n values: function values(O) {\n return $values(O);\n }\n});\n","'use strict';\nrequire('../../modules/es.object.values');\nvar path = require('../../internals/path');\n\nmodule.exports = path.Object.values;\n","'use strict';\n// a string of all valid unicode whitespaces\nmodule.exports = '\\u0009\\u000A\\u000B\\u000C\\u000D\\u0020\\u00A0\\u1680\\u2000\\u2001\\u2002' +\n '\\u2003\\u2004\\u2005\\u2006\\u2007\\u2008\\u2009\\u200A\\u202F\\u205F\\u3000\\u2028\\u2029\\uFEFF';\n","'use strict';\nvar uncurryThis = require('../internals/function-uncurry-this');\nvar requireObjectCoercible = require('../internals/require-object-coercible');\nvar toString = require('../internals/to-string');\nvar whitespaces = require('../internals/whitespaces');\n\nvar replace = uncurryThis(''.replace);\nvar ltrim = RegExp('^[' + whitespaces + ']+');\nvar rtrim = RegExp('(^|[^' + whitespaces + '])[' + whitespaces + ']+$');\n\n// `String.prototype.{ trim, trimStart, trimEnd, trimLeft, trimRight }` methods implementation\nvar createMethod = function (TYPE) {\n return function ($this) {\n var string = toString(requireObjectCoercible($this));\n if (TYPE & 1) string = replace(string, ltrim, '');\n if (TYPE & 2) string = replace(string, rtrim, '$1');\n return string;\n };\n};\n\nmodule.exports = {\n // `String.prototype.{ trimLeft, trimStart }` methods\n // https://tc39.es/ecma262/#sec-string.prototype.trimstart\n start: createMethod(1),\n // `String.prototype.{ trimRight, trimEnd }` methods\n // https://tc39.es/ecma262/#sec-string.prototype.trimend\n end: createMethod(2),\n // `String.prototype.trim` method\n // https://tc39.es/ecma262/#sec-string.prototype.trim\n trim: createMethod(3)\n};\n","'use strict';\nvar global = require('../internals/global');\nvar fails = require('../internals/fails');\nvar uncurryThis = require('../internals/function-uncurry-this');\nvar toString = require('../internals/to-string');\nvar trim = require('../internals/string-trim').trim;\nvar whitespaces = require('../internals/whitespaces');\n\nvar $parseInt = global.parseInt;\nvar Symbol = global.Symbol;\nvar ITERATOR = Symbol && Symbol.iterator;\nvar hex = /^[+-]?0x/i;\nvar exec = uncurryThis(hex.exec);\nvar FORCED = $parseInt(whitespaces + '08') !== 8 || $parseInt(whitespaces + '0x16') !== 22\n // MS Edge 18- broken with boxed symbols\n || (ITERATOR && !fails(function () { $parseInt(Object(ITERATOR)); }));\n\n// `parseInt` method\n// https://tc39.es/ecma262/#sec-parseint-string-radix\nmodule.exports = FORCED ? function parseInt(string, radix) {\n var S = trim(toString(string));\n return $parseInt(S, (radix >>> 0) || (exec(hex, S) ? 16 : 10));\n} : $parseInt;\n","'use strict';\nvar $ = require('../internals/export');\nvar $parseInt = require('../internals/number-parse-int');\n\n// `parseInt` method\n// https://tc39.es/ecma262/#sec-parseint-string-radix\n$({ global: true, forced: parseInt !== $parseInt }, {\n parseInt: $parseInt\n});\n","'use strict';\nrequire('../modules/es.parse-int');\nvar path = require('../internals/path');\n\nmodule.exports = path.parseInt;\n","'use strict';\n/* eslint-disable es/no-array-prototype-indexof -- required for testing */\nvar $ = require('../internals/export');\nvar uncurryThis = require('../internals/function-uncurry-this-clause');\nvar $indexOf = require('../internals/array-includes').indexOf;\nvar arrayMethodIsStrict = require('../internals/array-method-is-strict');\n\nvar nativeIndexOf = uncurryThis([].indexOf);\n\nvar NEGATIVE_ZERO = !!nativeIndexOf && 1 / nativeIndexOf([1], 1, -0) < 0;\nvar FORCED = NEGATIVE_ZERO || !arrayMethodIsStrict('indexOf');\n\n// `Array.prototype.indexOf` method\n// https://tc39.es/ecma262/#sec-array.prototype.indexof\n$({ target: 'Array', proto: true, forced: FORCED }, {\n indexOf: function indexOf(searchElement /* , fromIndex = 0 */) {\n var fromIndex = arguments.length > 1 ? arguments[1] : undefined;\n return NEGATIVE_ZERO\n // convert -0 to +0\n ? nativeIndexOf(this, searchElement, fromIndex) || 0\n : $indexOf(this, searchElement, fromIndex);\n }\n});\n","'use strict';\nrequire('../../../modules/es.array.index-of');\nvar entryVirtual = require('../../../internals/entry-virtual');\n\nmodule.exports = entryVirtual('Array').indexOf;\n","'use strict';\nvar isPrototypeOf = require('../../internals/object-is-prototype-of');\nvar method = require('../array/virtual/index-of');\n\nvar ArrayPrototype = Array.prototype;\n\nmodule.exports = function (it) {\n var own = it.indexOf;\n return it === ArrayPrototype || (isPrototypeOf(ArrayPrototype, it) && own === ArrayPrototype.indexOf) ? method : own;\n};\n","'use strict';\nvar parent = require('../../es/instance/index-of');\n\nmodule.exports = parent;\n","'use strict';\nvar $ = require('../internals/export');\nvar $entries = require('../internals/object-to-array').entries;\n\n// `Object.entries` method\n// https://tc39.es/ecma262/#sec-object.entries\n$({ target: 'Object', stat: true }, {\n entries: function entries(O) {\n return $entries(O);\n }\n});\n","'use strict';\nrequire('../../modules/es.object.entries');\nvar path = require('../../internals/path');\n\nmodule.exports = path.Object.entries;\n","'use strict';\n// TODO: Remove from `core-js@4`\nvar $ = require('../internals/export');\nvar DESCRIPTORS = require('../internals/descriptors');\nvar create = require('../internals/object-create');\n\n// `Object.create` method\n// https://tc39.es/ecma262/#sec-object.create\n$({ target: 'Object', stat: true, sham: !DESCRIPTORS }, {\n create: create\n});\n","'use strict';\nrequire('../../modules/es.object.create');\nvar path = require('../../internals/path');\n\nvar Object = path.Object;\n\nmodule.exports = function create(P, D) {\n return Object.create(P, D);\n};\n","'use strict';\nvar parent = require('../../es/object/create');\n\nmodule.exports = parent;\n","module.exports = require(\"core-js-pure/stable/object/create\");","'use strict';\nrequire('../../modules/es.json.stringify');\nvar path = require('../../internals/path');\nvar apply = require('../../internals/function-apply');\n\n// eslint-disable-next-line es/no-json -- safe\nif (!path.JSON) path.JSON = { stringify: JSON.stringify };\n\n// eslint-disable-next-line no-unused-vars -- required for `.length`\nmodule.exports = function stringify(it, replacer, space) {\n return apply(path.JSON.stringify, null, arguments);\n};\n","'use strict';\nvar parent = require('../../es/json/stringify');\n\nmodule.exports = parent;\n","'use strict';\n/* global Bun -- Deno case */\nmodule.exports = typeof Bun == 'function' && Bun && typeof Bun.version == 'string';\n","'use strict';\nvar $TypeError = TypeError;\n\nmodule.exports = function (passed, required) {\n if (passed < required) throw new $TypeError('Not enough arguments');\n return passed;\n};\n","'use strict';\nvar global = require('../internals/global');\nvar apply = require('../internals/function-apply');\nvar isCallable = require('../internals/is-callable');\nvar ENGINE_IS_BUN = require('../internals/engine-is-bun');\nvar USER_AGENT = require('../internals/engine-user-agent');\nvar arraySlice = require('../internals/array-slice');\nvar validateArgumentsLength = require('../internals/validate-arguments-length');\n\nvar Function = global.Function;\n// dirty IE9- and Bun 0.3.0- checks\nvar WRAP = /MSIE .\\./.test(USER_AGENT) || ENGINE_IS_BUN && (function () {\n var version = global.Bun.version.split('.');\n return version.length < 3 || version[0] === '0' && (version[1] < 3 || version[1] === '3' && version[2] === '0');\n})();\n\n// IE9- / Bun 0.3.0- setTimeout / setInterval / setImmediate additional parameters fix\n// https://html.spec.whatwg.org/multipage/timers-and-user-prompts.html#timers\n// https://github.com/oven-sh/bun/issues/1633\nmodule.exports = function (scheduler, hasTimeArg) {\n var firstParamIndex = hasTimeArg ? 2 : 1;\n return WRAP ? function (handler, timeout /* , ...arguments */) {\n var boundArgs = validateArgumentsLength(arguments.length, 1) > firstParamIndex;\n var fn = isCallable(handler) ? handler : Function(handler);\n var params = boundArgs ? arraySlice(arguments, firstParamIndex) : [];\n var callback = boundArgs ? function () {\n apply(fn, this, params);\n } : fn;\n return hasTimeArg ? scheduler(callback, timeout) : scheduler(callback);\n } : scheduler;\n};\n","'use strict';\nvar $ = require('../internals/export');\nvar global = require('../internals/global');\nvar schedulersFix = require('../internals/schedulers-fix');\n\nvar setInterval = schedulersFix(global.setInterval, true);\n\n// Bun / IE9- setInterval additional parameters fix\n// https://html.spec.whatwg.org/multipage/timers-and-user-prompts.html#dom-setinterval\n$({ global: true, bind: true, forced: global.setInterval !== setInterval }, {\n setInterval: setInterval\n});\n","'use strict';\nvar $ = require('../internals/export');\nvar global = require('../internals/global');\nvar schedulersFix = require('../internals/schedulers-fix');\n\nvar setTimeout = schedulersFix(global.setTimeout, true);\n\n// Bun / IE9- setTimeout additional parameters fix\n// https://html.spec.whatwg.org/multipage/timers-and-user-prompts.html#dom-settimeout\n$({ global: true, bind: true, forced: global.setTimeout !== setTimeout }, {\n setTimeout: setTimeout\n});\n","'use strict';\nrequire('../modules/web.timers');\nvar path = require('../internals/path');\n\nmodule.exports = path.setTimeout;\n","'use strict';\nvar toObject = require('../internals/to-object');\nvar toAbsoluteIndex = require('../internals/to-absolute-index');\nvar lengthOfArrayLike = require('../internals/length-of-array-like');\n\n// `Array.prototype.fill` method implementation\n// https://tc39.es/ecma262/#sec-array.prototype.fill\nmodule.exports = function fill(value /* , start = 0, end = @length */) {\n var O = toObject(this);\n var length = lengthOfArrayLike(O);\n var argumentsLength = arguments.length;\n var index = toAbsoluteIndex(argumentsLength > 1 ? arguments[1] : undefined, length);\n var end = argumentsLength > 2 ? arguments[2] : undefined;\n var endPos = end === undefined ? length : toAbsoluteIndex(end, length);\n while (endPos > index) O[index++] = value;\n return O;\n};\n","'use strict';\nvar $ = require('../internals/export');\nvar fill = require('../internals/array-fill');\nvar addToUnscopables = require('../internals/add-to-unscopables');\n\n// `Array.prototype.fill` method\n// https://tc39.es/ecma262/#sec-array.prototype.fill\n$({ target: 'Array', proto: true }, {\n fill: fill\n});\n\n// https://tc39.es/ecma262/#sec-array.prototype-@@unscopables\naddToUnscopables('fill');\n","'use strict';\nrequire('../../../modules/es.array.fill');\nvar entryVirtual = require('../../../internals/entry-virtual');\n\nmodule.exports = entryVirtual('Array').fill;\n","/*! Hammer.JS - v2.0.17-rc - 2019-12-16\n * http://naver.github.io/egjs\n *\n * Forked By Naver egjs\n * Copyright (c) hammerjs\n * Licensed under the MIT license */\nfunction _extends() {\n _extends = Object.assign || function (target) {\n for (var i = 1; i < arguments.length; i++) {\n var source = arguments[i];\n\n for (var key in source) {\n if (Object.prototype.hasOwnProperty.call(source, key)) {\n target[key] = source[key];\n }\n }\n }\n\n return target;\n };\n\n return _extends.apply(this, arguments);\n}\n\nfunction _inheritsLoose(subClass, superClass) {\n subClass.prototype = Object.create(superClass.prototype);\n subClass.prototype.constructor = subClass;\n subClass.__proto__ = superClass;\n}\n\nfunction _assertThisInitialized(self) {\n if (self === void 0) {\n throw new ReferenceError(\"this hasn't been initialised - super() hasn't been called\");\n }\n\n return self;\n}\n\n/**\n * @private\n * extend object.\n * means that properties in dest will be overwritten by the ones in src.\n * @param {Object} target\n * @param {...Object} objects_to_assign\n * @returns {Object} target\n */\nvar assign;\n\nif (typeof Object.assign !== 'function') {\n assign = function assign(target) {\n if (target === undefined || target === null) {\n throw new TypeError('Cannot convert undefined or null to object');\n }\n\n var output = Object(target);\n\n for (var index = 1; index < arguments.length; index++) {\n var source = arguments[index];\n\n if (source !== undefined && source !== null) {\n for (var nextKey in source) {\n if (source.hasOwnProperty(nextKey)) {\n output[nextKey] = source[nextKey];\n }\n }\n }\n }\n\n return output;\n };\n} else {\n assign = Object.assign;\n}\n\nvar assign$1 = assign;\n\nvar VENDOR_PREFIXES = ['', 'webkit', 'Moz', 'MS', 'ms', 'o'];\nvar TEST_ELEMENT = typeof document === \"undefined\" ? {\n style: {}\n} : document.createElement('div');\nvar TYPE_FUNCTION = 'function';\nvar round = Math.round,\n abs = Math.abs;\nvar now = Date.now;\n\n/**\n * @private\n * get the prefixed property\n * @param {Object} obj\n * @param {String} property\n * @returns {String|Undefined} prefixed\n */\n\nfunction prefixed(obj, property) {\n var prefix;\n var prop;\n var camelProp = property[0].toUpperCase() + property.slice(1);\n var i = 0;\n\n while (i < VENDOR_PREFIXES.length) {\n prefix = VENDOR_PREFIXES[i];\n prop = prefix ? prefix + camelProp : property;\n\n if (prop in obj) {\n return prop;\n }\n\n i++;\n }\n\n return undefined;\n}\n\n/* eslint-disable no-new-func, no-nested-ternary */\nvar win;\n\nif (typeof window === \"undefined\") {\n // window is undefined in node.js\n win = {};\n} else {\n win = window;\n}\n\nvar PREFIXED_TOUCH_ACTION = prefixed(TEST_ELEMENT.style, 'touchAction');\nvar NATIVE_TOUCH_ACTION = PREFIXED_TOUCH_ACTION !== undefined;\nfunction getTouchActionProps() {\n if (!NATIVE_TOUCH_ACTION) {\n return false;\n }\n\n var touchMap = {};\n var cssSupports = win.CSS && win.CSS.supports;\n ['auto', 'manipulation', 'pan-y', 'pan-x', 'pan-x pan-y', 'none'].forEach(function (val) {\n // If css.supports is not supported but there is native touch-action assume it supports\n // all values. This is the case for IE 10 and 11.\n return touchMap[val] = cssSupports ? win.CSS.supports('touch-action', val) : true;\n });\n return touchMap;\n}\n\nvar TOUCH_ACTION_COMPUTE = 'compute';\nvar TOUCH_ACTION_AUTO = 'auto';\nvar TOUCH_ACTION_MANIPULATION = 'manipulation'; // not implemented\n\nvar TOUCH_ACTION_NONE = 'none';\nvar TOUCH_ACTION_PAN_X = 'pan-x';\nvar TOUCH_ACTION_PAN_Y = 'pan-y';\nvar TOUCH_ACTION_MAP = getTouchActionProps();\n\nvar MOBILE_REGEX = /mobile|tablet|ip(ad|hone|od)|android/i;\nvar SUPPORT_TOUCH = 'ontouchstart' in win;\nvar SUPPORT_POINTER_EVENTS = prefixed(win, 'PointerEvent') !== undefined;\nvar SUPPORT_ONLY_TOUCH = SUPPORT_TOUCH && MOBILE_REGEX.test(navigator.userAgent);\nvar INPUT_TYPE_TOUCH = 'touch';\nvar INPUT_TYPE_PEN = 'pen';\nvar INPUT_TYPE_MOUSE = 'mouse';\nvar INPUT_TYPE_KINECT = 'kinect';\nvar COMPUTE_INTERVAL = 25;\nvar INPUT_START = 1;\nvar INPUT_MOVE = 2;\nvar INPUT_END = 4;\nvar INPUT_CANCEL = 8;\nvar DIRECTION_NONE = 1;\nvar DIRECTION_LEFT = 2;\nvar DIRECTION_RIGHT = 4;\nvar DIRECTION_UP = 8;\nvar DIRECTION_DOWN = 16;\nvar DIRECTION_HORIZONTAL = DIRECTION_LEFT | DIRECTION_RIGHT;\nvar DIRECTION_VERTICAL = DIRECTION_UP | DIRECTION_DOWN;\nvar DIRECTION_ALL = DIRECTION_HORIZONTAL | DIRECTION_VERTICAL;\nvar PROPS_XY = ['x', 'y'];\nvar PROPS_CLIENT_XY = ['clientX', 'clientY'];\n\n/**\n * @private\n * walk objects and arrays\n * @param {Object} obj\n * @param {Function} iterator\n * @param {Object} context\n */\nfunction each(obj, iterator, context) {\n var i;\n\n if (!obj) {\n return;\n }\n\n if (obj.forEach) {\n obj.forEach(iterator, context);\n } else if (obj.length !== undefined) {\n i = 0;\n\n while (i < obj.length) {\n iterator.call(context, obj[i], i, obj);\n i++;\n }\n } else {\n for (i in obj) {\n obj.hasOwnProperty(i) && iterator.call(context, obj[i], i, obj);\n }\n }\n}\n\n/**\n * @private\n * let a boolean value also be a function that must return a boolean\n * this first item in args will be used as the context\n * @param {Boolean|Function} val\n * @param {Array} [args]\n * @returns {Boolean}\n */\n\nfunction boolOrFn(val, args) {\n if (typeof val === TYPE_FUNCTION) {\n return val.apply(args ? args[0] || undefined : undefined, args);\n }\n\n return val;\n}\n\n/**\n * @private\n * small indexOf wrapper\n * @param {String} str\n * @param {String} find\n * @returns {Boolean} found\n */\nfunction inStr(str, find) {\n return str.indexOf(find) > -1;\n}\n\n/**\n * @private\n * when the touchActions are collected they are not a valid value, so we need to clean things up. *\n * @param {String} actions\n * @returns {*}\n */\n\nfunction cleanTouchActions(actions) {\n // none\n if (inStr(actions, TOUCH_ACTION_NONE)) {\n return TOUCH_ACTION_NONE;\n }\n\n var hasPanX = inStr(actions, TOUCH_ACTION_PAN_X);\n var hasPanY = inStr(actions, TOUCH_ACTION_PAN_Y); // if both pan-x and pan-y are set (different recognizers\n // for different directions, e.g. horizontal pan but vertical swipe?)\n // we need none (as otherwise with pan-x pan-y combined none of these\n // recognizers will work, since the browser would handle all panning\n\n if (hasPanX && hasPanY) {\n return TOUCH_ACTION_NONE;\n } // pan-x OR pan-y\n\n\n if (hasPanX || hasPanY) {\n return hasPanX ? TOUCH_ACTION_PAN_X : TOUCH_ACTION_PAN_Y;\n } // manipulation\n\n\n if (inStr(actions, TOUCH_ACTION_MANIPULATION)) {\n return TOUCH_ACTION_MANIPULATION;\n }\n\n return TOUCH_ACTION_AUTO;\n}\n\n/**\n * @private\n * Touch Action\n * sets the touchAction property or uses the js alternative\n * @param {Manager} manager\n * @param {String} value\n * @constructor\n */\n\nvar TouchAction =\n/*#__PURE__*/\nfunction () {\n function TouchAction(manager, value) {\n this.manager = manager;\n this.set(value);\n }\n /**\n * @private\n * set the touchAction value on the element or enable the polyfill\n * @param {String} value\n */\n\n\n var _proto = TouchAction.prototype;\n\n _proto.set = function set(value) {\n // find out the touch-action by the event handlers\n if (value === TOUCH_ACTION_COMPUTE) {\n value = this.compute();\n }\n\n if (NATIVE_TOUCH_ACTION && this.manager.element.style && TOUCH_ACTION_MAP[value]) {\n this.manager.element.style[PREFIXED_TOUCH_ACTION] = value;\n }\n\n this.actions = value.toLowerCase().trim();\n };\n /**\n * @private\n * just re-set the touchAction value\n */\n\n\n _proto.update = function update() {\n this.set(this.manager.options.touchAction);\n };\n /**\n * @private\n * compute the value for the touchAction property based on the recognizer's settings\n * @returns {String} value\n */\n\n\n _proto.compute = function compute() {\n var actions = [];\n each(this.manager.recognizers, function (recognizer) {\n if (boolOrFn(recognizer.options.enable, [recognizer])) {\n actions = actions.concat(recognizer.getTouchAction());\n }\n });\n return cleanTouchActions(actions.join(' '));\n };\n /**\n * @private\n * this method is called on each input cycle and provides the preventing of the browser behavior\n * @param {Object} input\n */\n\n\n _proto.preventDefaults = function preventDefaults(input) {\n var srcEvent = input.srcEvent;\n var direction = input.offsetDirection; // if the touch action did prevented once this session\n\n if (this.manager.session.prevented) {\n srcEvent.preventDefault();\n return;\n }\n\n var actions = this.actions;\n var hasNone = inStr(actions, TOUCH_ACTION_NONE) && !TOUCH_ACTION_MAP[TOUCH_ACTION_NONE];\n var hasPanY = inStr(actions, TOUCH_ACTION_PAN_Y) && !TOUCH_ACTION_MAP[TOUCH_ACTION_PAN_Y];\n var hasPanX = inStr(actions, TOUCH_ACTION_PAN_X) && !TOUCH_ACTION_MAP[TOUCH_ACTION_PAN_X];\n\n if (hasNone) {\n // do not prevent defaults if this is a tap gesture\n var isTapPointer = input.pointers.length === 1;\n var isTapMovement = input.distance < 2;\n var isTapTouchTime = input.deltaTime < 250;\n\n if (isTapPointer && isTapMovement && isTapTouchTime) {\n return;\n }\n }\n\n if (hasPanX && hasPanY) {\n // `pan-x pan-y` means browser handles all scrolling/panning, do not prevent\n return;\n }\n\n if (hasNone || hasPanY && direction & DIRECTION_HORIZONTAL || hasPanX && direction & DIRECTION_VERTICAL) {\n return this.preventSrc(srcEvent);\n }\n };\n /**\n * @private\n * call preventDefault to prevent the browser's default behavior (scrolling in most cases)\n * @param {Object} srcEvent\n */\n\n\n _proto.preventSrc = function preventSrc(srcEvent) {\n this.manager.session.prevented = true;\n srcEvent.preventDefault();\n };\n\n return TouchAction;\n}();\n\n/**\n * @private\n * find if a node is in the given parent\n * @method hasParent\n * @param {HTMLElement} node\n * @param {HTMLElement} parent\n * @return {Boolean} found\n */\nfunction hasParent(node, parent) {\n while (node) {\n if (node === parent) {\n return true;\n }\n\n node = node.parentNode;\n }\n\n return false;\n}\n\n/**\n * @private\n * get the center of all the pointers\n * @param {Array} pointers\n * @return {Object} center contains `x` and `y` properties\n */\n\nfunction getCenter(pointers) {\n var pointersLength = pointers.length; // no need to loop when only one touch\n\n if (pointersLength === 1) {\n return {\n x: round(pointers[0].clientX),\n y: round(pointers[0].clientY)\n };\n }\n\n var x = 0;\n var y = 0;\n var i = 0;\n\n while (i < pointersLength) {\n x += pointers[i].clientX;\n y += pointers[i].clientY;\n i++;\n }\n\n return {\n x: round(x / pointersLength),\n y: round(y / pointersLength)\n };\n}\n\n/**\n * @private\n * create a simple clone from the input used for storage of firstInput and firstMultiple\n * @param {Object} input\n * @returns {Object} clonedInputData\n */\n\nfunction simpleCloneInputData(input) {\n // make a simple copy of the pointers because we will get a reference if we don't\n // we only need clientXY for the calculations\n var pointers = [];\n var i = 0;\n\n while (i < input.pointers.length) {\n pointers[i] = {\n clientX: round(input.pointers[i].clientX),\n clientY: round(input.pointers[i].clientY)\n };\n i++;\n }\n\n return {\n timeStamp: now(),\n pointers: pointers,\n center: getCenter(pointers),\n deltaX: input.deltaX,\n deltaY: input.deltaY\n };\n}\n\n/**\n * @private\n * calculate the absolute distance between two points\n * @param {Object} p1 {x, y}\n * @param {Object} p2 {x, y}\n * @param {Array} [props] containing x and y keys\n * @return {Number} distance\n */\n\nfunction getDistance(p1, p2, props) {\n if (!props) {\n props = PROPS_XY;\n }\n\n var x = p2[props[0]] - p1[props[0]];\n var y = p2[props[1]] - p1[props[1]];\n return Math.sqrt(x * x + y * y);\n}\n\n/**\n * @private\n * calculate the angle between two coordinates\n * @param {Object} p1\n * @param {Object} p2\n * @param {Array} [props] containing x and y keys\n * @return {Number} angle\n */\n\nfunction getAngle(p1, p2, props) {\n if (!props) {\n props = PROPS_XY;\n }\n\n var x = p2[props[0]] - p1[props[0]];\n var y = p2[props[1]] - p1[props[1]];\n return Math.atan2(y, x) * 180 / Math.PI;\n}\n\n/**\n * @private\n * get the direction between two points\n * @param {Number} x\n * @param {Number} y\n * @return {Number} direction\n */\n\nfunction getDirection(x, y) {\n if (x === y) {\n return DIRECTION_NONE;\n }\n\n if (abs(x) >= abs(y)) {\n return x < 0 ? DIRECTION_LEFT : DIRECTION_RIGHT;\n }\n\n return y < 0 ? DIRECTION_UP : DIRECTION_DOWN;\n}\n\nfunction computeDeltaXY(session, input) {\n var center = input.center; // let { offsetDelta:offset = {}, prevDelta = {}, prevInput = {} } = session;\n // jscs throwing error on defalut destructured values and without defaults tests fail\n\n var offset = session.offsetDelta || {};\n var prevDelta = session.prevDelta || {};\n var prevInput = session.prevInput || {};\n\n if (input.eventType === INPUT_START || prevInput.eventType === INPUT_END) {\n prevDelta = session.prevDelta = {\n x: prevInput.deltaX || 0,\n y: prevInput.deltaY || 0\n };\n offset = session.offsetDelta = {\n x: center.x,\n y: center.y\n };\n }\n\n input.deltaX = prevDelta.x + (center.x - offset.x);\n input.deltaY = prevDelta.y + (center.y - offset.y);\n}\n\n/**\n * @private\n * calculate the velocity between two points. unit is in px per ms.\n * @param {Number} deltaTime\n * @param {Number} x\n * @param {Number} y\n * @return {Object} velocity `x` and `y`\n */\nfunction getVelocity(deltaTime, x, y) {\n return {\n x: x / deltaTime || 0,\n y: y / deltaTime || 0\n };\n}\n\n/**\n * @private\n * calculate the scale factor between two pointersets\n * no scale is 1, and goes down to 0 when pinched together, and bigger when pinched out\n * @param {Array} start array of pointers\n * @param {Array} end array of pointers\n * @return {Number} scale\n */\n\nfunction getScale(start, end) {\n return getDistance(end[0], end[1], PROPS_CLIENT_XY) / getDistance(start[0], start[1], PROPS_CLIENT_XY);\n}\n\n/**\n * @private\n * calculate the rotation degrees between two pointersets\n * @param {Array} start array of pointers\n * @param {Array} end array of pointers\n * @return {Number} rotation\n */\n\nfunction getRotation(start, end) {\n return getAngle(end[1], end[0], PROPS_CLIENT_XY) + getAngle(start[1], start[0], PROPS_CLIENT_XY);\n}\n\n/**\n * @private\n * velocity is calculated every x ms\n * @param {Object} session\n * @param {Object} input\n */\n\nfunction computeIntervalInputData(session, input) {\n var last = session.lastInterval || input;\n var deltaTime = input.timeStamp - last.timeStamp;\n var velocity;\n var velocityX;\n var velocityY;\n var direction;\n\n if (input.eventType !== INPUT_CANCEL && (deltaTime > COMPUTE_INTERVAL || last.velocity === undefined)) {\n var deltaX = input.deltaX - last.deltaX;\n var deltaY = input.deltaY - last.deltaY;\n var v = getVelocity(deltaTime, deltaX, deltaY);\n velocityX = v.x;\n velocityY = v.y;\n velocity = abs(v.x) > abs(v.y) ? v.x : v.y;\n direction = getDirection(deltaX, deltaY);\n session.lastInterval = input;\n } else {\n // use latest velocity info if it doesn't overtake a minimum period\n velocity = last.velocity;\n velocityX = last.velocityX;\n velocityY = last.velocityY;\n direction = last.direction;\n }\n\n input.velocity = velocity;\n input.velocityX = velocityX;\n input.velocityY = velocityY;\n input.direction = direction;\n}\n\n/**\n* @private\n * extend the data with some usable properties like scale, rotate, velocity etc\n * @param {Object} manager\n * @param {Object} input\n */\n\nfunction computeInputData(manager, input) {\n var session = manager.session;\n var pointers = input.pointers;\n var pointersLength = pointers.length; // store the first input to calculate the distance and direction\n\n if (!session.firstInput) {\n session.firstInput = simpleCloneInputData(input);\n } // to compute scale and rotation we need to store the multiple touches\n\n\n if (pointersLength > 1 && !session.firstMultiple) {\n session.firstMultiple = simpleCloneInputData(input);\n } else if (pointersLength === 1) {\n session.firstMultiple = false;\n }\n\n var firstInput = session.firstInput,\n firstMultiple = session.firstMultiple;\n var offsetCenter = firstMultiple ? firstMultiple.center : firstInput.center;\n var center = input.center = getCenter(pointers);\n input.timeStamp = now();\n input.deltaTime = input.timeStamp - firstInput.timeStamp;\n input.angle = getAngle(offsetCenter, center);\n input.distance = getDistance(offsetCenter, center);\n computeDeltaXY(session, input);\n input.offsetDirection = getDirection(input.deltaX, input.deltaY);\n var overallVelocity = getVelocity(input.deltaTime, input.deltaX, input.deltaY);\n input.overallVelocityX = overallVelocity.x;\n input.overallVelocityY = overallVelocity.y;\n input.overallVelocity = abs(overallVelocity.x) > abs(overallVelocity.y) ? overallVelocity.x : overallVelocity.y;\n input.scale = firstMultiple ? getScale(firstMultiple.pointers, pointers) : 1;\n input.rotation = firstMultiple ? getRotation(firstMultiple.pointers, pointers) : 0;\n input.maxPointers = !session.prevInput ? input.pointers.length : input.pointers.length > session.prevInput.maxPointers ? input.pointers.length : session.prevInput.maxPointers;\n computeIntervalInputData(session, input); // find the correct target\n\n var target = manager.element;\n var srcEvent = input.srcEvent;\n var srcEventTarget;\n\n if (srcEvent.composedPath) {\n srcEventTarget = srcEvent.composedPath()[0];\n } else if (srcEvent.path) {\n srcEventTarget = srcEvent.path[0];\n } else {\n srcEventTarget = srcEvent.target;\n }\n\n if (hasParent(srcEventTarget, target)) {\n target = srcEventTarget;\n }\n\n input.target = target;\n}\n\n/**\n * @private\n * handle input events\n * @param {Manager} manager\n * @param {String} eventType\n * @param {Object} input\n */\n\nfunction inputHandler(manager, eventType, input) {\n var pointersLen = input.pointers.length;\n var changedPointersLen = input.changedPointers.length;\n var isFirst = eventType & INPUT_START && pointersLen - changedPointersLen === 0;\n var isFinal = eventType & (INPUT_END | INPUT_CANCEL) && pointersLen - changedPointersLen === 0;\n input.isFirst = !!isFirst;\n input.isFinal = !!isFinal;\n\n if (isFirst) {\n manager.session = {};\n } // source event is the normalized value of the domEvents\n // like 'touchstart, mouseup, pointerdown'\n\n\n input.eventType = eventType; // compute scale, rotation etc\n\n computeInputData(manager, input); // emit secret event\n\n manager.emit('hammer.input', input);\n manager.recognize(input);\n manager.session.prevInput = input;\n}\n\n/**\n * @private\n * split string on whitespace\n * @param {String} str\n * @returns {Array} words\n */\nfunction splitStr(str) {\n return str.trim().split(/\\s+/g);\n}\n\n/**\n * @private\n * addEventListener with multiple events at once\n * @param {EventTarget} target\n * @param {String} types\n * @param {Function} handler\n */\n\nfunction addEventListeners(target, types, handler) {\n each(splitStr(types), function (type) {\n target.addEventListener(type, handler, false);\n });\n}\n\n/**\n * @private\n * removeEventListener with multiple events at once\n * @param {EventTarget} target\n * @param {String} types\n * @param {Function} handler\n */\n\nfunction removeEventListeners(target, types, handler) {\n each(splitStr(types), function (type) {\n target.removeEventListener(type, handler, false);\n });\n}\n\n/**\n * @private\n * get the window object of an element\n * @param {HTMLElement} element\n * @returns {DocumentView|Window}\n */\nfunction getWindowForElement(element) {\n var doc = element.ownerDocument || element;\n return doc.defaultView || doc.parentWindow || window;\n}\n\n/**\n * @private\n * create new input type manager\n * @param {Manager} manager\n * @param {Function} callback\n * @returns {Input}\n * @constructor\n */\n\nvar Input =\n/*#__PURE__*/\nfunction () {\n function Input(manager, callback) {\n var self = this;\n this.manager = manager;\n this.callback = callback;\n this.element = manager.element;\n this.target = manager.options.inputTarget; // smaller wrapper around the handler, for the scope and the enabled state of the manager,\n // so when disabled the input events are completely bypassed.\n\n this.domHandler = function (ev) {\n if (boolOrFn(manager.options.enable, [manager])) {\n self.handler(ev);\n }\n };\n\n this.init();\n }\n /**\n * @private\n * should handle the inputEvent data and trigger the callback\n * @virtual\n */\n\n\n var _proto = Input.prototype;\n\n _proto.handler = function handler() {};\n /**\n * @private\n * bind the events\n */\n\n\n _proto.init = function init() {\n this.evEl && addEventListeners(this.element, this.evEl, this.domHandler);\n this.evTarget && addEventListeners(this.target, this.evTarget, this.domHandler);\n this.evWin && addEventListeners(getWindowForElement(this.element), this.evWin, this.domHandler);\n };\n /**\n * @private\n * unbind the events\n */\n\n\n _proto.destroy = function destroy() {\n this.evEl && removeEventListeners(this.element, this.evEl, this.domHandler);\n this.evTarget && removeEventListeners(this.target, this.evTarget, this.domHandler);\n this.evWin && removeEventListeners(getWindowForElement(this.element), this.evWin, this.domHandler);\n };\n\n return Input;\n}();\n\n/**\n * @private\n * find if a array contains the object using indexOf or a simple polyFill\n * @param {Array} src\n * @param {String} find\n * @param {String} [findByKey]\n * @return {Boolean|Number} false when not found, or the index\n */\nfunction inArray(src, find, findByKey) {\n if (src.indexOf && !findByKey) {\n return src.indexOf(find);\n } else {\n var i = 0;\n\n while (i < src.length) {\n if (findByKey && src[i][findByKey] == find || !findByKey && src[i] === find) {\n // do not use === here, test fails\n return i;\n }\n\n i++;\n }\n\n return -1;\n }\n}\n\nvar POINTER_INPUT_MAP = {\n pointerdown: INPUT_START,\n pointermove: INPUT_MOVE,\n pointerup: INPUT_END,\n pointercancel: INPUT_CANCEL,\n pointerout: INPUT_CANCEL\n}; // in IE10 the pointer types is defined as an enum\n\nvar IE10_POINTER_TYPE_ENUM = {\n 2: INPUT_TYPE_TOUCH,\n 3: INPUT_TYPE_PEN,\n 4: INPUT_TYPE_MOUSE,\n 5: INPUT_TYPE_KINECT // see https://twitter.com/jacobrossi/status/480596438489890816\n\n};\nvar POINTER_ELEMENT_EVENTS = 'pointerdown';\nvar POINTER_WINDOW_EVENTS = 'pointermove pointerup pointercancel'; // IE10 has prefixed support, and case-sensitive\n\nif (win.MSPointerEvent && !win.PointerEvent) {\n POINTER_ELEMENT_EVENTS = 'MSPointerDown';\n POINTER_WINDOW_EVENTS = 'MSPointerMove MSPointerUp MSPointerCancel';\n}\n/**\n * @private\n * Pointer events input\n * @constructor\n * @extends Input\n */\n\n\nvar PointerEventInput =\n/*#__PURE__*/\nfunction (_Input) {\n _inheritsLoose(PointerEventInput, _Input);\n\n function PointerEventInput() {\n var _this;\n\n var proto = PointerEventInput.prototype;\n proto.evEl = POINTER_ELEMENT_EVENTS;\n proto.evWin = POINTER_WINDOW_EVENTS;\n _this = _Input.apply(this, arguments) || this;\n _this.store = _this.manager.session.pointerEvents = [];\n return _this;\n }\n /**\n * @private\n * handle mouse events\n * @param {Object} ev\n */\n\n\n var _proto = PointerEventInput.prototype;\n\n _proto.handler = function handler(ev) {\n var store = this.store;\n var removePointer = false;\n var eventTypeNormalized = ev.type.toLowerCase().replace('ms', '');\n var eventType = POINTER_INPUT_MAP[eventTypeNormalized];\n var pointerType = IE10_POINTER_TYPE_ENUM[ev.pointerType] || ev.pointerType;\n var isTouch = pointerType === INPUT_TYPE_TOUCH; // get index of the event in the store\n\n var storeIndex = inArray(store, ev.pointerId, 'pointerId'); // start and mouse must be down\n\n if (eventType & INPUT_START && (ev.button === 0 || isTouch)) {\n if (storeIndex < 0) {\n store.push(ev);\n storeIndex = store.length - 1;\n }\n } else if (eventType & (INPUT_END | INPUT_CANCEL)) {\n removePointer = true;\n } // it not found, so the pointer hasn't been down (so it's probably a hover)\n\n\n if (storeIndex < 0) {\n return;\n } // update the event in the store\n\n\n store[storeIndex] = ev;\n this.callback(this.manager, eventType, {\n pointers: store,\n changedPointers: [ev],\n pointerType: pointerType,\n srcEvent: ev\n });\n\n if (removePointer) {\n // remove from the store\n store.splice(storeIndex, 1);\n }\n };\n\n return PointerEventInput;\n}(Input);\n\n/**\n * @private\n * convert array-like objects to real arrays\n * @param {Object} obj\n * @returns {Array}\n */\nfunction toArray(obj) {\n return Array.prototype.slice.call(obj, 0);\n}\n\n/**\n * @private\n * unique array with objects based on a key (like 'id') or just by the array's value\n * @param {Array} src [{id:1},{id:2},{id:1}]\n * @param {String} [key]\n * @param {Boolean} [sort=False]\n * @returns {Array} [{id:1},{id:2}]\n */\n\nfunction uniqueArray(src, key, sort) {\n var results = [];\n var values = [];\n var i = 0;\n\n while (i < src.length) {\n var val = key ? src[i][key] : src[i];\n\n if (inArray(values, val) < 0) {\n results.push(src[i]);\n }\n\n values[i] = val;\n i++;\n }\n\n if (sort) {\n if (!key) {\n results = results.sort();\n } else {\n results = results.sort(function (a, b) {\n return a[key] > b[key];\n });\n }\n }\n\n return results;\n}\n\nvar TOUCH_INPUT_MAP = {\n touchstart: INPUT_START,\n touchmove: INPUT_MOVE,\n touchend: INPUT_END,\n touchcancel: INPUT_CANCEL\n};\nvar TOUCH_TARGET_EVENTS = 'touchstart touchmove touchend touchcancel';\n/**\n * @private\n * Multi-user touch events input\n * @constructor\n * @extends Input\n */\n\nvar TouchInput =\n/*#__PURE__*/\nfunction (_Input) {\n _inheritsLoose(TouchInput, _Input);\n\n function TouchInput() {\n var _this;\n\n TouchInput.prototype.evTarget = TOUCH_TARGET_EVENTS;\n _this = _Input.apply(this, arguments) || this;\n _this.targetIds = {}; // this.evTarget = TOUCH_TARGET_EVENTS;\n\n return _this;\n }\n\n var _proto = TouchInput.prototype;\n\n _proto.handler = function handler(ev) {\n var type = TOUCH_INPUT_MAP[ev.type];\n var touches = getTouches.call(this, ev, type);\n\n if (!touches) {\n return;\n }\n\n this.callback(this.manager, type, {\n pointers: touches[0],\n changedPointers: touches[1],\n pointerType: INPUT_TYPE_TOUCH,\n srcEvent: ev\n });\n };\n\n return TouchInput;\n}(Input);\n\nfunction getTouches(ev, type) {\n var allTouches = toArray(ev.touches);\n var targetIds = this.targetIds; // when there is only one touch, the process can be simplified\n\n if (type & (INPUT_START | INPUT_MOVE) && allTouches.length === 1) {\n targetIds[allTouches[0].identifier] = true;\n return [allTouches, allTouches];\n }\n\n var i;\n var targetTouches;\n var changedTouches = toArray(ev.changedTouches);\n var changedTargetTouches = [];\n var target = this.target; // get target touches from touches\n\n targetTouches = allTouches.filter(function (touch) {\n return hasParent(touch.target, target);\n }); // collect touches\n\n if (type === INPUT_START) {\n i = 0;\n\n while (i < targetTouches.length) {\n targetIds[targetTouches[i].identifier] = true;\n i++;\n }\n } // filter changed touches to only contain touches that exist in the collected target ids\n\n\n i = 0;\n\n while (i < changedTouches.length) {\n if (targetIds[changedTouches[i].identifier]) {\n changedTargetTouches.push(changedTouches[i]);\n } // cleanup removed touches\n\n\n if (type & (INPUT_END | INPUT_CANCEL)) {\n delete targetIds[changedTouches[i].identifier];\n }\n\n i++;\n }\n\n if (!changedTargetTouches.length) {\n return;\n }\n\n return [// merge targetTouches with changedTargetTouches so it contains ALL touches, including 'end' and 'cancel'\n uniqueArray(targetTouches.concat(changedTargetTouches), 'identifier', true), changedTargetTouches];\n}\n\nvar MOUSE_INPUT_MAP = {\n mousedown: INPUT_START,\n mousemove: INPUT_MOVE,\n mouseup: INPUT_END\n};\nvar MOUSE_ELEMENT_EVENTS = 'mousedown';\nvar MOUSE_WINDOW_EVENTS = 'mousemove mouseup';\n/**\n * @private\n * Mouse events input\n * @constructor\n * @extends Input\n */\n\nvar MouseInput =\n/*#__PURE__*/\nfunction (_Input) {\n _inheritsLoose(MouseInput, _Input);\n\n function MouseInput() {\n var _this;\n\n var proto = MouseInput.prototype;\n proto.evEl = MOUSE_ELEMENT_EVENTS;\n proto.evWin = MOUSE_WINDOW_EVENTS;\n _this = _Input.apply(this, arguments) || this;\n _this.pressed = false; // mousedown state\n\n return _this;\n }\n /**\n * @private\n * handle mouse events\n * @param {Object} ev\n */\n\n\n var _proto = MouseInput.prototype;\n\n _proto.handler = function handler(ev) {\n var eventType = MOUSE_INPUT_MAP[ev.type]; // on start we want to have the left mouse button down\n\n if (eventType & INPUT_START && ev.button === 0) {\n this.pressed = true;\n }\n\n if (eventType & INPUT_MOVE && ev.which !== 1) {\n eventType = INPUT_END;\n } // mouse must be down\n\n\n if (!this.pressed) {\n return;\n }\n\n if (eventType & INPUT_END) {\n this.pressed = false;\n }\n\n this.callback(this.manager, eventType, {\n pointers: [ev],\n changedPointers: [ev],\n pointerType: INPUT_TYPE_MOUSE,\n srcEvent: ev\n });\n };\n\n return MouseInput;\n}(Input);\n\n/**\n * @private\n * Combined touch and mouse input\n *\n * Touch has a higher priority then mouse, and while touching no mouse events are allowed.\n * This because touch devices also emit mouse events while doing a touch.\n *\n * @constructor\n * @extends Input\n */\n\nvar DEDUP_TIMEOUT = 2500;\nvar DEDUP_DISTANCE = 25;\n\nfunction setLastTouch(eventData) {\n var _eventData$changedPoi = eventData.changedPointers,\n touch = _eventData$changedPoi[0];\n\n if (touch.identifier === this.primaryTouch) {\n var lastTouch = {\n x: touch.clientX,\n y: touch.clientY\n };\n var lts = this.lastTouches;\n this.lastTouches.push(lastTouch);\n\n var removeLastTouch = function removeLastTouch() {\n var i = lts.indexOf(lastTouch);\n\n if (i > -1) {\n lts.splice(i, 1);\n }\n };\n\n setTimeout(removeLastTouch, DEDUP_TIMEOUT);\n }\n}\n\nfunction recordTouches(eventType, eventData) {\n if (eventType & INPUT_START) {\n this.primaryTouch = eventData.changedPointers[0].identifier;\n setLastTouch.call(this, eventData);\n } else if (eventType & (INPUT_END | INPUT_CANCEL)) {\n setLastTouch.call(this, eventData);\n }\n}\n\nfunction isSyntheticEvent(eventData) {\n var x = eventData.srcEvent.clientX;\n var y = eventData.srcEvent.clientY;\n\n for (var i = 0; i < this.lastTouches.length; i++) {\n var t = this.lastTouches[i];\n var dx = Math.abs(x - t.x);\n var dy = Math.abs(y - t.y);\n\n if (dx <= DEDUP_DISTANCE && dy <= DEDUP_DISTANCE) {\n return true;\n }\n }\n\n return false;\n}\n\nvar TouchMouseInput =\n/*#__PURE__*/\nfunction () {\n var TouchMouseInput =\n /*#__PURE__*/\n function (_Input) {\n _inheritsLoose(TouchMouseInput, _Input);\n\n function TouchMouseInput(_manager, callback) {\n var _this;\n\n _this = _Input.call(this, _manager, callback) || this;\n\n _this.handler = function (manager, inputEvent, inputData) {\n var isTouch = inputData.pointerType === INPUT_TYPE_TOUCH;\n var isMouse = inputData.pointerType === INPUT_TYPE_MOUSE;\n\n if (isMouse && inputData.sourceCapabilities && inputData.sourceCapabilities.firesTouchEvents) {\n return;\n } // when we're in a touch event, record touches to de-dupe synthetic mouse event\n\n\n if (isTouch) {\n recordTouches.call(_assertThisInitialized(_assertThisInitialized(_this)), inputEvent, inputData);\n } else if (isMouse && isSyntheticEvent.call(_assertThisInitialized(_assertThisInitialized(_this)), inputData)) {\n return;\n }\n\n _this.callback(manager, inputEvent, inputData);\n };\n\n _this.touch = new TouchInput(_this.manager, _this.handler);\n _this.mouse = new MouseInput(_this.manager, _this.handler);\n _this.primaryTouch = null;\n _this.lastTouches = [];\n return _this;\n }\n /**\n * @private\n * handle mouse and touch events\n * @param {Hammer} manager\n * @param {String} inputEvent\n * @param {Object} inputData\n */\n\n\n var _proto = TouchMouseInput.prototype;\n\n /**\n * @private\n * remove the event listeners\n */\n _proto.destroy = function destroy() {\n this.touch.destroy();\n this.mouse.destroy();\n };\n\n return TouchMouseInput;\n }(Input);\n\n return TouchMouseInput;\n}();\n\n/**\n * @private\n * create new input type manager\n * called by the Manager constructor\n * @param {Hammer} manager\n * @returns {Input}\n */\n\nfunction createInputInstance(manager) {\n var Type; // let inputClass = manager.options.inputClass;\n\n var inputClass = manager.options.inputClass;\n\n if (inputClass) {\n Type = inputClass;\n } else if (SUPPORT_POINTER_EVENTS) {\n Type = PointerEventInput;\n } else if (SUPPORT_ONLY_TOUCH) {\n Type = TouchInput;\n } else if (!SUPPORT_TOUCH) {\n Type = MouseInput;\n } else {\n Type = TouchMouseInput;\n }\n\n return new Type(manager, inputHandler);\n}\n\n/**\n * @private\n * if the argument is an array, we want to execute the fn on each entry\n * if it aint an array we don't want to do a thing.\n * this is used by all the methods that accept a single and array argument.\n * @param {*|Array} arg\n * @param {String} fn\n * @param {Object} [context]\n * @returns {Boolean}\n */\n\nfunction invokeArrayArg(arg, fn, context) {\n if (Array.isArray(arg)) {\n each(arg, context[fn], context);\n return true;\n }\n\n return false;\n}\n\nvar STATE_POSSIBLE = 1;\nvar STATE_BEGAN = 2;\nvar STATE_CHANGED = 4;\nvar STATE_ENDED = 8;\nvar STATE_RECOGNIZED = STATE_ENDED;\nvar STATE_CANCELLED = 16;\nvar STATE_FAILED = 32;\n\n/**\n * @private\n * get a unique id\n * @returns {number} uniqueId\n */\nvar _uniqueId = 1;\nfunction uniqueId() {\n return _uniqueId++;\n}\n\n/**\n * @private\n * get a recognizer by name if it is bound to a manager\n * @param {Recognizer|String} otherRecognizer\n * @param {Recognizer} recognizer\n * @returns {Recognizer}\n */\nfunction getRecognizerByNameIfManager(otherRecognizer, recognizer) {\n var manager = recognizer.manager;\n\n if (manager) {\n return manager.get(otherRecognizer);\n }\n\n return otherRecognizer;\n}\n\n/**\n * @private\n * get a usable string, used as event postfix\n * @param {constant} state\n * @returns {String} state\n */\n\nfunction stateStr(state) {\n if (state & STATE_CANCELLED) {\n return 'cancel';\n } else if (state & STATE_ENDED) {\n return 'end';\n } else if (state & STATE_CHANGED) {\n return 'move';\n } else if (state & STATE_BEGAN) {\n return 'start';\n }\n\n return '';\n}\n\n/**\n * @private\n * Recognizer flow explained; *\n * All recognizers have the initial state of POSSIBLE when a input session starts.\n * The definition of a input session is from the first input until the last input, with all it's movement in it. *\n * Example session for mouse-input: mousedown -> mousemove -> mouseup\n *\n * On each recognizing cycle (see Manager.recognize) the .recognize() method is executed\n * which determines with state it should be.\n *\n * If the recognizer has the state FAILED, CANCELLED or RECOGNIZED (equals ENDED), it is reset to\n * POSSIBLE to give it another change on the next cycle.\n *\n * Possible\n * |\n * +-----+---------------+\n * | |\n * +-----+-----+ |\n * | | |\n * Failed Cancelled |\n * +-------+------+\n * | |\n * Recognized Began\n * |\n * Changed\n * |\n * Ended/Recognized\n */\n\n/**\n * @private\n * Recognizer\n * Every recognizer needs to extend from this class.\n * @constructor\n * @param {Object} options\n */\n\nvar Recognizer =\n/*#__PURE__*/\nfunction () {\n function Recognizer(options) {\n if (options === void 0) {\n options = {};\n }\n\n this.options = _extends({\n enable: true\n }, options);\n this.id = uniqueId();\n this.manager = null; // default is enable true\n\n this.state = STATE_POSSIBLE;\n this.simultaneous = {};\n this.requireFail = [];\n }\n /**\n * @private\n * set options\n * @param {Object} options\n * @return {Recognizer}\n */\n\n\n var _proto = Recognizer.prototype;\n\n _proto.set = function set(options) {\n assign$1(this.options, options); // also update the touchAction, in case something changed about the directions/enabled state\n\n this.manager && this.manager.touchAction.update();\n return this;\n };\n /**\n * @private\n * recognize simultaneous with an other recognizer.\n * @param {Recognizer} otherRecognizer\n * @returns {Recognizer} this\n */\n\n\n _proto.recognizeWith = function recognizeWith(otherRecognizer) {\n if (invokeArrayArg(otherRecognizer, 'recognizeWith', this)) {\n return this;\n }\n\n var simultaneous = this.simultaneous;\n otherRecognizer = getRecognizerByNameIfManager(otherRecognizer, this);\n\n if (!simultaneous[otherRecognizer.id]) {\n simultaneous[otherRecognizer.id] = otherRecognizer;\n otherRecognizer.recognizeWith(this);\n }\n\n return this;\n };\n /**\n * @private\n * drop the simultaneous link. it doesnt remove the link on the other recognizer.\n * @param {Recognizer} otherRecognizer\n * @returns {Recognizer} this\n */\n\n\n _proto.dropRecognizeWith = function dropRecognizeWith(otherRecognizer) {\n if (invokeArrayArg(otherRecognizer, 'dropRecognizeWith', this)) {\n return this;\n }\n\n otherRecognizer = getRecognizerByNameIfManager(otherRecognizer, this);\n delete this.simultaneous[otherRecognizer.id];\n return this;\n };\n /**\n * @private\n * recognizer can only run when an other is failing\n * @param {Recognizer} otherRecognizer\n * @returns {Recognizer} this\n */\n\n\n _proto.requireFailure = function requireFailure(otherRecognizer) {\n if (invokeArrayArg(otherRecognizer, 'requireFailure', this)) {\n return this;\n }\n\n var requireFail = this.requireFail;\n otherRecognizer = getRecognizerByNameIfManager(otherRecognizer, this);\n\n if (inArray(requireFail, otherRecognizer) === -1) {\n requireFail.push(otherRecognizer);\n otherRecognizer.requireFailure(this);\n }\n\n return this;\n };\n /**\n * @private\n * drop the requireFailure link. it does not remove the link on the other recognizer.\n * @param {Recognizer} otherRecognizer\n * @returns {Recognizer} this\n */\n\n\n _proto.dropRequireFailure = function dropRequireFailure(otherRecognizer) {\n if (invokeArrayArg(otherRecognizer, 'dropRequireFailure', this)) {\n return this;\n }\n\n otherRecognizer = getRecognizerByNameIfManager(otherRecognizer, this);\n var index = inArray(this.requireFail, otherRecognizer);\n\n if (index > -1) {\n this.requireFail.splice(index, 1);\n }\n\n return this;\n };\n /**\n * @private\n * has require failures boolean\n * @returns {boolean}\n */\n\n\n _proto.hasRequireFailures = function hasRequireFailures() {\n return this.requireFail.length > 0;\n };\n /**\n * @private\n * if the recognizer can recognize simultaneous with an other recognizer\n * @param {Recognizer} otherRecognizer\n * @returns {Boolean}\n */\n\n\n _proto.canRecognizeWith = function canRecognizeWith(otherRecognizer) {\n return !!this.simultaneous[otherRecognizer.id];\n };\n /**\n * @private\n * You should use `tryEmit` instead of `emit` directly to check\n * that all the needed recognizers has failed before emitting.\n * @param {Object} input\n */\n\n\n _proto.emit = function emit(input) {\n var self = this;\n var state = this.state;\n\n function emit(event) {\n self.manager.emit(event, input);\n } // 'panstart' and 'panmove'\n\n\n if (state < STATE_ENDED) {\n emit(self.options.event + stateStr(state));\n }\n\n emit(self.options.event); // simple 'eventName' events\n\n if (input.additionalEvent) {\n // additional event(panleft, panright, pinchin, pinchout...)\n emit(input.additionalEvent);\n } // panend and pancancel\n\n\n if (state >= STATE_ENDED) {\n emit(self.options.event + stateStr(state));\n }\n };\n /**\n * @private\n * Check that all the require failure recognizers has failed,\n * if true, it emits a gesture event,\n * otherwise, setup the state to FAILED.\n * @param {Object} input\n */\n\n\n _proto.tryEmit = function tryEmit(input) {\n if (this.canEmit()) {\n return this.emit(input);\n } // it's failing anyway\n\n\n this.state = STATE_FAILED;\n };\n /**\n * @private\n * can we emit?\n * @returns {boolean}\n */\n\n\n _proto.canEmit = function canEmit() {\n var i = 0;\n\n while (i < this.requireFail.length) {\n if (!(this.requireFail[i].state & (STATE_FAILED | STATE_POSSIBLE))) {\n return false;\n }\n\n i++;\n }\n\n return true;\n };\n /**\n * @private\n * update the recognizer\n * @param {Object} inputData\n */\n\n\n _proto.recognize = function recognize(inputData) {\n // make a new copy of the inputData\n // so we can change the inputData without messing up the other recognizers\n var inputDataClone = assign$1({}, inputData); // is is enabled and allow recognizing?\n\n if (!boolOrFn(this.options.enable, [this, inputDataClone])) {\n this.reset();\n this.state = STATE_FAILED;\n return;\n } // reset when we've reached the end\n\n\n if (this.state & (STATE_RECOGNIZED | STATE_CANCELLED | STATE_FAILED)) {\n this.state = STATE_POSSIBLE;\n }\n\n this.state = this.process(inputDataClone); // the recognizer has recognized a gesture\n // so trigger an event\n\n if (this.state & (STATE_BEGAN | STATE_CHANGED | STATE_ENDED | STATE_CANCELLED)) {\n this.tryEmit(inputDataClone);\n }\n };\n /**\n * @private\n * return the state of the recognizer\n * the actual recognizing happens in this method\n * @virtual\n * @param {Object} inputData\n * @returns {constant} STATE\n */\n\n /* jshint ignore:start */\n\n\n _proto.process = function process(inputData) {};\n /* jshint ignore:end */\n\n /**\n * @private\n * return the preferred touch-action\n * @virtual\n * @returns {Array}\n */\n\n\n _proto.getTouchAction = function getTouchAction() {};\n /**\n * @private\n * called when the gesture isn't allowed to recognize\n * like when another is being recognized or it is disabled\n * @virtual\n */\n\n\n _proto.reset = function reset() {};\n\n return Recognizer;\n}();\n\n/**\n * @private\n * A tap is recognized when the pointer is doing a small tap/click. Multiple taps are recognized if they occur\n * between the given interval and position. The delay option can be used to recognize multi-taps without firing\n * a single tap.\n *\n * The eventData from the emitted event contains the property `tapCount`, which contains the amount of\n * multi-taps being recognized.\n * @constructor\n * @extends Recognizer\n */\n\nvar TapRecognizer =\n/*#__PURE__*/\nfunction (_Recognizer) {\n _inheritsLoose(TapRecognizer, _Recognizer);\n\n function TapRecognizer(options) {\n var _this;\n\n if (options === void 0) {\n options = {};\n }\n\n _this = _Recognizer.call(this, _extends({\n event: 'tap',\n pointers: 1,\n taps: 1,\n interval: 300,\n // max time between the multi-tap taps\n time: 250,\n // max time of the pointer to be down (like finger on the screen)\n threshold: 9,\n // a minimal movement is ok, but keep it low\n posThreshold: 10\n }, options)) || this; // previous time and center,\n // used for tap counting\n\n _this.pTime = false;\n _this.pCenter = false;\n _this._timer = null;\n _this._input = null;\n _this.count = 0;\n return _this;\n }\n\n var _proto = TapRecognizer.prototype;\n\n _proto.getTouchAction = function getTouchAction() {\n return [TOUCH_ACTION_MANIPULATION];\n };\n\n _proto.process = function process(input) {\n var _this2 = this;\n\n var options = this.options;\n var validPointers = input.pointers.length === options.pointers;\n var validMovement = input.distance < options.threshold;\n var validTouchTime = input.deltaTime < options.time;\n this.reset();\n\n if (input.eventType & INPUT_START && this.count === 0) {\n return this.failTimeout();\n } // we only allow little movement\n // and we've reached an end event, so a tap is possible\n\n\n if (validMovement && validTouchTime && validPointers) {\n if (input.eventType !== INPUT_END) {\n return this.failTimeout();\n }\n\n var validInterval = this.pTime ? input.timeStamp - this.pTime < options.interval : true;\n var validMultiTap = !this.pCenter || getDistance(this.pCenter, input.center) < options.posThreshold;\n this.pTime = input.timeStamp;\n this.pCenter = input.center;\n\n if (!validMultiTap || !validInterval) {\n this.count = 1;\n } else {\n this.count += 1;\n }\n\n this._input = input; // if tap count matches we have recognized it,\n // else it has began recognizing...\n\n var tapCount = this.count % options.taps;\n\n if (tapCount === 0) {\n // no failing requirements, immediately trigger the tap event\n // or wait as long as the multitap interval to trigger\n if (!this.hasRequireFailures()) {\n return STATE_RECOGNIZED;\n } else {\n this._timer = setTimeout(function () {\n _this2.state = STATE_RECOGNIZED;\n\n _this2.tryEmit();\n }, options.interval);\n return STATE_BEGAN;\n }\n }\n }\n\n return STATE_FAILED;\n };\n\n _proto.failTimeout = function failTimeout() {\n var _this3 = this;\n\n this._timer = setTimeout(function () {\n _this3.state = STATE_FAILED;\n }, this.options.interval);\n return STATE_FAILED;\n };\n\n _proto.reset = function reset() {\n clearTimeout(this._timer);\n };\n\n _proto.emit = function emit() {\n if (this.state === STATE_RECOGNIZED) {\n this._input.tapCount = this.count;\n this.manager.emit(this.options.event, this._input);\n }\n };\n\n return TapRecognizer;\n}(Recognizer);\n\n/**\n * @private\n * This recognizer is just used as a base for the simple attribute recognizers.\n * @constructor\n * @extends Recognizer\n */\n\nvar AttrRecognizer =\n/*#__PURE__*/\nfunction (_Recognizer) {\n _inheritsLoose(AttrRecognizer, _Recognizer);\n\n function AttrRecognizer(options) {\n if (options === void 0) {\n options = {};\n }\n\n return _Recognizer.call(this, _extends({\n pointers: 1\n }, options)) || this;\n }\n /**\n * @private\n * Used to check if it the recognizer receives valid input, like input.distance > 10.\n * @memberof AttrRecognizer\n * @param {Object} input\n * @returns {Boolean} recognized\n */\n\n\n var _proto = AttrRecognizer.prototype;\n\n _proto.attrTest = function attrTest(input) {\n var optionPointers = this.options.pointers;\n return optionPointers === 0 || input.pointers.length === optionPointers;\n };\n /**\n * @private\n * Process the input and return the state for the recognizer\n * @memberof AttrRecognizer\n * @param {Object} input\n * @returns {*} State\n */\n\n\n _proto.process = function process(input) {\n var state = this.state;\n var eventType = input.eventType;\n var isRecognized = state & (STATE_BEGAN | STATE_CHANGED);\n var isValid = this.attrTest(input); // on cancel input and we've recognized before, return STATE_CANCELLED\n\n if (isRecognized && (eventType & INPUT_CANCEL || !isValid)) {\n return state | STATE_CANCELLED;\n } else if (isRecognized || isValid) {\n if (eventType & INPUT_END) {\n return state | STATE_ENDED;\n } else if (!(state & STATE_BEGAN)) {\n return STATE_BEGAN;\n }\n\n return state | STATE_CHANGED;\n }\n\n return STATE_FAILED;\n };\n\n return AttrRecognizer;\n}(Recognizer);\n\n/**\n * @private\n * direction cons to string\n * @param {constant} direction\n * @returns {String}\n */\n\nfunction directionStr(direction) {\n if (direction === DIRECTION_DOWN) {\n return 'down';\n } else if (direction === DIRECTION_UP) {\n return 'up';\n } else if (direction === DIRECTION_LEFT) {\n return 'left';\n } else if (direction === DIRECTION_RIGHT) {\n return 'right';\n }\n\n return '';\n}\n\n/**\n * @private\n * Pan\n * Recognized when the pointer is down and moved in the allowed direction.\n * @constructor\n * @extends AttrRecognizer\n */\n\nvar PanRecognizer =\n/*#__PURE__*/\nfunction (_AttrRecognizer) {\n _inheritsLoose(PanRecognizer, _AttrRecognizer);\n\n function PanRecognizer(options) {\n var _this;\n\n if (options === void 0) {\n options = {};\n }\n\n _this = _AttrRecognizer.call(this, _extends({\n event: 'pan',\n threshold: 10,\n pointers: 1,\n direction: DIRECTION_ALL\n }, options)) || this;\n _this.pX = null;\n _this.pY = null;\n return _this;\n }\n\n var _proto = PanRecognizer.prototype;\n\n _proto.getTouchAction = function getTouchAction() {\n var direction = this.options.direction;\n var actions = [];\n\n if (direction & DIRECTION_HORIZONTAL) {\n actions.push(TOUCH_ACTION_PAN_Y);\n }\n\n if (direction & DIRECTION_VERTICAL) {\n actions.push(TOUCH_ACTION_PAN_X);\n }\n\n return actions;\n };\n\n _proto.directionTest = function directionTest(input) {\n var options = this.options;\n var hasMoved = true;\n var distance = input.distance;\n var direction = input.direction;\n var x = input.deltaX;\n var y = input.deltaY; // lock to axis?\n\n if (!(direction & options.direction)) {\n if (options.direction & DIRECTION_HORIZONTAL) {\n direction = x === 0 ? DIRECTION_NONE : x < 0 ? DIRECTION_LEFT : DIRECTION_RIGHT;\n hasMoved = x !== this.pX;\n distance = Math.abs(input.deltaX);\n } else {\n direction = y === 0 ? DIRECTION_NONE : y < 0 ? DIRECTION_UP : DIRECTION_DOWN;\n hasMoved = y !== this.pY;\n distance = Math.abs(input.deltaY);\n }\n }\n\n input.direction = direction;\n return hasMoved && distance > options.threshold && direction & options.direction;\n };\n\n _proto.attrTest = function attrTest(input) {\n return AttrRecognizer.prototype.attrTest.call(this, input) && ( // replace with a super call\n this.state & STATE_BEGAN || !(this.state & STATE_BEGAN) && this.directionTest(input));\n };\n\n _proto.emit = function emit(input) {\n this.pX = input.deltaX;\n this.pY = input.deltaY;\n var direction = directionStr(input.direction);\n\n if (direction) {\n input.additionalEvent = this.options.event + direction;\n }\n\n _AttrRecognizer.prototype.emit.call(this, input);\n };\n\n return PanRecognizer;\n}(AttrRecognizer);\n\n/**\n * @private\n * Swipe\n * Recognized when the pointer is moving fast (velocity), with enough distance in the allowed direction.\n * @constructor\n * @extends AttrRecognizer\n */\n\nvar SwipeRecognizer =\n/*#__PURE__*/\nfunction (_AttrRecognizer) {\n _inheritsLoose(SwipeRecognizer, _AttrRecognizer);\n\n function SwipeRecognizer(options) {\n if (options === void 0) {\n options = {};\n }\n\n return _AttrRecognizer.call(this, _extends({\n event: 'swipe',\n threshold: 10,\n velocity: 0.3,\n direction: DIRECTION_HORIZONTAL | DIRECTION_VERTICAL,\n pointers: 1\n }, options)) || this;\n }\n\n var _proto = SwipeRecognizer.prototype;\n\n _proto.getTouchAction = function getTouchAction() {\n return PanRecognizer.prototype.getTouchAction.call(this);\n };\n\n _proto.attrTest = function attrTest(input) {\n var direction = this.options.direction;\n var velocity;\n\n if (direction & (DIRECTION_HORIZONTAL | DIRECTION_VERTICAL)) {\n velocity = input.overallVelocity;\n } else if (direction & DIRECTION_HORIZONTAL) {\n velocity = input.overallVelocityX;\n } else if (direction & DIRECTION_VERTICAL) {\n velocity = input.overallVelocityY;\n }\n\n return _AttrRecognizer.prototype.attrTest.call(this, input) && direction & input.offsetDirection && input.distance > this.options.threshold && input.maxPointers === this.options.pointers && abs(velocity) > this.options.velocity && input.eventType & INPUT_END;\n };\n\n _proto.emit = function emit(input) {\n var direction = directionStr(input.offsetDirection);\n\n if (direction) {\n this.manager.emit(this.options.event + direction, input);\n }\n\n this.manager.emit(this.options.event, input);\n };\n\n return SwipeRecognizer;\n}(AttrRecognizer);\n\n/**\n * @private\n * Pinch\n * Recognized when two or more pointers are moving toward (zoom-in) or away from each other (zoom-out).\n * @constructor\n * @extends AttrRecognizer\n */\n\nvar PinchRecognizer =\n/*#__PURE__*/\nfunction (_AttrRecognizer) {\n _inheritsLoose(PinchRecognizer, _AttrRecognizer);\n\n function PinchRecognizer(options) {\n if (options === void 0) {\n options = {};\n }\n\n return _AttrRecognizer.call(this, _extends({\n event: 'pinch',\n threshold: 0,\n pointers: 2\n }, options)) || this;\n }\n\n var _proto = PinchRecognizer.prototype;\n\n _proto.getTouchAction = function getTouchAction() {\n return [TOUCH_ACTION_NONE];\n };\n\n _proto.attrTest = function attrTest(input) {\n return _AttrRecognizer.prototype.attrTest.call(this, input) && (Math.abs(input.scale - 1) > this.options.threshold || this.state & STATE_BEGAN);\n };\n\n _proto.emit = function emit(input) {\n if (input.scale !== 1) {\n var inOut = input.scale < 1 ? 'in' : 'out';\n input.additionalEvent = this.options.event + inOut;\n }\n\n _AttrRecognizer.prototype.emit.call(this, input);\n };\n\n return PinchRecognizer;\n}(AttrRecognizer);\n\n/**\n * @private\n * Rotate\n * Recognized when two or more pointer are moving in a circular motion.\n * @constructor\n * @extends AttrRecognizer\n */\n\nvar RotateRecognizer =\n/*#__PURE__*/\nfunction (_AttrRecognizer) {\n _inheritsLoose(RotateRecognizer, _AttrRecognizer);\n\n function RotateRecognizer(options) {\n if (options === void 0) {\n options = {};\n }\n\n return _AttrRecognizer.call(this, _extends({\n event: 'rotate',\n threshold: 0,\n pointers: 2\n }, options)) || this;\n }\n\n var _proto = RotateRecognizer.prototype;\n\n _proto.getTouchAction = function getTouchAction() {\n return [TOUCH_ACTION_NONE];\n };\n\n _proto.attrTest = function attrTest(input) {\n return _AttrRecognizer.prototype.attrTest.call(this, input) && (Math.abs(input.rotation) > this.options.threshold || this.state & STATE_BEGAN);\n };\n\n return RotateRecognizer;\n}(AttrRecognizer);\n\n/**\n * @private\n * Press\n * Recognized when the pointer is down for x ms without any movement.\n * @constructor\n * @extends Recognizer\n */\n\nvar PressRecognizer =\n/*#__PURE__*/\nfunction (_Recognizer) {\n _inheritsLoose(PressRecognizer, _Recognizer);\n\n function PressRecognizer(options) {\n var _this;\n\n if (options === void 0) {\n options = {};\n }\n\n _this = _Recognizer.call(this, _extends({\n event: 'press',\n pointers: 1,\n time: 251,\n // minimal time of the pointer to be pressed\n threshold: 9\n }, options)) || this;\n _this._timer = null;\n _this._input = null;\n return _this;\n }\n\n var _proto = PressRecognizer.prototype;\n\n _proto.getTouchAction = function getTouchAction() {\n return [TOUCH_ACTION_AUTO];\n };\n\n _proto.process = function process(input) {\n var _this2 = this;\n\n var options = this.options;\n var validPointers = input.pointers.length === options.pointers;\n var validMovement = input.distance < options.threshold;\n var validTime = input.deltaTime > options.time;\n this._input = input; // we only allow little movement\n // and we've reached an end event, so a tap is possible\n\n if (!validMovement || !validPointers || input.eventType & (INPUT_END | INPUT_CANCEL) && !validTime) {\n this.reset();\n } else if (input.eventType & INPUT_START) {\n this.reset();\n this._timer = setTimeout(function () {\n _this2.state = STATE_RECOGNIZED;\n\n _this2.tryEmit();\n }, options.time);\n } else if (input.eventType & INPUT_END) {\n return STATE_RECOGNIZED;\n }\n\n return STATE_FAILED;\n };\n\n _proto.reset = function reset() {\n clearTimeout(this._timer);\n };\n\n _proto.emit = function emit(input) {\n if (this.state !== STATE_RECOGNIZED) {\n return;\n }\n\n if (input && input.eventType & INPUT_END) {\n this.manager.emit(this.options.event + \"up\", input);\n } else {\n this._input.timeStamp = now();\n this.manager.emit(this.options.event, this._input);\n }\n };\n\n return PressRecognizer;\n}(Recognizer);\n\nvar defaults = {\n /**\n * @private\n * set if DOM events are being triggered.\n * But this is slower and unused by simple implementations, so disabled by default.\n * @type {Boolean}\n * @default false\n */\n domEvents: false,\n\n /**\n * @private\n * The value for the touchAction property/fallback.\n * When set to `compute` it will magically set the correct value based on the added recognizers.\n * @type {String}\n * @default compute\n */\n touchAction: TOUCH_ACTION_COMPUTE,\n\n /**\n * @private\n * @type {Boolean}\n * @default true\n */\n enable: true,\n\n /**\n * @private\n * EXPERIMENTAL FEATURE -- can be removed/changed\n * Change the parent input target element.\n * If Null, then it is being set the to main element.\n * @type {Null|EventTarget}\n * @default null\n */\n inputTarget: null,\n\n /**\n * @private\n * force an input class\n * @type {Null|Function}\n * @default null\n */\n inputClass: null,\n\n /**\n * @private\n * Some CSS properties can be used to improve the working of Hammer.\n * Add them to this method and they will be set when creating a new Manager.\n * @namespace\n */\n cssProps: {\n /**\n * @private\n * Disables text selection to improve the dragging gesture. Mainly for desktop browsers.\n * @type {String}\n * @default 'none'\n */\n userSelect: \"none\",\n\n /**\n * @private\n * Disable the Windows Phone grippers when pressing an element.\n * @type {String}\n * @default 'none'\n */\n touchSelect: \"none\",\n\n /**\n * @private\n * Disables the default callout shown when you touch and hold a touch target.\n * On iOS, when you touch and hold a touch target such as a link, Safari displays\n * a callout containing information about the link. This property allows you to disable that callout.\n * @type {String}\n * @default 'none'\n */\n touchCallout: \"none\",\n\n /**\n * @private\n * Specifies whether zooming is enabled. Used by IE10>\n * @type {String}\n * @default 'none'\n */\n contentZooming: \"none\",\n\n /**\n * @private\n * Specifies that an entire element should be draggable instead of its contents. Mainly for desktop browsers.\n * @type {String}\n * @default 'none'\n */\n userDrag: \"none\",\n\n /**\n * @private\n * Overrides the highlight color shown when the user taps a link or a JavaScript\n * clickable element in iOS. This property obeys the alpha value, if specified.\n * @type {String}\n * @default 'rgba(0,0,0,0)'\n */\n tapHighlightColor: \"rgba(0,0,0,0)\"\n }\n};\n/**\n * @private\n * Default recognizer setup when calling `Hammer()`\n * When creating a new Manager these will be skipped.\n * This is separated with other defaults because of tree-shaking.\n * @type {Array}\n */\n\nvar preset = [[RotateRecognizer, {\n enable: false\n}], [PinchRecognizer, {\n enable: false\n}, ['rotate']], [SwipeRecognizer, {\n direction: DIRECTION_HORIZONTAL\n}], [PanRecognizer, {\n direction: DIRECTION_HORIZONTAL\n}, ['swipe']], [TapRecognizer], [TapRecognizer, {\n event: 'doubletap',\n taps: 2\n}, ['tap']], [PressRecognizer]];\n\nvar STOP = 1;\nvar FORCED_STOP = 2;\n/**\n * @private\n * add/remove the css properties as defined in manager.options.cssProps\n * @param {Manager} manager\n * @param {Boolean} add\n */\n\nfunction toggleCssProps(manager, add) {\n var element = manager.element;\n\n if (!element.style) {\n return;\n }\n\n var prop;\n each(manager.options.cssProps, function (value, name) {\n prop = prefixed(element.style, name);\n\n if (add) {\n manager.oldCssProps[prop] = element.style[prop];\n element.style[prop] = value;\n } else {\n element.style[prop] = manager.oldCssProps[prop] || \"\";\n }\n });\n\n if (!add) {\n manager.oldCssProps = {};\n }\n}\n/**\n * @private\n * trigger dom event\n * @param {String} event\n * @param {Object} data\n */\n\n\nfunction triggerDomEvent(event, data) {\n var gestureEvent = document.createEvent(\"Event\");\n gestureEvent.initEvent(event, true, true);\n gestureEvent.gesture = data;\n data.target.dispatchEvent(gestureEvent);\n}\n/**\n* @private\n * Manager\n * @param {HTMLElement} element\n * @param {Object} [options]\n * @constructor\n */\n\n\nvar Manager =\n/*#__PURE__*/\nfunction () {\n function Manager(element, options) {\n var _this = this;\n\n this.options = assign$1({}, defaults, options || {});\n this.options.inputTarget = this.options.inputTarget || element;\n this.handlers = {};\n this.session = {};\n this.recognizers = [];\n this.oldCssProps = {};\n this.element = element;\n this.input = createInputInstance(this);\n this.touchAction = new TouchAction(this, this.options.touchAction);\n toggleCssProps(this, true);\n each(this.options.recognizers, function (item) {\n var recognizer = _this.add(new item[0](item[1]));\n\n item[2] && recognizer.recognizeWith(item[2]);\n item[3] && recognizer.requireFailure(item[3]);\n }, this);\n }\n /**\n * @private\n * set options\n * @param {Object} options\n * @returns {Manager}\n */\n\n\n var _proto = Manager.prototype;\n\n _proto.set = function set(options) {\n assign$1(this.options, options); // Options that need a little more setup\n\n if (options.touchAction) {\n this.touchAction.update();\n }\n\n if (options.inputTarget) {\n // Clean up existing event listeners and reinitialize\n this.input.destroy();\n this.input.target = options.inputTarget;\n this.input.init();\n }\n\n return this;\n };\n /**\n * @private\n * stop recognizing for this session.\n * This session will be discarded, when a new [input]start event is fired.\n * When forced, the recognizer cycle is stopped immediately.\n * @param {Boolean} [force]\n */\n\n\n _proto.stop = function stop(force) {\n this.session.stopped = force ? FORCED_STOP : STOP;\n };\n /**\n * @private\n * run the recognizers!\n * called by the inputHandler function on every movement of the pointers (touches)\n * it walks through all the recognizers and tries to detect the gesture that is being made\n * @param {Object} inputData\n */\n\n\n _proto.recognize = function recognize(inputData) {\n var session = this.session;\n\n if (session.stopped) {\n return;\n } // run the touch-action polyfill\n\n\n this.touchAction.preventDefaults(inputData);\n var recognizer;\n var recognizers = this.recognizers; // this holds the recognizer that is being recognized.\n // so the recognizer's state needs to be BEGAN, CHANGED, ENDED or RECOGNIZED\n // if no recognizer is detecting a thing, it is set to `null`\n\n var curRecognizer = session.curRecognizer; // reset when the last recognizer is recognized\n // or when we're in a new session\n\n if (!curRecognizer || curRecognizer && curRecognizer.state & STATE_RECOGNIZED) {\n session.curRecognizer = null;\n curRecognizer = null;\n }\n\n var i = 0;\n\n while (i < recognizers.length) {\n recognizer = recognizers[i]; // find out if we are allowed try to recognize the input for this one.\n // 1. allow if the session is NOT forced stopped (see the .stop() method)\n // 2. allow if we still haven't recognized a gesture in this session, or the this recognizer is the one\n // that is being recognized.\n // 3. allow if the recognizer is allowed to run simultaneous with the current recognized recognizer.\n // this can be setup with the `recognizeWith()` method on the recognizer.\n\n if (session.stopped !== FORCED_STOP && ( // 1\n !curRecognizer || recognizer === curRecognizer || // 2\n recognizer.canRecognizeWith(curRecognizer))) {\n // 3\n recognizer.recognize(inputData);\n } else {\n recognizer.reset();\n } // if the recognizer has been recognizing the input as a valid gesture, we want to store this one as the\n // current active recognizer. but only if we don't already have an active recognizer\n\n\n if (!curRecognizer && recognizer.state & (STATE_BEGAN | STATE_CHANGED | STATE_ENDED)) {\n session.curRecognizer = recognizer;\n curRecognizer = recognizer;\n }\n\n i++;\n }\n };\n /**\n * @private\n * get a recognizer by its event name.\n * @param {Recognizer|String} recognizer\n * @returns {Recognizer|Null}\n */\n\n\n _proto.get = function get(recognizer) {\n if (recognizer instanceof Recognizer) {\n return recognizer;\n }\n\n var recognizers = this.recognizers;\n\n for (var i = 0; i < recognizers.length; i++) {\n if (recognizers[i].options.event === recognizer) {\n return recognizers[i];\n }\n }\n\n return null;\n };\n /**\n * @private add a recognizer to the manager\n * existing recognizers with the same event name will be removed\n * @param {Recognizer} recognizer\n * @returns {Recognizer|Manager}\n */\n\n\n _proto.add = function add(recognizer) {\n if (invokeArrayArg(recognizer, \"add\", this)) {\n return this;\n } // remove existing\n\n\n var existing = this.get(recognizer.options.event);\n\n if (existing) {\n this.remove(existing);\n }\n\n this.recognizers.push(recognizer);\n recognizer.manager = this;\n this.touchAction.update();\n return recognizer;\n };\n /**\n * @private\n * remove a recognizer by name or instance\n * @param {Recognizer|String} recognizer\n * @returns {Manager}\n */\n\n\n _proto.remove = function remove(recognizer) {\n if (invokeArrayArg(recognizer, \"remove\", this)) {\n return this;\n }\n\n var targetRecognizer = this.get(recognizer); // let's make sure this recognizer exists\n\n if (recognizer) {\n var recognizers = this.recognizers;\n var index = inArray(recognizers, targetRecognizer);\n\n if (index !== -1) {\n recognizers.splice(index, 1);\n this.touchAction.update();\n }\n }\n\n return this;\n };\n /**\n * @private\n * bind event\n * @param {String} events\n * @param {Function} handler\n * @returns {EventEmitter} this\n */\n\n\n _proto.on = function on(events, handler) {\n if (events === undefined || handler === undefined) {\n return this;\n }\n\n var handlers = this.handlers;\n each(splitStr(events), function (event) {\n handlers[event] = handlers[event] || [];\n handlers[event].push(handler);\n });\n return this;\n };\n /**\n * @private unbind event, leave emit blank to remove all handlers\n * @param {String} events\n * @param {Function} [handler]\n * @returns {EventEmitter} this\n */\n\n\n _proto.off = function off(events, handler) {\n if (events === undefined) {\n return this;\n }\n\n var handlers = this.handlers;\n each(splitStr(events), function (event) {\n if (!handler) {\n delete handlers[event];\n } else {\n handlers[event] && handlers[event].splice(inArray(handlers[event], handler), 1);\n }\n });\n return this;\n };\n /**\n * @private emit event to the listeners\n * @param {String} event\n * @param {Object} data\n */\n\n\n _proto.emit = function emit(event, data) {\n // we also want to trigger dom events\n if (this.options.domEvents) {\n triggerDomEvent(event, data);\n } // no handlers, so skip it all\n\n\n var handlers = this.handlers[event] && this.handlers[event].slice();\n\n if (!handlers || !handlers.length) {\n return;\n }\n\n data.type = event;\n\n data.preventDefault = function () {\n data.srcEvent.preventDefault();\n };\n\n var i = 0;\n\n while (i < handlers.length) {\n handlers[i](data);\n i++;\n }\n };\n /**\n * @private\n * destroy the manager and unbinds all events\n * it doesn't unbind dom events, that is the user own responsibility\n */\n\n\n _proto.destroy = function destroy() {\n this.element && toggleCssProps(this, false);\n this.handlers = {};\n this.session = {};\n this.input.destroy();\n this.element = null;\n };\n\n return Manager;\n}();\n\nvar SINGLE_TOUCH_INPUT_MAP = {\n touchstart: INPUT_START,\n touchmove: INPUT_MOVE,\n touchend: INPUT_END,\n touchcancel: INPUT_CANCEL\n};\nvar SINGLE_TOUCH_TARGET_EVENTS = 'touchstart';\nvar SINGLE_TOUCH_WINDOW_EVENTS = 'touchstart touchmove touchend touchcancel';\n/**\n * @private\n * Touch events input\n * @constructor\n * @extends Input\n */\n\nvar SingleTouchInput =\n/*#__PURE__*/\nfunction (_Input) {\n _inheritsLoose(SingleTouchInput, _Input);\n\n function SingleTouchInput() {\n var _this;\n\n var proto = SingleTouchInput.prototype;\n proto.evTarget = SINGLE_TOUCH_TARGET_EVENTS;\n proto.evWin = SINGLE_TOUCH_WINDOW_EVENTS;\n _this = _Input.apply(this, arguments) || this;\n _this.started = false;\n return _this;\n }\n\n var _proto = SingleTouchInput.prototype;\n\n _proto.handler = function handler(ev) {\n var type = SINGLE_TOUCH_INPUT_MAP[ev.type]; // should we handle the touch events?\n\n if (type === INPUT_START) {\n this.started = true;\n }\n\n if (!this.started) {\n return;\n }\n\n var touches = normalizeSingleTouches.call(this, ev, type); // when done, reset the started state\n\n if (type & (INPUT_END | INPUT_CANCEL) && touches[0].length - touches[1].length === 0) {\n this.started = false;\n }\n\n this.callback(this.manager, type, {\n pointers: touches[0],\n changedPointers: touches[1],\n pointerType: INPUT_TYPE_TOUCH,\n srcEvent: ev\n });\n };\n\n return SingleTouchInput;\n}(Input);\n\nfunction normalizeSingleTouches(ev, type) {\n var all = toArray(ev.touches);\n var changed = toArray(ev.changedTouches);\n\n if (type & (INPUT_END | INPUT_CANCEL)) {\n all = uniqueArray(all.concat(changed), 'identifier', true);\n }\n\n return [all, changed];\n}\n\n/**\n * @private\n * wrap a method with a deprecation warning and stack trace\n * @param {Function} method\n * @param {String} name\n * @param {String} message\n * @returns {Function} A new function wrapping the supplied method.\n */\nfunction deprecate(method, name, message) {\n var deprecationMessage = \"DEPRECATED METHOD: \" + name + \"\\n\" + message + \" AT \\n\";\n return function () {\n var e = new Error('get-stack-trace');\n var stack = e && e.stack ? e.stack.replace(/^[^\\(]+?[\\n$]/gm, '').replace(/^\\s+at\\s+/gm, '').replace(/^Object.\\s*\\(/gm, '{anonymous}()@') : 'Unknown Stack Trace';\n var log = window.console && (window.console.warn || window.console.log);\n\n if (log) {\n log.call(window.console, deprecationMessage, stack);\n }\n\n return method.apply(this, arguments);\n };\n}\n\n/**\n * @private\n * extend object.\n * means that properties in dest will be overwritten by the ones in src.\n * @param {Object} dest\n * @param {Object} src\n * @param {Boolean} [merge=false]\n * @returns {Object} dest\n */\n\nvar extend = deprecate(function (dest, src, merge) {\n var keys = Object.keys(src);\n var i = 0;\n\n while (i < keys.length) {\n if (!merge || merge && dest[keys[i]] === undefined) {\n dest[keys[i]] = src[keys[i]];\n }\n\n i++;\n }\n\n return dest;\n}, 'extend', 'Use `assign`.');\n\n/**\n * @private\n * merge the values from src in the dest.\n * means that properties that exist in dest will not be overwritten by src\n * @param {Object} dest\n * @param {Object} src\n * @returns {Object} dest\n */\n\nvar merge = deprecate(function (dest, src) {\n return extend(dest, src, true);\n}, 'merge', 'Use `assign`.');\n\n/**\n * @private\n * simple class inheritance\n * @param {Function} child\n * @param {Function} base\n * @param {Object} [properties]\n */\n\nfunction inherit(child, base, properties) {\n var baseP = base.prototype;\n var childP;\n childP = child.prototype = Object.create(baseP);\n childP.constructor = child;\n childP._super = baseP;\n\n if (properties) {\n assign$1(childP, properties);\n }\n}\n\n/**\n * @private\n * simple function bind\n * @param {Function} fn\n * @param {Object} context\n * @returns {Function}\n */\nfunction bindFn(fn, context) {\n return function boundFn() {\n return fn.apply(context, arguments);\n };\n}\n\n/**\n * @private\n * Simple way to create a manager with a default set of recognizers.\n * @param {HTMLElement} element\n * @param {Object} [options]\n * @constructor\n */\n\nvar Hammer =\n/*#__PURE__*/\nfunction () {\n var Hammer =\n /**\n * @private\n * @const {string}\n */\n function Hammer(element, options) {\n if (options === void 0) {\n options = {};\n }\n\n return new Manager(element, _extends({\n recognizers: preset.concat()\n }, options));\n };\n\n Hammer.VERSION = \"2.0.17-rc\";\n Hammer.DIRECTION_ALL = DIRECTION_ALL;\n Hammer.DIRECTION_DOWN = DIRECTION_DOWN;\n Hammer.DIRECTION_LEFT = DIRECTION_LEFT;\n Hammer.DIRECTION_RIGHT = DIRECTION_RIGHT;\n Hammer.DIRECTION_UP = DIRECTION_UP;\n Hammer.DIRECTION_HORIZONTAL = DIRECTION_HORIZONTAL;\n Hammer.DIRECTION_VERTICAL = DIRECTION_VERTICAL;\n Hammer.DIRECTION_NONE = DIRECTION_NONE;\n Hammer.DIRECTION_DOWN = DIRECTION_DOWN;\n Hammer.INPUT_START = INPUT_START;\n Hammer.INPUT_MOVE = INPUT_MOVE;\n Hammer.INPUT_END = INPUT_END;\n Hammer.INPUT_CANCEL = INPUT_CANCEL;\n Hammer.STATE_POSSIBLE = STATE_POSSIBLE;\n Hammer.STATE_BEGAN = STATE_BEGAN;\n Hammer.STATE_CHANGED = STATE_CHANGED;\n Hammer.STATE_ENDED = STATE_ENDED;\n Hammer.STATE_RECOGNIZED = STATE_RECOGNIZED;\n Hammer.STATE_CANCELLED = STATE_CANCELLED;\n Hammer.STATE_FAILED = STATE_FAILED;\n Hammer.Manager = Manager;\n Hammer.Input = Input;\n Hammer.TouchAction = TouchAction;\n Hammer.TouchInput = TouchInput;\n Hammer.MouseInput = MouseInput;\n Hammer.PointerEventInput = PointerEventInput;\n Hammer.TouchMouseInput = TouchMouseInput;\n Hammer.SingleTouchInput = SingleTouchInput;\n Hammer.Recognizer = Recognizer;\n Hammer.AttrRecognizer = AttrRecognizer;\n Hammer.Tap = TapRecognizer;\n Hammer.Pan = PanRecognizer;\n Hammer.Swipe = SwipeRecognizer;\n Hammer.Pinch = PinchRecognizer;\n Hammer.Rotate = RotateRecognizer;\n Hammer.Press = PressRecognizer;\n Hammer.on = addEventListeners;\n Hammer.off = removeEventListeners;\n Hammer.each = each;\n Hammer.merge = merge;\n Hammer.extend = extend;\n Hammer.bindFn = bindFn;\n Hammer.assign = assign$1;\n Hammer.inherit = inherit;\n Hammer.bindFn = bindFn;\n Hammer.prefixed = prefixed;\n Hammer.toArray = toArray;\n Hammer.inArray = inArray;\n Hammer.uniqueArray = uniqueArray;\n Hammer.splitStr = splitStr;\n Hammer.boolOrFn = boolOrFn;\n Hammer.hasParent = hasParent;\n Hammer.addEventListeners = addEventListeners;\n Hammer.removeEventListeners = removeEventListeners;\n Hammer.defaults = assign$1({}, defaults, {\n preset: preset\n });\n return Hammer;\n}();\n\n// style loader but by script tag, not by the loader.\n\nvar defaults$1 = Hammer.defaults;\n\nexport default Hammer;\nexport { INPUT_START, INPUT_MOVE, INPUT_END, INPUT_CANCEL, STATE_POSSIBLE, STATE_BEGAN, STATE_CHANGED, STATE_ENDED, STATE_RECOGNIZED, STATE_CANCELLED, STATE_FAILED, DIRECTION_NONE, DIRECTION_LEFT, DIRECTION_RIGHT, DIRECTION_UP, DIRECTION_DOWN, DIRECTION_HORIZONTAL, DIRECTION_VERTICAL, DIRECTION_ALL, Manager, Input, TouchAction, TouchInput, MouseInput, PointerEventInput, TouchMouseInput, SingleTouchInput, Recognizer, AttrRecognizer, TapRecognizer as Tap, PanRecognizer as Pan, SwipeRecognizer as Swipe, PinchRecognizer as Pinch, RotateRecognizer as Rotate, PressRecognizer as Press, addEventListeners as on, removeEventListeners as off, each, merge, extend, assign$1 as assign, inherit, bindFn, prefixed, toArray, inArray, uniqueArray, splitStr, boolOrFn, hasParent, addEventListeners, removeEventListeners, defaults$1 as defaults };\n//# sourceMappingURL=hammer.esm.js.map\n","'use strict';\nvar isPrototypeOf = require('../../internals/object-is-prototype-of');\nvar method = require('../array/virtual/fill');\n\nvar ArrayPrototype = Array.prototype;\n\nmodule.exports = function (it) {\n var own = it.fill;\n return it === ArrayPrototype || (isPrototypeOf(ArrayPrototype, it) && own === ArrayPrototype.fill) ? method : own;\n};\n","'use strict';\nvar parent = require('../../es/instance/fill');\n\nmodule.exports = parent;\n","/**\n * vis-util\n * https://github.com/visjs/vis-util\n *\n * utilitie collection for visjs\n *\n * @version 5.0.5\n * @date 2023-10-03T18:47:58.061Z\n *\n * @copyright (c) 2011-2017 Almende B.V, http://almende.com\n * @copyright (c) 2017-2019 visjs contributors, https://github.com/visjs\n *\n * @license\n * vis.js is dual licensed under both\n *\n * 1. The Apache 2.0 License\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * and\n *\n * 2. The MIT License\n * http://opensource.org/licenses/MIT\n *\n * vis.js may be distributed under either license.\n */\n\nimport Emitter from 'component-emitter';\nimport RealHammer from '@egjs/hammerjs';\n\n/**\r\n * Use this symbol to delete properies in deepObjectAssign.\r\n */\r\nconst DELETE = Symbol(\"DELETE\");\r\n/**\r\n * Pure version of deepObjectAssign, it doesn't modify any of it's arguments.\r\n *\r\n * @param base - The base object that fullfils the whole interface T.\r\n * @param updates - Updates that may change or delete props.\r\n * @returns A brand new instance with all the supplied objects deeply merged.\r\n */\r\nfunction pureDeepObjectAssign(base, ...updates) {\r\n return deepObjectAssign({}, base, ...updates);\r\n}\r\n/**\r\n * Deep version of object assign with additional deleting by the DELETE symbol.\r\n *\r\n * @param values - Objects to be deeply merged.\r\n * @returns The first object from values.\r\n */\r\nfunction deepObjectAssign(...values) {\r\n const merged = deepObjectAssignNonentry(...values);\r\n stripDelete(merged);\r\n return merged;\r\n}\r\n/**\r\n * Deep version of object assign with additional deleting by the DELETE symbol.\r\n *\r\n * @remarks\r\n * This doesn't strip the DELETE symbols so they may end up in the final object.\r\n * @param values - Objects to be deeply merged.\r\n * @returns The first object from values.\r\n */\r\nfunction deepObjectAssignNonentry(...values) {\r\n if (values.length < 2) {\r\n return values[0];\r\n }\r\n else if (values.length > 2) {\r\n return deepObjectAssignNonentry(deepObjectAssign(values[0], values[1]), ...values.slice(2));\r\n }\r\n const a = values[0];\r\n const b = values[1];\r\n if (a instanceof Date && b instanceof Date) {\r\n a.setTime(b.getTime());\r\n return a;\r\n }\r\n for (const prop of Reflect.ownKeys(b)) {\r\n if (!Object.prototype.propertyIsEnumerable.call(b, prop)) ;\r\n else if (b[prop] === DELETE) {\r\n delete a[prop];\r\n }\r\n else if (a[prop] !== null &&\r\n b[prop] !== null &&\r\n typeof a[prop] === \"object\" &&\r\n typeof b[prop] === \"object\" &&\r\n !Array.isArray(a[prop]) &&\r\n !Array.isArray(b[prop])) {\r\n a[prop] = deepObjectAssignNonentry(a[prop], b[prop]);\r\n }\r\n else {\r\n a[prop] = clone(b[prop]);\r\n }\r\n }\r\n return a;\r\n}\r\n/**\r\n * Deep clone given object or array. In case of primitive simply return.\r\n *\r\n * @param a - Anything.\r\n * @returns Deep cloned object/array or unchanged a.\r\n */\r\nfunction clone(a) {\r\n if (Array.isArray(a)) {\r\n return a.map((value) => clone(value));\r\n }\r\n else if (typeof a === \"object\" && a !== null) {\r\n if (a instanceof Date) {\r\n return new Date(a.getTime());\r\n }\r\n return deepObjectAssignNonentry({}, a);\r\n }\r\n else {\r\n return a;\r\n }\r\n}\r\n/**\r\n * Strip DELETE from given object.\r\n *\r\n * @param a - Object which may contain DELETE but won't after this is executed.\r\n */\r\nfunction stripDelete(a) {\r\n for (const prop of Object.keys(a)) {\r\n if (a[prop] === DELETE) {\r\n delete a[prop];\r\n }\r\n else if (typeof a[prop] === \"object\" && a[prop] !== null) {\r\n stripDelete(a[prop]);\r\n }\r\n }\r\n}\n\n/**\r\n * Seedable, fast and reasonably good (not crypto but more than okay for our\r\n * needs) random number generator.\r\n *\r\n * @remarks\r\n * Adapted from {@link https://web.archive.org/web/20110429100736/http://baagoe.com:80/en/RandomMusings/javascript}.\r\n * Original algorithm created by Johannes Baagøe \\ in 2010.\r\n */\r\n/**\r\n * Create a seeded pseudo random generator based on Alea by Johannes Baagøe.\r\n *\r\n * @param seed - All supplied arguments will be used as a seed. In case nothing\r\n * is supplied the current time will be used to seed the generator.\r\n * @returns A ready to use seeded generator.\r\n */\r\nfunction Alea(...seed) {\r\n return AleaImplementation(seed.length ? seed : [Date.now()]);\r\n}\r\n/**\r\n * An implementation of [[Alea]] without user input validation.\r\n *\r\n * @param seed - The data that will be used to seed the generator.\r\n * @returns A ready to use seeded generator.\r\n */\r\nfunction AleaImplementation(seed) {\r\n let [s0, s1, s2] = mashSeed(seed);\r\n let c = 1;\r\n const random = () => {\r\n const t = 2091639 * s0 + c * 2.3283064365386963e-10; // 2^-32\r\n s0 = s1;\r\n s1 = s2;\r\n return (s2 = t - (c = t | 0));\r\n };\r\n random.uint32 = () => random() * 0x100000000; // 2^32\r\n random.fract53 = () => random() + ((random() * 0x200000) | 0) * 1.1102230246251565e-16; // 2^-53\r\n random.algorithm = \"Alea\";\r\n random.seed = seed;\r\n random.version = \"0.9\";\r\n return random;\r\n}\r\n/**\r\n * Turn arbitrary data into values [[AleaImplementation]] can use to generate\r\n * random numbers.\r\n *\r\n * @param seed - Arbitrary data that will be used as the seed.\r\n * @returns Three numbers to use as initial values for [[AleaImplementation]].\r\n */\r\nfunction mashSeed(...seed) {\r\n const mash = Mash();\r\n let s0 = mash(\" \");\r\n let s1 = mash(\" \");\r\n let s2 = mash(\" \");\r\n for (let i = 0; i < seed.length; i++) {\r\n s0 -= mash(seed[i]);\r\n if (s0 < 0) {\r\n s0 += 1;\r\n }\r\n s1 -= mash(seed[i]);\r\n if (s1 < 0) {\r\n s1 += 1;\r\n }\r\n s2 -= mash(seed[i]);\r\n if (s2 < 0) {\r\n s2 += 1;\r\n }\r\n }\r\n return [s0, s1, s2];\r\n}\r\n/**\r\n * Create a new mash function.\r\n *\r\n * @returns A nonpure function that takes arbitrary [[Mashable]] data and turns\r\n * them into numbers.\r\n */\r\nfunction Mash() {\r\n let n = 0xefc8249d;\r\n return function (data) {\r\n const string = data.toString();\r\n for (let i = 0; i < string.length; i++) {\r\n n += string.charCodeAt(i);\r\n let h = 0.02519603282416938 * n;\r\n n = h >>> 0;\r\n h -= n;\r\n h *= n;\r\n n = h >>> 0;\r\n h -= n;\r\n n += h * 0x100000000; // 2^32\r\n }\r\n return (n >>> 0) * 2.3283064365386963e-10; // 2^-32\r\n };\r\n}\n\n/**\n * Setup a mock hammer.js object, for unit testing.\n *\n * Inspiration: https://github.com/uber/deck.gl/pull/658\n *\n * @returns {{on: noop, off: noop, destroy: noop, emit: noop, get: get}}\n */\nfunction hammerMock() {\n const noop = () => {};\n\n return {\n on: noop,\n off: noop,\n destroy: noop,\n emit: noop,\n\n get() {\n return {\n set: noop,\n };\n },\n };\n}\n\nconst Hammer$1 =\n typeof window !== \"undefined\"\n ? window.Hammer || RealHammer\n : function () {\n // hammer.js is only available in a browser, not in node.js. Replacing it with a mock object.\n return hammerMock();\n };\n\n/**\n * Turn an element into an clickToUse element.\n * When not active, the element has a transparent overlay. When the overlay is\n * clicked, the mode is changed to active.\n * When active, the element is displayed with a blue border around it, and\n * the interactive contents of the element can be used. When clicked outside\n * the element, the elements mode is changed to inactive.\n *\n * @param {Element} container\n * @class Activator\n */\nfunction Activator$1(container) {\n this._cleanupQueue = [];\n\n this.active = false;\n\n this._dom = {\n container,\n overlay: document.createElement(\"div\"),\n };\n\n this._dom.overlay.classList.add(\"vis-overlay\");\n\n this._dom.container.appendChild(this._dom.overlay);\n this._cleanupQueue.push(() => {\n this._dom.overlay.parentNode.removeChild(this._dom.overlay);\n });\n\n const hammer = Hammer$1(this._dom.overlay);\n hammer.on(\"tap\", this._onTapOverlay.bind(this));\n this._cleanupQueue.push(() => {\n hammer.destroy();\n // FIXME: cleaning up hammer instances doesn't work (Timeline not removed\n // from memory)\n });\n\n // block all touch events (except tap)\n const events = [\n \"tap\",\n \"doubletap\",\n \"press\",\n \"pinch\",\n \"pan\",\n \"panstart\",\n \"panmove\",\n \"panend\",\n ];\n events.forEach((event) => {\n hammer.on(event, (event) => {\n event.srcEvent.stopPropagation();\n });\n });\n\n // attach a click event to the window, in order to deactivate when clicking outside the timeline\n if (document && document.body) {\n this._onClick = (event) => {\n if (!_hasParent(event.target, container)) {\n this.deactivate();\n }\n };\n document.body.addEventListener(\"click\", this._onClick);\n this._cleanupQueue.push(() => {\n document.body.removeEventListener(\"click\", this._onClick);\n });\n }\n\n // prepare escape key listener for deactivating when active\n this._escListener = (event) => {\n if (\n \"key\" in event\n ? event.key === \"Escape\"\n : event.keyCode === 27 /* the keyCode is for IE11 */\n ) {\n this.deactivate();\n }\n };\n}\n\n// turn into an event emitter\nEmitter(Activator$1.prototype);\n\n// The currently active activator\nActivator$1.current = null;\n\n/**\n * Destroy the activator. Cleans up all created DOM and event listeners\n */\nActivator$1.prototype.destroy = function () {\n this.deactivate();\n\n for (const callback of this._cleanupQueue.splice(0).reverse()) {\n callback();\n }\n};\n\n/**\n * Activate the element\n * Overlay is hidden, element is decorated with a blue shadow border\n */\nActivator$1.prototype.activate = function () {\n // we allow only one active activator at a time\n if (Activator$1.current) {\n Activator$1.current.deactivate();\n }\n Activator$1.current = this;\n\n this.active = true;\n this._dom.overlay.style.display = \"none\";\n this._dom.container.classList.add(\"vis-active\");\n\n this.emit(\"change\");\n this.emit(\"activate\");\n\n // ugly hack: bind ESC after emitting the events, as the Network rebinds all\n // keyboard events on a 'change' event\n document.body.addEventListener(\"keydown\", this._escListener);\n};\n\n/**\n * Deactivate the element\n * Overlay is displayed on top of the element\n */\nActivator$1.prototype.deactivate = function () {\n this.active = false;\n this._dom.overlay.style.display = \"block\";\n this._dom.container.classList.remove(\"vis-active\");\n document.body.removeEventListener(\"keydown\", this._escListener);\n\n this.emit(\"change\");\n this.emit(\"deactivate\");\n};\n\n/**\n * Handle a tap event: activate the container\n *\n * @param {Event} event The event\n * @private\n */\nActivator$1.prototype._onTapOverlay = function (event) {\n // activate the container\n this.activate();\n event.srcEvent.stopPropagation();\n};\n\n/**\n * Test whether the element has the requested parent element somewhere in\n * its chain of parent nodes.\n *\n * @param {HTMLElement} element\n * @param {HTMLElement} parent\n * @returns {boolean} Returns true when the parent is found somewhere in the\n * chain of parent nodes.\n * @private\n */\nfunction _hasParent(element, parent) {\n while (element) {\n if (element === parent) {\n return true;\n }\n element = element.parentNode;\n }\n return false;\n}\n\n// utility functions\r\n// parse ASP.Net Date pattern,\r\n// for example '/Date(1198908717056)/' or '/Date(1198908717056-0700)/'\r\n// code from http://momentjs.com/\r\nconst ASPDateRegex = /^\\/?Date\\((-?\\d+)/i;\r\n// Color REs\r\nconst fullHexRE = /^#?([a-f\\d]{2})([a-f\\d]{2})([a-f\\d]{2})$/i;\r\nconst shortHexRE = /^#?([a-f\\d])([a-f\\d])([a-f\\d])$/i;\r\nconst rgbRE = /^rgb\\( *(1?\\d{1,2}|2[0-4]\\d|25[0-5]) *, *(1?\\d{1,2}|2[0-4]\\d|25[0-5]) *, *(1?\\d{1,2}|2[0-4]\\d|25[0-5]) *\\)$/i;\r\nconst rgbaRE = /^rgba\\( *(1?\\d{1,2}|2[0-4]\\d|25[0-5]) *, *(1?\\d{1,2}|2[0-4]\\d|25[0-5]) *, *(1?\\d{1,2}|2[0-4]\\d|25[0-5]) *, *([01]|0?\\.\\d+) *\\)$/i;\r\n/**\r\n * Test whether given object is a number.\r\n *\r\n * @param value - Input value of unknown type.\r\n * @returns True if number, false otherwise.\r\n */\r\nfunction isNumber(value) {\r\n return value instanceof Number || typeof value === \"number\";\r\n}\r\n/**\r\n * Remove everything in the DOM object.\r\n *\r\n * @param DOMobject - Node whose child nodes will be recursively deleted.\r\n */\r\nfunction recursiveDOMDelete(DOMobject) {\r\n if (DOMobject) {\r\n while (DOMobject.hasChildNodes() === true) {\r\n const child = DOMobject.firstChild;\r\n if (child) {\r\n recursiveDOMDelete(child);\r\n DOMobject.removeChild(child);\r\n }\r\n }\r\n }\r\n}\r\n/**\r\n * Test whether given object is a string.\r\n *\r\n * @param value - Input value of unknown type.\r\n * @returns True if string, false otherwise.\r\n */\r\nfunction isString(value) {\r\n return value instanceof String || typeof value === \"string\";\r\n}\r\n/**\r\n * Test whether given object is a object (not primitive or null).\r\n *\r\n * @param value - Input value of unknown type.\r\n * @returns True if not null object, false otherwise.\r\n */\r\nfunction isObject(value) {\r\n return typeof value === \"object\" && value !== null;\r\n}\r\n/**\r\n * Test whether given object is a Date, or a String containing a Date.\r\n *\r\n * @param value - Input value of unknown type.\r\n * @returns True if Date instance or string date representation, false otherwise.\r\n */\r\nfunction isDate(value) {\r\n if (value instanceof Date) {\r\n return true;\r\n }\r\n else if (isString(value)) {\r\n // test whether this string contains a date\r\n const match = ASPDateRegex.exec(value);\r\n if (match) {\r\n return true;\r\n }\r\n else if (!isNaN(Date.parse(value))) {\r\n return true;\r\n }\r\n }\r\n return false;\r\n}\r\n/**\r\n * Copy property from b to a if property present in a.\r\n * If property in b explicitly set to null, delete it if `allowDeletion` set.\r\n *\r\n * Internal helper routine, should not be exported. Not added to `exports` for that reason.\r\n *\r\n * @param a - Target object.\r\n * @param b - Source object.\r\n * @param prop - Name of property to copy from b to a.\r\n * @param allowDeletion - If true, delete property in a if explicitly set to null in b.\r\n */\r\nfunction copyOrDelete(a, b, prop, allowDeletion) {\r\n let doDeletion = false;\r\n if (allowDeletion === true) {\r\n doDeletion = b[prop] === null && a[prop] !== undefined;\r\n }\r\n if (doDeletion) {\r\n delete a[prop];\r\n }\r\n else {\r\n a[prop] = b[prop]; // Remember, this is a reference copy!\r\n }\r\n}\r\n/**\r\n * Fill an object with a possibly partially defined other object.\r\n *\r\n * Only copies values for the properties already present in a.\r\n * That means an object is not created on a property if only the b object has it.\r\n *\r\n * @param a - The object that will have it's properties updated.\r\n * @param b - The object with property updates.\r\n * @param allowDeletion - If true, delete properties in a that are explicitly set to null in b.\r\n */\r\nfunction fillIfDefined(a, b, allowDeletion = false) {\r\n // NOTE: iteration of properties of a\r\n // NOTE: prototype properties iterated over as well\r\n for (const prop in a) {\r\n if (b[prop] !== undefined) {\r\n if (b[prop] === null || typeof b[prop] !== \"object\") {\r\n // Note: typeof null === 'object'\r\n copyOrDelete(a, b, prop, allowDeletion);\r\n }\r\n else {\r\n const aProp = a[prop];\r\n const bProp = b[prop];\r\n if (isObject(aProp) && isObject(bProp)) {\r\n fillIfDefined(aProp, bProp, allowDeletion);\r\n }\r\n }\r\n }\r\n }\r\n}\r\n/**\r\n * Copy the values of all of the enumerable own properties from one or more source objects to a\r\n * target object. Returns the target object.\r\n *\r\n * @param target - The target object to copy to.\r\n * @param source - The source object from which to copy properties.\r\n * @returns The target object.\r\n */\r\nconst extend = Object.assign;\r\n/**\r\n * Extend object a with selected properties of object b or a series of objects.\r\n *\r\n * @remarks\r\n * Only properties with defined values are copied.\r\n * @param props - Properties to be copied to a.\r\n * @param a - The target.\r\n * @param others - The sources.\r\n * @returns Argument a.\r\n */\r\nfunction selectiveExtend(props, a, ...others) {\r\n if (!Array.isArray(props)) {\r\n throw new Error(\"Array with property names expected as first argument\");\r\n }\r\n for (const other of others) {\r\n for (let p = 0; p < props.length; p++) {\r\n const prop = props[p];\r\n if (other && Object.prototype.hasOwnProperty.call(other, prop)) {\r\n a[prop] = other[prop];\r\n }\r\n }\r\n }\r\n return a;\r\n}\r\n/**\r\n * Extend object a with selected properties of object b.\r\n * Only properties with defined values are copied.\r\n *\r\n * @remarks\r\n * Previous version of this routine implied that multiple source objects could\r\n * be used; however, the implementation was **wrong**. Since multiple (\\>1)\r\n * sources weren't used anywhere in the `vis.js` code, this has been removed\r\n * @param props - Names of first-level properties to copy over.\r\n * @param a - Target object.\r\n * @param b - Source object.\r\n * @param allowDeletion - If true, delete property in a if explicitly set to null in b.\r\n * @returns Argument a.\r\n */\r\nfunction selectiveDeepExtend(props, a, b, allowDeletion = false) {\r\n // TODO: add support for Arrays to deepExtend\r\n if (Array.isArray(b)) {\r\n throw new TypeError(\"Arrays are not supported by deepExtend\");\r\n }\r\n for (let p = 0; p < props.length; p++) {\r\n const prop = props[p];\r\n if (Object.prototype.hasOwnProperty.call(b, prop)) {\r\n if (b[prop] && b[prop].constructor === Object) {\r\n if (a[prop] === undefined) {\r\n a[prop] = {};\r\n }\r\n if (a[prop].constructor === Object) {\r\n deepExtend(a[prop], b[prop], false, allowDeletion);\r\n }\r\n else {\r\n copyOrDelete(a, b, prop, allowDeletion);\r\n }\r\n }\r\n else if (Array.isArray(b[prop])) {\r\n throw new TypeError(\"Arrays are not supported by deepExtend\");\r\n }\r\n else {\r\n copyOrDelete(a, b, prop, allowDeletion);\r\n }\r\n }\r\n }\r\n return a;\r\n}\r\n/**\r\n * Extend object `a` with properties of object `b`, ignoring properties which\r\n * are explicitly specified to be excluded.\r\n *\r\n * @remarks\r\n * The properties of `b` are considered for copying. Properties which are\r\n * themselves objects are are also extended. Only properties with defined\r\n * values are copied.\r\n * @param propsToExclude - Names of properties which should *not* be copied.\r\n * @param a - Object to extend.\r\n * @param b - Object to take properties from for extension.\r\n * @param allowDeletion - If true, delete properties in a that are explicitly\r\n * set to null in b.\r\n * @returns Argument a.\r\n */\r\nfunction selectiveNotDeepExtend(propsToExclude, a, b, allowDeletion = false) {\r\n // TODO: add support for Arrays to deepExtend\r\n // NOTE: array properties have an else-below; apparently, there is a problem here.\r\n if (Array.isArray(b)) {\r\n throw new TypeError(\"Arrays are not supported by deepExtend\");\r\n }\r\n for (const prop in b) {\r\n if (!Object.prototype.hasOwnProperty.call(b, prop)) {\r\n continue;\r\n } // Handle local properties only\r\n if (propsToExclude.includes(prop)) {\r\n continue;\r\n } // In exclusion list, skip\r\n if (b[prop] && b[prop].constructor === Object) {\r\n if (a[prop] === undefined) {\r\n a[prop] = {};\r\n }\r\n if (a[prop].constructor === Object) {\r\n deepExtend(a[prop], b[prop]); // NOTE: allowDeletion not propagated!\r\n }\r\n else {\r\n copyOrDelete(a, b, prop, allowDeletion);\r\n }\r\n }\r\n else if (Array.isArray(b[prop])) {\r\n a[prop] = [];\r\n for (let i = 0; i < b[prop].length; i++) {\r\n a[prop].push(b[prop][i]);\r\n }\r\n }\r\n else {\r\n copyOrDelete(a, b, prop, allowDeletion);\r\n }\r\n }\r\n return a;\r\n}\r\n/**\r\n * Deep extend an object a with the properties of object b.\r\n *\r\n * @param a - Target object.\r\n * @param b - Source object.\r\n * @param protoExtend - If true, the prototype values will also be extended.\r\n * (That is the options objects that inherit from others will also get the\r\n * inherited options).\r\n * @param allowDeletion - If true, the values of fields that are null will be deleted.\r\n * @returns Argument a.\r\n */\r\nfunction deepExtend(a, b, protoExtend = false, allowDeletion = false) {\r\n for (const prop in b) {\r\n if (Object.prototype.hasOwnProperty.call(b, prop) || protoExtend === true) {\r\n if (typeof b[prop] === \"object\" &&\r\n b[prop] !== null &&\r\n Object.getPrototypeOf(b[prop]) === Object.prototype) {\r\n if (a[prop] === undefined) {\r\n a[prop] = deepExtend({}, b[prop], protoExtend); // NOTE: allowDeletion not propagated!\r\n }\r\n else if (typeof a[prop] === \"object\" &&\r\n a[prop] !== null &&\r\n Object.getPrototypeOf(a[prop]) === Object.prototype) {\r\n deepExtend(a[prop], b[prop], protoExtend); // NOTE: allowDeletion not propagated!\r\n }\r\n else {\r\n copyOrDelete(a, b, prop, allowDeletion);\r\n }\r\n }\r\n else if (Array.isArray(b[prop])) {\r\n a[prop] = b[prop].slice();\r\n }\r\n else {\r\n copyOrDelete(a, b, prop, allowDeletion);\r\n }\r\n }\r\n }\r\n return a;\r\n}\r\n/**\r\n * Test whether all elements in two arrays are equal.\r\n *\r\n * @param a - First array.\r\n * @param b - Second array.\r\n * @returns True if both arrays have the same length and same elements (1 = '1').\r\n */\r\nfunction equalArray(a, b) {\r\n if (a.length !== b.length) {\r\n return false;\r\n }\r\n for (let i = 0, len = a.length; i < len; i++) {\r\n if (a[i] != b[i]) {\r\n return false;\r\n }\r\n }\r\n return true;\r\n}\r\n/**\r\n * Get the type of an object, for example exports.getType([]) returns 'Array'.\r\n *\r\n * @param object - Input value of unknown type.\r\n * @returns Detected type.\r\n */\r\nfunction getType(object) {\r\n const type = typeof object;\r\n if (type === \"object\") {\r\n if (object === null) {\r\n return \"null\";\r\n }\r\n if (object instanceof Boolean) {\r\n return \"Boolean\";\r\n }\r\n if (object instanceof Number) {\r\n return \"Number\";\r\n }\r\n if (object instanceof String) {\r\n return \"String\";\r\n }\r\n if (Array.isArray(object)) {\r\n return \"Array\";\r\n }\r\n if (object instanceof Date) {\r\n return \"Date\";\r\n }\r\n return \"Object\";\r\n }\r\n if (type === \"number\") {\r\n return \"Number\";\r\n }\r\n if (type === \"boolean\") {\r\n return \"Boolean\";\r\n }\r\n if (type === \"string\") {\r\n return \"String\";\r\n }\r\n if (type === undefined) {\r\n return \"undefined\";\r\n }\r\n return type;\r\n}\r\n/**\r\n * Used to extend an array and copy it. This is used to propagate paths recursively.\r\n *\r\n * @param arr - First part.\r\n * @param newValue - The value to be aadded into the array.\r\n * @returns A new array with all items from arr and newValue (which is last).\r\n */\r\nfunction copyAndExtendArray(arr, newValue) {\r\n return [...arr, newValue];\r\n}\r\n/**\r\n * Used to extend an array and copy it. This is used to propagate paths recursively.\r\n *\r\n * @param arr - The array to be copied.\r\n * @returns Shallow copy of arr.\r\n */\r\nfunction copyArray(arr) {\r\n return arr.slice();\r\n}\r\n/**\r\n * Retrieve the absolute left value of a DOM element.\r\n *\r\n * @param elem - A dom element, for example a div.\r\n * @returns The absolute left position of this element in the browser page.\r\n */\r\nfunction getAbsoluteLeft(elem) {\r\n return elem.getBoundingClientRect().left;\r\n}\r\n/**\r\n * Retrieve the absolute right value of a DOM element.\r\n *\r\n * @param elem - A dom element, for example a div.\r\n * @returns The absolute right position of this element in the browser page.\r\n */\r\nfunction getAbsoluteRight(elem) {\r\n return elem.getBoundingClientRect().right;\r\n}\r\n/**\r\n * Retrieve the absolute top value of a DOM element.\r\n *\r\n * @param elem - A dom element, for example a div.\r\n * @returns The absolute top position of this element in the browser page.\r\n */\r\nfunction getAbsoluteTop(elem) {\r\n return elem.getBoundingClientRect().top;\r\n}\r\n/**\r\n * Add a className to the given elements style.\r\n *\r\n * @param elem - The element to which the classes will be added.\r\n * @param classNames - Space separated list of classes.\r\n */\r\nfunction addClassName(elem, classNames) {\r\n let classes = elem.className.split(\" \");\r\n const newClasses = classNames.split(\" \");\r\n classes = classes.concat(newClasses.filter(function (className) {\r\n return !classes.includes(className);\r\n }));\r\n elem.className = classes.join(\" \");\r\n}\r\n/**\r\n * Remove a className from the given elements style.\r\n *\r\n * @param elem - The element from which the classes will be removed.\r\n * @param classNames - Space separated list of classes.\r\n */\r\nfunction removeClassName(elem, classNames) {\r\n let classes = elem.className.split(\" \");\r\n const oldClasses = classNames.split(\" \");\r\n classes = classes.filter(function (className) {\r\n return !oldClasses.includes(className);\r\n });\r\n elem.className = classes.join(\" \");\r\n}\r\n/**\r\n * For each method for both arrays and objects.\r\n * In case of an array, the built-in Array.forEach() is applied (**No, it's not!**).\r\n * In case of an Object, the method loops over all properties of the object.\r\n *\r\n * @param object - An Object or Array to be iterated over.\r\n * @param callback - Array.forEach-like callback.\r\n */\r\nfunction forEach(object, callback) {\r\n if (Array.isArray(object)) {\r\n // array\r\n const len = object.length;\r\n for (let i = 0; i < len; i++) {\r\n callback(object[i], i, object);\r\n }\r\n }\r\n else {\r\n // object\r\n for (const key in object) {\r\n if (Object.prototype.hasOwnProperty.call(object, key)) {\r\n callback(object[key], key, object);\r\n }\r\n }\r\n }\r\n}\r\n/**\r\n * Convert an object into an array: all objects properties are put into the array. The resulting array is unordered.\r\n *\r\n * @param o - Object that contains the properties and methods.\r\n * @returns An array of unordered values.\r\n */\r\nconst toArray = Object.values;\r\n/**\r\n * Update a property in an object.\r\n *\r\n * @param object - The object whose property will be updated.\r\n * @param key - Name of the property to be updated.\r\n * @param value - The new value to be assigned.\r\n * @returns Whether the value was updated (true) or already strictly the same in the original object (false).\r\n */\r\nfunction updateProperty(object, key, value) {\r\n if (object[key] !== value) {\r\n object[key] = value;\r\n return true;\r\n }\r\n else {\r\n return false;\r\n }\r\n}\r\n/**\r\n * Throttle the given function to be only executed once per animation frame.\r\n *\r\n * @param fn - The original function.\r\n * @returns The throttled function.\r\n */\r\nfunction throttle(fn) {\r\n let scheduled = false;\r\n return () => {\r\n if (!scheduled) {\r\n scheduled = true;\r\n requestAnimationFrame(() => {\r\n scheduled = false;\r\n fn();\r\n });\r\n }\r\n };\r\n}\r\n/**\r\n * Add and event listener. Works for all browsers.\r\n *\r\n * @param element - The element to bind the event listener to.\r\n * @param action - Same as Element.addEventListener(action, —, —).\r\n * @param listener - Same as Element.addEventListener(—, listener, —).\r\n * @param useCapture - Same as Element.addEventListener(—, —, useCapture).\r\n */\r\nfunction addEventListener(element, action, listener, useCapture) {\r\n if (element.addEventListener) {\r\n if (useCapture === undefined) {\r\n useCapture = false;\r\n }\r\n if (action === \"mousewheel\" && navigator.userAgent.includes(\"Firefox\")) {\r\n action = \"DOMMouseScroll\"; // For Firefox\r\n }\r\n element.addEventListener(action, listener, useCapture);\r\n }\r\n else {\r\n // @TODO: IE types? Does anyone care?\r\n element.attachEvent(\"on\" + action, listener); // IE browsers\r\n }\r\n}\r\n/**\r\n * Remove an event listener from an element.\r\n *\r\n * @param element - The element to bind the event listener to.\r\n * @param action - Same as Element.removeEventListener(action, —, —).\r\n * @param listener - Same as Element.removeEventListener(—, listener, —).\r\n * @param useCapture - Same as Element.removeEventListener(—, —, useCapture).\r\n */\r\nfunction removeEventListener(element, action, listener, useCapture) {\r\n if (element.removeEventListener) {\r\n // non-IE browsers\r\n if (useCapture === undefined) {\r\n useCapture = false;\r\n }\r\n if (action === \"mousewheel\" && navigator.userAgent.includes(\"Firefox\")) {\r\n action = \"DOMMouseScroll\"; // For Firefox\r\n }\r\n element.removeEventListener(action, listener, useCapture);\r\n }\r\n else {\r\n // @TODO: IE types? Does anyone care?\r\n element.detachEvent(\"on\" + action, listener); // IE browsers\r\n }\r\n}\r\n/**\r\n * Cancels the event's default action if it is cancelable, without stopping further propagation of the event.\r\n *\r\n * @param event - The event whose default action should be prevented.\r\n */\r\nfunction preventDefault(event) {\r\n if (!event) {\r\n event = window.event;\r\n }\r\n if (!event) ;\r\n else if (event.preventDefault) {\r\n event.preventDefault(); // non-IE browsers\r\n }\r\n else {\r\n // @TODO: IE types? Does anyone care?\r\n event.returnValue = false; // IE browsers\r\n }\r\n}\r\n/**\r\n * Get HTML element which is the target of the event.\r\n *\r\n * @param event - The event.\r\n * @returns The element or null if not obtainable.\r\n */\r\nfunction getTarget(event = window.event) {\r\n // code from http://www.quirksmode.org/js/events_properties.html\r\n // @TODO: EventTarget can be almost anything, is it okay to return only Elements?\r\n let target = null;\r\n if (!event) ;\r\n else if (event.target) {\r\n target = event.target;\r\n }\r\n else if (event.srcElement) {\r\n target = event.srcElement;\r\n }\r\n if (!(target instanceof Element)) {\r\n return null;\r\n }\r\n if (target.nodeType != null && target.nodeType == 3) {\r\n // defeat Safari bug\r\n target = target.parentNode;\r\n if (!(target instanceof Element)) {\r\n return null;\r\n }\r\n }\r\n return target;\r\n}\r\n/**\r\n * Check if given element contains given parent somewhere in the DOM tree.\r\n *\r\n * @param element - The element to be tested.\r\n * @param parent - The ancestor (not necessarily parent) of the element.\r\n * @returns True if parent is an ancestor of the element, false otherwise.\r\n */\r\nfunction hasParent(element, parent) {\r\n let elem = element;\r\n while (elem) {\r\n if (elem === parent) {\r\n return true;\r\n }\r\n else if (elem.parentNode) {\r\n elem = elem.parentNode;\r\n }\r\n else {\r\n return false;\r\n }\r\n }\r\n return false;\r\n}\r\nconst option = {\r\n /**\r\n * Convert a value into a boolean.\r\n *\r\n * @param value - Value to be converted intoboolean, a function will be executed as `(() => unknown)`.\r\n * @param defaultValue - If the value or the return value of the function == null then this will be returned.\r\n * @returns Corresponding boolean value, if none then the default value, if none then null.\r\n */\r\n asBoolean(value, defaultValue) {\r\n if (typeof value == \"function\") {\r\n value = value();\r\n }\r\n if (value != null) {\r\n return value != false;\r\n }\r\n return defaultValue || null;\r\n },\r\n /**\r\n * Convert a value into a number.\r\n *\r\n * @param value - Value to be converted intonumber, a function will be executed as `(() => unknown)`.\r\n * @param defaultValue - If the value or the return value of the function == null then this will be returned.\r\n * @returns Corresponding **boxed** number value, if none then the default value, if none then null.\r\n */\r\n asNumber(value, defaultValue) {\r\n if (typeof value == \"function\") {\r\n value = value();\r\n }\r\n if (value != null) {\r\n return Number(value) || defaultValue || null;\r\n }\r\n return defaultValue || null;\r\n },\r\n /**\r\n * Convert a value into a string.\r\n *\r\n * @param value - Value to be converted intostring, a function will be executed as `(() => unknown)`.\r\n * @param defaultValue - If the value or the return value of the function == null then this will be returned.\r\n * @returns Corresponding **boxed** string value, if none then the default value, if none then null.\r\n */\r\n asString(value, defaultValue) {\r\n if (typeof value == \"function\") {\r\n value = value();\r\n }\r\n if (value != null) {\r\n return String(value);\r\n }\r\n return defaultValue || null;\r\n },\r\n /**\r\n * Convert a value into a size.\r\n *\r\n * @param value - Value to be converted intosize, a function will be executed as `(() => unknown)`.\r\n * @param defaultValue - If the value or the return value of the function == null then this will be returned.\r\n * @returns Corresponding string value (number + 'px'), if none then the default value, if none then null.\r\n */\r\n asSize(value, defaultValue) {\r\n if (typeof value == \"function\") {\r\n value = value();\r\n }\r\n if (isString(value)) {\r\n return value;\r\n }\r\n else if (isNumber(value)) {\r\n return value + \"px\";\r\n }\r\n else {\r\n return defaultValue || null;\r\n }\r\n },\r\n /**\r\n * Convert a value into a DOM Element.\r\n *\r\n * @param value - Value to be converted into DOM Element, a function will be executed as `(() => unknown)`.\r\n * @param defaultValue - If the value or the return value of the function == null then this will be returned.\r\n * @returns The DOM Element, if none then the default value, if none then null.\r\n */\r\n asElement(value, defaultValue) {\r\n if (typeof value == \"function\") {\r\n value = value();\r\n }\r\n return value || defaultValue || null;\r\n },\r\n};\r\n/**\r\n * Convert hex color string into RGB color object.\r\n *\r\n * @remarks\r\n * {@link http://stackoverflow.com/questions/5623838/rgb-to-hex-and-hex-to-rgb}\r\n * @param hex - Hex color string (3 or 6 digits, with or without #).\r\n * @returns RGB color object.\r\n */\r\nfunction hexToRGB(hex) {\r\n let result;\r\n switch (hex.length) {\r\n case 3:\r\n case 4:\r\n result = shortHexRE.exec(hex);\r\n return result\r\n ? {\r\n r: parseInt(result[1] + result[1], 16),\r\n g: parseInt(result[2] + result[2], 16),\r\n b: parseInt(result[3] + result[3], 16),\r\n }\r\n : null;\r\n case 6:\r\n case 7:\r\n result = fullHexRE.exec(hex);\r\n return result\r\n ? {\r\n r: parseInt(result[1], 16),\r\n g: parseInt(result[2], 16),\r\n b: parseInt(result[3], 16),\r\n }\r\n : null;\r\n default:\r\n return null;\r\n }\r\n}\r\n/**\r\n * This function takes string color in hex or RGB format and adds the opacity, RGBA is passed through unchanged.\r\n *\r\n * @param color - The color string (hex, RGB, RGBA).\r\n * @param opacity - The new opacity.\r\n * @returns RGBA string, for example 'rgba(255, 0, 127, 0.3)'.\r\n */\r\nfunction overrideOpacity(color, opacity) {\r\n if (color.includes(\"rgba\")) {\r\n return color;\r\n }\r\n else if (color.includes(\"rgb\")) {\r\n const rgb = color\r\n .substr(color.indexOf(\"(\") + 1)\r\n .replace(\")\", \"\")\r\n .split(\",\");\r\n return \"rgba(\" + rgb[0] + \",\" + rgb[1] + \",\" + rgb[2] + \",\" + opacity + \")\";\r\n }\r\n else {\r\n const rgb = hexToRGB(color);\r\n if (rgb == null) {\r\n return color;\r\n }\r\n else {\r\n return \"rgba(\" + rgb.r + \",\" + rgb.g + \",\" + rgb.b + \",\" + opacity + \")\";\r\n }\r\n }\r\n}\r\n/**\r\n * Convert RGB \\<0, 255\\> into hex color string.\r\n *\r\n * @param red - Red channel.\r\n * @param green - Green channel.\r\n * @param blue - Blue channel.\r\n * @returns Hex color string (for example: '#0acdc0').\r\n */\r\nfunction RGBToHex(red, green, blue) {\r\n return (\"#\" + ((1 << 24) + (red << 16) + (green << 8) + blue).toString(16).slice(1));\r\n}\r\n/**\r\n * Parse a color property into an object with border, background, and highlight colors.\r\n *\r\n * @param inputColor - Shorthand color string or input color object.\r\n * @param defaultColor - Full color object to fill in missing values in inputColor.\r\n * @returns Color object.\r\n */\r\nfunction parseColor(inputColor, defaultColor) {\r\n if (isString(inputColor)) {\r\n let colorStr = inputColor;\r\n if (isValidRGB(colorStr)) {\r\n const rgb = colorStr\r\n .substr(4)\r\n .substr(0, colorStr.length - 5)\r\n .split(\",\")\r\n .map(function (value) {\r\n return parseInt(value);\r\n });\r\n colorStr = RGBToHex(rgb[0], rgb[1], rgb[2]);\r\n }\r\n if (isValidHex(colorStr) === true) {\r\n const hsv = hexToHSV(colorStr);\r\n const lighterColorHSV = {\r\n h: hsv.h,\r\n s: hsv.s * 0.8,\r\n v: Math.min(1, hsv.v * 1.02),\r\n };\r\n const darkerColorHSV = {\r\n h: hsv.h,\r\n s: Math.min(1, hsv.s * 1.25),\r\n v: hsv.v * 0.8,\r\n };\r\n const darkerColorHex = HSVToHex(darkerColorHSV.h, darkerColorHSV.s, darkerColorHSV.v);\r\n const lighterColorHex = HSVToHex(lighterColorHSV.h, lighterColorHSV.s, lighterColorHSV.v);\r\n return {\r\n background: colorStr,\r\n border: darkerColorHex,\r\n highlight: {\r\n background: lighterColorHex,\r\n border: darkerColorHex,\r\n },\r\n hover: {\r\n background: lighterColorHex,\r\n border: darkerColorHex,\r\n },\r\n };\r\n }\r\n else {\r\n return {\r\n background: colorStr,\r\n border: colorStr,\r\n highlight: {\r\n background: colorStr,\r\n border: colorStr,\r\n },\r\n hover: {\r\n background: colorStr,\r\n border: colorStr,\r\n },\r\n };\r\n }\r\n }\r\n else {\r\n if (defaultColor) {\r\n const color = {\r\n background: inputColor.background || defaultColor.background,\r\n border: inputColor.border || defaultColor.border,\r\n highlight: isString(inputColor.highlight)\r\n ? {\r\n border: inputColor.highlight,\r\n background: inputColor.highlight,\r\n }\r\n : {\r\n background: (inputColor.highlight && inputColor.highlight.background) ||\r\n defaultColor.highlight.background,\r\n border: (inputColor.highlight && inputColor.highlight.border) ||\r\n defaultColor.highlight.border,\r\n },\r\n hover: isString(inputColor.hover)\r\n ? {\r\n border: inputColor.hover,\r\n background: inputColor.hover,\r\n }\r\n : {\r\n border: (inputColor.hover && inputColor.hover.border) ||\r\n defaultColor.hover.border,\r\n background: (inputColor.hover && inputColor.hover.background) ||\r\n defaultColor.hover.background,\r\n },\r\n };\r\n return color;\r\n }\r\n else {\r\n const color = {\r\n background: inputColor.background || undefined,\r\n border: inputColor.border || undefined,\r\n highlight: isString(inputColor.highlight)\r\n ? {\r\n border: inputColor.highlight,\r\n background: inputColor.highlight,\r\n }\r\n : {\r\n background: (inputColor.highlight && inputColor.highlight.background) ||\r\n undefined,\r\n border: (inputColor.highlight && inputColor.highlight.border) ||\r\n undefined,\r\n },\r\n hover: isString(inputColor.hover)\r\n ? {\r\n border: inputColor.hover,\r\n background: inputColor.hover,\r\n }\r\n : {\r\n border: (inputColor.hover && inputColor.hover.border) || undefined,\r\n background: (inputColor.hover && inputColor.hover.background) || undefined,\r\n },\r\n };\r\n return color;\r\n }\r\n }\r\n}\r\n/**\r\n * Convert RGB \\<0, 255\\> into HSV object.\r\n *\r\n * @remarks\r\n * {@link http://www.javascripter.net/faq/rgb2hsv.htm}\r\n * @param red - Red channel.\r\n * @param green - Green channel.\r\n * @param blue - Blue channel.\r\n * @returns HSV color object.\r\n */\r\nfunction RGBToHSV(red, green, blue) {\r\n red = red / 255;\r\n green = green / 255;\r\n blue = blue / 255;\r\n const minRGB = Math.min(red, Math.min(green, blue));\r\n const maxRGB = Math.max(red, Math.max(green, blue));\r\n // Black-gray-white\r\n if (minRGB === maxRGB) {\r\n return { h: 0, s: 0, v: minRGB };\r\n }\r\n // Colors other than black-gray-white:\r\n const d = red === minRGB ? green - blue : blue === minRGB ? red - green : blue - red;\r\n const h = red === minRGB ? 3 : blue === minRGB ? 1 : 5;\r\n const hue = (60 * (h - d / (maxRGB - minRGB))) / 360;\r\n const saturation = (maxRGB - minRGB) / maxRGB;\r\n const value = maxRGB;\r\n return { h: hue, s: saturation, v: value };\r\n}\r\n/**\r\n * Split a string with css styles into an object with key/values.\r\n *\r\n * @param cssText - CSS source code to split into key/value object.\r\n * @returns Key/value object corresponding to {@link cssText}.\r\n */\r\nfunction splitCSSText(cssText) {\r\n const tmpEllement = document.createElement(\"div\");\r\n const styles = {};\r\n tmpEllement.style.cssText = cssText;\r\n for (let i = 0; i < tmpEllement.style.length; ++i) {\r\n styles[tmpEllement.style[i]] = tmpEllement.style.getPropertyValue(tmpEllement.style[i]);\r\n }\r\n return styles;\r\n}\r\n/**\r\n * Append a string with css styles to an element.\r\n *\r\n * @param element - The element that will receive new styles.\r\n * @param cssText - The styles to be appended.\r\n */\r\nfunction addCssText(element, cssText) {\r\n const cssStyle = splitCSSText(cssText);\r\n for (const [key, value] of Object.entries(cssStyle)) {\r\n element.style.setProperty(key, value);\r\n }\r\n}\r\n/**\r\n * Remove a string with css styles from an element.\r\n *\r\n * @param element - The element from which styles should be removed.\r\n * @param cssText - The styles to be removed.\r\n */\r\nfunction removeCssText(element, cssText) {\r\n const cssStyle = splitCSSText(cssText);\r\n for (const key of Object.keys(cssStyle)) {\r\n element.style.removeProperty(key);\r\n }\r\n}\r\n/**\r\n * Convert HSV \\<0, 1\\> into RGB color object.\r\n *\r\n * @remarks\r\n * {@link https://gist.github.com/mjijackson/5311256}\r\n * @param h - Hue.\r\n * @param s - Saturation.\r\n * @param v - Value.\r\n * @returns RGB color object.\r\n */\r\nfunction HSVToRGB(h, s, v) {\r\n let r;\r\n let g;\r\n let b;\r\n const i = Math.floor(h * 6);\r\n const f = h * 6 - i;\r\n const p = v * (1 - s);\r\n const q = v * (1 - f * s);\r\n const t = v * (1 - (1 - f) * s);\r\n switch (i % 6) {\r\n case 0:\r\n (r = v), (g = t), (b = p);\r\n break;\r\n case 1:\r\n (r = q), (g = v), (b = p);\r\n break;\r\n case 2:\r\n (r = p), (g = v), (b = t);\r\n break;\r\n case 3:\r\n (r = p), (g = q), (b = v);\r\n break;\r\n case 4:\r\n (r = t), (g = p), (b = v);\r\n break;\r\n case 5:\r\n (r = v), (g = p), (b = q);\r\n break;\r\n }\r\n return {\r\n r: Math.floor(r * 255),\r\n g: Math.floor(g * 255),\r\n b: Math.floor(b * 255),\r\n };\r\n}\r\n/**\r\n * Convert HSV \\<0, 1\\> into hex color string.\r\n *\r\n * @param h - Hue.\r\n * @param s - Saturation.\r\n * @param v - Value.\r\n * @returns Hex color string.\r\n */\r\nfunction HSVToHex(h, s, v) {\r\n const rgb = HSVToRGB(h, s, v);\r\n return RGBToHex(rgb.r, rgb.g, rgb.b);\r\n}\r\n/**\r\n * Convert hex color string into HSV \\<0, 1\\>.\r\n *\r\n * @param hex - Hex color string.\r\n * @returns HSV color object.\r\n */\r\nfunction hexToHSV(hex) {\r\n const rgb = hexToRGB(hex);\r\n if (!rgb) {\r\n throw new TypeError(`'${hex}' is not a valid color.`);\r\n }\r\n return RGBToHSV(rgb.r, rgb.g, rgb.b);\r\n}\r\n/**\r\n * Validate hex color string.\r\n *\r\n * @param hex - Unknown string that may contain a color.\r\n * @returns True if the string is valid, false otherwise.\r\n */\r\nfunction isValidHex(hex) {\r\n const isOk = /(^#[0-9A-F]{6}$)|(^#[0-9A-F]{3}$)/i.test(hex);\r\n return isOk;\r\n}\r\n/**\r\n * Validate RGB color string.\r\n *\r\n * @param rgb - Unknown string that may contain a color.\r\n * @returns True if the string is valid, false otherwise.\r\n */\r\nfunction isValidRGB(rgb) {\r\n return rgbRE.test(rgb);\r\n}\r\n/**\r\n * Validate RGBA color string.\r\n *\r\n * @param rgba - Unknown string that may contain a color.\r\n * @returns True if the string is valid, false otherwise.\r\n */\r\nfunction isValidRGBA(rgba) {\r\n return rgbaRE.test(rgba);\r\n}\r\n/**\r\n * This recursively redirects the prototype of JSON objects to the referenceObject.\r\n * This is used for default options.\r\n *\r\n * @param fields - Names of properties to be bridged.\r\n * @param referenceObject - The original object.\r\n * @returns A new object inheriting from the referenceObject.\r\n */\r\nfunction selectiveBridgeObject(fields, referenceObject) {\r\n if (referenceObject !== null && typeof referenceObject === \"object\") {\r\n // !!! typeof null === 'object'\r\n const objectTo = Object.create(referenceObject);\r\n for (let i = 0; i < fields.length; i++) {\r\n if (Object.prototype.hasOwnProperty.call(referenceObject, fields[i])) {\r\n if (typeof referenceObject[fields[i]] == \"object\") {\r\n objectTo[fields[i]] = bridgeObject(referenceObject[fields[i]]);\r\n }\r\n }\r\n }\r\n return objectTo;\r\n }\r\n else {\r\n return null;\r\n }\r\n}\r\n/**\r\n * This recursively redirects the prototype of JSON objects to the referenceObject.\r\n * This is used for default options.\r\n *\r\n * @param referenceObject - The original object.\r\n * @returns The Element if the referenceObject is an Element, or a new object inheriting from the referenceObject.\r\n */\r\nfunction bridgeObject(referenceObject) {\r\n if (referenceObject === null || typeof referenceObject !== \"object\") {\r\n return null;\r\n }\r\n if (referenceObject instanceof Element) {\r\n // Avoid bridging DOM objects\r\n return referenceObject;\r\n }\r\n const objectTo = Object.create(referenceObject);\r\n for (const i in referenceObject) {\r\n if (Object.prototype.hasOwnProperty.call(referenceObject, i)) {\r\n if (typeof referenceObject[i] == \"object\") {\r\n objectTo[i] = bridgeObject(referenceObject[i]);\r\n }\r\n }\r\n }\r\n return objectTo;\r\n}\r\n/**\r\n * This method provides a stable sort implementation, very fast for presorted data.\r\n *\r\n * @param a - The array to be sorted (in-place).\r\n * @param compare - An order comparator.\r\n * @returns The argument a.\r\n */\r\nfunction insertSort(a, compare) {\r\n for (let i = 0; i < a.length; i++) {\r\n const k = a[i];\r\n let j;\r\n for (j = i; j > 0 && compare(k, a[j - 1]) < 0; j--) {\r\n a[j] = a[j - 1];\r\n }\r\n a[j] = k;\r\n }\r\n return a;\r\n}\r\n/**\r\n * This is used to set the options of subobjects in the options object.\r\n *\r\n * A requirement of these subobjects is that they have an 'enabled' element\r\n * which is optional for the user but mandatory for the program.\r\n *\r\n * The added value here of the merge is that option 'enabled' is set as required.\r\n *\r\n * @param mergeTarget - Either this.options or the options used for the groups.\r\n * @param options - Options.\r\n * @param option - Option key in the options argument.\r\n * @param globalOptions - Global options, passed in to determine value of option 'enabled'.\r\n */\r\nfunction mergeOptions(mergeTarget, options, option, globalOptions = {}) {\r\n // Local helpers\r\n const isPresent = function (obj) {\r\n return obj !== null && obj !== undefined;\r\n };\r\n const isObject = function (obj) {\r\n return obj !== null && typeof obj === \"object\";\r\n };\r\n // https://stackoverflow.com/a/34491287/1223531\r\n const isEmpty = function (obj) {\r\n for (const x in obj) {\r\n if (Object.prototype.hasOwnProperty.call(obj, x)) {\r\n return false;\r\n }\r\n }\r\n return true;\r\n };\r\n // Guards\r\n if (!isObject(mergeTarget)) {\r\n throw new Error(\"Parameter mergeTarget must be an object\");\r\n }\r\n if (!isObject(options)) {\r\n throw new Error(\"Parameter options must be an object\");\r\n }\r\n if (!isPresent(option)) {\r\n throw new Error(\"Parameter option must have a value\");\r\n }\r\n if (!isObject(globalOptions)) {\r\n throw new Error(\"Parameter globalOptions must be an object\");\r\n }\r\n //\r\n // Actual merge routine, separated from main logic\r\n // Only a single level of options is merged. Deeper levels are ref'd. This may actually be an issue.\r\n //\r\n const doMerge = function (target, options, option) {\r\n if (!isObject(target[option])) {\r\n target[option] = {};\r\n }\r\n const src = options[option];\r\n const dst = target[option];\r\n for (const prop in src) {\r\n if (Object.prototype.hasOwnProperty.call(src, prop)) {\r\n dst[prop] = src[prop];\r\n }\r\n }\r\n };\r\n // Local initialization\r\n const srcOption = options[option];\r\n const globalPassed = isObject(globalOptions) && !isEmpty(globalOptions);\r\n const globalOption = globalPassed ? globalOptions[option] : undefined;\r\n const globalEnabled = globalOption ? globalOption.enabled : undefined;\r\n /////////////////////////////////////////\r\n // Main routine\r\n /////////////////////////////////////////\r\n if (srcOption === undefined) {\r\n return; // Nothing to do\r\n }\r\n if (typeof srcOption === \"boolean\") {\r\n if (!isObject(mergeTarget[option])) {\r\n mergeTarget[option] = {};\r\n }\r\n mergeTarget[option].enabled = srcOption;\r\n return;\r\n }\r\n if (srcOption === null && !isObject(mergeTarget[option])) {\r\n // If possible, explicit copy from globals\r\n if (isPresent(globalOption)) {\r\n mergeTarget[option] = Object.create(globalOption);\r\n }\r\n else {\r\n return; // Nothing to do\r\n }\r\n }\r\n if (!isObject(srcOption)) {\r\n return;\r\n }\r\n //\r\n // Ensure that 'enabled' is properly set. It is required internally\r\n // Note that the value from options will always overwrite the existing value\r\n //\r\n let enabled = true; // default value\r\n if (srcOption.enabled !== undefined) {\r\n enabled = srcOption.enabled;\r\n }\r\n else {\r\n // Take from globals, if present\r\n if (globalEnabled !== undefined) {\r\n enabled = globalOption.enabled;\r\n }\r\n }\r\n doMerge(mergeTarget, options, option);\r\n mergeTarget[option].enabled = enabled;\r\n}\r\n/**\r\n * This function does a binary search for a visible item in a sorted list. If we find a visible item, the code that uses\r\n * this function will then iterate in both directions over this sorted list to find all visible items.\r\n *\r\n * @param orderedItems - Items ordered by start.\r\n * @param comparator - -1 is lower, 0 is equal, 1 is higher.\r\n * @param field - Property name on an item (That is item[field]).\r\n * @param field2 - Second property name on an item (That is item[field][field2]).\r\n * @returns Index of the found item or -1 if nothing was found.\r\n */\r\nfunction binarySearchCustom(orderedItems, comparator, field, field2) {\r\n const maxIterations = 10000;\r\n let iteration = 0;\r\n let low = 0;\r\n let high = orderedItems.length - 1;\r\n while (low <= high && iteration < maxIterations) {\r\n const middle = Math.floor((low + high) / 2);\r\n const item = orderedItems[middle];\r\n const value = field2 === undefined ? item[field] : item[field][field2];\r\n const searchResult = comparator(value);\r\n if (searchResult == 0) {\r\n // jihaa, found a visible item!\r\n return middle;\r\n }\r\n else if (searchResult == -1) {\r\n // it is too small --> increase low\r\n low = middle + 1;\r\n }\r\n else {\r\n // it is too big --> decrease high\r\n high = middle - 1;\r\n }\r\n iteration++;\r\n }\r\n return -1;\r\n}\r\n/**\r\n * This function does a binary search for a specific value in a sorted array.\r\n * If it does not exist but is in between of two values, we return either the\r\n * one before or the one after, depending on user input If it is found, we\r\n * return the index, else -1.\r\n *\r\n * @param orderedItems - Sorted array.\r\n * @param target - The searched value.\r\n * @param field - Name of the property in items to be searched.\r\n * @param sidePreference - If the target is between two values, should the index of the before or the after be returned?\r\n * @param comparator - An optional comparator, returning -1, 0, 1 for \\<, ===, \\>.\r\n * @returns The index of found value or -1 if nothing was found.\r\n */\r\nfunction binarySearchValue(orderedItems, target, field, sidePreference, comparator) {\r\n const maxIterations = 10000;\r\n let iteration = 0;\r\n let low = 0;\r\n let high = orderedItems.length - 1;\r\n let prevValue;\r\n let value;\r\n let nextValue;\r\n let middle;\r\n comparator =\r\n comparator != undefined\r\n ? comparator\r\n : function (a, b) {\r\n return a == b ? 0 : a < b ? -1 : 1;\r\n };\r\n while (low <= high && iteration < maxIterations) {\r\n // get a new guess\r\n middle = Math.floor(0.5 * (high + low));\r\n prevValue = orderedItems[Math.max(0, middle - 1)][field];\r\n value = orderedItems[middle][field];\r\n nextValue =\r\n orderedItems[Math.min(orderedItems.length - 1, middle + 1)][field];\r\n if (comparator(value, target) == 0) {\r\n // we found the target\r\n return middle;\r\n }\r\n else if (comparator(prevValue, target) < 0 &&\r\n comparator(value, target) > 0) {\r\n // target is in between of the previous and the current\r\n return sidePreference == \"before\" ? Math.max(0, middle - 1) : middle;\r\n }\r\n else if (comparator(value, target) < 0 &&\r\n comparator(nextValue, target) > 0) {\r\n // target is in between of the current and the next\r\n return sidePreference == \"before\"\r\n ? middle\r\n : Math.min(orderedItems.length - 1, middle + 1);\r\n }\r\n else {\r\n // didnt find the target, we need to change our boundaries.\r\n if (comparator(value, target) < 0) {\r\n // it is too small --> increase low\r\n low = middle + 1;\r\n }\r\n else {\r\n // it is too big --> decrease high\r\n high = middle - 1;\r\n }\r\n }\r\n iteration++;\r\n }\r\n // didnt find anything. Return -1.\r\n return -1;\r\n}\r\n/*\r\n * Easing Functions.\r\n * Only considering the t value for the range [0, 1] => [0, 1].\r\n *\r\n * Inspiration: from http://gizma.com/easing/\r\n * https://gist.github.com/gre/1650294\r\n */\r\nconst easingFunctions = {\r\n /**\r\n * Provides no easing and no acceleration.\r\n *\r\n * @param t - Time.\r\n * @returns Value at time t.\r\n */\r\n linear(t) {\r\n return t;\r\n },\r\n /**\r\n * Accelerate from zero velocity.\r\n *\r\n * @param t - Time.\r\n * @returns Value at time t.\r\n */\r\n easeInQuad(t) {\r\n return t * t;\r\n },\r\n /**\r\n * Decelerate to zero velocity.\r\n *\r\n * @param t - Time.\r\n * @returns Value at time t.\r\n */\r\n easeOutQuad(t) {\r\n return t * (2 - t);\r\n },\r\n /**\r\n * Accelerate until halfway, then decelerate.\r\n *\r\n * @param t - Time.\r\n * @returns Value at time t.\r\n */\r\n easeInOutQuad(t) {\r\n return t < 0.5 ? 2 * t * t : -1 + (4 - 2 * t) * t;\r\n },\r\n /**\r\n * Accelerate from zero velocity.\r\n *\r\n * @param t - Time.\r\n * @returns Value at time t.\r\n */\r\n easeInCubic(t) {\r\n return t * t * t;\r\n },\r\n /**\r\n * Decelerate to zero velocity.\r\n *\r\n * @param t - Time.\r\n * @returns Value at time t.\r\n */\r\n easeOutCubic(t) {\r\n return --t * t * t + 1;\r\n },\r\n /**\r\n * Accelerate until halfway, then decelerate.\r\n *\r\n * @param t - Time.\r\n * @returns Value at time t.\r\n */\r\n easeInOutCubic(t) {\r\n return t < 0.5 ? 4 * t * t * t : (t - 1) * (2 * t - 2) * (2 * t - 2) + 1;\r\n },\r\n /**\r\n * Accelerate from zero velocity.\r\n *\r\n * @param t - Time.\r\n * @returns Value at time t.\r\n */\r\n easeInQuart(t) {\r\n return t * t * t * t;\r\n },\r\n /**\r\n * Decelerate to zero velocity.\r\n *\r\n * @param t - Time.\r\n * @returns Value at time t.\r\n */\r\n easeOutQuart(t) {\r\n return 1 - --t * t * t * t;\r\n },\r\n /**\r\n * Accelerate until halfway, then decelerate.\r\n *\r\n * @param t - Time.\r\n * @returns Value at time t.\r\n */\r\n easeInOutQuart(t) {\r\n return t < 0.5 ? 8 * t * t * t * t : 1 - 8 * --t * t * t * t;\r\n },\r\n /**\r\n * Accelerate from zero velocity.\r\n *\r\n * @param t - Time.\r\n * @returns Value at time t.\r\n */\r\n easeInQuint(t) {\r\n return t * t * t * t * t;\r\n },\r\n /**\r\n * Decelerate to zero velocity.\r\n *\r\n * @param t - Time.\r\n * @returns Value at time t.\r\n */\r\n easeOutQuint(t) {\r\n return 1 + --t * t * t * t * t;\r\n },\r\n /**\r\n * Accelerate until halfway, then decelerate.\r\n *\r\n * @param t - Time.\r\n * @returns Value at time t.\r\n */\r\n easeInOutQuint(t) {\r\n return t < 0.5 ? 16 * t * t * t * t * t : 1 + 16 * --t * t * t * t * t;\r\n },\r\n};\r\n/**\r\n * Experimentaly compute the width of the scrollbar for this browser.\r\n *\r\n * @returns The width in pixels.\r\n */\r\nfunction getScrollBarWidth() {\r\n const inner = document.createElement(\"p\");\r\n inner.style.width = \"100%\";\r\n inner.style.height = \"200px\";\r\n const outer = document.createElement(\"div\");\r\n outer.style.position = \"absolute\";\r\n outer.style.top = \"0px\";\r\n outer.style.left = \"0px\";\r\n outer.style.visibility = \"hidden\";\r\n outer.style.width = \"200px\";\r\n outer.style.height = \"150px\";\r\n outer.style.overflow = \"hidden\";\r\n outer.appendChild(inner);\r\n document.body.appendChild(outer);\r\n const w1 = inner.offsetWidth;\r\n outer.style.overflow = \"scroll\";\r\n let w2 = inner.offsetWidth;\r\n if (w1 == w2) {\r\n w2 = outer.clientWidth;\r\n }\r\n document.body.removeChild(outer);\r\n return w1 - w2;\r\n}\r\n// @TODO: This doesn't work properly.\r\n// It works only for single property objects,\r\n// otherwise it combines all of the types in a union.\r\n// export function topMost (\r\n// pile: Record[],\r\n// accessors: K1 | [K1]\r\n// ): undefined | V1\r\n// export function topMost (\r\n// pile: Record>[],\r\n// accessors: [K1, K2]\r\n// ): undefined | V1 | V2\r\n// export function topMost (\r\n// pile: Record>>[],\r\n// accessors: [K1, K2, K3]\r\n// ): undefined | V1 | V2 | V3\r\n/**\r\n * Get the top most property value from a pile of objects.\r\n *\r\n * @param pile - Array of objects, no required format.\r\n * @param accessors - Array of property names.\r\n * For example `object['foo']['bar']` → `['foo', 'bar']`.\r\n * @returns Value of the property with given accessors path from the first pile item where it's not undefined.\r\n */\r\nfunction topMost(pile, accessors) {\r\n let candidate;\r\n if (!Array.isArray(accessors)) {\r\n accessors = [accessors];\r\n }\r\n for (const member of pile) {\r\n if (member) {\r\n candidate = member[accessors[0]];\r\n for (let i = 1; i < accessors.length; i++) {\r\n if (candidate) {\r\n candidate = candidate[accessors[i]];\r\n }\r\n }\r\n if (typeof candidate !== \"undefined\") {\r\n break;\r\n }\r\n }\r\n }\r\n return candidate;\r\n}\n\nconst htmlColors = {\n black: \"#000000\",\n navy: \"#000080\",\n darkblue: \"#00008B\",\n mediumblue: \"#0000CD\",\n blue: \"#0000FF\",\n darkgreen: \"#006400\",\n green: \"#008000\",\n teal: \"#008080\",\n darkcyan: \"#008B8B\",\n deepskyblue: \"#00BFFF\",\n darkturquoise: \"#00CED1\",\n mediumspringgreen: \"#00FA9A\",\n lime: \"#00FF00\",\n springgreen: \"#00FF7F\",\n aqua: \"#00FFFF\",\n cyan: \"#00FFFF\",\n midnightblue: \"#191970\",\n dodgerblue: \"#1E90FF\",\n lightseagreen: \"#20B2AA\",\n forestgreen: \"#228B22\",\n seagreen: \"#2E8B57\",\n darkslategray: \"#2F4F4F\",\n limegreen: \"#32CD32\",\n mediumseagreen: \"#3CB371\",\n turquoise: \"#40E0D0\",\n royalblue: \"#4169E1\",\n steelblue: \"#4682B4\",\n darkslateblue: \"#483D8B\",\n mediumturquoise: \"#48D1CC\",\n indigo: \"#4B0082\",\n darkolivegreen: \"#556B2F\",\n cadetblue: \"#5F9EA0\",\n cornflowerblue: \"#6495ED\",\n mediumaquamarine: \"#66CDAA\",\n dimgray: \"#696969\",\n slateblue: \"#6A5ACD\",\n olivedrab: \"#6B8E23\",\n slategray: \"#708090\",\n lightslategray: \"#778899\",\n mediumslateblue: \"#7B68EE\",\n lawngreen: \"#7CFC00\",\n chartreuse: \"#7FFF00\",\n aquamarine: \"#7FFFD4\",\n maroon: \"#800000\",\n purple: \"#800080\",\n olive: \"#808000\",\n gray: \"#808080\",\n skyblue: \"#87CEEB\",\n lightskyblue: \"#87CEFA\",\n blueviolet: \"#8A2BE2\",\n darkred: \"#8B0000\",\n darkmagenta: \"#8B008B\",\n saddlebrown: \"#8B4513\",\n darkseagreen: \"#8FBC8F\",\n lightgreen: \"#90EE90\",\n mediumpurple: \"#9370D8\",\n darkviolet: \"#9400D3\",\n palegreen: \"#98FB98\",\n darkorchid: \"#9932CC\",\n yellowgreen: \"#9ACD32\",\n sienna: \"#A0522D\",\n brown: \"#A52A2A\",\n darkgray: \"#A9A9A9\",\n lightblue: \"#ADD8E6\",\n greenyellow: \"#ADFF2F\",\n paleturquoise: \"#AFEEEE\",\n lightsteelblue: \"#B0C4DE\",\n powderblue: \"#B0E0E6\",\n firebrick: \"#B22222\",\n darkgoldenrod: \"#B8860B\",\n mediumorchid: \"#BA55D3\",\n rosybrown: \"#BC8F8F\",\n darkkhaki: \"#BDB76B\",\n silver: \"#C0C0C0\",\n mediumvioletred: \"#C71585\",\n indianred: \"#CD5C5C\",\n peru: \"#CD853F\",\n chocolate: \"#D2691E\",\n tan: \"#D2B48C\",\n lightgrey: \"#D3D3D3\",\n palevioletred: \"#D87093\",\n thistle: \"#D8BFD8\",\n orchid: \"#DA70D6\",\n goldenrod: \"#DAA520\",\n crimson: \"#DC143C\",\n gainsboro: \"#DCDCDC\",\n plum: \"#DDA0DD\",\n burlywood: \"#DEB887\",\n lightcyan: \"#E0FFFF\",\n lavender: \"#E6E6FA\",\n darksalmon: \"#E9967A\",\n violet: \"#EE82EE\",\n palegoldenrod: \"#EEE8AA\",\n lightcoral: \"#F08080\",\n khaki: \"#F0E68C\",\n aliceblue: \"#F0F8FF\",\n honeydew: \"#F0FFF0\",\n azure: \"#F0FFFF\",\n sandybrown: \"#F4A460\",\n wheat: \"#F5DEB3\",\n beige: \"#F5F5DC\",\n whitesmoke: \"#F5F5F5\",\n mintcream: \"#F5FFFA\",\n ghostwhite: \"#F8F8FF\",\n salmon: \"#FA8072\",\n antiquewhite: \"#FAEBD7\",\n linen: \"#FAF0E6\",\n lightgoldenrodyellow: \"#FAFAD2\",\n oldlace: \"#FDF5E6\",\n red: \"#FF0000\",\n fuchsia: \"#FF00FF\",\n magenta: \"#FF00FF\",\n deeppink: \"#FF1493\",\n orangered: \"#FF4500\",\n tomato: \"#FF6347\",\n hotpink: \"#FF69B4\",\n coral: \"#FF7F50\",\n darkorange: \"#FF8C00\",\n lightsalmon: \"#FFA07A\",\n orange: \"#FFA500\",\n lightpink: \"#FFB6C1\",\n pink: \"#FFC0CB\",\n gold: \"#FFD700\",\n peachpuff: \"#FFDAB9\",\n navajowhite: \"#FFDEAD\",\n moccasin: \"#FFE4B5\",\n bisque: \"#FFE4C4\",\n mistyrose: \"#FFE4E1\",\n blanchedalmond: \"#FFEBCD\",\n papayawhip: \"#FFEFD5\",\n lavenderblush: \"#FFF0F5\",\n seashell: \"#FFF5EE\",\n cornsilk: \"#FFF8DC\",\n lemonchiffon: \"#FFFACD\",\n floralwhite: \"#FFFAF0\",\n snow: \"#FFFAFA\",\n yellow: \"#FFFF00\",\n lightyellow: \"#FFFFE0\",\n ivory: \"#FFFFF0\",\n white: \"#FFFFFF\",\n};\n\n/**\n * @param {number} [pixelRatio=1]\n */\nlet ColorPicker$1 = class ColorPicker {\n /**\n * @param {number} [pixelRatio=1]\n */\n constructor(pixelRatio = 1) {\n this.pixelRatio = pixelRatio;\n this.generated = false;\n this.centerCoordinates = { x: 289 / 2, y: 289 / 2 };\n this.r = 289 * 0.49;\n this.color = { r: 255, g: 255, b: 255, a: 1.0 };\n this.hueCircle = undefined;\n this.initialColor = { r: 255, g: 255, b: 255, a: 1.0 };\n this.previousColor = undefined;\n this.applied = false;\n\n // bound by\n this.updateCallback = () => {};\n this.closeCallback = () => {};\n\n // create all DOM elements\n this._create();\n }\n\n /**\n * this inserts the colorPicker into a div from the DOM\n *\n * @param {Element} container\n */\n insertTo(container) {\n if (this.hammer !== undefined) {\n this.hammer.destroy();\n this.hammer = undefined;\n }\n this.container = container;\n this.container.appendChild(this.frame);\n this._bindHammer();\n\n this._setSize();\n }\n\n /**\n * the callback is executed on apply and save. Bind it to the application\n *\n * @param {Function} callback\n */\n setUpdateCallback(callback) {\n if (typeof callback === \"function\") {\n this.updateCallback = callback;\n } else {\n throw new Error(\n \"Function attempted to set as colorPicker update callback is not a function.\"\n );\n }\n }\n\n /**\n * the callback is executed on apply and save. Bind it to the application\n *\n * @param {Function} callback\n */\n setCloseCallback(callback) {\n if (typeof callback === \"function\") {\n this.closeCallback = callback;\n } else {\n throw new Error(\n \"Function attempted to set as colorPicker closing callback is not a function.\"\n );\n }\n }\n\n /**\n *\n * @param {string} color\n * @returns {string}\n * @private\n */\n _isColorString(color) {\n if (typeof color === \"string\") {\n return htmlColors[color];\n }\n }\n\n /**\n * Set the color of the colorPicker\n * Supported formats:\n * 'red' --> HTML color string\n * '#ffffff' --> hex string\n * 'rgb(255,255,255)' --> rgb string\n * 'rgba(255,255,255,1.0)' --> rgba string\n * {r:255,g:255,b:255} --> rgb object\n * {r:255,g:255,b:255,a:1.0} --> rgba object\n *\n * @param {string | object} color\n * @param {boolean} [setInitial=true]\n */\n setColor(color, setInitial = true) {\n if (color === \"none\") {\n return;\n }\n\n let rgba;\n\n // if a html color shorthand is used, convert to hex\n const htmlColor = this._isColorString(color);\n if (htmlColor !== undefined) {\n color = htmlColor;\n }\n\n // check format\n if (isString(color) === true) {\n if (isValidRGB(color) === true) {\n const rgbaArray = color\n .substr(4)\n .substr(0, color.length - 5)\n .split(\",\");\n rgba = { r: rgbaArray[0], g: rgbaArray[1], b: rgbaArray[2], a: 1.0 };\n } else if (isValidRGBA(color) === true) {\n const rgbaArray = color\n .substr(5)\n .substr(0, color.length - 6)\n .split(\",\");\n rgba = {\n r: rgbaArray[0],\n g: rgbaArray[1],\n b: rgbaArray[2],\n a: rgbaArray[3],\n };\n } else if (isValidHex(color) === true) {\n const rgbObj = hexToRGB(color);\n rgba = { r: rgbObj.r, g: rgbObj.g, b: rgbObj.b, a: 1.0 };\n }\n } else {\n if (color instanceof Object) {\n if (\n color.r !== undefined &&\n color.g !== undefined &&\n color.b !== undefined\n ) {\n const alpha = color.a !== undefined ? color.a : \"1.0\";\n rgba = { r: color.r, g: color.g, b: color.b, a: alpha };\n }\n }\n }\n\n // set color\n if (rgba === undefined) {\n throw new Error(\n \"Unknown color passed to the colorPicker. Supported are strings: rgb, hex, rgba. Object: rgb ({r:r,g:g,b:b,[a:a]}). Supplied: \" +\n JSON.stringify(color)\n );\n } else {\n this._setColor(rgba, setInitial);\n }\n }\n\n /**\n * this shows the color picker.\n * The hue circle is constructed once and stored.\n */\n show() {\n if (this.closeCallback !== undefined) {\n this.closeCallback();\n this.closeCallback = undefined;\n }\n\n this.applied = false;\n this.frame.style.display = \"block\";\n this._generateHueCircle();\n }\n\n // ------------------------------------------ PRIVATE ----------------------------- //\n\n /**\n * Hide the picker. Is called by the cancel button.\n * Optional boolean to store the previous color for easy access later on.\n *\n * @param {boolean} [storePrevious=true]\n * @private\n */\n _hide(storePrevious = true) {\n // store the previous color for next time;\n if (storePrevious === true) {\n this.previousColor = Object.assign({}, this.color);\n }\n\n if (this.applied === true) {\n this.updateCallback(this.initialColor);\n }\n\n this.frame.style.display = \"none\";\n\n // call the closing callback, restoring the onclick method.\n // this is in a setTimeout because it will trigger the show again before the click is done.\n setTimeout(() => {\n if (this.closeCallback !== undefined) {\n this.closeCallback();\n this.closeCallback = undefined;\n }\n }, 0);\n }\n\n /**\n * bound to the save button. Saves and hides.\n *\n * @private\n */\n _save() {\n this.updateCallback(this.color);\n this.applied = false;\n this._hide();\n }\n\n /**\n * Bound to apply button. Saves but does not close. Is undone by the cancel button.\n *\n * @private\n */\n _apply() {\n this.applied = true;\n this.updateCallback(this.color);\n this._updatePicker(this.color);\n }\n\n /**\n * load the color from the previous session.\n *\n * @private\n */\n _loadLast() {\n if (this.previousColor !== undefined) {\n this.setColor(this.previousColor, false);\n } else {\n alert(\"There is no last color to load...\");\n }\n }\n\n /**\n * set the color, place the picker\n *\n * @param {object} rgba\n * @param {boolean} [setInitial=true]\n * @private\n */\n _setColor(rgba, setInitial = true) {\n // store the initial color\n if (setInitial === true) {\n this.initialColor = Object.assign({}, rgba);\n }\n\n this.color = rgba;\n const hsv = RGBToHSV(rgba.r, rgba.g, rgba.b);\n\n const angleConvert = 2 * Math.PI;\n const radius = this.r * hsv.s;\n const x =\n this.centerCoordinates.x + radius * Math.sin(angleConvert * hsv.h);\n const y =\n this.centerCoordinates.y + radius * Math.cos(angleConvert * hsv.h);\n\n this.colorPickerSelector.style.left =\n x - 0.5 * this.colorPickerSelector.clientWidth + \"px\";\n this.colorPickerSelector.style.top =\n y - 0.5 * this.colorPickerSelector.clientHeight + \"px\";\n\n this._updatePicker(rgba);\n }\n\n /**\n * bound to opacity control\n *\n * @param {number} value\n * @private\n */\n _setOpacity(value) {\n this.color.a = value / 100;\n this._updatePicker(this.color);\n }\n\n /**\n * bound to brightness control\n *\n * @param {number} value\n * @private\n */\n _setBrightness(value) {\n const hsv = RGBToHSV(this.color.r, this.color.g, this.color.b);\n hsv.v = value / 100;\n const rgba = HSVToRGB(hsv.h, hsv.s, hsv.v);\n rgba[\"a\"] = this.color.a;\n this.color = rgba;\n this._updatePicker();\n }\n\n /**\n * update the color picker. A black circle overlays the hue circle to mimic the brightness decreasing.\n *\n * @param {object} rgba\n * @private\n */\n _updatePicker(rgba = this.color) {\n const hsv = RGBToHSV(rgba.r, rgba.g, rgba.b);\n const ctx = this.colorPickerCanvas.getContext(\"2d\");\n if (this.pixelRation === undefined) {\n this.pixelRatio =\n (window.devicePixelRatio || 1) /\n (ctx.webkitBackingStorePixelRatio ||\n ctx.mozBackingStorePixelRatio ||\n ctx.msBackingStorePixelRatio ||\n ctx.oBackingStorePixelRatio ||\n ctx.backingStorePixelRatio ||\n 1);\n }\n ctx.setTransform(this.pixelRatio, 0, 0, this.pixelRatio, 0, 0);\n\n // clear the canvas\n const w = this.colorPickerCanvas.clientWidth;\n const h = this.colorPickerCanvas.clientHeight;\n ctx.clearRect(0, 0, w, h);\n\n ctx.putImageData(this.hueCircle, 0, 0);\n ctx.fillStyle = \"rgba(0,0,0,\" + (1 - hsv.v) + \")\";\n ctx.circle(this.centerCoordinates.x, this.centerCoordinates.y, this.r);\n ctx.fill();\n\n this.brightnessRange.value = 100 * hsv.v;\n this.opacityRange.value = 100 * rgba.a;\n\n this.initialColorDiv.style.backgroundColor =\n \"rgba(\" +\n this.initialColor.r +\n \",\" +\n this.initialColor.g +\n \",\" +\n this.initialColor.b +\n \",\" +\n this.initialColor.a +\n \")\";\n this.newColorDiv.style.backgroundColor =\n \"rgba(\" +\n this.color.r +\n \",\" +\n this.color.g +\n \",\" +\n this.color.b +\n \",\" +\n this.color.a +\n \")\";\n }\n\n /**\n * used by create to set the size of the canvas.\n *\n * @private\n */\n _setSize() {\n this.colorPickerCanvas.style.width = \"100%\";\n this.colorPickerCanvas.style.height = \"100%\";\n\n this.colorPickerCanvas.width = 289 * this.pixelRatio;\n this.colorPickerCanvas.height = 289 * this.pixelRatio;\n }\n\n /**\n * create all dom elements\n * TODO: cleanup, lots of similar dom elements\n *\n * @private\n */\n _create() {\n this.frame = document.createElement(\"div\");\n this.frame.className = \"vis-color-picker\";\n\n this.colorPickerDiv = document.createElement(\"div\");\n this.colorPickerSelector = document.createElement(\"div\");\n this.colorPickerSelector.className = \"vis-selector\";\n this.colorPickerDiv.appendChild(this.colorPickerSelector);\n\n this.colorPickerCanvas = document.createElement(\"canvas\");\n this.colorPickerDiv.appendChild(this.colorPickerCanvas);\n\n if (!this.colorPickerCanvas.getContext) {\n const noCanvas = document.createElement(\"DIV\");\n noCanvas.style.color = \"red\";\n noCanvas.style.fontWeight = \"bold\";\n noCanvas.style.padding = \"10px\";\n noCanvas.innerText = \"Error: your browser does not support HTML canvas\";\n this.colorPickerCanvas.appendChild(noCanvas);\n } else {\n const ctx = this.colorPickerCanvas.getContext(\"2d\");\n this.pixelRatio =\n (window.devicePixelRatio || 1) /\n (ctx.webkitBackingStorePixelRatio ||\n ctx.mozBackingStorePixelRatio ||\n ctx.msBackingStorePixelRatio ||\n ctx.oBackingStorePixelRatio ||\n ctx.backingStorePixelRatio ||\n 1);\n this.colorPickerCanvas\n .getContext(\"2d\")\n .setTransform(this.pixelRatio, 0, 0, this.pixelRatio, 0, 0);\n }\n\n this.colorPickerDiv.className = \"vis-color\";\n\n this.opacityDiv = document.createElement(\"div\");\n this.opacityDiv.className = \"vis-opacity\";\n\n this.brightnessDiv = document.createElement(\"div\");\n this.brightnessDiv.className = \"vis-brightness\";\n\n this.arrowDiv = document.createElement(\"div\");\n this.arrowDiv.className = \"vis-arrow\";\n\n this.opacityRange = document.createElement(\"input\");\n try {\n this.opacityRange.type = \"range\"; // Not supported on IE9\n this.opacityRange.min = \"0\";\n this.opacityRange.max = \"100\";\n } catch (err) {\n // TODO: Add some error handling.\n }\n this.opacityRange.value = \"100\";\n this.opacityRange.className = \"vis-range\";\n\n this.brightnessRange = document.createElement(\"input\");\n try {\n this.brightnessRange.type = \"range\"; // Not supported on IE9\n this.brightnessRange.min = \"0\";\n this.brightnessRange.max = \"100\";\n } catch (err) {\n // TODO: Add some error handling.\n }\n this.brightnessRange.value = \"100\";\n this.brightnessRange.className = \"vis-range\";\n\n this.opacityDiv.appendChild(this.opacityRange);\n this.brightnessDiv.appendChild(this.brightnessRange);\n\n const me = this;\n this.opacityRange.onchange = function () {\n me._setOpacity(this.value);\n };\n this.opacityRange.oninput = function () {\n me._setOpacity(this.value);\n };\n this.brightnessRange.onchange = function () {\n me._setBrightness(this.value);\n };\n this.brightnessRange.oninput = function () {\n me._setBrightness(this.value);\n };\n\n this.brightnessLabel = document.createElement(\"div\");\n this.brightnessLabel.className = \"vis-label vis-brightness\";\n this.brightnessLabel.innerText = \"brightness:\";\n\n this.opacityLabel = document.createElement(\"div\");\n this.opacityLabel.className = \"vis-label vis-opacity\";\n this.opacityLabel.innerText = \"opacity:\";\n\n this.newColorDiv = document.createElement(\"div\");\n this.newColorDiv.className = \"vis-new-color\";\n this.newColorDiv.innerText = \"new\";\n\n this.initialColorDiv = document.createElement(\"div\");\n this.initialColorDiv.className = \"vis-initial-color\";\n this.initialColorDiv.innerText = \"initial\";\n\n this.cancelButton = document.createElement(\"div\");\n this.cancelButton.className = \"vis-button vis-cancel\";\n this.cancelButton.innerText = \"cancel\";\n this.cancelButton.onclick = this._hide.bind(this, false);\n\n this.applyButton = document.createElement(\"div\");\n this.applyButton.className = \"vis-button vis-apply\";\n this.applyButton.innerText = \"apply\";\n this.applyButton.onclick = this._apply.bind(this);\n\n this.saveButton = document.createElement(\"div\");\n this.saveButton.className = \"vis-button vis-save\";\n this.saveButton.innerText = \"save\";\n this.saveButton.onclick = this._save.bind(this);\n\n this.loadButton = document.createElement(\"div\");\n this.loadButton.className = \"vis-button vis-load\";\n this.loadButton.innerText = \"load last\";\n this.loadButton.onclick = this._loadLast.bind(this);\n\n this.frame.appendChild(this.colorPickerDiv);\n this.frame.appendChild(this.arrowDiv);\n this.frame.appendChild(this.brightnessLabel);\n this.frame.appendChild(this.brightnessDiv);\n this.frame.appendChild(this.opacityLabel);\n this.frame.appendChild(this.opacityDiv);\n this.frame.appendChild(this.newColorDiv);\n this.frame.appendChild(this.initialColorDiv);\n\n this.frame.appendChild(this.cancelButton);\n this.frame.appendChild(this.applyButton);\n this.frame.appendChild(this.saveButton);\n this.frame.appendChild(this.loadButton);\n }\n\n /**\n * bind hammer to the color picker\n *\n * @private\n */\n _bindHammer() {\n this.drag = {};\n this.pinch = {};\n this.hammer = new Hammer$1(this.colorPickerCanvas);\n this.hammer.get(\"pinch\").set({ enable: true });\n\n this.hammer.on(\"hammer.input\", (event) => {\n if (event.isFirst) {\n this._moveSelector(event);\n }\n });\n this.hammer.on(\"tap\", (event) => {\n this._moveSelector(event);\n });\n this.hammer.on(\"panstart\", (event) => {\n this._moveSelector(event);\n });\n this.hammer.on(\"panmove\", (event) => {\n this._moveSelector(event);\n });\n this.hammer.on(\"panend\", (event) => {\n this._moveSelector(event);\n });\n }\n\n /**\n * generate the hue circle. This is relatively heavy (200ms) and is done only once on the first time it is shown.\n *\n * @private\n */\n _generateHueCircle() {\n if (this.generated === false) {\n const ctx = this.colorPickerCanvas.getContext(\"2d\");\n if (this.pixelRation === undefined) {\n this.pixelRatio =\n (window.devicePixelRatio || 1) /\n (ctx.webkitBackingStorePixelRatio ||\n ctx.mozBackingStorePixelRatio ||\n ctx.msBackingStorePixelRatio ||\n ctx.oBackingStorePixelRatio ||\n ctx.backingStorePixelRatio ||\n 1);\n }\n ctx.setTransform(this.pixelRatio, 0, 0, this.pixelRatio, 0, 0);\n\n // clear the canvas\n const w = this.colorPickerCanvas.clientWidth;\n const h = this.colorPickerCanvas.clientHeight;\n ctx.clearRect(0, 0, w, h);\n\n // draw hue circle\n let x, y, hue, sat;\n this.centerCoordinates = { x: w * 0.5, y: h * 0.5 };\n this.r = 0.49 * w;\n const angleConvert = (2 * Math.PI) / 360;\n const hfac = 1 / 360;\n const sfac = 1 / this.r;\n let rgb;\n for (hue = 0; hue < 360; hue++) {\n for (sat = 0; sat < this.r; sat++) {\n x = this.centerCoordinates.x + sat * Math.sin(angleConvert * hue);\n y = this.centerCoordinates.y + sat * Math.cos(angleConvert * hue);\n rgb = HSVToRGB(hue * hfac, sat * sfac, 1);\n ctx.fillStyle = \"rgb(\" + rgb.r + \",\" + rgb.g + \",\" + rgb.b + \")\";\n ctx.fillRect(x - 0.5, y - 0.5, 2, 2);\n }\n }\n ctx.strokeStyle = \"rgba(0,0,0,1)\";\n ctx.circle(this.centerCoordinates.x, this.centerCoordinates.y, this.r);\n ctx.stroke();\n\n this.hueCircle = ctx.getImageData(0, 0, w, h);\n }\n this.generated = true;\n }\n\n /**\n * move the selector. This is called by hammer functions.\n *\n * @param {Event} event The event\n * @private\n */\n _moveSelector(event) {\n const rect = this.colorPickerDiv.getBoundingClientRect();\n const left = event.center.x - rect.left;\n const top = event.center.y - rect.top;\n\n const centerY = 0.5 * this.colorPickerDiv.clientHeight;\n const centerX = 0.5 * this.colorPickerDiv.clientWidth;\n\n const x = left - centerX;\n const y = top - centerY;\n\n const angle = Math.atan2(x, y);\n const radius = 0.98 * Math.min(Math.sqrt(x * x + y * y), centerX);\n\n const newTop = Math.cos(angle) * radius + centerY;\n const newLeft = Math.sin(angle) * radius + centerX;\n\n this.colorPickerSelector.style.top =\n newTop - 0.5 * this.colorPickerSelector.clientHeight + \"px\";\n this.colorPickerSelector.style.left =\n newLeft - 0.5 * this.colorPickerSelector.clientWidth + \"px\";\n\n // set color\n let h = angle / (2 * Math.PI);\n h = h < 0 ? h + 1 : h;\n const s = radius / this.r;\n const hsv = RGBToHSV(this.color.r, this.color.g, this.color.b);\n hsv.h = h;\n hsv.s = s;\n const rgba = HSVToRGB(hsv.h, hsv.s, hsv.v);\n rgba[\"a\"] = this.color.a;\n this.color = rgba;\n\n // update previews\n this.initialColorDiv.style.backgroundColor =\n \"rgba(\" +\n this.initialColor.r +\n \",\" +\n this.initialColor.g +\n \",\" +\n this.initialColor.b +\n \",\" +\n this.initialColor.a +\n \")\";\n this.newColorDiv.style.backgroundColor =\n \"rgba(\" +\n this.color.r +\n \",\" +\n this.color.g +\n \",\" +\n this.color.b +\n \",\" +\n this.color.a +\n \")\";\n }\n};\n\n/**\n * Wrap given text (last argument) in HTML elements (all preceding arguments).\n *\n * @param {...any} rest - List of tag names followed by inner text.\n * @returns An element or a text node.\n */\nfunction wrapInTag(...rest) {\n if (rest.length < 1) {\n throw new TypeError(\"Invalid arguments.\");\n } else if (rest.length === 1) {\n return document.createTextNode(rest[0]);\n } else {\n const element = document.createElement(rest[0]);\n element.appendChild(wrapInTag(...rest.slice(1)));\n return element;\n }\n}\n\n/**\n * The way this works is for all properties of this.possible options, you can supply the property name in any form to list the options.\n * Boolean options are recognised as Boolean\n * Number options should be written as array: [default value, min value, max value, stepsize]\n * Colors should be written as array: ['color', '#ffffff']\n * Strings with should be written as array: [option1, option2, option3, ..]\n *\n * The options are matched with their counterparts in each of the modules and the values used in the configuration are\n */\nlet Configurator$1 = class Configurator {\n /**\n * @param {object} parentModule | the location where parentModule.setOptions() can be called\n * @param {object} defaultContainer | the default container of the module\n * @param {object} configureOptions | the fully configured and predefined options set found in allOptions.js\n * @param {number} pixelRatio | canvas pixel ratio\n * @param {Function} hideOption | custom logic to dynamically hide options\n */\n constructor(\n parentModule,\n defaultContainer,\n configureOptions,\n pixelRatio = 1,\n hideOption = () => false\n ) {\n this.parent = parentModule;\n this.changedOptions = [];\n this.container = defaultContainer;\n this.allowCreation = false;\n this.hideOption = hideOption;\n\n this.options = {};\n this.initialized = false;\n this.popupCounter = 0;\n this.defaultOptions = {\n enabled: false,\n filter: true,\n container: undefined,\n showButton: true,\n };\n Object.assign(this.options, this.defaultOptions);\n\n this.configureOptions = configureOptions;\n this.moduleOptions = {};\n this.domElements = [];\n this.popupDiv = {};\n this.popupLimit = 5;\n this.popupHistory = {};\n this.colorPicker = new ColorPicker$1(pixelRatio);\n this.wrapper = undefined;\n }\n\n /**\n * refresh all options.\n * Because all modules parse their options by themselves, we just use their options. We copy them here.\n *\n * @param {object} options\n */\n setOptions(options) {\n if (options !== undefined) {\n // reset the popup history because the indices may have been changed.\n this.popupHistory = {};\n this._removePopup();\n\n let enabled = true;\n if (typeof options === \"string\") {\n this.options.filter = options;\n } else if (Array.isArray(options)) {\n this.options.filter = options.join();\n } else if (typeof options === \"object\") {\n if (options == null) {\n throw new TypeError(\"options cannot be null\");\n }\n if (options.container !== undefined) {\n this.options.container = options.container;\n }\n if (options.filter !== undefined) {\n this.options.filter = options.filter;\n }\n if (options.showButton !== undefined) {\n this.options.showButton = options.showButton;\n }\n if (options.enabled !== undefined) {\n enabled = options.enabled;\n }\n } else if (typeof options === \"boolean\") {\n this.options.filter = true;\n enabled = options;\n } else if (typeof options === \"function\") {\n this.options.filter = options;\n enabled = true;\n }\n if (this.options.filter === false) {\n enabled = false;\n }\n\n this.options.enabled = enabled;\n }\n this._clean();\n }\n\n /**\n *\n * @param {object} moduleOptions\n */\n setModuleOptions(moduleOptions) {\n this.moduleOptions = moduleOptions;\n if (this.options.enabled === true) {\n this._clean();\n if (this.options.container !== undefined) {\n this.container = this.options.container;\n }\n this._create();\n }\n }\n\n /**\n * Create all DOM elements\n *\n * @private\n */\n _create() {\n this._clean();\n this.changedOptions = [];\n\n const filter = this.options.filter;\n let counter = 0;\n let show = false;\n for (const option in this.configureOptions) {\n if (Object.prototype.hasOwnProperty.call(this.configureOptions, option)) {\n this.allowCreation = false;\n show = false;\n if (typeof filter === \"function\") {\n show = filter(option, []);\n show =\n show ||\n this._handleObject(this.configureOptions[option], [option], true);\n } else if (filter === true || filter.indexOf(option) !== -1) {\n show = true;\n }\n\n if (show !== false) {\n this.allowCreation = true;\n\n // linebreak between categories\n if (counter > 0) {\n this._makeItem([]);\n }\n // a header for the category\n this._makeHeader(option);\n\n // get the sub options\n this._handleObject(this.configureOptions[option], [option]);\n }\n counter++;\n }\n }\n this._makeButton();\n this._push();\n //~ this.colorPicker.insertTo(this.container);\n }\n\n /**\n * draw all DOM elements on the screen\n *\n * @private\n */\n _push() {\n this.wrapper = document.createElement(\"div\");\n this.wrapper.className = \"vis-configuration-wrapper\";\n this.container.appendChild(this.wrapper);\n for (let i = 0; i < this.domElements.length; i++) {\n this.wrapper.appendChild(this.domElements[i]);\n }\n\n this._showPopupIfNeeded();\n }\n\n /**\n * delete all DOM elements\n *\n * @private\n */\n _clean() {\n for (let i = 0; i < this.domElements.length; i++) {\n this.wrapper.removeChild(this.domElements[i]);\n }\n\n if (this.wrapper !== undefined) {\n this.container.removeChild(this.wrapper);\n this.wrapper = undefined;\n }\n this.domElements = [];\n\n this._removePopup();\n }\n\n /**\n * get the value from the actualOptions if it exists\n *\n * @param {Array} path | where to look for the actual option\n * @returns {*}\n * @private\n */\n _getValue(path) {\n let base = this.moduleOptions;\n for (let i = 0; i < path.length; i++) {\n if (base[path[i]] !== undefined) {\n base = base[path[i]];\n } else {\n base = undefined;\n break;\n }\n }\n return base;\n }\n\n /**\n * all option elements are wrapped in an item\n *\n * @param {Array} path | where to look for the actual option\n * @param {Array.} domElements\n * @returns {number}\n * @private\n */\n _makeItem(path, ...domElements) {\n if (this.allowCreation === true) {\n const item = document.createElement(\"div\");\n item.className =\n \"vis-configuration vis-config-item vis-config-s\" + path.length;\n domElements.forEach((element) => {\n item.appendChild(element);\n });\n this.domElements.push(item);\n return this.domElements.length;\n }\n return 0;\n }\n\n /**\n * header for major subjects\n *\n * @param {string} name\n * @private\n */\n _makeHeader(name) {\n const div = document.createElement(\"div\");\n div.className = \"vis-configuration vis-config-header\";\n div.innerText = name;\n this._makeItem([], div);\n }\n\n /**\n * make a label, if it is an object label, it gets different styling.\n *\n * @param {string} name\n * @param {Array} path | where to look for the actual option\n * @param {string} objectLabel\n * @returns {HTMLElement}\n * @private\n */\n _makeLabel(name, path, objectLabel = false) {\n const div = document.createElement(\"div\");\n div.className =\n \"vis-configuration vis-config-label vis-config-s\" + path.length;\n if (objectLabel === true) {\n while (div.firstChild) {\n div.removeChild(div.firstChild);\n }\n div.appendChild(wrapInTag(\"i\", \"b\", name));\n } else {\n div.innerText = name + \":\";\n }\n return div;\n }\n\n /**\n * make a dropdown list for multiple possible string optoins\n *\n * @param {Array.} arr\n * @param {number} value\n * @param {Array} path | where to look for the actual option\n * @private\n */\n _makeDropdown(arr, value, path) {\n const select = document.createElement(\"select\");\n select.className = \"vis-configuration vis-config-select\";\n let selectedValue = 0;\n if (value !== undefined) {\n if (arr.indexOf(value) !== -1) {\n selectedValue = arr.indexOf(value);\n }\n }\n\n for (let i = 0; i < arr.length; i++) {\n const option = document.createElement(\"option\");\n option.value = arr[i];\n if (i === selectedValue) {\n option.selected = \"selected\";\n }\n option.innerText = arr[i];\n select.appendChild(option);\n }\n\n const me = this;\n select.onchange = function () {\n me._update(this.value, path);\n };\n\n const label = this._makeLabel(path[path.length - 1], path);\n this._makeItem(path, label, select);\n }\n\n /**\n * make a range object for numeric options\n *\n * @param {Array.} arr\n * @param {number} value\n * @param {Array} path | where to look for the actual option\n * @private\n */\n _makeRange(arr, value, path) {\n const defaultValue = arr[0];\n const min = arr[1];\n const max = arr[2];\n const step = arr[3];\n const range = document.createElement(\"input\");\n range.className = \"vis-configuration vis-config-range\";\n try {\n range.type = \"range\"; // not supported on IE9\n range.min = min;\n range.max = max;\n } catch (err) {\n // TODO: Add some error handling.\n }\n range.step = step;\n\n // set up the popup settings in case they are needed.\n let popupString = \"\";\n let popupValue = 0;\n\n if (value !== undefined) {\n const factor = 1.2;\n if (value < 0 && value * factor < min) {\n range.min = Math.ceil(value * factor);\n popupValue = range.min;\n popupString = \"range increased\";\n } else if (value / factor < min) {\n range.min = Math.ceil(value / factor);\n popupValue = range.min;\n popupString = \"range increased\";\n }\n if (value * factor > max && max !== 1) {\n range.max = Math.ceil(value * factor);\n popupValue = range.max;\n popupString = \"range increased\";\n }\n range.value = value;\n } else {\n range.value = defaultValue;\n }\n\n const input = document.createElement(\"input\");\n input.className = \"vis-configuration vis-config-rangeinput\";\n input.value = range.value;\n\n const me = this;\n range.onchange = function () {\n input.value = this.value;\n me._update(Number(this.value), path);\n };\n range.oninput = function () {\n input.value = this.value;\n };\n\n const label = this._makeLabel(path[path.length - 1], path);\n const itemIndex = this._makeItem(path, label, range, input);\n\n // if a popup is needed AND it has not been shown for this value, show it.\n if (popupString !== \"\" && this.popupHistory[itemIndex] !== popupValue) {\n this.popupHistory[itemIndex] = popupValue;\n this._setupPopup(popupString, itemIndex);\n }\n }\n\n /**\n * make a button object\n *\n * @private\n */\n _makeButton() {\n if (this.options.showButton === true) {\n const generateButton = document.createElement(\"div\");\n generateButton.className = \"vis-configuration vis-config-button\";\n generateButton.innerText = \"generate options\";\n generateButton.onclick = () => {\n this._printOptions();\n };\n generateButton.onmouseover = () => {\n generateButton.className = \"vis-configuration vis-config-button hover\";\n };\n generateButton.onmouseout = () => {\n generateButton.className = \"vis-configuration vis-config-button\";\n };\n\n this.optionsContainer = document.createElement(\"div\");\n this.optionsContainer.className =\n \"vis-configuration vis-config-option-container\";\n\n this.domElements.push(this.optionsContainer);\n this.domElements.push(generateButton);\n }\n }\n\n /**\n * prepare the popup\n *\n * @param {string} string\n * @param {number} index\n * @private\n */\n _setupPopup(string, index) {\n if (\n this.initialized === true &&\n this.allowCreation === true &&\n this.popupCounter < this.popupLimit\n ) {\n const div = document.createElement(\"div\");\n div.id = \"vis-configuration-popup\";\n div.className = \"vis-configuration-popup\";\n div.innerText = string;\n div.onclick = () => {\n this._removePopup();\n };\n this.popupCounter += 1;\n this.popupDiv = { html: div, index: index };\n }\n }\n\n /**\n * remove the popup from the dom\n *\n * @private\n */\n _removePopup() {\n if (this.popupDiv.html !== undefined) {\n this.popupDiv.html.parentNode.removeChild(this.popupDiv.html);\n clearTimeout(this.popupDiv.hideTimeout);\n clearTimeout(this.popupDiv.deleteTimeout);\n this.popupDiv = {};\n }\n }\n\n /**\n * Show the popup if it is needed.\n *\n * @private\n */\n _showPopupIfNeeded() {\n if (this.popupDiv.html !== undefined) {\n const correspondingElement = this.domElements[this.popupDiv.index];\n const rect = correspondingElement.getBoundingClientRect();\n this.popupDiv.html.style.left = rect.left + \"px\";\n this.popupDiv.html.style.top = rect.top - 30 + \"px\"; // 30 is the height;\n document.body.appendChild(this.popupDiv.html);\n this.popupDiv.hideTimeout = setTimeout(() => {\n this.popupDiv.html.style.opacity = 0;\n }, 1500);\n this.popupDiv.deleteTimeout = setTimeout(() => {\n this._removePopup();\n }, 1800);\n }\n }\n\n /**\n * make a checkbox for boolean options.\n *\n * @param {number} defaultValue\n * @param {number} value\n * @param {Array} path | where to look for the actual option\n * @private\n */\n _makeCheckbox(defaultValue, value, path) {\n const checkbox = document.createElement(\"input\");\n checkbox.type = \"checkbox\";\n checkbox.className = \"vis-configuration vis-config-checkbox\";\n checkbox.checked = defaultValue;\n if (value !== undefined) {\n checkbox.checked = value;\n if (value !== defaultValue) {\n if (typeof defaultValue === \"object\") {\n if (value !== defaultValue.enabled) {\n this.changedOptions.push({ path: path, value: value });\n }\n } else {\n this.changedOptions.push({ path: path, value: value });\n }\n }\n }\n\n const me = this;\n checkbox.onchange = function () {\n me._update(this.checked, path);\n };\n\n const label = this._makeLabel(path[path.length - 1], path);\n this._makeItem(path, label, checkbox);\n }\n\n /**\n * make a text input field for string options.\n *\n * @param {number} defaultValue\n * @param {number} value\n * @param {Array} path | where to look for the actual option\n * @private\n */\n _makeTextInput(defaultValue, value, path) {\n const checkbox = document.createElement(\"input\");\n checkbox.type = \"text\";\n checkbox.className = \"vis-configuration vis-config-text\";\n checkbox.value = value;\n if (value !== defaultValue) {\n this.changedOptions.push({ path: path, value: value });\n }\n\n const me = this;\n checkbox.onchange = function () {\n me._update(this.value, path);\n };\n\n const label = this._makeLabel(path[path.length - 1], path);\n this._makeItem(path, label, checkbox);\n }\n\n /**\n * make a color field with a color picker for color fields\n *\n * @param {Array.} arr\n * @param {number} value\n * @param {Array} path | where to look for the actual option\n * @private\n */\n _makeColorField(arr, value, path) {\n const defaultColor = arr[1];\n const div = document.createElement(\"div\");\n value = value === undefined ? defaultColor : value;\n\n if (value !== \"none\") {\n div.className = \"vis-configuration vis-config-colorBlock\";\n div.style.backgroundColor = value;\n } else {\n div.className = \"vis-configuration vis-config-colorBlock none\";\n }\n\n value = value === undefined ? defaultColor : value;\n div.onclick = () => {\n this._showColorPicker(value, div, path);\n };\n\n const label = this._makeLabel(path[path.length - 1], path);\n this._makeItem(path, label, div);\n }\n\n /**\n * used by the color buttons to call the color picker.\n *\n * @param {number} value\n * @param {HTMLElement} div\n * @param {Array} path | where to look for the actual option\n * @private\n */\n _showColorPicker(value, div, path) {\n // clear the callback from this div\n div.onclick = function () {};\n\n this.colorPicker.insertTo(div);\n this.colorPicker.show();\n\n this.colorPicker.setColor(value);\n this.colorPicker.setUpdateCallback((color) => {\n const colorString =\n \"rgba(\" + color.r + \",\" + color.g + \",\" + color.b + \",\" + color.a + \")\";\n div.style.backgroundColor = colorString;\n this._update(colorString, path);\n });\n\n // on close of the colorpicker, restore the callback.\n this.colorPicker.setCloseCallback(() => {\n div.onclick = () => {\n this._showColorPicker(value, div, path);\n };\n });\n }\n\n /**\n * parse an object and draw the correct items\n *\n * @param {object} obj\n * @param {Array} [path=[]] | where to look for the actual option\n * @param {boolean} [checkOnly=false]\n * @returns {boolean}\n * @private\n */\n _handleObject(obj, path = [], checkOnly = false) {\n let show = false;\n const filter = this.options.filter;\n let visibleInSet = false;\n for (const subObj in obj) {\n if (Object.prototype.hasOwnProperty.call(obj, subObj)) {\n show = true;\n const item = obj[subObj];\n const newPath = copyAndExtendArray(path, subObj);\n if (typeof filter === \"function\") {\n show = filter(subObj, path);\n\n // if needed we must go deeper into the object.\n if (show === false) {\n if (\n !Array.isArray(item) &&\n typeof item !== \"string\" &&\n typeof item !== \"boolean\" &&\n item instanceof Object\n ) {\n this.allowCreation = false;\n show = this._handleObject(item, newPath, true);\n this.allowCreation = checkOnly === false;\n }\n }\n }\n\n if (show !== false) {\n visibleInSet = true;\n const value = this._getValue(newPath);\n\n if (Array.isArray(item)) {\n this._handleArray(item, value, newPath);\n } else if (typeof item === \"string\") {\n this._makeTextInput(item, value, newPath);\n } else if (typeof item === \"boolean\") {\n this._makeCheckbox(item, value, newPath);\n } else if (item instanceof Object) {\n // skip the options that are not enabled\n if (!this.hideOption(path, subObj, this.moduleOptions)) {\n // initially collapse options with an disabled enabled option.\n if (item.enabled !== undefined) {\n const enabledPath = copyAndExtendArray(newPath, \"enabled\");\n const enabledValue = this._getValue(enabledPath);\n if (enabledValue === true) {\n const label = this._makeLabel(subObj, newPath, true);\n this._makeItem(newPath, label);\n visibleInSet =\n this._handleObject(item, newPath) || visibleInSet;\n } else {\n this._makeCheckbox(item, enabledValue, newPath);\n }\n } else {\n const label = this._makeLabel(subObj, newPath, true);\n this._makeItem(newPath, label);\n visibleInSet =\n this._handleObject(item, newPath) || visibleInSet;\n }\n }\n } else {\n console.error(\"dont know how to handle\", item, subObj, newPath);\n }\n }\n }\n }\n return visibleInSet;\n }\n\n /**\n * handle the array type of option\n *\n * @param {Array.} arr\n * @param {number} value\n * @param {Array} path | where to look for the actual option\n * @private\n */\n _handleArray(arr, value, path) {\n if (typeof arr[0] === \"string\" && arr[0] === \"color\") {\n this._makeColorField(arr, value, path);\n if (arr[1] !== value) {\n this.changedOptions.push({ path: path, value: value });\n }\n } else if (typeof arr[0] === \"string\") {\n this._makeDropdown(arr, value, path);\n if (arr[0] !== value) {\n this.changedOptions.push({ path: path, value: value });\n }\n } else if (typeof arr[0] === \"number\") {\n this._makeRange(arr, value, path);\n if (arr[0] !== value) {\n this.changedOptions.push({ path: path, value: Number(value) });\n }\n }\n }\n\n /**\n * called to update the network with the new settings.\n *\n * @param {number} value\n * @param {Array} path | where to look for the actual option\n * @private\n */\n _update(value, path) {\n const options = this._constructOptions(value, path);\n\n if (\n this.parent.body &&\n this.parent.body.emitter &&\n this.parent.body.emitter.emit\n ) {\n this.parent.body.emitter.emit(\"configChange\", options);\n }\n this.initialized = true;\n this.parent.setOptions(options);\n }\n\n /**\n *\n * @param {string | boolean} value\n * @param {Array.} path\n * @param {{}} optionsObj\n * @returns {{}}\n * @private\n */\n _constructOptions(value, path, optionsObj = {}) {\n let pointer = optionsObj;\n\n // when dropdown boxes can be string or boolean, we typecast it into correct types\n value = value === \"true\" ? true : value;\n value = value === \"false\" ? false : value;\n\n for (let i = 0; i < path.length; i++) {\n if (path[i] !== \"global\") {\n if (pointer[path[i]] === undefined) {\n pointer[path[i]] = {};\n }\n if (i !== path.length - 1) {\n pointer = pointer[path[i]];\n } else {\n pointer[path[i]] = value;\n }\n }\n }\n return optionsObj;\n }\n\n /**\n * @private\n */\n _printOptions() {\n const options = this.getOptions();\n\n while (this.optionsContainer.firstChild) {\n this.optionsContainer.removeChild(this.optionsContainer.firstChild);\n }\n this.optionsContainer.appendChild(\n wrapInTag(\"pre\", \"const options = \" + JSON.stringify(options, null, 2))\n );\n }\n\n /**\n *\n * @returns {{}} options\n */\n getOptions() {\n const options = {};\n for (let i = 0; i < this.changedOptions.length; i++) {\n this._constructOptions(\n this.changedOptions[i].value,\n this.changedOptions[i].path,\n options\n );\n }\n return options;\n }\n};\n\n/**\n * Popup is a class to create a popup window with some text\n */\nlet Popup$1 = class Popup {\n /**\n * @param {Element} container The container object.\n * @param {string} overflowMethod How the popup should act to overflowing ('flip' or 'cap')\n */\n constructor(container, overflowMethod) {\n this.container = container;\n this.overflowMethod = overflowMethod || \"cap\";\n\n this.x = 0;\n this.y = 0;\n this.padding = 5;\n this.hidden = false;\n\n // create the frame\n this.frame = document.createElement(\"div\");\n this.frame.className = \"vis-tooltip\";\n this.container.appendChild(this.frame);\n }\n\n /**\n * @param {number} x Horizontal position of the popup window\n * @param {number} y Vertical position of the popup window\n */\n setPosition(x, y) {\n this.x = parseInt(x);\n this.y = parseInt(y);\n }\n\n /**\n * Set the content for the popup window. This can be HTML code or text.\n *\n * @param {string | Element} content\n */\n setText(content) {\n if (content instanceof Element) {\n while (this.frame.firstChild) {\n this.frame.removeChild(this.frame.firstChild);\n }\n this.frame.appendChild(content);\n } else {\n // String containing literal text, element has to be used for HTML due to\n // XSS risks associated with innerHTML (i.e. prevent XSS by accident).\n this.frame.innerText = content;\n }\n }\n\n /**\n * Show the popup window\n *\n * @param {boolean} [doShow] Show or hide the window\n */\n show(doShow) {\n if (doShow === undefined) {\n doShow = true;\n }\n\n if (doShow === true) {\n const height = this.frame.clientHeight;\n const width = this.frame.clientWidth;\n const maxHeight = this.frame.parentNode.clientHeight;\n const maxWidth = this.frame.parentNode.clientWidth;\n\n let left = 0,\n top = 0;\n\n if (this.overflowMethod == \"flip\") {\n let isLeft = false,\n isTop = true; // Where around the position it's located\n\n if (this.y - height < this.padding) {\n isTop = false;\n }\n\n if (this.x + width > maxWidth - this.padding) {\n isLeft = true;\n }\n\n if (isLeft) {\n left = this.x - width;\n } else {\n left = this.x;\n }\n\n if (isTop) {\n top = this.y - height;\n } else {\n top = this.y;\n }\n } else {\n top = this.y - height;\n if (top + height + this.padding > maxHeight) {\n top = maxHeight - height - this.padding;\n }\n if (top < this.padding) {\n top = this.padding;\n }\n\n left = this.x;\n if (left + width + this.padding > maxWidth) {\n left = maxWidth - width - this.padding;\n }\n if (left < this.padding) {\n left = this.padding;\n }\n }\n\n this.frame.style.left = left + \"px\";\n this.frame.style.top = top + \"px\";\n this.frame.style.visibility = \"visible\";\n this.hidden = false;\n } else {\n this.hide();\n }\n }\n\n /**\n * Hide the popup window\n */\n hide() {\n this.hidden = true;\n this.frame.style.left = \"0\";\n this.frame.style.top = \"0\";\n this.frame.style.visibility = \"hidden\";\n }\n\n /**\n * Remove the popup window\n */\n destroy() {\n this.frame.parentNode.removeChild(this.frame); // Remove element from DOM\n }\n};\n\nlet errorFound = false;\nlet allOptions;\n\nconst VALIDATOR_PRINT_STYLE$1 = \"background: #FFeeee; color: #dd0000\";\n\n/**\n * Used to validate options.\n */\nlet Validator$1 = class Validator {\n /**\n * Main function to be called\n *\n * @param {object} options\n * @param {object} referenceOptions\n * @param {object} subObject\n * @returns {boolean}\n * @static\n */\n static validate(options, referenceOptions, subObject) {\n errorFound = false;\n allOptions = referenceOptions;\n let usedOptions = referenceOptions;\n if (subObject !== undefined) {\n usedOptions = referenceOptions[subObject];\n }\n Validator.parse(options, usedOptions, []);\n return errorFound;\n }\n\n /**\n * Will traverse an object recursively and check every value\n *\n * @param {object} options\n * @param {object} referenceOptions\n * @param {Array} path | where to look for the actual option\n * @static\n */\n static parse(options, referenceOptions, path) {\n for (const option in options) {\n if (Object.prototype.hasOwnProperty.call(options, option)) {\n Validator.check(option, options, referenceOptions, path);\n }\n }\n }\n\n /**\n * Check every value. If the value is an object, call the parse function on that object.\n *\n * @param {string} option\n * @param {object} options\n * @param {object} referenceOptions\n * @param {Array} path | where to look for the actual option\n * @static\n */\n static check(option, options, referenceOptions, path) {\n if (\n referenceOptions[option] === undefined &&\n referenceOptions.__any__ === undefined\n ) {\n Validator.getSuggestion(option, referenceOptions, path);\n return;\n }\n\n let referenceOption = option;\n let is_object = true;\n\n if (\n referenceOptions[option] === undefined &&\n referenceOptions.__any__ !== undefined\n ) {\n // NOTE: This only triggers if the __any__ is in the top level of the options object.\n // THAT'S A REALLY BAD PLACE TO ALLOW IT!!!!\n // TODO: Examine if needed, remove if possible\n\n // __any__ is a wildcard. Any value is accepted and will be further analysed by reference.\n referenceOption = \"__any__\";\n\n // if the any-subgroup is not a predefined object in the configurator,\n // we do not look deeper into the object.\n is_object = Validator.getType(options[option]) === \"object\";\n }\n\n let refOptionObj = referenceOptions[referenceOption];\n if (is_object && refOptionObj.__type__ !== undefined) {\n refOptionObj = refOptionObj.__type__;\n }\n\n Validator.checkFields(\n option,\n options,\n referenceOptions,\n referenceOption,\n refOptionObj,\n path\n );\n }\n\n /**\n *\n * @param {string} option | the option property\n * @param {object} options | The supplied options object\n * @param {object} referenceOptions | The reference options containing all options and their allowed formats\n * @param {string} referenceOption | Usually this is the same as option, except when handling an __any__ tag.\n * @param {string} refOptionObj | This is the type object from the reference options\n * @param {Array} path | where in the object is the option\n * @static\n */\n static checkFields(\n option,\n options,\n referenceOptions,\n referenceOption,\n refOptionObj,\n path\n ) {\n const log = function (message) {\n console.error(\n \"%c\" + message + Validator.printLocation(path, option),\n VALIDATOR_PRINT_STYLE$1\n );\n };\n\n const optionType = Validator.getType(options[option]);\n const refOptionType = refOptionObj[optionType];\n\n if (refOptionType !== undefined) {\n // if the type is correct, we check if it is supposed to be one of a few select values\n if (\n Validator.getType(refOptionType) === \"array\" &&\n refOptionType.indexOf(options[option]) === -1\n ) {\n log(\n 'Invalid option detected in \"' +\n option +\n '\".' +\n \" Allowed values are:\" +\n Validator.print(refOptionType) +\n ' not \"' +\n options[option] +\n '\". '\n );\n errorFound = true;\n } else if (optionType === \"object\" && referenceOption !== \"__any__\") {\n path = copyAndExtendArray(path, option);\n Validator.parse(\n options[option],\n referenceOptions[referenceOption],\n path\n );\n }\n } else if (refOptionObj[\"any\"] === undefined) {\n // type of the field is incorrect and the field cannot be any\n log(\n 'Invalid type received for \"' +\n option +\n '\". Expected: ' +\n Validator.print(Object.keys(refOptionObj)) +\n \". Received [\" +\n optionType +\n '] \"' +\n options[option] +\n '\"'\n );\n errorFound = true;\n }\n }\n\n /**\n *\n * @param {object | boolean | number | string | Array. | Date | Node | Moment | undefined | null} object\n * @returns {string}\n * @static\n */\n static getType(object) {\n const type = typeof object;\n\n if (type === \"object\") {\n if (object === null) {\n return \"null\";\n }\n if (object instanceof Boolean) {\n return \"boolean\";\n }\n if (object instanceof Number) {\n return \"number\";\n }\n if (object instanceof String) {\n return \"string\";\n }\n if (Array.isArray(object)) {\n return \"array\";\n }\n if (object instanceof Date) {\n return \"date\";\n }\n if (object.nodeType !== undefined) {\n return \"dom\";\n }\n if (object._isAMomentObject === true) {\n return \"moment\";\n }\n return \"object\";\n } else if (type === \"number\") {\n return \"number\";\n } else if (type === \"boolean\") {\n return \"boolean\";\n } else if (type === \"string\") {\n return \"string\";\n } else if (type === undefined) {\n return \"undefined\";\n }\n return type;\n }\n\n /**\n * @param {string} option\n * @param {object} options\n * @param {Array.} path\n * @static\n */\n static getSuggestion(option, options, path) {\n const localSearch = Validator.findInOptions(option, options, path, false);\n const globalSearch = Validator.findInOptions(option, allOptions, [], true);\n\n const localSearchThreshold = 8;\n const globalSearchThreshold = 4;\n\n let msg;\n if (localSearch.indexMatch !== undefined) {\n msg =\n \" in \" +\n Validator.printLocation(localSearch.path, option, \"\") +\n 'Perhaps it was incomplete? Did you mean: \"' +\n localSearch.indexMatch +\n '\"?\\n\\n';\n } else if (\n globalSearch.distance <= globalSearchThreshold &&\n localSearch.distance > globalSearch.distance\n ) {\n msg =\n \" in \" +\n Validator.printLocation(localSearch.path, option, \"\") +\n \"Perhaps it was misplaced? Matching option found at: \" +\n Validator.printLocation(\n globalSearch.path,\n globalSearch.closestMatch,\n \"\"\n );\n } else if (localSearch.distance <= localSearchThreshold) {\n msg =\n '. Did you mean \"' +\n localSearch.closestMatch +\n '\"?' +\n Validator.printLocation(localSearch.path, option);\n } else {\n msg =\n \". Did you mean one of these: \" +\n Validator.print(Object.keys(options)) +\n Validator.printLocation(path, option);\n }\n\n console.error(\n '%cUnknown option detected: \"' + option + '\"' + msg,\n VALIDATOR_PRINT_STYLE$1\n );\n errorFound = true;\n }\n\n /**\n * traverse the options in search for a match.\n *\n * @param {string} option\n * @param {object} options\n * @param {Array} path | where to look for the actual option\n * @param {boolean} [recursive=false]\n * @returns {{closestMatch: string, path: Array, distance: number}}\n * @static\n */\n static findInOptions(option, options, path, recursive = false) {\n let min = 1e9;\n let closestMatch = \"\";\n let closestMatchPath = [];\n const lowerCaseOption = option.toLowerCase();\n let indexMatch = undefined;\n for (const op in options) {\n let distance;\n if (options[op].__type__ !== undefined && recursive === true) {\n const result = Validator.findInOptions(\n option,\n options[op],\n copyAndExtendArray(path, op)\n );\n if (min > result.distance) {\n closestMatch = result.closestMatch;\n closestMatchPath = result.path;\n min = result.distance;\n indexMatch = result.indexMatch;\n }\n } else {\n if (op.toLowerCase().indexOf(lowerCaseOption) !== -1) {\n indexMatch = op;\n }\n distance = Validator.levenshteinDistance(option, op);\n if (min > distance) {\n closestMatch = op;\n closestMatchPath = copyArray(path);\n min = distance;\n }\n }\n }\n return {\n closestMatch: closestMatch,\n path: closestMatchPath,\n distance: min,\n indexMatch: indexMatch,\n };\n }\n\n /**\n * @param {Array.} path\n * @param {object} option\n * @param {string} prefix\n * @returns {string}\n * @static\n */\n static printLocation(path, option, prefix = \"Problem value found at: \\n\") {\n let str = \"\\n\\n\" + prefix + \"options = {\\n\";\n for (let i = 0; i < path.length; i++) {\n for (let j = 0; j < i + 1; j++) {\n str += \" \";\n }\n str += path[i] + \": {\\n\";\n }\n for (let j = 0; j < path.length + 1; j++) {\n str += \" \";\n }\n str += option + \"\\n\";\n for (let i = 0; i < path.length + 1; i++) {\n for (let j = 0; j < path.length - i; j++) {\n str += \" \";\n }\n str += \"}\\n\";\n }\n return str + \"\\n\\n\";\n }\n\n /**\n * @param {object} options\n * @returns {string}\n * @static\n */\n static print(options) {\n return JSON.stringify(options)\n .replace(/(\")|(\\[)|(\\])|(,\"__type__\")/g, \"\")\n .replace(/(,)/g, \", \");\n }\n\n /**\n * Compute the edit distance between the two given strings\n * http://en.wikibooks.org/wiki/Algorithm_Implementation/Strings/Levenshtein_distance#JavaScript\n *\n * Copyright (c) 2011 Andrei Mackenzie\n *\n * Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the \"Software\"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions:\n *\n * The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software.\n *\n * THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.\n *\n * @param {string} a\n * @param {string} b\n * @returns {Array.>}}\n * @static\n */\n static levenshteinDistance(a, b) {\n if (a.length === 0) return b.length;\n if (b.length === 0) return a.length;\n\n const matrix = [];\n\n // increment along the first column of each row\n let i;\n for (i = 0; i <= b.length; i++) {\n matrix[i] = [i];\n }\n\n // increment each column in the first row\n let j;\n for (j = 0; j <= a.length; j++) {\n matrix[0][j] = j;\n }\n\n // Fill in the rest of the matrix\n for (i = 1; i <= b.length; i++) {\n for (j = 1; j <= a.length; j++) {\n if (b.charAt(i - 1) == a.charAt(j - 1)) {\n matrix[i][j] = matrix[i - 1][j - 1];\n } else {\n matrix[i][j] = Math.min(\n matrix[i - 1][j - 1] + 1, // substitution\n Math.min(\n matrix[i][j - 1] + 1, // insertion\n matrix[i - 1][j] + 1\n )\n ); // deletion\n }\n }\n }\n\n return matrix[b.length][a.length];\n }\n};\n\nconst Activator = Activator$1;\r\nconst ColorPicker = ColorPicker$1;\r\nconst Configurator = Configurator$1;\r\nconst Hammer = Hammer$1;\r\nconst Popup = Popup$1;\r\nconst VALIDATOR_PRINT_STYLE = VALIDATOR_PRINT_STYLE$1;\r\nconst Validator = Validator$1;\n\nexport { Activator, Alea, ColorPicker, Configurator, DELETE, HSVToHex, HSVToRGB, Hammer, Popup, RGBToHSV, RGBToHex, VALIDATOR_PRINT_STYLE, Validator, addClassName, addCssText, addEventListener, binarySearchCustom, binarySearchValue, bridgeObject, copyAndExtendArray, copyArray, deepExtend, deepObjectAssign, easingFunctions, equalArray, extend, fillIfDefined, forEach, getAbsoluteLeft, getAbsoluteRight, getAbsoluteTop, getScrollBarWidth, getTarget, getType, hasParent, hexToHSV, hexToRGB, insertSort, isDate, isNumber, isObject, isString, isValidHex, isValidRGB, isValidRGBA, mergeOptions, option, overrideOpacity, parseColor, preventDefault, pureDeepObjectAssign, recursiveDOMDelete, removeClassName, removeCssText, removeEventListener, selectiveBridgeObject, selectiveDeepExtend, selectiveExtend, selectiveNotDeepExtend, throttle, toArray, topMost, updateProperty };\n//# sourceMappingURL=vis-util.js.map\n","/* eslint-disable no-prototype-builtins */\n/* eslint-disable no-unused-vars */\n/* eslint-disable no-var */\n\n/**\n * Parse a text source containing data in DOT language into a JSON object.\n * The object contains two lists: one with nodes and one with edges.\n *\n * DOT language reference: http://www.graphviz.org/doc/info/lang.html\n *\n * DOT language attributes: http://graphviz.org/content/attrs\n *\n * @param {string} data Text containing a graph in DOT-notation\n * @returns {object} graph An object containing two parameters:\n * {Object[]} nodes\n * {Object[]} edges\n *\n * -------------------------------------------\n * TODO\n * ====\n *\n * For label handling, this is an incomplete implementation. From docs (quote #3015):\n *\n * > the escape sequences \"\\n\", \"\\l\" and \"\\r\" divide the label into lines, centered,\n * > left-justified, and right-justified, respectively.\n *\n * Source: http://www.graphviz.org/content/attrs#kescString\n *\n * > As another aid for readability, dot allows double-quoted strings to span multiple physical\n * > lines using the standard C convention of a backslash immediately preceding a newline\n * > character\n * > In addition, double-quoted strings can be concatenated using a '+' operator.\n * > As HTML strings can contain newline characters, which are used solely for formatting,\n * > the language does not allow escaped newlines or concatenation operators to be used\n * > within them.\n *\n * - Currently, only '\\\\n' is handled\n * - Note that text explicitly says 'labels'; the dot parser currently handles escape\n * sequences in **all** strings.\n */\nexport function parseDOT(data) {\n dot = data;\n return parseGraph();\n}\n\n// mapping of attributes from DOT (the keys) to vis.js (the values)\nvar NODE_ATTR_MAPPING = {\n fontsize: \"font.size\",\n fontcolor: \"font.color\",\n labelfontcolor: \"font.color\",\n fontname: \"font.face\",\n color: [\"color.border\", \"color.background\"],\n fillcolor: \"color.background\",\n tooltip: \"title\",\n labeltooltip: \"title\",\n};\nvar EDGE_ATTR_MAPPING = Object.create(NODE_ATTR_MAPPING);\nEDGE_ATTR_MAPPING.color = \"color.color\";\nEDGE_ATTR_MAPPING.style = \"dashes\";\n\n// token types enumeration\nvar TOKENTYPE = {\n NULL: 0,\n DELIMITER: 1,\n IDENTIFIER: 2,\n UNKNOWN: 3,\n};\n\n// map with all delimiters\nvar DELIMITERS = {\n \"{\": true,\n \"}\": true,\n \"[\": true,\n \"]\": true,\n \";\": true,\n \"=\": true,\n \",\": true,\n\n \"->\": true,\n \"--\": true,\n};\n\nvar dot = \"\"; // current dot file\nvar index = 0; // current index in dot file\nvar c = \"\"; // current token character in expr\nvar token = \"\"; // current token\nvar tokenType = TOKENTYPE.NULL; // type of the token\n\n/**\n * Get the first character from the dot file.\n * The character is stored into the char c. If the end of the dot file is\n * reached, the function puts an empty string in c.\n */\nfunction first() {\n index = 0;\n c = dot.charAt(0);\n}\n\n/**\n * Get the next character from the dot file.\n * The character is stored into the char c. If the end of the dot file is\n * reached, the function puts an empty string in c.\n */\nfunction next() {\n index++;\n c = dot.charAt(index);\n}\n\n/**\n * Preview the next character from the dot file.\n *\n * @returns {string} cNext\n */\nfunction nextPreview() {\n return dot.charAt(index + 1);\n}\n\n/**\n * Test whether given character is alphabetic or numeric ( a-zA-Z_0-9.:# )\n *\n * @param {string} c\n * @returns {boolean} isAlphaNumeric\n */\nfunction isAlphaNumeric(c) {\n var charCode = c.charCodeAt(0);\n\n if (charCode < 47) {\n // #.\n return charCode === 35 || charCode === 46;\n }\n if (charCode < 59) {\n // 0-9 and :\n return charCode > 47;\n }\n if (charCode < 91) {\n // A-Z\n return charCode > 64;\n }\n if (charCode < 96) {\n // _\n return charCode === 95;\n }\n if (charCode < 123) {\n // a-z\n return charCode > 96;\n }\n\n return false;\n}\n\n/**\n * Merge all options of object b into object b\n *\n * @param {object} a\n * @param {object} b\n * @returns {object} a\n */\nfunction merge(a, b) {\n if (!a) {\n a = {};\n }\n\n if (b) {\n for (var name in b) {\n if (b.hasOwnProperty(name)) {\n a[name] = b[name];\n }\n }\n }\n return a;\n}\n\n/**\n * Set a value in an object, where the provided parameter name can be a\n * path with nested parameters. For example:\n *\n * var obj = {a: 2};\n * setValue(obj, 'b.c', 3); // obj = {a: 2, b: {c: 3}}\n *\n * @param {object} obj\n * @param {string} path A parameter name or dot-separated parameter path,\n * like \"color.highlight.border\".\n * @param {*} value\n */\nfunction setValue(obj, path, value) {\n var keys = path.split(\".\");\n var o = obj;\n while (keys.length) {\n var key = keys.shift();\n if (keys.length) {\n // this isn't the end point\n if (!o[key]) {\n o[key] = {};\n }\n o = o[key];\n } else {\n // this is the end point\n o[key] = value;\n }\n }\n}\n\n/**\n * Add a node to a graph object. If there is already a node with\n * the same id, their attributes will be merged.\n *\n * @param {object} graph\n * @param {object} node\n */\nfunction addNode(graph, node) {\n var i, len;\n var current = null;\n\n // find root graph (in case of subgraph)\n var graphs = [graph]; // list with all graphs from current graph to root graph\n var root = graph;\n while (root.parent) {\n graphs.push(root.parent);\n root = root.parent;\n }\n\n // find existing node (at root level) by its id\n if (root.nodes) {\n for (i = 0, len = root.nodes.length; i < len; i++) {\n if (node.id === root.nodes[i].id) {\n current = root.nodes[i];\n break;\n }\n }\n }\n\n if (!current) {\n // this is a new node\n current = {\n id: node.id,\n };\n if (graph.node) {\n // clone default attributes\n current.attr = merge(current.attr, graph.node);\n }\n }\n\n // add node to this (sub)graph and all its parent graphs\n for (i = graphs.length - 1; i >= 0; i--) {\n var g = graphs[i];\n\n if (!g.nodes) {\n g.nodes = [];\n }\n if (g.nodes.indexOf(current) === -1) {\n g.nodes.push(current);\n }\n }\n\n // merge attributes\n if (node.attr) {\n current.attr = merge(current.attr, node.attr);\n }\n}\n\n/**\n * Add an edge to a graph object\n *\n * @param {object} graph\n * @param {object} edge\n */\nfunction addEdge(graph, edge) {\n if (!graph.edges) {\n graph.edges = [];\n }\n graph.edges.push(edge);\n if (graph.edge) {\n var attr = merge({}, graph.edge); // clone default attributes\n edge.attr = merge(attr, edge.attr); // merge attributes\n }\n}\n\n/**\n * Create an edge to a graph object\n *\n * @param {object} graph\n * @param {string | number | object} from\n * @param {string | number | object} to\n * @param {string} type\n * @param {object | null} attr\n * @returns {object} edge\n */\nfunction createEdge(graph, from, to, type, attr) {\n var edge = {\n from: from,\n to: to,\n type: type,\n };\n\n if (graph.edge) {\n edge.attr = merge({}, graph.edge); // clone default attributes\n }\n edge.attr = merge(edge.attr || {}, attr); // merge attributes\n\n // Move arrows attribute from attr to edge temporally created in\n // parseAttributeList().\n if (attr != null) {\n if (attr.hasOwnProperty(\"arrows\") && attr[\"arrows\"] != null) {\n edge[\"arrows\"] = { to: { enabled: true, type: attr.arrows.type } };\n attr[\"arrows\"] = null;\n }\n }\n return edge;\n}\n\n/**\n * Get next token in the current dot file.\n * The token and token type are available as token and tokenType\n */\nfunction getToken() {\n tokenType = TOKENTYPE.NULL;\n token = \"\";\n\n // skip over whitespaces\n while (c === \" \" || c === \"\\t\" || c === \"\\n\" || c === \"\\r\") {\n // space, tab, enter\n next();\n }\n\n do {\n var isComment = false;\n\n // skip comment\n if (c === \"#\") {\n // find the previous non-space character\n var i = index - 1;\n while (dot.charAt(i) === \" \" || dot.charAt(i) === \"\\t\") {\n i--;\n }\n if (dot.charAt(i) === \"\\n\" || dot.charAt(i) === \"\") {\n // the # is at the start of a line, this is indeed a line comment\n while (c != \"\" && c != \"\\n\") {\n next();\n }\n isComment = true;\n }\n }\n if (c === \"/\" && nextPreview() === \"/\") {\n // skip line comment\n while (c != \"\" && c != \"\\n\") {\n next();\n }\n isComment = true;\n }\n if (c === \"/\" && nextPreview() === \"*\") {\n // skip block comment\n while (c != \"\") {\n if (c === \"*\" && nextPreview() === \"/\") {\n // end of block comment found. skip these last two characters\n next();\n next();\n break;\n } else {\n next();\n }\n }\n isComment = true;\n }\n\n // skip over whitespaces\n while (c === \" \" || c === \"\\t\" || c === \"\\n\" || c === \"\\r\") {\n // space, tab, enter\n next();\n }\n } while (isComment);\n\n // check for end of dot file\n if (c === \"\") {\n // token is still empty\n tokenType = TOKENTYPE.DELIMITER;\n return;\n }\n\n // check for delimiters consisting of 2 characters\n var c2 = c + nextPreview();\n if (DELIMITERS[c2]) {\n tokenType = TOKENTYPE.DELIMITER;\n token = c2;\n next();\n next();\n return;\n }\n\n // check for delimiters consisting of 1 character\n if (DELIMITERS[c]) {\n tokenType = TOKENTYPE.DELIMITER;\n token = c;\n next();\n return;\n }\n\n // check for an identifier (number or string)\n // TODO: more precise parsing of numbers/strings (and the port separator ':')\n if (isAlphaNumeric(c) || c === \"-\") {\n token += c;\n next();\n\n while (isAlphaNumeric(c)) {\n token += c;\n next();\n }\n if (token === \"false\") {\n token = false; // convert to boolean\n } else if (token === \"true\") {\n token = true; // convert to boolean\n } else if (!isNaN(Number(token))) {\n token = Number(token); // convert to number\n }\n tokenType = TOKENTYPE.IDENTIFIER;\n return;\n }\n\n // check for a string enclosed by double quotes\n if (c === '\"') {\n next();\n while (c != \"\" && (c != '\"' || (c === '\"' && nextPreview() === '\"'))) {\n if (c === '\"') {\n // skip the escape character\n token += c;\n next();\n } else if (c === \"\\\\\" && nextPreview() === \"n\") {\n // Honor a newline escape sequence\n token += \"\\n\";\n next();\n } else {\n token += c;\n }\n next();\n }\n if (c != '\"') {\n throw newSyntaxError('End of string \" expected');\n }\n next();\n tokenType = TOKENTYPE.IDENTIFIER;\n return;\n }\n\n // something unknown is found, wrong characters, a syntax error\n tokenType = TOKENTYPE.UNKNOWN;\n while (c != \"\") {\n token += c;\n next();\n }\n throw new SyntaxError('Syntax error in part \"' + chop(token, 30) + '\"');\n}\n\n/**\n * Parse a graph.\n *\n * @returns {object} graph\n */\nfunction parseGraph() {\n var graph = {};\n\n first();\n getToken();\n\n // optional strict keyword\n if (token === \"strict\") {\n graph.strict = true;\n getToken();\n }\n\n // graph or digraph keyword\n if (token === \"graph\" || token === \"digraph\") {\n graph.type = token;\n getToken();\n }\n\n // optional graph id\n if (tokenType === TOKENTYPE.IDENTIFIER) {\n graph.id = token;\n getToken();\n }\n\n // open angle bracket\n if (token != \"{\") {\n throw newSyntaxError(\"Angle bracket { expected\");\n }\n getToken();\n\n // statements\n parseStatements(graph);\n\n // close angle bracket\n if (token != \"}\") {\n throw newSyntaxError(\"Angle bracket } expected\");\n }\n getToken();\n\n // end of file\n if (token !== \"\") {\n throw newSyntaxError(\"End of file expected\");\n }\n getToken();\n\n // remove temporary default options\n delete graph.node;\n delete graph.edge;\n delete graph.graph;\n\n return graph;\n}\n\n/**\n * Parse a list with statements.\n *\n * @param {object} graph\n */\nfunction parseStatements(graph) {\n while (token !== \"\" && token != \"}\") {\n parseStatement(graph);\n if (token === \";\") {\n getToken();\n }\n }\n}\n\n/**\n * Parse a single statement. Can be a an attribute statement, node\n * statement, a series of node statements and edge statements, or a\n * parameter.\n *\n * @param {object} graph\n */\nfunction parseStatement(graph) {\n // parse subgraph\n var subgraph = parseSubgraph(graph);\n if (subgraph) {\n // edge statements\n parseEdge(graph, subgraph);\n\n return;\n }\n\n // parse an attribute statement\n var attr = parseAttributeStatement(graph);\n if (attr) {\n return;\n }\n\n // parse node\n if (tokenType != TOKENTYPE.IDENTIFIER) {\n throw newSyntaxError(\"Identifier expected\");\n }\n var id = token; // id can be a string or a number\n getToken();\n\n if (token === \"=\") {\n // id statement\n getToken();\n if (tokenType != TOKENTYPE.IDENTIFIER) {\n throw newSyntaxError(\"Identifier expected\");\n }\n graph[id] = token;\n getToken();\n // TODO: implement comma separated list with \"a_list: ID=ID [','] [a_list] \"\n } else {\n parseNodeStatement(graph, id);\n }\n}\n\n/**\n * Parse a subgraph\n *\n * @param {object} graph parent graph object\n * @returns {object | null} subgraph\n */\nfunction parseSubgraph(graph) {\n var subgraph = null;\n\n // optional subgraph keyword\n if (token === \"subgraph\") {\n subgraph = {};\n subgraph.type = \"subgraph\";\n getToken();\n\n // optional graph id\n if (tokenType === TOKENTYPE.IDENTIFIER) {\n subgraph.id = token;\n getToken();\n }\n }\n\n // open angle bracket\n if (token === \"{\") {\n getToken();\n\n if (!subgraph) {\n subgraph = {};\n }\n subgraph.parent = graph;\n subgraph.node = graph.node;\n subgraph.edge = graph.edge;\n subgraph.graph = graph.graph;\n\n // statements\n parseStatements(subgraph);\n\n // close angle bracket\n if (token != \"}\") {\n throw newSyntaxError(\"Angle bracket } expected\");\n }\n getToken();\n\n // remove temporary default options\n delete subgraph.node;\n delete subgraph.edge;\n delete subgraph.graph;\n delete subgraph.parent;\n\n // register at the parent graph\n if (!graph.subgraphs) {\n graph.subgraphs = [];\n }\n graph.subgraphs.push(subgraph);\n }\n\n return subgraph;\n}\n\n/**\n * parse an attribute statement like \"node [shape=circle fontSize=16]\".\n * Available keywords are 'node', 'edge', 'graph'.\n * The previous list with default attributes will be replaced\n *\n * @param {object} graph\n * @returns {string | null} keyword Returns the name of the parsed attribute\n * (node, edge, graph), or null if nothing\n * is parsed.\n */\nfunction parseAttributeStatement(graph) {\n // attribute statements\n if (token === \"node\") {\n getToken();\n\n // node attributes\n graph.node = parseAttributeList();\n return \"node\";\n } else if (token === \"edge\") {\n getToken();\n\n // edge attributes\n graph.edge = parseAttributeList();\n return \"edge\";\n } else if (token === \"graph\") {\n getToken();\n\n // graph attributes\n graph.graph = parseAttributeList();\n return \"graph\";\n }\n\n return null;\n}\n\n/**\n * parse a node statement\n *\n * @param {object} graph\n * @param {string | number} id\n */\nfunction parseNodeStatement(graph, id) {\n // node statement\n var node = {\n id: id,\n };\n var attr = parseAttributeList();\n if (attr) {\n node.attr = attr;\n }\n addNode(graph, node);\n\n // edge statements\n parseEdge(graph, id);\n}\n\n/**\n * Parse an edge or a series of edges\n *\n * @param {object} graph\n * @param {string | number} from Id of the from node\n */\nfunction parseEdge(graph, from) {\n while (token === \"->\" || token === \"--\") {\n var to;\n var type = token;\n getToken();\n\n var subgraph = parseSubgraph(graph);\n if (subgraph) {\n to = subgraph;\n } else {\n if (tokenType != TOKENTYPE.IDENTIFIER) {\n throw newSyntaxError(\"Identifier or subgraph expected\");\n }\n to = token;\n addNode(graph, {\n id: to,\n });\n getToken();\n }\n\n // parse edge attributes\n var attr = parseAttributeList();\n\n // create edge\n var edge = createEdge(graph, from, to, type, attr);\n addEdge(graph, edge);\n\n from = to;\n }\n}\n\n/**\n * As explained in [1], graphviz has limitations for combination of\n * arrow[head|tail] and dir. If attribute list includes 'dir',\n * following cases just be supported.\n * 1. both or none + arrowhead, arrowtail\n * 2. forward + arrowhead (arrowtail is not affedted)\n * 3. back + arrowtail (arrowhead is not affected)\n * [1] https://www.graphviz.org/doc/info/attrs.html#h:undir_note\n *\n * This function is called from parseAttributeList() to parse 'dir'\n * attribute with given 'attr_names' and 'attr_list'.\n *\n * @param {object} attr_names Array of attribute names\n * @param {object} attr_list Array of objects of attribute set\n * @returns {object} attr_list Updated attr_list\n */\nfunction parseDirAttribute(attr_names, attr_list) {\n var i;\n if (attr_names.includes(\"dir\")) {\n var idx = {}; // get index of 'arrows' and 'dir'\n idx.arrows = {};\n for (i = 0; i < attr_list.length; i++) {\n if (attr_list[i].name === \"arrows\") {\n if (attr_list[i].value.to != null) {\n idx.arrows.to = i;\n } else if (attr_list[i].value.from != null) {\n idx.arrows.from = i;\n } else {\n throw newSyntaxError(\"Invalid value of arrows\");\n }\n } else if (attr_list[i].name === \"dir\") {\n idx.dir = i;\n }\n }\n\n // first, add default arrow shape if it is not assigned to avoid error\n var dir_type = attr_list[idx.dir].value;\n if (!attr_names.includes(\"arrows\")) {\n if (dir_type === \"both\") {\n attr_list.push({\n attr: attr_list[idx.dir].attr,\n name: \"arrows\",\n value: { to: { enabled: true } },\n });\n idx.arrows.to = attr_list.length - 1;\n attr_list.push({\n attr: attr_list[idx.dir].attr,\n name: \"arrows\",\n value: { from: { enabled: true } },\n });\n idx.arrows.from = attr_list.length - 1;\n } else if (dir_type === \"forward\") {\n attr_list.push({\n attr: attr_list[idx.dir].attr,\n name: \"arrows\",\n value: { to: { enabled: true } },\n });\n idx.arrows.to = attr_list.length - 1;\n } else if (dir_type === \"back\") {\n attr_list.push({\n attr: attr_list[idx.dir].attr,\n name: \"arrows\",\n value: { from: { enabled: true } },\n });\n idx.arrows.from = attr_list.length - 1;\n } else if (dir_type === \"none\") {\n attr_list.push({\n attr: attr_list[idx.dir].attr,\n name: \"arrows\",\n value: \"\",\n });\n idx.arrows.to = attr_list.length - 1;\n } else {\n throw newSyntaxError('Invalid dir type \"' + dir_type + '\"');\n }\n }\n\n var from_type;\n var to_type;\n // update 'arrows' attribute from 'dir'.\n if (dir_type === \"both\") {\n // both of shapes of 'from' and 'to' are given\n if (idx.arrows.to && idx.arrows.from) {\n to_type = attr_list[idx.arrows.to].value.to.type;\n from_type = attr_list[idx.arrows.from].value.from.type;\n attr_list[idx.arrows.to] = {\n attr: attr_list[idx.arrows.to].attr,\n name: attr_list[idx.arrows.to].name,\n value: {\n to: { enabled: true, type: to_type },\n from: { enabled: true, type: from_type },\n },\n };\n attr_list.splice(idx.arrows.from, 1);\n\n // shape of 'to' is assigned and use default to 'from'\n } else if (idx.arrows.to) {\n to_type = attr_list[idx.arrows.to].value.to.type;\n from_type = \"arrow\";\n attr_list[idx.arrows.to] = {\n attr: attr_list[idx.arrows.to].attr,\n name: attr_list[idx.arrows.to].name,\n value: {\n to: { enabled: true, type: to_type },\n from: { enabled: true, type: from_type },\n },\n };\n\n // only shape of 'from' is assigned and use default for 'to'\n } else if (idx.arrows.from) {\n to_type = \"arrow\";\n from_type = attr_list[idx.arrows.from].value.from.type;\n attr_list[idx.arrows.from] = {\n attr: attr_list[idx.arrows.from].attr,\n name: attr_list[idx.arrows.from].name,\n value: {\n to: { enabled: true, type: to_type },\n from: { enabled: true, type: from_type },\n },\n };\n }\n } else if (dir_type === \"back\") {\n // given both of shapes, but use only 'from'\n if (idx.arrows.to && idx.arrows.from) {\n to_type = \"\";\n from_type = attr_list[idx.arrows.from].value.from.type;\n attr_list[idx.arrows.from] = {\n attr: attr_list[idx.arrows.from].attr,\n name: attr_list[idx.arrows.from].name,\n value: {\n to: { enabled: true, type: to_type },\n from: { enabled: true, type: from_type },\n },\n };\n\n // given shape of 'to', but does not use it\n } else if (idx.arrows.to) {\n to_type = \"\";\n from_type = \"arrow\";\n idx.arrows.from = idx.arrows.to;\n attr_list[idx.arrows.from] = {\n attr: attr_list[idx.arrows.from].attr,\n name: attr_list[idx.arrows.from].name,\n value: {\n to: { enabled: true, type: to_type },\n from: { enabled: true, type: from_type },\n },\n };\n\n // assign given 'from' shape\n } else if (idx.arrows.from) {\n to_type = \"\";\n from_type = attr_list[idx.arrows.from].value.from.type;\n attr_list[idx.arrows.to] = {\n attr: attr_list[idx.arrows.from].attr,\n name: attr_list[idx.arrows.from].name,\n value: {\n to: { enabled: true, type: to_type },\n from: { enabled: true, type: from_type },\n },\n };\n }\n\n attr_list[idx.arrows.from] = {\n attr: attr_list[idx.arrows.from].attr,\n name: attr_list[idx.arrows.from].name,\n value: {\n from: {\n enabled: true,\n type: attr_list[idx.arrows.from].value.from.type,\n },\n },\n };\n } else if (dir_type === \"none\") {\n var idx_arrow;\n if (idx.arrows.to) {\n idx_arrow = idx.arrows.to;\n } else {\n idx_arrow = idx.arrows.from;\n }\n\n attr_list[idx_arrow] = {\n attr: attr_list[idx_arrow].attr,\n name: attr_list[idx_arrow].name,\n value: \"\",\n };\n } else if (dir_type === \"forward\") {\n // given both of shapes, but use only 'to'\n if (idx.arrows.to && idx.arrows.from) {\n to_type = attr_list[idx.arrows.to].value.to.type;\n from_type = \"\";\n attr_list[idx.arrows.to] = {\n attr: attr_list[idx.arrows.to].attr,\n name: attr_list[idx.arrows.to].name,\n value: {\n to: { enabled: true, type: to_type },\n from: { enabled: true, type: from_type },\n },\n };\n\n // assign given 'to' shape\n } else if (idx.arrows.to) {\n to_type = attr_list[idx.arrows.to].value.to.type;\n from_type = \"\";\n attr_list[idx.arrows.to] = {\n attr: attr_list[idx.arrows.to].attr,\n name: attr_list[idx.arrows.to].name,\n value: {\n to: { enabled: true, type: to_type },\n from: { enabled: true, type: from_type },\n },\n };\n\n // given shape of 'from', but does not use it\n } else if (idx.arrows.from) {\n to_type = \"arrow\";\n from_type = \"\";\n idx.arrows.to = idx.arrows.from;\n attr_list[idx.arrows.to] = {\n attr: attr_list[idx.arrows.to].attr,\n name: attr_list[idx.arrows.to].name,\n value: {\n to: { enabled: true, type: to_type },\n from: { enabled: true, type: from_type },\n },\n };\n }\n\n attr_list[idx.arrows.to] = {\n attr: attr_list[idx.arrows.to].attr,\n name: attr_list[idx.arrows.to].name,\n value: {\n to: {\n enabled: true,\n type: attr_list[idx.arrows.to].value.to.type,\n },\n },\n };\n } else {\n throw newSyntaxError('Invalid dir type \"' + dir_type + '\"');\n }\n\n // remove 'dir' attribute no need anymore\n attr_list.splice(idx.dir, 1);\n }\n return attr_list;\n}\n\n/**\n * Parse a set with attributes,\n * for example [label=\"1.000\", shape=solid]\n *\n * @returns {object | null} attr\n */\nfunction parseAttributeList() {\n var i;\n var attr = null;\n\n // edge styles of dot and vis\n var edgeStyles = {\n dashed: true,\n solid: false,\n dotted: [1, 5],\n };\n\n /**\n * Define arrow types.\n * vis currently supports types defined in 'arrowTypes'.\n * Details of arrow shapes are described in\n * http://www.graphviz.org/content/arrow-shapes\n */\n var arrowTypes = {\n dot: \"circle\",\n box: \"box\",\n crow: \"crow\",\n curve: \"curve\",\n icurve: \"inv_curve\",\n normal: \"triangle\",\n inv: \"inv_triangle\",\n diamond: \"diamond\",\n tee: \"bar\",\n vee: \"vee\",\n };\n\n /**\n * 'attr_list' contains attributes for checking if some of them are affected\n * later. For instance, both of 'arrowhead' and 'dir' (edge style defined\n * in DOT) make changes to 'arrows' attribute in vis.\n */\n var attr_list = new Array();\n var attr_names = new Array(); // used for checking the case.\n\n // parse attributes\n while (token === \"[\") {\n getToken();\n attr = {};\n while (token !== \"\" && token != \"]\") {\n if (tokenType != TOKENTYPE.IDENTIFIER) {\n throw newSyntaxError(\"Attribute name expected\");\n }\n var name = token;\n\n getToken();\n if (token != \"=\") {\n throw newSyntaxError(\"Equal sign = expected\");\n }\n getToken();\n\n if (tokenType != TOKENTYPE.IDENTIFIER) {\n throw newSyntaxError(\"Attribute value expected\");\n }\n var value = token;\n\n // convert from dot style to vis\n if (name === \"style\") {\n value = edgeStyles[value];\n }\n\n var arrowType;\n if (name === \"arrowhead\") {\n arrowType = arrowTypes[value];\n name = \"arrows\";\n value = { to: { enabled: true, type: arrowType } };\n }\n\n if (name === \"arrowtail\") {\n arrowType = arrowTypes[value];\n name = \"arrows\";\n value = { from: { enabled: true, type: arrowType } };\n }\n\n attr_list.push({ attr: attr, name: name, value: value });\n attr_names.push(name);\n\n getToken();\n if (token == \",\") {\n getToken();\n }\n }\n\n if (token != \"]\") {\n throw newSyntaxError(\"Bracket ] expected\");\n }\n getToken();\n }\n\n /**\n * As explained in [1], graphviz has limitations for combination of\n * arrow[head|tail] and dir. If attribute list includes 'dir',\n * following cases just be supported.\n * 1. both or none + arrowhead, arrowtail\n * 2. forward + arrowhead (arrowtail is not affedted)\n * 3. back + arrowtail (arrowhead is not affected)\n * [1] https://www.graphviz.org/doc/info/attrs.html#h:undir_note\n */\n if (attr_names.includes(\"dir\")) {\n var idx = {}; // get index of 'arrows' and 'dir'\n idx.arrows = {};\n for (i = 0; i < attr_list.length; i++) {\n if (attr_list[i].name === \"arrows\") {\n if (attr_list[i].value.to != null) {\n idx.arrows.to = i;\n } else if (attr_list[i].value.from != null) {\n idx.arrows.from = i;\n } else {\n throw newSyntaxError(\"Invalid value of arrows\");\n }\n } else if (attr_list[i].name === \"dir\") {\n idx.dir = i;\n }\n }\n\n // first, add default arrow shape if it is not assigned to avoid error\n var dir_type = attr_list[idx.dir].value;\n if (!attr_names.includes(\"arrows\")) {\n if (dir_type === \"both\") {\n attr_list.push({\n attr: attr_list[idx.dir].attr,\n name: \"arrows\",\n value: { to: { enabled: true } },\n });\n idx.arrows.to = attr_list.length - 1;\n attr_list.push({\n attr: attr_list[idx.dir].attr,\n name: \"arrows\",\n value: { from: { enabled: true } },\n });\n idx.arrows.from = attr_list.length - 1;\n } else if (dir_type === \"forward\") {\n attr_list.push({\n attr: attr_list[idx.dir].attr,\n name: \"arrows\",\n value: { to: { enabled: true } },\n });\n idx.arrows.to = attr_list.length - 1;\n } else if (dir_type === \"back\") {\n attr_list.push({\n attr: attr_list[idx.dir].attr,\n name: \"arrows\",\n value: { from: { enabled: true } },\n });\n idx.arrows.from = attr_list.length - 1;\n } else if (dir_type === \"none\") {\n attr_list.push({\n attr: attr_list[idx.dir].attr,\n name: \"arrows\",\n value: \"\",\n });\n idx.arrows.to = attr_list.length - 1;\n } else {\n throw newSyntaxError('Invalid dir type \"' + dir_type + '\"');\n }\n }\n\n var from_type;\n var to_type;\n // update 'arrows' attribute from 'dir'.\n if (dir_type === \"both\") {\n // both of shapes of 'from' and 'to' are given\n if (idx.arrows.to && idx.arrows.from) {\n to_type = attr_list[idx.arrows.to].value.to.type;\n from_type = attr_list[idx.arrows.from].value.from.type;\n attr_list[idx.arrows.to] = {\n attr: attr_list[idx.arrows.to].attr,\n name: attr_list[idx.arrows.to].name,\n value: {\n to: { enabled: true, type: to_type },\n from: { enabled: true, type: from_type },\n },\n };\n attr_list.splice(idx.arrows.from, 1);\n\n // shape of 'to' is assigned and use default to 'from'\n } else if (idx.arrows.to) {\n to_type = attr_list[idx.arrows.to].value.to.type;\n from_type = \"arrow\";\n attr_list[idx.arrows.to] = {\n attr: attr_list[idx.arrows.to].attr,\n name: attr_list[idx.arrows.to].name,\n value: {\n to: { enabled: true, type: to_type },\n from: { enabled: true, type: from_type },\n },\n };\n\n // only shape of 'from' is assigned and use default for 'to'\n } else if (idx.arrows.from) {\n to_type = \"arrow\";\n from_type = attr_list[idx.arrows.from].value.from.type;\n attr_list[idx.arrows.from] = {\n attr: attr_list[idx.arrows.from].attr,\n name: attr_list[idx.arrows.from].name,\n value: {\n to: { enabled: true, type: to_type },\n from: { enabled: true, type: from_type },\n },\n };\n }\n } else if (dir_type === \"back\") {\n // given both of shapes, but use only 'from'\n if (idx.arrows.to && idx.arrows.from) {\n to_type = \"\";\n from_type = attr_list[idx.arrows.from].value.from.type;\n attr_list[idx.arrows.from] = {\n attr: attr_list[idx.arrows.from].attr,\n name: attr_list[idx.arrows.from].name,\n value: {\n to: { enabled: true, type: to_type },\n from: { enabled: true, type: from_type },\n },\n };\n\n // given shape of 'to', but does not use it\n } else if (idx.arrows.to) {\n to_type = \"\";\n from_type = \"arrow\";\n idx.arrows.from = idx.arrows.to;\n attr_list[idx.arrows.from] = {\n attr: attr_list[idx.arrows.from].attr,\n name: attr_list[idx.arrows.from].name,\n value: {\n to: { enabled: true, type: to_type },\n from: { enabled: true, type: from_type },\n },\n };\n\n // assign given 'from' shape\n } else if (idx.arrows.from) {\n to_type = \"\";\n from_type = attr_list[idx.arrows.from].value.from.type;\n attr_list[idx.arrows.to] = {\n attr: attr_list[idx.arrows.from].attr,\n name: attr_list[idx.arrows.from].name,\n value: {\n to: { enabled: true, type: to_type },\n from: { enabled: true, type: from_type },\n },\n };\n }\n\n attr_list[idx.arrows.from] = {\n attr: attr_list[idx.arrows.from].attr,\n name: attr_list[idx.arrows.from].name,\n value: {\n from: {\n enabled: true,\n type: attr_list[idx.arrows.from].value.from.type,\n },\n },\n };\n } else if (dir_type === \"none\") {\n var idx_arrow;\n if (idx.arrows.to) {\n idx_arrow = idx.arrows.to;\n } else {\n idx_arrow = idx.arrows.from;\n }\n\n attr_list[idx_arrow] = {\n attr: attr_list[idx_arrow].attr,\n name: attr_list[idx_arrow].name,\n value: \"\",\n };\n } else if (dir_type === \"forward\") {\n // given both of shapes, but use only 'to'\n if (idx.arrows.to && idx.arrows.from) {\n to_type = attr_list[idx.arrows.to].value.to.type;\n from_type = \"\";\n attr_list[idx.arrows.to] = {\n attr: attr_list[idx.arrows.to].attr,\n name: attr_list[idx.arrows.to].name,\n value: {\n to: { enabled: true, type: to_type },\n from: { enabled: true, type: from_type },\n },\n };\n\n // assign given 'to' shape\n } else if (idx.arrows.to) {\n to_type = attr_list[idx.arrows.to].value.to.type;\n from_type = \"\";\n attr_list[idx.arrows.to] = {\n attr: attr_list[idx.arrows.to].attr,\n name: attr_list[idx.arrows.to].name,\n value: {\n to: { enabled: true, type: to_type },\n from: { enabled: true, type: from_type },\n },\n };\n\n // given shape of 'from', but does not use it\n } else if (idx.arrows.from) {\n to_type = \"arrow\";\n from_type = \"\";\n idx.arrows.to = idx.arrows.from;\n attr_list[idx.arrows.to] = {\n attr: attr_list[idx.arrows.to].attr,\n name: attr_list[idx.arrows.to].name,\n value: {\n to: { enabled: true, type: to_type },\n from: { enabled: true, type: from_type },\n },\n };\n }\n\n attr_list[idx.arrows.to] = {\n attr: attr_list[idx.arrows.to].attr,\n name: attr_list[idx.arrows.to].name,\n value: {\n to: { enabled: true, type: attr_list[idx.arrows.to].value.to.type },\n },\n };\n } else {\n throw newSyntaxError('Invalid dir type \"' + dir_type + '\"');\n }\n\n // remove 'dir' attribute no need anymore\n attr_list.splice(idx.dir, 1);\n }\n\n // parse 'penwidth'\n var nof_attr_list;\n if (attr_names.includes(\"penwidth\")) {\n var tmp_attr_list = [];\n\n nof_attr_list = attr_list.length;\n for (i = 0; i < nof_attr_list; i++) {\n // exclude 'width' from attr_list if 'penwidth' exists\n if (attr_list[i].name !== \"width\") {\n if (attr_list[i].name === \"penwidth\") {\n attr_list[i].name = \"width\";\n }\n tmp_attr_list.push(attr_list[i]);\n }\n }\n attr_list = tmp_attr_list;\n }\n\n nof_attr_list = attr_list.length;\n for (i = 0; i < nof_attr_list; i++) {\n setValue(attr_list[i].attr, attr_list[i].name, attr_list[i].value);\n }\n\n return attr;\n}\n\n/**\n * Create a syntax error with extra information on current token and index.\n *\n * @param {string} message\n * @returns {SyntaxError} err\n */\nfunction newSyntaxError(message) {\n return new SyntaxError(\n message + ', got \"' + chop(token, 30) + '\" (char ' + index + \")\"\n );\n}\n\n/**\n * Chop off text after a maximum length\n *\n * @param {string} text\n * @param {number} maxLength\n * @returns {string}\n */\nfunction chop(text, maxLength) {\n return text.length <= maxLength ? text : text.substr(0, 27) + \"...\";\n}\n\n/**\n * Execute a function fn for each pair of elements in two arrays\n *\n * @param {Array | *} array1\n * @param {Array | *} array2\n * @param {Function} fn\n */\nfunction forEach2(array1, array2, fn) {\n if (Array.isArray(array1)) {\n array1.forEach(function (elem1) {\n if (Array.isArray(array2)) {\n array2.forEach(function (elem2) {\n fn(elem1, elem2);\n });\n } else {\n fn(elem1, array2);\n }\n });\n } else {\n if (Array.isArray(array2)) {\n array2.forEach(function (elem2) {\n fn(array1, elem2);\n });\n } else {\n fn(array1, array2);\n }\n }\n}\n\n/**\n * Set a nested property on an object\n * When nested objects are missing, they will be created.\n * For example setProp({}, 'font.color', 'red') will return {font: {color: 'red'}}\n *\n * @param {object} object\n * @param {string} path A dot separated string like 'font.color'\n * @param {*} value Value for the property\n * @returns {object} Returns the original object, allows for chaining.\n */\nfunction setProp(object, path, value) {\n var names = path.split(\".\");\n var prop = names.pop();\n\n // traverse over the nested objects\n var obj = object;\n for (var i = 0; i < names.length; i++) {\n var name = names[i];\n if (!(name in obj)) {\n obj[name] = {};\n }\n obj = obj[name];\n }\n\n // set the property value\n obj[prop] = value;\n\n return object;\n}\n\n/**\n * Convert an object with DOT attributes to their vis.js equivalents.\n *\n * @param {object} attr Object with DOT attributes\n * @param {object} mapping\n * @returns {object} Returns an object with vis.js attributes\n */\nfunction convertAttr(attr, mapping) {\n var converted = {};\n\n for (var prop in attr) {\n if (attr.hasOwnProperty(prop)) {\n var visProp = mapping[prop];\n if (Array.isArray(visProp)) {\n visProp.forEach(function (visPropI) {\n setProp(converted, visPropI, attr[prop]);\n });\n } else if (typeof visProp === \"string\") {\n setProp(converted, visProp, attr[prop]);\n } else {\n setProp(converted, prop, attr[prop]);\n }\n }\n }\n\n return converted;\n}\n\n/**\n * Convert a string containing a graph in DOT language into a map containing\n * with nodes and edges in the format of graph.\n *\n * @param {string} data Text containing a graph in DOT-notation\n * @returns {object} graphData\n */\nexport function DOTToGraph(data) {\n // parse the DOT file\n var dotData = parseDOT(data);\n var graphData = {\n nodes: [],\n edges: [],\n options: {},\n };\n\n // copy the nodes\n if (dotData.nodes) {\n dotData.nodes.forEach(function (dotNode) {\n var graphNode = {\n id: dotNode.id,\n label: String(dotNode.label || dotNode.id),\n };\n merge(graphNode, convertAttr(dotNode.attr, NODE_ATTR_MAPPING));\n if (graphNode.image) {\n graphNode.shape = \"image\";\n }\n graphData.nodes.push(graphNode);\n });\n }\n\n // copy the edges\n if (dotData.edges) {\n /**\n * Convert an edge in DOT format to an edge with VisGraph format\n *\n * @param {object} dotEdge\n * @returns {object} graphEdge\n */\n var convertEdge = function (dotEdge) {\n var graphEdge = {\n from: dotEdge.from,\n to: dotEdge.to,\n };\n merge(graphEdge, convertAttr(dotEdge.attr, EDGE_ATTR_MAPPING));\n\n // Add arrows attribute to default styled arrow.\n // The reason why default style is not added in parseAttributeList() is\n // because only default is cleared before here.\n if (graphEdge.arrows == null && dotEdge.type === \"->\") {\n graphEdge.arrows = \"to\";\n }\n\n return graphEdge;\n };\n\n dotData.edges.forEach(function (dotEdge) {\n var from, to;\n if (dotEdge.from instanceof Object) {\n from = dotEdge.from.nodes;\n } else {\n from = {\n id: dotEdge.from,\n };\n }\n\n if (dotEdge.to instanceof Object) {\n to = dotEdge.to.nodes;\n } else {\n to = {\n id: dotEdge.to,\n };\n }\n\n if (dotEdge.from instanceof Object && dotEdge.from.edges) {\n dotEdge.from.edges.forEach(function (subEdge) {\n var graphEdge = convertEdge(subEdge);\n graphData.edges.push(graphEdge);\n });\n }\n\n forEach2(from, to, function (from, to) {\n var subEdge = createEdge(\n graphData,\n from.id,\n to.id,\n dotEdge.type,\n dotEdge.attr\n );\n var graphEdge = convertEdge(subEdge);\n graphData.edges.push(graphEdge);\n });\n\n if (dotEdge.to instanceof Object && dotEdge.to.edges) {\n dotEdge.to.edges.forEach(function (subEdge) {\n var graphEdge = convertEdge(subEdge);\n graphData.edges.push(graphEdge);\n });\n }\n });\n }\n\n // copy the options\n if (dotData.attr) {\n graphData.options = dotData.attr;\n }\n\n return graphData;\n}\n\n/* eslint-enable no-var */\n/* eslint-enable no-unused-vars */\n/* eslint-enable no-prototype-builtins */\n","export type Id = number | string;\n\nexport interface ColorObject {\n background: string;\n border: string;\n highlight: {\n background: string;\n border: string;\n };\n hover: {\n background: string;\n border: string;\n };\n}\n\nexport interface GephiData {\n nodes: GephiNode[];\n edges: GephiEdge[];\n}\nexport interface GephiParseOptions {\n fixed?: boolean;\n inheritColor?: boolean;\n parseColor?: boolean;\n}\n\nexport interface GephiNode {\n id: Id;\n\n attributes?: { title?: string };\n color?: string;\n label?: string;\n size?: number;\n title?: string;\n x?: number;\n y?: number;\n}\nexport interface GephiEdge {\n id: Id;\n source: Id;\n target: Id;\n\n attributes?: { title?: string };\n color?: string;\n label?: string;\n type?: string;\n}\n\nexport interface VisData {\n nodes: VisNode[];\n edges: VisEdge[];\n}\n\nexport interface VisNode {\n id: Id;\n fixed: boolean;\n\n color?: string | ColorObject;\n label?: string;\n size?: number;\n title?: string;\n x?: number;\n y?: number;\n\n attributes?: unknown;\n}\nexport interface VisEdge {\n id: Id;\n from: Id;\n to: Id;\n\n arrows?: \"to\";\n color?: string;\n label?: string;\n title?: string;\n\n attributes?: unknown;\n}\n\n/**\n * Convert Gephi to Vis.\n *\n * @param gephiJSON - The parsed JSON data in Gephi format.\n * @param optionsObj - Additional options.\n * @returns The converted data ready to be used in Vis.\n */\nexport function parseGephi(\n gephiJSON: GephiData,\n optionsObj?: GephiParseOptions\n): VisData {\n const options = {\n edges: {\n inheritColor: false,\n },\n nodes: {\n fixed: false,\n parseColor: false,\n },\n };\n\n if (optionsObj != null) {\n if (optionsObj.fixed != null) {\n options.nodes.fixed = optionsObj.fixed;\n }\n if (optionsObj.parseColor != null) {\n options.nodes.parseColor = optionsObj.parseColor;\n }\n if (optionsObj.inheritColor != null) {\n options.edges.inheritColor = optionsObj.inheritColor;\n }\n }\n\n const gEdges = gephiJSON.edges;\n const vEdges = gEdges.map((gEdge): VisEdge => {\n const vEdge: VisEdge = {\n from: gEdge.source,\n id: gEdge.id,\n to: gEdge.target,\n };\n\n if (gEdge.attributes != null) {\n vEdge.attributes = gEdge.attributes;\n }\n if (gEdge.label != null) {\n vEdge.label = gEdge.label;\n }\n if (gEdge.attributes != null && gEdge.attributes.title != null) {\n vEdge.title = gEdge.attributes.title;\n }\n if (gEdge.type === \"Directed\") {\n vEdge.arrows = \"to\";\n }\n // edge['value'] = gEdge.attributes != null ? gEdge.attributes.Weight : undefined;\n // edge['width'] = edge['value'] != null ? undefined : edgegEdge.size;\n if (gEdge.color && options.edges.inheritColor === false) {\n vEdge.color = gEdge.color;\n }\n\n return vEdge;\n });\n\n const vNodes = gephiJSON.nodes.map((gNode): VisNode => {\n const vNode: VisNode = {\n id: gNode.id,\n fixed: options.nodes.fixed && gNode.x != null && gNode.y != null,\n };\n\n if (gNode.attributes != null) {\n vNode.attributes = gNode.attributes;\n }\n if (gNode.label != null) {\n vNode.label = gNode.label;\n }\n if (gNode.size != null) {\n vNode.size = gNode.size;\n }\n if (gNode.attributes != null && gNode.attributes.title != null) {\n vNode.title = gNode.attributes.title;\n }\n if (gNode.title != null) {\n vNode.title = gNode.title;\n }\n if (gNode.x != null) {\n vNode.x = gNode.x;\n }\n if (gNode.y != null) {\n vNode.y = gNode.y;\n }\n if (gNode.color != null) {\n if (options.nodes.parseColor === true) {\n vNode.color = gNode.color;\n } else {\n vNode.color = {\n background: gNode.color,\n border: gNode.color,\n highlight: {\n background: gNode.color,\n border: gNode.color,\n },\n hover: {\n background: gNode.color,\n border: gNode.color,\n },\n };\n }\n }\n\n return vNode;\n });\n\n return { nodes: vNodes, edges: vEdges };\n}\n","export interface Locale {\n addDescription: string;\n addEdge: string;\n addNode: string;\n back: string;\n close: string;\n createEdgeError: string;\n del: string;\n deleteClusterError: string;\n edgeDescription: string;\n edit: string;\n editClusterError: string;\n editEdge: string;\n editEdgeDescription: string;\n editNode: string;\n}\nexport type Locales = Record;\n\n// English\nexport const en: Locale = {\n addDescription: \"Click in an empty space to place a new node.\",\n addEdge: \"Add Edge\",\n addNode: \"Add Node\",\n back: \"Back\",\n close: \"Close\",\n createEdgeError: \"Cannot link edges to a cluster.\",\n del: \"Delete selected\",\n deleteClusterError: \"Clusters cannot be deleted.\",\n edgeDescription:\n \"Click on a node and drag the edge to another node to connect them.\",\n edit: \"Edit\",\n editClusterError: \"Clusters cannot be edited.\",\n editEdge: \"Edit Edge\",\n editEdgeDescription:\n \"Click on the control points and drag them to a node to connect to it.\",\n editNode: \"Edit Node\",\n};\n\n// German\nexport const de: Locale = {\n addDescription:\n \"Klicke auf eine freie Stelle, um einen neuen Knoten zu plazieren.\",\n addEdge: \"Kante hinzuf\\u00fcgen\",\n addNode: \"Knoten hinzuf\\u00fcgen\",\n back: \"Zur\\u00fcck\",\n close: \"Schließen\",\n createEdgeError:\n \"Es ist nicht m\\u00f6glich, Kanten mit Clustern zu verbinden.\",\n del: \"L\\u00f6sche Auswahl\",\n deleteClusterError: \"Cluster k\\u00f6nnen nicht gel\\u00f6scht werden.\",\n edgeDescription:\n \"Klicke auf einen Knoten und ziehe die Kante zu einem anderen Knoten, um diese zu verbinden.\",\n edit: \"Editieren\",\n editClusterError: \"Cluster k\\u00f6nnen nicht editiert werden.\",\n editEdge: \"Kante editieren\",\n editEdgeDescription:\n \"Klicke auf die Verbindungspunkte und ziehe diese auf einen Knoten, um sie zu verbinden.\",\n editNode: \"Knoten editieren\",\n};\n\n// Spanish\nexport const es: Locale = {\n addDescription:\n \"Haga clic en un lugar vac\\u00edo para colocar un nuevo nodo.\",\n addEdge: \"A\\u00f1adir arista\",\n addNode: \"A\\u00f1adir nodo\",\n back: \"Atr\\u00e1s\",\n close: \"Cerrar\",\n createEdgeError: \"No se puede conectar una arista a un grupo.\",\n del: \"Eliminar selecci\\u00f3n\",\n deleteClusterError: \"No es posible eliminar grupos.\",\n edgeDescription:\n \"Haga clic en un nodo y arrastre la arista hacia otro nodo para conectarlos.\",\n edit: \"Editar\",\n editClusterError: \"No es posible editar grupos.\",\n editEdge: \"Editar arista\",\n editEdgeDescription:\n \"Haga clic en un punto de control y arrastrelo a un nodo para conectarlo.\",\n editNode: \"Editar nodo\",\n};\n\n//Italiano\nexport const it: Locale = {\n addDescription: \"Clicca per aggiungere un nuovo nodo\",\n addEdge: \"Aggiungi un vertice\",\n addNode: \"Aggiungi un nodo\",\n back: \"Indietro\",\n close: \"Chiudere\",\n createEdgeError: \"Non si possono collegare vertici ad un cluster\",\n del: \"Cancella la selezione\",\n deleteClusterError: \"I cluster non possono essere cancellati\",\n edgeDescription:\n \"Clicca su un nodo e trascinalo ad un altro nodo per connetterli.\",\n edit: \"Modifica\",\n editClusterError: \"I clusters non possono essere modificati.\",\n editEdge: \"Modifica il vertice\",\n editEdgeDescription:\n \"Clicca sui Punti di controllo e trascinali ad un nodo per connetterli.\",\n editNode: \"Modifica il nodo\",\n};\n\n// Dutch\nexport const nl: Locale = {\n addDescription: \"Klik op een leeg gebied om een nieuwe node te maken.\",\n addEdge: \"Link toevoegen\",\n addNode: \"Node toevoegen\",\n back: \"Terug\",\n close: \"Sluiten\",\n createEdgeError: \"Kan geen link maken naar een cluster.\",\n del: \"Selectie verwijderen\",\n deleteClusterError: \"Clusters kunnen niet worden verwijderd.\",\n edgeDescription:\n \"Klik op een node en sleep de link naar een andere node om ze te verbinden.\",\n edit: \"Wijzigen\",\n editClusterError: \"Clusters kunnen niet worden aangepast.\",\n editEdge: \"Link wijzigen\",\n editEdgeDescription:\n \"Klik op de verbindingspunten en sleep ze naar een node om daarmee te verbinden.\",\n editNode: \"Node wijzigen\",\n};\n\n// Portuguese Brazil\nexport const pt: Locale = {\n addDescription: \"Clique em um espaço em branco para adicionar um novo nó\",\n addEdge: \"Adicionar aresta\",\n addNode: \"Adicionar nó\",\n back: \"Voltar\",\n close: \"Fechar\",\n createEdgeError: \"Não foi possível linkar arestas a um cluster.\",\n del: \"Remover selecionado\",\n deleteClusterError: \"Clusters não puderam ser removidos.\",\n edgeDescription:\n \"Clique em um nó e arraste a aresta até outro nó para conectá-los\",\n edit: \"Editar\",\n editClusterError: \"Clusters não puderam ser editados.\",\n editEdge: \"Editar aresta\",\n editEdgeDescription:\n \"Clique nos pontos de controle e os arraste para um nó para conectá-los\",\n editNode: \"Editar nó\",\n};\n\n// Russian\nexport const ru: Locale = {\n addDescription: \"Кликните в свободное место, чтобы добавить новый узел.\",\n addEdge: \"Добавить ребро\",\n addNode: \"Добавить узел\",\n back: \"Назад\",\n close: \"Закрывать\",\n createEdgeError: \"Невозможно соединить ребра в кластер.\",\n del: \"Удалить выбранное\",\n deleteClusterError: \"Кластеры не могут быть удалены\",\n edgeDescription:\n \"Кликните на узел и протяните ребро к другому узлу, чтобы соединить их.\",\n edit: \"Редактировать\",\n editClusterError: \"Кластеры недоступны для редактирования.\",\n editEdge: \"Редактировать ребро\",\n editEdgeDescription:\n \"Кликните на контрольные точки и перетащите их в узел, чтобы подключиться к нему.\",\n editNode: \"Редактировать узел\",\n};\n\n// Chinese\nexport const cn: Locale = {\n addDescription: \"单击空白处放置新节点。\",\n addEdge: \"添加连接线\",\n addNode: \"添加节点\",\n back: \"返回\",\n close: \"關閉\",\n createEdgeError: \"无法将连接线连接到群集。\",\n del: \"删除选定\",\n deleteClusterError: \"无法删除群集。\",\n edgeDescription: \"单击某个节点并将该连接线拖动到另一个节点以连接它们。\",\n edit: \"编辑\",\n editClusterError: \"无法编辑群集。\",\n editEdge: \"编辑连接线\",\n editEdgeDescription: \"单击控制节点并将它们拖到节点上连接。\",\n editNode: \"编辑节点\",\n};\n\n// Ukrainian\nexport const uk: Locale = {\n addDescription: \"Kлікніть на вільне місце, щоб додати новий вузол.\",\n addEdge: \"Додати край\",\n addNode: \"Додати вузол\",\n back: \"Назад\",\n close: \"Закрити\",\n createEdgeError: \"Не можливо об'єднати краї в групу.\",\n del: \"Видалити обране\",\n deleteClusterError: \"Групи не можуть бути видалені.\",\n edgeDescription:\n \"Клікніть на вузол і перетягніть край до іншого вузла, щоб їх з'єднати.\",\n edit: \"Редагувати\",\n editClusterError: \"Групи недоступні для редагування.\",\n editEdge: \"Редагувати край\",\n editEdgeDescription:\n \"Клікніть на контрольні точки і перетягніть їх у вузол, щоб підключитися до нього.\",\n editNode: \"Редагувати вузол\",\n};\n\n// French\nexport const fr: Locale = {\n addDescription: \"Cliquez dans un endroit vide pour placer un nœud.\",\n addEdge: \"Ajouter un lien\",\n addNode: \"Ajouter un nœud\",\n back: \"Retour\",\n close: \"Fermer\",\n createEdgeError: \"Impossible de créer un lien vers un cluster.\",\n del: \"Effacer la sélection\",\n deleteClusterError: \"Les clusters ne peuvent pas être effacés.\",\n edgeDescription:\n \"Cliquez sur un nœud et glissez le lien vers un autre nœud pour les connecter.\",\n edit: \"Éditer\",\n editClusterError: \"Les clusters ne peuvent pas être édités.\",\n editEdge: \"Éditer le lien\",\n editEdgeDescription:\n \"Cliquez sur les points de contrôle et glissez-les pour connecter un nœud.\",\n editNode: \"Éditer le nœud\",\n};\n\n// Czech\nexport const cs: Locale = {\n addDescription: \"Kluknutím do prázdného prostoru můžete přidat nový vrchol.\",\n addEdge: \"Přidat hranu\",\n addNode: \"Přidat vrchol\",\n back: \"Zpět\",\n close: \"Zavřít\",\n createEdgeError: \"Nelze připojit hranu ke shluku.\",\n del: \"Smazat výběr\",\n deleteClusterError: \"Nelze mazat shluky.\",\n edgeDescription:\n \"Přetažením z jednoho vrcholu do druhého můžete spojit tyto vrcholy novou hranou.\",\n edit: \"Upravit\",\n editClusterError: \"Nelze upravovat shluky.\",\n editEdge: \"Upravit hranu\",\n editEdgeDescription:\n \"Přetažením kontrolního vrcholu hrany ji můžete připojit k jinému vrcholu.\",\n editNode: \"Upravit vrchol\",\n};\n","/**\n * Associates a canvas to a given image, containing a number of renderings\n * of the image at various sizes.\n *\n * This technique is known as 'mipmapping'.\n *\n * NOTE: Images can also be of type 'data:svg+xml`. This code also works\n * for svg, but the mipmapping may not be necessary.\n *\n * @param {Image} image\n */\nclass CachedImage {\n /**\n * @ignore\n */\n constructor() {\n this.NUM_ITERATIONS = 4; // Number of items in the coordinates array\n\n this.image = new Image();\n this.canvas = document.createElement(\"canvas\");\n }\n\n /**\n * Called when the image has been successfully loaded.\n */\n init() {\n if (this.initialized()) return;\n\n this.src = this.image.src; // For same interface with Image\n const w = this.image.width;\n const h = this.image.height;\n\n // Ease external access\n this.width = w;\n this.height = h;\n\n const h2 = Math.floor(h / 2);\n const h4 = Math.floor(h / 4);\n const h8 = Math.floor(h / 8);\n const h16 = Math.floor(h / 16);\n\n const w2 = Math.floor(w / 2);\n const w4 = Math.floor(w / 4);\n const w8 = Math.floor(w / 8);\n const w16 = Math.floor(w / 16);\n\n // Make canvas as small as possible\n this.canvas.width = 3 * w4;\n this.canvas.height = h2;\n\n // Coordinates and sizes of images contained in the canvas\n // Values per row: [top x, left y, width, height]\n\n this.coordinates = [\n [0, 0, w2, h2],\n [w2, 0, w4, h4],\n [w2, h4, w8, h8],\n [5 * w8, h4, w16, h16],\n ];\n\n this._fillMipMap();\n }\n\n /**\n * @returns {boolean} true if init() has been called, false otherwise.\n */\n initialized() {\n return this.coordinates !== undefined;\n }\n\n /**\n * Redraw main image in various sizes to the context.\n *\n * The rationale behind this is to reduce artefacts due to interpolation\n * at differing zoom levels.\n *\n * Source: http://stackoverflow.com/q/18761404/1223531\n *\n * This methods takes the resizing out of the drawing loop, in order to\n * reduce performance overhead.\n *\n * TODO: The code assumes that a 2D context can always be gotten. This is\n * not necessarily true! OTOH, if not true then usage of this class\n * is senseless.\n *\n * @private\n */\n _fillMipMap() {\n const ctx = this.canvas.getContext(\"2d\");\n\n // First zoom-level comes from the image\n const to = this.coordinates[0];\n ctx.drawImage(this.image, to[0], to[1], to[2], to[3]);\n\n // The rest are copy actions internal to the canvas/context\n for (let iterations = 1; iterations < this.NUM_ITERATIONS; iterations++) {\n const from = this.coordinates[iterations - 1];\n const to = this.coordinates[iterations];\n\n ctx.drawImage(\n this.canvas,\n from[0],\n from[1],\n from[2],\n from[3],\n to[0],\n to[1],\n to[2],\n to[3]\n );\n }\n }\n\n /**\n * Draw the image, using the mipmap if necessary.\n *\n * MipMap is only used if param factor > 2; otherwise, original bitmap\n * is resized. This is also used to skip mipmap usage, e.g. by setting factor = 1\n *\n * Credits to 'Alex de Mulder' for original implementation.\n *\n * @param {CanvasRenderingContext2D} ctx context on which to draw zoomed image\n * @param {Float} factor scale factor at which to draw\n * @param {number} left\n * @param {number} top\n * @param {number} width\n * @param {number} height\n */\n drawImageAtPosition(ctx, factor, left, top, width, height) {\n if (!this.initialized()) return; //can't draw image yet not intialized\n\n if (factor > 2) {\n // Determine which zoomed image to use\n factor *= 0.5;\n let iterations = 0;\n while (factor > 2 && iterations < this.NUM_ITERATIONS) {\n factor *= 0.5;\n iterations += 1;\n }\n\n if (iterations >= this.NUM_ITERATIONS) {\n iterations = this.NUM_ITERATIONS - 1;\n }\n //console.log(\"iterations: \" + iterations);\n\n const from = this.coordinates[iterations];\n ctx.drawImage(\n this.canvas,\n from[0],\n from[1],\n from[2],\n from[3],\n left,\n top,\n width,\n height\n );\n } else {\n // Draw image directly\n ctx.drawImage(this.image, left, top, width, height);\n }\n }\n}\n\nexport default CachedImage;\n","import CachedImage from \"./CachedImage\";\n\n/**\n * This callback is a callback that accepts an Image.\n *\n * @callback ImageCallback\n * @param {Image} image\n */\n\n/**\n * This class loads images and keeps them stored.\n *\n * @param {ImageCallback} callback\n */\nclass Images {\n /**\n * @param {ImageCallback} callback\n */\n constructor(callback) {\n this.images = {};\n this.imageBroken = {};\n this.callback = callback;\n }\n\n /**\n * @param {string} url The original Url that failed to load, if the broken image is successfully loaded it will be added to the cache using this Url as the key so that subsequent requests for this Url will return the broken image\n * @param {string} brokenUrl Url the broken image to try and load\n * @param {Image} imageToLoadBrokenUrlOn The image object\n */\n _tryloadBrokenUrl(url, brokenUrl, imageToLoadBrokenUrlOn) {\n //If these parameters aren't specified then exit the function because nothing constructive can be done\n if (url === undefined || imageToLoadBrokenUrlOn === undefined) return;\n if (brokenUrl === undefined) {\n console.warn(\"No broken url image defined\");\n return;\n }\n\n //Clear the old subscription to the error event and put a new in place that only handle errors in loading the brokenImageUrl\n imageToLoadBrokenUrlOn.image.onerror = () => {\n console.error(\"Could not load brokenImage:\", brokenUrl);\n // cache item will contain empty image, this should be OK for default\n };\n\n //Set the source of the image to the brokenUrl, this is actually what kicks off the loading of the broken image\n imageToLoadBrokenUrlOn.image.src = brokenUrl;\n }\n\n /**\n *\n * @param {vis.Image} imageToRedrawWith\n * @private\n */\n _redrawWithImage(imageToRedrawWith) {\n if (this.callback) {\n this.callback(imageToRedrawWith);\n }\n }\n\n /**\n * @param {string} url Url of the image\n * @param {string} brokenUrl Url of an image to use if the url image is not found\n * @returns {Image} img The image object\n */\n load(url, brokenUrl) {\n //Try and get the image from the cache, if successful then return the cached image\n const cachedImage = this.images[url];\n if (cachedImage) return cachedImage;\n\n //Create a new image\n const img = new CachedImage();\n\n // Need to add to cache here, otherwise final return will spawn different copies of the same image,\n // Also, there will be multiple loads of the same image.\n this.images[url] = img;\n\n //Subscribe to the event that is raised if the image loads successfully\n img.image.onload = () => {\n // Properly init the cached item and then request a redraw\n this._fixImageCoordinates(img.image);\n img.init();\n this._redrawWithImage(img);\n };\n\n //Subscribe to the event that is raised if the image fails to load\n img.image.onerror = () => {\n console.error(\"Could not load image:\", url);\n //Try and load the image specified by the brokenUrl using\n this._tryloadBrokenUrl(url, brokenUrl, img);\n };\n\n //Set the source of the image to the url, this is what actually kicks off the loading of the image\n img.image.src = url;\n\n //Return the new image\n return img;\n }\n\n /**\n * IE11 fix -- thanks dponch!\n *\n * Local helper function\n *\n * @param {vis.Image} imageToCache\n * @private\n */\n _fixImageCoordinates(imageToCache) {\n if (imageToCache.width === 0) {\n document.body.appendChild(imageToCache);\n imageToCache.width = imageToCache.offsetWidth;\n imageToCache.height = imageToCache.offsetHeight;\n document.body.removeChild(imageToCache);\n }\n }\n}\n\nexport default Images;\n","'use strict';\n// FF26- bug: ArrayBuffers are non-extensible, but Object.isExtensible does not report it\nvar fails = require('../internals/fails');\n\nmodule.exports = fails(function () {\n if (typeof ArrayBuffer == 'function') {\n var buffer = new ArrayBuffer(8);\n // eslint-disable-next-line es/no-object-isextensible, es/no-object-defineproperty -- safe\n if (Object.isExtensible(buffer)) Object.defineProperty(buffer, 'a', { value: 8 });\n }\n});\n","'use strict';\nvar fails = require('../internals/fails');\nvar isObject = require('../internals/is-object');\nvar classof = require('../internals/classof-raw');\nvar ARRAY_BUFFER_NON_EXTENSIBLE = require('../internals/array-buffer-non-extensible');\n\n// eslint-disable-next-line es/no-object-isextensible -- safe\nvar $isExtensible = Object.isExtensible;\nvar FAILS_ON_PRIMITIVES = fails(function () { $isExtensible(1); });\n\n// `Object.isExtensible` method\n// https://tc39.es/ecma262/#sec-object.isextensible\nmodule.exports = (FAILS_ON_PRIMITIVES || ARRAY_BUFFER_NON_EXTENSIBLE) ? function isExtensible(it) {\n if (!isObject(it)) return false;\n if (ARRAY_BUFFER_NON_EXTENSIBLE && classof(it) === 'ArrayBuffer') return false;\n return $isExtensible ? $isExtensible(it) : true;\n} : $isExtensible;\n","'use strict';\nvar fails = require('../internals/fails');\n\nmodule.exports = !fails(function () {\n // eslint-disable-next-line es/no-object-isextensible, es/no-object-preventextensions -- required for testing\n return Object.isExtensible(Object.preventExtensions({}));\n});\n","'use strict';\nvar $ = require('../internals/export');\nvar uncurryThis = require('../internals/function-uncurry-this');\nvar hiddenKeys = require('../internals/hidden-keys');\nvar isObject = require('../internals/is-object');\nvar hasOwn = require('../internals/has-own-property');\nvar defineProperty = require('../internals/object-define-property').f;\nvar getOwnPropertyNamesModule = require('../internals/object-get-own-property-names');\nvar getOwnPropertyNamesExternalModule = require('../internals/object-get-own-property-names-external');\nvar isExtensible = require('../internals/object-is-extensible');\nvar uid = require('../internals/uid');\nvar FREEZING = require('../internals/freezing');\n\nvar REQUIRED = false;\nvar METADATA = uid('meta');\nvar id = 0;\n\nvar setMetadata = function (it) {\n defineProperty(it, METADATA, { value: {\n objectID: 'O' + id++, // object ID\n weakData: {} // weak collections IDs\n } });\n};\n\nvar fastKey = function (it, create) {\n // return a primitive with prefix\n if (!isObject(it)) return typeof it == 'symbol' ? it : (typeof it == 'string' ? 'S' : 'P') + it;\n if (!hasOwn(it, METADATA)) {\n // can't set metadata to uncaught frozen object\n if (!isExtensible(it)) return 'F';\n // not necessary to add metadata\n if (!create) return 'E';\n // add missing metadata\n setMetadata(it);\n // return object ID\n } return it[METADATA].objectID;\n};\n\nvar getWeakData = function (it, create) {\n if (!hasOwn(it, METADATA)) {\n // can't set metadata to uncaught frozen object\n if (!isExtensible(it)) return true;\n // not necessary to add metadata\n if (!create) return false;\n // add missing metadata\n setMetadata(it);\n // return the store of weak collections IDs\n } return it[METADATA].weakData;\n};\n\n// add metadata on freeze-family methods calling\nvar onFreeze = function (it) {\n if (FREEZING && REQUIRED && isExtensible(it) && !hasOwn(it, METADATA)) setMetadata(it);\n return it;\n};\n\nvar enable = function () {\n meta.enable = function () { /* empty */ };\n REQUIRED = true;\n var getOwnPropertyNames = getOwnPropertyNamesModule.f;\n var splice = uncurryThis([].splice);\n var test = {};\n test[METADATA] = 1;\n\n // prevent exposing of metadata key\n if (getOwnPropertyNames(test).length) {\n getOwnPropertyNamesModule.f = function (it) {\n var result = getOwnPropertyNames(it);\n for (var i = 0, length = result.length; i < length; i++) {\n if (result[i] === METADATA) {\n splice(result, i, 1);\n break;\n }\n } return result;\n };\n\n $({ target: 'Object', stat: true, forced: true }, {\n getOwnPropertyNames: getOwnPropertyNamesExternalModule.f\n });\n }\n};\n\nvar meta = module.exports = {\n enable: enable,\n fastKey: fastKey,\n getWeakData: getWeakData,\n onFreeze: onFreeze\n};\n\nhiddenKeys[METADATA] = true;\n","'use strict';\nvar bind = require('../internals/function-bind-context');\nvar call = require('../internals/function-call');\nvar anObject = require('../internals/an-object');\nvar tryToString = require('../internals/try-to-string');\nvar isArrayIteratorMethod = require('../internals/is-array-iterator-method');\nvar lengthOfArrayLike = require('../internals/length-of-array-like');\nvar isPrototypeOf = require('../internals/object-is-prototype-of');\nvar getIterator = require('../internals/get-iterator');\nvar getIteratorMethod = require('../internals/get-iterator-method');\nvar iteratorClose = require('../internals/iterator-close');\n\nvar $TypeError = TypeError;\n\nvar Result = function (stopped, result) {\n this.stopped = stopped;\n this.result = result;\n};\n\nvar ResultPrototype = Result.prototype;\n\nmodule.exports = function (iterable, unboundFunction, options) {\n var that = options && options.that;\n var AS_ENTRIES = !!(options && options.AS_ENTRIES);\n var IS_RECORD = !!(options && options.IS_RECORD);\n var IS_ITERATOR = !!(options && options.IS_ITERATOR);\n var INTERRUPTED = !!(options && options.INTERRUPTED);\n var fn = bind(unboundFunction, that);\n var iterator, iterFn, index, length, result, next, step;\n\n var stop = function (condition) {\n if (iterator) iteratorClose(iterator, 'normal', condition);\n return new Result(true, condition);\n };\n\n var callFn = function (value) {\n if (AS_ENTRIES) {\n anObject(value);\n return INTERRUPTED ? fn(value[0], value[1], stop) : fn(value[0], value[1]);\n } return INTERRUPTED ? fn(value, stop) : fn(value);\n };\n\n if (IS_RECORD) {\n iterator = iterable.iterator;\n } else if (IS_ITERATOR) {\n iterator = iterable;\n } else {\n iterFn = getIteratorMethod(iterable);\n if (!iterFn) throw new $TypeError(tryToString(iterable) + ' is not iterable');\n // optimisation for array iterators\n if (isArrayIteratorMethod(iterFn)) {\n for (index = 0, length = lengthOfArrayLike(iterable); length > index; index++) {\n result = callFn(iterable[index]);\n if (result && isPrototypeOf(ResultPrototype, result)) return result;\n } return new Result(false);\n }\n iterator = getIterator(iterable, iterFn);\n }\n\n next = IS_RECORD ? iterable.next : iterator.next;\n while (!(step = call(next, iterator)).done) {\n try {\n result = callFn(step.value);\n } catch (error) {\n iteratorClose(iterator, 'throw', error);\n }\n if (typeof result == 'object' && result && isPrototypeOf(ResultPrototype, result)) return result;\n } return new Result(false);\n};\n","'use strict';\nvar isPrototypeOf = require('../internals/object-is-prototype-of');\n\nvar $TypeError = TypeError;\n\nmodule.exports = function (it, Prototype) {\n if (isPrototypeOf(Prototype, it)) return it;\n throw new $TypeError('Incorrect invocation');\n};\n","'use strict';\nvar $ = require('../internals/export');\nvar global = require('../internals/global');\nvar InternalMetadataModule = require('../internals/internal-metadata');\nvar fails = require('../internals/fails');\nvar createNonEnumerableProperty = require('../internals/create-non-enumerable-property');\nvar iterate = require('../internals/iterate');\nvar anInstance = require('../internals/an-instance');\nvar isCallable = require('../internals/is-callable');\nvar isObject = require('../internals/is-object');\nvar isNullOrUndefined = require('../internals/is-null-or-undefined');\nvar setToStringTag = require('../internals/set-to-string-tag');\nvar defineProperty = require('../internals/object-define-property').f;\nvar forEach = require('../internals/array-iteration').forEach;\nvar DESCRIPTORS = require('../internals/descriptors');\nvar InternalStateModule = require('../internals/internal-state');\n\nvar setInternalState = InternalStateModule.set;\nvar internalStateGetterFor = InternalStateModule.getterFor;\n\nmodule.exports = function (CONSTRUCTOR_NAME, wrapper, common) {\n var IS_MAP = CONSTRUCTOR_NAME.indexOf('Map') !== -1;\n var IS_WEAK = CONSTRUCTOR_NAME.indexOf('Weak') !== -1;\n var ADDER = IS_MAP ? 'set' : 'add';\n var NativeConstructor = global[CONSTRUCTOR_NAME];\n var NativePrototype = NativeConstructor && NativeConstructor.prototype;\n var exported = {};\n var Constructor;\n\n if (!DESCRIPTORS || !isCallable(NativeConstructor)\n || !(IS_WEAK || NativePrototype.forEach && !fails(function () { new NativeConstructor().entries().next(); }))\n ) {\n // create collection constructor\n Constructor = common.getConstructor(wrapper, CONSTRUCTOR_NAME, IS_MAP, ADDER);\n InternalMetadataModule.enable();\n } else {\n Constructor = wrapper(function (target, iterable) {\n setInternalState(anInstance(target, Prototype), {\n type: CONSTRUCTOR_NAME,\n collection: new NativeConstructor()\n });\n if (!isNullOrUndefined(iterable)) iterate(iterable, target[ADDER], { that: target, AS_ENTRIES: IS_MAP });\n });\n\n var Prototype = Constructor.prototype;\n\n var getInternalState = internalStateGetterFor(CONSTRUCTOR_NAME);\n\n forEach(['add', 'clear', 'delete', 'forEach', 'get', 'has', 'set', 'keys', 'values', 'entries'], function (KEY) {\n var IS_ADDER = KEY === 'add' || KEY === 'set';\n if (KEY in NativePrototype && !(IS_WEAK && KEY === 'clear')) {\n createNonEnumerableProperty(Prototype, KEY, function (a, b) {\n var collection = getInternalState(this).collection;\n if (!IS_ADDER && IS_WEAK && !isObject(a)) return KEY === 'get' ? undefined : false;\n var result = collection[KEY](a === 0 ? 0 : a, b);\n return IS_ADDER ? this : result;\n });\n }\n });\n\n IS_WEAK || defineProperty(Prototype, 'size', {\n configurable: true,\n get: function () {\n return getInternalState(this).collection.size;\n }\n });\n }\n\n setToStringTag(Constructor, CONSTRUCTOR_NAME, false, true);\n\n exported[CONSTRUCTOR_NAME] = Constructor;\n $({ global: true, forced: true }, exported);\n\n if (!IS_WEAK) common.setStrong(Constructor, CONSTRUCTOR_NAME, IS_MAP);\n\n return Constructor;\n};\n","'use strict';\nvar defineBuiltIn = require('../internals/define-built-in');\n\nmodule.exports = function (target, src, options) {\n for (var key in src) {\n if (options && options.unsafe && target[key]) target[key] = src[key];\n else defineBuiltIn(target, key, src[key], options);\n } return target;\n};\n","'use strict';\nvar getBuiltIn = require('../internals/get-built-in');\nvar defineBuiltInAccessor = require('../internals/define-built-in-accessor');\nvar wellKnownSymbol = require('../internals/well-known-symbol');\nvar DESCRIPTORS = require('../internals/descriptors');\n\nvar SPECIES = wellKnownSymbol('species');\n\nmodule.exports = function (CONSTRUCTOR_NAME) {\n var Constructor = getBuiltIn(CONSTRUCTOR_NAME);\n\n if (DESCRIPTORS && Constructor && !Constructor[SPECIES]) {\n defineBuiltInAccessor(Constructor, SPECIES, {\n configurable: true,\n get: function () { return this; }\n });\n }\n};\n","'use strict';\nvar create = require('../internals/object-create');\nvar defineBuiltInAccessor = require('../internals/define-built-in-accessor');\nvar defineBuiltIns = require('../internals/define-built-ins');\nvar bind = require('../internals/function-bind-context');\nvar anInstance = require('../internals/an-instance');\nvar isNullOrUndefined = require('../internals/is-null-or-undefined');\nvar iterate = require('../internals/iterate');\nvar defineIterator = require('../internals/iterator-define');\nvar createIterResultObject = require('../internals/create-iter-result-object');\nvar setSpecies = require('../internals/set-species');\nvar DESCRIPTORS = require('../internals/descriptors');\nvar fastKey = require('../internals/internal-metadata').fastKey;\nvar InternalStateModule = require('../internals/internal-state');\n\nvar setInternalState = InternalStateModule.set;\nvar internalStateGetterFor = InternalStateModule.getterFor;\n\nmodule.exports = {\n getConstructor: function (wrapper, CONSTRUCTOR_NAME, IS_MAP, ADDER) {\n var Constructor = wrapper(function (that, iterable) {\n anInstance(that, Prototype);\n setInternalState(that, {\n type: CONSTRUCTOR_NAME,\n index: create(null),\n first: undefined,\n last: undefined,\n size: 0\n });\n if (!DESCRIPTORS) that.size = 0;\n if (!isNullOrUndefined(iterable)) iterate(iterable, that[ADDER], { that: that, AS_ENTRIES: IS_MAP });\n });\n\n var Prototype = Constructor.prototype;\n\n var getInternalState = internalStateGetterFor(CONSTRUCTOR_NAME);\n\n var define = function (that, key, value) {\n var state = getInternalState(that);\n var entry = getEntry(that, key);\n var previous, index;\n // change existing entry\n if (entry) {\n entry.value = value;\n // create new entry\n } else {\n state.last = entry = {\n index: index = fastKey(key, true),\n key: key,\n value: value,\n previous: previous = state.last,\n next: undefined,\n removed: false\n };\n if (!state.first) state.first = entry;\n if (previous) previous.next = entry;\n if (DESCRIPTORS) state.size++;\n else that.size++;\n // add to index\n if (index !== 'F') state.index[index] = entry;\n } return that;\n };\n\n var getEntry = function (that, key) {\n var state = getInternalState(that);\n // fast case\n var index = fastKey(key);\n var entry;\n if (index !== 'F') return state.index[index];\n // frozen object case\n for (entry = state.first; entry; entry = entry.next) {\n if (entry.key === key) return entry;\n }\n };\n\n defineBuiltIns(Prototype, {\n // `{ Map, Set }.prototype.clear()` methods\n // https://tc39.es/ecma262/#sec-map.prototype.clear\n // https://tc39.es/ecma262/#sec-set.prototype.clear\n clear: function clear() {\n var that = this;\n var state = getInternalState(that);\n var data = state.index;\n var entry = state.first;\n while (entry) {\n entry.removed = true;\n if (entry.previous) entry.previous = entry.previous.next = undefined;\n delete data[entry.index];\n entry = entry.next;\n }\n state.first = state.last = undefined;\n if (DESCRIPTORS) state.size = 0;\n else that.size = 0;\n },\n // `{ Map, Set }.prototype.delete(key)` methods\n // https://tc39.es/ecma262/#sec-map.prototype.delete\n // https://tc39.es/ecma262/#sec-set.prototype.delete\n 'delete': function (key) {\n var that = this;\n var state = getInternalState(that);\n var entry = getEntry(that, key);\n if (entry) {\n var next = entry.next;\n var prev = entry.previous;\n delete state.index[entry.index];\n entry.removed = true;\n if (prev) prev.next = next;\n if (next) next.previous = prev;\n if (state.first === entry) state.first = next;\n if (state.last === entry) state.last = prev;\n if (DESCRIPTORS) state.size--;\n else that.size--;\n } return !!entry;\n },\n // `{ Map, Set }.prototype.forEach(callbackfn, thisArg = undefined)` methods\n // https://tc39.es/ecma262/#sec-map.prototype.foreach\n // https://tc39.es/ecma262/#sec-set.prototype.foreach\n forEach: function forEach(callbackfn /* , that = undefined */) {\n var state = getInternalState(this);\n var boundFunction = bind(callbackfn, arguments.length > 1 ? arguments[1] : undefined);\n var entry;\n while (entry = entry ? entry.next : state.first) {\n boundFunction(entry.value, entry.key, this);\n // revert to the last existing entry\n while (entry && entry.removed) entry = entry.previous;\n }\n },\n // `{ Map, Set}.prototype.has(key)` methods\n // https://tc39.es/ecma262/#sec-map.prototype.has\n // https://tc39.es/ecma262/#sec-set.prototype.has\n has: function has(key) {\n return !!getEntry(this, key);\n }\n });\n\n defineBuiltIns(Prototype, IS_MAP ? {\n // `Map.prototype.get(key)` method\n // https://tc39.es/ecma262/#sec-map.prototype.get\n get: function get(key) {\n var entry = getEntry(this, key);\n return entry && entry.value;\n },\n // `Map.prototype.set(key, value)` method\n // https://tc39.es/ecma262/#sec-map.prototype.set\n set: function set(key, value) {\n return define(this, key === 0 ? 0 : key, value);\n }\n } : {\n // `Set.prototype.add(value)` method\n // https://tc39.es/ecma262/#sec-set.prototype.add\n add: function add(value) {\n return define(this, value = value === 0 ? 0 : value, value);\n }\n });\n if (DESCRIPTORS) defineBuiltInAccessor(Prototype, 'size', {\n configurable: true,\n get: function () {\n return getInternalState(this).size;\n }\n });\n return Constructor;\n },\n setStrong: function (Constructor, CONSTRUCTOR_NAME, IS_MAP) {\n var ITERATOR_NAME = CONSTRUCTOR_NAME + ' Iterator';\n var getInternalCollectionState = internalStateGetterFor(CONSTRUCTOR_NAME);\n var getInternalIteratorState = internalStateGetterFor(ITERATOR_NAME);\n // `{ Map, Set }.prototype.{ keys, values, entries, @@iterator }()` methods\n // https://tc39.es/ecma262/#sec-map.prototype.entries\n // https://tc39.es/ecma262/#sec-map.prototype.keys\n // https://tc39.es/ecma262/#sec-map.prototype.values\n // https://tc39.es/ecma262/#sec-map.prototype-@@iterator\n // https://tc39.es/ecma262/#sec-set.prototype.entries\n // https://tc39.es/ecma262/#sec-set.prototype.keys\n // https://tc39.es/ecma262/#sec-set.prototype.values\n // https://tc39.es/ecma262/#sec-set.prototype-@@iterator\n defineIterator(Constructor, CONSTRUCTOR_NAME, function (iterated, kind) {\n setInternalState(this, {\n type: ITERATOR_NAME,\n target: iterated,\n state: getInternalCollectionState(iterated),\n kind: kind,\n last: undefined\n });\n }, function () {\n var state = getInternalIteratorState(this);\n var kind = state.kind;\n var entry = state.last;\n // revert to the last existing entry\n while (entry && entry.removed) entry = entry.previous;\n // get next entry\n if (!state.target || !(state.last = entry = entry ? entry.next : state.state.first)) {\n // or finish the iteration\n state.target = undefined;\n return createIterResultObject(undefined, true);\n }\n // return step by kind\n if (kind === 'keys') return createIterResultObject(entry.key, false);\n if (kind === 'values') return createIterResultObject(entry.value, false);\n return createIterResultObject([entry.key, entry.value], false);\n }, IS_MAP ? 'entries' : 'values', !IS_MAP, true);\n\n // `{ Map, Set }.prototype[@@species]` accessors\n // https://tc39.es/ecma262/#sec-get-map-@@species\n // https://tc39.es/ecma262/#sec-get-set-@@species\n setSpecies(CONSTRUCTOR_NAME);\n }\n};\n","'use strict';\nvar collection = require('../internals/collection');\nvar collectionStrong = require('../internals/collection-strong');\n\n// `Map` constructor\n// https://tc39.es/ecma262/#sec-map-objects\ncollection('Map', function (init) {\n return function Map() { return init(this, arguments.length ? arguments[0] : undefined); };\n}, collectionStrong);\n","'use strict';\nrequire('../../modules/es.array.iterator');\nrequire('../../modules/es.map');\nrequire('../../modules/es.object.to-string');\nrequire('../../modules/es.string.iterator');\nvar path = require('../../internals/path');\n\nmodule.exports = path.Map;\n","/**\n * This class can store groups and options specific for groups.\n */\nexport class Groups {\n /**\n * @ignore\n */\n constructor() {\n this.clear();\n this._defaultIndex = 0;\n this._groupIndex = 0;\n\n this._defaultGroups = [\n {\n border: \"#2B7CE9\",\n background: \"#97C2FC\",\n highlight: { border: \"#2B7CE9\", background: \"#D2E5FF\" },\n hover: { border: \"#2B7CE9\", background: \"#D2E5FF\" },\n }, // 0: blue\n {\n border: \"#FFA500\",\n background: \"#FFFF00\",\n highlight: { border: \"#FFA500\", background: \"#FFFFA3\" },\n hover: { border: \"#FFA500\", background: \"#FFFFA3\" },\n }, // 1: yellow\n {\n border: \"#FA0A10\",\n background: \"#FB7E81\",\n highlight: { border: \"#FA0A10\", background: \"#FFAFB1\" },\n hover: { border: \"#FA0A10\", background: \"#FFAFB1\" },\n }, // 2: red\n {\n border: \"#41A906\",\n background: \"#7BE141\",\n highlight: { border: \"#41A906\", background: \"#A1EC76\" },\n hover: { border: \"#41A906\", background: \"#A1EC76\" },\n }, // 3: green\n {\n border: \"#E129F0\",\n background: \"#EB7DF4\",\n highlight: { border: \"#E129F0\", background: \"#F0B3F5\" },\n hover: { border: \"#E129F0\", background: \"#F0B3F5\" },\n }, // 4: magenta\n {\n border: \"#7C29F0\",\n background: \"#AD85E4\",\n highlight: { border: \"#7C29F0\", background: \"#D3BDF0\" },\n hover: { border: \"#7C29F0\", background: \"#D3BDF0\" },\n }, // 5: purple\n {\n border: \"#C37F00\",\n background: \"#FFA807\",\n highlight: { border: \"#C37F00\", background: \"#FFCA66\" },\n hover: { border: \"#C37F00\", background: \"#FFCA66\" },\n }, // 6: orange\n {\n border: \"#4220FB\",\n background: \"#6E6EFD\",\n highlight: { border: \"#4220FB\", background: \"#9B9BFD\" },\n hover: { border: \"#4220FB\", background: \"#9B9BFD\" },\n }, // 7: darkblue\n {\n border: \"#FD5A77\",\n background: \"#FFC0CB\",\n highlight: { border: \"#FD5A77\", background: \"#FFD1D9\" },\n hover: { border: \"#FD5A77\", background: \"#FFD1D9\" },\n }, // 8: pink\n {\n border: \"#4AD63A\",\n background: \"#C2FABC\",\n highlight: { border: \"#4AD63A\", background: \"#E6FFE3\" },\n hover: { border: \"#4AD63A\", background: \"#E6FFE3\" },\n }, // 9: mint\n\n {\n border: \"#990000\",\n background: \"#EE0000\",\n highlight: { border: \"#BB0000\", background: \"#FF3333\" },\n hover: { border: \"#BB0000\", background: \"#FF3333\" },\n }, // 10:bright red\n\n {\n border: \"#FF6000\",\n background: \"#FF6000\",\n highlight: { border: \"#FF6000\", background: \"#FF6000\" },\n hover: { border: \"#FF6000\", background: \"#FF6000\" },\n }, // 12: real orange\n {\n border: \"#97C2FC\",\n background: \"#2B7CE9\",\n highlight: { border: \"#D2E5FF\", background: \"#2B7CE9\" },\n hover: { border: \"#D2E5FF\", background: \"#2B7CE9\" },\n }, // 13: blue\n {\n border: \"#399605\",\n background: \"#255C03\",\n highlight: { border: \"#399605\", background: \"#255C03\" },\n hover: { border: \"#399605\", background: \"#255C03\" },\n }, // 14: green\n {\n border: \"#B70054\",\n background: \"#FF007E\",\n highlight: { border: \"#B70054\", background: \"#FF007E\" },\n hover: { border: \"#B70054\", background: \"#FF007E\" },\n }, // 15: magenta\n {\n border: \"#AD85E4\",\n background: \"#7C29F0\",\n highlight: { border: \"#D3BDF0\", background: \"#7C29F0\" },\n hover: { border: \"#D3BDF0\", background: \"#7C29F0\" },\n }, // 16: purple\n {\n border: \"#4557FA\",\n background: \"#000EA1\",\n highlight: { border: \"#6E6EFD\", background: \"#000EA1\" },\n hover: { border: \"#6E6EFD\", background: \"#000EA1\" },\n }, // 17: darkblue\n {\n border: \"#FFC0CB\",\n background: \"#FD5A77\",\n highlight: { border: \"#FFD1D9\", background: \"#FD5A77\" },\n hover: { border: \"#FFD1D9\", background: \"#FD5A77\" },\n }, // 18: pink\n {\n border: \"#C2FABC\",\n background: \"#74D66A\",\n highlight: { border: \"#E6FFE3\", background: \"#74D66A\" },\n hover: { border: \"#E6FFE3\", background: \"#74D66A\" },\n }, // 19: mint\n\n {\n border: \"#EE0000\",\n background: \"#990000\",\n highlight: { border: \"#FF3333\", background: \"#BB0000\" },\n hover: { border: \"#FF3333\", background: \"#BB0000\" },\n }, // 20:bright red\n ];\n\n this.options = {};\n this.defaultOptions = {\n useDefaultGroups: true,\n };\n Object.assign(this.options, this.defaultOptions);\n }\n\n /**\n *\n * @param {object} options\n */\n setOptions(options) {\n const optionFields = [\"useDefaultGroups\"];\n\n if (options !== undefined) {\n for (const groupName in options) {\n if (Object.prototype.hasOwnProperty.call(options, groupName)) {\n if (optionFields.indexOf(groupName) === -1) {\n const group = options[groupName];\n this.add(groupName, group);\n }\n }\n }\n }\n }\n\n /**\n * Clear all groups\n */\n clear() {\n this._groups = new Map();\n this._groupNames = [];\n }\n\n /**\n * Get group options of a groupname.\n * If groupname is not found, a new group may be created.\n *\n * @param {*} groupname Can be a number, string, Date, etc.\n * @param {boolean} [shouldCreate=true] If true, create a new group\n * @returns {object} The found or created group\n */\n get(groupname, shouldCreate = true) {\n let group = this._groups.get(groupname);\n\n if (group === undefined && shouldCreate) {\n if (\n this.options.useDefaultGroups === false &&\n this._groupNames.length > 0\n ) {\n // create new group\n const index = this._groupIndex % this._groupNames.length;\n ++this._groupIndex;\n group = {};\n group.color = this._groups.get(this._groupNames[index]);\n this._groups.set(groupname, group);\n } else {\n // create new group\n const index = this._defaultIndex % this._defaultGroups.length;\n this._defaultIndex++;\n group = {};\n group.color = this._defaultGroups[index];\n this._groups.set(groupname, group);\n }\n }\n\n return group;\n }\n\n /**\n * Add custom group style.\n *\n * @param {string} groupName - The name of the group, a new group will be\n * created if a group with the same name doesn't exist, otherwise the old\n * groups style will be overwritten.\n * @param {object} style - An object containing borderColor, backgroundColor,\n * etc.\n * @returns {object} The created group object.\n */\n add(groupName, style) {\n // Only push group name once to prevent duplicates which would consume more\n // RAM and also skew the distribution towards more often updated groups,\n // neither of which is desirable.\n if (!this._groups.has(groupName)) {\n this._groupNames.push(groupName);\n }\n this._groups.set(groupName, style);\n return style;\n }\n}\n","'use strict';\nvar $ = require('../internals/export');\n\n// `Number.isNaN` method\n// https://tc39.es/ecma262/#sec-number.isnan\n$({ target: 'Number', stat: true }, {\n isNaN: function isNaN(number) {\n // eslint-disable-next-line no-self-compare -- NaN check\n return number !== number;\n }\n});\n","'use strict';\nrequire('../../modules/es.number.is-nan');\nvar path = require('../../internals/path');\n\nmodule.exports = path.Number.isNaN;\n","'use strict';\nvar global = require('../internals/global');\n\nvar globalIsFinite = global.isFinite;\n\n// `Number.isFinite` method\n// https://tc39.es/ecma262/#sec-number.isfinite\n// eslint-disable-next-line es/no-number-isfinite -- safe\nmodule.exports = Number.isFinite || function isFinite(it) {\n return typeof it == 'number' && globalIsFinite(it);\n};\n","'use strict';\nvar $ = require('../internals/export');\nvar numberIsFinite = require('../internals/number-is-finite');\n\n// `Number.isFinite` method\n// https://tc39.es/ecma262/#sec-number.isfinite\n$({ target: 'Number', stat: true }, { isFinite: numberIsFinite });\n","'use strict';\nrequire('../../modules/es.number.is-finite');\nvar path = require('../../internals/path');\n\nmodule.exports = path.Number.isFinite;\n","'use strict';\nvar $ = require('../internals/export');\nvar $some = require('../internals/array-iteration').some;\nvar arrayMethodIsStrict = require('../internals/array-method-is-strict');\n\nvar STRICT_METHOD = arrayMethodIsStrict('some');\n\n// `Array.prototype.some` method\n// https://tc39.es/ecma262/#sec-array.prototype.some\n$({ target: 'Array', proto: true, forced: !STRICT_METHOD }, {\n some: function some(callbackfn /* , thisArg */) {\n return $some(this, callbackfn, arguments.length > 1 ? arguments[1] : undefined);\n }\n});\n","'use strict';\nrequire('../../../modules/es.array.some');\nvar entryVirtual = require('../../../internals/entry-virtual');\n\nmodule.exports = entryVirtual('Array').some;\n","'use strict';\nvar isPrototypeOf = require('../../internals/object-is-prototype-of');\nvar method = require('../array/virtual/some');\n\nvar ArrayPrototype = Array.prototype;\n\nmodule.exports = function (it) {\n var own = it.some;\n return it === ArrayPrototype || (isPrototypeOf(ArrayPrototype, it) && own === ArrayPrototype.some) ? method : own;\n};\n","'use strict';\nvar parent = require('../../es/instance/some');\n\nmodule.exports = parent;\n","export default function _assertThisInitialized(self) {\n if (self === void 0) {\n throw new ReferenceError(\"this hasn't been initialised - super() hasn't been called\");\n }\n return self;\n}","'use strict';\nvar parent = require('../../stable/object/create');\n\nmodule.exports = parent;\n","'use strict';\nmodule.exports = require('../../full/object/create');\n","'use strict';\nvar $ = require('../internals/export');\nvar setPrototypeOf = require('../internals/object-set-prototype-of');\n\n// `Object.setPrototypeOf` method\n// https://tc39.es/ecma262/#sec-object.setprototypeof\n$({ target: 'Object', stat: true }, {\n setPrototypeOf: setPrototypeOf\n});\n","'use strict';\nrequire('../../modules/es.object.set-prototype-of');\nvar path = require('../../internals/path');\n\nmodule.exports = path.Object.setPrototypeOf;\n","'use strict';\nmodule.exports = require('../../full/object/set-prototype-of');\n","'use strict';\nvar parent = require('../../stable/instance/bind');\n\nmodule.exports = parent;\n","import _Object$setPrototypeOf from \"core-js-pure/features/object/set-prototype-of.js\";\nimport _bindInstanceProperty from \"core-js-pure/features/instance/bind.js\";\nexport default function _setPrototypeOf(o, p) {\n var _context;\n _setPrototypeOf = _Object$setPrototypeOf ? _bindInstanceProperty(_context = _Object$setPrototypeOf).call(_context) : function _setPrototypeOf(o, p) {\n o.__proto__ = p;\n return o;\n };\n return _setPrototypeOf(o, p);\n}","import _Object$create from \"core-js-pure/features/object/create.js\";\nimport _Object$defineProperty from \"core-js-pure/features/object/define-property.js\";\nimport setPrototypeOf from \"./setPrototypeOf.js\";\nexport default function _inherits(subClass, superClass) {\n if (typeof superClass !== \"function\" && superClass !== null) {\n throw new TypeError(\"Super expression must either be null or a function\");\n }\n subClass.prototype = _Object$create(superClass && superClass.prototype, {\n constructor: {\n value: subClass,\n writable: true,\n configurable: true\n }\n });\n _Object$defineProperty(subClass, \"prototype\", {\n writable: false\n });\n if (superClass) setPrototypeOf(subClass, superClass);\n}","import _typeof from \"./typeof.js\";\nimport assertThisInitialized from \"./assertThisInitialized.js\";\nexport default function _possibleConstructorReturn(self, call) {\n if (call && (_typeof(call) === \"object\" || typeof call === \"function\")) {\n return call;\n } else if (call !== void 0) {\n throw new TypeError(\"Derived constructors may only return object or undefined\");\n }\n return assertThisInitialized(self);\n}","'use strict';\nvar parent = require('../../stable/object/get-prototype-of');\n\nmodule.exports = parent;\n","'use strict';\nmodule.exports = require('../../full/object/get-prototype-of');\n","import _Object$setPrototypeOf from \"core-js-pure/features/object/set-prototype-of.js\";\nimport _bindInstanceProperty from \"core-js-pure/features/instance/bind.js\";\nimport _Object$getPrototypeOf from \"core-js-pure/features/object/get-prototype-of.js\";\nexport default function _getPrototypeOf(o) {\n var _context;\n _getPrototypeOf = _Object$setPrototypeOf ? _bindInstanceProperty(_context = _Object$getPrototypeOf).call(_context) : function _getPrototypeOf(o) {\n return o.__proto__ || _Object$getPrototypeOf(o);\n };\n return _getPrototypeOf(o);\n}","import _Object$defineProperty from \"core-js-pure/features/object/define-property.js\";\nimport toPropertyKey from \"./toPropertyKey.js\";\nexport default function _defineProperty(obj, key, value) {\n key = toPropertyKey(key);\n if (key in obj) {\n _Object$defineProperty(obj, key, {\n value: value,\n enumerable: true,\n configurable: true,\n writable: true\n });\n } else {\n obj[key] = value;\n }\n return obj;\n}","var _Symbol = require(\"core-js-pure/features/symbol/index.js\");\nvar _Symbol$iterator = require(\"core-js-pure/features/symbol/iterator.js\");\nfunction _typeof(o) {\n \"@babel/helpers - typeof\";\n\n return (module.exports = _typeof = \"function\" == typeof _Symbol && \"symbol\" == typeof _Symbol$iterator ? function (o) {\n return typeof o;\n } : function (o) {\n return o && \"function\" == typeof _Symbol && o.constructor === _Symbol && o !== _Symbol.prototype ? \"symbol\" : typeof o;\n }, module.exports.__esModule = true, module.exports[\"default\"] = module.exports), _typeof(o);\n}\nmodule.exports = _typeof, module.exports.__esModule = true, module.exports[\"default\"] = module.exports;","'use strict';\nmodule.exports = require('../../full/instance/for-each');\n","'use strict';\nvar parent = require('../../stable/instance/for-each');\n\nmodule.exports = parent;\n","'use strict';\nvar hasOwn = require('../internals/has-own-property');\nvar ownKeys = require('../internals/own-keys');\nvar getOwnPropertyDescriptorModule = require('../internals/object-get-own-property-descriptor');\nvar definePropertyModule = require('../internals/object-define-property');\n\nmodule.exports = function (target, source, exceptions) {\n var keys = ownKeys(source);\n var defineProperty = definePropertyModule.f;\n var getOwnPropertyDescriptor = getOwnPropertyDescriptorModule.f;\n for (var i = 0; i < keys.length; i++) {\n var key = keys[i];\n if (!hasOwn(target, key) && !(exceptions && hasOwn(exceptions, key))) {\n defineProperty(target, key, getOwnPropertyDescriptor(source, key));\n }\n }\n};\n","'use strict';\nvar isObject = require('../internals/is-object');\nvar createNonEnumerableProperty = require('../internals/create-non-enumerable-property');\n\n// `InstallErrorCause` abstract operation\n// https://tc39.es/proposal-error-cause/#sec-errorobjects-install-error-cause\nmodule.exports = function (O, options) {\n if (isObject(options) && 'cause' in options) {\n createNonEnumerableProperty(O, 'cause', options.cause);\n }\n};\n","'use strict';\nvar uncurryThis = require('../internals/function-uncurry-this');\n\nvar $Error = Error;\nvar replace = uncurryThis(''.replace);\n\nvar TEST = (function (arg) { return String(new $Error(arg).stack); })('zxcasd');\n// eslint-disable-next-line redos/no-vulnerable -- safe\nvar V8_OR_CHAKRA_STACK_ENTRY = /\\n\\s*at [^:]*:[^\\n]*/;\nvar IS_V8_OR_CHAKRA_STACK = V8_OR_CHAKRA_STACK_ENTRY.test(TEST);\n\nmodule.exports = function (stack, dropEntries) {\n if (IS_V8_OR_CHAKRA_STACK && typeof stack == 'string' && !$Error.prepareStackTrace) {\n while (dropEntries--) stack = replace(stack, V8_OR_CHAKRA_STACK_ENTRY, '');\n } return stack;\n};\n","'use strict';\nvar fails = require('../internals/fails');\nvar createPropertyDescriptor = require('../internals/create-property-descriptor');\n\nmodule.exports = !fails(function () {\n var error = new Error('a');\n if (!('stack' in error)) return true;\n // eslint-disable-next-line es/no-object-defineproperty -- safe\n Object.defineProperty(error, 'stack', createPropertyDescriptor(1, 7));\n return error.stack !== 7;\n});\n","'use strict';\nvar createNonEnumerableProperty = require('../internals/create-non-enumerable-property');\nvar clearErrorStack = require('../internals/error-stack-clear');\nvar ERROR_STACK_INSTALLABLE = require('../internals/error-stack-installable');\n\n// non-standard V8\nvar captureStackTrace = Error.captureStackTrace;\n\nmodule.exports = function (error, C, stack, dropEntries) {\n if (ERROR_STACK_INSTALLABLE) {\n if (captureStackTrace) captureStackTrace(error, C);\n else createNonEnumerableProperty(error, 'stack', clearErrorStack(stack, dropEntries));\n }\n};\n","'use strict';\nvar toString = require('../internals/to-string');\n\nmodule.exports = function (argument, $default) {\n return argument === undefined ? arguments.length < 2 ? '' : $default : toString(argument);\n};\n","'use strict';\nvar $ = require('../internals/export');\nvar isPrototypeOf = require('../internals/object-is-prototype-of');\nvar getPrototypeOf = require('../internals/object-get-prototype-of');\nvar setPrototypeOf = require('../internals/object-set-prototype-of');\nvar copyConstructorProperties = require('../internals/copy-constructor-properties');\nvar create = require('../internals/object-create');\nvar createNonEnumerableProperty = require('../internals/create-non-enumerable-property');\nvar createPropertyDescriptor = require('../internals/create-property-descriptor');\nvar installErrorCause = require('../internals/install-error-cause');\nvar installErrorStack = require('../internals/error-stack-install');\nvar iterate = require('../internals/iterate');\nvar normalizeStringArgument = require('../internals/normalize-string-argument');\nvar wellKnownSymbol = require('../internals/well-known-symbol');\n\nvar TO_STRING_TAG = wellKnownSymbol('toStringTag');\nvar $Error = Error;\nvar push = [].push;\n\nvar $AggregateError = function AggregateError(errors, message /* , options */) {\n var isInstance = isPrototypeOf(AggregateErrorPrototype, this);\n var that;\n if (setPrototypeOf) {\n that = setPrototypeOf(new $Error(), isInstance ? getPrototypeOf(this) : AggregateErrorPrototype);\n } else {\n that = isInstance ? this : create(AggregateErrorPrototype);\n createNonEnumerableProperty(that, TO_STRING_TAG, 'Error');\n }\n if (message !== undefined) createNonEnumerableProperty(that, 'message', normalizeStringArgument(message));\n installErrorStack(that, $AggregateError, that.stack, 1);\n if (arguments.length > 2) installErrorCause(that, arguments[2]);\n var errorsArray = [];\n iterate(errors, push, { that: errorsArray });\n createNonEnumerableProperty(that, 'errors', errorsArray);\n return that;\n};\n\nif (setPrototypeOf) setPrototypeOf($AggregateError, $Error);\nelse copyConstructorProperties($AggregateError, $Error, { name: true });\n\nvar AggregateErrorPrototype = $AggregateError.prototype = create($Error.prototype, {\n constructor: createPropertyDescriptor(1, $AggregateError),\n message: createPropertyDescriptor(1, ''),\n name: createPropertyDescriptor(1, 'AggregateError')\n});\n\n// `AggregateError` constructor\n// https://tc39.es/ecma262/#sec-aggregate-error-constructor\n$({ global: true, constructor: true, arity: 2 }, {\n AggregateError: $AggregateError\n});\n","'use strict';\nvar global = require('../internals/global');\nvar classof = require('../internals/classof-raw');\n\nmodule.exports = classof(global.process) === 'process';\n","'use strict';\nvar global = require('../internals/global');\nvar apply = require('../internals/function-apply');\nvar bind = require('../internals/function-bind-context');\nvar isCallable = require('../internals/is-callable');\nvar hasOwn = require('../internals/has-own-property');\nvar fails = require('../internals/fails');\nvar html = require('../internals/html');\nvar arraySlice = require('../internals/array-slice');\nvar createElement = require('../internals/document-create-element');\nvar validateArgumentsLength = require('../internals/validate-arguments-length');\nvar IS_IOS = require('../internals/engine-is-ios');\nvar IS_NODE = require('../internals/engine-is-node');\n\nvar set = global.setImmediate;\nvar clear = global.clearImmediate;\nvar process = global.process;\nvar Dispatch = global.Dispatch;\nvar Function = global.Function;\nvar MessageChannel = global.MessageChannel;\nvar String = global.String;\nvar counter = 0;\nvar queue = {};\nvar ONREADYSTATECHANGE = 'onreadystatechange';\nvar $location, defer, channel, port;\n\nfails(function () {\n // Deno throws a ReferenceError on `location` access without `--location` flag\n $location = global.location;\n});\n\nvar run = function (id) {\n if (hasOwn(queue, id)) {\n var fn = queue[id];\n delete queue[id];\n fn();\n }\n};\n\nvar runner = function (id) {\n return function () {\n run(id);\n };\n};\n\nvar eventListener = function (event) {\n run(event.data);\n};\n\nvar globalPostMessageDefer = function (id) {\n // old engines have not location.origin\n global.postMessage(String(id), $location.protocol + '//' + $location.host);\n};\n\n// Node.js 0.9+ & IE10+ has setImmediate, otherwise:\nif (!set || !clear) {\n set = function setImmediate(handler) {\n validateArgumentsLength(arguments.length, 1);\n var fn = isCallable(handler) ? handler : Function(handler);\n var args = arraySlice(arguments, 1);\n queue[++counter] = function () {\n apply(fn, undefined, args);\n };\n defer(counter);\n return counter;\n };\n clear = function clearImmediate(id) {\n delete queue[id];\n };\n // Node.js 0.8-\n if (IS_NODE) {\n defer = function (id) {\n process.nextTick(runner(id));\n };\n // Sphere (JS game engine) Dispatch API\n } else if (Dispatch && Dispatch.now) {\n defer = function (id) {\n Dispatch.now(runner(id));\n };\n // Browsers with MessageChannel, includes WebWorkers\n // except iOS - https://github.com/zloirock/core-js/issues/624\n } else if (MessageChannel && !IS_IOS) {\n channel = new MessageChannel();\n port = channel.port2;\n channel.port1.onmessage = eventListener;\n defer = bind(port.postMessage, port);\n // Browsers with postMessage, skip WebWorkers\n // IE8 has postMessage, but it's sync & typeof its postMessage is 'object'\n } else if (\n global.addEventListener &&\n isCallable(global.postMessage) &&\n !global.importScripts &&\n $location && $location.protocol !== 'file:' &&\n !fails(globalPostMessageDefer)\n ) {\n defer = globalPostMessageDefer;\n global.addEventListener('message', eventListener, false);\n // IE8-\n } else if (ONREADYSTATECHANGE in createElement('script')) {\n defer = function (id) {\n html.appendChild(createElement('script'))[ONREADYSTATECHANGE] = function () {\n html.removeChild(this);\n run(id);\n };\n };\n // Rest old browsers\n } else {\n defer = function (id) {\n setTimeout(runner(id), 0);\n };\n }\n}\n\nmodule.exports = {\n set: set,\n clear: clear\n};\n","'use strict';\nvar isConstructor = require('../internals/is-constructor');\nvar tryToString = require('../internals/try-to-string');\n\nvar $TypeError = TypeError;\n\n// `Assert: IsConstructor(argument) is true`\nmodule.exports = function (argument) {\n if (isConstructor(argument)) return argument;\n throw new $TypeError(tryToString(argument) + ' is not a constructor');\n};\n","'use strict';\nvar anObject = require('../internals/an-object');\nvar aConstructor = require('../internals/a-constructor');\nvar isNullOrUndefined = require('../internals/is-null-or-undefined');\nvar wellKnownSymbol = require('../internals/well-known-symbol');\n\nvar SPECIES = wellKnownSymbol('species');\n\n// `SpeciesConstructor` abstract operation\n// https://tc39.es/ecma262/#sec-speciesconstructor\nmodule.exports = function (O, defaultConstructor) {\n var C = anObject(O).constructor;\n var S;\n return C === undefined || isNullOrUndefined(S = anObject(C)[SPECIES]) ? defaultConstructor : aConstructor(S);\n};\n","'use strict';\nvar userAgent = require('../internals/engine-user-agent');\n\n// eslint-disable-next-line redos/no-vulnerable -- safe\nmodule.exports = /(?:ipad|iphone|ipod).*applewebkit/i.test(userAgent);\n","'use strict';\nvar Queue = function () {\n this.head = null;\n this.tail = null;\n};\n\nQueue.prototype = {\n add: function (item) {\n var entry = { item: item, next: null };\n var tail = this.tail;\n if (tail) tail.next = entry;\n else this.head = entry;\n this.tail = entry;\n },\n get: function () {\n var entry = this.head;\n if (entry) {\n var next = this.head = entry.next;\n if (next === null) this.tail = null;\n return entry.item;\n }\n }\n};\n\nmodule.exports = Queue;\n","'use strict';\nvar global = require('../internals/global');\nvar bind = require('../internals/function-bind-context');\nvar getOwnPropertyDescriptor = require('../internals/object-get-own-property-descriptor').f;\nvar macrotask = require('../internals/task').set;\nvar Queue = require('../internals/queue');\nvar IS_IOS = require('../internals/engine-is-ios');\nvar IS_IOS_PEBBLE = require('../internals/engine-is-ios-pebble');\nvar IS_WEBOS_WEBKIT = require('../internals/engine-is-webos-webkit');\nvar IS_NODE = require('../internals/engine-is-node');\n\nvar MutationObserver = global.MutationObserver || global.WebKitMutationObserver;\nvar document = global.document;\nvar process = global.process;\nvar Promise = global.Promise;\n// Node.js 11 shows ExperimentalWarning on getting `queueMicrotask`\nvar queueMicrotaskDescriptor = getOwnPropertyDescriptor(global, 'queueMicrotask');\nvar microtask = queueMicrotaskDescriptor && queueMicrotaskDescriptor.value;\nvar notify, toggle, node, promise, then;\n\n// modern engines have queueMicrotask method\nif (!microtask) {\n var queue = new Queue();\n\n var flush = function () {\n var parent, fn;\n if (IS_NODE && (parent = process.domain)) parent.exit();\n while (fn = queue.get()) try {\n fn();\n } catch (error) {\n if (queue.head) notify();\n throw error;\n }\n if (parent) parent.enter();\n };\n\n // browsers with MutationObserver, except iOS - https://github.com/zloirock/core-js/issues/339\n // also except WebOS Webkit https://github.com/zloirock/core-js/issues/898\n if (!IS_IOS && !IS_NODE && !IS_WEBOS_WEBKIT && MutationObserver && document) {\n toggle = true;\n node = document.createTextNode('');\n new MutationObserver(flush).observe(node, { characterData: true });\n notify = function () {\n node.data = toggle = !toggle;\n };\n // environments with maybe non-completely correct, but existent Promise\n } else if (!IS_IOS_PEBBLE && Promise && Promise.resolve) {\n // Promise.resolve without an argument throws an error in LG WebOS 2\n promise = Promise.resolve(undefined);\n // workaround of WebKit ~ iOS Safari 10.1 bug\n promise.constructor = Promise;\n then = bind(promise.then, promise);\n notify = function () {\n then(flush);\n };\n // Node.js without promises\n } else if (IS_NODE) {\n notify = function () {\n process.nextTick(flush);\n };\n // for other environments - macrotask based on:\n // - setImmediate\n // - MessageChannel\n // - window.postMessage\n // - onreadystatechange\n // - setTimeout\n } else {\n // `webpack` dev server bug on IE global methods - use bind(fn, global)\n macrotask = bind(macrotask, global);\n notify = function () {\n macrotask(flush);\n };\n }\n\n microtask = function (fn) {\n if (!queue.head) notify();\n queue.add(fn);\n };\n}\n\nmodule.exports = microtask;\n","'use strict';\nvar userAgent = require('../internals/engine-user-agent');\n\nmodule.exports = /ipad|iphone|ipod/i.test(userAgent) && typeof Pebble != 'undefined';\n","'use strict';\nvar userAgent = require('../internals/engine-user-agent');\n\nmodule.exports = /web0s(?!.*chrome)/i.test(userAgent);\n","'use strict';\nmodule.exports = function (exec) {\n try {\n return { error: false, value: exec() };\n } catch (error) {\n return { error: true, value: error };\n }\n};\n","'use strict';\nvar global = require('../internals/global');\n\nmodule.exports = global.Promise;\n","'use strict';\n/* global Deno -- Deno case */\nmodule.exports = typeof Deno == 'object' && Deno && typeof Deno.version == 'object';\n","'use strict';\nvar IS_DENO = require('../internals/engine-is-deno');\nvar IS_NODE = require('../internals/engine-is-node');\n\nmodule.exports = !IS_DENO && !IS_NODE\n && typeof window == 'object'\n && typeof document == 'object';\n","'use strict';\nvar global = require('../internals/global');\nvar NativePromiseConstructor = require('../internals/promise-native-constructor');\nvar isCallable = require('../internals/is-callable');\nvar isForced = require('../internals/is-forced');\nvar inspectSource = require('../internals/inspect-source');\nvar wellKnownSymbol = require('../internals/well-known-symbol');\nvar IS_BROWSER = require('../internals/engine-is-browser');\nvar IS_DENO = require('../internals/engine-is-deno');\nvar IS_PURE = require('../internals/is-pure');\nvar V8_VERSION = require('../internals/engine-v8-version');\n\nvar NativePromisePrototype = NativePromiseConstructor && NativePromiseConstructor.prototype;\nvar SPECIES = wellKnownSymbol('species');\nvar SUBCLASSING = false;\nvar NATIVE_PROMISE_REJECTION_EVENT = isCallable(global.PromiseRejectionEvent);\n\nvar FORCED_PROMISE_CONSTRUCTOR = isForced('Promise', function () {\n var PROMISE_CONSTRUCTOR_SOURCE = inspectSource(NativePromiseConstructor);\n var GLOBAL_CORE_JS_PROMISE = PROMISE_CONSTRUCTOR_SOURCE !== String(NativePromiseConstructor);\n // V8 6.6 (Node 10 and Chrome 66) have a bug with resolving custom thenables\n // https://bugs.chromium.org/p/chromium/issues/detail?id=830565\n // We can't detect it synchronously, so just check versions\n if (!GLOBAL_CORE_JS_PROMISE && V8_VERSION === 66) return true;\n // We need Promise#{ catch, finally } in the pure version for preventing prototype pollution\n if (IS_PURE && !(NativePromisePrototype['catch'] && NativePromisePrototype['finally'])) return true;\n // We can't use @@species feature detection in V8 since it causes\n // deoptimization and performance degradation\n // https://github.com/zloirock/core-js/issues/679\n if (!V8_VERSION || V8_VERSION < 51 || !/native code/.test(PROMISE_CONSTRUCTOR_SOURCE)) {\n // Detect correctness of subclassing with @@species support\n var promise = new NativePromiseConstructor(function (resolve) { resolve(1); });\n var FakePromise = function (exec) {\n exec(function () { /* empty */ }, function () { /* empty */ });\n };\n var constructor = promise.constructor = {};\n constructor[SPECIES] = FakePromise;\n SUBCLASSING = promise.then(function () { /* empty */ }) instanceof FakePromise;\n if (!SUBCLASSING) return true;\n // Unhandled rejections tracking support, NodeJS Promise without it fails @@species test\n } return !GLOBAL_CORE_JS_PROMISE && (IS_BROWSER || IS_DENO) && !NATIVE_PROMISE_REJECTION_EVENT;\n});\n\nmodule.exports = {\n CONSTRUCTOR: FORCED_PROMISE_CONSTRUCTOR,\n REJECTION_EVENT: NATIVE_PROMISE_REJECTION_EVENT,\n SUBCLASSING: SUBCLASSING\n};\n","'use strict';\nvar aCallable = require('../internals/a-callable');\n\nvar $TypeError = TypeError;\n\nvar PromiseCapability = function (C) {\n var resolve, reject;\n this.promise = new C(function ($$resolve, $$reject) {\n if (resolve !== undefined || reject !== undefined) throw new $TypeError('Bad Promise constructor');\n resolve = $$resolve;\n reject = $$reject;\n });\n this.resolve = aCallable(resolve);\n this.reject = aCallable(reject);\n};\n\n// `NewPromiseCapability` abstract operation\n// https://tc39.es/ecma262/#sec-newpromisecapability\nmodule.exports.f = function (C) {\n return new PromiseCapability(C);\n};\n","'use strict';\nvar $ = require('../internals/export');\nvar IS_PURE = require('../internals/is-pure');\nvar IS_NODE = require('../internals/engine-is-node');\nvar global = require('../internals/global');\nvar call = require('../internals/function-call');\nvar defineBuiltIn = require('../internals/define-built-in');\nvar setPrototypeOf = require('../internals/object-set-prototype-of');\nvar setToStringTag = require('../internals/set-to-string-tag');\nvar setSpecies = require('../internals/set-species');\nvar aCallable = require('../internals/a-callable');\nvar isCallable = require('../internals/is-callable');\nvar isObject = require('../internals/is-object');\nvar anInstance = require('../internals/an-instance');\nvar speciesConstructor = require('../internals/species-constructor');\nvar task = require('../internals/task').set;\nvar microtask = require('../internals/microtask');\nvar hostReportErrors = require('../internals/host-report-errors');\nvar perform = require('../internals/perform');\nvar Queue = require('../internals/queue');\nvar InternalStateModule = require('../internals/internal-state');\nvar NativePromiseConstructor = require('../internals/promise-native-constructor');\nvar PromiseConstructorDetection = require('../internals/promise-constructor-detection');\nvar newPromiseCapabilityModule = require('../internals/new-promise-capability');\n\nvar PROMISE = 'Promise';\nvar FORCED_PROMISE_CONSTRUCTOR = PromiseConstructorDetection.CONSTRUCTOR;\nvar NATIVE_PROMISE_REJECTION_EVENT = PromiseConstructorDetection.REJECTION_EVENT;\nvar NATIVE_PROMISE_SUBCLASSING = PromiseConstructorDetection.SUBCLASSING;\nvar getInternalPromiseState = InternalStateModule.getterFor(PROMISE);\nvar setInternalState = InternalStateModule.set;\nvar NativePromisePrototype = NativePromiseConstructor && NativePromiseConstructor.prototype;\nvar PromiseConstructor = NativePromiseConstructor;\nvar PromisePrototype = NativePromisePrototype;\nvar TypeError = global.TypeError;\nvar document = global.document;\nvar process = global.process;\nvar newPromiseCapability = newPromiseCapabilityModule.f;\nvar newGenericPromiseCapability = newPromiseCapability;\n\nvar DISPATCH_EVENT = !!(document && document.createEvent && global.dispatchEvent);\nvar UNHANDLED_REJECTION = 'unhandledrejection';\nvar REJECTION_HANDLED = 'rejectionhandled';\nvar PENDING = 0;\nvar FULFILLED = 1;\nvar REJECTED = 2;\nvar HANDLED = 1;\nvar UNHANDLED = 2;\n\nvar Internal, OwnPromiseCapability, PromiseWrapper, nativeThen;\n\n// helpers\nvar isThenable = function (it) {\n var then;\n return isObject(it) && isCallable(then = it.then) ? then : false;\n};\n\nvar callReaction = function (reaction, state) {\n var value = state.value;\n var ok = state.state === FULFILLED;\n var handler = ok ? reaction.ok : reaction.fail;\n var resolve = reaction.resolve;\n var reject = reaction.reject;\n var domain = reaction.domain;\n var result, then, exited;\n try {\n if (handler) {\n if (!ok) {\n if (state.rejection === UNHANDLED) onHandleUnhandled(state);\n state.rejection = HANDLED;\n }\n if (handler === true) result = value;\n else {\n if (domain) domain.enter();\n result = handler(value); // can throw\n if (domain) {\n domain.exit();\n exited = true;\n }\n }\n if (result === reaction.promise) {\n reject(new TypeError('Promise-chain cycle'));\n } else if (then = isThenable(result)) {\n call(then, result, resolve, reject);\n } else resolve(result);\n } else reject(value);\n } catch (error) {\n if (domain && !exited) domain.exit();\n reject(error);\n }\n};\n\nvar notify = function (state, isReject) {\n if (state.notified) return;\n state.notified = true;\n microtask(function () {\n var reactions = state.reactions;\n var reaction;\n while (reaction = reactions.get()) {\n callReaction(reaction, state);\n }\n state.notified = false;\n if (isReject && !state.rejection) onUnhandled(state);\n });\n};\n\nvar dispatchEvent = function (name, promise, reason) {\n var event, handler;\n if (DISPATCH_EVENT) {\n event = document.createEvent('Event');\n event.promise = promise;\n event.reason = reason;\n event.initEvent(name, false, true);\n global.dispatchEvent(event);\n } else event = { promise: promise, reason: reason };\n if (!NATIVE_PROMISE_REJECTION_EVENT && (handler = global['on' + name])) handler(event);\n else if (name === UNHANDLED_REJECTION) hostReportErrors('Unhandled promise rejection', reason);\n};\n\nvar onUnhandled = function (state) {\n call(task, global, function () {\n var promise = state.facade;\n var value = state.value;\n var IS_UNHANDLED = isUnhandled(state);\n var result;\n if (IS_UNHANDLED) {\n result = perform(function () {\n if (IS_NODE) {\n process.emit('unhandledRejection', value, promise);\n } else dispatchEvent(UNHANDLED_REJECTION, promise, value);\n });\n // Browsers should not trigger `rejectionHandled` event if it was handled here, NodeJS - should\n state.rejection = IS_NODE || isUnhandled(state) ? UNHANDLED : HANDLED;\n if (result.error) throw result.value;\n }\n });\n};\n\nvar isUnhandled = function (state) {\n return state.rejection !== HANDLED && !state.parent;\n};\n\nvar onHandleUnhandled = function (state) {\n call(task, global, function () {\n var promise = state.facade;\n if (IS_NODE) {\n process.emit('rejectionHandled', promise);\n } else dispatchEvent(REJECTION_HANDLED, promise, state.value);\n });\n};\n\nvar bind = function (fn, state, unwrap) {\n return function (value) {\n fn(state, value, unwrap);\n };\n};\n\nvar internalReject = function (state, value, unwrap) {\n if (state.done) return;\n state.done = true;\n if (unwrap) state = unwrap;\n state.value = value;\n state.state = REJECTED;\n notify(state, true);\n};\n\nvar internalResolve = function (state, value, unwrap) {\n if (state.done) return;\n state.done = true;\n if (unwrap) state = unwrap;\n try {\n if (state.facade === value) throw new TypeError(\"Promise can't be resolved itself\");\n var then = isThenable(value);\n if (then) {\n microtask(function () {\n var wrapper = { done: false };\n try {\n call(then, value,\n bind(internalResolve, wrapper, state),\n bind(internalReject, wrapper, state)\n );\n } catch (error) {\n internalReject(wrapper, error, state);\n }\n });\n } else {\n state.value = value;\n state.state = FULFILLED;\n notify(state, false);\n }\n } catch (error) {\n internalReject({ done: false }, error, state);\n }\n};\n\n// constructor polyfill\nif (FORCED_PROMISE_CONSTRUCTOR) {\n // 25.4.3.1 Promise(executor)\n PromiseConstructor = function Promise(executor) {\n anInstance(this, PromisePrototype);\n aCallable(executor);\n call(Internal, this);\n var state = getInternalPromiseState(this);\n try {\n executor(bind(internalResolve, state), bind(internalReject, state));\n } catch (error) {\n internalReject(state, error);\n }\n };\n\n PromisePrototype = PromiseConstructor.prototype;\n\n // eslint-disable-next-line no-unused-vars -- required for `.length`\n Internal = function Promise(executor) {\n setInternalState(this, {\n type: PROMISE,\n done: false,\n notified: false,\n parent: false,\n reactions: new Queue(),\n rejection: false,\n state: PENDING,\n value: undefined\n });\n };\n\n // `Promise.prototype.then` method\n // https://tc39.es/ecma262/#sec-promise.prototype.then\n Internal.prototype = defineBuiltIn(PromisePrototype, 'then', function then(onFulfilled, onRejected) {\n var state = getInternalPromiseState(this);\n var reaction = newPromiseCapability(speciesConstructor(this, PromiseConstructor));\n state.parent = true;\n reaction.ok = isCallable(onFulfilled) ? onFulfilled : true;\n reaction.fail = isCallable(onRejected) && onRejected;\n reaction.domain = IS_NODE ? process.domain : undefined;\n if (state.state === PENDING) state.reactions.add(reaction);\n else microtask(function () {\n callReaction(reaction, state);\n });\n return reaction.promise;\n });\n\n OwnPromiseCapability = function () {\n var promise = new Internal();\n var state = getInternalPromiseState(promise);\n this.promise = promise;\n this.resolve = bind(internalResolve, state);\n this.reject = bind(internalReject, state);\n };\n\n newPromiseCapabilityModule.f = newPromiseCapability = function (C) {\n return C === PromiseConstructor || C === PromiseWrapper\n ? new OwnPromiseCapability(C)\n : newGenericPromiseCapability(C);\n };\n\n if (!IS_PURE && isCallable(NativePromiseConstructor) && NativePromisePrototype !== Object.prototype) {\n nativeThen = NativePromisePrototype.then;\n\n if (!NATIVE_PROMISE_SUBCLASSING) {\n // make `Promise#then` return a polyfilled `Promise` for native promise-based APIs\n defineBuiltIn(NativePromisePrototype, 'then', function then(onFulfilled, onRejected) {\n var that = this;\n return new PromiseConstructor(function (resolve, reject) {\n call(nativeThen, that, resolve, reject);\n }).then(onFulfilled, onRejected);\n // https://github.com/zloirock/core-js/issues/640\n }, { unsafe: true });\n }\n\n // make `.constructor === Promise` work for native promise-based APIs\n try {\n delete NativePromisePrototype.constructor;\n } catch (error) { /* empty */ }\n\n // make `instanceof Promise` work for native promise-based APIs\n if (setPrototypeOf) {\n setPrototypeOf(NativePromisePrototype, PromisePrototype);\n }\n }\n}\n\n$({ global: true, constructor: true, wrap: true, forced: FORCED_PROMISE_CONSTRUCTOR }, {\n Promise: PromiseConstructor\n});\n\nsetToStringTag(PromiseConstructor, PROMISE, false, true);\nsetSpecies(PROMISE);\n","'use strict';\nmodule.exports = function (a, b) {\n try {\n // eslint-disable-next-line no-console -- safe\n arguments.length === 1 ? console.error(a) : console.error(a, b);\n } catch (error) { /* empty */ }\n};\n","'use strict';\nvar NativePromiseConstructor = require('../internals/promise-native-constructor');\nvar checkCorrectnessOfIteration = require('../internals/check-correctness-of-iteration');\nvar FORCED_PROMISE_CONSTRUCTOR = require('../internals/promise-constructor-detection').CONSTRUCTOR;\n\nmodule.exports = FORCED_PROMISE_CONSTRUCTOR || !checkCorrectnessOfIteration(function (iterable) {\n NativePromiseConstructor.all(iterable).then(undefined, function () { /* empty */ });\n});\n","'use strict';\nvar $ = require('../internals/export');\nvar call = require('../internals/function-call');\nvar aCallable = require('../internals/a-callable');\nvar newPromiseCapabilityModule = require('../internals/new-promise-capability');\nvar perform = require('../internals/perform');\nvar iterate = require('../internals/iterate');\nvar PROMISE_STATICS_INCORRECT_ITERATION = require('../internals/promise-statics-incorrect-iteration');\n\n// `Promise.all` method\n// https://tc39.es/ecma262/#sec-promise.all\n$({ target: 'Promise', stat: true, forced: PROMISE_STATICS_INCORRECT_ITERATION }, {\n all: function all(iterable) {\n var C = this;\n var capability = newPromiseCapabilityModule.f(C);\n var resolve = capability.resolve;\n var reject = capability.reject;\n var result = perform(function () {\n var $promiseResolve = aCallable(C.resolve);\n var values = [];\n var counter = 0;\n var remaining = 1;\n iterate(iterable, function (promise) {\n var index = counter++;\n var alreadyCalled = false;\n remaining++;\n call($promiseResolve, C, promise).then(function (value) {\n if (alreadyCalled) return;\n alreadyCalled = true;\n values[index] = value;\n --remaining || resolve(values);\n }, reject);\n });\n --remaining || resolve(values);\n });\n if (result.error) reject(result.value);\n return capability.promise;\n }\n});\n","'use strict';\nvar $ = require('../internals/export');\nvar IS_PURE = require('../internals/is-pure');\nvar FORCED_PROMISE_CONSTRUCTOR = require('../internals/promise-constructor-detection').CONSTRUCTOR;\nvar NativePromiseConstructor = require('../internals/promise-native-constructor');\nvar getBuiltIn = require('../internals/get-built-in');\nvar isCallable = require('../internals/is-callable');\nvar defineBuiltIn = require('../internals/define-built-in');\n\nvar NativePromisePrototype = NativePromiseConstructor && NativePromiseConstructor.prototype;\n\n// `Promise.prototype.catch` method\n// https://tc39.es/ecma262/#sec-promise.prototype.catch\n$({ target: 'Promise', proto: true, forced: FORCED_PROMISE_CONSTRUCTOR, real: true }, {\n 'catch': function (onRejected) {\n return this.then(undefined, onRejected);\n }\n});\n\n// makes sure that native promise-based APIs `Promise#catch` properly works with patched `Promise#then`\nif (!IS_PURE && isCallable(NativePromiseConstructor)) {\n var method = getBuiltIn('Promise').prototype['catch'];\n if (NativePromisePrototype['catch'] !== method) {\n defineBuiltIn(NativePromisePrototype, 'catch', method, { unsafe: true });\n }\n}\n","'use strict';\nvar $ = require('../internals/export');\nvar call = require('../internals/function-call');\nvar aCallable = require('../internals/a-callable');\nvar newPromiseCapabilityModule = require('../internals/new-promise-capability');\nvar perform = require('../internals/perform');\nvar iterate = require('../internals/iterate');\nvar PROMISE_STATICS_INCORRECT_ITERATION = require('../internals/promise-statics-incorrect-iteration');\n\n// `Promise.race` method\n// https://tc39.es/ecma262/#sec-promise.race\n$({ target: 'Promise', stat: true, forced: PROMISE_STATICS_INCORRECT_ITERATION }, {\n race: function race(iterable) {\n var C = this;\n var capability = newPromiseCapabilityModule.f(C);\n var reject = capability.reject;\n var result = perform(function () {\n var $promiseResolve = aCallable(C.resolve);\n iterate(iterable, function (promise) {\n call($promiseResolve, C, promise).then(capability.resolve, reject);\n });\n });\n if (result.error) reject(result.value);\n return capability.promise;\n }\n});\n","'use strict';\nvar $ = require('../internals/export');\nvar call = require('../internals/function-call');\nvar newPromiseCapabilityModule = require('../internals/new-promise-capability');\nvar FORCED_PROMISE_CONSTRUCTOR = require('../internals/promise-constructor-detection').CONSTRUCTOR;\n\n// `Promise.reject` method\n// https://tc39.es/ecma262/#sec-promise.reject\n$({ target: 'Promise', stat: true, forced: FORCED_PROMISE_CONSTRUCTOR }, {\n reject: function reject(r) {\n var capability = newPromiseCapabilityModule.f(this);\n call(capability.reject, undefined, r);\n return capability.promise;\n }\n});\n","'use strict';\nvar anObject = require('../internals/an-object');\nvar isObject = require('../internals/is-object');\nvar newPromiseCapability = require('../internals/new-promise-capability');\n\nmodule.exports = function (C, x) {\n anObject(C);\n if (isObject(x) && x.constructor === C) return x;\n var promiseCapability = newPromiseCapability.f(C);\n var resolve = promiseCapability.resolve;\n resolve(x);\n return promiseCapability.promise;\n};\n","'use strict';\nvar $ = require('../internals/export');\nvar getBuiltIn = require('../internals/get-built-in');\nvar IS_PURE = require('../internals/is-pure');\nvar NativePromiseConstructor = require('../internals/promise-native-constructor');\nvar FORCED_PROMISE_CONSTRUCTOR = require('../internals/promise-constructor-detection').CONSTRUCTOR;\nvar promiseResolve = require('../internals/promise-resolve');\n\nvar PromiseConstructorWrapper = getBuiltIn('Promise');\nvar CHECK_WRAPPER = IS_PURE && !FORCED_PROMISE_CONSTRUCTOR;\n\n// `Promise.resolve` method\n// https://tc39.es/ecma262/#sec-promise.resolve\n$({ target: 'Promise', stat: true, forced: IS_PURE || FORCED_PROMISE_CONSTRUCTOR }, {\n resolve: function resolve(x) {\n return promiseResolve(CHECK_WRAPPER && this === PromiseConstructorWrapper ? NativePromiseConstructor : this, x);\n }\n});\n","'use strict';\nmodule.exports = true;\n","'use strict';\nvar $ = require('../internals/export');\nvar call = require('../internals/function-call');\nvar aCallable = require('../internals/a-callable');\nvar newPromiseCapabilityModule = require('../internals/new-promise-capability');\nvar perform = require('../internals/perform');\nvar iterate = require('../internals/iterate');\nvar PROMISE_STATICS_INCORRECT_ITERATION = require('../internals/promise-statics-incorrect-iteration');\n\n// `Promise.allSettled` method\n// https://tc39.es/ecma262/#sec-promise.allsettled\n$({ target: 'Promise', stat: true, forced: PROMISE_STATICS_INCORRECT_ITERATION }, {\n allSettled: function allSettled(iterable) {\n var C = this;\n var capability = newPromiseCapabilityModule.f(C);\n var resolve = capability.resolve;\n var reject = capability.reject;\n var result = perform(function () {\n var promiseResolve = aCallable(C.resolve);\n var values = [];\n var counter = 0;\n var remaining = 1;\n iterate(iterable, function (promise) {\n var index = counter++;\n var alreadyCalled = false;\n remaining++;\n call(promiseResolve, C, promise).then(function (value) {\n if (alreadyCalled) return;\n alreadyCalled = true;\n values[index] = { status: 'fulfilled', value: value };\n --remaining || resolve(values);\n }, function (error) {\n if (alreadyCalled) return;\n alreadyCalled = true;\n values[index] = { status: 'rejected', reason: error };\n --remaining || resolve(values);\n });\n });\n --remaining || resolve(values);\n });\n if (result.error) reject(result.value);\n return capability.promise;\n }\n});\n","'use strict';\nvar $ = require('../internals/export');\nvar call = require('../internals/function-call');\nvar aCallable = require('../internals/a-callable');\nvar getBuiltIn = require('../internals/get-built-in');\nvar newPromiseCapabilityModule = require('../internals/new-promise-capability');\nvar perform = require('../internals/perform');\nvar iterate = require('../internals/iterate');\nvar PROMISE_STATICS_INCORRECT_ITERATION = require('../internals/promise-statics-incorrect-iteration');\n\nvar PROMISE_ANY_ERROR = 'No one promise resolved';\n\n// `Promise.any` method\n// https://tc39.es/ecma262/#sec-promise.any\n$({ target: 'Promise', stat: true, forced: PROMISE_STATICS_INCORRECT_ITERATION }, {\n any: function any(iterable) {\n var C = this;\n var AggregateError = getBuiltIn('AggregateError');\n var capability = newPromiseCapabilityModule.f(C);\n var resolve = capability.resolve;\n var reject = capability.reject;\n var result = perform(function () {\n var promiseResolve = aCallable(C.resolve);\n var errors = [];\n var counter = 0;\n var remaining = 1;\n var alreadyResolved = false;\n iterate(iterable, function (promise) {\n var index = counter++;\n var alreadyRejected = false;\n remaining++;\n call(promiseResolve, C, promise).then(function (value) {\n if (alreadyRejected || alreadyResolved) return;\n alreadyResolved = true;\n resolve(value);\n }, function (error) {\n if (alreadyRejected || alreadyResolved) return;\n alreadyRejected = true;\n errors[index] = error;\n --remaining || reject(new AggregateError(errors, PROMISE_ANY_ERROR));\n });\n });\n --remaining || reject(new AggregateError(errors, PROMISE_ANY_ERROR));\n });\n if (result.error) reject(result.value);\n return capability.promise;\n }\n});\n","'use strict';\nvar $ = require('../internals/export');\nvar IS_PURE = require('../internals/is-pure');\nvar NativePromiseConstructor = require('../internals/promise-native-constructor');\nvar fails = require('../internals/fails');\nvar getBuiltIn = require('../internals/get-built-in');\nvar isCallable = require('../internals/is-callable');\nvar speciesConstructor = require('../internals/species-constructor');\nvar promiseResolve = require('../internals/promise-resolve');\nvar defineBuiltIn = require('../internals/define-built-in');\n\nvar NativePromisePrototype = NativePromiseConstructor && NativePromiseConstructor.prototype;\n\n// Safari bug https://bugs.webkit.org/show_bug.cgi?id=200829\nvar NON_GENERIC = !!NativePromiseConstructor && fails(function () {\n // eslint-disable-next-line unicorn/no-thenable -- required for testing\n NativePromisePrototype['finally'].call({ then: function () { /* empty */ } }, function () { /* empty */ });\n});\n\n// `Promise.prototype.finally` method\n// https://tc39.es/ecma262/#sec-promise.prototype.finally\n$({ target: 'Promise', proto: true, real: true, forced: NON_GENERIC }, {\n 'finally': function (onFinally) {\n var C = speciesConstructor(this, getBuiltIn('Promise'));\n var isFunction = isCallable(onFinally);\n return this.then(\n isFunction ? function (x) {\n return promiseResolve(C, onFinally()).then(function () { return x; });\n } : onFinally,\n isFunction ? function (e) {\n return promiseResolve(C, onFinally()).then(function () { throw e; });\n } : onFinally\n );\n }\n});\n\n// makes sure that native promise-based APIs `Promise#finally` properly works with patched `Promise#then`\nif (!IS_PURE && isCallable(NativePromiseConstructor)) {\n var method = getBuiltIn('Promise').prototype['finally'];\n if (NativePromisePrototype['finally'] !== method) {\n defineBuiltIn(NativePromisePrototype, 'finally', method, { unsafe: true });\n }\n}\n","'use strict';\nrequire('../../modules/es.aggregate-error');\nrequire('../../modules/es.array.iterator');\nrequire('../../modules/es.object.to-string');\nrequire('../../modules/es.promise');\nrequire('../../modules/es.promise.all-settled');\nrequire('../../modules/es.promise.any');\nrequire('../../modules/es.promise.finally');\nrequire('../../modules/es.string.iterator');\nvar path = require('../../internals/path');\n\nmodule.exports = path.Promise;\n","'use strict';\nvar parent = require('../../es/promise');\nrequire('../../modules/web.dom-collections.iterator');\n\nmodule.exports = parent;\n","'use strict';\nvar $ = require('../internals/export');\nvar newPromiseCapabilityModule = require('../internals/new-promise-capability');\n\n// `Promise.withResolvers` method\n// https://github.com/tc39/proposal-promise-with-resolvers\n$({ target: 'Promise', stat: true }, {\n withResolvers: function withResolvers() {\n var promiseCapability = newPromiseCapabilityModule.f(this);\n return {\n promise: promiseCapability.promise,\n resolve: promiseCapability.resolve,\n reject: promiseCapability.reject\n };\n }\n});\n","'use strict';\nvar parent = require('../../stable/promise');\nrequire('../../modules/esnext.promise.with-resolvers');\n\nmodule.exports = parent;\n","'use strict';\n// TODO: Remove from `core-js@4`\nvar $ = require('../internals/export');\nvar newPromiseCapabilityModule = require('../internals/new-promise-capability');\nvar perform = require('../internals/perform');\n\n// `Promise.try` method\n// https://github.com/tc39/proposal-promise-try\n$({ target: 'Promise', stat: true, forced: true }, {\n 'try': function (callbackfn) {\n var promiseCapability = newPromiseCapabilityModule.f(this);\n var result = perform(callbackfn);\n (result.error ? promiseCapability.reject : promiseCapability.resolve)(result.value);\n return promiseCapability.promise;\n }\n});\n","'use strict';\nvar parent = require('../../actual/promise');\n// TODO: Remove from `core-js@4`\nrequire('../../modules/esnext.aggregate-error');\nrequire('../../modules/esnext.promise.all-settled');\nrequire('../../modules/esnext.promise.try');\nrequire('../../modules/esnext.promise.any');\n\nmodule.exports = parent;\n","'use strict';\nmodule.exports = require('../../full/promise');\n","'use strict';\nmodule.exports = require('../../full/instance/reverse');\n","'use strict';\nvar parent = require('../../stable/instance/reverse');\n\nmodule.exports = parent;\n","var _typeof = require(\"./typeof.js\")[\"default\"];\nvar _Object$defineProperty = require(\"core-js-pure/features/object/define-property.js\");\nvar _Symbol = require(\"core-js-pure/features/symbol/index.js\");\nvar _Object$create = require(\"core-js-pure/features/object/create.js\");\nvar _Object$getPrototypeOf = require(\"core-js-pure/features/object/get-prototype-of.js\");\nvar _forEachInstanceProperty = require(\"core-js-pure/features/instance/for-each.js\");\nvar _pushInstanceProperty = require(\"core-js-pure/features/instance/push.js\");\nvar _Object$setPrototypeOf = require(\"core-js-pure/features/object/set-prototype-of.js\");\nvar _Promise = require(\"core-js-pure/features/promise/index.js\");\nvar _reverseInstanceProperty = require(\"core-js-pure/features/instance/reverse.js\");\nvar _sliceInstanceProperty = require(\"core-js-pure/features/instance/slice.js\");\nfunction _regeneratorRuntime() {\n \"use strict\"; /*! regenerator-runtime -- Copyright (c) 2014-present, Facebook, Inc. -- license (MIT): https://github.com/facebook/regenerator/blob/main/LICENSE */\n module.exports = _regeneratorRuntime = function _regeneratorRuntime() {\n return e;\n }, module.exports.__esModule = true, module.exports[\"default\"] = module.exports;\n var t,\n e = {},\n r = Object.prototype,\n n = r.hasOwnProperty,\n o = _Object$defineProperty || function (t, e, r) {\n t[e] = r.value;\n },\n i = \"function\" == typeof _Symbol ? _Symbol : {},\n a = i.iterator || \"@@iterator\",\n c = i.asyncIterator || \"@@asyncIterator\",\n u = i.toStringTag || \"@@toStringTag\";\n function define(t, e, r) {\n return _Object$defineProperty(t, e, {\n value: r,\n enumerable: !0,\n configurable: !0,\n writable: !0\n }), t[e];\n }\n try {\n define({}, \"\");\n } catch (t) {\n define = function define(t, e, r) {\n return t[e] = r;\n };\n }\n function wrap(t, e, r, n) {\n var i = e && e.prototype instanceof Generator ? e : Generator,\n a = _Object$create(i.prototype),\n c = new Context(n || []);\n return o(a, \"_invoke\", {\n value: makeInvokeMethod(t, r, c)\n }), a;\n }\n function tryCatch(t, e, r) {\n try {\n return {\n type: \"normal\",\n arg: t.call(e, r)\n };\n } catch (t) {\n return {\n type: \"throw\",\n arg: t\n };\n }\n }\n e.wrap = wrap;\n var h = \"suspendedStart\",\n l = \"suspendedYield\",\n f = \"executing\",\n s = \"completed\",\n y = {};\n function Generator() {}\n function GeneratorFunction() {}\n function GeneratorFunctionPrototype() {}\n var p = {};\n define(p, a, function () {\n return this;\n });\n var d = _Object$getPrototypeOf,\n v = d && d(d(values([])));\n v && v !== r && n.call(v, a) && (p = v);\n var g = GeneratorFunctionPrototype.prototype = Generator.prototype = _Object$create(p);\n function defineIteratorMethods(t) {\n var _context;\n _forEachInstanceProperty(_context = [\"next\", \"throw\", \"return\"]).call(_context, function (e) {\n define(t, e, function (t) {\n return this._invoke(e, t);\n });\n });\n }\n function AsyncIterator(t, e) {\n function invoke(r, o, i, a) {\n var c = tryCatch(t[r], t, o);\n if (\"throw\" !== c.type) {\n var u = c.arg,\n h = u.value;\n return h && \"object\" == _typeof(h) && n.call(h, \"__await\") ? e.resolve(h.__await).then(function (t) {\n invoke(\"next\", t, i, a);\n }, function (t) {\n invoke(\"throw\", t, i, a);\n }) : e.resolve(h).then(function (t) {\n u.value = t, i(u);\n }, function (t) {\n return invoke(\"throw\", t, i, a);\n });\n }\n a(c.arg);\n }\n var r;\n o(this, \"_invoke\", {\n value: function value(t, n) {\n function callInvokeWithMethodAndArg() {\n return new e(function (e, r) {\n invoke(t, n, e, r);\n });\n }\n return r = r ? r.then(callInvokeWithMethodAndArg, callInvokeWithMethodAndArg) : callInvokeWithMethodAndArg();\n }\n });\n }\n function makeInvokeMethod(e, r, n) {\n var o = h;\n return function (i, a) {\n if (o === f) throw new Error(\"Generator is already running\");\n if (o === s) {\n if (\"throw\" === i) throw a;\n return {\n value: t,\n done: !0\n };\n }\n for (n.method = i, n.arg = a;;) {\n var c = n.delegate;\n if (c) {\n var u = maybeInvokeDelegate(c, n);\n if (u) {\n if (u === y) continue;\n return u;\n }\n }\n if (\"next\" === n.method) n.sent = n._sent = n.arg;else if (\"throw\" === n.method) {\n if (o === h) throw o = s, n.arg;\n n.dispatchException(n.arg);\n } else \"return\" === n.method && n.abrupt(\"return\", n.arg);\n o = f;\n var p = tryCatch(e, r, n);\n if (\"normal\" === p.type) {\n if (o = n.done ? s : l, p.arg === y) continue;\n return {\n value: p.arg,\n done: n.done\n };\n }\n \"throw\" === p.type && (o = s, n.method = \"throw\", n.arg = p.arg);\n }\n };\n }\n function maybeInvokeDelegate(e, r) {\n var n = r.method,\n o = e.iterator[n];\n if (o === t) return r.delegate = null, \"throw\" === n && e.iterator[\"return\"] && (r.method = \"return\", r.arg = t, maybeInvokeDelegate(e, r), \"throw\" === r.method) || \"return\" !== n && (r.method = \"throw\", r.arg = new TypeError(\"The iterator does not provide a '\" + n + \"' method\")), y;\n var i = tryCatch(o, e.iterator, r.arg);\n if (\"throw\" === i.type) return r.method = \"throw\", r.arg = i.arg, r.delegate = null, y;\n var a = i.arg;\n return a ? a.done ? (r[e.resultName] = a.value, r.next = e.nextLoc, \"return\" !== r.method && (r.method = \"next\", r.arg = t), r.delegate = null, y) : a : (r.method = \"throw\", r.arg = new TypeError(\"iterator result is not an object\"), r.delegate = null, y);\n }\n function pushTryEntry(t) {\n var _context2;\n var e = {\n tryLoc: t[0]\n };\n 1 in t && (e.catchLoc = t[1]), 2 in t && (e.finallyLoc = t[2], e.afterLoc = t[3]), _pushInstanceProperty(_context2 = this.tryEntries).call(_context2, e);\n }\n function resetTryEntry(t) {\n var e = t.completion || {};\n e.type = \"normal\", delete e.arg, t.completion = e;\n }\n function Context(t) {\n this.tryEntries = [{\n tryLoc: \"root\"\n }], _forEachInstanceProperty(t).call(t, pushTryEntry, this), this.reset(!0);\n }\n function values(e) {\n if (e || \"\" === e) {\n var r = e[a];\n if (r) return r.call(e);\n if (\"function\" == typeof e.next) return e;\n if (!isNaN(e.length)) {\n var o = -1,\n i = function next() {\n for (; ++o < e.length;) if (n.call(e, o)) return next.value = e[o], next.done = !1, next;\n return next.value = t, next.done = !0, next;\n };\n return i.next = i;\n }\n }\n throw new TypeError(_typeof(e) + \" is not iterable\");\n }\n return GeneratorFunction.prototype = GeneratorFunctionPrototype, o(g, \"constructor\", {\n value: GeneratorFunctionPrototype,\n configurable: !0\n }), o(GeneratorFunctionPrototype, \"constructor\", {\n value: GeneratorFunction,\n configurable: !0\n }), GeneratorFunction.displayName = define(GeneratorFunctionPrototype, u, \"GeneratorFunction\"), e.isGeneratorFunction = function (t) {\n var e = \"function\" == typeof t && t.constructor;\n return !!e && (e === GeneratorFunction || \"GeneratorFunction\" === (e.displayName || e.name));\n }, e.mark = function (t) {\n return _Object$setPrototypeOf ? _Object$setPrototypeOf(t, GeneratorFunctionPrototype) : (t.__proto__ = GeneratorFunctionPrototype, define(t, u, \"GeneratorFunction\")), t.prototype = _Object$create(g), t;\n }, e.awrap = function (t) {\n return {\n __await: t\n };\n }, defineIteratorMethods(AsyncIterator.prototype), define(AsyncIterator.prototype, c, function () {\n return this;\n }), e.AsyncIterator = AsyncIterator, e.async = function (t, r, n, o, i) {\n void 0 === i && (i = _Promise);\n var a = new AsyncIterator(wrap(t, r, n, o), i);\n return e.isGeneratorFunction(r) ? a : a.next().then(function (t) {\n return t.done ? t.value : a.next();\n });\n }, defineIteratorMethods(g), define(g, u, \"Generator\"), define(g, a, function () {\n return this;\n }), define(g, \"toString\", function () {\n return \"[object Generator]\";\n }), e.keys = function (t) {\n var e = Object(t),\n r = [];\n for (var n in e) _pushInstanceProperty(r).call(r, n);\n return _reverseInstanceProperty(r).call(r), function next() {\n for (; r.length;) {\n var t = r.pop();\n if (t in e) return next.value = t, next.done = !1, next;\n }\n return next.done = !0, next;\n };\n }, e.values = values, Context.prototype = {\n constructor: Context,\n reset: function reset(e) {\n var _context3;\n if (this.prev = 0, this.next = 0, this.sent = this._sent = t, this.done = !1, this.delegate = null, this.method = \"next\", this.arg = t, _forEachInstanceProperty(_context3 = this.tryEntries).call(_context3, resetTryEntry), !e) for (var r in this) \"t\" === r.charAt(0) && n.call(this, r) && !isNaN(+_sliceInstanceProperty(r).call(r, 1)) && (this[r] = t);\n },\n stop: function stop() {\n this.done = !0;\n var t = this.tryEntries[0].completion;\n if (\"throw\" === t.type) throw t.arg;\n return this.rval;\n },\n dispatchException: function dispatchException(e) {\n if (this.done) throw e;\n var r = this;\n function handle(n, o) {\n return a.type = \"throw\", a.arg = e, r.next = n, o && (r.method = \"next\", r.arg = t), !!o;\n }\n for (var o = this.tryEntries.length - 1; o >= 0; --o) {\n var i = this.tryEntries[o],\n a = i.completion;\n if (\"root\" === i.tryLoc) return handle(\"end\");\n if (i.tryLoc <= this.prev) {\n var c = n.call(i, \"catchLoc\"),\n u = n.call(i, \"finallyLoc\");\n if (c && u) {\n if (this.prev < i.catchLoc) return handle(i.catchLoc, !0);\n if (this.prev < i.finallyLoc) return handle(i.finallyLoc);\n } else if (c) {\n if (this.prev < i.catchLoc) return handle(i.catchLoc, !0);\n } else {\n if (!u) throw new Error(\"try statement without catch or finally\");\n if (this.prev < i.finallyLoc) return handle(i.finallyLoc);\n }\n }\n }\n },\n abrupt: function abrupt(t, e) {\n for (var r = this.tryEntries.length - 1; r >= 0; --r) {\n var o = this.tryEntries[r];\n if (o.tryLoc <= this.prev && n.call(o, \"finallyLoc\") && this.prev < o.finallyLoc) {\n var i = o;\n break;\n }\n }\n i && (\"break\" === t || \"continue\" === t) && i.tryLoc <= e && e <= i.finallyLoc && (i = null);\n var a = i ? i.completion : {};\n return a.type = t, a.arg = e, i ? (this.method = \"next\", this.next = i.finallyLoc, y) : this.complete(a);\n },\n complete: function complete(t, e) {\n if (\"throw\" === t.type) throw t.arg;\n return \"break\" === t.type || \"continue\" === t.type ? this.next = t.arg : \"return\" === t.type ? (this.rval = this.arg = t.arg, this.method = \"return\", this.next = \"end\") : \"normal\" === t.type && e && (this.next = e), y;\n },\n finish: function finish(t) {\n for (var e = this.tryEntries.length - 1; e >= 0; --e) {\n var r = this.tryEntries[e];\n if (r.finallyLoc === t) return this.complete(r.completion, r.afterLoc), resetTryEntry(r), y;\n }\n },\n \"catch\": function _catch(t) {\n for (var e = this.tryEntries.length - 1; e >= 0; --e) {\n var r = this.tryEntries[e];\n if (r.tryLoc === t) {\n var n = r.completion;\n if (\"throw\" === n.type) {\n var o = n.arg;\n resetTryEntry(r);\n }\n return o;\n }\n }\n throw new Error(\"illegal catch attempt\");\n },\n delegateYield: function delegateYield(e, r, n) {\n return this.delegate = {\n iterator: values(e),\n resultName: r,\n nextLoc: n\n }, \"next\" === this.method && (this.arg = t), y;\n }\n }, e;\n}\nmodule.exports = _regeneratorRuntime, module.exports.__esModule = true, module.exports[\"default\"] = module.exports;","// TODO(Babel 8): Remove this file.\n\nvar runtime = require(\"../helpers/regeneratorRuntime\")();\nmodule.exports = runtime;\n\n// Copied from https://github.com/facebook/regenerator/blob/main/packages/runtime/runtime.js#L736=\ntry {\n regeneratorRuntime = runtime;\n} catch (accidentalStrictMode) {\n if (typeof globalThis === \"object\") {\n globalThis.regeneratorRuntime = runtime;\n } else {\n Function(\"r\", \"regeneratorRuntime = r\")(runtime);\n }\n}\n","'use strict';\nvar aCallable = require('../internals/a-callable');\nvar toObject = require('../internals/to-object');\nvar IndexedObject = require('../internals/indexed-object');\nvar lengthOfArrayLike = require('../internals/length-of-array-like');\n\nvar $TypeError = TypeError;\n\n// `Array.prototype.{ reduce, reduceRight }` methods implementation\nvar createMethod = function (IS_RIGHT) {\n return function (that, callbackfn, argumentsLength, memo) {\n aCallable(callbackfn);\n var O = toObject(that);\n var self = IndexedObject(O);\n var length = lengthOfArrayLike(O);\n var index = IS_RIGHT ? length - 1 : 0;\n var i = IS_RIGHT ? -1 : 1;\n if (argumentsLength < 2) while (true) {\n if (index in self) {\n memo = self[index];\n index += i;\n break;\n }\n index += i;\n if (IS_RIGHT ? index < 0 : length <= index) {\n throw new $TypeError('Reduce of empty array with no initial value');\n }\n }\n for (;IS_RIGHT ? index >= 0 : length > index; index += i) if (index in self) {\n memo = callbackfn(memo, self[index], index, O);\n }\n return memo;\n };\n};\n\nmodule.exports = {\n // `Array.prototype.reduce` method\n // https://tc39.es/ecma262/#sec-array.prototype.reduce\n left: createMethod(false),\n // `Array.prototype.reduceRight` method\n // https://tc39.es/ecma262/#sec-array.prototype.reduceright\n right: createMethod(true)\n};\n","'use strict';\nvar $ = require('../internals/export');\nvar $reduce = require('../internals/array-reduce').left;\nvar arrayMethodIsStrict = require('../internals/array-method-is-strict');\nvar CHROME_VERSION = require('../internals/engine-v8-version');\nvar IS_NODE = require('../internals/engine-is-node');\n\n// Chrome 80-82 has a critical bug\n// https://bugs.chromium.org/p/chromium/issues/detail?id=1049982\nvar CHROME_BUG = !IS_NODE && CHROME_VERSION > 79 && CHROME_VERSION < 83;\nvar FORCED = CHROME_BUG || !arrayMethodIsStrict('reduce');\n\n// `Array.prototype.reduce` method\n// https://tc39.es/ecma262/#sec-array.prototype.reduce\n$({ target: 'Array', proto: true, forced: FORCED }, {\n reduce: function reduce(callbackfn /* , initialValue */) {\n var length = arguments.length;\n return $reduce(this, callbackfn, length, length > 1 ? arguments[1] : undefined);\n }\n});\n","'use strict';\nrequire('../../../modules/es.array.reduce');\nvar entryVirtual = require('../../../internals/entry-virtual');\n\nmodule.exports = entryVirtual('Array').reduce;\n","'use strict';\nvar isPrototypeOf = require('../../internals/object-is-prototype-of');\nvar method = require('../array/virtual/reduce');\n\nvar ArrayPrototype = Array.prototype;\n\nmodule.exports = function (it) {\n var own = it.reduce;\n return it === ArrayPrototype || (isPrototypeOf(ArrayPrototype, it) && own === ArrayPrototype.reduce) ? method : own;\n};\n","'use strict';\nvar parent = require('../../es/instance/reduce');\n\nmodule.exports = parent;\n","'use strict';\nvar isArray = require('../internals/is-array');\nvar lengthOfArrayLike = require('../internals/length-of-array-like');\nvar doesNotExceedSafeInteger = require('../internals/does-not-exceed-safe-integer');\nvar bind = require('../internals/function-bind-context');\n\n// `FlattenIntoArray` abstract operation\n// https://tc39.github.io/proposal-flatMap/#sec-FlattenIntoArray\nvar flattenIntoArray = function (target, original, source, sourceLen, start, depth, mapper, thisArg) {\n var targetIndex = start;\n var sourceIndex = 0;\n var mapFn = mapper ? bind(mapper, thisArg) : false;\n var element, elementLen;\n\n while (sourceIndex < sourceLen) {\n if (sourceIndex in source) {\n element = mapFn ? mapFn(source[sourceIndex], sourceIndex, original) : source[sourceIndex];\n\n if (depth > 0 && isArray(element)) {\n elementLen = lengthOfArrayLike(element);\n targetIndex = flattenIntoArray(target, original, element, elementLen, targetIndex, depth - 1) - 1;\n } else {\n doesNotExceedSafeInteger(targetIndex + 1);\n target[targetIndex] = element;\n }\n\n targetIndex++;\n }\n sourceIndex++;\n }\n return targetIndex;\n};\n\nmodule.exports = flattenIntoArray;\n","'use strict';\nvar $ = require('../internals/export');\nvar flattenIntoArray = require('../internals/flatten-into-array');\nvar aCallable = require('../internals/a-callable');\nvar toObject = require('../internals/to-object');\nvar lengthOfArrayLike = require('../internals/length-of-array-like');\nvar arraySpeciesCreate = require('../internals/array-species-create');\n\n// `Array.prototype.flatMap` method\n// https://tc39.es/ecma262/#sec-array.prototype.flatmap\n$({ target: 'Array', proto: true }, {\n flatMap: function flatMap(callbackfn /* , thisArg */) {\n var O = toObject(this);\n var sourceLen = lengthOfArrayLike(O);\n var A;\n aCallable(callbackfn);\n A = arraySpeciesCreate(O, 0);\n A.length = flattenIntoArray(A, O, O, sourceLen, 0, 1, callbackfn, arguments.length > 1 ? arguments[1] : undefined);\n return A;\n }\n});\n","'use strict';\nrequire('../../../modules/es.array.flat-map');\nrequire('../../../modules/es.array.unscopables.flat-map');\nvar entryVirtual = require('../../../internals/entry-virtual');\n\nmodule.exports = entryVirtual('Array').flatMap;\n","'use strict';\nvar isPrototypeOf = require('../../internals/object-is-prototype-of');\nvar method = require('../array/virtual/flat-map');\n\nvar ArrayPrototype = Array.prototype;\n\nmodule.exports = function (it) {\n var own = it.flatMap;\n return it === ArrayPrototype || (isPrototypeOf(ArrayPrototype, it) && own === ArrayPrototype.flatMap) ? method : own;\n};\n","'use strict';\nvar parent = require('../../es/instance/flat-map');\n\nmodule.exports = parent;\n","'use strict';\nvar collection = require('../internals/collection');\nvar collectionStrong = require('../internals/collection-strong');\n\n// `Set` constructor\n// https://tc39.es/ecma262/#sec-set-objects\ncollection('Set', function (init) {\n return function Set() { return init(this, arguments.length ? arguments[0] : undefined); };\n}, collectionStrong);\n","'use strict';\nrequire('../../modules/es.array.iterator');\nrequire('../../modules/es.object.to-string');\nrequire('../../modules/es.set');\nrequire('../../modules/es.string.iterator');\nvar path = require('../../internals/path');\n\nmodule.exports = path.Set;\n","module.exports = require(\"core-js-pure/stable/symbol/iterator\");","'use strict';\nrequire('../modules/es.array.iterator');\nrequire('../modules/es.string.iterator');\nvar getIterator = require('../internals/get-iterator');\n\nmodule.exports = getIterator;\n","'use strict';\nvar arraySlice = require('../internals/array-slice-simple');\n\nvar floor = Math.floor;\n\nvar mergeSort = function (array, comparefn) {\n var length = array.length;\n var middle = floor(length / 2);\n return length < 8 ? insertionSort(array, comparefn) : merge(\n array,\n mergeSort(arraySlice(array, 0, middle), comparefn),\n mergeSort(arraySlice(array, middle), comparefn),\n comparefn\n );\n};\n\nvar insertionSort = function (array, comparefn) {\n var length = array.length;\n var i = 1;\n var element, j;\n\n while (i < length) {\n j = i;\n element = array[i];\n while (j && comparefn(array[j - 1], element) > 0) {\n array[j] = array[--j];\n }\n if (j !== i++) array[j] = element;\n } return array;\n};\n\nvar merge = function (array, left, right, comparefn) {\n var llength = left.length;\n var rlength = right.length;\n var lindex = 0;\n var rindex = 0;\n\n while (lindex < llength || rindex < rlength) {\n array[lindex + rindex] = (lindex < llength && rindex < rlength)\n ? comparefn(left[lindex], right[rindex]) <= 0 ? left[lindex++] : right[rindex++]\n : lindex < llength ? left[lindex++] : right[rindex++];\n } return array;\n};\n\nmodule.exports = mergeSort;\n","'use strict';\nvar userAgent = require('../internals/engine-user-agent');\n\nvar firefox = userAgent.match(/firefox\\/(\\d+)/i);\n\nmodule.exports = !!firefox && +firefox[1];\n","'use strict';\nvar UA = require('../internals/engine-user-agent');\n\nmodule.exports = /MSIE|Trident/.test(UA);\n","'use strict';\nvar userAgent = require('../internals/engine-user-agent');\n\nvar webkit = userAgent.match(/AppleWebKit\\/(\\d+)\\./);\n\nmodule.exports = !!webkit && +webkit[1];\n","'use strict';\nvar $ = require('../internals/export');\nvar uncurryThis = require('../internals/function-uncurry-this');\nvar aCallable = require('../internals/a-callable');\nvar toObject = require('../internals/to-object');\nvar lengthOfArrayLike = require('../internals/length-of-array-like');\nvar deletePropertyOrThrow = require('../internals/delete-property-or-throw');\nvar toString = require('../internals/to-string');\nvar fails = require('../internals/fails');\nvar internalSort = require('../internals/array-sort');\nvar arrayMethodIsStrict = require('../internals/array-method-is-strict');\nvar FF = require('../internals/engine-ff-version');\nvar IE_OR_EDGE = require('../internals/engine-is-ie-or-edge');\nvar V8 = require('../internals/engine-v8-version');\nvar WEBKIT = require('../internals/engine-webkit-version');\n\nvar test = [];\nvar nativeSort = uncurryThis(test.sort);\nvar push = uncurryThis(test.push);\n\n// IE8-\nvar FAILS_ON_UNDEFINED = fails(function () {\n test.sort(undefined);\n});\n// V8 bug\nvar FAILS_ON_NULL = fails(function () {\n test.sort(null);\n});\n// Old WebKit\nvar STRICT_METHOD = arrayMethodIsStrict('sort');\n\nvar STABLE_SORT = !fails(function () {\n // feature detection can be too slow, so check engines versions\n if (V8) return V8 < 70;\n if (FF && FF > 3) return;\n if (IE_OR_EDGE) return true;\n if (WEBKIT) return WEBKIT < 603;\n\n var result = '';\n var code, chr, value, index;\n\n // generate an array with more 512 elements (Chakra and old V8 fails only in this case)\n for (code = 65; code < 76; code++) {\n chr = String.fromCharCode(code);\n\n switch (code) {\n case 66: case 69: case 70: case 72: value = 3; break;\n case 68: case 71: value = 4; break;\n default: value = 2;\n }\n\n for (index = 0; index < 47; index++) {\n test.push({ k: chr + index, v: value });\n }\n }\n\n test.sort(function (a, b) { return b.v - a.v; });\n\n for (index = 0; index < test.length; index++) {\n chr = test[index].k.charAt(0);\n if (result.charAt(result.length - 1) !== chr) result += chr;\n }\n\n return result !== 'DGBEFHACIJK';\n});\n\nvar FORCED = FAILS_ON_UNDEFINED || !FAILS_ON_NULL || !STRICT_METHOD || !STABLE_SORT;\n\nvar getSortCompare = function (comparefn) {\n return function (x, y) {\n if (y === undefined) return -1;\n if (x === undefined) return 1;\n if (comparefn !== undefined) return +comparefn(x, y) || 0;\n return toString(x) > toString(y) ? 1 : -1;\n };\n};\n\n// `Array.prototype.sort` method\n// https://tc39.es/ecma262/#sec-array.prototype.sort\n$({ target: 'Array', proto: true, forced: FORCED }, {\n sort: function sort(comparefn) {\n if (comparefn !== undefined) aCallable(comparefn);\n\n var array = toObject(this);\n\n if (STABLE_SORT) return comparefn === undefined ? nativeSort(array) : nativeSort(array, comparefn);\n\n var items = [];\n var arrayLength = lengthOfArrayLike(array);\n var itemsLength, index;\n\n for (index = 0; index < arrayLength; index++) {\n if (index in array) push(items, array[index]);\n }\n\n internalSort(items, getSortCompare(comparefn));\n\n itemsLength = lengthOfArrayLike(items);\n index = 0;\n\n while (index < itemsLength) array[index] = items[index++];\n while (index < arrayLength) deletePropertyOrThrow(array, index++);\n\n return array;\n }\n});\n","'use strict';\nrequire('../../../modules/es.array.sort');\nvar entryVirtual = require('../../../internals/entry-virtual');\n\nmodule.exports = entryVirtual('Array').sort;\n","'use strict';\nvar isPrototypeOf = require('../../internals/object-is-prototype-of');\nvar method = require('../array/virtual/sort');\n\nvar ArrayPrototype = Array.prototype;\n\nmodule.exports = function (it) {\n var own = it.sort;\n return it === ArrayPrototype || (isPrototypeOf(ArrayPrototype, it) && own === ArrayPrototype.sort) ? method : own;\n};\n","'use strict';\nvar parent = require('../../es/instance/sort');\n\nmodule.exports = parent;\n","'use strict';\nrequire('../../../modules/es.array.iterator');\nrequire('../../../modules/es.object.to-string');\nvar entryVirtual = require('../../../internals/entry-virtual');\n\nmodule.exports = entryVirtual('Array').keys;\n","'use strict';\nrequire('../../modules/web.dom-collections.iterator');\nvar classof = require('../../internals/classof');\nvar hasOwn = require('../../internals/has-own-property');\nvar isPrototypeOf = require('../../internals/object-is-prototype-of');\nvar method = require('../array/virtual/keys');\n\nvar ArrayPrototype = Array.prototype;\n\nvar DOMIterables = {\n DOMTokenList: true,\n NodeList: true\n};\n\nmodule.exports = function (it) {\n var own = it.keys;\n return it === ArrayPrototype || (isPrototypeOf(ArrayPrototype, it) && own === ArrayPrototype.keys)\n || hasOwn(DOMIterables, classof(it)) ? method : own;\n};\n","'use strict';\nvar parent = require('../../../es/array/virtual/keys');\n\nmodule.exports = parent;\n","module.exports = require(\"core-js-pure/stable/instance/keys\");","'use strict';\nrequire('../../../modules/es.array.iterator');\nrequire('../../../modules/es.object.to-string');\nvar entryVirtual = require('../../../internals/entry-virtual');\n\nmodule.exports = entryVirtual('Array').values;\n","'use strict';\nrequire('../../modules/web.dom-collections.iterator');\nvar classof = require('../../internals/classof');\nvar hasOwn = require('../../internals/has-own-property');\nvar isPrototypeOf = require('../../internals/object-is-prototype-of');\nvar method = require('../array/virtual/values');\n\nvar ArrayPrototype = Array.prototype;\n\nvar DOMIterables = {\n DOMTokenList: true,\n NodeList: true\n};\n\nmodule.exports = function (it) {\n var own = it.values;\n return it === ArrayPrototype || (isPrototypeOf(ArrayPrototype, it) && own === ArrayPrototype.values)\n || hasOwn(DOMIterables, classof(it)) ? method : own;\n};\n","'use strict';\nvar parent = require('../../../es/array/virtual/values');\n\nmodule.exports = parent;\n","module.exports = require(\"core-js-pure/stable/instance/values\");","'use strict';\nrequire('../../../modules/es.array.iterator');\nrequire('../../../modules/es.object.to-string');\nvar entryVirtual = require('../../../internals/entry-virtual');\n\nmodule.exports = entryVirtual('Array').entries;\n","'use strict';\nrequire('../../modules/web.dom-collections.iterator');\nvar classof = require('../../internals/classof');\nvar hasOwn = require('../../internals/has-own-property');\nvar isPrototypeOf = require('../../internals/object-is-prototype-of');\nvar method = require('../array/virtual/entries');\n\nvar ArrayPrototype = Array.prototype;\n\nvar DOMIterables = {\n DOMTokenList: true,\n NodeList: true\n};\n\nmodule.exports = function (it) {\n var own = it.entries;\n return it === ArrayPrototype || (isPrototypeOf(ArrayPrototype, it) && own === ArrayPrototype.entries)\n || hasOwn(DOMIterables, classof(it)) ? method : own;\n};\n","'use strict';\nvar parent = require('../../../es/array/virtual/entries');\n\nmodule.exports = parent;\n","module.exports = require(\"core-js-pure/stable/instance/entries\");","module.exports = require(\"core-js-pure/stable/object/define-property\");","'use strict';\nvar $ = require('../internals/export');\nvar getBuiltIn = require('../internals/get-built-in');\nvar apply = require('../internals/function-apply');\nvar bind = require('../internals/function-bind');\nvar aConstructor = require('../internals/a-constructor');\nvar anObject = require('../internals/an-object');\nvar isObject = require('../internals/is-object');\nvar create = require('../internals/object-create');\nvar fails = require('../internals/fails');\n\nvar nativeConstruct = getBuiltIn('Reflect', 'construct');\nvar ObjectPrototype = Object.prototype;\nvar push = [].push;\n\n// `Reflect.construct` method\n// https://tc39.es/ecma262/#sec-reflect.construct\n// MS Edge supports only 2 arguments and argumentsList argument is optional\n// FF Nightly sets third argument as `new.target`, but does not create `this` from it\nvar NEW_TARGET_BUG = fails(function () {\n function F() { /* empty */ }\n return !(nativeConstruct(function () { /* empty */ }, [], F) instanceof F);\n});\n\nvar ARGS_BUG = !fails(function () {\n nativeConstruct(function () { /* empty */ });\n});\n\nvar FORCED = NEW_TARGET_BUG || ARGS_BUG;\n\n$({ target: 'Reflect', stat: true, forced: FORCED, sham: FORCED }, {\n construct: function construct(Target, args /* , newTarget */) {\n aConstructor(Target);\n anObject(args);\n var newTarget = arguments.length < 3 ? Target : aConstructor(arguments[2]);\n if (ARGS_BUG && !NEW_TARGET_BUG) return nativeConstruct(Target, args, newTarget);\n if (Target === newTarget) {\n // w/o altered newTarget, optimization for 0-4 arguments\n switch (args.length) {\n case 0: return new Target();\n case 1: return new Target(args[0]);\n case 2: return new Target(args[0], args[1]);\n case 3: return new Target(args[0], args[1], args[2]);\n case 4: return new Target(args[0], args[1], args[2], args[3]);\n }\n // w/o altered newTarget, lot of arguments case\n var $args = [null];\n apply(push, $args, args);\n return new (apply(bind, Target, $args))();\n }\n // with altered newTarget, not support built-in constructors\n var proto = newTarget.prototype;\n var instance = create(isObject(proto) ? proto : ObjectPrototype);\n var result = apply(Target, instance, args);\n return isObject(result) ? result : instance;\n }\n});\n","'use strict';\nrequire('../../modules/es.reflect.construct');\nvar path = require('../../internals/path');\n\nmodule.exports = path.Reflect.construct;\n","'use strict';\nrequire('../../modules/es.symbol');\nvar path = require('../../internals/path');\n\nmodule.exports = path.Object.getOwnPropertySymbols;\n","'use strict';\nvar $ = require('../internals/export');\nvar fails = require('../internals/fails');\nvar toIndexedObject = require('../internals/to-indexed-object');\nvar nativeGetOwnPropertyDescriptor = require('../internals/object-get-own-property-descriptor').f;\nvar DESCRIPTORS = require('../internals/descriptors');\n\nvar FORCED = !DESCRIPTORS || fails(function () { nativeGetOwnPropertyDescriptor(1); });\n\n// `Object.getOwnPropertyDescriptor` method\n// https://tc39.es/ecma262/#sec-object.getownpropertydescriptor\n$({ target: 'Object', stat: true, forced: FORCED, sham: !DESCRIPTORS }, {\n getOwnPropertyDescriptor: function getOwnPropertyDescriptor(it, key) {\n return nativeGetOwnPropertyDescriptor(toIndexedObject(it), key);\n }\n});\n","'use strict';\nrequire('../../modules/es.object.get-own-property-descriptor');\nvar path = require('../../internals/path');\n\nvar Object = path.Object;\n\nvar getOwnPropertyDescriptor = module.exports = function getOwnPropertyDescriptor(it, key) {\n return Object.getOwnPropertyDescriptor(it, key);\n};\n\nif (Object.getOwnPropertyDescriptor.sham) getOwnPropertyDescriptor.sham = true;\n","'use strict';\nvar parent = require('../../es/object/get-own-property-descriptor');\n\nmodule.exports = parent;\n","module.exports = require(\"core-js-pure/stable/object/get-own-property-descriptor\");","'use strict';\nvar $ = require('../internals/export');\nvar DESCRIPTORS = require('../internals/descriptors');\nvar ownKeys = require('../internals/own-keys');\nvar toIndexedObject = require('../internals/to-indexed-object');\nvar getOwnPropertyDescriptorModule = require('../internals/object-get-own-property-descriptor');\nvar createProperty = require('../internals/create-property');\n\n// `Object.getOwnPropertyDescriptors` method\n// https://tc39.es/ecma262/#sec-object.getownpropertydescriptors\n$({ target: 'Object', stat: true, sham: !DESCRIPTORS }, {\n getOwnPropertyDescriptors: function getOwnPropertyDescriptors(object) {\n var O = toIndexedObject(object);\n var getOwnPropertyDescriptor = getOwnPropertyDescriptorModule.f;\n var keys = ownKeys(O);\n var result = {};\n var index = 0;\n var key, descriptor;\n while (keys.length > index) {\n descriptor = getOwnPropertyDescriptor(O, key = keys[index++]);\n if (descriptor !== undefined) createProperty(result, key, descriptor);\n }\n return result;\n }\n});\n","'use strict';\nrequire('../../modules/es.object.get-own-property-descriptors');\nvar path = require('../../internals/path');\n\nmodule.exports = path.Object.getOwnPropertyDescriptors;\n","'use strict';\nvar $ = require('../internals/export');\nvar DESCRIPTORS = require('../internals/descriptors');\nvar defineProperties = require('../internals/object-define-properties').f;\n\n// `Object.defineProperties` method\n// https://tc39.es/ecma262/#sec-object.defineproperties\n// eslint-disable-next-line es/no-object-defineproperties -- safe\n$({ target: 'Object', stat: true, forced: Object.defineProperties !== defineProperties, sham: !DESCRIPTORS }, {\n defineProperties: defineProperties\n});\n","'use strict';\nrequire('../../modules/es.object.define-properties');\nvar path = require('../../internals/path');\n\nvar Object = path.Object;\n\nvar defineProperties = module.exports = function defineProperties(T, D) {\n return Object.defineProperties(T, D);\n};\n\nif (Object.defineProperties.sham) defineProperties.sham = true;\n","// Unique ID creation requires a high quality random # generator. In the browser we therefore\n// require the crypto API and do not support built-in fallback to lower quality random number\n// generators (like Math.random()).\nlet getRandomValues;\nconst rnds8 = new Uint8Array(16);\nexport default function rng() {\n // lazy load so that environments that need to polyfill have a chance to do so\n if (!getRandomValues) {\n // getRandomValues needs to be invoked in a context where \"this\" is a Crypto implementation.\n getRandomValues = typeof crypto !== 'undefined' && crypto.getRandomValues && crypto.getRandomValues.bind(crypto);\n\n if (!getRandomValues) {\n throw new Error('crypto.getRandomValues() not supported. See https://github.com/uuidjs/uuid#getrandomvalues-not-supported');\n }\n }\n\n return getRandomValues(rnds8);\n}","import validate from './validate.js';\n/**\n * Convert array of 16 byte values to UUID string format of the form:\n * XXXXXXXX-XXXX-XXXX-XXXX-XXXXXXXXXXXX\n */\n\nconst byteToHex = [];\n\nfor (let i = 0; i < 256; ++i) {\n byteToHex.push((i + 0x100).toString(16).slice(1));\n}\n\nexport function unsafeStringify(arr, offset = 0) {\n // Note: Be careful editing this code! It's been tuned for performance\n // and works in ways you may not expect. See https://github.com/uuidjs/uuid/pull/434\n return byteToHex[arr[offset + 0]] + byteToHex[arr[offset + 1]] + byteToHex[arr[offset + 2]] + byteToHex[arr[offset + 3]] + '-' + byteToHex[arr[offset + 4]] + byteToHex[arr[offset + 5]] + '-' + byteToHex[arr[offset + 6]] + byteToHex[arr[offset + 7]] + '-' + byteToHex[arr[offset + 8]] + byteToHex[arr[offset + 9]] + '-' + byteToHex[arr[offset + 10]] + byteToHex[arr[offset + 11]] + byteToHex[arr[offset + 12]] + byteToHex[arr[offset + 13]] + byteToHex[arr[offset + 14]] + byteToHex[arr[offset + 15]];\n}\n\nfunction stringify(arr, offset = 0) {\n const uuid = unsafeStringify(arr, offset); // Consistency check for valid UUID. If this throws, it's likely due to one\n // of the following:\n // - One or more input array values don't map to a hex octet (leading to\n // \"undefined\" in the uuid)\n // - Invalid input values for the RFC `version` or `variant` fields\n\n if (!validate(uuid)) {\n throw TypeError('Stringified UUID is invalid');\n }\n\n return uuid;\n}\n\nexport default stringify;","const randomUUID = typeof crypto !== 'undefined' && crypto.randomUUID && crypto.randomUUID.bind(crypto);\nexport default {\n randomUUID\n};","import native from './native.js';\nimport rng from './rng.js';\nimport { unsafeStringify } from './stringify.js';\n\nfunction v4(options, buf, offset) {\n if (native.randomUUID && !buf && !options) {\n return native.randomUUID();\n }\n\n options = options || {};\n const rnds = options.random || (options.rng || rng)(); // Per 4.4, set bits for version and `clock_seq_hi_and_reserved`\n\n rnds[6] = rnds[6] & 0x0f | 0x40;\n rnds[8] = rnds[8] & 0x3f | 0x80; // Copy bytes to buffer, if provided\n\n if (buf) {\n offset = offset || 0;\n\n for (let i = 0; i < 16; ++i) {\n buf[offset + i] = rnds[i];\n }\n\n return buf;\n }\n\n return unsafeStringify(rnds);\n}\n\nexport default v4;","/**\n * vis-data\n * http://visjs.org/\n *\n * Manage unstructured data using DataSet. Add, update, and remove data, and listen for changes in the data.\n *\n * @version 7.1.7\n * @date 2023-09-13T18:13:28.258Z\n *\n * @copyright (c) 2011-2017 Almende B.V, http://almende.com\n * @copyright (c) 2017-2019 visjs contributors, https://github.com/visjs\n *\n * @license\n * vis.js is dual licensed under both\n *\n * 1. The Apache 2.0 License\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * and\n *\n * 2. The MIT License\n * http://opensource.org/licenses/MIT\n *\n * vis.js may be distributed under either license.\n */\n\nimport { pureDeepObjectAssign } from 'vis-util/esnext/esm/vis-util.js';\nexport { DELETE } from 'vis-util/esnext/esm/vis-util.js';\nimport { v4 } from 'uuid';\n\n/**\r\n * Create new data pipe.\r\n *\r\n * @param from - The source data set or data view.\r\n * @remarks\r\n * Example usage:\r\n * ```typescript\r\n * interface AppItem {\r\n * whoami: string;\r\n * appData: unknown;\r\n * visData: VisItem;\r\n * }\r\n * interface VisItem {\r\n * id: number;\r\n * label: string;\r\n * color: string;\r\n * x: number;\r\n * y: number;\r\n * }\r\n *\r\n * const ds1 = new DataSet([], { fieldId: \"whoami\" });\r\n * const ds2 = new DataSet();\r\n *\r\n * const pipe = createNewDataPipeFrom(ds1)\r\n * .filter((item): boolean => item.enabled === true)\r\n * .map((item): VisItem => item.visData)\r\n * .to(ds2);\r\n *\r\n * pipe.start();\r\n * ```\r\n * @returns A factory whose methods can be used to configure the pipe.\r\n */\r\nfunction createNewDataPipeFrom(from) {\r\n return new DataPipeUnderConstruction(from);\r\n}\r\n/**\r\n * Internal implementation of the pipe. This should be accessible only through\r\n * `createNewDataPipeFrom` from the outside.\r\n *\r\n * @typeParam SI - Source item type.\r\n * @typeParam SP - Source item type's id property name.\r\n * @typeParam TI - Target item type.\r\n * @typeParam TP - Target item type's id property name.\r\n */\r\nclass SimpleDataPipe {\r\n _source;\r\n _transformers;\r\n _target;\r\n /**\r\n * Bound listeners for use with `DataInterface['on' | 'off']`.\r\n */\r\n _listeners = {\r\n add: this._add.bind(this),\r\n remove: this._remove.bind(this),\r\n update: this._update.bind(this),\r\n };\r\n /**\r\n * Create a new data pipe.\r\n *\r\n * @param _source - The data set or data view that will be observed.\r\n * @param _transformers - An array of transforming functions to be used to\r\n * filter or transform the items in the pipe.\r\n * @param _target - The data set or data view that will receive the items.\r\n */\r\n constructor(_source, _transformers, _target) {\r\n this._source = _source;\r\n this._transformers = _transformers;\r\n this._target = _target;\r\n }\r\n /** @inheritDoc */\r\n all() {\r\n this._target.update(this._transformItems(this._source.get()));\r\n return this;\r\n }\r\n /** @inheritDoc */\r\n start() {\r\n this._source.on(\"add\", this._listeners.add);\r\n this._source.on(\"remove\", this._listeners.remove);\r\n this._source.on(\"update\", this._listeners.update);\r\n return this;\r\n }\r\n /** @inheritDoc */\r\n stop() {\r\n this._source.off(\"add\", this._listeners.add);\r\n this._source.off(\"remove\", this._listeners.remove);\r\n this._source.off(\"update\", this._listeners.update);\r\n return this;\r\n }\r\n /**\r\n * Apply the transformers to the items.\r\n *\r\n * @param items - The items to be transformed.\r\n * @returns The transformed items.\r\n */\r\n _transformItems(items) {\r\n return this._transformers.reduce((items, transform) => {\r\n return transform(items);\r\n }, items);\r\n }\r\n /**\r\n * Handle an add event.\r\n *\r\n * @param _name - Ignored.\r\n * @param payload - The payload containing the ids of the added items.\r\n */\r\n _add(_name, payload) {\r\n if (payload == null) {\r\n return;\r\n }\r\n this._target.add(this._transformItems(this._source.get(payload.items)));\r\n }\r\n /**\r\n * Handle an update event.\r\n *\r\n * @param _name - Ignored.\r\n * @param payload - The payload containing the ids of the updated items.\r\n */\r\n _update(_name, payload) {\r\n if (payload == null) {\r\n return;\r\n }\r\n this._target.update(this._transformItems(this._source.get(payload.items)));\r\n }\r\n /**\r\n * Handle a remove event.\r\n *\r\n * @param _name - Ignored.\r\n * @param payload - The payload containing the data of the removed items.\r\n */\r\n _remove(_name, payload) {\r\n if (payload == null) {\r\n return;\r\n }\r\n this._target.remove(this._transformItems(payload.oldData));\r\n }\r\n}\r\n/**\r\n * Internal implementation of the pipe factory. This should be accessible\r\n * only through `createNewDataPipeFrom` from the outside.\r\n *\r\n * @typeParam TI - Target item type.\r\n * @typeParam TP - Target item type's id property name.\r\n */\r\nclass DataPipeUnderConstruction {\r\n _source;\r\n /**\r\n * Array transformers used to transform items within the pipe. This is typed\r\n * as any for the sake of simplicity.\r\n */\r\n _transformers = [];\r\n /**\r\n * Create a new data pipe factory. This is an internal constructor that\r\n * should never be called from outside of this file.\r\n *\r\n * @param _source - The source data set or data view for this pipe.\r\n */\r\n constructor(_source) {\r\n this._source = _source;\r\n }\r\n /**\r\n * Filter the items.\r\n *\r\n * @param callback - A filtering function that returns true if given item\r\n * should be piped and false if not.\r\n * @returns This factory for further configuration.\r\n */\r\n filter(callback) {\r\n this._transformers.push((input) => input.filter(callback));\r\n return this;\r\n }\r\n /**\r\n * Map each source item to a new type.\r\n *\r\n * @param callback - A mapping function that takes a source item and returns\r\n * corresponding mapped item.\r\n * @typeParam TI - Target item type.\r\n * @typeParam TP - Target item type's id property name.\r\n * @returns This factory for further configuration.\r\n */\r\n map(callback) {\r\n this._transformers.push((input) => input.map(callback));\r\n return this;\r\n }\r\n /**\r\n * Map each source item to zero or more items of a new type.\r\n *\r\n * @param callback - A mapping function that takes a source item and returns\r\n * an array of corresponding mapped items.\r\n * @typeParam TI - Target item type.\r\n * @typeParam TP - Target item type's id property name.\r\n * @returns This factory for further configuration.\r\n */\r\n flatMap(callback) {\r\n this._transformers.push((input) => input.flatMap(callback));\r\n return this;\r\n }\r\n /**\r\n * Connect this pipe to given data set.\r\n *\r\n * @param target - The data set that will receive the items from this pipe.\r\n * @returns The pipe connected between given data sets and performing\r\n * configured transformation on the processed items.\r\n */\r\n to(target) {\r\n return new SimpleDataPipe(this._source, this._transformers, target);\r\n }\r\n}\n\n/**\r\n * Determine whether a value can be used as an id.\r\n *\r\n * @param value - Input value of unknown type.\r\n * @returns True if the value is valid id, false otherwise.\r\n */\r\nfunction isId(value) {\r\n return typeof value === \"string\" || typeof value === \"number\";\r\n}\n\n/**\r\n * A queue.\r\n *\r\n * @typeParam T - The type of method names to be replaced by queued versions.\r\n */\r\nclass Queue {\r\n /** Delay in milliseconds. If defined the queue will be periodically flushed. */\r\n delay;\r\n /** Maximum number of entries in the queue before it will be flushed. */\r\n max;\r\n _queue = [];\r\n _timeout = null;\r\n _extended = null;\r\n /**\r\n * Construct a new Queue.\r\n *\r\n * @param options - Queue configuration.\r\n */\r\n constructor(options) {\r\n // options\r\n this.delay = null;\r\n this.max = Infinity;\r\n this.setOptions(options);\r\n }\r\n /**\r\n * Update the configuration of the queue.\r\n *\r\n * @param options - Queue configuration.\r\n */\r\n setOptions(options) {\r\n if (options && typeof options.delay !== \"undefined\") {\r\n this.delay = options.delay;\r\n }\r\n if (options && typeof options.max !== \"undefined\") {\r\n this.max = options.max;\r\n }\r\n this._flushIfNeeded();\r\n }\r\n /**\r\n * Extend an object with queuing functionality.\r\n * The object will be extended with a function flush, and the methods provided in options.replace will be replaced with queued ones.\r\n *\r\n * @param object - The object to be extended.\r\n * @param options - Additional options.\r\n * @returns The created queue.\r\n */\r\n static extend(object, options) {\r\n const queue = new Queue(options);\r\n if (object.flush !== undefined) {\r\n throw new Error(\"Target object already has a property flush\");\r\n }\r\n object.flush = () => {\r\n queue.flush();\r\n };\r\n const methods = [\r\n {\r\n name: \"flush\",\r\n original: undefined,\r\n },\r\n ];\r\n if (options && options.replace) {\r\n for (let i = 0; i < options.replace.length; i++) {\r\n const name = options.replace[i];\r\n methods.push({\r\n name: name,\r\n // @TODO: better solution?\r\n original: object[name],\r\n });\r\n // @TODO: better solution?\r\n queue.replace(object, name);\r\n }\r\n }\r\n queue._extended = {\r\n object: object,\r\n methods: methods,\r\n };\r\n return queue;\r\n }\r\n /**\r\n * Destroy the queue. The queue will first flush all queued actions, and in case it has extended an object, will restore the original object.\r\n */\r\n destroy() {\r\n this.flush();\r\n if (this._extended) {\r\n const object = this._extended.object;\r\n const methods = this._extended.methods;\r\n for (let i = 0; i < methods.length; i++) {\r\n const method = methods[i];\r\n if (method.original) {\r\n // @TODO: better solution?\r\n object[method.name] = method.original;\r\n }\r\n else {\r\n // @TODO: better solution?\r\n delete object[method.name];\r\n }\r\n }\r\n this._extended = null;\r\n }\r\n }\r\n /**\r\n * Replace a method on an object with a queued version.\r\n *\r\n * @param object - Object having the method.\r\n * @param method - The method name.\r\n */\r\n replace(object, method) {\r\n /* eslint-disable-next-line @typescript-eslint/no-this-alias -- Function this is necessary in the function bellow, so class this has to be saved into a variable here. */\r\n const me = this;\r\n const original = object[method];\r\n if (!original) {\r\n throw new Error(\"Method \" + method + \" undefined\");\r\n }\r\n object[method] = function (...args) {\r\n // add this call to the queue\r\n me.queue({\r\n args: args,\r\n fn: original,\r\n context: this,\r\n });\r\n };\r\n }\r\n /**\r\n * Queue a call.\r\n *\r\n * @param entry - The function or entry to be queued.\r\n */\r\n queue(entry) {\r\n if (typeof entry === \"function\") {\r\n this._queue.push({ fn: entry });\r\n }\r\n else {\r\n this._queue.push(entry);\r\n }\r\n this._flushIfNeeded();\r\n }\r\n /**\r\n * Check whether the queue needs to be flushed.\r\n */\r\n _flushIfNeeded() {\r\n // flush when the maximum is exceeded.\r\n if (this._queue.length > this.max) {\r\n this.flush();\r\n }\r\n // flush after a period of inactivity when a delay is configured\r\n if (this._timeout != null) {\r\n clearTimeout(this._timeout);\r\n this._timeout = null;\r\n }\r\n if (this.queue.length > 0 && typeof this.delay === \"number\") {\r\n this._timeout = setTimeout(() => {\r\n this.flush();\r\n }, this.delay);\r\n }\r\n }\r\n /**\r\n * Flush all queued calls\r\n */\r\n flush() {\r\n this._queue.splice(0).forEach((entry) => {\r\n entry.fn.apply(entry.context || entry.fn, entry.args || []);\r\n });\r\n }\r\n}\n\n/**\r\n * {@link DataSet} code that can be reused in {@link DataView} or other similar implementations of {@link DataInterface}.\r\n *\r\n * @typeParam Item - Item type that may or may not have an id.\r\n * @typeParam IdProp - Name of the property that contains the id.\r\n */\r\nclass DataSetPart {\r\n _subscribers = {\r\n \"*\": [],\r\n add: [],\r\n remove: [],\r\n update: [],\r\n };\r\n /**\r\n * Trigger an event\r\n *\r\n * @param event - Event name.\r\n * @param payload - Event payload.\r\n * @param senderId - Id of the sender.\r\n */\r\n _trigger(event, payload, senderId) {\r\n if (event === \"*\") {\r\n throw new Error(\"Cannot trigger event *\");\r\n }\r\n [...this._subscribers[event], ...this._subscribers[\"*\"]].forEach((subscriber) => {\r\n subscriber(event, payload, senderId != null ? senderId : null);\r\n });\r\n }\r\n /**\r\n * Subscribe to an event, add an event listener.\r\n *\r\n * @remarks Non-function callbacks are ignored.\r\n * @param event - Event name.\r\n * @param callback - Callback method.\r\n */\r\n on(event, callback) {\r\n if (typeof callback === \"function\") {\r\n this._subscribers[event].push(callback);\r\n }\r\n // @TODO: Maybe throw for invalid callbacks?\r\n }\r\n /**\r\n * Unsubscribe from an event, remove an event listener.\r\n *\r\n * @remarks If the same callback was subscribed more than once **all** occurences will be removed.\r\n * @param event - Event name.\r\n * @param callback - Callback method.\r\n */\r\n off(event, callback) {\r\n this._subscribers[event] = this._subscribers[event].filter((subscriber) => subscriber !== callback);\r\n }\r\n /**\r\n * @deprecated Use on instead (PS: DataView.subscribe === DataView.on).\r\n */\r\n subscribe = DataSetPart.prototype.on;\r\n /**\r\n * @deprecated Use off instead (PS: DataView.unsubscribe === DataView.off).\r\n */\r\n unsubscribe = DataSetPart.prototype.off;\r\n}\n\n/**\r\n * Data stream\r\n *\r\n * @remarks\r\n * {@link DataStream} offers an always up to date stream of items from a {@link DataSet} or {@link DataView}.\r\n * That means that the stream is evaluated at the time of iteration, conversion to another data type or when {@link cache} is called, not when the {@link DataStream} was created.\r\n * Multiple invocations of for example {@link toItemArray} may yield different results (if the data source like for example {@link DataSet} gets modified).\r\n * @typeParam Item - The item type this stream is going to work with.\r\n */\r\nclass DataStream {\r\n _pairs;\r\n /**\r\n * Create a new data stream.\r\n *\r\n * @param pairs - The id, item pairs.\r\n */\r\n constructor(pairs) {\r\n this._pairs = pairs;\r\n }\r\n /**\r\n * Return an iterable of key, value pairs for every entry in the stream.\r\n */\r\n *[Symbol.iterator]() {\r\n for (const [id, item] of this._pairs) {\r\n yield [id, item];\r\n }\r\n }\r\n /**\r\n * Return an iterable of key, value pairs for every entry in the stream.\r\n */\r\n *entries() {\r\n for (const [id, item] of this._pairs) {\r\n yield [id, item];\r\n }\r\n }\r\n /**\r\n * Return an iterable of keys in the stream.\r\n */\r\n *keys() {\r\n for (const [id] of this._pairs) {\r\n yield id;\r\n }\r\n }\r\n /**\r\n * Return an iterable of values in the stream.\r\n */\r\n *values() {\r\n for (const [, item] of this._pairs) {\r\n yield item;\r\n }\r\n }\r\n /**\r\n * Return an array containing all the ids in this stream.\r\n *\r\n * @remarks\r\n * The array may contain duplicities.\r\n * @returns The array with all ids from this stream.\r\n */\r\n toIdArray() {\r\n return [...this._pairs].map((pair) => pair[0]);\r\n }\r\n /**\r\n * Return an array containing all the items in this stream.\r\n *\r\n * @remarks\r\n * The array may contain duplicities.\r\n * @returns The array with all items from this stream.\r\n */\r\n toItemArray() {\r\n return [...this._pairs].map((pair) => pair[1]);\r\n }\r\n /**\r\n * Return an array containing all the entries in this stream.\r\n *\r\n * @remarks\r\n * The array may contain duplicities.\r\n * @returns The array with all entries from this stream.\r\n */\r\n toEntryArray() {\r\n return [...this._pairs];\r\n }\r\n /**\r\n * Return an object map containing all the items in this stream accessible by ids.\r\n *\r\n * @remarks\r\n * In case of duplicate ids (coerced to string so `7 == '7'`) the last encoutered appears in the returned object.\r\n * @returns The object map of all id → item pairs from this stream.\r\n */\r\n toObjectMap() {\r\n const map = Object.create(null);\r\n for (const [id, item] of this._pairs) {\r\n map[id] = item;\r\n }\r\n return map;\r\n }\r\n /**\r\n * Return a map containing all the items in this stream accessible by ids.\r\n *\r\n * @returns The map of all id → item pairs from this stream.\r\n */\r\n toMap() {\r\n return new Map(this._pairs);\r\n }\r\n /**\r\n * Return a set containing all the (unique) ids in this stream.\r\n *\r\n * @returns The set of all ids from this stream.\r\n */\r\n toIdSet() {\r\n return new Set(this.toIdArray());\r\n }\r\n /**\r\n * Return a set containing all the (unique) items in this stream.\r\n *\r\n * @returns The set of all items from this stream.\r\n */\r\n toItemSet() {\r\n return new Set(this.toItemArray());\r\n }\r\n /**\r\n * Cache the items from this stream.\r\n *\r\n * @remarks\r\n * This method allows for items to be fetched immediatelly and used (possibly multiple times) later.\r\n * It can also be used to optimize performance as {@link DataStream} would otherwise reevaluate everything upon each iteration.\r\n *\r\n * ## Example\r\n * ```javascript\r\n * const ds = new DataSet([…])\r\n *\r\n * const cachedStream = ds.stream()\r\n * .filter(…)\r\n * .sort(…)\r\n * .map(…)\r\n * .cached(…) // Data are fetched, processed and cached here.\r\n *\r\n * ds.clear()\r\n * chachedStream // Still has all the items.\r\n * ```\r\n * @returns A new {@link DataStream} with cached items (detached from the original {@link DataSet}).\r\n */\r\n cache() {\r\n return new DataStream([...this._pairs]);\r\n }\r\n /**\r\n * Get the distinct values of given property.\r\n *\r\n * @param callback - The function that picks and possibly converts the property.\r\n * @typeParam T - The type of the distinct value.\r\n * @returns A set of all distinct properties.\r\n */\r\n distinct(callback) {\r\n const set = new Set();\r\n for (const [id, item] of this._pairs) {\r\n set.add(callback(item, id));\r\n }\r\n return set;\r\n }\r\n /**\r\n * Filter the items of the stream.\r\n *\r\n * @param callback - The function that decides whether an item will be included.\r\n * @returns A new data stream with the filtered items.\r\n */\r\n filter(callback) {\r\n const pairs = this._pairs;\r\n return new DataStream({\r\n *[Symbol.iterator]() {\r\n for (const [id, item] of pairs) {\r\n if (callback(item, id)) {\r\n yield [id, item];\r\n }\r\n }\r\n },\r\n });\r\n }\r\n /**\r\n * Execute a callback for each item of the stream.\r\n *\r\n * @param callback - The function that will be invoked for each item.\r\n */\r\n forEach(callback) {\r\n for (const [id, item] of this._pairs) {\r\n callback(item, id);\r\n }\r\n }\r\n /**\r\n * Map the items into a different type.\r\n *\r\n * @param callback - The function that does the conversion.\r\n * @typeParam Mapped - The type of the item after mapping.\r\n * @returns A new data stream with the mapped items.\r\n */\r\n map(callback) {\r\n const pairs = this._pairs;\r\n return new DataStream({\r\n *[Symbol.iterator]() {\r\n for (const [id, item] of pairs) {\r\n yield [id, callback(item, id)];\r\n }\r\n },\r\n });\r\n }\r\n /**\r\n * Get the item with the maximum value of given property.\r\n *\r\n * @param callback - The function that picks and possibly converts the property.\r\n * @returns The item with the maximum if found otherwise null.\r\n */\r\n max(callback) {\r\n const iter = this._pairs[Symbol.iterator]();\r\n let curr = iter.next();\r\n if (curr.done) {\r\n return null;\r\n }\r\n let maxItem = curr.value[1];\r\n let maxValue = callback(curr.value[1], curr.value[0]);\r\n while (!(curr = iter.next()).done) {\r\n const [id, item] = curr.value;\r\n const value = callback(item, id);\r\n if (value > maxValue) {\r\n maxValue = value;\r\n maxItem = item;\r\n }\r\n }\r\n return maxItem;\r\n }\r\n /**\r\n * Get the item with the minimum value of given property.\r\n *\r\n * @param callback - The function that picks and possibly converts the property.\r\n * @returns The item with the minimum if found otherwise null.\r\n */\r\n min(callback) {\r\n const iter = this._pairs[Symbol.iterator]();\r\n let curr = iter.next();\r\n if (curr.done) {\r\n return null;\r\n }\r\n let minItem = curr.value[1];\r\n let minValue = callback(curr.value[1], curr.value[0]);\r\n while (!(curr = iter.next()).done) {\r\n const [id, item] = curr.value;\r\n const value = callback(item, id);\r\n if (value < minValue) {\r\n minValue = value;\r\n minItem = item;\r\n }\r\n }\r\n return minItem;\r\n }\r\n /**\r\n * Reduce the items into a single value.\r\n *\r\n * @param callback - The function that does the reduction.\r\n * @param accumulator - The initial value of the accumulator.\r\n * @typeParam T - The type of the accumulated value.\r\n * @returns The reduced value.\r\n */\r\n reduce(callback, accumulator) {\r\n for (const [id, item] of this._pairs) {\r\n accumulator = callback(accumulator, item, id);\r\n }\r\n return accumulator;\r\n }\r\n /**\r\n * Sort the items.\r\n *\r\n * @param callback - Item comparator.\r\n * @returns A new stream with sorted items.\r\n */\r\n sort(callback) {\r\n return new DataStream({\r\n [Symbol.iterator]: () => [...this._pairs]\r\n .sort(([idA, itemA], [idB, itemB]) => callback(itemA, itemB, idA, idB))[Symbol.iterator](),\r\n });\r\n }\r\n}\n\n/**\r\n * Add an id to given item if it doesn't have one already.\r\n *\r\n * @remarks\r\n * The item will be modified.\r\n * @param item - The item that will have an id after a call to this function.\r\n * @param idProp - The key of the id property.\r\n * @typeParam Item - Item type that may or may not have an id.\r\n * @typeParam IdProp - Name of the property that contains the id.\r\n * @returns true\r\n */\r\nfunction ensureFullItem(item, idProp) {\r\n if (item[idProp] == null) {\r\n // generate an id\r\n item[idProp] = v4();\r\n }\r\n return item;\r\n}\r\n/**\r\n * # DataSet\r\n *\r\n * Vis.js comes with a flexible DataSet, which can be used to hold and\r\n * manipulate unstructured data and listen for changes in the data. The DataSet\r\n * is key/value based. Data items can be added, updated and removed from the\r\n * DataSet, and one can subscribe to changes in the DataSet. The data in the\r\n * DataSet can be filtered and ordered. Data can be normalized when appending it\r\n * to the DataSet as well.\r\n *\r\n * ## Example\r\n *\r\n * The following example shows how to use a DataSet.\r\n *\r\n * ```javascript\r\n * // create a DataSet\r\n * var options = {};\r\n * var data = new vis.DataSet(options);\r\n *\r\n * // add items\r\n * // note that the data items can contain different properties and data formats\r\n * data.add([\r\n * {id: 1, text: 'item 1', date: new Date(2013, 6, 20), group: 1, first: true},\r\n * {id: 2, text: 'item 2', date: '2013-06-23', group: 2},\r\n * {id: 3, text: 'item 3', date: '2013-06-25', group: 2},\r\n * {id: 4, text: 'item 4'}\r\n * ]);\r\n *\r\n * // subscribe to any change in the DataSet\r\n * data.on('*', function (event, properties, senderId) {\r\n * console.log('event', event, properties);\r\n * });\r\n *\r\n * // update an existing item\r\n * data.update({id: 2, group: 1});\r\n *\r\n * // remove an item\r\n * data.remove(4);\r\n *\r\n * // get all ids\r\n * var ids = data.getIds();\r\n * console.log('ids', ids);\r\n *\r\n * // get a specific item\r\n * var item1 = data.get(1);\r\n * console.log('item1', item1);\r\n *\r\n * // retrieve a filtered subset of the data\r\n * var items = data.get({\r\n * filter: function (item) {\r\n * return item.group == 1;\r\n * }\r\n * });\r\n * console.log('filtered items', items);\r\n * ```\r\n *\r\n * @typeParam Item - Item type that may or may not have an id.\r\n * @typeParam IdProp - Name of the property that contains the id.\r\n */\r\nclass DataSet extends DataSetPart {\r\n /** Flush all queued calls. */\r\n flush;\r\n /** @inheritDoc */\r\n length;\r\n /** @inheritDoc */\r\n get idProp() {\r\n return this._idProp;\r\n }\r\n _options;\r\n _data;\r\n _idProp;\r\n _queue = null;\r\n /**\r\n * Construct a new DataSet.\r\n *\r\n * @param data - Initial data or options.\r\n * @param options - Options (type error if data is also options).\r\n */\r\n constructor(data, options) {\r\n super();\r\n // correctly read optional arguments\r\n if (data && !Array.isArray(data)) {\r\n options = data;\r\n data = [];\r\n }\r\n this._options = options || {};\r\n this._data = new Map(); // map with data indexed by id\r\n this.length = 0; // number of items in the DataSet\r\n this._idProp = this._options.fieldId || \"id\"; // name of the field containing id\r\n // add initial data when provided\r\n if (data && data.length) {\r\n this.add(data);\r\n }\r\n this.setOptions(options);\r\n }\r\n /**\r\n * Set new options.\r\n *\r\n * @param options - The new options.\r\n */\r\n setOptions(options) {\r\n if (options && options.queue !== undefined) {\r\n if (options.queue === false) {\r\n // delete queue if loaded\r\n if (this._queue) {\r\n this._queue.destroy();\r\n this._queue = null;\r\n }\r\n }\r\n else {\r\n // create queue and update its options\r\n if (!this._queue) {\r\n this._queue = Queue.extend(this, {\r\n replace: [\"add\", \"update\", \"remove\"],\r\n });\r\n }\r\n if (options.queue && typeof options.queue === \"object\") {\r\n this._queue.setOptions(options.queue);\r\n }\r\n }\r\n }\r\n }\r\n /**\r\n * Add a data item or an array with items.\r\n *\r\n * After the items are added to the DataSet, the DataSet will trigger an event `add`. When a `senderId` is provided, this id will be passed with the triggered event to all subscribers.\r\n *\r\n * ## Example\r\n *\r\n * ```javascript\r\n * // create a DataSet\r\n * const data = new vis.DataSet()\r\n *\r\n * // add items\r\n * const ids = data.add([\r\n * { id: 1, text: 'item 1' },\r\n * { id: 2, text: 'item 2' },\r\n * { text: 'item without an id' }\r\n * ])\r\n *\r\n * console.log(ids) // [1, 2, '']\r\n * ```\r\n *\r\n * @param data - Items to be added (ids will be generated if missing).\r\n * @param senderId - Sender id.\r\n * @returns addedIds - Array with the ids (generated if not present) of the added items.\r\n * @throws When an item with the same id as any of the added items already exists.\r\n */\r\n add(data, senderId) {\r\n const addedIds = [];\r\n let id;\r\n if (Array.isArray(data)) {\r\n // Array\r\n const idsToAdd = data.map((d) => d[this._idProp]);\r\n if (idsToAdd.some((id) => this._data.has(id))) {\r\n throw new Error(\"A duplicate id was found in the parameter array.\");\r\n }\r\n for (let i = 0, len = data.length; i < len; i++) {\r\n id = this._addItem(data[i]);\r\n addedIds.push(id);\r\n }\r\n }\r\n else if (data && typeof data === \"object\") {\r\n // Single item\r\n id = this._addItem(data);\r\n addedIds.push(id);\r\n }\r\n else {\r\n throw new Error(\"Unknown dataType\");\r\n }\r\n if (addedIds.length) {\r\n this._trigger(\"add\", { items: addedIds }, senderId);\r\n }\r\n return addedIds;\r\n }\r\n /**\r\n * Update existing items. When an item does not exist, it will be created.\r\n *\r\n * @remarks\r\n * The provided properties will be merged in the existing item. When an item does not exist, it will be created.\r\n *\r\n * After the items are updated, the DataSet will trigger an event `add` for the added items, and an event `update`. When a `senderId` is provided, this id will be passed with the triggered event to all subscribers.\r\n *\r\n * ## Example\r\n *\r\n * ```javascript\r\n * // create a DataSet\r\n * const data = new vis.DataSet([\r\n * { id: 1, text: 'item 1' },\r\n * { id: 2, text: 'item 2' },\r\n * { id: 3, text: 'item 3' }\r\n * ])\r\n *\r\n * // update items\r\n * const ids = data.update([\r\n * { id: 2, text: 'item 2 (updated)' },\r\n * { id: 4, text: 'item 4 (new)' }\r\n * ])\r\n *\r\n * console.log(ids) // [2, 4]\r\n * ```\r\n *\r\n * ## Warning for TypeScript users\r\n * This method may introduce partial items into the data set. Use add or updateOnly instead for better type safety.\r\n * @param data - Items to be updated (if the id is already present) or added (if the id is missing).\r\n * @param senderId - Sender id.\r\n * @returns updatedIds - The ids of the added (these may be newly generated if there was no id in the item from the data) or updated items.\r\n * @throws When the supplied data is neither an item nor an array of items.\r\n */\r\n update(data, senderId) {\r\n const addedIds = [];\r\n const updatedIds = [];\r\n const oldData = [];\r\n const updatedData = [];\r\n const idProp = this._idProp;\r\n const addOrUpdate = (item) => {\r\n const origId = item[idProp];\r\n if (origId != null && this._data.has(origId)) {\r\n const fullItem = item; // it has an id, therefore it is a fullitem\r\n const oldItem = Object.assign({}, this._data.get(origId));\r\n // update item\r\n const id = this._updateItem(fullItem);\r\n updatedIds.push(id);\r\n updatedData.push(fullItem);\r\n oldData.push(oldItem);\r\n }\r\n else {\r\n // add new item\r\n const id = this._addItem(item);\r\n addedIds.push(id);\r\n }\r\n };\r\n if (Array.isArray(data)) {\r\n // Array\r\n for (let i = 0, len = data.length; i < len; i++) {\r\n if (data[i] && typeof data[i] === \"object\") {\r\n addOrUpdate(data[i]);\r\n }\r\n else {\r\n console.warn(\"Ignoring input item, which is not an object at index \" + i);\r\n }\r\n }\r\n }\r\n else if (data && typeof data === \"object\") {\r\n // Single item\r\n addOrUpdate(data);\r\n }\r\n else {\r\n throw new Error(\"Unknown dataType\");\r\n }\r\n if (addedIds.length) {\r\n this._trigger(\"add\", { items: addedIds }, senderId);\r\n }\r\n if (updatedIds.length) {\r\n const props = { items: updatedIds, oldData: oldData, data: updatedData };\r\n // TODO: remove deprecated property 'data' some day\r\n //Object.defineProperty(props, 'data', {\r\n // 'get': (function() {\r\n // console.warn('Property data is deprecated. Use DataSet.get(ids) to retrieve the new data, use the oldData property on this object to get the old data');\r\n // return updatedData;\r\n // }).bind(this)\r\n //});\r\n this._trigger(\"update\", props, senderId);\r\n }\r\n return addedIds.concat(updatedIds);\r\n }\r\n /**\r\n * Update existing items. When an item does not exist, an error will be thrown.\r\n *\r\n * @remarks\r\n * The provided properties will be deeply merged into the existing item.\r\n * When an item does not exist (id not present in the data set or absent), an error will be thrown and nothing will be changed.\r\n *\r\n * After the items are updated, the DataSet will trigger an event `update`.\r\n * When a `senderId` is provided, this id will be passed with the triggered event to all subscribers.\r\n *\r\n * ## Example\r\n *\r\n * ```javascript\r\n * // create a DataSet\r\n * const data = new vis.DataSet([\r\n * { id: 1, text: 'item 1' },\r\n * { id: 2, text: 'item 2' },\r\n * { id: 3, text: 'item 3' },\r\n * ])\r\n *\r\n * // update items\r\n * const ids = data.update([\r\n * { id: 2, text: 'item 2 (updated)' }, // works\r\n * // { id: 4, text: 'item 4 (new)' }, // would throw\r\n * // { text: 'item 4 (new)' }, // would also throw\r\n * ])\r\n *\r\n * console.log(ids) // [2]\r\n * ```\r\n * @param data - Updates (the id and optionally other props) to the items in this data set.\r\n * @param senderId - Sender id.\r\n * @returns updatedIds - The ids of the updated items.\r\n * @throws When the supplied data is neither an item nor an array of items, when the ids are missing.\r\n */\r\n updateOnly(data, senderId) {\r\n if (!Array.isArray(data)) {\r\n data = [data];\r\n }\r\n const updateEventData = data\r\n .map((update) => {\r\n const oldData = this._data.get(update[this._idProp]);\r\n if (oldData == null) {\r\n throw new Error(\"Updating non-existent items is not allowed.\");\r\n }\r\n return { oldData, update };\r\n })\r\n .map(({ oldData, update, }) => {\r\n const id = oldData[this._idProp];\r\n const updatedData = pureDeepObjectAssign(oldData, update);\r\n this._data.set(id, updatedData);\r\n return {\r\n id,\r\n oldData: oldData,\r\n updatedData,\r\n };\r\n });\r\n if (updateEventData.length) {\r\n const props = {\r\n items: updateEventData.map((value) => value.id),\r\n oldData: updateEventData.map((value) => value.oldData),\r\n data: updateEventData.map((value) => value.updatedData),\r\n };\r\n // TODO: remove deprecated property 'data' some day\r\n //Object.defineProperty(props, 'data', {\r\n // 'get': (function() {\r\n // console.warn('Property data is deprecated. Use DataSet.get(ids) to retrieve the new data, use the oldData property on this object to get the old data');\r\n // return updatedData;\r\n // }).bind(this)\r\n //});\r\n this._trigger(\"update\", props, senderId);\r\n return props.items;\r\n }\r\n else {\r\n return [];\r\n }\r\n }\r\n /** @inheritDoc */\r\n get(first, second) {\r\n // @TODO: Woudn't it be better to split this into multiple methods?\r\n // parse the arguments\r\n let id = undefined;\r\n let ids = undefined;\r\n let options = undefined;\r\n if (isId(first)) {\r\n // get(id [, options])\r\n id = first;\r\n options = second;\r\n }\r\n else if (Array.isArray(first)) {\r\n // get(ids [, options])\r\n ids = first;\r\n options = second;\r\n }\r\n else {\r\n // get([, options])\r\n options = first;\r\n }\r\n // determine the return type\r\n const returnType = options && options.returnType === \"Object\" ? \"Object\" : \"Array\";\r\n // @TODO: WTF is this? Or am I missing something?\r\n // var returnType\r\n // if (options && options.returnType) {\r\n // var allowedValues = ['Array', 'Object']\r\n // returnType =\r\n // allowedValues.indexOf(options.returnType) == -1\r\n // ? 'Array'\r\n // : options.returnType\r\n // } else {\r\n // returnType = 'Array'\r\n // }\r\n // build options\r\n const filter = options && options.filter;\r\n const items = [];\r\n let item = undefined;\r\n let itemIds = undefined;\r\n let itemId = undefined;\r\n // convert items\r\n if (id != null) {\r\n // return a single item\r\n item = this._data.get(id);\r\n if (item && filter && !filter(item)) {\r\n item = undefined;\r\n }\r\n }\r\n else if (ids != null) {\r\n // return a subset of items\r\n for (let i = 0, len = ids.length; i < len; i++) {\r\n item = this._data.get(ids[i]);\r\n if (item != null && (!filter || filter(item))) {\r\n items.push(item);\r\n }\r\n }\r\n }\r\n else {\r\n // return all items\r\n itemIds = [...this._data.keys()];\r\n for (let i = 0, len = itemIds.length; i < len; i++) {\r\n itemId = itemIds[i];\r\n item = this._data.get(itemId);\r\n if (item != null && (!filter || filter(item))) {\r\n items.push(item);\r\n }\r\n }\r\n }\r\n // order the results\r\n if (options && options.order && id == undefined) {\r\n this._sort(items, options.order);\r\n }\r\n // filter fields of the items\r\n if (options && options.fields) {\r\n const fields = options.fields;\r\n if (id != undefined && item != null) {\r\n item = this._filterFields(item, fields);\r\n }\r\n else {\r\n for (let i = 0, len = items.length; i < len; i++) {\r\n items[i] = this._filterFields(items[i], fields);\r\n }\r\n }\r\n }\r\n // return the results\r\n if (returnType == \"Object\") {\r\n const result = {};\r\n for (let i = 0, len = items.length; i < len; i++) {\r\n const resultant = items[i];\r\n // @TODO: Shoudn't this be this._fieldId?\r\n // result[resultant.id] = resultant\r\n const id = resultant[this._idProp];\r\n result[id] = resultant;\r\n }\r\n return result;\r\n }\r\n else {\r\n if (id != null) {\r\n // a single item\r\n return item ?? null;\r\n }\r\n else {\r\n // just return our array\r\n return items;\r\n }\r\n }\r\n }\r\n /** @inheritDoc */\r\n getIds(options) {\r\n const data = this._data;\r\n const filter = options && options.filter;\r\n const order = options && options.order;\r\n const itemIds = [...data.keys()];\r\n const ids = [];\r\n if (filter) {\r\n // get filtered items\r\n if (order) {\r\n // create ordered list\r\n const items = [];\r\n for (let i = 0, len = itemIds.length; i < len; i++) {\r\n const id = itemIds[i];\r\n const item = this._data.get(id);\r\n if (item != null && filter(item)) {\r\n items.push(item);\r\n }\r\n }\r\n this._sort(items, order);\r\n for (let i = 0, len = items.length; i < len; i++) {\r\n ids.push(items[i][this._idProp]);\r\n }\r\n }\r\n else {\r\n // create unordered list\r\n for (let i = 0, len = itemIds.length; i < len; i++) {\r\n const id = itemIds[i];\r\n const item = this._data.get(id);\r\n if (item != null && filter(item)) {\r\n ids.push(item[this._idProp]);\r\n }\r\n }\r\n }\r\n }\r\n else {\r\n // get all items\r\n if (order) {\r\n // create an ordered list\r\n const items = [];\r\n for (let i = 0, len = itemIds.length; i < len; i++) {\r\n const id = itemIds[i];\r\n items.push(data.get(id));\r\n }\r\n this._sort(items, order);\r\n for (let i = 0, len = items.length; i < len; i++) {\r\n ids.push(items[i][this._idProp]);\r\n }\r\n }\r\n else {\r\n // create unordered list\r\n for (let i = 0, len = itemIds.length; i < len; i++) {\r\n const id = itemIds[i];\r\n const item = data.get(id);\r\n if (item != null) {\r\n ids.push(item[this._idProp]);\r\n }\r\n }\r\n }\r\n }\r\n return ids;\r\n }\r\n /** @inheritDoc */\r\n getDataSet() {\r\n return this;\r\n }\r\n /** @inheritDoc */\r\n forEach(callback, options) {\r\n const filter = options && options.filter;\r\n const data = this._data;\r\n const itemIds = [...data.keys()];\r\n if (options && options.order) {\r\n // execute forEach on ordered list\r\n const items = this.get(options);\r\n for (let i = 0, len = items.length; i < len; i++) {\r\n const item = items[i];\r\n const id = item[this._idProp];\r\n callback(item, id);\r\n }\r\n }\r\n else {\r\n // unordered\r\n for (let i = 0, len = itemIds.length; i < len; i++) {\r\n const id = itemIds[i];\r\n const item = this._data.get(id);\r\n if (item != null && (!filter || filter(item))) {\r\n callback(item, id);\r\n }\r\n }\r\n }\r\n }\r\n /** @inheritDoc */\r\n map(callback, options) {\r\n const filter = options && options.filter;\r\n const mappedItems = [];\r\n const data = this._data;\r\n const itemIds = [...data.keys()];\r\n // convert and filter items\r\n for (let i = 0, len = itemIds.length; i < len; i++) {\r\n const id = itemIds[i];\r\n const item = this._data.get(id);\r\n if (item != null && (!filter || filter(item))) {\r\n mappedItems.push(callback(item, id));\r\n }\r\n }\r\n // order items\r\n if (options && options.order) {\r\n this._sort(mappedItems, options.order);\r\n }\r\n return mappedItems;\r\n }\r\n /**\r\n * Filter the fields of an item.\r\n *\r\n * @param item - The item whose fields should be filtered.\r\n * @param fields - The names of the fields that will be kept.\r\n * @typeParam K - Field name type.\r\n * @returns The item without any additional fields.\r\n */\r\n _filterFields(item, fields) {\r\n if (!item) {\r\n // item is null\r\n return item;\r\n }\r\n return (Array.isArray(fields)\r\n ? // Use the supplied array\r\n fields\r\n : // Use the keys of the supplied object\r\n Object.keys(fields)).reduce((filteredItem, field) => {\r\n filteredItem[field] = item[field];\r\n return filteredItem;\r\n }, {});\r\n }\r\n /**\r\n * Sort the provided array with items.\r\n *\r\n * @param items - Items to be sorted in place.\r\n * @param order - A field name or custom sort function.\r\n * @typeParam T - The type of the items in the items array.\r\n */\r\n _sort(items, order) {\r\n if (typeof order === \"string\") {\r\n // order by provided field name\r\n const name = order; // field name\r\n items.sort((a, b) => {\r\n // @TODO: How to treat missing properties?\r\n const av = a[name];\r\n const bv = b[name];\r\n return av > bv ? 1 : av < bv ? -1 : 0;\r\n });\r\n }\r\n else if (typeof order === \"function\") {\r\n // order by sort function\r\n items.sort(order);\r\n }\r\n else {\r\n // TODO: extend order by an Object {field:string, direction:string}\r\n // where direction can be 'asc' or 'desc'\r\n throw new TypeError(\"Order must be a function or a string\");\r\n }\r\n }\r\n /**\r\n * Remove an item or multiple items by “reference” (only the id is used) or by id.\r\n *\r\n * The method ignores removal of non-existing items, and returns an array containing the ids of the items which are actually removed from the DataSet.\r\n *\r\n * After the items are removed, the DataSet will trigger an event `remove` for the removed items. When a `senderId` is provided, this id will be passed with the triggered event to all subscribers.\r\n *\r\n * ## Example\r\n * ```javascript\r\n * // create a DataSet\r\n * const data = new vis.DataSet([\r\n * { id: 1, text: 'item 1' },\r\n * { id: 2, text: 'item 2' },\r\n * { id: 3, text: 'item 3' }\r\n * ])\r\n *\r\n * // remove items\r\n * const ids = data.remove([2, { id: 3 }, 4])\r\n *\r\n * console.log(ids) // [2, 3]\r\n * ```\r\n *\r\n * @param id - One or more items or ids of items to be removed.\r\n * @param senderId - Sender id.\r\n * @returns The ids of the removed items.\r\n */\r\n remove(id, senderId) {\r\n const removedIds = [];\r\n const removedItems = [];\r\n // force everything to be an array for simplicity\r\n const ids = Array.isArray(id) ? id : [id];\r\n for (let i = 0, len = ids.length; i < len; i++) {\r\n const item = this._remove(ids[i]);\r\n if (item) {\r\n const itemId = item[this._idProp];\r\n if (itemId != null) {\r\n removedIds.push(itemId);\r\n removedItems.push(item);\r\n }\r\n }\r\n }\r\n if (removedIds.length) {\r\n this._trigger(\"remove\", { items: removedIds, oldData: removedItems }, senderId);\r\n }\r\n return removedIds;\r\n }\r\n /**\r\n * Remove an item by its id or reference.\r\n *\r\n * @param id - Id of an item or the item itself.\r\n * @returns The removed item if removed, null otherwise.\r\n */\r\n _remove(id) {\r\n // @TODO: It origianlly returned the item although the docs say id.\r\n // The code expects the item, so probably an error in the docs.\r\n let ident;\r\n // confirm the id to use based on the args type\r\n if (isId(id)) {\r\n ident = id;\r\n }\r\n else if (id && typeof id === \"object\") {\r\n ident = id[this._idProp]; // look for the identifier field using ._idProp\r\n }\r\n // do the removing if the item is found\r\n if (ident != null && this._data.has(ident)) {\r\n const item = this._data.get(ident) || null;\r\n this._data.delete(ident);\r\n --this.length;\r\n return item;\r\n }\r\n return null;\r\n }\r\n /**\r\n * Clear the entire data set.\r\n *\r\n * After the items are removed, the {@link DataSet} will trigger an event `remove` for all removed items. When a `senderId` is provided, this id will be passed with the triggered event to all subscribers.\r\n *\r\n * @param senderId - Sender id.\r\n * @returns removedIds - The ids of all removed items.\r\n */\r\n clear(senderId) {\r\n const ids = [...this._data.keys()];\r\n const items = [];\r\n for (let i = 0, len = ids.length; i < len; i++) {\r\n items.push(this._data.get(ids[i]));\r\n }\r\n this._data.clear();\r\n this.length = 0;\r\n this._trigger(\"remove\", { items: ids, oldData: items }, senderId);\r\n return ids;\r\n }\r\n /**\r\n * Find the item with maximum value of a specified field.\r\n *\r\n * @param field - Name of the property that should be searched for max value.\r\n * @returns Item containing max value, or null if no items.\r\n */\r\n max(field) {\r\n let max = null;\r\n let maxField = null;\r\n for (const item of this._data.values()) {\r\n const itemField = item[field];\r\n if (typeof itemField === \"number\" &&\r\n (maxField == null || itemField > maxField)) {\r\n max = item;\r\n maxField = itemField;\r\n }\r\n }\r\n return max || null;\r\n }\r\n /**\r\n * Find the item with minimum value of a specified field.\r\n *\r\n * @param field - Name of the property that should be searched for min value.\r\n * @returns Item containing min value, or null if no items.\r\n */\r\n min(field) {\r\n let min = null;\r\n let minField = null;\r\n for (const item of this._data.values()) {\r\n const itemField = item[field];\r\n if (typeof itemField === \"number\" &&\r\n (minField == null || itemField < minField)) {\r\n min = item;\r\n minField = itemField;\r\n }\r\n }\r\n return min || null;\r\n }\r\n /**\r\n * Find all distinct values of a specified field\r\n *\r\n * @param prop - The property name whose distinct values should be returned.\r\n * @returns Unordered array containing all distinct values. Items without specified property are ignored.\r\n */\r\n distinct(prop) {\r\n const data = this._data;\r\n const itemIds = [...data.keys()];\r\n const values = [];\r\n let count = 0;\r\n for (let i = 0, len = itemIds.length; i < len; i++) {\r\n const id = itemIds[i];\r\n const item = data.get(id);\r\n const value = item[prop];\r\n let exists = false;\r\n for (let j = 0; j < count; j++) {\r\n if (values[j] == value) {\r\n exists = true;\r\n break;\r\n }\r\n }\r\n if (!exists && value !== undefined) {\r\n values[count] = value;\r\n count++;\r\n }\r\n }\r\n return values;\r\n }\r\n /**\r\n * Add a single item. Will fail when an item with the same id already exists.\r\n *\r\n * @param item - A new item to be added.\r\n * @returns Added item's id. An id is generated when it is not present in the item.\r\n */\r\n _addItem(item) {\r\n const fullItem = ensureFullItem(item, this._idProp);\r\n const id = fullItem[this._idProp];\r\n // check whether this id is already taken\r\n if (this._data.has(id)) {\r\n // item already exists\r\n throw new Error(\"Cannot add item: item with id \" + id + \" already exists\");\r\n }\r\n this._data.set(id, fullItem);\r\n ++this.length;\r\n return id;\r\n }\r\n /**\r\n * Update a single item: merge with existing item.\r\n * Will fail when the item has no id, or when there does not exist an item with the same id.\r\n *\r\n * @param update - The new item\r\n * @returns The id of the updated item.\r\n */\r\n _updateItem(update) {\r\n const id = update[this._idProp];\r\n if (id == null) {\r\n throw new Error(\"Cannot update item: item has no id (item: \" +\r\n JSON.stringify(update) +\r\n \")\");\r\n }\r\n const item = this._data.get(id);\r\n if (!item) {\r\n // item doesn't exist\r\n throw new Error(\"Cannot update item: no item with id \" + id + \" found\");\r\n }\r\n this._data.set(id, { ...item, ...update });\r\n return id;\r\n }\r\n /** @inheritDoc */\r\n stream(ids) {\r\n if (ids) {\r\n const data = this._data;\r\n return new DataStream({\r\n *[Symbol.iterator]() {\r\n for (const id of ids) {\r\n const item = data.get(id);\r\n if (item != null) {\r\n yield [id, item];\r\n }\r\n }\r\n },\r\n });\r\n }\r\n else {\r\n return new DataStream({\r\n [Symbol.iterator]: this._data.entries.bind(this._data),\r\n });\r\n }\r\n }\r\n}\n\n/**\r\n * DataView\r\n *\r\n * A DataView offers a filtered and/or formatted view on a DataSet. One can subscribe to changes in a DataView, and easily get filtered or formatted data without having to specify filters and field types all the time.\r\n *\r\n * ## Example\r\n * ```javascript\r\n * // create a DataSet\r\n * var data = new vis.DataSet();\r\n * data.add([\r\n * {id: 1, text: 'item 1', date: new Date(2013, 6, 20), group: 1, first: true},\r\n * {id: 2, text: 'item 2', date: '2013-06-23', group: 2},\r\n * {id: 3, text: 'item 3', date: '2013-06-25', group: 2},\r\n * {id: 4, text: 'item 4'}\r\n * ]);\r\n *\r\n * // create a DataView\r\n * // the view will only contain items having a property group with value 1,\r\n * // and will only output fields id, text, and date.\r\n * var view = new vis.DataView(data, {\r\n * filter: function (item) {\r\n * return (item.group == 1);\r\n * },\r\n * fields: ['id', 'text', 'date']\r\n * });\r\n *\r\n * // subscribe to any change in the DataView\r\n * view.on('*', function (event, properties, senderId) {\r\n * console.log('event', event, properties);\r\n * });\r\n *\r\n * // update an item in the data set\r\n * data.update({id: 2, group: 1});\r\n *\r\n * // get all ids in the view\r\n * var ids = view.getIds();\r\n * console.log('ids', ids); // will output [1, 2]\r\n *\r\n * // get all items in the view\r\n * var items = view.get();\r\n * ```\r\n *\r\n * @typeParam Item - Item type that may or may not have an id.\r\n * @typeParam IdProp - Name of the property that contains the id.\r\n */\r\nclass DataView extends DataSetPart {\r\n /** @inheritDoc */\r\n length = 0;\r\n /** @inheritDoc */\r\n get idProp() {\r\n return this.getDataSet().idProp;\r\n }\r\n _listener;\r\n _data; // constructor → setData\r\n _ids = new Set(); // ids of the items currently in memory (just contains a boolean true)\r\n _options;\r\n /**\r\n * Create a DataView.\r\n *\r\n * @param data - The instance containing data (directly or indirectly).\r\n * @param options - Options to configure this data view.\r\n */\r\n constructor(data, options) {\r\n super();\r\n this._options = options || {};\r\n this._listener = this._onEvent.bind(this);\r\n this.setData(data);\r\n }\r\n // TODO: implement a function .config() to dynamically update things like configured filter\r\n // and trigger changes accordingly\r\n /**\r\n * Set a data source for the view.\r\n *\r\n * @param data - The instance containing data (directly or indirectly).\r\n * @remarks\r\n * Note that when the data view is bound to a data set it won't be garbage\r\n * collected unless the data set is too. Use `dataView.setData(null)` or\r\n * `dataView.dispose()` to enable garbage collection before you lose the last\r\n * reference.\r\n */\r\n setData(data) {\r\n if (this._data) {\r\n // unsubscribe from current dataset\r\n if (this._data.off) {\r\n this._data.off(\"*\", this._listener);\r\n }\r\n // trigger a remove of all items in memory\r\n const ids = this._data.getIds({ filter: this._options.filter });\r\n const items = this._data.get(ids);\r\n this._ids.clear();\r\n this.length = 0;\r\n this._trigger(\"remove\", { items: ids, oldData: items });\r\n }\r\n if (data != null) {\r\n this._data = data;\r\n // trigger an add of all added items\r\n const ids = this._data.getIds({ filter: this._options.filter });\r\n for (let i = 0, len = ids.length; i < len; i++) {\r\n const id = ids[i];\r\n this._ids.add(id);\r\n }\r\n this.length = ids.length;\r\n this._trigger(\"add\", { items: ids });\r\n }\r\n else {\r\n this._data = new DataSet();\r\n }\r\n // subscribe to new dataset\r\n if (this._data.on) {\r\n this._data.on(\"*\", this._listener);\r\n }\r\n }\r\n /**\r\n * Refresh the DataView.\r\n * Useful when the DataView has a filter function containing a variable parameter.\r\n */\r\n refresh() {\r\n const ids = this._data.getIds({\r\n filter: this._options.filter,\r\n });\r\n const oldIds = [...this._ids];\r\n const newIds = {};\r\n const addedIds = [];\r\n const removedIds = [];\r\n const removedItems = [];\r\n // check for additions\r\n for (let i = 0, len = ids.length; i < len; i++) {\r\n const id = ids[i];\r\n newIds[id] = true;\r\n if (!this._ids.has(id)) {\r\n addedIds.push(id);\r\n this._ids.add(id);\r\n }\r\n }\r\n // check for removals\r\n for (let i = 0, len = oldIds.length; i < len; i++) {\r\n const id = oldIds[i];\r\n const item = this._data.get(id);\r\n if (item == null) {\r\n // @TODO: Investigate.\r\n // Doesn't happen during tests or examples.\r\n // Is it really impossible or could it eventually happen?\r\n // How to handle it if it does? The types guarantee non-nullable items.\r\n console.error(\"If you see this, report it please.\");\r\n }\r\n else if (!newIds[id]) {\r\n removedIds.push(id);\r\n removedItems.push(item);\r\n this._ids.delete(id);\r\n }\r\n }\r\n this.length += addedIds.length - removedIds.length;\r\n // trigger events\r\n if (addedIds.length) {\r\n this._trigger(\"add\", { items: addedIds });\r\n }\r\n if (removedIds.length) {\r\n this._trigger(\"remove\", { items: removedIds, oldData: removedItems });\r\n }\r\n }\r\n /** @inheritDoc */\r\n get(first, second) {\r\n if (this._data == null) {\r\n return null;\r\n }\r\n // parse the arguments\r\n let ids = null;\r\n let options;\r\n if (isId(first) || Array.isArray(first)) {\r\n ids = first;\r\n options = second;\r\n }\r\n else {\r\n options = first;\r\n }\r\n // extend the options with the default options and provided options\r\n const viewOptions = Object.assign({}, this._options, options);\r\n // create a combined filter method when needed\r\n const thisFilter = this._options.filter;\r\n const optionsFilter = options && options.filter;\r\n if (thisFilter && optionsFilter) {\r\n viewOptions.filter = (item) => {\r\n return thisFilter(item) && optionsFilter(item);\r\n };\r\n }\r\n if (ids == null) {\r\n return this._data.get(viewOptions);\r\n }\r\n else {\r\n return this._data.get(ids, viewOptions);\r\n }\r\n }\r\n /** @inheritDoc */\r\n getIds(options) {\r\n if (this._data.length) {\r\n const defaultFilter = this._options.filter;\r\n const optionsFilter = options != null ? options.filter : null;\r\n let filter;\r\n if (optionsFilter) {\r\n if (defaultFilter) {\r\n filter = (item) => {\r\n return defaultFilter(item) && optionsFilter(item);\r\n };\r\n }\r\n else {\r\n filter = optionsFilter;\r\n }\r\n }\r\n else {\r\n filter = defaultFilter;\r\n }\r\n return this._data.getIds({\r\n filter: filter,\r\n order: options && options.order,\r\n });\r\n }\r\n else {\r\n return [];\r\n }\r\n }\r\n /** @inheritDoc */\r\n forEach(callback, options) {\r\n if (this._data) {\r\n const defaultFilter = this._options.filter;\r\n const optionsFilter = options && options.filter;\r\n let filter;\r\n if (optionsFilter) {\r\n if (defaultFilter) {\r\n filter = function (item) {\r\n return defaultFilter(item) && optionsFilter(item);\r\n };\r\n }\r\n else {\r\n filter = optionsFilter;\r\n }\r\n }\r\n else {\r\n filter = defaultFilter;\r\n }\r\n this._data.forEach(callback, {\r\n filter: filter,\r\n order: options && options.order,\r\n });\r\n }\r\n }\r\n /** @inheritDoc */\r\n map(callback, options) {\r\n if (this._data) {\r\n const defaultFilter = this._options.filter;\r\n const optionsFilter = options && options.filter;\r\n let filter;\r\n if (optionsFilter) {\r\n if (defaultFilter) {\r\n filter = (item) => {\r\n return defaultFilter(item) && optionsFilter(item);\r\n };\r\n }\r\n else {\r\n filter = optionsFilter;\r\n }\r\n }\r\n else {\r\n filter = defaultFilter;\r\n }\r\n return this._data.map(callback, {\r\n filter: filter,\r\n order: options && options.order,\r\n });\r\n }\r\n else {\r\n return [];\r\n }\r\n }\r\n /** @inheritDoc */\r\n getDataSet() {\r\n return this._data.getDataSet();\r\n }\r\n /** @inheritDoc */\r\n stream(ids) {\r\n return this._data.stream(ids || {\r\n [Symbol.iterator]: this._ids.keys.bind(this._ids),\r\n });\r\n }\r\n /**\r\n * Render the instance unusable prior to garbage collection.\r\n *\r\n * @remarks\r\n * The intention of this method is to help discover scenarios where the data\r\n * view is being used when the programmer thinks it has been garbage collected\r\n * already. It's stricter version of `dataView.setData(null)`.\r\n */\r\n dispose() {\r\n if (this._data?.off) {\r\n this._data.off(\"*\", this._listener);\r\n }\r\n const message = \"This data view has already been disposed of.\";\r\n const replacement = {\r\n get: () => {\r\n throw new Error(message);\r\n },\r\n set: () => {\r\n throw new Error(message);\r\n },\r\n configurable: false,\r\n };\r\n for (const key of Reflect.ownKeys(DataView.prototype)) {\r\n Object.defineProperty(this, key, replacement);\r\n }\r\n }\r\n /**\r\n * Event listener. Will propagate all events from the connected data set to the subscribers of the DataView, but will filter the items and only trigger when there are changes in the filtered data set.\r\n *\r\n * @param event - The name of the event.\r\n * @param params - Parameters of the event.\r\n * @param senderId - Id supplied by the sender.\r\n */\r\n _onEvent(event, params, senderId) {\r\n if (!params || !params.items || !this._data) {\r\n return;\r\n }\r\n const ids = params.items;\r\n const addedIds = [];\r\n const updatedIds = [];\r\n const removedIds = [];\r\n const oldItems = [];\r\n const updatedItems = [];\r\n const removedItems = [];\r\n switch (event) {\r\n case \"add\":\r\n // filter the ids of the added items\r\n for (let i = 0, len = ids.length; i < len; i++) {\r\n const id = ids[i];\r\n const item = this.get(id);\r\n if (item) {\r\n this._ids.add(id);\r\n addedIds.push(id);\r\n }\r\n }\r\n break;\r\n case \"update\":\r\n // determine the event from the views viewpoint: an updated\r\n // item can be added, updated, or removed from this view.\r\n for (let i = 0, len = ids.length; i < len; i++) {\r\n const id = ids[i];\r\n const item = this.get(id);\r\n if (item) {\r\n if (this._ids.has(id)) {\r\n updatedIds.push(id);\r\n updatedItems.push(params.data[i]);\r\n oldItems.push(params.oldData[i]);\r\n }\r\n else {\r\n this._ids.add(id);\r\n addedIds.push(id);\r\n }\r\n }\r\n else {\r\n if (this._ids.has(id)) {\r\n this._ids.delete(id);\r\n removedIds.push(id);\r\n removedItems.push(params.oldData[i]);\r\n }\r\n }\r\n }\r\n break;\r\n case \"remove\":\r\n // filter the ids of the removed items\r\n for (let i = 0, len = ids.length; i < len; i++) {\r\n const id = ids[i];\r\n if (this._ids.has(id)) {\r\n this._ids.delete(id);\r\n removedIds.push(id);\r\n removedItems.push(params.oldData[i]);\r\n }\r\n }\r\n break;\r\n }\r\n this.length += addedIds.length - removedIds.length;\r\n if (addedIds.length) {\r\n this._trigger(\"add\", { items: addedIds }, senderId);\r\n }\r\n if (updatedIds.length) {\r\n this._trigger(\"update\", { items: updatedIds, oldData: oldItems, data: updatedItems }, senderId);\r\n }\r\n if (removedIds.length) {\r\n this._trigger(\"remove\", { items: removedIds, oldData: removedItems }, senderId);\r\n }\r\n }\r\n}\n\n/**\r\n * Check that given value is compatible with Vis Data Set interface.\r\n *\r\n * @param idProp - The expected property to contain item id.\r\n * @param v - The value to be tested.\r\n * @returns True if all expected values and methods match, false otherwise.\r\n */\r\nfunction isDataSetLike(idProp, v) {\r\n return (typeof v === \"object\" &&\r\n v !== null &&\r\n idProp === v.idProp &&\r\n typeof v.add === \"function\" &&\r\n typeof v.clear === \"function\" &&\r\n typeof v.distinct === \"function\" &&\r\n typeof v.forEach === \"function\" &&\r\n typeof v.get === \"function\" &&\r\n typeof v.getDataSet === \"function\" &&\r\n typeof v.getIds === \"function\" &&\r\n typeof v.length === \"number\" &&\r\n typeof v.map === \"function\" &&\r\n typeof v.max === \"function\" &&\r\n typeof v.min === \"function\" &&\r\n typeof v.off === \"function\" &&\r\n typeof v.on === \"function\" &&\r\n typeof v.remove === \"function\" &&\r\n typeof v.setOptions === \"function\" &&\r\n typeof v.stream === \"function\" &&\r\n typeof v.update === \"function\" &&\r\n typeof v.updateOnly === \"function\");\r\n}\n\n/**\r\n * Check that given value is compatible with Vis Data View interface.\r\n *\r\n * @param idProp - The expected property to contain item id.\r\n * @param v - The value to be tested.\r\n * @returns True if all expected values and methods match, false otherwise.\r\n */\r\nfunction isDataViewLike(idProp, v) {\r\n return (typeof v === \"object\" &&\r\n v !== null &&\r\n idProp === v.idProp &&\r\n typeof v.forEach === \"function\" &&\r\n typeof v.get === \"function\" &&\r\n typeof v.getDataSet === \"function\" &&\r\n typeof v.getIds === \"function\" &&\r\n typeof v.length === \"number\" &&\r\n typeof v.map === \"function\" &&\r\n typeof v.off === \"function\" &&\r\n typeof v.on === \"function\" &&\r\n typeof v.stream === \"function\" &&\r\n isDataSetLike(idProp, v.getDataSet()));\r\n}\n\nexport { DataSet, DataStream, DataView, Queue, createNewDataPipeFrom, isDataSetLike, isDataViewLike };\n//# sourceMappingURL=vis-data.js.map\n","'use strict';\nvar global = require('../internals/global');\nvar fails = require('../internals/fails');\nvar uncurryThis = require('../internals/function-uncurry-this');\nvar toString = require('../internals/to-string');\nvar trim = require('../internals/string-trim').trim;\nvar whitespaces = require('../internals/whitespaces');\n\nvar charAt = uncurryThis(''.charAt);\nvar $parseFloat = global.parseFloat;\nvar Symbol = global.Symbol;\nvar ITERATOR = Symbol && Symbol.iterator;\nvar FORCED = 1 / $parseFloat(whitespaces + '-0') !== -Infinity\n // MS Edge 18- broken with boxed symbols\n || (ITERATOR && !fails(function () { $parseFloat(Object(ITERATOR)); }));\n\n// `parseFloat` method\n// https://tc39.es/ecma262/#sec-parsefloat-string\nmodule.exports = FORCED ? function parseFloat(string) {\n var trimmedString = trim(toString(string));\n var result = $parseFloat(trimmedString);\n return result === 0 && charAt(trimmedString, 0) === '-' ? -0 : result;\n} : $parseFloat;\n","'use strict';\nvar $ = require('../internals/export');\nvar $parseFloat = require('../internals/number-parse-float');\n\n// `parseFloat` method\n// https://tc39.es/ecma262/#sec-parsefloat-string\n$({ global: true, forced: parseFloat !== $parseFloat }, {\n parseFloat: $parseFloat\n});\n","'use strict';\nrequire('../modules/es.parse-float');\nvar path = require('../internals/path');\n\nmodule.exports = path.parseFloat;\n","'use strict';\nvar $ = require('../internals/export');\nvar fails = require('../internals/fails');\nvar getOwnPropertyNames = require('../internals/object-get-own-property-names-external').f;\n\n// eslint-disable-next-line es/no-object-getownpropertynames -- required for testing\nvar FAILS_ON_PRIMITIVES = fails(function () { return !Object.getOwnPropertyNames(1); });\n\n// `Object.getOwnPropertyNames` method\n// https://tc39.es/ecma262/#sec-object.getownpropertynames\n$({ target: 'Object', stat: true, forced: FAILS_ON_PRIMITIVES }, {\n getOwnPropertyNames: getOwnPropertyNames\n});\n","'use strict';\nrequire('../../modules/es.object.get-own-property-names');\nvar path = require('../../internals/path');\n\nvar Object = path.Object;\n\nmodule.exports = function getOwnPropertyNames(it) {\n return Object.getOwnPropertyNames(it);\n};\n","'use strict';\nvar parent = require('../../es/object/get-own-property-names');\n\nmodule.exports = parent;\n","import { topMost } from \"vis-util/esnext\";\n\n/**\n * Helper functions for components\n */\n\n/**\n * Determine values to use for (sub)options of 'chosen'.\n *\n * This option is either a boolean or an object whose values should be examined further.\n * The relevant structures are:\n *\n * - chosen: \n * - chosen: { subOption: }\n *\n * Where subOption is 'node', 'edge' or 'label'.\n *\n * The intention of this method appears to be to set a specific priority to the options;\n * Since most properties are either bridged or merged into the local options objects, there\n * is not much point in handling them separately.\n * TODO: examine if 'most' in previous sentence can be replaced with 'all'. In that case, we\n * should be able to get rid of this method.\n *\n * @param {string} subOption option within object 'chosen' to consider; either 'node', 'edge' or 'label'\n * @param {object} pile array of options objects to consider\n * @returns {boolean | Function} value for passed subOption of 'chosen' to use\n */\nexport function choosify(subOption, pile) {\n // allowed values for subOption\n const allowed = [\"node\", \"edge\", \"label\"];\n let value = true;\n\n const chosen = topMost(pile, \"chosen\");\n if (typeof chosen === \"boolean\") {\n value = chosen;\n } else if (typeof chosen === \"object\") {\n if (allowed.indexOf(subOption) === -1) {\n throw new Error(\n \"choosify: subOption '\" +\n subOption +\n \"' should be one of \" +\n \"'\" +\n allowed.join(\"', '\") +\n \"'\"\n );\n }\n\n const chosenEdge = topMost(pile, [\"chosen\", subOption]);\n if (typeof chosenEdge === \"boolean\" || typeof chosenEdge === \"function\") {\n value = chosenEdge;\n }\n }\n\n return value;\n}\n\n/**\n * Check if the point falls within the given rectangle.\n *\n * @param {rect} rect\n * @param {point} point\n * @param {rotationPoint} [rotationPoint] if specified, the rotation that applies to the rectangle.\n * @returns {boolean} true if point within rectangle, false otherwise\n */\nexport function pointInRect(rect, point, rotationPoint) {\n if (rect.width <= 0 || rect.height <= 0) {\n return false; // early out\n }\n\n if (rotationPoint !== undefined) {\n // Rotate the point the same amount as the rectangle\n const tmp = {\n x: point.x - rotationPoint.x,\n y: point.y - rotationPoint.y,\n };\n\n if (rotationPoint.angle !== 0) {\n // In order to get the coordinates the same, you need to\n // rotate in the reverse direction\n const angle = -rotationPoint.angle;\n\n const tmp2 = {\n x: Math.cos(angle) * tmp.x - Math.sin(angle) * tmp.y,\n y: Math.sin(angle) * tmp.x + Math.cos(angle) * tmp.y,\n };\n point = tmp2;\n } else {\n point = tmp;\n }\n\n // Note that if a rotation is specified, the rectangle coordinates\n // are **not* the full canvas coordinates. They are relative to the\n // rotationPoint. Hence, the point coordinates need not be translated\n // back in this case.\n }\n\n const right = rect.x + rect.width;\n const bottom = rect.y + rect.width;\n\n return (\n rect.left < point.x &&\n right > point.x &&\n rect.top < point.y &&\n bottom > point.y\n );\n}\n\n/**\n * Check if given value is acceptable as a label text.\n *\n * @param {*} text value to check; can be anything at this point\n * @returns {boolean} true if valid label value, false otherwise\n */\nexport function isValidLabel(text) {\n // Note that this is quite strict: types that *might* be converted to string are disallowed\n return typeof text === \"string\" && text !== \"\";\n}\n\n/**\n * Returns x, y of self reference circle based on provided angle\n *\n * @param {object} ctx\n * @param {number} angle\n * @param {number} radius\n * @param {VisNode} node\n * @returns {object} x and y coordinates\n */\nexport function getSelfRefCoordinates(ctx, angle, radius, node) {\n let x = node.x;\n let y = node.y;\n\n if (typeof node.distanceToBorder === \"function\") {\n //calculating opposite and adjacent\n //distaneToBorder becomes Hypotenuse.\n //Formulas sin(a) = Opposite / Hypotenuse and cos(a) = Adjacent / Hypotenuse\n const toBorderDist = node.distanceToBorder(ctx, angle);\n const yFromNodeCenter = Math.sin(angle) * toBorderDist;\n const xFromNodeCenter = Math.cos(angle) * toBorderDist;\n //xFromNodeCenter is basically x and if xFromNodeCenter equals to the distance to border then it means\n //that y does not need calculation because it is equal node.height / 2 or node.y\n //same thing with yFromNodeCenter and if yFromNodeCenter equals to the distance to border then it means\n //that x is equal node.width / 2 or node.x\n if (xFromNodeCenter === toBorderDist) {\n x += toBorderDist;\n y = node.y;\n } else if (yFromNodeCenter === toBorderDist) {\n x = node.x;\n y -= toBorderDist;\n } else {\n x += xFromNodeCenter;\n y -= yFromNodeCenter;\n }\n } else if (node.shape.width > node.shape.height) {\n x = node.x + node.shape.width * 0.5;\n y = node.y - radius;\n } else {\n x = node.x + radius;\n y = node.y - node.shape.height * 0.5;\n }\n\n return { x, y };\n}\n","/**\n * Callback to determine text dimensions, using the parent label settings.\n *\n * @callback MeasureText\n * @param {text} text\n * @param {text} mod\n * @returns {object} { width, values} width in pixels and font attributes\n */\n\n/**\n * Helper class for Label which collects results of splitting labels into lines and blocks.\n *\n * @private\n */\nclass LabelAccumulator {\n /**\n * @param {MeasureText} measureText\n */\n constructor(measureText) {\n this.measureText = measureText;\n this.current = 0;\n this.width = 0;\n this.height = 0;\n this.lines = [];\n }\n\n /**\n * Append given text to the given line.\n *\n * @param {number} l index of line to add to\n * @param {string} text string to append to line\n * @param {'bold'|'ital'|'boldital'|'mono'|'normal'} [mod='normal']\n * @private\n */\n _add(l, text, mod = \"normal\") {\n if (this.lines[l] === undefined) {\n this.lines[l] = {\n width: 0,\n height: 0,\n blocks: [],\n };\n }\n\n // We still need to set a block for undefined and empty texts, hence return at this point\n // This is necessary because we don't know at this point if we're at the\n // start of an empty line or not.\n // To compensate, empty blocks are removed in `finalize()`.\n //\n // Empty strings should still have a height\n let tmpText = text;\n if (text === undefined || text === \"\") tmpText = \" \";\n\n // Determine width and get the font properties\n const result = this.measureText(tmpText, mod);\n const block = Object.assign({}, result.values);\n block.text = text;\n block.width = result.width;\n block.mod = mod;\n\n if (text === undefined || text === \"\") {\n block.width = 0;\n }\n\n this.lines[l].blocks.push(block);\n\n // Update the line width. We need this for determining if a string goes over max width\n this.lines[l].width += block.width;\n }\n\n /**\n * Returns the width in pixels of the current line.\n *\n * @returns {number}\n */\n curWidth() {\n const line = this.lines[this.current];\n if (line === undefined) return 0;\n\n return line.width;\n }\n\n /**\n * Add text in block to current line\n *\n * @param {string} text\n * @param {'bold'|'ital'|'boldital'|'mono'|'normal'} [mod='normal']\n */\n append(text, mod = \"normal\") {\n this._add(this.current, text, mod);\n }\n\n /**\n * Add text in block to current line and start a new line\n *\n * @param {string} text\n * @param {'bold'|'ital'|'boldital'|'mono'|'normal'} [mod='normal']\n */\n newLine(text, mod = \"normal\") {\n this._add(this.current, text, mod);\n this.current++;\n }\n\n /**\n * Determine and set the heights of all the lines currently contained in this instance\n *\n * Note that width has already been set.\n *\n * @private\n */\n determineLineHeights() {\n for (let k = 0; k < this.lines.length; k++) {\n const line = this.lines[k];\n\n // Looking for max height of blocks in line\n let height = 0;\n\n if (line.blocks !== undefined) {\n // Can happen if text contains e.g. '\\n '\n for (let l = 0; l < line.blocks.length; l++) {\n const block = line.blocks[l];\n\n if (height < block.height) {\n height = block.height;\n }\n }\n }\n\n line.height = height;\n }\n }\n\n /**\n * Determine the full size of the label text, as determined by current lines and blocks\n *\n * @private\n */\n determineLabelSize() {\n let width = 0;\n let height = 0;\n for (let k = 0; k < this.lines.length; k++) {\n const line = this.lines[k];\n\n if (line.width > width) {\n width = line.width;\n }\n height += line.height;\n }\n\n this.width = width;\n this.height = height;\n }\n\n /**\n * Remove all empty blocks and empty lines we don't need\n *\n * This must be done after the width/height determination,\n * so that these are set properly for processing here.\n *\n * @returns {Array} Lines with empty blocks (and some empty lines) removed\n * @private\n */\n removeEmptyBlocks() {\n const tmpLines = [];\n for (let k = 0; k < this.lines.length; k++) {\n const line = this.lines[k];\n\n // Note: an empty line in between text has width zero but is still relevant to layout.\n // So we can't use width for testing empty line here\n if (line.blocks.length === 0) continue;\n\n // Discard final empty line always\n if (k === this.lines.length - 1) {\n if (line.width === 0) continue;\n }\n\n const tmpLine = {};\n Object.assign(tmpLine, line);\n tmpLine.blocks = [];\n\n let firstEmptyBlock;\n const tmpBlocks = [];\n for (let l = 0; l < line.blocks.length; l++) {\n const block = line.blocks[l];\n if (block.width !== 0) {\n tmpBlocks.push(block);\n } else {\n if (firstEmptyBlock === undefined) {\n firstEmptyBlock = block;\n }\n }\n }\n\n // Ensure that there is *some* text present\n if (tmpBlocks.length === 0 && firstEmptyBlock !== undefined) {\n tmpBlocks.push(firstEmptyBlock);\n }\n\n tmpLine.blocks = tmpBlocks;\n\n tmpLines.push(tmpLine);\n }\n\n return tmpLines;\n }\n\n /**\n * Set the sizes for all lines and the whole thing.\n *\n * @returns {{width: (number|*), height: (number|*), lines: Array}}\n */\n finalize() {\n //console.log(JSON.stringify(this.lines, null, 2));\n\n this.determineLineHeights();\n this.determineLabelSize();\n const tmpLines = this.removeEmptyBlocks();\n\n // Return a simple hash object for further processing.\n return {\n width: this.width,\n height: this.height,\n lines: tmpLines,\n };\n }\n}\n\nexport default LabelAccumulator;\n","import LabelAccumulator from \"./LabelAccumulator\";\nimport { isValidLabel } from \"./ComponentUtil\";\n\n// Hash of prepared regexp's for tags\nconst tagPattern = {\n // HTML\n \"\": //,\n \"\": //,\n \"\": //,\n \"\": /<\\/b>/,\n \"\": /<\\/i>/,\n \"\": /<\\/code>/,\n // Markdown\n \"*\": /\\*/, // bold\n _: /_/, // ital\n \"`\": /`/, // mono\n afterBold: /[^*]/,\n afterItal: /[^_]/,\n afterMono: /[^`]/,\n};\n\n/**\n * Internal helper class for parsing the markup tags for HTML and Markdown.\n *\n * NOTE: Sequences of tabs and spaces are reduced to single space.\n * Scan usage of `this.spacing` within method\n */\nclass MarkupAccumulator {\n /**\n * Create an instance\n *\n * @param {string} text text to parse for markup\n */\n constructor(text) {\n this.text = text;\n this.bold = false;\n this.ital = false;\n this.mono = false;\n this.spacing = false;\n this.position = 0;\n this.buffer = \"\";\n this.modStack = [];\n\n this.blocks = [];\n }\n\n /**\n * Return the mod label currently on the top of the stack\n *\n * @returns {string} label of topmost mod\n * @private\n */\n mod() {\n return this.modStack.length === 0 ? \"normal\" : this.modStack[0];\n }\n\n /**\n * Return the mod label currently active\n *\n * @returns {string} label of active mod\n * @private\n */\n modName() {\n if (this.modStack.length === 0) return \"normal\";\n else if (this.modStack[0] === \"mono\") return \"mono\";\n else {\n if (this.bold && this.ital) {\n return \"boldital\";\n } else if (this.bold) {\n return \"bold\";\n } else if (this.ital) {\n return \"ital\";\n }\n }\n }\n\n /**\n * @private\n */\n emitBlock() {\n if (this.spacing) {\n this.add(\" \");\n this.spacing = false;\n }\n if (this.buffer.length > 0) {\n this.blocks.push({ text: this.buffer, mod: this.modName() });\n this.buffer = \"\";\n }\n }\n\n /**\n * Output text to buffer\n *\n * @param {string} text text to add\n * @private\n */\n add(text) {\n if (text === \" \") {\n this.spacing = true;\n }\n if (this.spacing) {\n this.buffer += \" \";\n this.spacing = false;\n }\n if (text != \" \") {\n this.buffer += text;\n }\n }\n\n /**\n * Handle parsing of whitespace\n *\n * @param {string} ch the character to check\n * @returns {boolean} true if the character was processed as whitespace, false otherwise\n */\n parseWS(ch) {\n if (/[ \\t]/.test(ch)) {\n if (!this.mono) {\n this.spacing = true;\n } else {\n this.add(ch);\n }\n return true;\n }\n\n return false;\n }\n\n /**\n * @param {string} tagName label for block type to set\n * @private\n */\n setTag(tagName) {\n this.emitBlock();\n this[tagName] = true;\n this.modStack.unshift(tagName);\n }\n\n /**\n * @param {string} tagName label for block type to unset\n * @private\n */\n unsetTag(tagName) {\n this.emitBlock();\n this[tagName] = false;\n this.modStack.shift();\n }\n\n /**\n * @param {string} tagName label for block type we are currently processing\n * @param {string|RegExp} tag string to match in text\n * @returns {boolean} true if the tag was processed, false otherwise\n */\n parseStartTag(tagName, tag) {\n // Note: if 'mono' passed as tagName, there is a double check here. This is OK\n if (!this.mono && !this[tagName] && this.match(tag)) {\n this.setTag(tagName);\n return true;\n }\n\n return false;\n }\n\n /**\n * @param {string|RegExp} tag\n * @param {number} [advance=true] if set, advance current position in text\n * @returns {boolean} true if match at given position, false otherwise\n * @private\n */\n match(tag, advance = true) {\n const [regExp, length] = this.prepareRegExp(tag);\n const matched = regExp.test(this.text.substr(this.position, length));\n\n if (matched && advance) {\n this.position += length - 1;\n }\n\n return matched;\n }\n\n /**\n * @param {string} tagName label for block type we are currently processing\n * @param {string|RegExp} tag string to match in text\n * @param {RegExp} [nextTag] regular expression to match for characters *following* the current tag\n * @returns {boolean} true if the tag was processed, false otherwise\n */\n parseEndTag(tagName, tag, nextTag) {\n let checkTag = this.mod() === tagName;\n if (tagName === \"mono\") {\n // special handling for 'mono'\n checkTag = checkTag && this.mono;\n } else {\n checkTag = checkTag && !this.mono;\n }\n\n if (checkTag && this.match(tag)) {\n if (nextTag !== undefined) {\n // Purpose of the following match is to prevent a direct unset/set of a given tag\n // E.g. '*bold **still bold*' => '*bold still bold*'\n if (\n this.position === this.text.length - 1 ||\n this.match(nextTag, false)\n ) {\n this.unsetTag(tagName);\n }\n } else {\n this.unsetTag(tagName);\n }\n\n return true;\n }\n\n return false;\n }\n\n /**\n * @param {string|RegExp} tag string to match in text\n * @param {value} value string to replace tag with, if found at current position\n * @returns {boolean} true if the tag was processed, false otherwise\n */\n replace(tag, value) {\n if (this.match(tag)) {\n this.add(value);\n this.position += length - 1;\n return true;\n }\n\n return false;\n }\n\n /**\n * Create a regular expression for the tag if it isn't already one.\n *\n * The return value is an array `[RegExp, number]`, with exactly two value, where:\n * - RegExp is the regular expression to use\n * - number is the lenth of the input string to match\n *\n * @param {string|RegExp} tag string to match in text\n * @returns {Array} regular expression to use and length of input string to match\n * @private\n */\n prepareRegExp(tag) {\n let length;\n let regExp;\n if (tag instanceof RegExp) {\n regExp = tag;\n length = 1; // ASSUMPTION: regexp only tests one character\n } else {\n // use prepared regexp if present\n const prepared = tagPattern[tag];\n if (prepared !== undefined) {\n regExp = prepared;\n } else {\n regExp = new RegExp(tag);\n }\n\n length = tag.length;\n }\n\n return [regExp, length];\n }\n}\n\n/**\n * Helper class for Label which explodes the label text into lines and blocks within lines\n *\n * @private\n */\nclass LabelSplitter {\n /**\n * @param {CanvasRenderingContext2D} ctx Canvas rendering context\n * @param {Label} parent reference to the Label instance using current instance\n * @param {boolean} selected\n * @param {boolean} hover\n */\n constructor(ctx, parent, selected, hover) {\n this.ctx = ctx;\n this.parent = parent;\n this.selected = selected;\n this.hover = hover;\n\n /**\n * Callback to determine text width; passed to LabelAccumulator instance\n *\n * @param {string} text string to determine width of\n * @param {string} mod font type to use for this text\n * @returns {object} { width, values} width in pixels and font attributes\n */\n const textWidth = (text, mod) => {\n if (text === undefined) return 0;\n\n // TODO: This can be done more efficiently with caching\n // This will set the ctx.font correctly, depending on selected/hover and mod - so that ctx.measureText() will be accurate.\n const values = this.parent.getFormattingValues(ctx, selected, hover, mod);\n\n let width = 0;\n if (text !== \"\") {\n const measure = this.ctx.measureText(text);\n width = measure.width;\n }\n\n return { width, values: values };\n };\n\n this.lines = new LabelAccumulator(textWidth);\n }\n\n /**\n * Split passed text of a label into lines and blocks.\n *\n * # NOTE\n *\n * The handling of spacing is option dependent:\n *\n * - if `font.multi : false`, all spaces are retained\n * - if `font.multi : true`, every sequence of spaces is compressed to a single space\n *\n * This might not be the best way to do it, but this is as it has been working till now.\n * In order not to break existing functionality, for the time being this behaviour will\n * be retained in any code changes.\n *\n * @param {string} text text to split\n * @returns {Array}\n */\n process(text) {\n if (!isValidLabel(text)) {\n return this.lines.finalize();\n }\n\n const font = this.parent.fontOptions;\n\n // Normalize the end-of-line's to a single representation - order important\n text = text.replace(/\\r\\n/g, \"\\n\"); // Dos EOL's\n text = text.replace(/\\r/g, \"\\n\"); // Mac EOL's\n\n // Note that at this point, there can be no \\r's in the text.\n // This is used later on splitStringIntoLines() to split multifont texts.\n\n const nlLines = String(text).split(\"\\n\");\n const lineCount = nlLines.length;\n\n if (font.multi) {\n // Multi-font case: styling tags active\n for (let i = 0; i < lineCount; i++) {\n const blocks = this.splitBlocks(nlLines[i], font.multi);\n // Post: Sequences of tabs and spaces are reduced to single space\n\n if (blocks === undefined) continue;\n\n if (blocks.length === 0) {\n this.lines.newLine(\"\");\n continue;\n }\n\n if (font.maxWdt > 0) {\n // widthConstraint.maximum defined\n //console.log('Running widthConstraint multi, max: ' + this.fontOptions.maxWdt);\n for (let j = 0; j < blocks.length; j++) {\n const mod = blocks[j].mod;\n const text = blocks[j].text;\n this.splitStringIntoLines(text, mod, true);\n }\n } else {\n // widthConstraint.maximum NOT defined\n for (let j = 0; j < blocks.length; j++) {\n const mod = blocks[j].mod;\n const text = blocks[j].text;\n this.lines.append(text, mod);\n }\n }\n\n this.lines.newLine();\n }\n } else {\n // Single-font case\n if (font.maxWdt > 0) {\n // widthConstraint.maximum defined\n // console.log('Running widthConstraint normal, max: ' + this.fontOptions.maxWdt);\n for (let i = 0; i < lineCount; i++) {\n this.splitStringIntoLines(nlLines[i]);\n }\n } else {\n // widthConstraint.maximum NOT defined\n for (let i = 0; i < lineCount; i++) {\n this.lines.newLine(nlLines[i]);\n }\n }\n }\n\n return this.lines.finalize();\n }\n\n /**\n * normalize the markup system\n *\n * @param {boolean|'md'|'markdown'|'html'} markupSystem\n * @returns {string}\n */\n decodeMarkupSystem(markupSystem) {\n let system = \"none\";\n if (markupSystem === \"markdown\" || markupSystem === \"md\") {\n system = \"markdown\";\n } else if (markupSystem === true || markupSystem === \"html\") {\n system = \"html\";\n }\n return system;\n }\n\n /**\n *\n * @param {string} text\n * @returns {Array}\n */\n splitHtmlBlocks(text) {\n const s = new MarkupAccumulator(text);\n\n const parseEntities = (ch) => {\n if (/&/.test(ch)) {\n const parsed =\n s.replace(s.text, \"<\", \"<\") || s.replace(s.text, \"&\", \"&\");\n\n if (!parsed) {\n s.add(\"&\");\n }\n\n return true;\n }\n\n return false;\n };\n\n while (s.position < s.text.length) {\n const ch = s.text.charAt(s.position);\n\n const parsed =\n s.parseWS(ch) ||\n (/\") ||\n s.parseStartTag(\"ital\", \"\") ||\n s.parseStartTag(\"mono\", \"\") ||\n s.parseEndTag(\"bold\", \"\") ||\n s.parseEndTag(\"ital\", \"\") ||\n s.parseEndTag(\"mono\", \"\"))) ||\n parseEntities(ch);\n\n if (!parsed) {\n s.add(ch);\n }\n s.position++;\n }\n s.emitBlock();\n return s.blocks;\n }\n\n /**\n *\n * @param {string} text\n * @returns {Array}\n */\n splitMarkdownBlocks(text) {\n const s = new MarkupAccumulator(text);\n let beginable = true;\n\n const parseOverride = (ch) => {\n if (/\\\\/.test(ch)) {\n if (s.position < this.text.length + 1) {\n s.position++;\n ch = this.text.charAt(s.position);\n if (/ \\t/.test(ch)) {\n s.spacing = true;\n } else {\n s.add(ch);\n beginable = false;\n }\n }\n\n return true;\n }\n\n return false;\n };\n\n while (s.position < s.text.length) {\n const ch = s.text.charAt(s.position);\n\n const parsed =\n s.parseWS(ch) ||\n parseOverride(ch) ||\n ((beginable || s.spacing) &&\n (s.parseStartTag(\"bold\", \"*\") ||\n s.parseStartTag(\"ital\", \"_\") ||\n s.parseStartTag(\"mono\", \"`\"))) ||\n s.parseEndTag(\"bold\", \"*\", \"afterBold\") ||\n s.parseEndTag(\"ital\", \"_\", \"afterItal\") ||\n s.parseEndTag(\"mono\", \"`\", \"afterMono\");\n\n if (!parsed) {\n s.add(ch);\n beginable = false;\n }\n s.position++;\n }\n s.emitBlock();\n return s.blocks;\n }\n\n /**\n * Explodes a piece of text into single-font blocks using a given markup\n *\n * @param {string} text\n * @param {boolean|'md'|'markdown'|'html'} markupSystem\n * @returns {Array.<{text: string, mod: string}>}\n * @private\n */\n splitBlocks(text, markupSystem) {\n const system = this.decodeMarkupSystem(markupSystem);\n if (system === \"none\") {\n return [\n {\n text: text,\n mod: \"normal\",\n },\n ];\n } else if (system === \"markdown\") {\n return this.splitMarkdownBlocks(text);\n } else if (system === \"html\") {\n return this.splitHtmlBlocks(text);\n }\n }\n\n /**\n * @param {string} text\n * @returns {boolean} true if text length over the current max with\n * @private\n */\n overMaxWidth(text) {\n const width = this.ctx.measureText(text).width;\n return this.lines.curWidth() + width > this.parent.fontOptions.maxWdt;\n }\n\n /**\n * Determine the longest part of the sentence which still fits in the\n * current max width.\n *\n * @param {Array} words Array of strings signifying a text lines\n * @returns {number} index of first item in string making string go over max\n * @private\n */\n getLongestFit(words) {\n let text = \"\";\n let w = 0;\n\n while (w < words.length) {\n const pre = text === \"\" ? \"\" : \" \";\n const newText = text + pre + words[w];\n\n if (this.overMaxWidth(newText)) break;\n text = newText;\n w++;\n }\n\n return w;\n }\n\n /**\n * Determine the longest part of the string which still fits in the\n * current max width.\n *\n * @param {Array} words Array of strings signifying a text lines\n * @returns {number} index of first item in string making string go over max\n */\n getLongestFitWord(words) {\n let w = 0;\n\n while (w < words.length) {\n if (this.overMaxWidth(words.slice(0, w))) break;\n w++;\n }\n\n return w;\n }\n\n /**\n * Split the passed text into lines, according to width constraint (if any).\n *\n * The method assumes that the input string is a single line, i.e. without lines break.\n *\n * This method retains spaces, if still present (case `font.multi: false`).\n * A space which falls on an internal line break, will be replaced by a newline.\n * There is no special handling of tabs; these go along with the flow.\n *\n * @param {string} str\n * @param {string} [mod='normal']\n * @param {boolean} [appendLast=false]\n * @private\n */\n splitStringIntoLines(str, mod = \"normal\", appendLast = false) {\n // Set the canvas context font, based upon the current selected/hover state\n // and the provided mod, so the text measurement performed by getLongestFit\n // will be accurate - and not just use the font of whoever last used the canvas.\n this.parent.getFormattingValues(this.ctx, this.selected, this.hover, mod);\n\n // Still-present spaces are relevant, retain them\n str = str.replace(/^( +)/g, \"$1\\r\");\n str = str.replace(/([^\\r][^ ]*)( +)/g, \"$1\\r$2\\r\");\n let words = str.split(\"\\r\");\n\n while (words.length > 0) {\n let w = this.getLongestFit(words);\n\n if (w === 0) {\n // Special case: the first word is already larger than the max width.\n const word = words[0];\n\n // Break the word to the largest part that fits the line\n const x = this.getLongestFitWord(word);\n this.lines.newLine(word.slice(0, x), mod);\n\n // Adjust the word, so that the rest will be done next iteration\n words[0] = word.slice(x);\n } else {\n // skip any space that is replaced by a newline\n let newW = w;\n if (words[w - 1] === \" \") {\n w--;\n } else if (words[newW] === \" \") {\n newW++;\n }\n\n const text = words.slice(0, w).join(\"\");\n\n if (w == words.length && appendLast) {\n this.lines.append(text, mod);\n } else {\n this.lines.newLine(text, mod);\n }\n\n // Adjust the word, so that the rest will be done next iteration\n words = words.slice(newW);\n }\n }\n }\n}\n\nexport default LabelSplitter;\n","import { deepExtend, forEach, overrideOpacity, topMost } from \"vis-util/esnext\";\nimport { choosify, isValidLabel } from \"./ComponentUtil\";\nimport LabelSplitter from \"./LabelSplitter\";\n\n/**\n * List of special styles for multi-fonts\n *\n * @private\n */\nconst multiFontStyle = [\"bold\", \"ital\", \"boldital\", \"mono\"];\n\n/**\n * A Label to be used for Nodes or Edges.\n */\nclass Label {\n /**\n * @param {object} body\n * @param {object} options\n * @param {boolean} [edgelabel=false]\n */\n constructor(body, options, edgelabel = false) {\n this.body = body;\n this.pointToSelf = false;\n this.baseSize = undefined;\n this.fontOptions = {}; // instance variable containing the *instance-local* font options\n this.setOptions(options);\n this.size = { top: 0, left: 0, width: 0, height: 0, yLine: 0 };\n this.isEdgeLabel = edgelabel;\n }\n\n /**\n * @param {object} options the options of the parent Node-instance\n */\n setOptions(options) {\n this.elementOptions = options; // Reference to the options of the parent Node-instance\n\n this.initFontOptions(options.font);\n\n if (isValidLabel(options.label)) {\n this.labelDirty = true;\n } else {\n // Bad label! Change the option value to prevent bad stuff happening\n options.label = undefined;\n }\n\n if (options.font !== undefined && options.font !== null) {\n // font options can be deleted at various levels\n if (typeof options.font === \"string\") {\n this.baseSize = this.fontOptions.size;\n } else if (typeof options.font === \"object\") {\n const size = options.font.size;\n\n if (size !== undefined) {\n this.baseSize = size;\n }\n }\n }\n }\n\n /**\n * Init the font Options structure.\n *\n * Member fontOptions serves as an accumulator for the current font options.\n * As such, it needs to be completely separated from the node options.\n *\n * @param {object} newFontOptions the new font options to process\n * @private\n */\n initFontOptions(newFontOptions) {\n // Prepare the multi-font option objects.\n // These will be filled in propagateFonts(), if required\n forEach(multiFontStyle, (style) => {\n this.fontOptions[style] = {};\n });\n\n // Handle shorthand option, if present\n if (Label.parseFontString(this.fontOptions, newFontOptions)) {\n this.fontOptions.vadjust = 0;\n return;\n }\n\n // Copy over the non-multifont options, if specified\n forEach(newFontOptions, (prop, n) => {\n if (prop !== undefined && prop !== null && typeof prop !== \"object\") {\n this.fontOptions[n] = prop;\n }\n });\n }\n\n /**\n * If in-variable is a string, parse it as a font specifier.\n *\n * Note that following is not done here and have to be done after the call:\n * - Not all font options are set (vadjust, mod)\n *\n * @param {object} outOptions out-parameter, object in which to store the parse results (if any)\n * @param {object} inOptions font options to parse\n * @returns {boolean} true if font parsed as string, false otherwise\n * @static\n */\n static parseFontString(outOptions, inOptions) {\n if (!inOptions || typeof inOptions !== \"string\") return false;\n\n const newOptionsArray = inOptions.split(\" \");\n\n outOptions.size = +newOptionsArray[0].replace(\"px\", \"\");\n outOptions.face = newOptionsArray[1];\n outOptions.color = newOptionsArray[2];\n\n return true;\n }\n\n /**\n * Set the width and height constraints based on 'nearest' value\n *\n * @param {Array} pile array of option objects to consider\n * @returns {object} the actual constraint values to use\n * @private\n */\n constrain(pile) {\n // NOTE: constrainWidth and constrainHeight never set!\n // NOTE: for edge labels, only 'maxWdt' set\n // Node labels can set all the fields\n const fontOptions = {\n constrainWidth: false,\n maxWdt: -1,\n minWdt: -1,\n constrainHeight: false,\n minHgt: -1,\n valign: \"middle\",\n };\n\n const widthConstraint = topMost(pile, \"widthConstraint\");\n if (typeof widthConstraint === \"number\") {\n fontOptions.maxWdt = Number(widthConstraint);\n fontOptions.minWdt = Number(widthConstraint);\n } else if (typeof widthConstraint === \"object\") {\n const widthConstraintMaximum = topMost(pile, [\n \"widthConstraint\",\n \"maximum\",\n ]);\n if (typeof widthConstraintMaximum === \"number\") {\n fontOptions.maxWdt = Number(widthConstraintMaximum);\n }\n const widthConstraintMinimum = topMost(pile, [\n \"widthConstraint\",\n \"minimum\",\n ]);\n if (typeof widthConstraintMinimum === \"number\") {\n fontOptions.minWdt = Number(widthConstraintMinimum);\n }\n }\n\n const heightConstraint = topMost(pile, \"heightConstraint\");\n if (typeof heightConstraint === \"number\") {\n fontOptions.minHgt = Number(heightConstraint);\n } else if (typeof heightConstraint === \"object\") {\n const heightConstraintMinimum = topMost(pile, [\n \"heightConstraint\",\n \"minimum\",\n ]);\n if (typeof heightConstraintMinimum === \"number\") {\n fontOptions.minHgt = Number(heightConstraintMinimum);\n }\n const heightConstraintValign = topMost(pile, [\n \"heightConstraint\",\n \"valign\",\n ]);\n if (typeof heightConstraintValign === \"string\") {\n if (\n heightConstraintValign === \"top\" ||\n heightConstraintValign === \"bottom\"\n ) {\n fontOptions.valign = heightConstraintValign;\n }\n }\n }\n\n return fontOptions;\n }\n\n /**\n * Set options and update internal state\n *\n * @param {object} options options to set\n * @param {Array} pile array of option objects to consider for option 'chosen'\n */\n update(options, pile) {\n this.setOptions(options, true);\n this.propagateFonts(pile);\n deepExtend(this.fontOptions, this.constrain(pile));\n this.fontOptions.chooser = choosify(\"label\", pile);\n }\n\n /**\n * When margins are set in an element, adjust sizes is called to remove them\n * from the width/height constraints. This must be done prior to label sizing.\n *\n * @param {{top: number, right: number, bottom: number, left: number}} margins\n */\n adjustSizes(margins) {\n const widthBias = margins ? margins.right + margins.left : 0;\n if (this.fontOptions.constrainWidth) {\n this.fontOptions.maxWdt -= widthBias;\n this.fontOptions.minWdt -= widthBias;\n }\n const heightBias = margins ? margins.top + margins.bottom : 0;\n if (this.fontOptions.constrainHeight) {\n this.fontOptions.minHgt -= heightBias;\n }\n }\n\n /////////////////////////////////////////////////////////\n // Methods for handling options piles\n // Eventually, these will be moved to a separate class\n /////////////////////////////////////////////////////////\n\n /**\n * Add the font members of the passed list of option objects to the pile.\n *\n * @param {Pile} dstPile pile of option objects add to\n * @param {Pile} srcPile pile of option objects to take font options from\n * @private\n */\n addFontOptionsToPile(dstPile, srcPile) {\n for (let i = 0; i < srcPile.length; ++i) {\n this.addFontToPile(dstPile, srcPile[i]);\n }\n }\n\n /**\n * Add given font option object to the list of objects (the 'pile') to consider for determining\n * multi-font option values.\n *\n * @param {Pile} pile pile of option objects to use\n * @param {object} options instance to add to pile\n * @private\n */\n addFontToPile(pile, options) {\n if (options === undefined) return;\n if (options.font === undefined || options.font === null) return;\n\n const item = options.font;\n pile.push(item);\n }\n\n /**\n * Collect all own-property values from the font pile that aren't multi-font option objectss.\n *\n * @param {Pile} pile pile of option objects to use\n * @returns {object} object with all current own basic font properties\n * @private\n */\n getBasicOptions(pile) {\n const ret = {};\n\n // Scans the whole pile to get all options present\n for (let n = 0; n < pile.length; ++n) {\n let fontOptions = pile[n];\n\n // Convert shorthand if necessary\n const tmpShorthand = {};\n if (Label.parseFontString(tmpShorthand, fontOptions)) {\n fontOptions = tmpShorthand;\n }\n\n forEach(fontOptions, (opt, name) => {\n if (opt === undefined) return; // multi-font option need not be present\n if (Object.prototype.hasOwnProperty.call(ret, name)) return; // Keep first value we encounter\n\n if (multiFontStyle.indexOf(name) !== -1) {\n // Skip multi-font properties but we do need the structure\n ret[name] = {};\n } else {\n ret[name] = opt;\n }\n });\n }\n\n return ret;\n }\n\n /**\n * Return the value for given option for the given multi-font.\n *\n * All available option objects are trawled in the set order to construct the option values.\n *\n * ---------------------------------------------------------------------\n * ## Traversal of pile for multi-fonts\n *\n * The determination of multi-font option values is a special case, because any values not\n * present in the multi-font options should by definition be taken from the main font options,\n * i.e. from the current 'parent' object of the multi-font option.\n *\n * ### Search order for multi-fonts\n *\n * 'bold' used as example:\n *\n * - search in option group 'bold' in local properties\n * - search in main font option group in local properties\n *\n * ---------------------------------------------------------------------\n *\n * @param {Pile} pile pile of option objects to use\n * @param {MultiFontStyle} multiName sub path for the multi-font\n * @param {string} option the option to search for, for the given multi-font\n * @returns {string|number} the value for the given option\n * @private\n */\n getFontOption(pile, multiName, option) {\n let multiFont;\n\n // Search multi font in local properties\n for (let n = 0; n < pile.length; ++n) {\n const fontOptions = pile[n];\n\n if (Object.prototype.hasOwnProperty.call(fontOptions, multiName)) {\n multiFont = fontOptions[multiName];\n if (multiFont === undefined || multiFont === null) continue;\n\n // Convert shorthand if necessary\n // TODO: inefficient to do this conversion every time; find a better way.\n const tmpShorthand = {};\n if (Label.parseFontString(tmpShorthand, multiFont)) {\n multiFont = tmpShorthand;\n }\n\n if (Object.prototype.hasOwnProperty.call(multiFont, option)) {\n return multiFont[option];\n }\n }\n }\n\n // Option is not mentioned in the multi font options; take it from the parent font options.\n // These have already been converted with getBasicOptions(), so use the converted values.\n if (Object.prototype.hasOwnProperty.call(this.fontOptions, option)) {\n return this.fontOptions[option];\n }\n\n // A value **must** be found; you should never get here.\n throw new Error(\n \"Did not find value for multi-font for property: '\" + option + \"'\"\n );\n }\n\n /**\n * Return all options values for the given multi-font.\n *\n * All available option objects are trawled in the set order to construct the option values.\n *\n * @param {Pile} pile pile of option objects to use\n * @param {MultiFontStyle} multiName sub path for the mod-font\n * @returns {MultiFontOptions}\n * @private\n */\n getFontOptions(pile, multiName) {\n const result = {};\n const optionNames = [\"color\", \"size\", \"face\", \"mod\", \"vadjust\"]; // List of allowed options per multi-font\n\n for (let i = 0; i < optionNames.length; ++i) {\n const mod = optionNames[i];\n result[mod] = this.getFontOption(pile, multiName, mod);\n }\n\n return result;\n }\n\n /////////////////////////////////////////////////////////\n // End methods for handling options piles\n /////////////////////////////////////////////////////////\n\n /**\n * Collapse the font options for the multi-font to single objects, from\n * the chain of option objects passed (the 'pile').\n *\n * @param {Pile} pile sequence of option objects to consider.\n * First item in list assumed to be the newly set options.\n */\n propagateFonts(pile) {\n const fontPile = []; // sequence of font objects to consider, order important\n\n // Note that this.elementOptions is not used here.\n this.addFontOptionsToPile(fontPile, pile);\n this.fontOptions = this.getBasicOptions(fontPile);\n\n // We set multifont values even if multi === false, for consistency (things break otherwise)\n for (let i = 0; i < multiFontStyle.length; ++i) {\n const mod = multiFontStyle[i];\n const modOptions = this.fontOptions[mod];\n const tmpMultiFontOptions = this.getFontOptions(fontPile, mod);\n\n // Copy over found values\n forEach(tmpMultiFontOptions, (option, n) => {\n modOptions[n] = option;\n });\n\n modOptions.size = Number(modOptions.size);\n modOptions.vadjust = Number(modOptions.vadjust);\n }\n }\n\n /**\n * Main function. This is called from anything that wants to draw a label.\n *\n * @param {CanvasRenderingContext2D} ctx\n * @param {number} x\n * @param {number} y\n * @param {boolean} selected\n * @param {boolean} hover\n * @param {string} [baseline='middle']\n */\n draw(ctx, x, y, selected, hover, baseline = \"middle\") {\n // if no label, return\n if (this.elementOptions.label === undefined) return;\n\n // check if we have to render the label\n let viewFontSize = this.fontOptions.size * this.body.view.scale;\n if (\n this.elementOptions.label &&\n viewFontSize < this.elementOptions.scaling.label.drawThreshold - 1\n )\n return;\n\n // This ensures that there will not be HUGE letters on screen\n // by setting an upper limit on the visible text size (regardless of zoomLevel)\n if (viewFontSize >= this.elementOptions.scaling.label.maxVisible) {\n viewFontSize =\n Number(this.elementOptions.scaling.label.maxVisible) /\n this.body.view.scale;\n }\n\n // update the size cache if required\n this.calculateLabelSize(ctx, selected, hover, x, y, baseline);\n this._drawBackground(ctx);\n this._drawText(ctx, x, this.size.yLine, baseline, viewFontSize);\n }\n\n /**\n * Draws the label background\n *\n * @param {CanvasRenderingContext2D} ctx\n * @private\n */\n _drawBackground(ctx) {\n if (\n this.fontOptions.background !== undefined &&\n this.fontOptions.background !== \"none\"\n ) {\n ctx.fillStyle = this.fontOptions.background;\n const size = this.getSize();\n ctx.fillRect(size.left, size.top, size.width, size.height);\n }\n }\n\n /**\n *\n * @param {CanvasRenderingContext2D} ctx\n * @param {number} x\n * @param {number} y\n * @param {string} [baseline='middle']\n * @param {number} viewFontSize\n * @private\n */\n _drawText(ctx, x, y, baseline = \"middle\", viewFontSize) {\n [x, y] = this._setAlignment(ctx, x, y, baseline);\n\n ctx.textAlign = \"left\";\n x = x - this.size.width / 2; // Shift label 1/2-distance to the left\n if (this.fontOptions.valign && this.size.height > this.size.labelHeight) {\n if (this.fontOptions.valign === \"top\") {\n y -= (this.size.height - this.size.labelHeight) / 2;\n }\n if (this.fontOptions.valign === \"bottom\") {\n y += (this.size.height - this.size.labelHeight) / 2;\n }\n }\n\n // draw the text\n for (let i = 0; i < this.lineCount; i++) {\n const line = this.lines[i];\n if (line && line.blocks) {\n let width = 0;\n if (this.isEdgeLabel || this.fontOptions.align === \"center\") {\n width += (this.size.width - line.width) / 2;\n } else if (this.fontOptions.align === \"right\") {\n width += this.size.width - line.width;\n }\n for (let j = 0; j < line.blocks.length; j++) {\n const block = line.blocks[j];\n ctx.font = block.font;\n const [fontColor, strokeColor] = this._getColor(\n block.color,\n viewFontSize,\n block.strokeColor\n );\n if (block.strokeWidth > 0) {\n ctx.lineWidth = block.strokeWidth;\n ctx.strokeStyle = strokeColor;\n ctx.lineJoin = \"round\";\n }\n ctx.fillStyle = fontColor;\n\n if (block.strokeWidth > 0) {\n ctx.strokeText(block.text, x + width, y + block.vadjust);\n }\n ctx.fillText(block.text, x + width, y + block.vadjust);\n width += block.width;\n }\n y += line.height;\n }\n }\n }\n\n /**\n *\n * @param {CanvasRenderingContext2D} ctx\n * @param {number} x\n * @param {number} y\n * @param {string} baseline\n * @returns {Array.}\n * @private\n */\n _setAlignment(ctx, x, y, baseline) {\n // check for label alignment (for edges)\n // TODO: make alignment for nodes\n if (\n this.isEdgeLabel &&\n this.fontOptions.align !== \"horizontal\" &&\n this.pointToSelf === false\n ) {\n x = 0;\n y = 0;\n\n const lineMargin = 2;\n if (this.fontOptions.align === \"top\") {\n ctx.textBaseline = \"alphabetic\";\n y -= 2 * lineMargin; // distance from edge, required because we use alphabetic. Alphabetic has less difference between browsers\n } else if (this.fontOptions.align === \"bottom\") {\n ctx.textBaseline = \"hanging\";\n y += 2 * lineMargin; // distance from edge, required because we use hanging. Hanging has less difference between browsers\n } else {\n ctx.textBaseline = \"middle\";\n }\n } else {\n ctx.textBaseline = baseline;\n }\n return [x, y];\n }\n\n /**\n * fade in when relative scale is between threshold and threshold - 1.\n * If the relative scale would be smaller than threshold -1 the draw function would have returned before coming here.\n *\n * @param {string} color The font color to use\n * @param {number} viewFontSize\n * @param {string} initialStrokeColor\n * @returns {Array.} An array containing the font color and stroke color\n * @private\n */\n _getColor(color, viewFontSize, initialStrokeColor) {\n let fontColor = color || \"#000000\";\n let strokeColor = initialStrokeColor || \"#ffffff\";\n if (viewFontSize <= this.elementOptions.scaling.label.drawThreshold) {\n const opacity = Math.max(\n 0,\n Math.min(\n 1,\n 1 - (this.elementOptions.scaling.label.drawThreshold - viewFontSize)\n )\n );\n fontColor = overrideOpacity(fontColor, opacity);\n strokeColor = overrideOpacity(strokeColor, opacity);\n }\n return [fontColor, strokeColor];\n }\n\n /**\n *\n * @param {CanvasRenderingContext2D} ctx\n * @param {boolean} selected\n * @param {boolean} hover\n * @returns {{width: number, height: number}}\n */\n getTextSize(ctx, selected = false, hover = false) {\n this._processLabel(ctx, selected, hover);\n return {\n width: this.size.width,\n height: this.size.height,\n lineCount: this.lineCount,\n };\n }\n\n /**\n * Get the current dimensions of the label\n *\n * @returns {rect}\n */\n getSize() {\n const lineMargin = 2;\n let x = this.size.left; // default values which might be overridden below\n let y = this.size.top - 0.5 * lineMargin; // idem\n\n if (this.isEdgeLabel) {\n const x2 = -this.size.width * 0.5;\n\n switch (this.fontOptions.align) {\n case \"middle\":\n x = x2;\n y = -this.size.height * 0.5;\n break;\n case \"top\":\n x = x2;\n y = -(this.size.height + lineMargin);\n break;\n case \"bottom\":\n x = x2;\n y = lineMargin;\n break;\n }\n }\n\n const ret = {\n left: x,\n top: y,\n width: this.size.width,\n height: this.size.height,\n };\n\n return ret;\n }\n\n /**\n *\n * @param {CanvasRenderingContext2D} ctx\n * @param {boolean} selected\n * @param {boolean} hover\n * @param {number} [x=0]\n * @param {number} [y=0]\n * @param {'middle'|'hanging'} [baseline='middle']\n */\n calculateLabelSize(ctx, selected, hover, x = 0, y = 0, baseline = \"middle\") {\n this._processLabel(ctx, selected, hover);\n this.size.left = x - this.size.width * 0.5;\n this.size.top = y - this.size.height * 0.5;\n this.size.yLine = y + (1 - this.lineCount) * 0.5 * this.fontOptions.size;\n if (baseline === \"hanging\") {\n this.size.top += 0.5 * this.fontOptions.size;\n this.size.top += 4; // distance from node, required because we use hanging. Hanging has less difference between browsers\n this.size.yLine += 4; // distance from node\n }\n }\n\n /**\n *\n * @param {CanvasRenderingContext2D} ctx\n * @param {boolean} selected\n * @param {boolean} hover\n * @param {string} mod\n * @returns {{color, size, face, mod, vadjust, strokeWidth: *, strokeColor: (*|string|allOptions.edges.font.strokeColor|{string}|allOptions.nodes.font.strokeColor|Array)}}\n */\n getFormattingValues(ctx, selected, hover, mod) {\n const getValue = function (fontOptions, mod, option) {\n if (mod === \"normal\") {\n if (option === \"mod\") return \"\";\n return fontOptions[option];\n }\n\n if (fontOptions[mod][option] !== undefined) {\n // Grumbl leaving out test on undefined equals false for \"\"\n return fontOptions[mod][option];\n } else {\n // Take from parent font option\n return fontOptions[option];\n }\n };\n\n const values = {\n color: getValue(this.fontOptions, mod, \"color\"),\n size: getValue(this.fontOptions, mod, \"size\"),\n face: getValue(this.fontOptions, mod, \"face\"),\n mod: getValue(this.fontOptions, mod, \"mod\"),\n vadjust: getValue(this.fontOptions, mod, \"vadjust\"),\n strokeWidth: this.fontOptions.strokeWidth,\n strokeColor: this.fontOptions.strokeColor,\n };\n if (selected || hover) {\n if (\n mod === \"normal\" &&\n this.fontOptions.chooser === true &&\n this.elementOptions.labelHighlightBold\n ) {\n values.mod = \"bold\";\n } else {\n if (typeof this.fontOptions.chooser === \"function\") {\n this.fontOptions.chooser(\n values,\n this.elementOptions.id,\n selected,\n hover\n );\n }\n }\n }\n\n let fontString = \"\";\n if (values.mod !== undefined && values.mod !== \"\") {\n // safeguard for undefined - this happened\n fontString += values.mod + \" \";\n }\n fontString += values.size + \"px \" + values.face;\n\n ctx.font = fontString.replace(/\"/g, \"\");\n values.font = ctx.font;\n values.height = values.size;\n return values;\n }\n\n /**\n *\n * @param {boolean} selected\n * @param {boolean} hover\n * @returns {boolean}\n */\n differentState(selected, hover) {\n return selected !== this.selectedState || hover !== this.hoverState;\n }\n\n /**\n * This explodes the passed text into lines and determines the width, height and number of lines.\n *\n * @param {CanvasRenderingContext2D} ctx\n * @param {boolean} selected\n * @param {boolean} hover\n * @param {string} inText the text to explode\n * @returns {{width, height, lines}|*}\n * @private\n */\n _processLabelText(ctx, selected, hover, inText) {\n const splitter = new LabelSplitter(ctx, this, selected, hover);\n return splitter.process(inText);\n }\n\n /**\n * This explodes the label string into lines and sets the width, height and number of lines.\n *\n * @param {CanvasRenderingContext2D} ctx\n * @param {boolean} selected\n * @param {boolean} hover\n * @private\n */\n _processLabel(ctx, selected, hover) {\n if (this.labelDirty === false && !this.differentState(selected, hover))\n return;\n\n const state = this._processLabelText(\n ctx,\n selected,\n hover,\n this.elementOptions.label\n );\n\n if (this.fontOptions.minWdt > 0 && state.width < this.fontOptions.minWdt) {\n state.width = this.fontOptions.minWdt;\n }\n\n this.size.labelHeight = state.height;\n if (this.fontOptions.minHgt > 0 && state.height < this.fontOptions.minHgt) {\n state.height = this.fontOptions.minHgt;\n }\n\n this.lines = state.lines;\n this.lineCount = state.lines.length;\n this.size.width = state.width;\n this.size.height = state.height;\n this.selectedState = selected;\n this.hoverState = hover;\n\n this.labelDirty = false;\n }\n\n /**\n * Check if this label is visible\n *\n * @returns {boolean} true if this label will be show, false otherwise\n */\n visible() {\n if (\n this.size.width === 0 ||\n this.size.height === 0 ||\n this.elementOptions.label === undefined\n ) {\n return false; // nothing to display\n }\n\n const viewFontSize = this.fontOptions.size * this.body.view.scale;\n if (viewFontSize < this.elementOptions.scaling.label.drawThreshold - 1) {\n return false; // Too small or too far away to show\n }\n\n return true;\n }\n}\n\nexport default Label;\n","/**\n * The Base class for all Nodes.\n */\nclass NodeBase {\n /**\n * @param {object} options\n * @param {object} body\n * @param {Label} labelModule\n */\n constructor(options, body, labelModule) {\n this.body = body;\n this.labelModule = labelModule;\n this.setOptions(options);\n this.top = undefined;\n this.left = undefined;\n this.height = undefined;\n this.width = undefined;\n this.radius = undefined;\n this.margin = undefined;\n this.refreshNeeded = true;\n this.boundingBox = { top: 0, left: 0, right: 0, bottom: 0 };\n }\n\n /**\n *\n * @param {object} options\n */\n setOptions(options) {\n this.options = options;\n }\n\n /**\n *\n * @param {Label} labelModule\n * @private\n */\n _setMargins(labelModule) {\n this.margin = {};\n if (this.options.margin) {\n if (typeof this.options.margin == \"object\") {\n this.margin.top = this.options.margin.top;\n this.margin.right = this.options.margin.right;\n this.margin.bottom = this.options.margin.bottom;\n this.margin.left = this.options.margin.left;\n } else {\n this.margin.top = this.options.margin;\n this.margin.right = this.options.margin;\n this.margin.bottom = this.options.margin;\n this.margin.left = this.options.margin;\n }\n }\n labelModule.adjustSizes(this.margin);\n }\n\n /**\n *\n * @param {CanvasRenderingContext2D} ctx\n * @param {number} angle\n * @returns {number}\n * @private\n */\n _distanceToBorder(ctx, angle) {\n const borderWidth = this.options.borderWidth;\n if (ctx) {\n this.resize(ctx);\n }\n return (\n Math.min(\n Math.abs(this.width / 2 / Math.cos(angle)),\n Math.abs(this.height / 2 / Math.sin(angle))\n ) + borderWidth\n );\n }\n\n /**\n *\n * @param {CanvasRenderingContext2D} ctx\n * @param {ArrowOptions} values\n */\n enableShadow(ctx, values) {\n if (values.shadow) {\n ctx.shadowColor = values.shadowColor;\n ctx.shadowBlur = values.shadowSize;\n ctx.shadowOffsetX = values.shadowX;\n ctx.shadowOffsetY = values.shadowY;\n }\n }\n\n /**\n *\n * @param {CanvasRenderingContext2D} ctx\n * @param {ArrowOptions} values\n */\n disableShadow(ctx, values) {\n if (values.shadow) {\n ctx.shadowColor = \"rgba(0,0,0,0)\";\n ctx.shadowBlur = 0;\n ctx.shadowOffsetX = 0;\n ctx.shadowOffsetY = 0;\n }\n }\n\n /**\n *\n * @param {CanvasRenderingContext2D} ctx\n * @param {ArrowOptions} values\n */\n enableBorderDashes(ctx, values) {\n if (values.borderDashes !== false) {\n if (ctx.setLineDash !== undefined) {\n let dashes = values.borderDashes;\n if (dashes === true) {\n dashes = [5, 15];\n }\n ctx.setLineDash(dashes);\n } else {\n console.warn(\n \"setLineDash is not supported in this browser. The dashed borders cannot be used.\"\n );\n this.options.shapeProperties.borderDashes = false;\n values.borderDashes = false;\n }\n }\n }\n\n /**\n *\n * @param {CanvasRenderingContext2D} ctx\n * @param {ArrowOptions} values\n */\n disableBorderDashes(ctx, values) {\n if (values.borderDashes !== false) {\n if (ctx.setLineDash !== undefined) {\n ctx.setLineDash([0]);\n } else {\n console.warn(\n \"setLineDash is not supported in this browser. The dashed borders cannot be used.\"\n );\n this.options.shapeProperties.borderDashes = false;\n values.borderDashes = false;\n }\n }\n }\n\n /**\n * Determine if the shape of a node needs to be recalculated.\n *\n * @param {boolean} selected\n * @param {boolean} hover\n * @returns {boolean}\n * @protected\n */\n needsRefresh(selected, hover) {\n if (this.refreshNeeded === true) {\n // This is probably not the best location to reset this member.\n // However, in the current logic, it is the most convenient one.\n this.refreshNeeded = false;\n return true;\n }\n\n return (\n this.width === undefined ||\n this.labelModule.differentState(selected, hover)\n );\n }\n\n /**\n *\n * @param {CanvasRenderingContext2D} ctx\n * @param {ArrowOptions} values\n */\n initContextForDraw(ctx, values) {\n const borderWidth = values.borderWidth / this.body.view.scale;\n\n ctx.lineWidth = Math.min(this.width, borderWidth);\n ctx.strokeStyle = values.borderColor;\n ctx.fillStyle = values.color;\n }\n\n /**\n *\n * @param {CanvasRenderingContext2D} ctx\n * @param {ArrowOptions} values\n */\n performStroke(ctx, values) {\n const borderWidth = values.borderWidth / this.body.view.scale;\n\n //draw dashed border if enabled, save and restore is required for firefox not to crash on unix.\n ctx.save();\n // if borders are zero width, they will be drawn with width 1 by default. This prevents that\n if (borderWidth > 0) {\n this.enableBorderDashes(ctx, values);\n //draw the border\n ctx.stroke();\n //disable dashed border for other elements\n this.disableBorderDashes(ctx, values);\n }\n ctx.restore();\n }\n\n /**\n *\n * @param {CanvasRenderingContext2D} ctx\n * @param {ArrowOptions} values\n */\n performFill(ctx, values) {\n ctx.save();\n ctx.fillStyle = values.color;\n // draw shadow if enabled\n this.enableShadow(ctx, values);\n // draw the background\n ctx.fill();\n // disable shadows for other elements.\n this.disableShadow(ctx, values);\n\n ctx.restore();\n this.performStroke(ctx, values);\n }\n\n /**\n *\n * @param {number} margin\n * @private\n */\n _addBoundingBoxMargin(margin) {\n this.boundingBox.left -= margin;\n this.boundingBox.top -= margin;\n this.boundingBox.bottom += margin;\n this.boundingBox.right += margin;\n }\n\n /**\n * Actual implementation of this method call.\n *\n * Doing it like this makes it easier to override\n * in the child classes.\n *\n * @param {number} x width\n * @param {number} y height\n * @param {CanvasRenderingContext2D} ctx\n * @param {boolean} selected\n * @param {boolean} hover\n * @private\n */\n _updateBoundingBox(x, y, ctx, selected, hover) {\n if (ctx !== undefined) {\n this.resize(ctx, selected, hover);\n }\n\n this.left = x - this.width / 2;\n this.top = y - this.height / 2;\n\n this.boundingBox.left = this.left;\n this.boundingBox.top = this.top;\n this.boundingBox.bottom = this.top + this.height;\n this.boundingBox.right = this.left + this.width;\n }\n\n /**\n * Default implementation of this method call.\n * This acts as a stub which can be overridden.\n *\n * @param {number} x width\n * @param {number} y height\n * @param {CanvasRenderingContext2D} ctx\n * @param {boolean} selected\n * @param {boolean} hover\n */\n updateBoundingBox(x, y, ctx, selected, hover) {\n this._updateBoundingBox(x, y, ctx, selected, hover);\n }\n\n /**\n * Determine the dimensions to use for nodes with an internal label\n *\n * Currently, these are: Circle, Ellipse, Database, Box\n * The other nodes have external labels, and will not call this method\n *\n * If there is no label, decent default values are supplied.\n *\n * @param {CanvasRenderingContext2D} ctx\n * @param {boolean} [selected]\n * @param {boolean} [hover]\n * @returns {{width:number, height:number}}\n */\n getDimensionsFromLabel(ctx, selected, hover) {\n // NOTE: previously 'textSize' was not put in 'this' for Ellipse\n // TODO: examine the consequences.\n this.textSize = this.labelModule.getTextSize(ctx, selected, hover);\n let width = this.textSize.width;\n let height = this.textSize.height;\n\n const DEFAULT_SIZE = 14;\n if (width === 0) {\n // This happens when there is no label text set\n width = DEFAULT_SIZE; // use a decent default\n height = DEFAULT_SIZE; // if width zero, then height also always zero\n }\n\n return { width: width, height: height };\n }\n}\n\nexport default NodeBase;\n","\"use strict\";\n\nimport NodeBase from \"../util/NodeBase\";\nimport { drawRoundRect } from \"../util/shapes\";\n\n/**\n * A Box Node/Cluster shape.\n *\n * @augments NodeBase\n */\nclass Box extends NodeBase {\n /**\n * @param {object} options\n * @param {object} body\n * @param {Label} labelModule\n */\n constructor(options, body, labelModule) {\n super(options, body, labelModule);\n this._setMargins(labelModule);\n }\n\n /**\n *\n * @param {CanvasRenderingContext2D} ctx\n * @param {boolean} [selected]\n * @param {boolean} [hover]\n */\n resize(ctx, selected = this.selected, hover = this.hover) {\n if (this.needsRefresh(selected, hover)) {\n const dimensions = this.getDimensionsFromLabel(ctx, selected, hover);\n\n this.width = dimensions.width + this.margin.right + this.margin.left;\n this.height = dimensions.height + this.margin.top + this.margin.bottom;\n this.radius = this.width / 2;\n }\n }\n\n /**\n *\n * @param {CanvasRenderingContext2D} ctx\n * @param {number} x width\n * @param {number} y height\n * @param {boolean} selected\n * @param {boolean} hover\n * @param {ArrowOptions} values\n */\n draw(ctx, x, y, selected, hover, values) {\n this.resize(ctx, selected, hover);\n this.left = x - this.width / 2;\n this.top = y - this.height / 2;\n\n this.initContextForDraw(ctx, values);\n drawRoundRect(\n ctx,\n this.left,\n this.top,\n this.width,\n this.height,\n values.borderRadius\n );\n this.performFill(ctx, values);\n\n this.updateBoundingBox(x, y, ctx, selected, hover);\n this.labelModule.draw(\n ctx,\n this.left + this.textSize.width / 2 + this.margin.left,\n this.top + this.textSize.height / 2 + this.margin.top,\n selected,\n hover\n );\n }\n\n /**\n *\n * @param {number} x width\n * @param {number} y height\n * @param {CanvasRenderingContext2D} ctx\n * @param {boolean} selected\n * @param {boolean} hover\n */\n updateBoundingBox(x, y, ctx, selected, hover) {\n this._updateBoundingBox(x, y, ctx, selected, hover);\n\n const borderRadius = this.options.shapeProperties.borderRadius; // only effective for box\n this._addBoundingBoxMargin(borderRadius);\n }\n\n /**\n *\n * @param {CanvasRenderingContext2D} ctx\n * @param {number} angle\n * @returns {number}\n */\n distanceToBorder(ctx, angle) {\n if (ctx) {\n this.resize(ctx);\n }\n const borderWidth = this.options.borderWidth;\n\n return (\n Math.min(\n Math.abs(this.width / 2 / Math.cos(angle)),\n Math.abs(this.height / 2 / Math.sin(angle))\n ) + borderWidth\n );\n }\n}\n\nexport default Box;\n","import NodeBase from \"./NodeBase\";\nimport { drawCircle } from \"./shapes\";\n\n/**\n * NOTE: This is a bad base class\n *\n * Child classes are:\n *\n * Image - uses *only* image methods\n * Circle - uses *only* _drawRawCircle\n * CircleImage - uses all\n *\n * TODO: Refactor, move _drawRawCircle to different module, derive Circle from NodeBase\n * Rename this to ImageBase\n * Consolidate common code in Image and CircleImage to base class\n *\n * @augments NodeBase\n */\nclass CircleImageBase extends NodeBase {\n /**\n * @param {object} options\n * @param {object} body\n * @param {Label} labelModule\n */\n constructor(options, body, labelModule) {\n super(options, body, labelModule);\n this.labelOffset = 0;\n this.selected = false;\n }\n\n /**\n *\n * @param {object} options\n * @param {object} [imageObj]\n * @param {object} [imageObjAlt]\n */\n setOptions(options, imageObj, imageObjAlt) {\n this.options = options;\n\n if (!(imageObj === undefined && imageObjAlt === undefined)) {\n this.setImages(imageObj, imageObjAlt);\n }\n }\n\n /**\n * Set the images for this node.\n *\n * The images can be updated after the initial setting of options;\n * therefore, this method needs to be reentrant.\n *\n * For correct working in error cases, it is necessary to properly set\n * field 'nodes.brokenImage' in the options.\n *\n * @param {Image} imageObj required; main image to show for this node\n * @param {Image|undefined} imageObjAlt optional; image to show when node is selected\n */\n setImages(imageObj, imageObjAlt) {\n if (imageObjAlt && this.selected) {\n this.imageObj = imageObjAlt;\n this.imageObjAlt = imageObj;\n } else {\n this.imageObj = imageObj;\n this.imageObjAlt = imageObjAlt;\n }\n }\n\n /**\n * Set selection and switch between the base and the selected image.\n *\n * Do the switch only if imageObjAlt exists.\n *\n * @param {boolean} selected value of new selected state for current node\n */\n switchImages(selected) {\n const selection_changed =\n (selected && !this.selected) || (!selected && this.selected);\n this.selected = selected; // Remember new selection\n\n if (this.imageObjAlt !== undefined && selection_changed) {\n const imageTmp = this.imageObj;\n this.imageObj = this.imageObjAlt;\n this.imageObjAlt = imageTmp;\n }\n }\n\n /**\n * Returns Image Padding from node options\n *\n * @returns {{top: number,left: number,bottom: number,right: number}} image padding inside this shape\n * @private\n */\n _getImagePadding() {\n const imgPadding = { top: 0, right: 0, bottom: 0, left: 0 };\n if (this.options.imagePadding) {\n const optImgPadding = this.options.imagePadding;\n if (typeof optImgPadding == \"object\") {\n imgPadding.top = optImgPadding.top;\n imgPadding.right = optImgPadding.right;\n imgPadding.bottom = optImgPadding.bottom;\n imgPadding.left = optImgPadding.left;\n } else {\n imgPadding.top = optImgPadding;\n imgPadding.right = optImgPadding;\n imgPadding.bottom = optImgPadding;\n imgPadding.left = optImgPadding;\n }\n }\n\n return imgPadding;\n }\n\n /**\n * Adjust the node dimensions for a loaded image.\n *\n * Pre: this.imageObj is valid\n */\n _resizeImage() {\n let width, height;\n\n if (this.options.shapeProperties.useImageSize === false) {\n // Use the size property\n let ratio_width = 1;\n let ratio_height = 1;\n\n // Only calculate the proper ratio if both width and height not zero\n if (this.imageObj.width && this.imageObj.height) {\n if (this.imageObj.width > this.imageObj.height) {\n ratio_width = this.imageObj.width / this.imageObj.height;\n } else {\n ratio_height = this.imageObj.height / this.imageObj.width;\n }\n }\n\n width = this.options.size * 2 * ratio_width;\n height = this.options.size * 2 * ratio_height;\n } else {\n // Use the image size with image padding\n const imgPadding = this._getImagePadding();\n width = this.imageObj.width + imgPadding.left + imgPadding.right;\n height = this.imageObj.height + imgPadding.top + imgPadding.bottom;\n }\n\n this.width = width;\n this.height = height;\n this.radius = 0.5 * this.width;\n }\n\n /**\n *\n * @param {CanvasRenderingContext2D} ctx\n * @param {number} x width\n * @param {number} y height\n * @param {ArrowOptions} values\n * @private\n */\n _drawRawCircle(ctx, x, y, values) {\n this.initContextForDraw(ctx, values);\n drawCircle(ctx, x, y, values.size);\n this.performFill(ctx, values);\n }\n\n /**\n *\n * @param {CanvasRenderingContext2D} ctx\n * @param {ArrowOptions} values\n * @private\n */\n _drawImageAtPosition(ctx, values) {\n if (this.imageObj.width != 0) {\n // draw the image\n ctx.globalAlpha = values.opacity !== undefined ? values.opacity : 1;\n\n // draw shadow if enabled\n this.enableShadow(ctx, values);\n\n let factor = 1;\n if (this.options.shapeProperties.interpolation === true) {\n factor = this.imageObj.width / this.width / this.body.view.scale;\n }\n\n const imgPadding = this._getImagePadding();\n\n const imgPosLeft = this.left + imgPadding.left;\n const imgPosTop = this.top + imgPadding.top;\n const imgWidth = this.width - imgPadding.left - imgPadding.right;\n const imgHeight = this.height - imgPadding.top - imgPadding.bottom;\n this.imageObj.drawImageAtPosition(\n ctx,\n factor,\n imgPosLeft,\n imgPosTop,\n imgWidth,\n imgHeight\n );\n\n // disable shadows for other elements.\n this.disableShadow(ctx, values);\n }\n }\n\n /**\n *\n * @param {CanvasRenderingContext2D} ctx\n * @param {number} x width\n * @param {number} y height\n * @param {boolean} selected\n * @param {boolean} hover\n * @private\n */\n _drawImageLabel(ctx, x, y, selected, hover) {\n let offset = 0;\n\n if (this.height !== undefined) {\n offset = this.height * 0.5;\n const labelDimensions = this.labelModule.getTextSize(\n ctx,\n selected,\n hover\n );\n if (labelDimensions.lineCount >= 1) {\n offset += labelDimensions.height / 2;\n }\n }\n\n const yLabel = y + offset;\n\n if (this.options.label) {\n this.labelOffset = offset;\n }\n this.labelModule.draw(ctx, x, yLabel, selected, hover, \"hanging\");\n }\n}\n\nexport default CircleImageBase;\n","\"use strict\";\n\nimport CircleImageBase from \"../util/CircleImageBase\";\n\n/**\n * A Circle Node/Cluster shape.\n *\n * @augments CircleImageBase\n */\nclass Circle extends CircleImageBase {\n /**\n * @param {object} options\n * @param {object} body\n * @param {Label} labelModule\n */\n constructor(options, body, labelModule) {\n super(options, body, labelModule);\n this._setMargins(labelModule);\n }\n\n /**\n *\n * @param {CanvasRenderingContext2D} ctx\n * @param {boolean} [selected]\n * @param {boolean} [hover]\n */\n resize(ctx, selected = this.selected, hover = this.hover) {\n if (this.needsRefresh(selected, hover)) {\n const dimensions = this.getDimensionsFromLabel(ctx, selected, hover);\n\n const diameter = Math.max(\n dimensions.width + this.margin.right + this.margin.left,\n dimensions.height + this.margin.top + this.margin.bottom\n );\n\n this.options.size = diameter / 2; // NOTE: this size field only set here, not in Ellipse, Database, Box\n this.width = diameter;\n this.height = diameter;\n this.radius = this.width / 2;\n }\n }\n\n /**\n *\n * @param {CanvasRenderingContext2D} ctx\n * @param {number} x width\n * @param {number} y height\n * @param {boolean} selected\n * @param {boolean} hover\n * @param {ArrowOptions} values\n */\n draw(ctx, x, y, selected, hover, values) {\n this.resize(ctx, selected, hover);\n this.left = x - this.width / 2;\n this.top = y - this.height / 2;\n\n this._drawRawCircle(ctx, x, y, values);\n\n this.updateBoundingBox(x, y);\n this.labelModule.draw(\n ctx,\n this.left + this.textSize.width / 2 + this.margin.left,\n y,\n selected,\n hover\n );\n }\n\n /**\n *\n * @param {number} x width\n * @param {number} y height\n */\n updateBoundingBox(x, y) {\n this.boundingBox.top = y - this.options.size;\n this.boundingBox.left = x - this.options.size;\n this.boundingBox.right = x + this.options.size;\n this.boundingBox.bottom = y + this.options.size;\n }\n\n /**\n *\n * @param {CanvasRenderingContext2D} ctx\n * @returns {number}\n */\n distanceToBorder(ctx) {\n if (ctx) {\n this.resize(ctx);\n }\n return this.width * 0.5;\n }\n}\n\nexport default Circle;\n","\"use strict\";\n\nimport CircleImageBase from \"../util/CircleImageBase\";\n\n/**\n * A CircularImage Node/Cluster shape.\n *\n * @augments CircleImageBase\n */\nclass CircularImage extends CircleImageBase {\n /**\n * @param {object} options\n * @param {object} body\n * @param {Label} labelModule\n * @param {Image} imageObj\n * @param {Image} imageObjAlt\n */\n constructor(options, body, labelModule, imageObj, imageObjAlt) {\n super(options, body, labelModule);\n\n this.setImages(imageObj, imageObjAlt);\n }\n\n /**\n *\n * @param {CanvasRenderingContext2D} ctx\n * @param {boolean} [selected]\n * @param {boolean} [hover]\n */\n resize(ctx, selected = this.selected, hover = this.hover) {\n const imageAbsent =\n this.imageObj.src === undefined ||\n this.imageObj.width === undefined ||\n this.imageObj.height === undefined;\n\n if (imageAbsent) {\n const diameter = this.options.size * 2;\n this.width = diameter;\n this.height = diameter;\n this.radius = 0.5 * this.width;\n return;\n }\n\n // At this point, an image is present, i.e. this.imageObj is valid.\n if (this.needsRefresh(selected, hover)) {\n this._resizeImage();\n }\n }\n\n /**\n *\n * @param {CanvasRenderingContext2D} ctx\n * @param {number} x width\n * @param {number} y height\n * @param {boolean} selected\n * @param {boolean} hover\n * @param {ArrowOptions} values\n */\n draw(ctx, x, y, selected, hover, values) {\n this.switchImages(selected);\n this.resize();\n\n let labelX = x,\n labelY = y;\n\n if (this.options.shapeProperties.coordinateOrigin === \"top-left\") {\n this.left = x;\n this.top = y;\n labelX += this.width / 2;\n labelY += this.height / 2;\n } else {\n this.left = x - this.width / 2;\n this.top = y - this.height / 2;\n }\n\n // draw the background circle. IMPORTANT: the stroke in this method is used by the clip method below.\n this._drawRawCircle(ctx, labelX, labelY, values);\n\n // now we draw in the circle, we save so we can revert the clip operation after drawing.\n ctx.save();\n // clip is used to use the stroke in drawRawCircle as an area that we can draw in.\n ctx.clip();\n // draw the image\n this._drawImageAtPosition(ctx, values);\n // restore so we can again draw on the full canvas\n ctx.restore();\n\n this._drawImageLabel(ctx, labelX, labelY, selected, hover);\n\n this.updateBoundingBox(x, y);\n }\n\n // TODO: compare with Circle.updateBoundingBox(), consolidate? More stuff is happening here\n /**\n *\n * @param {number} x width\n * @param {number} y height\n */\n updateBoundingBox(x, y) {\n if (this.options.shapeProperties.coordinateOrigin === \"top-left\") {\n this.boundingBox.top = y;\n this.boundingBox.left = x;\n this.boundingBox.right = x + this.options.size * 2;\n this.boundingBox.bottom = y + this.options.size * 2;\n } else {\n this.boundingBox.top = y - this.options.size;\n this.boundingBox.left = x - this.options.size;\n this.boundingBox.right = x + this.options.size;\n this.boundingBox.bottom = y + this.options.size;\n }\n\n // TODO: compare with Image.updateBoundingBox(), consolidate?\n this.boundingBox.left = Math.min(\n this.boundingBox.left,\n this.labelModule.size.left\n );\n this.boundingBox.right = Math.max(\n this.boundingBox.right,\n this.labelModule.size.left + this.labelModule.size.width\n );\n this.boundingBox.bottom = Math.max(\n this.boundingBox.bottom,\n this.boundingBox.bottom + this.labelOffset\n );\n }\n\n /**\n *\n * @param {CanvasRenderingContext2D} ctx\n * @returns {number}\n */\n distanceToBorder(ctx) {\n if (ctx) {\n this.resize(ctx);\n }\n return this.width * 0.5;\n }\n}\n\nexport default CircularImage;\n","import NodeBase from \"../util/NodeBase\";\nimport { getShape } from \"./shapes\";\n\n/**\n * Base class for constructing Node/Cluster Shapes.\n *\n * @augments NodeBase\n */\nclass ShapeBase extends NodeBase {\n /**\n * @param {object} options\n * @param {object} body\n * @param {Label} labelModule\n */\n constructor(options, body, labelModule) {\n super(options, body, labelModule);\n }\n\n /**\n *\n * @param {CanvasRenderingContext2D} ctx\n * @param {boolean} [selected]\n * @param {boolean} [hover]\n * @param {object} [values={size: this.options.size}]\n */\n resize(\n ctx,\n selected = this.selected,\n hover = this.hover,\n values = { size: this.options.size }\n ) {\n if (this.needsRefresh(selected, hover)) {\n this.labelModule.getTextSize(ctx, selected, hover);\n const size = 2 * values.size;\n this.width = this.customSizeWidth ?? size;\n this.height = this.customSizeHeight ?? size;\n this.radius = 0.5 * this.width;\n }\n }\n\n /**\n *\n * @param {CanvasRenderingContext2D} ctx\n * @param {string} shape\n * @param {number} sizeMultiplier - Unused! TODO: Remove next major release\n * @param {number} x\n * @param {number} y\n * @param {boolean} selected\n * @param {boolean} hover\n * @param {ArrowOptions} values\n * @private\n * @returns {object} Callbacks to draw later on higher layers.\n */\n _drawShape(ctx, shape, sizeMultiplier, x, y, selected, hover, values) {\n this.resize(ctx, selected, hover, values);\n this.left = x - this.width / 2;\n this.top = y - this.height / 2;\n\n this.initContextForDraw(ctx, values);\n getShape(shape)(ctx, x, y, values.size);\n this.performFill(ctx, values);\n\n if (this.options.icon !== undefined) {\n if (this.options.icon.code !== undefined) {\n ctx.font =\n (selected ? \"bold \" : \"\") +\n this.height / 2 +\n \"px \" +\n (this.options.icon.face || \"FontAwesome\");\n ctx.fillStyle = this.options.icon.color || \"black\";\n ctx.textAlign = \"center\";\n ctx.textBaseline = \"middle\";\n ctx.fillText(this.options.icon.code, x, y);\n }\n }\n\n return {\n drawExternalLabel: () => {\n if (this.options.label !== undefined) {\n // Need to call following here in order to ensure value for\n // `this.labelModule.size.height`.\n this.labelModule.calculateLabelSize(\n ctx,\n selected,\n hover,\n x,\n y,\n \"hanging\"\n );\n const yLabel =\n y + 0.5 * this.height + 0.5 * this.labelModule.size.height;\n this.labelModule.draw(ctx, x, yLabel, selected, hover, \"hanging\");\n }\n\n this.updateBoundingBox(x, y);\n },\n };\n }\n\n /**\n *\n * @param {number} x\n * @param {number} y\n */\n updateBoundingBox(x, y) {\n this.boundingBox.top = y - this.options.size;\n this.boundingBox.left = x - this.options.size;\n this.boundingBox.right = x + this.options.size;\n this.boundingBox.bottom = y + this.options.size;\n\n if (this.options.label !== undefined && this.labelModule.size.width > 0) {\n this.boundingBox.left = Math.min(\n this.boundingBox.left,\n this.labelModule.size.left\n );\n this.boundingBox.right = Math.max(\n this.boundingBox.right,\n this.labelModule.size.left + this.labelModule.size.width\n );\n this.boundingBox.bottom = Math.max(\n this.boundingBox.bottom,\n this.boundingBox.bottom + this.labelModule.size.height\n );\n }\n }\n}\n\nexport default ShapeBase;\n","\"use strict\";\n\nimport ShapeBase from \"../util/ShapeBase\";\n\n/**\n * A CustomShape Node/Cluster shape.\n *\n * @augments ShapeBase\n */\nclass CustomShape extends ShapeBase {\n /**\n * @param {object} options\n * @param {object} body\n * @param {Label} labelModule\n * @param {Function} ctxRenderer\n */\n constructor(options, body, labelModule, ctxRenderer) {\n super(options, body, labelModule, ctxRenderer);\n this.ctxRenderer = ctxRenderer;\n }\n\n /**\n *\n * @param {CanvasRenderingContext2D} ctx\n * @param {number} x width\n * @param {number} y height\n * @param {boolean} selected\n * @param {boolean} hover\n * @param {ArrowOptions} values\n * @returns {object} Callbacks to draw later on different layers.\n */\n draw(ctx, x, y, selected, hover, values) {\n this.resize(ctx, selected, hover, values);\n this.left = x - this.width / 2;\n this.top = y - this.height / 2;\n\n // Guard right away because someone may just draw in the function itself.\n ctx.save();\n const drawLater = this.ctxRenderer({\n ctx,\n id: this.options.id,\n x,\n y,\n state: { selected, hover },\n style: { ...values },\n label: this.options.label,\n });\n // Render the node shape bellow arrows.\n if (drawLater.drawNode != null) {\n drawLater.drawNode();\n }\n ctx.restore();\n\n if (drawLater.drawExternalLabel) {\n // Guard the external label (above arrows) drawing function.\n const drawExternalLabel = drawLater.drawExternalLabel;\n drawLater.drawExternalLabel = () => {\n ctx.save();\n drawExternalLabel();\n ctx.restore();\n };\n }\n\n if (drawLater.nodeDimensions) {\n this.customSizeWidth = drawLater.nodeDimensions.width;\n this.customSizeHeight = drawLater.nodeDimensions.height;\n }\n\n return drawLater;\n }\n\n /**\n *\n * @param {CanvasRenderingContext2D} ctx\n * @param {number} angle\n * @returns {number}\n */\n distanceToBorder(ctx, angle) {\n return this._distanceToBorder(ctx, angle);\n }\n}\n\nexport default CustomShape;\n","\"use strict\";\n\nimport NodeBase from \"../util/NodeBase\";\nimport { drawDatabase } from \"../util/shapes\";\n\n/**\n * A Database Node/Cluster shape.\n *\n * @augments NodeBase\n */\nclass Database extends NodeBase {\n /**\n * @param {object} options\n * @param {object} body\n * @param {Label} labelModule\n */\n constructor(options, body, labelModule) {\n super(options, body, labelModule);\n this._setMargins(labelModule);\n }\n\n /**\n *\n * @param {CanvasRenderingContext2D} ctx\n * @param {boolean} selected\n * @param {boolean} hover\n */\n resize(ctx, selected, hover) {\n if (this.needsRefresh(selected, hover)) {\n const dimensions = this.getDimensionsFromLabel(ctx, selected, hover);\n const size = dimensions.width + this.margin.right + this.margin.left;\n\n this.width = size;\n this.height = size;\n this.radius = this.width / 2;\n }\n }\n\n /**\n *\n * @param {CanvasRenderingContext2D} ctx\n * @param {number} x width\n * @param {number} y height\n * @param {boolean} selected\n * @param {boolean} hover\n * @param {ArrowOptions} values\n */\n draw(ctx, x, y, selected, hover, values) {\n this.resize(ctx, selected, hover);\n this.left = x - this.width / 2;\n this.top = y - this.height / 2;\n\n this.initContextForDraw(ctx, values);\n drawDatabase(\n ctx,\n x - this.width / 2,\n y - this.height / 2,\n this.width,\n this.height\n );\n this.performFill(ctx, values);\n\n this.updateBoundingBox(x, y, ctx, selected, hover);\n this.labelModule.draw(\n ctx,\n this.left + this.textSize.width / 2 + this.margin.left,\n this.top + this.textSize.height / 2 + this.margin.top,\n selected,\n hover\n );\n }\n /**\n *\n * @param {CanvasRenderingContext2D} ctx\n * @param {number} angle\n * @returns {number}\n */\n distanceToBorder(ctx, angle) {\n return this._distanceToBorder(ctx, angle);\n }\n}\n\nexport default Database;\n","\"use strict\";\n\nimport ShapeBase from \"../util/ShapeBase\";\n\n/**\n * A Diamond Node/Cluster shape.\n *\n * @augments ShapeBase\n */\nclass Diamond extends ShapeBase {\n /**\n * @param {object} options\n * @param {object} body\n * @param {Label} labelModule\n */\n constructor(options, body, labelModule) {\n super(options, body, labelModule);\n }\n\n /**\n *\n * @param {CanvasRenderingContext2D} ctx\n * @param {number} x width\n * @param {number} y height\n * @param {boolean} selected\n * @param {boolean} hover\n * @param {ArrowOptions} values\n * @returns {object} Callbacks to draw later on higher layers.\n */\n draw(ctx, x, y, selected, hover, values) {\n return this._drawShape(ctx, \"diamond\", 4, x, y, selected, hover, values);\n }\n\n /**\n *\n * @param {CanvasRenderingContext2D} ctx\n * @param {number} angle\n * @returns {number}\n */\n distanceToBorder(ctx, angle) {\n return this._distanceToBorder(ctx, angle);\n }\n}\n\nexport default Diamond;\n","\"use strict\";\n\nimport ShapeBase from \"../util/ShapeBase\";\n\n/**\n * A Dot Node/Cluster shape.\n *\n * @augments ShapeBase\n */\nclass Dot extends ShapeBase {\n /**\n * @param {object} options\n * @param {object} body\n * @param {Label} labelModule\n */\n constructor(options, body, labelModule) {\n super(options, body, labelModule);\n }\n\n /**\n *\n * @param {CanvasRenderingContext2D} ctx\n * @param {number} x width\n * @param {number} y height\n * @param {boolean} selected\n * @param {boolean} hover\n * @param {ArrowOptions} values\n * @returns {object} Callbacks to draw later on higher layers.\n */\n draw(ctx, x, y, selected, hover, values) {\n return this._drawShape(ctx, \"circle\", 2, x, y, selected, hover, values);\n }\n\n /**\n *\n * @param {CanvasRenderingContext2D} ctx\n * @returns {number}\n */\n distanceToBorder(ctx) {\n if (ctx) {\n this.resize(ctx);\n }\n return this.options.size;\n }\n}\n\nexport default Dot;\n","\"use strict\";\n\nimport NodeBase from \"../util/NodeBase\";\nimport { drawEllipse } from \"../util/shapes\";\n\n/**\n * Am Ellipse Node/Cluster shape.\n *\n * @augments NodeBase\n */\nclass Ellipse extends NodeBase {\n /**\n * @param {object} options\n * @param {object} body\n * @param {Label} labelModule\n */\n constructor(options, body, labelModule) {\n super(options, body, labelModule);\n }\n\n /**\n *\n * @param {CanvasRenderingContext2D} ctx\n * @param {boolean} [selected]\n * @param {boolean} [hover]\n */\n resize(ctx, selected = this.selected, hover = this.hover) {\n if (this.needsRefresh(selected, hover)) {\n const dimensions = this.getDimensionsFromLabel(ctx, selected, hover);\n\n this.height = dimensions.height * 2;\n this.width = dimensions.width + dimensions.height;\n this.radius = 0.5 * this.width;\n }\n }\n\n /**\n *\n * @param {CanvasRenderingContext2D} ctx\n * @param {number} x width\n * @param {number} y height\n * @param {boolean} selected\n * @param {boolean} hover\n * @param {ArrowOptions} values\n */\n draw(ctx, x, y, selected, hover, values) {\n this.resize(ctx, selected, hover);\n this.left = x - this.width * 0.5;\n this.top = y - this.height * 0.5;\n\n this.initContextForDraw(ctx, values);\n drawEllipse(ctx, this.left, this.top, this.width, this.height);\n this.performFill(ctx, values);\n\n this.updateBoundingBox(x, y, ctx, selected, hover);\n this.labelModule.draw(ctx, x, y, selected, hover);\n }\n\n /**\n *\n * @param {CanvasRenderingContext2D} ctx\n * @param {number} angle\n * @returns {number}\n */\n distanceToBorder(ctx, angle) {\n if (ctx) {\n this.resize(ctx);\n }\n const a = this.width * 0.5;\n const b = this.height * 0.5;\n const w = Math.sin(angle) * a;\n const h = Math.cos(angle) * b;\n return (a * b) / Math.sqrt(w * w + h * h);\n }\n}\n\nexport default Ellipse;\n","\"use strict\";\n\nimport NodeBase from \"../util/NodeBase\";\n\n/**\n * An icon replacement for the default Node shape.\n *\n * @augments NodeBase\n */\nclass Icon extends NodeBase {\n /**\n * @param {object} options\n * @param {object} body\n * @param {Label} labelModule\n */\n constructor(options, body, labelModule) {\n super(options, body, labelModule);\n this._setMargins(labelModule);\n }\n\n /**\n *\n * @param {CanvasRenderingContext2D} ctx - Unused.\n * @param {boolean} [selected]\n * @param {boolean} [hover]\n */\n resize(ctx, selected, hover) {\n if (this.needsRefresh(selected, hover)) {\n this.iconSize = {\n width: Number(this.options.icon.size),\n height: Number(this.options.icon.size),\n };\n this.width = this.iconSize.width + this.margin.right + this.margin.left;\n this.height = this.iconSize.height + this.margin.top + this.margin.bottom;\n this.radius = 0.5 * this.width;\n }\n }\n\n /**\n *\n * @param {CanvasRenderingContext2D} ctx\n * @param {number} x width\n * @param {number} y height\n * @param {boolean} selected\n * @param {boolean} hover\n * @param {ArrowOptions} values\n * @returns {object} Callbacks to draw later on higher layers.\n */\n draw(ctx, x, y, selected, hover, values) {\n this.resize(ctx, selected, hover);\n this.options.icon.size = this.options.icon.size || 50;\n\n this.left = x - this.width / 2;\n this.top = y - this.height / 2;\n this._icon(ctx, x, y, selected, hover, values);\n\n return {\n drawExternalLabel: () => {\n if (this.options.label !== undefined) {\n const iconTextSpacing = 5;\n this.labelModule.draw(\n ctx,\n this.left + this.iconSize.width / 2 + this.margin.left,\n y + this.height / 2 + iconTextSpacing,\n selected\n );\n }\n\n this.updateBoundingBox(x, y);\n },\n };\n }\n\n /**\n *\n * @param {number} x\n * @param {number} y\n */\n updateBoundingBox(x, y) {\n this.boundingBox.top = y - this.options.icon.size * 0.5;\n this.boundingBox.left = x - this.options.icon.size * 0.5;\n this.boundingBox.right = x + this.options.icon.size * 0.5;\n this.boundingBox.bottom = y + this.options.icon.size * 0.5;\n\n if (this.options.label !== undefined && this.labelModule.size.width > 0) {\n const iconTextSpacing = 5;\n this.boundingBox.left = Math.min(\n this.boundingBox.left,\n this.labelModule.size.left\n );\n this.boundingBox.right = Math.max(\n this.boundingBox.right,\n this.labelModule.size.left + this.labelModule.size.width\n );\n this.boundingBox.bottom = Math.max(\n this.boundingBox.bottom,\n this.boundingBox.bottom + this.labelModule.size.height + iconTextSpacing\n );\n }\n }\n\n /**\n *\n * @param {CanvasRenderingContext2D} ctx\n * @param {number} x width\n * @param {number} y height\n * @param {boolean} selected\n * @param {boolean} hover - Unused\n * @param {ArrowOptions} values\n */\n _icon(ctx, x, y, selected, hover, values) {\n const iconSize = Number(this.options.icon.size);\n\n if (this.options.icon.code !== undefined) {\n ctx.font = [\n this.options.icon.weight != null\n ? this.options.icon.weight\n : selected\n ? \"bold\"\n : \"\",\n // If the weight is forced (for example to make Font Awesome 5 work\n // properly) substitute slightly bigger size for bold font face.\n (this.options.icon.weight != null && selected ? 5 : 0) +\n iconSize +\n \"px\",\n this.options.icon.face,\n ].join(\" \");\n\n // draw icon\n ctx.fillStyle = this.options.icon.color || \"black\";\n ctx.textAlign = \"center\";\n ctx.textBaseline = \"middle\";\n\n // draw shadow if enabled\n this.enableShadow(ctx, values);\n ctx.fillText(this.options.icon.code, x, y);\n\n // disable shadows for other elements.\n this.disableShadow(ctx, values);\n } else {\n console.error(\n \"When using the icon shape, you need to define the code in the icon options object. This can be done per node or globally.\"\n );\n }\n }\n\n /**\n *\n * @param {CanvasRenderingContext2D} ctx\n * @param {number} angle\n * @returns {number}\n */\n distanceToBorder(ctx, angle) {\n return this._distanceToBorder(ctx, angle);\n }\n}\n\nexport default Icon;\n","\"use strict\";\n\nimport CircleImageBase from \"../util/CircleImageBase\";\nimport { overrideOpacity } from \"vis-util/esnext\";\n\n/**\n * An image-based replacement for the default Node shape.\n *\n * @augments CircleImageBase\n */\nclass Image extends CircleImageBase {\n /**\n * @param {object} options\n * @param {object} body\n * @param {Label} labelModule\n * @param {Image} imageObj\n * @param {Image} imageObjAlt\n */\n constructor(options, body, labelModule, imageObj, imageObjAlt) {\n super(options, body, labelModule);\n\n this.setImages(imageObj, imageObjAlt);\n }\n\n /**\n *\n * @param {CanvasRenderingContext2D} ctx - Unused.\n * @param {boolean} [selected]\n * @param {boolean} [hover]\n */\n resize(ctx, selected = this.selected, hover = this.hover) {\n const imageAbsent =\n this.imageObj.src === undefined ||\n this.imageObj.width === undefined ||\n this.imageObj.height === undefined;\n\n if (imageAbsent) {\n const side = this.options.size * 2;\n this.width = side;\n this.height = side;\n return;\n }\n\n if (this.needsRefresh(selected, hover)) {\n this._resizeImage();\n }\n }\n\n /**\n *\n * @param {CanvasRenderingContext2D} ctx\n * @param {number} x width\n * @param {number} y height\n * @param {boolean} selected\n * @param {boolean} hover\n * @param {ArrowOptions} values\n */\n draw(ctx, x, y, selected, hover, values) {\n ctx.save();\n this.switchImages(selected);\n this.resize();\n\n let labelX = x,\n labelY = y;\n\n if (this.options.shapeProperties.coordinateOrigin === \"top-left\") {\n this.left = x;\n this.top = y;\n labelX += this.width / 2;\n labelY += this.height / 2;\n } else {\n this.left = x - this.width / 2;\n this.top = y - this.height / 2;\n }\n\n if (this.options.shapeProperties.useBorderWithImage === true) {\n const neutralborderWidth = this.options.borderWidth;\n const selectionLineWidth =\n this.options.borderWidthSelected || 2 * this.options.borderWidth;\n const borderWidth =\n (selected ? selectionLineWidth : neutralborderWidth) /\n this.body.view.scale;\n ctx.lineWidth = Math.min(this.width, borderWidth);\n\n ctx.beginPath();\n let strokeStyle = selected\n ? this.options.color.highlight.border\n : hover\n ? this.options.color.hover.border\n : this.options.color.border;\n let fillStyle = selected\n ? this.options.color.highlight.background\n : hover\n ? this.options.color.hover.background\n : this.options.color.background;\n\n if (values.opacity !== undefined) {\n strokeStyle = overrideOpacity(strokeStyle, values.opacity);\n fillStyle = overrideOpacity(fillStyle, values.opacity);\n }\n // setup the line properties.\n ctx.strokeStyle = strokeStyle;\n\n // set a fillstyle\n ctx.fillStyle = fillStyle;\n\n // draw a rectangle to form the border around. This rectangle is filled so the opacity of a picture (in future vis releases?) can be used to tint the image\n ctx.rect(\n this.left - 0.5 * ctx.lineWidth,\n this.top - 0.5 * ctx.lineWidth,\n this.width + ctx.lineWidth,\n this.height + ctx.lineWidth\n );\n ctx.fill();\n\n this.performStroke(ctx, values);\n\n ctx.closePath();\n }\n\n this._drawImageAtPosition(ctx, values);\n\n this._drawImageLabel(ctx, labelX, labelY, selected, hover);\n\n this.updateBoundingBox(x, y);\n ctx.restore();\n }\n\n /**\n *\n * @param {number} x\n * @param {number} y\n */\n updateBoundingBox(x, y) {\n this.resize();\n\n if (this.options.shapeProperties.coordinateOrigin === \"top-left\") {\n this.left = x;\n this.top = y;\n } else {\n this.left = x - this.width / 2;\n this.top = y - this.height / 2;\n }\n\n this.boundingBox.left = this.left;\n this.boundingBox.top = this.top;\n this.boundingBox.bottom = this.top + this.height;\n this.boundingBox.right = this.left + this.width;\n\n if (this.options.label !== undefined && this.labelModule.size.width > 0) {\n this.boundingBox.left = Math.min(\n this.boundingBox.left,\n this.labelModule.size.left\n );\n this.boundingBox.right = Math.max(\n this.boundingBox.right,\n this.labelModule.size.left + this.labelModule.size.width\n );\n this.boundingBox.bottom = Math.max(\n this.boundingBox.bottom,\n this.boundingBox.bottom + this.labelOffset\n );\n }\n }\n\n /**\n *\n * @param {CanvasRenderingContext2D} ctx\n * @param {number} angle\n * @returns {number}\n */\n distanceToBorder(ctx, angle) {\n return this._distanceToBorder(ctx, angle);\n }\n}\n\nexport default Image;\n","\"use strict\";\n\nimport ShapeBase from \"../util/ShapeBase\";\n\n/**\n * A Square Node/Cluster shape.\n *\n * @augments ShapeBase\n */\nclass Square extends ShapeBase {\n /**\n * @param {object} options\n * @param {object} body\n * @param {Label} labelModule\n */\n constructor(options, body, labelModule) {\n super(options, body, labelModule);\n }\n\n /**\n *\n * @param {CanvasRenderingContext2D} ctx\n * @param {number} x width\n * @param {number} y height\n * @param {boolean} selected\n * @param {boolean} hover\n * @param {ArrowOptions} values\n * @returns {object} Callbacks to draw later on higher layers.\n */\n draw(ctx, x, y, selected, hover, values) {\n return this._drawShape(ctx, \"square\", 2, x, y, selected, hover, values);\n }\n\n /**\n *\n * @param {CanvasRenderingContext2D} ctx\n * @param {number} angle\n * @returns {number}\n */\n distanceToBorder(ctx, angle) {\n return this._distanceToBorder(ctx, angle);\n }\n}\n\nexport default Square;\n","\"use strict\";\n\nimport ShapeBase from \"../util/ShapeBase\";\n\n/**\n * A Hexagon Node/Cluster shape.\n *\n * @augments ShapeBase\n */\nclass Hexagon extends ShapeBase {\n /**\n * @param {object} options\n * @param {object} body\n * @param {Label} labelModule\n */\n constructor(options, body, labelModule) {\n super(options, body, labelModule);\n }\n\n /**\n *\n * @param {CanvasRenderingContext2D} ctx\n * @param {number} x width\n * @param {number} y height\n * @param {boolean} selected\n * @param {boolean} hover\n * @param {ArrowOptions} values\n * @returns {object} Callbacks to draw later on higher layers.\n */\n draw(ctx, x, y, selected, hover, values) {\n return this._drawShape(ctx, \"hexagon\", 4, x, y, selected, hover, values);\n }\n\n /**\n *\n * @param {CanvasRenderingContext2D} ctx\n * @param {number} angle\n * @returns {number}\n */\n distanceToBorder(ctx, angle) {\n return this._distanceToBorder(ctx, angle);\n }\n}\n\nexport default Hexagon;\n","\"use strict\";\n\nimport ShapeBase from \"../util/ShapeBase\";\n\n/**\n * A Star Node/Cluster shape.\n *\n * @augments ShapeBase\n */\nclass Star extends ShapeBase {\n /**\n * @param {object} options\n * @param {object} body\n * @param {Label} labelModule\n */\n constructor(options, body, labelModule) {\n super(options, body, labelModule);\n }\n\n /**\n *\n * @param {CanvasRenderingContext2D} ctx\n * @param {number} x width\n * @param {number} y height\n * @param {boolean} selected\n * @param {boolean} hover\n * @param {ArrowOptions} values\n * @returns {object} Callbacks to draw later on higher layers.\n */\n draw(ctx, x, y, selected, hover, values) {\n return this._drawShape(ctx, \"star\", 4, x, y, selected, hover, values);\n }\n\n /**\n *\n * @param {CanvasRenderingContext2D} ctx\n * @param {number} angle\n * @returns {number}\n */\n distanceToBorder(ctx, angle) {\n return this._distanceToBorder(ctx, angle);\n }\n}\n\nexport default Star;\n","\"use strict\";\n\nimport NodeBase from \"../util/NodeBase\";\n\n/**\n * A text-based replacement for the default Node shape.\n *\n * @augments NodeBase\n */\nclass Text extends NodeBase {\n /**\n * @param {object} options\n * @param {object} body\n * @param {Label} labelModule\n */\n constructor(options, body, labelModule) {\n super(options, body, labelModule);\n this._setMargins(labelModule);\n }\n\n /**\n *\n * @param {CanvasRenderingContext2D} ctx\n * @param {boolean} selected\n * @param {boolean} hover\n */\n resize(ctx, selected, hover) {\n if (this.needsRefresh(selected, hover)) {\n this.textSize = this.labelModule.getTextSize(ctx, selected, hover);\n this.width = this.textSize.width + this.margin.right + this.margin.left;\n this.height = this.textSize.height + this.margin.top + this.margin.bottom;\n this.radius = 0.5 * this.width;\n }\n }\n\n /**\n *\n * @param {CanvasRenderingContext2D} ctx\n * @param {number} x width\n * @param {number} y height\n * @param {boolean} selected\n * @param {boolean} hover\n * @param {ArrowOptions} values\n */\n draw(ctx, x, y, selected, hover, values) {\n this.resize(ctx, selected, hover);\n this.left = x - this.width / 2;\n this.top = y - this.height / 2;\n\n // draw shadow if enabled\n this.enableShadow(ctx, values);\n this.labelModule.draw(\n ctx,\n this.left + this.textSize.width / 2 + this.margin.left,\n this.top + this.textSize.height / 2 + this.margin.top,\n selected,\n hover\n );\n\n // disable shadows for other elements.\n this.disableShadow(ctx, values);\n\n this.updateBoundingBox(x, y, ctx, selected, hover);\n }\n\n /**\n *\n * @param {CanvasRenderingContext2D} ctx\n * @param {number} angle\n * @returns {number}\n */\n distanceToBorder(ctx, angle) {\n return this._distanceToBorder(ctx, angle);\n }\n}\n\nexport default Text;\n","\"use strict\";\n\nimport ShapeBase from \"../util/ShapeBase\";\n\n/**\n * A Triangle Node/Cluster shape.\n *\n * @augments ShapeBase\n */\nclass Triangle extends ShapeBase {\n /**\n * @param {object} options\n * @param {object} body\n * @param {Label} labelModule\n */\n constructor(options, body, labelModule) {\n super(options, body, labelModule);\n }\n\n /**\n *\n * @param {CanvasRenderingContext2D} ctx\n * @param {number} x\n * @param {number} y\n * @param {boolean} selected\n * @param {boolean} hover\n * @param {ArrowOptions} values\n * @returns {object} Callbacks to draw later on higher layers.\n */\n draw(ctx, x, y, selected, hover, values) {\n return this._drawShape(ctx, \"triangle\", 3, x, y, selected, hover, values);\n }\n\n /**\n *\n * @param {CanvasRenderingContext2D} ctx\n * @param {number} angle\n * @returns {number}\n */\n distanceToBorder(ctx, angle) {\n return this._distanceToBorder(ctx, angle);\n }\n}\n\nexport default Triangle;\n","\"use strict\";\n\nimport ShapeBase from \"../util/ShapeBase\";\n\n/**\n * A downward facing Triangle Node/Cluster shape.\n *\n * @augments ShapeBase\n */\nclass TriangleDown extends ShapeBase {\n /**\n * @param {object} options\n * @param {object} body\n * @param {Label} labelModule\n */\n constructor(options, body, labelModule) {\n super(options, body, labelModule);\n }\n\n /**\n *\n * @param {CanvasRenderingContext2D} ctx\n * @param {number} x\n * @param {number} y\n * @param {boolean} selected\n * @param {boolean} hover\n * @param {ArrowOptions} values\n * @returns {object} Callbacks to draw later on higher layers.\n */\n draw(ctx, x, y, selected, hover, values) {\n return this._drawShape(\n ctx,\n \"triangleDown\",\n 3,\n x,\n y,\n selected,\n hover,\n values\n );\n }\n\n /**\n *\n * @param {CanvasRenderingContext2D} ctx\n * @param {number} angle\n * @returns {number}\n */\n distanceToBorder(ctx, angle) {\n return this._distanceToBorder(ctx, angle);\n }\n}\n\nexport default TriangleDown;\n","import {\n VALIDATOR_PRINT_STYLE,\n bridgeObject,\n fillIfDefined,\n mergeOptions,\n overrideOpacity,\n parseColor,\n selectiveNotDeepExtend,\n} from \"vis-util/esnext\";\n\nimport Label from \"./shared/Label\";\nimport { choosify, pointInRect } from \"./shared/ComponentUtil\";\nimport Box from \"./nodes/shapes/Box\";\nimport Circle from \"./nodes/shapes/Circle\";\nimport CircularImage from \"./nodes/shapes/CircularImage\";\nimport CustomShape from \"./nodes/shapes/CustomShape\";\nimport Database from \"./nodes/shapes/Database\";\nimport Diamond from \"./nodes/shapes/Diamond\";\nimport Dot from \"./nodes/shapes/Dot\";\nimport Ellipse from \"./nodes/shapes/Ellipse\";\nimport Icon from \"./nodes/shapes/Icon\";\nimport Image from \"./nodes/shapes/Image\";\nimport Square from \"./nodes/shapes/Square\";\nimport Hexagon from \"./nodes/shapes/Hexagon\";\nimport Star from \"./nodes/shapes/Star\";\nimport Text from \"./nodes/shapes/Text\";\nimport Triangle from \"./nodes/shapes/Triangle\";\nimport TriangleDown from \"./nodes/shapes/TriangleDown\";\n\n/**\n * A node. A node can be connected to other nodes via one or multiple edges.\n */\nclass Node {\n /**\n *\n * @param {object} options An object containing options for the node. All\n * options are optional, except for the id.\n * {number} id Id of the node. Required\n * {string} label Text label for the node\n * {number} x Horizontal position of the node\n * {number} y Vertical position of the node\n * {string} shape Node shape\n * {string} image An image url\n * {string} title A title text, can be HTML\n * {anytype} group A group name or number\n * @param {object} body Shared state of current network instance\n * @param {Network.Images} imagelist A list with images. Only needed when the node has an image\n * @param {Groups} grouplist A list with groups. Needed for retrieving group options\n * @param {object} globalOptions Current global node options; these serve as defaults for the node instance\n * @param {object} defaultOptions Global default options for nodes; note that this is also the prototype\n * for parameter `globalOptions`.\n */\n constructor(\n options,\n body,\n imagelist,\n grouplist,\n globalOptions,\n defaultOptions\n ) {\n this.options = bridgeObject(globalOptions);\n this.globalOptions = globalOptions;\n this.defaultOptions = defaultOptions;\n this.body = body;\n\n this.edges = []; // all edges connected to this node\n\n // set defaults for the options\n this.id = undefined;\n this.imagelist = imagelist;\n this.grouplist = grouplist;\n\n // state options\n this.x = undefined;\n this.y = undefined;\n this.baseSize = this.options.size;\n this.baseFontSize = this.options.font.size;\n this.predefinedPosition = false; // used to check if initial fit should just take the range or approximate\n this.selected = false;\n this.hover = false;\n\n this.labelModule = new Label(\n this.body,\n this.options,\n false /* Not edge label */\n );\n this.setOptions(options);\n }\n\n /**\n * Attach a edge to the node\n *\n * @param {Edge} edge\n */\n attachEdge(edge) {\n if (this.edges.indexOf(edge) === -1) {\n this.edges.push(edge);\n }\n }\n\n /**\n * Detach a edge from the node\n *\n * @param {Edge} edge\n */\n detachEdge(edge) {\n const index = this.edges.indexOf(edge);\n if (index != -1) {\n this.edges.splice(index, 1);\n }\n }\n\n /**\n * Set or overwrite options for the node\n *\n * @param {object} options an object with options\n * @returns {null|boolean}\n */\n setOptions(options) {\n const currentShape = this.options.shape;\n\n if (!options) {\n return; // Note that the return value will be 'undefined'! This is OK.\n }\n\n // Save the color for later.\n // This is necessary in order to prevent local color from being overwritten by group color.\n // TODO: To prevent such workarounds the way options are handled should be rewritten from scratch.\n // This is not the only problem with current options handling.\n if (typeof options.color !== \"undefined\") {\n this._localColor = options.color;\n }\n\n // basic options\n if (options.id !== undefined) {\n this.id = options.id;\n }\n\n if (this.id === undefined) {\n throw new Error(\"Node must have an id\");\n }\n\n Node.checkMass(options, this.id);\n\n // set these options locally\n // clear x and y positions\n if (options.x !== undefined) {\n if (options.x === null) {\n this.x = undefined;\n this.predefinedPosition = false;\n } else {\n this.x = parseInt(options.x);\n this.predefinedPosition = true;\n }\n }\n if (options.y !== undefined) {\n if (options.y === null) {\n this.y = undefined;\n this.predefinedPosition = false;\n } else {\n this.y = parseInt(options.y);\n this.predefinedPosition = true;\n }\n }\n if (options.size !== undefined) {\n this.baseSize = options.size;\n }\n if (options.value !== undefined) {\n options.value = parseFloat(options.value);\n }\n\n // this transforms all shorthands into fully defined options\n Node.parseOptions(\n this.options,\n options,\n true,\n this.globalOptions,\n this.grouplist\n );\n\n const pile = [options, this.options, this.defaultOptions];\n this.chooser = choosify(\"node\", pile);\n\n this._load_images();\n this.updateLabelModule(options);\n\n // Need to set local opacity after `this.updateLabelModule(options);` because `this.updateLabelModule(options);` overrites local opacity with group opacity\n if (options.opacity !== undefined && Node.checkOpacity(options.opacity)) {\n this.options.opacity = options.opacity;\n }\n\n this.updateShape(currentShape);\n\n return options.hidden !== undefined || options.physics !== undefined;\n }\n\n /**\n * Load the images from the options, for the nodes that need them.\n *\n * Images are always loaded, even if they are not used in the current shape.\n * The user may switch to an image shape later on.\n *\n * @private\n */\n _load_images() {\n if (\n this.options.shape === \"circularImage\" ||\n this.options.shape === \"image\"\n ) {\n if (this.options.image === undefined) {\n throw new Error(\n \"Option image must be defined for node type '\" +\n this.options.shape +\n \"'\"\n );\n }\n }\n\n if (this.options.image === undefined) {\n return;\n }\n\n if (this.imagelist === undefined) {\n throw new Error(\"Internal Error: No images provided\");\n }\n\n if (typeof this.options.image === \"string\") {\n this.imageObj = this.imagelist.load(\n this.options.image,\n this.options.brokenImage,\n this.id\n );\n } else {\n if (this.options.image.unselected === undefined) {\n throw new Error(\"No unselected image provided\");\n }\n\n this.imageObj = this.imagelist.load(\n this.options.image.unselected,\n this.options.brokenImage,\n this.id\n );\n\n if (this.options.image.selected !== undefined) {\n this.imageObjAlt = this.imagelist.load(\n this.options.image.selected,\n this.options.brokenImage,\n this.id\n );\n } else {\n this.imageObjAlt = undefined;\n }\n }\n }\n\n /**\n * Check that opacity is only between 0 and 1\n *\n * @param {number} opacity\n * @returns {boolean}\n */\n static checkOpacity(opacity) {\n return 0 <= opacity && opacity <= 1;\n }\n\n /**\n * Check that origin is 'center' or 'top-left'\n *\n * @param {string} origin\n * @returns {boolean}\n */\n static checkCoordinateOrigin(origin) {\n return origin === undefined || origin === \"center\" || origin === \"top-left\";\n }\n\n /**\n * Copy group option values into the node options.\n *\n * The group options override the global node options, so the copy of group options\n * must happen *after* the global node options have been set.\n *\n * This method must also be called also if the global node options have changed and the group options did not.\n *\n * @param {object} parentOptions\n * @param {object} newOptions new values for the options, currently only passed in for check\n * @param {object} groupList\n */\n static updateGroupOptions(parentOptions, newOptions, groupList) {\n if (groupList === undefined) return; // No groups, nothing to do\n\n const group = parentOptions.group;\n\n // paranoia: the selected group is already merged into node options, check.\n if (\n newOptions !== undefined &&\n newOptions.group !== undefined &&\n group !== newOptions.group\n ) {\n throw new Error(\n \"updateGroupOptions: group values in options don't match.\"\n );\n }\n\n const hasGroup =\n typeof group === \"number\" || (typeof group === \"string\" && group != \"\");\n if (!hasGroup) return; // current node has no group, no need to merge\n\n const groupObj = groupList.get(group);\n\n if (groupObj.opacity !== undefined && newOptions.opacity === undefined) {\n if (!Node.checkOpacity(groupObj.opacity)) {\n console.error(\n \"Invalid option for node opacity. Value must be between 0 and 1, found: \" +\n groupObj.opacity\n );\n groupObj.opacity = undefined;\n }\n }\n\n // Skip any new option to avoid them being overridden by the group options.\n const skipProperties = Object.getOwnPropertyNames(newOptions).filter(\n (p) => newOptions[p] != null\n );\n // Always skip merging group font options into parent; these are required to be distinct for labels\n skipProperties.push(\"font\");\n selectiveNotDeepExtend(skipProperties, parentOptions, groupObj);\n\n // the color object needs to be completely defined.\n // Since groups can partially overwrite the colors, we parse it again, just in case.\n parentOptions.color = parseColor(parentOptions.color);\n }\n\n /**\n * This process all possible shorthands in the new options and makes sure that the parentOptions are fully defined.\n * Static so it can also be used by the handler.\n *\n * @param {object} parentOptions\n * @param {object} newOptions\n * @param {boolean} [allowDeletion=false]\n * @param {object} [globalOptions={}]\n * @param {object} [groupList]\n * @static\n */\n static parseOptions(\n parentOptions,\n newOptions,\n allowDeletion = false,\n globalOptions = {},\n groupList\n ) {\n const fields = [\"color\", \"fixed\", \"shadow\"];\n selectiveNotDeepExtend(fields, parentOptions, newOptions, allowDeletion);\n\n Node.checkMass(newOptions);\n\n if (parentOptions.opacity !== undefined) {\n if (!Node.checkOpacity(parentOptions.opacity)) {\n console.error(\n \"Invalid option for node opacity. Value must be between 0 and 1, found: \" +\n parentOptions.opacity\n );\n parentOptions.opacity = undefined;\n }\n }\n\n if (newOptions.opacity !== undefined) {\n if (!Node.checkOpacity(newOptions.opacity)) {\n console.error(\n \"Invalid option for node opacity. Value must be between 0 and 1, found: \" +\n newOptions.opacity\n );\n newOptions.opacity = undefined;\n }\n }\n\n if (\n newOptions.shapeProperties &&\n !Node.checkCoordinateOrigin(newOptions.shapeProperties.coordinateOrigin)\n ) {\n console.error(\n \"Invalid option for node coordinateOrigin, found: \" +\n newOptions.shapeProperties.coordinateOrigin\n );\n }\n\n // merge the shadow options into the parent.\n mergeOptions(parentOptions, newOptions, \"shadow\", globalOptions);\n\n // individual shape newOptions\n if (newOptions.color !== undefined && newOptions.color !== null) {\n const parsedColor = parseColor(newOptions.color);\n fillIfDefined(parentOptions.color, parsedColor);\n } else if (allowDeletion === true && newOptions.color === null) {\n parentOptions.color = bridgeObject(globalOptions.color); // set the object back to the global options\n }\n\n // handle the fixed options\n if (newOptions.fixed !== undefined && newOptions.fixed !== null) {\n if (typeof newOptions.fixed === \"boolean\") {\n parentOptions.fixed.x = newOptions.fixed;\n parentOptions.fixed.y = newOptions.fixed;\n } else {\n if (\n newOptions.fixed.x !== undefined &&\n typeof newOptions.fixed.x === \"boolean\"\n ) {\n parentOptions.fixed.x = newOptions.fixed.x;\n }\n if (\n newOptions.fixed.y !== undefined &&\n typeof newOptions.fixed.y === \"boolean\"\n ) {\n parentOptions.fixed.y = newOptions.fixed.y;\n }\n }\n }\n\n if (allowDeletion === true && newOptions.font === null) {\n parentOptions.font = bridgeObject(globalOptions.font); // set the object back to the global options\n }\n\n Node.updateGroupOptions(parentOptions, newOptions, groupList);\n\n // handle the scaling options, specifically the label part\n if (newOptions.scaling !== undefined) {\n mergeOptions(\n parentOptions.scaling,\n newOptions.scaling,\n \"label\",\n globalOptions.scaling\n );\n }\n }\n\n /**\n *\n * @returns {{color: *, borderWidth: *, borderColor: *, size: *, borderDashes: (boolean|Array|allOptions.nodes.shapeProperties.borderDashes|{boolean, array}), borderRadius: (number|allOptions.nodes.shapeProperties.borderRadius|{number}|Array), shadow: *, shadowColor: *, shadowSize: *, shadowX: *, shadowY: *}}\n */\n getFormattingValues() {\n const values = {\n color: this.options.color.background,\n opacity: this.options.opacity,\n borderWidth: this.options.borderWidth,\n borderColor: this.options.color.border,\n size: this.options.size,\n borderDashes: this.options.shapeProperties.borderDashes,\n borderRadius: this.options.shapeProperties.borderRadius,\n shadow: this.options.shadow.enabled,\n shadowColor: this.options.shadow.color,\n shadowSize: this.options.shadow.size,\n shadowX: this.options.shadow.x,\n shadowY: this.options.shadow.y,\n };\n if (this.selected || this.hover) {\n if (this.chooser === true) {\n if (this.selected) {\n if (this.options.borderWidthSelected != null) {\n values.borderWidth = this.options.borderWidthSelected;\n } else {\n values.borderWidth *= 2;\n }\n values.color = this.options.color.highlight.background;\n values.borderColor = this.options.color.highlight.border;\n values.shadow = this.options.shadow.enabled;\n } else if (this.hover) {\n values.color = this.options.color.hover.background;\n values.borderColor = this.options.color.hover.border;\n values.shadow = this.options.shadow.enabled;\n }\n } else if (typeof this.chooser === \"function\") {\n this.chooser(values, this.options.id, this.selected, this.hover);\n if (values.shadow === false) {\n if (\n values.shadowColor !== this.options.shadow.color ||\n values.shadowSize !== this.options.shadow.size ||\n values.shadowX !== this.options.shadow.x ||\n values.shadowY !== this.options.shadow.y\n ) {\n values.shadow = true;\n }\n }\n }\n } else {\n values.shadow = this.options.shadow.enabled;\n }\n if (this.options.opacity !== undefined) {\n const opacity = this.options.opacity;\n values.borderColor = overrideOpacity(values.borderColor, opacity);\n values.color = overrideOpacity(values.color, opacity);\n values.shadowColor = overrideOpacity(values.shadowColor, opacity);\n }\n return values;\n }\n\n /**\n *\n * @param {object} options\n */\n updateLabelModule(options) {\n if (this.options.label === undefined || this.options.label === null) {\n this.options.label = \"\";\n }\n\n Node.updateGroupOptions(\n this.options,\n {\n ...options,\n color: (options && options.color) || this._localColor || undefined,\n },\n this.grouplist\n );\n\n //\n // Note:The prototype chain for this.options is:\n //\n // this.options -> NodesHandler.options -> NodesHandler.defaultOptions\n // (also: this.globalOptions)\n //\n // Note that the prototypes are mentioned explicitly in the pile list below;\n // WE DON'T WANT THE ORDER OF THE PROTOTYPES!!!! At least, not for font handling of labels.\n // This is a good indication that the prototype usage of options is deficient.\n //\n const currentGroup = this.grouplist.get(this.options.group, false);\n const pile = [\n options, // new options\n this.options, // current node options, see comment above for prototype\n currentGroup, // group options, if any\n this.globalOptions, // Currently set global node options\n this.defaultOptions, // Default global node options\n ];\n this.labelModule.update(this.options, pile);\n\n if (this.labelModule.baseSize !== undefined) {\n this.baseFontSize = this.labelModule.baseSize;\n }\n }\n\n /**\n *\n * @param {string} currentShape\n */\n updateShape(currentShape) {\n if (currentShape === this.options.shape && this.shape) {\n this.shape.setOptions(this.options, this.imageObj, this.imageObjAlt);\n } else {\n // choose draw method depending on the shape\n switch (this.options.shape) {\n case \"box\":\n this.shape = new Box(this.options, this.body, this.labelModule);\n break;\n case \"circle\":\n this.shape = new Circle(this.options, this.body, this.labelModule);\n break;\n case \"circularImage\":\n this.shape = new CircularImage(\n this.options,\n this.body,\n this.labelModule,\n this.imageObj,\n this.imageObjAlt\n );\n break;\n case \"custom\":\n this.shape = new CustomShape(\n this.options,\n this.body,\n this.labelModule,\n this.options.ctxRenderer\n );\n break;\n case \"database\":\n this.shape = new Database(this.options, this.body, this.labelModule);\n break;\n case \"diamond\":\n this.shape = new Diamond(this.options, this.body, this.labelModule);\n break;\n case \"dot\":\n this.shape = new Dot(this.options, this.body, this.labelModule);\n break;\n case \"ellipse\":\n this.shape = new Ellipse(this.options, this.body, this.labelModule);\n break;\n case \"icon\":\n this.shape = new Icon(this.options, this.body, this.labelModule);\n break;\n case \"image\":\n this.shape = new Image(\n this.options,\n this.body,\n this.labelModule,\n this.imageObj,\n this.imageObjAlt\n );\n break;\n case \"square\":\n this.shape = new Square(this.options, this.body, this.labelModule);\n break;\n case \"hexagon\":\n this.shape = new Hexagon(this.options, this.body, this.labelModule);\n break;\n case \"star\":\n this.shape = new Star(this.options, this.body, this.labelModule);\n break;\n case \"text\":\n this.shape = new Text(this.options, this.body, this.labelModule);\n break;\n case \"triangle\":\n this.shape = new Triangle(this.options, this.body, this.labelModule);\n break;\n case \"triangleDown\":\n this.shape = new TriangleDown(\n this.options,\n this.body,\n this.labelModule\n );\n break;\n default:\n this.shape = new Ellipse(this.options, this.body, this.labelModule);\n break;\n }\n }\n this.needsRefresh();\n }\n\n /**\n * select this node\n */\n select() {\n this.selected = true;\n this.needsRefresh();\n }\n\n /**\n * unselect this node\n */\n unselect() {\n this.selected = false;\n this.needsRefresh();\n }\n\n /**\n * Reset the calculated size of the node, forces it to recalculate its size\n */\n needsRefresh() {\n this.shape.refreshNeeded = true;\n }\n\n /**\n * get the title of this node.\n *\n * @returns {string} title The title of the node, or undefined when no title\n * has been set.\n */\n getTitle() {\n return this.options.title;\n }\n\n /**\n * Calculate the distance to the border of the Node\n *\n * @param {CanvasRenderingContext2D} ctx\n * @param {number} angle Angle in radians\n * @returns {number} distance Distance to the border in pixels\n */\n distanceToBorder(ctx, angle) {\n return this.shape.distanceToBorder(ctx, angle);\n }\n\n /**\n * Check if this node has a fixed x and y position\n *\n * @returns {boolean} true if fixed, false if not\n */\n isFixed() {\n return this.options.fixed.x && this.options.fixed.y;\n }\n\n /**\n * check if this node is selecte\n *\n * @returns {boolean} selected True if node is selected, else false\n */\n isSelected() {\n return this.selected;\n }\n\n /**\n * Retrieve the value of the node. Can be undefined\n *\n * @returns {number} value\n */\n getValue() {\n return this.options.value;\n }\n\n /**\n * Get the current dimensions of the label\n *\n * @returns {rect}\n */\n getLabelSize() {\n return this.labelModule.size();\n }\n\n /**\n * Adjust the value range of the node. The node will adjust it's size\n * based on its value.\n *\n * @param {number} min\n * @param {number} max\n * @param {number} total\n */\n setValueRange(min, max, total) {\n if (this.options.value !== undefined) {\n const scale = this.options.scaling.customScalingFunction(\n min,\n max,\n total,\n this.options.value\n );\n const sizeDiff = this.options.scaling.max - this.options.scaling.min;\n if (this.options.scaling.label.enabled === true) {\n const fontDiff =\n this.options.scaling.label.max - this.options.scaling.label.min;\n this.options.font.size =\n this.options.scaling.label.min + scale * fontDiff;\n }\n this.options.size = this.options.scaling.min + scale * sizeDiff;\n } else {\n this.options.size = this.baseSize;\n this.options.font.size = this.baseFontSize;\n }\n\n this.updateLabelModule();\n }\n\n /**\n * Draw this node in the given canvas\n * The 2d context of a HTML canvas can be retrieved by canvas.getContext(\"2d\");\n *\n * @param {CanvasRenderingContext2D} ctx\n * @returns {object} Callbacks to draw later on higher layers.\n */\n draw(ctx) {\n const values = this.getFormattingValues();\n return (\n this.shape.draw(ctx, this.x, this.y, this.selected, this.hover, values) ||\n {}\n );\n }\n\n /**\n * Update the bounding box of the shape\n *\n * @param {CanvasRenderingContext2D} ctx\n */\n updateBoundingBox(ctx) {\n this.shape.updateBoundingBox(this.x, this.y, ctx);\n }\n\n /**\n * Recalculate the size of this node in the given canvas\n * The 2d context of a HTML canvas can be retrieved by canvas.getContext(\"2d\");\n *\n * @param {CanvasRenderingContext2D} ctx\n */\n resize(ctx) {\n const values = this.getFormattingValues();\n this.shape.resize(ctx, this.selected, this.hover, values);\n }\n\n /**\n * Determine all visual elements of this node instance, in which the given\n * point falls within the bounding shape.\n *\n * @param {point} point\n * @returns {Array.} list with the items which are on the point\n */\n getItemsOnPoint(point) {\n const ret = [];\n\n if (this.labelModule.visible()) {\n if (pointInRect(this.labelModule.getSize(), point)) {\n ret.push({ nodeId: this.id, labelId: 0 });\n }\n }\n\n if (pointInRect(this.shape.boundingBox, point)) {\n ret.push({ nodeId: this.id });\n }\n\n return ret;\n }\n\n /**\n * Check if this object is overlapping with the provided object\n *\n * @param {object} obj an object with parameters left, top, right, bottom\n * @returns {boolean} True if location is located on node\n */\n isOverlappingWith(obj) {\n return (\n this.shape.left < obj.right &&\n this.shape.left + this.shape.width > obj.left &&\n this.shape.top < obj.bottom &&\n this.shape.top + this.shape.height > obj.top\n );\n }\n\n /**\n * Check if this object is overlapping with the provided object\n *\n * @param {object} obj an object with parameters left, top, right, bottom\n * @returns {boolean} True if location is located on node\n */\n isBoundingBoxOverlappingWith(obj) {\n return (\n this.shape.boundingBox.left < obj.right &&\n this.shape.boundingBox.right > obj.left &&\n this.shape.boundingBox.top < obj.bottom &&\n this.shape.boundingBox.bottom > obj.top\n );\n }\n\n /**\n * Check valid values for mass\n *\n * The mass may not be negative or zero. If it is, reset to 1\n *\n * @param {object} options\n * @param {Node.id} id\n * @static\n */\n static checkMass(options, id) {\n if (options.mass !== undefined && options.mass <= 0) {\n let strId = \"\";\n if (id !== undefined) {\n strId = \" in node id: \" + id;\n }\n console.error(\n \"%cNegative or zero mass disallowed\" + strId + \", setting mass to 1.\",\n VALIDATOR_PRINT_STYLE\n );\n options.mass = 1;\n }\n }\n}\n\nexport default Node;\n","import { bridgeObject, forEach } from \"vis-util/esnext\";\nimport { DataSet, isDataViewLike } from \"vis-data/esnext\";\nimport Node from \"./components/Node\";\n\n/**\n * Handler for Nodes\n */\nclass NodesHandler {\n /**\n * @param {object} body\n * @param {Images} images\n * @param {Array.} groups\n * @param {LayoutEngine} layoutEngine\n */\n constructor(body, images, groups, layoutEngine) {\n this.body = body;\n this.images = images;\n this.groups = groups;\n this.layoutEngine = layoutEngine;\n\n // create the node API in the body container\n this.body.functions.createNode = this.create.bind(this);\n\n this.nodesListeners = {\n add: (event, params) => {\n this.add(params.items);\n },\n update: (event, params) => {\n this.update(params.items, params.data, params.oldData);\n },\n remove: (event, params) => {\n this.remove(params.items);\n },\n };\n\n this.defaultOptions = {\n borderWidth: 1,\n borderWidthSelected: undefined,\n brokenImage: undefined,\n color: {\n border: \"#2B7CE9\",\n background: \"#97C2FC\",\n highlight: {\n border: \"#2B7CE9\",\n background: \"#D2E5FF\",\n },\n hover: {\n border: \"#2B7CE9\",\n background: \"#D2E5FF\",\n },\n },\n opacity: undefined, // number between 0 and 1\n fixed: {\n x: false,\n y: false,\n },\n font: {\n color: \"#343434\",\n size: 14, // px\n face: \"arial\",\n background: \"none\",\n strokeWidth: 0, // px\n strokeColor: \"#ffffff\",\n align: \"center\",\n vadjust: 0,\n multi: false,\n bold: {\n mod: \"bold\",\n },\n boldital: {\n mod: \"bold italic\",\n },\n ital: {\n mod: \"italic\",\n },\n mono: {\n mod: \"\",\n size: 15, // px\n face: \"monospace\",\n vadjust: 2,\n },\n },\n group: undefined,\n hidden: false,\n icon: {\n face: \"FontAwesome\", //'FontAwesome',\n code: undefined, //'\\uf007',\n size: 50, //50,\n color: \"#2B7CE9\", //'#aa00ff'\n },\n image: undefined, // --> URL\n imagePadding: {\n // only for image shape\n top: 0,\n right: 0,\n bottom: 0,\n left: 0,\n },\n label: undefined,\n labelHighlightBold: true,\n level: undefined,\n margin: {\n top: 5,\n right: 5,\n bottom: 5,\n left: 5,\n },\n mass: 1,\n physics: true,\n scaling: {\n min: 10,\n max: 30,\n label: {\n enabled: false,\n min: 14,\n max: 30,\n maxVisible: 30,\n drawThreshold: 5,\n },\n customScalingFunction: function (min, max, total, value) {\n if (max === min) {\n return 0.5;\n } else {\n const scale = 1 / (max - min);\n return Math.max(0, (value - min) * scale);\n }\n },\n },\n shadow: {\n enabled: false,\n color: \"rgba(0,0,0,0.5)\",\n size: 10,\n x: 5,\n y: 5,\n },\n shape: \"ellipse\",\n shapeProperties: {\n borderDashes: false, // only for borders\n borderRadius: 6, // only for box shape\n interpolation: true, // only for image and circularImage shapes\n useImageSize: false, // only for image and circularImage shapes\n useBorderWithImage: false, // only for image shape\n coordinateOrigin: \"center\", // only for image and circularImage shapes\n },\n size: 25,\n title: undefined,\n value: undefined,\n x: undefined,\n y: undefined,\n };\n\n // Protect from idiocy\n if (this.defaultOptions.mass <= 0) {\n throw \"Internal error: mass in defaultOptions of NodesHandler may not be zero or negative\";\n }\n\n this.options = bridgeObject(this.defaultOptions);\n\n this.bindEventListeners();\n }\n\n /**\n * Binds event listeners\n */\n bindEventListeners() {\n // refresh the nodes. Used when reverting from hierarchical layout\n this.body.emitter.on(\"refreshNodes\", this.refresh.bind(this));\n this.body.emitter.on(\"refresh\", this.refresh.bind(this));\n this.body.emitter.on(\"destroy\", () => {\n forEach(this.nodesListeners, (callback, event) => {\n if (this.body.data.nodes) this.body.data.nodes.off(event, callback);\n });\n delete this.body.functions.createNode;\n delete this.nodesListeners.add;\n delete this.nodesListeners.update;\n delete this.nodesListeners.remove;\n delete this.nodesListeners;\n });\n }\n\n /**\n *\n * @param {object} options\n */\n setOptions(options) {\n if (options !== undefined) {\n Node.parseOptions(this.options, options);\n\n // Need to set opacity here because Node.parseOptions is also used for groups,\n // if you set opacity in Node.parseOptions it overwrites group opacity.\n if (options.opacity !== undefined) {\n if (\n Number.isNaN(options.opacity) ||\n !Number.isFinite(options.opacity) ||\n options.opacity < 0 ||\n options.opacity > 1\n ) {\n console.error(\n \"Invalid option for node opacity. Value must be between 0 and 1, found: \" +\n options.opacity\n );\n } else {\n this.options.opacity = options.opacity;\n }\n }\n\n // update the shape in all nodes\n if (options.shape !== undefined) {\n for (const nodeId in this.body.nodes) {\n if (Object.prototype.hasOwnProperty.call(this.body.nodes, nodeId)) {\n this.body.nodes[nodeId].updateShape();\n }\n }\n }\n\n // Update the labels of nodes if any relevant options changed.\n if (\n typeof options.font !== \"undefined\" ||\n typeof options.widthConstraint !== \"undefined\" ||\n typeof options.heightConstraint !== \"undefined\"\n ) {\n for (const nodeId of Object.keys(this.body.nodes)) {\n this.body.nodes[nodeId].updateLabelModule();\n this.body.nodes[nodeId].needsRefresh();\n }\n }\n\n // update the shape size in all nodes\n if (options.size !== undefined) {\n for (const nodeId in this.body.nodes) {\n if (Object.prototype.hasOwnProperty.call(this.body.nodes, nodeId)) {\n this.body.nodes[nodeId].needsRefresh();\n }\n }\n }\n\n // update the state of the variables if needed\n if (options.hidden !== undefined || options.physics !== undefined) {\n this.body.emitter.emit(\"_dataChanged\");\n }\n }\n }\n\n /**\n * Set a data set with nodes for the network\n *\n * @param {Array | DataSet | DataView} nodes The data containing the nodes.\n * @param {boolean} [doNotEmit=false] - Suppress data changed event.\n * @private\n */\n setData(nodes, doNotEmit = false) {\n const oldNodesData = this.body.data.nodes;\n\n if (isDataViewLike(\"id\", nodes)) {\n this.body.data.nodes = nodes;\n } else if (Array.isArray(nodes)) {\n this.body.data.nodes = new DataSet();\n this.body.data.nodes.add(nodes);\n } else if (!nodes) {\n this.body.data.nodes = new DataSet();\n } else {\n throw new TypeError(\"Array or DataSet expected\");\n }\n\n if (oldNodesData) {\n // unsubscribe from old dataset\n forEach(this.nodesListeners, function (callback, event) {\n oldNodesData.off(event, callback);\n });\n }\n\n // remove drawn nodes\n this.body.nodes = {};\n\n if (this.body.data.nodes) {\n // subscribe to new dataset\n const me = this;\n forEach(this.nodesListeners, function (callback, event) {\n me.body.data.nodes.on(event, callback);\n });\n\n // draw all new nodes\n const ids = this.body.data.nodes.getIds();\n this.add(ids, true);\n }\n\n if (doNotEmit === false) {\n this.body.emitter.emit(\"_dataChanged\");\n }\n }\n\n /**\n * Add nodes\n *\n * @param {number[] | string[]} ids\n * @param {boolean} [doNotEmit=false]\n * @private\n */\n add(ids, doNotEmit = false) {\n let id;\n const newNodes = [];\n for (let i = 0; i < ids.length; i++) {\n id = ids[i];\n const properties = this.body.data.nodes.get(id);\n const node = this.create(properties);\n newNodes.push(node);\n this.body.nodes[id] = node; // note: this may replace an existing node\n }\n\n this.layoutEngine.positionInitially(newNodes);\n\n if (doNotEmit === false) {\n this.body.emitter.emit(\"_dataChanged\");\n }\n }\n\n /**\n * Update existing nodes, or create them when not yet existing\n *\n * @param {number[] | string[]} ids id's of changed nodes\n * @param {Array} changedData array with changed data\n * @param {Array|undefined} oldData optional; array with previous data\n * @private\n */\n update(ids, changedData, oldData) {\n const nodes = this.body.nodes;\n let dataChanged = false;\n for (let i = 0; i < ids.length; i++) {\n const id = ids[i];\n let node = nodes[id];\n const data = changedData[i];\n if (node !== undefined) {\n // update node\n if (node.setOptions(data)) {\n dataChanged = true;\n }\n } else {\n dataChanged = true;\n // create node\n node = this.create(data);\n nodes[id] = node;\n }\n }\n\n if (!dataChanged && oldData !== undefined) {\n // Check for any changes which should trigger a layout recalculation\n // For now, this is just 'level' for hierarchical layout\n // Assumption: old and new data arranged in same order; at time of writing, this holds.\n dataChanged = changedData.some(function (newValue, index) {\n const oldValue = oldData[index];\n return oldValue && oldValue.level !== newValue.level;\n });\n }\n\n if (dataChanged === true) {\n this.body.emitter.emit(\"_dataChanged\");\n } else {\n this.body.emitter.emit(\"_dataUpdated\");\n }\n }\n\n /**\n * Remove existing nodes. If nodes do not exist, the method will just ignore it.\n *\n * @param {number[] | string[]} ids\n * @private\n */\n remove(ids) {\n const nodes = this.body.nodes;\n\n for (let i = 0; i < ids.length; i++) {\n const id = ids[i];\n delete nodes[id];\n }\n\n this.body.emitter.emit(\"_dataChanged\");\n }\n\n /**\n * create a node\n *\n * @param {object} properties\n * @param {class} [constructorClass=Node.default]\n * @returns {*}\n */\n create(properties, constructorClass = Node) {\n return new constructorClass(\n properties,\n this.body,\n this.images,\n this.groups,\n this.options,\n this.defaultOptions\n );\n }\n\n /**\n *\n * @param {boolean} [clearPositions=false]\n */\n refresh(clearPositions = false) {\n forEach(this.body.nodes, (node, nodeId) => {\n const data = this.body.data.nodes.get(nodeId);\n if (data !== undefined) {\n if (clearPositions === true) {\n node.setOptions({ x: null, y: null });\n }\n node.setOptions({ fixed: false });\n node.setOptions(data);\n }\n });\n }\n\n /**\n * Returns the positions of the nodes.\n *\n * @param {Array. | string} [ids] --> optional, can be array of nodeIds, can be string\n * @returns {{}}\n */\n getPositions(ids) {\n const dataArray = {};\n if (ids !== undefined) {\n if (Array.isArray(ids) === true) {\n for (let i = 0; i < ids.length; i++) {\n if (this.body.nodes[ids[i]] !== undefined) {\n const node = this.body.nodes[ids[i]];\n dataArray[ids[i]] = {\n x: Math.round(node.x),\n y: Math.round(node.y),\n };\n }\n }\n } else {\n if (this.body.nodes[ids] !== undefined) {\n const node = this.body.nodes[ids];\n dataArray[ids] = { x: Math.round(node.x), y: Math.round(node.y) };\n }\n }\n } else {\n for (let i = 0; i < this.body.nodeIndices.length; i++) {\n const node = this.body.nodes[this.body.nodeIndices[i]];\n dataArray[this.body.nodeIndices[i]] = {\n x: Math.round(node.x),\n y: Math.round(node.y),\n };\n }\n }\n return dataArray;\n }\n\n /**\n * Retrieves the x y position of a specific id.\n *\n * @param {string} id The id to retrieve.\n * @throws {TypeError} If no id is included.\n * @throws {ReferenceError} If an invalid id is provided.\n * @returns {{ x: number, y: number }} Returns X, Y canvas position of the node with given id.\n */\n getPosition(id) {\n if (id == undefined) {\n throw new TypeError(\"No id was specified for getPosition method.\");\n } else if (this.body.nodes[id] == undefined) {\n throw new ReferenceError(\n `NodeId provided for getPosition does not exist. Provided: ${id}`\n );\n } else {\n return {\n x: Math.round(this.body.nodes[id].x),\n y: Math.round(this.body.nodes[id].y),\n };\n }\n }\n\n /**\n * Load the XY positions of the nodes into the dataset.\n */\n storePositions() {\n // todo: add support for clusters and hierarchical.\n const dataArray = [];\n const dataset = this.body.data.nodes.getDataSet();\n\n for (const dsNode of dataset.get()) {\n const id = dsNode.id;\n const bodyNode = this.body.nodes[id];\n const x = Math.round(bodyNode.x);\n const y = Math.round(bodyNode.y);\n\n if (dsNode.x !== x || dsNode.y !== y) {\n dataArray.push({ id, x, y });\n }\n }\n\n dataset.update(dataArray);\n }\n\n /**\n * get the bounding box of a node.\n *\n * @param {Node.id} nodeId\n * @returns {j|*}\n */\n getBoundingBox(nodeId) {\n if (this.body.nodes[nodeId] !== undefined) {\n return this.body.nodes[nodeId].shape.boundingBox;\n }\n }\n\n /**\n * Get the Ids of nodes connected to this node.\n *\n * @param {Node.id} nodeId\n * @param {'to'|'from'|undefined} direction values 'from' and 'to' select respectively parent and child nodes only.\n * Any other value returns both parent and child nodes.\n * @returns {Array}\n */\n getConnectedNodes(nodeId, direction) {\n const nodeList = [];\n if (this.body.nodes[nodeId] !== undefined) {\n const node = this.body.nodes[nodeId];\n const nodeObj = {}; // used to quickly check if node already exists\n for (let i = 0; i < node.edges.length; i++) {\n const edge = node.edges[i];\n if (direction !== \"to\" && edge.toId == node.id) {\n // these are double equals since ids can be numeric or string\n if (nodeObj[edge.fromId] === undefined) {\n nodeList.push(edge.fromId);\n nodeObj[edge.fromId] = true;\n }\n } else if (direction !== \"from\" && edge.fromId == node.id) {\n // these are double equals since ids can be numeric or string\n if (nodeObj[edge.toId] === undefined) {\n nodeList.push(edge.toId);\n nodeObj[edge.toId] = true;\n }\n }\n }\n }\n return nodeList;\n }\n\n /**\n * Get the ids of the edges connected to this node.\n *\n * @param {Node.id} nodeId\n * @returns {*}\n */\n getConnectedEdges(nodeId) {\n const edgeList = [];\n if (this.body.nodes[nodeId] !== undefined) {\n const node = this.body.nodes[nodeId];\n for (let i = 0; i < node.edges.length; i++) {\n edgeList.push(node.edges[i].id);\n }\n } else {\n console.error(\n \"NodeId provided for getConnectedEdges does not exist. Provided: \",\n nodeId\n );\n }\n return edgeList;\n }\n\n /**\n * Move a node.\n *\n * @param {Node.id} nodeId\n * @param {number} x\n * @param {number} y\n */\n moveNode(nodeId, x, y) {\n if (this.body.nodes[nodeId] !== undefined) {\n this.body.nodes[nodeId].x = Number(x);\n this.body.nodes[nodeId].y = Number(y);\n setTimeout(() => {\n this.body.emitter.emit(\"startSimulation\");\n }, 0);\n } else {\n console.error(\n \"Node id supplied to moveNode does not exist. Provided: \",\n nodeId\n );\n }\n }\n}\n\nexport default NodesHandler;\n","'use strict';\nvar hasOwn = require('../internals/has-own-property');\n\nmodule.exports = function (descriptor) {\n return descriptor !== undefined && (hasOwn(descriptor, 'value') || hasOwn(descriptor, 'writable'));\n};\n","'use strict';\nvar $ = require('../internals/export');\nvar call = require('../internals/function-call');\nvar isObject = require('../internals/is-object');\nvar anObject = require('../internals/an-object');\nvar isDataDescriptor = require('../internals/is-data-descriptor');\nvar getOwnPropertyDescriptorModule = require('../internals/object-get-own-property-descriptor');\nvar getPrototypeOf = require('../internals/object-get-prototype-of');\n\n// `Reflect.get` method\n// https://tc39.es/ecma262/#sec-reflect.get\nfunction get(target, propertyKey /* , receiver */) {\n var receiver = arguments.length < 3 ? target : arguments[2];\n var descriptor, prototype;\n if (anObject(target) === receiver) return target[propertyKey];\n descriptor = getOwnPropertyDescriptorModule.f(target, propertyKey);\n if (descriptor) return isDataDescriptor(descriptor)\n ? descriptor.value\n : descriptor.get === undefined ? undefined : call(descriptor.get, receiver);\n if (isObject(prototype = getPrototypeOf(target))) return get(prototype, propertyKey, receiver);\n}\n\n$({ target: 'Reflect', stat: true }, {\n get: get\n});\n","'use strict';\nrequire('../../modules/es.reflect.get');\nvar path = require('../../internals/path');\n\nmodule.exports = path.Reflect.get;\n","'use strict';\nvar parent = require('../../stable/object/get-own-property-descriptor');\n\nmodule.exports = parent;\n","import _Reflect$get from \"core-js-pure/features/reflect/get.js\";\nimport _bindInstanceProperty from \"core-js-pure/features/instance/bind.js\";\nimport _Object$getOwnPropertyDescriptor from \"core-js-pure/features/object/get-own-property-descriptor.js\";\nimport superPropBase from \"./superPropBase.js\";\nexport default function _get() {\n if (typeof Reflect !== \"undefined\" && _Reflect$get) {\n var _context;\n _get = _bindInstanceProperty(_context = _Reflect$get).call(_context);\n } else {\n _get = function _get(target, property, receiver) {\n var base = superPropBase(target, property);\n if (!base) return;\n var desc = _Object$getOwnPropertyDescriptor(base, property);\n if (desc.get) {\n return desc.get.call(arguments.length < 3 ? target : receiver);\n }\n return desc.value;\n };\n }\n return _get.apply(this, arguments);\n}","import getPrototypeOf from \"./getPrototypeOf.js\";\nexport default function _superPropBase(object, property) {\n while (!Object.prototype.hasOwnProperty.call(object, property)) {\n object = getPrototypeOf(object);\n if (object === null) break;\n }\n return object;\n}","'use strict';\nvar $ = require('../internals/export');\n\n// eslint-disable-next-line es/no-math-hypot -- required for testing\nvar $hypot = Math.hypot;\nvar abs = Math.abs;\nvar sqrt = Math.sqrt;\n\n// Chrome 77 bug\n// https://bugs.chromium.org/p/v8/issues/detail?id=9546\nvar FORCED = !!$hypot && $hypot(Infinity, NaN) !== Infinity;\n\n// `Math.hypot` method\n// https://tc39.es/ecma262/#sec-math.hypot\n$({ target: 'Math', stat: true, arity: 2, forced: FORCED }, {\n // eslint-disable-next-line no-unused-vars -- required for `.length`\n hypot: function hypot(value1, value2) {\n var sum = 0;\n var i = 0;\n var aLen = arguments.length;\n var larg = 0;\n var arg, div;\n while (i < aLen) {\n arg = abs(arguments[i++]);\n if (larg < arg) {\n div = larg / arg;\n sum = sum * div * div + 1;\n larg = arg;\n } else if (arg > 0) {\n div = arg / larg;\n sum += div * div;\n } else sum += arg;\n }\n return larg === Infinity ? Infinity : larg * sqrt(sum);\n }\n});\n","'use strict';\nrequire('../../modules/es.math.hypot');\nvar path = require('../../internals/path');\n\nmodule.exports = path.Math.hypot;\n","/**\n * ============================================================================\n * Location of all the endpoint drawing routines.\n *\n * Every endpoint has its own drawing routine, which contains an endpoint definition.\n *\n * The endpoint definitions must have the following properies:\n *\n * - (0,0) is the connection point to the node it attaches to\n * - The endpoints are orientated to the positive x-direction\n * - The length of the endpoint is at most 1\n *\n * As long as the endpoint classes remain simple and not too numerous, they will\n * be contained within this module.\n * All classes here except `EndPoints` should be considered as private to this module.\n *\n * -----------------------------------------------------------------------------\n * ### Further Actions\n *\n * After adding a new endpoint here, you also need to do the following things:\n *\n * - Add the new endpoint name to `network/options.js` in array `endPoints`.\n * - Add the new endpoint name to the documentation.\n * Scan for 'arrows.to.type` and add it to the description.\n * - Add the endpoint to the examples. At the very least, add it to example\n * `edgeStyles/arrowTypes`.\n * =============================================================================\n */\n\nimport { ArrowData, Point } from \"./types\";\nimport { drawCircle } from \"./shapes\";\n\n/**\n * Common methods for endpoints\n *\n * @class\n */\nclass EndPoint {\n /**\n * Apply transformation on points for display.\n *\n * The following is done:\n * - rotate by the specified angle\n * - multiply the (normalized) coordinates by the passed length\n * - offset by the target coordinates\n *\n * @param points - The point(s) to be transformed.\n * @param arrowData - The data determining the result of the transformation.\n */\n public static transform(points: Point | Point[], arrowData: ArrowData): void {\n if (!Array.isArray(points)) {\n points = [points];\n }\n\n const x = arrowData.point.x;\n const y = arrowData.point.y;\n const angle = arrowData.angle;\n const length = arrowData.length;\n\n for (let i = 0; i < points.length; ++i) {\n const p = points[i];\n const xt = p.x * Math.cos(angle) - p.y * Math.sin(angle);\n const yt = p.x * Math.sin(angle) + p.y * Math.cos(angle);\n\n p.x = x + length * xt;\n p.y = y + length * yt;\n }\n }\n\n /**\n * Draw a closed path using the given real coordinates.\n *\n * @param ctx - The path will be rendered into this context.\n * @param points - The points of the path.\n */\n public static drawPath(ctx: CanvasRenderingContext2D, points: Point[]): void {\n ctx.beginPath();\n ctx.moveTo(points[0].x, points[0].y);\n for (let i = 1; i < points.length; ++i) {\n ctx.lineTo(points[i].x, points[i].y);\n }\n ctx.closePath();\n }\n}\n\n/**\n * Drawing methods for the arrow endpoint.\n */\nclass Image extends EndPoint {\n /**\n * Draw this shape at the end of a line.\n *\n * @param ctx - The shape will be rendered into this context.\n * @param arrowData - The data determining the shape.\n * @returns False as there is no way to fill an image.\n */\n public static draw(\n ctx: CanvasRenderingContext2D,\n arrowData: ArrowData\n ): false {\n if (arrowData.image) {\n ctx.save();\n\n ctx.translate(arrowData.point.x, arrowData.point.y);\n ctx.rotate(Math.PI / 2 + arrowData.angle);\n\n const width =\n arrowData.imageWidth != null\n ? arrowData.imageWidth\n : arrowData.image.width;\n const height =\n arrowData.imageHeight != null\n ? arrowData.imageHeight\n : arrowData.image.height;\n\n arrowData.image.drawImageAtPosition(\n ctx,\n 1, // scale\n -width / 2, // x\n 0, // y\n width,\n height\n );\n\n ctx.restore();\n }\n\n return false;\n }\n}\n\n/**\n * Drawing methods for the arrow endpoint.\n */\nclass Arrow extends EndPoint {\n /**\n * Draw this shape at the end of a line.\n *\n * @param ctx - The shape will be rendered into this context.\n * @param arrowData - The data determining the shape.\n * @returns True because ctx.fill() can be used to fill the arrow.\n */\n public static draw(\n ctx: CanvasRenderingContext2D,\n arrowData: ArrowData\n ): true {\n // Normalized points of closed path, in the order that they should be drawn.\n // (0, 0) is the attachment point, and the point around which should be rotated\n const points = [\n { x: 0, y: 0 },\n { x: -1, y: 0.3 },\n { x: -0.9, y: 0 },\n { x: -1, y: -0.3 },\n ];\n\n EndPoint.transform(points, arrowData);\n EndPoint.drawPath(ctx, points);\n\n return true;\n }\n}\n\n/**\n * Drawing methods for the crow endpoint.\n */\nclass Crow {\n /**\n * Draw this shape at the end of a line.\n *\n * @param ctx - The shape will be rendered into this context.\n * @param arrowData - The data determining the shape.\n * @returns True because ctx.fill() can be used to fill the arrow.\n */\n public static draw(\n ctx: CanvasRenderingContext2D,\n arrowData: ArrowData\n ): true {\n // Normalized points of closed path, in the order that they should be drawn.\n // (0, 0) is the attachment point, and the point around which should be rotated\n const points = [\n { x: -1, y: 0 },\n { x: 0, y: 0.3 },\n { x: -0.4, y: 0 },\n { x: 0, y: -0.3 },\n ];\n\n EndPoint.transform(points, arrowData);\n EndPoint.drawPath(ctx, points);\n\n return true;\n }\n}\n\n/**\n * Drawing methods for the curve endpoint.\n */\nclass Curve {\n /**\n * Draw this shape at the end of a line.\n *\n * @param ctx - The shape will be rendered into this context.\n * @param arrowData - The data determining the shape.\n * @returns True because ctx.fill() can be used to fill the arrow.\n */\n public static draw(\n ctx: CanvasRenderingContext2D,\n arrowData: ArrowData\n ): true {\n // Normalized points of closed path, in the order that they should be drawn.\n // (0, 0) is the attachment point, and the point around which should be rotated\n const point = { x: -0.4, y: 0 };\n EndPoint.transform(point, arrowData);\n\n // Update endpoint style for drawing transparent arc.\n ctx.strokeStyle = ctx.fillStyle;\n ctx.fillStyle = \"rgba(0, 0, 0, 0)\";\n\n // Define curve endpoint as semicircle.\n const pi = Math.PI;\n const startAngle = arrowData.angle - pi / 2;\n const endAngle = arrowData.angle + pi / 2;\n ctx.beginPath();\n ctx.arc(\n point.x,\n point.y,\n arrowData.length * 0.4,\n startAngle,\n endAngle,\n false\n );\n ctx.stroke();\n\n return true;\n }\n}\n\n/**\n * Drawing methods for the inverted curve endpoint.\n */\nclass InvertedCurve {\n /**\n * Draw this shape at the end of a line.\n *\n * @param ctx - The shape will be rendered into this context.\n * @param arrowData - The data determining the shape.\n * @returns True because ctx.fill() can be used to fill the arrow.\n */\n public static draw(\n ctx: CanvasRenderingContext2D,\n arrowData: ArrowData\n ): true {\n // Normalized points of closed path, in the order that they should be drawn.\n // (0, 0) is the attachment point, and the point around which should be rotated\n const point = { x: -0.3, y: 0 };\n EndPoint.transform(point, arrowData);\n\n // Update endpoint style for drawing transparent arc.\n ctx.strokeStyle = ctx.fillStyle;\n ctx.fillStyle = \"rgba(0, 0, 0, 0)\";\n\n // Define inverted curve endpoint as semicircle.\n const pi = Math.PI;\n const startAngle = arrowData.angle + pi / 2;\n const endAngle = arrowData.angle + (3 * pi) / 2;\n ctx.beginPath();\n ctx.arc(\n point.x,\n point.y,\n arrowData.length * 0.4,\n startAngle,\n endAngle,\n false\n );\n ctx.stroke();\n\n return true;\n }\n}\n\n/**\n * Drawing methods for the trinagle endpoint.\n */\nclass Triangle {\n /**\n * Draw this shape at the end of a line.\n *\n * @param ctx - The shape will be rendered into this context.\n * @param arrowData - The data determining the shape.\n * @returns True because ctx.fill() can be used to fill the arrow.\n */\n public static draw(\n ctx: CanvasRenderingContext2D,\n arrowData: ArrowData\n ): true {\n // Normalized points of closed path, in the order that they should be drawn.\n // (0, 0) is the attachment point, and the point around which should be rotated\n const points = [\n { x: 0.02, y: 0 },\n { x: -1, y: 0.3 },\n { x: -1, y: -0.3 },\n ];\n\n EndPoint.transform(points, arrowData);\n EndPoint.drawPath(ctx, points);\n\n return true;\n }\n}\n\n/**\n * Drawing methods for the inverted trinagle endpoint.\n */\nclass InvertedTriangle {\n /**\n * Draw this shape at the end of a line.\n *\n * @param ctx - The shape will be rendered into this context.\n * @param arrowData - The data determining the shape.\n * @returns True because ctx.fill() can be used to fill the arrow.\n */\n public static draw(\n ctx: CanvasRenderingContext2D,\n arrowData: ArrowData\n ): true {\n // Normalized points of closed path, in the order that they should be drawn.\n // (0, 0) is the attachment point, and the point around which should be rotated\n const points = [\n { x: 0, y: 0.3 },\n { x: 0, y: -0.3 },\n { x: -1, y: 0 },\n ];\n\n EndPoint.transform(points, arrowData);\n EndPoint.drawPath(ctx, points);\n\n return true;\n }\n}\n\n/**\n * Drawing methods for the circle endpoint.\n */\nclass Circle {\n /**\n * Draw this shape at the end of a line.\n *\n * @param ctx - The shape will be rendered into this context.\n * @param arrowData - The data determining the shape.\n * @returns True because ctx.fill() can be used to fill the arrow.\n */\n public static draw(\n ctx: CanvasRenderingContext2D,\n arrowData: ArrowData\n ): true {\n const point = { x: -0.4, y: 0 };\n\n EndPoint.transform(point, arrowData);\n drawCircle(ctx, point.x, point.y, arrowData.length * 0.4);\n\n return true;\n }\n}\n\n/**\n * Drawing methods for the bar endpoint.\n */\nclass Bar {\n /**\n * Draw this shape at the end of a line.\n *\n * @param ctx - The shape will be rendered into this context.\n * @param arrowData - The data determining the shape.\n * @returns True because ctx.fill() can be used to fill the arrow.\n */\n public static draw(\n ctx: CanvasRenderingContext2D,\n arrowData: ArrowData\n ): true {\n /*\n var points = [\n {x:0, y:0.5},\n {x:0, y:-0.5}\n ];\n\n EndPoint.transform(points, arrowData);\n ctx.beginPath();\n ctx.moveTo(points[0].x, points[0].y);\n ctx.lineTo(points[1].x, points[1].y);\n ctx.stroke();\n*/\n\n const points = [\n { x: 0, y: 0.5 },\n { x: 0, y: -0.5 },\n { x: -0.15, y: -0.5 },\n { x: -0.15, y: 0.5 },\n ];\n\n EndPoint.transform(points, arrowData);\n EndPoint.drawPath(ctx, points);\n\n return true;\n }\n}\n\n/**\n * Drawing methods for the box endpoint.\n */\nclass Box {\n /**\n * Draw this shape at the end of a line.\n *\n * @param ctx - The shape will be rendered into this context.\n * @param arrowData - The data determining the shape.\n * @returns True because ctx.fill() can be used to fill the arrow.\n */\n public static draw(\n ctx: CanvasRenderingContext2D,\n arrowData: ArrowData\n ): true {\n const points = [\n { x: 0, y: 0.3 },\n { x: 0, y: -0.3 },\n { x: -0.6, y: -0.3 },\n { x: -0.6, y: 0.3 },\n ];\n\n EndPoint.transform(points, arrowData);\n EndPoint.drawPath(ctx, points);\n\n return true;\n }\n}\n\n/**\n * Drawing methods for the diamond endpoint.\n */\nclass Diamond {\n /**\n * Draw this shape at the end of a line.\n *\n * @param ctx - The shape will be rendered into this context.\n * @param arrowData - The data determining the shape.\n * @returns True because ctx.fill() can be used to fill the arrow.\n */\n public static draw(\n ctx: CanvasRenderingContext2D,\n arrowData: ArrowData\n ): true {\n const points = [\n { x: 0, y: 0 },\n { x: -0.5, y: -0.3 },\n { x: -1, y: 0 },\n { x: -0.5, y: 0.3 },\n ];\n\n EndPoint.transform(points, arrowData);\n EndPoint.drawPath(ctx, points);\n\n return true;\n }\n}\n\n/**\n * Drawing methods for the vee endpoint.\n */\nclass Vee {\n /**\n * Draw this shape at the end of a line.\n *\n * @param ctx - The shape will be rendered into this context.\n * @param arrowData - The data determining the shape.\n * @returns True because ctx.fill() can be used to fill the arrow.\n */\n public static draw(\n ctx: CanvasRenderingContext2D,\n arrowData: ArrowData\n ): true {\n // Normalized points of closed path, in the order that they should be drawn.\n // (0, 0) is the attachment point, and the point around which should be rotated\n const points = [\n { x: -1, y: 0.3 },\n { x: -0.5, y: 0 },\n { x: -1, y: -0.3 },\n { x: 0, y: 0 },\n ];\n\n EndPoint.transform(points, arrowData);\n EndPoint.drawPath(ctx, points);\n\n return true;\n }\n}\n\n/**\n * Drawing methods for the endpoints.\n */\nexport class EndPoints {\n /**\n * Draw an endpoint.\n *\n * @param ctx - The shape will be rendered into this context.\n * @param arrowData - The data determining the shape.\n * @returns True if ctx.fill() can be used to fill the arrow, false otherwise.\n */\n public static draw(\n ctx: CanvasRenderingContext2D,\n arrowData: ArrowData\n ): boolean {\n let type;\n if (arrowData.type) {\n type = arrowData.type.toLowerCase();\n }\n\n switch (type) {\n case \"image\":\n return Image.draw(ctx, arrowData);\n case \"circle\":\n return Circle.draw(ctx, arrowData);\n case \"box\":\n return Box.draw(ctx, arrowData);\n case \"crow\":\n return Crow.draw(ctx, arrowData);\n case \"curve\":\n return Curve.draw(ctx, arrowData);\n case \"diamond\":\n return Diamond.draw(ctx, arrowData);\n case \"inv_curve\":\n return InvertedCurve.draw(ctx, arrowData);\n case \"triangle\":\n return Triangle.draw(ctx, arrowData);\n case \"inv_triangle\":\n return InvertedTriangle.draw(ctx, arrowData);\n case \"bar\":\n return Bar.draw(ctx, arrowData);\n case \"vee\":\n return Vee.draw(ctx, arrowData);\n case \"arrow\": // fall-through\n default:\n return Arrow.draw(ctx, arrowData);\n }\n }\n}\n","import { overrideOpacity } from \"vis-util/esnext\";\nimport { EndPoints } from \"./end-points\";\nimport {\n ArrowData,\n ArrowDataWithCore,\n ArrowType,\n EdgeFormattingValues,\n EdgeType,\n Id,\n Label,\n EdgeOptions,\n Point,\n PointT,\n SelectiveRequired,\n VBody,\n VNode,\n} from \"./types\";\nimport { drawDashedLine } from \"./shapes\";\nimport { getSelfRefCoordinates } from \"../../shared/ComponentUtil\";\n\nexport interface FindBorderPositionOptions {\n via: Via;\n}\nexport interface FindBorderPositionCircleOptions {\n x: number;\n y: number;\n low: number;\n high: number;\n direction: number;\n}\n\n/**\n * The Base Class for all edges.\n */\nexport abstract class EdgeBase implements EdgeType {\n public from!: VNode; // Initialized in setOptions\n public fromPoint: Point;\n public to!: VNode; // Initialized in setOptions\n public toPoint: Point;\n public via?: VNode;\n\n public color: unknown = {};\n public colorDirty = true;\n public id!: Id; // Initialized in setOptions\n public options!: EdgeOptions; // Initialized in setOptions\n public hoverWidth = 1.5;\n public selectionWidth = 2;\n\n /**\n * Create a new instance.\n *\n * @param options - The options object of given edge.\n * @param _body - The body of the network.\n * @param _labelModule - Label module.\n */\n public constructor(\n options: EdgeOptions,\n protected _body: VBody,\n protected _labelModule: Label\n ) {\n this.setOptions(options);\n\n this.fromPoint = this.from;\n this.toPoint = this.to;\n }\n\n /**\n * Find the intersection between the border of the node and the edge.\n *\n * @param node - The node (either from or to node of the edge).\n * @param ctx - The context that will be used for rendering.\n * @param options - Additional options.\n * @returns Cartesian coordinates of the intersection between the border of the node and the edge.\n */\n protected abstract _findBorderPosition(\n node: VNode,\n ctx: CanvasRenderingContext2D,\n options?: FindBorderPositionOptions\n ): PointT;\n\n /**\n * Return additional point(s) the edge passes through.\n *\n * @returns Cartesian coordinates of the point(s) the edge passes through.\n */\n public abstract getViaNode(): Via;\n\n /** @inheritDoc */\n public abstract getPoint(position: number, viaNode?: Via): Point;\n\n /** @inheritDoc */\n public connect(): void {\n this.from = this._body.nodes[this.options.from];\n this.to = this._body.nodes[this.options.to];\n }\n\n /** @inheritDoc */\n public cleanup(): boolean {\n return false;\n }\n\n /**\n * Set new edge options.\n *\n * @param options - The new edge options object.\n */\n public setOptions(options: EdgeOptions): void {\n this.options = options;\n\n this.from = this._body.nodes[this.options.from];\n this.to = this._body.nodes[this.options.to];\n this.id = this.options.id;\n }\n\n /** @inheritDoc */\n public drawLine(\n ctx: CanvasRenderingContext2D,\n values: SelectiveRequired<\n EdgeFormattingValues,\n | \"color\"\n | \"opacity\"\n | \"shadowColor\"\n | \"shadowSize\"\n | \"shadowX\"\n | \"shadowY\"\n | \"width\"\n >,\n _selected?: boolean,\n _hover?: boolean,\n viaNode: Via = this.getViaNode()\n ): void {\n // set style\n ctx.strokeStyle = this.getColor(ctx, values);\n ctx.lineWidth = values.width;\n\n if (values.dashes !== false) {\n this._drawDashedLine(ctx, values, viaNode);\n } else {\n this._drawLine(ctx, values, viaNode);\n }\n }\n\n /**\n * Draw a line with given style between two nodes through supplied node(s).\n *\n * @param ctx - The context that will be used for rendering.\n * @param values - Formatting values like color, opacity or shadow.\n * @param viaNode - Additional control point(s) for the edge.\n * @param fromPoint - TODO: Seems ignored, remove?\n * @param toPoint - TODO: Seems ignored, remove?\n */\n private _drawLine(\n ctx: CanvasRenderingContext2D,\n values: SelectiveRequired<\n EdgeFormattingValues,\n \"shadowColor\" | \"shadowSize\" | \"shadowX\" | \"shadowY\"\n >,\n viaNode: Via,\n fromPoint?: Point,\n toPoint?: Point\n ): void {\n if (this.from != this.to) {\n // draw line\n this._line(ctx, values, viaNode, fromPoint, toPoint);\n } else {\n const [x, y, radius] = this._getCircleData(ctx);\n this._circle(ctx, values, x, y, radius);\n }\n }\n\n /**\n * Draw a dashed line with given style between two nodes through supplied node(s).\n *\n * @param ctx - The context that will be used for rendering.\n * @param values - Formatting values like color, opacity or shadow.\n * @param viaNode - Additional control point(s) for the edge.\n * @param _fromPoint - Ignored (TODO: remove in the future).\n * @param _toPoint - Ignored (TODO: remove in the future).\n */\n private _drawDashedLine(\n ctx: CanvasRenderingContext2D,\n values: SelectiveRequired<\n EdgeFormattingValues,\n \"shadowColor\" | \"shadowSize\" | \"shadowX\" | \"shadowY\"\n >,\n viaNode: Via,\n _fromPoint?: Point,\n _toPoint?: Point\n ): void {\n ctx.lineCap = \"round\";\n const pattern = Array.isArray(values.dashes) ? values.dashes : [5, 5];\n\n // only firefox and chrome support this method, else we use the legacy one.\n if (ctx.setLineDash !== undefined) {\n ctx.save();\n\n // set dash settings for chrome or firefox\n ctx.setLineDash(pattern);\n ctx.lineDashOffset = 0;\n\n // draw the line\n if (this.from != this.to) {\n // draw line\n this._line(ctx, values, viaNode);\n } else {\n const [x, y, radius] = this._getCircleData(ctx);\n this._circle(ctx, values, x, y, radius);\n }\n\n // restore the dash settings.\n ctx.setLineDash([0]);\n ctx.lineDashOffset = 0;\n ctx.restore();\n } else {\n // unsupporting smooth lines\n if (this.from != this.to) {\n // draw line\n drawDashedLine(\n ctx,\n this.from.x,\n this.from.y,\n this.to.x,\n this.to.y,\n pattern\n );\n } else {\n const [x, y, radius] = this._getCircleData(ctx);\n this._circle(ctx, values, x, y, radius);\n }\n // draw shadow if enabled\n this.enableShadow(ctx, values);\n\n ctx.stroke();\n\n // disable shadows for other elements.\n this.disableShadow(ctx, values);\n }\n }\n\n /**\n * Draw a line with given style between two nodes through supplied node(s).\n *\n * @param ctx - The context that will be used for rendering.\n * @param values - Formatting values like color, opacity or shadow.\n * @param viaNode - Additional control point(s) for the edge.\n * @param fromPoint - TODO: Seems ignored, remove?\n * @param toPoint - TODO: Seems ignored, remove?\n */\n protected abstract _line(\n ctx: CanvasRenderingContext2D,\n values: EdgeFormattingValues,\n viaNode: Via,\n fromPoint?: Point,\n toPoint?: Point\n ): void;\n\n /**\n * Find the intersection between the border of the node and the edge.\n *\n * @param node - The node (either from or to node of the edge).\n * @param ctx - The context that will be used for rendering.\n * @param options - Additional options.\n * @returns Cartesian coordinates of the intersection between the border of the node and the edge.\n */\n public findBorderPosition(\n node: VNode,\n ctx: CanvasRenderingContext2D,\n options?: FindBorderPositionOptions | FindBorderPositionCircleOptions\n ): PointT {\n if (this.from != this.to) {\n return this._findBorderPosition(node, ctx, options as any);\n } else {\n return this._findBorderPositionCircle(node, ctx, options as any);\n }\n }\n\n /** @inheritDoc */\n public findBorderPositions(ctx: CanvasRenderingContext2D): {\n from: Point;\n to: Point;\n } {\n if (this.from != this.to) {\n return {\n from: this._findBorderPosition(this.from, ctx),\n to: this._findBorderPosition(this.to, ctx),\n };\n } else {\n const [x, y] = this._getCircleData(ctx).slice(0, 2);\n\n return {\n from: this._findBorderPositionCircle(this.from, ctx, {\n x,\n y,\n low: 0.25,\n high: 0.6,\n direction: -1,\n }),\n to: this._findBorderPositionCircle(this.from, ctx, {\n x,\n y,\n low: 0.6,\n high: 0.8,\n direction: 1,\n }),\n };\n }\n }\n\n /**\n * Compute the center point and radius of an edge connected to the same node at both ends.\n *\n * @param ctx - The context that will be used for rendering.\n * @returns `[x, y, radius]`\n */\n protected _getCircleData(\n ctx?: CanvasRenderingContext2D\n ): [number, number, number] {\n const radius = this.options.selfReference.size;\n\n if (ctx !== undefined) {\n if (this.from.shape.width === undefined) {\n this.from.shape.resize(ctx);\n }\n }\n\n // get circle coordinates\n const coordinates = getSelfRefCoordinates(\n ctx,\n this.options.selfReference.angle,\n radius,\n this.from\n );\n\n return [coordinates.x, coordinates.y, radius];\n }\n\n /**\n * Get a point on a circle.\n *\n * @param x - Center of the circle on the x axis.\n * @param y - Center of the circle on the y axis.\n * @param radius - Radius of the circle.\n * @param position - Value between 0 (line start) and 1 (line end).\n * @returns Cartesian coordinates of requested point on the circle.\n */\n private _pointOnCircle(\n x: number,\n y: number,\n radius: number,\n position: number\n ): Point {\n const angle = position * 2 * Math.PI;\n return {\n x: x + radius * Math.cos(angle),\n y: y - radius * Math.sin(angle),\n };\n }\n\n /**\n * Find the intersection between the border of the node and the edge.\n *\n * @remarks\n * This function uses binary search to look for the point where the circle crosses the border of the node.\n * @param nearNode - The node (either from or to node of the edge).\n * @param ctx - The context that will be used for rendering.\n * @param options - Additional options.\n * @returns Cartesian coordinates of the intersection between the border of the node and the edge.\n */\n private _findBorderPositionCircle(\n nearNode: VNode,\n ctx: CanvasRenderingContext2D,\n options: FindBorderPositionCircleOptions\n ): PointT {\n const x = options.x;\n const y = options.y;\n let low = options.low;\n let high = options.high;\n const direction = options.direction;\n\n const maxIterations = 10;\n const radius = this.options.selfReference.size;\n const threshold = 0.05;\n let pos: Point;\n\n let middle = (low + high) * 0.5;\n\n let endPointOffset = 0;\n if (this.options.arrowStrikethrough === true) {\n if (direction === -1) {\n endPointOffset = this.options.endPointOffset.from;\n } else if (direction === 1) {\n endPointOffset = this.options.endPointOffset.to;\n }\n }\n\n let iteration = 0;\n do {\n middle = (low + high) * 0.5;\n\n pos = this._pointOnCircle(x, y, radius, middle);\n const angle = Math.atan2(nearNode.y - pos.y, nearNode.x - pos.x);\n\n const distanceToBorder =\n nearNode.distanceToBorder(ctx, angle) + endPointOffset;\n\n const distanceToPoint = Math.sqrt(\n Math.pow(pos.x - nearNode.x, 2) + Math.pow(pos.y - nearNode.y, 2)\n );\n const difference = distanceToBorder - distanceToPoint;\n if (Math.abs(difference) < threshold) {\n break; // found\n } else if (difference > 0) {\n // distance to nodes is larger than distance to border --> t needs to be bigger if we're looking at the to node.\n if (direction > 0) {\n low = middle;\n } else {\n high = middle;\n }\n } else {\n if (direction > 0) {\n high = middle;\n } else {\n low = middle;\n }\n }\n\n ++iteration;\n } while (low <= high && iteration < maxIterations);\n\n return {\n ...pos,\n t: middle,\n };\n }\n\n /**\n * Get the line width of the edge. Depends on width and whether one of the connected nodes is selected.\n *\n * @param selected - Determines wheter the line is selected.\n * @param hover - Determines wheter the line is being hovered, only applies if selected is false.\n * @returns The width of the line.\n */\n public getLineWidth(selected: boolean, hover: boolean): number {\n if (selected === true) {\n return Math.max(this.selectionWidth, 0.3 / this._body.view.scale);\n } else if (hover === true) {\n return Math.max(this.hoverWidth, 0.3 / this._body.view.scale);\n } else {\n return Math.max(this.options.width, 0.3 / this._body.view.scale);\n }\n }\n\n /**\n * Compute the color or gradient for given edge.\n *\n * @param ctx - The context that will be used for rendering.\n * @param values - Formatting values like color, opacity or shadow.\n * @param _selected - Ignored (TODO: remove in the future).\n * @param _hover - Ignored (TODO: remove in the future).\n * @returns Color string if single color is inherited or gradient if two.\n */\n public getColor(\n ctx: CanvasRenderingContext2D,\n values: SelectiveRequired\n ): string | CanvasGradient {\n if (values.inheritsColor !== false) {\n // when this is a loop edge, just use the 'from' method\n if (values.inheritsColor === \"both\" && this.from.id !== this.to.id) {\n const grd = ctx.createLinearGradient(\n this.from.x,\n this.from.y,\n this.to.x,\n this.to.y\n );\n let fromColor = this.from.options.color.highlight.border;\n let toColor = this.to.options.color.highlight.border;\n\n if (this.from.selected === false && this.to.selected === false) {\n fromColor = overrideOpacity(\n this.from.options.color.border,\n values.opacity\n );\n toColor = overrideOpacity(\n this.to.options.color.border,\n values.opacity\n );\n } else if (this.from.selected === true && this.to.selected === false) {\n toColor = this.to.options.color.border;\n } else if (this.from.selected === false && this.to.selected === true) {\n fromColor = this.from.options.color.border;\n }\n grd.addColorStop(0, fromColor);\n grd.addColorStop(1, toColor);\n\n // -------------------- this returns -------------------- //\n return grd;\n }\n\n if (values.inheritsColor === \"to\") {\n return overrideOpacity(this.to.options.color.border, values.opacity);\n } else {\n // \"from\"\n return overrideOpacity(this.from.options.color.border, values.opacity);\n }\n } else {\n return overrideOpacity(values.color, values.opacity);\n }\n }\n\n /**\n * Draw a line from a node to itself, a circle.\n *\n * @param ctx - The context that will be used for rendering.\n * @param values - Formatting values like color, opacity or shadow.\n * @param x - Center of the circle on the x axis.\n * @param y - Center of the circle on the y axis.\n * @param radius - Radius of the circle.\n */\n private _circle(\n ctx: CanvasRenderingContext2D,\n values: SelectiveRequired<\n EdgeFormattingValues,\n \"shadowColor\" | \"shadowSize\" | \"shadowX\" | \"shadowY\"\n >,\n x: number,\n y: number,\n radius: number\n ): void {\n // draw shadow if enabled\n this.enableShadow(ctx, values);\n\n //full circle\n let angleFrom = 0;\n let angleTo = Math.PI * 2;\n\n if (!this.options.selfReference.renderBehindTheNode) {\n //render only parts which are not overlaping with parent node\n //need to find x,y of from point and x,y to point\n //calculating radians\n const low = this.options.selfReference.angle;\n const high = this.options.selfReference.angle + Math.PI;\n const pointTFrom = this._findBorderPositionCircle(this.from, ctx, {\n x,\n y,\n low,\n high,\n direction: -1,\n });\n const pointTTo = this._findBorderPositionCircle(this.from, ctx, {\n x,\n y,\n low,\n high,\n direction: 1,\n });\n angleFrom = Math.atan2(pointTFrom.y - y, pointTFrom.x - x);\n angleTo = Math.atan2(pointTTo.y - y, pointTTo.x - x);\n }\n\n // draw a circle\n ctx.beginPath();\n ctx.arc(x, y, radius, angleFrom, angleTo, false);\n ctx.stroke();\n\n // disable shadows for other elements.\n this.disableShadow(ctx, values);\n }\n\n /**\n * @inheritDoc\n * @remarks\n * http://stackoverflow.com/questions/849211/shortest-distancae-between-a-point-and-a-line-segment\n */\n public getDistanceToEdge(\n x1: number,\n y1: number,\n x2: number,\n y2: number,\n x3: number,\n y3: number\n ): number {\n if (this.from != this.to) {\n return this._getDistanceToEdge(x1, y1, x2, y2, x3, y3);\n } else {\n const [x, y, radius] = this._getCircleData(undefined);\n const dx = x - x3;\n const dy = y - y3;\n return Math.abs(Math.sqrt(dx * dx + dy * dy) - radius);\n }\n }\n\n /**\n * Calculate the distance between a point (x3, y3) and a line segment from (x1, y1) to (x2, y2).\n *\n * @remarks\n * http://stackoverflow.com/questions/849211/shortest-distancae-between-a-point-and-a-line-segment\n * @param x1 - First end of the line segment on the x axis.\n * @param y1 - First end of the line segment on the y axis.\n * @param x2 - Second end of the line segment on the x axis.\n * @param y2 - Second end of the line segment on the y axis.\n * @param x3 - Position of the point on the x axis.\n * @param y3 - Position of the point on the y axis.\n * @param via - Additional control point(s) for the edge.\n * @returns The distance between the line segment and the point.\n */\n protected abstract _getDistanceToEdge(\n x1: number,\n y1: number,\n x2: number,\n y2: number,\n x3: number,\n y3: number,\n via?: Via\n ): number;\n\n /**\n * Calculate the distance between a point (x3, y3) and a line segment from (x1, y1) to (x2, y2).\n *\n * @param x1 - First end of the line segment on the x axis.\n * @param y1 - First end of the line segment on the y axis.\n * @param x2 - Second end of the line segment on the x axis.\n * @param y2 - Second end of the line segment on the y axis.\n * @param x3 - Position of the point on the x axis.\n * @param y3 - Position of the point on the y axis.\n * @returns The distance between the line segment and the point.\n */\n protected _getDistanceToLine(\n x1: number,\n y1: number,\n x2: number,\n y2: number,\n x3: number,\n y3: number\n ): number {\n const px = x2 - x1;\n const py = y2 - y1;\n const something = px * px + py * py;\n let u = ((x3 - x1) * px + (y3 - y1) * py) / something;\n\n if (u > 1) {\n u = 1;\n } else if (u < 0) {\n u = 0;\n }\n\n const x = x1 + u * px;\n const y = y1 + u * py;\n const dx = x - x3;\n const dy = y - y3;\n\n //# Note: If the actual distance does not matter,\n //# if you only want to compare what this function\n //# returns to other results of this function, you\n //# can just return the squared distance instead\n //# (i.e. remove the sqrt) to gain a little performance\n\n return Math.sqrt(dx * dx + dy * dy);\n }\n\n /** @inheritDoc */\n public getArrowData(\n ctx: CanvasRenderingContext2D,\n position: \"middle\",\n viaNode: VNode,\n selected: boolean,\n hover: boolean,\n values: SelectiveRequired<\n EdgeFormattingValues,\n \"middleArrowType\" | \"middleArrowScale\" | \"width\"\n >\n ): ArrowDataWithCore;\n /** @inheritDoc */\n public getArrowData(\n ctx: CanvasRenderingContext2D,\n position: \"to\",\n viaNode: VNode,\n selected: boolean,\n hover: boolean,\n values: SelectiveRequired<\n EdgeFormattingValues,\n \"toArrowType\" | \"toArrowScale\" | \"width\"\n >\n ): ArrowDataWithCore;\n /** @inheritDoc */\n public getArrowData(\n ctx: CanvasRenderingContext2D,\n position: \"from\",\n viaNode: VNode,\n selected: boolean,\n hover: boolean,\n values: SelectiveRequired<\n EdgeFormattingValues,\n \"fromArrowType\" | \"fromArrowScale\" | \"width\"\n >\n ): ArrowDataWithCore;\n /** @inheritDoc */\n public getArrowData(\n ctx: CanvasRenderingContext2D,\n position: \"from\" | \"to\" | \"middle\",\n viaNode: VNode,\n _selected: boolean,\n _hover: boolean,\n values: SelectiveRequired\n ): ArrowDataWithCore {\n // set lets\n let angle: number;\n let arrowPoint: Point;\n let node1: VNode;\n let node2: VNode;\n let reversed: boolean;\n let scaleFactor: number;\n let type: ArrowType;\n const lineWidth: number = values.width;\n\n if (position === \"from\") {\n node1 = this.from;\n node2 = this.to;\n reversed = values.fromArrowScale! < 0;\n scaleFactor = Math.abs(values.fromArrowScale!);\n type = values.fromArrowType!;\n } else if (position === \"to\") {\n node1 = this.to;\n node2 = this.from;\n reversed = values.toArrowScale! < 0;\n scaleFactor = Math.abs(values.toArrowScale!);\n type = values.toArrowType!;\n } else {\n node1 = this.to;\n node2 = this.from;\n reversed = values.middleArrowScale! < 0;\n scaleFactor = Math.abs(values.middleArrowScale!);\n type = values.middleArrowType!;\n }\n\n const length = 15 * scaleFactor + 3 * lineWidth; // 3* lineWidth is the width of the edge.\n\n // if not connected to itself\n if (node1 != node2) {\n const approximateEdgeLength = Math.hypot(\n node1.x - node2.x,\n node1.y - node2.y\n );\n const relativeLength = length / approximateEdgeLength;\n\n if (position !== \"middle\") {\n // draw arrow head\n if (this.options.smooth.enabled === true) {\n const pointT = this._findBorderPosition(node1, ctx, { via: viaNode });\n const guidePos = this.getPoint(\n pointT.t + relativeLength * (position === \"from\" ? 1 : -1),\n viaNode\n );\n angle = Math.atan2(pointT.y - guidePos.y, pointT.x - guidePos.x);\n arrowPoint = pointT;\n } else {\n angle = Math.atan2(node1.y - node2.y, node1.x - node2.x);\n arrowPoint = this._findBorderPosition(node1, ctx);\n }\n } else {\n // Negative half length reverses arrow direction.\n const halfLength = (reversed ? -relativeLength : relativeLength) / 2;\n const guidePos1 = this.getPoint(0.5 + halfLength, viaNode);\n const guidePos2 = this.getPoint(0.5 - halfLength, viaNode);\n angle = Math.atan2(\n guidePos1.y - guidePos2.y,\n guidePos1.x - guidePos2.x\n );\n arrowPoint = this.getPoint(0.5, viaNode);\n }\n } else {\n // draw circle\n const [x, y, radius] = this._getCircleData(ctx);\n\n if (position === \"from\") {\n const low = this.options.selfReference.angle;\n const high = this.options.selfReference.angle + Math.PI;\n\n const pointT = this._findBorderPositionCircle(this.from, ctx, {\n x,\n y,\n low,\n high,\n direction: -1,\n });\n angle = pointT.t * -2 * Math.PI + 1.5 * Math.PI + 0.1 * Math.PI;\n arrowPoint = pointT;\n } else if (position === \"to\") {\n const low = this.options.selfReference.angle;\n const high = this.options.selfReference.angle + Math.PI;\n\n const pointT = this._findBorderPositionCircle(this.from, ctx, {\n x,\n y,\n low,\n high,\n direction: 1,\n });\n angle = pointT.t * -2 * Math.PI + 1.5 * Math.PI - 1.1 * Math.PI;\n arrowPoint = pointT;\n } else {\n const pos = this.options.selfReference.angle / (2 * Math.PI);\n arrowPoint = this._pointOnCircle(x, y, radius, pos);\n angle = pos * -2 * Math.PI + 1.5 * Math.PI + 0.1 * Math.PI;\n }\n }\n\n const xi = arrowPoint.x - length * 0.9 * Math.cos(angle);\n const yi = arrowPoint.y - length * 0.9 * Math.sin(angle);\n const arrowCore = { x: xi, y: yi };\n\n return {\n point: arrowPoint,\n core: arrowCore,\n angle: angle,\n length: length,\n type: type,\n };\n }\n\n /** @inheritDoc */\n public drawArrowHead(\n ctx: CanvasRenderingContext2D,\n values: SelectiveRequired<\n EdgeFormattingValues,\n | \"color\"\n | \"opacity\"\n | \"shadowColor\"\n | \"shadowSize\"\n | \"shadowX\"\n | \"shadowY\"\n | \"width\"\n >,\n _selected: boolean,\n _hover: boolean,\n arrowData: ArrowData\n ): void {\n // set style\n ctx.strokeStyle = this.getColor(ctx, values);\n ctx.fillStyle = ctx.strokeStyle;\n ctx.lineWidth = values.width;\n\n const canFill = EndPoints.draw(ctx, arrowData);\n\n if (canFill) {\n // draw shadow if enabled\n this.enableShadow(ctx, values);\n ctx.fill();\n // disable shadows for other elements.\n this.disableShadow(ctx, values);\n }\n }\n\n /**\n * Set the shadow formatting values in the context if enabled, do nothing otherwise.\n *\n * @param ctx - The context that will be used for rendering.\n * @param values - Formatting values for the shadow.\n */\n public enableShadow(\n ctx: CanvasRenderingContext2D,\n values: SelectiveRequired<\n EdgeFormattingValues,\n \"shadowColor\" | \"shadowSize\" | \"shadowX\" | \"shadowY\"\n >\n ): void {\n if (values.shadow === true) {\n ctx.shadowColor = values.shadowColor;\n ctx.shadowBlur = values.shadowSize;\n ctx.shadowOffsetX = values.shadowX;\n ctx.shadowOffsetY = values.shadowY;\n }\n }\n\n /**\n * Reset the shadow formatting values in the context if enabled, do nothing otherwise.\n *\n * @param ctx - The context that will be used for rendering.\n * @param values - Formatting values for the shadow.\n */\n public disableShadow(\n ctx: CanvasRenderingContext2D,\n values: EdgeFormattingValues\n ): void {\n if (values.shadow === true) {\n ctx.shadowColor = \"rgba(0,0,0,0)\";\n ctx.shadowBlur = 0;\n ctx.shadowOffsetX = 0;\n ctx.shadowOffsetY = 0;\n }\n }\n\n /**\n * Render the background according to the formatting values.\n *\n * @param ctx - The context that will be used for rendering.\n * @param values - Formatting values for the background.\n */\n public drawBackground(\n ctx: CanvasRenderingContext2D,\n values: SelectiveRequired<\n EdgeFormattingValues,\n \"backgroundColor\" | \"backgroundSize\"\n >\n ): void {\n if (values.background !== false) {\n // save original line attrs\n const origCtxAttr = {\n strokeStyle: ctx.strokeStyle,\n lineWidth: ctx.lineWidth,\n dashes: (ctx as any).dashes,\n };\n\n ctx.strokeStyle = values.backgroundColor;\n ctx.lineWidth = values.backgroundSize;\n this.setStrokeDashed(ctx, values.backgroundDashes);\n\n ctx.stroke();\n\n // restore original line attrs\n ctx.strokeStyle = origCtxAttr.strokeStyle;\n ctx.lineWidth = origCtxAttr.lineWidth;\n (ctx as any).dashes = origCtxAttr.dashes;\n this.setStrokeDashed(ctx, values.dashes);\n }\n }\n\n /**\n * Set the line dash pattern if supported. Logs a warning to the console if it isn't supported.\n *\n * @param ctx - The context that will be used for rendering.\n * @param dashes - The pattern [line, space, line…], true for default dashed line or false for normal line.\n */\n public setStrokeDashed(\n ctx: CanvasRenderingContext2D,\n dashes?: boolean | number[]\n ): void {\n if (dashes !== false) {\n if (ctx.setLineDash !== undefined) {\n const pattern = Array.isArray(dashes) ? dashes : [5, 5];\n ctx.setLineDash(pattern);\n } else {\n console.warn(\n \"setLineDash is not supported in this browser. The dashed stroke cannot be used.\"\n );\n }\n } else {\n if (ctx.setLineDash !== undefined) {\n ctx.setLineDash([]);\n } else {\n console.warn(\n \"setLineDash is not supported in this browser. The dashed stroke cannot be used.\"\n );\n }\n }\n }\n}\n","import { EdgeBase } from \"./edge-base\";\nimport {\n EdgeFormattingValues,\n Label,\n EdgeOptions,\n Point,\n PointT,\n SelectiveRequired,\n VBody,\n VNode,\n} from \"./types\";\n\n/**\n * The Base Class for all Bezier edges.\n * Bezier curves are used to model smooth gradual curves in paths between nodes.\n */\nexport abstract class BezierEdgeBase extends EdgeBase {\n /**\n * Create a new instance.\n *\n * @param options - The options object of given edge.\n * @param body - The body of the network.\n * @param labelModule - Label module.\n */\n public constructor(options: EdgeOptions, body: VBody, labelModule: Label) {\n super(options, body, labelModule);\n }\n\n /**\n * Compute additional point(s) the edge passes through.\n *\n * @returns Cartesian coordinates of the point(s) the edge passes through.\n */\n protected abstract _getViaCoordinates(): Via;\n\n /**\n * Find the intersection between the border of the node and the edge.\n *\n * @remarks\n * This function uses binary search to look for the point where the bezier curve crosses the border of the node.\n * @param nearNode - The node (either from or to node of the edge).\n * @param ctx - The context that will be used for rendering.\n * @param viaNode - Additional node(s) the edge passes through.\n * @returns Cartesian coordinates of the intersection between the border of the node and the edge.\n */\n protected _findBorderPositionBezier(\n nearNode: VNode,\n ctx: CanvasRenderingContext2D,\n viaNode: Via = this._getViaCoordinates()\n ): PointT {\n const maxIterations = 10;\n const threshold = 0.2;\n let from = false;\n let high = 1;\n let low = 0;\n let node = this.to;\n let pos: Point;\n let middle: number;\n\n let endPointOffset = this.options.endPointOffset\n ? this.options.endPointOffset.to\n : 0;\n\n if (nearNode.id === this.from.id) {\n node = this.from;\n from = true;\n\n endPointOffset = this.options.endPointOffset\n ? this.options.endPointOffset.from\n : 0;\n }\n\n if (this.options.arrowStrikethrough === false) {\n endPointOffset = 0;\n }\n\n let iteration = 0;\n do {\n middle = (low + high) * 0.5;\n\n pos = this.getPoint(middle, viaNode);\n const angle = Math.atan2(node.y - pos.y, node.x - pos.x);\n\n const distanceToBorder =\n node.distanceToBorder(ctx, angle) + endPointOffset;\n\n const distanceToPoint = Math.sqrt(\n Math.pow(pos.x - node.x, 2) + Math.pow(pos.y - node.y, 2)\n );\n const difference = distanceToBorder - distanceToPoint;\n if (Math.abs(difference) < threshold) {\n break; // found\n } else if (difference < 0) {\n // distance to nodes is larger than distance to border --> t needs to be bigger if we're looking at the to node.\n if (from === false) {\n low = middle;\n } else {\n high = middle;\n }\n } else {\n if (from === false) {\n high = middle;\n } else {\n low = middle;\n }\n }\n\n ++iteration;\n } while (low <= high && iteration < maxIterations);\n\n return {\n ...pos,\n t: middle,\n };\n }\n\n /**\n * Calculate the distance between a point (x3,y3) and a line segment from (x1,y1) to (x2,y2).\n *\n * @remarks\n * http://stackoverflow.com/questions/849211/shortest-distancae-between-a-point-and-a-line-segment\n * @param x1 - First end of the line segment on the x axis.\n * @param y1 - First end of the line segment on the y axis.\n * @param x2 - Second end of the line segment on the x axis.\n * @param y2 - Second end of the line segment on the y axis.\n * @param x3 - Position of the point on the x axis.\n * @param y3 - Position of the point on the y axis.\n * @param via - The control point for the edge.\n * @returns The distance between the line segment and the point.\n */\n protected _getDistanceToBezierEdge(\n x1: number,\n y1: number,\n x2: number,\n y2: number,\n x3: number,\n y3: number,\n via: Point\n ): number {\n // x3,y3 is the point\n let minDistance = 1e9;\n let distance;\n let i, t, x, y;\n let lastX = x1;\n let lastY = y1;\n for (i = 1; i < 10; i++) {\n t = 0.1 * i;\n x =\n Math.pow(1 - t, 2) * x1 + 2 * t * (1 - t) * via.x + Math.pow(t, 2) * x2;\n y =\n Math.pow(1 - t, 2) * y1 + 2 * t * (1 - t) * via.y + Math.pow(t, 2) * y2;\n if (i > 0) {\n distance = this._getDistanceToLine(lastX, lastY, x, y, x3, y3);\n minDistance = distance < minDistance ? distance : minDistance;\n }\n lastX = x;\n lastY = y;\n }\n\n return minDistance;\n }\n\n /**\n * Render a bezier curve between two nodes.\n *\n * @remarks\n * The method accepts zero, one or two control points.\n * Passing zero control points just draws a straight line.\n * @param ctx - The context that will be used for rendering.\n * @param values - Style options for edge drawing.\n * @param viaNode1 - First control point for curve drawing.\n * @param viaNode2 - Second control point for curve drawing.\n */\n protected _bezierCurve(\n ctx: CanvasRenderingContext2D,\n values: SelectiveRequired<\n EdgeFormattingValues,\n | \"backgroundColor\"\n | \"backgroundSize\"\n | \"shadowColor\"\n | \"shadowSize\"\n | \"shadowX\"\n | \"shadowY\"\n >,\n viaNode1?: Point,\n viaNode2?: Point\n ): void {\n ctx.beginPath();\n ctx.moveTo(this.fromPoint.x, this.fromPoint.y);\n\n if (viaNode1 != null && viaNode1.x != null) {\n if (viaNode2 != null && viaNode2.x != null) {\n ctx.bezierCurveTo(\n viaNode1.x,\n viaNode1.y,\n viaNode2.x,\n viaNode2.y,\n this.toPoint.x,\n this.toPoint.y\n );\n } else {\n ctx.quadraticCurveTo(\n viaNode1.x,\n viaNode1.y,\n this.toPoint.x,\n this.toPoint.y\n );\n }\n } else {\n // fallback to normal straight edge\n ctx.lineTo(this.toPoint.x, this.toPoint.y);\n }\n\n // draw a background\n this.drawBackground(ctx, values);\n\n // draw shadow if enabled\n this.enableShadow(ctx, values);\n ctx.stroke();\n this.disableShadow(ctx, values);\n }\n\n /** @inheritDoc */\n public getViaNode(): Via {\n return this._getViaCoordinates();\n }\n}\n","import { BezierEdgeBase } from \"./util/bezier-edge-base\";\nimport {\n EdgeFormattingValues,\n Label,\n EdgeOptions,\n Point,\n PointT,\n SelectiveRequired,\n VBody,\n VNode,\n} from \"./util/types\";\n\n/**\n * A Dynamic Bezier Edge. Bezier curves are used to model smooth gradual\n * curves in paths between nodes. The Dynamic piece refers to how the curve\n * reacts to physics changes.\n *\n * @augments BezierEdgeBase\n */\nexport class BezierEdgeDynamic extends BezierEdgeBase {\n public via: VNode = this.via; // constructor → super → super → setOptions → setupSupportNode\n private readonly _boundFunction: () => void;\n\n /**\n * Create a new instance.\n *\n * @param options - The options object of given edge.\n * @param body - The body of the network.\n * @param labelModule - Label module.\n */\n public constructor(options: EdgeOptions, body: VBody, labelModule: Label) {\n //this.via = undefined; // Here for completeness but not allowed to defined before super() is invoked.\n super(options, body, labelModule); // --> this calls the setOptions below\n this._boundFunction = (): void => {\n this.positionBezierNode();\n };\n this._body.emitter.on(\"_repositionBezierNodes\", this._boundFunction);\n }\n\n /** @inheritDoc */\n public setOptions(options: EdgeOptions): void {\n super.setOptions(options);\n\n // check if the physics has changed.\n let physicsChange = false;\n if (this.options.physics !== options.physics) {\n physicsChange = true;\n }\n\n // set the options and the to and from nodes\n this.options = options;\n this.id = this.options.id;\n this.from = this._body.nodes[this.options.from];\n this.to = this._body.nodes[this.options.to];\n\n // setup the support node and connect\n this.setupSupportNode();\n this.connect();\n\n // when we change the physics state of the edge, we reposition the support node.\n if (physicsChange === true) {\n this.via.setOptions({ physics: this.options.physics });\n this.positionBezierNode();\n }\n }\n\n /** @inheritDoc */\n public connect(): void {\n this.from = this._body.nodes[this.options.from];\n this.to = this._body.nodes[this.options.to];\n if (\n this.from === undefined ||\n this.to === undefined ||\n this.options.physics === false\n ) {\n this.via.setOptions({ physics: false });\n } else {\n // fix weird behaviour where a self referencing node has physics enabled\n if (this.from.id === this.to.id) {\n this.via.setOptions({ physics: false });\n } else {\n this.via.setOptions({ physics: true });\n }\n }\n }\n\n /** @inheritDoc */\n public cleanup(): boolean {\n this._body.emitter.off(\"_repositionBezierNodes\", this._boundFunction);\n if (this.via !== undefined) {\n delete this._body.nodes[this.via.id];\n this.via = undefined;\n return true;\n }\n return false;\n }\n\n /**\n * Create and add a support node if not already present.\n *\n * @remarks\n * Bezier curves require an anchor point to calculate the smooth flow.\n * These points are nodes.\n * These nodes are invisible but are used for the force calculation.\n *\n * The changed data is not called, if needed, it is returned by the main edge constructor.\n */\n public setupSupportNode(): void {\n if (this.via === undefined) {\n const nodeId = \"edgeId:\" + this.id;\n const node = this._body.functions.createNode({\n id: nodeId,\n shape: \"circle\",\n physics: true,\n hidden: true,\n });\n this._body.nodes[nodeId] = node;\n this.via = node;\n this.via.parentEdgeId = this.id;\n this.positionBezierNode();\n }\n }\n\n /**\n * Position bezier node.\n */\n public positionBezierNode(): void {\n if (\n this.via !== undefined &&\n this.from !== undefined &&\n this.to !== undefined\n ) {\n this.via.x = 0.5 * (this.from.x + this.to.x);\n this.via.y = 0.5 * (this.from.y + this.to.y);\n } else if (this.via !== undefined) {\n this.via.x = 0;\n this.via.y = 0;\n }\n }\n\n /** @inheritDoc */\n protected _line(\n ctx: CanvasRenderingContext2D,\n values: SelectiveRequired<\n EdgeFormattingValues,\n | \"backgroundColor\"\n | \"backgroundSize\"\n | \"shadowColor\"\n | \"shadowSize\"\n | \"shadowX\"\n | \"shadowY\"\n >,\n viaNode: VNode\n ): void {\n this._bezierCurve(ctx, values, viaNode);\n }\n\n /** @inheritDoc */\n protected _getViaCoordinates(): Point {\n return this.via;\n }\n\n /** @inheritDoc */\n public getViaNode(): Point {\n return this.via;\n }\n\n /** @inheritDoc */\n public getPoint(position: number, viaNode: Point = this.via): Point {\n if (this.from === this.to) {\n const [cx, cy, cr] = this._getCircleData();\n const a = 2 * Math.PI * (1 - position);\n return {\n x: cx + cr * Math.sin(a),\n y: cy + cr - cr * (1 - Math.cos(a)),\n };\n } else {\n return {\n x:\n Math.pow(1 - position, 2) * this.fromPoint.x +\n 2 * position * (1 - position) * viaNode.x +\n Math.pow(position, 2) * this.toPoint.x,\n y:\n Math.pow(1 - position, 2) * this.fromPoint.y +\n 2 * position * (1 - position) * viaNode.y +\n Math.pow(position, 2) * this.toPoint.y,\n };\n }\n }\n\n /** @inheritDoc */\n protected _findBorderPosition(\n nearNode: VNode,\n ctx: CanvasRenderingContext2D\n ): PointT {\n return this._findBorderPositionBezier(nearNode, ctx, this.via);\n }\n\n /** @inheritDoc */\n protected _getDistanceToEdge(\n x1: number,\n y1: number,\n x2: number,\n y2: number,\n x3: number,\n y3: number\n ): number {\n // x3,y3 is the point\n return this._getDistanceToBezierEdge(x1, y1, x2, y2, x3, y3, this.via);\n }\n}\n","import { BezierEdgeBase } from \"./util/bezier-edge-base\";\nimport {\n EdgeFormattingValues,\n Label,\n EdgeOptions,\n Point,\n PointT,\n SelectiveRequired,\n VBody,\n VNode,\n} from \"./util/types\";\n\n/**\n * A Static Bezier Edge. Bezier curves are used to model smooth gradual curves in paths between nodes.\n */\nexport class BezierEdgeStatic extends BezierEdgeBase {\n /**\n * Create a new instance.\n *\n * @param options - The options object of given edge.\n * @param body - The body of the network.\n * @param labelModule - Label module.\n */\n public constructor(options: EdgeOptions, body: VBody, labelModule: Label) {\n super(options, body, labelModule);\n }\n\n /** @inheritDoc */\n protected _line(\n ctx: CanvasRenderingContext2D,\n values: SelectiveRequired<\n EdgeFormattingValues,\n | \"backgroundColor\"\n | \"backgroundSize\"\n | \"shadowColor\"\n | \"shadowSize\"\n | \"shadowX\"\n | \"shadowY\"\n >,\n viaNode: Point\n ): void {\n this._bezierCurve(ctx, values, viaNode);\n }\n\n /** @inheritDoc */\n public getViaNode(): Point {\n return this._getViaCoordinates();\n }\n\n /**\n * Compute the coordinates of the via node.\n *\n * @remarks\n * We do not use the to and fromPoints here to make the via nodes the same as edges without arrows.\n * @returns Cartesian coordinates of the via node.\n */\n protected _getViaCoordinates(): Point {\n // Assumption: x/y coordinates in from/to always defined\n const factor = this.options.smooth.roundness;\n const type = this.options.smooth.type;\n let dx = Math.abs(this.from.x - this.to.x);\n let dy = Math.abs(this.from.y - this.to.y);\n if (type === \"discrete\" || type === \"diagonalCross\") {\n let stepX;\n let stepY;\n\n if (dx <= dy) {\n stepX = stepY = factor * dy;\n } else {\n stepX = stepY = factor * dx;\n }\n\n if (this.from.x > this.to.x) {\n stepX = -stepX;\n }\n if (this.from.y >= this.to.y) {\n stepY = -stepY;\n }\n\n let xVia = this.from.x + stepX;\n let yVia = this.from.y + stepY;\n\n if (type === \"discrete\") {\n if (dx <= dy) {\n xVia = dx < factor * dy ? this.from.x : xVia;\n } else {\n yVia = dy < factor * dx ? this.from.y : yVia;\n }\n }\n\n return { x: xVia, y: yVia };\n } else if (type === \"straightCross\") {\n let stepX = (1 - factor) * dx;\n let stepY = (1 - factor) * dy;\n\n if (dx <= dy) {\n // up - down\n stepX = 0;\n if (this.from.y < this.to.y) {\n stepY = -stepY;\n }\n } else {\n // left - right\n if (this.from.x < this.to.x) {\n stepX = -stepX;\n }\n stepY = 0;\n }\n\n return {\n x: this.to.x + stepX,\n y: this.to.y + stepY,\n };\n } else if (type === \"horizontal\") {\n let stepX = (1 - factor) * dx;\n if (this.from.x < this.to.x) {\n stepX = -stepX;\n }\n\n return {\n x: this.to.x + stepX,\n y: this.from.y,\n };\n } else if (type === \"vertical\") {\n let stepY = (1 - factor) * dy;\n if (this.from.y < this.to.y) {\n stepY = -stepY;\n }\n\n return {\n x: this.from.x,\n y: this.to.y + stepY,\n };\n } else if (type === \"curvedCW\") {\n dx = this.to.x - this.from.x;\n dy = this.from.y - this.to.y;\n const radius = Math.sqrt(dx * dx + dy * dy);\n const pi = Math.PI;\n\n const originalAngle = Math.atan2(dy, dx);\n const myAngle = (originalAngle + (factor * 0.5 + 0.5) * pi) % (2 * pi);\n\n return {\n x: this.from.x + (factor * 0.5 + 0.5) * radius * Math.sin(myAngle),\n y: this.from.y + (factor * 0.5 + 0.5) * radius * Math.cos(myAngle),\n };\n } else if (type === \"curvedCCW\") {\n dx = this.to.x - this.from.x;\n dy = this.from.y - this.to.y;\n const radius = Math.sqrt(dx * dx + dy * dy);\n const pi = Math.PI;\n\n const originalAngle = Math.atan2(dy, dx);\n const myAngle = (originalAngle + (-factor * 0.5 + 0.5) * pi) % (2 * pi);\n\n return {\n x: this.from.x + (factor * 0.5 + 0.5) * radius * Math.sin(myAngle),\n y: this.from.y + (factor * 0.5 + 0.5) * radius * Math.cos(myAngle),\n };\n } else {\n // continuous\n let stepX;\n let stepY;\n\n if (dx <= dy) {\n stepX = stepY = factor * dy;\n } else {\n stepX = stepY = factor * dx;\n }\n\n if (this.from.x > this.to.x) {\n stepX = -stepX;\n }\n if (this.from.y >= this.to.y) {\n stepY = -stepY;\n }\n\n let xVia = this.from.x + stepX;\n let yVia = this.from.y + stepY;\n\n if (dx <= dy) {\n if (this.from.x <= this.to.x) {\n xVia = this.to.x < xVia ? this.to.x : xVia;\n } else {\n xVia = this.to.x > xVia ? this.to.x : xVia;\n }\n } else {\n if (this.from.y >= this.to.y) {\n yVia = this.to.y > yVia ? this.to.y : yVia;\n } else {\n yVia = this.to.y < yVia ? this.to.y : yVia;\n }\n }\n\n return { x: xVia, y: yVia };\n }\n }\n\n /** @inheritDoc */\n protected _findBorderPosition(\n nearNode: VNode,\n ctx: CanvasRenderingContext2D,\n options: { via?: Point } = {}\n ): PointT {\n return this._findBorderPositionBezier(nearNode, ctx, options.via);\n }\n\n /** @inheritDoc */\n protected _getDistanceToEdge(\n x1: number,\n y1: number,\n x2: number,\n y2: number,\n x3: number,\n y3: number,\n viaNode = this._getViaCoordinates()\n ) {\n // x3,y3 is the point\n return this._getDistanceToBezierEdge(x1, y1, x2, y2, x3, y3, viaNode);\n }\n\n /** @inheritDoc */\n public getPoint(\n position: number,\n viaNode: Point = this._getViaCoordinates()\n ): Point {\n const t = position;\n const x =\n Math.pow(1 - t, 2) * this.fromPoint.x +\n 2 * t * (1 - t) * viaNode.x +\n Math.pow(t, 2) * this.toPoint.x;\n const y =\n Math.pow(1 - t, 2) * this.fromPoint.y +\n 2 * t * (1 - t) * viaNode.y +\n Math.pow(t, 2) * this.toPoint.y;\n\n return { x: x, y: y };\n }\n}\n","import { BezierEdgeBase } from \"./bezier-edge-base\";\nimport { Label, EdgeOptions, Point, VBody } from \"./types\";\n\n/**\n * A Base Class for all Cubic Bezier Edges. Bezier curves are used to model\n * smooth gradual curves in paths between nodes.\n *\n * @augments BezierEdgeBase\n */\nexport abstract class CubicBezierEdgeBase extends BezierEdgeBase {\n /**\n * Create a new instance.\n *\n * @param options - The options object of given edge.\n * @param body - The body of the network.\n * @param labelModule - Label module.\n */\n public constructor(options: EdgeOptions, body: VBody, labelModule: Label) {\n super(options, body, labelModule);\n }\n\n /**\n * Calculate the distance between a point (x3,y3) and a line segment from (x1,y1) to (x2,y2).\n *\n * @remarks\n * http://stackoverflow.com/questions/849211/shortest-distancae-between-a-point-and-a-line-segment\n * https://en.wikipedia.org/wiki/B%C3%A9zier_curve\n * @param x1 - First end of the line segment on the x axis.\n * @param y1 - First end of the line segment on the y axis.\n * @param x2 - Second end of the line segment on the x axis.\n * @param y2 - Second end of the line segment on the y axis.\n * @param x3 - Position of the point on the x axis.\n * @param y3 - Position of the point on the y axis.\n * @param via1 - The first point this edge passes through.\n * @param via2 - The second point this edge passes through.\n * @returns The distance between the line segment and the point.\n */\n protected _getDistanceToBezierEdge2(\n x1: number,\n y1: number,\n x2: number,\n y2: number,\n x3: number,\n y3: number,\n via1: Point,\n via2: Point\n ): number {\n // x3,y3 is the point\n let minDistance = 1e9;\n let lastX = x1;\n let lastY = y1;\n const vec = [0, 0, 0, 0];\n for (let i = 1; i < 10; i++) {\n const t = 0.1 * i;\n vec[0] = Math.pow(1 - t, 3);\n vec[1] = 3 * t * Math.pow(1 - t, 2);\n vec[2] = 3 * Math.pow(t, 2) * (1 - t);\n vec[3] = Math.pow(t, 3);\n const x = vec[0] * x1 + vec[1] * via1.x + vec[2] * via2.x + vec[3] * x2;\n const y = vec[0] * y1 + vec[1] * via1.y + vec[2] * via2.y + vec[3] * y2;\n if (i > 0) {\n const distance = this._getDistanceToLine(lastX, lastY, x, y, x3, y3);\n minDistance = distance < minDistance ? distance : minDistance;\n }\n lastX = x;\n lastY = y;\n }\n\n return minDistance;\n }\n}\n","import { CubicBezierEdgeBase } from \"./util/cubic-bezier-edge-base\";\nimport {\n EdgeFormattingValues,\n Label,\n EdgeOptions,\n Point,\n PointT,\n SelectiveRequired,\n VBody,\n VNode,\n} from \"./util/types\";\n\n/**\n * A Cubic Bezier Edge. Bezier curves are used to model smooth gradual curves in paths between nodes.\n */\nexport class CubicBezierEdge extends CubicBezierEdgeBase<[Point, Point]> {\n /**\n * Create a new instance.\n *\n * @param options - The options object of given edge.\n * @param body - The body of the network.\n * @param labelModule - Label module.\n */\n public constructor(options: EdgeOptions, body: VBody, labelModule: Label) {\n super(options, body, labelModule);\n }\n\n /** @inheritDoc */\n protected _line(\n ctx: CanvasRenderingContext2D,\n values: SelectiveRequired<\n EdgeFormattingValues,\n | \"backgroundColor\"\n | \"backgroundSize\"\n | \"shadowColor\"\n | \"shadowSize\"\n | \"shadowX\"\n | \"shadowY\"\n >,\n viaNodes: [Point, Point]\n ): void {\n // get the coordinates of the support points.\n const via1 = viaNodes[0];\n const via2 = viaNodes[1];\n this._bezierCurve(ctx, values, via1, via2);\n }\n\n /**\n * Compute the additional points the edge passes through.\n *\n * @returns Cartesian coordinates of the points the edge passes through.\n */\n protected _getViaCoordinates(): [Point, Point] {\n const dx = this.from.x - this.to.x;\n const dy = this.from.y - this.to.y;\n\n let x1: number;\n let y1: number;\n let x2: number;\n let y2: number;\n const roundness = this.options.smooth.roundness;\n\n // horizontal if x > y or if direction is forced or if direction is horizontal\n if (\n (Math.abs(dx) > Math.abs(dy) ||\n this.options.smooth.forceDirection === true ||\n this.options.smooth.forceDirection === \"horizontal\") &&\n this.options.smooth.forceDirection !== \"vertical\"\n ) {\n y1 = this.from.y;\n y2 = this.to.y;\n x1 = this.from.x - roundness * dx;\n x2 = this.to.x + roundness * dx;\n } else {\n y1 = this.from.y - roundness * dy;\n y2 = this.to.y + roundness * dy;\n x1 = this.from.x;\n x2 = this.to.x;\n }\n\n return [\n { x: x1, y: y1 },\n { x: x2, y: y2 },\n ];\n }\n\n /** @inheritDoc */\n public getViaNode(): [Point, Point] {\n return this._getViaCoordinates();\n }\n\n /** @inheritDoc */\n protected _findBorderPosition(\n nearNode: VNode,\n ctx: CanvasRenderingContext2D\n ): PointT {\n return this._findBorderPositionBezier(nearNode, ctx);\n }\n\n /** @inheritDoc */\n protected _getDistanceToEdge(\n x1: number,\n y1: number,\n x2: number,\n y2: number,\n x3: number,\n y3: number,\n [via1, via2]: [Point, Point] = this._getViaCoordinates()\n ): number {\n // x3,y3 is the point\n return this._getDistanceToBezierEdge2(x1, y1, x2, y2, x3, y3, via1, via2);\n }\n\n /** @inheritDoc */\n public getPoint(\n position: number,\n [via1, via2]: [Point, Point] = this._getViaCoordinates()\n ): Point {\n const t = position;\n const vec: [number, number, number, number] = [\n Math.pow(1 - t, 3),\n 3 * t * Math.pow(1 - t, 2),\n 3 * Math.pow(t, 2) * (1 - t),\n Math.pow(t, 3),\n ];\n const x =\n vec[0] * this.fromPoint.x +\n vec[1] * via1.x +\n vec[2] * via2.x +\n vec[3] * this.toPoint.x;\n const y =\n vec[0] * this.fromPoint.y +\n vec[1] * via1.y +\n vec[2] * via2.y +\n vec[3] * this.toPoint.y;\n\n return { x: x, y: y };\n }\n}\n","import { EdgeBase } from \"./util/edge-base\";\nimport {\n EdgeFormattingValues,\n Label,\n EdgeOptions,\n Point,\n PointT,\n SelectiveRequired,\n VBody,\n VNode,\n} from \"./util/types\";\n\n/**\n * A Straight Edge.\n */\nexport class StraightEdge extends EdgeBase {\n /**\n * Create a new instance.\n *\n * @param options - The options object of given edge.\n * @param body - The body of the network.\n * @param labelModule - Label module.\n */\n public constructor(options: EdgeOptions, body: VBody, labelModule: Label) {\n super(options, body, labelModule);\n }\n\n /** @inheritDoc */\n protected _line(\n ctx: CanvasRenderingContext2D,\n values: SelectiveRequired<\n EdgeFormattingValues,\n \"shadowColor\" | \"shadowSize\" | \"shadowX\" | \"shadowY\"\n >\n ): void {\n // draw a straight line\n ctx.beginPath();\n ctx.moveTo(this.fromPoint.x, this.fromPoint.y);\n ctx.lineTo(this.toPoint.x, this.toPoint.y);\n // draw shadow if enabled\n this.enableShadow(ctx, values);\n ctx.stroke();\n this.disableShadow(ctx, values);\n }\n\n /** @inheritDoc */\n public getViaNode(): undefined {\n return undefined;\n }\n\n /** @inheritDoc */\n public getPoint(position: number): Point {\n return {\n x: (1 - position) * this.fromPoint.x + position * this.toPoint.x,\n y: (1 - position) * this.fromPoint.y + position * this.toPoint.y,\n };\n }\n\n /** @inheritDoc */\n protected _findBorderPosition(\n nearNode: VNode,\n ctx: CanvasRenderingContext2D\n ): PointT {\n let node1 = this.to;\n let node2 = this.from;\n if (nearNode.id === this.from.id) {\n node1 = this.from;\n node2 = this.to;\n }\n\n const angle = Math.atan2(node1.y - node2.y, node1.x - node2.x);\n const dx = node1.x - node2.x;\n const dy = node1.y - node2.y;\n const edgeSegmentLength = Math.sqrt(dx * dx + dy * dy);\n const toBorderDist = nearNode.distanceToBorder(ctx, angle);\n const toBorderPoint =\n (edgeSegmentLength - toBorderDist) / edgeSegmentLength;\n\n return {\n x: (1 - toBorderPoint) * node2.x + toBorderPoint * node1.x,\n y: (1 - toBorderPoint) * node2.y + toBorderPoint * node1.y,\n t: 0,\n };\n }\n\n /** @inheritDoc */\n protected _getDistanceToEdge(\n x1: number,\n y1: number,\n x2: number,\n y2: number,\n x3: number,\n y3: number\n ): number {\n // x3,y3 is the point\n return this._getDistanceToLine(x1, y1, x2, y2, x3, y3);\n }\n}\n","import {\n bridgeObject,\n deepExtend,\n isString,\n mergeOptions,\n selectiveDeepExtend,\n} from \"vis-util/esnext\";\nimport Label from \"./shared/Label\";\nimport {\n choosify,\n getSelfRefCoordinates,\n isValidLabel,\n pointInRect,\n} from \"./shared/ComponentUtil\";\nimport {\n BezierEdgeDynamic,\n BezierEdgeStatic,\n CubicBezierEdge,\n StraightEdge,\n} from \"./edges\";\n\n/**\n * An edge connects two nodes and has a specific direction.\n */\nclass Edge {\n /**\n * @param {object} options values specific to this edge, must contain at least 'from' and 'to'\n * @param {object} body shared state from Network instance\n * @param {Network.Images} imagelist A list with images. Only needed when the edge has image arrows.\n * @param {object} globalOptions options from the EdgesHandler instance\n * @param {object} defaultOptions default options from the EdgeHandler instance. Value and reference are constant\n */\n constructor(options, body, imagelist, globalOptions, defaultOptions) {\n if (body === undefined) {\n throw new Error(\"No body provided\");\n }\n\n // Since globalOptions is constant in values as well as reference,\n // Following needs to be done only once.\n\n this.options = bridgeObject(globalOptions);\n this.globalOptions = globalOptions;\n this.defaultOptions = defaultOptions;\n this.body = body;\n this.imagelist = imagelist;\n\n // initialize variables\n this.id = undefined;\n this.fromId = undefined;\n this.toId = undefined;\n this.selected = false;\n this.hover = false;\n this.labelDirty = true;\n\n this.baseWidth = this.options.width;\n this.baseFontSize = this.options.font.size;\n\n this.from = undefined; // a node\n this.to = undefined; // a node\n\n this.edgeType = undefined;\n\n this.connected = false;\n\n this.labelModule = new Label(\n this.body,\n this.options,\n true /* It's an edge label */\n );\n this.setOptions(options);\n }\n\n /**\n * Set or overwrite options for the edge\n *\n * @param {object} options an object with options\n * @returns {undefined|boolean} undefined if no options, true if layout affecting data changed, false otherwise.\n */\n setOptions(options) {\n if (!options) {\n return;\n }\n\n // Following options if changed affect the layout.\n let affectsLayout =\n (typeof options.physics !== \"undefined\" &&\n this.options.physics !== options.physics) ||\n (typeof options.hidden !== \"undefined\" &&\n (this.options.hidden || false) !== (options.hidden || false)) ||\n (typeof options.from !== \"undefined\" &&\n this.options.from !== options.from) ||\n (typeof options.to !== \"undefined\" && this.options.to !== options.to);\n\n Edge.parseOptions(this.options, options, true, this.globalOptions);\n\n if (options.id !== undefined) {\n this.id = options.id;\n }\n if (options.from !== undefined) {\n this.fromId = options.from;\n }\n if (options.to !== undefined) {\n this.toId = options.to;\n }\n if (options.title !== undefined) {\n this.title = options.title;\n }\n if (options.value !== undefined) {\n options.value = parseFloat(options.value);\n }\n\n const pile = [options, this.options, this.defaultOptions];\n this.chooser = choosify(\"edge\", pile);\n\n // update label Module\n this.updateLabelModule(options);\n\n // Update edge type, this if changed affects the layout.\n affectsLayout = this.updateEdgeType() || affectsLayout;\n\n // if anything has been updates, reset the selection width and the hover width\n this._setInteractionWidths();\n\n // A node is connected when it has a from and to node that both exist in the network.body.nodes.\n this.connect();\n\n return affectsLayout;\n }\n\n /**\n *\n * @param {object} parentOptions\n * @param {object} newOptions\n * @param {boolean} [allowDeletion=false]\n * @param {object} [globalOptions={}]\n * @param {boolean} [copyFromGlobals=false]\n */\n static parseOptions(\n parentOptions,\n newOptions,\n allowDeletion = false,\n globalOptions = {},\n copyFromGlobals = false\n ) {\n const fields = [\n \"endPointOffset\",\n \"arrowStrikethrough\",\n \"id\",\n \"from\",\n \"hidden\",\n \"hoverWidth\",\n \"labelHighlightBold\",\n \"length\",\n \"line\",\n \"opacity\",\n \"physics\",\n \"scaling\",\n \"selectionWidth\",\n \"selfReferenceSize\",\n \"selfReference\",\n \"to\",\n \"title\",\n \"value\",\n \"width\",\n \"font\",\n \"chosen\",\n \"widthConstraint\",\n ];\n\n // only deep extend the items in the field array. These do not have shorthand.\n selectiveDeepExtend(fields, parentOptions, newOptions, allowDeletion);\n\n // Only use endPointOffset values (from and to) if it's valid values\n if (\n newOptions.endPointOffset !== undefined &&\n newOptions.endPointOffset.from !== undefined\n ) {\n if (Number.isFinite(newOptions.endPointOffset.from)) {\n parentOptions.endPointOffset.from = newOptions.endPointOffset.from;\n } else {\n parentOptions.endPointOffset.from =\n globalOptions.endPointOffset.from !== undefined\n ? globalOptions.endPointOffset.from\n : 0;\n console.error(\"endPointOffset.from is not a valid number\");\n }\n }\n\n if (\n newOptions.endPointOffset !== undefined &&\n newOptions.endPointOffset.to !== undefined\n ) {\n if (Number.isFinite(newOptions.endPointOffset.to)) {\n parentOptions.endPointOffset.to = newOptions.endPointOffset.to;\n } else {\n parentOptions.endPointOffset.to =\n globalOptions.endPointOffset.to !== undefined\n ? globalOptions.endPointOffset.to\n : 0;\n console.error(\"endPointOffset.to is not a valid number\");\n }\n }\n\n // Only copy label if it's a legal value.\n if (isValidLabel(newOptions.label)) {\n parentOptions.label = newOptions.label;\n } else if (!isValidLabel(parentOptions.label)) {\n parentOptions.label = undefined;\n }\n\n mergeOptions(parentOptions, newOptions, \"smooth\", globalOptions);\n mergeOptions(parentOptions, newOptions, \"shadow\", globalOptions);\n mergeOptions(parentOptions, newOptions, \"background\", globalOptions);\n\n if (newOptions.dashes !== undefined && newOptions.dashes !== null) {\n parentOptions.dashes = newOptions.dashes;\n } else if (allowDeletion === true && newOptions.dashes === null) {\n parentOptions.dashes = Object.create(globalOptions.dashes); // this sets the pointer of the option back to the global option.\n }\n\n // set the scaling newOptions\n if (newOptions.scaling !== undefined && newOptions.scaling !== null) {\n if (newOptions.scaling.min !== undefined) {\n parentOptions.scaling.min = newOptions.scaling.min;\n }\n if (newOptions.scaling.max !== undefined) {\n parentOptions.scaling.max = newOptions.scaling.max;\n }\n mergeOptions(\n parentOptions.scaling,\n newOptions.scaling,\n \"label\",\n globalOptions.scaling\n );\n } else if (allowDeletion === true && newOptions.scaling === null) {\n parentOptions.scaling = Object.create(globalOptions.scaling); // this sets the pointer of the option back to the global option.\n }\n\n // handle multiple input cases for arrows\n if (newOptions.arrows !== undefined && newOptions.arrows !== null) {\n if (typeof newOptions.arrows === \"string\") {\n const arrows = newOptions.arrows.toLowerCase();\n parentOptions.arrows.to.enabled = arrows.indexOf(\"to\") != -1;\n parentOptions.arrows.middle.enabled = arrows.indexOf(\"middle\") != -1;\n parentOptions.arrows.from.enabled = arrows.indexOf(\"from\") != -1;\n } else if (typeof newOptions.arrows === \"object\") {\n mergeOptions(\n parentOptions.arrows,\n newOptions.arrows,\n \"to\",\n globalOptions.arrows\n );\n mergeOptions(\n parentOptions.arrows,\n newOptions.arrows,\n \"middle\",\n globalOptions.arrows\n );\n mergeOptions(\n parentOptions.arrows,\n newOptions.arrows,\n \"from\",\n globalOptions.arrows\n );\n } else {\n throw new Error(\n \"The arrow newOptions can only be an object or a string. Refer to the documentation. You used:\" +\n JSON.stringify(newOptions.arrows)\n );\n }\n } else if (allowDeletion === true && newOptions.arrows === null) {\n parentOptions.arrows = Object.create(globalOptions.arrows); // this sets the pointer of the option back to the global option.\n }\n\n // handle multiple input cases for color\n if (newOptions.color !== undefined && newOptions.color !== null) {\n const fromColor = isString(newOptions.color)\n ? {\n color: newOptions.color,\n highlight: newOptions.color,\n hover: newOptions.color,\n inherit: false,\n opacity: 1,\n }\n : newOptions.color;\n const toColor = parentOptions.color;\n\n // If passed, fill in values from default options - required in the case of no prototype bridging\n if (copyFromGlobals) {\n deepExtend(toColor, globalOptions.color, false, allowDeletion);\n } else {\n // Clear local properties - need to do it like this in order to retain prototype bridges\n for (const i in toColor) {\n if (Object.prototype.hasOwnProperty.call(toColor, i)) {\n delete toColor[i];\n }\n }\n }\n\n if (isString(toColor)) {\n toColor.color = toColor;\n toColor.highlight = toColor;\n toColor.hover = toColor;\n toColor.inherit = false;\n if (fromColor.opacity === undefined) {\n toColor.opacity = 1.0; // set default\n }\n } else {\n let colorsDefined = false;\n if (fromColor.color !== undefined) {\n toColor.color = fromColor.color;\n colorsDefined = true;\n }\n if (fromColor.highlight !== undefined) {\n toColor.highlight = fromColor.highlight;\n colorsDefined = true;\n }\n if (fromColor.hover !== undefined) {\n toColor.hover = fromColor.hover;\n colorsDefined = true;\n }\n if (fromColor.inherit !== undefined) {\n toColor.inherit = fromColor.inherit;\n }\n if (fromColor.opacity !== undefined) {\n toColor.opacity = Math.min(1, Math.max(0, fromColor.opacity));\n }\n\n if (colorsDefined === true) {\n toColor.inherit = false;\n } else {\n if (toColor.inherit === undefined) {\n toColor.inherit = \"from\"; // Set default\n }\n }\n }\n } else if (allowDeletion === true && newOptions.color === null) {\n parentOptions.color = bridgeObject(globalOptions.color); // set the object back to the global options\n }\n\n if (allowDeletion === true && newOptions.font === null) {\n parentOptions.font = bridgeObject(globalOptions.font); // set the object back to the global options\n }\n\n if (Object.prototype.hasOwnProperty.call(newOptions, \"selfReferenceSize\")) {\n console.warn(\n \"The selfReferenceSize property has been deprecated. Please use selfReference property instead. The selfReference can be set like thise selfReference:{size:30, angle:Math.PI / 4}\"\n );\n parentOptions.selfReference.size = newOptions.selfReferenceSize;\n }\n }\n\n /**\n *\n * @returns {ArrowOptions}\n */\n getFormattingValues() {\n const toArrow =\n this.options.arrows.to === true ||\n this.options.arrows.to.enabled === true;\n const fromArrow =\n this.options.arrows.from === true ||\n this.options.arrows.from.enabled === true;\n const middleArrow =\n this.options.arrows.middle === true ||\n this.options.arrows.middle.enabled === true;\n const inheritsColor = this.options.color.inherit;\n const values = {\n toArrow: toArrow,\n toArrowScale: this.options.arrows.to.scaleFactor,\n toArrowType: this.options.arrows.to.type,\n toArrowSrc: this.options.arrows.to.src,\n toArrowImageWidth: this.options.arrows.to.imageWidth,\n toArrowImageHeight: this.options.arrows.to.imageHeight,\n middleArrow: middleArrow,\n middleArrowScale: this.options.arrows.middle.scaleFactor,\n middleArrowType: this.options.arrows.middle.type,\n middleArrowSrc: this.options.arrows.middle.src,\n middleArrowImageWidth: this.options.arrows.middle.imageWidth,\n middleArrowImageHeight: this.options.arrows.middle.imageHeight,\n fromArrow: fromArrow,\n fromArrowScale: this.options.arrows.from.scaleFactor,\n fromArrowType: this.options.arrows.from.type,\n fromArrowSrc: this.options.arrows.from.src,\n fromArrowImageWidth: this.options.arrows.from.imageWidth,\n fromArrowImageHeight: this.options.arrows.from.imageHeight,\n arrowStrikethrough: this.options.arrowStrikethrough,\n color: inheritsColor ? undefined : this.options.color.color,\n inheritsColor: inheritsColor,\n opacity: this.options.color.opacity,\n hidden: this.options.hidden,\n length: this.options.length,\n shadow: this.options.shadow.enabled,\n shadowColor: this.options.shadow.color,\n shadowSize: this.options.shadow.size,\n shadowX: this.options.shadow.x,\n shadowY: this.options.shadow.y,\n dashes: this.options.dashes,\n width: this.options.width,\n background: this.options.background.enabled,\n backgroundColor: this.options.background.color,\n backgroundSize: this.options.background.size,\n backgroundDashes: this.options.background.dashes,\n };\n if (this.selected || this.hover) {\n if (this.chooser === true) {\n if (this.selected) {\n const selectedWidth = this.options.selectionWidth;\n if (typeof selectedWidth === \"function\") {\n values.width = selectedWidth(values.width);\n } else if (typeof selectedWidth === \"number\") {\n values.width += selectedWidth;\n }\n values.width = Math.max(values.width, 0.3 / this.body.view.scale);\n values.color = this.options.color.highlight;\n values.shadow = this.options.shadow.enabled;\n } else if (this.hover) {\n const hoverWidth = this.options.hoverWidth;\n if (typeof hoverWidth === \"function\") {\n values.width = hoverWidth(values.width);\n } else if (typeof hoverWidth === \"number\") {\n values.width += hoverWidth;\n }\n values.width = Math.max(values.width, 0.3 / this.body.view.scale);\n values.color = this.options.color.hover;\n values.shadow = this.options.shadow.enabled;\n }\n } else if (typeof this.chooser === \"function\") {\n this.chooser(values, this.options.id, this.selected, this.hover);\n if (values.color !== undefined) {\n values.inheritsColor = false;\n }\n if (values.shadow === false) {\n if (\n values.shadowColor !== this.options.shadow.color ||\n values.shadowSize !== this.options.shadow.size ||\n values.shadowX !== this.options.shadow.x ||\n values.shadowY !== this.options.shadow.y\n ) {\n values.shadow = true;\n }\n }\n }\n } else {\n values.shadow = this.options.shadow.enabled;\n values.width = Math.max(values.width, 0.3 / this.body.view.scale);\n }\n return values;\n }\n\n /**\n * update the options in the label module\n *\n * @param {object} options\n */\n updateLabelModule(options) {\n const pile = [\n options,\n this.options,\n this.globalOptions, // Currently set global edge options\n this.defaultOptions,\n ];\n\n this.labelModule.update(this.options, pile);\n\n if (this.labelModule.baseSize !== undefined) {\n this.baseFontSize = this.labelModule.baseSize;\n }\n }\n\n /**\n * update the edge type, set the options\n *\n * @returns {boolean}\n */\n updateEdgeType() {\n const smooth = this.options.smooth;\n let dataChanged = false;\n let changeInType = true;\n if (this.edgeType !== undefined) {\n if (\n (this.edgeType instanceof BezierEdgeDynamic &&\n smooth.enabled === true &&\n smooth.type === \"dynamic\") ||\n (this.edgeType instanceof CubicBezierEdge &&\n smooth.enabled === true &&\n smooth.type === \"cubicBezier\") ||\n (this.edgeType instanceof BezierEdgeStatic &&\n smooth.enabled === true &&\n smooth.type !== \"dynamic\" &&\n smooth.type !== \"cubicBezier\") ||\n (this.edgeType instanceof StraightEdge && smooth.type.enabled === false)\n ) {\n changeInType = false;\n }\n if (changeInType === true) {\n dataChanged = this.cleanup();\n }\n }\n if (changeInType === true) {\n if (smooth.enabled === true) {\n if (smooth.type === \"dynamic\") {\n dataChanged = true;\n this.edgeType = new BezierEdgeDynamic(\n this.options,\n this.body,\n this.labelModule\n );\n } else if (smooth.type === \"cubicBezier\") {\n this.edgeType = new CubicBezierEdge(\n this.options,\n this.body,\n this.labelModule\n );\n } else {\n this.edgeType = new BezierEdgeStatic(\n this.options,\n this.body,\n this.labelModule\n );\n }\n } else {\n this.edgeType = new StraightEdge(\n this.options,\n this.body,\n this.labelModule\n );\n }\n } else {\n // if nothing changes, we just set the options.\n this.edgeType.setOptions(this.options);\n }\n return dataChanged;\n }\n\n /**\n * Connect an edge to its nodes\n */\n connect() {\n this.disconnect();\n\n this.from = this.body.nodes[this.fromId] || undefined;\n this.to = this.body.nodes[this.toId] || undefined;\n this.connected = this.from !== undefined && this.to !== undefined;\n\n if (this.connected === true) {\n this.from.attachEdge(this);\n this.to.attachEdge(this);\n } else {\n if (this.from) {\n this.from.detachEdge(this);\n }\n if (this.to) {\n this.to.detachEdge(this);\n }\n }\n\n this.edgeType.connect();\n }\n\n /**\n * Disconnect an edge from its nodes\n */\n disconnect() {\n if (this.from) {\n this.from.detachEdge(this);\n this.from = undefined;\n }\n if (this.to) {\n this.to.detachEdge(this);\n this.to = undefined;\n }\n\n this.connected = false;\n }\n\n /**\n * get the title of this edge.\n *\n * @returns {string} title The title of the edge, or undefined when no title\n * has been set.\n */\n getTitle() {\n return this.title;\n }\n\n /**\n * check if this node is selecte\n *\n * @returns {boolean} selected True if node is selected, else false\n */\n isSelected() {\n return this.selected;\n }\n\n /**\n * Retrieve the value of the edge. Can be undefined\n *\n * @returns {number} value\n */\n getValue() {\n return this.options.value;\n }\n\n /**\n * Adjust the value range of the edge. The edge will adjust it's width\n * based on its value.\n *\n * @param {number} min\n * @param {number} max\n * @param {number} total\n */\n setValueRange(min, max, total) {\n if (this.options.value !== undefined) {\n const scale = this.options.scaling.customScalingFunction(\n min,\n max,\n total,\n this.options.value\n );\n const widthDiff = this.options.scaling.max - this.options.scaling.min;\n if (this.options.scaling.label.enabled === true) {\n const fontDiff =\n this.options.scaling.label.max - this.options.scaling.label.min;\n this.options.font.size =\n this.options.scaling.label.min + scale * fontDiff;\n }\n this.options.width = this.options.scaling.min + scale * widthDiff;\n } else {\n this.options.width = this.baseWidth;\n this.options.font.size = this.baseFontSize;\n }\n\n this._setInteractionWidths();\n this.updateLabelModule();\n }\n\n /**\n *\n * @private\n */\n _setInteractionWidths() {\n if (typeof this.options.hoverWidth === \"function\") {\n this.edgeType.hoverWidth = this.options.hoverWidth(this.options.width);\n } else {\n this.edgeType.hoverWidth = this.options.hoverWidth + this.options.width;\n }\n if (typeof this.options.selectionWidth === \"function\") {\n this.edgeType.selectionWidth = this.options.selectionWidth(\n this.options.width\n );\n } else {\n this.edgeType.selectionWidth =\n this.options.selectionWidth + this.options.width;\n }\n }\n\n /**\n * Redraw a edge\n * Draw this edge in the given canvas\n * The 2d context of a HTML canvas can be retrieved by canvas.getContext(\"2d\");\n *\n * @param {CanvasRenderingContext2D} ctx\n */\n draw(ctx) {\n const values = this.getFormattingValues();\n if (values.hidden) {\n return;\n }\n\n // get the via node from the edge type\n const viaNode = this.edgeType.getViaNode();\n\n // draw line and label\n this.edgeType.drawLine(ctx, values, this.selected, this.hover, viaNode);\n this.drawLabel(ctx, viaNode);\n }\n\n /**\n * Redraw arrows\n * Draw this arrows in the given canvas\n * The 2d context of a HTML canvas can be retrieved by canvas.getContext(\"2d\");\n *\n * @param {CanvasRenderingContext2D} ctx\n */\n drawArrows(ctx) {\n const values = this.getFormattingValues();\n if (values.hidden) {\n return;\n }\n\n // get the via node from the edge type\n const viaNode = this.edgeType.getViaNode();\n const arrowData = {};\n\n // restore edge targets to defaults\n this.edgeType.fromPoint = this.edgeType.from;\n this.edgeType.toPoint = this.edgeType.to;\n\n // from and to arrows give a different end point for edges. we set them here\n if (values.fromArrow) {\n arrowData.from = this.edgeType.getArrowData(\n ctx,\n \"from\",\n viaNode,\n this.selected,\n this.hover,\n values\n );\n if (values.arrowStrikethrough === false)\n this.edgeType.fromPoint = arrowData.from.core;\n if (values.fromArrowSrc) {\n arrowData.from.image = this.imagelist.load(values.fromArrowSrc);\n }\n if (values.fromArrowImageWidth) {\n arrowData.from.imageWidth = values.fromArrowImageWidth;\n }\n if (values.fromArrowImageHeight) {\n arrowData.from.imageHeight = values.fromArrowImageHeight;\n }\n }\n if (values.toArrow) {\n arrowData.to = this.edgeType.getArrowData(\n ctx,\n \"to\",\n viaNode,\n this.selected,\n this.hover,\n values\n );\n if (values.arrowStrikethrough === false)\n this.edgeType.toPoint = arrowData.to.core;\n if (values.toArrowSrc) {\n arrowData.to.image = this.imagelist.load(values.toArrowSrc);\n }\n if (values.toArrowImageWidth) {\n arrowData.to.imageWidth = values.toArrowImageWidth;\n }\n if (values.toArrowImageHeight) {\n arrowData.to.imageHeight = values.toArrowImageHeight;\n }\n }\n\n // the middle arrow depends on the line, which can depend on the to and from arrows so we do this one lastly.\n if (values.middleArrow) {\n arrowData.middle = this.edgeType.getArrowData(\n ctx,\n \"middle\",\n viaNode,\n this.selected,\n this.hover,\n values\n );\n\n if (values.middleArrowSrc) {\n arrowData.middle.image = this.imagelist.load(values.middleArrowSrc);\n }\n if (values.middleArrowImageWidth) {\n arrowData.middle.imageWidth = values.middleArrowImageWidth;\n }\n if (values.middleArrowImageHeight) {\n arrowData.middle.imageHeight = values.middleArrowImageHeight;\n }\n }\n\n if (values.fromArrow) {\n this.edgeType.drawArrowHead(\n ctx,\n values,\n this.selected,\n this.hover,\n arrowData.from\n );\n }\n if (values.middleArrow) {\n this.edgeType.drawArrowHead(\n ctx,\n values,\n this.selected,\n this.hover,\n arrowData.middle\n );\n }\n if (values.toArrow) {\n this.edgeType.drawArrowHead(\n ctx,\n values,\n this.selected,\n this.hover,\n arrowData.to\n );\n }\n }\n\n /**\n *\n * @param {CanvasRenderingContext2D} ctx\n * @param {Node} viaNode\n */\n drawLabel(ctx, viaNode) {\n if (this.options.label !== undefined) {\n // set style\n const node1 = this.from;\n const node2 = this.to;\n\n if (this.labelModule.differentState(this.selected, this.hover)) {\n this.labelModule.getTextSize(ctx, this.selected, this.hover);\n }\n\n let point;\n if (node1.id != node2.id) {\n this.labelModule.pointToSelf = false;\n point = this.edgeType.getPoint(0.5, viaNode);\n ctx.save();\n\n const rotationPoint = this._getRotation(ctx);\n if (rotationPoint.angle != 0) {\n ctx.translate(rotationPoint.x, rotationPoint.y);\n ctx.rotate(rotationPoint.angle);\n }\n\n // draw the label\n this.labelModule.draw(ctx, point.x, point.y, this.selected, this.hover);\n\n /*\n // Useful debug code: draw a border around the label\n // This should **not** be enabled in production!\n var size = this.labelModule.getSize();; // ;; intentional so lint catches it\n ctx.strokeStyle = \"#ff0000\";\n ctx.strokeRect(size.left, size.top, size.width, size.height);\n // End debug code\n*/\n\n ctx.restore();\n } else {\n // Ignore the orientations.\n this.labelModule.pointToSelf = true;\n\n // get circle coordinates\n const coordinates = getSelfRefCoordinates(\n ctx,\n this.options.selfReference.angle,\n this.options.selfReference.size,\n node1\n );\n\n point = this._pointOnCircle(\n coordinates.x,\n coordinates.y,\n this.options.selfReference.size,\n this.options.selfReference.angle\n );\n\n this.labelModule.draw(ctx, point.x, point.y, this.selected, this.hover);\n }\n }\n }\n\n /**\n * Determine all visual elements of this edge instance, in which the given\n * point falls within the bounding shape.\n *\n * @param {point} point\n * @returns {Array.} list with the items which are on the point\n */\n getItemsOnPoint(point) {\n const ret = [];\n\n if (this.labelModule.visible()) {\n const rotationPoint = this._getRotation();\n if (pointInRect(this.labelModule.getSize(), point, rotationPoint)) {\n ret.push({ edgeId: this.id, labelId: 0 });\n }\n }\n\n const obj = {\n left: point.x,\n top: point.y,\n };\n\n if (this.isOverlappingWith(obj)) {\n ret.push({ edgeId: this.id });\n }\n\n return ret;\n }\n\n /**\n * Check if this object is overlapping with the provided object\n *\n * @param {object} obj an object with parameters left, top\n * @returns {boolean} True if location is located on the edge\n */\n isOverlappingWith(obj) {\n if (this.connected) {\n const distMax = 10;\n const xFrom = this.from.x;\n const yFrom = this.from.y;\n const xTo = this.to.x;\n const yTo = this.to.y;\n const xObj = obj.left;\n const yObj = obj.top;\n\n const dist = this.edgeType.getDistanceToEdge(\n xFrom,\n yFrom,\n xTo,\n yTo,\n xObj,\n yObj\n );\n\n return dist < distMax;\n } else {\n return false;\n }\n }\n\n /**\n * Determine the rotation point, if any.\n *\n * @param {CanvasRenderingContext2D} [ctx] if passed, do a recalculation of the label size\n * @returns {rotationPoint} the point to rotate around and the angle in radians to rotate\n * @private\n */\n _getRotation(ctx) {\n const viaNode = this.edgeType.getViaNode();\n const point = this.edgeType.getPoint(0.5, viaNode);\n\n if (ctx !== undefined) {\n this.labelModule.calculateLabelSize(\n ctx,\n this.selected,\n this.hover,\n point.x,\n point.y\n );\n }\n\n const ret = {\n x: point.x,\n y: this.labelModule.size.yLine,\n angle: 0,\n };\n\n if (!this.labelModule.visible()) {\n return ret; // Don't even bother doing the atan2, there's nothing to draw\n }\n\n if (this.options.font.align === \"horizontal\") {\n return ret; // No need to calculate angle\n }\n\n const dy = this.from.y - this.to.y;\n const dx = this.from.x - this.to.x;\n let angle = Math.atan2(dy, dx); // radians\n\n // rotate so that label is readable\n if ((angle < -1 && dx < 0) || (angle > 0 && dx < 0)) {\n angle += Math.PI;\n }\n ret.angle = angle;\n\n return ret;\n }\n\n /**\n * Get a point on a circle\n *\n * @param {number} x\n * @param {number} y\n * @param {number} radius\n * @param {number} angle\n * @returns {object} point\n * @private\n */\n _pointOnCircle(x, y, radius, angle) {\n return {\n x: x + radius * Math.cos(angle),\n y: y - radius * Math.sin(angle),\n };\n }\n\n /**\n * Sets selected state to true\n */\n select() {\n this.selected = true;\n }\n\n /**\n * Sets selected state to false\n */\n unselect() {\n this.selected = false;\n }\n\n /**\n * cleans all required things on delete\n *\n * @returns {*}\n */\n cleanup() {\n return this.edgeType.cleanup();\n }\n\n /**\n * Remove edge from the list and perform necessary cleanup.\n */\n remove() {\n this.cleanup();\n this.disconnect();\n delete this.body.edges[this.id];\n }\n\n /**\n * Check if both connecting nodes exist\n *\n * @returns {boolean}\n */\n endPointsValid() {\n return (\n this.body.nodes[this.fromId] !== undefined &&\n this.body.nodes[this.toId] !== undefined\n );\n }\n}\n\nexport default Edge;\n","import { deepExtend, forEach } from \"vis-util/esnext\";\nimport { DataSet, isDataViewLike } from \"vis-data/esnext\";\nimport Edge from \"./components/Edge\";\n\n/**\n * Handler for Edges\n */\nclass EdgesHandler {\n /**\n * @param {object} body\n * @param {Array.} images\n * @param {Array.} groups\n */\n constructor(body, images, groups) {\n this.body = body;\n this.images = images;\n this.groups = groups;\n\n // create the edge API in the body container\n this.body.functions.createEdge = this.create.bind(this);\n\n this.edgesListeners = {\n add: (event, params) => {\n this.add(params.items);\n },\n update: (event, params) => {\n this.update(params.items);\n },\n remove: (event, params) => {\n this.remove(params.items);\n },\n };\n\n this.options = {};\n this.defaultOptions = {\n arrows: {\n to: { enabled: false, scaleFactor: 1, type: \"arrow\" }, // boolean / {arrowScaleFactor:1} / {enabled: false, arrowScaleFactor:1}\n middle: { enabled: false, scaleFactor: 1, type: \"arrow\" },\n from: { enabled: false, scaleFactor: 1, type: \"arrow\" },\n },\n endPointOffset: {\n from: 0,\n to: 0,\n },\n arrowStrikethrough: true,\n color: {\n color: \"#848484\",\n highlight: \"#848484\",\n hover: \"#848484\",\n inherit: \"from\",\n opacity: 1.0,\n },\n dashes: false,\n font: {\n color: \"#343434\",\n size: 14, // px\n face: \"arial\",\n background: \"none\",\n strokeWidth: 2, // px\n strokeColor: \"#ffffff\",\n align: \"horizontal\",\n multi: false,\n vadjust: 0,\n bold: {\n mod: \"bold\",\n },\n boldital: {\n mod: \"bold italic\",\n },\n ital: {\n mod: \"italic\",\n },\n mono: {\n mod: \"\",\n size: 15, // px\n face: \"courier new\",\n vadjust: 2,\n },\n },\n hidden: false,\n hoverWidth: 1.5,\n label: undefined,\n labelHighlightBold: true,\n length: undefined,\n physics: true,\n scaling: {\n min: 1,\n max: 15,\n label: {\n enabled: true,\n min: 14,\n max: 30,\n maxVisible: 30,\n drawThreshold: 5,\n },\n customScalingFunction: function (min, max, total, value) {\n if (max === min) {\n return 0.5;\n } else {\n const scale = 1 / (max - min);\n return Math.max(0, (value - min) * scale);\n }\n },\n },\n selectionWidth: 1.5,\n selfReference: {\n size: 20,\n angle: Math.PI / 4,\n renderBehindTheNode: true,\n },\n shadow: {\n enabled: false,\n color: \"rgba(0,0,0,0.5)\",\n size: 10,\n x: 5,\n y: 5,\n },\n background: {\n enabled: false,\n color: \"rgba(111,111,111,1)\",\n size: 10,\n dashes: false,\n },\n smooth: {\n enabled: true,\n type: \"dynamic\",\n forceDirection: \"none\",\n roundness: 0.5,\n },\n title: undefined,\n width: 1,\n value: undefined,\n };\n\n deepExtend(this.options, this.defaultOptions);\n\n this.bindEventListeners();\n }\n\n /**\n * Binds event listeners\n */\n bindEventListeners() {\n // this allows external modules to force all dynamic curves to turn static.\n this.body.emitter.on(\"_forceDisableDynamicCurves\", (type, emit = true) => {\n if (type === \"dynamic\") {\n type = \"continuous\";\n }\n let dataChanged = false;\n for (const edgeId in this.body.edges) {\n if (Object.prototype.hasOwnProperty.call(this.body.edges, edgeId)) {\n const edge = this.body.edges[edgeId];\n const edgeData = this.body.data.edges.get(edgeId);\n\n // only forcibly remove the smooth curve if the data has been set of the edge has the smooth curves defined.\n // this is because a change in the global would not affect these curves.\n if (edgeData != null) {\n const smoothOptions = edgeData.smooth;\n if (smoothOptions !== undefined) {\n if (\n smoothOptions.enabled === true &&\n smoothOptions.type === \"dynamic\"\n ) {\n if (type === undefined) {\n edge.setOptions({ smooth: false });\n } else {\n edge.setOptions({ smooth: { type: type } });\n }\n dataChanged = true;\n }\n }\n }\n }\n }\n if (emit === true && dataChanged === true) {\n this.body.emitter.emit(\"_dataChanged\");\n }\n });\n\n // this is called when options of EXISTING nodes or edges have changed.\n //\n // NOTE: Not true, called when options have NOT changed, for both existing as well as new nodes.\n // See update() for logic.\n // TODO: Verify and examine the consequences of this. It might still trigger when\n // non-option fields have changed, but then reconnecting edges is still useless.\n // Alternatively, it might also be called when edges are removed.\n //\n this.body.emitter.on(\"_dataUpdated\", () => {\n this.reconnectEdges();\n });\n\n // refresh the edges. Used when reverting from hierarchical layout\n this.body.emitter.on(\"refreshEdges\", this.refresh.bind(this));\n this.body.emitter.on(\"refresh\", this.refresh.bind(this));\n this.body.emitter.on(\"destroy\", () => {\n forEach(this.edgesListeners, (callback, event) => {\n if (this.body.data.edges) this.body.data.edges.off(event, callback);\n });\n delete this.body.functions.createEdge;\n delete this.edgesListeners.add;\n delete this.edgesListeners.update;\n delete this.edgesListeners.remove;\n delete this.edgesListeners;\n });\n }\n\n /**\n *\n * @param {object} options\n */\n setOptions(options) {\n if (options !== undefined) {\n // use the parser from the Edge class to fill in all shorthand notations\n Edge.parseOptions(this.options, options, true, this.defaultOptions, true);\n\n // update smooth settings in all edges\n let dataChanged = false;\n if (options.smooth !== undefined) {\n for (const edgeId in this.body.edges) {\n if (Object.prototype.hasOwnProperty.call(this.body.edges, edgeId)) {\n dataChanged =\n this.body.edges[edgeId].updateEdgeType() || dataChanged;\n }\n }\n }\n\n // update fonts in all edges\n if (options.font !== undefined) {\n for (const edgeId in this.body.edges) {\n if (Object.prototype.hasOwnProperty.call(this.body.edges, edgeId)) {\n this.body.edges[edgeId].updateLabelModule();\n }\n }\n }\n\n // update the state of the variables if needed\n if (\n options.hidden !== undefined ||\n options.physics !== undefined ||\n dataChanged === true\n ) {\n this.body.emitter.emit(\"_dataChanged\");\n }\n }\n }\n\n /**\n * Load edges by reading the data table\n *\n * @param {Array | DataSet | DataView} edges The data containing the edges.\n * @param {boolean} [doNotEmit=false] - Suppress data changed event.\n * @private\n */\n setData(edges, doNotEmit = false) {\n const oldEdgesData = this.body.data.edges;\n\n if (isDataViewLike(\"id\", edges)) {\n this.body.data.edges = edges;\n } else if (Array.isArray(edges)) {\n this.body.data.edges = new DataSet();\n this.body.data.edges.add(edges);\n } else if (!edges) {\n this.body.data.edges = new DataSet();\n } else {\n throw new TypeError(\"Array or DataSet expected\");\n }\n\n // TODO: is this null or undefined or false?\n if (oldEdgesData) {\n // unsubscribe from old dataset\n forEach(this.edgesListeners, (callback, event) => {\n oldEdgesData.off(event, callback);\n });\n }\n\n // remove drawn edges\n this.body.edges = {};\n\n // TODO: is this null or undefined or false?\n if (this.body.data.edges) {\n // subscribe to new dataset\n forEach(this.edgesListeners, (callback, event) => {\n this.body.data.edges.on(event, callback);\n });\n\n // draw all new nodes\n const ids = this.body.data.edges.getIds();\n this.add(ids, true);\n }\n\n this.body.emitter.emit(\"_adjustEdgesForHierarchicalLayout\");\n if (doNotEmit === false) {\n this.body.emitter.emit(\"_dataChanged\");\n }\n }\n\n /**\n * Add edges\n *\n * @param {number[] | string[]} ids\n * @param {boolean} [doNotEmit=false]\n * @private\n */\n add(ids, doNotEmit = false) {\n const edges = this.body.edges;\n const edgesData = this.body.data.edges;\n\n for (let i = 0; i < ids.length; i++) {\n const id = ids[i];\n\n const oldEdge = edges[id];\n if (oldEdge) {\n oldEdge.disconnect();\n }\n\n const data = edgesData.get(id, { showInternalIds: true });\n edges[id] = this.create(data);\n }\n\n this.body.emitter.emit(\"_adjustEdgesForHierarchicalLayout\");\n\n if (doNotEmit === false) {\n this.body.emitter.emit(\"_dataChanged\");\n }\n }\n\n /**\n * Update existing edges, or create them when not yet existing\n *\n * @param {number[] | string[]} ids\n * @private\n */\n update(ids) {\n const edges = this.body.edges;\n const edgesData = this.body.data.edges;\n let dataChanged = false;\n for (let i = 0; i < ids.length; i++) {\n const id = ids[i];\n const data = edgesData.get(id);\n const edge = edges[id];\n if (edge !== undefined) {\n // update edge\n edge.disconnect();\n dataChanged = edge.setOptions(data) || dataChanged; // if a support node is added, data can be changed.\n edge.connect();\n } else {\n // create edge\n this.body.edges[id] = this.create(data);\n dataChanged = true;\n }\n }\n\n if (dataChanged === true) {\n this.body.emitter.emit(\"_adjustEdgesForHierarchicalLayout\");\n this.body.emitter.emit(\"_dataChanged\");\n } else {\n this.body.emitter.emit(\"_dataUpdated\");\n }\n }\n\n /**\n * Remove existing edges. Non existing ids will be ignored\n *\n * @param {number[] | string[]} ids\n * @param {boolean} [emit=true]\n * @private\n */\n remove(ids, emit = true) {\n if (ids.length === 0) return; // early out\n\n const edges = this.body.edges;\n forEach(ids, (id) => {\n const edge = edges[id];\n if (edge !== undefined) {\n edge.remove();\n }\n });\n\n if (emit) {\n this.body.emitter.emit(\"_dataChanged\");\n }\n }\n\n /**\n * Refreshes Edge Handler\n */\n refresh() {\n forEach(this.body.edges, (edge, edgeId) => {\n const data = this.body.data.edges.get(edgeId);\n if (data !== undefined) {\n edge.setOptions(data);\n }\n });\n }\n\n /**\n *\n * @param {object} properties\n * @returns {Edge}\n */\n create(properties) {\n return new Edge(\n properties,\n this.body,\n this.images,\n this.options,\n this.defaultOptions\n );\n }\n\n /**\n * Reconnect all edges\n *\n * @private\n */\n reconnectEdges() {\n let id;\n const nodes = this.body.nodes;\n const edges = this.body.edges;\n\n for (id in nodes) {\n if (Object.prototype.hasOwnProperty.call(nodes, id)) {\n nodes[id].edges = [];\n }\n }\n\n for (id in edges) {\n if (Object.prototype.hasOwnProperty.call(edges, id)) {\n const edge = edges[id];\n edge.from = null;\n edge.to = null;\n edge.connect();\n }\n }\n }\n\n /**\n *\n * @param {Edge.id} edgeId\n * @returns {Array}\n */\n getConnectedNodes(edgeId) {\n const nodeList = [];\n if (this.body.edges[edgeId] !== undefined) {\n const edge = this.body.edges[edgeId];\n if (edge.fromId !== undefined) {\n nodeList.push(edge.fromId);\n }\n if (edge.toId !== undefined) {\n nodeList.push(edge.toId);\n }\n }\n return nodeList;\n }\n\n /**\n * There is no direct relation between the nodes and the edges DataSet,\n * so the right place to do call this is in the handler for event `_dataUpdated`.\n */\n _updateState() {\n this._addMissingEdges();\n this._removeInvalidEdges();\n }\n\n /**\n * Scan for missing nodes and remove corresponding edges, if any.\n *\n * @private\n */\n _removeInvalidEdges() {\n const edgesToDelete = [];\n\n forEach(this.body.edges, (edge, id) => {\n const toNode = this.body.nodes[edge.toId];\n const fromNode = this.body.nodes[edge.fromId];\n\n // Skip clustering edges here, let the Clustering module handle those\n if (\n (toNode !== undefined && toNode.isCluster === true) ||\n (fromNode !== undefined && fromNode.isCluster === true)\n ) {\n return;\n }\n\n if (toNode === undefined || fromNode === undefined) {\n edgesToDelete.push(id);\n }\n });\n\n this.remove(edgesToDelete, false);\n }\n\n /**\n * add all edges from dataset that are not in the cached state\n *\n * @private\n */\n _addMissingEdges() {\n const edgesData = this.body.data.edges;\n if (edgesData === undefined || edgesData === null) {\n return; // No edges DataSet yet; can happen on startup\n }\n\n const edges = this.body.edges;\n const addIds = [];\n\n edgesData.forEach((edgeData, edgeId) => {\n const edge = edges[edgeId];\n if (edge === undefined) {\n addIds.push(edgeId);\n }\n });\n\n this.add(addIds, true);\n }\n}\n\nexport default EdgesHandler;\n","import { Alea } from \"vis-util/esnext\";\n\n/**\n * Barnes Hut Solver\n */\nclass BarnesHutSolver {\n /**\n * @param {object} body\n * @param {{physicsNodeIndices: Array, physicsEdgeIndices: Array, forces: {}, velocities: {}}} physicsBody\n * @param {object} options\n */\n constructor(body, physicsBody, options) {\n this.body = body;\n this.physicsBody = physicsBody;\n this.barnesHutTree;\n this.setOptions(options);\n this._rng = Alea(\"BARNES HUT SOLVER\");\n\n // debug: show grid\n // this.body.emitter.on(\"afterDrawing\", (ctx) => {this._debug(ctx,'#ff0000')})\n }\n\n /**\n *\n * @param {object} options\n */\n setOptions(options) {\n this.options = options;\n this.thetaInversed = 1 / this.options.theta;\n\n // if 1 then min distance = 0.5, if 0.5 then min distance = 0.5 + 0.5*node.shape.radius\n this.overlapAvoidanceFactor =\n 1 - Math.max(0, Math.min(1, this.options.avoidOverlap));\n }\n\n /**\n * This function calculates the forces the nodes apply on each other based on a gravitational model.\n * The Barnes Hut method is used to speed up this N-body simulation.\n *\n * @private\n */\n solve() {\n if (\n this.options.gravitationalConstant !== 0 &&\n this.physicsBody.physicsNodeIndices.length > 0\n ) {\n let node;\n const nodes = this.body.nodes;\n const nodeIndices = this.physicsBody.physicsNodeIndices;\n const nodeCount = nodeIndices.length;\n\n // create the tree\n const barnesHutTree = this._formBarnesHutTree(nodes, nodeIndices);\n\n // for debugging\n this.barnesHutTree = barnesHutTree;\n\n // place the nodes one by one recursively\n for (let i = 0; i < nodeCount; i++) {\n node = nodes[nodeIndices[i]];\n if (node.options.mass > 0) {\n // starting with root is irrelevant, it never passes the BarnesHutSolver condition\n this._getForceContributions(barnesHutTree.root, node);\n }\n }\n }\n }\n\n /**\n * @param {object} parentBranch\n * @param {Node} node\n * @private\n */\n _getForceContributions(parentBranch, node) {\n this._getForceContribution(parentBranch.children.NW, node);\n this._getForceContribution(parentBranch.children.NE, node);\n this._getForceContribution(parentBranch.children.SW, node);\n this._getForceContribution(parentBranch.children.SE, node);\n }\n\n /**\n * This function traverses the barnesHutTree. It checks when it can approximate distant nodes with their center of mass.\n * If a region contains a single node, we check if it is not itself, then we apply the force.\n *\n * @param {object} parentBranch\n * @param {Node} node\n * @private\n */\n _getForceContribution(parentBranch, node) {\n // we get no force contribution from an empty region\n if (parentBranch.childrenCount > 0) {\n // get the distance from the center of mass to the node.\n const dx = parentBranch.centerOfMass.x - node.x;\n const dy = parentBranch.centerOfMass.y - node.y;\n const distance = Math.sqrt(dx * dx + dy * dy);\n\n // BarnesHutSolver condition\n // original condition : s/d < theta = passed === d/s > 1/theta = passed\n // calcSize = 1/s --> d * 1/s > 1/theta = passed\n if (distance * parentBranch.calcSize > this.thetaInversed) {\n this._calculateForces(distance, dx, dy, node, parentBranch);\n } else {\n // Did not pass the condition, go into children if available\n if (parentBranch.childrenCount === 4) {\n this._getForceContributions(parentBranch, node);\n } else {\n // parentBranch must have only one node, if it was empty we wouldnt be here\n if (parentBranch.children.data.id != node.id) {\n // if it is not self\n this._calculateForces(distance, dx, dy, node, parentBranch);\n }\n }\n }\n }\n }\n\n /**\n * Calculate the forces based on the distance.\n *\n * @param {number} distance\n * @param {number} dx\n * @param {number} dy\n * @param {Node} node\n * @param {object} parentBranch\n * @private\n */\n _calculateForces(distance, dx, dy, node, parentBranch) {\n if (distance === 0) {\n distance = 0.1;\n dx = distance;\n }\n\n if (this.overlapAvoidanceFactor < 1 && node.shape.radius) {\n distance = Math.max(\n 0.1 + this.overlapAvoidanceFactor * node.shape.radius,\n distance - node.shape.radius\n );\n }\n\n // the dividing by the distance cubed instead of squared allows us to get the fx and fy components without sines and cosines\n // it is shorthand for gravityforce with distance squared and fx = dx/distance * gravityForce\n const gravityForce =\n (this.options.gravitationalConstant *\n parentBranch.mass *\n node.options.mass) /\n Math.pow(distance, 3);\n const fx = dx * gravityForce;\n const fy = dy * gravityForce;\n\n this.physicsBody.forces[node.id].x += fx;\n this.physicsBody.forces[node.id].y += fy;\n }\n\n /**\n * This function constructs the barnesHut tree recursively. It creates the root, splits it and starts placing the nodes.\n *\n * @param {Array.} nodes\n * @param {Array.} nodeIndices\n * @returns {{root: {centerOfMass: {x: number, y: number}, mass: number, range: {minX: number, maxX: number, minY: number, maxY: number}, size: number, calcSize: number, children: {data: null}, maxWidth: number, level: number, childrenCount: number}}} BarnesHutTree\n * @private\n */\n _formBarnesHutTree(nodes, nodeIndices) {\n let node;\n const nodeCount = nodeIndices.length;\n\n let minX = nodes[nodeIndices[0]].x;\n let minY = nodes[nodeIndices[0]].y;\n let maxX = nodes[nodeIndices[0]].x;\n let maxY = nodes[nodeIndices[0]].y;\n\n // get the range of the nodes\n for (let i = 1; i < nodeCount; i++) {\n const node = nodes[nodeIndices[i]];\n const x = node.x;\n const y = node.y;\n if (node.options.mass > 0) {\n if (x < minX) {\n minX = x;\n }\n if (x > maxX) {\n maxX = x;\n }\n if (y < minY) {\n minY = y;\n }\n if (y > maxY) {\n maxY = y;\n }\n }\n }\n // make the range a square\n const sizeDiff = Math.abs(maxX - minX) - Math.abs(maxY - minY); // difference between X and Y\n if (sizeDiff > 0) {\n minY -= 0.5 * sizeDiff;\n maxY += 0.5 * sizeDiff;\n } // xSize > ySize\n else {\n minX += 0.5 * sizeDiff;\n maxX -= 0.5 * sizeDiff;\n } // xSize < ySize\n\n const minimumTreeSize = 1e-5;\n const rootSize = Math.max(minimumTreeSize, Math.abs(maxX - minX));\n const halfRootSize = 0.5 * rootSize;\n const centerX = 0.5 * (minX + maxX),\n centerY = 0.5 * (minY + maxY);\n\n // construct the barnesHutTree\n const barnesHutTree = {\n root: {\n centerOfMass: { x: 0, y: 0 },\n mass: 0,\n range: {\n minX: centerX - halfRootSize,\n maxX: centerX + halfRootSize,\n minY: centerY - halfRootSize,\n maxY: centerY + halfRootSize,\n },\n size: rootSize,\n calcSize: 1 / rootSize,\n children: { data: null },\n maxWidth: 0,\n level: 0,\n childrenCount: 4,\n },\n };\n this._splitBranch(barnesHutTree.root);\n\n // place the nodes one by one recursively\n for (let i = 0; i < nodeCount; i++) {\n node = nodes[nodeIndices[i]];\n if (node.options.mass > 0) {\n this._placeInTree(barnesHutTree.root, node);\n }\n }\n\n // make global\n return barnesHutTree;\n }\n\n /**\n * this updates the mass of a branch. this is increased by adding a node.\n *\n * @param {object} parentBranch\n * @param {Node} node\n * @private\n */\n _updateBranchMass(parentBranch, node) {\n const centerOfMass = parentBranch.centerOfMass;\n const totalMass = parentBranch.mass + node.options.mass;\n const totalMassInv = 1 / totalMass;\n\n centerOfMass.x =\n centerOfMass.x * parentBranch.mass + node.x * node.options.mass;\n centerOfMass.x *= totalMassInv;\n\n centerOfMass.y =\n centerOfMass.y * parentBranch.mass + node.y * node.options.mass;\n centerOfMass.y *= totalMassInv;\n\n parentBranch.mass = totalMass;\n const biggestSize = Math.max(\n Math.max(node.height, node.radius),\n node.width\n );\n parentBranch.maxWidth =\n parentBranch.maxWidth < biggestSize ? biggestSize : parentBranch.maxWidth;\n }\n\n /**\n * determine in which branch the node will be placed.\n *\n * @param {object} parentBranch\n * @param {Node} node\n * @param {boolean} skipMassUpdate\n * @private\n */\n _placeInTree(parentBranch, node, skipMassUpdate) {\n if (skipMassUpdate != true || skipMassUpdate === undefined) {\n // update the mass of the branch.\n this._updateBranchMass(parentBranch, node);\n }\n\n const range = parentBranch.children.NW.range;\n let region;\n if (range.maxX > node.x) {\n // in NW or SW\n if (range.maxY > node.y) {\n region = \"NW\";\n } else {\n region = \"SW\";\n }\n } else {\n // in NE or SE\n if (range.maxY > node.y) {\n region = \"NE\";\n } else {\n region = \"SE\";\n }\n }\n\n this._placeInRegion(parentBranch, node, region);\n }\n\n /**\n * actually place the node in a region (or branch)\n *\n * @param {object} parentBranch\n * @param {Node} node\n * @param {'NW'| 'NE' | 'SW' | 'SE'} region\n * @private\n */\n _placeInRegion(parentBranch, node, region) {\n const children = parentBranch.children[region];\n\n switch (children.childrenCount) {\n case 0: // place node here\n children.children.data = node;\n children.childrenCount = 1;\n this._updateBranchMass(children, node);\n break;\n case 1: // convert into children\n // if there are two nodes exactly overlapping (on init, on opening of cluster etc.)\n // we move one node a little bit and we do not put it in the tree.\n if (\n children.children.data.x === node.x &&\n children.children.data.y === node.y\n ) {\n node.x += this._rng();\n node.y += this._rng();\n } else {\n this._splitBranch(children);\n this._placeInTree(children, node);\n }\n break;\n case 4: // place in branch\n this._placeInTree(children, node);\n break;\n }\n }\n\n /**\n * this function splits a branch into 4 sub branches. If the branch contained a node, we place it in the subbranch\n * after the split is complete.\n *\n * @param {object} parentBranch\n * @private\n */\n _splitBranch(parentBranch) {\n // if the branch is shaded with a node, replace the node in the new subset.\n let containedNode = null;\n if (parentBranch.childrenCount === 1) {\n containedNode = parentBranch.children.data;\n parentBranch.mass = 0;\n parentBranch.centerOfMass.x = 0;\n parentBranch.centerOfMass.y = 0;\n }\n parentBranch.childrenCount = 4;\n parentBranch.children.data = null;\n this._insertRegion(parentBranch, \"NW\");\n this._insertRegion(parentBranch, \"NE\");\n this._insertRegion(parentBranch, \"SW\");\n this._insertRegion(parentBranch, \"SE\");\n\n if (containedNode != null) {\n this._placeInTree(parentBranch, containedNode);\n }\n }\n\n /**\n * This function subdivides the region into four new segments.\n * Specifically, this inserts a single new segment.\n * It fills the children section of the parentBranch\n *\n * @param {object} parentBranch\n * @param {'NW'| 'NE' | 'SW' | 'SE'} region\n * @private\n */\n _insertRegion(parentBranch, region) {\n let minX, maxX, minY, maxY;\n const childSize = 0.5 * parentBranch.size;\n switch (region) {\n case \"NW\":\n minX = parentBranch.range.minX;\n maxX = parentBranch.range.minX + childSize;\n minY = parentBranch.range.minY;\n maxY = parentBranch.range.minY + childSize;\n break;\n case \"NE\":\n minX = parentBranch.range.minX + childSize;\n maxX = parentBranch.range.maxX;\n minY = parentBranch.range.minY;\n maxY = parentBranch.range.minY + childSize;\n break;\n case \"SW\":\n minX = parentBranch.range.minX;\n maxX = parentBranch.range.minX + childSize;\n minY = parentBranch.range.minY + childSize;\n maxY = parentBranch.range.maxY;\n break;\n case \"SE\":\n minX = parentBranch.range.minX + childSize;\n maxX = parentBranch.range.maxX;\n minY = parentBranch.range.minY + childSize;\n maxY = parentBranch.range.maxY;\n break;\n }\n\n parentBranch.children[region] = {\n centerOfMass: { x: 0, y: 0 },\n mass: 0,\n range: { minX: minX, maxX: maxX, minY: minY, maxY: maxY },\n size: 0.5 * parentBranch.size,\n calcSize: 2 * parentBranch.calcSize,\n children: { data: null },\n maxWidth: 0,\n level: parentBranch.level + 1,\n childrenCount: 0,\n };\n }\n\n //--------------------------- DEBUGGING BELOW ---------------------------//\n\n /**\n * This function is for debugging purposed, it draws the tree.\n *\n * @param {CanvasRenderingContext2D} ctx\n * @param {string} color\n * @private\n */\n _debug(ctx, color) {\n if (this.barnesHutTree !== undefined) {\n ctx.lineWidth = 1;\n\n this._drawBranch(this.barnesHutTree.root, ctx, color);\n }\n }\n\n /**\n * This function is for debugging purposes. It draws the branches recursively.\n *\n * @param {object} branch\n * @param {CanvasRenderingContext2D} ctx\n * @param {string} color\n * @private\n */\n _drawBranch(branch, ctx, color) {\n if (color === undefined) {\n color = \"#FF0000\";\n }\n\n if (branch.childrenCount === 4) {\n this._drawBranch(branch.children.NW, ctx);\n this._drawBranch(branch.children.NE, ctx);\n this._drawBranch(branch.children.SE, ctx);\n this._drawBranch(branch.children.SW, ctx);\n }\n ctx.strokeStyle = color;\n ctx.beginPath();\n ctx.moveTo(branch.range.minX, branch.range.minY);\n ctx.lineTo(branch.range.maxX, branch.range.minY);\n ctx.stroke();\n\n ctx.beginPath();\n ctx.moveTo(branch.range.maxX, branch.range.minY);\n ctx.lineTo(branch.range.maxX, branch.range.maxY);\n ctx.stroke();\n\n ctx.beginPath();\n ctx.moveTo(branch.range.maxX, branch.range.maxY);\n ctx.lineTo(branch.range.minX, branch.range.maxY);\n ctx.stroke();\n\n ctx.beginPath();\n ctx.moveTo(branch.range.minX, branch.range.maxY);\n ctx.lineTo(branch.range.minX, branch.range.minY);\n ctx.stroke();\n\n /*\n if (branch.mass > 0) {\n ctx.circle(branch.centerOfMass.x, branch.centerOfMass.y, 3*branch.mass);\n ctx.stroke();\n }\n */\n }\n}\n\nexport default BarnesHutSolver;\n","import { Alea } from \"vis-util/esnext\";\n\n/**\n * Repulsion Solver\n */\nclass RepulsionSolver {\n /**\n * @param {object} body\n * @param {{physicsNodeIndices: Array, physicsEdgeIndices: Array, forces: {}, velocities: {}}} physicsBody\n * @param {object} options\n */\n constructor(body, physicsBody, options) {\n this._rng = Alea(\"REPULSION SOLVER\");\n\n this.body = body;\n this.physicsBody = physicsBody;\n this.setOptions(options);\n }\n\n /**\n *\n * @param {object} options\n */\n setOptions(options) {\n this.options = options;\n }\n\n /**\n * Calculate the forces the nodes apply on each other based on a repulsion field.\n * This field is linearly approximated.\n *\n * @private\n */\n solve() {\n let dx, dy, distance, fx, fy, repulsingForce, node1, node2;\n\n const nodes = this.body.nodes;\n const nodeIndices = this.physicsBody.physicsNodeIndices;\n const forces = this.physicsBody.forces;\n\n // repulsing forces between nodes\n const nodeDistance = this.options.nodeDistance;\n\n // approximation constants\n const a = -2 / 3 / nodeDistance;\n const b = 4 / 3;\n\n // we loop from i over all but the last entree in the array\n // j loops from i+1 to the last. This way we do not double count any of the indices, nor i === j\n for (let i = 0; i < nodeIndices.length - 1; i++) {\n node1 = nodes[nodeIndices[i]];\n for (let j = i + 1; j < nodeIndices.length; j++) {\n node2 = nodes[nodeIndices[j]];\n\n dx = node2.x - node1.x;\n dy = node2.y - node1.y;\n distance = Math.sqrt(dx * dx + dy * dy);\n\n // same condition as BarnesHutSolver, making sure nodes are never 100% overlapping.\n if (distance === 0) {\n distance = 0.1 * this._rng();\n dx = distance;\n }\n\n if (distance < 2 * nodeDistance) {\n if (distance < 0.5 * nodeDistance) {\n repulsingForce = 1.0;\n } else {\n repulsingForce = a * distance + b; // linear approx of 1 / (1 + Math.exp((distance / nodeDistance - 1) * steepness))\n }\n repulsingForce = repulsingForce / distance;\n\n fx = dx * repulsingForce;\n fy = dy * repulsingForce;\n\n forces[node1.id].x -= fx;\n forces[node1.id].y -= fy;\n forces[node2.id].x += fx;\n forces[node2.id].y += fy;\n }\n }\n }\n }\n}\n\nexport default RepulsionSolver;\n","/**\n * Hierarchical Repulsion Solver\n */\nclass HierarchicalRepulsionSolver {\n /**\n * @param {object} body\n * @param {{physicsNodeIndices: Array, physicsEdgeIndices: Array, forces: {}, velocities: {}}} physicsBody\n * @param {object} options\n */\n constructor(body, physicsBody, options) {\n this.body = body;\n this.physicsBody = physicsBody;\n this.setOptions(options);\n }\n\n /**\n *\n * @param {object} options\n */\n setOptions(options) {\n this.options = options;\n this.overlapAvoidanceFactor = Math.max(\n 0,\n Math.min(1, this.options.avoidOverlap || 0)\n );\n }\n\n /**\n * Calculate the forces the nodes apply on each other based on a repulsion field.\n * This field is linearly approximated.\n *\n * @private\n */\n solve() {\n const nodes = this.body.nodes;\n const nodeIndices = this.physicsBody.physicsNodeIndices;\n const forces = this.physicsBody.forces;\n\n // repulsing forces between nodes\n const nodeDistance = this.options.nodeDistance;\n\n // we loop from i over all but the last entree in the array\n // j loops from i+1 to the last. This way we do not double count any of the indices, nor i === j\n for (let i = 0; i < nodeIndices.length - 1; i++) {\n const node1 = nodes[nodeIndices[i]];\n for (let j = i + 1; j < nodeIndices.length; j++) {\n const node2 = nodes[nodeIndices[j]];\n\n // nodes only affect nodes on their level\n if (node1.level === node2.level) {\n const theseNodesDistance =\n nodeDistance +\n this.overlapAvoidanceFactor *\n ((node1.shape.radius || 0) / 2 + (node2.shape.radius || 0) / 2);\n\n const dx = node2.x - node1.x;\n const dy = node2.y - node1.y;\n const distance = Math.sqrt(dx * dx + dy * dy);\n\n const steepness = 0.05;\n let repulsingForce;\n if (distance < theseNodesDistance) {\n repulsingForce =\n -Math.pow(steepness * distance, 2) +\n Math.pow(steepness * theseNodesDistance, 2);\n } else {\n repulsingForce = 0;\n }\n // normalize force with\n if (distance !== 0) {\n repulsingForce = repulsingForce / distance;\n }\n const fx = dx * repulsingForce;\n const fy = dy * repulsingForce;\n\n forces[node1.id].x -= fx;\n forces[node1.id].y -= fy;\n forces[node2.id].x += fx;\n forces[node2.id].y += fy;\n }\n }\n }\n }\n}\n\nexport default HierarchicalRepulsionSolver;\n","/**\n * Spring Solver\n */\nclass SpringSolver {\n /**\n * @param {object} body\n * @param {{physicsNodeIndices: Array, physicsEdgeIndices: Array, forces: {}, velocities: {}}} physicsBody\n * @param {object} options\n */\n constructor(body, physicsBody, options) {\n this.body = body;\n this.physicsBody = physicsBody;\n this.setOptions(options);\n }\n\n /**\n *\n * @param {object} options\n */\n setOptions(options) {\n this.options = options;\n }\n\n /**\n * This function calculates the springforces on the nodes, accounting for the support nodes.\n *\n * @private\n */\n solve() {\n let edgeLength, edge;\n const edgeIndices = this.physicsBody.physicsEdgeIndices;\n const edges = this.body.edges;\n let node1, node2, node3;\n\n // forces caused by the edges, modelled as springs\n for (let i = 0; i < edgeIndices.length; i++) {\n edge = edges[edgeIndices[i]];\n if (edge.connected === true && edge.toId !== edge.fromId) {\n // only calculate forces if nodes are in the same sector\n if (\n this.body.nodes[edge.toId] !== undefined &&\n this.body.nodes[edge.fromId] !== undefined\n ) {\n if (edge.edgeType.via !== undefined) {\n edgeLength =\n edge.options.length === undefined\n ? this.options.springLength\n : edge.options.length;\n node1 = edge.to;\n node2 = edge.edgeType.via;\n node3 = edge.from;\n\n this._calculateSpringForce(node1, node2, 0.5 * edgeLength);\n this._calculateSpringForce(node2, node3, 0.5 * edgeLength);\n } else {\n // the * 1.5 is here so the edge looks as large as a smooth edge. It does not initially because the smooth edges use\n // the support nodes which exert a repulsive force on the to and from nodes, making the edge appear larger.\n edgeLength =\n edge.options.length === undefined\n ? this.options.springLength * 1.5\n : edge.options.length;\n this._calculateSpringForce(edge.from, edge.to, edgeLength);\n }\n }\n }\n }\n }\n\n /**\n * This is the code actually performing the calculation for the function above.\n *\n * @param {Node} node1\n * @param {Node} node2\n * @param {number} edgeLength\n * @private\n */\n _calculateSpringForce(node1, node2, edgeLength) {\n const dx = node1.x - node2.x;\n const dy = node1.y - node2.y;\n const distance = Math.max(Math.sqrt(dx * dx + dy * dy), 0.01);\n\n // the 1/distance is so the fx and fy can be calculated without sine or cosine.\n const springForce =\n (this.options.springConstant * (edgeLength - distance)) / distance;\n\n const fx = dx * springForce;\n const fy = dy * springForce;\n\n // handle the case where one node is not part of the physcis\n if (this.physicsBody.forces[node1.id] !== undefined) {\n this.physicsBody.forces[node1.id].x += fx;\n this.physicsBody.forces[node1.id].y += fy;\n }\n\n if (this.physicsBody.forces[node2.id] !== undefined) {\n this.physicsBody.forces[node2.id].x -= fx;\n this.physicsBody.forces[node2.id].y -= fy;\n }\n }\n}\n\nexport default SpringSolver;\n","/**\n * Hierarchical Spring Solver\n */\nclass HierarchicalSpringSolver {\n /**\n * @param {object} body\n * @param {{physicsNodeIndices: Array, physicsEdgeIndices: Array, forces: {}, velocities: {}}} physicsBody\n * @param {object} options\n */\n constructor(body, physicsBody, options) {\n this.body = body;\n this.physicsBody = physicsBody;\n this.setOptions(options);\n }\n\n /**\n *\n * @param {object} options\n */\n setOptions(options) {\n this.options = options;\n }\n\n /**\n * This function calculates the springforces on the nodes, accounting for the support nodes.\n *\n * @private\n */\n solve() {\n let edgeLength, edge;\n let dx, dy, fx, fy, springForce, distance;\n const edges = this.body.edges;\n const factor = 0.5;\n\n const edgeIndices = this.physicsBody.physicsEdgeIndices;\n const nodeIndices = this.physicsBody.physicsNodeIndices;\n const forces = this.physicsBody.forces;\n\n // initialize the spring force counters\n for (let i = 0; i < nodeIndices.length; i++) {\n const nodeId = nodeIndices[i];\n forces[nodeId].springFx = 0;\n forces[nodeId].springFy = 0;\n }\n\n // forces caused by the edges, modelled as springs\n for (let i = 0; i < edgeIndices.length; i++) {\n edge = edges[edgeIndices[i]];\n if (edge.connected === true) {\n edgeLength =\n edge.options.length === undefined\n ? this.options.springLength\n : edge.options.length;\n\n dx = edge.from.x - edge.to.x;\n dy = edge.from.y - edge.to.y;\n distance = Math.sqrt(dx * dx + dy * dy);\n distance = distance === 0 ? 0.01 : distance;\n\n // the 1/distance is so the fx and fy can be calculated without sine or cosine.\n springForce =\n (this.options.springConstant * (edgeLength - distance)) / distance;\n\n fx = dx * springForce;\n fy = dy * springForce;\n\n if (edge.to.level != edge.from.level) {\n if (forces[edge.toId] !== undefined) {\n forces[edge.toId].springFx -= fx;\n forces[edge.toId].springFy -= fy;\n }\n if (forces[edge.fromId] !== undefined) {\n forces[edge.fromId].springFx += fx;\n forces[edge.fromId].springFy += fy;\n }\n } else {\n if (forces[edge.toId] !== undefined) {\n forces[edge.toId].x -= factor * fx;\n forces[edge.toId].y -= factor * fy;\n }\n if (forces[edge.fromId] !== undefined) {\n forces[edge.fromId].x += factor * fx;\n forces[edge.fromId].y += factor * fy;\n }\n }\n }\n }\n\n // normalize spring forces\n springForce = 1;\n let springFx, springFy;\n for (let i = 0; i < nodeIndices.length; i++) {\n const nodeId = nodeIndices[i];\n springFx = Math.min(\n springForce,\n Math.max(-springForce, forces[nodeId].springFx)\n );\n springFy = Math.min(\n springForce,\n Math.max(-springForce, forces[nodeId].springFy)\n );\n\n forces[nodeId].x += springFx;\n forces[nodeId].y += springFy;\n }\n\n // retain energy balance\n let totalFx = 0;\n let totalFy = 0;\n for (let i = 0; i < nodeIndices.length; i++) {\n const nodeId = nodeIndices[i];\n totalFx += forces[nodeId].x;\n totalFy += forces[nodeId].y;\n }\n const correctionFx = totalFx / nodeIndices.length;\n const correctionFy = totalFy / nodeIndices.length;\n\n for (let i = 0; i < nodeIndices.length; i++) {\n const nodeId = nodeIndices[i];\n forces[nodeId].x -= correctionFx;\n forces[nodeId].y -= correctionFy;\n }\n }\n}\n\nexport default HierarchicalSpringSolver;\n","/**\n * Central Gravity Solver\n */\nclass CentralGravitySolver {\n /**\n * @param {object} body\n * @param {{physicsNodeIndices: Array, physicsEdgeIndices: Array, forces: {}, velocities: {}}} physicsBody\n * @param {object} options\n */\n constructor(body, physicsBody, options) {\n this.body = body;\n this.physicsBody = physicsBody;\n this.setOptions(options);\n }\n\n /**\n *\n * @param {object} options\n */\n setOptions(options) {\n this.options = options;\n }\n\n /**\n * Calculates forces for each node\n */\n solve() {\n let dx, dy, distance, node;\n const nodes = this.body.nodes;\n const nodeIndices = this.physicsBody.physicsNodeIndices;\n const forces = this.physicsBody.forces;\n\n for (let i = 0; i < nodeIndices.length; i++) {\n const nodeId = nodeIndices[i];\n node = nodes[nodeId];\n dx = -node.x;\n dy = -node.y;\n distance = Math.sqrt(dx * dx + dy * dy);\n\n this._calculateForces(distance, dx, dy, forces, node);\n }\n }\n\n /**\n * Calculate the forces based on the distance.\n *\n * @param {number} distance\n * @param {number} dx\n * @param {number} dy\n * @param {Object} forces\n * @param {Node} node\n * @private\n */\n _calculateForces(distance, dx, dy, forces, node) {\n const gravityForce =\n distance === 0 ? 0 : this.options.centralGravity / distance;\n forces[node.id].x = dx * gravityForce;\n forces[node.id].y = dy * gravityForce;\n }\n}\n\nexport default CentralGravitySolver;\n","import BarnesHutSolver from \"./BarnesHutSolver\";\nimport { Alea } from \"vis-util/esnext\";\n\n/**\n * @augments BarnesHutSolver\n */\nclass ForceAtlas2BasedRepulsionSolver extends BarnesHutSolver {\n /**\n * @param {object} body\n * @param {{physicsNodeIndices: Array, physicsEdgeIndices: Array, forces: {}, velocities: {}}} physicsBody\n * @param {object} options\n */\n constructor(body, physicsBody, options) {\n super(body, physicsBody, options);\n\n this._rng = Alea(\"FORCE ATLAS 2 BASED REPULSION SOLVER\");\n }\n\n /**\n * Calculate the forces based on the distance.\n *\n * @param {number} distance\n * @param {number} dx\n * @param {number} dy\n * @param {Node} node\n * @param {object} parentBranch\n * @private\n */\n _calculateForces(distance, dx, dy, node, parentBranch) {\n if (distance === 0) {\n distance = 0.1 * this._rng();\n dx = distance;\n }\n\n if (this.overlapAvoidanceFactor < 1 && node.shape.radius) {\n distance = Math.max(\n 0.1 + this.overlapAvoidanceFactor * node.shape.radius,\n distance - node.shape.radius\n );\n }\n\n const degree = node.edges.length + 1;\n // the dividing by the distance cubed instead of squared allows us to get the fx and fy components without sines and cosines\n // it is shorthand for gravityforce with distance squared and fx = dx/distance * gravityForce\n const gravityForce =\n (this.options.gravitationalConstant *\n parentBranch.mass *\n node.options.mass *\n degree) /\n Math.pow(distance, 2);\n const fx = dx * gravityForce;\n const fy = dy * gravityForce;\n\n this.physicsBody.forces[node.id].x += fx;\n this.physicsBody.forces[node.id].y += fy;\n }\n}\n\nexport default ForceAtlas2BasedRepulsionSolver;\n","import CentralGravitySolver from \"./CentralGravitySolver\";\n\n/**\n * @augments CentralGravitySolver\n */\nclass ForceAtlas2BasedCentralGravitySolver extends CentralGravitySolver {\n /**\n * @param {object} body\n * @param {{physicsNodeIndices: Array, physicsEdgeIndices: Array, forces: {}, velocities: {}}} physicsBody\n * @param {object} options\n */\n constructor(body, physicsBody, options) {\n super(body, physicsBody, options);\n }\n\n /**\n * Calculate the forces based on the distance.\n *\n * @param {number} distance\n * @param {number} dx\n * @param {number} dy\n * @param {Object} forces\n * @param {Node} node\n * @private\n */\n _calculateForces(distance, dx, dy, forces, node) {\n if (distance > 0) {\n const degree = node.edges.length + 1;\n const gravityForce =\n this.options.centralGravity * degree * node.options.mass;\n forces[node.id].x = dx * gravityForce;\n forces[node.id].y = dy * gravityForce;\n }\n }\n}\n\nexport default ForceAtlas2BasedCentralGravitySolver;\n","import BarnesHutSolver from \"./components/physics/BarnesHutSolver\";\nimport Repulsion from \"./components/physics/RepulsionSolver\";\nimport HierarchicalRepulsion from \"./components/physics/HierarchicalRepulsionSolver\";\nimport SpringSolver from \"./components/physics/SpringSolver\";\nimport HierarchicalSpringSolver from \"./components/physics/HierarchicalSpringSolver\";\nimport CentralGravitySolver from \"./components/physics/CentralGravitySolver\";\nimport ForceAtlas2BasedRepulsionSolver from \"./components/physics/FA2BasedRepulsionSolver\";\nimport ForceAtlas2BasedCentralGravitySolver from \"./components/physics/FA2BasedCentralGravitySolver\";\nimport {\n HSVToHex,\n mergeOptions,\n selectiveNotDeepExtend,\n} from \"vis-util/esnext\";\nimport { EndPoints } from \"./components/edges\"; // for debugging with _drawForces()\n\n/**\n * The physics engine\n */\nclass PhysicsEngine {\n /**\n * @param {object} body\n */\n constructor(body) {\n this.body = body;\n this.physicsBody = {\n physicsNodeIndices: [],\n physicsEdgeIndices: [],\n forces: {},\n velocities: {},\n };\n\n this.physicsEnabled = true;\n this.simulationInterval = 1000 / 60;\n this.requiresTimeout = true;\n this.previousStates = {};\n this.referenceState = {};\n this.freezeCache = {};\n this.renderTimer = undefined;\n\n // parameters for the adaptive timestep\n this.adaptiveTimestep = false;\n this.adaptiveTimestepEnabled = false;\n this.adaptiveCounter = 0;\n this.adaptiveInterval = 3;\n\n this.stabilized = false;\n this.startedStabilization = false;\n this.stabilizationIterations = 0;\n this.ready = false; // will be set to true if the stabilize\n\n // default options\n this.options = {};\n this.defaultOptions = {\n enabled: true,\n barnesHut: {\n theta: 0.5,\n gravitationalConstant: -2000,\n centralGravity: 0.3,\n springLength: 95,\n springConstant: 0.04,\n damping: 0.09,\n avoidOverlap: 0,\n },\n forceAtlas2Based: {\n theta: 0.5,\n gravitationalConstant: -50,\n centralGravity: 0.01,\n springConstant: 0.08,\n springLength: 100,\n damping: 0.4,\n avoidOverlap: 0,\n },\n repulsion: {\n centralGravity: 0.2,\n springLength: 200,\n springConstant: 0.05,\n nodeDistance: 100,\n damping: 0.09,\n avoidOverlap: 0,\n },\n hierarchicalRepulsion: {\n centralGravity: 0.0,\n springLength: 100,\n springConstant: 0.01,\n nodeDistance: 120,\n damping: 0.09,\n },\n maxVelocity: 50,\n minVelocity: 0.75, // px/s\n solver: \"barnesHut\",\n stabilization: {\n enabled: true,\n iterations: 1000, // maximum number of iteration to stabilize\n updateInterval: 50,\n onlyDynamicEdges: false,\n fit: true,\n },\n timestep: 0.5,\n adaptiveTimestep: true,\n wind: { x: 0, y: 0 },\n };\n Object.assign(this.options, this.defaultOptions);\n this.timestep = 0.5;\n this.layoutFailed = false;\n\n this.bindEventListeners();\n }\n\n /**\n * Binds event listeners\n */\n bindEventListeners() {\n this.body.emitter.on(\"initPhysics\", () => {\n this.initPhysics();\n });\n this.body.emitter.on(\"_layoutFailed\", () => {\n this.layoutFailed = true;\n });\n this.body.emitter.on(\"resetPhysics\", () => {\n this.stopSimulation();\n this.ready = false;\n });\n this.body.emitter.on(\"disablePhysics\", () => {\n this.physicsEnabled = false;\n this.stopSimulation();\n });\n this.body.emitter.on(\"restorePhysics\", () => {\n this.setOptions(this.options);\n if (this.ready === true) {\n this.startSimulation();\n }\n });\n this.body.emitter.on(\"startSimulation\", () => {\n if (this.ready === true) {\n this.startSimulation();\n }\n });\n this.body.emitter.on(\"stopSimulation\", () => {\n this.stopSimulation();\n });\n this.body.emitter.on(\"destroy\", () => {\n this.stopSimulation(false);\n this.body.emitter.off();\n });\n this.body.emitter.on(\"_dataChanged\", () => {\n // Nodes and/or edges have been added or removed, update shortcut lists.\n this.updatePhysicsData();\n });\n\n // debug: show forces\n // this.body.emitter.on(\"afterDrawing\", (ctx) => {this._drawForces(ctx);});\n }\n\n /**\n * set the physics options\n *\n * @param {object} options\n */\n setOptions(options) {\n if (options !== undefined) {\n if (options === false) {\n this.options.enabled = false;\n this.physicsEnabled = false;\n this.stopSimulation();\n } else if (options === true) {\n this.options.enabled = true;\n this.physicsEnabled = true;\n this.startSimulation();\n } else {\n this.physicsEnabled = true;\n selectiveNotDeepExtend([\"stabilization\"], this.options, options);\n mergeOptions(this.options, options, \"stabilization\");\n\n if (options.enabled === undefined) {\n this.options.enabled = true;\n }\n\n if (this.options.enabled === false) {\n this.physicsEnabled = false;\n this.stopSimulation();\n }\n\n const wind = this.options.wind;\n if (wind) {\n if (typeof wind.x !== \"number\" || Number.isNaN(wind.x)) {\n wind.x = 0;\n }\n if (typeof wind.y !== \"number\" || Number.isNaN(wind.y)) {\n wind.y = 0;\n }\n }\n\n // set the timestep\n this.timestep = this.options.timestep;\n }\n }\n this.init();\n }\n\n /**\n * configure the engine.\n */\n init() {\n let options;\n if (this.options.solver === \"forceAtlas2Based\") {\n options = this.options.forceAtlas2Based;\n this.nodesSolver = new ForceAtlas2BasedRepulsionSolver(\n this.body,\n this.physicsBody,\n options\n );\n this.edgesSolver = new SpringSolver(this.body, this.physicsBody, options);\n this.gravitySolver = new ForceAtlas2BasedCentralGravitySolver(\n this.body,\n this.physicsBody,\n options\n );\n } else if (this.options.solver === \"repulsion\") {\n options = this.options.repulsion;\n this.nodesSolver = new Repulsion(this.body, this.physicsBody, options);\n this.edgesSolver = new SpringSolver(this.body, this.physicsBody, options);\n this.gravitySolver = new CentralGravitySolver(\n this.body,\n this.physicsBody,\n options\n );\n } else if (this.options.solver === \"hierarchicalRepulsion\") {\n options = this.options.hierarchicalRepulsion;\n this.nodesSolver = new HierarchicalRepulsion(\n this.body,\n this.physicsBody,\n options\n );\n this.edgesSolver = new HierarchicalSpringSolver(\n this.body,\n this.physicsBody,\n options\n );\n this.gravitySolver = new CentralGravitySolver(\n this.body,\n this.physicsBody,\n options\n );\n } else {\n // barnesHut\n options = this.options.barnesHut;\n this.nodesSolver = new BarnesHutSolver(\n this.body,\n this.physicsBody,\n options\n );\n this.edgesSolver = new SpringSolver(this.body, this.physicsBody, options);\n this.gravitySolver = new CentralGravitySolver(\n this.body,\n this.physicsBody,\n options\n );\n }\n\n this.modelOptions = options;\n }\n\n /**\n * initialize the engine\n */\n initPhysics() {\n if (this.physicsEnabled === true && this.options.enabled === true) {\n if (this.options.stabilization.enabled === true) {\n this.stabilize();\n } else {\n this.stabilized = false;\n this.ready = true;\n this.body.emitter.emit(\"fit\", {}, this.layoutFailed); // if the layout failed, we use the approximation for the zoom\n this.startSimulation();\n }\n } else {\n this.ready = true;\n this.body.emitter.emit(\"fit\");\n }\n }\n\n /**\n * Start the simulation\n */\n startSimulation() {\n if (this.physicsEnabled === true && this.options.enabled === true) {\n this.stabilized = false;\n\n // when visible, adaptivity is disabled.\n this.adaptiveTimestep = false;\n\n // this sets the width of all nodes initially which could be required for the avoidOverlap\n this.body.emitter.emit(\"_resizeNodes\");\n if (this.viewFunction === undefined) {\n this.viewFunction = this.simulationStep.bind(this);\n this.body.emitter.on(\"initRedraw\", this.viewFunction);\n this.body.emitter.emit(\"_startRendering\");\n }\n } else {\n this.body.emitter.emit(\"_redraw\");\n }\n }\n\n /**\n * Stop the simulation, force stabilization.\n *\n * @param {boolean} [emit=true]\n */\n stopSimulation(emit = true) {\n this.stabilized = true;\n if (emit === true) {\n this._emitStabilized();\n }\n if (this.viewFunction !== undefined) {\n this.body.emitter.off(\"initRedraw\", this.viewFunction);\n this.viewFunction = undefined;\n if (emit === true) {\n this.body.emitter.emit(\"_stopRendering\");\n }\n }\n }\n\n /**\n * The viewFunction inserts this step into each render loop. It calls the physics tick and handles the cleanup at stabilized.\n *\n */\n simulationStep() {\n // check if the physics have settled\n const startTime = Date.now();\n this.physicsTick();\n const physicsTime = Date.now() - startTime;\n\n // run double speed if it is a little graph\n if (\n (physicsTime < 0.4 * this.simulationInterval ||\n this.runDoubleSpeed === true) &&\n this.stabilized === false\n ) {\n this.physicsTick();\n\n // this makes sure there is no jitter. The decision is taken once to run it at double speed.\n this.runDoubleSpeed = true;\n }\n\n if (this.stabilized === true) {\n this.stopSimulation();\n }\n }\n\n /**\n * trigger the stabilized event.\n *\n * @param {number} [amountOfIterations=this.stabilizationIterations]\n * @private\n */\n _emitStabilized(amountOfIterations = this.stabilizationIterations) {\n if (\n this.stabilizationIterations > 1 ||\n this.startedStabilization === true\n ) {\n setTimeout(() => {\n this.body.emitter.emit(\"stabilized\", {\n iterations: amountOfIterations,\n });\n this.startedStabilization = false;\n this.stabilizationIterations = 0;\n }, 0);\n }\n }\n\n /**\n * Calculate the forces for one physics iteration and move the nodes.\n *\n * @private\n */\n physicsStep() {\n this.gravitySolver.solve();\n this.nodesSolver.solve();\n this.edgesSolver.solve();\n this.moveNodes();\n }\n\n /**\n * Make dynamic adjustments to the timestep, based on current state.\n *\n * Helper function for physicsTick().\n *\n * @private\n */\n adjustTimeStep() {\n const factor = 1.2; // Factor for increasing the timestep on success.\n\n // we compare the two steps. if it is acceptable we double the step.\n if (this._evaluateStepQuality() === true) {\n this.timestep = factor * this.timestep;\n } else {\n // if not, we decrease the step to a minimum of the options timestep.\n // if the decreased timestep is smaller than the options step, we do not reset the counter\n // we assume that the options timestep is stable enough.\n if (this.timestep / factor < this.options.timestep) {\n this.timestep = this.options.timestep;\n } else {\n // if the timestep was larger than 2 times the option one we check the adaptivity again to ensure\n // that large instabilities do not form.\n this.adaptiveCounter = -1; // check again next iteration\n this.timestep = Math.max(this.options.timestep, this.timestep / factor);\n }\n }\n }\n\n /**\n * A single simulation step (or 'tick') in the physics simulation\n *\n * @private\n */\n physicsTick() {\n this._startStabilizing(); // this ensures that there is no start event when the network is already stable.\n if (this.stabilized === true) return;\n\n // adaptivity means the timestep adapts to the situation, only applicable for stabilization\n if (\n this.adaptiveTimestep === true &&\n this.adaptiveTimestepEnabled === true\n ) {\n // timestep remains stable for \"interval\" iterations.\n const doAdaptive = this.adaptiveCounter % this.adaptiveInterval === 0;\n\n if (doAdaptive) {\n // first the big step and revert.\n this.timestep = 2 * this.timestep;\n this.physicsStep();\n this.revert(); // saves the reference state\n\n // now the normal step. Since this is the last step, it is the more stable one and we will take this.\n this.timestep = 0.5 * this.timestep;\n\n // since it's half the step, we do it twice.\n this.physicsStep();\n this.physicsStep();\n\n this.adjustTimeStep();\n } else {\n this.physicsStep(); // normal step, keeping timestep constant\n }\n\n this.adaptiveCounter += 1;\n } else {\n // case for the static timestep, we reset it to the one in options and take a normal step.\n this.timestep = this.options.timestep;\n this.physicsStep();\n }\n\n if (this.stabilized === true) this.revert();\n this.stabilizationIterations++;\n }\n\n /**\n * Nodes and edges can have the physics toggles on or off. A collection of indices is created here so we can skip the check all the time.\n *\n * @private\n */\n updatePhysicsData() {\n this.physicsBody.forces = {};\n this.physicsBody.physicsNodeIndices = [];\n this.physicsBody.physicsEdgeIndices = [];\n const nodes = this.body.nodes;\n const edges = this.body.edges;\n\n // get node indices for physics\n for (const nodeId in nodes) {\n if (Object.prototype.hasOwnProperty.call(nodes, nodeId)) {\n if (nodes[nodeId].options.physics === true) {\n this.physicsBody.physicsNodeIndices.push(nodes[nodeId].id);\n }\n }\n }\n\n // get edge indices for physics\n for (const edgeId in edges) {\n if (Object.prototype.hasOwnProperty.call(edges, edgeId)) {\n if (edges[edgeId].options.physics === true) {\n this.physicsBody.physicsEdgeIndices.push(edges[edgeId].id);\n }\n }\n }\n\n // get the velocity and the forces vector\n for (let i = 0; i < this.physicsBody.physicsNodeIndices.length; i++) {\n const nodeId = this.physicsBody.physicsNodeIndices[i];\n this.physicsBody.forces[nodeId] = { x: 0, y: 0 };\n\n // forces can be reset because they are recalculated. Velocities have to persist.\n if (this.physicsBody.velocities[nodeId] === undefined) {\n this.physicsBody.velocities[nodeId] = { x: 0, y: 0 };\n }\n }\n\n // clean deleted nodes from the velocity vector\n for (const nodeId in this.physicsBody.velocities) {\n if (nodes[nodeId] === undefined) {\n delete this.physicsBody.velocities[nodeId];\n }\n }\n }\n\n /**\n * Revert the simulation one step. This is done so after stabilization, every new start of the simulation will also say stabilized.\n */\n revert() {\n const nodeIds = Object.keys(this.previousStates);\n const nodes = this.body.nodes;\n const velocities = this.physicsBody.velocities;\n this.referenceState = {};\n\n for (let i = 0; i < nodeIds.length; i++) {\n const nodeId = nodeIds[i];\n if (nodes[nodeId] !== undefined) {\n if (nodes[nodeId].options.physics === true) {\n this.referenceState[nodeId] = {\n positions: { x: nodes[nodeId].x, y: nodes[nodeId].y },\n };\n velocities[nodeId].x = this.previousStates[nodeId].vx;\n velocities[nodeId].y = this.previousStates[nodeId].vy;\n nodes[nodeId].x = this.previousStates[nodeId].x;\n nodes[nodeId].y = this.previousStates[nodeId].y;\n }\n } else {\n delete this.previousStates[nodeId];\n }\n }\n }\n\n /**\n * This compares the reference state to the current state\n *\n * @returns {boolean}\n * @private\n */\n _evaluateStepQuality() {\n let dx, dy, dpos;\n const nodes = this.body.nodes;\n const reference = this.referenceState;\n const posThreshold = 0.3;\n\n for (const nodeId in this.referenceState) {\n if (\n Object.prototype.hasOwnProperty.call(this.referenceState, nodeId) &&\n nodes[nodeId] !== undefined\n ) {\n dx = nodes[nodeId].x - reference[nodeId].positions.x;\n dy = nodes[nodeId].y - reference[nodeId].positions.y;\n\n dpos = Math.sqrt(Math.pow(dx, 2) + Math.pow(dy, 2));\n\n if (dpos > posThreshold) {\n return false;\n }\n }\n }\n return true;\n }\n\n /**\n * move the nodes one timestep and check if they are stabilized\n */\n moveNodes() {\n const nodeIndices = this.physicsBody.physicsNodeIndices;\n let maxNodeVelocity = 0;\n let averageNodeVelocity = 0;\n\n // the velocity threshold (energy in the system) for the adaptivity toggle\n const velocityAdaptiveThreshold = 5;\n\n for (let i = 0; i < nodeIndices.length; i++) {\n const nodeId = nodeIndices[i];\n const nodeVelocity = this._performStep(nodeId);\n // stabilized is true if stabilized is true and velocity is smaller than vmin --> all nodes must be stabilized\n maxNodeVelocity = Math.max(maxNodeVelocity, nodeVelocity);\n averageNodeVelocity += nodeVelocity;\n }\n\n // evaluating the stabilized and adaptiveTimestepEnabled conditions\n this.adaptiveTimestepEnabled =\n averageNodeVelocity / nodeIndices.length < velocityAdaptiveThreshold;\n this.stabilized = maxNodeVelocity < this.options.minVelocity;\n }\n\n /**\n * Calculate new velocity for a coordinate direction\n *\n * @param {number} v velocity for current coordinate\n * @param {number} f regular force for current coordinate\n * @param {number} m mass of current node\n * @returns {number} new velocity for current coordinate\n * @private\n */\n calculateComponentVelocity(v, f, m) {\n const df = this.modelOptions.damping * v; // damping force\n const a = (f - df) / m; // acceleration\n\n v += a * this.timestep;\n\n // Put a limit on the velocities if it is really high\n const maxV = this.options.maxVelocity || 1e9;\n if (Math.abs(v) > maxV) {\n v = v > 0 ? maxV : -maxV;\n }\n\n return v;\n }\n\n /**\n * Perform the actual step\n *\n * @param {Node.id} nodeId\n * @returns {number} the new velocity of given node\n * @private\n */\n _performStep(nodeId) {\n const node = this.body.nodes[nodeId];\n const force = this.physicsBody.forces[nodeId];\n\n if (this.options.wind) {\n force.x += this.options.wind.x;\n force.y += this.options.wind.y;\n }\n\n const velocity = this.physicsBody.velocities[nodeId];\n\n // store the state so we can revert\n this.previousStates[nodeId] = {\n x: node.x,\n y: node.y,\n vx: velocity.x,\n vy: velocity.y,\n };\n\n if (node.options.fixed.x === false) {\n velocity.x = this.calculateComponentVelocity(\n velocity.x,\n force.x,\n node.options.mass\n );\n node.x += velocity.x * this.timestep;\n } else {\n force.x = 0;\n velocity.x = 0;\n }\n\n if (node.options.fixed.y === false) {\n velocity.y = this.calculateComponentVelocity(\n velocity.y,\n force.y,\n node.options.mass\n );\n node.y += velocity.y * this.timestep;\n } else {\n force.y = 0;\n velocity.y = 0;\n }\n\n const totalVelocity = Math.sqrt(\n Math.pow(velocity.x, 2) + Math.pow(velocity.y, 2)\n );\n return totalVelocity;\n }\n\n /**\n * When initializing and stabilizing, we can freeze nodes with a predefined position.\n * This greatly speeds up stabilization because only the supportnodes for the smoothCurves have to settle.\n *\n * @private\n */\n _freezeNodes() {\n const nodes = this.body.nodes;\n for (const id in nodes) {\n if (Object.prototype.hasOwnProperty.call(nodes, id)) {\n if (nodes[id].x && nodes[id].y) {\n const fixed = nodes[id].options.fixed;\n this.freezeCache[id] = { x: fixed.x, y: fixed.y };\n fixed.x = true;\n fixed.y = true;\n }\n }\n }\n }\n\n /**\n * Unfreezes the nodes that have been frozen by _freezeDefinedNodes.\n *\n * @private\n */\n _restoreFrozenNodes() {\n const nodes = this.body.nodes;\n for (const id in nodes) {\n if (Object.prototype.hasOwnProperty.call(nodes, id)) {\n if (this.freezeCache[id] !== undefined) {\n nodes[id].options.fixed.x = this.freezeCache[id].x;\n nodes[id].options.fixed.y = this.freezeCache[id].y;\n }\n }\n }\n this.freezeCache = {};\n }\n\n /**\n * Find a stable position for all nodes\n *\n * @param {number} [iterations=this.options.stabilization.iterations]\n */\n stabilize(iterations = this.options.stabilization.iterations) {\n if (typeof iterations !== \"number\") {\n iterations = this.options.stabilization.iterations;\n console.error(\n \"The stabilize method needs a numeric amount of iterations. Switching to default: \",\n iterations\n );\n }\n\n if (this.physicsBody.physicsNodeIndices.length === 0) {\n this.ready = true;\n return;\n }\n\n // enable adaptive timesteps\n this.adaptiveTimestep = true && this.options.adaptiveTimestep;\n\n // this sets the width of all nodes initially which could be required for the avoidOverlap\n this.body.emitter.emit(\"_resizeNodes\");\n\n this.stopSimulation(); // stop the render loop\n this.stabilized = false;\n\n // block redraw requests\n this.body.emitter.emit(\"_blockRedraw\");\n this.targetIterations = iterations;\n\n // start the stabilization\n if (this.options.stabilization.onlyDynamicEdges === true) {\n this._freezeNodes();\n }\n this.stabilizationIterations = 0;\n\n setTimeout(() => this._stabilizationBatch(), 0);\n }\n\n /**\n * If not already stabilizing, start it and emit a start event.\n *\n * @returns {boolean} true if stabilization started with this call\n * @private\n */\n _startStabilizing() {\n if (this.startedStabilization === true) return false;\n\n this.body.emitter.emit(\"startStabilizing\");\n this.startedStabilization = true;\n return true;\n }\n\n /**\n * One batch of stabilization\n *\n * @private\n */\n _stabilizationBatch() {\n const running = () =>\n this.stabilized === false &&\n this.stabilizationIterations < this.targetIterations;\n\n const sendProgress = () => {\n this.body.emitter.emit(\"stabilizationProgress\", {\n iterations: this.stabilizationIterations,\n total: this.targetIterations,\n });\n };\n\n if (this._startStabilizing()) {\n sendProgress(); // Ensure that there is at least one start event.\n }\n\n let count = 0;\n while (running() && count < this.options.stabilization.updateInterval) {\n this.physicsTick();\n count++;\n }\n\n sendProgress();\n\n if (running()) {\n setTimeout(this._stabilizationBatch.bind(this), 0);\n } else {\n this._finalizeStabilization();\n }\n }\n\n /**\n * Wrap up the stabilization, fit and emit the events.\n *\n * @private\n */\n _finalizeStabilization() {\n this.body.emitter.emit(\"_allowRedraw\");\n if (this.options.stabilization.fit === true) {\n this.body.emitter.emit(\"fit\");\n }\n\n if (this.options.stabilization.onlyDynamicEdges === true) {\n this._restoreFrozenNodes();\n }\n\n this.body.emitter.emit(\"stabilizationIterationsDone\");\n this.body.emitter.emit(\"_requestRedraw\");\n\n if (this.stabilized === true) {\n this._emitStabilized();\n } else {\n this.startSimulation();\n }\n\n this.ready = true;\n }\n\n //--------------------------- DEBUGGING BELOW ---------------------------//\n\n /**\n * Debug function that display arrows for the forces currently active in the network.\n *\n * Use this when debugging only.\n *\n * @param {CanvasRenderingContext2D} ctx\n * @private\n */\n _drawForces(ctx) {\n for (let i = 0; i < this.physicsBody.physicsNodeIndices.length; i++) {\n const index = this.physicsBody.physicsNodeIndices[i];\n const node = this.body.nodes[index];\n const force = this.physicsBody.forces[index];\n const factor = 20;\n const colorFactor = 0.03;\n const forceSize = Math.sqrt(Math.pow(force.x, 2) + Math.pow(force.x, 2));\n\n const size = Math.min(Math.max(5, forceSize), 15);\n const arrowSize = 3 * size;\n\n const color = HSVToHex(\n (180 - Math.min(1, Math.max(0, colorFactor * forceSize)) * 180) / 360,\n 1,\n 1\n );\n\n const point = {\n x: node.x + factor * force.x,\n y: node.y + factor * force.y,\n };\n\n ctx.lineWidth = size;\n ctx.strokeStyle = color;\n ctx.beginPath();\n ctx.moveTo(node.x, node.y);\n ctx.lineTo(point.x, point.y);\n ctx.stroke();\n\n const angle = Math.atan2(force.y, force.x);\n ctx.fillStyle = color;\n EndPoints.draw(ctx, {\n type: \"arrow\",\n point: point,\n angle: angle,\n length: arrowSize,\n });\n ctx.fill();\n }\n }\n}\n\nexport default PhysicsEngine;\n","import { deepExtend } from \"vis-util/esnext\";\n\n/**\n * Utility Class\n */\nclass NetworkUtil {\n /**\n * @ignore\n */\n constructor() {}\n\n /**\n * Find the center position of the network considering the bounding boxes\n *\n * @param {Array.} allNodes\n * @param {Array.} [specificNodes=[]]\n * @returns {{minX: number, maxX: number, minY: number, maxY: number}}\n * @static\n */\n static getRange(allNodes, specificNodes = []) {\n let minY = 1e9,\n maxY = -1e9,\n minX = 1e9,\n maxX = -1e9,\n node;\n if (specificNodes.length > 0) {\n for (let i = 0; i < specificNodes.length; i++) {\n node = allNodes[specificNodes[i]];\n if (minX > node.shape.boundingBox.left) {\n minX = node.shape.boundingBox.left;\n }\n if (maxX < node.shape.boundingBox.right) {\n maxX = node.shape.boundingBox.right;\n }\n if (minY > node.shape.boundingBox.top) {\n minY = node.shape.boundingBox.top;\n } // top is negative, bottom is positive\n if (maxY < node.shape.boundingBox.bottom) {\n maxY = node.shape.boundingBox.bottom;\n } // top is negative, bottom is positive\n }\n }\n\n if (minX === 1e9 && maxX === -1e9 && minY === 1e9 && maxY === -1e9) {\n (minY = 0), (maxY = 0), (minX = 0), (maxX = 0);\n }\n return { minX: minX, maxX: maxX, minY: minY, maxY: maxY };\n }\n\n /**\n * Find the center position of the network\n *\n * @param {Array.} allNodes\n * @param {Array.} [specificNodes=[]]\n * @returns {{minX: number, maxX: number, minY: number, maxY: number}}\n * @static\n */\n static getRangeCore(allNodes, specificNodes = []) {\n let minY = 1e9,\n maxY = -1e9,\n minX = 1e9,\n maxX = -1e9,\n node;\n if (specificNodes.length > 0) {\n for (let i = 0; i < specificNodes.length; i++) {\n node = allNodes[specificNodes[i]];\n if (minX > node.x) {\n minX = node.x;\n }\n if (maxX < node.x) {\n maxX = node.x;\n }\n if (minY > node.y) {\n minY = node.y;\n } // top is negative, bottom is positive\n if (maxY < node.y) {\n maxY = node.y;\n } // top is negative, bottom is positive\n }\n }\n\n if (minX === 1e9 && maxX === -1e9 && minY === 1e9 && maxY === -1e9) {\n (minY = 0), (maxY = 0), (minX = 0), (maxX = 0);\n }\n return { minX: minX, maxX: maxX, minY: minY, maxY: maxY };\n }\n\n /**\n * @param {object} range = {minX: minX, maxX: maxX, minY: minY, maxY: maxY};\n * @returns {{x: number, y: number}}\n * @static\n */\n static findCenter(range) {\n return {\n x: 0.5 * (range.maxX + range.minX),\n y: 0.5 * (range.maxY + range.minY),\n };\n }\n\n /**\n * This returns a clone of the options or options of the edge or node to be used for construction of new edges or check functions for new nodes.\n *\n * @param {vis.Item} item\n * @param {'node'|undefined} type\n * @returns {{}}\n * @static\n */\n static cloneOptions(item, type) {\n const clonedOptions = {};\n if (type === undefined || type === \"node\") {\n deepExtend(clonedOptions, item.options, true);\n clonedOptions.x = item.x;\n clonedOptions.y = item.y;\n clonedOptions.amountOfConnections = item.edges.length;\n } else {\n deepExtend(clonedOptions, item.options, true);\n }\n return clonedOptions;\n }\n}\n\nexport default NetworkUtil;\n","import { forEach } from \"vis-util/esnext\";\nimport Node from \"../Node\";\n\n/**\n * A Cluster is a special Node that allows a group of Nodes positioned closely together\n * to be represented by a single Cluster Node.\n *\n * @augments Node\n */\nclass Cluster extends Node {\n /**\n * @param {object} options\n * @param {object} body\n * @param {Array.}imagelist\n * @param {Array} grouplist\n * @param {object} globalOptions\n * @param {object} defaultOptions Global default options for nodes\n */\n constructor(\n options,\n body,\n imagelist,\n grouplist,\n globalOptions,\n defaultOptions\n ) {\n super(options, body, imagelist, grouplist, globalOptions, defaultOptions);\n\n this.isCluster = true;\n this.containedNodes = {};\n this.containedEdges = {};\n }\n\n /**\n * Transfer child cluster data to current and disconnect the child cluster.\n *\n * Please consult the header comment in 'Clustering.js' for the fields set here.\n *\n * @param {string|number} childClusterId id of child cluster to open\n */\n _openChildCluster(childClusterId) {\n const childCluster = this.body.nodes[childClusterId];\n if (this.containedNodes[childClusterId] === undefined) {\n throw new Error(\n \"node with id: \" + childClusterId + \" not in current cluster\"\n );\n }\n if (!childCluster.isCluster) {\n throw new Error(\"node with id: \" + childClusterId + \" is not a cluster\");\n }\n\n // Disconnect child cluster from current cluster\n delete this.containedNodes[childClusterId];\n forEach(childCluster.edges, (edge) => {\n delete this.containedEdges[edge.id];\n });\n\n // Transfer nodes and edges\n forEach(childCluster.containedNodes, (node, nodeId) => {\n this.containedNodes[nodeId] = node;\n });\n childCluster.containedNodes = {};\n\n forEach(childCluster.containedEdges, (edge, edgeId) => {\n this.containedEdges[edgeId] = edge;\n });\n childCluster.containedEdges = {};\n\n // Transfer edges within cluster edges which are clustered\n forEach(childCluster.edges, (clusterEdge) => {\n forEach(this.edges, (parentClusterEdge) => {\n // Assumption: a clustered edge can only be present in a single clustering edge\n // Not tested here\n const index = parentClusterEdge.clusteringEdgeReplacingIds.indexOf(\n clusterEdge.id\n );\n if (index === -1) return;\n\n forEach(clusterEdge.clusteringEdgeReplacingIds, (srcId) => {\n parentClusterEdge.clusteringEdgeReplacingIds.push(srcId);\n\n // Maintain correct bookkeeping for transferred edge\n this.body.edges[srcId].edgeReplacedById = parentClusterEdge.id;\n });\n\n // Remove cluster edge from parent cluster edge\n parentClusterEdge.clusteringEdgeReplacingIds.splice(index, 1);\n });\n });\n childCluster.edges = [];\n }\n}\n\nexport default Cluster;\n","/* ===========================================================================\n\n# TODO\n\n- `edgeReplacedById` not cleaned up yet on cluster edge removal\n- allowSingleNodeCluster could be a global option as well; currently needs to always\n be passed to clustering methods\n\n----------------------------------------------\n\n# State Model for Clustering\n\nThe total state for clustering is non-trivial. It is useful to have a model\navailable as to how it works. The following documents the relevant state items.\n\n\n## Network State\n\nThe following `network`-members are relevant to clustering:\n\n- `body.nodes` - all nodes actively participating in the network\n- `body.edges` - same for edges\n- `body.nodeIndices` - id's of nodes that are visible at a given moment\n- `body.edgeIndices` - same for edges\n\nThis includes:\n\n- helper nodes for dragging in `manipulation`\n- helper nodes for edge type `dynamic`\n- cluster nodes and edges\n- there may be more than this.\n\nA node/edge may be missing in the `Indices` member if:\n\n- it is a helper node\n- the node or edge state has option `hidden` set\n- It is not visible due to clustering\n\n\n## Clustering State\n\nFor the hashes, the id's of the nodes/edges are used as key.\n\nMember `network.clustering` contains the following items:\n\n- `clusteredNodes` - hash with values: { clusterId: , node: }\n- `clusteredEdges` - hash with values: restore information for given edge\n\n\nDue to nesting of clusters, these members can contain cluster nodes and edges as well.\n\nThe important thing to note here, is that the clustered nodes and edges also\nappear in the members of the cluster nodes. For data update, it is therefore\nimportant to scan these lists as well as the cluster nodes.\n\n\n### Cluster Node\n\nA cluster node has the following extra fields:\n\n- `isCluster : true` - indication that this is a cluster node\n- `containedNodes` - hash of nodes contained in this cluster\n- `containedEdges` - same for edges\n- `edges` - array of cluster edges for this node\n\n\n**NOTE:**\n\n- `containedEdges` can also contain edges which are not clustered; e.g. an edge\n connecting two nodes in the same cluster.\n\n\n### Cluster Edge\n\nThese are the items in the `edges` member of a clustered node. They have the\nfollowing relevant members:\n\n- 'clusteringEdgeReplacingIds` - array of id's of edges replaced by this edge\n\nNote that it's possible to nest clusters, so that `clusteringEdgeReplacingIds`\ncan contain edge id's of other clusters.\n\n\n### Clustered Edge\n\nThis is any edge contained by a cluster edge. It gets the following additional\nmember:\n\n- `edgeReplacedById` - id of the cluster edge in which current edge is clustered\n\n\n =========================================================================== */\nimport { deepExtend, forEach } from \"vis-util/esnext\";\nimport { v4 as randomUUID } from \"uuid\";\nimport NetworkUtil from \"../NetworkUtil\";\nimport Cluster from \"./components/nodes/Cluster\";\nimport Edge from \"./components/Edge\"; // Only needed for check on type!\nimport Node from \"./components/Node\"; // Only needed for check on type!\n\n/**\n * The clustering engine\n */\nclass ClusterEngine {\n /**\n * @param {object} body\n */\n constructor(body) {\n this.body = body;\n this.clusteredNodes = {}; // key: node id, value: { clusterId: , node: }\n this.clusteredEdges = {}; // key: edge id, value: restore information for given edge\n\n this.options = {};\n this.defaultOptions = {};\n Object.assign(this.options, this.defaultOptions);\n\n this.body.emitter.on(\"_resetData\", () => {\n this.clusteredNodes = {};\n this.clusteredEdges = {};\n });\n }\n\n /**\n *\n * @param {number} hubsize\n * @param {object} options\n */\n clusterByHubsize(hubsize, options) {\n if (hubsize === undefined) {\n hubsize = this._getHubSize();\n } else if (typeof hubsize === \"object\") {\n options = this._checkOptions(hubsize);\n hubsize = this._getHubSize();\n }\n\n const nodesToCluster = [];\n for (let i = 0; i < this.body.nodeIndices.length; i++) {\n const node = this.body.nodes[this.body.nodeIndices[i]];\n if (node.edges.length >= hubsize) {\n nodesToCluster.push(node.id);\n }\n }\n\n for (let i = 0; i < nodesToCluster.length; i++) {\n this.clusterByConnection(nodesToCluster[i], options, true);\n }\n\n this.body.emitter.emit(\"_dataChanged\");\n }\n\n /**\n * loop over all nodes, check if they adhere to the condition and cluster if needed.\n *\n * @param {object} options\n * @param {boolean} [refreshData=true]\n */\n cluster(options = {}, refreshData = true) {\n if (options.joinCondition === undefined) {\n throw new Error(\n \"Cannot call clusterByNodeData without a joinCondition function in the options.\"\n );\n }\n\n // check if the options object is fine, append if needed\n options = this._checkOptions(options);\n\n const childNodesObj = {};\n const childEdgesObj = {};\n\n // collect the nodes that will be in the cluster\n forEach(this.body.nodes, (node, nodeId) => {\n if (node.options && options.joinCondition(node.options) === true) {\n childNodesObj[nodeId] = node;\n\n // collect the edges that will be in the cluster\n forEach(node.edges, (edge) => {\n if (this.clusteredEdges[edge.id] === undefined) {\n childEdgesObj[edge.id] = edge;\n }\n });\n }\n });\n\n this._cluster(childNodesObj, childEdgesObj, options, refreshData);\n }\n\n /**\n * Cluster all nodes in the network that have only X edges\n *\n * @param {number} edgeCount\n * @param {object} options\n * @param {boolean} [refreshData=true]\n */\n clusterByEdgeCount(edgeCount, options, refreshData = true) {\n options = this._checkOptions(options);\n const clusters = [];\n const usedNodes = {};\n let edge, edges, relevantEdgeCount;\n // collect the nodes that will be in the cluster\n for (let i = 0; i < this.body.nodeIndices.length; i++) {\n const childNodesObj = {};\n const childEdgesObj = {};\n const nodeId = this.body.nodeIndices[i];\n const node = this.body.nodes[nodeId];\n\n // if this node is already used in another cluster this session, we do not have to re-evaluate it.\n if (usedNodes[nodeId] === undefined) {\n relevantEdgeCount = 0;\n edges = [];\n for (let j = 0; j < node.edges.length; j++) {\n edge = node.edges[j];\n if (this.clusteredEdges[edge.id] === undefined) {\n if (edge.toId !== edge.fromId) {\n relevantEdgeCount++;\n }\n edges.push(edge);\n }\n }\n\n // this node qualifies, we collect its neighbours to start the clustering process.\n if (relevantEdgeCount === edgeCount) {\n const checkJoinCondition = function (node) {\n if (\n options.joinCondition === undefined ||\n options.joinCondition === null\n ) {\n return true;\n }\n\n const clonedOptions = NetworkUtil.cloneOptions(node);\n return options.joinCondition(clonedOptions);\n };\n\n let gatheringSuccessful = true;\n for (let j = 0; j < edges.length; j++) {\n edge = edges[j];\n const childNodeId = this._getConnectedId(edge, nodeId);\n // add the nodes to the list by the join condition.\n if (checkJoinCondition(node)) {\n childEdgesObj[edge.id] = edge;\n childNodesObj[nodeId] = node;\n childNodesObj[childNodeId] = this.body.nodes[childNodeId];\n usedNodes[nodeId] = true;\n } else {\n // this node does not qualify after all.\n gatheringSuccessful = false;\n break;\n }\n }\n\n // add to the cluster queue\n if (\n Object.keys(childNodesObj).length > 0 &&\n Object.keys(childEdgesObj).length > 0 &&\n gatheringSuccessful === true\n ) {\n /**\n * Search for cluster data that contains any of the node id's\n *\n * @returns {boolean} true if no joinCondition, otherwise return value of joinCondition\n */\n const findClusterData = function () {\n for (let n = 0; n < clusters.length; ++n) {\n // Search for a cluster containing any of the node id's\n for (const m in childNodesObj) {\n if (clusters[n].nodes[m] !== undefined) {\n return clusters[n];\n }\n }\n }\n\n return undefined;\n };\n\n // If any of the found nodes is part of a cluster found in this method,\n // add the current values to that cluster\n const foundCluster = findClusterData();\n if (foundCluster !== undefined) {\n // Add nodes to found cluster if not present\n for (const m in childNodesObj) {\n if (foundCluster.nodes[m] === undefined) {\n foundCluster.nodes[m] = childNodesObj[m];\n }\n }\n\n // Add edges to found cluster, if not present\n for (const m in childEdgesObj) {\n if (foundCluster.edges[m] === undefined) {\n foundCluster.edges[m] = childEdgesObj[m];\n }\n }\n } else {\n // Create a new cluster group\n clusters.push({ nodes: childNodesObj, edges: childEdgesObj });\n }\n }\n }\n }\n }\n\n for (let i = 0; i < clusters.length; i++) {\n this._cluster(clusters[i].nodes, clusters[i].edges, options, false);\n }\n\n if (refreshData === true) {\n this.body.emitter.emit(\"_dataChanged\");\n }\n }\n\n /**\n * Cluster all nodes in the network that have only 1 edge\n *\n * @param {object} options\n * @param {boolean} [refreshData=true]\n */\n clusterOutliers(options, refreshData = true) {\n this.clusterByEdgeCount(1, options, refreshData);\n }\n\n /**\n * Cluster all nodes in the network that have only 2 edge\n *\n * @param {object} options\n * @param {boolean} [refreshData=true]\n */\n clusterBridges(options, refreshData = true) {\n this.clusterByEdgeCount(2, options, refreshData);\n }\n\n /**\n * suck all connected nodes of a node into the node.\n *\n * @param {Node.id} nodeId\n * @param {object} options\n * @param {boolean} [refreshData=true]\n */\n clusterByConnection(nodeId, options, refreshData = true) {\n // kill conditions\n if (nodeId === undefined) {\n throw new Error(\"No nodeId supplied to clusterByConnection!\");\n }\n if (this.body.nodes[nodeId] === undefined) {\n throw new Error(\n \"The nodeId given to clusterByConnection does not exist!\"\n );\n }\n\n const node = this.body.nodes[nodeId];\n options = this._checkOptions(options, node);\n if (options.clusterNodeProperties.x === undefined) {\n options.clusterNodeProperties.x = node.x;\n }\n if (options.clusterNodeProperties.y === undefined) {\n options.clusterNodeProperties.y = node.y;\n }\n if (options.clusterNodeProperties.fixed === undefined) {\n options.clusterNodeProperties.fixed = {};\n options.clusterNodeProperties.fixed.x = node.options.fixed.x;\n options.clusterNodeProperties.fixed.y = node.options.fixed.y;\n }\n\n const childNodesObj = {};\n const childEdgesObj = {};\n const parentNodeId = node.id;\n const parentClonedOptions = NetworkUtil.cloneOptions(node);\n childNodesObj[parentNodeId] = node;\n\n // collect the nodes that will be in the cluster\n for (let i = 0; i < node.edges.length; i++) {\n const edge = node.edges[i];\n if (this.clusteredEdges[edge.id] === undefined) {\n const childNodeId = this._getConnectedId(edge, parentNodeId);\n\n // if the child node is not in a cluster\n if (this.clusteredNodes[childNodeId] === undefined) {\n if (childNodeId !== parentNodeId) {\n if (options.joinCondition === undefined) {\n childEdgesObj[edge.id] = edge;\n childNodesObj[childNodeId] = this.body.nodes[childNodeId];\n } else {\n // clone the options and insert some additional parameters that could be interesting.\n const childClonedOptions = NetworkUtil.cloneOptions(\n this.body.nodes[childNodeId]\n );\n if (\n options.joinCondition(\n parentClonedOptions,\n childClonedOptions\n ) === true\n ) {\n childEdgesObj[edge.id] = edge;\n childNodesObj[childNodeId] = this.body.nodes[childNodeId];\n }\n }\n } else {\n // swallow the edge if it is self-referencing.\n childEdgesObj[edge.id] = edge;\n }\n }\n }\n }\n const childNodeIDs = Object.keys(childNodesObj).map(function (childNode) {\n return childNodesObj[childNode].id;\n });\n\n for (const childNodeKey in childNodesObj) {\n if (!Object.prototype.hasOwnProperty.call(childNodesObj, childNodeKey))\n continue;\n\n const childNode = childNodesObj[childNodeKey];\n for (let y = 0; y < childNode.edges.length; y++) {\n const childEdge = childNode.edges[y];\n if (\n childNodeIDs.indexOf(this._getConnectedId(childEdge, childNode.id)) >\n -1\n ) {\n childEdgesObj[childEdge.id] = childEdge;\n }\n }\n }\n this._cluster(childNodesObj, childEdgesObj, options, refreshData);\n }\n\n /**\n * This function creates the edges that will be attached to the cluster\n * It looks for edges that are connected to the nodes from the \"outside' of the cluster.\n *\n * @param {{Node.id: vis.Node}} childNodesObj\n * @param {{vis.Edge.id: vis.Edge}} childEdgesObj\n * @param {object} clusterNodeProperties\n * @param {object} clusterEdgeProperties\n * @private\n */\n _createClusterEdges(\n childNodesObj,\n childEdgesObj,\n clusterNodeProperties,\n clusterEdgeProperties\n ) {\n let edge, childNodeId, childNode, toId, fromId, otherNodeId;\n\n // loop over all child nodes and their edges to find edges going out of the cluster\n // these edges will be replaced by clusterEdges.\n const childKeys = Object.keys(childNodesObj);\n const createEdges = [];\n for (let i = 0; i < childKeys.length; i++) {\n childNodeId = childKeys[i];\n childNode = childNodesObj[childNodeId];\n\n // construct new edges from the cluster to others\n for (let j = 0; j < childNode.edges.length; j++) {\n edge = childNode.edges[j];\n // we only handle edges that are visible to the system, not the disabled ones from the clustering process.\n if (this.clusteredEdges[edge.id] === undefined) {\n // self-referencing edges will be added to the \"hidden\" list\n if (edge.toId == edge.fromId) {\n childEdgesObj[edge.id] = edge;\n } else {\n // set up the from and to.\n if (edge.toId == childNodeId) {\n // this is a double equals because ints and strings can be interchanged here.\n toId = clusterNodeProperties.id;\n fromId = edge.fromId;\n otherNodeId = fromId;\n } else {\n toId = edge.toId;\n fromId = clusterNodeProperties.id;\n otherNodeId = toId;\n }\n }\n\n // Only edges from the cluster outwards are being replaced.\n if (childNodesObj[otherNodeId] === undefined) {\n createEdges.push({ edge: edge, fromId: fromId, toId: toId });\n }\n }\n }\n }\n\n //\n // Here we actually create the replacement edges.\n //\n // We could not do this in the loop above as the creation process\n // would add an edge to the edges array we are iterating over.\n //\n // NOTE: a clustered edge can have multiple base edges!\n //\n const newEdges = [];\n\n /**\n * Find a cluster edge which matches the given created edge.\n *\n * @param {vis.Edge} createdEdge\n * @returns {vis.Edge}\n */\n const getNewEdge = function (createdEdge) {\n for (let j = 0; j < newEdges.length; j++) {\n const newEdge = newEdges[j];\n\n // We replace both to and from edges with a single cluster edge\n const matchToDirection =\n createdEdge.fromId === newEdge.fromId &&\n createdEdge.toId === newEdge.toId;\n const matchFromDirection =\n createdEdge.fromId === newEdge.toId &&\n createdEdge.toId === newEdge.fromId;\n\n if (matchToDirection || matchFromDirection) {\n return newEdge;\n }\n }\n\n return null;\n };\n\n for (let j = 0; j < createEdges.length; j++) {\n const createdEdge = createEdges[j];\n const edge = createdEdge.edge;\n let newEdge = getNewEdge(createdEdge);\n\n if (newEdge === null) {\n // Create a clustered edge for this connection\n newEdge = this._createClusteredEdge(\n createdEdge.fromId,\n createdEdge.toId,\n edge,\n clusterEdgeProperties\n );\n\n newEdges.push(newEdge);\n } else {\n newEdge.clusteringEdgeReplacingIds.push(edge.id);\n }\n\n // also reference the new edge in the old edge\n this.body.edges[edge.id].edgeReplacedById = newEdge.id;\n\n // hide the replaced edge\n this._backupEdgeOptions(edge);\n edge.setOptions({ physics: false });\n }\n }\n\n /**\n * This function checks the options that can be supplied to the different cluster functions\n * for certain fields and inserts defaults if needed\n *\n * @param {object} options\n * @returns {*}\n * @private\n */\n _checkOptions(options = {}) {\n if (options.clusterEdgeProperties === undefined) {\n options.clusterEdgeProperties = {};\n }\n if (options.clusterNodeProperties === undefined) {\n options.clusterNodeProperties = {};\n }\n\n return options;\n }\n\n /**\n *\n * @param {object} childNodesObj | object with node objects, id as keys, same as childNodes except it also contains a source node\n * @param {object} childEdgesObj | object with edge objects, id as keys\n * @param {Array} options | object with {clusterNodeProperties, clusterEdgeProperties, processProperties}\n * @param {boolean} refreshData | when true, do not wrap up\n * @private\n */\n _cluster(childNodesObj, childEdgesObj, options, refreshData = true) {\n // Remove nodes which are already clustered\n const tmpNodesToRemove = [];\n for (const nodeId in childNodesObj) {\n if (Object.prototype.hasOwnProperty.call(childNodesObj, nodeId)) {\n if (this.clusteredNodes[nodeId] !== undefined) {\n tmpNodesToRemove.push(nodeId);\n }\n }\n }\n\n for (let n = 0; n < tmpNodesToRemove.length; ++n) {\n delete childNodesObj[tmpNodesToRemove[n]];\n }\n\n // kill condition: no nodes don't bother\n if (Object.keys(childNodesObj).length == 0) {\n return;\n }\n\n // allow clusters of 1 if options allow\n if (\n Object.keys(childNodesObj).length == 1 &&\n options.clusterNodeProperties.allowSingleNodeCluster != true\n ) {\n return;\n }\n\n let clusterNodeProperties = deepExtend({}, options.clusterNodeProperties);\n\n // construct the clusterNodeProperties\n if (options.processProperties !== undefined) {\n // get the childNode options\n const childNodesOptions = [];\n for (const nodeId in childNodesObj) {\n if (Object.prototype.hasOwnProperty.call(childNodesObj, nodeId)) {\n const clonedOptions = NetworkUtil.cloneOptions(childNodesObj[nodeId]);\n childNodesOptions.push(clonedOptions);\n }\n }\n\n // get cluster properties based on childNodes\n const childEdgesOptions = [];\n for (const edgeId in childEdgesObj) {\n if (Object.prototype.hasOwnProperty.call(childEdgesObj, edgeId)) {\n // these cluster edges will be removed on creation of the cluster.\n if (edgeId.substr(0, 12) !== \"clusterEdge:\") {\n const clonedOptions = NetworkUtil.cloneOptions(\n childEdgesObj[edgeId],\n \"edge\"\n );\n childEdgesOptions.push(clonedOptions);\n }\n }\n }\n\n clusterNodeProperties = options.processProperties(\n clusterNodeProperties,\n childNodesOptions,\n childEdgesOptions\n );\n if (!clusterNodeProperties) {\n throw new Error(\n \"The processProperties function does not return properties!\"\n );\n }\n }\n\n // check if we have an unique id;\n if (clusterNodeProperties.id === undefined) {\n clusterNodeProperties.id = \"cluster:\" + randomUUID();\n }\n const clusterId = clusterNodeProperties.id;\n\n if (clusterNodeProperties.label === undefined) {\n clusterNodeProperties.label = \"cluster\";\n }\n\n // give the clusterNode a position if it does not have one.\n let pos = undefined;\n if (clusterNodeProperties.x === undefined) {\n pos = this._getClusterPosition(childNodesObj);\n clusterNodeProperties.x = pos.x;\n }\n if (clusterNodeProperties.y === undefined) {\n if (pos === undefined) {\n pos = this._getClusterPosition(childNodesObj);\n }\n clusterNodeProperties.y = pos.y;\n }\n\n // force the ID to remain the same\n clusterNodeProperties.id = clusterId;\n\n // create the cluster Node\n // Note that allowSingleNodeCluster, if present, is stored in the options as well\n const clusterNode = this.body.functions.createNode(\n clusterNodeProperties,\n Cluster\n );\n clusterNode.containedNodes = childNodesObj;\n clusterNode.containedEdges = childEdgesObj;\n // cache a copy from the cluster edge properties if we have to reconnect others later on\n clusterNode.clusterEdgeProperties = options.clusterEdgeProperties;\n\n // finally put the cluster node into global\n this.body.nodes[clusterNodeProperties.id] = clusterNode;\n\n this._clusterEdges(\n childNodesObj,\n childEdgesObj,\n clusterNodeProperties,\n options.clusterEdgeProperties\n );\n\n // set ID to undefined so no duplicates arise\n clusterNodeProperties.id = undefined;\n\n // wrap up\n if (refreshData === true) {\n this.body.emitter.emit(\"_dataChanged\");\n }\n }\n\n /**\n *\n * @param {Edge} edge\n * @private\n */\n _backupEdgeOptions(edge) {\n if (this.clusteredEdges[edge.id] === undefined) {\n this.clusteredEdges[edge.id] = { physics: edge.options.physics };\n }\n }\n\n /**\n *\n * @param {Edge} edge\n * @private\n */\n _restoreEdge(edge) {\n const originalOptions = this.clusteredEdges[edge.id];\n if (originalOptions !== undefined) {\n edge.setOptions({ physics: originalOptions.physics });\n delete this.clusteredEdges[edge.id];\n }\n }\n\n /**\n * Check if a node is a cluster.\n *\n * @param {Node.id} nodeId\n * @returns {*}\n */\n isCluster(nodeId) {\n if (this.body.nodes[nodeId] !== undefined) {\n return this.body.nodes[nodeId].isCluster === true;\n } else {\n console.error(\"Node does not exist.\");\n return false;\n }\n }\n\n /**\n * get the position of the cluster node based on what's inside\n *\n * @param {object} childNodesObj | object with node objects, id as keys\n * @returns {{x: number, y: number}}\n * @private\n */\n _getClusterPosition(childNodesObj) {\n const childKeys = Object.keys(childNodesObj);\n let minX = childNodesObj[childKeys[0]].x;\n let maxX = childNodesObj[childKeys[0]].x;\n let minY = childNodesObj[childKeys[0]].y;\n let maxY = childNodesObj[childKeys[0]].y;\n let node;\n for (let i = 1; i < childKeys.length; i++) {\n node = childNodesObj[childKeys[i]];\n minX = node.x < minX ? node.x : minX;\n maxX = node.x > maxX ? node.x : maxX;\n minY = node.y < minY ? node.y : minY;\n maxY = node.y > maxY ? node.y : maxY;\n }\n\n return { x: 0.5 * (minX + maxX), y: 0.5 * (minY + maxY) };\n }\n\n /**\n * Open a cluster by calling this function.\n *\n * @param {vis.Edge.id} clusterNodeId | the ID of the cluster node\n * @param {object} options\n * @param {boolean} refreshData | wrap up afterwards if not true\n */\n openCluster(clusterNodeId, options, refreshData = true) {\n // kill conditions\n if (clusterNodeId === undefined) {\n throw new Error(\"No clusterNodeId supplied to openCluster.\");\n }\n\n const clusterNode = this.body.nodes[clusterNodeId];\n\n if (clusterNode === undefined) {\n throw new Error(\n \"The clusterNodeId supplied to openCluster does not exist.\"\n );\n }\n if (\n clusterNode.isCluster !== true ||\n clusterNode.containedNodes === undefined ||\n clusterNode.containedEdges === undefined\n ) {\n throw new Error(\"The node:\" + clusterNodeId + \" is not a valid cluster.\");\n }\n\n // Check if current cluster is clustered itself\n const stack = this.findNode(clusterNodeId);\n const parentIndex = stack.indexOf(clusterNodeId) - 1;\n if (parentIndex >= 0) {\n // Current cluster is clustered; transfer contained nodes and edges to parent\n const parentClusterNodeId = stack[parentIndex];\n const parentClusterNode = this.body.nodes[parentClusterNodeId];\n\n // clustering.clusteredNodes and clustering.clusteredEdges remain unchanged\n parentClusterNode._openChildCluster(clusterNodeId);\n\n // All components of child cluster node have been transferred. It can die now.\n delete this.body.nodes[clusterNodeId];\n if (refreshData === true) {\n this.body.emitter.emit(\"_dataChanged\");\n }\n\n return;\n }\n\n // main body\n const containedNodes = clusterNode.containedNodes;\n const containedEdges = clusterNode.containedEdges;\n\n // allow the user to position the nodes after release.\n if (\n options !== undefined &&\n options.releaseFunction !== undefined &&\n typeof options.releaseFunction === \"function\"\n ) {\n const positions = {};\n const clusterPosition = { x: clusterNode.x, y: clusterNode.y };\n for (const nodeId in containedNodes) {\n if (Object.prototype.hasOwnProperty.call(containedNodes, nodeId)) {\n const containedNode = this.body.nodes[nodeId];\n positions[nodeId] = { x: containedNode.x, y: containedNode.y };\n }\n }\n const newPositions = options.releaseFunction(clusterPosition, positions);\n\n for (const nodeId in containedNodes) {\n if (Object.prototype.hasOwnProperty.call(containedNodes, nodeId)) {\n const containedNode = this.body.nodes[nodeId];\n if (newPositions[nodeId] !== undefined) {\n containedNode.x =\n newPositions[nodeId].x === undefined\n ? clusterNode.x\n : newPositions[nodeId].x;\n containedNode.y =\n newPositions[nodeId].y === undefined\n ? clusterNode.y\n : newPositions[nodeId].y;\n }\n }\n }\n } else {\n // copy the position from the cluster\n forEach(containedNodes, function (containedNode) {\n // inherit position\n if (containedNode.options.fixed.x === false) {\n containedNode.x = clusterNode.x;\n }\n if (containedNode.options.fixed.y === false) {\n containedNode.y = clusterNode.y;\n }\n });\n }\n\n // release nodes\n for (const nodeId in containedNodes) {\n if (Object.prototype.hasOwnProperty.call(containedNodes, nodeId)) {\n const containedNode = this.body.nodes[nodeId];\n\n // inherit speed\n containedNode.vx = clusterNode.vx;\n containedNode.vy = clusterNode.vy;\n\n containedNode.setOptions({ physics: true });\n\n delete this.clusteredNodes[nodeId];\n }\n }\n\n // copy the clusterNode edges because we cannot iterate over an object that we add or remove from.\n const edgesToBeDeleted = [];\n for (let i = 0; i < clusterNode.edges.length; i++) {\n edgesToBeDeleted.push(clusterNode.edges[i]);\n }\n\n // actually handling the deleting.\n for (let i = 0; i < edgesToBeDeleted.length; i++) {\n const edge = edgesToBeDeleted[i];\n const otherNodeId = this._getConnectedId(edge, clusterNodeId);\n const otherNode = this.clusteredNodes[otherNodeId];\n\n for (let j = 0; j < edge.clusteringEdgeReplacingIds.length; j++) {\n const transferId = edge.clusteringEdgeReplacingIds[j];\n const transferEdge = this.body.edges[transferId];\n if (transferEdge === undefined) continue;\n\n // if the other node is in another cluster, we transfer ownership of this edge to the other cluster\n if (otherNode !== undefined) {\n // transfer ownership:\n const otherCluster = this.body.nodes[otherNode.clusterId];\n otherCluster.containedEdges[transferEdge.id] = transferEdge;\n\n // delete local reference\n delete containedEdges[transferEdge.id];\n\n // get to and from\n let fromId = transferEdge.fromId;\n let toId = transferEdge.toId;\n if (transferEdge.toId == otherNodeId) {\n toId = otherNode.clusterId;\n } else {\n fromId = otherNode.clusterId;\n }\n\n // create new cluster edge from the otherCluster\n this._createClusteredEdge(\n fromId,\n toId,\n transferEdge,\n otherCluster.clusterEdgeProperties,\n { hidden: false, physics: true }\n );\n } else {\n this._restoreEdge(transferEdge);\n }\n }\n\n edge.remove();\n }\n\n // handle the releasing of the edges\n for (const edgeId in containedEdges) {\n if (Object.prototype.hasOwnProperty.call(containedEdges, edgeId)) {\n this._restoreEdge(containedEdges[edgeId]);\n }\n }\n\n // remove clusterNode\n delete this.body.nodes[clusterNodeId];\n\n if (refreshData === true) {\n this.body.emitter.emit(\"_dataChanged\");\n }\n }\n\n /**\n *\n * @param {Cluster.id} clusterId\n * @returns {Array.}\n */\n getNodesInCluster(clusterId) {\n const nodesArray = [];\n if (this.isCluster(clusterId) === true) {\n const containedNodes = this.body.nodes[clusterId].containedNodes;\n for (const nodeId in containedNodes) {\n if (Object.prototype.hasOwnProperty.call(containedNodes, nodeId)) {\n nodesArray.push(this.body.nodes[nodeId].id);\n }\n }\n }\n\n return nodesArray;\n }\n\n /**\n * Get the stack clusterId's that a certain node resides in. cluster A -> cluster B -> cluster C -> node\n *\n * If a node can't be found in the chain, return an empty array.\n *\n * @param {string|number} nodeId\n * @returns {Array}\n */\n findNode(nodeId) {\n const stack = [];\n const max = 100;\n let counter = 0;\n let node;\n\n while (this.clusteredNodes[nodeId] !== undefined && counter < max) {\n node = this.body.nodes[nodeId];\n if (node === undefined) return [];\n stack.push(node.id);\n\n nodeId = this.clusteredNodes[nodeId].clusterId;\n counter++;\n }\n\n node = this.body.nodes[nodeId];\n if (node === undefined) return [];\n stack.push(node.id);\n\n stack.reverse();\n return stack;\n }\n\n /**\n * Using a clustered nodeId, update with the new options\n *\n * @param {Node.id} clusteredNodeId\n * @param {object} newOptions\n */\n updateClusteredNode(clusteredNodeId, newOptions) {\n if (clusteredNodeId === undefined) {\n throw new Error(\"No clusteredNodeId supplied to updateClusteredNode.\");\n }\n if (newOptions === undefined) {\n throw new Error(\"No newOptions supplied to updateClusteredNode.\");\n }\n if (this.body.nodes[clusteredNodeId] === undefined) {\n throw new Error(\n \"The clusteredNodeId supplied to updateClusteredNode does not exist.\"\n );\n }\n\n this.body.nodes[clusteredNodeId].setOptions(newOptions);\n this.body.emitter.emit(\"_dataChanged\");\n }\n\n /**\n * Using a base edgeId, update all related clustered edges with the new options\n *\n * @param {vis.Edge.id} startEdgeId\n * @param {object} newOptions\n */\n updateEdge(startEdgeId, newOptions) {\n if (startEdgeId === undefined) {\n throw new Error(\"No startEdgeId supplied to updateEdge.\");\n }\n if (newOptions === undefined) {\n throw new Error(\"No newOptions supplied to updateEdge.\");\n }\n if (this.body.edges[startEdgeId] === undefined) {\n throw new Error(\"The startEdgeId supplied to updateEdge does not exist.\");\n }\n\n const allEdgeIds = this.getClusteredEdges(startEdgeId);\n for (let i = 0; i < allEdgeIds.length; i++) {\n const edge = this.body.edges[allEdgeIds[i]];\n edge.setOptions(newOptions);\n }\n this.body.emitter.emit(\"_dataChanged\");\n }\n\n /**\n * Get a stack of clusterEdgeId's (+base edgeid) that a base edge is the same as. cluster edge C -> cluster edge B -> cluster edge A -> base edge(edgeId)\n *\n * @param {vis.Edge.id} edgeId\n * @returns {Array.}\n */\n getClusteredEdges(edgeId) {\n const stack = [];\n const max = 100;\n let counter = 0;\n\n while (\n edgeId !== undefined &&\n this.body.edges[edgeId] !== undefined &&\n counter < max\n ) {\n stack.push(this.body.edges[edgeId].id);\n edgeId = this.body.edges[edgeId].edgeReplacedById;\n counter++;\n }\n stack.reverse();\n return stack;\n }\n\n /**\n * Get the base edge id of clusterEdgeId. cluster edge (clusteredEdgeId) -> cluster edge B -> cluster edge C -> base edge\n *\n * @param {vis.Edge.id} clusteredEdgeId\n * @returns {vis.Edge.id} baseEdgeId\n *\n * TODO: deprecate in 5.0.0. Method getBaseEdges() is the correct one to use.\n */\n getBaseEdge(clusteredEdgeId) {\n // Just kludge this by returning the first base edge id found\n return this.getBaseEdges(clusteredEdgeId)[0];\n }\n\n /**\n * Get all regular edges for this clustered edge id.\n *\n * @param {vis.Edge.id} clusteredEdgeId\n * @returns {Array.} all baseEdgeId's under this clustered edge\n */\n getBaseEdges(clusteredEdgeId) {\n const IdsToHandle = [clusteredEdgeId];\n const doneIds = [];\n const foundIds = [];\n const max = 100;\n let counter = 0;\n\n while (IdsToHandle.length > 0 && counter < max) {\n const nextId = IdsToHandle.pop();\n if (nextId === undefined) continue; // Paranoia here and onwards\n const nextEdge = this.body.edges[nextId];\n if (nextEdge === undefined) continue;\n counter++;\n\n const replacingIds = nextEdge.clusteringEdgeReplacingIds;\n if (replacingIds === undefined) {\n // nextId is a base id\n foundIds.push(nextId);\n } else {\n // Another cluster edge, unravel this one as well\n for (let i = 0; i < replacingIds.length; ++i) {\n const replacingId = replacingIds[i];\n\n // Don't add if already handled\n // TODO: never triggers; find a test-case which does\n if (\n IdsToHandle.indexOf(replacingIds) !== -1 ||\n doneIds.indexOf(replacingIds) !== -1\n ) {\n continue;\n }\n\n IdsToHandle.push(replacingId);\n }\n }\n\n doneIds.push(nextId);\n }\n\n return foundIds;\n }\n\n /**\n * Get the Id the node is connected to\n *\n * @param {vis.Edge} edge\n * @param {Node.id} nodeId\n * @returns {*}\n * @private\n */\n _getConnectedId(edge, nodeId) {\n if (edge.toId != nodeId) {\n return edge.toId;\n } else if (edge.fromId != nodeId) {\n return edge.fromId;\n } else {\n return edge.fromId;\n }\n }\n\n /**\n * We determine how many connections denote an important hub.\n * We take the mean + 2*std as the important hub size. (Assuming a normal distribution of data, ~2.2%)\n *\n * @returns {number}\n * @private\n */\n _getHubSize() {\n let average = 0;\n let averageSquared = 0;\n let hubCounter = 0;\n let largestHub = 0;\n\n for (let i = 0; i < this.body.nodeIndices.length; i++) {\n const node = this.body.nodes[this.body.nodeIndices[i]];\n if (node.edges.length > largestHub) {\n largestHub = node.edges.length;\n }\n average += node.edges.length;\n averageSquared += Math.pow(node.edges.length, 2);\n hubCounter += 1;\n }\n average = average / hubCounter;\n averageSquared = averageSquared / hubCounter;\n\n const variance = averageSquared - Math.pow(average, 2);\n const standardDeviation = Math.sqrt(variance);\n\n let hubThreshold = Math.floor(average + 2 * standardDeviation);\n\n // always have at least one to cluster\n if (hubThreshold > largestHub) {\n hubThreshold = largestHub;\n }\n\n return hubThreshold;\n }\n\n /**\n * Create an edge for the cluster representation.\n *\n * @param {Node.id} fromId\n * @param {Node.id} toId\n * @param {vis.Edge} baseEdge\n * @param {object} clusterEdgeProperties\n * @param {object} extraOptions\n * @returns {Edge} newly created clustered edge\n * @private\n */\n _createClusteredEdge(\n fromId,\n toId,\n baseEdge,\n clusterEdgeProperties,\n extraOptions\n ) {\n // copy the options of the edge we will replace\n const clonedOptions = NetworkUtil.cloneOptions(baseEdge, \"edge\");\n // make sure the properties of clusterEdges are superimposed on it\n deepExtend(clonedOptions, clusterEdgeProperties);\n\n // set up the edge\n clonedOptions.from = fromId;\n clonedOptions.to = toId;\n clonedOptions.id = \"clusterEdge:\" + randomUUID();\n\n // apply the edge specific options to it if specified\n if (extraOptions !== undefined) {\n deepExtend(clonedOptions, extraOptions);\n }\n\n const newEdge = this.body.functions.createEdge(clonedOptions);\n newEdge.clusteringEdgeReplacingIds = [baseEdge.id];\n newEdge.connect();\n\n // Register the new edge\n this.body.edges[newEdge.id] = newEdge;\n\n return newEdge;\n }\n\n /**\n * Add the passed child nodes and edges to the given cluster node.\n *\n * @param {object | Node} childNodes hash of nodes or single node to add in cluster\n * @param {object | Edge} childEdges hash of edges or single edge to take into account when clustering\n * @param {Node} clusterNode cluster node to add nodes and edges to\n * @param {object} [clusterEdgeProperties]\n * @private\n */\n _clusterEdges(childNodes, childEdges, clusterNode, clusterEdgeProperties) {\n if (childEdges instanceof Edge) {\n const edge = childEdges;\n const obj = {};\n obj[edge.id] = edge;\n childEdges = obj;\n }\n\n if (childNodes instanceof Node) {\n const node = childNodes;\n const obj = {};\n obj[node.id] = node;\n childNodes = obj;\n }\n\n if (clusterNode === undefined || clusterNode === null) {\n throw new Error(\"_clusterEdges: parameter clusterNode required\");\n }\n\n if (clusterEdgeProperties === undefined) {\n // Take the required properties from the cluster node\n clusterEdgeProperties = clusterNode.clusterEdgeProperties;\n }\n\n // create the new edges that will connect to the cluster.\n // All self-referencing edges will be added to childEdges here.\n this._createClusterEdges(\n childNodes,\n childEdges,\n clusterNode,\n clusterEdgeProperties\n );\n\n // disable the childEdges\n for (const edgeId in childEdges) {\n if (Object.prototype.hasOwnProperty.call(childEdges, edgeId)) {\n if (this.body.edges[edgeId] !== undefined) {\n const edge = this.body.edges[edgeId];\n // cache the options before changing\n this._backupEdgeOptions(edge);\n // disable physics and hide the edge\n edge.setOptions({ physics: false });\n }\n }\n }\n\n // disable the childNodes\n for (const nodeId in childNodes) {\n if (Object.prototype.hasOwnProperty.call(childNodes, nodeId)) {\n this.clusteredNodes[nodeId] = {\n clusterId: clusterNode.id,\n node: this.body.nodes[nodeId],\n };\n this.body.nodes[nodeId].setOptions({ physics: false });\n }\n }\n }\n\n /**\n * Determine in which cluster given nodeId resides.\n *\n * If not in cluster, return undefined.\n *\n * NOTE: If you know a cleaner way to do this, please enlighten me (wimrijnders).\n *\n * @param {Node.id} nodeId\n * @returns {Node|undefined} Node instance for cluster, if present\n * @private\n */\n _getClusterNodeForNode(nodeId) {\n if (nodeId === undefined) return undefined;\n const clusteredNode = this.clusteredNodes[nodeId];\n\n // NOTE: If no cluster info found, it should actually be an error\n if (clusteredNode === undefined) return undefined;\n const clusterId = clusteredNode.clusterId;\n if (clusterId === undefined) return undefined;\n\n return this.body.nodes[clusterId];\n }\n\n /**\n * Internal helper function for conditionally removing items in array\n *\n * Done like this because Array.filter() is not fully supported by all IE's.\n *\n * @param {Array} arr\n * @param {Function} callback\n * @returns {Array}\n * @private\n */\n _filter(arr, callback) {\n const ret = [];\n\n forEach(arr, (item) => {\n if (callback(item)) {\n ret.push(item);\n }\n });\n\n return ret;\n }\n\n /**\n * Scan all edges for changes in clustering and adjust this if necessary.\n *\n * Call this (internally) after there has been a change in node or edge data.\n *\n * Pre: States of this.body.nodes and this.body.edges consistent\n * Pre: this.clusteredNodes and this.clusteredEdge consistent with containedNodes and containedEdges\n * of cluster nodes.\n */\n _updateState() {\n let nodeId;\n const deletedNodeIds = [];\n const deletedEdgeIds = {};\n\n /**\n * Utility function to iterate over clustering nodes only\n *\n * @param {Function} callback function to call for each cluster node\n */\n const eachClusterNode = (callback) => {\n forEach(this.body.nodes, (node) => {\n if (node.isCluster === true) {\n callback(node);\n }\n });\n };\n\n //\n // Remove deleted regular nodes from clustering\n //\n\n // Determine the deleted nodes\n for (nodeId in this.clusteredNodes) {\n if (!Object.prototype.hasOwnProperty.call(this.clusteredNodes, nodeId))\n continue;\n const node = this.body.nodes[nodeId];\n\n if (node === undefined) {\n deletedNodeIds.push(nodeId);\n }\n }\n\n // Remove nodes from cluster nodes\n eachClusterNode(function (clusterNode) {\n for (let n = 0; n < deletedNodeIds.length; n++) {\n delete clusterNode.containedNodes[deletedNodeIds[n]];\n }\n });\n\n // Remove nodes from cluster list\n for (let n = 0; n < deletedNodeIds.length; n++) {\n delete this.clusteredNodes[deletedNodeIds[n]];\n }\n\n //\n // Remove deleted edges from clustering\n //\n\n // Add the deleted clustered edges to the list\n forEach(this.clusteredEdges, (edgeId) => {\n const edge = this.body.edges[edgeId];\n if (edge === undefined || !edge.endPointsValid()) {\n deletedEdgeIds[edgeId] = edgeId;\n }\n });\n\n // Cluster nodes can also contain edges which are not clustered,\n // i.e. nodes 1-2 within cluster with an edge in between.\n // So the cluster nodes also need to be scanned for invalid edges\n eachClusterNode(function (clusterNode) {\n forEach(clusterNode.containedEdges, (edge, edgeId) => {\n if (!edge.endPointsValid() && !deletedEdgeIds[edgeId]) {\n deletedEdgeIds[edgeId] = edgeId;\n }\n });\n });\n\n // Also scan for cluster edges which need to be removed in the active list.\n // Regular edges have been removed beforehand, so this only picks up the cluster edges.\n forEach(this.body.edges, (edge, edgeId) => {\n // Explicitly scan the contained edges for validity\n let isValid = true;\n const replacedIds = edge.clusteringEdgeReplacingIds;\n if (replacedIds !== undefined) {\n let numValid = 0;\n\n forEach(replacedIds, (containedEdgeId) => {\n const containedEdge = this.body.edges[containedEdgeId];\n\n if (containedEdge !== undefined && containedEdge.endPointsValid()) {\n numValid += 1;\n }\n });\n\n isValid = numValid > 0;\n }\n\n if (!edge.endPointsValid() || !isValid) {\n deletedEdgeIds[edgeId] = edgeId;\n }\n });\n\n // Remove edges from cluster nodes\n eachClusterNode((clusterNode) => {\n forEach(deletedEdgeIds, (deletedEdgeId) => {\n delete clusterNode.containedEdges[deletedEdgeId];\n\n forEach(clusterNode.edges, (edge, m) => {\n if (edge.id === deletedEdgeId) {\n clusterNode.edges[m] = null; // Don't want to directly delete here, because in the loop\n return;\n }\n\n edge.clusteringEdgeReplacingIds = this._filter(\n edge.clusteringEdgeReplacingIds,\n function (id) {\n return !deletedEdgeIds[id];\n }\n );\n });\n\n // Clean up the nulls\n clusterNode.edges = this._filter(clusterNode.edges, function (item) {\n return item !== null;\n });\n });\n });\n\n // Remove from cluster list\n forEach(deletedEdgeIds, (edgeId) => {\n delete this.clusteredEdges[edgeId];\n });\n\n // Remove cluster edges from active list (this.body.edges).\n // deletedEdgeIds still contains id of regular edges, but these should all\n // be gone when you reach here.\n forEach(deletedEdgeIds, (edgeId) => {\n delete this.body.edges[edgeId];\n });\n\n //\n // Check changed cluster state of edges\n //\n\n // Iterating over keys here, because edges may be removed in the loop\n const ids = Object.keys(this.body.edges);\n forEach(ids, (edgeId) => {\n const edge = this.body.edges[edgeId];\n\n const shouldBeClustered =\n this._isClusteredNode(edge.fromId) || this._isClusteredNode(edge.toId);\n if (shouldBeClustered === this._isClusteredEdge(edge.id)) {\n return; // all is well\n }\n\n if (shouldBeClustered) {\n // add edge to clustering\n const clusterFrom = this._getClusterNodeForNode(edge.fromId);\n if (clusterFrom !== undefined) {\n this._clusterEdges(this.body.nodes[edge.fromId], edge, clusterFrom);\n }\n\n const clusterTo = this._getClusterNodeForNode(edge.toId);\n if (clusterTo !== undefined) {\n this._clusterEdges(this.body.nodes[edge.toId], edge, clusterTo);\n }\n\n // TODO: check that it works for both edges clustered\n // (This might be paranoia)\n } else {\n delete this._clusterEdges[edgeId];\n this._restoreEdge(edge);\n // This should not be happening, the state should\n // be properly updated at this point.\n //\n // If it *is* reached during normal operation, then we have to implement\n // undo clustering for this edge here.\n // throw new Error('remove edge from clustering not implemented!')\n }\n });\n\n // Clusters may be nested to any level. Keep on opening until nothing to open\n let changed = false;\n let continueLoop = true;\n while (continueLoop) {\n const clustersToOpen = [];\n\n // Determine the id's of clusters that need opening\n eachClusterNode(function (clusterNode) {\n const numNodes = Object.keys(clusterNode.containedNodes).length;\n const allowSingle = clusterNode.options.allowSingleNodeCluster === true;\n if ((allowSingle && numNodes < 1) || (!allowSingle && numNodes < 2)) {\n clustersToOpen.push(clusterNode.id);\n }\n });\n\n // Open them\n for (let n = 0; n < clustersToOpen.length; ++n) {\n this.openCluster(\n clustersToOpen[n],\n {},\n false /* Don't refresh, we're in an refresh/update already */\n );\n }\n\n continueLoop = clustersToOpen.length > 0;\n changed = changed || continueLoop;\n }\n\n if (changed) {\n this._updateState(); // Redo this method (recursion possible! should be safe)\n }\n }\n\n /**\n * Determine if node with given id is part of a cluster.\n *\n * @param {Node.id} nodeId\n * @returns {boolean} true if part of a cluster.\n */\n _isClusteredNode(nodeId) {\n return this.clusteredNodes[nodeId] !== undefined;\n }\n\n /**\n * Determine if edge with given id is not visible due to clustering.\n *\n * An edge is considered clustered if:\n * - it is directly replaced by a clustering edge\n * - any of its connecting nodes is in a cluster\n *\n * @param {vis.Edge.id} edgeId\n * @returns {boolean} true if part of a cluster.\n */\n _isClusteredEdge(edgeId) {\n return this.clusteredEdges[edgeId] !== undefined;\n }\n}\n\nexport default ClusterEngine;\n","import { selectiveDeepExtend } from \"vis-util/esnext\";\n\n/**\n * Initializes window.requestAnimationFrame() to a usable form.\n *\n * Specifically, set up this method for the case of running on node.js with jsdom enabled.\n *\n * NOTES:\n *\n * On node.js, when calling this directly outside of this class, `window` is not defined.\n * This happens even if jsdom is used.\n * For node.js + jsdom, `window` is available at the moment the constructor is called.\n * For this reason, the called is placed within the constructor.\n * Even then, `window.requestAnimationFrame()` is not defined, so it still needs to be added.\n * During unit testing, it happens that the window object is reset during execution, causing\n * a runtime error due to missing `requestAnimationFrame()`. This needs to be compensated for,\n * see `_requestNextFrame()`.\n * Since this is a global object, it may affect other modules besides `Network`. With normal\n * usage, this does not cause any problems. During unit testing, errors may occur. These have\n * been compensated for, see comment block in _requestNextFrame().\n *\n * @private\n */\nfunction _initRequestAnimationFrame() {\n let func;\n\n if (window !== undefined) {\n func =\n window.requestAnimationFrame ||\n window.mozRequestAnimationFrame ||\n window.webkitRequestAnimationFrame ||\n window.msRequestAnimationFrame;\n }\n\n if (func === undefined) {\n // window or method not present, setting mock requestAnimationFrame\n window.requestAnimationFrame = function (callback) {\n //console.log(\"Called mock requestAnimationFrame\");\n callback();\n };\n } else {\n window.requestAnimationFrame = func;\n }\n}\n\n/**\n * The canvas renderer\n */\nclass CanvasRenderer {\n /**\n * @param {object} body\n * @param {Canvas} canvas\n */\n constructor(body, canvas) {\n _initRequestAnimationFrame();\n this.body = body;\n this.canvas = canvas;\n\n this.redrawRequested = false;\n this.renderTimer = undefined;\n this.requiresTimeout = true;\n this.renderingActive = false;\n this.renderRequests = 0;\n this.allowRedraw = true;\n\n this.dragging = false;\n this.zooming = false;\n this.options = {};\n this.defaultOptions = {\n hideEdgesOnDrag: false,\n hideEdgesOnZoom: false,\n hideNodesOnDrag: false,\n };\n Object.assign(this.options, this.defaultOptions);\n\n this._determineBrowserMethod();\n this.bindEventListeners();\n }\n\n /**\n * Binds event listeners\n */\n bindEventListeners() {\n this.body.emitter.on(\"dragStart\", () => {\n this.dragging = true;\n });\n this.body.emitter.on(\"dragEnd\", () => {\n this.dragging = false;\n });\n this.body.emitter.on(\"zoom\", () => {\n this.zooming = true;\n window.clearTimeout(this.zoomTimeoutId);\n this.zoomTimeoutId = window.setTimeout(() => {\n this.zooming = false;\n this._requestRedraw.bind(this)();\n }, 250);\n });\n this.body.emitter.on(\"_resizeNodes\", () => {\n this._resizeNodes();\n });\n this.body.emitter.on(\"_redraw\", () => {\n if (this.renderingActive === false) {\n this._redraw();\n }\n });\n this.body.emitter.on(\"_blockRedraw\", () => {\n this.allowRedraw = false;\n });\n this.body.emitter.on(\"_allowRedraw\", () => {\n this.allowRedraw = true;\n this.redrawRequested = false;\n });\n this.body.emitter.on(\"_requestRedraw\", this._requestRedraw.bind(this));\n this.body.emitter.on(\"_startRendering\", () => {\n this.renderRequests += 1;\n this.renderingActive = true;\n this._startRendering();\n });\n this.body.emitter.on(\"_stopRendering\", () => {\n this.renderRequests -= 1;\n this.renderingActive = this.renderRequests > 0;\n this.renderTimer = undefined;\n });\n this.body.emitter.on(\"destroy\", () => {\n this.renderRequests = 0;\n this.allowRedraw = false;\n this.renderingActive = false;\n if (this.requiresTimeout === true) {\n clearTimeout(this.renderTimer);\n } else {\n window.cancelAnimationFrame(this.renderTimer);\n }\n this.body.emitter.off();\n });\n }\n\n /**\n *\n * @param {object} options\n */\n setOptions(options) {\n if (options !== undefined) {\n const fields = [\"hideEdgesOnDrag\", \"hideEdgesOnZoom\", \"hideNodesOnDrag\"];\n selectiveDeepExtend(fields, this.options, options);\n }\n }\n\n /**\n * Prepare the drawing of the next frame.\n *\n * Calls the callback when the next frame can or will be drawn.\n *\n * @param {Function} callback\n * @param {number} delay - timeout case only, wait this number of milliseconds\n * @returns {Function | undefined}\n * @private\n */\n _requestNextFrame(callback, delay) {\n // During unit testing, it happens that the mock window object is reset while\n // the next frame is still pending. Then, either 'window' is not present, or\n // 'requestAnimationFrame()' is not present because it is not defined on the\n // mock window object.\n //\n // As a consequence, unrelated unit tests may appear to fail, even if the problem\n // described happens in the current unit test.\n //\n // This is not something that will happen in normal operation, but we still need\n // to take it into account.\n //\n if (typeof window === \"undefined\") return; // Doing `if (window === undefined)` does not work here!\n\n let timer;\n\n const myWindow = window; // Grab a reference to reduce the possibility that 'window' is reset\n // while running this method.\n\n if (this.requiresTimeout === true) {\n // wait given number of milliseconds and perform the animation step function\n timer = myWindow.setTimeout(callback, delay);\n } else {\n if (myWindow.requestAnimationFrame) {\n timer = myWindow.requestAnimationFrame(callback);\n }\n }\n\n return timer;\n }\n\n /**\n *\n * @private\n */\n _startRendering() {\n if (this.renderingActive === true) {\n if (this.renderTimer === undefined) {\n this.renderTimer = this._requestNextFrame(\n this._renderStep.bind(this),\n this.simulationInterval\n );\n }\n }\n }\n\n /**\n *\n * @private\n */\n _renderStep() {\n if (this.renderingActive === true) {\n // reset the renderTimer so a new scheduled animation step can be set\n this.renderTimer = undefined;\n\n if (this.requiresTimeout === true) {\n // this schedules a new simulation step\n this._startRendering();\n }\n\n this._redraw();\n\n if (this.requiresTimeout === false) {\n // this schedules a new simulation step\n this._startRendering();\n }\n }\n }\n\n /**\n * Redraw the network with the current data\n * chart will be resized too.\n */\n redraw() {\n this.body.emitter.emit(\"setSize\");\n this._redraw();\n }\n\n /**\n * Redraw the network with the current data\n *\n * @private\n */\n _requestRedraw() {\n if (\n this.redrawRequested !== true &&\n this.renderingActive === false &&\n this.allowRedraw === true\n ) {\n this.redrawRequested = true;\n this._requestNextFrame(() => {\n this._redraw(false);\n }, 0);\n }\n }\n\n /**\n * Redraw the network with the current data\n *\n * @param {boolean} [hidden=false] | Used to get the first estimate of the node sizes.\n * Only the nodes are drawn after which they are quickly drawn over.\n * @private\n */\n _redraw(hidden = false) {\n if (this.allowRedraw === true) {\n this.body.emitter.emit(\"initRedraw\");\n\n this.redrawRequested = false;\n\n const drawLater = {\n drawExternalLabels: null,\n };\n\n // when the container div was hidden, this fixes it back up!\n if (\n this.canvas.frame.canvas.width === 0 ||\n this.canvas.frame.canvas.height === 0\n ) {\n this.canvas.setSize();\n }\n\n this.canvas.setTransform();\n\n const ctx = this.canvas.getContext();\n\n // clear the canvas\n const w = this.canvas.frame.canvas.clientWidth;\n const h = this.canvas.frame.canvas.clientHeight;\n ctx.clearRect(0, 0, w, h);\n\n // if the div is hidden, we stop the redraw here for performance.\n if (this.canvas.frame.clientWidth === 0) {\n return;\n }\n\n // set scaling and translation\n ctx.save();\n ctx.translate(this.body.view.translation.x, this.body.view.translation.y);\n ctx.scale(this.body.view.scale, this.body.view.scale);\n\n ctx.beginPath();\n this.body.emitter.emit(\"beforeDrawing\", ctx);\n ctx.closePath();\n\n if (hidden === false) {\n if (\n (this.dragging === false ||\n (this.dragging === true &&\n this.options.hideEdgesOnDrag === false)) &&\n (this.zooming === false ||\n (this.zooming === true && this.options.hideEdgesOnZoom === false))\n ) {\n this._drawEdges(ctx);\n }\n }\n\n if (\n this.dragging === false ||\n (this.dragging === true && this.options.hideNodesOnDrag === false)\n ) {\n const { drawExternalLabels } = this._drawNodes(ctx, hidden);\n drawLater.drawExternalLabels = drawExternalLabels;\n }\n\n // draw the arrows last so they will be at the top\n if (hidden === false) {\n if (\n (this.dragging === false ||\n (this.dragging === true &&\n this.options.hideEdgesOnDrag === false)) &&\n (this.zooming === false ||\n (this.zooming === true && this.options.hideEdgesOnZoom === false))\n ) {\n this._drawArrows(ctx);\n }\n }\n\n if (drawLater.drawExternalLabels != null) {\n drawLater.drawExternalLabels();\n }\n\n if (hidden === false) {\n this._drawSelectionBox(ctx);\n }\n\n ctx.beginPath();\n this.body.emitter.emit(\"afterDrawing\", ctx);\n ctx.closePath();\n\n // restore original scaling and translation\n ctx.restore();\n if (hidden === true) {\n ctx.clearRect(0, 0, w, h);\n }\n }\n }\n\n /**\n * Redraw all nodes\n *\n * @param {CanvasRenderingContext2D} ctx\n * @param {boolean} [alwaysShow]\n * @private\n */\n _resizeNodes() {\n this.canvas.setTransform();\n const ctx = this.canvas.getContext();\n ctx.save();\n ctx.translate(this.body.view.translation.x, this.body.view.translation.y);\n ctx.scale(this.body.view.scale, this.body.view.scale);\n\n const nodes = this.body.nodes;\n let node;\n\n // resize all nodes\n for (const nodeId in nodes) {\n if (Object.prototype.hasOwnProperty.call(nodes, nodeId)) {\n node = nodes[nodeId];\n node.resize(ctx);\n node.updateBoundingBox(ctx, node.selected);\n }\n }\n\n // restore original scaling and translation\n ctx.restore();\n }\n\n /**\n * Redraw all nodes\n *\n * @param {CanvasRenderingContext2D} ctx 2D context of a HTML canvas\n * @param {boolean} [alwaysShow]\n * @private\n * @returns {object} Callbacks to draw later on higher layers.\n */\n _drawNodes(ctx, alwaysShow = false) {\n const nodes = this.body.nodes;\n const nodeIndices = this.body.nodeIndices;\n let node;\n const selected = [];\n const hovered = [];\n const margin = 20;\n const topLeft = this.canvas.DOMtoCanvas({ x: -margin, y: -margin });\n const bottomRight = this.canvas.DOMtoCanvas({\n x: this.canvas.frame.canvas.clientWidth + margin,\n y: this.canvas.frame.canvas.clientHeight + margin,\n });\n const viewableArea = {\n top: topLeft.y,\n left: topLeft.x,\n bottom: bottomRight.y,\n right: bottomRight.x,\n };\n\n const drawExternalLabels = [];\n\n // draw unselected nodes;\n for (let i = 0; i < nodeIndices.length; i++) {\n node = nodes[nodeIndices[i]];\n // set selected and hovered nodes aside\n if (node.hover) {\n hovered.push(nodeIndices[i]);\n } else if (node.isSelected()) {\n selected.push(nodeIndices[i]);\n } else {\n if (alwaysShow === true) {\n const drawLater = node.draw(ctx);\n if (drawLater.drawExternalLabel != null) {\n drawExternalLabels.push(drawLater.drawExternalLabel);\n }\n } else if (node.isBoundingBoxOverlappingWith(viewableArea) === true) {\n const drawLater = node.draw(ctx);\n if (drawLater.drawExternalLabel != null) {\n drawExternalLabels.push(drawLater.drawExternalLabel);\n }\n } else {\n node.updateBoundingBox(ctx, node.selected);\n }\n }\n }\n\n let i;\n const selectedLength = selected.length;\n const hoveredLength = hovered.length;\n\n // draw the selected nodes on top\n for (i = 0; i < selectedLength; i++) {\n node = nodes[selected[i]];\n const drawLater = node.draw(ctx);\n if (drawLater.drawExternalLabel != null) {\n drawExternalLabels.push(drawLater.drawExternalLabel);\n }\n }\n\n // draw hovered nodes above everything else: fixes https://github.com/visjs/vis-network/issues/226\n for (i = 0; i < hoveredLength; i++) {\n node = nodes[hovered[i]];\n const drawLater = node.draw(ctx);\n if (drawLater.drawExternalLabel != null) {\n drawExternalLabels.push(drawLater.drawExternalLabel);\n }\n }\n\n return {\n drawExternalLabels: () => {\n for (const draw of drawExternalLabels) {\n draw();\n }\n },\n };\n }\n\n /**\n * Redraw all edges\n *\n * @param {CanvasRenderingContext2D} ctx 2D context of a HTML canvas\n * @private\n */\n _drawEdges(ctx) {\n const edges = this.body.edges;\n const edgeIndices = this.body.edgeIndices;\n\n for (let i = 0; i < edgeIndices.length; i++) {\n const edge = edges[edgeIndices[i]];\n if (edge.connected === true) {\n edge.draw(ctx);\n }\n }\n }\n\n /**\n * Redraw all arrows\n *\n * @param {CanvasRenderingContext2D} ctx 2D context of a HTML canvas\n * @private\n */\n _drawArrows(ctx) {\n const edges = this.body.edges;\n const edgeIndices = this.body.edgeIndices;\n\n for (let i = 0; i < edgeIndices.length; i++) {\n const edge = edges[edgeIndices[i]];\n if (edge.connected === true) {\n edge.drawArrows(ctx);\n }\n }\n }\n\n /**\n * Determine if the browser requires a setTimeout or a requestAnimationFrame. This was required because\n * some implementations (safari and IE9) did not support requestAnimationFrame\n *\n * @private\n */\n _determineBrowserMethod() {\n if (typeof window !== \"undefined\") {\n const browserType = navigator.userAgent.toLowerCase();\n this.requiresTimeout = false;\n if (browserType.indexOf(\"msie 9.0\") != -1) {\n // IE 9\n this.requiresTimeout = true;\n } else if (browserType.indexOf(\"safari\") != -1) {\n // safari\n if (browserType.indexOf(\"chrome\") <= -1) {\n this.requiresTimeout = true;\n }\n }\n } else {\n this.requiresTimeout = true;\n }\n }\n\n /**\n * Redraw selection box\n *\n * @param {CanvasRenderingContext2D} ctx 2D context of a HTML canvas\n * @private\n */\n _drawSelectionBox(ctx) {\n if (this.body.selectionBox.show) {\n ctx.beginPath();\n const width =\n this.body.selectionBox.position.end.x -\n this.body.selectionBox.position.start.x;\n const height =\n this.body.selectionBox.position.end.y -\n this.body.selectionBox.position.start.y;\n ctx.rect(\n this.body.selectionBox.position.start.x,\n this.body.selectionBox.position.start.y,\n width,\n height\n );\n ctx.fillStyle = \"rgba(151, 194, 252, 0.2)\";\n ctx.fillRect(\n this.body.selectionBox.position.start.x,\n this.body.selectionBox.position.start.y,\n width,\n height\n );\n ctx.strokeStyle = \"rgba(151, 194, 252, 1)\";\n ctx.stroke();\n } else {\n ctx.closePath();\n }\n }\n}\n\nexport default CanvasRenderer;\n","'use strict';\nrequire('../modules/web.timers');\nvar path = require('../internals/path');\n\nmodule.exports = path.setInterval;\n","/**\n * Register a touch event, taking place before a gesture\n *\n * @param {Hammer} hammer A hammer instance\n * @param {Function} callback Callback, called as callback(event)\n */\nexport function onTouch(hammer, callback) {\n callback.inputHandler = function (event) {\n if (event.isFirst) {\n callback(event);\n }\n };\n\n hammer.on(\"hammer.input\", callback.inputHandler);\n}\n\n/**\n * Register a release event, taking place after a gesture\n *\n * @param {Hammer} hammer A hammer instance\n * @param {Function} callback Callback, called as callback(event)\n * @returns {*}\n */\nexport function onRelease(hammer, callback) {\n callback.inputHandler = function (event) {\n if (event.isFinal) {\n callback(event);\n }\n };\n\n return hammer.on(\"hammer.input\", callback.inputHandler);\n}\n\n/**\n * Unregister a touch event, taking place before a gesture\n *\n * @param {Hammer} hammer A hammer instance\n * @param {Function} callback Callback, called as callback(event)\n */\nexport function offTouch(hammer, callback) {\n hammer.off(\"hammer.input\", callback.inputHandler);\n}\n\n/**\n * Unregister a release event, taking place before a gesture\n *\n * @param {Hammer} hammer A hammer instance\n * @param {Function} callback Callback, called as callback(event)\n */\nexport const offRelease = offTouch;\n\n/**\n * Hack the PinchRecognizer such that it doesn't prevent default behavior\n * for vertical panning.\n *\n * Yeah ... this is quite a hack ... see https://github.com/hammerjs/hammer.js/issues/932\n *\n * @param {Hammer.Pinch} pinchRecognizer\n * @returns {Hammer.Pinch} returns the pinchRecognizer\n */\nexport function disablePreventDefaultVertically(pinchRecognizer) {\n const TOUCH_ACTION_PAN_Y = \"pan-y\";\n\n pinchRecognizer.getTouchAction = function () {\n // default method returns [TOUCH_ACTION_NONE]\n return [TOUCH_ACTION_PAN_Y];\n };\n\n return pinchRecognizer;\n}\n","import { onRelease, onTouch } from \"../../hammerUtil\";\n\nimport { Hammer, selectiveDeepExtend } from \"vis-util/esnext\";\n\n/**\n * Create the main frame for the Network.\n * This function is executed once when a Network object is created. The frame\n * contains a canvas, and this canvas contains all objects like the axis and\n * nodes.\n */\nclass Canvas {\n /**\n * @param {object} body\n */\n constructor(body) {\n this.body = body;\n this.pixelRatio = 1;\n this.cameraState = {};\n this.initialized = false;\n this.canvasViewCenter = {};\n this._cleanupCallbacks = [];\n\n this.options = {};\n this.defaultOptions = {\n autoResize: true,\n height: \"100%\",\n width: \"100%\",\n };\n Object.assign(this.options, this.defaultOptions);\n\n this.bindEventListeners();\n }\n\n /**\n * Binds event listeners\n */\n bindEventListeners() {\n // bind the events\n this.body.emitter.once(\"resize\", (obj) => {\n if (obj.width !== 0) {\n this.body.view.translation.x = obj.width * 0.5;\n }\n if (obj.height !== 0) {\n this.body.view.translation.y = obj.height * 0.5;\n }\n });\n this.body.emitter.on(\"setSize\", this.setSize.bind(this));\n this.body.emitter.on(\"destroy\", () => {\n this.hammerFrame.destroy();\n this.hammer.destroy();\n this._cleanUp();\n });\n }\n\n /**\n * @param {object} options\n */\n setOptions(options) {\n if (options !== undefined) {\n const fields = [\"width\", \"height\", \"autoResize\"];\n selectiveDeepExtend(fields, this.options, options);\n }\n\n // Automatically adapt to changing size of the container element.\n this._cleanUp();\n if (this.options.autoResize === true) {\n if (window.ResizeObserver) {\n // decent browsers, immediate reactions\n const observer = new ResizeObserver(() => {\n const changed = this.setSize();\n if (changed === true) {\n this.body.emitter.emit(\"_requestRedraw\");\n }\n });\n const { frame } = this;\n\n observer.observe(frame);\n this._cleanupCallbacks.push(() => {\n observer.unobserve(frame);\n });\n } else {\n // IE11, continous polling\n const resizeTimer = setInterval(() => {\n const changed = this.setSize();\n if (changed === true) {\n this.body.emitter.emit(\"_requestRedraw\");\n }\n }, 1000);\n this._cleanupCallbacks.push(() => {\n clearInterval(resizeTimer);\n });\n }\n\n // Automatically adapt to changing size of the browser.\n const resizeFunction = this._onResize.bind(this);\n window.addEventListener(\"resize\", resizeFunction);\n this._cleanupCallbacks.push(() => {\n window.removeEventListener(\"resize\", resizeFunction);\n });\n }\n }\n\n /**\n * @private\n */\n _cleanUp() {\n this._cleanupCallbacks\n .splice(0)\n .reverse()\n .forEach((callback) => {\n try {\n callback();\n } catch (error) {\n console.error(error);\n }\n });\n }\n\n /**\n * @private\n */\n _onResize() {\n this.setSize();\n this.body.emitter.emit(\"_redraw\");\n }\n\n /**\n * Get and store the cameraState\n *\n * @param {number} [pixelRatio=this.pixelRatio]\n * @private\n */\n _getCameraState(pixelRatio = this.pixelRatio) {\n if (this.initialized === true) {\n this.cameraState.previousWidth = this.frame.canvas.width / pixelRatio;\n this.cameraState.previousHeight = this.frame.canvas.height / pixelRatio;\n this.cameraState.scale = this.body.view.scale;\n this.cameraState.position = this.DOMtoCanvas({\n x: (0.5 * this.frame.canvas.width) / pixelRatio,\n y: (0.5 * this.frame.canvas.height) / pixelRatio,\n });\n }\n }\n\n /**\n * Set the cameraState\n *\n * @private\n */\n _setCameraState() {\n if (\n this.cameraState.scale !== undefined &&\n this.frame.canvas.clientWidth !== 0 &&\n this.frame.canvas.clientHeight !== 0 &&\n this.pixelRatio !== 0 &&\n this.cameraState.previousWidth > 0 &&\n this.cameraState.previousHeight > 0\n ) {\n const widthRatio =\n this.frame.canvas.width /\n this.pixelRatio /\n this.cameraState.previousWidth;\n const heightRatio =\n this.frame.canvas.height /\n this.pixelRatio /\n this.cameraState.previousHeight;\n let newScale = this.cameraState.scale;\n\n if (widthRatio != 1 && heightRatio != 1) {\n newScale = this.cameraState.scale * 0.5 * (widthRatio + heightRatio);\n } else if (widthRatio != 1) {\n newScale = this.cameraState.scale * widthRatio;\n } else if (heightRatio != 1) {\n newScale = this.cameraState.scale * heightRatio;\n }\n\n this.body.view.scale = newScale;\n // this comes from the view module.\n const currentViewCenter = this.DOMtoCanvas({\n x: 0.5 * this.frame.canvas.clientWidth,\n y: 0.5 * this.frame.canvas.clientHeight,\n });\n\n const distanceFromCenter = {\n // offset from view, distance view has to change by these x and y to center the node\n x: currentViewCenter.x - this.cameraState.position.x,\n y: currentViewCenter.y - this.cameraState.position.y,\n };\n this.body.view.translation.x +=\n distanceFromCenter.x * this.body.view.scale;\n this.body.view.translation.y +=\n distanceFromCenter.y * this.body.view.scale;\n }\n }\n\n /**\n *\n * @param {number|string} value\n * @returns {string}\n * @private\n */\n _prepareValue(value) {\n if (typeof value === \"number\") {\n return value + \"px\";\n } else if (typeof value === \"string\") {\n if (value.indexOf(\"%\") !== -1 || value.indexOf(\"px\") !== -1) {\n return value;\n } else if (value.indexOf(\"%\") === -1) {\n return value + \"px\";\n }\n }\n throw new Error(\n \"Could not use the value supplied for width or height:\" + value\n );\n }\n\n /**\n * Create the HTML\n */\n _create() {\n // remove all elements from the container element.\n while (this.body.container.hasChildNodes()) {\n this.body.container.removeChild(this.body.container.firstChild);\n }\n\n this.frame = document.createElement(\"div\");\n this.frame.className = \"vis-network\";\n this.frame.style.position = \"relative\";\n this.frame.style.overflow = \"hidden\";\n this.frame.tabIndex = 0; // tab index is required for keycharm to bind keystrokes to the div instead of the window\n\n //////////////////////////////////////////////////////////////////\n\n this.frame.canvas = document.createElement(\"canvas\");\n this.frame.canvas.style.position = \"relative\";\n this.frame.appendChild(this.frame.canvas);\n\n if (!this.frame.canvas.getContext) {\n const noCanvas = document.createElement(\"DIV\");\n noCanvas.style.color = \"red\";\n noCanvas.style.fontWeight = \"bold\";\n noCanvas.style.padding = \"10px\";\n noCanvas.innerText = \"Error: your browser does not support HTML canvas\";\n this.frame.canvas.appendChild(noCanvas);\n } else {\n this._setPixelRatio();\n this.setTransform();\n }\n\n // add the frame to the container element\n this.body.container.appendChild(this.frame);\n\n this.body.view.scale = 1;\n this.body.view.translation = {\n x: 0.5 * this.frame.canvas.clientWidth,\n y: 0.5 * this.frame.canvas.clientHeight,\n };\n\n this._bindHammer();\n }\n\n /**\n * This function binds hammer, it can be repeated over and over due to the uniqueness check.\n *\n * @private\n */\n _bindHammer() {\n if (this.hammer !== undefined) {\n this.hammer.destroy();\n }\n this.drag = {};\n this.pinch = {};\n\n // init hammer\n this.hammer = new Hammer(this.frame.canvas);\n this.hammer.get(\"pinch\").set({ enable: true });\n // enable to get better response, todo: test on mobile.\n this.hammer\n .get(\"pan\")\n .set({ threshold: 5, direction: Hammer.DIRECTION_ALL });\n\n onTouch(this.hammer, (event) => {\n this.body.eventListeners.onTouch(event);\n });\n this.hammer.on(\"tap\", (event) => {\n this.body.eventListeners.onTap(event);\n });\n this.hammer.on(\"doubletap\", (event) => {\n this.body.eventListeners.onDoubleTap(event);\n });\n this.hammer.on(\"press\", (event) => {\n this.body.eventListeners.onHold(event);\n });\n this.hammer.on(\"panstart\", (event) => {\n this.body.eventListeners.onDragStart(event);\n });\n this.hammer.on(\"panmove\", (event) => {\n this.body.eventListeners.onDrag(event);\n });\n this.hammer.on(\"panend\", (event) => {\n this.body.eventListeners.onDragEnd(event);\n });\n this.hammer.on(\"pinch\", (event) => {\n this.body.eventListeners.onPinch(event);\n });\n\n // TODO: neatly cleanup these handlers when re-creating the Canvas, IF these are done with hammer, event.stopPropagation will not work?\n this.frame.canvas.addEventListener(\"wheel\", (event) => {\n this.body.eventListeners.onMouseWheel(event);\n });\n\n this.frame.canvas.addEventListener(\"mousemove\", (event) => {\n this.body.eventListeners.onMouseMove(event);\n });\n this.frame.canvas.addEventListener(\"contextmenu\", (event) => {\n this.body.eventListeners.onContext(event);\n });\n\n this.hammerFrame = new Hammer(this.frame);\n onRelease(this.hammerFrame, (event) => {\n this.body.eventListeners.onRelease(event);\n });\n }\n\n /**\n * Set a new size for the network\n *\n * @param {string} width Width in pixels or percentage (for example '800px'\n * or '50%')\n * @param {string} height Height in pixels or percentage (for example '400px'\n * or '30%')\n * @returns {boolean}\n */\n setSize(width = this.options.width, height = this.options.height) {\n width = this._prepareValue(width);\n height = this._prepareValue(height);\n\n let emitEvent = false;\n const oldWidth = this.frame.canvas.width;\n const oldHeight = this.frame.canvas.height;\n\n // update the pixel ratio\n //\n // NOTE: Comment in following is rather inconsistent; this is the ONLY place in the code\n // where it is assumed that the pixel ratio could change at runtime.\n // The only way I can think of this happening is a rotating screen or tablet; but then\n // there should be a mechanism for reloading the data (TODO: check if this is present).\n //\n // If the assumption is true (i.e. pixel ratio can change at runtime), then *all* usage\n // of pixel ratio must be overhauled for this.\n //\n // For the time being, I will humor the assumption here, and in the rest of the code assume it is\n // constant.\n const previousRatio = this.pixelRatio; // we cache this because the camera state storage needs the old value\n this._setPixelRatio();\n\n if (\n width != this.options.width ||\n height != this.options.height ||\n this.frame.style.width != width ||\n this.frame.style.height != height\n ) {\n this._getCameraState(previousRatio);\n\n this.frame.style.width = width;\n this.frame.style.height = height;\n\n this.frame.canvas.style.width = \"100%\";\n this.frame.canvas.style.height = \"100%\";\n\n this.frame.canvas.width = Math.round(\n this.frame.canvas.clientWidth * this.pixelRatio\n );\n this.frame.canvas.height = Math.round(\n this.frame.canvas.clientHeight * this.pixelRatio\n );\n\n this.options.width = width;\n this.options.height = height;\n\n this.canvasViewCenter = {\n x: 0.5 * this.frame.clientWidth,\n y: 0.5 * this.frame.clientHeight,\n };\n\n emitEvent = true;\n } else {\n // this would adapt the width of the canvas to the width from 100% if and only if\n // there is a change.\n\n const newWidth = Math.round(\n this.frame.canvas.clientWidth * this.pixelRatio\n );\n const newHeight = Math.round(\n this.frame.canvas.clientHeight * this.pixelRatio\n );\n\n // store the camera if there is a change in size.\n if (\n this.frame.canvas.width !== newWidth ||\n this.frame.canvas.height !== newHeight\n ) {\n this._getCameraState(previousRatio);\n }\n\n if (this.frame.canvas.width !== newWidth) {\n this.frame.canvas.width = newWidth;\n emitEvent = true;\n }\n if (this.frame.canvas.height !== newHeight) {\n this.frame.canvas.height = newHeight;\n emitEvent = true;\n }\n }\n\n if (emitEvent === true) {\n this.body.emitter.emit(\"resize\", {\n width: Math.round(this.frame.canvas.width / this.pixelRatio),\n height: Math.round(this.frame.canvas.height / this.pixelRatio),\n oldWidth: Math.round(oldWidth / this.pixelRatio),\n oldHeight: Math.round(oldHeight / this.pixelRatio),\n });\n\n // restore the camera on change.\n this._setCameraState();\n }\n\n // set initialized so the get and set camera will work from now on.\n this.initialized = true;\n return emitEvent;\n }\n\n /**\n *\n * @returns {CanvasRenderingContext2D}\n */\n getContext() {\n return this.frame.canvas.getContext(\"2d\");\n }\n\n /**\n * Determine the pixel ratio for various browsers.\n *\n * @returns {number}\n * @private\n */\n _determinePixelRatio() {\n const ctx = this.getContext();\n if (ctx === undefined) {\n throw new Error(\"Could not get canvax context\");\n }\n\n let numerator = 1;\n if (typeof window !== \"undefined\") {\n // (window !== undefined) doesn't work here!\n // Protection during unit tests, where 'window' can be missing\n numerator = window.devicePixelRatio || 1;\n }\n\n const denominator =\n ctx.webkitBackingStorePixelRatio ||\n ctx.mozBackingStorePixelRatio ||\n ctx.msBackingStorePixelRatio ||\n ctx.oBackingStorePixelRatio ||\n ctx.backingStorePixelRatio ||\n 1;\n\n return numerator / denominator;\n }\n\n /**\n * Lazy determination of pixel ratio.\n *\n * @private\n */\n _setPixelRatio() {\n this.pixelRatio = this._determinePixelRatio();\n }\n\n /**\n * Set the transform in the contained context, based on its pixelRatio\n */\n setTransform() {\n const ctx = this.getContext();\n if (ctx === undefined) {\n throw new Error(\"Could not get canvax context\");\n }\n\n ctx.setTransform(this.pixelRatio, 0, 0, this.pixelRatio, 0, 0);\n }\n\n /**\n * Convert the X coordinate in DOM-space (coordinate point in browser relative to the container div) to\n * the X coordinate in canvas-space (the simulation sandbox, which the camera looks upon)\n *\n * @param {number} x\n * @returns {number}\n * @private\n */\n _XconvertDOMtoCanvas(x) {\n return (x - this.body.view.translation.x) / this.body.view.scale;\n }\n\n /**\n * Convert the X coordinate in canvas-space (the simulation sandbox, which the camera looks upon) to\n * the X coordinate in DOM-space (coordinate point in browser relative to the container div)\n *\n * @param {number} x\n * @returns {number}\n * @private\n */\n _XconvertCanvasToDOM(x) {\n return x * this.body.view.scale + this.body.view.translation.x;\n }\n\n /**\n * Convert the Y coordinate in DOM-space (coordinate point in browser relative to the container div) to\n * the Y coordinate in canvas-space (the simulation sandbox, which the camera looks upon)\n *\n * @param {number} y\n * @returns {number}\n * @private\n */\n _YconvertDOMtoCanvas(y) {\n return (y - this.body.view.translation.y) / this.body.view.scale;\n }\n\n /**\n * Convert the Y coordinate in canvas-space (the simulation sandbox, which the camera looks upon) to\n * the Y coordinate in DOM-space (coordinate point in browser relative to the container div)\n *\n * @param {number} y\n * @returns {number}\n * @private\n */\n _YconvertCanvasToDOM(y) {\n return y * this.body.view.scale + this.body.view.translation.y;\n }\n\n /**\n * @param {point} pos\n * @returns {point}\n */\n canvasToDOM(pos) {\n return {\n x: this._XconvertCanvasToDOM(pos.x),\n y: this._YconvertCanvasToDOM(pos.y),\n };\n }\n\n /**\n *\n * @param {point} pos\n * @returns {point}\n */\n DOMtoCanvas(pos) {\n return {\n x: this._XconvertDOMtoCanvas(pos.x),\n y: this._YconvertDOMtoCanvas(pos.y),\n };\n }\n}\n\nexport default Canvas;\n","import { easingFunctions } from \"vis-util/esnext\";\n\nimport NetworkUtil from \"../NetworkUtil\";\nimport { normalizeFitOptions } from \"./view-handler\";\n\n/**\n * The view\n */\nclass View {\n /**\n * @param {object} body\n * @param {Canvas} canvas\n */\n constructor(body, canvas) {\n this.body = body;\n this.canvas = canvas;\n\n this.animationSpeed = 1 / this.renderRefreshRate;\n this.animationEasingFunction = \"easeInOutQuint\";\n this.easingTime = 0;\n this.sourceScale = 0;\n this.targetScale = 0;\n this.sourceTranslation = 0;\n this.targetTranslation = 0;\n this.lockedOnNodeId = undefined;\n this.lockedOnNodeOffset = undefined;\n this.touchTime = 0;\n\n this.viewFunction = undefined;\n\n this.body.emitter.on(\"fit\", this.fit.bind(this));\n this.body.emitter.on(\"animationFinished\", () => {\n this.body.emitter.emit(\"_stopRendering\");\n });\n this.body.emitter.on(\"unlockNode\", this.releaseNode.bind(this));\n }\n\n /**\n *\n * @param {object} [options={}]\n */\n setOptions(options = {}) {\n this.options = options;\n }\n\n /**\n * This function zooms out to fit all data on screen based on amount of nodes\n *\n * @param {object} [options={{nodes=Array}}]\n * @param options\n * @param {boolean} [initialZoom=false] | zoom based on fitted formula or range, true = fitted, default = false;\n */\n fit(options, initialZoom = false) {\n options = normalizeFitOptions(options, this.body.nodeIndices);\n\n const canvasWidth = this.canvas.frame.canvas.clientWidth;\n const canvasHeight = this.canvas.frame.canvas.clientHeight;\n\n let range;\n let zoomLevel;\n if (canvasWidth === 0 || canvasHeight === 0) {\n // There's no point in trying to fit into zero sized canvas. This could\n // potentially even result in invalid values being computed. For example\n // for network without nodes and zero sized canvas the zoom level would\n // end up being computed as 0/0 which results in NaN. In any other case\n // this would be 0/something which is again pointless to compute.\n zoomLevel = 1;\n\n range = NetworkUtil.getRange(this.body.nodes, options.nodes);\n } else if (initialZoom === true) {\n // check if more than half of the nodes have a predefined position. If so, we use the range, not the approximation.\n let positionDefined = 0;\n for (const nodeId in this.body.nodes) {\n if (Object.prototype.hasOwnProperty.call(this.body.nodes, nodeId)) {\n const node = this.body.nodes[nodeId];\n if (node.predefinedPosition === true) {\n positionDefined += 1;\n }\n }\n }\n if (positionDefined > 0.5 * this.body.nodeIndices.length) {\n this.fit(options, false);\n return;\n }\n\n range = NetworkUtil.getRange(this.body.nodes, options.nodes);\n\n const numberOfNodes = this.body.nodeIndices.length;\n zoomLevel = 12.662 / (numberOfNodes + 7.4147) + 0.0964822; // this is obtained from fitting a dataset from 5 points with scale levels that looked good.\n\n // correct for larger canvasses.\n const factor = Math.min(canvasWidth / 600, canvasHeight / 600);\n zoomLevel *= factor;\n } else {\n this.body.emitter.emit(\"_resizeNodes\");\n range = NetworkUtil.getRange(this.body.nodes, options.nodes);\n\n const xDistance = Math.abs(range.maxX - range.minX) * 1.1;\n const yDistance = Math.abs(range.maxY - range.minY) * 1.1;\n\n const xZoomLevel = canvasWidth / xDistance;\n const yZoomLevel = canvasHeight / yDistance;\n\n zoomLevel = xZoomLevel <= yZoomLevel ? xZoomLevel : yZoomLevel;\n }\n\n if (zoomLevel > options.maxZoomLevel) {\n zoomLevel = options.maxZoomLevel;\n } else if (zoomLevel < options.minZoomLevel) {\n zoomLevel = options.minZoomLevel;\n }\n\n const center = NetworkUtil.findCenter(range);\n const animationOptions = {\n position: center,\n scale: zoomLevel,\n animation: options.animation,\n };\n this.moveTo(animationOptions);\n }\n\n // animation\n\n /**\n * Center a node in view.\n *\n * @param {number} nodeId\n * @param {number} [options]\n */\n focus(nodeId, options = {}) {\n if (this.body.nodes[nodeId] !== undefined) {\n const nodePosition = {\n x: this.body.nodes[nodeId].x,\n y: this.body.nodes[nodeId].y,\n };\n options.position = nodePosition;\n options.lockedOnNode = nodeId;\n\n this.moveTo(options);\n } else {\n console.error(\"Node: \" + nodeId + \" cannot be found.\");\n }\n }\n\n /**\n *\n * @param {object} options | options.offset = {x:number, y:number} // offset from the center in DOM pixels\n * | options.scale = number // scale to move to\n * | options.position = {x:number, y:number} // position to move to\n * | options.animation = {duration:number, easingFunction:String} || Boolean // position to move to\n */\n moveTo(options) {\n if (options === undefined) {\n options = {};\n return;\n }\n\n if (options.offset != null) {\n if (options.offset.x != null) {\n // Coerce and verify that x is valid.\n options.offset.x = +options.offset.x;\n if (!Number.isFinite(options.offset.x)) {\n throw new TypeError(\n 'The option \"offset.x\" has to be a finite number.'\n );\n }\n } else {\n options.offset.x = 0;\n }\n\n if (options.offset.y != null) {\n // Coerce and verify that y is valid.\n options.offset.y = +options.offset.y;\n if (!Number.isFinite(options.offset.y)) {\n throw new TypeError(\n 'The option \"offset.y\" has to be a finite number.'\n );\n }\n } else {\n options.offset.x = 0;\n }\n } else {\n options.offset = {\n x: 0,\n y: 0,\n };\n }\n\n if (options.position != null) {\n if (options.position.x != null) {\n // Coerce and verify that x is valid.\n options.position.x = +options.position.x;\n if (!Number.isFinite(options.position.x)) {\n throw new TypeError(\n 'The option \"position.x\" has to be a finite number.'\n );\n }\n } else {\n options.position.x = 0;\n }\n\n if (options.position.y != null) {\n // Coerce and verify that y is valid.\n options.position.y = +options.position.y;\n if (!Number.isFinite(options.position.y)) {\n throw new TypeError(\n 'The option \"position.y\" has to be a finite number.'\n );\n }\n } else {\n options.position.x = 0;\n }\n } else {\n options.position = this.getViewPosition();\n }\n\n if (options.scale != null) {\n // Coerce and verify that the scale is valid.\n options.scale = +options.scale;\n if (!(options.scale > 0)) {\n throw new TypeError(\n 'The option \"scale\" has to be a number greater than zero.'\n );\n }\n } else {\n options.scale = this.body.view.scale;\n }\n\n if (options.animation === undefined) {\n options.animation = { duration: 0 };\n }\n if (options.animation === false) {\n options.animation = { duration: 0 };\n }\n if (options.animation === true) {\n options.animation = {};\n }\n if (options.animation.duration === undefined) {\n options.animation.duration = 1000;\n } // default duration\n if (options.animation.easingFunction === undefined) {\n options.animation.easingFunction = \"easeInOutQuad\";\n } // default easing function\n\n this.animateView(options);\n }\n\n /**\n *\n * @param {object} options | options.offset = {x:number, y:number} // offset from the center in DOM pixels\n * | options.time = number // animation time in milliseconds\n * | options.scale = number // scale to animate to\n * | options.position = {x:number, y:number} // position to animate to\n * | options.easingFunction = String // linear, easeInQuad, easeOutQuad, easeInOutQuad,\n * // easeInCubic, easeOutCubic, easeInOutCubic,\n * // easeInQuart, easeOutQuart, easeInOutQuart,\n * // easeInQuint, easeOutQuint, easeInOutQuint\n */\n animateView(options) {\n if (options === undefined) {\n return;\n }\n this.animationEasingFunction = options.animation.easingFunction;\n // release if something focussed on the node\n this.releaseNode();\n if (options.locked === true) {\n this.lockedOnNodeId = options.lockedOnNode;\n this.lockedOnNodeOffset = options.offset;\n }\n\n // forcefully complete the old animation if it was still running\n if (this.easingTime != 0) {\n this._transitionRedraw(true); // by setting easingtime to 1, we finish the animation.\n }\n\n this.sourceScale = this.body.view.scale;\n this.sourceTranslation = this.body.view.translation;\n this.targetScale = options.scale;\n\n // set the scale so the viewCenter is based on the correct zoom level. This is overridden in the transitionRedraw\n // but at least then we'll have the target transition\n this.body.view.scale = this.targetScale;\n const viewCenter = this.canvas.DOMtoCanvas({\n x: 0.5 * this.canvas.frame.canvas.clientWidth,\n y: 0.5 * this.canvas.frame.canvas.clientHeight,\n });\n\n const distanceFromCenter = {\n // offset from view, distance view has to change by these x and y to center the node\n x: viewCenter.x - options.position.x,\n y: viewCenter.y - options.position.y,\n };\n this.targetTranslation = {\n x:\n this.sourceTranslation.x +\n distanceFromCenter.x * this.targetScale +\n options.offset.x,\n y:\n this.sourceTranslation.y +\n distanceFromCenter.y * this.targetScale +\n options.offset.y,\n };\n\n // if the time is set to 0, don't do an animation\n if (options.animation.duration === 0) {\n if (this.lockedOnNodeId != undefined) {\n this.viewFunction = this._lockedRedraw.bind(this);\n this.body.emitter.on(\"initRedraw\", this.viewFunction);\n } else {\n this.body.view.scale = this.targetScale;\n this.body.view.translation = this.targetTranslation;\n this.body.emitter.emit(\"_requestRedraw\");\n }\n } else {\n this.animationSpeed =\n 1 / (60 * options.animation.duration * 0.001) || 1 / 60; // 60 for 60 seconds, 0.001 for milli's\n this.animationEasingFunction = options.animation.easingFunction;\n\n this.viewFunction = this._transitionRedraw.bind(this);\n this.body.emitter.on(\"initRedraw\", this.viewFunction);\n this.body.emitter.emit(\"_startRendering\");\n }\n }\n\n /**\n * used to animate smoothly by hijacking the redraw function.\n *\n * @private\n */\n _lockedRedraw() {\n const nodePosition = {\n x: this.body.nodes[this.lockedOnNodeId].x,\n y: this.body.nodes[this.lockedOnNodeId].y,\n };\n const viewCenter = this.canvas.DOMtoCanvas({\n x: 0.5 * this.canvas.frame.canvas.clientWidth,\n y: 0.5 * this.canvas.frame.canvas.clientHeight,\n });\n const distanceFromCenter = {\n // offset from view, distance view has to change by these x and y to center the node\n x: viewCenter.x - nodePosition.x,\n y: viewCenter.y - nodePosition.y,\n };\n const sourceTranslation = this.body.view.translation;\n const targetTranslation = {\n x:\n sourceTranslation.x +\n distanceFromCenter.x * this.body.view.scale +\n this.lockedOnNodeOffset.x,\n y:\n sourceTranslation.y +\n distanceFromCenter.y * this.body.view.scale +\n this.lockedOnNodeOffset.y,\n };\n\n this.body.view.translation = targetTranslation;\n }\n\n /**\n * Resets state of a locked on Node\n */\n releaseNode() {\n if (this.lockedOnNodeId !== undefined && this.viewFunction !== undefined) {\n this.body.emitter.off(\"initRedraw\", this.viewFunction);\n this.lockedOnNodeId = undefined;\n this.lockedOnNodeOffset = undefined;\n }\n }\n\n /**\n * @param {boolean} [finished=false]\n * @private\n */\n _transitionRedraw(finished = false) {\n this.easingTime += this.animationSpeed;\n this.easingTime = finished === true ? 1.0 : this.easingTime;\n\n const progress = easingFunctions[this.animationEasingFunction](\n this.easingTime\n );\n\n this.body.view.scale =\n this.sourceScale + (this.targetScale - this.sourceScale) * progress;\n this.body.view.translation = {\n x:\n this.sourceTranslation.x +\n (this.targetTranslation.x - this.sourceTranslation.x) * progress,\n y:\n this.sourceTranslation.y +\n (this.targetTranslation.y - this.sourceTranslation.y) * progress,\n };\n\n // cleanup\n if (this.easingTime >= 1.0) {\n this.body.emitter.off(\"initRedraw\", this.viewFunction);\n this.easingTime = 0;\n if (this.lockedOnNodeId != undefined) {\n this.viewFunction = this._lockedRedraw.bind(this);\n this.body.emitter.on(\"initRedraw\", this.viewFunction);\n }\n this.body.emitter.emit(\"animationFinished\");\n }\n }\n\n /**\n *\n * @returns {number}\n */\n getScale() {\n return this.body.view.scale;\n }\n\n /**\n *\n * @returns {{x: number, y: number}}\n */\n getViewPosition() {\n return this.canvas.DOMtoCanvas({\n x: 0.5 * this.canvas.frame.canvas.clientWidth,\n y: 0.5 * this.canvas.frame.canvas.clientHeight,\n });\n }\n}\n\nexport default View;\n","type IdType = string | number;\n\nexport interface ViewFitOptions {\n nodes: IdType[];\n minZoomLevel: number;\n maxZoomLevel: number;\n}\n\n/**\n * Validate the fit options, replace missing optional values by defaults etc.\n *\n * @param rawOptions - The raw options.\n * @param allNodeIds - All node ids that will be used if nodes are omitted in\n * the raw options.\n * @returns Options with everything filled in and validated.\n */\nexport function normalizeFitOptions(\n rawOptions: Partial,\n allNodeIds: IdType[]\n): ViewFitOptions {\n const options = Object.assign>(\n {\n nodes: allNodeIds,\n minZoomLevel: Number.MIN_VALUE,\n maxZoomLevel: 1,\n },\n rawOptions ?? {}\n );\n\n if (!Array.isArray(options.nodes)) {\n throw new TypeError(\"Nodes has to be an array of ids.\");\n }\n if (options.nodes.length === 0) {\n options.nodes = allNodeIds;\n }\n\n if (!(typeof options.minZoomLevel === \"number\" && options.minZoomLevel > 0)) {\n throw new TypeError(\"Min zoom level has to be a number higher than zero.\");\n }\n\n if (\n !(\n typeof options.maxZoomLevel === \"number\" &&\n options.minZoomLevel <= options.maxZoomLevel\n )\n ) {\n throw new TypeError(\n \"Max zoom level has to be a number higher than min zoom level.\"\n );\n }\n\n return options;\n}\n","/**\r\n * Created by Alex on 11/6/2014.\r\n */\r\nexport default function keycharm(options) {\r\n var preventDefault = options && options.preventDefault || false;\r\n\r\n var container = options && options.container || window;\r\n\r\n var _exportFunctions = {};\r\n var _bound = {keydown:{}, keyup:{}};\r\n var _keys = {};\r\n var i;\r\n\r\n // a - z\r\n for (i = 97; i <= 122; i++) {_keys[String.fromCharCode(i)] = {code:65 + (i - 97), shift: false};}\r\n // A - Z\r\n for (i = 65; i <= 90; i++) {_keys[String.fromCharCode(i)] = {code:i, shift: true};}\r\n // 0 - 9\r\n for (i = 0; i <= 9; i++) {_keys['' + i] = {code:48 + i, shift: false};}\r\n // F1 - F12\r\n for (i = 1; i <= 12; i++) {_keys['F' + i] = {code:111 + i, shift: false};}\r\n // num0 - num9\r\n for (i = 0; i <= 9; i++) {_keys['num' + i] = {code:96 + i, shift: false};}\r\n\r\n // numpad misc\r\n _keys['num*'] = {code:106, shift: false};\r\n _keys['num+'] = {code:107, shift: false};\r\n _keys['num-'] = {code:109, shift: false};\r\n _keys['num/'] = {code:111, shift: false};\r\n _keys['num.'] = {code:110, shift: false};\r\n // arrows\r\n _keys['left'] = {code:37, shift: false};\r\n _keys['up'] = {code:38, shift: false};\r\n _keys['right'] = {code:39, shift: false};\r\n _keys['down'] = {code:40, shift: false};\r\n // extra keys\r\n _keys['space'] = {code:32, shift: false};\r\n _keys['enter'] = {code:13, shift: false};\r\n _keys['shift'] = {code:16, shift: undefined};\r\n _keys['esc'] = {code:27, shift: false};\r\n _keys['backspace'] = {code:8, shift: false};\r\n _keys['tab'] = {code:9, shift: false};\r\n _keys['ctrl'] = {code:17, shift: false};\r\n _keys['alt'] = {code:18, shift: false};\r\n _keys['delete'] = {code:46, shift: false};\r\n _keys['pageup'] = {code:33, shift: false};\r\n _keys['pagedown'] = {code:34, shift: false};\r\n // symbols\r\n _keys['='] = {code:187, shift: false};\r\n _keys['-'] = {code:189, shift: false};\r\n _keys[']'] = {code:221, shift: false};\r\n _keys['['] = {code:219, shift: false};\r\n\r\n\r\n\r\n var down = function(event) {handleEvent(event,'keydown');};\r\n var up = function(event) {handleEvent(event,'keyup');};\r\n\r\n // handle the actualy bound key with the event\r\n var handleEvent = function(event,type) {\r\n if (_bound[type][event.keyCode] !== undefined) {\r\n var bound = _bound[type][event.keyCode];\r\n for (var i = 0; i < bound.length; i++) {\r\n if (bound[i].shift === undefined) {\r\n bound[i].fn(event);\r\n }\r\n else if (bound[i].shift == true && event.shiftKey == true) {\r\n bound[i].fn(event);\r\n }\r\n else if (bound[i].shift == false && event.shiftKey == false) {\r\n bound[i].fn(event);\r\n }\r\n }\r\n\r\n if (preventDefault == true) {\r\n event.preventDefault();\r\n }\r\n }\r\n };\r\n\r\n // bind a key to a callback\r\n _exportFunctions.bind = function(key, callback, type) {\r\n if (type === undefined) {\r\n type = 'keydown';\r\n }\r\n if (_keys[key] === undefined) {\r\n throw new Error(\"unsupported key: \" + key);\r\n }\r\n if (_bound[type][_keys[key].code] === undefined) {\r\n _bound[type][_keys[key].code] = [];\r\n }\r\n _bound[type][_keys[key].code].push({fn:callback, shift:_keys[key].shift});\r\n };\r\n\r\n\r\n // bind all keys to a call back (demo purposes)\r\n _exportFunctions.bindAll = function(callback, type) {\r\n if (type === undefined) {\r\n type = 'keydown';\r\n }\r\n for (var key in _keys) {\r\n if (_keys.hasOwnProperty(key)) {\r\n _exportFunctions.bind(key,callback,type);\r\n }\r\n }\r\n };\r\n\r\n // get the key label from an event\r\n _exportFunctions.getKey = function(event) {\r\n for (var key in _keys) {\r\n if (_keys.hasOwnProperty(key)) {\r\n if (event.shiftKey == true && _keys[key].shift == true && event.keyCode == _keys[key].code) {\r\n return key;\r\n }\r\n else if (event.shiftKey == false && _keys[key].shift == false && event.keyCode == _keys[key].code) {\r\n return key;\r\n }\r\n else if (event.keyCode == _keys[key].code && key == 'shift') {\r\n return key;\r\n }\r\n }\r\n }\r\n return \"unknown key, currently not supported\";\r\n };\r\n\r\n // unbind either a specific callback from a key or all of them (by leaving callback undefined)\r\n _exportFunctions.unbind = function(key, callback, type) {\r\n if (type === undefined) {\r\n type = 'keydown';\r\n }\r\n if (_keys[key] === undefined) {\r\n throw new Error(\"unsupported key: \" + key);\r\n }\r\n if (callback !== undefined) {\r\n var newBindings = [];\r\n var bound = _bound[type][_keys[key].code];\r\n if (bound !== undefined) {\r\n for (var i = 0; i < bound.length; i++) {\r\n if (!(bound[i].fn == callback && bound[i].shift == _keys[key].shift)) {\r\n newBindings.push(_bound[type][_keys[key].code][i]);\r\n }\r\n }\r\n }\r\n _bound[type][_keys[key].code] = newBindings;\r\n }\r\n else {\r\n _bound[type][_keys[key].code] = [];\r\n }\r\n };\r\n\r\n // reset all bound variables.\r\n _exportFunctions.reset = function() {\r\n _bound = {keydown:{}, keyup:{}};\r\n };\r\n\r\n // unbind all listeners and reset all variables.\r\n _exportFunctions.destroy = function() {\r\n _bound = {keydown:{}, keyup:{}};\r\n container.removeEventListener('keydown', down, true);\r\n container.removeEventListener('keyup', up, true);\r\n };\r\n\r\n // create listeners.\r\n container.addEventListener('keydown',down,true);\r\n container.addEventListener('keyup',up,true);\r\n\r\n // return the public functions.\r\n return _exportFunctions;\r\n}\r\n","import \"./NavigationHandler.css\";\n\nimport { Hammer } from \"vis-util/esnext\";\nimport { onRelease, onTouch } from \"../../../hammerUtil\";\nimport keycharm from \"keycharm\";\n\n/**\n * Navigation Handler\n */\nclass NavigationHandler {\n /**\n * @param {object} body\n * @param {Canvas} canvas\n */\n constructor(body, canvas) {\n this.body = body;\n this.canvas = canvas;\n\n this.iconsCreated = false;\n this.navigationHammers = [];\n this.boundFunctions = {};\n this.touchTime = 0;\n this.activated = false;\n\n this.body.emitter.on(\"activate\", () => {\n this.activated = true;\n this.configureKeyboardBindings();\n });\n this.body.emitter.on(\"deactivate\", () => {\n this.activated = false;\n this.configureKeyboardBindings();\n });\n this.body.emitter.on(\"destroy\", () => {\n if (this.keycharm !== undefined) {\n this.keycharm.destroy();\n }\n });\n\n this.options = {};\n }\n\n /**\n *\n * @param {object} options\n */\n setOptions(options) {\n if (options !== undefined) {\n this.options = options;\n this.create();\n }\n }\n\n /**\n * Creates or refreshes navigation and sets key bindings\n */\n create() {\n if (this.options.navigationButtons === true) {\n if (this.iconsCreated === false) {\n this.loadNavigationElements();\n }\n } else if (this.iconsCreated === true) {\n this.cleanNavigation();\n }\n\n this.configureKeyboardBindings();\n }\n\n /**\n * Cleans up previous navigation items\n */\n cleanNavigation() {\n // clean hammer bindings\n if (this.navigationHammers.length != 0) {\n for (let i = 0; i < this.navigationHammers.length; i++) {\n this.navigationHammers[i].destroy();\n }\n this.navigationHammers = [];\n }\n\n // clean up previous navigation items\n if (\n this.navigationDOM &&\n this.navigationDOM[\"wrapper\"] &&\n this.navigationDOM[\"wrapper\"].parentNode\n ) {\n this.navigationDOM[\"wrapper\"].parentNode.removeChild(\n this.navigationDOM[\"wrapper\"]\n );\n }\n\n this.iconsCreated = false;\n }\n\n /**\n * Creation of the navigation controls nodes. They are drawn over the rest of the nodes and are not affected by scale and translation\n * they have a triggerFunction which is called on click. If the position of the navigation controls is dependent\n * on this.frame.canvas.clientWidth or this.frame.canvas.clientHeight, we flag horizontalAlignLeft and verticalAlignTop false.\n * This means that the location will be corrected by the _relocateNavigation function on a size change of the canvas.\n *\n * @private\n */\n loadNavigationElements() {\n this.cleanNavigation();\n\n this.navigationDOM = {};\n const navigationDivs = [\n \"up\",\n \"down\",\n \"left\",\n \"right\",\n \"zoomIn\",\n \"zoomOut\",\n \"zoomExtends\",\n ];\n const navigationDivActions = [\n \"_moveUp\",\n \"_moveDown\",\n \"_moveLeft\",\n \"_moveRight\",\n \"_zoomIn\",\n \"_zoomOut\",\n \"_fit\",\n ];\n\n this.navigationDOM[\"wrapper\"] = document.createElement(\"div\");\n this.navigationDOM[\"wrapper\"].className = \"vis-navigation\";\n this.canvas.frame.appendChild(this.navigationDOM[\"wrapper\"]);\n\n for (let i = 0; i < navigationDivs.length; i++) {\n this.navigationDOM[navigationDivs[i]] = document.createElement(\"div\");\n this.navigationDOM[navigationDivs[i]].className =\n \"vis-button vis-\" + navigationDivs[i];\n this.navigationDOM[\"wrapper\"].appendChild(\n this.navigationDOM[navigationDivs[i]]\n );\n\n const hammer = new Hammer(this.navigationDOM[navigationDivs[i]]);\n if (navigationDivActions[i] === \"_fit\") {\n onTouch(hammer, this._fit.bind(this));\n } else {\n onTouch(hammer, this.bindToRedraw.bind(this, navigationDivActions[i]));\n }\n\n this.navigationHammers.push(hammer);\n }\n\n // use a hammer for the release so we do not require the one used in the rest of the network\n // the one the rest uses can be overloaded by the manipulation system.\n const hammerFrame = new Hammer(this.canvas.frame);\n onRelease(hammerFrame, () => {\n this._stopMovement();\n });\n this.navigationHammers.push(hammerFrame);\n\n this.iconsCreated = true;\n }\n\n /**\n *\n * @param {string} action\n */\n bindToRedraw(action) {\n if (this.boundFunctions[action] === undefined) {\n this.boundFunctions[action] = this[action].bind(this);\n this.body.emitter.on(\"initRedraw\", this.boundFunctions[action]);\n this.body.emitter.emit(\"_startRendering\");\n }\n }\n\n /**\n *\n * @param {string} action\n */\n unbindFromRedraw(action) {\n if (this.boundFunctions[action] !== undefined) {\n this.body.emitter.off(\"initRedraw\", this.boundFunctions[action]);\n this.body.emitter.emit(\"_stopRendering\");\n delete this.boundFunctions[action];\n }\n }\n\n /**\n * this stops all movement induced by the navigation buttons\n *\n * @private\n */\n _fit() {\n if (new Date().valueOf() - this.touchTime > 700) {\n // TODO: fix ugly hack to avoid hammer's double fireing of event (because we use release?)\n this.body.emitter.emit(\"fit\", { duration: 700 });\n this.touchTime = new Date().valueOf();\n }\n }\n\n /**\n * this stops all movement induced by the navigation buttons\n *\n * @private\n */\n _stopMovement() {\n for (const boundAction in this.boundFunctions) {\n if (\n Object.prototype.hasOwnProperty.call(this.boundFunctions, boundAction)\n ) {\n this.body.emitter.off(\"initRedraw\", this.boundFunctions[boundAction]);\n this.body.emitter.emit(\"_stopRendering\");\n }\n }\n this.boundFunctions = {};\n }\n /**\n *\n * @private\n */\n _moveUp() {\n this.body.view.translation.y += this.options.keyboard.speed.y;\n }\n /**\n *\n * @private\n */\n _moveDown() {\n this.body.view.translation.y -= this.options.keyboard.speed.y;\n }\n /**\n *\n * @private\n */\n _moveLeft() {\n this.body.view.translation.x += this.options.keyboard.speed.x;\n }\n /**\n *\n * @private\n */\n _moveRight() {\n this.body.view.translation.x -= this.options.keyboard.speed.x;\n }\n /**\n *\n * @private\n */\n _zoomIn() {\n const scaleOld = this.body.view.scale;\n const scale = this.body.view.scale * (1 + this.options.keyboard.speed.zoom);\n const translation = this.body.view.translation;\n const scaleFrac = scale / scaleOld;\n const tx =\n (1 - scaleFrac) * this.canvas.canvasViewCenter.x +\n translation.x * scaleFrac;\n const ty =\n (1 - scaleFrac) * this.canvas.canvasViewCenter.y +\n translation.y * scaleFrac;\n\n this.body.view.scale = scale;\n this.body.view.translation = { x: tx, y: ty };\n this.body.emitter.emit(\"zoom\", {\n direction: \"+\",\n scale: this.body.view.scale,\n pointer: null,\n });\n }\n\n /**\n *\n * @private\n */\n _zoomOut() {\n const scaleOld = this.body.view.scale;\n const scale = this.body.view.scale / (1 + this.options.keyboard.speed.zoom);\n const translation = this.body.view.translation;\n const scaleFrac = scale / scaleOld;\n const tx =\n (1 - scaleFrac) * this.canvas.canvasViewCenter.x +\n translation.x * scaleFrac;\n const ty =\n (1 - scaleFrac) * this.canvas.canvasViewCenter.y +\n translation.y * scaleFrac;\n\n this.body.view.scale = scale;\n this.body.view.translation = { x: tx, y: ty };\n this.body.emitter.emit(\"zoom\", {\n direction: \"-\",\n scale: this.body.view.scale,\n pointer: null,\n });\n }\n\n /**\n * bind all keys using keycharm.\n */\n configureKeyboardBindings() {\n if (this.keycharm !== undefined) {\n this.keycharm.destroy();\n }\n\n if (this.options.keyboard.enabled === true) {\n if (this.options.keyboard.bindToWindow === true) {\n this.keycharm = keycharm({ container: window, preventDefault: true });\n } else {\n this.keycharm = keycharm({\n container: this.canvas.frame,\n preventDefault: true,\n });\n }\n\n this.keycharm.reset();\n\n if (this.activated === true) {\n this.keycharm.bind(\n \"up\",\n () => {\n this.bindToRedraw(\"_moveUp\");\n },\n \"keydown\"\n );\n this.keycharm.bind(\n \"down\",\n () => {\n this.bindToRedraw(\"_moveDown\");\n },\n \"keydown\"\n );\n this.keycharm.bind(\n \"left\",\n () => {\n this.bindToRedraw(\"_moveLeft\");\n },\n \"keydown\"\n );\n this.keycharm.bind(\n \"right\",\n () => {\n this.bindToRedraw(\"_moveRight\");\n },\n \"keydown\"\n );\n this.keycharm.bind(\n \"=\",\n () => {\n this.bindToRedraw(\"_zoomIn\");\n },\n \"keydown\"\n );\n this.keycharm.bind(\n \"num+\",\n () => {\n this.bindToRedraw(\"_zoomIn\");\n },\n \"keydown\"\n );\n this.keycharm.bind(\n \"num-\",\n () => {\n this.bindToRedraw(\"_zoomOut\");\n },\n \"keydown\"\n );\n this.keycharm.bind(\n \"-\",\n () => {\n this.bindToRedraw(\"_zoomOut\");\n },\n \"keydown\"\n );\n this.keycharm.bind(\n \"[\",\n () => {\n this.bindToRedraw(\"_zoomOut\");\n },\n \"keydown\"\n );\n this.keycharm.bind(\n \"]\",\n () => {\n this.bindToRedraw(\"_zoomIn\");\n },\n \"keydown\"\n );\n this.keycharm.bind(\n \"pageup\",\n () => {\n this.bindToRedraw(\"_zoomIn\");\n },\n \"keydown\"\n );\n this.keycharm.bind(\n \"pagedown\",\n () => {\n this.bindToRedraw(\"_zoomOut\");\n },\n \"keydown\"\n );\n\n this.keycharm.bind(\n \"up\",\n () => {\n this.unbindFromRedraw(\"_moveUp\");\n },\n \"keyup\"\n );\n this.keycharm.bind(\n \"down\",\n () => {\n this.unbindFromRedraw(\"_moveDown\");\n },\n \"keyup\"\n );\n this.keycharm.bind(\n \"left\",\n () => {\n this.unbindFromRedraw(\"_moveLeft\");\n },\n \"keyup\"\n );\n this.keycharm.bind(\n \"right\",\n () => {\n this.unbindFromRedraw(\"_moveRight\");\n },\n \"keyup\"\n );\n this.keycharm.bind(\n \"=\",\n () => {\n this.unbindFromRedraw(\"_zoomIn\");\n },\n \"keyup\"\n );\n this.keycharm.bind(\n \"num+\",\n () => {\n this.unbindFromRedraw(\"_zoomIn\");\n },\n \"keyup\"\n );\n this.keycharm.bind(\n \"num-\",\n () => {\n this.unbindFromRedraw(\"_zoomOut\");\n },\n \"keyup\"\n );\n this.keycharm.bind(\n \"-\",\n () => {\n this.unbindFromRedraw(\"_zoomOut\");\n },\n \"keyup\"\n );\n this.keycharm.bind(\n \"[\",\n () => {\n this.unbindFromRedraw(\"_zoomOut\");\n },\n \"keyup\"\n );\n this.keycharm.bind(\n \"]\",\n () => {\n this.unbindFromRedraw(\"_zoomIn\");\n },\n \"keyup\"\n );\n this.keycharm.bind(\n \"pageup\",\n () => {\n this.unbindFromRedraw(\"_zoomIn\");\n },\n \"keyup\"\n );\n this.keycharm.bind(\n \"pagedown\",\n () => {\n this.unbindFromRedraw(\"_zoomOut\");\n },\n \"keyup\"\n );\n }\n }\n }\n}\n\nexport default NavigationHandler;\n","import {\n Popup,\n getAbsoluteLeft,\n getAbsoluteTop,\n mergeOptions,\n parseColor,\n selectiveNotDeepExtend,\n} from \"vis-util/esnext\";\nimport NavigationHandler from \"./components/NavigationHandler\";\n\n/**\n * Handler for interactions\n */\nclass InteractionHandler {\n /**\n * @param {object} body\n * @param {Canvas} canvas\n * @param {SelectionHandler} selectionHandler\n */\n constructor(body, canvas, selectionHandler) {\n this.body = body;\n this.canvas = canvas;\n this.selectionHandler = selectionHandler;\n this.navigationHandler = new NavigationHandler(body, canvas);\n\n // bind the events from hammer to functions in this object\n this.body.eventListeners.onTap = this.onTap.bind(this);\n this.body.eventListeners.onTouch = this.onTouch.bind(this);\n this.body.eventListeners.onDoubleTap = this.onDoubleTap.bind(this);\n this.body.eventListeners.onHold = this.onHold.bind(this);\n this.body.eventListeners.onDragStart = this.onDragStart.bind(this);\n this.body.eventListeners.onDrag = this.onDrag.bind(this);\n this.body.eventListeners.onDragEnd = this.onDragEnd.bind(this);\n this.body.eventListeners.onMouseWheel = this.onMouseWheel.bind(this);\n this.body.eventListeners.onPinch = this.onPinch.bind(this);\n this.body.eventListeners.onMouseMove = this.onMouseMove.bind(this);\n this.body.eventListeners.onRelease = this.onRelease.bind(this);\n this.body.eventListeners.onContext = this.onContext.bind(this);\n\n this.touchTime = 0;\n this.drag = {};\n this.pinch = {};\n this.popup = undefined;\n this.popupObj = undefined;\n this.popupTimer = undefined;\n\n this.body.functions.getPointer = this.getPointer.bind(this);\n\n this.options = {};\n this.defaultOptions = {\n dragNodes: true,\n dragView: true,\n hover: false,\n keyboard: {\n enabled: false,\n speed: { x: 10, y: 10, zoom: 0.02 },\n bindToWindow: true,\n autoFocus: true,\n },\n navigationButtons: false,\n tooltipDelay: 300,\n zoomView: true,\n zoomSpeed: 1,\n };\n Object.assign(this.options, this.defaultOptions);\n\n this.bindEventListeners();\n }\n\n /**\n * Binds event listeners\n */\n bindEventListeners() {\n this.body.emitter.on(\"destroy\", () => {\n clearTimeout(this.popupTimer);\n delete this.body.functions.getPointer;\n });\n }\n\n /**\n *\n * @param {object} options\n */\n setOptions(options) {\n if (options !== undefined) {\n // extend all but the values in fields\n const fields = [\n \"hideEdgesOnDrag\",\n \"hideEdgesOnZoom\",\n \"hideNodesOnDrag\",\n \"keyboard\",\n \"multiselect\",\n \"selectable\",\n \"selectConnectedEdges\",\n ];\n selectiveNotDeepExtend(fields, this.options, options);\n\n // merge the keyboard options in.\n mergeOptions(this.options, options, \"keyboard\");\n\n if (options.tooltip) {\n Object.assign(this.options.tooltip, options.tooltip);\n if (options.tooltip.color) {\n this.options.tooltip.color = parseColor(options.tooltip.color);\n }\n }\n }\n\n this.navigationHandler.setOptions(this.options);\n }\n\n /**\n * Get the pointer location from a touch location\n *\n * @param {{x: number, y: number}} touch\n * @returns {{x: number, y: number}} pointer\n * @private\n */\n getPointer(touch) {\n return {\n x: touch.x - getAbsoluteLeft(this.canvas.frame.canvas),\n y: touch.y - getAbsoluteTop(this.canvas.frame.canvas),\n };\n }\n\n /**\n * On start of a touch gesture, store the pointer\n *\n * @param {Event} event The event\n * @private\n */\n onTouch(event) {\n if (new Date().valueOf() - this.touchTime > 50) {\n this.drag.pointer = this.getPointer(event.center);\n this.drag.pinched = false;\n this.pinch.scale = this.body.view.scale;\n // to avoid double fireing of this event because we have two hammer instances. (on canvas and on frame)\n this.touchTime = new Date().valueOf();\n }\n }\n\n /**\n * handle tap/click event: select/unselect a node\n *\n * @param {Event} event\n * @private\n */\n onTap(event) {\n const pointer = this.getPointer(event.center);\n const multiselect =\n this.selectionHandler.options.multiselect &&\n (event.changedPointers[0].ctrlKey || event.changedPointers[0].metaKey);\n\n this.checkSelectionChanges(pointer, multiselect);\n\n this.selectionHandler.commitAndEmit(pointer, event);\n this.selectionHandler.generateClickEvent(\"click\", event, pointer);\n }\n\n /**\n * handle doubletap event\n *\n * @param {Event} event\n * @private\n */\n onDoubleTap(event) {\n const pointer = this.getPointer(event.center);\n this.selectionHandler.generateClickEvent(\"doubleClick\", event, pointer);\n }\n\n /**\n * handle long tap event: multi select nodes\n *\n * @param {Event} event\n * @private\n */\n onHold(event) {\n const pointer = this.getPointer(event.center);\n const multiselect = this.selectionHandler.options.multiselect;\n\n this.checkSelectionChanges(pointer, multiselect);\n\n this.selectionHandler.commitAndEmit(pointer, event);\n this.selectionHandler.generateClickEvent(\"click\", event, pointer);\n this.selectionHandler.generateClickEvent(\"hold\", event, pointer);\n }\n\n /**\n * handle the release of the screen\n *\n * @param {Event} event\n * @private\n */\n onRelease(event) {\n if (new Date().valueOf() - this.touchTime > 10) {\n const pointer = this.getPointer(event.center);\n this.selectionHandler.generateClickEvent(\"release\", event, pointer);\n // to avoid double fireing of this event because we have two hammer instances. (on canvas and on frame)\n this.touchTime = new Date().valueOf();\n }\n }\n\n /**\n *\n * @param {Event} event\n */\n onContext(event) {\n const pointer = this.getPointer({ x: event.clientX, y: event.clientY });\n this.selectionHandler.generateClickEvent(\"oncontext\", event, pointer);\n }\n\n /**\n * Select and deselect nodes depending current selection change.\n *\n * @param {{x: number, y: number}} pointer\n * @param {boolean} [add=false]\n */\n checkSelectionChanges(pointer, add = false) {\n if (add === true) {\n this.selectionHandler.selectAdditionalOnPoint(pointer);\n } else {\n this.selectionHandler.selectOnPoint(pointer);\n }\n }\n\n /**\n * Remove all node and edge id's from the first set that are present in the second one.\n *\n * @param {{nodes: Array., edges: Array.}} firstSet\n * @param {{nodes: Array., edges: Array.}} secondSet\n * @returns {{nodes: Array., edges: Array.}}\n * @private\n */\n _determineDifference(firstSet, secondSet) {\n const arrayDiff = function (firstArr, secondArr) {\n const result = [];\n\n for (let i = 0; i < firstArr.length; i++) {\n const value = firstArr[i];\n if (secondArr.indexOf(value) === -1) {\n result.push(value);\n }\n }\n\n return result;\n };\n\n return {\n nodes: arrayDiff(firstSet.nodes, secondSet.nodes),\n edges: arrayDiff(firstSet.edges, secondSet.edges),\n };\n }\n\n /**\n * This function is called by onDragStart.\n * It is separated out because we can then overload it for the datamanipulation system.\n *\n * @param {Event} event\n * @private\n */\n onDragStart(event) {\n // if already dragging, do not start\n // this can happen on touch screens with multiple fingers\n if (this.drag.dragging) {\n return;\n }\n\n //in case the touch event was triggered on an external div, do the initial touch now.\n if (this.drag.pointer === undefined) {\n this.onTouch(event);\n }\n\n // note: drag.pointer is set in onTouch to get the initial touch location\n const node = this.selectionHandler.getNodeAt(this.drag.pointer);\n\n this.drag.dragging = true;\n this.drag.selection = [];\n this.drag.translation = Object.assign({}, this.body.view.translation); // copy the object\n this.drag.nodeId = undefined;\n\n if (event.srcEvent.shiftKey) {\n this.body.selectionBox.show = true;\n const pointer = this.getPointer(event.center);\n\n this.body.selectionBox.position.start = {\n x: this.canvas._XconvertDOMtoCanvas(pointer.x),\n y: this.canvas._YconvertDOMtoCanvas(pointer.y),\n };\n this.body.selectionBox.position.end = {\n x: this.canvas._XconvertDOMtoCanvas(pointer.x),\n y: this.canvas._YconvertDOMtoCanvas(pointer.y),\n };\n } else if (node !== undefined && this.options.dragNodes === true) {\n this.drag.nodeId = node.id;\n // select the clicked node if not yet selected\n if (node.isSelected() === false) {\n this.selectionHandler.setSelection({ nodes: [node.id] });\n }\n\n // after select to contain the node\n this.selectionHandler.generateClickEvent(\n \"dragStart\",\n event,\n this.drag.pointer\n );\n\n // create an array with the selected nodes and their original location and status\n for (const node of this.selectionHandler.getSelectedNodes()) {\n const s = {\n id: node.id,\n node: node,\n\n // store original x, y, xFixed and yFixed, make the node temporarily Fixed\n x: node.x,\n y: node.y,\n xFixed: node.options.fixed.x,\n yFixed: node.options.fixed.y,\n };\n\n node.options.fixed.x = true;\n node.options.fixed.y = true;\n\n this.drag.selection.push(s);\n }\n } else {\n // fallback if no node is selected and thus the view is dragged.\n this.selectionHandler.generateClickEvent(\n \"dragStart\",\n event,\n this.drag.pointer,\n undefined,\n true\n );\n }\n }\n\n /**\n * handle drag event\n *\n * @param {Event} event\n * @private\n */\n onDrag(event) {\n if (this.drag.pinched === true) {\n return;\n }\n\n // remove the focus on node if it is focussed on by the focusOnNode\n this.body.emitter.emit(\"unlockNode\");\n\n const pointer = this.getPointer(event.center);\n\n const selection = this.drag.selection;\n if (selection && selection.length && this.options.dragNodes === true) {\n this.selectionHandler.generateClickEvent(\"dragging\", event, pointer);\n\n // calculate delta's and new location\n const deltaX = pointer.x - this.drag.pointer.x;\n const deltaY = pointer.y - this.drag.pointer.y;\n\n // update position of all selected nodes\n selection.forEach((selection) => {\n const node = selection.node;\n // only move the node if it was not fixed initially\n if (selection.xFixed === false) {\n node.x = this.canvas._XconvertDOMtoCanvas(\n this.canvas._XconvertCanvasToDOM(selection.x) + deltaX\n );\n }\n // only move the node if it was not fixed initially\n if (selection.yFixed === false) {\n node.y = this.canvas._YconvertDOMtoCanvas(\n this.canvas._YconvertCanvasToDOM(selection.y) + deltaY\n );\n }\n });\n\n // start the simulation of the physics\n this.body.emitter.emit(\"startSimulation\");\n } else {\n // create selection box\n if (event.srcEvent.shiftKey) {\n this.selectionHandler.generateClickEvent(\n \"dragging\",\n event,\n pointer,\n undefined,\n true\n );\n\n // if the drag was not started properly because the click started outside the network div, start it now.\n if (this.drag.pointer === undefined) {\n this.onDragStart(event);\n return;\n }\n\n this.body.selectionBox.position.end = {\n x: this.canvas._XconvertDOMtoCanvas(pointer.x),\n y: this.canvas._YconvertDOMtoCanvas(pointer.y),\n };\n this.body.emitter.emit(\"_requestRedraw\");\n }\n\n // move the network\n if (this.options.dragView === true && !event.srcEvent.shiftKey) {\n this.selectionHandler.generateClickEvent(\n \"dragging\",\n event,\n pointer,\n undefined,\n true\n );\n\n // if the drag was not started properly because the click started outside the network div, start it now.\n if (this.drag.pointer === undefined) {\n this.onDragStart(event);\n return;\n }\n\n const diffX = pointer.x - this.drag.pointer.x;\n const diffY = pointer.y - this.drag.pointer.y;\n\n this.body.view.translation = {\n x: this.drag.translation.x + diffX,\n y: this.drag.translation.y + diffY,\n };\n this.body.emitter.emit(\"_requestRedraw\");\n }\n }\n }\n\n /**\n * handle drag start event\n *\n * @param {Event} event\n * @private\n */\n onDragEnd(event) {\n this.drag.dragging = false;\n\n if (this.body.selectionBox.show) {\n this.body.selectionBox.show = false;\n const selectionBoxPosition = this.body.selectionBox.position;\n const selectionBoxPositionMinMax = {\n minX: Math.min(\n selectionBoxPosition.start.x,\n selectionBoxPosition.end.x\n ),\n minY: Math.min(\n selectionBoxPosition.start.y,\n selectionBoxPosition.end.y\n ),\n maxX: Math.max(\n selectionBoxPosition.start.x,\n selectionBoxPosition.end.x\n ),\n maxY: Math.max(\n selectionBoxPosition.start.y,\n selectionBoxPosition.end.y\n ),\n };\n\n const toBeSelectedNodes = this.body.nodeIndices.filter((nodeId) => {\n const node = this.body.nodes[nodeId];\n return (\n node.x >= selectionBoxPositionMinMax.minX &&\n node.x <= selectionBoxPositionMinMax.maxX &&\n node.y >= selectionBoxPositionMinMax.minY &&\n node.y <= selectionBoxPositionMinMax.maxY\n );\n });\n\n toBeSelectedNodes.forEach((nodeId) =>\n this.selectionHandler.selectObject(this.body.nodes[nodeId])\n );\n\n const pointer = this.getPointer(event.center);\n this.selectionHandler.commitAndEmit(pointer, event);\n this.selectionHandler.generateClickEvent(\n \"dragEnd\",\n event,\n this.getPointer(event.center),\n undefined,\n true\n );\n this.body.emitter.emit(\"_requestRedraw\");\n } else {\n const selection = this.drag.selection;\n if (selection && selection.length) {\n selection.forEach(function (s) {\n // restore original xFixed and yFixed\n s.node.options.fixed.x = s.xFixed;\n s.node.options.fixed.y = s.yFixed;\n });\n this.selectionHandler.generateClickEvent(\n \"dragEnd\",\n event,\n this.getPointer(event.center)\n );\n this.body.emitter.emit(\"startSimulation\");\n } else {\n this.selectionHandler.generateClickEvent(\n \"dragEnd\",\n event,\n this.getPointer(event.center),\n undefined,\n true\n );\n this.body.emitter.emit(\"_requestRedraw\");\n }\n }\n }\n\n /**\n * Handle pinch event\n *\n * @param {Event} event The event\n * @private\n */\n onPinch(event) {\n const pointer = this.getPointer(event.center);\n\n this.drag.pinched = true;\n if (this.pinch[\"scale\"] === undefined) {\n this.pinch.scale = 1;\n }\n\n // TODO: enabled moving while pinching?\n const scale = this.pinch.scale * event.scale;\n this.zoom(scale, pointer);\n }\n\n /**\n * Zoom the network in or out\n *\n * @param {number} scale a number around 1, and between 0.01 and 10\n * @param {{x: number, y: number}} pointer Position on screen\n * @private\n */\n zoom(scale, pointer) {\n if (this.options.zoomView === true) {\n const scaleOld = this.body.view.scale;\n if (scale < 0.00001) {\n scale = 0.00001;\n }\n if (scale > 10) {\n scale = 10;\n }\n\n let preScaleDragPointer = undefined;\n if (this.drag !== undefined) {\n if (this.drag.dragging === true) {\n preScaleDragPointer = this.canvas.DOMtoCanvas(this.drag.pointer);\n }\n }\n // + this.canvas.frame.canvas.clientHeight / 2\n const translation = this.body.view.translation;\n\n const scaleFrac = scale / scaleOld;\n const tx = (1 - scaleFrac) * pointer.x + translation.x * scaleFrac;\n const ty = (1 - scaleFrac) * pointer.y + translation.y * scaleFrac;\n\n this.body.view.scale = scale;\n this.body.view.translation = { x: tx, y: ty };\n\n if (preScaleDragPointer != undefined) {\n const postScaleDragPointer =\n this.canvas.canvasToDOM(preScaleDragPointer);\n this.drag.pointer.x = postScaleDragPointer.x;\n this.drag.pointer.y = postScaleDragPointer.y;\n }\n\n this.body.emitter.emit(\"_requestRedraw\");\n\n if (scaleOld < scale) {\n this.body.emitter.emit(\"zoom\", {\n direction: \"+\",\n scale: this.body.view.scale,\n pointer: pointer,\n });\n } else {\n this.body.emitter.emit(\"zoom\", {\n direction: \"-\",\n scale: this.body.view.scale,\n pointer: pointer,\n });\n }\n }\n }\n\n /**\n * Event handler for mouse wheel event, used to zoom the timeline\n * See http://adomas.org/javascript-mouse-wheel/\n * https://github.com/EightMedia/hammer.js/issues/256\n *\n * @param {MouseEvent} event\n * @private\n */\n onMouseWheel(event) {\n if (this.options.zoomView === true) {\n // If delta is nonzero, handle it.\n // Basically, delta is now positive if wheel was scrolled up,\n // and negative, if wheel was scrolled down.\n if (event.deltaY !== 0) {\n // calculate the new scale\n let scale = this.body.view.scale;\n scale *=\n 1 + (event.deltaY < 0 ? 1 : -1) * (this.options.zoomSpeed * 0.1);\n\n // calculate the pointer location\n const pointer = this.getPointer({ x: event.clientX, y: event.clientY });\n\n // apply the new scale\n this.zoom(scale, pointer);\n }\n\n // Prevent default actions caused by mouse wheel.\n event.preventDefault();\n }\n }\n\n /**\n * Mouse move handler for checking whether the title moves over a node with a title.\n *\n * @param {Event} event\n * @private\n */\n onMouseMove(event) {\n const pointer = this.getPointer({ x: event.clientX, y: event.clientY });\n let popupVisible = false;\n\n // check if the previously selected node is still selected\n if (this.popup !== undefined) {\n if (this.popup.hidden === false) {\n this._checkHidePopup(pointer);\n }\n\n // if the popup was not hidden above\n if (this.popup.hidden === false) {\n popupVisible = true;\n this.popup.setPosition(pointer.x + 3, pointer.y - 5);\n this.popup.show();\n }\n }\n\n // if we bind the keyboard to the div, we have to highlight it to use it. This highlights it on mouse over.\n if (\n this.options.keyboard.autoFocus &&\n this.options.keyboard.bindToWindow === false &&\n this.options.keyboard.enabled === true\n ) {\n this.canvas.frame.focus();\n }\n\n // start a timeout that will check if the mouse is positioned above an element\n if (popupVisible === false) {\n if (this.popupTimer !== undefined) {\n clearInterval(this.popupTimer); // stop any running calculationTimer\n this.popupTimer = undefined;\n }\n if (!this.drag.dragging) {\n this.popupTimer = setTimeout(\n () => this._checkShowPopup(pointer),\n this.options.tooltipDelay\n );\n }\n }\n\n // adding hover highlights\n if (this.options.hover === true) {\n this.selectionHandler.hoverObject(event, pointer);\n }\n }\n\n /**\n * Check if there is an element on the given position in the network\n * (a node or edge). If so, and if this element has a title,\n * show a popup window with its title.\n *\n * @param {{x:number, y:number}} pointer\n * @private\n */\n _checkShowPopup(pointer) {\n const x = this.canvas._XconvertDOMtoCanvas(pointer.x);\n const y = this.canvas._YconvertDOMtoCanvas(pointer.y);\n const pointerObj = {\n left: x,\n top: y,\n right: x,\n bottom: y,\n };\n\n const previousPopupObjId =\n this.popupObj === undefined ? undefined : this.popupObj.id;\n let nodeUnderCursor = false;\n let popupType = \"node\";\n\n // check if a node is under the cursor.\n if (this.popupObj === undefined) {\n // search the nodes for overlap, select the top one in case of multiple nodes\n const nodeIndices = this.body.nodeIndices;\n const nodes = this.body.nodes;\n let node;\n const overlappingNodes = [];\n for (let i = 0; i < nodeIndices.length; i++) {\n node = nodes[nodeIndices[i]];\n if (node.isOverlappingWith(pointerObj) === true) {\n nodeUnderCursor = true;\n if (node.getTitle() !== undefined) {\n overlappingNodes.push(nodeIndices[i]);\n }\n }\n }\n\n if (overlappingNodes.length > 0) {\n // if there are overlapping nodes, select the last one, this is the one which is drawn on top of the others\n this.popupObj = nodes[overlappingNodes[overlappingNodes.length - 1]];\n // if you hover over a node, the title of the edge is not supposed to be shown.\n nodeUnderCursor = true;\n }\n }\n\n if (this.popupObj === undefined && nodeUnderCursor === false) {\n // search the edges for overlap\n const edgeIndices = this.body.edgeIndices;\n const edges = this.body.edges;\n let edge;\n const overlappingEdges = [];\n for (let i = 0; i < edgeIndices.length; i++) {\n edge = edges[edgeIndices[i]];\n if (edge.isOverlappingWith(pointerObj) === true) {\n if (edge.connected === true && edge.getTitle() !== undefined) {\n overlappingEdges.push(edgeIndices[i]);\n }\n }\n }\n\n if (overlappingEdges.length > 0) {\n this.popupObj = edges[overlappingEdges[overlappingEdges.length - 1]];\n popupType = \"edge\";\n }\n }\n\n if (this.popupObj !== undefined) {\n // show popup message window\n if (this.popupObj.id !== previousPopupObjId) {\n if (this.popup === undefined) {\n this.popup = new Popup(this.canvas.frame);\n }\n\n this.popup.popupTargetType = popupType;\n this.popup.popupTargetId = this.popupObj.id;\n\n // adjust a small offset such that the mouse cursor is located in the\n // bottom left location of the popup, and you can easily move over the\n // popup area\n this.popup.setPosition(pointer.x + 3, pointer.y - 5);\n this.popup.setText(this.popupObj.getTitle());\n this.popup.show();\n this.body.emitter.emit(\"showPopup\", this.popupObj.id);\n }\n } else {\n if (this.popup !== undefined) {\n this.popup.hide();\n this.body.emitter.emit(\"hidePopup\");\n }\n }\n }\n\n /**\n * Check if the popup must be hidden, which is the case when the mouse is no\n * longer hovering on the object\n *\n * @param {{x:number, y:number}} pointer\n * @private\n */\n _checkHidePopup(pointer) {\n const pointerObj = this.selectionHandler._pointerToPositionObject(pointer);\n\n let stillOnObj = false;\n if (this.popup.popupTargetType === \"node\") {\n if (this.body.nodes[this.popup.popupTargetId] !== undefined) {\n stillOnObj =\n this.body.nodes[this.popup.popupTargetId].isOverlappingWith(\n pointerObj\n );\n\n // if the mouse is still one the node, we have to check if it is not also on one that is drawn on top of it.\n // we initially only check stillOnObj because this is much faster.\n if (stillOnObj === true) {\n const overNode = this.selectionHandler.getNodeAt(pointer);\n stillOnObj =\n overNode === undefined\n ? false\n : overNode.id === this.popup.popupTargetId;\n }\n }\n } else {\n if (this.selectionHandler.getNodeAt(pointer) === undefined) {\n if (this.body.edges[this.popup.popupTargetId] !== undefined) {\n stillOnObj =\n this.body.edges[this.popup.popupTargetId].isOverlappingWith(\n pointerObj\n );\n }\n }\n }\n\n if (stillOnObj === false) {\n this.popupObj = undefined;\n this.popup.hide();\n this.body.emitter.emit(\"hidePopup\");\n }\n }\n}\n\nexport default InteractionHandler;\n","'use strict';\nvar uncurryThis = require('../internals/function-uncurry-this');\nvar defineBuiltIns = require('../internals/define-built-ins');\nvar getWeakData = require('../internals/internal-metadata').getWeakData;\nvar anInstance = require('../internals/an-instance');\nvar anObject = require('../internals/an-object');\nvar isNullOrUndefined = require('../internals/is-null-or-undefined');\nvar isObject = require('../internals/is-object');\nvar iterate = require('../internals/iterate');\nvar ArrayIterationModule = require('../internals/array-iteration');\nvar hasOwn = require('../internals/has-own-property');\nvar InternalStateModule = require('../internals/internal-state');\n\nvar setInternalState = InternalStateModule.set;\nvar internalStateGetterFor = InternalStateModule.getterFor;\nvar find = ArrayIterationModule.find;\nvar findIndex = ArrayIterationModule.findIndex;\nvar splice = uncurryThis([].splice);\nvar id = 0;\n\n// fallback for uncaught frozen keys\nvar uncaughtFrozenStore = function (state) {\n return state.frozen || (state.frozen = new UncaughtFrozenStore());\n};\n\nvar UncaughtFrozenStore = function () {\n this.entries = [];\n};\n\nvar findUncaughtFrozen = function (store, key) {\n return find(store.entries, function (it) {\n return it[0] === key;\n });\n};\n\nUncaughtFrozenStore.prototype = {\n get: function (key) {\n var entry = findUncaughtFrozen(this, key);\n if (entry) return entry[1];\n },\n has: function (key) {\n return !!findUncaughtFrozen(this, key);\n },\n set: function (key, value) {\n var entry = findUncaughtFrozen(this, key);\n if (entry) entry[1] = value;\n else this.entries.push([key, value]);\n },\n 'delete': function (key) {\n var index = findIndex(this.entries, function (it) {\n return it[0] === key;\n });\n if (~index) splice(this.entries, index, 1);\n return !!~index;\n }\n};\n\nmodule.exports = {\n getConstructor: function (wrapper, CONSTRUCTOR_NAME, IS_MAP, ADDER) {\n var Constructor = wrapper(function (that, iterable) {\n anInstance(that, Prototype);\n setInternalState(that, {\n type: CONSTRUCTOR_NAME,\n id: id++,\n frozen: undefined\n });\n if (!isNullOrUndefined(iterable)) iterate(iterable, that[ADDER], { that: that, AS_ENTRIES: IS_MAP });\n });\n\n var Prototype = Constructor.prototype;\n\n var getInternalState = internalStateGetterFor(CONSTRUCTOR_NAME);\n\n var define = function (that, key, value) {\n var state = getInternalState(that);\n var data = getWeakData(anObject(key), true);\n if (data === true) uncaughtFrozenStore(state).set(key, value);\n else data[state.id] = value;\n return that;\n };\n\n defineBuiltIns(Prototype, {\n // `{ WeakMap, WeakSet }.prototype.delete(key)` methods\n // https://tc39.es/ecma262/#sec-weakmap.prototype.delete\n // https://tc39.es/ecma262/#sec-weakset.prototype.delete\n 'delete': function (key) {\n var state = getInternalState(this);\n if (!isObject(key)) return false;\n var data = getWeakData(key);\n if (data === true) return uncaughtFrozenStore(state)['delete'](key);\n return data && hasOwn(data, state.id) && delete data[state.id];\n },\n // `{ WeakMap, WeakSet }.prototype.has(key)` methods\n // https://tc39.es/ecma262/#sec-weakmap.prototype.has\n // https://tc39.es/ecma262/#sec-weakset.prototype.has\n has: function has(key) {\n var state = getInternalState(this);\n if (!isObject(key)) return false;\n var data = getWeakData(key);\n if (data === true) return uncaughtFrozenStore(state).has(key);\n return data && hasOwn(data, state.id);\n }\n });\n\n defineBuiltIns(Prototype, IS_MAP ? {\n // `WeakMap.prototype.get(key)` method\n // https://tc39.es/ecma262/#sec-weakmap.prototype.get\n get: function get(key) {\n var state = getInternalState(this);\n if (isObject(key)) {\n var data = getWeakData(key);\n if (data === true) return uncaughtFrozenStore(state).get(key);\n return data ? data[state.id] : undefined;\n }\n },\n // `WeakMap.prototype.set(key, value)` method\n // https://tc39.es/ecma262/#sec-weakmap.prototype.set\n set: function set(key, value) {\n return define(this, key, value);\n }\n } : {\n // `WeakSet.prototype.add(value)` method\n // https://tc39.es/ecma262/#sec-weakset.prototype.add\n add: function add(value) {\n return define(this, value, true);\n }\n });\n\n return Constructor;\n }\n};\n","'use strict';\nvar FREEZING = require('../internals/freezing');\nvar global = require('../internals/global');\nvar uncurryThis = require('../internals/function-uncurry-this');\nvar defineBuiltIns = require('../internals/define-built-ins');\nvar InternalMetadataModule = require('../internals/internal-metadata');\nvar collection = require('../internals/collection');\nvar collectionWeak = require('../internals/collection-weak');\nvar isObject = require('../internals/is-object');\nvar enforceInternalState = require('../internals/internal-state').enforce;\nvar fails = require('../internals/fails');\nvar NATIVE_WEAK_MAP = require('../internals/weak-map-basic-detection');\n\nvar $Object = Object;\n// eslint-disable-next-line es/no-array-isarray -- safe\nvar isArray = Array.isArray;\n// eslint-disable-next-line es/no-object-isextensible -- safe\nvar isExtensible = $Object.isExtensible;\n// eslint-disable-next-line es/no-object-isfrozen -- safe\nvar isFrozen = $Object.isFrozen;\n// eslint-disable-next-line es/no-object-issealed -- safe\nvar isSealed = $Object.isSealed;\n// eslint-disable-next-line es/no-object-freeze -- safe\nvar freeze = $Object.freeze;\n// eslint-disable-next-line es/no-object-seal -- safe\nvar seal = $Object.seal;\n\nvar FROZEN = {};\nvar SEALED = {};\nvar IS_IE11 = !global.ActiveXObject && 'ActiveXObject' in global;\nvar InternalWeakMap;\n\nvar wrapper = function (init) {\n return function WeakMap() {\n return init(this, arguments.length ? arguments[0] : undefined);\n };\n};\n\n// `WeakMap` constructor\n// https://tc39.es/ecma262/#sec-weakmap-constructor\nvar $WeakMap = collection('WeakMap', wrapper, collectionWeak);\nvar WeakMapPrototype = $WeakMap.prototype;\nvar nativeSet = uncurryThis(WeakMapPrototype.set);\n\n// Chakra Edge bug: adding frozen arrays to WeakMap unfreeze them\nvar hasMSEdgeFreezingBug = function () {\n return FREEZING && fails(function () {\n var frozenArray = freeze([]);\n nativeSet(new $WeakMap(), frozenArray, 1);\n return !isFrozen(frozenArray);\n });\n};\n\n// IE11 WeakMap frozen keys fix\n// We can't use feature detection because it crash some old IE builds\n// https://github.com/zloirock/core-js/issues/485\nif (NATIVE_WEAK_MAP) if (IS_IE11) {\n InternalWeakMap = collectionWeak.getConstructor(wrapper, 'WeakMap', true);\n InternalMetadataModule.enable();\n var nativeDelete = uncurryThis(WeakMapPrototype['delete']);\n var nativeHas = uncurryThis(WeakMapPrototype.has);\n var nativeGet = uncurryThis(WeakMapPrototype.get);\n defineBuiltIns(WeakMapPrototype, {\n 'delete': function (key) {\n if (isObject(key) && !isExtensible(key)) {\n var state = enforceInternalState(this);\n if (!state.frozen) state.frozen = new InternalWeakMap();\n return nativeDelete(this, key) || state.frozen['delete'](key);\n } return nativeDelete(this, key);\n },\n has: function has(key) {\n if (isObject(key) && !isExtensible(key)) {\n var state = enforceInternalState(this);\n if (!state.frozen) state.frozen = new InternalWeakMap();\n return nativeHas(this, key) || state.frozen.has(key);\n } return nativeHas(this, key);\n },\n get: function get(key) {\n if (isObject(key) && !isExtensible(key)) {\n var state = enforceInternalState(this);\n if (!state.frozen) state.frozen = new InternalWeakMap();\n return nativeHas(this, key) ? nativeGet(this, key) : state.frozen.get(key);\n } return nativeGet(this, key);\n },\n set: function set(key, value) {\n if (isObject(key) && !isExtensible(key)) {\n var state = enforceInternalState(this);\n if (!state.frozen) state.frozen = new InternalWeakMap();\n nativeHas(this, key) ? nativeSet(this, key, value) : state.frozen.set(key, value);\n } else nativeSet(this, key, value);\n return this;\n }\n });\n// Chakra Edge frozen keys fix\n} else if (hasMSEdgeFreezingBug()) {\n defineBuiltIns(WeakMapPrototype, {\n set: function set(key, value) {\n var arrayIntegrityLevel;\n if (isArray(key)) {\n if (isFrozen(key)) arrayIntegrityLevel = FROZEN;\n else if (isSealed(key)) arrayIntegrityLevel = SEALED;\n }\n nativeSet(this, key, value);\n if (arrayIntegrityLevel === FROZEN) freeze(key);\n if (arrayIntegrityLevel === SEALED) seal(key);\n return this;\n }\n });\n}\n","'use strict';\nrequire('../../modules/es.array.iterator');\nrequire('../../modules/es.object.to-string');\nrequire('../../modules/es.weak-map');\nvar path = require('../../internals/path');\n\nmodule.exports = path.WeakMap;\n","export interface Selectable {\n select(): void;\n unselect(): void;\n}\n\ninterface SingleTypeSelectionAccumulatorChanges {\n added: T[];\n deleted: T[];\n previous: T[];\n current: T[];\n}\n\n/**\n * @param prev\n * @param next\n */\nfunction diffSets(prev: ReadonlySet, next: ReadonlySet): Set {\n const diff = new Set();\n for (const item of next) {\n if (!prev.has(item)) {\n diff.add(item);\n }\n }\n return diff;\n}\n\nclass SingleTypeSelectionAccumulator {\n #previousSelection: ReadonlySet = new Set();\n #selection: Set = new Set();\n\n public get size(): number {\n return this.#selection.size;\n }\n\n public add(...items: readonly T[]): void {\n for (const item of items) {\n this.#selection.add(item);\n }\n }\n public delete(...items: readonly T[]): void {\n for (const item of items) {\n this.#selection.delete(item);\n }\n }\n public clear(): void {\n this.#selection.clear();\n }\n\n public getSelection(): T[] {\n return [...this.#selection];\n }\n\n public getChanges(): SingleTypeSelectionAccumulatorChanges {\n return {\n added: [...diffSets(this.#previousSelection, this.#selection)],\n deleted: [...diffSets(this.#selection, this.#previousSelection)],\n previous: [...new Set(this.#previousSelection)],\n current: [...new Set(this.#selection)],\n };\n }\n\n public commit(): SingleTypeSelectionAccumulatorChanges {\n const changes = this.getChanges();\n\n this.#previousSelection = this.#selection;\n this.#selection = new Set(this.#previousSelection);\n\n for (const item of changes.added) {\n item.select();\n }\n for (const item of changes.deleted) {\n item.unselect();\n }\n\n return changes;\n }\n}\n\n// TODO: These should be real types imported from node.ts and edge.ts that don't\n// exist yet.\ninterface Node extends Selectable {\n $: \"node\";\n}\ninterface Edge extends Selectable {\n $: \"edge\";\n}\n\nexport interface SelectionAccumulatorCommitSummary {\n nodes: SingleTypeSelectionAccumulatorChanges;\n edges: SingleTypeSelectionAccumulatorChanges;\n}\n\nexport type SelectionAccumulatorCommitHandler<\n CommitArgs extends readonly any[]\n> = (summary: SelectionAccumulatorCommitSummary, ...rest: CommitArgs) => void;\n\nexport class SelectionAccumulator {\n #nodes = new SingleTypeSelectionAccumulator();\n #edges = new SingleTypeSelectionAccumulator();\n\n readonly #commitHandler: SelectionAccumulatorCommitHandler;\n\n public constructor(\n commitHandler: SelectionAccumulatorCommitHandler = (): void => {}\n ) {\n this.#commitHandler = commitHandler;\n }\n\n public get sizeNodes(): number {\n return this.#nodes.size;\n }\n public get sizeEdges(): number {\n return this.#edges.size;\n }\n\n public getNodes(): Node[] {\n return this.#nodes.getSelection();\n }\n public getEdges(): Edge[] {\n return this.#edges.getSelection();\n }\n\n public addNodes(...nodes: readonly Node[]): void {\n this.#nodes.add(...nodes);\n }\n public addEdges(...edges: readonly Edge[]): void {\n this.#edges.add(...edges);\n }\n\n public deleteNodes(node: Node): void {\n this.#nodes.delete(node);\n }\n public deleteEdges(edge: Edge): void {\n this.#edges.delete(edge);\n }\n\n public clear(): void {\n this.#nodes.clear();\n this.#edges.clear();\n }\n\n public commit(...rest: CommitArgs): SelectionAccumulatorCommitSummary {\n const summary = {\n nodes: this.#nodes.commit(),\n edges: this.#edges.commit(),\n };\n this.#commitHandler(summary, ...rest);\n return summary;\n }\n}\n","import Node from \"./components/Node\";\nimport Edge from \"./components/Edge\";\nimport { SelectionAccumulator } from \"./selection\";\n\nimport { selectiveDeepExtend } from \"vis-util/esnext\";\n\n/**\n * The handler for selections\n */\nclass SelectionHandler {\n /**\n * @param {object} body\n * @param {Canvas} canvas\n */\n constructor(body, canvas) {\n this.body = body;\n this.canvas = canvas;\n // TODO: Consider firing an event on any change to the selection, not\n // only those caused by clicks and taps. It would be easy to implement\n // now and (at least to me) it seems like something that could be\n // quite useful.\n this._selectionAccumulator = new SelectionAccumulator();\n this.hoverObj = { nodes: {}, edges: {} };\n\n this.options = {};\n this.defaultOptions = {\n multiselect: false,\n selectable: true,\n selectConnectedEdges: true,\n hoverConnectedEdges: true,\n };\n Object.assign(this.options, this.defaultOptions);\n\n this.body.emitter.on(\"_dataChanged\", () => {\n this.updateSelection();\n });\n }\n\n /**\n *\n * @param {object} [options]\n */\n setOptions(options) {\n if (options !== undefined) {\n const fields = [\n \"multiselect\",\n \"hoverConnectedEdges\",\n \"selectable\",\n \"selectConnectedEdges\",\n ];\n selectiveDeepExtend(fields, this.options, options);\n }\n }\n\n /**\n * handles the selection part of the tap;\n *\n * @param {{x: number, y: number}} pointer\n * @returns {boolean}\n */\n selectOnPoint(pointer) {\n let selected = false;\n if (this.options.selectable === true) {\n const obj = this.getNodeAt(pointer) || this.getEdgeAt(pointer);\n\n // unselect after getting the objects in order to restore width and height.\n this.unselectAll();\n\n if (obj !== undefined) {\n selected = this.selectObject(obj);\n }\n this.body.emitter.emit(\"_requestRedraw\");\n }\n return selected;\n }\n\n /**\n *\n * @param {{x: number, y: number}} pointer\n * @returns {boolean}\n */\n selectAdditionalOnPoint(pointer) {\n let selectionChanged = false;\n if (this.options.selectable === true) {\n const obj = this.getNodeAt(pointer) || this.getEdgeAt(pointer);\n\n if (obj !== undefined) {\n selectionChanged = true;\n if (obj.isSelected() === true) {\n this.deselectObject(obj);\n } else {\n this.selectObject(obj);\n }\n\n this.body.emitter.emit(\"_requestRedraw\");\n }\n }\n return selectionChanged;\n }\n\n /**\n * Create an object containing the standard fields for an event.\n *\n * @param {Event} event\n * @param {{x: number, y: number}} pointer Object with the x and y screen coordinates of the mouse\n * @returns {{}}\n * @private\n */\n _initBaseEvent(event, pointer) {\n const properties = {};\n\n properties[\"pointer\"] = {\n DOM: { x: pointer.x, y: pointer.y },\n canvas: this.canvas.DOMtoCanvas(pointer),\n };\n properties[\"event\"] = event;\n\n return properties;\n }\n\n /**\n * Generate an event which the user can catch.\n *\n * This adds some extra data to the event with respect to cursor position and\n * selected nodes and edges.\n *\n * @param {string} eventType Name of event to send\n * @param {Event} event\n * @param {{x: number, y: number}} pointer Object with the x and y screen coordinates of the mouse\n * @param {object | undefined} oldSelection If present, selection state before event occured\n * @param {boolean|undefined} [emptySelection=false] Indicate if selection data should be passed\n */\n generateClickEvent(\n eventType,\n event,\n pointer,\n oldSelection,\n emptySelection = false\n ) {\n const properties = this._initBaseEvent(event, pointer);\n\n if (emptySelection === true) {\n properties.nodes = [];\n properties.edges = [];\n } else {\n const tmp = this.getSelection();\n properties.nodes = tmp.nodes;\n properties.edges = tmp.edges;\n }\n\n if (oldSelection !== undefined) {\n properties[\"previousSelection\"] = oldSelection;\n }\n\n if (eventType == \"click\") {\n // For the time being, restrict this functionality to\n // just the click event.\n properties.items = this.getClickedItems(pointer);\n }\n\n if (event.controlEdge !== undefined) {\n properties.controlEdge = event.controlEdge;\n }\n\n this.body.emitter.emit(eventType, properties);\n }\n\n /**\n *\n * @param {object} obj\n * @param {boolean} [highlightEdges=this.options.selectConnectedEdges]\n * @returns {boolean}\n */\n selectObject(obj, highlightEdges = this.options.selectConnectedEdges) {\n if (obj !== undefined) {\n if (obj instanceof Node) {\n if (highlightEdges === true) {\n this._selectionAccumulator.addEdges(...obj.edges);\n }\n this._selectionAccumulator.addNodes(obj);\n } else {\n this._selectionAccumulator.addEdges(obj);\n }\n return true;\n }\n return false;\n }\n\n /**\n *\n * @param {object} obj\n */\n deselectObject(obj) {\n if (obj.isSelected() === true) {\n obj.selected = false;\n this._removeFromSelection(obj);\n }\n }\n\n /**\n * retrieve all nodes overlapping with given object\n *\n * @param {object} object An object with parameters left, top, right, bottom\n * @returns {number[]} An array with id's of the overlapping nodes\n * @private\n */\n _getAllNodesOverlappingWith(object) {\n const overlappingNodes = [];\n const nodes = this.body.nodes;\n for (let i = 0; i < this.body.nodeIndices.length; i++) {\n const nodeId = this.body.nodeIndices[i];\n if (nodes[nodeId].isOverlappingWith(object)) {\n overlappingNodes.push(nodeId);\n }\n }\n return overlappingNodes;\n }\n\n /**\n * Return a position object in canvasspace from a single point in screenspace\n *\n * @param {{x: number, y: number}} pointer\n * @returns {{left: number, top: number, right: number, bottom: number}}\n * @private\n */\n _pointerToPositionObject(pointer) {\n const canvasPos = this.canvas.DOMtoCanvas(pointer);\n return {\n left: canvasPos.x - 1,\n top: canvasPos.y + 1,\n right: canvasPos.x + 1,\n bottom: canvasPos.y - 1,\n };\n }\n\n /**\n * Get the top node at the passed point (like a click)\n *\n * @param {{x: number, y: number}} pointer\n * @param {boolean} [returnNode=true]\n * @returns {Node | undefined} node\n */\n getNodeAt(pointer, returnNode = true) {\n // we first check if this is an navigation controls element\n const positionObject = this._pointerToPositionObject(pointer);\n const overlappingNodes = this._getAllNodesOverlappingWith(positionObject);\n // if there are overlapping nodes, select the last one, this is the\n // one which is drawn on top of the others\n if (overlappingNodes.length > 0) {\n if (returnNode === true) {\n return this.body.nodes[overlappingNodes[overlappingNodes.length - 1]];\n } else {\n return overlappingNodes[overlappingNodes.length - 1];\n }\n } else {\n return undefined;\n }\n }\n\n /**\n * retrieve all edges overlapping with given object, selector is around center\n *\n * @param {object} object An object with parameters left, top, right, bottom\n * @param {number[]} overlappingEdges An array with id's of the overlapping nodes\n * @private\n */\n _getEdgesOverlappingWith(object, overlappingEdges) {\n const edges = this.body.edges;\n for (let i = 0; i < this.body.edgeIndices.length; i++) {\n const edgeId = this.body.edgeIndices[i];\n if (edges[edgeId].isOverlappingWith(object)) {\n overlappingEdges.push(edgeId);\n }\n }\n }\n\n /**\n * retrieve all nodes overlapping with given object\n *\n * @param {object} object An object with parameters left, top, right, bottom\n * @returns {number[]} An array with id's of the overlapping nodes\n * @private\n */\n _getAllEdgesOverlappingWith(object) {\n const overlappingEdges = [];\n this._getEdgesOverlappingWith(object, overlappingEdges);\n return overlappingEdges;\n }\n\n /**\n * Get the edges nearest to the passed point (like a click)\n *\n * @param {{x: number, y: number}} pointer\n * @param {boolean} [returnEdge=true]\n * @returns {Edge | undefined} node\n */\n getEdgeAt(pointer, returnEdge = true) {\n // Iterate over edges, pick closest within 10\n const canvasPos = this.canvas.DOMtoCanvas(pointer);\n let mindist = 10;\n let overlappingEdge = null;\n const edges = this.body.edges;\n for (let i = 0; i < this.body.edgeIndices.length; i++) {\n const edgeId = this.body.edgeIndices[i];\n const edge = edges[edgeId];\n if (edge.connected) {\n const xFrom = edge.from.x;\n const yFrom = edge.from.y;\n const xTo = edge.to.x;\n const yTo = edge.to.y;\n const dist = edge.edgeType.getDistanceToEdge(\n xFrom,\n yFrom,\n xTo,\n yTo,\n canvasPos.x,\n canvasPos.y\n );\n if (dist < mindist) {\n overlappingEdge = edgeId;\n mindist = dist;\n }\n }\n }\n if (overlappingEdge !== null) {\n if (returnEdge === true) {\n return this.body.edges[overlappingEdge];\n } else {\n return overlappingEdge;\n }\n } else {\n return undefined;\n }\n }\n\n /**\n * Add object to the selection array.\n *\n * @param {object} obj\n * @private\n */\n _addToHover(obj) {\n if (obj instanceof Node) {\n this.hoverObj.nodes[obj.id] = obj;\n } else {\n this.hoverObj.edges[obj.id] = obj;\n }\n }\n\n /**\n * Remove a single option from selection.\n *\n * @param {object} obj\n * @private\n */\n _removeFromSelection(obj) {\n if (obj instanceof Node) {\n this._selectionAccumulator.deleteNodes(obj);\n this._selectionAccumulator.deleteEdges(...obj.edges);\n } else {\n this._selectionAccumulator.deleteEdges(obj);\n }\n }\n\n /**\n * Unselect all nodes and edges.\n */\n unselectAll() {\n this._selectionAccumulator.clear();\n }\n\n /**\n * return the number of selected nodes\n *\n * @returns {number}\n */\n getSelectedNodeCount() {\n return this._selectionAccumulator.sizeNodes;\n }\n\n /**\n * return the number of selected edges\n *\n * @returns {number}\n */\n getSelectedEdgeCount() {\n return this._selectionAccumulator.sizeEdges;\n }\n\n /**\n * select the edges connected to the node that is being selected\n *\n * @param {Node} node\n * @private\n */\n _hoverConnectedEdges(node) {\n for (let i = 0; i < node.edges.length; i++) {\n const edge = node.edges[i];\n edge.hover = true;\n this._addToHover(edge);\n }\n }\n\n /**\n * Remove the highlight from a node or edge, in response to mouse movement\n *\n * @param {Event} event\n * @param {{x: number, y: number}} pointer object with the x and y screen coordinates of the mouse\n * @param {Node|vis.Edge} object\n * @private\n */\n emitBlurEvent(event, pointer, object) {\n const properties = this._initBaseEvent(event, pointer);\n\n if (object.hover === true) {\n object.hover = false;\n if (object instanceof Node) {\n properties.node = object.id;\n this.body.emitter.emit(\"blurNode\", properties);\n } else {\n properties.edge = object.id;\n this.body.emitter.emit(\"blurEdge\", properties);\n }\n }\n }\n\n /**\n * Create the highlight for a node or edge, in response to mouse movement\n *\n * @param {Event} event\n * @param {{x: number, y: number}} pointer object with the x and y screen coordinates of the mouse\n * @param {Node|vis.Edge} object\n * @returns {boolean} hoverChanged\n * @private\n */\n emitHoverEvent(event, pointer, object) {\n const properties = this._initBaseEvent(event, pointer);\n let hoverChanged = false;\n\n if (object.hover === false) {\n object.hover = true;\n this._addToHover(object);\n hoverChanged = true;\n if (object instanceof Node) {\n properties.node = object.id;\n this.body.emitter.emit(\"hoverNode\", properties);\n } else {\n properties.edge = object.id;\n this.body.emitter.emit(\"hoverEdge\", properties);\n }\n }\n\n return hoverChanged;\n }\n\n /**\n * Perform actions in response to a mouse movement.\n *\n * @param {Event} event\n * @param {{x: number, y: number}} pointer | object with the x and y screen coordinates of the mouse\n */\n hoverObject(event, pointer) {\n let object = this.getNodeAt(pointer);\n if (object === undefined) {\n object = this.getEdgeAt(pointer);\n }\n\n let hoverChanged = false;\n // remove all node hover highlights\n for (const nodeId in this.hoverObj.nodes) {\n if (Object.prototype.hasOwnProperty.call(this.hoverObj.nodes, nodeId)) {\n if (\n object === undefined ||\n (object instanceof Node && object.id != nodeId) ||\n object instanceof Edge\n ) {\n this.emitBlurEvent(event, pointer, this.hoverObj.nodes[nodeId]);\n delete this.hoverObj.nodes[nodeId];\n hoverChanged = true;\n }\n }\n }\n\n // removing all edge hover highlights\n for (const edgeId in this.hoverObj.edges) {\n if (Object.prototype.hasOwnProperty.call(this.hoverObj.edges, edgeId)) {\n // if the hover has been changed here it means that the node has been hovered over or off\n // we then do not use the emitBlurEvent method here.\n if (hoverChanged === true) {\n this.hoverObj.edges[edgeId].hover = false;\n delete this.hoverObj.edges[edgeId];\n }\n // if the blur remains the same and the object is undefined (mouse off) or another\n // edge has been hovered, or another node has been hovered we blur the edge.\n else if (\n object === undefined ||\n (object instanceof Edge && object.id != edgeId) ||\n (object instanceof Node && !object.hover)\n ) {\n this.emitBlurEvent(event, pointer, this.hoverObj.edges[edgeId]);\n delete this.hoverObj.edges[edgeId];\n hoverChanged = true;\n }\n }\n }\n\n if (object !== undefined) {\n const hoveredEdgesCount = Object.keys(this.hoverObj.edges).length;\n const hoveredNodesCount = Object.keys(this.hoverObj.nodes).length;\n const newOnlyHoveredEdge =\n object instanceof Edge &&\n hoveredEdgesCount === 0 &&\n hoveredNodesCount === 0;\n const newOnlyHoveredNode =\n object instanceof Node &&\n hoveredEdgesCount === 0 &&\n hoveredNodesCount === 0;\n\n if (hoverChanged || newOnlyHoveredEdge || newOnlyHoveredNode) {\n hoverChanged = this.emitHoverEvent(event, pointer, object);\n }\n\n if (object instanceof Node && this.options.hoverConnectedEdges === true) {\n this._hoverConnectedEdges(object);\n }\n }\n\n if (hoverChanged === true) {\n this.body.emitter.emit(\"_requestRedraw\");\n }\n }\n\n /**\n * Commit the selection changes but don't emit any events.\n */\n commitWithoutEmitting() {\n this._selectionAccumulator.commit();\n }\n\n /**\n * Select and deselect nodes depending current selection change.\n *\n * For changing nodes, select/deselect events are fired.\n *\n * NOTE: For a given edge, if one connecting node is deselected and with the\n * same click the other node is selected, no events for the edge will fire. It\n * was selected and it will remain selected.\n *\n * @param {{x: number, y: number}} pointer - The x and y coordinates of the\n * click, tap, dragend… that triggered this.\n * @param {UIEvent} event - The event that triggered this.\n */\n commitAndEmit(pointer, event) {\n let selected = false;\n\n const selectionChanges = this._selectionAccumulator.commit();\n const previousSelection = {\n nodes: selectionChanges.nodes.previous,\n edges: selectionChanges.edges.previous,\n };\n\n if (selectionChanges.edges.deleted.length > 0) {\n this.generateClickEvent(\n \"deselectEdge\",\n event,\n pointer,\n previousSelection\n );\n selected = true;\n }\n\n if (selectionChanges.nodes.deleted.length > 0) {\n this.generateClickEvent(\n \"deselectNode\",\n event,\n pointer,\n previousSelection\n );\n selected = true;\n }\n\n if (selectionChanges.nodes.added.length > 0) {\n this.generateClickEvent(\"selectNode\", event, pointer);\n selected = true;\n }\n\n if (selectionChanges.edges.added.length > 0) {\n this.generateClickEvent(\"selectEdge\", event, pointer);\n selected = true;\n }\n\n // fire the select event if anything has been selected or deselected\n if (selected === true) {\n // select or unselect\n this.generateClickEvent(\"select\", event, pointer);\n }\n }\n\n /**\n * Retrieve the currently selected node and edge ids.\n *\n * @returns {{nodes: Array., edges: Array.}} Arrays with the\n * ids of the selected nodes and edges.\n */\n getSelection() {\n return {\n nodes: this.getSelectedNodeIds(),\n edges: this.getSelectedEdgeIds(),\n };\n }\n\n /**\n * Retrieve the currently selected nodes.\n *\n * @returns {Array} An array with selected nodes.\n */\n getSelectedNodes() {\n return this._selectionAccumulator.getNodes();\n }\n\n /**\n * Retrieve the currently selected edges.\n *\n * @returns {Array} An array with selected edges.\n */\n getSelectedEdges() {\n return this._selectionAccumulator.getEdges();\n }\n\n /**\n * Retrieve the currently selected node ids.\n *\n * @returns {Array} An array with the ids of the selected nodes.\n */\n getSelectedNodeIds() {\n return this._selectionAccumulator.getNodes().map((node) => node.id);\n }\n\n /**\n * Retrieve the currently selected edge ids.\n *\n * @returns {Array} An array with the ids of the selected edges.\n */\n getSelectedEdgeIds() {\n return this._selectionAccumulator.getEdges().map((edge) => edge.id);\n }\n\n /**\n * Updates the current selection\n *\n * @param {{nodes: Array., edges: Array.}} selection\n * @param {object} options Options\n */\n setSelection(selection, options = {}) {\n if (!selection || (!selection.nodes && !selection.edges)) {\n throw new TypeError(\n \"Selection must be an object with nodes and/or edges properties\"\n );\n }\n\n // first unselect any selected node, if option is true or undefined\n if (options.unselectAll || options.unselectAll === undefined) {\n this.unselectAll();\n }\n if (selection.nodes) {\n for (const id of selection.nodes) {\n const node = this.body.nodes[id];\n if (!node) {\n throw new RangeError('Node with id \"' + id + '\" not found');\n }\n // don't select edges with it\n this.selectObject(node, options.highlightEdges);\n }\n }\n\n if (selection.edges) {\n for (const id of selection.edges) {\n const edge = this.body.edges[id];\n if (!edge) {\n throw new RangeError('Edge with id \"' + id + '\" not found');\n }\n this.selectObject(edge);\n }\n }\n this.body.emitter.emit(\"_requestRedraw\");\n this._selectionAccumulator.commit();\n }\n\n /**\n * select zero or more nodes with the option to highlight edges\n *\n * @param {number[] | string[]} selection An array with the ids of the\n * selected nodes.\n * @param {boolean} [highlightEdges]\n */\n selectNodes(selection, highlightEdges = true) {\n if (!selection || selection.length === undefined)\n throw \"Selection must be an array with ids\";\n\n this.setSelection({ nodes: selection }, { highlightEdges: highlightEdges });\n }\n\n /**\n * select zero or more edges\n *\n * @param {number[] | string[]} selection An array with the ids of the\n * selected nodes.\n */\n selectEdges(selection) {\n if (!selection || selection.length === undefined)\n throw \"Selection must be an array with ids\";\n\n this.setSelection({ edges: selection });\n }\n\n /**\n * Validate the selection: remove ids of nodes which no longer exist\n *\n * @private\n */\n updateSelection() {\n for (const node in this._selectionAccumulator.getNodes()) {\n if (!Object.prototype.hasOwnProperty.call(this.body.nodes, node.id)) {\n this._selectionAccumulator.deleteNodes(node);\n }\n }\n for (const edge in this._selectionAccumulator.getEdges()) {\n if (!Object.prototype.hasOwnProperty.call(this.body.edges, edge.id)) {\n this._selectionAccumulator.deleteEdges(edge);\n }\n }\n }\n\n /**\n * Determine all the visual elements clicked which are on the given point.\n *\n * All elements are returned; this includes nodes, edges and their labels.\n * The order returned is from highest to lowest, i.e. element 0 of the return\n * value is the topmost item clicked on.\n *\n * The return value consists of an array of the following possible elements:\n *\n * - `{nodeId:number}` - node with given id clicked on\n * - `{nodeId:number, labelId:0}` - label of node with given id clicked on\n * - `{edgeId:number}` - edge with given id clicked on\n * - `{edge:number, labelId:0}` - label of edge with given id clicked on\n *\n * ## NOTES\n *\n * - Currently, there is only one label associated with a node or an edge,\n * but this is expected to change somewhere in the future.\n * - Since there is no z-indexing yet, it is not really possible to set the nodes and\n * edges in the correct order. For the time being, nodes come first.\n *\n * @param {point} pointer mouse position in screen coordinates\n * @returns {Array.}\n * @private\n */\n getClickedItems(pointer) {\n const point = this.canvas.DOMtoCanvas(pointer);\n const items = [];\n\n // Note reverse order; we want the topmost clicked items to be first in the array\n // Also note that selected nodes are disregarded here; these normally display on top\n const nodeIndices = this.body.nodeIndices;\n const nodes = this.body.nodes;\n for (let i = nodeIndices.length - 1; i >= 0; i--) {\n const node = nodes[nodeIndices[i]];\n const ret = node.getItemsOnPoint(point);\n items.push.apply(items, ret); // Append the return value to the running list.\n }\n\n const edgeIndices = this.body.edgeIndices;\n const edges = this.body.edges;\n for (let i = edgeIndices.length - 1; i >= 0; i--) {\n const edge = edges[edgeIndices[i]];\n const ret = edge.getItemsOnPoint(point);\n items.push.apply(items, ret); // Append the return value to the running list.\n }\n\n return items;\n }\n}\n\nexport default SelectionHandler;\n","/**\n * Helper classes for LayoutEngine.\n *\n * Strategy pattern for usage of direction methods for hierarchical layouts.\n */\n\n/**\n * Interface definition for direction strategy classes.\n *\n * This class describes the interface for the Strategy\n * pattern classes used to differentiate horizontal and vertical\n * direction of hierarchical results.\n *\n * For a given direction, one coordinate will be 'fixed', meaning that it is\n * determined by level.\n * The other coordinate is 'unfixed', meaning that the nodes on a given level\n * can still move along that coordinate. So:\n *\n * - `vertical` layout: `x` unfixed, `y` fixed per level\n * - `horizontal` layout: `x` fixed per level, `y` unfixed\n *\n * The local methods are stubs and should be regarded as abstract.\n * Derived classes **must** implement all the methods themselves.\n *\n * @private\n */\nclass DirectionInterface {\n /**\n * @ignore\n */\n abstract() {\n throw new Error(\"Can't instantiate abstract class!\");\n }\n\n /**\n * This is a dummy call which is used to suppress the jsdoc errors of type:\n *\n * \"'param' is assigned a value but never used\"\n *\n * @ignore\n */\n fake_use() {\n // Do nothing special\n }\n\n /**\n * Type to use to translate dynamic curves to, in the case of hierarchical layout.\n * Dynamic curves do not work for these.\n *\n * The value should be perpendicular to the actual direction of the layout.\n *\n * @returns {string} Direction, either 'vertical' or 'horizontal'\n */\n curveType() {\n return this.abstract();\n }\n\n /**\n * Return the value of the coordinate that is not fixed for this direction.\n *\n * @param {Node} node The node to read\n * @returns {number} Value of the unfixed coordinate\n */\n getPosition(node) {\n this.fake_use(node);\n return this.abstract();\n }\n\n /**\n * Set the value of the coordinate that is not fixed for this direction.\n *\n * @param {Node} node The node to adjust\n * @param {number} position\n * @param {number} [level] if specified, the hierarchy level that this node should be fixed to\n */\n setPosition(node, position, level = undefined) {\n this.fake_use(node, position, level);\n this.abstract();\n }\n\n /**\n * Get the width of a tree.\n *\n * A `tree` here is a subset of nodes within the network which are not connected to other nodes,\n * only among themselves. In essence, it is a sub-network.\n *\n * @param {number} index The index number of a tree\n * @returns {number} the width of a tree in the view coordinates\n */\n getTreeSize(index) {\n this.fake_use(index);\n return this.abstract();\n }\n\n /**\n * Sort array of nodes on the unfixed coordinates.\n *\n * Note:** chrome has non-stable sorting implementation, which\n * has a tendency to change the order of the array items,\n * even if the custom sort function returns 0.\n *\n * For this reason, an external sort implementation is used,\n * which has the added benefit of being faster than the standard\n * platforms implementation. This has been verified on `node.js`,\n * `firefox` and `chrome` (all linux).\n *\n * @param {Array.} nodeArray array of nodes to sort\n */\n sort(nodeArray) {\n this.fake_use(nodeArray);\n this.abstract();\n }\n\n /**\n * Assign the fixed coordinate of the node to the given level\n *\n * @param {Node} node The node to adjust\n * @param {number} level The level to fix to\n */\n fix(node, level) {\n this.fake_use(node, level);\n this.abstract();\n }\n\n /**\n * Add an offset to the unfixed coordinate of the given node.\n *\n * @param {NodeId} nodeId Id of the node to adjust\n * @param {number} diff Offset to add to the unfixed coordinate\n */\n shift(nodeId, diff) {\n this.fake_use(nodeId, diff);\n this.abstract();\n }\n}\n\n/**\n * Vertical Strategy\n *\n * Coordinate `y` is fixed on levels, coordinate `x` is unfixed.\n *\n * @augments DirectionInterface\n * @private\n */\nclass VerticalStrategy extends DirectionInterface {\n /**\n * Constructor\n *\n * @param {object} layout reference to the parent LayoutEngine instance.\n */\n constructor(layout) {\n super();\n this.layout = layout;\n }\n\n /** @inheritDoc */\n curveType() {\n return \"horizontal\";\n }\n\n /** @inheritDoc */\n getPosition(node) {\n return node.x;\n }\n\n /** @inheritDoc */\n setPosition(node, position, level = undefined) {\n if (level !== undefined) {\n this.layout.hierarchical.addToOrdering(node, level);\n }\n node.x = position;\n }\n\n /** @inheritDoc */\n getTreeSize(index) {\n const res = this.layout.hierarchical.getTreeSize(\n this.layout.body.nodes,\n index\n );\n return { min: res.min_x, max: res.max_x };\n }\n\n /** @inheritDoc */\n sort(nodeArray) {\n nodeArray.sort(function (a, b) {\n return a.x - b.x;\n });\n }\n\n /** @inheritDoc */\n fix(node, level) {\n node.y = this.layout.options.hierarchical.levelSeparation * level;\n node.options.fixed.y = true;\n }\n\n /** @inheritDoc */\n shift(nodeId, diff) {\n this.layout.body.nodes[nodeId].x += diff;\n }\n}\n\n/**\n * Horizontal Strategy\n *\n * Coordinate `x` is fixed on levels, coordinate `y` is unfixed.\n *\n * @augments DirectionInterface\n * @private\n */\nclass HorizontalStrategy extends DirectionInterface {\n /**\n * Constructor\n *\n * @param {object} layout reference to the parent LayoutEngine instance.\n */\n constructor(layout) {\n super();\n this.layout = layout;\n }\n\n /** @inheritDoc */\n curveType() {\n return \"vertical\";\n }\n\n /** @inheritDoc */\n getPosition(node) {\n return node.y;\n }\n\n /** @inheritDoc */\n setPosition(node, position, level = undefined) {\n if (level !== undefined) {\n this.layout.hierarchical.addToOrdering(node, level);\n }\n node.y = position;\n }\n\n /** @inheritDoc */\n getTreeSize(index) {\n const res = this.layout.hierarchical.getTreeSize(\n this.layout.body.nodes,\n index\n );\n return { min: res.min_y, max: res.max_y };\n }\n\n /** @inheritDoc */\n sort(nodeArray) {\n nodeArray.sort(function (a, b) {\n return a.y - b.y;\n });\n }\n\n /** @inheritDoc */\n fix(node, level) {\n node.x = this.layout.options.hierarchical.levelSeparation * level;\n node.options.fixed.x = true;\n }\n\n /** @inheritDoc */\n shift(nodeId, diff) {\n this.layout.body.nodes[nodeId].y += diff;\n }\n}\n\nexport { HorizontalStrategy, VerticalStrategy };\n","'use strict';\nvar $ = require('../internals/export');\nvar $every = require('../internals/array-iteration').every;\nvar arrayMethodIsStrict = require('../internals/array-method-is-strict');\n\nvar STRICT_METHOD = arrayMethodIsStrict('every');\n\n// `Array.prototype.every` method\n// https://tc39.es/ecma262/#sec-array.prototype.every\n$({ target: 'Array', proto: true, forced: !STRICT_METHOD }, {\n every: function every(callbackfn /* , thisArg */) {\n return $every(this, callbackfn, arguments.length > 1 ? arguments[1] : undefined);\n }\n});\n","'use strict';\nrequire('../../../modules/es.array.every');\nvar entryVirtual = require('../../../internals/entry-virtual');\n\nmodule.exports = entryVirtual('Array').every;\n","'use strict';\nvar isPrototypeOf = require('../../internals/object-is-prototype-of');\nvar method = require('../array/virtual/every');\n\nvar ArrayPrototype = Array.prototype;\n\nmodule.exports = function (it) {\n var own = it.every;\n return it === ArrayPrototype || (isPrototypeOf(ArrayPrototype, it) && own === ArrayPrototype.every) ? method : own;\n};\n","'use strict';\nvar parent = require('../../es/instance/every');\n\nmodule.exports = parent;\n","type Levels = Record;\ntype Id = string | number;\ninterface Edge {\n connected: boolean;\n from: Node;\n fromId: Id;\n to: Node;\n toId: Id;\n}\ninterface Node {\n id: Id;\n edges: Edge[];\n}\n\n/**\n * Try to assign levels to nodes according to their positions in the cyclic “hierarchy”.\n *\n * @param nodes - Visible nodes of the graph.\n * @param levels - If present levels will be added to it, if not a new object will be created.\n * @returns Populated node levels.\n */\nfunction fillLevelsByDirectionCyclic(\n nodes: Map,\n levels: Levels\n): Levels {\n const edges = new Set();\n nodes.forEach((node): void => {\n node.edges.forEach((edge): void => {\n if (edge.connected) {\n edges.add(edge);\n }\n });\n });\n\n edges.forEach((edge): void => {\n const fromId = edge.from.id;\n const toId = edge.to.id;\n\n if (levels[fromId] == null) {\n levels[fromId] = 0;\n }\n\n if (levels[toId] == null || levels[fromId] >= levels[toId]) {\n levels[toId] = levels[fromId] + 1;\n }\n });\n\n return levels;\n}\n\n/**\n * Assign levels to nodes according to their positions in the hierarchy. Leaves will be lined up at the bottom and all other nodes as close to their children as possible.\n *\n * @param nodes - Visible nodes of the graph.\n * @returns Populated node levels.\n */\nexport function fillLevelsByDirectionLeaves(nodes: Map): Levels {\n return fillLevelsByDirection(\n // Pick only leaves (nodes without children).\n (node): boolean =>\n node.edges\n // Take only visible nodes into account.\n .filter((edge): boolean => nodes.has(edge.toId))\n // Check that all edges lead to this node (leaf).\n .every((edge): boolean => edge.to === node),\n // Use the lowest level.\n (newLevel, oldLevel): boolean => oldLevel > newLevel,\n // Go against the direction of the edges.\n \"from\",\n nodes\n );\n}\n\n/**\n * Assign levels to nodes according to their positions in the hierarchy. Roots will be lined up at the top and all nodes as close to their parents as possible.\n *\n * @param nodes - Visible nodes of the graph.\n * @returns Populated node levels.\n */\nexport function fillLevelsByDirectionRoots(nodes: Map): Levels {\n return fillLevelsByDirection(\n // Pick only roots (nodes without parents).\n (node): boolean =>\n node.edges\n // Take only visible nodes into account.\n .filter((edge): boolean => nodes.has(edge.toId))\n // Check that all edges lead from this node (root).\n .every((edge): boolean => edge.from === node),\n // Use the highest level.\n (newLevel, oldLevel): boolean => oldLevel < newLevel,\n // Go in the direction of the edges.\n \"to\",\n nodes\n );\n}\n\n/**\n * Assign levels to nodes according to their positions in the hierarchy.\n *\n * @param isEntryNode - Checks and return true if the graph should be traversed from this node.\n * @param shouldLevelBeReplaced - Checks and returns true if the level of given node should be updated to the new value.\n * @param direction - Wheter the graph should be traversed in the direction of the edges `\"to\"` or in the other way `\"from\"`.\n * @param nodes - Visible nodes of the graph.\n * @returns Populated node levels.\n */\nfunction fillLevelsByDirection(\n isEntryNode: (node: Node) => boolean,\n shouldLevelBeReplaced: (newLevel: number, oldLevel: number) => boolean,\n direction: \"to\" | \"from\",\n nodes: Map\n): Levels {\n const levels = Object.create(null);\n\n // If acyclic, the graph can be walked through with (most likely way) fewer\n // steps than the number bellow. The exact value isn't too important as long\n // as it's quick to compute (doesn't impact acyclic graphs too much), is\n // higher than the number of steps actually needed (doesn't cut off before\n // acyclic graph is walked through) and prevents infinite loops (cuts off for\n // cyclic graphs).\n const limit = [...nodes.values()].reduce(\n (acc, node): number => acc + 1 + node.edges.length,\n 0\n );\n\n const edgeIdProp: \"fromId\" | \"toId\" = (direction + \"Id\") as \"fromId\" | \"toId\";\n const newLevelDiff = direction === \"to\" ? 1 : -1;\n\n for (const [entryNodeId, entryNode] of nodes) {\n if (\n // Skip if the node is not visible.\n !nodes.has(entryNodeId) ||\n // Skip if the node is not an entry node.\n !isEntryNode(entryNode)\n ) {\n continue;\n }\n\n // Line up all the entry nodes on level 0.\n levels[entryNodeId] = 0;\n\n const stack: Node[] = [entryNode];\n let done = 0;\n let node: Node | undefined;\n while ((node = stack.pop())) {\n if (!nodes.has(entryNodeId)) {\n // Skip if the node is not visible.\n continue;\n }\n\n const newLevel = levels[node.id] + newLevelDiff;\n\n node.edges\n .filter(\n (edge): boolean =>\n // Ignore disconnected edges.\n edge.connected &&\n // Ignore circular edges.\n edge.to !== edge.from &&\n // Ignore edges leading to the node that's currently being processed.\n edge[direction] !== node &&\n // Ignore edges connecting to an invisible node.\n nodes.has(edge.toId) &&\n // Ignore edges connecting from an invisible node.\n nodes.has(edge.fromId)\n )\n .forEach((edge): void => {\n const targetNodeId = edge[edgeIdProp];\n const oldLevel = levels[targetNodeId];\n\n if (oldLevel == null || shouldLevelBeReplaced(newLevel, oldLevel)) {\n levels[targetNodeId] = newLevel;\n stack.push(edge[direction]);\n }\n });\n\n if (done > limit) {\n // This would run forever on a cyclic graph.\n return fillLevelsByDirectionCyclic(nodes, levels);\n } else {\n ++done;\n }\n }\n }\n\n return levels;\n}\n","/**\n * There's a mix-up with terms in the code. Following are the formal definitions:\n *\n * tree - a strict hierarchical network, i.e. every node has at most one parent\n * forest - a collection of trees. These distinct trees are thus not connected.\n *\n * So:\n * - in a network that is not a tree, there exist nodes with multiple parents.\n * - a network consisting of unconnected sub-networks, of which at least one\n * is not a tree, is not a forest.\n *\n * In the code, the definitions are:\n *\n * tree - any disconnected sub-network, strict hierarchical or not.\n * forest - a bunch of these sub-networks\n *\n * The difference between tree and not-tree is important in the code, notably within\n * to the block-shifting algorithm. The algorithm assumes formal trees and fails\n * for not-trees, often in a spectacular manner (search for 'exploding network' in the issues).\n *\n * In order to distinguish the definitions in the following code, the adjective 'formal' is\n * used. If 'formal' is absent, you must assume the non-formal definition.\n *\n * ----------------------------------------------------------------------------------\n * NOTES\n * =====\n *\n * A hierarchical layout is a different thing from a hierarchical network.\n * The layout is a way to arrange the nodes in the view; this can be done\n * on non-hierarchical networks as well. The converse is also possible.\n */\n\"use strict\";\nimport {\n Alea,\n deepExtend,\n forEach,\n mergeOptions,\n selectiveDeepExtend,\n} from \"vis-util/esnext\";\nimport NetworkUtil from \"../NetworkUtil\";\nimport {\n HorizontalStrategy,\n VerticalStrategy,\n} from \"./components/DirectionStrategy.js\";\nimport {\n fillLevelsByDirectionLeaves,\n fillLevelsByDirectionRoots,\n} from \"./layout-engine\";\n\n/**\n * Container for derived data on current network, relating to hierarchy.\n *\n * @private\n */\nclass HierarchicalStatus {\n /**\n * @ignore\n */\n constructor() {\n this.childrenReference = {}; // child id's per node id\n this.parentReference = {}; // parent id's per node id\n this.trees = {}; // tree id per node id; i.e. to which tree does given node id belong\n\n this.distributionOrdering = {}; // The nodes per level, in the display order\n this.levels = {}; // hierarchy level per node id\n this.distributionIndex = {}; // The position of the node in the level sorting order, per node id.\n\n this.isTree = false; // True if current network is a formal tree\n this.treeIndex = -1; // Highest tree id in current network.\n }\n\n /**\n * Add the relation between given nodes to the current state.\n *\n * @param {Node.id} parentNodeId\n * @param {Node.id} childNodeId\n */\n addRelation(parentNodeId, childNodeId) {\n if (this.childrenReference[parentNodeId] === undefined) {\n this.childrenReference[parentNodeId] = [];\n }\n this.childrenReference[parentNodeId].push(childNodeId);\n\n if (this.parentReference[childNodeId] === undefined) {\n this.parentReference[childNodeId] = [];\n }\n this.parentReference[childNodeId].push(parentNodeId);\n }\n\n /**\n * Check if the current state is for a formal tree or formal forest.\n *\n * This is the case if every node has at most one parent.\n *\n * Pre: parentReference init'ed properly for current network\n */\n checkIfTree() {\n for (const i in this.parentReference) {\n if (this.parentReference[i].length > 1) {\n this.isTree = false;\n return;\n }\n }\n\n this.isTree = true;\n }\n\n /**\n * Return the number of separate trees in the current network.\n *\n * @returns {number}\n */\n numTrees() {\n return this.treeIndex + 1; // This assumes the indexes are assigned consecitively\n }\n\n /**\n * Assign a tree id to a node\n *\n * @param {Node} node\n * @param {string|number} treeId\n */\n setTreeIndex(node, treeId) {\n if (treeId === undefined) return; // Don't bother\n\n if (this.trees[node.id] === undefined) {\n this.trees[node.id] = treeId;\n this.treeIndex = Math.max(treeId, this.treeIndex);\n }\n }\n\n /**\n * Ensure level for given id is defined.\n *\n * Sets level to zero for given node id if not already present\n *\n * @param {Node.id} nodeId\n */\n ensureLevel(nodeId) {\n if (this.levels[nodeId] === undefined) {\n this.levels[nodeId] = 0;\n }\n }\n\n /**\n * get the maximum level of a branch.\n *\n * TODO: Never entered; find a test case to test this!\n *\n * @param {Node.id} nodeId\n * @returns {number}\n */\n getMaxLevel(nodeId) {\n const accumulator = {};\n\n const _getMaxLevel = (nodeId) => {\n if (accumulator[nodeId] !== undefined) {\n return accumulator[nodeId];\n }\n let level = this.levels[nodeId];\n if (this.childrenReference[nodeId]) {\n const children = this.childrenReference[nodeId];\n if (children.length > 0) {\n for (let i = 0; i < children.length; i++) {\n level = Math.max(level, _getMaxLevel(children[i]));\n }\n }\n }\n accumulator[nodeId] = level;\n return level;\n };\n\n return _getMaxLevel(nodeId);\n }\n\n /**\n *\n * @param {Node} nodeA\n * @param {Node} nodeB\n */\n levelDownstream(nodeA, nodeB) {\n if (this.levels[nodeB.id] === undefined) {\n // set initial level\n if (this.levels[nodeA.id] === undefined) {\n this.levels[nodeA.id] = 0;\n }\n // set level\n this.levels[nodeB.id] = this.levels[nodeA.id] + 1;\n }\n }\n\n /**\n * Small util method to set the minimum levels of the nodes to zero.\n *\n * @param {Array.} nodes\n */\n setMinLevelToZero(nodes) {\n let minLevel = 1e9;\n // get the minimum level\n for (const nodeId in nodes) {\n if (Object.prototype.hasOwnProperty.call(nodes, nodeId)) {\n if (this.levels[nodeId] !== undefined) {\n minLevel = Math.min(this.levels[nodeId], minLevel);\n }\n }\n }\n\n // subtract the minimum from the set so we have a range starting from 0\n for (const nodeId in nodes) {\n if (Object.prototype.hasOwnProperty.call(nodes, nodeId)) {\n if (this.levels[nodeId] !== undefined) {\n this.levels[nodeId] -= minLevel;\n }\n }\n }\n }\n\n /**\n * Get the min and max xy-coordinates of a given tree\n *\n * @param {Array.} nodes\n * @param {number} index\n * @returns {{min_x: number, max_x: number, min_y: number, max_y: number}}\n */\n getTreeSize(nodes, index) {\n let min_x = 1e9;\n let max_x = -1e9;\n let min_y = 1e9;\n let max_y = -1e9;\n\n for (const nodeId in this.trees) {\n if (Object.prototype.hasOwnProperty.call(this.trees, nodeId)) {\n if (this.trees[nodeId] === index) {\n const node = nodes[nodeId];\n min_x = Math.min(node.x, min_x);\n max_x = Math.max(node.x, max_x);\n min_y = Math.min(node.y, min_y);\n max_y = Math.max(node.y, max_y);\n }\n }\n }\n\n return {\n min_x: min_x,\n max_x: max_x,\n min_y: min_y,\n max_y: max_y,\n };\n }\n\n /**\n * Check if two nodes have the same parent(s)\n *\n * @param {Node} node1\n * @param {Node} node2\n * @returns {boolean} true if the two nodes have a same ancestor node, false otherwise\n */\n hasSameParent(node1, node2) {\n const parents1 = this.parentReference[node1.id];\n const parents2 = this.parentReference[node2.id];\n if (parents1 === undefined || parents2 === undefined) {\n return false;\n }\n\n for (let i = 0; i < parents1.length; i++) {\n for (let j = 0; j < parents2.length; j++) {\n if (parents1[i] == parents2[j]) {\n return true;\n }\n }\n }\n return false;\n }\n\n /**\n * Check if two nodes are in the same tree.\n *\n * @param {Node} node1\n * @param {Node} node2\n * @returns {boolean} true if this is so, false otherwise\n */\n inSameSubNetwork(node1, node2) {\n return this.trees[node1.id] === this.trees[node2.id];\n }\n\n /**\n * Get a list of the distinct levels in the current network\n *\n * @returns {Array}\n */\n getLevels() {\n return Object.keys(this.distributionOrdering);\n }\n\n /**\n * Add a node to the ordering per level\n *\n * @param {Node} node\n * @param {number} level\n */\n addToOrdering(node, level) {\n if (this.distributionOrdering[level] === undefined) {\n this.distributionOrdering[level] = [];\n }\n\n let isPresent = false;\n const curLevel = this.distributionOrdering[level];\n for (const n in curLevel) {\n //if (curLevel[n].id === node.id) {\n if (curLevel[n] === node) {\n isPresent = true;\n break;\n }\n }\n\n if (!isPresent) {\n this.distributionOrdering[level].push(node);\n this.distributionIndex[node.id] =\n this.distributionOrdering[level].length - 1;\n }\n }\n}\n\n/**\n * The Layout Engine\n */\nclass LayoutEngine {\n /**\n * @param {object} body\n */\n constructor(body) {\n this.body = body;\n\n // Make sure there always is some RNG because the setOptions method won't\n // set it unless there's a seed for it.\n this._resetRNG(Math.random() + \":\" + Date.now());\n\n this.setPhysics = false;\n this.options = {};\n this.optionsBackup = { physics: {} };\n\n this.defaultOptions = {\n randomSeed: undefined,\n improvedLayout: true,\n clusterThreshold: 150,\n hierarchical: {\n enabled: false,\n levelSeparation: 150,\n nodeSpacing: 100,\n treeSpacing: 200,\n blockShifting: true,\n edgeMinimization: true,\n parentCentralization: true,\n direction: \"UD\", // UD, DU, LR, RL\n sortMethod: \"hubsize\", // hubsize, directed\n },\n };\n Object.assign(this.options, this.defaultOptions);\n this.bindEventListeners();\n }\n\n /**\n * Binds event listeners\n */\n bindEventListeners() {\n this.body.emitter.on(\"_dataChanged\", () => {\n this.setupHierarchicalLayout();\n });\n this.body.emitter.on(\"_dataLoaded\", () => {\n this.layoutNetwork();\n });\n this.body.emitter.on(\"_resetHierarchicalLayout\", () => {\n this.setupHierarchicalLayout();\n });\n this.body.emitter.on(\"_adjustEdgesForHierarchicalLayout\", () => {\n if (this.options.hierarchical.enabled !== true) {\n return;\n }\n // get the type of static smooth curve in case it is required\n const type = this.direction.curveType();\n\n // force all edges into static smooth curves.\n this.body.emitter.emit(\"_forceDisableDynamicCurves\", type, false);\n });\n }\n\n /**\n *\n * @param {object} options\n * @param {object} allOptions\n * @returns {object}\n */\n setOptions(options, allOptions) {\n if (options !== undefined) {\n const hierarchical = this.options.hierarchical;\n const prevHierarchicalState = hierarchical.enabled;\n selectiveDeepExtend(\n [\"randomSeed\", \"improvedLayout\", \"clusterThreshold\"],\n this.options,\n options\n );\n mergeOptions(this.options, options, \"hierarchical\");\n\n if (options.randomSeed !== undefined) {\n this._resetRNG(options.randomSeed);\n }\n\n if (hierarchical.enabled === true) {\n if (prevHierarchicalState === true) {\n // refresh the overridden options for nodes and edges.\n this.body.emitter.emit(\"refresh\", true);\n }\n\n // make sure the level separation is the right way up\n if (\n hierarchical.direction === \"RL\" ||\n hierarchical.direction === \"DU\"\n ) {\n if (hierarchical.levelSeparation > 0) {\n hierarchical.levelSeparation *= -1;\n }\n } else {\n if (hierarchical.levelSeparation < 0) {\n hierarchical.levelSeparation *= -1;\n }\n }\n\n this.setDirectionStrategy();\n\n this.body.emitter.emit(\"_resetHierarchicalLayout\");\n // because the hierarchical system needs it's own physics and smooth curve settings,\n // we adapt the other options if needed.\n return this.adaptAllOptionsForHierarchicalLayout(allOptions);\n } else {\n if (prevHierarchicalState === true) {\n // refresh the overridden options for nodes and edges.\n this.body.emitter.emit(\"refresh\");\n return deepExtend(allOptions, this.optionsBackup);\n }\n }\n }\n return allOptions;\n }\n\n /**\n * Reset the random number generator with given seed.\n *\n * @param {any} seed - The seed that will be forwarded the the RNG.\n */\n _resetRNG(seed) {\n this.initialRandomSeed = seed;\n this._rng = Alea(this.initialRandomSeed);\n }\n\n /**\n *\n * @param {object} allOptions\n * @returns {object}\n */\n adaptAllOptionsForHierarchicalLayout(allOptions) {\n if (this.options.hierarchical.enabled === true) {\n const backupPhysics = this.optionsBackup.physics;\n\n // set the physics\n if (allOptions.physics === undefined || allOptions.physics === true) {\n allOptions.physics = {\n enabled:\n backupPhysics.enabled === undefined ? true : backupPhysics.enabled,\n solver: \"hierarchicalRepulsion\",\n };\n backupPhysics.enabled =\n backupPhysics.enabled === undefined ? true : backupPhysics.enabled;\n backupPhysics.solver = backupPhysics.solver || \"barnesHut\";\n } else if (typeof allOptions.physics === \"object\") {\n backupPhysics.enabled =\n allOptions.physics.enabled === undefined\n ? true\n : allOptions.physics.enabled;\n backupPhysics.solver = allOptions.physics.solver || \"barnesHut\";\n allOptions.physics.solver = \"hierarchicalRepulsion\";\n } else if (allOptions.physics !== false) {\n backupPhysics.solver = \"barnesHut\";\n allOptions.physics = { solver: \"hierarchicalRepulsion\" };\n }\n\n // get the type of static smooth curve in case it is required\n let type = this.direction.curveType();\n\n // disable smooth curves if nothing is defined. If smooth curves have been turned on,\n // turn them into static smooth curves.\n if (allOptions.edges === undefined) {\n this.optionsBackup.edges = {\n smooth: { enabled: true, type: \"dynamic\" },\n };\n allOptions.edges = { smooth: false };\n } else if (allOptions.edges.smooth === undefined) {\n this.optionsBackup.edges = {\n smooth: { enabled: true, type: \"dynamic\" },\n };\n allOptions.edges.smooth = false;\n } else {\n if (typeof allOptions.edges.smooth === \"boolean\") {\n this.optionsBackup.edges = { smooth: allOptions.edges.smooth };\n allOptions.edges.smooth = {\n enabled: allOptions.edges.smooth,\n type: type,\n };\n } else {\n const smooth = allOptions.edges.smooth;\n\n // allow custom types except for dynamic\n if (smooth.type !== undefined && smooth.type !== \"dynamic\") {\n type = smooth.type;\n }\n\n // TODO: this is options merging; see if the standard routines can be used here.\n this.optionsBackup.edges = {\n smooth: {\n enabled: smooth.enabled === undefined ? true : smooth.enabled,\n type: smooth.type === undefined ? \"dynamic\" : smooth.type,\n roundness:\n smooth.roundness === undefined ? 0.5 : smooth.roundness,\n forceDirection:\n smooth.forceDirection === undefined\n ? false\n : smooth.forceDirection,\n },\n };\n\n // NOTE: Copying an object to self; this is basically setting defaults for undefined variables\n allOptions.edges.smooth = {\n enabled: smooth.enabled === undefined ? true : smooth.enabled,\n type: type,\n roundness: smooth.roundness === undefined ? 0.5 : smooth.roundness,\n forceDirection:\n smooth.forceDirection === undefined\n ? false\n : smooth.forceDirection,\n };\n }\n }\n\n // Force all edges into static smooth curves.\n // Only applies to edges that do not use the global options for smooth.\n this.body.emitter.emit(\"_forceDisableDynamicCurves\", type);\n }\n\n return allOptions;\n }\n\n /**\n *\n * @param {Array.} nodesArray\n */\n positionInitially(nodesArray) {\n if (this.options.hierarchical.enabled !== true) {\n this._resetRNG(this.initialRandomSeed);\n const radius = nodesArray.length + 50;\n for (let i = 0; i < nodesArray.length; i++) {\n const node = nodesArray[i];\n const angle = 2 * Math.PI * this._rng();\n if (node.x === undefined) {\n node.x = radius * Math.cos(angle);\n }\n if (node.y === undefined) {\n node.y = radius * Math.sin(angle);\n }\n }\n }\n }\n\n /**\n * Use Kamada Kawai to position nodes. This is quite a heavy algorithm so if there are a lot of nodes we\n * cluster them first to reduce the amount.\n */\n layoutNetwork() {\n if (\n this.options.hierarchical.enabled !== true &&\n this.options.improvedLayout === true\n ) {\n const indices = this.body.nodeIndices;\n\n // first check if we should Kamada Kawai to layout. The threshold is if less than half of the visible\n // nodes have predefined positions we use this.\n let positionDefined = 0;\n for (let i = 0; i < indices.length; i++) {\n const node = this.body.nodes[indices[i]];\n if (node.predefinedPosition === true) {\n positionDefined += 1;\n }\n }\n\n // if less than half of the nodes have a predefined position we continue\n if (positionDefined < 0.5 * indices.length) {\n const MAX_LEVELS = 10;\n let level = 0;\n const clusterThreshold = this.options.clusterThreshold;\n\n //\n // Define the options for the hidden cluster nodes\n // These options don't propagate outside the clustering phase.\n //\n // Some options are explicitly disabled, because they may be set in group or default node options.\n // The clusters are never displayed, so most explicit settings here serve as performance optimizations.\n //\n // The explicit setting of 'shape' is to avoid `shape: 'image'`; images are not passed to the hidden\n // cluster nodes, leading to an exception on creation.\n //\n // All settings here are performance related, except when noted otherwise.\n //\n const clusterOptions = {\n clusterNodeProperties: {\n shape: \"ellipse\", // Bugfix: avoid type 'image', no images supplied\n label: \"\", // avoid label handling\n group: \"\", // avoid group handling\n font: { multi: false }, // avoid font propagation\n },\n clusterEdgeProperties: {\n label: \"\", // avoid label handling\n font: { multi: false }, // avoid font propagation\n smooth: {\n enabled: false, // avoid drawing penalty for complex edges\n },\n },\n };\n\n // if there are a lot of nodes, we cluster before we run the algorithm.\n // NOTE: this part fails to find clusters for large scale-free networks, which should\n // be easily clusterable.\n // TODO: examine why this is so\n if (indices.length > clusterThreshold) {\n const startLength = indices.length;\n while (indices.length > clusterThreshold && level <= MAX_LEVELS) {\n //console.time(\"clustering\")\n level += 1;\n const before = indices.length;\n // if there are many nodes we do a hubsize cluster\n if (level % 3 === 0) {\n this.body.modules.clustering.clusterBridges(clusterOptions);\n } else {\n this.body.modules.clustering.clusterOutliers(clusterOptions);\n }\n const after = indices.length;\n if (before == after && level % 3 !== 0) {\n this._declusterAll();\n this.body.emitter.emit(\"_layoutFailed\");\n console.info(\n \"This network could not be positioned by this version of the improved layout algorithm.\" +\n \" Please disable improvedLayout for better performance.\"\n );\n return;\n }\n //console.timeEnd(\"clustering\")\n //console.log(before,level,after);\n }\n // increase the size of the edges\n this.body.modules.kamadaKawai.setOptions({\n springLength: Math.max(150, 2 * startLength),\n });\n }\n if (level > MAX_LEVELS) {\n console.info(\n \"The clustering didn't succeed within the amount of interations allowed,\" +\n \" progressing with partial result.\"\n );\n }\n\n // position the system for these nodes and edges\n this.body.modules.kamadaKawai.solve(\n indices,\n this.body.edgeIndices,\n true\n );\n\n // shift to center point\n this._shiftToCenter();\n\n // perturb the nodes a little bit to force the physics to kick in\n const offset = 70;\n for (let i = 0; i < indices.length; i++) {\n // Only perturb the nodes that aren't fixed\n const node = this.body.nodes[indices[i]];\n if (node.predefinedPosition === false) {\n node.x += (0.5 - this._rng()) * offset;\n node.y += (0.5 - this._rng()) * offset;\n }\n }\n\n // uncluster all clusters\n this._declusterAll();\n\n // reposition all bezier nodes.\n this.body.emitter.emit(\"_repositionBezierNodes\");\n }\n }\n }\n\n /**\n * Move all the nodes towards to the center so gravitational pull wil not move the nodes away from view\n *\n * @private\n */\n _shiftToCenter() {\n const range = NetworkUtil.getRangeCore(\n this.body.nodes,\n this.body.nodeIndices\n );\n const center = NetworkUtil.findCenter(range);\n for (let i = 0; i < this.body.nodeIndices.length; i++) {\n const node = this.body.nodes[this.body.nodeIndices[i]];\n node.x -= center.x;\n node.y -= center.y;\n }\n }\n\n /**\n * Expands all clusters\n *\n * @private\n */\n _declusterAll() {\n let clustersPresent = true;\n while (clustersPresent === true) {\n clustersPresent = false;\n for (let i = 0; i < this.body.nodeIndices.length; i++) {\n if (this.body.nodes[this.body.nodeIndices[i]].isCluster === true) {\n clustersPresent = true;\n this.body.modules.clustering.openCluster(\n this.body.nodeIndices[i],\n {},\n false\n );\n }\n }\n if (clustersPresent === true) {\n this.body.emitter.emit(\"_dataChanged\");\n }\n }\n }\n\n /**\n *\n * @returns {number|*}\n */\n getSeed() {\n return this.initialRandomSeed;\n }\n\n /**\n * This is the main function to layout the nodes in a hierarchical way.\n * It checks if the node details are supplied correctly\n *\n * @private\n */\n setupHierarchicalLayout() {\n if (\n this.options.hierarchical.enabled === true &&\n this.body.nodeIndices.length > 0\n ) {\n // get the size of the largest hubs and check if the user has defined a level for a node.\n let node, nodeId;\n let definedLevel = false;\n let undefinedLevel = false;\n this.lastNodeOnLevel = {};\n this.hierarchical = new HierarchicalStatus();\n\n for (nodeId in this.body.nodes) {\n if (Object.prototype.hasOwnProperty.call(this.body.nodes, nodeId)) {\n node = this.body.nodes[nodeId];\n if (node.options.level !== undefined) {\n definedLevel = true;\n this.hierarchical.levels[nodeId] = node.options.level;\n } else {\n undefinedLevel = true;\n }\n }\n }\n\n // if the user defined some levels but not all, alert and run without hierarchical layout\n if (undefinedLevel === true && definedLevel === true) {\n throw new Error(\n \"To use the hierarchical layout, nodes require either no predefined levels\" +\n \" or levels have to be defined for all nodes.\"\n );\n } else {\n // define levels if undefined by the users. Based on hubsize.\n if (undefinedLevel === true) {\n const sortMethod = this.options.hierarchical.sortMethod;\n if (sortMethod === \"hubsize\") {\n this._determineLevelsByHubsize();\n } else if (sortMethod === \"directed\") {\n this._determineLevelsDirected();\n } else if (sortMethod === \"custom\") {\n this._determineLevelsCustomCallback();\n }\n }\n\n // fallback for cases where there are nodes but no edges\n for (const nodeId in this.body.nodes) {\n if (Object.prototype.hasOwnProperty.call(this.body.nodes, nodeId)) {\n this.hierarchical.ensureLevel(nodeId);\n }\n }\n // check the distribution of the nodes per level.\n const distribution = this._getDistribution();\n\n // get the parent children relations.\n this._generateMap();\n\n // place the nodes on the canvas.\n this._placeNodesByHierarchy(distribution);\n\n // condense the whitespace.\n this._condenseHierarchy();\n\n // shift to center so gravity does not have to do much\n this._shiftToCenter();\n }\n }\n }\n\n /**\n * @private\n */\n _condenseHierarchy() {\n // Global var in this scope to define when the movement has stopped.\n let stillShifting = false;\n const branches = {};\n // first we have some methods to help shifting trees around.\n // the main method to shift the trees\n const shiftTrees = () => {\n const treeSizes = getTreeSizes();\n let shiftBy = 0;\n for (let i = 0; i < treeSizes.length - 1; i++) {\n const diff = treeSizes[i].max - treeSizes[i + 1].min;\n shiftBy += diff + this.options.hierarchical.treeSpacing;\n shiftTree(i + 1, shiftBy);\n }\n };\n\n // shift a single tree by an offset\n const shiftTree = (index, offset) => {\n const trees = this.hierarchical.trees;\n\n for (const nodeId in trees) {\n if (Object.prototype.hasOwnProperty.call(trees, nodeId)) {\n if (trees[nodeId] === index) {\n this.direction.shift(nodeId, offset);\n }\n }\n }\n };\n\n // get the width of all trees\n const getTreeSizes = () => {\n const treeWidths = [];\n for (let i = 0; i < this.hierarchical.numTrees(); i++) {\n treeWidths.push(this.direction.getTreeSize(i));\n }\n return treeWidths;\n };\n\n // get a map of all nodes in this branch\n const getBranchNodes = (source, map) => {\n if (map[source.id]) {\n return;\n }\n map[source.id] = true;\n if (this.hierarchical.childrenReference[source.id]) {\n const children = this.hierarchical.childrenReference[source.id];\n if (children.length > 0) {\n for (let i = 0; i < children.length; i++) {\n getBranchNodes(this.body.nodes[children[i]], map);\n }\n }\n }\n };\n\n // get a min max width as well as the maximum movement space it has on either sides\n // we use min max terminology because width and height can interchange depending on the direction of the layout\n const getBranchBoundary = (branchMap, maxLevel = 1e9) => {\n let minSpace = 1e9;\n let maxSpace = 1e9;\n let min = 1e9;\n let max = -1e9;\n for (const branchNode in branchMap) {\n if (Object.prototype.hasOwnProperty.call(branchMap, branchNode)) {\n const node = this.body.nodes[branchNode];\n const level = this.hierarchical.levels[node.id];\n const position = this.direction.getPosition(node);\n\n // get the space around the node.\n const [minSpaceNode, maxSpaceNode] = this._getSpaceAroundNode(\n node,\n branchMap\n );\n minSpace = Math.min(minSpaceNode, minSpace);\n maxSpace = Math.min(maxSpaceNode, maxSpace);\n\n // the width is only relevant for the levels two nodes have in common. This is why we filter on this.\n if (level <= maxLevel) {\n min = Math.min(position, min);\n max = Math.max(position, max);\n }\n }\n }\n\n return [min, max, minSpace, maxSpace];\n };\n\n // check what the maximum level is these nodes have in common.\n const getCollisionLevel = (node1, node2) => {\n const maxLevel1 = this.hierarchical.getMaxLevel(node1.id);\n const maxLevel2 = this.hierarchical.getMaxLevel(node2.id);\n return Math.min(maxLevel1, maxLevel2);\n };\n\n /**\n * Condense elements. These can be nodes or branches depending on the callback.\n *\n * @param {Function} callback\n * @param {Array.} levels\n * @param {*} centerParents\n */\n const shiftElementsCloser = (callback, levels, centerParents) => {\n const hier = this.hierarchical;\n\n for (let i = 0; i < levels.length; i++) {\n const level = levels[i];\n const levelNodes = hier.distributionOrdering[level];\n if (levelNodes.length > 1) {\n for (let j = 0; j < levelNodes.length - 1; j++) {\n const node1 = levelNodes[j];\n const node2 = levelNodes[j + 1];\n\n // NOTE: logic maintained as it was; if nodes have same ancestor,\n // then of course they are in the same sub-network.\n if (\n hier.hasSameParent(node1, node2) &&\n hier.inSameSubNetwork(node1, node2)\n ) {\n callback(node1, node2, centerParents);\n }\n }\n }\n }\n };\n\n // callback for shifting branches\n const branchShiftCallback = (node1, node2, centerParent = false) => {\n //window.CALLBACKS.push(() => {\n const pos1 = this.direction.getPosition(node1);\n const pos2 = this.direction.getPosition(node2);\n const diffAbs = Math.abs(pos2 - pos1);\n const nodeSpacing = this.options.hierarchical.nodeSpacing;\n //console.log(\"NOW CHECKING:\", node1.id, node2.id, diffAbs);\n if (diffAbs > nodeSpacing) {\n const branchNodes1 = {};\n const branchNodes2 = {};\n\n getBranchNodes(node1, branchNodes1);\n getBranchNodes(node2, branchNodes2);\n\n // check the largest distance between the branches\n const maxLevel = getCollisionLevel(node1, node2);\n const branchNodeBoundary1 = getBranchBoundary(branchNodes1, maxLevel);\n const branchNodeBoundary2 = getBranchBoundary(branchNodes2, maxLevel);\n const max1 = branchNodeBoundary1[1];\n const min2 = branchNodeBoundary2[0];\n const minSpace2 = branchNodeBoundary2[2];\n\n //console.log(node1.id, getBranchBoundary(branchNodes1, maxLevel), node2.id,\n // getBranchBoundary(branchNodes2, maxLevel), maxLevel);\n const diffBranch = Math.abs(max1 - min2);\n if (diffBranch > nodeSpacing) {\n let offset = max1 - min2 + nodeSpacing;\n if (offset < -minSpace2 + nodeSpacing) {\n offset = -minSpace2 + nodeSpacing;\n //console.log(\"RESETTING OFFSET\", max1 - min2 + this.options.hierarchical.nodeSpacing, -minSpace2, offset);\n }\n if (offset < 0) {\n //console.log(\"SHIFTING\", node2.id, offset);\n this._shiftBlock(node2.id, offset);\n stillShifting = true;\n\n if (centerParent === true) this._centerParent(node2);\n }\n }\n }\n //this.body.emitter.emit(\"_redraw\");})\n };\n\n const minimizeEdgeLength = (iterations, node) => {\n //window.CALLBACKS.push(() => {\n // console.log(\"ts\",node.id);\n const nodeId = node.id;\n const allEdges = node.edges;\n const nodeLevel = this.hierarchical.levels[node.id];\n\n // gather constants\n const C2 =\n this.options.hierarchical.levelSeparation *\n this.options.hierarchical.levelSeparation;\n const referenceNodes = {};\n const aboveEdges = [];\n for (let i = 0; i < allEdges.length; i++) {\n const edge = allEdges[i];\n if (edge.toId != edge.fromId) {\n const otherNode = edge.toId == nodeId ? edge.from : edge.to;\n referenceNodes[allEdges[i].id] = otherNode;\n if (this.hierarchical.levels[otherNode.id] < nodeLevel) {\n aboveEdges.push(edge);\n }\n }\n }\n\n // differentiated sum of lengths based on only moving one node over one axis\n const getFx = (point, edges) => {\n let sum = 0;\n for (let i = 0; i < edges.length; i++) {\n if (referenceNodes[edges[i].id] !== undefined) {\n const a =\n this.direction.getPosition(referenceNodes[edges[i].id]) - point;\n sum += a / Math.sqrt(a * a + C2);\n }\n }\n return sum;\n };\n\n // doubly differentiated sum of lengths based on only moving one node over one axis\n const getDFx = (point, edges) => {\n let sum = 0;\n for (let i = 0; i < edges.length; i++) {\n if (referenceNodes[edges[i].id] !== undefined) {\n const a =\n this.direction.getPosition(referenceNodes[edges[i].id]) - point;\n sum -= C2 * Math.pow(a * a + C2, -1.5);\n }\n }\n return sum;\n };\n\n const getGuess = (iterations, edges) => {\n let guess = this.direction.getPosition(node);\n // Newton's method for optimization\n const guessMap = {};\n for (let i = 0; i < iterations; i++) {\n const fx = getFx(guess, edges);\n const dfx = getDFx(guess, edges);\n\n // we limit the movement to avoid instability.\n const limit = 40;\n const ratio = Math.max(-limit, Math.min(limit, Math.round(fx / dfx)));\n guess = guess - ratio;\n // reduce duplicates\n if (guessMap[guess] !== undefined) {\n break;\n }\n guessMap[guess] = i;\n }\n return guess;\n };\n\n const moveBranch = (guess) => {\n // position node if there is space\n const nodePosition = this.direction.getPosition(node);\n\n // check movable area of the branch\n if (branches[node.id] === undefined) {\n const branchNodes = {};\n getBranchNodes(node, branchNodes);\n branches[node.id] = branchNodes;\n }\n const branchBoundary = getBranchBoundary(branches[node.id]);\n const minSpaceBranch = branchBoundary[2];\n const maxSpaceBranch = branchBoundary[3];\n\n const diff = guess - nodePosition;\n\n // check if we are allowed to move the node:\n let branchOffset = 0;\n if (diff > 0) {\n branchOffset = Math.min(\n diff,\n maxSpaceBranch - this.options.hierarchical.nodeSpacing\n );\n } else if (diff < 0) {\n branchOffset = -Math.min(\n -diff,\n minSpaceBranch - this.options.hierarchical.nodeSpacing\n );\n }\n\n if (branchOffset != 0) {\n //console.log(\"moving branch:\",branchOffset, maxSpaceBranch, minSpaceBranch)\n this._shiftBlock(node.id, branchOffset);\n //this.body.emitter.emit(\"_redraw\");\n stillShifting = true;\n }\n };\n\n const moveNode = (guess) => {\n const nodePosition = this.direction.getPosition(node);\n\n // position node if there is space\n const [minSpace, maxSpace] = this._getSpaceAroundNode(node);\n const diff = guess - nodePosition;\n // check if we are allowed to move the node:\n let newPosition = nodePosition;\n if (diff > 0) {\n newPosition = Math.min(\n nodePosition + (maxSpace - this.options.hierarchical.nodeSpacing),\n guess\n );\n } else if (diff < 0) {\n newPosition = Math.max(\n nodePosition - (minSpace - this.options.hierarchical.nodeSpacing),\n guess\n );\n }\n\n if (newPosition !== nodePosition) {\n //console.log(\"moving Node:\",diff, minSpace, maxSpace);\n this.direction.setPosition(node, newPosition);\n //this.body.emitter.emit(\"_redraw\");\n stillShifting = true;\n }\n };\n\n let guess = getGuess(iterations, aboveEdges);\n moveBranch(guess);\n guess = getGuess(iterations, allEdges);\n moveNode(guess);\n //})\n };\n\n // method to remove whitespace between branches. Because we do bottom up, we can center the parents.\n const minimizeEdgeLengthBottomUp = (iterations) => {\n let levels = this.hierarchical.getLevels();\n levels = levels.reverse();\n for (let i = 0; i < iterations; i++) {\n stillShifting = false;\n for (let j = 0; j < levels.length; j++) {\n const level = levels[j];\n const levelNodes = this.hierarchical.distributionOrdering[level];\n for (let k = 0; k < levelNodes.length; k++) {\n minimizeEdgeLength(1000, levelNodes[k]);\n }\n }\n if (stillShifting !== true) {\n //console.log(\"FINISHED minimizeEdgeLengthBottomUp IN \" + i);\n break;\n }\n }\n };\n\n // method to remove whitespace between branches. Because we do bottom up, we can center the parents.\n const shiftBranchesCloserBottomUp = (iterations) => {\n let levels = this.hierarchical.getLevels();\n levels = levels.reverse();\n for (let i = 0; i < iterations; i++) {\n stillShifting = false;\n shiftElementsCloser(branchShiftCallback, levels, true);\n if (stillShifting !== true) {\n //console.log(\"FINISHED shiftBranchesCloserBottomUp IN \" + (i+1));\n break;\n }\n }\n };\n\n // center all parents\n const centerAllParents = () => {\n for (const nodeId in this.body.nodes) {\n if (Object.prototype.hasOwnProperty.call(this.body.nodes, nodeId))\n this._centerParent(this.body.nodes[nodeId]);\n }\n };\n\n // center all parents\n const centerAllParentsBottomUp = () => {\n let levels = this.hierarchical.getLevels();\n levels = levels.reverse();\n for (let i = 0; i < levels.length; i++) {\n const level = levels[i];\n const levelNodes = this.hierarchical.distributionOrdering[level];\n for (let j = 0; j < levelNodes.length; j++) {\n this._centerParent(levelNodes[j]);\n }\n }\n };\n\n // the actual work is done here.\n if (this.options.hierarchical.blockShifting === true) {\n shiftBranchesCloserBottomUp(5);\n centerAllParents();\n }\n\n // minimize edge length\n if (this.options.hierarchical.edgeMinimization === true) {\n minimizeEdgeLengthBottomUp(20);\n }\n\n if (this.options.hierarchical.parentCentralization === true) {\n centerAllParentsBottomUp();\n }\n\n shiftTrees();\n }\n\n /**\n * This gives the space around the node. IF a map is supplied, it will only check against nodes NOT in the map.\n * This is used to only get the distances to nodes outside of a branch.\n *\n * @param {Node} node\n * @param {{Node.id: vis.Node}} map\n * @returns {number[]}\n * @private\n */\n _getSpaceAroundNode(node, map) {\n let useMap = true;\n if (map === undefined) {\n useMap = false;\n }\n const level = this.hierarchical.levels[node.id];\n if (level !== undefined) {\n const index = this.hierarchical.distributionIndex[node.id];\n const position = this.direction.getPosition(node);\n const ordering = this.hierarchical.distributionOrdering[level];\n let minSpace = 1e9;\n let maxSpace = 1e9;\n if (index !== 0) {\n const prevNode = ordering[index - 1];\n if (\n (useMap === true && map[prevNode.id] === undefined) ||\n useMap === false\n ) {\n const prevPos = this.direction.getPosition(prevNode);\n minSpace = position - prevPos;\n }\n }\n\n if (index != ordering.length - 1) {\n const nextNode = ordering[index + 1];\n if (\n (useMap === true && map[nextNode.id] === undefined) ||\n useMap === false\n ) {\n const nextPos = this.direction.getPosition(nextNode);\n maxSpace = Math.min(maxSpace, nextPos - position);\n }\n }\n\n return [minSpace, maxSpace];\n } else {\n return [0, 0];\n }\n }\n\n /**\n * We use this method to center a parent node and check if it does not cross other nodes when it does.\n *\n * @param {Node} node\n * @private\n */\n _centerParent(node) {\n if (this.hierarchical.parentReference[node.id]) {\n const parents = this.hierarchical.parentReference[node.id];\n for (let i = 0; i < parents.length; i++) {\n const parentId = parents[i];\n const parentNode = this.body.nodes[parentId];\n const children = this.hierarchical.childrenReference[parentId];\n\n if (children !== undefined) {\n // get the range of the children\n const newPosition = this._getCenterPosition(children);\n\n const position = this.direction.getPosition(parentNode);\n const [minSpace, maxSpace] = this._getSpaceAroundNode(parentNode);\n const diff = position - newPosition;\n if (\n (diff < 0 &&\n Math.abs(diff) <\n maxSpace - this.options.hierarchical.nodeSpacing) ||\n (diff > 0 &&\n Math.abs(diff) < minSpace - this.options.hierarchical.nodeSpacing)\n ) {\n this.direction.setPosition(parentNode, newPosition);\n }\n }\n }\n }\n }\n\n /**\n * This function places the nodes on the canvas based on the hierarchial distribution.\n *\n * @param {object} distribution | obtained by the function this._getDistribution()\n * @private\n */\n _placeNodesByHierarchy(distribution) {\n this.positionedNodes = {};\n // start placing all the level 0 nodes first. Then recursively position their branches.\n for (const level in distribution) {\n if (Object.prototype.hasOwnProperty.call(distribution, level)) {\n // sort nodes in level by position:\n let nodeArray = Object.keys(distribution[level]);\n nodeArray = this._indexArrayToNodes(nodeArray);\n this.direction.sort(nodeArray);\n let handledNodeCount = 0;\n\n for (let i = 0; i < nodeArray.length; i++) {\n const node = nodeArray[i];\n if (this.positionedNodes[node.id] === undefined) {\n const spacing = this.options.hierarchical.nodeSpacing;\n let pos = spacing * handledNodeCount;\n // We get the X or Y values we need and store them in pos and previousPos.\n // The get and set make sure we get X or Y\n if (handledNodeCount > 0) {\n pos = this.direction.getPosition(nodeArray[i - 1]) + spacing;\n }\n this.direction.setPosition(node, pos, level);\n this._validatePositionAndContinue(node, level, pos);\n\n handledNodeCount++;\n }\n }\n }\n }\n }\n\n /**\n * This is a recursively called function to enumerate the branches from the largest hubs and place the nodes\n * on a X position that ensures there will be no overlap.\n *\n * @param {Node.id} parentId\n * @param {number} parentLevel\n * @private\n */\n _placeBranchNodes(parentId, parentLevel) {\n const childRef = this.hierarchical.childrenReference[parentId];\n\n // if this is not a parent, cancel the placing. This can happen with multiple parents to one child.\n if (childRef === undefined) {\n return;\n }\n\n // get a list of childNodes\n const childNodes = [];\n for (let i = 0; i < childRef.length; i++) {\n childNodes.push(this.body.nodes[childRef[i]]);\n }\n\n // use the positions to order the nodes.\n this.direction.sort(childNodes);\n\n // position the childNodes\n for (let i = 0; i < childNodes.length; i++) {\n const childNode = childNodes[i];\n const childNodeLevel = this.hierarchical.levels[childNode.id];\n // check if the child node is below the parent node and if it has already been positioned.\n if (\n childNodeLevel > parentLevel &&\n this.positionedNodes[childNode.id] === undefined\n ) {\n // get the amount of space required for this node. If parent the width is based on the amount of children.\n const spacing = this.options.hierarchical.nodeSpacing;\n let pos;\n\n // we get the X or Y values we need and store them in pos and previousPos.\n // The get and set make sure we get X or Y\n if (i === 0) {\n pos = this.direction.getPosition(this.body.nodes[parentId]);\n } else {\n pos = this.direction.getPosition(childNodes[i - 1]) + spacing;\n }\n this.direction.setPosition(childNode, pos, childNodeLevel);\n this._validatePositionAndContinue(childNode, childNodeLevel, pos);\n } else {\n return;\n }\n }\n\n // center the parent nodes.\n const center = this._getCenterPosition(childNodes);\n this.direction.setPosition(this.body.nodes[parentId], center, parentLevel);\n }\n\n /**\n * This method checks for overlap and if required shifts the branch. It also keeps records of positioned nodes.\n * Finally it will call _placeBranchNodes to place the branch nodes.\n *\n * @param {Node} node\n * @param {number} level\n * @param {number} pos\n * @private\n */\n _validatePositionAndContinue(node, level, pos) {\n // This method only works for formal trees and formal forests\n // Early exit if this is not the case\n if (!this.hierarchical.isTree) return;\n\n // if overlap has been detected, we shift the branch\n if (this.lastNodeOnLevel[level] !== undefined) {\n const previousPos = this.direction.getPosition(\n this.body.nodes[this.lastNodeOnLevel[level]]\n );\n if (pos - previousPos < this.options.hierarchical.nodeSpacing) {\n const diff = previousPos + this.options.hierarchical.nodeSpacing - pos;\n const sharedParent = this._findCommonParent(\n this.lastNodeOnLevel[level],\n node.id\n );\n this._shiftBlock(sharedParent.withChild, diff);\n }\n }\n\n this.lastNodeOnLevel[level] = node.id; // store change in position.\n this.positionedNodes[node.id] = true;\n this._placeBranchNodes(node.id, level);\n }\n\n /**\n * Receives an array with node indices and returns an array with the actual node references.\n * Used for sorting based on node properties.\n *\n * @param {Array.} idArray\n * @returns {Array.}\n */\n _indexArrayToNodes(idArray) {\n const array = [];\n for (let i = 0; i < idArray.length; i++) {\n array.push(this.body.nodes[idArray[i]]);\n }\n return array;\n }\n\n /**\n * This function get the distribution of levels based on hubsize\n *\n * @returns {object}\n * @private\n */\n _getDistribution() {\n const distribution = {};\n let nodeId, node;\n\n // we fix Y because the hierarchy is vertical,\n // we fix X so we do not give a node an x position for a second time.\n // the fix of X is removed after the x value has been set.\n for (nodeId in this.body.nodes) {\n if (Object.prototype.hasOwnProperty.call(this.body.nodes, nodeId)) {\n node = this.body.nodes[nodeId];\n const level =\n this.hierarchical.levels[nodeId] === undefined\n ? 0\n : this.hierarchical.levels[nodeId];\n this.direction.fix(node, level);\n if (distribution[level] === undefined) {\n distribution[level] = {};\n }\n distribution[level][nodeId] = node;\n }\n }\n return distribution;\n }\n\n /**\n * Return the active (i.e. visible) edges for this node\n *\n * @param {Node} node\n * @returns {Array.} Array of edge instances\n * @private\n */\n _getActiveEdges(node) {\n const result = [];\n\n forEach(node.edges, (edge) => {\n if (this.body.edgeIndices.indexOf(edge.id) !== -1) {\n result.push(edge);\n }\n });\n\n return result;\n }\n\n /**\n * Get the hubsizes for all active nodes.\n *\n * @returns {number}\n * @private\n */\n _getHubSizes() {\n const hubSizes = {};\n const nodeIds = this.body.nodeIndices;\n\n forEach(nodeIds, (nodeId) => {\n const node = this.body.nodes[nodeId];\n const hubSize = this._getActiveEdges(node).length;\n hubSizes[hubSize] = true;\n });\n\n // Make an array of the size sorted descending\n const result = [];\n forEach(hubSizes, (size) => {\n result.push(Number(size));\n });\n\n result.sort(function (a, b) {\n return b - a;\n });\n\n return result;\n }\n\n /**\n * this function allocates nodes in levels based on the recursive branching from the largest hubs.\n *\n * @private\n */\n _determineLevelsByHubsize() {\n const levelDownstream = (nodeA, nodeB) => {\n this.hierarchical.levelDownstream(nodeA, nodeB);\n };\n\n const hubSizes = this._getHubSizes();\n\n for (let i = 0; i < hubSizes.length; ++i) {\n const hubSize = hubSizes[i];\n if (hubSize === 0) break;\n\n forEach(this.body.nodeIndices, (nodeId) => {\n const node = this.body.nodes[nodeId];\n\n if (hubSize === this._getActiveEdges(node).length) {\n this._crawlNetwork(levelDownstream, nodeId);\n }\n });\n }\n }\n\n /**\n * TODO: release feature\n * TODO: Determine if this feature is needed at all\n *\n * @private\n */\n _determineLevelsCustomCallback() {\n const minLevel = 100000;\n\n // TODO: this should come from options.\n // eslint-disable-next-line no-unused-vars -- This should eventually be implemented with these parameters used.\n const customCallback = function (nodeA, nodeB, edge) {};\n\n // TODO: perhaps move to HierarchicalStatus.\n // But I currently don't see the point, this method is not used.\n const levelByDirection = (nodeA, nodeB, edge) => {\n let levelA = this.hierarchical.levels[nodeA.id];\n // set initial level\n if (levelA === undefined) {\n levelA = this.hierarchical.levels[nodeA.id] = minLevel;\n }\n\n const diff = customCallback(\n NetworkUtil.cloneOptions(nodeA, \"node\"),\n NetworkUtil.cloneOptions(nodeB, \"node\"),\n NetworkUtil.cloneOptions(edge, \"edge\")\n );\n\n this.hierarchical.levels[nodeB.id] = levelA + diff;\n };\n\n this._crawlNetwork(levelByDirection);\n this.hierarchical.setMinLevelToZero(this.body.nodes);\n }\n\n /**\n * Allocate nodes in levels based on the direction of the edges.\n *\n * @private\n */\n _determineLevelsDirected() {\n const nodes = this.body.nodeIndices.reduce((acc, id) => {\n acc.set(id, this.body.nodes[id]);\n return acc;\n }, new Map());\n\n if (this.options.hierarchical.shakeTowards === \"roots\") {\n this.hierarchical.levels = fillLevelsByDirectionRoots(nodes);\n } else {\n this.hierarchical.levels = fillLevelsByDirectionLeaves(nodes);\n }\n\n this.hierarchical.setMinLevelToZero(this.body.nodes);\n }\n\n /**\n * Update the bookkeeping of parent and child.\n *\n * @private\n */\n _generateMap() {\n const fillInRelations = (parentNode, childNode) => {\n if (\n this.hierarchical.levels[childNode.id] >\n this.hierarchical.levels[parentNode.id]\n ) {\n this.hierarchical.addRelation(parentNode.id, childNode.id);\n }\n };\n\n this._crawlNetwork(fillInRelations);\n this.hierarchical.checkIfTree();\n }\n\n /**\n * Crawl over the entire network and use a callback on each node couple that is connected to each other.\n *\n * @param {Function} [callback=function(){}] | will receive nodeA, nodeB and the connecting edge. A and B are distinct.\n * @param {Node.id} startingNodeId\n * @private\n */\n _crawlNetwork(callback = function () {}, startingNodeId) {\n const progress = {};\n\n const crawler = (node, tree) => {\n if (progress[node.id] === undefined) {\n this.hierarchical.setTreeIndex(node, tree);\n\n progress[node.id] = true;\n let childNode;\n const edges = this._getActiveEdges(node);\n for (let i = 0; i < edges.length; i++) {\n const edge = edges[i];\n if (edge.connected === true) {\n if (edge.toId == node.id) {\n // Not '===' because id's can be string and numeric\n childNode = edge.from;\n } else {\n childNode = edge.to;\n }\n\n if (node.id != childNode.id) {\n // Not '!==' because id's can be string and numeric\n callback(node, childNode, edge);\n crawler(childNode, tree);\n }\n }\n }\n }\n };\n\n if (startingNodeId === undefined) {\n // Crawl over all nodes\n let treeIndex = 0; // Serves to pass a unique id for the current distinct tree\n\n for (let i = 0; i < this.body.nodeIndices.length; i++) {\n const nodeId = this.body.nodeIndices[i];\n\n if (progress[nodeId] === undefined) {\n const node = this.body.nodes[nodeId];\n crawler(node, treeIndex);\n treeIndex += 1;\n }\n }\n } else {\n // Crawl from the given starting node\n const node = this.body.nodes[startingNodeId];\n if (node === undefined) {\n console.error(\"Node not found:\", startingNodeId);\n return;\n }\n crawler(node);\n }\n }\n\n /**\n * Shift a branch a certain distance\n *\n * @param {Node.id} parentId\n * @param {number} diff\n * @private\n */\n _shiftBlock(parentId, diff) {\n const progress = {};\n const shifter = (parentId) => {\n if (progress[parentId]) {\n return;\n }\n progress[parentId] = true;\n this.direction.shift(parentId, diff);\n\n const childRef = this.hierarchical.childrenReference[parentId];\n if (childRef !== undefined) {\n for (let i = 0; i < childRef.length; i++) {\n shifter(childRef[i]);\n }\n }\n };\n shifter(parentId);\n }\n\n /**\n * Find a common parent between branches.\n *\n * @param {Node.id} childA\n * @param {Node.id} childB\n * @returns {{foundParent, withChild}}\n * @private\n */\n _findCommonParent(childA, childB) {\n const parents = {};\n const iterateParents = (parents, child) => {\n const parentRef = this.hierarchical.parentReference[child];\n if (parentRef !== undefined) {\n for (let i = 0; i < parentRef.length; i++) {\n const parent = parentRef[i];\n parents[parent] = true;\n iterateParents(parents, parent);\n }\n }\n };\n const findParent = (parents, child) => {\n const parentRef = this.hierarchical.parentReference[child];\n if (parentRef !== undefined) {\n for (let i = 0; i < parentRef.length; i++) {\n const parent = parentRef[i];\n if (parents[parent] !== undefined) {\n return { foundParent: parent, withChild: child };\n }\n const branch = findParent(parents, parent);\n if (branch.foundParent !== null) {\n return branch;\n }\n }\n }\n return { foundParent: null, withChild: child };\n };\n\n iterateParents(parents, childA);\n return findParent(parents, childB);\n }\n\n /**\n * Set the strategy pattern for handling the coordinates given the current direction.\n *\n * The individual instances contain all the operations and data specific to a layout direction.\n *\n * @param {Node} node\n * @param {{x: number, y: number}} position\n * @param {number} level\n * @param {boolean} [doNotUpdate=false]\n * @private\n */\n setDirectionStrategy() {\n const isVertical =\n this.options.hierarchical.direction === \"UD\" ||\n this.options.hierarchical.direction === \"DU\";\n\n if (isVertical) {\n this.direction = new VerticalStrategy(this);\n } else {\n this.direction = new HorizontalStrategy(this);\n }\n }\n\n /**\n * Determine the center position of a branch from the passed list of child nodes\n *\n * This takes into account the positions of all the child nodes.\n *\n * @param {Array.} childNodes Array of either child nodes or node id's\n * @returns {number}\n * @private\n */\n _getCenterPosition(childNodes) {\n let minPos = 1e9;\n let maxPos = -1e9;\n\n for (let i = 0; i < childNodes.length; i++) {\n let childNode;\n if (childNodes[i].id !== undefined) {\n childNode = childNodes[i];\n } else {\n const childNodeId = childNodes[i];\n childNode = this.body.nodes[childNodeId];\n }\n\n const position = this.direction.getPosition(childNode);\n minPos = Math.min(minPos, position);\n maxPos = Math.max(maxPos, position);\n }\n\n return 0.5 * (minPos + maxPos);\n }\n}\n\nexport default LayoutEngine;\n","import \"./ManipulationSystem.css\";\n\nimport { Hammer, deepExtend, recursiveDOMDelete } from \"vis-util/esnext\";\nimport { v4 as randomUUID } from \"uuid\";\nimport { onTouch } from \"../../hammerUtil\";\n\n/**\n * Clears the toolbar div element of children\n *\n * @private\n */\nclass ManipulationSystem {\n /**\n * @param {object} body\n * @param {Canvas} canvas\n * @param {SelectionHandler} selectionHandler\n * @param {InteractionHandler} interactionHandler\n */\n constructor(body, canvas, selectionHandler, interactionHandler) {\n this.body = body;\n this.canvas = canvas;\n this.selectionHandler = selectionHandler;\n this.interactionHandler = interactionHandler;\n\n this.editMode = false;\n this.manipulationDiv = undefined;\n this.editModeDiv = undefined;\n this.closeDiv = undefined;\n\n this._domEventListenerCleanupQueue = [];\n this.temporaryUIFunctions = {};\n this.temporaryEventFunctions = [];\n\n this.touchTime = 0;\n this.temporaryIds = { nodes: [], edges: [] };\n this.guiEnabled = false;\n this.inMode = false;\n this.selectedControlNode = undefined;\n\n this.options = {};\n this.defaultOptions = {\n enabled: false,\n initiallyActive: false,\n addNode: true,\n addEdge: true,\n editNode: undefined,\n editEdge: true,\n deleteNode: true,\n deleteEdge: true,\n controlNodeStyle: {\n shape: \"dot\",\n size: 6,\n color: {\n background: \"#ff0000\",\n border: \"#3c3c3c\",\n highlight: { background: \"#07f968\", border: \"#3c3c3c\" },\n },\n borderWidth: 2,\n borderWidthSelected: 2,\n },\n };\n Object.assign(this.options, this.defaultOptions);\n\n this.body.emitter.on(\"destroy\", () => {\n this._clean();\n });\n this.body.emitter.on(\"_dataChanged\", this._restore.bind(this));\n this.body.emitter.on(\"_resetData\", this._restore.bind(this));\n }\n\n /**\n * If something changes in the data during editing, switch back to the initial datamanipulation state and close all edit modes.\n *\n * @private\n */\n _restore() {\n if (this.inMode !== false) {\n if (this.options.initiallyActive === true) {\n this.enableEditMode();\n } else {\n this.disableEditMode();\n }\n }\n }\n\n /**\n * Set the Options\n *\n * @param {object} options\n * @param {object} allOptions\n * @param {object} globalOptions\n */\n setOptions(options, allOptions, globalOptions) {\n if (allOptions !== undefined) {\n if (allOptions.locale !== undefined) {\n this.options.locale = allOptions.locale;\n } else {\n this.options.locale = globalOptions.locale;\n }\n if (allOptions.locales !== undefined) {\n this.options.locales = allOptions.locales;\n } else {\n this.options.locales = globalOptions.locales;\n }\n }\n\n if (options !== undefined) {\n if (typeof options === \"boolean\") {\n this.options.enabled = options;\n } else {\n this.options.enabled = true;\n deepExtend(this.options, options);\n }\n if (this.options.initiallyActive === true) {\n this.editMode = true;\n }\n this._setup();\n }\n }\n\n /**\n * Enable or disable edit-mode. Draws the DOM required and cleans up after itself.\n *\n * @private\n */\n toggleEditMode() {\n if (this.editMode === true) {\n this.disableEditMode();\n } else {\n this.enableEditMode();\n }\n }\n\n /**\n * Enables Edit Mode\n */\n enableEditMode() {\n this.editMode = true;\n\n this._clean();\n if (this.guiEnabled === true) {\n this.manipulationDiv.style.display = \"block\";\n this.closeDiv.style.display = \"block\";\n this.editModeDiv.style.display = \"none\";\n this.showManipulatorToolbar();\n }\n }\n\n /**\n * Disables Edit Mode\n */\n disableEditMode() {\n this.editMode = false;\n\n this._clean();\n if (this.guiEnabled === true) {\n this.manipulationDiv.style.display = \"none\";\n this.closeDiv.style.display = \"none\";\n this.editModeDiv.style.display = \"block\";\n this._createEditButton();\n }\n }\n\n /**\n * Creates the main toolbar. Removes functions bound to the select event. Binds all the buttons of the toolbar.\n *\n * @private\n */\n showManipulatorToolbar() {\n // restore the state of any bound functions or events, remove control nodes, restore physics\n this._clean();\n\n // reset global variables\n this.manipulationDOM = {};\n\n // if the gui is enabled, draw all elements.\n if (this.guiEnabled === true) {\n // a _restore will hide these menus\n this.editMode = true;\n this.manipulationDiv.style.display = \"block\";\n this.closeDiv.style.display = \"block\";\n\n const selectedNodeCount = this.selectionHandler.getSelectedNodeCount();\n const selectedEdgeCount = this.selectionHandler.getSelectedEdgeCount();\n const selectedTotalCount = selectedNodeCount + selectedEdgeCount;\n const locale = this.options.locales[this.options.locale];\n let needSeperator = false;\n\n if (this.options.addNode !== false) {\n this._createAddNodeButton(locale);\n needSeperator = true;\n }\n if (this.options.addEdge !== false) {\n if (needSeperator === true) {\n this._createSeperator(1);\n } else {\n needSeperator = true;\n }\n this._createAddEdgeButton(locale);\n }\n\n if (\n selectedNodeCount === 1 &&\n typeof this.options.editNode === \"function\"\n ) {\n if (needSeperator === true) {\n this._createSeperator(2);\n } else {\n needSeperator = true;\n }\n this._createEditNodeButton(locale);\n } else if (\n selectedEdgeCount === 1 &&\n selectedNodeCount === 0 &&\n this.options.editEdge !== false\n ) {\n if (needSeperator === true) {\n this._createSeperator(3);\n } else {\n needSeperator = true;\n }\n this._createEditEdgeButton(locale);\n }\n\n // remove buttons\n if (selectedTotalCount !== 0) {\n if (selectedNodeCount > 0 && this.options.deleteNode !== false) {\n if (needSeperator === true) {\n this._createSeperator(4);\n }\n this._createDeleteButton(locale);\n } else if (\n selectedNodeCount === 0 &&\n this.options.deleteEdge !== false\n ) {\n if (needSeperator === true) {\n this._createSeperator(4);\n }\n this._createDeleteButton(locale);\n }\n }\n\n // bind the close button\n this._bindElementEvents(this.closeDiv, this.toggleEditMode.bind(this));\n\n // refresh this bar based on what has been selected\n this._temporaryBindEvent(\n \"select\",\n this.showManipulatorToolbar.bind(this)\n );\n }\n\n // redraw to show any possible changes\n this.body.emitter.emit(\"_redraw\");\n }\n\n /**\n * Create the toolbar for adding Nodes\n */\n addNodeMode() {\n // when using the gui, enable edit mode if it wasnt already.\n if (this.editMode !== true) {\n this.enableEditMode();\n }\n\n // restore the state of any bound functions or events, remove control nodes, restore physics\n this._clean();\n\n this.inMode = \"addNode\";\n if (this.guiEnabled === true) {\n const locale = this.options.locales[this.options.locale];\n this.manipulationDOM = {};\n this._createBackButton(locale);\n this._createSeperator();\n this._createDescription(\n locale[\"addDescription\"] || this.options.locales[\"en\"][\"addDescription\"]\n );\n\n // bind the close button\n this._bindElementEvents(this.closeDiv, this.toggleEditMode.bind(this));\n }\n\n this._temporaryBindEvent(\"click\", this._performAddNode.bind(this));\n }\n\n /**\n * call the bound function to handle the editing of the node. The node has to be selected.\n */\n editNode() {\n // when using the gui, enable edit mode if it wasnt already.\n if (this.editMode !== true) {\n this.enableEditMode();\n }\n\n // restore the state of any bound functions or events, remove control nodes, restore physics\n this._clean();\n const node = this.selectionHandler.getSelectedNodes()[0];\n if (node !== undefined) {\n this.inMode = \"editNode\";\n if (typeof this.options.editNode === \"function\") {\n if (node.isCluster !== true) {\n const data = deepExtend({}, node.options, false);\n data.x = node.x;\n data.y = node.y;\n\n if (this.options.editNode.length === 2) {\n this.options.editNode(data, (finalizedData) => {\n if (\n finalizedData !== null &&\n finalizedData !== undefined &&\n this.inMode === \"editNode\"\n ) {\n // if for whatever reason the mode has changes (due to dataset change) disregard the callback) {\n this.body.data.nodes.getDataSet().update(finalizedData);\n }\n this.showManipulatorToolbar();\n });\n } else {\n throw new Error(\n \"The function for edit does not support two arguments (data, callback)\"\n );\n }\n } else {\n alert(\n this.options.locales[this.options.locale][\"editClusterError\"] ||\n this.options.locales[\"en\"][\"editClusterError\"]\n );\n }\n } else {\n throw new Error(\n \"No function has been configured to handle the editing of nodes.\"\n );\n }\n } else {\n this.showManipulatorToolbar();\n }\n }\n\n /**\n * create the toolbar to connect nodes\n */\n addEdgeMode() {\n // when using the gui, enable edit mode if it wasnt already.\n if (this.editMode !== true) {\n this.enableEditMode();\n }\n\n // restore the state of any bound functions or events, remove control nodes, restore physics\n this._clean();\n\n this.inMode = \"addEdge\";\n if (this.guiEnabled === true) {\n const locale = this.options.locales[this.options.locale];\n this.manipulationDOM = {};\n this._createBackButton(locale);\n this._createSeperator();\n this._createDescription(\n locale[\"edgeDescription\"] ||\n this.options.locales[\"en\"][\"edgeDescription\"]\n );\n\n // bind the close button\n this._bindElementEvents(this.closeDiv, this.toggleEditMode.bind(this));\n }\n\n // temporarily overload functions\n this._temporaryBindUI(\"onTouch\", this._handleConnect.bind(this));\n this._temporaryBindUI(\"onDragEnd\", this._finishConnect.bind(this));\n this._temporaryBindUI(\"onDrag\", this._dragControlNode.bind(this));\n this._temporaryBindUI(\"onRelease\", this._finishConnect.bind(this));\n this._temporaryBindUI(\"onDragStart\", this._dragStartEdge.bind(this));\n this._temporaryBindUI(\"onHold\", () => {});\n }\n\n /**\n * create the toolbar to edit edges\n */\n editEdgeMode() {\n // when using the gui, enable edit mode if it wasn't already.\n if (this.editMode !== true) {\n this.enableEditMode();\n }\n\n // restore the state of any bound functions or events, remove control nodes, restore physics\n this._clean();\n\n this.inMode = \"editEdge\";\n if (\n typeof this.options.editEdge === \"object\" &&\n typeof this.options.editEdge.editWithoutDrag === \"function\"\n ) {\n this.edgeBeingEditedId = this.selectionHandler.getSelectedEdgeIds()[0];\n if (this.edgeBeingEditedId !== undefined) {\n const edge = this.body.edges[this.edgeBeingEditedId];\n this._performEditEdge(edge.from.id, edge.to.id);\n return;\n }\n }\n if (this.guiEnabled === true) {\n const locale = this.options.locales[this.options.locale];\n this.manipulationDOM = {};\n this._createBackButton(locale);\n this._createSeperator();\n this._createDescription(\n locale[\"editEdgeDescription\"] ||\n this.options.locales[\"en\"][\"editEdgeDescription\"]\n );\n\n // bind the close button\n this._bindElementEvents(this.closeDiv, this.toggleEditMode.bind(this));\n }\n\n this.edgeBeingEditedId = this.selectionHandler.getSelectedEdgeIds()[0];\n if (this.edgeBeingEditedId !== undefined) {\n const edge = this.body.edges[this.edgeBeingEditedId];\n\n // create control nodes\n const controlNodeFrom = this._getNewTargetNode(edge.from.x, edge.from.y);\n const controlNodeTo = this._getNewTargetNode(edge.to.x, edge.to.y);\n\n this.temporaryIds.nodes.push(controlNodeFrom.id);\n this.temporaryIds.nodes.push(controlNodeTo.id);\n\n this.body.nodes[controlNodeFrom.id] = controlNodeFrom;\n this.body.nodeIndices.push(controlNodeFrom.id);\n this.body.nodes[controlNodeTo.id] = controlNodeTo;\n this.body.nodeIndices.push(controlNodeTo.id);\n\n // temporarily overload UI functions, cleaned up automatically because of _temporaryBindUI\n this._temporaryBindUI(\"onTouch\", this._controlNodeTouch.bind(this)); // used to get the position\n this._temporaryBindUI(\"onTap\", () => {}); // disabled\n this._temporaryBindUI(\"onHold\", () => {}); // disabled\n this._temporaryBindUI(\n \"onDragStart\",\n this._controlNodeDragStart.bind(this)\n ); // used to select control node\n this._temporaryBindUI(\"onDrag\", this._controlNodeDrag.bind(this)); // used to drag control node\n this._temporaryBindUI(\"onDragEnd\", this._controlNodeDragEnd.bind(this)); // used to connect or revert control nodes\n this._temporaryBindUI(\"onMouseMove\", () => {}); // disabled\n\n // create function to position control nodes correctly on movement\n // automatically cleaned up because we use the temporary bind\n this._temporaryBindEvent(\"beforeDrawing\", (ctx) => {\n const positions = edge.edgeType.findBorderPositions(ctx);\n if (controlNodeFrom.selected === false) {\n controlNodeFrom.x = positions.from.x;\n controlNodeFrom.y = positions.from.y;\n }\n if (controlNodeTo.selected === false) {\n controlNodeTo.x = positions.to.x;\n controlNodeTo.y = positions.to.y;\n }\n });\n\n this.body.emitter.emit(\"_redraw\");\n } else {\n this.showManipulatorToolbar();\n }\n }\n\n /**\n * delete everything in the selection\n */\n deleteSelected() {\n // when using the gui, enable edit mode if it wasnt already.\n if (this.editMode !== true) {\n this.enableEditMode();\n }\n\n // restore the state of any bound functions or events, remove control nodes, restore physics\n this._clean();\n\n this.inMode = \"delete\";\n const selectedNodes = this.selectionHandler.getSelectedNodeIds();\n const selectedEdges = this.selectionHandler.getSelectedEdgeIds();\n let deleteFunction = undefined;\n if (selectedNodes.length > 0) {\n for (let i = 0; i < selectedNodes.length; i++) {\n if (this.body.nodes[selectedNodes[i]].isCluster === true) {\n alert(\n this.options.locales[this.options.locale][\"deleteClusterError\"] ||\n this.options.locales[\"en\"][\"deleteClusterError\"]\n );\n return;\n }\n }\n\n if (typeof this.options.deleteNode === \"function\") {\n deleteFunction = this.options.deleteNode;\n }\n } else if (selectedEdges.length > 0) {\n if (typeof this.options.deleteEdge === \"function\") {\n deleteFunction = this.options.deleteEdge;\n }\n }\n\n if (typeof deleteFunction === \"function\") {\n const data = { nodes: selectedNodes, edges: selectedEdges };\n if (deleteFunction.length === 2) {\n deleteFunction(data, (finalizedData) => {\n if (\n finalizedData !== null &&\n finalizedData !== undefined &&\n this.inMode === \"delete\"\n ) {\n // if for whatever reason the mode has changes (due to dataset change) disregard the callback) {\n this.body.data.edges.getDataSet().remove(finalizedData.edges);\n this.body.data.nodes.getDataSet().remove(finalizedData.nodes);\n this.body.emitter.emit(\"startSimulation\");\n this.showManipulatorToolbar();\n } else {\n this.body.emitter.emit(\"startSimulation\");\n this.showManipulatorToolbar();\n }\n });\n } else {\n throw new Error(\n \"The function for delete does not support two arguments (data, callback)\"\n );\n }\n } else {\n this.body.data.edges.getDataSet().remove(selectedEdges);\n this.body.data.nodes.getDataSet().remove(selectedNodes);\n this.body.emitter.emit(\"startSimulation\");\n this.showManipulatorToolbar();\n }\n }\n\n //********************************************** PRIVATE ***************************************//\n\n /**\n * draw or remove the DOM\n *\n * @private\n */\n _setup() {\n if (this.options.enabled === true) {\n // Enable the GUI\n this.guiEnabled = true;\n\n this._createWrappers();\n if (this.editMode === false) {\n this._createEditButton();\n } else {\n this.showManipulatorToolbar();\n }\n } else {\n this._removeManipulationDOM();\n\n // disable the gui\n this.guiEnabled = false;\n }\n }\n\n /**\n * create the div overlays that contain the DOM\n *\n * @private\n */\n _createWrappers() {\n // load the manipulator HTML elements. All styling done in css.\n if (this.manipulationDiv === undefined) {\n this.manipulationDiv = document.createElement(\"div\");\n this.manipulationDiv.className = \"vis-manipulation\";\n if (this.editMode === true) {\n this.manipulationDiv.style.display = \"block\";\n } else {\n this.manipulationDiv.style.display = \"none\";\n }\n this.canvas.frame.appendChild(this.manipulationDiv);\n }\n\n // container for the edit button.\n if (this.editModeDiv === undefined) {\n this.editModeDiv = document.createElement(\"div\");\n this.editModeDiv.className = \"vis-edit-mode\";\n if (this.editMode === true) {\n this.editModeDiv.style.display = \"none\";\n } else {\n this.editModeDiv.style.display = \"block\";\n }\n this.canvas.frame.appendChild(this.editModeDiv);\n }\n\n // container for the close div button\n if (this.closeDiv === undefined) {\n this.closeDiv = document.createElement(\"button\");\n this.closeDiv.className = \"vis-close\";\n this.closeDiv.setAttribute(\n \"aria-label\",\n this.options.locales[this.options.locale]?.[\"close\"] ??\n this.options.locales[\"en\"][\"close\"]\n );\n this.closeDiv.style.display = this.manipulationDiv.style.display;\n this.canvas.frame.appendChild(this.closeDiv);\n }\n }\n\n /**\n * generate a new target node. Used for creating new edges and editing edges\n *\n * @param {number} x\n * @param {number} y\n * @returns {Node}\n * @private\n */\n _getNewTargetNode(x, y) {\n const controlNodeStyle = deepExtend({}, this.options.controlNodeStyle);\n\n controlNodeStyle.id = \"targetNode\" + randomUUID();\n controlNodeStyle.hidden = false;\n controlNodeStyle.physics = false;\n controlNodeStyle.x = x;\n controlNodeStyle.y = y;\n\n // we have to define the bounding box in order for the nodes to be drawn immediately\n const node = this.body.functions.createNode(controlNodeStyle);\n node.shape.boundingBox = { left: x, right: x, top: y, bottom: y };\n\n return node;\n }\n\n /**\n * Create the edit button\n */\n _createEditButton() {\n // restore everything to it's original state (if applicable)\n this._clean();\n\n // reset the manipulationDOM\n this.manipulationDOM = {};\n\n // empty the editModeDiv\n recursiveDOMDelete(this.editModeDiv);\n\n // create the contents for the editMode button\n const locale = this.options.locales[this.options.locale];\n const button = this._createButton(\n \"editMode\",\n \"vis-edit vis-edit-mode\",\n locale[\"edit\"] || this.options.locales[\"en\"][\"edit\"]\n );\n this.editModeDiv.appendChild(button);\n\n // bind a hammer listener to the button, calling the function toggleEditMode.\n this._bindElementEvents(button, this.toggleEditMode.bind(this));\n }\n\n /**\n * this function cleans up after everything this module does. Temporary elements, functions and events are removed, physics restored, hammers removed.\n *\n * @private\n */\n _clean() {\n // not in mode\n this.inMode = false;\n\n // _clean the divs\n if (this.guiEnabled === true) {\n recursiveDOMDelete(this.editModeDiv);\n recursiveDOMDelete(this.manipulationDiv);\n\n // removes all the bindings and overloads\n this._cleanupDOMEventListeners();\n }\n\n // remove temporary nodes and edges\n this._cleanupTemporaryNodesAndEdges();\n\n // restore overloaded UI functions\n this._unbindTemporaryUIs();\n\n // remove the temporaryEventFunctions\n this._unbindTemporaryEvents();\n\n // restore the physics if required\n this.body.emitter.emit(\"restorePhysics\");\n }\n\n /**\n * Each dom element has it's own hammer. They are stored in this.manipulationHammers. This cleans them up.\n *\n * @private\n */\n _cleanupDOMEventListeners() {\n // _clean DOM event listener bindings\n for (const callback of this._domEventListenerCleanupQueue.splice(0)) {\n callback();\n }\n }\n\n /**\n * Remove all DOM elements created by this module.\n *\n * @private\n */\n _removeManipulationDOM() {\n // removes all the bindings and overloads\n this._clean();\n\n // empty the manipulation divs\n recursiveDOMDelete(this.manipulationDiv);\n recursiveDOMDelete(this.editModeDiv);\n recursiveDOMDelete(this.closeDiv);\n\n // remove the manipulation divs\n if (this.manipulationDiv) {\n this.canvas.frame.removeChild(this.manipulationDiv);\n }\n if (this.editModeDiv) {\n this.canvas.frame.removeChild(this.editModeDiv);\n }\n if (this.closeDiv) {\n this.canvas.frame.removeChild(this.closeDiv);\n }\n\n // set the references to undefined\n this.manipulationDiv = undefined;\n this.editModeDiv = undefined;\n this.closeDiv = undefined;\n }\n\n /**\n * create a seperator line. the index is to differentiate in the manipulation dom\n *\n * @param {number} [index=1]\n * @private\n */\n _createSeperator(index = 1) {\n this.manipulationDOM[\"seperatorLineDiv\" + index] =\n document.createElement(\"div\");\n this.manipulationDOM[\"seperatorLineDiv\" + index].className =\n \"vis-separator-line\";\n this.manipulationDiv.appendChild(\n this.manipulationDOM[\"seperatorLineDiv\" + index]\n );\n }\n\n // ---------------------- DOM functions for buttons --------------------------//\n\n /**\n *\n * @param {Locale} locale\n * @private\n */\n _createAddNodeButton(locale) {\n const button = this._createButton(\n \"addNode\",\n \"vis-add\",\n locale[\"addNode\"] || this.options.locales[\"en\"][\"addNode\"]\n );\n this.manipulationDiv.appendChild(button);\n this._bindElementEvents(button, this.addNodeMode.bind(this));\n }\n\n /**\n *\n * @param {Locale} locale\n * @private\n */\n _createAddEdgeButton(locale) {\n const button = this._createButton(\n \"addEdge\",\n \"vis-connect\",\n locale[\"addEdge\"] || this.options.locales[\"en\"][\"addEdge\"]\n );\n this.manipulationDiv.appendChild(button);\n this._bindElementEvents(button, this.addEdgeMode.bind(this));\n }\n\n /**\n *\n * @param {Locale} locale\n * @private\n */\n _createEditNodeButton(locale) {\n const button = this._createButton(\n \"editNode\",\n \"vis-edit\",\n locale[\"editNode\"] || this.options.locales[\"en\"][\"editNode\"]\n );\n this.manipulationDiv.appendChild(button);\n this._bindElementEvents(button, this.editNode.bind(this));\n }\n\n /**\n *\n * @param {Locale} locale\n * @private\n */\n _createEditEdgeButton(locale) {\n const button = this._createButton(\n \"editEdge\",\n \"vis-edit\",\n locale[\"editEdge\"] || this.options.locales[\"en\"][\"editEdge\"]\n );\n this.manipulationDiv.appendChild(button);\n this._bindElementEvents(button, this.editEdgeMode.bind(this));\n }\n\n /**\n *\n * @param {Locale} locale\n * @private\n */\n _createDeleteButton(locale) {\n let deleteBtnClass;\n if (this.options.rtl) {\n deleteBtnClass = \"vis-delete-rtl\";\n } else {\n deleteBtnClass = \"vis-delete\";\n }\n const button = this._createButton(\n \"delete\",\n deleteBtnClass,\n locale[\"del\"] || this.options.locales[\"en\"][\"del\"]\n );\n this.manipulationDiv.appendChild(button);\n this._bindElementEvents(button, this.deleteSelected.bind(this));\n }\n\n /**\n *\n * @param {Locale} locale\n * @private\n */\n _createBackButton(locale) {\n const button = this._createButton(\n \"back\",\n \"vis-back\",\n locale[\"back\"] || this.options.locales[\"en\"][\"back\"]\n );\n this.manipulationDiv.appendChild(button);\n this._bindElementEvents(button, this.showManipulatorToolbar.bind(this));\n }\n\n /**\n *\n * @param {number|string} id\n * @param {string} className\n * @param {label} label\n * @param {string} labelClassName\n * @returns {HTMLElement}\n * @private\n */\n _createButton(id, className, label, labelClassName = \"vis-label\") {\n this.manipulationDOM[id + \"Div\"] = document.createElement(\"button\");\n this.manipulationDOM[id + \"Div\"].className = \"vis-button \" + className;\n this.manipulationDOM[id + \"Label\"] = document.createElement(\"div\");\n this.manipulationDOM[id + \"Label\"].className = labelClassName;\n this.manipulationDOM[id + \"Label\"].innerText = label;\n this.manipulationDOM[id + \"Div\"].appendChild(\n this.manipulationDOM[id + \"Label\"]\n );\n return this.manipulationDOM[id + \"Div\"];\n }\n\n /**\n *\n * @param {Label} label\n * @private\n */\n _createDescription(label) {\n this.manipulationDOM[\"descriptionLabel\"] = document.createElement(\"div\");\n this.manipulationDOM[\"descriptionLabel\"].className = \"vis-none\";\n this.manipulationDOM[\"descriptionLabel\"].innerText = label;\n this.manipulationDiv.appendChild(this.manipulationDOM[\"descriptionLabel\"]);\n }\n\n // -------------------------- End of DOM functions for buttons ------------------------------//\n\n /**\n * this binds an event until cleanup by the clean functions.\n *\n * @param {Event} event The event\n * @param {Function} newFunction\n * @private\n */\n _temporaryBindEvent(event, newFunction) {\n this.temporaryEventFunctions.push({\n event: event,\n boundFunction: newFunction,\n });\n this.body.emitter.on(event, newFunction);\n }\n\n /**\n * this overrides an UI function until cleanup by the clean function\n *\n * @param {string} UIfunctionName\n * @param {Function} newFunction\n * @private\n */\n _temporaryBindUI(UIfunctionName, newFunction) {\n if (this.body.eventListeners[UIfunctionName] !== undefined) {\n this.temporaryUIFunctions[UIfunctionName] =\n this.body.eventListeners[UIfunctionName];\n this.body.eventListeners[UIfunctionName] = newFunction;\n } else {\n throw new Error(\n \"This UI function does not exist. Typo? You tried: \" +\n UIfunctionName +\n \" possible are: \" +\n JSON.stringify(Object.keys(this.body.eventListeners))\n );\n }\n }\n\n /**\n * Restore the overridden UI functions to their original state.\n *\n * @private\n */\n _unbindTemporaryUIs() {\n for (const functionName in this.temporaryUIFunctions) {\n if (\n Object.prototype.hasOwnProperty.call(\n this.temporaryUIFunctions,\n functionName\n )\n ) {\n this.body.eventListeners[functionName] =\n this.temporaryUIFunctions[functionName];\n delete this.temporaryUIFunctions[functionName];\n }\n }\n this.temporaryUIFunctions = {};\n }\n\n /**\n * Unbind the events created by _temporaryBindEvent\n *\n * @private\n */\n _unbindTemporaryEvents() {\n for (let i = 0; i < this.temporaryEventFunctions.length; i++) {\n const eventName = this.temporaryEventFunctions[i].event;\n const boundFunction = this.temporaryEventFunctions[i].boundFunction;\n this.body.emitter.off(eventName, boundFunction);\n }\n this.temporaryEventFunctions = [];\n }\n\n /**\n * Bind an hammer instance to a DOM element.\n *\n * @param {Element} domElement\n * @param {Function} boundFunction\n */\n _bindElementEvents(domElement, boundFunction) {\n // Bind touch events.\n const hammer = new Hammer(domElement, {});\n onTouch(hammer, boundFunction);\n this._domEventListenerCleanupQueue.push(() => {\n hammer.destroy();\n });\n\n // Bind keyboard events.\n const keyupListener = ({ keyCode, key }) => {\n if (key === \"Enter\" || key === \" \" || keyCode === 13 || keyCode === 32) {\n boundFunction();\n }\n };\n domElement.addEventListener(\"keyup\", keyupListener, false);\n this._domEventListenerCleanupQueue.push(() => {\n domElement.removeEventListener(\"keyup\", keyupListener, false);\n });\n }\n\n /**\n * Neatly clean up temporary edges and nodes\n *\n * @private\n */\n _cleanupTemporaryNodesAndEdges() {\n // _clean temporary edges\n for (let i = 0; i < this.temporaryIds.edges.length; i++) {\n this.body.edges[this.temporaryIds.edges[i]].disconnect();\n delete this.body.edges[this.temporaryIds.edges[i]];\n const indexTempEdge = this.body.edgeIndices.indexOf(\n this.temporaryIds.edges[i]\n );\n if (indexTempEdge !== -1) {\n this.body.edgeIndices.splice(indexTempEdge, 1);\n }\n }\n\n // _clean temporary nodes\n for (let i = 0; i < this.temporaryIds.nodes.length; i++) {\n delete this.body.nodes[this.temporaryIds.nodes[i]];\n const indexTempNode = this.body.nodeIndices.indexOf(\n this.temporaryIds.nodes[i]\n );\n if (indexTempNode !== -1) {\n this.body.nodeIndices.splice(indexTempNode, 1);\n }\n }\n\n this.temporaryIds = { nodes: [], edges: [] };\n }\n\n // ------------------------------------------ EDIT EDGE FUNCTIONS -----------------------------------------//\n\n /**\n * the touch is used to get the position of the initial click\n *\n * @param {Event} event The event\n * @private\n */\n _controlNodeTouch(event) {\n this.selectionHandler.unselectAll();\n this.lastTouch = this.body.functions.getPointer(event.center);\n this.lastTouch.translation = Object.assign({}, this.body.view.translation); // copy the object\n }\n\n /**\n * the drag start is used to mark one of the control nodes as selected.\n *\n * @private\n */\n _controlNodeDragStart() {\n const pointer = this.lastTouch;\n const pointerObj = this.selectionHandler._pointerToPositionObject(pointer);\n const from = this.body.nodes[this.temporaryIds.nodes[0]];\n const to = this.body.nodes[this.temporaryIds.nodes[1]];\n const edge = this.body.edges[this.edgeBeingEditedId];\n this.selectedControlNode = undefined;\n\n const fromSelect = from.isOverlappingWith(pointerObj);\n const toSelect = to.isOverlappingWith(pointerObj);\n\n if (fromSelect === true) {\n this.selectedControlNode = from;\n edge.edgeType.from = from;\n } else if (toSelect === true) {\n this.selectedControlNode = to;\n edge.edgeType.to = to;\n }\n\n // we use the selection to find the node that is being dragged. We explicitly select it here.\n if (this.selectedControlNode !== undefined) {\n this.selectionHandler.selectObject(this.selectedControlNode);\n }\n\n this.body.emitter.emit(\"_redraw\");\n }\n\n /**\n * dragging the control nodes or the canvas\n *\n * @param {Event} event The event\n * @private\n */\n _controlNodeDrag(event) {\n this.body.emitter.emit(\"disablePhysics\");\n const pointer = this.body.functions.getPointer(event.center);\n const pos = this.canvas.DOMtoCanvas(pointer);\n if (this.selectedControlNode !== undefined) {\n this.selectedControlNode.x = pos.x;\n this.selectedControlNode.y = pos.y;\n } else {\n this.interactionHandler.onDrag(event);\n }\n this.body.emitter.emit(\"_redraw\");\n }\n\n /**\n * connecting or restoring the control nodes.\n *\n * @param {Event} event The event\n * @private\n */\n _controlNodeDragEnd(event) {\n const pointer = this.body.functions.getPointer(event.center);\n const pointerObj = this.selectionHandler._pointerToPositionObject(pointer);\n const edge = this.body.edges[this.edgeBeingEditedId];\n // if the node that was dragged is not a control node, return\n if (this.selectedControlNode === undefined) {\n return;\n }\n\n // we use the selection to find the node that is being dragged. We explicitly DEselect the control node here.\n this.selectionHandler.unselectAll();\n const overlappingNodeIds =\n this.selectionHandler._getAllNodesOverlappingWith(pointerObj);\n let node = undefined;\n for (let i = overlappingNodeIds.length - 1; i >= 0; i--) {\n if (overlappingNodeIds[i] !== this.selectedControlNode.id) {\n node = this.body.nodes[overlappingNodeIds[i]];\n break;\n }\n }\n // perform the connection\n if (node !== undefined && this.selectedControlNode !== undefined) {\n if (node.isCluster === true) {\n alert(\n this.options.locales[this.options.locale][\"createEdgeError\"] ||\n this.options.locales[\"en\"][\"createEdgeError\"]\n );\n } else {\n const from = this.body.nodes[this.temporaryIds.nodes[0]];\n if (this.selectedControlNode.id === from.id) {\n this._performEditEdge(node.id, edge.to.id);\n } else {\n this._performEditEdge(edge.from.id, node.id);\n }\n }\n } else {\n edge.updateEdgeType();\n this.body.emitter.emit(\"restorePhysics\");\n }\n\n this.body.emitter.emit(\"_redraw\");\n }\n\n // ------------------------------------ END OF EDIT EDGE FUNCTIONS -----------------------------------------//\n\n // ------------------------------------------- ADD EDGE FUNCTIONS -----------------------------------------//\n /**\n * the function bound to the selection event. It checks if you want to connect a cluster and changes the description\n * to walk the user through the process.\n *\n * @param {Event} event\n * @private\n */\n _handleConnect(event) {\n // check to avoid double fireing of this function.\n if (new Date().valueOf() - this.touchTime > 100) {\n this.lastTouch = this.body.functions.getPointer(event.center);\n this.lastTouch.translation = Object.assign(\n {},\n this.body.view.translation\n ); // copy the object\n\n this.interactionHandler.drag.pointer = this.lastTouch; // Drag pointer is not updated when adding edges\n this.interactionHandler.drag.translation = this.lastTouch.translation;\n\n const pointer = this.lastTouch;\n const node = this.selectionHandler.getNodeAt(pointer);\n\n if (node !== undefined) {\n if (node.isCluster === true) {\n alert(\n this.options.locales[this.options.locale][\"createEdgeError\"] ||\n this.options.locales[\"en\"][\"createEdgeError\"]\n );\n } else {\n // create a node the temporary line can look at\n const targetNode = this._getNewTargetNode(node.x, node.y);\n this.body.nodes[targetNode.id] = targetNode;\n this.body.nodeIndices.push(targetNode.id);\n\n // create a temporary edge\n const connectionEdge = this.body.functions.createEdge({\n id: \"connectionEdge\" + randomUUID(),\n from: node.id,\n to: targetNode.id,\n physics: false,\n smooth: {\n enabled: true,\n type: \"continuous\",\n roundness: 0.5,\n },\n });\n this.body.edges[connectionEdge.id] = connectionEdge;\n this.body.edgeIndices.push(connectionEdge.id);\n\n this.temporaryIds.nodes.push(targetNode.id);\n this.temporaryIds.edges.push(connectionEdge.id);\n }\n }\n this.touchTime = new Date().valueOf();\n }\n }\n\n /**\n *\n * @param {Event} event\n * @private\n */\n _dragControlNode(event) {\n const pointer = this.body.functions.getPointer(event.center);\n\n const pointerObj = this.selectionHandler._pointerToPositionObject(pointer);\n // remember the edge id\n let connectFromId = undefined;\n if (this.temporaryIds.edges[0] !== undefined) {\n connectFromId = this.body.edges[this.temporaryIds.edges[0]].fromId;\n }\n\n // get the overlapping node but NOT the temporary node;\n const overlappingNodeIds =\n this.selectionHandler._getAllNodesOverlappingWith(pointerObj);\n let node = undefined;\n for (let i = overlappingNodeIds.length - 1; i >= 0; i--) {\n // if the node id is NOT a temporary node, accept the node.\n if (this.temporaryIds.nodes.indexOf(overlappingNodeIds[i]) === -1) {\n node = this.body.nodes[overlappingNodeIds[i]];\n break;\n }\n }\n\n event.controlEdge = { from: connectFromId, to: node ? node.id : undefined };\n this.selectionHandler.generateClickEvent(\n \"controlNodeDragging\",\n event,\n pointer\n );\n\n if (this.temporaryIds.nodes[0] !== undefined) {\n const targetNode = this.body.nodes[this.temporaryIds.nodes[0]]; // there is only one temp node in the add edge mode.\n targetNode.x = this.canvas._XconvertDOMtoCanvas(pointer.x);\n targetNode.y = this.canvas._YconvertDOMtoCanvas(pointer.y);\n this.body.emitter.emit(\"_redraw\");\n } else {\n this.interactionHandler.onDrag(event);\n }\n }\n\n /**\n * Connect the new edge to the target if one exists, otherwise remove temp line\n *\n * @param {Event} event The event\n * @private\n */\n _finishConnect(event) {\n const pointer = this.body.functions.getPointer(event.center);\n const pointerObj = this.selectionHandler._pointerToPositionObject(pointer);\n\n // remember the edge id\n let connectFromId = undefined;\n if (this.temporaryIds.edges[0] !== undefined) {\n connectFromId = this.body.edges[this.temporaryIds.edges[0]].fromId;\n }\n\n // get the overlapping node but NOT the temporary node;\n const overlappingNodeIds =\n this.selectionHandler._getAllNodesOverlappingWith(pointerObj);\n let node = undefined;\n for (let i = overlappingNodeIds.length - 1; i >= 0; i--) {\n // if the node id is NOT a temporary node, accept the node.\n if (this.temporaryIds.nodes.indexOf(overlappingNodeIds[i]) === -1) {\n node = this.body.nodes[overlappingNodeIds[i]];\n break;\n }\n }\n\n // clean temporary nodes and edges.\n this._cleanupTemporaryNodesAndEdges();\n\n // perform the connection\n if (node !== undefined) {\n if (node.isCluster === true) {\n alert(\n this.options.locales[this.options.locale][\"createEdgeError\"] ||\n this.options.locales[\"en\"][\"createEdgeError\"]\n );\n } else {\n if (\n this.body.nodes[connectFromId] !== undefined &&\n this.body.nodes[node.id] !== undefined\n ) {\n this._performAddEdge(connectFromId, node.id);\n }\n }\n }\n\n event.controlEdge = { from: connectFromId, to: node ? node.id : undefined };\n this.selectionHandler.generateClickEvent(\n \"controlNodeDragEnd\",\n event,\n pointer\n );\n\n // No need to do _generateclickevent('dragEnd') here, the regular dragEnd event fires.\n this.body.emitter.emit(\"_redraw\");\n }\n\n /**\n *\n * @param {Event} event\n * @private\n */\n _dragStartEdge(event) {\n const pointer = this.lastTouch;\n this.selectionHandler.generateClickEvent(\n \"dragStart\",\n event,\n pointer,\n undefined,\n true\n );\n }\n\n // --------------------------------------- END OF ADD EDGE FUNCTIONS -------------------------------------//\n\n // ------------------------------ Performing all the actual data manipulation ------------------------//\n\n /**\n * Adds a node on the specified location\n *\n * @param {object} clickData\n * @private\n */\n _performAddNode(clickData) {\n const defaultData = {\n id: randomUUID(),\n x: clickData.pointer.canvas.x,\n y: clickData.pointer.canvas.y,\n label: \"new\",\n };\n\n if (typeof this.options.addNode === \"function\") {\n if (this.options.addNode.length === 2) {\n this.options.addNode(defaultData, (finalizedData) => {\n if (\n finalizedData !== null &&\n finalizedData !== undefined &&\n this.inMode === \"addNode\"\n ) {\n // if for whatever reason the mode has changes (due to dataset change) disregard the callback\n this.body.data.nodes.getDataSet().add(finalizedData);\n }\n this.showManipulatorToolbar();\n });\n } else {\n this.showManipulatorToolbar();\n throw new Error(\n \"The function for add does not support two arguments (data,callback)\"\n );\n }\n } else {\n this.body.data.nodes.getDataSet().add(defaultData);\n this.showManipulatorToolbar();\n }\n }\n\n /**\n * connect two nodes with a new edge.\n *\n * @param {Node.id} sourceNodeId\n * @param {Node.id} targetNodeId\n * @private\n */\n _performAddEdge(sourceNodeId, targetNodeId) {\n const defaultData = { from: sourceNodeId, to: targetNodeId };\n if (typeof this.options.addEdge === \"function\") {\n if (this.options.addEdge.length === 2) {\n this.options.addEdge(defaultData, (finalizedData) => {\n if (\n finalizedData !== null &&\n finalizedData !== undefined &&\n this.inMode === \"addEdge\"\n ) {\n // if for whatever reason the mode has changes (due to dataset change) disregard the callback\n this.body.data.edges.getDataSet().add(finalizedData);\n this.selectionHandler.unselectAll();\n this.showManipulatorToolbar();\n }\n });\n } else {\n throw new Error(\n \"The function for connect does not support two arguments (data,callback)\"\n );\n }\n } else {\n this.body.data.edges.getDataSet().add(defaultData);\n this.selectionHandler.unselectAll();\n this.showManipulatorToolbar();\n }\n }\n\n /**\n * connect two nodes with a new edge.\n *\n * @param {Node.id} sourceNodeId\n * @param {Node.id} targetNodeId\n * @private\n */\n _performEditEdge(sourceNodeId, targetNodeId) {\n const defaultData = {\n id: this.edgeBeingEditedId,\n from: sourceNodeId,\n to: targetNodeId,\n label: this.body.data.edges.get(this.edgeBeingEditedId).label,\n };\n let eeFunct = this.options.editEdge;\n if (typeof eeFunct === \"object\") {\n eeFunct = eeFunct.editWithoutDrag;\n }\n if (typeof eeFunct === \"function\") {\n if (eeFunct.length === 2) {\n eeFunct(defaultData, (finalizedData) => {\n if (\n finalizedData === null ||\n finalizedData === undefined ||\n this.inMode !== \"editEdge\"\n ) {\n // if for whatever reason the mode has changes (due to dataset change) disregard the callback) {\n this.body.edges[defaultData.id].updateEdgeType();\n this.body.emitter.emit(\"_redraw\");\n this.showManipulatorToolbar();\n } else {\n this.body.data.edges.getDataSet().update(finalizedData);\n this.selectionHandler.unselectAll();\n this.showManipulatorToolbar();\n }\n });\n } else {\n throw new Error(\n \"The function for edit does not support two arguments (data, callback)\"\n );\n }\n } else {\n this.body.data.edges.getDataSet().update(defaultData);\n this.selectionHandler.unselectAll();\n this.showManipulatorToolbar();\n }\n }\n}\n\nexport default ManipulationSystem;\n","import {\n ConfiguratorConfig,\n ConfiguratorHideOption,\n OptionsConfig,\n} from \"vis-util/esnext\";\n\n/**\n * This object contains all possible options. It will check if the types are correct, if required if the option is one\n * of the allowed values.\n *\n * __any__ means that the name of the property does not matter.\n * __type__ is a required field for all objects and contains the allowed types of all objects\n */\nconst string = \"string\";\nconst bool = \"boolean\";\nconst number = \"number\";\nconst array = \"array\";\nconst object = \"object\"; // should only be in a __type__ property\nconst dom = \"dom\";\nconst any = \"any\";\n\n// List of endpoints\nconst endPoints = [\n \"arrow\",\n \"bar\",\n \"box\",\n \"circle\",\n \"crow\",\n \"curve\",\n \"diamond\",\n \"image\",\n \"inv_curve\",\n \"inv_triangle\",\n \"triangle\",\n \"vee\",\n];\n\n/* eslint-disable @typescript-eslint/naming-convention -- The __*__ format is used to prevent collisions with actual option names. */\nconst nodeOptions: OptionsConfig = {\n borderWidth: { number },\n borderWidthSelected: { number, undefined: \"undefined\" },\n brokenImage: { string, undefined: \"undefined\" },\n chosen: {\n label: { boolean: bool, function: \"function\" },\n node: { boolean: bool, function: \"function\" },\n __type__: { object, boolean: bool },\n },\n color: {\n border: { string },\n background: { string },\n highlight: {\n border: { string },\n background: { string },\n __type__: { object, string },\n },\n hover: {\n border: { string },\n background: { string },\n __type__: { object, string },\n },\n __type__: { object, string },\n },\n opacity: { number, undefined: \"undefined\" },\n fixed: {\n x: { boolean: bool },\n y: { boolean: bool },\n __type__: { object, boolean: bool },\n },\n font: {\n align: { string },\n color: { string },\n size: { number }, // px\n face: { string },\n background: { string },\n strokeWidth: { number }, // px\n strokeColor: { string },\n vadjust: { number },\n multi: { boolean: bool, string },\n bold: {\n color: { string },\n size: { number }, // px\n face: { string },\n mod: { string },\n vadjust: { number },\n __type__: { object, string },\n },\n boldital: {\n color: { string },\n size: { number }, // px\n face: { string },\n mod: { string },\n vadjust: { number },\n __type__: { object, string },\n },\n ital: {\n color: { string },\n size: { number }, // px\n face: { string },\n mod: { string },\n vadjust: { number },\n __type__: { object, string },\n },\n mono: {\n color: { string },\n size: { number }, // px\n face: { string },\n mod: { string },\n vadjust: { number },\n __type__: { object, string },\n },\n __type__: { object, string },\n },\n group: { string, number, undefined: \"undefined\" },\n heightConstraint: {\n minimum: { number },\n valign: { string },\n __type__: { object, boolean: bool, number },\n },\n hidden: { boolean: bool },\n icon: {\n face: { string },\n code: { string }, //'\\uf007',\n size: { number }, //50,\n color: { string },\n weight: { string, number },\n __type__: { object },\n },\n id: { string, number },\n image: {\n selected: { string, undefined: \"undefined\" }, // --> URL\n unselected: { string, undefined: \"undefined\" }, // --> URL\n __type__: { object, string },\n },\n imagePadding: {\n top: { number },\n right: { number },\n bottom: { number },\n left: { number },\n __type__: { object, number },\n },\n label: { string, undefined: \"undefined\" },\n labelHighlightBold: { boolean: bool },\n level: { number, undefined: \"undefined\" },\n margin: {\n top: { number },\n right: { number },\n bottom: { number },\n left: { number },\n __type__: { object, number },\n },\n mass: { number },\n physics: { boolean: bool },\n scaling: {\n min: { number },\n max: { number },\n label: {\n enabled: { boolean: bool },\n min: { number },\n max: { number },\n maxVisible: { number },\n drawThreshold: { number },\n __type__: { object, boolean: bool },\n },\n customScalingFunction: { function: \"function\" },\n __type__: { object },\n },\n shadow: {\n enabled: { boolean: bool },\n color: { string },\n size: { number },\n x: { number },\n y: { number },\n __type__: { object, boolean: bool },\n },\n shape: {\n string: [\n \"custom\",\n \"ellipse\",\n \"circle\",\n \"database\",\n \"box\",\n \"text\",\n \"image\",\n \"circularImage\",\n \"diamond\",\n \"dot\",\n \"star\",\n \"triangle\",\n \"triangleDown\",\n \"square\",\n \"icon\",\n \"hexagon\",\n ],\n },\n ctxRenderer: { function: \"function\" },\n shapeProperties: {\n borderDashes: { boolean: bool, array },\n borderRadius: { number },\n interpolation: { boolean: bool },\n useImageSize: { boolean: bool },\n useBorderWithImage: { boolean: bool },\n coordinateOrigin: { string: [\"center\", \"top-left\"] },\n __type__: { object },\n },\n size: { number },\n title: { string, dom, undefined: \"undefined\" },\n value: { number, undefined: \"undefined\" },\n widthConstraint: {\n minimum: { number },\n maximum: { number },\n __type__: { object, boolean: bool, number },\n },\n x: { number },\n y: { number },\n __type__: { object },\n};\nconst allOptions: OptionsConfig = {\n configure: {\n enabled: { boolean: bool },\n filter: { boolean: bool, string, array, function: \"function\" },\n container: { dom },\n showButton: { boolean: bool },\n __type__: { object, boolean: bool, string, array, function: \"function\" },\n },\n edges: {\n arrows: {\n to: {\n enabled: { boolean: bool },\n scaleFactor: { number },\n type: { string: endPoints },\n imageHeight: { number },\n imageWidth: { number },\n src: { string },\n __type__: { object, boolean: bool },\n },\n middle: {\n enabled: { boolean: bool },\n scaleFactor: { number },\n type: { string: endPoints },\n imageWidth: { number },\n imageHeight: { number },\n src: { string },\n __type__: { object, boolean: bool },\n },\n from: {\n enabled: { boolean: bool },\n scaleFactor: { number },\n type: { string: endPoints },\n imageWidth: { number },\n imageHeight: { number },\n src: { string },\n __type__: { object, boolean: bool },\n },\n __type__: { string: [\"from\", \"to\", \"middle\"], object },\n },\n endPointOffset: {\n from: {\n number: number,\n },\n to: {\n number: number,\n },\n __type__: {\n object: object,\n number: number,\n },\n },\n arrowStrikethrough: { boolean: bool },\n background: {\n enabled: { boolean: bool },\n color: { string },\n size: { number },\n dashes: { boolean: bool, array },\n __type__: { object, boolean: bool },\n },\n chosen: {\n label: { boolean: bool, function: \"function\" },\n edge: { boolean: bool, function: \"function\" },\n __type__: { object, boolean: bool },\n },\n color: {\n color: { string },\n highlight: { string },\n hover: { string },\n inherit: { string: [\"from\", \"to\", \"both\"], boolean: bool },\n opacity: { number },\n __type__: { object, string },\n },\n dashes: { boolean: bool, array },\n font: {\n color: { string },\n size: { number }, // px\n face: { string },\n background: { string },\n strokeWidth: { number }, // px\n strokeColor: { string },\n align: { string: [\"horizontal\", \"top\", \"middle\", \"bottom\"] },\n vadjust: { number },\n multi: { boolean: bool, string },\n bold: {\n color: { string },\n size: { number }, // px\n face: { string },\n mod: { string },\n vadjust: { number },\n __type__: { object, string },\n },\n boldital: {\n color: { string },\n size: { number }, // px\n face: { string },\n mod: { string },\n vadjust: { number },\n __type__: { object, string },\n },\n ital: {\n color: { string },\n size: { number }, // px\n face: { string },\n mod: { string },\n vadjust: { number },\n __type__: { object, string },\n },\n mono: {\n color: { string },\n size: { number }, // px\n face: { string },\n mod: { string },\n vadjust: { number },\n __type__: { object, string },\n },\n __type__: { object, string },\n },\n hidden: { boolean: bool },\n hoverWidth: { function: \"function\", number },\n label: { string, undefined: \"undefined\" },\n labelHighlightBold: { boolean: bool },\n length: { number, undefined: \"undefined\" },\n physics: { boolean: bool },\n scaling: {\n min: { number },\n max: { number },\n label: {\n enabled: { boolean: bool },\n min: { number },\n max: { number },\n maxVisible: { number },\n drawThreshold: { number },\n __type__: { object, boolean: bool },\n },\n customScalingFunction: { function: \"function\" },\n __type__: { object },\n },\n selectionWidth: { function: \"function\", number },\n selfReferenceSize: { number },\n selfReference: {\n size: { number },\n angle: { number },\n renderBehindTheNode: { boolean: bool },\n __type__: { object },\n },\n shadow: {\n enabled: { boolean: bool },\n color: { string },\n size: { number },\n x: { number },\n y: { number },\n __type__: { object, boolean: bool },\n },\n smooth: {\n enabled: { boolean: bool },\n type: {\n string: [\n \"dynamic\",\n \"continuous\",\n \"discrete\",\n \"diagonalCross\",\n \"straightCross\",\n \"horizontal\",\n \"vertical\",\n \"curvedCW\",\n \"curvedCCW\",\n \"cubicBezier\",\n ],\n },\n roundness: { number },\n forceDirection: {\n string: [\"horizontal\", \"vertical\", \"none\"],\n boolean: bool,\n },\n __type__: { object, boolean: bool },\n },\n title: { string, undefined: \"undefined\" },\n width: { number },\n widthConstraint: {\n maximum: { number },\n __type__: { object, boolean: bool, number },\n },\n value: { number, undefined: \"undefined\" },\n __type__: { object },\n },\n groups: {\n useDefaultGroups: { boolean: bool },\n __any__: nodeOptions,\n __type__: { object },\n },\n interaction: {\n dragNodes: { boolean: bool },\n dragView: { boolean: bool },\n hideEdgesOnDrag: { boolean: bool },\n hideEdgesOnZoom: { boolean: bool },\n hideNodesOnDrag: { boolean: bool },\n hover: { boolean: bool },\n keyboard: {\n enabled: { boolean: bool },\n speed: {\n x: { number },\n y: { number },\n zoom: { number },\n __type__: { object },\n },\n bindToWindow: { boolean: bool },\n autoFocus: { boolean: bool },\n __type__: { object, boolean: bool },\n },\n multiselect: { boolean: bool },\n navigationButtons: { boolean: bool },\n selectable: { boolean: bool },\n selectConnectedEdges: { boolean: bool },\n hoverConnectedEdges: { boolean: bool },\n tooltipDelay: { number },\n zoomView: { boolean: bool },\n zoomSpeed: { number },\n __type__: { object },\n },\n layout: {\n randomSeed: { undefined: \"undefined\", number, string },\n improvedLayout: { boolean: bool },\n clusterThreshold: { number },\n hierarchical: {\n enabled: { boolean: bool },\n levelSeparation: { number },\n nodeSpacing: { number },\n treeSpacing: { number },\n blockShifting: { boolean: bool },\n edgeMinimization: { boolean: bool },\n parentCentralization: { boolean: bool },\n direction: { string: [\"UD\", \"DU\", \"LR\", \"RL\"] }, // UD, DU, LR, RL\n sortMethod: { string: [\"hubsize\", \"directed\"] }, // hubsize, directed\n shakeTowards: { string: [\"leaves\", \"roots\"] }, // leaves, roots\n __type__: { object, boolean: bool },\n },\n __type__: { object },\n },\n manipulation: {\n enabled: { boolean: bool },\n initiallyActive: { boolean: bool },\n addNode: { boolean: bool, function: \"function\" },\n addEdge: { boolean: bool, function: \"function\" },\n editNode: { function: \"function\" },\n editEdge: {\n editWithoutDrag: { function: \"function\" },\n __type__: { object, boolean: bool, function: \"function\" },\n },\n deleteNode: { boolean: bool, function: \"function\" },\n deleteEdge: { boolean: bool, function: \"function\" },\n controlNodeStyle: nodeOptions,\n __type__: { object, boolean: bool },\n },\n nodes: nodeOptions,\n physics: {\n enabled: { boolean: bool },\n barnesHut: {\n theta: { number },\n gravitationalConstant: { number },\n centralGravity: { number },\n springLength: { number },\n springConstant: { number },\n damping: { number },\n avoidOverlap: { number },\n __type__: { object },\n },\n forceAtlas2Based: {\n theta: { number },\n gravitationalConstant: { number },\n centralGravity: { number },\n springLength: { number },\n springConstant: { number },\n damping: { number },\n avoidOverlap: { number },\n __type__: { object },\n },\n repulsion: {\n centralGravity: { number },\n springLength: { number },\n springConstant: { number },\n nodeDistance: { number },\n damping: { number },\n __type__: { object },\n },\n hierarchicalRepulsion: {\n centralGravity: { number },\n springLength: { number },\n springConstant: { number },\n nodeDistance: { number },\n damping: { number },\n avoidOverlap: { number },\n __type__: { object },\n },\n maxVelocity: { number },\n minVelocity: { number }, // px/s\n solver: {\n string: [\n \"barnesHut\",\n \"repulsion\",\n \"hierarchicalRepulsion\",\n \"forceAtlas2Based\",\n ],\n },\n stabilization: {\n enabled: { boolean: bool },\n iterations: { number }, // maximum number of iteration to stabilize\n updateInterval: { number },\n onlyDynamicEdges: { boolean: bool },\n fit: { boolean: bool },\n __type__: { object, boolean: bool },\n },\n timestep: { number },\n adaptiveTimestep: { boolean: bool },\n wind: {\n x: { number },\n y: { number },\n __type__: { object },\n },\n __type__: { object, boolean: bool },\n },\n\n //globals :\n autoResize: { boolean: bool },\n clickToUse: { boolean: bool },\n locale: { string },\n locales: {\n __any__: { any },\n __type__: { object },\n },\n height: { string },\n width: { string },\n __type__: { object },\n};\n/* eslint-enable @typescript-eslint/naming-convention */\n\n/**\n * This provides ranges, initial values, steps and dropdown menu choices for the\n * configuration.\n *\n * @remarks\n * Checkbox: `boolean`\n * The value supllied will be used as the initial value.\n *\n * Text field: `string`\n * The passed text will be used as the initial value. Any text will be\n * accepted afterwards.\n *\n * Number range: `[number, number, number, number]`\n * The meanings are `[initial value, min, max, step]`.\n *\n * Dropdown: `[Exclude, ...(string | number | boolean)[]]`\n * Translations for people with poor understanding of TypeScript: the first\n * value always has to be a string but never `\"color\"`, the rest can be any\n * combination of strings, numbers and booleans.\n *\n * Color picker: `[\"color\", string]`\n * The first value says this will be a color picker not a dropdown menu. The\n * next value is the initial color.\n */\nconst configureOptions: ConfiguratorConfig = {\n nodes: {\n borderWidth: [1, 0, 10, 1],\n borderWidthSelected: [2, 0, 10, 1],\n color: {\n border: [\"color\", \"#2B7CE9\"],\n background: [\"color\", \"#97C2FC\"],\n highlight: {\n border: [\"color\", \"#2B7CE9\"],\n background: [\"color\", \"#D2E5FF\"],\n },\n hover: {\n border: [\"color\", \"#2B7CE9\"],\n background: [\"color\", \"#D2E5FF\"],\n },\n },\n opacity: [0, 0, 1, 0.1],\n fixed: {\n x: false,\n y: false,\n },\n font: {\n color: [\"color\", \"#343434\"],\n size: [14, 0, 100, 1], // px\n face: [\"arial\", \"verdana\", \"tahoma\"],\n background: [\"color\", \"none\"],\n strokeWidth: [0, 0, 50, 1], // px\n strokeColor: [\"color\", \"#ffffff\"],\n },\n //group: 'string',\n hidden: false,\n labelHighlightBold: true,\n //icon: {\n // face: 'string', //'FontAwesome',\n // code: 'string', //'\\uf007',\n // size: [50, 0, 200, 1], //50,\n // color: ['color','#2B7CE9'] //'#aa00ff'\n //},\n //image: 'string', // --> URL\n physics: true,\n scaling: {\n min: [10, 0, 200, 1],\n max: [30, 0, 200, 1],\n label: {\n enabled: false,\n min: [14, 0, 200, 1],\n max: [30, 0, 200, 1],\n maxVisible: [30, 0, 200, 1],\n drawThreshold: [5, 0, 20, 1],\n },\n },\n shadow: {\n enabled: false,\n color: \"rgba(0,0,0,0.5)\",\n size: [10, 0, 20, 1],\n x: [5, -30, 30, 1],\n y: [5, -30, 30, 1],\n },\n shape: [\n \"ellipse\",\n \"box\",\n \"circle\",\n \"database\",\n \"diamond\",\n \"dot\",\n \"square\",\n \"star\",\n \"text\",\n \"triangle\",\n \"triangleDown\",\n \"hexagon\",\n ],\n shapeProperties: {\n borderDashes: false,\n borderRadius: [6, 0, 20, 1],\n interpolation: true,\n useImageSize: false,\n },\n size: [25, 0, 200, 1],\n },\n edges: {\n arrows: {\n to: { enabled: false, scaleFactor: [1, 0, 3, 0.05], type: \"arrow\" },\n middle: { enabled: false, scaleFactor: [1, 0, 3, 0.05], type: \"arrow\" },\n from: { enabled: false, scaleFactor: [1, 0, 3, 0.05], type: \"arrow\" },\n },\n endPointOffset: {\n from: [0, -10, 10, 1],\n to: [0, -10, 10, 1],\n },\n arrowStrikethrough: true,\n color: {\n color: [\"color\", \"#848484\"],\n highlight: [\"color\", \"#848484\"],\n hover: [\"color\", \"#848484\"],\n inherit: [\"from\", \"to\", \"both\", true, false],\n opacity: [1, 0, 1, 0.05],\n },\n dashes: false,\n font: {\n color: [\"color\", \"#343434\"],\n size: [14, 0, 100, 1], // px\n face: [\"arial\", \"verdana\", \"tahoma\"],\n background: [\"color\", \"none\"],\n strokeWidth: [2, 0, 50, 1], // px\n strokeColor: [\"color\", \"#ffffff\"],\n align: [\"horizontal\", \"top\", \"middle\", \"bottom\"],\n },\n hidden: false,\n hoverWidth: [1.5, 0, 5, 0.1],\n labelHighlightBold: true,\n physics: true,\n scaling: {\n min: [1, 0, 100, 1],\n max: [15, 0, 100, 1],\n label: {\n enabled: true,\n min: [14, 0, 200, 1],\n max: [30, 0, 200, 1],\n maxVisible: [30, 0, 200, 1],\n drawThreshold: [5, 0, 20, 1],\n },\n },\n selectionWidth: [1.5, 0, 5, 0.1],\n selfReferenceSize: [20, 0, 200, 1],\n selfReference: {\n size: [20, 0, 200, 1],\n angle: [Math.PI / 2, -6 * Math.PI, 6 * Math.PI, Math.PI / 8],\n renderBehindTheNode: true,\n },\n shadow: {\n enabled: false,\n color: \"rgba(0,0,0,0.5)\",\n size: [10, 0, 20, 1],\n x: [5, -30, 30, 1],\n y: [5, -30, 30, 1],\n },\n smooth: {\n enabled: true,\n type: [\n \"dynamic\",\n \"continuous\",\n \"discrete\",\n \"diagonalCross\",\n \"straightCross\",\n \"horizontal\",\n \"vertical\",\n \"curvedCW\",\n \"curvedCCW\",\n \"cubicBezier\",\n ],\n forceDirection: [\"horizontal\", \"vertical\", \"none\"],\n roundness: [0.5, 0, 1, 0.05],\n },\n width: [1, 0, 30, 1],\n },\n layout: {\n //randomSeed: [0, 0, 500, 1],\n //improvedLayout: true,\n hierarchical: {\n enabled: false,\n levelSeparation: [150, 20, 500, 5],\n nodeSpacing: [100, 20, 500, 5],\n treeSpacing: [200, 20, 500, 5],\n blockShifting: true,\n edgeMinimization: true,\n parentCentralization: true,\n direction: [\"UD\", \"DU\", \"LR\", \"RL\"], // UD, DU, LR, RL\n sortMethod: [\"hubsize\", \"directed\"], // hubsize, directed\n shakeTowards: [\"leaves\", \"roots\"], // leaves, roots\n },\n },\n interaction: {\n dragNodes: true,\n dragView: true,\n hideEdgesOnDrag: false,\n hideEdgesOnZoom: false,\n hideNodesOnDrag: false,\n hover: false,\n keyboard: {\n enabled: false,\n speed: {\n x: [10, 0, 40, 1],\n y: [10, 0, 40, 1],\n zoom: [0.02, 0, 0.1, 0.005],\n },\n bindToWindow: true,\n autoFocus: true,\n },\n multiselect: false,\n navigationButtons: false,\n selectable: true,\n selectConnectedEdges: true,\n hoverConnectedEdges: true,\n tooltipDelay: [300, 0, 1000, 25],\n zoomView: true,\n zoomSpeed: [1, 0.1, 2, 0.1],\n },\n manipulation: {\n enabled: false,\n initiallyActive: false,\n },\n physics: {\n enabled: true,\n barnesHut: {\n theta: [0.5, 0.1, 1, 0.05],\n gravitationalConstant: [-2000, -30000, 0, 50],\n centralGravity: [0.3, 0, 10, 0.05],\n springLength: [95, 0, 500, 5],\n springConstant: [0.04, 0, 1.2, 0.005],\n damping: [0.09, 0, 1, 0.01],\n avoidOverlap: [0, 0, 1, 0.01],\n },\n forceAtlas2Based: {\n theta: [0.5, 0.1, 1, 0.05],\n gravitationalConstant: [-50, -500, 0, 1],\n centralGravity: [0.01, 0, 1, 0.005],\n springLength: [95, 0, 500, 5],\n springConstant: [0.08, 0, 1.2, 0.005],\n damping: [0.4, 0, 1, 0.01],\n avoidOverlap: [0, 0, 1, 0.01],\n },\n repulsion: {\n centralGravity: [0.2, 0, 10, 0.05],\n springLength: [200, 0, 500, 5],\n springConstant: [0.05, 0, 1.2, 0.005],\n nodeDistance: [100, 0, 500, 5],\n damping: [0.09, 0, 1, 0.01],\n },\n hierarchicalRepulsion: {\n centralGravity: [0.2, 0, 10, 0.05],\n springLength: [100, 0, 500, 5],\n springConstant: [0.01, 0, 1.2, 0.005],\n nodeDistance: [120, 0, 500, 5],\n damping: [0.09, 0, 1, 0.01],\n avoidOverlap: [0, 0, 1, 0.01],\n },\n maxVelocity: [50, 0, 150, 1],\n minVelocity: [0.1, 0.01, 0.5, 0.01],\n solver: [\n \"barnesHut\",\n \"forceAtlas2Based\",\n \"repulsion\",\n \"hierarchicalRepulsion\",\n ],\n timestep: [0.5, 0.01, 1, 0.01],\n wind: {\n x: [0, -10, 10, 0.1],\n y: [0, -10, 10, 0.1],\n },\n //adaptiveTimestep: true\n },\n} as const;\n\nexport const configuratorHideOption: ConfiguratorHideOption = (\n parentPath,\n optionName,\n options\n): boolean => {\n if (\n parentPath.includes(\"physics\") &&\n (configureOptions as any).physics.solver.includes(optionName) &&\n options.physics.solver !== optionName &&\n optionName !== \"wind\"\n ) {\n return true;\n }\n\n return false;\n};\n\nexport { allOptions, configureOptions };\n","/**\n * The Floyd–Warshall algorithm is an algorithm for finding shortest paths in\n * a weighted graph with positive or negative edge weights (but with no negative\n * cycles). - https://en.wikipedia.org/wiki/Floyd–Warshall_algorithm\n */\nclass FloydWarshall {\n /**\n * @ignore\n */\n constructor() {}\n\n /**\n *\n * @param {object} body\n * @param {Array.} nodesArray\n * @param {Array.} edgesArray\n * @returns {{}}\n */\n getDistances(body, nodesArray, edgesArray) {\n const D_matrix = {};\n const edges = body.edges;\n\n // prepare matrix with large numbers\n for (let i = 0; i < nodesArray.length; i++) {\n const node = nodesArray[i];\n const cell = {};\n D_matrix[node] = cell;\n for (let j = 0; j < nodesArray.length; j++) {\n cell[nodesArray[j]] = i == j ? 0 : 1e9;\n }\n }\n\n // put the weights for the edges in. This assumes unidirectionality.\n for (let i = 0; i < edgesArray.length; i++) {\n const edge = edges[edgesArray[i]];\n // edge has to be connected if it counts to the distances. If it is connected to inner clusters it will crash so we also check if it is in the D_matrix\n if (\n edge.connected === true &&\n D_matrix[edge.fromId] !== undefined &&\n D_matrix[edge.toId] !== undefined\n ) {\n D_matrix[edge.fromId][edge.toId] = 1;\n D_matrix[edge.toId][edge.fromId] = 1;\n }\n }\n\n const nodeCount = nodesArray.length;\n\n // Adapted FloydWarshall based on unidirectionality to greatly reduce complexity.\n for (let k = 0; k < nodeCount; k++) {\n const knode = nodesArray[k];\n const kcolm = D_matrix[knode];\n for (let i = 0; i < nodeCount - 1; i++) {\n const inode = nodesArray[i];\n const icolm = D_matrix[inode];\n for (let j = i + 1; j < nodeCount; j++) {\n const jnode = nodesArray[j];\n const jcolm = D_matrix[jnode];\n\n const val = Math.min(icolm[jnode], icolm[knode] + kcolm[jnode]);\n icolm[jnode] = val;\n jcolm[inode] = val;\n }\n }\n }\n\n return D_matrix;\n }\n}\n\nexport default FloydWarshall;\n","// distance finding algorithm\nimport FloydWarshall from \"./components/algorithms/FloydWarshall.js\";\n\n/**\n * KamadaKawai positions the nodes initially based on\n *\n * \"AN ALGORITHM FOR DRAWING GENERAL UNDIRECTED GRAPHS\"\n * -- Tomihisa KAMADA and Satoru KAWAI in 1989\n *\n * Possible optimizations in the distance calculation can be implemented.\n */\nclass KamadaKawai {\n /**\n * @param {object} body\n * @param {number} edgeLength\n * @param {number} edgeStrength\n */\n constructor(body, edgeLength, edgeStrength) {\n this.body = body;\n this.springLength = edgeLength;\n this.springConstant = edgeStrength;\n this.distanceSolver = new FloydWarshall();\n }\n\n /**\n * Not sure if needed but can be used to update the spring length and spring constant\n *\n * @param {object} options\n */\n setOptions(options) {\n if (options) {\n if (options.springLength) {\n this.springLength = options.springLength;\n }\n if (options.springConstant) {\n this.springConstant = options.springConstant;\n }\n }\n }\n\n /**\n * Position the system\n *\n * @param {Array.} nodesArray\n * @param {Array.} edgesArray\n * @param {boolean} [ignoreClusters=false]\n */\n solve(nodesArray, edgesArray, ignoreClusters = false) {\n // get distance matrix\n const D_matrix = this.distanceSolver.getDistances(\n this.body,\n nodesArray,\n edgesArray\n ); // distance matrix\n\n // get the L Matrix\n this._createL_matrix(D_matrix);\n\n // get the K Matrix\n this._createK_matrix(D_matrix);\n\n // initial E Matrix\n this._createE_matrix();\n\n // calculate positions\n const threshold = 0.01;\n const innerThreshold = 1;\n let iterations = 0;\n const maxIterations = Math.max(\n 1000,\n Math.min(10 * this.body.nodeIndices.length, 6000)\n );\n const maxInnerIterations = 5;\n\n let maxEnergy = 1e9;\n let highE_nodeId = 0,\n dE_dx = 0,\n dE_dy = 0,\n delta_m = 0,\n subIterations = 0;\n\n while (maxEnergy > threshold && iterations < maxIterations) {\n iterations += 1;\n [highE_nodeId, maxEnergy, dE_dx, dE_dy] =\n this._getHighestEnergyNode(ignoreClusters);\n delta_m = maxEnergy;\n subIterations = 0;\n while (delta_m > innerThreshold && subIterations < maxInnerIterations) {\n subIterations += 1;\n this._moveNode(highE_nodeId, dE_dx, dE_dy);\n [delta_m, dE_dx, dE_dy] = this._getEnergy(highE_nodeId);\n }\n }\n }\n\n /**\n * get the node with the highest energy\n *\n * @param {boolean} ignoreClusters\n * @returns {number[]}\n * @private\n */\n _getHighestEnergyNode(ignoreClusters) {\n const nodesArray = this.body.nodeIndices;\n const nodes = this.body.nodes;\n let maxEnergy = 0;\n let maxEnergyNodeId = nodesArray[0];\n let dE_dx_max = 0,\n dE_dy_max = 0;\n\n for (let nodeIdx = 0; nodeIdx < nodesArray.length; nodeIdx++) {\n const m = nodesArray[nodeIdx];\n // by not evaluating nodes with predefined positions we should only move nodes that have no positions.\n if (\n nodes[m].predefinedPosition !== true ||\n (nodes[m].isCluster === true && ignoreClusters === true) ||\n nodes[m].options.fixed.x !== true ||\n nodes[m].options.fixed.y !== true\n ) {\n const [delta_m, dE_dx, dE_dy] = this._getEnergy(m);\n if (maxEnergy < delta_m) {\n maxEnergy = delta_m;\n maxEnergyNodeId = m;\n dE_dx_max = dE_dx;\n dE_dy_max = dE_dy;\n }\n }\n }\n\n return [maxEnergyNodeId, maxEnergy, dE_dx_max, dE_dy_max];\n }\n\n /**\n * calculate the energy of a single node\n *\n * @param {Node.id} m\n * @returns {number[]}\n * @private\n */\n _getEnergy(m) {\n const [dE_dx, dE_dy] = this.E_sums[m];\n const delta_m = Math.sqrt(dE_dx ** 2 + dE_dy ** 2);\n return [delta_m, dE_dx, dE_dy];\n }\n\n /**\n * move the node based on it's energy\n * the dx and dy are calculated from the linear system proposed by Kamada and Kawai\n *\n * @param {number} m\n * @param {number} dE_dx\n * @param {number} dE_dy\n * @private\n */\n _moveNode(m, dE_dx, dE_dy) {\n const nodesArray = this.body.nodeIndices;\n const nodes = this.body.nodes;\n let d2E_dx2 = 0;\n let d2E_dxdy = 0;\n let d2E_dy2 = 0;\n\n const x_m = nodes[m].x;\n const y_m = nodes[m].y;\n const km = this.K_matrix[m];\n const lm = this.L_matrix[m];\n\n for (let iIdx = 0; iIdx < nodesArray.length; iIdx++) {\n const i = nodesArray[iIdx];\n if (i !== m) {\n const x_i = nodes[i].x;\n const y_i = nodes[i].y;\n const kmat = km[i];\n const lmat = lm[i];\n const denominator = 1.0 / ((x_m - x_i) ** 2 + (y_m - y_i) ** 2) ** 1.5;\n d2E_dx2 += kmat * (1 - lmat * (y_m - y_i) ** 2 * denominator);\n d2E_dxdy += kmat * (lmat * (x_m - x_i) * (y_m - y_i) * denominator);\n d2E_dy2 += kmat * (1 - lmat * (x_m - x_i) ** 2 * denominator);\n }\n }\n // make the variable names easier to make the solving of the linear system easier to read\n const A = d2E_dx2,\n B = d2E_dxdy,\n C = dE_dx,\n D = d2E_dy2,\n E = dE_dy;\n\n // solve the linear system for dx and dy\n const dy = (C / A + E / B) / (B / A - D / B);\n const dx = -(B * dy + C) / A;\n\n // move the node\n nodes[m].x += dx;\n nodes[m].y += dy;\n\n // Recalculate E_matrix (should be incremental)\n this._updateE_matrix(m);\n }\n\n /**\n * Create the L matrix: edge length times shortest path\n *\n * @param {object} D_matrix\n * @private\n */\n _createL_matrix(D_matrix) {\n const nodesArray = this.body.nodeIndices;\n const edgeLength = this.springLength;\n\n this.L_matrix = [];\n for (let i = 0; i < nodesArray.length; i++) {\n this.L_matrix[nodesArray[i]] = {};\n for (let j = 0; j < nodesArray.length; j++) {\n this.L_matrix[nodesArray[i]][nodesArray[j]] =\n edgeLength * D_matrix[nodesArray[i]][nodesArray[j]];\n }\n }\n }\n\n /**\n * Create the K matrix: spring constants times shortest path\n *\n * @param {object} D_matrix\n * @private\n */\n _createK_matrix(D_matrix) {\n const nodesArray = this.body.nodeIndices;\n const edgeStrength = this.springConstant;\n\n this.K_matrix = [];\n for (let i = 0; i < nodesArray.length; i++) {\n this.K_matrix[nodesArray[i]] = {};\n for (let j = 0; j < nodesArray.length; j++) {\n this.K_matrix[nodesArray[i]][nodesArray[j]] =\n edgeStrength * D_matrix[nodesArray[i]][nodesArray[j]] ** -2;\n }\n }\n }\n\n /**\n * Create matrix with all energies between nodes\n *\n * @private\n */\n _createE_matrix() {\n const nodesArray = this.body.nodeIndices;\n const nodes = this.body.nodes;\n this.E_matrix = {};\n this.E_sums = {};\n for (let mIdx = 0; mIdx < nodesArray.length; mIdx++) {\n this.E_matrix[nodesArray[mIdx]] = [];\n }\n for (let mIdx = 0; mIdx < nodesArray.length; mIdx++) {\n const m = nodesArray[mIdx];\n const x_m = nodes[m].x;\n const y_m = nodes[m].y;\n let dE_dx = 0;\n let dE_dy = 0;\n for (let iIdx = mIdx; iIdx < nodesArray.length; iIdx++) {\n const i = nodesArray[iIdx];\n if (i !== m) {\n const x_i = nodes[i].x;\n const y_i = nodes[i].y;\n const denominator =\n 1.0 / Math.sqrt((x_m - x_i) ** 2 + (y_m - y_i) ** 2);\n this.E_matrix[m][iIdx] = [\n this.K_matrix[m][i] *\n (x_m - x_i - this.L_matrix[m][i] * (x_m - x_i) * denominator),\n this.K_matrix[m][i] *\n (y_m - y_i - this.L_matrix[m][i] * (y_m - y_i) * denominator),\n ];\n this.E_matrix[i][mIdx] = this.E_matrix[m][iIdx];\n dE_dx += this.E_matrix[m][iIdx][0];\n dE_dy += this.E_matrix[m][iIdx][1];\n }\n }\n //Store sum\n this.E_sums[m] = [dE_dx, dE_dy];\n }\n }\n\n /**\n * Update method, just doing single column (rows are auto-updated) (update all sums)\n *\n * @param {number} m\n * @private\n */\n _updateE_matrix(m) {\n const nodesArray = this.body.nodeIndices;\n const nodes = this.body.nodes;\n const colm = this.E_matrix[m];\n const kcolm = this.K_matrix[m];\n const lcolm = this.L_matrix[m];\n const x_m = nodes[m].x;\n const y_m = nodes[m].y;\n let dE_dx = 0;\n let dE_dy = 0;\n for (let iIdx = 0; iIdx < nodesArray.length; iIdx++) {\n const i = nodesArray[iIdx];\n if (i !== m) {\n //Keep old energy value for sum modification below\n const cell = colm[iIdx];\n const oldDx = cell[0];\n const oldDy = cell[1];\n\n //Calc new energy:\n const x_i = nodes[i].x;\n const y_i = nodes[i].y;\n const denominator =\n 1.0 / Math.sqrt((x_m - x_i) ** 2 + (y_m - y_i) ** 2);\n const dx =\n kcolm[i] * (x_m - x_i - lcolm[i] * (x_m - x_i) * denominator);\n const dy =\n kcolm[i] * (y_m - y_i - lcolm[i] * (y_m - y_i) * denominator);\n colm[iIdx] = [dx, dy];\n dE_dx += dx;\n dE_dy += dy;\n\n //add new energy to sum of each column\n const sum = this.E_sums[i];\n sum[0] += dx - oldDx;\n sum[1] += dy - oldDy;\n }\n }\n //Store sum at -1 index\n this.E_sums[m] = [dE_dx, dE_dy];\n }\n}\n\nexport default KamadaKawai;\n","// Load custom shapes into CanvasRenderingContext2D\nimport \"./shapes\";\n\nimport \"vis-util/esnext/styles/activator.css\";\nimport \"vis-util/esnext/styles/bootstrap.css\";\nimport \"vis-util/esnext/styles/color-picker.css\";\nimport \"vis-util/esnext/styles/configurator.css\";\nimport \"vis-util/esnext/styles/popup.css\";\n\nimport Emitter from \"component-emitter\";\nimport {\n Activator,\n Configurator,\n VALIDATOR_PRINT_STYLE,\n Validator,\n deepExtend,\n recursiveDOMDelete,\n selectiveDeepExtend,\n} from \"vis-util/esnext\";\nimport { DOTToGraph } from \"./dotparser\";\nimport { parseGephi } from \"./gephiParser\";\nimport * as locales from \"./locales\";\nimport { normalizeLanguageCode } from \"./locale-utils\";\n\nimport Images from \"./Images\";\nimport { Groups } from \"./modules/Groups\";\nimport NodesHandler from \"./modules/NodesHandler\";\nimport EdgesHandler from \"./modules/EdgesHandler\";\nimport PhysicsEngine from \"./modules/PhysicsEngine\";\nimport ClusterEngine from \"./modules/Clustering\";\nimport CanvasRenderer from \"./modules/CanvasRenderer\";\nimport Canvas from \"./modules/Canvas\";\nimport View from \"./modules/View\";\nimport InteractionHandler from \"./modules/InteractionHandler\";\nimport SelectionHandler from \"./modules/SelectionHandler\";\nimport LayoutEngine from \"./modules/LayoutEngine\";\nimport ManipulationSystem from \"./modules/ManipulationSystem\";\nimport {\n allOptions,\n configureOptions,\n configuratorHideOption,\n} from \"./options\";\nimport KamadaKawai from \"./modules/KamadaKawai.js\";\n\n/**\n * Create a network visualization, displaying nodes and edges.\n *\n * @param {Element} container The DOM element in which the Network will\n * be created. Normally a div element.\n * @param {object} data An object containing parameters\n * {Array} nodes\n * {Array} edges\n * @param {object} options Options\n * @class Network\n */\nexport function Network(container, data, options) {\n if (!(this instanceof Network)) {\n throw new SyntaxError(\"Constructor must be called with the new operator\");\n }\n\n // set constant values\n this.options = {};\n this.defaultOptions = {\n locale: \"en\",\n locales: locales,\n clickToUse: false,\n };\n Object.assign(this.options, this.defaultOptions);\n\n /**\n * Containers for nodes and edges.\n *\n * 'edges' and 'nodes' contain the full definitions of all the network elements.\n * 'nodeIndices' and 'edgeIndices' contain the id's of the active elements.\n *\n * The distinction is important, because a defined node need not be active, i.e.\n * visible on the canvas. This happens in particular when clusters are defined, in\n * that case there will be nodes and edges not displayed.\n * The bottom line is that all code with actions related to visibility, *must* use\n * 'nodeIndices' and 'edgeIndices', not 'nodes' and 'edges' directly.\n */\n this.body = {\n container: container,\n\n // See comment above for following fields\n nodes: {},\n nodeIndices: [],\n edges: {},\n edgeIndices: [],\n\n emitter: {\n on: this.on.bind(this),\n off: this.off.bind(this),\n emit: this.emit.bind(this),\n once: this.once.bind(this),\n },\n eventListeners: {\n onTap: function () {},\n onTouch: function () {},\n onDoubleTap: function () {},\n onHold: function () {},\n onDragStart: function () {},\n onDrag: function () {},\n onDragEnd: function () {},\n onMouseWheel: function () {},\n onPinch: function () {},\n onMouseMove: function () {},\n onRelease: function () {},\n onContext: function () {},\n },\n data: {\n nodes: null, // A DataSet or DataView\n edges: null, // A DataSet or DataView\n },\n functions: {\n createNode: function () {},\n createEdge: function () {},\n getPointer: function () {},\n },\n modules: {},\n view: {\n scale: 1,\n translation: { x: 0, y: 0 },\n },\n selectionBox: {\n show: false,\n position: {\n start: { x: 0, y: 0 },\n end: { x: 0, y: 0 },\n },\n },\n };\n\n // bind the event listeners\n this.bindEventListeners();\n\n // setting up all modules\n this.images = new Images(() => this.body.emitter.emit(\"_requestRedraw\")); // object with images\n this.groups = new Groups(); // object with groups\n this.canvas = new Canvas(this.body); // DOM handler\n this.selectionHandler = new SelectionHandler(this.body, this.canvas); // Selection handler\n this.interactionHandler = new InteractionHandler(\n this.body,\n this.canvas,\n this.selectionHandler\n ); // Interaction handler handles all the hammer bindings (that are bound by canvas), key\n this.view = new View(this.body, this.canvas); // camera handler, does animations and zooms\n this.renderer = new CanvasRenderer(this.body, this.canvas); // renderer, starts renderloop, has events that modules can hook into\n this.physics = new PhysicsEngine(this.body); // physics engine, does all the simulations\n this.layoutEngine = new LayoutEngine(this.body); // layout engine for inital layout and hierarchical layout\n this.clustering = new ClusterEngine(this.body); // clustering api\n this.manipulation = new ManipulationSystem(\n this.body,\n this.canvas,\n this.selectionHandler,\n this.interactionHandler\n ); // data manipulation system\n\n this.nodesHandler = new NodesHandler(\n this.body,\n this.images,\n this.groups,\n this.layoutEngine\n ); // Handle adding, deleting and updating of nodes as well as global options\n this.edgesHandler = new EdgesHandler(this.body, this.images, this.groups); // Handle adding, deleting and updating of edges as well as global options\n\n this.body.modules[\"kamadaKawai\"] = new KamadaKawai(this.body, 150, 0.05); // Layouting algorithm.\n this.body.modules[\"clustering\"] = this.clustering;\n\n // create the DOM elements\n this.canvas._create();\n\n // apply options\n this.setOptions(options);\n\n // load data (the disable start variable will be the same as the enabled clustering)\n this.setData(data);\n}\n\n// Extend Network with an Emitter mixin\nEmitter(Network.prototype);\n\n/**\n * Set options\n *\n * @param {object} options\n */\nNetwork.prototype.setOptions = function (options) {\n if (options === null) {\n options = undefined; // This ensures that options handling doesn't crash in the handling\n }\n\n if (options !== undefined) {\n const errorFound = Validator.validate(options, allOptions);\n if (errorFound === true) {\n console.error(\n \"%cErrors have been found in the supplied options object.\",\n VALIDATOR_PRINT_STYLE\n );\n }\n\n // copy the global fields over\n const fields = [\"locale\", \"locales\", \"clickToUse\"];\n selectiveDeepExtend(fields, this.options, options);\n\n // normalize the locale or use English\n if (options.locale !== undefined) {\n options.locale = normalizeLanguageCode(\n options.locales || this.options.locales,\n options.locale\n );\n }\n\n // the hierarchical system can adapt the edges and the physics to it's own options because not all combinations work with the hierarichical system.\n options = this.layoutEngine.setOptions(options.layout, options);\n\n this.canvas.setOptions(options); // options for canvas are in globals\n\n // pass the options to the modules\n this.groups.setOptions(options.groups);\n this.nodesHandler.setOptions(options.nodes);\n this.edgesHandler.setOptions(options.edges);\n this.physics.setOptions(options.physics);\n this.manipulation.setOptions(options.manipulation, options, this.options); // manipulation uses the locales in the globals\n\n this.interactionHandler.setOptions(options.interaction);\n this.renderer.setOptions(options.interaction); // options for rendering are in interaction\n this.selectionHandler.setOptions(options.interaction); // options for selection are in interaction\n\n // reload the settings of the nodes to apply changes in groups that are not referenced by pointer.\n if (options.groups !== undefined) {\n this.body.emitter.emit(\"refreshNodes\");\n }\n // these two do not have options at the moment, here for completeness\n //this.view.setOptions(options.view);\n //this.clustering.setOptions(options.clustering);\n\n if (\"configure\" in options) {\n if (!this.configurator) {\n this.configurator = new Configurator(\n this,\n this.body.container,\n configureOptions,\n this.canvas.pixelRatio,\n configuratorHideOption\n );\n }\n\n this.configurator.setOptions(options.configure);\n }\n\n // if the configuration system is enabled, copy all options and put them into the config system\n if (this.configurator && this.configurator.options.enabled === true) {\n const networkOptions = {\n nodes: {},\n edges: {},\n layout: {},\n interaction: {},\n manipulation: {},\n physics: {},\n global: {},\n };\n deepExtend(networkOptions.nodes, this.nodesHandler.options);\n deepExtend(networkOptions.edges, this.edgesHandler.options);\n deepExtend(networkOptions.layout, this.layoutEngine.options);\n // load the selectionHandler and render default options in to the interaction group\n deepExtend(networkOptions.interaction, this.selectionHandler.options);\n deepExtend(networkOptions.interaction, this.renderer.options);\n\n deepExtend(networkOptions.interaction, this.interactionHandler.options);\n deepExtend(networkOptions.manipulation, this.manipulation.options);\n deepExtend(networkOptions.physics, this.physics.options);\n\n // load globals into the global object\n deepExtend(networkOptions.global, this.canvas.options);\n deepExtend(networkOptions.global, this.options);\n\n this.configurator.setModuleOptions(networkOptions);\n }\n\n // handle network global options\n if (options.clickToUse !== undefined) {\n if (options.clickToUse === true) {\n if (this.activator === undefined) {\n this.activator = new Activator(this.canvas.frame);\n this.activator.on(\"change\", () => {\n this.body.emitter.emit(\"activate\");\n });\n }\n } else {\n if (this.activator !== undefined) {\n this.activator.destroy();\n delete this.activator;\n }\n this.body.emitter.emit(\"activate\");\n }\n } else {\n this.body.emitter.emit(\"activate\");\n }\n\n this.canvas.setSize();\n // start the physics simulation. Can be safely called multiple times.\n this.body.emitter.emit(\"startSimulation\");\n }\n};\n\n/**\n * Update the visible nodes and edges list with the most recent node state.\n *\n * Visible nodes are stored in this.body.nodeIndices.\n * Visible edges are stored in this.body.edgeIndices.\n * A node or edges is visible if it is not hidden or clustered.\n *\n * @private\n */\nNetwork.prototype._updateVisibleIndices = function () {\n const nodes = this.body.nodes;\n const edges = this.body.edges;\n this.body.nodeIndices = [];\n this.body.edgeIndices = [];\n\n for (const nodeId in nodes) {\n if (Object.prototype.hasOwnProperty.call(nodes, nodeId)) {\n if (\n !this.clustering._isClusteredNode(nodeId) &&\n nodes[nodeId].options.hidden === false\n ) {\n this.body.nodeIndices.push(nodes[nodeId].id);\n }\n }\n }\n\n for (const edgeId in edges) {\n if (Object.prototype.hasOwnProperty.call(edges, edgeId)) {\n const edge = edges[edgeId];\n\n // It can happen that this is executed *after* a node edge has been removed,\n // but *before* the edge itself has been removed. Taking this into account.\n const fromNode = nodes[edge.fromId];\n const toNode = nodes[edge.toId];\n const edgeNodesPresent = fromNode !== undefined && toNode !== undefined;\n\n const isVisible =\n !this.clustering._isClusteredEdge(edgeId) &&\n edge.options.hidden === false &&\n edgeNodesPresent &&\n fromNode.options.hidden === false && // Also hidden if any of its connecting nodes are hidden\n toNode.options.hidden === false; // idem\n\n if (isVisible) {\n this.body.edgeIndices.push(edge.id);\n }\n }\n }\n};\n\n/**\n * Bind all events\n */\nNetwork.prototype.bindEventListeners = function () {\n // This event will trigger a rebuilding of the cache everything.\n // Used when nodes or edges have been added or removed.\n this.body.emitter.on(\"_dataChanged\", () => {\n this.edgesHandler._updateState();\n this.body.emitter.emit(\"_dataUpdated\");\n });\n\n // this is called when options of EXISTING nodes or edges have changed.\n this.body.emitter.on(\"_dataUpdated\", () => {\n // Order important in following block\n this.clustering._updateState();\n this._updateVisibleIndices();\n\n this._updateValueRange(this.body.nodes);\n this._updateValueRange(this.body.edges);\n // start simulation (can be called safely, even if already running)\n this.body.emitter.emit(\"startSimulation\");\n this.body.emitter.emit(\"_requestRedraw\");\n });\n};\n\n/**\n * Set nodes and edges, and optionally options as well.\n *\n * @param {object} data Object containing parameters:\n * {Array | DataSet | DataView} [nodes] Array with nodes\n * {Array | DataSet | DataView} [edges] Array with edges\n * {String} [dot] String containing data in DOT format\n * {String} [gephi] String containing data in gephi JSON format\n * {Options} [options] Object with options\n */\nNetwork.prototype.setData = function (data) {\n // reset the physics engine.\n this.body.emitter.emit(\"resetPhysics\");\n this.body.emitter.emit(\"_resetData\");\n\n // unselect all to ensure no selections from old data are carried over.\n this.selectionHandler.unselectAll();\n\n if (data && data.dot && (data.nodes || data.edges)) {\n throw new SyntaxError(\n 'Data must contain either parameter \"dot\" or ' +\n ' parameter pair \"nodes\" and \"edges\", but not both.'\n );\n }\n\n // set options\n this.setOptions(data && data.options);\n // set all data\n if (data && data.dot) {\n console.warn(\n \"The dot property has been deprecated. Please use the static convertDot method to convert DOT into vis.network format and use the normal data format with nodes and edges. This converter is used like this: var data = vis.network.convertDot(dotString);\"\n );\n // parse DOT file\n const dotData = DOTToGraph(data.dot);\n this.setData(dotData);\n return;\n } else if (data && data.gephi) {\n // parse DOT file\n console.warn(\n \"The gephi property has been deprecated. Please use the static convertGephi method to convert gephi into vis.network format and use the normal data format with nodes and edges. This converter is used like this: var data = vis.network.convertGephi(gephiJson);\"\n );\n const gephiData = parseGephi(data.gephi);\n this.setData(gephiData);\n return;\n } else {\n this.nodesHandler.setData(data && data.nodes, true);\n this.edgesHandler.setData(data && data.edges, true);\n }\n\n // emit change in data\n this.body.emitter.emit(\"_dataChanged\");\n\n // emit data loaded\n this.body.emitter.emit(\"_dataLoaded\");\n\n // find a stable position or start animating to a stable position\n this.body.emitter.emit(\"initPhysics\");\n};\n\n/**\n * Cleans up all bindings of the network, removing it fully from the memory IF the variable is set to null after calling this function.\n * var network = new vis.Network(..);\n * network.destroy();\n * network = null;\n */\nNetwork.prototype.destroy = function () {\n this.body.emitter.emit(\"destroy\");\n // clear events\n this.body.emitter.off();\n this.off();\n\n // delete modules\n delete this.groups;\n delete this.canvas;\n delete this.selectionHandler;\n delete this.interactionHandler;\n delete this.view;\n delete this.renderer;\n delete this.physics;\n delete this.layoutEngine;\n delete this.clustering;\n delete this.manipulation;\n delete this.nodesHandler;\n delete this.edgesHandler;\n delete this.configurator;\n delete this.images;\n\n for (const nodeId in this.body.nodes) {\n if (!Object.prototype.hasOwnProperty.call(this.body.nodes, nodeId))\n continue;\n delete this.body.nodes[nodeId];\n }\n\n for (const edgeId in this.body.edges) {\n if (!Object.prototype.hasOwnProperty.call(this.body.edges, edgeId))\n continue;\n delete this.body.edges[edgeId];\n }\n\n // remove the container and everything inside it recursively\n recursiveDOMDelete(this.body.container);\n};\n\n/**\n * Update the values of all object in the given array according to the current\n * value range of the objects in the array.\n *\n * @param {object} obj An object containing a set of Edges or Nodes\n * The objects must have a method getValue() and\n * setValueRange(min, max).\n * @private\n */\nNetwork.prototype._updateValueRange = function (obj) {\n let id;\n\n // determine the range of the objects\n let valueMin = undefined;\n let valueMax = undefined;\n let valueTotal = 0;\n for (id in obj) {\n if (Object.prototype.hasOwnProperty.call(obj, id)) {\n const value = obj[id].getValue();\n if (value !== undefined) {\n valueMin = valueMin === undefined ? value : Math.min(value, valueMin);\n valueMax = valueMax === undefined ? value : Math.max(value, valueMax);\n valueTotal += value;\n }\n }\n }\n\n // adjust the range of all objects\n if (valueMin !== undefined && valueMax !== undefined) {\n for (id in obj) {\n if (Object.prototype.hasOwnProperty.call(obj, id)) {\n obj[id].setValueRange(valueMin, valueMax, valueTotal);\n }\n }\n }\n};\n\n/**\n * Returns true when the Network is active.\n *\n * @returns {boolean}\n */\nNetwork.prototype.isActive = function () {\n return !this.activator || this.activator.active;\n};\n\nNetwork.prototype.setSize = function () {\n return this.canvas.setSize.apply(this.canvas, arguments);\n};\nNetwork.prototype.canvasToDOM = function () {\n return this.canvas.canvasToDOM.apply(this.canvas, arguments);\n};\nNetwork.prototype.DOMtoCanvas = function () {\n return this.canvas.DOMtoCanvas.apply(this.canvas, arguments);\n};\n\n/**\n * Nodes can be in clusters. Clusters can also be in clusters. This function returns and array of\n * nodeIds showing where the node is.\n *\n * If any nodeId in the chain, especially the first passed in as a parameter, is not present in\n * the current nodes list, an empty array is returned.\n *\n * Example:\n * cluster 'A' contains cluster 'B',\n * cluster 'B' contains cluster 'C',\n * cluster 'C' contains node 'fred'.\n * `jsnetwork.clustering.findNode('fred')` will return `['A','B','C','fred']`.\n *\n * @param {string|number} nodeId\n * @returns {Array}\n */\nNetwork.prototype.findNode = function () {\n return this.clustering.findNode.apply(this.clustering, arguments);\n};\n\nNetwork.prototype.isCluster = function () {\n return this.clustering.isCluster.apply(this.clustering, arguments);\n};\nNetwork.prototype.openCluster = function () {\n return this.clustering.openCluster.apply(this.clustering, arguments);\n};\nNetwork.prototype.cluster = function () {\n return this.clustering.cluster.apply(this.clustering, arguments);\n};\nNetwork.prototype.getNodesInCluster = function () {\n return this.clustering.getNodesInCluster.apply(this.clustering, arguments);\n};\nNetwork.prototype.clusterByConnection = function () {\n return this.clustering.clusterByConnection.apply(this.clustering, arguments);\n};\nNetwork.prototype.clusterByHubsize = function () {\n return this.clustering.clusterByHubsize.apply(this.clustering, arguments);\n};\nNetwork.prototype.updateClusteredNode = function () {\n return this.clustering.updateClusteredNode.apply(this.clustering, arguments);\n};\nNetwork.prototype.getClusteredEdges = function () {\n return this.clustering.getClusteredEdges.apply(this.clustering, arguments);\n};\nNetwork.prototype.getBaseEdge = function () {\n return this.clustering.getBaseEdge.apply(this.clustering, arguments);\n};\nNetwork.prototype.getBaseEdges = function () {\n return this.clustering.getBaseEdges.apply(this.clustering, arguments);\n};\nNetwork.prototype.updateEdge = function () {\n return this.clustering.updateEdge.apply(this.clustering, arguments);\n};\n\n/**\n * This method will cluster all nodes with 1 edge with their respective connected node.\n * The options object is explained in full below.\n *\n * @param {object} [options]\n * @returns {undefined}\n */\nNetwork.prototype.clusterOutliers = function () {\n return this.clustering.clusterOutliers.apply(this.clustering, arguments);\n};\n\nNetwork.prototype.getSeed = function () {\n return this.layoutEngine.getSeed.apply(this.layoutEngine, arguments);\n};\nNetwork.prototype.enableEditMode = function () {\n return this.manipulation.enableEditMode.apply(this.manipulation, arguments);\n};\nNetwork.prototype.disableEditMode = function () {\n return this.manipulation.disableEditMode.apply(this.manipulation, arguments);\n};\nNetwork.prototype.addNodeMode = function () {\n return this.manipulation.addNodeMode.apply(this.manipulation, arguments);\n};\nNetwork.prototype.editNode = function () {\n return this.manipulation.editNode.apply(this.manipulation, arguments);\n};\nNetwork.prototype.editNodeMode = function () {\n console.warn(\"Deprecated: Please use editNode instead of editNodeMode.\");\n return this.manipulation.editNode.apply(this.manipulation, arguments);\n};\nNetwork.prototype.addEdgeMode = function () {\n return this.manipulation.addEdgeMode.apply(this.manipulation, arguments);\n};\nNetwork.prototype.editEdgeMode = function () {\n return this.manipulation.editEdgeMode.apply(this.manipulation, arguments);\n};\nNetwork.prototype.deleteSelected = function () {\n return this.manipulation.deleteSelected.apply(this.manipulation, arguments);\n};\nNetwork.prototype.getPositions = function () {\n return this.nodesHandler.getPositions.apply(this.nodesHandler, arguments);\n};\nNetwork.prototype.getPosition = function () {\n return this.nodesHandler.getPosition.apply(this.nodesHandler, arguments);\n};\nNetwork.prototype.storePositions = function () {\n return this.nodesHandler.storePositions.apply(this.nodesHandler, arguments);\n};\nNetwork.prototype.moveNode = function () {\n return this.nodesHandler.moveNode.apply(this.nodesHandler, arguments);\n};\nNetwork.prototype.getBoundingBox = function () {\n return this.nodesHandler.getBoundingBox.apply(this.nodesHandler, arguments);\n};\nNetwork.prototype.getConnectedNodes = function (objectId) {\n if (this.body.nodes[objectId] !== undefined) {\n return this.nodesHandler.getConnectedNodes.apply(\n this.nodesHandler,\n arguments\n );\n } else {\n return this.edgesHandler.getConnectedNodes.apply(\n this.edgesHandler,\n arguments\n );\n }\n};\nNetwork.prototype.getConnectedEdges = function () {\n return this.nodesHandler.getConnectedEdges.apply(\n this.nodesHandler,\n arguments\n );\n};\nNetwork.prototype.startSimulation = function () {\n return this.physics.startSimulation.apply(this.physics, arguments);\n};\nNetwork.prototype.stopSimulation = function () {\n return this.physics.stopSimulation.apply(this.physics, arguments);\n};\nNetwork.prototype.stabilize = function () {\n return this.physics.stabilize.apply(this.physics, arguments);\n};\nNetwork.prototype.getSelection = function () {\n return this.selectionHandler.getSelection.apply(\n this.selectionHandler,\n arguments\n );\n};\nNetwork.prototype.setSelection = function () {\n return this.selectionHandler.setSelection.apply(\n this.selectionHandler,\n arguments\n );\n};\nNetwork.prototype.getSelectedNodes = function () {\n return this.selectionHandler.getSelectedNodeIds.apply(\n this.selectionHandler,\n arguments\n );\n};\nNetwork.prototype.getSelectedEdges = function () {\n return this.selectionHandler.getSelectedEdgeIds.apply(\n this.selectionHandler,\n arguments\n );\n};\nNetwork.prototype.getNodeAt = function () {\n const node = this.selectionHandler.getNodeAt.apply(\n this.selectionHandler,\n arguments\n );\n if (node !== undefined && node.id !== undefined) {\n return node.id;\n }\n return node;\n};\nNetwork.prototype.getEdgeAt = function () {\n const edge = this.selectionHandler.getEdgeAt.apply(\n this.selectionHandler,\n arguments\n );\n if (edge !== undefined && edge.id !== undefined) {\n return edge.id;\n }\n return edge;\n};\nNetwork.prototype.selectNodes = function () {\n return this.selectionHandler.selectNodes.apply(\n this.selectionHandler,\n arguments\n );\n};\nNetwork.prototype.selectEdges = function () {\n return this.selectionHandler.selectEdges.apply(\n this.selectionHandler,\n arguments\n );\n};\nNetwork.prototype.unselectAll = function () {\n this.selectionHandler.unselectAll.apply(this.selectionHandler, arguments);\n this.selectionHandler.commitWithoutEmitting.apply(this.selectionHandler);\n this.redraw();\n};\nNetwork.prototype.redraw = function () {\n return this.renderer.redraw.apply(this.renderer, arguments);\n};\nNetwork.prototype.getScale = function () {\n return this.view.getScale.apply(this.view, arguments);\n};\nNetwork.prototype.getViewPosition = function () {\n return this.view.getViewPosition.apply(this.view, arguments);\n};\nNetwork.prototype.fit = function () {\n return this.view.fit.apply(this.view, arguments);\n};\nNetwork.prototype.moveTo = function () {\n return this.view.moveTo.apply(this.view, arguments);\n};\nNetwork.prototype.focus = function () {\n return this.view.focus.apply(this.view, arguments);\n};\nNetwork.prototype.releaseNode = function () {\n return this.view.releaseNode.apply(this.view, arguments);\n};\nNetwork.prototype.getOptionsFromConfigurator = function () {\n let options = {};\n if (this.configurator) {\n options = this.configurator.getOptions.apply(this.configurator);\n }\n return options;\n};\n\nexport default Network;\n","// DOM utility methods\n\n/**\n * this prepares the JSON container for allocating SVG elements\n *\n * @param {object} JSONcontainer\n * @private\n */\nexport function prepareElements(JSONcontainer) {\n // cleanup the redundant svgElements;\n for (const elementType in JSONcontainer) {\n if (Object.prototype.hasOwnProperty.call(JSONcontainer, elementType)) {\n JSONcontainer[elementType].redundant = JSONcontainer[elementType].used;\n JSONcontainer[elementType].used = [];\n }\n }\n}\n\n/**\n * this cleans up all the unused SVG elements. By asking for the parentNode, we only need to supply the JSON container from\n * which to remove the redundant elements.\n *\n * @param {object} JSONcontainer\n * @private\n */\nexport function cleanupElements(JSONcontainer) {\n // cleanup the redundant svgElements;\n for (const elementType in JSONcontainer) {\n if (Object.prototype.hasOwnProperty.call(JSONcontainer, elementType)) {\n if (JSONcontainer[elementType].redundant) {\n for (let i = 0; i < JSONcontainer[elementType].redundant.length; i++) {\n JSONcontainer[elementType].redundant[i].parentNode.removeChild(\n JSONcontainer[elementType].redundant[i]\n );\n }\n JSONcontainer[elementType].redundant = [];\n }\n }\n }\n}\n\n/**\n * Ensures that all elements are removed first up so they can be recreated cleanly\n *\n * @param {object} JSONcontainer\n */\nexport function resetElements(JSONcontainer) {\n prepareElements(JSONcontainer);\n cleanupElements(JSONcontainer);\n prepareElements(JSONcontainer);\n}\n\n/**\n * Allocate or generate an SVG element if needed. Store a reference to it in the JSON container and draw it in the svgContainer\n * the JSON container and the SVG container have to be supplied so other svg containers (like the legend) can use this.\n *\n * @param {string} elementType\n * @param {object} JSONcontainer\n * @param {object} svgContainer\n * @returns {Element}\n * @private\n */\nexport function getSVGElement(elementType, JSONcontainer, svgContainer) {\n let element;\n // allocate SVG element, if it doesnt yet exist, create one.\n if (Object.prototype.hasOwnProperty.call(JSONcontainer, elementType)) {\n // this element has been created before\n // check if there is an redundant element\n if (JSONcontainer[elementType].redundant.length > 0) {\n element = JSONcontainer[elementType].redundant[0];\n JSONcontainer[elementType].redundant.shift();\n } else {\n // create a new element and add it to the SVG\n element = document.createElementNS(\n \"http://www.w3.org/2000/svg\",\n elementType\n );\n svgContainer.appendChild(element);\n }\n } else {\n // create a new element and add it to the SVG, also create a new object in the svgElements to keep track of it.\n element = document.createElementNS(\n \"http://www.w3.org/2000/svg\",\n elementType\n );\n JSONcontainer[elementType] = { used: [], redundant: [] };\n svgContainer.appendChild(element);\n }\n JSONcontainer[elementType].used.push(element);\n return element;\n}\n\n/**\n * Allocate or generate an SVG element if needed. Store a reference to it in the JSON container and draw it in the svgContainer\n * the JSON container and the SVG container have to be supplied so other svg containers (like the legend) can use this.\n *\n * @param {string} elementType\n * @param {object} JSONcontainer\n * @param {Element} DOMContainer\n * @param {Element} insertBefore\n * @returns {*}\n */\nexport function getDOMElement(\n elementType,\n JSONcontainer,\n DOMContainer,\n insertBefore\n) {\n let element;\n // allocate DOM element, if it doesnt yet exist, create one.\n if (Object.prototype.hasOwnProperty.call(JSONcontainer, elementType)) {\n // this element has been created before\n // check if there is an redundant element\n if (JSONcontainer[elementType].redundant.length > 0) {\n element = JSONcontainer[elementType].redundant[0];\n JSONcontainer[elementType].redundant.shift();\n } else {\n // create a new element and add it to the SVG\n element = document.createElement(elementType);\n if (insertBefore !== undefined) {\n DOMContainer.insertBefore(element, insertBefore);\n } else {\n DOMContainer.appendChild(element);\n }\n }\n } else {\n // create a new element and add it to the SVG, also create a new object in the svgElements to keep track of it.\n element = document.createElement(elementType);\n JSONcontainer[elementType] = { used: [], redundant: [] };\n if (insertBefore !== undefined) {\n DOMContainer.insertBefore(element, insertBefore);\n } else {\n DOMContainer.appendChild(element);\n }\n }\n JSONcontainer[elementType].used.push(element);\n return element;\n}\n\n/**\n * Draw a point object. This is a separate function because it can also be called by the legend.\n * The reason the JSONcontainer and the target SVG svgContainer have to be supplied is so the legend can use these functions\n * as well.\n *\n * @param {number} x\n * @param {number} y\n * @param {object} groupTemplate: A template containing the necessary information to draw the datapoint e.g., {style: 'circle', size: 5, className: 'className' }\n * @param groupTemplate\n * @param {object} JSONcontainer\n * @param {object} svgContainer\n * @param {object} labelObj\n * @returns {vis.PointItem}\n */\nexport function drawPoint(\n x,\n y,\n groupTemplate,\n JSONcontainer,\n svgContainer,\n labelObj\n) {\n let point;\n if (groupTemplate.style == \"circle\") {\n point = getSVGElement(\"circle\", JSONcontainer, svgContainer);\n point.setAttributeNS(null, \"cx\", x);\n point.setAttributeNS(null, \"cy\", y);\n point.setAttributeNS(null, \"r\", 0.5 * groupTemplate.size);\n } else {\n point = getSVGElement(\"rect\", JSONcontainer, svgContainer);\n point.setAttributeNS(null, \"x\", x - 0.5 * groupTemplate.size);\n point.setAttributeNS(null, \"y\", y - 0.5 * groupTemplate.size);\n point.setAttributeNS(null, \"width\", groupTemplate.size);\n point.setAttributeNS(null, \"height\", groupTemplate.size);\n }\n\n if (groupTemplate.styles !== undefined) {\n point.setAttributeNS(null, \"style\", groupTemplate.styles);\n }\n point.setAttributeNS(null, \"class\", groupTemplate.className + \" vis-point\");\n //handle label\n\n if (labelObj) {\n const label = getSVGElement(\"text\", JSONcontainer, svgContainer);\n if (labelObj.xOffset) {\n x = x + labelObj.xOffset;\n }\n\n if (labelObj.yOffset) {\n y = y + labelObj.yOffset;\n }\n if (labelObj.content) {\n label.textContent = labelObj.content;\n }\n\n if (labelObj.className) {\n label.setAttributeNS(null, \"class\", labelObj.className + \" vis-label\");\n }\n label.setAttributeNS(null, \"x\", x);\n label.setAttributeNS(null, \"y\", y);\n }\n\n return point;\n}\n\n/**\n * draw a bar SVG element centered on the X coordinate\n *\n * @param {number} x\n * @param {number} y\n * @param {number} width\n * @param {number} height\n * @param {string} className\n * @param {object} JSONcontainer\n * @param {object} svgContainer\n * @param {string} style\n */\nexport function drawBar(\n x,\n y,\n width,\n height,\n className,\n JSONcontainer,\n svgContainer,\n style\n) {\n if (height != 0) {\n if (height < 0) {\n height *= -1;\n y -= height;\n }\n const rect = getSVGElement(\"rect\", JSONcontainer, svgContainer);\n rect.setAttributeNS(null, \"x\", x - 0.5 * width);\n rect.setAttributeNS(null, \"y\", y);\n rect.setAttributeNS(null, \"width\", width);\n rect.setAttributeNS(null, \"height\", height);\n rect.setAttributeNS(null, \"class\", className);\n if (style) {\n rect.setAttributeNS(null, \"style\", style);\n }\n }\n}\n","/**\n * Normalizes language code into the format used internally.\n *\n * @param locales - All the available locales.\n * @param rawCode - The original code as supplied by the user.\n * @returns Language code in the format language-COUNTRY or language, eventually\n * fallbacks to en.\n */\nexport function normalizeLanguageCode(\n locales: Record,\n rawCode: string\n): string {\n try {\n const [rawLanguage, rawCountry] = rawCode.split(/[-_ /]/, 2);\n const language = rawLanguage != null ? rawLanguage.toLowerCase() : null;\n const country = rawCountry != null ? rawCountry.toUpperCase() : null;\n\n if (language && country) {\n const code = language + \"-\" + country;\n if (Object.prototype.hasOwnProperty.call(locales, code)) {\n return code;\n } else {\n console.warn(`Unknown variant ${country} of language ${language}.`);\n }\n }\n\n if (language) {\n const code = language;\n if (Object.prototype.hasOwnProperty.call(locales, code)) {\n return code;\n } else {\n console.warn(`Unknown language ${language}`);\n }\n }\n\n console.warn(`Unknown locale ${rawCode}, falling back to English.`);\n\n return \"en\";\n } catch (error) {\n console.error(error);\n console.warn(\n `Unexpected error while normalizing locale ${rawCode}, falling back to English.`\n );\n\n return \"en\";\n }\n}\n","// Network.\nexport * from \"./network/Network\";\n\nimport Images from \"./network/Images\";\nimport * as dotparser from \"./network/dotparser\";\nimport * as gephiParser from \"./network/gephiParser\";\nimport { parseGephi } from \"./network/gephiParser\";\nimport * as allOptions from \"./network/options\";\nexport const network = {\n Images,\n dotparser,\n gephiParser,\n allOptions,\n convertDot: dotparser.DOTToGraph,\n convertGephi: parseGephi,\n};\n\n// utils\nimport * as DOMutil from \"./DOMutil\";\nexport { DOMutil };\n\n// vis-util\nimport * as util from \"vis-util/esnext\";\nexport { util };\n\n// vis-data\nimport * as data from \"vis-data/esnext\";\nexport { data };\nexport { DataSet, DataView, Queue } from \"vis-data/esnext\";\n\n// bundled external libraries\nimport { Hammer } from \"vis-util/esnext\";\nexport { Hammer };\nimport * as keycharm from \"keycharm\";\nexport { keycharm };\n"],"names":["check","it","Math","global","globalThis","window","self","this","Function","fails","exec","error","functionBindNative","require$$0","test","bind","hasOwnProperty","NATIVE_BIND","FunctionPrototype","prototype","apply","call","functionApply","Reflect","arguments","uncurryThisWithBind","functionUncurryThis","fn","uncurryThis","toString","stringSlice","slice","classofRaw","require$$1","functionUncurryThisClause","documentAll","document","all","documentAll_1","IS_HTMLDDA","undefined","isCallable","argument","descriptors","Object","defineProperty","get","functionCall","$propertyIsEnumerable","propertyIsEnumerable","getOwnPropertyDescriptor","NASHORN_BUG","objectPropertyIsEnumerable","f","V","descriptor","enumerable","match","version","createPropertyDescriptor","bitmap","value","configurable","writable","classof","require$$2","$Object","split","indexedObject","isNullOrUndefined","$TypeError","TypeError","requireObjectCoercible","IndexedObject","toIndexedObject","isObject","path","aFunction","variable","getBuiltIn","namespace","method","length","objectIsPrototypeOf","isPrototypeOf","engineUserAgent","navigator","String","userAgent","process","Deno","versions","v8","engineV8Version","V8_VERSION","$String","symbolConstructorDetection","getOwnPropertySymbols","symbol","Symbol","sham","useSymbolAsUid","iterator","isSymbol","require$$3","$Symbol","tryToString","aCallable","getMethod","P","func","defineGlobalProperty","key","SHARED","sharedStore","store","sharedModule","push","mode","copyright","license","source","toObject","hasOwnProperty_1","hasOwn","id","postfix","random","uid","shared","NATIVE_SYMBOL","require$$4","USE_SYMBOL_AS_UID","require$$5","WellKnownSymbolsStore","createWellKnownSymbol","withoutSetter","wellKnownSymbol","name","ordinaryToPrimitive","input","pref","val","valueOf","TO_PRIMITIVE","toPrimitive","result","exoticToPrim","toPropertyKey","EXISTS","createElement","documentCreateElement","ie8DomDefine","a","DESCRIPTORS","propertyIsEnumerableModule","require$$6","IE8_DOM_DEFINE","require$$7","$getOwnPropertyDescriptor","objectGetOwnPropertyDescriptor","O","replacement","isForced","feature","detection","data","normalize","POLYFILL","NATIVE","string","replace","toLowerCase","isForced_1","functionBindContext","that","v8PrototypeDefineBug","anObject","V8_PROTOTYPE_DEFINE_BUG","$defineProperty","ENUMERABLE","CONFIGURABLE","WRITABLE","objectDefineProperty","Attributes","current","definePropertyModule","createNonEnumerableProperty","object","require$$8","require$$9","wrapConstructor","NativeConstructor","Wrapper","b","c","_export","options","FORCED","USE_NATIVE","VIRTUAL_PROTOTYPE","sourceProperty","targetProperty","nativeProperty","resultProperty","TARGET","target","GLOBAL","STATIC","stat","PROTO","proto","nativeSource","targetPrototype","forced","dontCallGetSet","wrap","real","ceil","floor","trunc","x","n","toIntegerOrInfinity","number","max","min","toAbsoluteIndex","index","integer","toLength","lengthOfArrayLike","obj","createMethod","IS_INCLUDES","$this","el","fromIndex","arrayIncludes","includes","indexOf","hiddenKeys","objectKeysInternal","names","i","enumBugKeys","internalObjectKeys","objectKeys","keys","objectGetOwnPropertySymbols","getOwnPropertySymbolsModule","$assign","assign","concat","objectAssign","A","B","alphabet","forEach","chr","join","T","argumentsLength","S","j","arity","arraySlice","$Function","factories","functionBind","F","Prototype","partArgs","boundFunction","args","C","argsLength","list","construct","entryVirtual","CONSTRUCTOR","parent","own","drawCircle","ctx","y","r","beginPath","arc","PI","closePath","drawRoundRect","w","h","r2d","moveTo","lineTo","drawEllipse","kappa","ox","oy","xe","ye","xm","ym","bezierCurveTo","drawDatabase","hEllipse","ymb","yeb","drawDashedLine","x2","y2","pattern","patternLength","dx","dy","slope","distRemaining","sqrt","patternIndex","draw","xStep","dashLength","shapeMap","circle","dashedLine","database","diamond","ellipse","ellipse_vis","hexagon","cos","sin","roundRect","square","rect","star","radius","triangle","s","s2","ir","triangleDown","Emitter","mixin","module","exports","on","addEventListener","event","_callbacks","once","off","removeListener","removeAllListeners","removeEventListener","cb","callbacks","splice","emit","Array","len","listeners","hasListeners","set","has","toStringTagSupport","TO_STRING_TAG_SUPPORT","TO_STRING_TAG","CORRECT_ARGUMENTS","tag","tryGet","callee","charAt","charCodeAt","CONVERT_TO_STRING","pos","first","second","position","size","stringMultibyte","codeAt","WeakMap","weakMapBasicDetection","sharedKey","NATIVE_WEAK_MAP","OBJECT_ALREADY_INITIALIZED","state","metadata","facade","STATE","internalState","enforce","getterFor","TYPE","type","getDescriptor","functionName","PROPER","objectDefineProperties","defineProperties","Properties","props","activeXDocument","html","definePropertiesModule","PROTOTYPE","SCRIPT","IE_PROTO","EmptyConstructor","scriptTag","content","LT","NullProtoObjectViaActiveX","write","close","temp","parentWindow","NullProtoObject","ActiveXObject","iframeDocument","iframe","JS","domain","style","display","appendChild","src","contentWindow","open","IteratorPrototype","PrototypeOfArrayIteratorPrototype","arrayIterator","objectCreate","create","correctPrototypeGetter","constructor","getPrototypeOf","CORRECT_PROTOTYPE_GETTER","ObjectPrototype","objectGetPrototypeOf","defineBuiltIn","ITERATOR","BUGGY_SAFARI_ITERATORS","NEW_ITERATOR_PROTOTYPE","iteratorsCore","objectToString","setToStringTag","TAG","SET_METHOD","iterators","Iterators","returnThis","uncurryThisAccessor","aPossiblePrototype","objectSetPrototypeOf","setPrototypeOf","setter","CORRECT_SETTER","__proto__","$","FunctionName","createIteratorConstructor","IteratorConstructor","NAME","next","ENUMERABLE_NEXT","require$$10","require$$12","IteratorsCore","require$$13","PROPER_FUNCTION_NAME","require$$11","KEYS","VALUES","ENTRIES","iteratorDefine","Iterable","DEFAULT","IS_SET","CurrentIteratorPrototype","methods","KEY","getIterationMethod","KIND","defaultIterator","IterablePrototype","INCORRECT_VALUES_NAME","nativeIterator","anyNativeIterator","entries","values","createIterResultObject","done","InternalStateModule","defineIterator","STRING_ITERATOR","setInternalState","getInternalState","iterated","point","iteratorClose","kind","innerResult","innerError","ArrayPrototype","isArrayIteratorMethod","functionToString","inspectSource","noop","empty","constructorRegExp","INCORRECT_TO_STRING","isConstructorModern","isConstructorLegacy","isConstructor","called","createProperty","propertyKey","getIteratorMethod","getIterator","usingIterator","iteratorMethod","callWithSafeIterationClosing","$Array","SAFE_CLOSING","iteratorWithReturn","return","from","checkCorrectnessOfIteration","SKIP_CLOSING","ITERATION_SUPPORT","arrayLike","IS_CONSTRUCTOR","mapfn","mapping","step","iterable","ARRAY_ITERATOR","defineIterator$1","Arguments","getIteratorMethod_1","DOMIterables","CSSRuleList","CSSStyleDeclaration","CSSValueList","ClientRectList","DOMRectList","DOMStringList","DOMTokenList","DataTransferItemList","FileList","HTMLAllCollection","HTMLCollection","HTMLFormElement","HTMLSelectElement","MediaList","MimeTypeArray","NamedNodeMap","NodeList","PaintRequestList","Plugin","PluginArray","SVGLengthList","SVGNumberList","SVGPathSegList","SVGPointList","SVGStringList","SVGTransformList","SourceBufferList","StyleSheetList","TextTrackCueList","TextTrackList","TouchList","COLLECTION_NAME","Collection","CollectionPrototype","_classCallCheck","instance","Constructor","$$_","desc","isArray","doesNotExceedSafeInteger","SPECIES","arraySpeciesConstructor","originalArray","arraySpeciesCreate","arrayMethodHasSpeciesSupport","METHOD_NAME","array","foo","Boolean","IS_CONCAT_SPREADABLE","IS_CONCAT_SPREADABLE_SUPPORT","isConcatSpreadable","spreadable","arg","k","E","objectGetOwnPropertyNames","getOwnPropertyNames","arraySliceSimple","start","end","fin","$getOwnPropertyNames","windowNames","objectGetOwnPropertyNamesExternal","getWindowNames","defineBuiltInAccessor","wellKnownSymbolWrapped","wrappedWellKnownSymbolModule","wellKnownSymbolDefine","symbolDefineToPrimitive","SymbolPrototype","hint","IS_MAP","IS_FILTER","IS_SOME","IS_EVERY","IS_FIND_INDEX","IS_FILTER_REJECT","NO_HOLES","callbackfn","specificCreate","arrayIteration","map","filter","some","every","find","findIndex","filterReject","$toString","require$$14","nativeObjectCreate","require$$15","require$$16","getOwnPropertyNamesModule","require$$17","getOwnPropertyNamesExternal","require$$18","require$$19","getOwnPropertyDescriptorModule","require$$20","require$$21","require$$22","require$$23","require$$24","require$$25","require$$26","require$$28","require$$29","require$$30","require$$31","defineWellKnownSymbol","require$$32","defineSymbolToPrimitive","require$$33","require$$34","require$$35","$forEach","require$$36","HIDDEN","require$$27","SYMBOL","RangeError","QObject","nativeGetOwnPropertyDescriptor","nativeDefineProperty","nativeGetOwnPropertyNames","nativePropertyIsEnumerable","AllSymbols","ObjectPrototypeSymbols","USE_SETTER","findChild","fallbackDefineProperty","ObjectPrototypeDescriptor","setSymbolDescriptor","description","$defineProperties","properties","$getOwnPropertySymbols","IS_OBJECT_PROTOTYPE","$$Y","$forEach$1","useSetter","useSimple","symbolRegistryDetection","keyFor","NATIVE_SYMBOL_REGISTRY","StringToSymbolRegistry","SymbolToStringRegistry","for","sym","getReplacerFunction","replacer","rawLength","element","keysLength","root","$stringify","numberToString","tester","low","hi","WRONG_SYMBOLS_CONVERSION","ILL_FORMED_UNICODE","stringifyWithSymbolsFix","$replacer","fixIllFormed","offset","prev","stringify","space","JSON","METADATA","thisSymbolValue","symbolIsRegistered","isRegisteredSymbol","$isWellKnownSymbol","isWellKnownSymbol","symbolKeys","symbolKeysLength","symbolKey","symbolIsWellKnown","isRegistered","isWellKnown","_typeof","o","_Symbol","_Symbol$iterator","_toPropertyKey","prim","_Symbol$toPrimitive","res","Number","_defineProperties","_Object$defineProperty","_createClass","protoProps","staticProps","arraySetLength","setArrayLength","properErrorOnNonWritableLength","item","argCount","nativeSlice","HAS_SPECIES_SUPPORT","_arrayLikeToArray","arr","arr2","_unsupportedIterableToArray","minLen","_context","arrayLikeToArray","_sliceInstanceProperty","_Array$from","_slicedToArray","_Array$isArray","arrayWithHoles","l","t","_getIteratorMethod","e","u","_pushInstanceProperty","iterableToArrayLimit","unsupportedIterableToArray","nonIterableRest","_toConsumableArray","arrayWithoutHoles","iter","iterableToArray","nonIterableSpread","ownKeys","$map","nativeKeys","$Date","Date","thisTimeValue","getTime","$$J","now","arrayMethodIsStrict","arrayForEach","nativeReverse","reverse","$$H","deletePropertyOrThrow","deleteCount","insertCount","actualDeleteCount","to","actualStart","$includes","MATCH","isRegExp","notARegExp","correctIsRegExpLogic","regexp","error1","error2","stringIndexOf","searchString","arrayMethod","stringMethod","StringPrototype","nativeGetPrototypeOf","$filter","IE_BUG","TO_ENTRIES","IE_WORKAROUND","objectToArray","$values","whitespaces","ltrim","RegExp","rtrim","stringTrim","trim","$parseInt","parseInt","hex","numberParseInt","radix","$indexOf","nativeIndexOf","NEGATIVE_ZERO","searchElement","$entries","D","engineIsBun","Bun","validateArgumentsLength","passed","required","ENGINE_IS_BUN","USER_AGENT","WRAP","schedulersFix","scheduler","hasTimeArg","firstParamIndex","handler","timeout","boundArgs","params","callback","setInterval","setTimeout","fill","endPos","_extends","_inheritsLoose","subClass","superClass","_assertThisInitialized","ReferenceError","output","nextKey","win","assign$1","VENDOR_PREFIXES","TEST_ELEMENT","round","abs","prefixed","property","prefix","prop","camelProp","toUpperCase","PREFIXED_TOUCH_ACTION","NATIVE_TOUCH_ACTION","TOUCH_ACTION_COMPUTE","TOUCH_ACTION_AUTO","TOUCH_ACTION_MANIPULATION","TOUCH_ACTION_NONE","TOUCH_ACTION_PAN_X","TOUCH_ACTION_PAN_Y","TOUCH_ACTION_MAP","touchMap","cssSupports","CSS","supports","getTouchActionProps","SUPPORT_TOUCH","SUPPORT_POINTER_EVENTS","SUPPORT_ONLY_TOUCH","INPUT_TYPE_TOUCH","INPUT_TYPE_MOUSE","COMPUTE_INTERVAL","INPUT_START","INPUT_END","INPUT_CANCEL","DIRECTION_NONE","DIRECTION_LEFT","DIRECTION_RIGHT","DIRECTION_UP","DIRECTION_DOWN","DIRECTION_HORIZONTAL","DIRECTION_VERTICAL","DIRECTION_ALL","PROPS_XY","PROPS_CLIENT_XY","each","context","boolOrFn","inStr","str","TouchAction","manager","_proto","compute","actions","update","touchAction","recognizers","recognizer","enable","getTouchAction","hasPanX","hasPanY","cleanTouchActions","preventDefaults","srcEvent","direction","offsetDirection","session","prevented","preventDefault","hasNone","isTapPointer","pointers","isTapMovement","distance","isTapTouchTime","deltaTime","preventSrc","hasParent","node","parentNode","getCenter","pointersLength","clientX","clientY","simpleCloneInputData","timeStamp","center","deltaX","deltaY","getDistance","p1","p2","getAngle","atan2","getDirection","getVelocity","computeInputData","firstInput","firstMultiple","offsetCenter","angle","offsetDelta","prevDelta","prevInput","eventType","computeDeltaXY","overallVelocity","overallVelocityX","overallVelocityY","scale","rotation","getRotation","maxPointers","velocity","velocityX","velocityY","last","lastInterval","v","computeIntervalInputData","srcEventTarget","composedPath","inputHandler","pointersLen","changedPointersLen","changedPointers","isFirst","isFinal","recognize","splitStr","addEventListeners","types","removeEventListeners","getWindowForElement","doc","ownerDocument","defaultView","Input","inputTarget","domHandler","ev","init","evEl","evTarget","evWin","destroy","inArray","findByKey","POINTER_INPUT_MAP","pointerdown","pointermove","pointerup","pointercancel","pointerout","IE10_POINTER_TYPE_ENUM","POINTER_ELEMENT_EVENTS","POINTER_WINDOW_EVENTS","MSPointerEvent","PointerEvent","PointerEventInput","_Input","_this","pointerEvents","removePointer","eventTypeNormalized","pointerType","isTouch","storeIndex","pointerId","button","toArray","uniqueArray","sort","results","TOUCH_INPUT_MAP","touchstart","touchmove","touchend","touchcancel","TouchInput","targetIds","touches","getTouches","targetTouches","allTouches","identifier","changedTouches","changedTargetTouches","touch","MOUSE_INPUT_MAP","mousedown","mousemove","mouseup","MouseInput","pressed","which","DEDUP_TIMEOUT","setLastTouch","eventData","primaryTouch","lastTouch","lts","lastTouches","recordTouches","isSyntheticEvent","TouchMouseInput","_manager","inputEvent","inputData","isMouse","sourceCapabilities","firesTouchEvents","mouse","invokeArrayArg","STATE_FAILED","_uniqueId","getRecognizerByNameIfManager","otherRecognizer","stateStr","Recognizer","simultaneous","requireFail","recognizeWith","dropRecognizeWith","requireFailure","dropRequireFailure","hasRequireFailures","canRecognizeWith","additionalEvent","tryEmit","canEmit","inputDataClone","reset","TapRecognizer","_Recognizer","taps","interval","time","threshold","posThreshold","pTime","pCenter","_timer","_input","count","_this2","validPointers","validMovement","validTouchTime","failTimeout","validInterval","validMultiTap","_this3","clearTimeout","tapCount","AttrRecognizer","attrTest","optionPointers","isRecognized","isValid","directionStr","PanRecognizer","_AttrRecognizer","pX","pY","directionTest","hasMoved","SwipeRecognizer","PinchRecognizer","inOut","RotateRecognizer","PressRecognizer","validTime","defaults","domEvents","inputClass","cssProps","userSelect","touchSelect","touchCallout","contentZooming","userDrag","tapHighlightColor","preset","toggleCssProps","add","oldCssProps","Manager","handlers","stop","force","stopped","curRecognizer","existing","remove","targetRecognizer","events","gestureEvent","createEvent","initEvent","gesture","dispatchEvent","triggerDomEvent","SINGLE_TOUCH_INPUT_MAP","SingleTouchInput","started","normalizeSingleTouches","changed","deprecate","message","deprecationMessage","Error","stack","log","console","warn","extend","dest","merge","inherit","child","base","childP","baseP","_super","bindFn","Hammer","VERSION","INPUT_MOVE","STATE_POSSIBLE","STATE_BEGAN","STATE_CHANGED","STATE_ENDED","STATE_RECOGNIZED","STATE_CANCELLED","Tap","Pan","Swipe","Pinch","Rotate","Press","RealHammer","DELETE","pureDeepObjectAssign","_len","updates","_key","deepObjectAssign","_concatInstanceProperty","merged","deepObjectAssignNonentry","stripDelete","_len2","_key2","_context2","setTime","_step","_iterator","_createForOfIteratorHelper","_Reflect$ownKeys","clone","err","_mapInstanceProperty","_i","_Object$keys","_Object$keys2","parseDOT","dot","graph","getToken","token","strict","tokenType","TOKENTYPE","IDENTIFIER","newSyntaxError","parseStatements","edge","parseGraph","NODE_ATTR_MAPPING","fontsize","fontcolor","labelfontcolor","fontname","color","fillcolor","tooltip","labeltooltip","EDGE_ATTR_MAPPING","_Object$create","NULL","DELIMITER","UNKNOWN","DELIMITERS","nextPreview","isAlphaNumeric","charCode","setValue","shift","addNode","graphs","nodes","attr","g","_indexOfInstanceProperty","addEdge","edges","createEdge","enabled","arrows","isComment","c2","isNaN","SyntaxError","chop","parseStatement","subgraph","parseSubgraph","parseEdge","parseAttributeList","parseAttributeStatement","parseNodeStatement","subgraphs","nof_attr_list","edgeStyles","dashed","solid","dotted","arrowTypes","box","crow","curve","icurve","normal","inv","tee","vee","attr_list","attr_names","_includesInstanceProperty","idx","dir","from_type","to_type","dir_type","_spliceInstanceProperty","idx_arrow","tmp_attr_list","text","maxLength","substr","setProp","pop","convertAttr","converted","visProp","_forEachInstanceProperty","visPropI","DOTToGraph","dotData","graphData","dotNode","graphNode","label","image","shape","_context3","convertEdge","dotEdge","graphEdge","_context4","array1","array2","_context5","subEdge","elem1","elem2","parseGephi","gephiJSON","optionsObj","inheritColor","fixed","parseColor","gEdges","vEdges","gEdge","vEdge","attributes","title","gNode","vNode","background","border","highlight","hover","addDescription","back","createEdgeError","del","deleteClusterError","edgeDescription","edit","editClusterError","editEdge","editEdgeDescription","editNode","CachedImage","NUM_ITERATIONS","Image","canvas","initialized","width","height","h2","h4","h8","h16","w2","w4","w8","w16","coordinates","_fillMipMap","getContext","drawImage","iterations","factor","left","top","Images","images","imageBroken","url","brokenUrl","imageToLoadBrokenUrlOn","onerror","imageToRedrawWith","cachedImage","img","onload","_fixImageCoordinates","_redrawWithImage","_tryloadBrokenUrl","imageToCache","body","offsetWidth","offsetHeight","removeChild","arrayBufferNonExtensible","ArrayBuffer","buffer","isExtensible","ARRAY_BUFFER_NON_EXTENSIBLE","$isExtensible","objectIsExtensible","freezing","preventExtensions","getOwnPropertyNamesExternalModule","FREEZING","REQUIRED","setMetadata","objectID","weakData","meta","internalMetadataModule","fastKey","getWeakData","onFreeze","Result","ResultPrototype","iterate","unboundFunction","iterFn","AS_ENTRIES","IS_RECORD","IS_ITERATOR","INTERRUPTED","condition","callFn","anInstance","InternalMetadataModule","internalStateGetterFor","collection","CONSTRUCTOR_NAME","wrapper","common","IS_WEAK","ADDER","NativePrototype","exported","IS_ADDER","getConstructor","setStrong","defineBuiltIns","unsafe","setSpecies","collectionStrong","define","previous","entry","getEntry","removed","clear","delete","ITERATOR_NAME","getInternalCollectionState","getInternalIteratorState","Map","Groups","_defaultIndex","_groupIndex","_defaultGroups","defaultOptions","useDefaultGroups","_Object$assign","optionFields","groupName","group","_groups","_Map","_groupNames","groupname","shouldCreate","globalIsFinite","isFinite","numberIsFinite","$some","_setPrototypeOf","p","_Object$setPrototypeOf","_bindInstanceProperty","_inherits","_possibleConstructorReturn","assertThisInitialized","_getPrototypeOf","_Object$getPrototypeOf","_defineProperty","__esModule","$Error","TEST","V8_OR_CHAKRA_STACK_ENTRY","IS_V8_OR_CHAKRA_STACK","errorStackInstallable","clearErrorStack","dropEntries","prepareStackTrace","ERROR_STACK_INSTALLABLE","captureStackTrace","copyConstructorProperties","exceptions","installErrorCause","cause","installErrorStack","normalizeStringArgument","$default","$AggregateError","errors","isInstance","AggregateErrorPrototype","errorsArray","AggregateError","$location","defer","channel","port","engineIsNode","aConstructor","speciesConstructor","defaultConstructor","engineIsIos","IS_IOS","IS_NODE","setImmediate","clearImmediate","Dispatch","MessageChannel","counter","queue","ONREADYSTATECHANGE","location","run","runner","eventListener","globalPostMessageDefer","postMessage","protocol","host","nextTick","port2","port1","onmessage","importScripts","task","Queue","head","tail","Queue$3","notify","toggle","promise","then","engineIsIosPebble","Pebble","engineIsWebosWebkit","macrotask","IS_IOS_PEBBLE","IS_WEBOS_WEBKIT","MutationObserver","WebKitMutationObserver","Promise","queueMicrotaskDescriptor","microtask","flush","exit","enter","resolve","createTextNode","observe","characterData","microtask_1","perform","promiseNativeConstructor","engineIsDeno","engineIsBrowser","NativePromiseConstructor","IS_BROWSER","IS_DENO","NativePromisePrototype","SUBCLASSING","NATIVE_PROMISE_REJECTION_EVENT","PromiseRejectionEvent","FORCED_PROMISE_CONSTRUCTOR","PROMISE_CONSTRUCTOR_SOURCE","GLOBAL_CORE_JS_PROMISE","FakePromise","promiseConstructorDetection","REJECTION_EVENT","PromiseCapability","reject","$$resolve","$$reject","newPromiseCapability","Internal","OwnPromiseCapability","hostReportErrors","PromiseConstructorDetection","newPromiseCapabilityModule","PROMISE","getInternalPromiseState","PromiseConstructor","PromisePrototype","newGenericPromiseCapability","DISPATCH_EVENT","UNHANDLED_REJECTION","isThenable","callReaction","reaction","exited","ok","fail","rejection","onHandleUnhandled","isReject","notified","reactions","onUnhandled","reason","isUnhandled","unwrap","internalReject","internalResolve","executor","onFulfilled","onRejected","PromiseWrapper","promiseStaticsIncorrectIteration","capability","$promiseResolve","remaining","alreadyCalled","catch","race","promiseResolve","promiseCapability","PromiseConstructorWrapper","CHECK_WRAPPER","allSettled","status","PROMISE_ANY_ERROR","any","alreadyResolved","alreadyRejected","finally","onFinally","isFunction","withResolvers","try","_Promise","_reverseInstanceProperty","_regeneratorRuntime","asyncIterator","toStringTag","Generator","Context","makeInvokeMethod","tryCatch","GeneratorFunction","GeneratorFunctionPrototype","defineIteratorMethods","_invoke","AsyncIterator","invoke","__await","callInvokeWithMethodAndArg","delegate","maybeInvokeDelegate","sent","_sent","dispatchException","abrupt","resultName","nextLoc","pushTryEntry","tryLoc","catchLoc","finallyLoc","afterLoc","tryEntries","resetTryEntry","completion","displayName","isGeneratorFunction","mark","awrap","async","rval","handle","complete","finish","delegateYield","runtime","regenerator","regeneratorRuntime","accidentalStrictMode","IS_RIGHT","memo","$reduce","right","reduce","flattenIntoArray","original","sourceLen","depth","mapper","thisArg","elementLen","targetIndex","sourceIndex","mapFn","flatMap","Set","mergeSort","comparefn","middle","insertionSort","llength","rlength","lindex","rindex","arraySort","firefox","engineFfVersion","engineIsIeOrEdge","webkit","engineWebkitVersion","internalSort","FF","IE_OR_EDGE","V8","WEBKIT","nativeSort","FAILS_ON_UNDEFINED","FAILS_ON_NULL","STRICT_METHOD","STABLE_SORT","code","fromCharCode","itemsLength","items","arrayLength","getSortCompare","nativeConstruct","NEW_TARGET_BUG","ARGS_BUG","Target","newTarget","$args","getOwnPropertyDescriptors","$$5","getRandomValues","rnds8","Uint8Array","rng","crypto","byteToHex","native","randomUUID","v4","buf","rnds","unsafeStringify","SimpleDataPipe","_source","_transformers","_target","_add","_remove","_update","_transformItems","_listeners","_reduceInstanceProperty","transform","_name","payload","oldData","DataPipeUnderConstruction","_filterInstanceProperty","_flatMapInstanceProperty","$parseFloat","parseFloat","numberParseFloat","Infinity","trimmedString","choosify","subOption","pile","allowed","chosen","topMost","chosenEdge","pointInRect","rotationPoint","tmp","bottom","isValidLabel","getSelfRefCoordinates","distanceToBorder","toBorderDist","yFromNodeCenter","xFromNodeCenter","LabelAccumulator","measureText","lines","mod","blocks","tmpText","block","_valuesInstanceProperty","line","tmpLines","tmpLine","firstEmptyBlock","tmpBlocks","determineLineHeights","determineLabelSize","removeEmptyBlocks","tagPattern","_","afterBold","afterItal","afterMono","MarkupAccumulator","bold","ital","mono","spacing","modStack","modName","ch","tagName","emitBlock","unshift","setTag","advance","_this$prepareRegExp2","prepareRegExp","regExp","matched","nextTag","checkTag","unsetTag","prepared","LabelSplitter","selected","getFormattingValues","finalize","font","fontOptions","nlLines","lineCount","multi","splitBlocks","maxWdt","splitStringIntoLines","append","newLine","markupSystem","system","parseEntities","parseWS","parseStartTag","parseEndTag","beginable","parseOverride","decodeMarkupSystem","splitMarkdownBlocks","splitHtmlBlocks","curWidth","words","newText","overMaxWidth","appendLast","getLongestFit","word","getLongestFitWord","newW","multiFontStyle","Label","edgelabel","pointToSelf","baseSize","setOptions","yLine","isEdgeLabel","elementOptions","initFontOptions","labelDirty","newFontOptions","parseFontString","vadjust","constrainWidth","minWdt","constrainHeight","minHgt","valign","widthConstraint","widthConstraintMaximum","widthConstraintMinimum","heightConstraint","heightConstraintMinimum","heightConstraintValign","propagateFonts","deepExtend","constrain","chooser","margins","widthBias","heightBias","dstPile","srcPile","addFontToPile","ret","tmpShorthand","opt","multiName","option","multiFont","optionNames","getFontOption","fontPile","addFontOptionsToPile","getBasicOptions","_loop","modOptions","getFontOptions","baseline","viewFontSize","view","scaling","drawThreshold","maxVisible","calculateLabelSize","_drawBackground","_drawText","fillStyle","getSize","fillRect","_this$_setAlignment2","_setAlignment","textAlign","labelHeight","align","_this$_getColor2","_getColor","strokeColor","fontColor","strokeWidth","lineWidth","strokeStyle","lineJoin","strokeText","fillText","textBaseline","initialStrokeColor","opacity","overrideOpacity","_processLabel","getValue","face","labelHighlightBold","fontString","selectedState","hoverState","inText","differentState","_processLabelText","outOptions","inOptions","newOptionsArray","NodeBase","labelModule","margin","refreshNeeded","boundingBox","adjustSizes","borderWidth","resize","shadow","shadowColor","shadowBlur","shadowSize","shadowOffsetX","shadowX","shadowOffsetY","shadowY","borderDashes","setLineDash","dashes","shapeProperties","borderColor","save","enableBorderDashes","stroke","disableBorderDashes","restore","enableShadow","_fillInstanceProperty","disableShadow","performStroke","_updateBoundingBox","textSize","getTextSize","_createSuper","Derived","hasNativeReflectConstruct","_Reflect$construct","Proxy","_isNativeReflectConstruct","Super","NewTarget","Box","_NodeBase","_setMargins","needsRefresh","dimensions","getDimensionsFromLabel","initContextForDraw","borderRadius","performFill","updateBoundingBox","_addBoundingBoxMargin","CircleImageBase","labelOffset","imageObj","imageObjAlt","setImages","selection_changed","imageTmp","imgPadding","imagePadding","optImgPadding","useImageSize","ratio_width","ratio_height","_getImagePadding","globalAlpha","interpolation","imgPosLeft","imgPosTop","imgWidth","imgHeight","drawImageAtPosition","labelDimensions","yLabel","Circle","_CircleImageBase","diameter","_drawRawCircle","CircularImage","_resizeImage","switchImages","labelX","labelY","coordinateOrigin","clip","_drawImageAtPosition","_drawImageLabel","ShapeBase","_this$customSizeWidth","_this$customSizeHeigh","customSizeWidth","customSizeHeight","sizeMultiplier","CanvasRenderingContext2D","icon","drawExternalLabel","_Object$getOwnPropertySymbols","_Object$getOwnPropertyDescriptor","_objectSpread","_Object$getOwnPropertyDescriptors","_Object$defineProperties","CustomShape","_ShapeBase","ctxRenderer","drawLater","drawNode","nodeDimensions","_distanceToBorder","Database","Diamond","_drawShape","Dot","Ellipse","Icon","iconSize","_icon","weight","side","useBorderWithImage","neutralborderWidth","selectionLineWidth","borderWidthSelected","Square","Hexagon","Star","Text","Triangle","TriangleDown","Node","imagelist","grouplist","globalOptions","bridgeObject","baseFontSize","predefinedPosition","currentShape","_localColor","checkMass","_parseInt","_parseFloat","parseOptions","_load_images","updateLabelModule","checkOpacity","updateShape","hidden","physics","load","brokenImage","unselected","updateGroupOptions","currentGroup","total","customScalingFunction","sizeDiff","fontDiff","visible","nodeId","labelId","origin","parentOptions","newOptions","groupList","groupObj","skipProperties","_Object$getOwnPropertyNames","selectiveNotDeepExtend","allowDeletion","checkCoordinateOrigin","mergeOptions","parsedColor","fillIfDefined","mass","strId","VALIDATOR_PRINT_STYLE","NodesHandler","groups","layoutEngine","functions","createNode","nodesListeners","boldital","level","bindEventListeners","emitter","refresh","_Number$isNaN","_Number$isFinite","doNotEmit","oldNodesData","isDataViewLike","DataSet","me","ids","getIds","newNodes","positionInitially","changedData","dataChanged","_someInstanceProperty","newValue","oldValue","clearPositions","dataArray","nodeIndices","dataset","getDataSet","dsNode","bodyNode","nodeList","nodeObj","toId","fromId","edgeList","_this4","_setTimeout","isDataDescriptor","receiver","_get","_Reflect$get","superPropBase","$hypot","hypot","NaN","value1","value2","div","sum","aLen","larg","EndPoint","points","arrowData","xt","yt","_EndPoint","translate","rotate","imageWidth","imageHeight","Arrow","_EndPoint2","_super2","drawPath","Crow","Curve","pi","startAngle","endAngle","InvertedCurve","InvertedTriangle","Bar","Vee","EndPoints","EdgeBase","_body","_labelModule","colorDirty","hoverWidth","selectionWidth","fromPoint","toPoint","_selected","_hover","viaNode","getViaNode","getColor","_drawDashedLine","_drawLine","_line","_this$_getCircleData2","_getCircleData","_circle","_fromPoint","_toPoint","lineCap","lineDashOffset","_this$_getCircleData4","_this$_getCircleData6","_findBorderPosition","_findBorderPositionCircle","_this$_getCircleData$2","high","selfReference","nearNode","endPointOffset","arrowStrikethrough","iteration","_pointOnCircle","difference","pow","inheritsColor","grd","createLinearGradient","fromColor","toColor","addColorStop","angleFrom","angleTo","renderBehindTheNode","pointTFrom","pointTTo","x1","y1","x3","y3","_getDistanceToEdge","_this$_getCircleData8","px","py","arrowPoint","node1","node2","reversed","scaleFactor","fromArrowScale","fromArrowType","toArrowScale","toArrowType","middleArrowScale","middleArrowType","relativeLength","_Math$hypot","smooth","pointT","via","guidePos","getPoint","halfLength","guidePos1","guidePos2","_this$_getCircleData10","core","origCtxAttr","backgroundColor","backgroundSize","setStrokeDashed","backgroundDashes","BezierEdgeBase","_EdgeBase","_getViaCoordinates","minDistance","lastX","lastY","_getDistanceToLine","viaNode1","viaNode2","quadraticCurveTo","drawBackground","BezierEdgeDynamic","_BezierEdgeBase","_boundFunction","positionBezierNode","physicsChange","setupSupportNode","connect","parentEdgeId","_bezierCurve","cx","cy","cr","_findBorderPositionBezier","_getDistanceToBezierEdge","BezierEdgeStatic","stepX","stepY","roundness","xVia","yVia","myAngle","CubicBezierEdgeBase","via1","via2","vec","CubicBezierEdge","_CubicBezierEdgeBase","viaNodes","forceDirection","_ref2","_getDistanceToBezierEdge2","_ref4","StraightEdge","edgeSegmentLength","toBorderPoint","Edge","baseWidth","edgeType","connected","affectsLayout","updateEdgeType","_setInteractionWidths","toArrow","fromArrow","middleArrow","toArrowSrc","toArrowImageWidth","toArrowImageHeight","middleArrowSrc","middleArrowImageWidth","middleArrowImageHeight","fromArrowSrc","fromArrowImageWidth","fromArrowImageHeight","selectedWidth","changeInType","cleanup","disconnect","attachEdge","detachEdge","widthDiff","drawLine","drawLabel","getArrowData","drawArrowHead","_getRotation","edgeId","isOverlappingWith","xFrom","yFrom","xTo","yTo","xObj","yObj","getDistanceToEdge","copyFromGlobals","selectiveDeepExtend","_JSON$stringify","isString","colorsDefined","selfReferenceSize","EdgesHandler","edgesListeners","edgeData","smoothOptions","reconnectEdges","oldEdgesData","edgesData","oldEdge","showInternalIds","_addMissingEdges","_removeInvalidEdges","_this5","edgesToDelete","toNode","fromNode","isCluster","addIds","BarnesHutSolver","physicsBody","barnesHutTree","_rng","Alea","thetaInversed","theta","overlapAvoidanceFactor","avoidOverlap","gravitationalConstant","physicsNodeIndices","nodeCount","_formBarnesHutTree","_getForceContributions","parentBranch","_getForceContribution","children","NW","NE","SW","SE","childrenCount","centerOfMass","calcSize","_calculateForces","gravityForce","fx","fy","forces","minX","minY","maxX","maxY","rootSize","halfRootSize","centerX","centerY","range","maxWidth","_splitBranch","_placeInTree","totalMass","totalMassInv","biggestSize","skipMassUpdate","_updateBranchMass","region","_placeInRegion","containedNode","_insertRegion","childSize","_drawBranch","branch","RepulsionSolver","repulsingForce","nodeDistance","HierarchicalRepulsionSolver","theseNodesDistance","SpringSolver","edgeLength","node3","edgeIndices","physicsEdgeIndices","springLength","_calculateSpringForce","springForce","springConstant","HierarchicalSpringSolver","springFx","springFy","totalFx","totalFy","correctionFx","correctionFy","CentralGravitySolver","centralGravity","ForceAtlas2BasedRepulsionSolver","_BarnesHutSolver","degree","ForceAtlas2BasedCentralGravitySolver","_CentralGravitySolver","PhysicsEngine","velocities","physicsEnabled","simulationInterval","requiresTimeout","previousStates","referenceState","freezeCache","renderTimer","adaptiveTimestep","adaptiveTimestepEnabled","adaptiveCounter","adaptiveInterval","stabilized","startedStabilization","stabilizationIterations","ready","barnesHut","damping","forceAtlas2Based","repulsion","hierarchicalRepulsion","maxVelocity","minVelocity","solver","stabilization","updateInterval","onlyDynamicEdges","fit","timestep","wind","layoutFailed","initPhysics","stopSimulation","startSimulation","updatePhysicsData","nodesSolver","edgesSolver","gravitySolver","Repulsion","HierarchicalRepulsion","modelOptions","stabilize","viewFunction","simulationStep","_emitStabilized","startTime","_Date$now","physicsTick","runDoubleSpeed","amountOfIterations","solve","moveNodes","_evaluateStepQuality","_startStabilizing","physicsStep","revert","adjustTimeStep","nodeIds","positions","vx","vy","reference","maxNodeVelocity","averageNodeVelocity","nodeVelocity","_performStep","m","maxV","calculateComponentVelocity","targetIterations","_freezeNodes","_stabilizationBatch","running","sendProgress","_finalizeStabilization","_restoreFrozenNodes","forceSize","arrowSize","HSVToHex","NetworkUtil","allNodes","specificNodes","clonedOptions","amountOfConnections","Cluster","_Node","containedNodes","containedEdges","childClusterId","childCluster","clusterEdge","parentClusterEdge","clusteringEdgeReplacingIds","srcId","edgeReplacedById","ClusterEngine","clusteredNodes","clusteredEdges","hubsize","_getHubSize","_checkOptions","nodesToCluster","clusterByConnection","refreshData","joinCondition","childNodesObj","childEdgesObj","_cluster","edgeCount","relevantEdgeCount","clusters","usedNodes","checkJoinCondition","cloneOptions","gatheringSuccessful","childNodeId","_getConnectedId","foundCluster","findClusterData","clusterByEdgeCount","clusterNodeProperties","parentNodeId","parentClonedOptions","childClonedOptions","childNodeIDs","childNode","childNodeKey","childEdge","clusterEdgeProperties","otherNodeId","childKeys","createEdges","newEdges","getNewEdge","createdEdge","newEdge","matchToDirection","matchFromDirection","_createClusteredEdge","_backupEdgeOptions","tmpNodesToRemove","allowSingleNodeCluster","processProperties","childNodesOptions","childEdgesOptions","clusterId","_getClusterPosition","clusterNode","_clusterEdges","originalOptions","clusterNodeId","findNode","parentIndex","parentClusterNodeId","_openChildCluster","releaseFunction","clusterPosition","newPositions","edgesToBeDeleted","otherNode","transferId","transferEdge","otherCluster","_restoreEdge","nodesArray","clusteredNodeId","startEdgeId","allEdgeIds","getClusteredEdges","clusteredEdgeId","getBaseEdges","IdsToHandle","doneIds","foundIds","nextId","nextEdge","replacingIds","replacingId","average","averageSquared","hubCounter","largestHub","variance","standardDeviation","hubThreshold","baseEdge","extraOptions","childNodes","childEdges","_createClusterEdges","clusteredNode","deletedNodeIds","deletedEdgeIds","eachClusterNode","endPointsValid","replacedIds","numValid","containedEdgeId","containedEdge","deletedEdgeId","_filter","shouldBeClustered","_isClusteredNode","_isClusteredEdge","clusterFrom","_getClusterNodeForNode","clusterTo","continueLoop","_loop2","clustersToOpen","numNodes","allowSingle","openCluster","_updateState","CanvasRenderer","requestAnimationFrame","mozRequestAnimationFrame","webkitRequestAnimationFrame","msRequestAnimationFrame","redrawRequested","renderingActive","renderRequests","allowRedraw","dragging","zooming","hideEdgesOnDrag","hideEdgesOnZoom","hideNodesOnDrag","_determineBrowserMethod","zoomTimeoutId","_requestRedraw","_resizeNodes","_redraw","_startRendering","cancelAnimationFrame","delay","timer","myWindow","_requestNextFrame","_renderStep","drawExternalLabels","frame","setSize","setTransform","clientWidth","clientHeight","clearRect","translation","_drawEdges","_drawNodes","_drawArrows","_drawSelectionBox","alwaysShow","hovered","topLeft","DOMtoCanvas","bottomRight","viewableArea","isSelected","isBoundingBoxOverlappingWith","selectedLength","hoveredLength","_i2","_drawExternalLabels2","drawArrows","browserType","selectionBox","show","onTouch","hammer","onRelease","Canvas","pixelRatio","cameraState","canvasViewCenter","_cleanupCallbacks","autoResize","hammerFrame","_cleanUp","ResizeObserver","observer","unobserve","resizeTimer","_setInterval","clearInterval","resizeFunction","_onResize","previousWidth","previousHeight","widthRatio","heightRatio","newScale","currentViewCenter","distanceFromCenter","container","hasChildNodes","firstChild","className","overflow","tabIndex","_setPixelRatio","noCanvas","fontWeight","padding","innerText","_bindHammer","drag","pinch","eventListeners","onTap","onDoubleTap","onHold","onDragStart","onDrag","onDragEnd","onPinch","onMouseWheel","onMouseMove","onContext","_prepareValue","emitEvent","oldWidth","oldHeight","previousRatio","_getCameraState","newWidth","newHeight","_setCameraState","numerator","devicePixelRatio","webkitBackingStorePixelRatio","mozBackingStorePixelRatio","msBackingStorePixelRatio","oBackingStorePixelRatio","backingStorePixelRatio","_determinePixelRatio","_XconvertCanvasToDOM","_YconvertCanvasToDOM","_XconvertDOMtoCanvas","_YconvertDOMtoCanvas","View","animationSpeed","renderRefreshRate","animationEasingFunction","easingTime","sourceScale","targetScale","sourceTranslation","targetTranslation","lockedOnNodeId","lockedOnNodeOffset","touchTime","releaseNode","initialZoom","rawOptions","allNodeIds","minZoomLevel","MIN_VALUE","maxZoomLevel","normalizeFitOptions","zoomLevel","canvasWidth","canvasHeight","getRange","positionDefined","xZoomLevel","yZoomLevel","animationOptions","findCenter","animation","nodePosition","lockedOnNode","getViewPosition","duration","easingFunction","animateView","locked","_transitionRedraw","viewCenter","_lockedRedraw","finished","progress","easingFunctions","keycharm","_exportFunctions","_bound","keydown","keyup","_keys","down","handleEvent","up","keyCode","bound","shiftKey","bindAll","getKey","unbind","newBindings","NavigationHandler","iconsCreated","navigationHammers","boundFunctions","activated","configureKeyboardBindings","navigationButtons","loadNavigationElements","cleanNavigation","navigationDOM","navigationDivs","navigationDivActions","_fit","bindToRedraw","_stopMovement","action","boundAction","keyboard","speed","scaleOld","zoom","scaleFrac","tx","ty","pointer","_context6","_context7","_context8","_context9","_context10","_context11","_context12","_context13","_context14","_context15","_context16","_context17","_context18","_context19","_context20","_context21","_context22","_context23","_context24","_context25","_context26","_context27","bindToWindow","unbindFromRedraw","InteractionHandler","selectionHandler","navigationHandler","popup","popupObj","popupTimer","getPointer","dragNodes","dragView","autoFocus","tooltipDelay","zoomView","zoomSpeed","getAbsoluteLeft","getAbsoluteTop","pinched","multiselect","ctrlKey","metaKey","checkSelectionChanges","commitAndEmit","generateClickEvent","selectAdditionalOnPoint","selectOnPoint","firstSet","secondSet","arrayDiff","firstArr","secondArr","getNodeAt","selection","setSelection","getSelectedNodes","xFixed","yFixed","diffX","diffY","selectionBoxPosition","selectionBoxPositionMinMax","toBeSelectedNodes","selectObject","preScaleDragPointer","postScaleDragPointer","canvasToDOM","popupVisible","_checkHidePopup","setPosition","focus","_checkShowPopup","hoverObject","pointerObj","previousPopupObjId","nodeUnderCursor","popupType","overlappingNodes","getTitle","overlappingEdges","Popup","popupTargetType","popupTargetId","setText","hide","_pointerToPositionObject","stillOnObj","overNode","uncaughtFrozenStore","frozen","UncaughtFrozenStore","findUncaughtFrozen","InternalWeakMap","collectionWeak","enforceInternalState","isFrozen","isSealed","freeze","seal","FROZEN","SEALED","IS_IE11","$WeakMap","WeakMapPrototype","nativeSet","nativeDelete","nativeHas","nativeGet","frozenArray","arrayIntegrityLevel","diffSets","diff","_Set","SingleTypeSelectionAccumulator","_SingleTypeSelectionAccumulator_previousSelection","_SingleTypeSelectionAccumulator_selection","__classPrivateFieldGet","_items","_items2","added","deleted","changes","getChanges","__classPrivateFieldSet","_step2","_iterator2","select","_step3","_iterator3","unselect","SelectionAccumulator","commitHandler","_SelectionAccumulator_nodes","_SelectionAccumulator_edges","_SelectionAccumulator_commitHandler","getSelection","_classPrivateFieldGe","_classPrivateFieldGe2","_classPrivateFieldGe3","summary","commit","_len3","rest","_key3","SelectionHandler","_selectionAccumulator","hoverObj","selectable","selectConnectedEdges","hoverConnectedEdges","updateSelection","getEdgeAt","unselectAll","selectionChanged","deselectObject","DOM","oldSelection","emptySelection","_initBaseEvent","getClickedItems","controlEdge","highlightEdges","_this$_selectionAccum","addEdges","addNodes","_removeFromSelection","canvasPos","returnNode","positionObject","_getAllNodesOverlappingWith","_getEdgesOverlappingWith","returnEdge","mindist","overlappingEdge","dist","_this$_selectionAccum2","deleteNodes","deleteEdges","sizeNodes","sizeEdges","_addToHover","hoverChanged","emitBlurEvent","hoveredEdgesCount","hoveredNodesCount","emitHoverEvent","_hoverConnectedEdges","selectionChanges","previousSelection","getSelectedNodeIds","getSelectedEdgeIds","getNodes","getEdges","getItemsOnPoint","DirectionInterface","abstract","fake_use","nodeArray","VerticalStrategy","_DirectionInterface","layout","hierarchical","addToOrdering","getTreeSize","min_x","max_x","_sortInstanceProperty","levelSeparation","HorizontalStrategy","_DirectionInterface2","min_y","max_y","$every","fillLevelsByDirectionCyclic","levels","fillLevelsByDirection","isEntryNode","shouldLevelBeReplaced","limit","acc","edgeIdProp","newLevelDiff","_ret","_step$value","entryNodeId","entryNode","_ret2","newLevel","targetNodeId","oldLevel","HierarchicalStatus","childrenReference","parentReference","trees","distributionOrdering","distributionIndex","isTree","treeIndex","treeId","accumulator","_getMaxLevel","nodeA","nodeB","minLevel","parents1","parents2","isPresent","curLevel","LayoutEngine","_resetRNG","setPhysics","optionsBackup","randomSeed","improvedLayout","clusterThreshold","nodeSpacing","treeSpacing","blockShifting","edgeMinimization","parentCentralization","sortMethod","setupHierarchicalLayout","layoutNetwork","curveType","allOptions","prevHierarchicalState","setDirectionStrategy","adaptAllOptionsForHierarchicalLayout","seed","initialRandomSeed","backupPhysics","indices","clusterOptions","startLength","before","modules","clustering","clusterBridges","clusterOutliers","_declusterAll","info","kamadaKawai","_shiftToCenter","getRangeCore","clustersPresent","definedLevel","undefinedLevel","lastNodeOnLevel","_determineLevelsByHubsize","_determineLevelsDirected","_determineLevelsCustomCallback","ensureLevel","distribution","_getDistribution","_generateMap","_placeNodesByHierarchy","_condenseHierarchy","stillShifting","branches","shiftTree","getTreeSizes","treeWidths","numTrees","getBranchNodes","getBranchBoundary","branchMap","maxLevel","minSpace","maxSpace","branchNode","getPosition","_this3$_getSpaceAroun2","_getSpaceAroundNode","minSpaceNode","maxSpaceNode","shiftElementsCloser","centerParents","hier","levelNodes","hasSameParent","inSameSubNetwork","branchShiftCallback","centerParent","pos1","pos2","diffAbs","branchNodes1","branchNodes2","maxLevel1","getMaxLevel","maxLevel2","getCollisionLevel","branchNodeBoundary1","branchNodeBoundary2","max1","min2","minSpace2","_shiftBlock","_centerParent","minimizeEdgeLength","allEdges","nodeLevel","C2","referenceNodes","aboveEdges","getFx","getDFx","getGuess","guess","guessMap","dfx","branchNodes","branchBoundary","minSpaceBranch","maxSpaceBranch","branchOffset","moveBranch","_this3$_getSpaceAroun4","newPosition","moveNode","getLevels","shiftBranchesCloserBottomUp","centerAllParents","minimizeEdgeLengthBottomUp","centerAllParentsBottomUp","treeSizes","shiftBy","shiftTrees","useMap","ordering","prevNode","nextNode","nextPos","parents","parentId","_getCenterPosition","_this$_getSpaceAround2","positionedNodes","_indexArrayToNodes","handledNodeCount","_validatePositionAndContinue","parentLevel","childRef","childNodeLevel","previousPos","sharedParent","_findCommonParent","withChild","_placeBranchNodes","idArray","fix","hubSizes","hubSize","_getActiveEdges","_this6","levelDownstream","_getHubSizes","_crawlNetwork","_this7","levelA","setMinLevelToZero","_this8","shakeTowards","_everyInstanceProperty","fillLevelsByDirectionRoots","fillLevelsByDirectionLeaves","_this9","addRelation","checkIfTree","_this10","startingNodeId","crawler","tree","setTreeIndex","_this11","shifter","childA","childB","_this12","iterateParents","parentRef","findParent","foundParent","isVertical","minPos","maxPos","ManipulationSystem","interactionHandler","editMode","manipulationDiv","editModeDiv","closeDiv","_domEventListenerCleanupQueue","temporaryUIFunctions","temporaryEventFunctions","temporaryIds","guiEnabled","inMode","selectedControlNode","initiallyActive","deleteNode","deleteEdge","controlNodeStyle","_clean","_restore","enableEditMode","disableEditMode","locale","locales","_setup","showManipulatorToolbar","_createEditButton","manipulationDOM","selectedNodeCount","getSelectedNodeCount","selectedEdgeCount","getSelectedEdgeCount","selectedTotalCount","needSeperator","_createAddNodeButton","_createSeperator","_createAddEdgeButton","_createEditNodeButton","_createEditEdgeButton","_createDeleteButton","_bindElementEvents","toggleEditMode","_temporaryBindEvent","_createBackButton","_createDescription","_performAddNode","finalizedData","alert","_temporaryBindUI","_handleConnect","_finishConnect","_dragControlNode","_dragStartEdge","editWithoutDrag","edgeBeingEditedId","controlNodeFrom","_getNewTargetNode","controlNodeTo","_controlNodeTouch","_controlNodeDragStart","_controlNodeDrag","_controlNodeDragEnd","findBorderPositions","_performEditEdge","selectedNodes","selectedEdges","deleteFunction","_createWrappers","_removeManipulationDOM","_this$options$locales","_this$options$locales2","setAttribute","recursiveDOMDelete","_createButton","_cleanupDOMEventListeners","_cleanupTemporaryNodesAndEdges","_unbindTemporaryUIs","_unbindTemporaryEvents","addNodeMode","addEdgeMode","editEdgeMode","deleteBtnClass","rtl","deleteSelected","labelClassName","newFunction","UIfunctionName","eventName","domElement","keyupListener","_ref","indexTempEdge","_context28","_context29","indexTempNode","fromSelect","toSelect","overlappingNodeIds","targetNode","connectionEdge","connectFromId","_context30","_context31","_performAddEdge","clickData","defaultData","sourceNodeId","eeFunct","bool","endPoints","nodeOptions","boolean","function","__type__","minimum","dom","maximum","configure","showButton","__any__","interaction","manipulation","clickToUse","configureOptions","configuratorHideOption","parentPath","optionName","FloydWarshall","edgesArray","D_matrix","cell","knode","kcolm","inode","icolm","jnode","jcolm","KamadaKawai","edgeStrength","distanceSolver","ignoreClusters","getDistances","_createL_matrix","_createK_matrix","_createE_matrix","maxIterations","maxEnergy","highE_nodeId","dE_dx","dE_dy","delta_m","subIterations","_this$_getHighestEner2","_getHighestEnergyNode","_moveNode","_this$_getEnergy2","_getEnergy","maxEnergyNodeId","dE_dx_max","dE_dy_max","nodeIdx","_this$_getEnergy4","_this$E_sums$m","E_sums","d2E_dx2","d2E_dxdy","d2E_dy2","x_m","y_m","km","K_matrix","lm","L_matrix","iIdx","x_i","y_i","kmat","lmat","denominator","_updateE_matrix","E_matrix","mIdx","colm","lcolm","oldDx","oldDy","Network","renderer","nodesHandler","edgesHandler","_create","setData","prepareElements","JSONcontainer","elementType","redundant","used","cleanupElements","getSVGElement","svgContainer","createElementNS","Validator","validate","rawCode","_rawCode$split2","rawLanguage","rawCountry","language","country","normalizeLanguageCode","configurator","Configurator","networkOptions","setModuleOptions","activator","Activator","_updateVisibleIndices","edgeNodesPresent","_updateValueRange","gephi","gephiData","valueMin","valueMax","valueTotal","setValueRange","isActive","active","cluster","getNodesInCluster","clusterByHubsize","updateClusteredNode","getBaseEdge","updateEdge","getSeed","editNodeMode","getPositions","storePositions","getBoundingBox","getConnectedNodes","objectId","getConnectedEdges","getSelectedEdges","selectNodes","selectEdges","commitWithoutEmitting","redraw","getScale","getOptionsFromConfigurator","getOptions","setAttributeNS","groupTemplate","labelObj","styles","xOffset","yOffset","textContent","DOMContainer","insertBefore","network","dotparser","gephiParser","convertDot","convertGephi"],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;2eACA,IAAIA,EAAQ,SAAUC,GACpB,OAAOA,GAAMA,EAAGC,OAASA,MAAQD,CACnC,EAGAE,EAEEH,EAA2B,iBAAdI,YAA0BA,aACvCJ,EAAuB,iBAAVK,QAAsBA,SAEnCL,EAAqB,iBAARM,MAAoBA,OACjCN,EAAuB,iBAAVG,GAAsBA,IAEnC,WAAe,OAAOI,IAAO,CAA7B,IAAoCA,GAAQC,SAAS,cAATA,GCb9CC,EAAiB,SAAUC,GACzB,IACE,QAASA,GACV,CAAC,MAAOC,GACP,OAAO,CACR,CACH,ECJAC,GAFYC,GAEY,WAEtB,IAAIC,EAAO,WAA4B,EAAEC,OAEzC,MAAsB,mBAARD,GAAsBA,EAAKE,eAAe,YAC1D,ICPIC,EAAcJ,EAEdK,EAAoBV,SAASW,UAC7BC,EAAQF,EAAkBE,MAC1BC,EAAOH,EAAkBG,KAG7BC,EAAmC,iBAAXC,SAAuBA,QAAQH,QAAUH,EAAcI,EAAKN,KAAKK,GAAS,WAChG,OAAOC,EAAKD,MAAMA,EAAOI,UAC3B,GCTIP,EAAcJ,EAEdK,EAAoBV,SAASW,UAC7BE,EAAOH,EAAkBG,KACzBI,EAAsBR,GAAeC,EAAkBH,KAAKA,KAAKM,EAAMA,GAE3EK,EAAiBT,EAAcQ,EAAsB,SAAUE,GAC7D,OAAO,WACL,OAAON,EAAKD,MAAMO,EAAIH,UAC1B,CACA,ECVII,EAAcf,EAEdgB,EAAWD,EAAY,GAAGC,UAC1BC,EAAcF,EAAY,GAAGG,OAEjCC,EAAiB,SAAU/B,GACzB,OAAO6B,EAAYD,EAAS5B,GAAK,GAAI,EACvC,ECPI+B,EAAanB,EACbe,EAAcK,EAElBC,EAAiB,SAAUP,GAIzB,GAAuB,aAAnBK,EAAWL,GAAoB,OAAOC,EAAYD,EACxD,ECRIQ,EAAiC,iBAAZC,UAAwBA,SAASC,IAM1DC,EAAiB,CACfD,IAAKF,EACLI,gBAJqC,IAAfJ,QAA8CK,IAAhBL,GCFlDA,EAFetB,EAEYwB,IAI/BI,EANmB5B,EAMW0B,WAAa,SAAUG,GACnD,MAA0B,mBAAZA,GAA0BA,IAAaP,CACvD,EAAI,SAAUO,GACZ,MAA0B,mBAAZA,CAChB,OCPAC,GAHY9B,GAGY,WAEtB,OAA+E,IAAxE+B,OAAOC,eAAe,GAAI,EAAG,CAAEC,IAAK,WAAc,OAAO,CAAI,IAAI,EAC1E,ICNI7B,EAAcJ,EAEdQ,EAAOb,SAASW,UAAUE,KAE9B0B,EAAiB9B,EAAcI,EAAKN,KAAKM,GAAQ,WAC/C,OAAOA,EAAKD,MAAMC,EAAMG,UAC1B,OCNIwB,EAAwB,CAAE,EAACC,qBAE3BC,EAA2BN,OAAOM,yBAGlCC,EAAcD,IAA6BF,EAAsB3B,KAAK,CAAE,EAAG,GAAK,GAIpF+B,EAAAC,EAAYF,EAAc,SAA8BG,GACtD,IAAIC,EAAaL,EAAyB3C,KAAM+C,GAChD,QAASC,GAAcA,EAAWC,UACpC,EAAIR,ECZJ,ICOIS,EAAOC,EDPXC,EAAiB,SAAUC,EAAQC,GACjC,MAAO,CACLL,aAAuB,EAATI,GACdE,eAAyB,EAATF,GAChBG,WAAqB,EAATH,GACZC,MAAOA,EAEX,EENIpD,EAAQwB,EACR+B,EAAUC,EAEVC,EAAUtB,OACVuB,EALctD,EAKM,GAAGsD,OAG3BC,EAAiB3D,GAAM,WAGrB,OAAQyD,EAAQ,KAAKjB,qBAAqB,EAC5C,IAAK,SAAUhD,GACb,MAAuB,WAAhB+D,EAAQ/D,GAAmBkE,EAAMlE,EAAI,IAAMiE,EAAQjE,EAC5D,EAAIiE,ECZJG,EAAiB,SAAUpE,GACzB,OAAOA,OACT,ECJIoE,EAAoBxD,EAEpByD,EAAaC,UAIjBC,EAAiB,SAAUvE,GACzB,GAAIoE,EAAkBpE,GAAK,MAAM,IAAIqE,EAAW,wBAA0BrE,GAC1E,OAAOA,CACT,ECRIwE,EAAgB5D,EAChB2D,EAAyBvC,EAE7ByC,EAAiB,SAAUzE,GACzB,OAAOwE,EAAcD,EAAuBvE,GAC9C,ECNIwC,EAAa5B,EAGbsB,EAFeF,EAEYI,IAE/BsC,GAJmB1C,EAIWM,WAAa,SAAUtC,GACnD,MAAoB,iBAANA,EAAwB,OAAPA,EAAcwC,EAAWxC,IAAOA,IAAOkC,CACxE,EAAI,SAAUlC,GACZ,MAAoB,iBAANA,EAAwB,OAAPA,EAAcwC,EAAWxC,EAC1D,ECTA2E,GAAiB,CAAE,ECAfA,GAAO/D,GACPV,GAAS8B,EACTQ,GAAawB,EAEbY,GAAY,SAAUC,GACxB,OAAOrC,GAAWqC,GAAYA,OAAWtC,CAC3C,EAEAuC,GAAiB,SAAUC,EAAWC,GACpC,OAAOzD,UAAU0D,OAAS,EAAIL,GAAUD,GAAKI,KAAeH,GAAU1E,GAAO6E,IACzEJ,GAAKI,IAAcJ,GAAKI,GAAWC,IAAW9E,GAAO6E,IAAc7E,GAAO6E,GAAWC,EAC3F,ECTAE,GAFkBtE,EAEW,CAAE,EAACuE,eCFhCC,GAAqC,oBAAbC,WAA4BC,OAAOD,UAAUE,YAAc,GTA/ErF,GAASU,EACT2E,GAAYvD,GAEZwD,GAAUtF,GAAOsF,QACjBC,GAAOvF,GAAOuF,KACdC,GAAWF,IAAWA,GAAQE,UAAYD,IAAQA,GAAKhC,QACvDkC,GAAKD,IAAYA,GAASC,GAG1BA,KAIFlC,GAHAD,EAAQmC,GAAGzB,MAAM,MAGD,GAAK,GAAKV,EAAM,GAAK,EAAI,IAAMA,EAAM,GAAKA,EAAM,MAK7DC,GAAW8B,OACd/B,EAAQ+B,GAAU/B,MAAM,iBACVA,EAAM,IAAM,MACxBA,EAAQ+B,GAAU/B,MAAM,oBACbC,GAAWD,EAAM,IAIhC,IAAAoC,GAAiBnC,EUzBboC,GAAajF,GACbJ,GAAQwB,EAGR8D,GAFS9B,EAEQsB,OAGrBS,KAAmBpD,OAAOqD,wBAA0BxF,IAAM,WACxD,IAAIyF,EAASC,OAAO,oBAKpB,OAAQJ,GAAQG,MAAatD,OAAOsD,aAAmBC,UAEpDA,OAAOC,MAAQN,IAAcA,GAAa,EAC/C,ICdAO,GAFoBxF,KAGdsF,OAAOC,MACkB,iBAAnBD,OAAOG,SCLfvB,GAAalE,GACb4B,GAAaR,EACbmD,GAAgBnB,GAGhBC,GAAUtB,OAEd2D,GAJwBC,GAIa,SAAUvG,GAC7C,MAAoB,iBAANA,CAChB,EAAI,SAAUA,GACZ,IAAIwG,EAAU1B,GAAW,UACzB,OAAOtC,GAAWgE,IAAYrB,GAAcqB,EAAQtF,UAAW+C,GAAQjE,GACzE,ECZI8F,GAAUR,OAEdmB,GAAiB,SAAUhE,GACzB,IACE,OAAOqD,GAAQrD,EAChB,CAAC,MAAO/B,GACP,MAAO,QACR,CACH,ECRI8B,GAAa5B,EACb6F,GAAczE,GAEdqC,GAAaC,UAGjBoC,GAAiB,SAAUjE,GACzB,GAAID,GAAWC,GAAW,OAAOA,EACjC,MAAM,IAAI4B,GAAWoC,GAAYhE,GAAY,qBAC/C,ECTIiE,GAAY9F,GACZwD,GAAoBpC,EAIxB2E,GAAiB,SAAUtD,EAAGuD,GAC5B,IAAIC,EAAOxD,EAAEuD,GACb,OAAOxC,GAAkByC,QAAQtE,EAAYmE,GAAUG,EACzD,ECRIzF,GAAOR,EACP4B,GAAaR,EACb0C,GAAWV,GAEXK,GAAaC,0BCJbpE,GAASU,EAGTgC,GAAiBD,OAAOC,eCFxBkE,GDIa,SAAUC,EAAKnD,GAC9B,IACEhB,GAAe1C,GAAQ6G,EAAK,CAAEnD,MAAOA,EAAOC,cAAc,EAAMC,UAAU,GAC3E,CAAC,MAAOpD,GACPR,GAAO6G,GAAOnD,CACf,CAAC,OAAOA,CACX,ECRIoD,GAAS,qBAGbC,GANarG,EAIMoG,KAAWF,GAAqBE,GAAQ,CAAA,GCHvDE,GAAQlF,IAEXmF,WAAiB,SAAUJ,EAAKnD,GAC/B,OAAOsD,GAAMH,KAASG,GAAMH,QAAiBxE,IAAVqB,EAAsBA,EAAQ,CAAA,EACnE,GAAG,WAAY,IAAIwD,KAAK,CACtB3D,QAAS,SACT4D,KAAgB,OAChBC,UAAW,4CACXC,QAAS,2DACTC,OAAQ,0DCVNjD,GAAyB3D,EAEzBqD,GAAUtB,OAId8E,GAAiB,SAAUhF,GACzB,OAAOwB,GAAQM,GAAuB9B,GACxC,ECPIgF,GAAWzF,GAEXjB,GAHcH,EAGe,GAAGG,gBAKpC2G,GAAiB/E,OAAOgF,QAAU,SAAgB3H,EAAI+G,GACpD,OAAOhG,GAAe0G,GAASzH,GAAK+G,EACtC,ECVIpF,GAAcf,EAEdgH,GAAK,EACLC,GAAU5H,KAAK6H,SACflG,GAAWD,GAAY,GAAIC,UAE/BmG,GAAiB,SAAUhB,GACzB,MAAO,gBAAqBxE,IAARwE,EAAoB,GAAKA,GAAO,KAAOnF,KAAWgG,GAAKC,GAAS,GACtF,ECPIG,GAAShG,GACT2F,GAAS3D,GACT+D,GAAMxB,GACN0B,GAAgBC,GAChBC,GAAoBC,GAEpBlC,GAPStF,EAOOsF,OAChBmC,GAAwBL,GAAO,OAC/BM,GAAwBH,GAAoBjC,GAAY,KAAKA,GAASA,IAAUA,GAAOqC,eAAiBR,GAE5GS,GAAiB,SAAUC,GAKvB,OAJGd,GAAOU,GAAuBI,KACjCJ,GAAsBI,GAAQR,IAAiBN,GAAOzB,GAAQuC,GAC1DvC,GAAOuC,GACPH,GAAsB,UAAYG,IAC/BJ,GAAsBI,EACjC,ECjBIrH,GAAOR,EACP8D,GAAW1C,GACXsE,GAAWtC,GACX2C,GAAYJ,GACZmC,GRIa,SAAUC,EAAOC,GAChC,IAAIlH,EAAImH,EACR,GAAa,WAATD,GAAqBpG,GAAWd,EAAKiH,EAAM/G,YAAc8C,GAASmE,EAAMzH,GAAKM,EAAIiH,IAAS,OAAOE,EACrG,GAAIrG,GAAWd,EAAKiH,EAAMG,WAAapE,GAASmE,EAAMzH,GAAKM,EAAIiH,IAAS,OAAOE,EAC/E,GAAa,WAATD,GAAqBpG,GAAWd,EAAKiH,EAAM/G,YAAc8C,GAASmE,EAAMzH,GAAKM,EAAIiH,IAAS,OAAOE,EACrG,MAAM,IAAIxE,GAAW,0CACvB,EQPIA,GAAaC,UACbyE,GAHkBX,GAGa,eCR/BY,GDYa,SAAUL,EAAOC,GAChC,IAAKlE,GAASiE,IAAUrC,GAASqC,GAAQ,OAAOA,EAChD,IACIM,EADAC,EAAevC,GAAUgC,EAAOI,IAEpC,GAAIG,EAAc,CAGhB,QAFa3G,IAATqG,IAAoBA,EAAO,WAC/BK,EAAS7H,GAAK8H,EAAcP,EAAOC,IAC9BlE,GAASuE,IAAW3C,GAAS2C,GAAS,OAAOA,EAClD,MAAM,IAAI5E,GAAW,0CACtB,CAED,YADa9B,IAATqG,IAAoBA,EAAO,UACxBF,GAAoBC,EAAOC,EACpC,ECvBItC,GAAWtE,GAIfmH,GAAiB,SAAU1G,GACzB,IAAIsE,EAAMiC,GAAYvG,EAAU,UAChC,OAAO6D,GAASS,GAAOA,EAAMA,EAAM,EACrC,ECPIrC,GAAW1C,GAEXG,GAHSvB,EAGSuB,SAElBiH,GAAS1E,GAASvC,KAAauC,GAASvC,GAASkH,eAErDC,GAAiB,SAAUtJ,GACzB,OAAOoJ,GAASjH,GAASkH,cAAcrJ,GAAM,CAAA,CAC/C,ECPIqJ,GAAgBrF,GAGpBuF,IALkB3I,IACNoB,GAI4B,WAEtC,OAES,IAFFW,OAAOC,eAAeyG,GAAc,OAAQ,IAAK,CACtDxG,IAAK,WAAc,OAAO,CAAI,IAC7B2G,CACL,ICVIC,GAAc7I,EACdQ,GAAOY,EACP0H,GAA6B1F,EAC7BN,GAA2B6C,EAC3B9B,GAAkByD,EAClBiB,GAAgBf,GAChBT,GAASgC,GACTC,GAAiBC,GAGjBC,GAA4BnH,OAAOM,yBAI9B8G,EAAA3G,EAAGqG,GAAcK,GAA4B,SAAkCE,EAAGpD,GAGzF,GAFAoD,EAAIvF,GAAgBuF,GACpBpD,EAAIuC,GAAcvC,GACdgD,GAAgB,IAClB,OAAOE,GAA0BE,EAAGpD,EACxC,CAAI,MAAOlG,GAAsB,CAC/B,GAAIiH,GAAOqC,EAAGpD,GAAI,OAAOlD,IAA0BtC,GAAKsI,GAA2BtG,EAAG4G,EAAGpD,GAAIoD,EAAEpD,GACjG,ECrBA,IAAIpG,GAAQI,EACR4B,GAAaR,EAEbiI,GAAc,kBAEdC,GAAW,SAAUC,EAASC,GAChC,IAAIxG,EAAQyG,GAAKC,GAAUH,IAC3B,OAAOvG,IAAU2G,IACb3G,IAAU4G,KACVhI,GAAW4H,GAAa5J,GAAM4J,KAC5BA,EACR,EAEIE,GAAYJ,GAASI,UAAY,SAAUG,GAC7C,OAAOnF,OAAOmF,GAAQC,QAAQT,GAAa,KAAKU,aAClD,EAEIN,GAAOH,GAASG,KAAO,GACvBG,GAASN,GAASM,OAAS,IAC3BD,GAAWL,GAASK,SAAW,IAEnCK,GAAiBV,GCpBbxD,GAAY1E,GACZhB,GAAcgD,EAEdlD,GAJcF,IAIiBE,MAGnC+J,GAAiB,SAAUnJ,EAAIoJ,GAE7B,OADApE,GAAUhF,QACMa,IAATuI,EAAqBpJ,EAAKV,GAAcF,GAAKY,EAAIoJ,GAAQ,WAC9D,OAAOpJ,EAAGP,MAAM2J,EAAMvJ,UAC1B,CACA,QCPAwJ,GALkBnK,GACNoB,GAI0B,WAEpC,OAGiB,KAHVW,OAAOC,gBAAe,WAAY,GAAiB,YAAa,CACrEgB,MAAO,GACPE,UAAU,IACT5C,SACL,ICXIwD,GAAW9D,GAEXkF,GAAUR,OACVjB,GAAaC,UAGjB0G,GAAiB,SAAUvI,GACzB,GAAIiC,GAASjC,GAAW,OAAOA,EAC/B,MAAM,IAAI4B,GAAWyB,GAAQrD,GAAY,oBAC3C,ECTIgH,GAAc7I,EACdgJ,GAAiB5H,GACjBiJ,GAA0BjH,GAC1BgH,GAAWzE,GACX4C,GAAgBjB,GAEhB7D,GAAaC,UAEb4G,GAAkBvI,OAAOC,eAEzBkH,GAA4BnH,OAAOM,yBACnCkI,GAAa,aACbC,GAAe,eACfC,GAAW,WAIfC,GAAAlI,EAAYqG,GAAcwB,GAA0B,SAAwBjB,EAAGpD,EAAG2E,GAIhF,GAHAP,GAAShB,GACTpD,EAAIuC,GAAcvC,GAClBoE,GAASO,GACQ,mBAANvB,GAA0B,cAANpD,GAAqB,UAAW2E,GAAcF,MAAYE,IAAeA,EAAWF,IAAW,CAC5H,IAAIG,EAAU1B,GAA0BE,EAAGpD,GACvC4E,GAAWA,EAAQH,MACrBrB,EAAEpD,GAAK2E,EAAW3H,MAClB2H,EAAa,CACX1H,aAAcuH,MAAgBG,EAAaA,EAAWH,IAAgBI,EAAQJ,IAC9E7H,WAAY4H,MAAcI,EAAaA,EAAWJ,IAAcK,EAAQL,IACxErH,UAAU,GAGf,CAAC,OAAOoH,GAAgBlB,EAAGpD,EAAG2E,EACjC,EAAIL,GAAkB,SAAwBlB,EAAGpD,EAAG2E,GAIlD,GAHAP,GAAShB,GACTpD,EAAIuC,GAAcvC,GAClBoE,GAASO,GACL3B,GAAgB,IAClB,OAAOsB,GAAgBlB,EAAGpD,EAAG2E,EACjC,CAAI,MAAO7K,GAAsB,CAC/B,GAAI,QAAS6K,GAAc,QAASA,EAAY,MAAM,IAAIlH,GAAW,2BAErE,MADI,UAAWkH,IAAYvB,EAAEpD,GAAK2E,EAAW3H,OACtCoG,CACT,EC1CA,IACIyB,GAAuBzJ,GACvB0B,GAA2BM,EAE/B0H,GAJkB9K,EAIa,SAAU+K,EAAQ5E,EAAKnD,GACpD,OAAO6H,GAAqBrI,EAAEuI,EAAQ5E,EAAKrD,GAAyB,EAAGE,GACzE,EAAI,SAAU+H,EAAQ5E,EAAKnD,GAEzB,OADA+H,EAAO5E,GAAOnD,EACP+H,CACT,ECTIzL,GAASU,EACTO,GAAQa,EACRL,GAAcqC,EACdxB,GAAa+D,EACbtD,GAA2BiF,EAA2D9E,EACtF8G,GAAW9B,GACXzD,GAAOgF,GACP7I,GAAO+I,GACP6B,GAA8BE,GAC9BjE,GAASkE,GAETC,GAAkB,SAAUC,GAC9B,IAAIC,EAAU,SAAUxC,EAAGyC,EAAGC,GAC5B,GAAI5L,gBAAgB0L,EAAS,CAC3B,OAAQzK,UAAU0D,QAChB,KAAK,EAAG,OAAO,IAAI8G,EACnB,KAAK,EAAG,OAAO,IAAIA,EAAkBvC,GACrC,KAAK,EAAG,OAAO,IAAIuC,EAAkBvC,EAAGyC,GACxC,OAAO,IAAIF,EAAkBvC,EAAGyC,EAAGC,EACtC,CAAC,OAAO/K,GAAM4K,EAAmBzL,KAAMiB,UAC5C,EAEE,OADAyK,EAAQ9K,UAAY6K,EAAkB7K,UAC/B8K,CACT,EAiBAG,GAAiB,SAAUC,EAAS5E,GAClC,IAUI6E,EAAQC,EAAYC,EACpBxF,EAAKyF,EAAgBC,EAAgBC,EAAgBC,EAAgBrJ,EAXrEsJ,EAASR,EAAQS,OACjBC,EAASV,EAAQlM,OACjB6M,EAASX,EAAQY,KACjBC,EAAQb,EAAQc,MAEhBC,EAAeL,EAAS5M,GAAS6M,EAAS7M,GAAO0M,IAAW1M,GAAO0M,IAAW,CAAA,GAAI1L,UAElF2L,EAASC,EAASnI,GAAOA,GAAKiI,IAAWlB,GAA4B/G,GAAMiI,EAAQ,IAAIA,GACvFQ,EAAkBP,EAAO3L,UAK7B,IAAK6F,KAAOS,EAGV8E,IAFAD,EAASnC,GAAS4C,EAAS/F,EAAM6F,GAAUG,EAAS,IAAM,KAAOhG,EAAKqF,EAAQiB,UAEtDF,GAAgBxF,GAAOwF,EAAcpG,GAE7D0F,EAAiBI,EAAO9F,GAEpBuF,IAEFI,EAFkBN,EAAQkB,gBAC1BhK,EAAaL,GAAyBkK,EAAcpG,KACrBzD,EAAWM,MACpBuJ,EAAapG,IAGrCyF,EAAkBF,GAAcI,EAAkBA,EAAiBlF,EAAOT,GAEtEuF,UAAqBG,UAAyBD,IAGlBG,EAA5BP,EAAQtL,MAAQwL,EAA6BxL,GAAK0L,EAAgBtM,IAE7DkM,EAAQmB,MAAQjB,EAA6BR,GAAgBU,GAE7DS,GAASzK,GAAWgK,GAAkC7K,GAAY6K,GAErDA,GAGlBJ,EAAQjG,MAASqG,GAAkBA,EAAerG,MAAUsG,GAAkBA,EAAetG,OAC/FuF,GAA4BiB,EAAgB,QAAQ,GAGtDjB,GAA4BmB,EAAQ9F,EAAK4F,GAErCM,IAEGtF,GAAOhD,GADZ4H,EAAoBK,EAAS,cAE3BlB,GAA4B/G,GAAM4H,EAAmB,CAAA,GAGvDb,GAA4B/G,GAAK4H,GAAoBxF,EAAKyF,GAEtDJ,EAAQoB,MAAQJ,IAAoBf,IAAWe,EAAgBrG,KACjE2E,GAA4B0B,EAAiBrG,EAAKyF,IAI1D,ECpGIiB,GAAOxN,KAAKwN,KACZC,GAAQzN,KAAKyN,MCDbC,GDMa1N,KAAK0N,OAAS,SAAeC,GAC5C,IAAIC,GAAKD,EACT,OAAQC,EAAI,EAAIH,GAAQD,IAAMI,EAChC,ECLAC,GAAiB,SAAUrL,GACzB,IAAIsL,GAAUtL,EAEd,OAAOsL,GAAWA,GAAqB,IAAXA,EAAe,EAAIJ,GAAMI,EACvD,ECRID,GAAsBlN,GAEtBoN,GAAM/N,KAAK+N,IACXC,GAAMhO,KAAKgO,IAKfC,GAAiB,SAAUC,EAAOlJ,GAChC,IAAImJ,EAAUN,GAAoBK,GAClC,OAAOC,EAAU,EAAIJ,GAAII,EAAUnJ,EAAQ,GAAKgJ,GAAIG,EAASnJ,EAC/D,ECXI6I,GAAsBlN,GAEtBqN,GAAMhO,KAAKgO,ICFXI,GDMa,SAAU5L,GACzB,OAAOA,EAAW,EAAIwL,GAAIH,GAAoBrL,GAAW,kBAAoB,CAC/E,ECJA6L,GAAiB,SAAUC,GACzB,OAAOF,GAASE,EAAItJ,OACtB,ECNIR,GAAkB7D,EAClBsN,GAAkBlM,GAClBsM,GAAoBtK,GAGpBwK,GAAe,SAAUC,GAC3B,OAAO,SAAUC,EAAOC,EAAIC,GAC1B,IAGIhL,EAHAoG,EAAIvF,GAAgBiK,GACpBzJ,EAASqJ,GAAkBtE,GAC3BmE,EAAQD,GAAgBU,EAAW3J,GAIvC,GAAIwJ,GAAeE,GAAOA,GAAI,KAAO1J,EAASkJ,GAG5C,IAFAvK,EAAQoG,EAAEmE,OAEIvK,EAAO,OAAO,OAEvB,KAAMqB,EAASkJ,EAAOA,IAC3B,IAAKM,GAAeN,KAASnE,IAAMA,EAAEmE,KAAWQ,EAAI,OAAOF,GAAeN,GAAS,EACnF,OAAQM,IAAgB,CAC9B,CACA,EAEAI,GAAiB,CAGfC,SAAUN,IAAa,GAGvBO,QAASP,IAAa,IC9BxBQ,GAAiB,CAAE,ECCfrH,GAAS3F,GACTyC,GAAkBT,EAClB+K,GAAUxI,GAAuCwI,QACjDC,GAAa9G,GAEbd,GANcxG,EAMK,GAAGwG,MAE1B6H,GAAiB,SAAUtD,EAAQuD,GACjC,IAGInI,EAHAiD,EAAIvF,GAAgBkH,GACpBwD,EAAI,EACJlG,EAAS,GAEb,IAAKlC,KAAOiD,GAAIrC,GAAOqH,GAAYjI,IAAQY,GAAOqC,EAAGjD,IAAQK,GAAK6B,EAAQlC,GAE1E,KAAOmI,EAAMjK,OAASkK,GAAOxH,GAAOqC,EAAGjD,EAAMmI,EAAMC,SAChDJ,GAAQ9F,EAAQlC,IAAQK,GAAK6B,EAAQlC,IAExC,OAAOkC,CACT,EClBAmG,GAAiB,CACf,cACA,iBACA,gBACA,uBACA,iBACA,WACA,WCREC,GAAqBzO,GACrBwO,GAAcpN,GAKlBsN,GAAiB3M,OAAO4M,MAAQ,SAAcvF,GAC5C,OAAOqF,GAAmBrF,EAAGoF,GAC/B,QCPSI,GAAApM,EAAGT,OAAOqD,sBCDnB,IAAIyD,GAAc7I,EACde,GAAcK,EACdZ,GAAO4C,EACPxD,GAAQ+F,EACR+I,GAAapH,GACbuH,GAA8BrH,GAC9BsB,GAA6BC,EAC7BlC,GAAWoC,GACXrF,GAAgBoH,EAGhB8D,GAAU/M,OAAOgN,OAEjB/M,GAAiBD,OAAOC,eACxBgN,GAASjO,GAAY,GAAGiO,QAI5BC,IAAkBH,IAAWlP,IAAM,WAEjC,GAAIiJ,IAQiB,IARFiG,GAAQ,CAAEzD,EAAG,GAAKyD,GAAQ9M,GAAe,CAAE,EAAE,IAAK,CACnEW,YAAY,EACZV,IAAK,WACHD,GAAetC,KAAM,IAAK,CACxBsD,MAAO,EACPL,YAAY,GAEf,IACC,CAAE0I,EAAG,KAAMA,EAAS,OAAO,EAE/B,IAAI6D,EAAI,CAAA,EACJC,EAAI,CAAA,EAEJ9J,EAASC,OAAO,oBAChB8J,EAAW,uBAGf,OAFAF,EAAE7J,GAAU,EACZ+J,EAAS9L,MAAM,IAAI+L,SAAQ,SAAUC,GAAOH,EAAEG,GAAOA,CAAM,IACzB,IAA3BR,GAAQ,CAAA,EAAII,GAAG7J,IAAiBqJ,GAAWI,GAAQ,CAAA,EAAIK,IAAII,KAAK,MAAQH,CACjF,IAAK,SAAgBnD,EAAQrF,GAM3B,IALA,IAAI4I,EAAI3I,GAASoF,GACbwD,EAAkB9O,UAAU0D,OAC5BkJ,EAAQ,EACRnI,EAAwByJ,GAA4BrM,EACpDJ,EAAuB0G,GAA2BtG,EAC/CiN,EAAkBlC,GAMvB,IALA,IAIIpH,EAJAuJ,EAAI9L,GAAcjD,UAAU4M,MAC5BoB,EAAOvJ,EAAwB4J,GAAON,GAAWgB,GAAItK,EAAsBsK,IAAMhB,GAAWgB,GAC5FrL,EAASsK,EAAKtK,OACdsL,EAAI,EAEDtL,EAASsL,GACdxJ,EAAMwI,EAAKgB,KACN9G,KAAerI,GAAK4B,EAAsBsN,EAAGvJ,KAAMqJ,EAAErJ,GAAOuJ,EAAEvJ,IAErE,OAAOqJ,CACX,EAAIV,GCtDAC,GAAS3N,GADLpB,GAMN,CAAEiM,OAAQ,SAAUG,MAAM,EAAMwD,MAAO,EAAGnD,OAAQ1K,OAAOgN,SAAWA,IAAU,CAC9EA,OAAQA,KCNV,SAAW3N,GAEWW,OAAOgN,QCD7Bc,GAFkB7P,EAEW,GAAGkB,OCF5BH,GAAcf,EACd8F,GAAY1E,GACZ0C,GAAWV,GACX2D,GAASpB,GACTkK,GAAavI,GACblH,GAAcoH,EAEdsI,GAAYnQ,SACZqP,GAASjO,GAAY,GAAGiO,QACxBO,GAAOxO,GAAY,GAAGwO,MACtBQ,GAAY,CAAA,EAchBC,GAAiB5P,GAAc0P,GAAU5P,KAAO,SAAcgK,GAC5D,IAAI+F,EAAInK,GAAUpG,MACdwQ,EAAYD,EAAE3P,UACd6P,EAAWN,GAAWlP,UAAW,GACjCyP,EAAgB,WAClB,IAAIC,EAAOrB,GAAOmB,EAAUN,GAAWlP,YACvC,OAAOjB,gBAAgB0Q,EAlBX,SAAUE,EAAGC,EAAYF,GACvC,IAAKtJ,GAAOgJ,GAAWQ,GAAa,CAGlC,IAFA,IAAIC,EAAO,GACPjC,EAAI,EACDA,EAAIgC,EAAYhC,IAAKiC,EAAKjC,GAAK,KAAOA,EAAI,IACjDwB,GAAUQ,GAAcT,GAAU,MAAO,gBAAkBP,GAAKiB,EAAM,KAAO,IAC9E,CAAC,OAAOT,GAAUQ,GAAYD,EAAGD,EACpC,CAW2CI,CAAUR,EAAGI,EAAKhM,OAAQgM,GAAQJ,EAAE1P,MAAM2J,EAAMmG,EAC3F,EAEE,OADIvM,GAASoM,KAAYE,EAAc9P,UAAY4P,GAC5CE,CACT,EChCIlQ,GAAOkB,GADHpB,GAMN,CAAEiM,OAAQ,WAAYK,OAAO,EAAMG,OAAQ9M,SAASO,OAASA,IAAQ,CACrEA,KAAMA,KCRR,IAAI6D,GAAO/D,GAEX0Q,GAAiB,SAAUC,GACzB,OAAO5M,GAAK4M,EAAc,YAC5B,ECDAzQ,GAFmBkB,GAEW,YAAYlB,KCHtCqE,GAAgBvE,GAChBoE,GAAShD,GAETf,GAAoBV,SAASW,UCH7BsQ,GDKa,SAAUxR,GACzB,IAAIyR,EAAMzR,EAAGc,KACb,OAAOd,IAAOiB,IAAsBkE,GAAclE,GAAmBjB,IAAOyR,IAAQxQ,GAAkBH,KAAQkE,GAASyM,CACzH,ECNA3Q,GAAiB0Q,QCHA5Q,ICQX,SAAU8Q,GACdC,EACA/D,EACAgE,EACAC,GAEAF,EAAIG,YACJH,EAAII,IAAInE,EAAGgE,EAAGC,EAAG,EAAG,EAAI5R,KAAK+R,IAAI,GACjCL,EAAIM,WACN,CA+JgB,SAAAC,GACdP,EACA/D,EACAgE,EACAO,EACAC,EACAP,GAEA,IAAMQ,EAAMpS,KAAK+R,GAAK,IAClBG,EAAI,EAAIN,EAAI,IACdA,EAAIM,EAAI,GAENC,EAAI,EAAIP,EAAI,IACdA,EAAIO,EAAI,GAEVT,EAAIG,YACJH,EAAIW,OAAO1E,EAAIiE,EAAGD,GAClBD,EAAIY,OAAO3E,EAAIuE,EAAIN,EAAGD,GACtBD,EAAII,IAAInE,EAAIuE,EAAIN,EAAGD,EAAIC,EAAGA,EAAS,IAANQ,EAAiB,IAANA,GAAW,GACnDV,EAAIY,OAAO3E,EAAIuE,EAAGP,EAAIQ,EAAIP,GAC1BF,EAAII,IAAInE,EAAIuE,EAAIN,EAAGD,EAAIQ,EAAIP,EAAGA,EAAG,EAAS,GAANQ,GAAU,GAC9CV,EAAIY,OAAO3E,EAAIiE,EAAGD,EAAIQ,GACtBT,EAAII,IAAInE,EAAIiE,EAAGD,EAAIQ,EAAIP,EAAGA,EAAS,GAANQ,EAAgB,IAANA,GAAW,GAClDV,EAAIY,OAAO3E,EAAGgE,EAAIC,GAClBF,EAAII,IAAInE,EAAIiE,EAAGD,EAAIC,EAAGA,EAAS,IAANQ,EAAiB,IAANA,GAAW,GAC/CV,EAAIM,WACN,CAeM,SAAUO,GACdb,EACA/D,EACAgE,EACAO,EACAC,GAEA,IAAMK,EAAQ,SACZC,EAAMP,EAAI,EAAKM,EACfE,EAAMP,EAAI,EAAKK,EACfG,EAAKhF,EAAIuE,EACTU,EAAKjB,EAAIQ,EACTU,EAAKlF,EAAIuE,EAAI,EACbY,EAAKnB,EAAIQ,EAAI,EAEfT,EAAIG,YACJH,EAAIW,OAAO1E,EAAGmF,GACdpB,EAAIqB,cAAcpF,EAAGmF,EAAKJ,EAAIG,EAAKJ,EAAId,EAAGkB,EAAIlB,GAC9CD,EAAIqB,cAAcF,EAAKJ,EAAId,EAAGgB,EAAIG,EAAKJ,EAAIC,EAAIG,GAC/CpB,EAAIqB,cAAcJ,EAAIG,EAAKJ,EAAIG,EAAKJ,EAAIG,EAAIC,EAAID,GAChDlB,EAAIqB,cAAcF,EAAKJ,EAAIG,EAAIjF,EAAGmF,EAAKJ,EAAI/E,EAAGmF,GAC9CpB,EAAIM,WACN,CAaM,SAAUgB,GACdtB,EACA/D,EACAgE,EACAO,EACAC,GAEA,IAEMc,EAAWd,GAFP,EAAI,GAIRK,EAAQ,SACZC,EAJeP,EAIE,EAAKM,EACtBE,EAAMO,EAAW,EAAKT,EACtBG,EAAKhF,EANUuE,EAOfU,EAAKjB,EAAIsB,EACTJ,EAAKlF,EARUuE,EAQK,EACpBY,EAAKnB,EAAIsB,EAAW,EACpBC,EAAMvB,GAAKQ,EAAIc,EAAW,GAC1BE,EAAMxB,EAAIQ,EAEZT,EAAIG,YACJH,EAAIW,OAAOM,EAAIG,GAEfpB,EAAIqB,cAAcJ,EAAIG,EAAKJ,EAAIG,EAAKJ,EAAIG,EAAIC,EAAID,GAChDlB,EAAIqB,cAAcF,EAAKJ,EAAIG,EAAIjF,EAAGmF,EAAKJ,EAAI/E,EAAGmF,GAE9CpB,EAAIqB,cAAcpF,EAAGmF,EAAKJ,EAAIG,EAAKJ,EAAId,EAAGkB,EAAIlB,GAC9CD,EAAIqB,cAAcF,EAAKJ,EAAId,EAAGgB,EAAIG,EAAKJ,EAAIC,EAAIG,GAE/CpB,EAAIY,OAAOK,EAAIO,GAEfxB,EAAIqB,cAAcJ,EAAIO,EAAMR,EAAIG,EAAKJ,EAAIU,EAAKN,EAAIM,GAClDzB,EAAIqB,cAAcF,EAAKJ,EAAIU,EAAKxF,EAAGuF,EAAMR,EAAI/E,EAAGuF,GAEhDxB,EAAIY,OAAO3E,EAAGmF,EAChB,CAgBgB,SAAAM,GACd1B,EACA/D,EACAgE,EACA0B,EACAC,EACAC,GAEA7B,EAAIG,YACJH,EAAIW,OAAO1E,EAAGgE,GAYd,IAVA,IAAM6B,EAAgBD,EAAQvO,OACxByO,EAAKJ,EAAK1F,EACV+F,EAAKJ,EAAK3B,EACVgC,EAAQD,EAAKD,EACfG,EAAgB5T,KAAK6T,KAAKJ,EAAKA,EAAKC,EAAKA,GACzCI,EAAe,EACfC,GAAO,EACPC,EAAQ,EACRC,GAAcV,EAAQ,GAEnBK,GAAiB,KACtBK,GAAcV,EAAQO,IAAiBN,IACtBI,IACfK,EAAaL,GAGfI,EAAQhU,KAAK6T,KAAMI,EAAaA,GAAe,EAAIN,EAAQA,IAE3DhG,GADAqG,EAAQP,EAAK,GAAKO,EAAQA,EAE1BrC,GAAKgC,EAAQK,GAEA,IAATD,EACFrC,EAAIY,OAAO3E,EAAGgE,GAEdD,EAAIW,OAAO1E,EAAGgE,GAGhBiC,GAAiBK,EACjBF,GAAQA,CAEZ,CA0BA,IAAMG,GAAW,CACfC,OAAQ1C,GACR2C,WAAYhB,GACZiB,SAAUrB,GACVsB,QAnOI,SACJ5C,EACA/D,EACAgE,EACAC,GAEAF,EAAIG,YAEJH,EAAIY,OAAO3E,EAAGgE,EAAIC,GAClBF,EAAIY,OAAO3E,EAAIiE,EAAGD,GAClBD,EAAIY,OAAO3E,EAAGgE,EAAIC,GAClBF,EAAIY,OAAO3E,EAAIiE,EAAGD,GAElBD,EAAIM,WACN,EAsNEuC,QAAShC,GACTiC,YAAajC,GACbkC,QAvBI,SACJ/C,EACA/D,EACAgE,EACAC,GAEAF,EAAIG,YACJ,IACMtI,EAAe,EAAVvJ,KAAK+R,GADF,EAEdL,EAAIW,OAAO1E,EAAIiE,EAAGD,GAClB,IAAK,IAAIzC,EAAI,EAAGA,EAHF,EAGaA,IACzBwC,EAAIY,OAAO3E,EAAIiE,EAAI5R,KAAK0U,IAAInL,EAAI2F,GAAIyC,EAAIC,EAAI5R,KAAK2U,IAAIpL,EAAI2F,IAE3DwC,EAAIM,WACN,EAUE4C,UAAW3C,GACX4C,OAjWI,SACJnD,EACA/D,EACAgE,EACAC,GAEAF,EAAIG,YACJH,EAAIoD,KAAKnH,EAAIiE,EAAGD,EAAIC,EAAO,EAAJA,EAAW,EAAJA,GAC9BF,EAAIM,WACN,EAyVE+C,KA3QI,SACJrD,EACA/D,EACAgE,EACAC,GAGAF,EAAIG,YAIJF,GAAK,IADLC,GAAK,KAGL,IAAK,IAAIhE,EAAI,EAAGA,EAAI,GAAIA,IAAK,CAC3B,IAAMoH,EAASpH,EAAI,GAAM,EAAQ,IAAJgE,EAAc,GAAJA,EACvCF,EAAIY,OACF3E,EAAIqH,EAAShV,KAAK2U,IAAS,EAAJ/G,EAAQ5N,KAAK+R,GAAM,IAC1CJ,EAAIqD,EAAShV,KAAK0U,IAAS,EAAJ9G,EAAQ5N,KAAK+R,GAAM,IAE7C,CAEDL,EAAIM,WACN,EAsPEiD,SA9UI,SACJvD,EACA/D,EACAgE,EACAC,GAEAF,EAAIG,YAIJF,GAAK,MADLC,GAAK,MAGL,IAAMsD,EAAQ,EAAJtD,EACJuD,EAAKD,EAAI,EACTE,EAAMpV,KAAK6T,KAAK,GAAK,EAAKqB,EAC1B/C,EAAInS,KAAK6T,KAAKqB,EAAIA,EAAIC,EAAKA,GAEjCzD,EAAIW,OAAO1E,EAAGgE,GAAKQ,EAAIiD,IACvB1D,EAAIY,OAAO3E,EAAIwH,EAAIxD,EAAIyD,GACvB1D,EAAIY,OAAO3E,EAAIwH,EAAIxD,EAAIyD,GACvB1D,EAAIY,OAAO3E,EAAGgE,GAAKQ,EAAIiD,IACvB1D,EAAIM,WACN,EAyTEqD,aA7SI,SACJ3D,EACA/D,EACAgE,EACAC,GAEAF,EAAIG,YAIJF,GAAK,MADLC,GAAK,MAGL,IAAMsD,EAAQ,EAAJtD,EACJuD,EAAKD,EAAI,EACTE,EAAMpV,KAAK6T,KAAK,GAAK,EAAKqB,EAC1B/C,EAAInS,KAAK6T,KAAKqB,EAAIA,EAAIC,EAAKA,GAEjCzD,EAAIW,OAAO1E,EAAGgE,GAAKQ,EAAIiD,IACvB1D,EAAIY,OAAO3E,EAAIwH,EAAIxD,EAAIyD,GACvB1D,EAAIY,OAAO3E,EAAIwH,EAAIxD,EAAIyD,GACvB1D,EAAIY,OAAO3E,EAAGgE,GAAKQ,EAAIiD,IACvB1D,EAAIM,WACN,oCCzFA,SAASsD,EAAQhH,GACf,GAAIA,EAAK,OAWX,SAAeA,GACb,IAAK,IAAIxH,KAAOwO,EAAQrU,UACtBqN,EAAIxH,GAAOwO,EAAQrU,UAAU6F,GAE/B,OAAOwH,CACR,CAhBiBiH,CAAMjH,EAExB,CAZEkH,EAAAC,QAAiBH,EAqCnBA,EAAQrU,UAAUyU,GAClBJ,EAAQrU,UAAU0U,iBAAmB,SAASC,EAAOnU,GAInD,OAHApB,KAAKwV,WAAaxV,KAAKwV,YAAc,CAAA,GACpCxV,KAAKwV,WAAW,IAAMD,GAASvV,KAAKwV,WAAW,IAAMD,IAAU,IAC7DzO,KAAK1F,GACDpB,IACT,EAYAiV,EAAQrU,UAAU6U,KAAO,SAASF,EAAOnU,GACvC,SAASiU,IACPrV,KAAK0V,IAAIH,EAAOF,GAChBjU,EAAGP,MAAMb,KAAMiB,UAChB,CAID,OAFAoU,EAAGjU,GAAKA,EACRpB,KAAKqV,GAAGE,EAAOF,GACRrV,IACT,EAYAiV,EAAQrU,UAAU8U,IAClBT,EAAQrU,UAAU+U,eAClBV,EAAQrU,UAAUgV,mBAClBX,EAAQrU,UAAUiV,oBAAsB,SAASN,EAAOnU,GAItD,GAHApB,KAAKwV,WAAaxV,KAAKwV,YAAc,CAAA,EAGjC,GAAKvU,UAAU0D,OAEjB,OADA3E,KAAKwV,WAAa,GACXxV,KAIT,IAUI8V,EAVAC,EAAY/V,KAAKwV,WAAW,IAAMD,GACtC,IAAKQ,EAAW,OAAO/V,KAGvB,GAAI,GAAKiB,UAAU0D,OAEjB,cADO3E,KAAKwV,WAAW,IAAMD,GACtBvV,KAKT,IAAK,IAAI6O,EAAI,EAAGA,EAAIkH,EAAUpR,OAAQkK,IAEpC,IADAiH,EAAKC,EAAUlH,MACJzN,GAAM0U,EAAG1U,KAAOA,EAAI,CAC7B2U,EAAUC,OAAOnH,EAAG,GACpB,KACD,CASH,OAJyB,IAArBkH,EAAUpR,eACL3E,KAAKwV,WAAW,IAAMD,GAGxBvV,IACT,EAUAiV,EAAQrU,UAAUqV,KAAO,SAASV,GAChCvV,KAAKwV,WAAaxV,KAAKwV,YAAc,CAAA,EAKrC,IAHA,IAAI7E,EAAO,IAAIuF,MAAMjV,UAAU0D,OAAS,GACpCoR,EAAY/V,KAAKwV,WAAW,IAAMD,GAE7B1G,EAAI,EAAGA,EAAI5N,UAAU0D,OAAQkK,IACpC8B,EAAK9B,EAAI,GAAK5N,UAAU4N,GAG1B,GAAIkH,EAEG,CAAIlH,EAAI,EAAb,IAAK,IAAWsH,GADhBJ,EAAYA,EAAUvU,MAAM,IACImD,OAAQkK,EAAIsH,IAAOtH,EACjDkH,EAAUlH,GAAGhO,MAAMb,KAAM2Q,EADKhM,CAKlC,OAAO3E,IACT,EAUAiV,EAAQrU,UAAUwV,UAAY,SAASb,GAErC,OADAvV,KAAKwV,WAAaxV,KAAKwV,YAAc,CAAA,EAC9BxV,KAAKwV,WAAW,IAAMD,IAAU,EACzC,EAUAN,EAAQrU,UAAUyV,aAAe,SAASd,GACxC,QAAUvV,KAAKoW,UAAUb,GAAO5Q,kCCzK9BpE,GAAO,CAAA,EAEXA,GALsBD,GAEc,gBAGd,IAEtB,ICKIgW,GAAK/T,GAAKgU,GDLdC,GAAkC,eAAjBxR,OAAOzE,IEPpBkW,GAAwBnW,GACxB4B,GAAaR,EACbD,GAAaiC,EAGbgT,GAFkBzQ,GAEc,eAChCtC,GAAUtB,OAGVsU,GAAwE,cAApDlV,GAAW,WAAc,OAAOR,SAAY,CAAjC,IAUnCwC,GAAiBgT,GAAwBhV,GAAa,SAAU/B,GAC9D,IAAIgK,EAAGkN,EAAKjO,EACZ,YAAc1G,IAAPvC,EAAmB,YAAqB,OAAPA,EAAc,OAEO,iBAAjDkX,EAXD,SAAUlX,EAAI+G,GACzB,IACE,OAAO/G,EAAG+G,EACd,CAAI,MAAOrG,GAAsB,CACjC,CAOoByW,CAAOnN,EAAI/F,GAAQjE,GAAKgX,KAA8BE,EAEpED,GAAoBlV,GAAWiI,GAEF,YAA5Bf,EAASlH,GAAWiI,KAAoBxH,GAAWwH,EAAEoN,QAAU,YAAcnO,CACpF,EC5BIlF,GAAUnD,GAEVkF,GAAUR,OAEd1D,GAAiB,SAAUa,GACzB,GAA0B,WAAtBsB,GAAQtB,GAAwB,MAAM,IAAI6B,UAAU,6CACxD,OAAOwB,GAAQrD,EACjB,ECPId,GAAcf,EACdkN,GAAsB9L,GACtBJ,GAAWoC,GACXO,GAAyBgC,EAEzB8Q,GAAS1V,GAAY,GAAG0V,QACxBC,GAAa3V,GAAY,GAAG2V,YAC5BzV,GAAcF,GAAY,GAAGG,OAE7B0M,GAAe,SAAU+I,GAC3B,OAAO,SAAU7I,EAAO8I,GACtB,IAGIC,EAAOC,EAHPpH,EAAI1O,GAAS2C,GAAuBmK,IACpCiJ,EAAW7J,GAAoB0J,GAC/BI,EAAOtH,EAAErL,OAEb,OAAI0S,EAAW,GAAKA,GAAYC,EAAaL,EAAoB,QAAKhV,GACtEkV,EAAQH,GAAWhH,EAAGqH,IACP,OAAUF,EAAQ,OAAUE,EAAW,IAAMC,IACtDF,EAASJ,GAAWhH,EAAGqH,EAAW,IAAM,OAAUD,EAAS,MAC3DH,EACEF,GAAO/G,EAAGqH,GACVF,EACFF,EACE1V,GAAYyO,EAAGqH,EAAUA,EAAW,GACVD,EAAS,OAAlCD,EAAQ,OAAU,IAA0B,KACzD,CACA,EAEAI,GAAiB,CAGfC,OAAQtJ,IAAa,GAGrB6I,OAAQ7I,IAAa,ICjCnBhM,GAAaR,EAEb+V,GAHSnX,EAGQmX,QAErBC,GAAiBxV,GAAWuV,KAAY,cAAclX,KAAKyE,OAAOyS,KCJ9DhQ,GAAM/F,GAENuN,GAHS3O,GAGK,QAElBqX,GAAiB,SAAUlR,GACzB,OAAOwI,GAAKxI,KAASwI,GAAKxI,GAAOgB,GAAIhB,GACvC,ELPImR,GAAkBtX,GAClBV,GAAS8B,EACT0C,GAAWV,GACX0H,GAA8BnF,GAC9BoB,GAASO,GACTF,GAASI,GACT6P,GAAYtO,GACZqF,GAAanF,GAEbsO,GAA6B,6BAC7B7T,GAAYpE,GAAOoE,UACnByT,GAAU7X,GAAO6X,QAgBrB,GAAIG,IAAmBlQ,GAAOoQ,MAAO,CACnC,IAAIlR,GAAQc,GAAOoQ,QAAUpQ,GAAOoQ,MAAQ,IAAIL,IAEhD7Q,GAAMrE,IAAMqE,GAAMrE,IAClBqE,GAAM2P,IAAM3P,GAAM2P,IAClB3P,GAAM0P,IAAM1P,GAAM0P,IAElBA,GAAM,SAAU5W,EAAIqY,GAClB,GAAInR,GAAM2P,IAAI7W,GAAK,MAAM,IAAIsE,GAAU6T,IAGvC,OAFAE,EAASC,OAAStY,EAClBkH,GAAM0P,IAAI5W,EAAIqY,GACPA,CACX,EACExV,GAAM,SAAU7C,GACd,OAAOkH,GAAMrE,IAAI7C,IAAO,CAAA,CAC5B,EACE6W,GAAM,SAAU7W,GACd,OAAOkH,GAAM2P,IAAI7W,EACrB,CACA,KAAO,CACL,IAAIuY,GAAQN,GAAU,SACtBjJ,GAAWuJ,KAAS,EACpB3B,GAAM,SAAU5W,EAAIqY,GAClB,GAAI1Q,GAAO3H,EAAIuY,IAAQ,MAAM,IAAIjU,GAAU6T,IAG3C,OAFAE,EAASC,OAAStY,EAClB0L,GAA4B1L,EAAIuY,GAAOF,GAChCA,CACX,EACExV,GAAM,SAAU7C,GACd,OAAO2H,GAAO3H,EAAIuY,IAASvY,EAAGuY,IAAS,EAC3C,EACE1B,GAAM,SAAU7W,GACd,OAAO2H,GAAO3H,EAAIuY,GACtB,CACA,CAEA,IAAAC,GAAiB,CACf5B,IAAKA,GACL/T,IAAKA,GACLgU,IAAKA,GACL4B,QArDY,SAAUzY,GACtB,OAAO6W,GAAI7W,GAAM6C,GAAI7C,GAAM4W,GAAI5W,EAAI,CAAA,EACrC,EAoDE0Y,UAlDc,SAAUC,GACxB,OAAO,SAAU3Y,GACf,IAAIoY,EACJ,IAAK1T,GAAS1E,KAAQoY,EAAQvV,GAAI7C,IAAK4Y,OAASD,EAC9C,MAAM,IAAIrU,GAAU,0BAA4BqU,EAAO,aACvD,OAAOP,CACb,CACA,GMzBI3O,GAAc7I,EACd+G,GAAS3F,GAETf,GAAoBV,SAASW,UAE7B2X,GAAgBpP,IAAe9G,OAAOM,yBAEtCmG,GAASzB,GAAO1G,GAAmB,QAKvC6X,GAAiB,CACf1P,OAAQA,GACR2P,OALW3P,IAA0D,cAAhD,WAAqC,EAAEX,KAM5D2C,aALiBhC,MAAYK,IAAgBA,IAAeoP,GAAc5X,GAAmB,QAAQ4C,qBCVnG4F,GAAc7I,EACdqK,GAA0BjJ,GAC1ByJ,GAAuBzH,GACvBgH,GAAWzE,GACX9B,GAAkByD,EAClBoH,GAAalH,GAKjB4Q,GAAA5V,EAAYqG,KAAgBwB,GAA0BtI,OAAOsW,iBAAmB,SAA0BjP,EAAGkP,GAC3GlO,GAAShB,GAMT,IALA,IAIIjD,EAJAoS,EAAQ1U,GAAgByU,GACxB3J,EAAOD,GAAW4J,GAClBjU,EAASsK,EAAKtK,OACdkJ,EAAQ,EAELlJ,EAASkJ,GAAO1C,GAAqBrI,EAAE4G,EAAGjD,EAAMwI,EAAKpB,KAAUgL,EAAMpS,IAC5E,OAAOiD,CACT,ECnBA,ICoDIoP,GDlDJC,GAFiBzY,GAEW,WAAY,mBCDpCoK,GAAWpK,GACX0Y,GAAyBtX,GACzBoN,GAAcpL,GACdgL,GAAazI,GACb8S,GAAOnR,GACPoB,GAAwBlB,GAKxBmR,GAAY,YACZC,GAAS,SACTC,GANY9P,GAMS,YAErB+P,GAAmB,WAAY,EAE/BC,GAAY,SAAUC,GACxB,MARO,IAQKJ,GATL,IASmBI,EAAnBC,KAAwCL,GATxC,GAUT,EAGIM,GAA4B,SAAUV,GACxCA,EAAgBW,MAAMJ,GAAU,KAChCP,EAAgBY,QAChB,IAAIC,EAAOb,EAAgBc,aAAavX,OAExC,OADAyW,EAAkB,KACXa,CACT,EAyBIE,GAAkB,WACpB,IACEf,GAAkB,IAAIgB,cAAc,WACxC,CAAI,MAAO1Z,GAAuB,CAzBH,IAIzB2Z,EAFAC,EACAC,EAuBJJ,GAAqC,oBAAZhY,SACrBA,SAASqY,QAAUpB,GACjBU,GAA0BV,KA1B5BkB,EAAShR,GAAsB,UAC/BiR,EAAK,OAASf,GAAS,IAE3Bc,EAAOG,MAAMC,QAAU,OACvBrB,GAAKsB,YAAYL,GAEjBA,EAAOM,IAAMtV,OAAOiV,IACpBF,EAAiBC,EAAOO,cAAc1Y,UACvB2Y,OACfT,EAAeN,MAAMJ,GAAU,sBAC/BU,EAAeL,QACRK,EAAexJ,GAiBlBiJ,GAA0BV,IAE9B,IADA,IAAInU,EAASmK,GAAYnK,OAClBA,YAAiBkV,GAAgBZ,IAAWnK,GAAYnK,IAC/D,OAAOkV,IACT,EAEAnL,GAAWyK,KAAY,MCrDnBsB,GAAmBC,GAAmCC,GD0D1DC,GAAiBvY,OAAOwY,QAAU,SAAgBnR,EAAGkP,GACnD,IAAIjQ,EAQJ,OAPU,OAANe,GACF0P,GAAiBH,IAAavO,GAAShB,GACvCf,EAAS,IAAIyQ,GACbA,GAAiBH,IAAa,KAE9BtQ,EAAOwQ,IAAYzP,GACdf,EAASkR,UACM5X,IAAf2W,EAA2BjQ,EAASqQ,GAAuBlW,EAAE6F,EAAQiQ,EAC9E,EEhFAkC,IAFYxa,GAEY,WACtB,SAASiQ,IAAmB,CAG5B,OAFAA,EAAE3P,UAAUma,YAAc,KAEnB1Y,OAAO2Y,eAAe,IAAIzK,KAASA,EAAE3P,SAC9C,ICPIyG,GAAS/G,GACT4B,GAAaR,EACbyF,GAAWzD,GAEXuX,GAA2BrT,GAE3BuR,GAHYlT,GAGS,YACrBtC,GAAUtB,OACV6Y,GAAkBvX,GAAQ/C,UAK9Bua,GAAiBF,GAA2BtX,GAAQqX,eAAiB,SAAUtR,GAC7E,IAAI2B,EAASlE,GAASuC,GACtB,GAAIrC,GAAOgE,EAAQ8N,IAAW,OAAO9N,EAAO8N,IAC5C,IAAI4B,EAAc1P,EAAO0P,YACzB,OAAI7Y,GAAW6Y,IAAgB1P,aAAkB0P,EACxCA,EAAYna,UACZyK,aAAkB1H,GAAUuX,GAAkB,IACzD,ECpBI9P,GAA8B9K,GAElC8a,GAAiB,SAAU7O,EAAQ9F,EAAKnD,EAAOwI,GAG7C,OAFIA,GAAWA,EAAQ7I,WAAYsJ,EAAO9F,GAAOnD,EAC5C8H,GAA4BmB,EAAQ9F,EAAKnD,GACvCiJ,CACT,EHNIrM,GAAQI,EACR4B,GAAaR,EACb0C,GAAWV,GACXmX,GAAS5U,GACT+U,GAAiBpT,GACjBwT,GAAgBtT,GAIhBuT,GAHkBhS,GAGS,YAC3BiS,IAAyB,EAOzB,GAAGrM,OAGC,SAFN0L,GAAgB,GAAG1L,SAIjByL,GAAoCM,GAAeA,GAAeL,QACxBtY,OAAOzB,YAAW6Z,GAAoBC,IAHlDY,IAAyB,GAO3D,IAAIC,IAA0BnX,GAASqW,KAAsBva,IAAM,WACjE,IAAIK,EAAO,CAAA,EAEX,OAAOka,GAAkBY,IAAUva,KAAKP,KAAUA,CACpD,IAOK2B,IALuBuY,GAAxBc,GAA4C,GACVV,GAAOJ,KAIXY,MAChCD,GAAcX,GAAmBY,IAAU,WACzC,OAAOrb,IACX,IAGA,IAAAwb,GAAiB,CACff,kBAAmBA,GACnBa,uBAAwBA,II7CtB7X,GAAU/B,GAId+Z,GAL4Bnb,GAKa,CAAA,EAAGgB,SAAW,WACrD,MAAO,WAAamC,GAAQzD,MAAQ,GACtC,ECPIyW,GAAwBnW,GACxBgC,GAAiBZ,GAA+CoB,EAChEsI,GAA8B1H,GAC9B2D,GAASpB,GACT3E,GAAWsG,GAGX8O,GAFkB5O,GAEc,eAEpC4T,GAAiB,SAAUhc,EAAIic,EAAKlP,EAAQmP,GAC1C,GAAIlc,EAAI,CACN,IAAI6M,EAASE,EAAS/M,EAAKA,EAAGkB,UACzByG,GAAOkF,EAAQmK,KAClBpU,GAAeiK,EAAQmK,GAAe,CAAEnT,cAAc,EAAMD,MAAOqY,IAEjEC,IAAenF,IACjBrL,GAA4BmB,EAAQ,WAAYjL,GAEnD,CACH,ECnBAua,GAAiB,CAAE,ECAfpB,GAAoBna,GAAuCma,kBAC3DI,GAASnZ,GACT0B,GAA2BM,EAC3BgY,GAAiBzV,GACjB6V,GAAYlU,GAEZmU,GAAa,WAAc,OAAO/b,MCNlCqB,GAAcf,EACd8F,GAAY1E,GCDZQ,GAAa5B,EAEbkF,GAAUR,OACVjB,GAAaC,UCFbgY,GFEa,SAAU3Q,EAAQ5E,EAAK/B,GACtC,IAEE,OAAOrD,GAAY+E,GAAU/D,OAAOM,yBAAyB0I,EAAQ5E,GAAK/B,IAC9E,CAAI,MAAOtE,GAAsB,CACjC,EENIsK,GAAWhJ,GACXua,GDEa,SAAU9Z,GACzB,GAAuB,iBAAZA,GAAwBD,GAAWC,GAAW,OAAOA,EAChE,MAAM,IAAI4B,GAAW,aAAeyB,GAAQrD,GAAY,kBAC1D,ECCA+Z,GAAiB7Z,OAAO8Z,iBAAmB,aAAe,CAAE,EAAG,WAC7D,IAEIC,EAFAC,GAAiB,EACjB9b,EAAO,CAAA,EAEX,KACE6b,EAASJ,GAAoB3Z,OAAOzB,UAAW,YAAa,QACrDL,EAAM,IACb8b,EAAiB9b,aAAgB2V,KACrC,CAAI,MAAO9V,GAAsB,CAC/B,OAAO,SAAwBsJ,EAAGkD,GAKhC,OAJAlC,GAAShB,GACTuS,GAAmBrP,GACfyP,EAAgBD,EAAO1S,EAAGkD,GACzBlD,EAAE4S,UAAY1P,EACZlD,CACX,CACA,CAhB+D,QAgBzDzH,GCzBFsa,GAAIjc,GACJQ,GAAOY,EAEP8a,GAAevW,GAEfwW,GJGa,SAAUC,EAAqBC,EAAMC,EAAMC,GAC1D,IAAInG,EAAgBiG,EAAO,YAI3B,OAHAD,EAAoB9b,UAAYia,GAAOJ,GAAmB,CAAEmC,KAAMxZ,KAA2ByZ,EAAiBD,KAC9GlB,GAAegB,EAAqBhG,GAAe,GAAO,GAC1DoF,GAAUpF,GAAiBqF,GACpBW,CACT,EIRI1B,GAAiB3R,GAEjBqS,GAAiBpQ,GAEjB8P,GAAgB0B,GAEhBhB,GAAYiB,GACZC,GAAgBC,GAEhBC,GAAuBV,GAAa/D,OAGpC6C,GAAyB0B,GAAc1B,uBACvCD,GARkB8B,GAQS,YAC3BC,GAAO,OACPC,GAAS,SACTC,GAAU,UAEVvB,GAAa,WAAc,OAAO/b,MAEtCud,GAAiB,SAAUC,EAAUb,EAAMD,EAAqBE,EAAMa,EAASC,EAAQ3R,GACrF0Q,GAA0BC,EAAqBC,EAAMC,GAErD,IAqBIe,EAA0BC,EAASC,EArBnCC,EAAqB,SAAUC,GACjC,GAAIA,IAASN,GAAWO,EAAiB,OAAOA,EAChD,IAAK1C,IAA0ByC,GAAQA,KAAQE,EAAmB,OAAOA,EAAkBF,GAE3F,OAAQA,GACN,KAAKX,GACL,KAAKC,GACL,KAAKC,GAAS,OAAO,WAAqB,OAAO,IAAIZ,EAAoB1c,KAAM+d,IAGjF,OAAO,WAAc,OAAO,IAAIrB,EAAoB1c,KAAM,CAC9D,EAEM0W,EAAgBiG,EAAO,YACvBuB,GAAwB,EACxBD,EAAoBT,EAAS5c,UAC7Bud,EAAiBF,EAAkB5C,KAClC4C,EAAkB,eAClBR,GAAWQ,EAAkBR,GAC9BO,GAAmB1C,IAA0B6C,GAAkBL,EAAmBL,GAClFW,EAA6B,UAATzB,GAAmBsB,EAAkBI,SAA4BF,EA+BzF,GA3BIC,IACFT,EAA2B3C,GAAeoD,EAAkBtd,KAAK,IAAI0c,OACpCnb,OAAOzB,WAAa+c,EAAyBf,OAS5ElB,GAAeiC,EAA0BjH,GAAe,GAAM,GACjDoF,GAAUpF,GAAiBqF,IAKxCmB,IAAwBO,IAAYJ,IAAUc,GAAkBA,EAAehW,OAASkV,KAIxFa,GAAwB,EACxBF,EAAkB,WAAoB,OAAOld,GAAKqd,EAAgBne,QAKlEyd,EAMF,GALAG,EAAU,CACRU,OAAQR,EAAmBT,IAC3BpO,KAAMyO,EAASM,EAAkBF,EAAmBV,IACpDiB,QAASP,EAAmBR,KAE1BvR,EAAQ,IAAK8R,KAAOD,GAClBtC,IAA0B4C,KAA2BL,KAAOI,KAC9D7C,GAAc6C,EAAmBJ,EAAKD,EAAQC,SAE3CtB,GAAE,CAAEhQ,OAAQoQ,EAAM/P,OAAO,EAAMG,OAAQuO,IAA0B4C,GAAyBN,GASnG,OALI,GAAwBK,EAAkB5C,MAAc2C,GAC1D5C,GAAc6C,EAAmB5C,GAAU2C,EAAiB,CAAE7V,KAAMsV,IAEtE3B,GAAUa,GAAQqB,EAEXJ,CACT,EClGAW,GAAiB,SAAUjb,EAAOkb,GAChC,MAAO,CAAElb,MAAOA,EAAOkb,KAAMA,EAC/B,ECJIzH,GAASzW,GAAyCyW,OAClDzV,GAAWI,GACX+c,GAAsB/a,GACtBgb,GAAiBzY,GACjBsY,GAAyB3W,GAEzB+W,GAAkB,kBAClBC,GAAmBH,GAAoBnI,IACvCuI,GAAmBJ,GAAoBrG,UAAUuG,IAIrDD,GAAe1Z,OAAQ,UAAU,SAAU8Z,GACzCF,GAAiB5e,KAAM,CACrBsY,KAAMqG,GACNxU,OAAQ7I,GAASwd,GACjBjR,MAAO,GAIX,IAAG,WACD,IAGIkR,EAHAjH,EAAQ+G,GAAiB7e,MACzBmK,EAAS2N,EAAM3N,OACf0D,EAAQiK,EAAMjK,MAElB,OAAIA,GAAS1D,EAAOxF,OAAe4Z,QAAuBtc,GAAW,IACrE8c,EAAQhI,GAAO5M,EAAQ0D,GACvBiK,EAAMjK,OAASkR,EAAMpa,OACd4Z,GAAuBQ,GAAO,GACvC,IC7BA,IAAIje,GAAOR,EACPoK,GAAWhJ,GACX2E,GAAY3C,GAEhBsb,GAAiB,SAAUjZ,EAAUkZ,EAAM3b,GACzC,IAAI4b,EAAaC,EACjBzU,GAAS3E,GACT,IAEE,KADAmZ,EAAc7Y,GAAUN,EAAU,WAChB,CAChB,GAAa,UAATkZ,EAAkB,MAAM3b,EAC5B,OAAOA,CACR,CACD4b,EAAcpe,GAAKoe,EAAanZ,EACjC,CAAC,MAAO3F,GACP+e,GAAa,EACbD,EAAc9e,CACf,CACD,GAAa,UAAT6e,EAAkB,MAAM3b,EAC5B,GAAI6b,EAAY,MAAMD,EAEtB,OADAxU,GAASwU,GACF5b,CACT,ECtBIoH,GAAWpK,GACX0e,GAAgBtd,GCAhBoa,GAAYpa,GAEZ2Z,GAHkB/a,GAGS,YAC3B8e,GAAiBlJ,MAAMtV,UAG3Bye,GAAiB,SAAU3f,GACzB,YAAcuC,IAAPvC,IAAqBoc,GAAU5F,QAAUxW,GAAM0f,GAAe/D,MAAc3b,EACrF,ECRIwC,GAAaR,EACbkF,GAAQlD,GAER4b,GAJchf,EAIiBL,SAASqB,UAGvCY,GAAW0E,GAAM2Y,iBACpB3Y,GAAM2Y,cAAgB,SAAU7f,GAC9B,OAAO4f,GAAiB5f,EAC5B,OAGA6f,GAAiB3Y,GAAM2Y,cCbnBle,GAAcf,EACdJ,GAAQwB,EACRQ,GAAawB,EACbD,GAAUwC,GAEVsZ,GAAgBzX,GAEhB0X,GAAO,WAAY,EACnBC,GAAQ,GACR1O,GALanJ,GAKU,UAAW,aAClC8X,GAAoB,2BACpBvf,GAAOkB,GAAYqe,GAAkBvf,MACrCwf,IAAuBD,GAAkBnf,KAAKif,IAE9CI,GAAsB,SAAuBzd,GAC/C,IAAKD,GAAWC,GAAW,OAAO,EAClC,IAEE,OADA4O,GAAUyO,GAAMC,GAAOtd,IAChB,CACR,CAAC,MAAO/B,GACP,OAAO,CACR,CACH,EAEIyf,GAAsB,SAAuB1d,GAC/C,IAAKD,GAAWC,GAAW,OAAO,EAClC,OAAQsB,GAAQtB,IACd,IAAK,gBACL,IAAK,oBACL,IAAK,yBAA0B,OAAO,EAExC,IAIE,OAAOwd,MAAyBxf,GAAKuf,GAAmBH,GAAcpd,GACvE,CAAC,MAAO/B,GACP,OAAO,CACR,CACH,EAEAyf,GAAoBha,MAAO,EAI3B,IAAAia,IAAkB/O,IAAa7Q,IAAM,WACnC,IAAI6f,EACJ,OAAOH,GAAoBA,GAAoB9e,QACzC8e,GAAoBvd,UACpBud,IAAoB,WAAcG,GAAS,CAAK,KACjDA,CACP,IAAKF,GAAsBD,GCnDvB/W,GAAgBvI,GAChB6K,GAAuBzJ,GACvB0B,GAA2BM,EAE/Bsc,GAAiB,SAAU3U,EAAQ5E,EAAKnD,GACtC,IAAI2c,EAAcpX,GAAcpC,GAC5BwZ,KAAe5U,EAAQF,GAAqBrI,EAAEuI,EAAQ4U,EAAa7c,GAAyB,EAAGE,IAC9F+H,EAAO4U,GAAe3c,CAC7B,ECRIG,GAAUnD,GACV+F,GAAY3E,GACZoC,GAAoBJ,EACpBoY,GAAY7V,GAGZoV,GAFkBzT,GAES,YAE/BsY,GAAiB,SAAUxgB,GACzB,IAAKoE,GAAkBpE,GAAK,OAAO2G,GAAU3G,EAAI2b,KAC5ChV,GAAU3G,EAAI,eACdoc,GAAUrY,GAAQ/D,GACzB,ECZIoB,GAAOR,EACP8F,GAAY1E,GACZgJ,GAAWhH,GACXyC,GAAcF,GACdia,GAAoBtY,GAEpB7D,GAAaC,UAEjBmc,GAAiB,SAAUhe,EAAUie,GACnC,IAAIC,EAAiBpf,UAAU0D,OAAS,EAAIub,GAAkB/d,GAAYie,EAC1E,GAAIha,GAAUia,GAAiB,OAAO3V,GAAS5J,GAAKuf,EAAgBle,IACpE,MAAM,IAAI4B,GAAWoC,GAAYhE,GAAY,mBAC/C,ECZI3B,GAAOF,GACPQ,GAAOY,EACPyF,GAAWzD,GACX4c,GPCa,SAAUva,EAAU3E,EAAIkC,EAAOga,GAC9C,IACE,OAAOA,EAAUlc,EAAGsJ,GAASpH,GAAO,GAAIA,EAAM,IAAMlC,EAAGkC,EACxD,CAAC,MAAOlD,GACP4e,GAAcjZ,EAAU,QAAS3F,EAClC,CACH,EONIif,GAAwBzX,GACxBkY,GAAgBhY,GAChBkG,GAAoB3E,GACpB2W,GAAiBzW,GACjB4W,GAAc7U,GACd4U,GAAoB3U,GAEpBgV,GAASrK,MCTTmF,GAFkB/a,GAES,YAC3BkgB,IAAe,EAEnB,IACE,IAAIT,GAAS,EACTU,GAAqB,CACvB7D,KAAM,WACJ,MAAO,CAAE4B,OAAQuB,KAClB,EACDW,OAAU,WACRF,IAAe,CAChB,GAEHC,GAAmBpF,IAAY,WAC7B,OAAOrb,IACX,EAEEkW,MAAMyK,KAAKF,IAAoB,WAAc,MAAM,CAAE,GACvD,CAAE,MAAOrgB,GAAsB,CAE/B,IAAAwgB,GAAiB,SAAUzgB,EAAM0gB,GAC/B,IACE,IAAKA,IAAiBL,GAAc,OAAO,CAC5C,CAAC,MAAOpgB,GAAS,OAAO,CAAQ,CACjC,IAAI0gB,GAAoB,EACxB,IACE,IAAIzV,EAAS,CAAA,EACbA,EAAOgQ,IAAY,WACjB,MAAO,CACLuB,KAAM,WACJ,MAAO,CAAE4B,KAAMsC,GAAoB,EACpC,EAET,EACI3gB,EAAKkL,EACT,CAAI,MAAOjL,GAAsB,CAC/B,OAAO0gB,CACT,ECtCIH,GFca,SAAcI,GAC7B,IAAIrX,EAAIvC,GAAS4Z,GACbC,EAAiBlB,GAAc9f,MAC/B+P,EAAkB9O,UAAU0D,OAC5Bsc,EAAQlR,EAAkB,EAAI9O,UAAU,QAAKgB,EAC7Cif,OAAoBjf,IAAVgf,EACVC,IAASD,EAAQzgB,GAAKygB,EAAOlR,EAAkB,EAAI9O,UAAU,QAAKgB,IACtE,IAEI0C,EAAQgE,EAAQwY,EAAMpb,EAAU6W,EAAMtZ,EAFtC+c,EAAiBH,GAAkBxW,GACnCmE,EAAQ,EAGZ,IAAIwS,GAAoBrgB,OAASugB,IAAUlB,GAAsBgB,GAW/D,IAFA1b,EAASqJ,GAAkBtE,GAC3Bf,EAASqY,EAAiB,IAAIhhB,KAAK2E,GAAU4b,GAAO5b,GAC9CA,EAASkJ,EAAOA,IACpBvK,EAAQ4d,EAAUD,EAAMvX,EAAEmE,GAAQA,GAASnE,EAAEmE,GAC7CmS,GAAerX,EAAQkF,EAAOvK,QAThC,IAFAsZ,GADA7W,EAAWoa,GAAYzW,EAAG2W,IACVzD,KAChBjU,EAASqY,EAAiB,IAAIhhB,KAAS,KAC/BmhB,EAAOrgB,GAAK8b,EAAM7W,IAAWyY,KAAM3Q,IACzCvK,EAAQ4d,EAAUZ,GAA6Bva,EAAUkb,EAAO,CAACE,EAAK7d,MAAOuK,IAAQ,GAAQsT,EAAK7d,MAClG0c,GAAerX,EAAQkF,EAAOvK,GAWlC,OADAqF,EAAOhE,OAASkJ,EACTlF,CACT,EE5CQrI,GAWN,CAAEiM,OAAQ,QAASG,MAAM,EAAMK,QATCrJ,IAEqB,SAAU0d,GAE/DlL,MAAMyK,KAAKS,EACb,KAIgE,CAC9DT,KAAMA,KCVR,ICAAA,GDAWjd,GAEWwS,MAAMyK,UELXrgB,ICCb6D,GAAkB7D,EAElBwb,GAAYpY,GACZ+a,GAAsBxY,GACL2B,GAA+C9E,EACpE,IAAI4b,GAAiB5W,GACjByW,GAAyBlV,GAIzBgY,GAAiB,iBACjBzC,GAAmBH,GAAoBnI,IACvCuI,GAAmBJ,GAAoBrG,UAAUiJ,IAYtBC,GAACpL,MAAO,SAAS,SAAU4I,EAAUG,GAClEL,GAAiB5e,KAAM,CACrBsY,KAAM+I,GACN9U,OAAQpI,GAAgB2a,GACxBjR,MAAO,EACPoR,KAAMA,GAIV,IAAG,WACD,IAAInH,EAAQ+G,GAAiB7e,MACzBuM,EAASuL,EAAMvL,OACf0S,EAAOnH,EAAMmH,KACbpR,EAAQiK,EAAMjK,QAClB,IAAKtB,GAAUsB,GAAStB,EAAO5H,OAE7B,OADAmT,EAAMvL,YAAStK,EACRsc,QAAuBtc,GAAW,GAE3C,OAAQgd,GACN,IAAK,OAAQ,OAAOV,GAAuB1Q,GAAO,GAClD,IAAK,SAAU,OAAO0Q,GAAuBhS,EAAOsB,IAAQ,GAC5D,OAAO0Q,GAAuB,CAAC1Q,EAAOtB,EAAOsB,KAAS,EAC1D,GAAG,UAKUiO,GAAUyF,UAAYzF,GAAU5F,MCjD7C,IAEAsL,GAFwB9d,GCDpB+d,GCCa,CACfC,YAAa,EACbC,oBAAqB,EACrBC,aAAc,EACdC,eAAgB,EAChBC,YAAa,EACbC,cAAe,EACfC,aAAc,EACdC,qBAAsB,EACtBC,SAAU,EACVC,kBAAmB,EACnBC,eAAgB,EAChBC,gBAAiB,EACjBC,kBAAmB,EACnBC,UAAW,EACXC,cAAe,EACfC,aAAc,EACdC,SAAU,EACVC,iBAAkB,EAClBC,OAAQ,EACRC,YAAa,EACbC,cAAe,EACfC,cAAe,EACfC,eAAgB,EAChBC,aAAc,EACdC,cAAe,EACfC,iBAAkB,EAClBC,iBAAkB,EAClBC,eAAgB,EAChBC,iBAAkB,EAClBC,cAAe,EACfC,UAAW,GD/BT5jB,GAAS8D,EACTD,GAAUwC,GACVmF,GAA8BxD,GAC9BkU,GAAYhU,GAGZ4O,GAFkBrN,GAEc,eAEpC,IAAK,IAAIoa,MAAmBhC,GAAc,CACxC,IAAIiC,GAAa9jB,GAAO6jB,IACpBE,GAAsBD,IAAcA,GAAW9iB,UAC/C+iB,IAAuBlgB,GAAQkgB,MAAyBjN,IAC1DtL,GAA4BuY,GAAqBjN,GAAe+M,IAElE3H,GAAU2H,IAAmB3H,GAAU5F,KACzC,CEjBA,ICAAgK,GDAa5f,iBEDIA,ICAF,SAASsjB,GAAgBC,EAAUC,GAChD,KAAMD,aAAoBC,GACxB,MAAM,IAAI9f,UAAU,oCAExB,qBCHIuY,GAAIjc,GACJ6I,GAAczH,EACdY,GAAiBoB,GAA+CZ,EAKnEihB,GAAC,CAAExX,OAAQ,SAAUG,MAAM,EAAMK,OAAQ1K,OAAOC,iBAAmBA,GAAgBuD,MAAOsD,IAAe,CACxG7G,eAAgBA,KCPlB,IAEID,GAFOX,GAEOW,OAEdC,GAAiB6I,GAAciK,QAAG,SAAwB1V,EAAI+G,EAAKud,GACrE,OAAO3hB,GAAOC,eAAe5C,EAAI+G,EAAKud,EACxC,EAEI3hB,GAAOC,eAAeuD,OAAMvD,GAAeuD,MAAO,OCPtDvD,cCFAA,GCAahC,YCATmD,GAAUnD,EAKd2jB,GAAiB/N,MAAM+N,SAAW,SAAiB9hB,GACjD,MAA6B,UAAtBsB,GAAQtB,EACjB,ECPI4B,GAAaC,UAGjBkgB,GAAiB,SAAUxkB,GACzB,GAAIA,EAHiB,iBAGM,MAAMqE,GAAW,kCAC5C,OAAOrE,CACT,ECNIukB,GAAU3jB,GACVwf,GAAgBpe,GAChB0C,GAAWV,GAGXygB,GAFkBle,GAEQ,WAC1Bsa,GAASrK,MCNTkO,GDUa,SAAUC,GACzB,IAAIzT,EASF,OAREqT,GAAQI,KACVzT,EAAIyT,EAActJ,aAEd+E,GAAclP,KAAOA,IAAM2P,IAAU0D,GAAQrT,EAAEhQ,aAC1CwD,GAASwM,IAEN,QADVA,EAAIA,EAAEuT,QAFwDvT,OAAI3O,SAKvDA,IAAN2O,EAAkB2P,GAAS3P,CACtC,ECjBA0T,GAAiB,SAAUD,EAAe1f,GACxC,OAAO,IAAKyf,GAAwBC,GAA7B,CAAwD,IAAX1f,EAAe,EAAIA,EACzE,ECNIzE,GAAQI,EAERiF,GAAa7B,GAEbygB,GAHkBziB,GAGQ,WAE9B6iB,GAAiB,SAAUC,GAIzB,OAAOjf,IAAc,KAAOrF,IAAM,WAChC,IAAIukB,EAAQ,GAKZ,OAJkBA,EAAM1J,YAAc,IAC1BoJ,IAAW,WACrB,MAAO,CAAEO,IAAK,EACpB,EAC+C,IAApCD,EAAMD,GAAaG,SAASD,GACvC,GACA,EClBInI,GAAIjc,GACJJ,GAAQwB,EACRuiB,GAAUvgB,GACVU,GAAW6B,GACXkB,GAAWS,GACXoG,GAAoBlG,GACpBoc,GAA2B7a,GAC3B2W,GAAiBzW,GACjB+a,GAAqBhZ,GACrBiZ,GAA+BhZ,GAE/BhG,GAAa4X,GAEbyH,GAHkB9H,GAGqB,sBAKvC+H,GAA+Btf,IAAc,KAAOrF,IAAM,WAC5D,IAAIukB,EAAQ,GAEZ,OADAA,EAAMG,KAAwB,EACvBH,EAAMnV,SAAS,KAAOmV,CAC/B,IAEIK,GAAqB,SAAUpb,GACjC,IAAKtF,GAASsF,GAAI,OAAO,EACzB,IAAIqb,EAAarb,EAAEkb,IACnB,YAAsB3iB,IAAf8iB,IAA6BA,EAAad,GAAQva,EAC3D,EAOA6S,GAAE,CAAEhQ,OAAQ,QAASK,OAAO,EAAMsD,MAAO,EAAGnD,QAL9B8X,KAAiCN,GAA6B,WAKd,CAE5DjV,OAAQ,SAAgB0V,GACtB,IAGInW,EAAGoW,EAAGtgB,EAAQwR,EAAK+O,EAHnBxb,EAAIvC,GAASnH,MACbwP,EAAI8U,GAAmB5a,EAAG,GAC1B6D,EAAI,EAER,IAAKsB,GAAK,EAAGlK,EAAS1D,UAAU0D,OAAQkK,EAAIlK,EAAQkK,IAElD,GAAIiW,GADJI,GAAW,IAAPrW,EAAWnF,EAAIzI,UAAU4N,IAI3B,IAFAsH,EAAMnI,GAAkBkX,GACxBhB,GAAyB3W,EAAI4I,GACxB8O,EAAI,EAAGA,EAAI9O,EAAK8O,IAAK1X,IAAS0X,KAAKC,GAAGlF,GAAexQ,EAAGjC,EAAG2X,EAAED,SAElEf,GAAyB3W,EAAI,GAC7ByS,GAAexQ,EAAGjC,IAAK2X,GAI3B,OADA1V,EAAE7K,OAAS4I,EACJiC,CACR,cCvDCT,GAAqBzO,GAGrBoO,GAFchN,GAEW4N,OAAO,SAAU,aAKrC6V,GAAAriB,EAAGT,OAAO+iB,qBAAuB,SAA6B1b,GACrE,OAAOqF,GAAmBrF,EAAGgF,GAC/B,YCVId,GAAkBtN,GAClB0N,GAAoBtM,GACpBse,GAAiBtc,GAEjB6c,GAASrK,MACTxI,GAAM/N,KAAK+N,IAEf2X,GAAiB,SAAU3b,EAAG4b,EAAOC,GAMnC,IALA,IAAI5gB,EAASqJ,GAAkBtE,GAC3Bub,EAAIrX,GAAgB0X,EAAO3gB,GAC3B6gB,EAAM5X,QAAwB3L,IAARsjB,EAAoB5gB,EAAS4gB,EAAK5gB,GACxDgE,EAAS4X,GAAO7S,GAAI8X,EAAMP,EAAG,IAC7B1X,EAAI,EACD0X,EAAIO,EAAKP,IAAK1X,IAAKyS,GAAerX,EAAQ4E,EAAG7D,EAAEub,IAEtD,OADAtc,EAAOhE,OAAS4I,EACT5E,CACT,ECfIlF,GAAUnD,EACV6D,GAAkBzC,EAClB+jB,GAAuB/hB,GAAsDZ,EAC7EqN,GAAalK,GAEbyf,GAA+B,iBAAV5lB,QAAsBA,QAAUuC,OAAO+iB,oBAC5D/iB,OAAO+iB,oBAAoBtlB,QAAU,GAWzC6lB,GAAA7iB,EAAmB,SAA6BpD,GAC9C,OAAOgmB,IAA+B,WAAhBjiB,GAAQ/D,GAVX,SAAUA,GAC7B,IACE,OAAO+lB,GAAqB/lB,EAC7B,CAAC,MAAOU,GACP,OAAO+P,GAAWuV,GACnB,CACH,CAKME,CAAelmB,GACf+lB,GAAqBthB,GAAgBzE,GAC3C,ECtBA,IAAI4C,GAAiBhC,GAErBulB,GAAiB,SAAUtZ,EAAQpE,EAAMnF,GACvC,OAAOV,GAAeQ,EAAEyJ,EAAQpE,EAAMnF,EACxC,QCJIkF,GAAkB5H,GAEtBwlB,GAAAhjB,EAAYoF,GCFZ,IAAI7D,GAAO/D,GACP+G,GAAS3F,GACTqkB,GAA+BriB,GAC/BpB,GAAiB2D,GAA+CnD,EAEpEkjB,GAAiB,SAAUrJ,GACzB,IAAI/W,EAASvB,GAAKuB,SAAWvB,GAAKuB,OAAS,CAAA,GACtCyB,GAAOzB,EAAQ+W,IAAOra,GAAesD,EAAQ+W,EAAM,CACtDrZ,MAAOyiB,GAA6BjjB,EAAE6Z,IAE1C,ECVI7b,GAAOR,EACPkE,GAAa9C,GACbwG,GAAkBxE,GAClB0X,GAAgBnV,GAEpBggB,GAAiB,WACf,IAAIrgB,EAASpB,GAAW,UACpB0hB,EAAkBtgB,GAAUA,EAAOhF,UACnC4H,EAAU0d,GAAmBA,EAAgB1d,QAC7CC,EAAeP,GAAgB,eAE/Bge,IAAoBA,EAAgBzd,IAItC2S,GAAc8K,EAAiBzd,GAAc,SAAU0d,GACrD,OAAOrlB,GAAK0H,EAASxI,KAC3B,GAAO,CAAEkQ,MAAO,GAEhB,ECnBI1P,GAAOF,GAEP4D,GAAgBR,EAChByD,GAAWlB,GACX+H,GAAoBpG,GACpB0c,GAAqBxc,GAErBhB,GANcpF,EAMK,GAAGoF,MAGtBoH,GAAe,SAAUmK,GAC3B,IAAI+N,EAAkB,IAAT/N,EACTgO,EAAqB,IAAThO,EACZiO,EAAmB,IAATjO,EACVkO,EAAoB,IAATlO,EACXmO,EAAyB,IAATnO,EAChBoO,EAA4B,IAATpO,EACnBqO,EAAoB,IAATrO,GAAcmO,EAC7B,OAAO,SAAUpY,EAAOuY,EAAYnc,EAAMoc,GASxC,IARA,IAOItjB,EAAOqF,EAPPe,EAAIvC,GAASiH,GACbrO,EAAOmE,GAAcwF,GACrBgH,EAAgBlQ,GAAKmmB,EAAYnc,GACjC7F,EAASqJ,GAAkBjO,GAC3B8N,EAAQ,EACRgN,EAAS+L,GAAkBtC,GAC3B/X,EAAS6Z,EAASvL,EAAOzM,EAAOzJ,GAAU0hB,GAAaI,EAAmB5L,EAAOzM,EAAO,QAAKnM,EAE3F0C,EAASkJ,EAAOA,IAAS,IAAI6Y,GAAY7Y,KAAS9N,KAEtD4I,EAAS+H,EADTpN,EAAQvD,EAAK8N,GACiBA,EAAOnE,GACjC2O,GACF,GAAI+N,EAAQ7Z,EAAOsB,GAASlF,OACvB,GAAIA,EAAQ,OAAQ0P,GACvB,KAAK,EAAG,OAAO,EACf,KAAK,EAAG,OAAO/U,EACf,KAAK,EAAG,OAAOuK,EACf,KAAK,EAAG/G,GAAKyF,EAAQjJ,QAChB,OAAQ+U,GACb,KAAK,EAAG,OAAO,EACf,KAAK,EAAGvR,GAAKyF,EAAQjJ,GAI3B,OAAOkjB,GAAiB,EAAIF,GAAWC,EAAWA,EAAWha,CACjE,CACA,EAEAsa,GAAiB,CAGflX,QAASzB,GAAa,GAGtB4Y,IAAK5Y,GAAa,GAGlB6Y,OAAQ7Y,GAAa,GAGrB8Y,KAAM9Y,GAAa,GAGnB+Y,MAAO/Y,GAAa,GAGpBgZ,KAAMhZ,GAAa,GAGnBiZ,UAAWjZ,GAAa,GAGxBkZ,aAAclZ,GAAa,ICvEzBqO,GAAIjc,GACJV,GAAS8B,EACTZ,GAAO4C,EACPrC,GAAc4E,EAEdkD,GAAcrB,EACdH,GAAgB0B,GAChBnJ,GAAQqJ,EACRlC,GAASiE,GACTzG,GAAgB0G,GAChBb,GAAWoS,GACX3Y,GAAkBgZ,EAClBtU,GAAgBkU,GAChBsK,GAAYpK,GACZ7Z,GAA2BkkB,EAC3BC,GAAqBC,GACrBxY,GAAayY,GACbC,GAA4BC,GAC5BC,GAA8BC,GAC9B1Y,GAA8B2Y,GAC9BC,GAAiCC,EACjC7c,GAAuB8c,GACvBjP,GAAyBkP,GACzB9e,GAA6B+e,EAC7B/M,GAAgBgN,GAChBvC,GAAwBwC,GACxB3gB,GAAS4gB,GAET5Z,GAAa6Z,GACb9gB,GAAM+gB,GACNtgB,GAAkBugB,GAClB1C,GAA+B2C,GAC/BC,GAAwBC,GACxBC,GAA0BC,GAC1BpN,GAAiBqN,GACjBtK,GAAsBuK,GACtBC,GAAWC,GAAwCvZ,QAEnDwZ,GAXYC,GAWO,UACnBC,GAAS,SACTpQ,GAAY,YAEZ2F,GAAmBH,GAAoBnI,IACvCuI,GAAmBJ,GAAoBrG,UAAUiR,IAEjDnO,GAAkB7Y,OAAO4W,IACzB/S,GAAUtG,GAAOgG,OACjBsgB,GAAkBhgB,IAAWA,GAAQ+S,IACrCqQ,GAAa1pB,GAAO0pB,WACpBtlB,GAAYpE,GAAOoE,UACnBulB,GAAU3pB,GAAO2pB,QACjBC,GAAiCzB,GAA+BjlB,EAChE2mB,GAAuBte,GAAqBrI,EAC5C4mB,GAA4B9B,GAA4B9kB,EACxD6mB,GAA6BvgB,GAA2BtG,EACxDgE,GAAOzF,GAAY,GAAGyF,MAEtB8iB,GAAaliB,GAAO,WACpBmiB,GAAyBniB,GAAO,cAChCK,GAAwBL,GAAO,OAG/BoiB,IAAcP,KAAYA,GAAQtQ,MAAesQ,GAAQtQ,IAAW8Q,UAGpEC,GAAyB,SAAUtgB,EAAGpD,EAAG2E,GAC3C,IAAIgf,EAA4BT,GAA+BtO,GAAiB5U,GAC5E2jB,UAAkC/O,GAAgB5U,GACtDmjB,GAAqB/f,EAAGpD,EAAG2E,GACvBgf,GAA6BvgB,IAAMwR,IACrCuO,GAAqBvO,GAAiB5U,EAAG2jB,EAE7C,EAEIC,GAAsB/gB,IAAejJ,IAAM,WAC7C,OAEU,IAFHqnB,GAAmBkC,GAAqB,CAAE,EAAE,IAAK,CACtDlnB,IAAK,WAAc,OAAOknB,GAAqBzpB,KAAM,IAAK,CAAEsD,MAAO,IAAK4F,CAAI,KAC1EA,CACN,IAAK8gB,GAAyBP,GAE1Bxc,GAAO,SAAU2J,EAAKuT,GACxB,IAAIxkB,EAASikB,GAAWhT,GAAO2Q,GAAmBrB,IAOlD,OANAtH,GAAiBjZ,EAAQ,CACvB2S,KAAM+Q,GACNzS,IAAKA,EACLuT,YAAaA,IAEVhhB,KAAaxD,EAAOwkB,YAAcA,GAChCxkB,CACT,EAEIiF,GAAkB,SAAwBlB,EAAGpD,EAAG2E,GAC9CvB,IAAMwR,IAAiBtQ,GAAgBif,GAAwBvjB,EAAG2E,GACtEP,GAAShB,GACT,IAAIjD,EAAMoC,GAAcvC,GAExB,OADAoE,GAASO,GACL5D,GAAOuiB,GAAYnjB,IAChBwE,EAAWhI,YAIVoE,GAAOqC,EAAGyf,KAAWzf,EAAEyf,IAAQ1iB,KAAMiD,EAAEyf,IAAQ1iB,IAAO,GAC1DwE,EAAasc,GAAmBtc,EAAY,CAAEhI,WAAYG,GAAyB,GAAG,OAJjFiE,GAAOqC,EAAGyf,KAASM,GAAqB/f,EAAGyf,GAAQ/lB,GAAyB,EAAG,CAAA,IACpFsG,EAAEyf,IAAQ1iB,IAAO,GAIVyjB,GAAoBxgB,EAAGjD,EAAKwE,IAC9Bwe,GAAqB/f,EAAGjD,EAAKwE,EACxC,EAEImf,GAAoB,SAA0B1gB,EAAGkP,GACnDlO,GAAShB,GACT,IAAI2gB,EAAalmB,GAAgByU,GAC7B3J,EAAOD,GAAWqb,GAAY/a,OAAOgb,GAAuBD,IAIhE,OAHApB,GAASha,GAAM,SAAUxI,GAClB0C,KAAerI,GAAK2B,GAAuB4nB,EAAY5jB,IAAMmE,GAAgBlB,EAAGjD,EAAK4jB,EAAW5jB,GACzG,IACSiD,CACT,EAMIjH,GAAwB,SAA8BM,GACxD,IAAIuD,EAAIuC,GAAc9F,GAClBE,EAAanC,GAAK6oB,GAA4B3pB,KAAMsG,GACxD,QAAItG,OAASkb,IAAmB7T,GAAOuiB,GAAYtjB,KAAOe,GAAOwiB,GAAwBvjB,QAClFrD,IAAeoE,GAAOrH,KAAMsG,KAAOe,GAAOuiB,GAAYtjB,IAAMe,GAAOrH,KAAMmpB,KAAWnpB,KAAKmpB,IAAQ7iB,KACpGrD,EACN,EAEIuG,GAA4B,SAAkCE,EAAGpD,GACnE,IAAI5G,EAAKyE,GAAgBuF,GACrBjD,EAAMoC,GAAcvC,GACxB,GAAI5G,IAAOwb,KAAmB7T,GAAOuiB,GAAYnjB,IAASY,GAAOwiB,GAAwBpjB,GAAzF,CACA,IAAIzD,EAAawmB,GAA+B9pB,EAAI+G,GAIpD,OAHIzD,IAAcqE,GAAOuiB,GAAYnjB,IAAUY,GAAO3H,EAAIypB,KAAWzpB,EAAGypB,IAAQ1iB,KAC9EzD,EAAWC,YAAa,GAEnBD,CAL+F,CAMxG,EAEIyiB,GAAuB,SAA6B/b,GACtD,IAAIkF,EAAQ8a,GAA0BvlB,GAAgBuF,IAClDf,EAAS,GAIb,OAHAsgB,GAASra,GAAO,SAAUnI,GACnBY,GAAOuiB,GAAYnjB,IAASY,GAAOqH,GAAYjI,IAAMK,GAAK6B,EAAQlC,EAC3E,IACSkC,CACT,EAEI2hB,GAAyB,SAAU5gB,GACrC,IAAI6gB,EAAsB7gB,IAAMwR,GAC5BtM,EAAQ8a,GAA0Ba,EAAsBV,GAAyB1lB,GAAgBuF,IACjGf,EAAS,GAMb,OALAsgB,GAASra,GAAO,SAAUnI,IACpBY,GAAOuiB,GAAYnjB,IAAU8jB,IAAuBljB,GAAO6T,GAAiBzU,IAC9EK,GAAK6B,EAAQihB,GAAWnjB,GAE9B,IACSkC,CACT,EAIKhB,KACHzB,GAAU,WACR,GAAIrB,GAAcqhB,GAAiBlmB,MAAO,MAAM,IAAIgE,GAAU,+BAC9D,IAAImmB,EAAelpB,UAAU0D,aAA2B1C,IAAjBhB,UAAU,GAA+BomB,GAAUpmB,UAAU,SAAhCgB,EAChE2U,EAAMnP,GAAI0iB,GACV/N,EAAS,SAAU9Y,GACjBtD,OAASkb,IAAiBpa,GAAKsb,EAAQyN,GAAwBvmB,GAC/D+D,GAAOrH,KAAMmpB,KAAW9hB,GAAOrH,KAAKmpB,IAASvS,KAAM5W,KAAKmpB,IAAQvS,IAAO,GAC3E,IAAI5T,EAAaI,GAAyB,EAAGE,GAC7C,IACE4mB,GAAoBlqB,KAAM4W,EAAK5T,EAChC,CAAC,MAAO5C,GACP,KAAMA,aAAiBkpB,IAAa,MAAMlpB,EAC1C4pB,GAAuBhqB,KAAM4W,EAAK5T,EACnC,CACP,EAEI,OADImG,IAAe2gB,IAAYI,GAAoBhP,GAAiBtE,EAAK,CAAErT,cAAc,EAAM+S,IAAK8F,IAC7FnP,GAAK2J,EAAKuT,EACrB,EAIE/O,GAFA8K,GAAkBhgB,GAAQ+S,IAEK,YAAY,WACzC,OAAO4F,GAAiB7e,MAAM4W,GAClC,IAEEwE,GAAclV,GAAS,iBAAiB,SAAUikB,GAChD,OAAOld,GAAKxF,GAAI0iB,GAAcA,EAClC,IAEE/gB,GAA2BtG,EAAIL,GAC/B0I,GAAqBrI,EAAI8H,GACzBoO,GAAuBlW,EAAIsnB,GAC3BrC,GAA+BjlB,EAAI0G,GACnCke,GAA0B5kB,EAAI8kB,GAA4B9kB,EAAI2iB,GAC9DtW,GAA4BrM,EAAIwnB,GAEhCvE,GAA6BjjB,EAAI,SAAUqF,GACzC,OAAO8E,GAAK/E,GAAgBC,GAAOA,EACvC,EAEMgB,IAEF0c,GAAsBK,GAAiB,cAAe,CACpD3iB,cAAc,EACdhB,IAAK,WACH,OAAOsc,GAAiB7e,MAAMmqB,WAC/B,KAQNK,GAAC,CAAE5qB,QAAQ,EAAMmb,aAAa,EAAM9N,MAAM,EAAMF,QAASpF,GAAe9B,MAAO8B,IAAiB,CAC/F/B,OAAQM,KAGFukB,GAACzb,GAAWjH,KAAwB,SAAUI,GACpDwgB,GAAsBxgB,EACxB,IAEAoU,GAAE,CAAEhQ,OAAQ8c,GAAQ3c,MAAM,EAAMK,QAASpF,IAAiB,CACxD+iB,UAAW,WAAcZ,IAAa,CAAO,EAC7Ca,UAAW,WAAcb,IAAa,CAAQ,IAG/CU,GAAC,CAAEje,OAAQ,SAAUG,MAAM,EAAMK,QAASpF,GAAe9B,MAAOsD,IAAe,CAG9E0R,OArHY,SAAgBnR,EAAGkP,GAC/B,YAAsB3W,IAAf2W,EAA2B2O,GAAmB7d,GAAK0gB,GAAkB7C,GAAmB7d,GAAIkP,EACrG,EAsHEtW,eAAgBsI,GAGhB+N,iBAAkByR,GAGlBznB,yBAA0B6G,KAG5B+S,GAAE,CAAEhQ,OAAQ,SAAUG,MAAM,EAAMK,QAASpF,IAAiB,CAG1Dyd,oBAAqBK,KAKvBoD,KAIAnN,GAAexV,GAASmjB,IAExB3a,GAAWya,KAAU,ECpQrB,IAGAyB,GAHoBtqB,MAGgBsF,OAAY,OAAOA,OAAOilB,OCH1DtO,GAAIjc,GACJkE,GAAa9C,GACb2F,GAAS3D,GACTpC,GAAW2E,GACXyB,GAASE,GACTkjB,GAAyBhjB,GAEzBijB,GAAyBrjB,GAAO,6BAChCsjB,GAAyBtjB,GAAO,6BAIpC6U,GAAE,CAAEhQ,OAAQ,SAAUG,MAAM,EAAMK,QAAS+d,IAA0B,CACnEG,IAAO,SAAUxkB,GACf,IAAI0D,EAAS7I,GAASmF,GACtB,GAAIY,GAAO0jB,GAAwB5gB,GAAS,OAAO4gB,GAAuB5gB,GAC1E,IAAIxE,EAASnB,GAAW,SAAXA,CAAqB2F,GAGlC,OAFA4gB,GAAuB5gB,GAAUxE,EACjCqlB,GAAuBrlB,GAAUwE,EAC1BxE,CACR,ICpBH,IAAI4W,GAAIjc,GACJ+G,GAAS3F,GACTsE,GAAWtC,GACXyC,GAAcF,GAEd6kB,GAAyBhjB,GAEzBkjB,GAHSpjB,GAGuB,6BAIpC2U,GAAE,CAAEhQ,OAAQ,SAAUG,MAAM,EAAMK,QAAS+d,IAA0B,CACnED,OAAQ,SAAgBK,GACtB,IAAKllB,GAASklB,GAAM,MAAM,IAAIlnB,UAAUmC,GAAY+kB,GAAO,oBAC3D,GAAI7jB,GAAO2jB,GAAwBE,GAAM,OAAOF,GAAuBE,EACxE,ICfH,IACIjH,GAAUviB,GACVQ,GAAawB,EACbD,GAAUwC,EACV3E,GAAWsG,GAEXd,GANcxG,EAMK,GAAGwG,MCNtByV,GAAIjc,GACJkE,GAAa9C,GACbb,GAAQ6C,EACR5C,GAAOmF,EACP5E,GAAcuG,EACd1H,GAAQ4H,EACR5F,GAAamH,EACbrD,GAAWuD,GACX4G,GAAa7E,GACb6f,GDDa,SAAUC,GACzB,GAAIlpB,GAAWkpB,GAAW,OAAOA,EACjC,GAAKnH,GAAQmH,GAAb,CAGA,IAFA,IAAIC,EAAYD,EAASzmB,OACrBsK,EAAO,GACFJ,EAAI,EAAGA,EAAIwc,EAAWxc,IAAK,CAClC,IAAIyc,EAAUF,EAASvc,GACD,iBAAXyc,EAAqBxkB,GAAKmI,EAAMqc,GAChB,iBAAXA,GAA4C,WAArB7nB,GAAQ6nB,IAA8C,WAArB7nB,GAAQ6nB,IAAuBxkB,GAAKmI,EAAM3N,GAASgqB,GAC5H,CACD,IAAIC,EAAatc,EAAKtK,OAClB6mB,GAAO,EACX,OAAO,SAAU/kB,EAAKnD,GACpB,GAAIkoB,EAEF,OADAA,GAAO,EACAloB,EAET,GAAI2gB,GAAQjkB,MAAO,OAAOsD,EAC1B,IAAK,IAAI2M,EAAI,EAAGA,EAAIsb,EAAYtb,IAAK,GAAIhB,EAAKgB,KAAOxJ,EAAK,OAAOnD,CACrE,CAjBiC,CAkBjC,EClBIqE,GAAgBmV,GAEhBtX,GAAUR,OACVymB,GAAajnB,GAAW,OAAQ,aAChCrE,GAAOkB,GAAY,IAAIlB,MACvB4W,GAAS1V,GAAY,GAAG0V,QACxBC,GAAa3V,GAAY,GAAG2V,YAC5B5M,GAAU/I,GAAY,GAAG+I,SACzBshB,GAAiBrqB,GAAY,GAAIC,UAEjCqqB,GAAS,mBACTC,GAAM,oBACNC,GAAK,oBAELC,IAA4BnkB,IAAiBzH,IAAM,WACrD,IAAIyF,EAASnB,GAAW,SAAXA,CAAqB,uBAElC,MAAgC,WAAzBinB,GAAW,CAAC9lB,KAEgB,OAA9B8lB,GAAW,CAAEviB,EAAGvD,KAEe,OAA/B8lB,GAAWppB,OAAOsD,GACzB,IAGIomB,GAAqB7rB,IAAM,WAC7B,MAAsC,qBAA/BurB,GAAW,iBACY,cAAzBA,GAAW,SAClB,IAEIO,GAA0B,SAAUtsB,EAAI0rB,GAC1C,IAAIza,EAAOR,GAAWlP,WAClBgrB,EAAYd,GAAoBC,GACpC,GAAKlpB,GAAW+pB,SAAsBhqB,IAAPvC,IAAoBsG,GAAStG,GAM5D,OALAiR,EAAK,GAAK,SAAUlK,EAAKnD,GAGvB,GADIpB,GAAW+pB,KAAY3oB,EAAQxC,GAAKmrB,EAAWjsB,KAAMwF,GAAQiB,GAAMnD,KAClE0C,GAAS1C,GAAQ,OAAOA,CACjC,EACSzC,GAAM4qB,GAAY,KAAM9a,EACjC,EAEIub,GAAe,SAAUhpB,EAAOipB,EAAQhiB,GAC1C,IAAIiiB,EAAOrV,GAAO5M,EAAQgiB,EAAS,GAC/BvP,EAAO7F,GAAO5M,EAAQgiB,EAAS,GACnC,OAAKhsB,GAAKyrB,GAAK1oB,KAAW/C,GAAK0rB,GAAIjP,IAAWzc,GAAK0rB,GAAI3oB,KAAW/C,GAAKyrB,GAAKQ,GACnE,MAAQV,GAAe1U,GAAW9T,EAAO,GAAI,IAC7CA,CACX,EAEIuoB,IAGFlP,GAAE,CAAEhQ,OAAQ,OAAQG,MAAM,EAAMwD,MAAO,EAAGnD,OAAQ+e,IAA4BC,IAAsB,CAElGM,UAAW,SAAmB3sB,EAAI0rB,EAAUkB,GAC1C,IAAI3b,EAAOR,GAAWlP,WAClB0H,EAAS9H,GAAMirB,GAA2BE,GAA0BP,GAAY,KAAM9a,GAC1F,OAAOob,IAAuC,iBAAVpjB,EAAqByB,GAAQzB,EAAQgjB,GAAQO,IAAgBvjB,CAClG,ICrEL,IAGIwG,GAA8BlJ,GAC9BkB,GAAWS,GAJPtH,GAYN,CAAEiM,OAAQ,SAAUG,MAAM,EAAMK,QAXdrL,IACRgC,GAMyB,WAAcyL,GAA4BrM,EAAE,EAAG,KAIhC,CAClD4C,sBAAuB,SAA+BhG,GACpD,IAAI4qB,EAAyBnb,GAA4BrM,EACzD,OAAOwnB,EAAyBA,EAAuBnjB,GAASzH,IAAO,EACxE,IChByBY,GAIN,iBCJMA,GAIN,eCJMA,GAIN,sBCJMA,GAIN,YCJMA,GAIN,SCJMA,GAIN,YCJMA,GAIN,WCJMA,GAIN,UCJMA,GAIN,WCJMA,GAIN,SCJtB,IACIuoB,GAA0BnnB,GADFpB,GAKN,eAItBuoB,KCTA,IAAIrkB,GAAalE,GAEbob,GAAiBhY,GADOhC,GAKN,eAItBga,GAAelX,GAAW,UAAW,UCVTlE,GAIN,eCHDoB,GADRpB,EAKSisB,KAAM,QAAQ,GCepC,ICjBA5mB,GDiBWqiB,GAEWpiB,OEtBlBsC,GAAkB5H,GAClBgC,GAAiBZ,GAA+CoB,EAEhE0pB,GAAWtkB,GAAgB,YAC3BvH,GAAoBV,SAASW,eAIGqB,IAAhCtB,GAAkB6rB,KACpBlqB,GAAe3B,GAAmB6rB,GAAU,CAC1ClpB,MAAO,OCViBhD,GAIN,gBCJMA,GAIN,WCHMA,GAIN,YCLtB,IAOAqF,GAParF,GCCTe,GAAcK,EAEdkE,GAHatF,GAGO,UACpBuqB,GAASjlB,GAAOilB,OAChB4B,GAAkBprB,GAAYuE,GAAOhF,UAAU4H,SAInDkkB,GAAiB9mB,GAAO+mB,oBAAsB,SAA4BrpB,GACxE,IACE,YAA0CrB,IAAnC4oB,GAAO4B,GAAgBnpB,GAC/B,CAAC,MAAOlD,GACP,OAAO,CACR,CACH,ECfQE,GAKN,CAAEiM,OAAQ,SAAUG,MAAM,GAAQ,CAClCigB,mBALuBjrB,KCWzB,IAZA,IAAIgG,GAASpH,GACTkE,GAAa9C,GACbL,GAAcqC,EACdsC,GAAWC,GACXiC,GAAkBN,GAElBhC,GAASpB,GAAW,UACpBooB,GAAqBhnB,GAAOinB,kBAC5BzH,GAAsB5gB,GAAW,SAAU,uBAC3CioB,GAAkBprB,GAAYuE,GAAOhF,UAAU4H,SAC/CT,GAAwBL,GAAO,OAE1BmH,GAAI,EAAGie,GAAa1H,GAAoBxf,IAASmnB,GAAmBD,GAAWnoB,OAAQkK,GAAIke,GAAkBle,KAEpH,IACE,IAAIme,GAAYF,GAAWje,IACvB7I,GAASJ,GAAOonB,MAAa9kB,GAAgB8kB,GACrD,CAAI,MAAO5sB,GAAsB,CAMjC,IAAA6sB,GAAiB,SAA2B3pB,GAC1C,GAAIspB,IAAsBA,GAAmBtpB,GAAQ,OAAO,EAC5D,IAEE,IADA,IAAIqC,EAAS8mB,GAAgBnpB,GACpB2M,EAAI,EAAGhB,EAAOmW,GAAoBrd,IAAwBwjB,EAAatc,EAAKtK,OAAQsL,EAAIsb,EAAYtb,IAE3G,GAAIlI,GAAsBkH,EAAKgB,KAAOtK,EAAQ,OAAO,CAE3D,CAAI,MAAOvF,GAAsB,CAC/B,OAAO,CACT,ECjCQE,GAMN,CAAEiM,OAAQ,SAAUG,MAAM,EAAMK,QAAQ,GAAQ,CAChD8f,kBANsBnrB,KCDIpB,GAIN,WCJMA,GAIN,cCJdA,GAKN,CAAEiM,OAAQ,SAAUG,MAAM,EAAMvE,KAAM,sBAAwB,CAC9D+kB,aALuBxrB,KCDjBpB,GAMN,CAAEiM,OAAQ,SAAUG,MAAM,EAAMvE,KAAM,oBAAqB4E,QAAQ,GAAQ,CAC3EogB,YANsBzrB,KCDIpB,GAIN,eCHMA,GAIN,gBCJMA,GAEN,cCHtB,ICAAqF,GDAarF,YEGbyF,GCCmC6B,GAEW9E,EAAE,YCNhDiD,GCAazF,YCCE,SAAS8sB,GAAQC,GAG9B,OAAOD,GAAU,mBAAqBE,IAAW,iBAAmBC,GAAmB,SAAUF,GAC/F,cAAcA,CACf,EAAG,SAAUA,GACZ,OAAOA,GAAK,mBAAqBC,IAAWD,EAAEtS,cAAgBuS,IAAWD,IAAMC,GAAQ1sB,UAAY,gBAAkBysB,CACzH,EAAKD,GAAQC,EACb,CCPA,SAAmC3pB,GAEWZ,EAAE,gBCHjC,SAAS0qB,GAAexI,GACrC,IAAIve,ECDS,SAAsB4B,EAAO8d,GAC1C,GAAuB,WAAnBiH,GAAQ/kB,IAAiC,OAAVA,EAAgB,OAAOA,EAC1D,IAAIolB,EAAOplB,EAAMqlB,IACjB,QAAazrB,IAATwrB,EAAoB,CACtB,IAAIE,EAAMF,EAAK3sB,KAAKuH,EAAO8d,GAAQ,WACnC,GAAqB,WAAjBiH,GAAQO,GAAmB,OAAOA,EACtC,MAAM,IAAI3pB,UAAU,+CACrB,CACD,OAAiB,WAATmiB,EAAoBnhB,OAAS4oB,QAAQvlB,EAC/C,CDRYK,CAAYsc,EAAK,UAC3B,MAAwB,WAAjBoI,GAAQ3mB,GAAoBA,EAAMzB,OAAOyB,EAClD,CEHA,SAASonB,GAAkBthB,EAAQsM,GACjC,IAAK,IAAIhK,EAAI,EAAGA,EAAIgK,EAAMlU,OAAQkK,IAAK,CACrC,IAAI7L,EAAa6V,EAAMhK,GACvB7L,EAAWC,WAAaD,EAAWC,aAAc,EACjDD,EAAWO,cAAe,EACtB,UAAWP,IAAYA,EAAWQ,UAAW,GACjDsqB,GAAuBvhB,EAAQ1D,GAAc7F,EAAWyD,KAAMzD,EAC/D,CACH,CACe,SAAS+qB,GAAajK,EAAakK,EAAYC,GAM5D,OALID,GAAYH,GAAkB/J,EAAYljB,UAAWotB,GACrDC,GAAaJ,GAAkB/J,EAAamK,GAChDH,GAAuBhK,EAAa,YAAa,CAC/CtgB,UAAU,IAELsgB,CACT,CCjBQxjB,GAKN,CAAEiM,OAAQ,QAASG,MAAM,GAAQ,CACjCuX,QALYviB,KCAd,ICCAuiB,GDDWviB,GAEWwU,MAAM+N,aEHf3jB,ICAb,IAAI6I,GAAc7I,EACd2jB,GAAUviB,GAEVqC,GAAaC,UAEbrB,GAA2BN,OAAOM,yBActCurB,GAXwC/kB,KAAgB,WAEtD,QAAalH,IAATjC,KAAoB,OAAO,EAC/B,IAEEqC,OAAOC,eAAe,GAAI,SAAU,CAAEkB,UAAU,IAASmB,OAAS,CACnE,CAAC,MAAOvE,GACP,OAAOA,aAAiB4D,SACzB,CACH,CATwD,GAWH,SAAU0F,EAAG/E,GAChE,GAAIsf,GAAQva,KAAO/G,GAAyB+G,EAAG,UAAUlG,SACvD,MAAM,IAAIO,GAAW,gCACrB,OAAO2F,EAAE/E,OAASA,CACtB,EAAI,SAAU+E,EAAG/E,GACf,OAAO+E,EAAE/E,OAASA,CACpB,ECxBIwC,GAAWzF,GACXsM,GAAoBtK,GACpByqB,GAAiBloB,GACjBie,GAA2Btc,GAJvBtH,GA0BN,CAAEiM,OAAQ,QAASK,OAAO,EAAMsD,MAAO,EAAGnD,OArBhCjF,GAEoB,WAC9B,OAAoD,aAA7C,GAAGhB,KAAKhG,KAAK,CAAE6D,OAAQ,YAAe,EAC/C,MAIqC,WACnC,IAEEtC,OAAOC,eAAe,GAAI,SAAU,CAAEkB,UAAU,IAASsD,MAC1D,CAAC,MAAO1G,GACP,OAAOA,aAAiB4D,SACzB,CACH,CAEqCoqB,IAIyB,CAE5DtnB,KAAM,SAAcunB,GAClB,IAAI3kB,EAAIvC,GAASnH,MACbmW,EAAMnI,GAAkBtE,GACxB4kB,EAAWrtB,UAAU0D,OACzBuf,GAAyB/N,EAAMmY,GAC/B,IAAK,IAAIzf,EAAI,EAAGA,EAAIyf,EAAUzf,IAC5BnF,EAAEyM,GAAOlV,UAAU4N,GACnBsH,IAGF,OADAgY,GAAezkB,EAAGyM,GACXA,CACR,ICtCH,IAEArP,GAFmBpF,GAEW,SAASoF,KCHnCjC,GAAgBvE,GAChBoE,GAAShD,GAET0d,GAAiBlJ,MAAMtV,UCHvBsQ,GDKa,SAAUxR,GACzB,IAAIyR,EAAMzR,EAAGoH,KACb,OAAOpH,IAAO0f,IAAmBva,GAAcua,GAAgB1f,IAAOyR,IAAQiO,GAAetY,KAAQpC,GAASyM,CAChH,EERArK,GDEiBoK,YEFjB,IAAIqL,GAAIjc,GACJ2jB,GAAUviB,GACVoe,GAAgBpc,GAChBU,GAAW6B,GACX2H,GAAkBhG,GAClBoG,GAAoBlG,GACpB3D,GAAkBkF,EAClB2W,GAAiBzW,GACjBrB,GAAkBoD,GAElBijB,GAAczR,GAEd0R,GAH+BjjB,GAGoB,SAEnD4Y,GAAUjc,GAAgB,WAC1BqY,GAASrK,MACTxI,GAAM/N,KAAK+N,IAKf6O,GAAE,CAAEhQ,OAAQ,QAASK,OAAO,EAAMG,QAASyhB,IAAuB,CAChEhtB,MAAO,SAAe8jB,EAAOC,GAC3B,IAKIzB,EAAanb,EAAQ4E,EALrB7D,EAAIvF,GAAgBnE,MACpB2E,EAASqJ,GAAkBtE,GAC3Bub,EAAIrX,GAAgB0X,EAAO3gB,GAC3B6gB,EAAM5X,QAAwB3L,IAARsjB,EAAoB5gB,EAAS4gB,EAAK5gB,GAG5D,GAAIsf,GAAQva,KACVoa,EAAcpa,EAAEqR,aAEZ+E,GAAcgE,KAAiBA,IAAgBvD,IAAU0D,GAAQH,EAAYljB,aAEtEwD,GAAS0f,IAEE,QADpBA,EAAcA,EAAYK,QAF1BL,OAAc7hB,GAKZ6hB,IAAgBvD,SAA0Bte,IAAhB6hB,GAC5B,OAAOyK,GAAY7kB,EAAGub,EAAGO,GAI7B,IADA7c,EAAS,SAAqB1G,IAAhB6hB,EAA4BvD,GAASuD,GAAapW,GAAI8X,EAAMP,EAAG,IACxE1X,EAAI,EAAG0X,EAAIO,EAAKP,IAAK1X,IAAS0X,KAAKvb,GAAGsW,GAAerX,EAAQ4E,EAAG7D,EAAEub,IAEvE,OADAtc,EAAOhE,OAAS4I,EACT5E,CACR,IC7CH,IAEAnH,GAFmBE,GAEW,SAASF,MCHnCqD,GAAgBvE,GAChBoE,GAAShD,GAET0d,GAAiBlJ,MAAMtV,UCHvBsQ,GDKa,SAAUxR,GACzB,IAAIyR,EAAMzR,EAAG8B,MACb,OAAO9B,IAAO0f,IAAmBva,GAAcua,GAAgB1f,IAAOyR,IAAQiO,GAAe5d,MAASkD,GAASyM,CACjH,ECNA3P,GAAiB0P,GCFjB1P,GCAalB,iBCAAA,ICDE,SAASmuB,GAAkBC,EAAKvY,IAClC,MAAPA,GAAeA,EAAMuY,EAAI/pB,UAAQwR,EAAMuY,EAAI/pB,QAC/C,IAAK,IAAIkK,EAAI,EAAG8f,EAAO,IAAIzY,MAAMC,GAAMtH,EAAIsH,EAAKtH,IAAK8f,EAAK9f,GAAK6f,EAAI7f,GACnE,OAAO8f,CACT,CCDe,SAASC,GAA4BvB,EAAGwB,GACrD,IAAIC,EACJ,GAAKzB,EAAL,CACA,GAAiB,iBAANA,EAAgB,OAAO0B,GAAiB1B,EAAGwB,GACtD,IAAIthB,EAAIyhB,GAAuBF,EAAWzsB,OAAOzB,UAAUU,SAASR,KAAKusB,IAAIvsB,KAAKguB,EAAU,GAAI,GAEhG,MADU,WAANvhB,GAAkB8f,EAAEtS,cAAaxN,EAAI8f,EAAEtS,YAAY5S,MAC7C,QAANoF,GAAqB,QAANA,EAAoB0hB,GAAY5B,GACzC,cAAN9f,GAAqB,2CAA2ChN,KAAKgN,GAAWwhB,GAAiB1B,EAAGwB,QAAxG,CALe,CAMjB,CCPe,SAASK,GAAeR,EAAK7f,GAC1C,OCJa,SAAyB6f,GACtC,GAAIS,GAAeT,GAAM,OAAOA,CAClC,CDESU,CAAeV,IEFT,SAA+Bnd,EAAG8d,GAC/C,IAAIC,EAAI,MAAQ/d,EAAI,UAAO,IAAsB+b,IAAWiC,GAAmBhe,IAAMA,EAAE,cACvF,GAAI,MAAQ+d,EAAG,CACb,IAAIE,EACFjiB,EACAsB,EACA4gB,EACAvmB,EAAI,GACJpG,GAAI,EACJuqB,GAAI,EACN,IACE,GAAIxe,GAAKygB,EAAIA,EAAExuB,KAAKyQ,IAAIqL,KAAM,IAAMyS,EAAG,CACrC,GAAIhtB,OAAOitB,KAAOA,EAAG,OACrBxsB,GAAI,CACL,MAAM,OAASA,GAAK0sB,EAAI3gB,EAAE/N,KAAKwuB,IAAI9Q,QAAUkR,GAAsBxmB,GAAGpI,KAAKoI,EAAGsmB,EAAElsB,OAAQ4F,EAAEvE,SAAW0qB,GAAIvsB,GAAI,GAC/G,CAAC,MAAOyO,GACP8b,GAAI,EAAI9f,EAAIgE,CAClB,CAAc,QACR,IACE,IAAKzO,GAAK,MAAQwsB,EAAU,SAAMG,EAAIH,EAAU,SAAKjtB,OAAOotB,KAAOA,GAAI,MAC/E,CAAgB,QACR,GAAIpC,EAAG,MAAM9f,CACd,CACF,CACD,OAAOrE,CACR,CACH,CFxBgCymB,CAAqBjB,EAAK7f,IAAM+gB,GAA2BlB,EAAK7f,IGLjF,WACb,MAAM,IAAI7K,UAAU,4IACtB,CHGsG6rB,EACtG,CIFe,SAASC,GAAmBpB,GACzC,OCHa,SAA4BA,GACzC,GAAIS,GAAeT,GAAM,OAAOK,GAAiBL,EACnD,CDCSqB,CAAkBrB,IEFZ,SAA0BsB,GACvC,QAAuB,IAAZ1C,IAAuD,MAA5BiC,GAAmBS,IAAuC,MAAtBA,EAAK,cAAuB,OAAOf,GAAYe,EAC3H,CFAmCC,CAAgBvB,IAAQkB,GAA2BlB,IGLvE,WACb,MAAM,IAAI1qB,UAAU,uIACtB,CHG8FksB,EAC9F,CINA,SAAiB5vB,ICIjBgP,GAFmB5N,GAEW,SAAS4N,OCHnCzK,GAAgBvE,GAChBoE,GAAShD,GAET0d,GAAiBlJ,MAAMtV,UCHvBsQ,GDKa,SAAUxR,GACzB,IAAIyR,EAAMzR,EAAG4P,OACb,OAAO5P,IAAO0f,IAAmBva,GAAcua,GAAgB1f,IAAOyR,IAAQiO,GAAe9P,OAAU5K,GAASyM,CAClH,OCNiBD,SCHA5Q,ICCbkE,GAAalE,GAEbonB,GAA4BhkB,GAC5ByL,GAA8BlJ,GAC9ByE,GAAW9C,GAEX0H,GALc5N,EAKO,GAAG4N,QAG5B6gB,GAAiB3rB,GAAW,UAAW,YAAc,SAAiB9E,GACpE,IAAIuP,EAAOyY,GAA0B5kB,EAAE4H,GAAShL,IAC5CgG,EAAwByJ,GAA4BrM,EACxD,OAAO4C,EAAwB4J,GAAOL,EAAMvJ,EAAsBhG,IAAOuP,CAC3E,ECbQ3O,GAKN,CAAEiM,OAAQ,UAAWG,MAAM,GAAQ,CACnCyjB,QALYzuB,KCAd,SAAWA,GAEWV,QAAQmvB,cCJb7vB,ICEb8vB,GAAO1uB,GAAwColB,IAD3CxmB,GASN,CAAEiM,OAAQ,QAASK,OAAO,EAAMG,QAPCrJ,GAEoB,QAKW,CAChEojB,IAAK,SAAaH,GAChB,OAAOyJ,GAAKpwB,KAAM2mB,EAAY1lB,UAAU0D,OAAS,EAAI1D,UAAU,QAAKgB,EACrE,ICXH,IAEA6kB,GAFmBplB,GAEW,SAASolB,ICHnCjiB,GAAgBvE,GAChBoE,GAAShD,GAET0d,GAAiBlJ,MAAMtV,UCHvBsQ,GDKa,SAAUxR,GACzB,IAAIyR,EAAMzR,EAAGonB,IACb,OAAOpnB,IAAO0f,IAAmBva,GAAcua,GAAgB1f,IAAOyR,IAAQiO,GAAe0H,IAAOpiB,GAASyM,CAC/G,OCNiBD,ICDb/J,GAAWzF,GACX2uB,GAAa3sB,GAFTpD,GASN,CAAEiM,OAAQ,SAAUG,MAAM,EAAMK,OANtB9G,GAEoB,WAAcoqB,GAAW,EAAG,KAIK,CAC/DphB,KAAM,SAAcvP,GAClB,OAAO2wB,GAAWlpB,GAASzH,GAC5B,ICXH,SAAWgC,GAEWW,OAAO4M,MCFzBsN,GAAIjc,GAGJgwB,GAAQC,KACRC,GAHc9uB,EAGc4uB,GAAM1vB,UAAU6vB,SAI/CC,GAAC,CAAEnkB,OAAQ,OAAQG,MAAM,GAAQ,CAChCikB,IAAK,WACH,OAAOH,GAAc,IAAIF,GAC1B,ICXH,SAAW5uB,GAEW6uB,KAAKI,KCHvBzwB,GAAQI,EAEZswB,GAAiB,SAAUpM,EAAariB,GACtC,IAAIuC,EAAS,GAAG8f,GAChB,QAAS9f,GAAUxE,IAAM,WAEvBwE,EAAO5D,KAAK,KAAMqB,GAAY,WAAc,OAAO,GAAM,EAC7D,GACA,ECRI8mB,GAAW3oB,GAAwCqP,QAOvDkhB,GAN0BnvB,GAEc,WAOpC,GAAGiO,QAH2B,SAAiBgX,GACjD,OAAOsC,GAASjpB,KAAM2mB,EAAY1lB,UAAU0D,OAAS,EAAI1D,UAAU,QAAKgB,EAE1E,ECVQ3B,GAMN,CAAEiM,OAAQ,QAASK,OAAO,EAAMG,OAAQ,GAAG4C,UAL/BjO,IAKsD,CAClEiO,QANYjO,KCAd,IAEAiO,GAFmBjO,GAEW,SAASiO,QCFnClM,GAAU/B,GACV2F,GAAS3D,GACTmB,GAAgBoB,GAChBvB,GCJSpE,GDMT8e,GAAiBlJ,MAAMtV,UAEvB6gB,GAAe,CACjBO,cAAc,EACdU,UAAU,GAGZ/S,GAAiB,SAAUjQ,GACzB,IAAIyR,EAAMzR,EAAGiQ,QACb,OAAOjQ,IAAO0f,IAAmBva,GAAcua,GAAgB1f,IAAOyR,IAAQiO,GAAezP,SACxFtI,GAAOoa,GAAche,GAAQ/D,IAAOgF,GAASyM,CACpD,OElBiB7Q,ICCbic,GAAIjc,GAEJ2jB,GAAUvgB,GAEVotB,GAHcpvB,EAGc,GAAGqvB,SAC/BxwB,GAAO,CAAC,EAAG,GAMdywB,GAAC,CAAEzkB,OAAQ,QAASK,OAAO,EAAMG,OAAQ/H,OAAOzE,MAAUyE,OAAOzE,GAAKwwB,YAAc,CACnFA,QAAS,WAGP,OADI9M,GAAQjkB,QAAOA,KAAK2E,OAAS3E,KAAK2E,QAC/BmsB,GAAc9wB,KACtB,ICfH,IAEA+wB,GAFmBrvB,GAEW,SAASqvB,QCHnClsB,GAAgBvE,GAChBoE,GAAShD,GAET0d,GAAiBlJ,MAAMtV,UCHvBsQ,GDKa,SAAUxR,GACzB,IAAIyR,EAAMzR,EAAGqxB,QACb,OAAOrxB,IAAO0f,IAAmBva,GAAcua,GAAgB1f,IAAOyR,IAAQiO,GAAe2R,QAAWrsB,GAASyM,CACnH,ECNA4f,GAAiB7f,QCHA5Q,ICCb6F,GAAc7F,GAEdyD,GAAaC,UAEjBitB,GAAiB,SAAUvnB,EAAGpD,GAC5B,WAAYoD,EAAEpD,GAAI,MAAM,IAAIvC,GAAW,0BAA4BoC,GAAYG,GAAK,OAASH,GAAYuD,GAC3G,ECNI6S,GAAIjc,GACJ6G,GAAWzF,GACXkM,GAAkBlK,GAClB8J,GAAsBvH,GACtB+H,GAAoBpG,GACpBumB,GAAiBrmB,GACjBoc,GAA2B7a,GAC3Bib,GAAqB/a,GACrByW,GAAiB1U,GACjB2lB,GAAwB1lB,GAGxBijB,GAF+B1R,GAEoB,UAEnDpP,GAAM/N,KAAK+N,IACXC,GAAMhO,KAAKgO,IAKf4O,GAAE,CAAEhQ,OAAQ,QAASK,OAAO,EAAMG,QAASyhB,IAAuB,CAChExY,OAAQ,SAAgBsP,EAAO4L,GAC7B,IAIIC,EAAaC,EAAmB5hB,EAAGyV,EAAGtE,EAAM0Q,EAJ5C3nB,EAAIvC,GAASnH,MACbmW,EAAMnI,GAAkBtE,GACxB4nB,EAAc1jB,GAAgB0X,EAAOnP,GACrCpG,EAAkB9O,UAAU0D,OAahC,IAXwB,IAApBoL,EACFohB,EAAcC,EAAoB,EACL,IAApBrhB,GACTohB,EAAc,EACdC,EAAoBjb,EAAMmb,IAE1BH,EAAcphB,EAAkB,EAChCqhB,EAAoBzjB,GAAID,GAAIF,GAAoB0jB,GAAc,GAAI/a,EAAMmb,IAE1EpN,GAAyB/N,EAAMgb,EAAcC,GAC7C5hB,EAAI8U,GAAmB5a,EAAG0nB,GACrBnM,EAAI,EAAGA,EAAImM,EAAmBnM,KACjCtE,EAAO2Q,EAAcrM,KACTvb,GAAGsW,GAAexQ,EAAGyV,EAAGvb,EAAEiX,IAGxC,GADAnR,EAAE7K,OAASysB,EACPD,EAAcC,EAAmB,CACnC,IAAKnM,EAAIqM,EAAarM,EAAI9O,EAAMib,EAAmBnM,IAEjDoM,EAAKpM,EAAIkM,GADTxQ,EAAOsE,EAAImM,KAEC1nB,EAAGA,EAAE2nB,GAAM3nB,EAAEiX,GACpBsQ,GAAsBvnB,EAAG2nB,GAEhC,IAAKpM,EAAI9O,EAAK8O,EAAI9O,EAAMib,EAAoBD,EAAalM,IAAKgM,GAAsBvnB,EAAGub,EAAI,EACjG,MAAW,GAAIkM,EAAcC,EACvB,IAAKnM,EAAI9O,EAAMib,EAAmBnM,EAAIqM,EAAarM,IAEjDoM,EAAKpM,EAAIkM,EAAc,GADvBxQ,EAAOsE,EAAImM,EAAoB,KAEnB1nB,EAAGA,EAAE2nB,GAAM3nB,EAAEiX,GACpBsQ,GAAsBvnB,EAAG2nB,GAGlC,IAAKpM,EAAI,EAAGA,EAAIkM,EAAalM,IAC3Bvb,EAAEub,EAAIqM,GAAerwB,UAAUgkB,EAAI,GAGrC,OADAkJ,GAAezkB,EAAGyM,EAAMib,EAAoBD,GACrC3hB,CACR,IC/DH,IAEAwG,GAFmBtU,GAEW,SAASsU,OCHnCnR,GAAgBvE,GAChBoE,GAAShD,GAET0d,GAAiBlJ,MAAMtV,UCHvBsQ,GDKa,SAAUxR,GACzB,IAAIyR,EAAMzR,EAAGsW,OACb,OAAOtW,IAAO0f,IAAmBva,GAAcua,GAAgB1f,IAAOyR,IAAQiO,GAAepJ,OAAUtR,GAASyM,CAClH,OCNiBD,ICDbqgB,GAAY7vB,GAAuC8M,SAD/ClO,GAaN,CAAEiM,OAAQ,QAASK,OAAO,EAAMG,OAXtBrJ,GAIiB,WAE3B,OAAQwS,MAAM,GAAG1H,UACnB,KAI8D,CAC5DA,SAAU,SAAkBH,GAC1B,OAAOkjB,GAAUvxB,KAAMqO,EAAIpN,UAAU0D,OAAS,EAAI1D,UAAU,QAAKgB,EAClE,ICfH,IAEAuM,GAFmB9M,GAEW,SAAS8M,SCHnCpK,GAAW9D,GACXmD,GAAU/B,EAGV8vB,GAFkB9tB,GAEM,SCJxB+tB,GDQa,SAAU/xB,GACzB,IAAI+xB,EACJ,OAAOrtB,GAAS1E,UAAmCuC,KAA1BwvB,EAAW/xB,EAAG8xB,OAA0BC,EAA2B,WAAhBhuB,GAAQ/D,GACtF,ECTIqE,GAAaC,UCAbwtB,GAFkBlxB,GAEM,SCFxBic,GAAIjc,GAEJoxB,GFEa,SAAUhyB,GACzB,GAAI+xB,GAAS/xB,GACX,MAAM,IAAIqE,GAAW,iDACrB,OAAOrE,CACX,EELIuE,GAAyBgC,EACzB3E,GAAWsG,GACX+pB,GDDa,SAAUnN,GACzB,IAAIoN,EAAS,IACb,IACE,MAAMpN,GAAaoN,EACpB,CAAC,MAAOC,GACP,IAEE,OADAD,EAAOJ,KAAS,EACT,MAAMhN,GAAaoN,EAChC,CAAM,MAAOE,GAAuB,CACjC,CAAC,OAAO,CACX,ECPIC,GANcrwB,EAMc,GAAG+M,SAInC8N,GAAE,CAAEhQ,OAAQ,SAAUK,OAAO,EAAMG,QAAS4kB,GAAqB,aAAe,CAC9EnjB,SAAU,SAAkBwjB,GAC1B,SAAUD,GACRzwB,GAAS2C,GAAuBjE,OAChCsB,GAASowB,GAAWM,IACpB/wB,UAAU0D,OAAS,EAAI1D,UAAU,QAAKgB,EAEzC,ICjBH,IAEAuM,GAFmB9M,GAEW,UAAU8M,SCHpC3J,GAAgBvE,GAChB2xB,GAAcvwB,GACdwwB,GAAexuB,GAEf0b,GAAiBlJ,MAAMtV,UACvBuxB,GAAkBntB,OAAOpE,UCLzBsQ,GDOa,SAAUxR,GACzB,IAAIyR,EAAMzR,EAAG8O,SACb,OAAI9O,IAAO0f,IAAmBva,GAAcua,GAAgB1f,IAAOyR,IAAQiO,GAAe5Q,SAAkByjB,GAC3F,iBAANvyB,GAAkBA,IAAOyyB,IAAoBttB,GAAcstB,GAAiBzyB,IAAOyR,IAAQghB,GAAgB3jB,SAC7G0jB,GACA/gB,CACX,OCXiBD,ICAb/J,GAAWzD,GACX0uB,GAAuBnsB,GACvBgV,GAA2BrT,GAJvBtH,GAUN,CAAEiM,OAAQ,SAAUG,MAAM,EAAMK,OATtBrL,GAKoB,WAAc0wB,GAAqB,EAAG,IAIPvsB,MAAOoV,IAA4B,CAChGD,eAAgB,SAAwBtb,GACtC,OAAO0yB,GAAqBjrB,GAASzH,GACtC,ICZH,ICCAsb,GDDWtZ,GAEWW,OAAO2Y,oBEJZ1a,ICEb+xB,GAAU3wB,GAAwCqlB,OAD9CzmB,GASN,CAAEiM,OAAQ,QAASK,OAAO,EAAMG,QAPCrJ,GAEoB,WAKW,CAChEqjB,OAAQ,SAAgBJ,GACtB,OAAO0L,GAAQryB,KAAM2mB,EAAY1lB,UAAU0D,OAAS,EAAI1D,UAAU,QAAKgB,EACxE,ICXH,IAEA8kB,GAFmBrlB,GAEW,SAASqlB,OCHnCliB,GAAgBvE,GAChBoE,GAAShD,GAET0d,GAAiBlJ,MAAMtV,UCHvBsQ,GDKa,SAAUxR,GACzB,IAAIyR,EAAMzR,EAAGqnB,OACb,OAAOrnB,IAAO0f,IAAmBva,GAAcua,GAAgB1f,IAAOyR,IAAQiO,GAAe2H,OAAUriB,GAASyM,CAClH,OCNiBD,ICFb/H,GAAc7I,EACdJ,GAAQwB,EACRL,GAAcqC,EACdyX,GAAuBlV,GACvB+I,GAAapH,GACbzD,GAAkB2D,EAGlBpF,GAAuBrB,GAFCgI,EAAsDvG,GAG9EgE,GAAOzF,GAAY,GAAGyF,MAItBwrB,GAASnpB,IAAejJ,IAAM,WAEhC,IAAIwJ,EAAIrH,OAAOwY,OAAO,MAEtB,OADAnR,EAAE,GAAK,GACChH,GAAqBgH,EAAG,EAClC,IAGIwE,GAAe,SAAUqkB,GAC3B,OAAO,SAAU7yB,GAQf,IAPA,IAMI+G,EANAiD,EAAIvF,GAAgBzE,GACpBuP,EAAOD,GAAWtF,GAClB8oB,EAAgBF,IAAsC,OAA5BnX,GAAqBzR,GAC/C/E,EAASsK,EAAKtK,OACdkK,EAAI,EACJlG,EAAS,GAENhE,EAASkK,GACdpI,EAAMwI,EAAKJ,KACN1F,MAAgBqpB,EAAgB/rB,KAAOiD,EAAIhH,GAAqBgH,EAAGjD,KACtEK,GAAK6B,EAAQ4pB,EAAa,CAAC9rB,EAAKiD,EAAEjD,IAAQiD,EAAEjD,IAGhD,OAAOkC,CACX,CACA,EAEA8pB,GAAiB,CAGfpU,QAASnQ,IAAa,GAGtBoQ,OAAQpQ,IAAa,IC7CnBwkB,GAAUhxB,GAAwC4c,OAD9Che,GAKN,CAAEiM,OAAQ,SAAUG,MAAM,GAAQ,CAClC4R,OAAQ,SAAgB5U,GACtB,OAAOgpB,GAAQhpB,EAChB,ICPH,SAAWhI,GAEWW,OAAOic,QCF7BqU,GAAiB,gDCAb1uB,GAAyBvC,EACzBJ,GAAWoC,GACXivB,GAAc1sB,GAEdmE,GALc9J,EAKQ,GAAG8J,SACzBwoB,GAAQC,OAAO,KAAOF,GAAc,MACpCG,GAAQD,OAAO,QAAUF,GAAc,MAAQA,GAAc,OAG7DzkB,GAAe,SAAUmK,GAC3B,OAAO,SAAUjK,GACf,IAAIjE,EAAS7I,GAAS2C,GAAuBmK,IAG7C,OAFW,EAAPiK,IAAUlO,EAASC,GAAQD,EAAQyoB,GAAO,KACnC,EAAPva,IAAUlO,EAASC,GAAQD,EAAQ2oB,GAAO,OACvC3oB,CACX,CACA,EAEA4oB,GAAiB,CAGfzN,MAAOpX,GAAa,GAGpBqX,IAAKrX,GAAa,GAGlB8kB,KAAM9kB,GAAa,IC5BjBtO,GAASU,EACTJ,GAAQwB,EACRL,GAAcqC,EACdpC,GAAW2E,GACX+sB,GAAOprB,GAAoCorB,KAC3CL,GAAc7qB,GAEdmrB,GAAYrzB,GAAOszB,SACnBttB,GAAShG,GAAOgG,OAChByV,GAAWzV,IAAUA,GAAOG,SAC5BotB,GAAM,YACNhzB,GAAOkB,GAAY8xB,GAAIhzB,MAO3BizB,GAN+C,IAAlCH,GAAUN,GAAc,OAAmD,KAApCM,GAAUN,GAAc,SAEtEtX,KAAanb,IAAM,WAAc+yB,GAAU5wB,OAAOgZ,IAAa,IAI3C,SAAkBlR,EAAQkpB,GAClD,IAAIrjB,EAAIgjB,GAAK1xB,GAAS6I,IACtB,OAAO8oB,GAAUjjB,EAAIqjB,IAAU,IAAOlzB,GAAKgzB,GAAKnjB,GAAK,GAAK,IAC5D,EAAIijB,GCrBI3yB,GAKN,CAAEV,QAAQ,EAAMmN,OAAQmmB,WAJVxxB,IAIoC,CAClDwxB,SALcxxB,KCAhB,SAAWA,GAEWwxB,UCFlB3W,GAAIjc,GAEJgzB,GAAW5vB,GAAuC+K,QAClDmiB,GAAsB3qB,GAEtBstB,GAJc7xB,EAIc,GAAG+M,SAE/B+kB,KAAkBD,IAAiB,EAAIA,GAAc,CAAC,GAAI,GAAI,GAAK,EAKvEhX,GAAE,CAAEhQ,OAAQ,QAASK,OAAO,EAAMG,OAJrBymB,KAAkB5C,GAAoB,YAIC,CAClDniB,QAAS,SAAiBglB,GACxB,IAAInlB,EAAYrN,UAAU0D,OAAS,EAAI1D,UAAU,QAAKgB,EACtD,OAAOuxB,GAEHD,GAAcvzB,KAAMyzB,EAAenlB,IAAc,EACjDglB,GAAStzB,KAAMyzB,EAAenlB,EACnC,ICnBH,IAEAG,GAFmB/M,GAEW,SAAS+M,QCHnC5J,GAAgBvE,GAChBoE,GAAShD,GAET0d,GAAiBlJ,MAAMtV,UCHvBsQ,GDKa,SAAUxR,GACzB,IAAIyR,EAAMzR,EAAG+O,QACb,OAAO/O,IAAO0f,IAAmBva,GAAcua,GAAgB1f,IAAOyR,IAAQiO,GAAe3Q,QAAW/J,GAASyM,CACnH,OCNiBD,ICDbwiB,GAAWhyB,GAAwC2c,QAD/C/d,GAKN,CAAEiM,OAAQ,SAAUG,MAAM,GAAQ,CAClC2R,QAAS,SAAiB3U,GACxB,OAAOgqB,GAAShqB,EACjB,ICPH,SAAWhI,GAEWW,OAAOgc,SCFrB/d,GAMN,CAAEiM,OAAQ,SAAUG,MAAM,EAAM7G,MALhBnE,GAKsC,CACtDmZ,OALWnX,KCFb,IAEIrB,GAFOX,GAEOW,OCDlBwY,GDGiB,SAAgBvU,EAAGqtB,GAClC,OAAOtxB,GAAOwY,OAAOvU,EAAGqtB,EAC1B,OERiBrzB,ICEb+D,GAAO3C,GACPb,GAAQ6C,EAGPW,GAAKkoB,OAAMloB,GAAKkoB,KAAO,CAAEF,UAAWE,KAAKF,gBCL1Cnb,GDQa,SAAmBxR,EAAI0rB,EAAUkB,GAChD,OAAOzrB,GAAMwD,GAAKkoB,KAAKF,UAAW,KAAMprB,UAC1C,OCRiBiQ,ICDjB0iB,GAA+B,mBAAPC,KAAqBA,KAA6B,iBAAfA,IAAI1wB,QCD3DY,GAAaC,UAEjB8vB,GAAiB,SAAUC,EAAQC,GACjC,GAAID,EAASC,EAAU,MAAM,IAAIjwB,GAAW,wBAC5C,OAAOgwB,CACT,ECLIn0B,GAASU,EACTO,GAAQa,EACRQ,GAAawB,EACbuwB,GAAgBhuB,GAChBiuB,GAAatsB,GACbuI,GAAarI,GACbgsB,GAA0BzqB,GAE1BpJ,GAAWL,GAAOK,SAElBk0B,GAAO,WAAW5zB,KAAK2zB,KAAeD,IAAiB,WACzD,IAAI9wB,EAAUvD,GAAOi0B,IAAI1wB,QAAQS,MAAM,KACvC,OAAOT,EAAQwB,OAAS,GAAoB,MAAfxB,EAAQ,KAAeA,EAAQ,GAAK,GAAoB,MAAfA,EAAQ,IAA6B,MAAfA,EAAQ,GACrG,CAH0D,GAQ3DixB,GAAiB,SAAUC,EAAWC,GACpC,IAAIC,EAAkBD,EAAa,EAAI,EACvC,OAAOH,GAAO,SAAUK,EAASC,GAC/B,IAAIC,EAAYZ,GAAwB7yB,UAAU0D,OAAQ,GAAK4vB,EAC3DnzB,EAAKc,GAAWsyB,GAAWA,EAAUv0B,GAASu0B,GAC9CG,EAASD,EAAYvkB,GAAWlP,UAAWszB,GAAmB,GAC9DK,EAAWF,EAAY,WACzB7zB,GAAMO,EAAIpB,KAAM20B,EACjB,EAAGvzB,EACJ,OAAOkzB,EAAaD,EAAUO,EAAUH,GAAWJ,EAAUO,EAC9D,EAAGP,CACN,EC7BI9X,GAAIjc,GACJV,GAAS8B,EAGTmzB,GAFgBnxB,GAEY9D,GAAOi1B,aAAa,GAIpDtY,GAAE,CAAE3c,QAAQ,EAAMY,MAAM,EAAMuM,OAAQnN,GAAOi1B,cAAgBA,IAAe,CAC1EA,YAAaA,KCTf,IAAItY,GAAIjc,GACJV,GAAS8B,EAGTozB,GAFgBpxB,GAEW9D,GAAOk1B,YAAY,GAIlDvY,GAAE,CAAE3c,QAAQ,EAAMY,MAAM,EAAMuM,OAAQnN,GAAOk1B,aAAeA,IAAc,CACxEA,WAAYA,KCRd,SAAWpzB,GAEWozB,YCHlB3tB,GAAW7G,GACXsN,GAAkBlM,GAClBsM,GAAoBtK,GCDpBqxB,GDKa,SAAczxB,GAO7B,IANA,IAAIoG,EAAIvC,GAASnH,MACb2E,EAASqJ,GAAkBtE,GAC3BqG,EAAkB9O,UAAU0D,OAC5BkJ,EAAQD,GAAgBmC,EAAkB,EAAI9O,UAAU,QAAKgB,EAAW0C,GACxE4gB,EAAMxV,EAAkB,EAAI9O,UAAU,QAAKgB,EAC3C+yB,OAAiB/yB,IAARsjB,EAAoB5gB,EAASiJ,GAAgB2X,EAAK5gB,GACxDqwB,EAASnnB,GAAOnE,EAAEmE,KAAWvK,EACpC,OAAOoG,CACT,ECfQpJ,GAMN,CAAEiM,OAAQ,QAASK,OAAO,GAAQ,CAClCmoB,KAAMA,KCNR,IC4CI1lB,GD1CJ0lB,GAFmBrzB,GAEW,SAASqzB,KEHnClwB,GAAgBvE,GAChBoE,GAAShD,GAET0d,GAAiBlJ,MAAMtV,UCHvBsQ,GDKa,SAAUxR,GACzB,IAAIyR,EAAMzR,EAAGq1B,KACb,OAAOr1B,IAAO0f,IAAmBva,GAAcua,GAAgB1f,IAAOyR,IAAQiO,GAAe2V,KAAQrwB,GAASyM,CAChH,OCNiBD,IFGjB,SAAS+jB,KAeP,OAdAA,GAAW5yB,OAAOgN,QAAU,SAAU9C,GACpC,IAAK,IAAIsC,EAAI,EAAGA,EAAI5N,UAAU0D,OAAQkK,IAAK,CACzC,IAAI3H,EAASjG,UAAU4N,GAEvB,IAAK,IAAIpI,KAAOS,EACV7E,OAAOzB,UAAUH,eAAeK,KAAKoG,EAAQT,KAC/C8F,EAAO9F,GAAOS,EAAOT,GAG1B,CAED,OAAO8F,CACX,EAES0oB,GAASp0B,MAAMb,KAAMiB,UAC9B,CAEA,SAASi0B,GAAeC,EAAUC,GAChCD,EAASv0B,UAAYyB,OAAOwY,OAAOua,EAAWx0B,WAC9Cu0B,EAASv0B,UAAUma,YAAcoa,EACjCA,EAAS7Y,UAAY8Y,CACvB,CAEA,SAASC,GAAuBt1B,GAC9B,QAAa,IAATA,EACF,MAAM,IAAIu1B,eAAe,6DAG3B,OAAOv1B,CACT,CAaEsP,GAD2B,mBAAlBhN,OAAOgN,OACP,SAAgB9C,GACvB,GAAIA,QACF,MAAM,IAAIvI,UAAU,8CAKtB,IAFA,IAAIuxB,EAASlzB,OAAOkK,GAEXsB,EAAQ,EAAGA,EAAQ5M,UAAU0D,OAAQkJ,IAAS,CACrD,IAAI3G,EAASjG,UAAU4M,GAEvB,GAAI3G,QACF,IAAK,IAAIsuB,KAAWtuB,EACdA,EAAOzG,eAAe+0B,KACxBD,EAAOC,GAAWtuB,EAAOsuB,GAIhC,CAED,OAAOD,CACX,EAEWlzB,OAAOgN,OAGlB,IAwCIomB,GAxCAC,GAAWrmB,GAEXsmB,GAAkB,CAAC,GAAI,SAAU,MAAO,KAAM,KAAM,KACpDC,GAAmC,oBAAb/zB,SAA2B,CACnDsY,MAAO,CAAE,GACPtY,SAASkH,cAAc,OAEvB8sB,GAAQl2B,KAAKk2B,MACbC,GAAMn2B,KAAKm2B,IACXnF,GAAMJ,KAAKI,IAUf,SAASoF,GAAS9nB,EAAK+nB,GAMrB,IALA,IAAIC,EACAC,EACAC,EAAYH,EAAS,GAAGI,cAAgBJ,EAASx0B,MAAM,GACvDqN,EAAI,EAEDA,EAAI8mB,GAAgBhxB,QAAQ,CAIjC,IAFAuxB,GADAD,EAASN,GAAgB9mB,IACTonB,EAASE,EAAYH,KAEzB/nB,EACV,OAAOioB,EAGTrnB,GACD,CAGH,CAOE4mB,GAFoB,oBAAX31B,OAEH,CAAA,EAEAA,OAGR,IAAIu2B,GAAwBN,GAASH,GAAazb,MAAO,eACrDmc,QAAgDr0B,IAA1Bo0B,GAgB1B,IAAIE,GAAuB,UACvBC,GAAoB,OACpBC,GAA4B,eAE5BC,GAAoB,OACpBC,GAAqB,QACrBC,GAAqB,QACrBC,GAtBJ,WACE,IAAKP,GACH,OAAO,EAGT,IAAIQ,EAAW,CAAA,EACXC,EAActB,GAAIuB,KAAOvB,GAAIuB,IAAIC,SAMrC,MALA,CAAC,OAAQ,eAAgB,QAAS,QAAS,cAAe,QAAQtnB,SAAQ,SAAUpH,GAGlF,OAAOuuB,EAASvuB,IAAOwuB,GAActB,GAAIuB,IAAIC,SAAS,eAAgB1uB,EAC1E,IACSuuB,CACT,CASuBI,GAGnBC,GAAgB,iBAAkB1B,GAClC2B,QAA2Dn1B,IAAlC8zB,GAASN,GAAK,gBACvC4B,GAAqBF,IAHN,wCAGoC52B,KAAKwE,UAAUE,WAClEqyB,GAAmB,QAEnBC,GAAmB,QAEnBC,GAAmB,GACnBC,GAAc,EAEdC,GAAY,EACZC,GAAe,EACfC,GAAiB,EACjBC,GAAiB,EACjBC,GAAkB,EAClBC,GAAe,EACfC,GAAiB,GACjBC,GAAuBJ,GAAiBC,GACxCI,GAAqBH,GAAeC,GACpCG,GAAgBF,GAAuBC,GACvCE,GAAW,CAAC,IAAK,KACjBC,GAAkB,CAAC,UAAW,WASlC,SAASC,GAAKrqB,EAAKlI,EAAUwyB,GAC3B,IAAI1pB,EAEJ,GAAKZ,EAIL,GAAIA,EAAI0B,QACN1B,EAAI0B,QAAQ5J,EAAUwyB,QACjB,QAAmBt2B,IAAfgM,EAAItJ,OAGb,IAFAkK,EAAI,EAEGA,EAAIZ,EAAItJ,QACboB,EAASjF,KAAKy3B,EAAStqB,EAAIY,GAAIA,EAAGZ,GAClCY,SAGF,IAAKA,KAAKZ,EACRA,EAAIxN,eAAeoO,IAAM9I,EAASjF,KAAKy3B,EAAStqB,EAAIY,GAAIA,EAAGZ,EAGjE,CAWA,SAASuqB,GAASjwB,EAAKoI,GACrB,MArIkB,mBAqIPpI,EACFA,EAAI1H,MAAM8P,GAAOA,EAAK,SAAkB1O,EAAW0O,GAGrDpI,CACT,CASA,SAASkwB,GAAMC,EAAKxR,GAClB,OAAOwR,EAAIjqB,QAAQyY,IAAS,CAC9B,CA+CA,IAAIyR,GAEJ,WACE,SAASA,EAAYC,EAASt1B,GAC5BtD,KAAK44B,QAAUA,EACf54B,KAAKsW,IAAIhT,EACV,CAQD,IAAIu1B,EAASF,EAAY/3B,UA4FzB,OA1FAi4B,EAAOviB,IAAM,SAAahT,GAEpBA,IAAUizB,KACZjzB,EAAQtD,KAAK84B,WAGXxC,IAAuBt2B,KAAK44B,QAAQtN,QAAQnR,OAAS0c,GAAiBvzB,KACxEtD,KAAK44B,QAAQtN,QAAQnR,MAAMkc,IAAyB/yB,GAGtDtD,KAAK+4B,QAAUz1B,EAAM+G,cAAc2oB,MACvC,EAOE6F,EAAOG,OAAS,WACdh5B,KAAKsW,IAAItW,KAAK44B,QAAQ9sB,QAAQmtB,YAClC,EAQEJ,EAAOC,QAAU,WACf,IAAIC,EAAU,GAMd,OALAT,GAAKt4B,KAAK44B,QAAQM,aAAa,SAAUC,GACnCX,GAASW,EAAWrtB,QAAQstB,OAAQ,CAACD,MACvCJ,EAAUA,EAAQzpB,OAAO6pB,EAAWE,kBAE5C,IAxFA,SAA2BN,GAEzB,GAAIN,GAAMM,EAASrC,IACjB,OAAOA,GAGT,IAAI4C,EAAUb,GAAMM,EAASpC,IACzB4C,EAAUd,GAAMM,EAASnC,IAK7B,OAAI0C,GAAWC,EACN7C,GAIL4C,GAAWC,EACND,EAAU3C,GAAqBC,GAIpC6B,GAAMM,EAAStC,IACVA,GAGFD,EACT,CA8DWgD,CAAkBT,EAAQlpB,KAAK,KAC1C,EAQEgpB,EAAOY,gBAAkB,SAAyBpxB,GAChD,IAAIqxB,EAAWrxB,EAAMqxB,SACjBC,EAAYtxB,EAAMuxB,gBAEtB,GAAI55B,KAAK44B,QAAQiB,QAAQC,UACvBJ,EAASK,qBADX,CAKA,IAAIhB,EAAU/4B,KAAK+4B,QACfiB,EAAUvB,GAAMM,EAASrC,MAAuBG,GAAiBH,IACjE6C,EAAUd,GAAMM,EAASnC,MAAwBC,GAAiBD,IAClE0C,EAAUb,GAAMM,EAASpC,MAAwBE,GAAiBF,IAEtE,GAAIqD,EAAS,CAEX,IAAIC,EAAyC,IAA1B5xB,EAAM6xB,SAASv1B,OAC9Bw1B,EAAgB9xB,EAAM+xB,SAAW,EACjCC,EAAiBhyB,EAAMiyB,UAAY,IAEvC,GAAIL,GAAgBE,GAAiBE,EACnC,MAEH,CAED,IAAIf,IAAWC,EAKf,OAAIS,GAAWT,GAAWI,EAAY1B,IAAwBqB,GAAWK,EAAYzB,GAC5El4B,KAAKu6B,WAAWb,QADzB,CAvBC,CA0BL,EAQEb,EAAO0B,WAAa,SAAoBb,GACtC15B,KAAK44B,QAAQiB,QAAQC,WAAY,EACjCJ,EAASK,gBACb,EAESpB,CACT,CAzGA,GAmHA,SAAS6B,GAAUC,EAAMvpB,GACvB,KAAOupB,GAAM,CACX,GAAIA,IAASvpB,EACX,OAAO,EAGTupB,EAAOA,EAAKC,UACb,CAED,OAAO,CACT,CASA,SAASC,GAAUT,GACjB,IAAIU,EAAiBV,EAASv1B,OAE9B,GAAuB,IAAnBi2B,EACF,MAAO,CACLttB,EAAGuoB,GAAMqE,EAAS,GAAGW,SACrBvpB,EAAGukB,GAAMqE,EAAS,GAAGY,UAQzB,IAJA,IAAIxtB,EAAI,EACJgE,EAAI,EACJzC,EAAI,EAEDA,EAAI+rB,GACTttB,GAAK4sB,EAASrrB,GAAGgsB,QACjBvpB,GAAK4oB,EAASrrB,GAAGisB,QACjBjsB,IAGF,MAAO,CACLvB,EAAGuoB,GAAMvoB,EAAIstB,GACbtpB,EAAGukB,GAAMvkB,EAAIspB,GAEjB,CASA,SAASG,GAAqB1yB,GAM5B,IAHA,IAAI6xB,EAAW,GACXrrB,EAAI,EAEDA,EAAIxG,EAAM6xB,SAASv1B,QACxBu1B,EAASrrB,GAAK,CACZgsB,QAAShF,GAAMxtB,EAAM6xB,SAASrrB,GAAGgsB,SACjCC,QAASjF,GAAMxtB,EAAM6xB,SAASrrB,GAAGisB,UAEnCjsB,IAGF,MAAO,CACLmsB,UAAWrK,KACXuJ,SAAUA,EACVe,OAAQN,GAAUT,GAClBgB,OAAQ7yB,EAAM6yB,OACdC,OAAQ9yB,EAAM8yB,OAElB,CAWA,SAASC,GAAYC,EAAIC,EAAIziB,GACtBA,IACHA,EAAQuf,IAGV,IAAI9qB,EAAIguB,EAAGziB,EAAM,IAAMwiB,EAAGxiB,EAAM,IAC5BvH,EAAIgqB,EAAGziB,EAAM,IAAMwiB,EAAGxiB,EAAM,IAChC,OAAOlZ,KAAK6T,KAAKlG,EAAIA,EAAIgE,EAAIA,EAC/B,CAWA,SAASiqB,GAASF,EAAIC,EAAIziB,GACnBA,IACHA,EAAQuf,IAGV,IAAI9qB,EAAIguB,EAAGziB,EAAM,IAAMwiB,EAAGxiB,EAAM,IAC5BvH,EAAIgqB,EAAGziB,EAAM,IAAMwiB,EAAGxiB,EAAM,IAChC,OAA0B,IAAnBlZ,KAAK67B,MAAMlqB,EAAGhE,GAAW3N,KAAK+R,EACvC,CAUA,SAAS+pB,GAAanuB,EAAGgE,GACvB,OAAIhE,IAAMgE,EACDsmB,GAGL9B,GAAIxoB,IAAMwoB,GAAIxkB,GACThE,EAAI,EAAIuqB,GAAiBC,GAG3BxmB,EAAI,EAAIymB,GAAeC,EAChC,CAiCA,SAAS0D,GAAYpB,EAAWhtB,EAAGgE,GACjC,MAAO,CACLhE,EAAGA,EAAIgtB,GAAa,EACpBhpB,EAAGA,EAAIgpB,GAAa,EAExB,CAwEA,SAASqB,GAAiB/C,EAASvwB,GACjC,IAAIwxB,EAAUjB,EAAQiB,QAClBK,EAAW7xB,EAAM6xB,SACjBU,EAAiBV,EAASv1B,OAEzBk1B,EAAQ+B,aACX/B,EAAQ+B,WAAab,GAAqB1yB,IAIxCuyB,EAAiB,IAAMf,EAAQgC,cACjChC,EAAQgC,cAAgBd,GAAqB1yB,GACjB,IAAnBuyB,IACTf,EAAQgC,eAAgB,GAG1B,IAAID,EAAa/B,EAAQ+B,WACrBC,EAAgBhC,EAAQgC,cACxBC,EAAeD,EAAgBA,EAAcZ,OAASW,EAAWX,OACjEA,EAAS5yB,EAAM4yB,OAASN,GAAUT,GACtC7xB,EAAM2yB,UAAYrK,KAClBtoB,EAAMiyB,UAAYjyB,EAAM2yB,UAAYY,EAAWZ,UAC/C3yB,EAAM0zB,MAAQR,GAASO,EAAcb,GACrC5yB,EAAM+xB,SAAWgB,GAAYU,EAAcb,GAnI7C,SAAwBpB,EAASxxB,GAC/B,IAAI4yB,EAAS5yB,EAAM4yB,OAGf9O,EAAS0N,EAAQmC,aAAe,GAChCC,EAAYpC,EAAQoC,WAAa,GACjCC,EAAYrC,EAAQqC,WAAa,GAEjC7zB,EAAM8zB,YAAc1E,IAAeyE,EAAUC,YAAczE,KAC7DuE,EAAYpC,EAAQoC,UAAY,CAC9B3uB,EAAG4uB,EAAUhB,QAAU,EACvB5pB,EAAG4qB,EAAUf,QAAU,GAEzBhP,EAAS0N,EAAQmC,YAAc,CAC7B1uB,EAAG2tB,EAAO3tB,EACVgE,EAAG2pB,EAAO3pB,IAIdjJ,EAAM6yB,OAASe,EAAU3uB,GAAK2tB,EAAO3tB,EAAI6e,EAAO7e,GAChDjF,EAAM8yB,OAASc,EAAU3qB,GAAK2pB,EAAO3pB,EAAI6a,EAAO7a,EAClD,CA+GE8qB,CAAevC,EAASxxB,GACxBA,EAAMuxB,gBAAkB6B,GAAapzB,EAAM6yB,OAAQ7yB,EAAM8yB,QACzD,IAvFgB7V,EAAOC,EAuFnB8W,EAAkBX,GAAYrzB,EAAMiyB,UAAWjyB,EAAM6yB,OAAQ7yB,EAAM8yB,QACvE9yB,EAAMi0B,iBAAmBD,EAAgB/uB,EACzCjF,EAAMk0B,iBAAmBF,EAAgB/qB,EACzCjJ,EAAMg0B,gBAAkBvG,GAAIuG,EAAgB/uB,GAAKwoB,GAAIuG,EAAgB/qB,GAAK+qB,EAAgB/uB,EAAI+uB,EAAgB/qB,EAC9GjJ,EAAMm0B,MAAQX,GA3FEvW,EA2FuBuW,EAAc3B,SA1F9CkB,IADgB7V,EA2FwC2U,GA1FxC,GAAI3U,EAAI,GAAI8S,IAAmB+C,GAAY9V,EAAM,GAAIA,EAAM,GAAI+S,KA0FX,EAC3EhwB,EAAMo0B,SAAWZ,EAhFnB,SAAqBvW,EAAOC,GAC1B,OAAOgW,GAAShW,EAAI,GAAIA,EAAI,GAAI8S,IAAmBkD,GAASjW,EAAM,GAAIA,EAAM,GAAI+S,GAClF,CA8EmCqE,CAAYb,EAAc3B,SAAUA,GAAY,EACjF7xB,EAAMs0B,YAAe9C,EAAQqC,UAAoC7zB,EAAM6xB,SAASv1B,OAASk1B,EAAQqC,UAAUS,YAAct0B,EAAM6xB,SAASv1B,OAASk1B,EAAQqC,UAAUS,YAA1Ht0B,EAAM6xB,SAASv1B,OAtE1D,SAAkCk1B,EAASxxB,GACzC,IAEIu0B,EACAC,EACAC,EACAnD,EALAoD,EAAOlD,EAAQmD,cAAgB30B,EAC/BiyB,EAAYjyB,EAAM2yB,UAAY+B,EAAK/B,UAMvC,GAAI3yB,EAAM8zB,YAAcxE,KAAiB2C,EAAY9C,SAAsCv1B,IAAlB86B,EAAKH,UAAyB,CACrG,IAAI1B,EAAS7yB,EAAM6yB,OAAS6B,EAAK7B,OAC7BC,EAAS9yB,EAAM8yB,OAAS4B,EAAK5B,OAC7B8B,EAAIvB,GAAYpB,EAAWY,EAAQC,GACvC0B,EAAYI,EAAE3vB,EACdwvB,EAAYG,EAAE3rB,EACdsrB,EAAW9G,GAAImH,EAAE3vB,GAAKwoB,GAAImH,EAAE3rB,GAAK2rB,EAAE3vB,EAAI2vB,EAAE3rB,EACzCqoB,EAAY8B,GAAaP,EAAQC,GACjCtB,EAAQmD,aAAe30B,CAC3B,MAEIu0B,EAAWG,EAAKH,SAChBC,EAAYE,EAAKF,UACjBC,EAAYC,EAAKD,UACjBnD,EAAYoD,EAAKpD,UAGnBtxB,EAAMu0B,SAAWA,EACjBv0B,EAAMw0B,UAAYA,EAClBx0B,EAAMy0B,UAAYA,EAClBz0B,EAAMsxB,UAAYA,CACpB,CA0CEuD,CAAyBrD,EAASxxB,GAElC,IAEI80B,EAFA5wB,EAASqsB,EAAQtN,QACjBoO,EAAWrxB,EAAMqxB,SAWjBc,GAPF2C,EADEzD,EAAS0D,aACM1D,EAAS0D,eAAe,GAChC1D,EAASr1B,KACDq1B,EAASr1B,KAAK,GAEdq1B,EAASntB,OAGEA,KAC5BA,EAAS4wB,GAGX90B,EAAMkE,OAASA,CACjB,CAUA,SAAS8wB,GAAazE,EAASuD,EAAW9zB,GACxC,IAAIi1B,EAAcj1B,EAAM6xB,SAASv1B,OAC7B44B,EAAqBl1B,EAAMm1B,gBAAgB74B,OAC3C84B,EAAUtB,EAAY1E,IAAe6F,EAAcC,GAAuB,EAC1EG,EAAUvB,GAAazE,GAAYC,KAAiB2F,EAAcC,GAAuB,EAC7Fl1B,EAAMo1B,UAAYA,EAClBp1B,EAAMq1B,UAAYA,EAEdD,IACF7E,EAAQiB,QAAU,IAKpBxxB,EAAM8zB,UAAYA,EAElBR,GAAiB/C,EAASvwB,GAE1BuwB,EAAQ3iB,KAAK,eAAgB5N,GAC7BuwB,EAAQ+E,UAAUt1B,GAClBuwB,EAAQiB,QAAQqC,UAAY7zB,CAC9B,CAQA,SAASu1B,GAASlF,GAChB,OAAOA,EAAI1F,OAAOpvB,MAAM,OAC1B,CAUA,SAASi6B,GAAkBtxB,EAAQuxB,EAAOtJ,GACxC8D,GAAKsF,GAASE,IAAQ,SAAUxlB,GAC9B/L,EAAO+I,iBAAiBgD,EAAMkc,GAAS,EAC3C,GACA,CAUA,SAASuJ,GAAqBxxB,EAAQuxB,EAAOtJ,GAC3C8D,GAAKsF,GAASE,IAAQ,SAAUxlB,GAC9B/L,EAAOsJ,oBAAoByC,EAAMkc,GAAS,EAC9C,GACA,CAQA,SAASwJ,GAAoB1S,GAC3B,IAAI2S,EAAM3S,EAAQ4S,eAAiB5S,EACnC,OAAO2S,EAAIE,aAAeF,EAAIrkB,cAAgB9Z,MAChD,CAWA,IAAIs+B,GAEJ,WACE,SAASA,EAAMxF,EAAShE,GACtB,IAAI70B,EAAOC,KACXA,KAAK44B,QAAUA,EACf54B,KAAK40B,SAAWA,EAChB50B,KAAKsrB,QAAUsN,EAAQtN,QACvBtrB,KAAKuM,OAASqsB,EAAQ9sB,QAAQuyB,YAG9Br+B,KAAKs+B,WAAa,SAAUC,GACtB/F,GAASI,EAAQ9sB,QAAQstB,OAAQ,CAACR,KACpC74B,EAAKy0B,QAAQ+J,EAErB,EAEIv+B,KAAKw+B,MACN,CAQD,IAAI3F,EAASuF,EAAMx9B,UA0BnB,OAxBAi4B,EAAOrE,QAAU,aAOjBqE,EAAO2F,KAAO,WACZx+B,KAAKy+B,MAAQZ,GAAkB79B,KAAKsrB,QAAStrB,KAAKy+B,KAAMz+B,KAAKs+B,YAC7Dt+B,KAAK0+B,UAAYb,GAAkB79B,KAAKuM,OAAQvM,KAAK0+B,SAAU1+B,KAAKs+B,YACpEt+B,KAAK2+B,OAASd,GAAkBG,GAAoBh+B,KAAKsrB,SAAUtrB,KAAK2+B,MAAO3+B,KAAKs+B,WACxF,EAOEzF,EAAO+F,QAAU,WACf5+B,KAAKy+B,MAAQV,GAAqB/9B,KAAKsrB,QAAStrB,KAAKy+B,KAAMz+B,KAAKs+B,YAChEt+B,KAAK0+B,UAAYX,GAAqB/9B,KAAKuM,OAAQvM,KAAK0+B,SAAU1+B,KAAKs+B,YACvEt+B,KAAK2+B,OAASZ,GAAqBC,GAAoBh+B,KAAKsrB,SAAUtrB,KAAK2+B,MAAO3+B,KAAKs+B,WAC3F,EAESF,CACT,CAnDA,GA6DA,SAASS,GAAQvkB,EAAK4M,EAAM4X,GAC1B,GAAIxkB,EAAI7L,UAAYqwB,EAClB,OAAOxkB,EAAI7L,QAAQyY,GAInB,IAFA,IAAIrY,EAAI,EAEDA,EAAIyL,EAAI3V,QAAQ,CACrB,GAAIm6B,GAAaxkB,EAAIzL,GAAGiwB,IAAc5X,IAAS4X,GAAaxkB,EAAIzL,KAAOqY,EAErE,OAAOrY,EAGTA,GACD,CAED,OAAQ,CAEZ,CAEA,IAAIkwB,GAAoB,CACtBC,YAAavH,GACbwH,YA9rBe,EA+rBfC,UAAWxH,GACXyH,cAAexH,GACfyH,WAAYzH,IAGV0H,GAAyB,CAC3B,EAAG/H,GACH,EA3sBmB,MA4sBnB,EAAGC,GACH,EA3sBsB,UA8sBpB+H,GAAyB,cACzBC,GAAwB,sCAExB9J,GAAI+J,iBAAmB/J,GAAIgK,eAC7BH,GAAyB,gBACzBC,GAAwB,6CAU1B,IAAIG,GAEJ,SAAUC,GAGR,SAASD,IACP,IAAIE,EAEAhzB,EAAQ8yB,EAAkB9+B,UAK9B,OAJAgM,EAAM6xB,KAAOa,GACb1yB,EAAM+xB,MAAQY,IACdK,EAAQD,EAAO9+B,MAAMb,KAAMiB,YAAcjB,MACnC4G,MAAQg5B,EAAMhH,QAAQiB,QAAQgG,cAAgB,GAC7CD,CACR,CAiDD,OA5DA1K,GAAewK,EAAmBC,GAmBrBD,EAAkB9+B,UAExB4zB,QAAU,SAAiB+J,GAChC,IAAI33B,EAAQ5G,KAAK4G,MACbk5B,GAAgB,EAChBC,EAAsBxB,EAAGjmB,KAAKjO,cAAcD,QAAQ,KAAM,IAC1D+xB,EAAY4C,GAAkBgB,GAC9BC,EAAcX,GAAuBd,EAAGyB,cAAgBzB,EAAGyB,YAC3DC,EAAUD,IAAgB1I,GAE1B4I,EAAarB,GAAQj4B,EAAO23B,EAAG4B,UAAW,aAE1ChE,EAAY1E,KAA8B,IAAd8G,EAAG6B,QAAgBH,GAC7CC,EAAa,IACft5B,EAAME,KAAKy3B,GACX2B,EAAat5B,EAAMjC,OAAS,GAErBw3B,GAAazE,GAAYC,MAClCmI,GAAgB,GAIdI,EAAa,IAKjBt5B,EAAMs5B,GAAc3B,EACpBv+B,KAAK40B,SAAS50B,KAAK44B,QAASuD,EAAW,CACrCjC,SAAUtzB,EACV42B,gBAAiB,CAACe,GAClByB,YAAaA,EACbtG,SAAU6E,IAGRuB,GAEFl5B,EAAMoP,OAAOkqB,EAAY,GAE/B,EAESR,CACT,CA9DA,CA8DEtB,IAQF,SAASiC,GAAQpyB,GACf,OAAOiI,MAAMtV,UAAUY,MAAMV,KAAKmN,EAAK,EACzC,CAWA,SAASqyB,GAAYhmB,EAAK7T,EAAK85B,GAK7B,IAJA,IAAIC,EAAU,GACVliB,EAAS,GACTzP,EAAI,EAEDA,EAAIyL,EAAI3V,QAAQ,CACrB,IAAI4D,EAAM9B,EAAM6T,EAAIzL,GAAGpI,GAAO6T,EAAIzL,GAE9BgwB,GAAQvgB,EAAQ/V,GAAO,GACzBi4B,EAAQ15B,KAAKwT,EAAIzL,IAGnByP,EAAOzP,GAAKtG,EACZsG,GACD,CAYD,OAVI0xB,IAIAC,EAHG/5B,EAGO+5B,EAAQD,MAAK,SAAUr3B,EAAGyC,GAClC,OAAOzC,EAAEzC,GAAOkF,EAAElF,EAC1B,IAJgB+5B,EAAQD,QAQfC,CACT,CAEA,IAAIC,GAAkB,CACpBC,WAAYjJ,GACZkJ,UA90Be,EA+0BfC,SAAUlJ,GACVmJ,YAAalJ,IAUXmJ,GAEJ,SAAUnB,GAGR,SAASmB,IACP,IAAIlB,EAMJ,OAJAkB,EAAWlgC,UAAU89B,SAhBC,6CAiBtBkB,EAAQD,EAAO9+B,MAAMb,KAAMiB,YAAcjB,MACnC+gC,UAAY,GAEXnB,CACR,CAoBD,OA9BA1K,GAAe4L,EAAYnB,GAYdmB,EAAWlgC,UAEjB4zB,QAAU,SAAiB+J,GAChC,IAAIjmB,EAAOmoB,GAAgBlC,EAAGjmB,MAC1B0oB,EAAUC,GAAWngC,KAAKd,KAAMu+B,EAAIjmB,GAEnC0oB,GAILhhC,KAAK40B,SAAS50B,KAAK44B,QAAStgB,EAAM,CAChC4hB,SAAU8G,EAAQ,GAClBxD,gBAAiBwD,EAAQ,GACzBhB,YAAa1I,GACboC,SAAU6E,GAEhB,EAESuC,CACT,CAhCA,CAgCE1C,IAEF,SAAS6C,GAAW1C,EAAIjmB,GACtB,IAQIzJ,EACAqyB,EATAC,EAAad,GAAQ9B,EAAGyC,SACxBD,EAAY/gC,KAAK+gC,UAErB,GAAIzoB,GAl4BW,EAk4BHmf,KAAmD,IAAtB0J,EAAWx8B,OAElD,OADAo8B,EAAUI,EAAW,GAAGC,aAAc,EAC/B,CAACD,EAAYA,GAKtB,IAAIE,EAAiBhB,GAAQ9B,EAAG8C,gBAC5BC,EAAuB,GACvB/0B,EAASvM,KAAKuM,OAMlB,GAJA20B,EAAgBC,EAAWpa,QAAO,SAAUwa,GAC1C,OAAO/G,GAAU+G,EAAMh1B,OAAQA,EACnC,IAEM+L,IAASmf,GAGX,IAFA5oB,EAAI,EAEGA,EAAIqyB,EAAcv8B,QACvBo8B,EAAUG,EAAcryB,GAAGuyB,aAAc,EACzCvyB,IAOJ,IAFAA,EAAI,EAEGA,EAAIwyB,EAAe18B,QACpBo8B,EAAUM,EAAexyB,GAAGuyB,aAC9BE,EAAqBx6B,KAAKu6B,EAAexyB,IAIvCyJ,GAAQof,GAAYC,YACfoJ,EAAUM,EAAexyB,GAAGuyB,YAGrCvyB,IAGF,OAAKyyB,EAAqB38B,OAInB,CACP27B,GAAYY,EAAc5xB,OAAOgyB,GAAuB,cAAc,GAAOA,QAL7E,CAMF,CAEA,IAAIE,GAAkB,CACpBC,UAAWhK,GACXiK,UAp7Be,EAq7BfC,QAASjK,IAWPkK,GAEJ,SAAUjC,GAGR,SAASiC,IACP,IAAIhC,EAEAhzB,EAAQg1B,EAAWhhC,UAMvB,OALAgM,EAAM6xB,KAlBiB,YAmBvB7xB,EAAM+xB,MAlBgB,qBAmBtBiB,EAAQD,EAAO9+B,MAAMb,KAAMiB,YAAcjB,MACnC6hC,SAAU,EAETjC,CACR,CAsCD,OAlDA1K,GAAe0M,EAAYjC,GAoBdiC,EAAWhhC,UAEjB4zB,QAAU,SAAiB+J,GAChC,IAAIpC,EAAYqF,GAAgBjD,EAAGjmB,MAE/B6jB,EAAY1E,IAA6B,IAAd8G,EAAG6B,SAChCpgC,KAAK6hC,SAAU,GA79BJ,EAg+BT1F,GAAuC,IAAboC,EAAGuD,QAC/B3F,EAAYzE,IAIT13B,KAAK6hC,UAIN1F,EAAYzE,KACd13B,KAAK6hC,SAAU,GAGjB7hC,KAAK40B,SAAS50B,KAAK44B,QAASuD,EAAW,CACrCjC,SAAU,CAACqE,GACXf,gBAAiB,CAACe,GAClByB,YAAazI,GACbmC,SAAU6E,IAEhB,EAESqD,CACT,CApDA,CAoDExD,IAaE2D,GAAgB,KAGpB,SAASC,GAAaC,GACpB,IACIV,EADwBU,EAAUzE,gBACJ,GAElC,GAAI+D,EAAMH,aAAephC,KAAKkiC,aAAc,CAC1C,IAAIC,EAAY,CACd70B,EAAGi0B,EAAM1G,QACTvpB,EAAGiwB,EAAMzG,SAEPsH,EAAMpiC,KAAKqiC,YACfriC,KAAKqiC,YAAYv7B,KAAKq7B,GAUtBrN,YARsB,WACpB,IAAIjmB,EAAIuzB,EAAI3zB,QAAQ0zB,GAEhBtzB,GAAK,GACPuzB,EAAIpsB,OAAOnH,EAAG,EAEtB,GAEgCkzB,GAC7B,CACH,CAEA,SAASO,GAAcnG,EAAW8F,GAC5B9F,EAAY1E,IACdz3B,KAAKkiC,aAAeD,EAAUzE,gBAAgB,GAAG4D,WACjDY,GAAalhC,KAAKd,KAAMiiC,IACf9F,GAAazE,GAAYC,KAClCqK,GAAalhC,KAAKd,KAAMiiC,EAE5B,CAEA,SAASM,GAAiBN,GAIxB,IAHA,IAAI30B,EAAI20B,EAAUvI,SAASmB,QACvBvpB,EAAI2wB,EAAUvI,SAASoB,QAElBjsB,EAAI,EAAGA,EAAI7O,KAAKqiC,YAAY19B,OAAQkK,IAAK,CAChD,IAAIygB,EAAItvB,KAAKqiC,YAAYxzB,GACrBuE,EAAKzT,KAAKm2B,IAAIxoB,EAAIgiB,EAAEhiB,GACpB+F,EAAK1T,KAAKm2B,IAAIxkB,EAAIge,EAAEhe,GAExB,GAAI8B,GA5Ca,IA4CWC,GA5CX,GA6Cf,OAAO,CAEV,CAED,OAAO,CACT,CAEA,IAAImvB,GAEJ,WA0DE,OAvDA,SAAU7C,GAGR,SAAS6C,EAAgBC,EAAU7N,GACjC,IAAIgL,EA0BJ,OAxBAA,EAAQD,EAAO7+B,KAAKd,KAAMyiC,EAAU7N,IAAa50B,MAE3Cw0B,QAAU,SAAUoE,EAAS8J,EAAYC,GAC7C,IAAI1C,EAAU0C,EAAU3C,cAAgB1I,GACpCsL,EAAUD,EAAU3C,cAAgBzI,GAExC,KAAIqL,GAAWD,EAAUE,oBAAsBF,EAAUE,mBAAmBC,kBAA5E,CAKA,GAAI7C,EACFqC,GAAcxhC,KAAKu0B,GAAuBA,GAAuBuK,IAAS8C,EAAYC,QACjF,GAAIC,GAAWL,GAAiBzhC,KAAKu0B,GAAuBA,GAAuBuK,IAAS+C,GACjG,OAGF/C,EAAMhL,SAASgE,EAAS8J,EAAYC,EATnC,CAUT,EAEM/C,EAAM2B,MAAQ,IAAIT,GAAWlB,EAAMhH,QAASgH,EAAMpL,SAClDoL,EAAMmD,MAAQ,IAAInB,GAAWhC,EAAMhH,QAASgH,EAAMpL,SAClDoL,EAAMsC,aAAe,KACrBtC,EAAMyC,YAAc,GACbzC,CACR,CAqBD,OAnDA1K,GAAesN,EAAiB7C,GAwCnB6C,EAAgB5hC,UAMtBg+B,QAAU,WACf5+B,KAAKuhC,MAAM3C,UACX5+B,KAAK+iC,MAAMnE,SACjB,EAEW4D,CACR,CArDD,CAqDEpE,GAGJ,CA3DA,GAoGA,SAAS4E,GAAehe,EAAK5jB,EAAIm3B,GAC/B,QAAIriB,MAAM+N,QAAQe,KAChBsT,GAAKtT,EAAKuT,EAAQn3B,GAAKm3B,IAChB,EAIX,CAEA,IAMI0K,GAAe,GAOfC,GAAY,EAYhB,SAASC,GAA6BC,EAAiBjK,GACrD,IAAIP,EAAUO,EAAWP,QAEzB,OAAIA,EACKA,EAAQr2B,IAAI6gC,GAGdA,CACT,CASA,SAASC,GAASvrB,GAChB,OAtCoB,GAsChBA,EACK,SAzCO,EA0CLA,EACF,MA5CS,EA6CPA,EACF,OA/CO,EAgDLA,EACF,QAGF,EACT,CAuCA,IAAIwrB,GAEJ,WACE,SAASA,EAAWx3B,QACF,IAAZA,IACFA,EAAU,CAAA,GAGZ9L,KAAK8L,QAAUmpB,GAAS,CACtBmE,QAAQ,GACPttB,GACH9L,KAAKsH,GAzFA47B,KA0FLljC,KAAK44B,QAAU,KAEf54B,KAAK8X,MA3GY,EA4GjB9X,KAAKujC,aAAe,GACpBvjC,KAAKwjC,YAAc,EACpB,CASD,IAAI3K,EAASyK,EAAW1iC,UAwPxB,OAtPAi4B,EAAOviB,IAAM,SAAaxK,GAIxB,OAHA4pB,GAAS11B,KAAK8L,QAASA,GAEvB9L,KAAK44B,SAAW54B,KAAK44B,QAAQK,YAAYD,SAClCh5B,IACX,EASE64B,EAAO4K,cAAgB,SAAuBL,GAC5C,GAAIJ,GAAeI,EAAiB,gBAAiBpjC,MACnD,OAAOA,KAGT,IAAIujC,EAAevjC,KAAKujC,aAQxB,OALKA,GAFLH,EAAkBD,GAA6BC,EAAiBpjC,OAE9BsH,MAChCi8B,EAAaH,EAAgB97B,IAAM87B,EACnCA,EAAgBK,cAAczjC,OAGzBA,IACX,EASE64B,EAAO6K,kBAAoB,SAA2BN,GACpD,OAAIJ,GAAeI,EAAiB,oBAAqBpjC,QAIzDojC,EAAkBD,GAA6BC,EAAiBpjC,aACzDA,KAAKujC,aAAaH,EAAgB97B,KAJhCtH,IAMb,EASE64B,EAAO8K,eAAiB,SAAwBP,GAC9C,GAAIJ,GAAeI,EAAiB,iBAAkBpjC,MACpD,OAAOA,KAGT,IAAIwjC,EAAcxjC,KAAKwjC,YAQvB,OAL+C,IAA3C3E,GAAQ2E,EAFZJ,EAAkBD,GAA6BC,EAAiBpjC,SAG9DwjC,EAAY18B,KAAKs8B,GACjBA,EAAgBO,eAAe3jC,OAG1BA,IACX,EASE64B,EAAO+K,mBAAqB,SAA4BR,GACtD,GAAIJ,GAAeI,EAAiB,qBAAsBpjC,MACxD,OAAOA,KAGTojC,EAAkBD,GAA6BC,EAAiBpjC,MAChE,IAAI6N,EAAQgxB,GAAQ7+B,KAAKwjC,YAAaJ,GAMtC,OAJIv1B,GAAS,GACX7N,KAAKwjC,YAAYxtB,OAAOnI,EAAO,GAG1B7N,IACX,EAQE64B,EAAOgL,mBAAqB,WAC1B,OAAO7jC,KAAKwjC,YAAY7+B,OAAS,CACrC,EASEk0B,EAAOiL,iBAAmB,SAA0BV,GAClD,QAASpjC,KAAKujC,aAAaH,EAAgB97B,GAC/C,EASEuxB,EAAO5iB,KAAO,SAAc5N,GAC1B,IAAItI,EAAOC,KACP8X,EAAQ9X,KAAK8X,MAEjB,SAAS7B,EAAKV,GACZxV,EAAK64B,QAAQ3iB,KAAKV,EAAOlN,EAC1B,CAGGyP,EAvPU,GAwPZ7B,EAAKlW,EAAK+L,QAAQyJ,MAAQ8tB,GAASvrB,IAGrC7B,EAAKlW,EAAK+L,QAAQyJ,OAEdlN,EAAM07B,iBAER9tB,EAAK5N,EAAM07B,iBAITjsB,GAnQU,GAoQZ7B,EAAKlW,EAAK+L,QAAQyJ,MAAQ8tB,GAASvrB,GAEzC,EAUE+gB,EAAOmL,QAAU,SAAiB37B,GAChC,GAAIrI,KAAKikC,UACP,OAAOjkC,KAAKiW,KAAK5N,GAInBrI,KAAK8X,MAAQmrB,EACjB,EAQEpK,EAAOoL,QAAU,WAGf,IAFA,IAAIp1B,EAAI,EAEDA,EAAI7O,KAAKwjC,YAAY7+B,QAAQ,CAClC,QAAM3E,KAAKwjC,YAAY30B,GAAGiJ,OACxB,OAAO,EAGTjJ,GACD,CAED,OAAO,CACX,EAQEgqB,EAAO8E,UAAY,SAAmBgF,GAGpC,IAAIuB,EAAiBxO,GAAS,CAAE,EAAEiN,GAElC,IAAKnK,GAASx4B,KAAK8L,QAAQstB,OAAQ,CAACp5B,KAAMkkC,IAGxC,OAFAlkC,KAAKmkC,aACLnkC,KAAK8X,MAAQmrB,IAKD,GAAVjjC,KAAK8X,QACP9X,KAAK8X,MAnUU,GAsUjB9X,KAAK8X,MAAQ9X,KAAKkF,QAAQg/B,GAGR,GAAdlkC,KAAK8X,OACP9X,KAAKgkC,QAAQE,EAEnB,EAaErL,EAAO3zB,QAAU,SAAiBy9B,GAAW,EAW7C9J,EAAOQ,eAAiB,aASxBR,EAAOsL,MAAQ,aAERb,CACT,CAjRA,GA+RIc,GAEJ,SAAUC,GAGR,SAASD,EAAct4B,GACrB,IAAI8zB,EAyBJ,YAvBgB,IAAZ9zB,IACFA,EAAU,CAAA,IAGZ8zB,EAAQyE,EAAYvjC,KAAKd,KAAMi1B,GAAS,CACtC1f,MAAO,MACP2kB,SAAU,EACVoK,KAAM,EACNC,SAAU,IAEVC,KAAM,IAENC,UAAW,EAEXC,aAAc,IACb54B,KAAa9L,MAGV2kC,OAAQ,EACd/E,EAAMgF,SAAU,EAChBhF,EAAMiF,OAAS,KACfjF,EAAMkF,OAAS,KACflF,EAAMmF,MAAQ,EACPnF,CACR,CA7BD1K,GAAekP,EAAeC,GA+B9B,IAAIxL,EAASuL,EAAcxjC,UAiF3B,OA/EAi4B,EAAOQ,eAAiB,WACtB,MAAO,CAAC5C,GACZ,EAEEoC,EAAO3zB,QAAU,SAAiBmD,GAChC,IAAI28B,EAAShlC,KAET8L,EAAU9L,KAAK8L,QACfm5B,EAAgB58B,EAAM6xB,SAASv1B,SAAWmH,EAAQouB,SAClDgL,EAAgB78B,EAAM+xB,SAAWtuB,EAAQ24B,UACzCU,EAAiB98B,EAAMiyB,UAAYxuB,EAAQ04B,KAG/C,GAFAxkC,KAAKmkC,QAED97B,EAAM8zB,UAAY1E,IAA8B,IAAfz3B,KAAK+kC,MACxC,OAAO/kC,KAAKolC,cAKd,GAAIF,GAAiBC,GAAkBF,EAAe,CACpD,GAAI58B,EAAM8zB,YAAczE,GACtB,OAAO13B,KAAKolC,cAGd,IAAIC,GAAgBrlC,KAAK2kC,OAAQt8B,EAAM2yB,UAAYh7B,KAAK2kC,MAAQ74B,EAAQy4B,SACpEe,GAAiBtlC,KAAK4kC,SAAWxJ,GAAYp7B,KAAK4kC,QAASv8B,EAAM4yB,QAAUnvB,EAAQ44B,aAevF,GAdA1kC,KAAK2kC,MAAQt8B,EAAM2yB,UACnBh7B,KAAK4kC,QAAUv8B,EAAM4yB,OAEhBqK,GAAkBD,EAGrBrlC,KAAK+kC,OAAS,EAFd/kC,KAAK+kC,MAAQ,EAKf/kC,KAAK8kC,OAASz8B,EAKG,IAFFrI,KAAK+kC,MAAQj5B,EAAQw4B,KAKlC,OAAKtkC,KAAK6jC,sBAGR7jC,KAAK6kC,OAAS/P,YAAW,WACvBkQ,EAAOltB,MA9cD,EAgdNktB,EAAOhB,SACnB,GAAal4B,EAAQy4B,UAndH,GAEA,CAqdb,CAED,OAAOtB,EACX,EAEEpK,EAAOuM,YAAc,WACnB,IAAIG,EAASvlC,KAKb,OAHAA,KAAK6kC,OAAS/P,YAAW,WACvByQ,EAAOztB,MAAQmrB,EACrB,GAAOjjC,KAAK8L,QAAQy4B,UACTtB,EACX,EAEEpK,EAAOsL,MAAQ,WACbqB,aAAaxlC,KAAK6kC,OACtB,EAEEhM,EAAO5iB,KAAO,WAveE,IAweVjW,KAAK8X,QACP9X,KAAK8kC,OAAOW,SAAWzlC,KAAK+kC,MAC5B/kC,KAAK44B,QAAQ3iB,KAAKjW,KAAK8L,QAAQyJ,MAAOvV,KAAK8kC,QAEjD,EAESV,CACT,CAlHA,CAkHEd,IASEoC,GAEJ,SAAUrB,GAGR,SAASqB,EAAe55B,GAKtB,YAJgB,IAAZA,IACFA,EAAU,CAAA,GAGLu4B,EAAYvjC,KAAKd,KAAMi1B,GAAS,CACrCiF,SAAU,GACTpuB,KAAa9L,IACjB,CAVDk1B,GAAewQ,EAAgBrB,GAoB/B,IAAIxL,EAAS6M,EAAe9kC,UAoC5B,OAlCAi4B,EAAO8M,SAAW,SAAkBt9B,GAClC,IAAIu9B,EAAiB5lC,KAAK8L,QAAQouB,SAClC,OAA0B,IAAnB0L,GAAwBv9B,EAAM6xB,SAASv1B,SAAWihC,CAC7D,EAUE/M,EAAO3zB,QAAU,SAAiBmD,GAChC,IAAIyP,EAAQ9X,KAAK8X,MACbqkB,EAAY9zB,EAAM8zB,UAClB0J,IAAe/tB,EACfguB,EAAU9lC,KAAK2lC,SAASt9B,GAE5B,OAAIw9B,IAAiB1J,EAAYxE,KAAiBmO,GAliBhC,GAmiBThuB,EACE+tB,GAAgBC,EACrB3J,EAAYzE,GAviBJ,EAwiBH5f,EA1iBG,EA2iBCA,EA1iBC,EA8iBPA,EA/iBK,EAkjBPmrB,EACX,EAESyC,CACT,CA1DA,CA0DEpC,IASF,SAASyC,GAAapM,GACpB,OAAIA,IAAc3B,GACT,OACE2B,IAAc5B,GAChB,KACE4B,IAAc9B,GAChB,OACE8B,IAAc7B,GAChB,QAGF,EACT,CAUA,IAAIkO,GAEJ,SAAUC,GAGR,SAASD,EAAcl6B,GACrB,IAAI8zB,EAcJ,YAZgB,IAAZ9zB,IACFA,EAAU,CAAA,IAGZ8zB,EAAQqG,EAAgBnlC,KAAKd,KAAMi1B,GAAS,CAC1C1f,MAAO,MACPkvB,UAAW,GACXvK,SAAU,EACVP,UAAWxB,IACVrsB,KAAa9L,MACVkmC,GAAK,KACXtG,EAAMuG,GAAK,KACJvG,CACR,CAlBD1K,GAAe8Q,EAAeC,GAoB9B,IAAIpN,EAASmN,EAAcplC,UA0D3B,OAxDAi4B,EAAOQ,eAAiB,WACtB,IAAIM,EAAY35B,KAAK8L,QAAQ6tB,UACzBZ,EAAU,GAUd,OARIY,EAAY1B,IACdc,EAAQjyB,KAAK8vB,IAGX+C,EAAYzB,IACda,EAAQjyB,KAAK6vB,IAGRoC,CACX,EAEEF,EAAOuN,cAAgB,SAAuB/9B,GAC5C,IAAIyD,EAAU9L,KAAK8L,QACfu6B,GAAW,EACXjM,EAAW/xB,EAAM+xB,SACjBT,EAAYtxB,EAAMsxB,UAClBrsB,EAAIjF,EAAM6yB,OACV5pB,EAAIjJ,EAAM8yB,OAed,OAbMxB,EAAY7tB,EAAQ6tB,YACpB7tB,EAAQ6tB,UAAY1B,IACtB0B,EAAkB,IAANrsB,EAAUsqB,GAAiBtqB,EAAI,EAAIuqB,GAAiBC,GAChEuO,EAAW/4B,IAAMtN,KAAKkmC,GACtB9L,EAAWz6B,KAAKm2B,IAAIztB,EAAM6yB,UAE1BvB,EAAkB,IAANroB,EAAUsmB,GAAiBtmB,EAAI,EAAIymB,GAAeC,GAC9DqO,EAAW/0B,IAAMtR,KAAKmmC,GACtB/L,EAAWz6B,KAAKm2B,IAAIztB,EAAM8yB,UAI9B9yB,EAAMsxB,UAAYA,EACX0M,GAAYjM,EAAWtuB,EAAQ24B,WAAa9K,EAAY7tB,EAAQ6tB,SAC3E,EAEEd,EAAO8M,SAAW,SAAkBt9B,GAClC,OAAOq9B,GAAe9kC,UAAU+kC,SAAS7kC,KAAKd,KAAMqI,KAtpBtC,EAupBdrI,KAAK8X,SAvpBS,EAupBgB9X,KAAK8X,QAAwB9X,KAAKomC,cAAc/9B,GAClF,EAEEwwB,EAAO5iB,KAAO,SAAc5N,GAC1BrI,KAAKkmC,GAAK79B,EAAM6yB,OAChBl7B,KAAKmmC,GAAK99B,EAAM8yB,OAChB,IAAIxB,EAAYoM,GAAa19B,EAAMsxB,WAE/BA,IACFtxB,EAAM07B,gBAAkB/jC,KAAK8L,QAAQyJ,MAAQokB,GAG/CsM,EAAgBrlC,UAAUqV,KAAKnV,KAAKd,KAAMqI,EAC9C,EAES29B,CACT,CAhFA,CAgFEN,IAUEY,GAEJ,SAAUL,GAGR,SAASK,EAAgBx6B,GAKvB,YAJgB,IAAZA,IACFA,EAAU,CAAA,GAGLm6B,EAAgBnlC,KAAKd,KAAMi1B,GAAS,CACzC1f,MAAO,QACPkvB,UAAW,GACX7H,SAAU,GACVjD,UAAW1B,GAAuBC,GAClCgC,SAAU,GACTpuB,KAAa9L,IACjB,CAdDk1B,GAAeoR,EAAiBL,GAgBhC,IAAIpN,EAASyN,EAAgB1lC,UA+B7B,OA7BAi4B,EAAOQ,eAAiB,WACtB,OAAO2M,GAAcplC,UAAUy4B,eAAev4B,KAAKd,KACvD,EAEE64B,EAAO8M,SAAW,SAAkBt9B,GAClC,IACIu0B,EADAjD,EAAY35B,KAAK8L,QAAQ6tB,UAW7B,OARIA,GAAa1B,GAAuBC,IACtC0E,EAAWv0B,EAAMg0B,gBACR1C,EAAY1B,GACrB2E,EAAWv0B,EAAMi0B,iBACR3C,EAAYzB,KACrB0E,EAAWv0B,EAAMk0B,kBAGZ0J,EAAgBrlC,UAAU+kC,SAAS7kC,KAAKd,KAAMqI,IAAUsxB,EAAYtxB,EAAMuxB,iBAAmBvxB,EAAM+xB,SAAWp6B,KAAK8L,QAAQ24B,WAAap8B,EAAMs0B,cAAgB38B,KAAK8L,QAAQouB,UAAYpE,GAAI8G,GAAY58B,KAAK8L,QAAQ8wB,UAAYv0B,EAAM8zB,UAAYzE,EAC7P,EAEEmB,EAAO5iB,KAAO,SAAc5N,GAC1B,IAAIsxB,EAAYoM,GAAa19B,EAAMuxB,iBAE/BD,GACF35B,KAAK44B,QAAQ3iB,KAAKjW,KAAK8L,QAAQyJ,MAAQokB,EAAWtxB,GAGpDrI,KAAK44B,QAAQ3iB,KAAKjW,KAAK8L,QAAQyJ,MAAOlN,EAC1C,EAESi+B,CACT,CAjDA,CAiDEZ,IAUEa,GAEJ,SAAUN,GAGR,SAASM,EAAgBz6B,GAKvB,YAJgB,IAAZA,IACFA,EAAU,CAAA,GAGLm6B,EAAgBnlC,KAAKd,KAAMi1B,GAAS,CACzC1f,MAAO,QACPkvB,UAAW,EACXvK,SAAU,GACTpuB,KAAa9L,IACjB,CAZDk1B,GAAeqR,EAAiBN,GAchC,IAAIpN,EAAS0N,EAAgB3lC,UAmB7B,OAjBAi4B,EAAOQ,eAAiB,WACtB,MAAO,CAAC3C,GACZ,EAEEmC,EAAO8M,SAAW,SAAkBt9B,GAClC,OAAO49B,EAAgBrlC,UAAU+kC,SAAS7kC,KAAKd,KAAMqI,KAAW1I,KAAKm2B,IAAIztB,EAAMm0B,MAAQ,GAAKx8B,KAAK8L,QAAQ24B,WAtwB3F,EAswBwGzkC,KAAK8X,MAC/H,EAEE+gB,EAAO5iB,KAAO,SAAc5N,GAC1B,GAAoB,IAAhBA,EAAMm0B,MAAa,CACrB,IAAIgK,EAAQn+B,EAAMm0B,MAAQ,EAAI,KAAO,MACrCn0B,EAAM07B,gBAAkB/jC,KAAK8L,QAAQyJ,MAAQixB,CAC9C,CAEDP,EAAgBrlC,UAAUqV,KAAKnV,KAAKd,KAAMqI,EAC9C,EAESk+B,CACT,CAnCA,CAmCEb,IAUEe,GAEJ,SAAUR,GAGR,SAASQ,EAAiB36B,GAKxB,YAJgB,IAAZA,IACFA,EAAU,CAAA,GAGLm6B,EAAgBnlC,KAAKd,KAAMi1B,GAAS,CACzC1f,MAAO,SACPkvB,UAAW,EACXvK,SAAU,GACTpuB,KAAa9L,IACjB,CAZDk1B,GAAeuR,EAAkBR,GAcjC,IAAIpN,EAAS4N,EAAiB7lC,UAU9B,OARAi4B,EAAOQ,eAAiB,WACtB,MAAO,CAAC3C,GACZ,EAEEmC,EAAO8M,SAAW,SAAkBt9B,GAClC,OAAO49B,EAAgBrlC,UAAU+kC,SAAS7kC,KAAKd,KAAMqI,KAAW1I,KAAKm2B,IAAIztB,EAAMo0B,UAAYz8B,KAAK8L,QAAQ24B,WArzB1F,EAqzBuGzkC,KAAK8X,MAC9H,EAES2uB,CACT,CA1BA,CA0BEf,IAUEgB,GAEJ,SAAUrC,GAGR,SAASqC,EAAgB56B,GACvB,IAAI8zB,EAeJ,YAbgB,IAAZ9zB,IACFA,EAAU,CAAA,IAGZ8zB,EAAQyE,EAAYvjC,KAAKd,KAAMi1B,GAAS,CACtC1f,MAAO,QACP2kB,SAAU,EACVsK,KAAM,IAENC,UAAW,GACV34B,KAAa9L,MACV6kC,OAAS,KACfjF,EAAMkF,OAAS,KACRlF,CACR,CAnBD1K,GAAewR,EAAiBrC,GAqBhC,IAAIxL,EAAS6N,EAAgB9lC,UAiD7B,OA/CAi4B,EAAOQ,eAAiB,WACtB,MAAO,CAAC7C,GACZ,EAEEqC,EAAO3zB,QAAU,SAAiBmD,GAChC,IAAI28B,EAAShlC,KAET8L,EAAU9L,KAAK8L,QACfm5B,EAAgB58B,EAAM6xB,SAASv1B,SAAWmH,EAAQouB,SAClDgL,EAAgB78B,EAAM+xB,SAAWtuB,EAAQ24B,UACzCkC,EAAYt+B,EAAMiyB,UAAYxuB,EAAQ04B,KAI1C,GAHAxkC,KAAK8kC,OAASz8B,GAGT68B,IAAkBD,GAAiB58B,EAAM8zB,WAAazE,GAAYC,MAAkBgP,EACvF3mC,KAAKmkC,aACA,GAAI97B,EAAM8zB,UAAY1E,GAC3Bz3B,KAAKmkC,QACLnkC,KAAK6kC,OAAS/P,YAAW,WACvBkQ,EAAOltB,MA92BG,EAg3BVktB,EAAOhB,SACf,GAASl4B,EAAQ04B,WACN,GAAIn8B,EAAM8zB,UAAYzE,GAC3B,OAn3BY,EAs3Bd,OAAOuL,EACX,EAEEpK,EAAOsL,MAAQ,WACbqB,aAAaxlC,KAAK6kC,OACtB,EAEEhM,EAAO5iB,KAAO,SAAc5N,GA73BZ,IA83BVrI,KAAK8X,QAILzP,GAASA,EAAM8zB,UAAYzE,GAC7B13B,KAAK44B,QAAQ3iB,KAAKjW,KAAK8L,QAAQyJ,MAAQ,KAAMlN,IAE7CrI,KAAK8kC,OAAO9J,UAAYrK,KACxB3wB,KAAK44B,QAAQ3iB,KAAKjW,KAAK8L,QAAQyJ,MAAOvV,KAAK8kC,SAEjD,EAES4B,CACT,CAxEA,CAwEEpD,IAEEsD,GAAW,CAQbC,WAAW,EASX5N,YAAa1C,GAOb6C,QAAQ,EAURiF,YAAa,KAQbyI,WAAY,KAQZC,SAAU,CAORC,WAAY,OAQZC,YAAa,OAUbC,aAAc,OAQdC,eAAgB,OAQhBC,SAAU,OASVC,kBAAmB,kBAWnBC,GAAS,CAAC,CAACb,GAAkB,CAC/BrN,QAAQ,IACN,CAACmN,GAAiB,CACpBnN,QAAQ,GACP,CAAC,WAAY,CAACkN,GAAiB,CAChC3M,UAAW1B,KACT,CAAC+N,GAAe,CAClBrM,UAAW1B,IACV,CAAC,UAAW,CAACmM,IAAgB,CAACA,GAAe,CAC9C7uB,MAAO,YACP+uB,KAAM,GACL,CAAC,QAAS,CAACoC,KAWd,SAASa,GAAe3O,EAAS4O,GAC/B,IAMItR,EANA5K,EAAUsN,EAAQtN,QAEjBA,EAAQnR,QAKbme,GAAKM,EAAQ9sB,QAAQi7B,UAAU,SAAUzjC,EAAO6E,GAC9C+tB,EAAOH,GAASzK,EAAQnR,MAAOhS,GAE3Bq/B,GACF5O,EAAQ6O,YAAYvR,GAAQ5K,EAAQnR,MAAM+b,GAC1C5K,EAAQnR,MAAM+b,GAAQ5yB,GAEtBgoB,EAAQnR,MAAM+b,GAAQ0C,EAAQ6O,YAAYvR,IAAS,EAEzD,IAEOsR,IACH5O,EAAQ6O,YAAc,IAE1B,CAwBA,IAAIC,GAEJ,WACE,SAASA,EAAQpc,EAASxf,GACxB,IA/mCyB8sB,EA+mCrBgH,EAAQ5/B,KAEZA,KAAK8L,QAAU4pB,GAAS,CAAA,EAAIkR,GAAU96B,GAAW,CAAA,GACjD9L,KAAK8L,QAAQuyB,YAAcr+B,KAAK8L,QAAQuyB,aAAe/S,EACvDtrB,KAAK2nC,SAAW,GAChB3nC,KAAK65B,QAAU,GACf75B,KAAKk5B,YAAc,GACnBl5B,KAAKynC,YAAc,GACnBznC,KAAKsrB,QAAUA,EACftrB,KAAKqI,MAvmCA,KAjBoBuwB,EAwnCQ54B,MArnCV8L,QAAQg7B,aAItB1P,GACFsI,GACErI,GACFyJ,GACG3J,GAGHqL,GAFAZ,KAKOhJ,EAASyE,IAwmCvBr9B,KAAKi5B,YAAc,IAAIN,GAAY34B,KAAMA,KAAK8L,QAAQmtB,aACtDsO,GAAevnC,MAAM,GACrBs4B,GAAKt4B,KAAK8L,QAAQotB,aAAa,SAAU7K,GACvC,IAAI8K,EAAayG,EAAM4H,IAAI,IAAInZ,EAAK,GAAGA,EAAK,KAE5CA,EAAK,IAAM8K,EAAWsK,cAAcpV,EAAK,IACzCA,EAAK,IAAM8K,EAAWwK,eAAetV,EAAK,GAC3C,GAAEruB,KACJ,CASD,IAAI64B,EAAS6O,EAAQ9mC,UAiQrB,OA/PAi4B,EAAOviB,IAAM,SAAaxK,GAcxB,OAbA4pB,GAAS11B,KAAK8L,QAASA,GAEnBA,EAAQmtB,aACVj5B,KAAKi5B,YAAYD,SAGfltB,EAAQuyB,cAEVr+B,KAAKqI,MAAMu2B,UACX5+B,KAAKqI,MAAMkE,OAAST,EAAQuyB,YAC5Br+B,KAAKqI,MAAMm2B,QAGNx+B,IACX,EAUE64B,EAAO+O,KAAO,SAAcC,GAC1B7nC,KAAK65B,QAAQiO,QAAUD,EAjHT,EADP,CAmHX,EAUEhP,EAAO8E,UAAY,SAAmBgF,GACpC,IAAI9I,EAAU75B,KAAK65B,QAEnB,IAAIA,EAAQiO,QAAZ,CAMA,IAAI3O,EADJn5B,KAAKi5B,YAAYQ,gBAAgBkJ,GAEjC,IAAIzJ,EAAcl5B,KAAKk5B,YAInB6O,EAAgBlO,EAAQkO,gBAGvBA,GAAiBA,GAvpCR,EAupCyBA,EAAcjwB,SACnD+hB,EAAQkO,cAAgB,KACxBA,EAAgB,MAKlB,IAFA,IAAIl5B,EAAI,EAEDA,EAAIqqB,EAAYv0B,QACrBw0B,EAAaD,EAAYrqB,GArJb,IA4JRgrB,EAAQiO,SACXC,GAAiB5O,IAAe4O,IACjC5O,EAAW2K,iBAAiBiE,GAI1B5O,EAAWgL,QAFXhL,EAAWwE,UAAUgF,IAOlBoF,GAAqC,GAApB5O,EAAWrhB,QAC/B+hB,EAAQkO,cAAgB5O,EACxB4O,EAAgB5O,GAGlBtqB,GA3CD,CA6CL,EASEgqB,EAAOt2B,IAAM,SAAa42B,GACxB,GAAIA,aAAsBmK,GACxB,OAAOnK,EAKT,IAFA,IAAID,EAAcl5B,KAAKk5B,YAEdrqB,EAAI,EAAGA,EAAIqqB,EAAYv0B,OAAQkK,IACtC,GAAIqqB,EAAYrqB,GAAG/C,QAAQyJ,QAAU4jB,EACnC,OAAOD,EAAYrqB,GAIvB,OAAO,IACX,EASEgqB,EAAO2O,IAAM,SAAarO,GACxB,GAAI6J,GAAe7J,EAAY,MAAOn5B,MACpC,OAAOA,KAIT,IAAIgoC,EAAWhoC,KAAKuC,IAAI42B,EAAWrtB,QAAQyJ,OAS3C,OAPIyyB,GACFhoC,KAAKioC,OAAOD,GAGdhoC,KAAKk5B,YAAYpyB,KAAKqyB,GACtBA,EAAWP,QAAU54B,KACrBA,KAAKi5B,YAAYD,SACVG,CACX,EASEN,EAAOoP,OAAS,SAAgB9O,GAC9B,GAAI6J,GAAe7J,EAAY,SAAUn5B,MACvC,OAAOA,KAGT,IAAIkoC,EAAmBloC,KAAKuC,IAAI42B,GAEhC,GAAIA,EAAY,CACd,IAAID,EAAcl5B,KAAKk5B,YACnBrrB,EAAQgxB,GAAQ3F,EAAagP,IAElB,IAAXr6B,IACFqrB,EAAYljB,OAAOnI,EAAO,GAC1B7N,KAAKi5B,YAAYD,SAEpB,CAED,OAAOh5B,IACX,EAUE64B,EAAOxjB,GAAK,SAAY8yB,EAAQ3T,GAC9B,QAAevyB,IAAXkmC,QAAoClmC,IAAZuyB,EAC1B,OAAOx0B,KAGT,IAAI2nC,EAAW3nC,KAAK2nC,SAKpB,OAJArP,GAAKsF,GAASuK,IAAS,SAAU5yB,GAC/BoyB,EAASpyB,GAASoyB,EAASpyB,IAAU,GACrCoyB,EAASpyB,GAAOzO,KAAK0tB,EAC3B,IACWx0B,IACX,EASE64B,EAAOnjB,IAAM,SAAayyB,EAAQ3T,GAChC,QAAevyB,IAAXkmC,EACF,OAAOnoC,KAGT,IAAI2nC,EAAW3nC,KAAK2nC,SAQpB,OAPArP,GAAKsF,GAASuK,IAAS,SAAU5yB,GAC1Bif,EAGHmT,EAASpyB,IAAUoyB,EAASpyB,GAAOS,OAAO6oB,GAAQ8I,EAASpyB,GAAQif,GAAU,UAFtEmT,EAASpyB,EAIxB,IACWvV,IACX,EAQE64B,EAAO5iB,KAAO,SAAcV,EAAOxL,GAE7B/J,KAAK8L,QAAQ+6B,WAxQrB,SAAyBtxB,EAAOxL,GAC9B,IAAIq+B,EAAevmC,SAASwmC,YAAY,SACxCD,EAAaE,UAAU/yB,GAAO,GAAM,GACpC6yB,EAAaG,QAAUx+B,EACvBA,EAAKwC,OAAOi8B,cAAcJ,EAC5B,CAoQMK,CAAgBlzB,EAAOxL,GAIzB,IAAI49B,EAAW3nC,KAAK2nC,SAASpyB,IAAUvV,KAAK2nC,SAASpyB,GAAO/T,QAE5D,GAAKmmC,GAAaA,EAAShjC,OAA3B,CAIAoF,EAAKuO,KAAO/C,EAEZxL,EAAKgwB,eAAiB,WACpBhwB,EAAK2vB,SAASK,gBACpB,EAII,IAFA,IAAIlrB,EAAI,EAEDA,EAAI84B,EAAShjC,QAClBgjC,EAAS94B,GAAG9E,GACZ8E,GAZD,CAcL,EAQEgqB,EAAO+F,QAAU,WACf5+B,KAAKsrB,SAAWic,GAAevnC,MAAM,GACrCA,KAAK2nC,SAAW,GAChB3nC,KAAK65B,QAAU,GACf75B,KAAKqI,MAAMu2B,UACX5+B,KAAKsrB,QAAU,IACnB,EAESoc,CACT,CA/RA,GAiSIgB,GAAyB,CAC3BhI,WAAYjJ,GACZkJ,UA/gFe,EAghFfC,SAAUlJ,GACVmJ,YAAalJ,IAWXgR,GAEJ,SAAUhJ,GAGR,SAASgJ,IACP,IAAI/I,EAEAhzB,EAAQ+7B,EAAiB/nC,UAK7B,OAJAgM,EAAM8xB,SAlBuB,aAmB7B9xB,EAAM+xB,MAlBuB,6CAmB7BiB,EAAQD,EAAO9+B,MAAMb,KAAMiB,YAAcjB,MACnC4oC,SAAU,EACThJ,CACR,CA6BD,OAxCA1K,GAAeyT,EAAkBhJ,GAapBgJ,EAAiB/nC,UAEvB4zB,QAAU,SAAiB+J,GAChC,IAAIjmB,EAAOowB,GAAuBnK,EAAGjmB,MAMrC,GAJIA,IAASmf,KACXz3B,KAAK4oC,SAAU,GAGZ5oC,KAAK4oC,QAAV,CAIA,IAAI5H,EAAU6H,GAAuB/nC,KAAKd,KAAMu+B,EAAIjmB,GAEhDA,GAAQof,GAAYC,KAAiBqJ,EAAQ,GAAGr8B,OAASq8B,EAAQ,GAAGr8B,QAAW,IACjF3E,KAAK4oC,SAAU,GAGjB5oC,KAAK40B,SAAS50B,KAAK44B,QAAStgB,EAAM,CAChC4hB,SAAU8G,EAAQ,GAClBxD,gBAAiBwD,EAAQ,GACzBhB,YAAa1I,GACboC,SAAU6E,GAZX,CAcL,EAESoK,CACT,CA1CA,CA0CEvK,IAEF,SAASyK,GAAuBtK,EAAIjmB,GAClC,IAAIxW,EAAMu+B,GAAQ9B,EAAGyC,SACjB8H,EAAUzI,GAAQ9B,EAAG8C,gBAMzB,OAJI/oB,GAAQof,GAAYC,MACtB71B,EAAMw+B,GAAYx+B,EAAIwN,OAAOw5B,GAAU,cAAc,IAGhD,CAAChnC,EAAKgnC,EACf,CAUA,SAASC,GAAUrkC,EAAQyD,EAAM6gC,GAC/B,IAAIC,EAAqB,sBAAwB9gC,EAAO,KAAO6gC,EAAU,SACzE,OAAO,WACL,IAAIxZ,EAAI,IAAI0Z,MAAM,mBACdC,EAAQ3Z,GAAKA,EAAE2Z,MAAQ3Z,EAAE2Z,MAAM/+B,QAAQ,kBAAmB,IAAIA,QAAQ,cAAe,IAAIA,QAAQ,6BAA8B,kBAAoB,sBACnJg/B,EAAMtpC,OAAOupC,UAAYvpC,OAAOupC,QAAQC,MAAQxpC,OAAOupC,QAAQD,KAMnE,OAJIA,GACFA,EAAItoC,KAAKhB,OAAOupC,QAASJ,EAAoBE,GAGxCzkC,EAAO7D,MAAMb,KAAMiB,UAC9B,CACA,CAYA,IAAIsoC,GAASR,IAAU,SAAUS,EAAMlvB,EAAKmvB,GAI1C,IAHA,IAAIx6B,EAAO5M,OAAO4M,KAAKqL,GACnBzL,EAAI,EAEDA,EAAII,EAAKtK,UACT8kC,GAASA,QAA2BxnC,IAAlBunC,EAAKv6B,EAAKJ,OAC/B26B,EAAKv6B,EAAKJ,IAAMyL,EAAIrL,EAAKJ,KAG3BA,IAGF,OAAO26B,CACT,GAAG,SAAU,iBAWTC,GAAQV,IAAU,SAAUS,EAAMlvB,GACpC,OAAOivB,GAAOC,EAAMlvB,GAAK,EAC3B,GAAG,QAAS,iBAUZ,SAASovB,GAAQC,EAAOC,EAAMvf,GAC5B,IACIwf,EADAC,EAAQF,EAAKhpC,WAEjBipC,EAASF,EAAM/oC,UAAYyB,OAAOwY,OAAOivB,IAClC/uB,YAAc4uB,EACrBE,EAAOE,OAASD,EAEZzf,GACFqL,GAASmU,EAAQxf,EAErB,CASA,SAAS2f,GAAO5oC,EAAIm3B,GAClB,OAAO,WACL,OAAOn3B,EAAGP,MAAM03B,EAASt3B,UAC7B,CACA,CAUA,IAAIgpC,GAEJ,WACE,IAAIA,EAKJ,SAAgB3e,EAASxf,GAKvB,YAJgB,IAAZA,IACFA,EAAU,CAAA,GAGL,IAAI47B,GAAQpc,EAAS2J,GAAS,CACnCiE,YAAaoO,GAAOh4B,UACnBxD,GACP,EA4DE,OA1DAm+B,EAAOC,QAAU,YACjBD,EAAO9R,cAAgBA,GACvB8R,EAAOjS,eAAiBA,GACxBiS,EAAOpS,eAAiBA,GACxBoS,EAAOnS,gBAAkBA,GACzBmS,EAAOlS,aAAeA,GACtBkS,EAAOhS,qBAAuBA,GAC9BgS,EAAO/R,mBAAqBA,GAC5B+R,EAAOrS,eAAiBA,GACxBqS,EAAOjS,eAAiBA,GACxBiS,EAAOxS,YAAcA,GACrBwS,EAAOE,WAxtFQ,EAytFfF,EAAOvS,UAAYA,GACnBuS,EAAOtS,aAAeA,GACtBsS,EAAOG,eApjDY,EAqjDnBH,EAAOI,YApjDS,EAqjDhBJ,EAAOK,cApjDW,EAqjDlBL,EAAOM,YApjDS,EAqjDhBN,EAAOO,iBArjDS,EAsjDhBP,EAAOQ,gBApjDa,GAqjDpBR,EAAOhH,aAAeA,GACtBgH,EAAOvC,QAAUA,GACjBuC,EAAO7L,MAAQA,GACf6L,EAAOtR,YAAcA,GACrBsR,EAAOnJ,WAAaA,GACpBmJ,EAAOrI,WAAaA,GACpBqI,EAAOvK,kBAAoBA,GAC3BuK,EAAOzH,gBAAkBA,GACzByH,EAAOtB,iBAAmBA,GAC1BsB,EAAO3G,WAAaA,GACpB2G,EAAOvE,eAAiBA,GACxBuE,EAAOS,IAAMtG,GACb6F,EAAOU,IAAM3E,GACbiE,EAAOW,MAAQtE,GACf2D,EAAOY,MAAQtE,GACf0D,EAAOa,OAASrE,GAChBwD,EAAOc,MAAQrE,GACfuD,EAAO50B,GAAKwoB,GACZoM,EAAOv0B,IAAMqoB,GACbkM,EAAO3R,KAAOA,GACd2R,EAAOR,MAAQA,GACfQ,EAAOV,OAASA,GAChBU,EAAOD,OAASA,GAChBC,EAAO56B,OAASqmB,GAChBuU,EAAOP,QAAUA,GACjBO,EAAOD,OAASA,GAChBC,EAAOlU,SAAWA,GAClBkU,EAAO5J,QAAUA,GACjB4J,EAAOpL,QAAUA,GACjBoL,EAAO3J,YAAcA,GACrB2J,EAAOrM,SAAWA,GAClBqM,EAAOzR,SAAWA,GAClByR,EAAOzP,UAAYA,GACnByP,EAAOpM,kBAAoBA,GAC3BoM,EAAOlM,qBAAuBA,GAC9BkM,EAAOrD,SAAWlR,GAAS,CAAA,EAAIkR,GAAU,CACvCU,OAAQA,KAEH2C,CACT,CA3EA,GA+EiBA,GAAOrD,SAExB,IAAAoE,GAAef,6/BG16FFgB,GAAS3d,GAAO,mBA2Bb4d,GACdtB,GAC2B,IAAA,IAAA9a,EAAAqc,EAAAlqC,UAAA0D,OAAxBymC,MAAwBl1B,MAAAi1B,EAAAA,EAAAA,OAAAE,EAAA,EAAAA,EAAAF,EAAAE,IAAxBD,EAAwBC,EAAApqC,GAAAA,UAAAoqC,GAE3B,OAAOC,GAAgBzqC,WAAA0qC,EAAAA,GAAAzc,EAAA,CAAC,GAAW8a,IAAI9oC,KAAAguB,EAAKsc,GAC9C,CAgBgB,SAAAE,KACd,IAAME,EAASC,GAAwB5qC,WAAA,EAAAI,WAEvC,OADAyqC,GAAYF,GACLA,CACT,CAUA,SAASC,KAAkD,IAAA,IAAAE,EAAA1qC,UAAA0D,OAAtB2Z,EAAsBpI,IAAAA,MAAAy1B,GAAAC,EAAA,EAAAA,EAAAD,EAAAC,IAAtBttB,EAAsBstB,GAAA3qC,UAAA2qC,GACzD,GAAIttB,EAAO3Z,OAAS,EAClB,OAAO2Z,EAAO,GACc,IAAAutB,EAAvB,GAAIvtB,EAAO3Z,OAAS,EACzB,OAAO8mC,GAAwB5qC,WAAA0qC,EAAAA,GAAAM,EAAA,CAC7BP,GAAiBhtB,EAAO,GAAIA,EAAO,MAAGxd,KAAA+qC,EAAA/b,GACnCd,GAAA1Q,GAAMxd,KAANwd,EAAa,MAIpB,IAAMpV,EAAIoV,EAAO,GACX3S,EAAI2S,EAAO,GAEjB,GAAIpV,aAAaqnB,MAAQ5kB,aAAa4kB,KAEpC,OADArnB,EAAE4iC,QAAQngC,EAAE8kB,WACLvnB,EACR,IAEoC6iC,EAFpCC,EAAAC,GAEkBC,GAAgBvgC,IAAE,IAArC,IAAAqgC,EAAAn3B,MAAAk3B,EAAAC,EAAAz+B,KAAAiR,MAAuC,CAAA,IAA5B0X,EAAI6V,EAAAzoC,MACRjB,OAAOzB,UAAU8B,qBAAqB5B,KAAK6K,EAAGuqB,KAExCvqB,EAAEuqB,KAAU+U,UACd/hC,EAAEgtB,GAEG,OAAZhtB,EAAEgtB,IACU,OAAZvqB,EAAEuqB,IACiB,WAAnB9I,GAAOlkB,EAAEgtB,KACU,WAAnB9I,GAAOzhB,EAAEuqB,KACR/G,GAAcjmB,EAAEgtB,KAChB/G,GAAcxjB,EAAEuqB,IAIjBhtB,EAAEgtB,GAAQiW,GAAMxgC,EAAEuqB,IAFlBhtB,EAAEgtB,GAAQuV,GAAyBviC,EAAEgtB,GAAOvqB,EAAEuqB,IAIjD,CAAA,CAAA,MAAAkW,GAAAJ,EAAAxc,EAAA4c,EAAA,CAAA,QAAAJ,EAAAlpC,GAAA,CAED,OAAOoG,CACT,CAQA,SAASijC,GAAMjjC,GACb,OAAIimB,GAAcjmB,GACTmjC,GAAAnjC,GAACpI,KAADoI,GAAM,SAAC5F,GAAU,OAAU6oC,GAAM7oC,MAClB,WAAb8pB,GAAOlkB,IAAwB,OAANA,EAC9BA,aAAaqnB,KACR,IAAIA,KAAKrnB,EAAEunB,WAEbgb,GAAyB,GAAIviC,GAE7BA,CAEX,CAOA,SAASwiC,GAAYxiC,GACnB,IAAA,IAAAojC,EAAAC,EAAAA,EAAmBC,GAAYtjC,GAAEojC,EAAAC,EAAA5nC,OAAA2nC,IAAE,CAA9B,IAAMpW,EAAIqW,EAAAD,GACTpjC,EAAEgtB,KAAU+U,UACP/hC,EAAEgtB,GACmB,WAAnB9I,GAAOlkB,EAAEgtB,KAAkC,OAAZhtB,EAAEgtB,IAC1CwV,GAAYxiC,EAAEgtB,GAEjB,CACH,g03CCjGO,SAASuW,GAAS1iC,GAEvB,OADA2iC,GAAM3iC,EA+ZR,WACE,IAAI4iC,EAAQ,CAAA,EA3WZ9+B,GAAQ,OACRjC,GAAI8gC,GAAI31B,OAAO,IA6Wf61B,KAGc,WAAVC,KACFF,EAAMG,QAAS,EACfF,MAIY,UAAVC,IAA+B,YAAVA,KACvBF,EAAMr0B,KAAOu0B,GACbD,MAIEG,KAAcC,GAAUC,aAC1BN,EAAMrlC,GAAKulC,GACXD,MAIF,GAAa,KAATC,GACF,MAAMK,GAAe,4BAQvB,GANAN,KAGAO,GAAgBR,GAGH,KAATE,GACF,MAAMK,GAAe,4BAKvB,GAHAN,KAGc,KAAVC,GACF,MAAMK,GAAe,wBASvB,OAPAN,YAGOD,EAAMlS,YACNkS,EAAMS,YACNT,EAAMA,MAENA,CACT,CAjdSU,EACT,CAGA,IAAIC,GAAoB,CACtBC,SAAU,YACVC,UAAW,aACXC,eAAgB,aAChBC,SAAU,YACVC,MAAO,CAAC,eAAgB,oBACxBC,UAAW,mBACXC,QAAS,QACTC,aAAc,SAEZC,GAAoBC,GAAcV,IACtCS,GAAkBJ,MAAQ,cAC1BI,GAAkB5zB,MAAQ,SAG1B,IAAI6yB,GAAY,CACdiB,KAAM,EACNC,UAAW,EACXjB,WAAY,EACZkB,QAAS,GAIPC,GAAa,CACf,KAAK,EACL,KAAK,EACL,KAAK,EACL,KAAK,EACL,KAAK,EACL,KAAK,EACL,KAAK,EAEL,MAAM,EACN,MAAM,GAGJ1B,GAAM,GACN7+B,GAAQ,EACRjC,GAAI,GACJihC,GAAQ,GACRE,GAAYC,GAAUiB,KAiB1B,SAASrxB,KACP/O,KACAjC,GAAI8gC,GAAI31B,OAAOlJ,GACjB,CAOA,SAASwgC,KACP,OAAO3B,GAAI31B,OAAOlJ,GAAQ,EAC5B,CAQA,SAASygC,GAAe1iC,GACtB,IAAI2iC,EAAW3iC,EAAEoL,WAAW,GAE5B,OAAIu3B,EAAW,GAEO,KAAbA,GAAgC,KAAbA,EAExBA,EAAW,GAENA,EAAW,GAEhBA,EAAW,GAENA,EAAW,GAEhBA,EAAW,GAEO,KAAbA,EAELA,EAAW,KAENA,EAAW,EAItB,CASA,SAAS9E,GAAMvgC,EAAGyC,GAKhB,GAJKzC,IACHA,EAAI,CAAA,GAGFyC,EACF,IAAK,IAAIxD,KAAQwD,EACXA,EAAElL,eAAe0H,KACnBe,EAAEf,GAAQwD,EAAExD,IAIlB,OAAOe,CACT,CAcA,SAASslC,GAASvgC,EAAK5J,EAAMf,GAG3B,IAFA,IAAI2L,EAAO5K,EAAKT,MAAM,KAClBypB,EAAIpf,EACDgB,EAAKtK,QAAQ,CAClB,IAAI8B,EAAMwI,EAAKw/B,QACXx/B,EAAKtK,QAEF0oB,EAAE5mB,KACL4mB,EAAE5mB,GAAO,IAEX4mB,EAAIA,EAAE5mB,IAGN4mB,EAAE5mB,GAAOnD,CAEb,CACF,CASA,SAASorC,GAAQ/B,EAAOlS,GAOtB,IANA,IAAI5rB,EAAGsH,EACHjL,EAAU,KAGVyjC,EAAS,CAAChC,GACVnhB,EAAOmhB,EACJnhB,EAAKta,QACVy9B,EAAO7nC,KAAK0kB,EAAKta,QACjBsa,EAAOA,EAAKta,OAId,GAAIsa,EAAKojB,MACP,IAAK//B,EAAI,EAAGsH,EAAMqV,EAAKojB,MAAMjqC,OAAQkK,EAAIsH,EAAKtH,IAC5C,GAAI4rB,EAAKnzB,KAAOkkB,EAAKojB,MAAM//B,GAAGvH,GAAI,CAChC4D,EAAUsgB,EAAKojB,MAAM//B,GACrB,KACF,CAgBJ,IAZK3D,IAEHA,EAAU,CACR5D,GAAImzB,EAAKnzB,IAEPqlC,EAAMlS,OAERvvB,EAAQ2jC,KAAOpF,GAAMv+B,EAAQ2jC,KAAMlC,EAAMlS,QAKxC5rB,EAAI8/B,EAAOhqC,OAAS,EAAGkK,GAAK,EAAGA,IAAK,CAAA,IAAAigB,EACnCggB,EAAIH,EAAO9/B,GAEVigC,EAAEF,QACLE,EAAEF,MAAQ,KAEsB,IAA9BG,GAAAjgB,EAAAggB,EAAEF,OAAK9tC,KAAAguB,EAAS5jB,IAClB4jC,EAAEF,MAAM9nC,KAAKoE,EAEjB,CAGIuvB,EAAKoU,OACP3jC,EAAQ2jC,KAAOpF,GAAMv+B,EAAQ2jC,KAAMpU,EAAKoU,MAE5C,CAQA,SAASG,GAAQrC,EAAOS,GAKtB,GAJKT,EAAMsC,QACTtC,EAAMsC,MAAQ,IAEhBtC,EAAMsC,MAAMnoC,KAAKsmC,GACbT,EAAMS,KAAM,CACd,IAAIyB,EAAOpF,GAAM,CAAE,EAAEkD,EAAMS,MAC3BA,EAAKyB,KAAOpF,GAAMoF,EAAMzB,EAAKyB,KAC/B,CACF,CAYA,SAASK,GAAWvC,EAAOhsB,EAAM0Q,EAAI/Y,EAAMu2B,GACzC,IAAIzB,EAAO,CACTzsB,KAAMA,EACN0Q,GAAIA,EACJ/Y,KAAMA,GAgBR,OAbIq0B,EAAMS,OACRA,EAAKyB,KAAOpF,GAAM,CAAE,EAAEkD,EAAMS,OAE9BA,EAAKyB,KAAOpF,GAAM2D,EAAKyB,MAAQ,CAAA,EAAIA,GAIvB,MAARA,GACEA,EAAKpuC,eAAe,WAA+B,MAAlBouC,EAAa,SAChDzB,EAAa,OAAI,CAAE/b,GAAI,CAAE8d,SAAS,EAAM72B,KAAMu2B,EAAKO,OAAO92B,OAC1Du2B,EAAa,OAAI,MAGdzB,CACT,CAMA,SAASR,KAKP,IAJAG,GAAYC,GAAUiB,KACtBpB,GAAQ,GAGK,MAANjhC,IAAmB,OAANA,IAAoB,OAANA,IAAoB,OAANA,IAE9CgR,KAGF,EAAG,CACD,IAAIyyB,GAAY,EAGhB,GAAU,MAANzjC,GAAW,CAGb,IADA,IAAIiD,EAAIhB,GAAQ,EACS,MAAlB6+B,GAAI31B,OAAOlI,IAAgC,OAAlB69B,GAAI31B,OAAOlI,IACzCA,IAEF,GAAsB,OAAlB69B,GAAI31B,OAAOlI,IAAiC,KAAlB69B,GAAI31B,OAAOlI,GAAW,CAElD,KAAY,IAALjD,IAAgB,MAALA,IAChBgR,KAEFyyB,GAAY,CACd,CACF,CACA,GAAU,MAANzjC,IAA+B,MAAlByiC,KAAuB,CAEtC,KAAY,IAALziC,IAAgB,MAALA,IAChBgR,KAEFyyB,GAAY,CACd,CACA,GAAU,MAANzjC,IAA+B,MAAlByiC,KAAuB,CAEtC,KAAY,IAALziC,IAAS,CACd,GAAU,MAANA,IAA+B,MAAlByiC,KAAuB,CAEtCzxB,KACAA,KACA,KACF,CACEA,IAEJ,CACAyyB,GAAY,CACd,CAGA,KAAa,MAANzjC,IAAmB,OAANA,IAAoB,OAANA,IAAoB,OAANA,IAE9CgR,IAEH,OAAQyyB,GAGT,GAAU,KAANzjC,GAAJ,CAOA,IAAI0jC,EAAK1jC,GAAIyiC,KACb,GAAID,GAAWkB,GAKb,OAJAvC,GAAYC,GAAUkB,UACtBrB,GAAQyC,EACR1yB,UACAA,KAKF,GAAIwxB,GAAWxiC,IAIb,OAHAmhC,GAAYC,GAAUkB,UACtBrB,GAAQjhC,QACRgR,KAMF,GAAI0xB,GAAe1iC,KAAY,MAANA,GAAW,CAIlC,IAHAihC,IAASjhC,GACTgR,KAEO0xB,GAAe1iC,KACpBihC,IAASjhC,GACTgR,KAUF,MARc,UAAViwB,GACFA,IAAQ,EACW,SAAVA,GACTA,IAAQ,EACE0C,MAAM3hB,OAAOif,OACvBA,GAAQjf,OAAOif,UAEjBE,GAAYC,GAAUC,WAExB,CAGA,GAAU,MAANrhC,GAAW,CAEb,IADAgR,KACY,IAALhR,KAAiB,KAALA,IAAmB,MAANA,IAA+B,MAAlByiC,OACjC,MAANziC,IAEFihC,IAASjhC,GACTgR,MACe,OAANhR,IAAgC,MAAlByiC,MAEvBxB,IAAS,KACTjwB,MAEAiwB,IAASjhC,GAEXgR,KAEF,GAAS,KAALhR,GACF,MAAMshC,GAAe,4BAIvB,OAFAtwB,UACAmwB,GAAYC,GAAUC,WAExB,CAIA,IADAF,GAAYC,GAAUmB,QACV,IAALviC,IACLihC,IAASjhC,GACTgR,KAEF,MAAM,IAAI4yB,YAAY,yBAA2BC,GAAK5C,GAAO,IAAM,IAxEnE,CAFEE,GAAYC,GAAUkB,SA2E1B,CAiEA,SAASf,GAAgBR,GACvB,KAAiB,KAAVE,IAAyB,KAATA,IACrB6C,GAAe/C,GACD,MAAVE,IACFD,IAGN,CASA,SAAS8C,GAAe/C,GAEtB,IAAIgD,EAAWC,GAAcjD,GAC7B,GAAIgD,EAEFE,GAAUlD,EAAOgD,OAFnB,CAQA,IAAId,EA+FN,SAAiClC,GAE/B,GAAc,SAAVE,GAKF,OAJAD,KAGAD,EAAMlS,KAAOqV,KACN,OACF,GAAc,SAAVjD,GAKT,OAJAD,KAGAD,EAAMS,KAAO0C,KACN,OACF,GAAc,UAAVjD,GAKT,OAJAD,KAGAD,EAAMA,MAAQmD,KACP,QAGT,OAAO,IACT,CAtHaC,CAAwBpD,GACnC,IAAIkC,EAAJ,CAKA,GAAI9B,IAAaC,GAAUC,WACzB,MAAMC,GAAe,uBAEvB,IAAI5lC,EAAKulC,GAGT,GAFAD,KAEc,MAAVC,GAAe,CAGjB,GADAD,KACIG,IAAaC,GAAUC,WACzB,MAAMC,GAAe,uBAEvBP,EAAMrlC,GAAMulC,GACZD,IAEF,MAyGF,SAA4BD,EAAOrlC,GAEjC,IAAImzB,EAAO,CACTnzB,GAAIA,GAEFunC,EAAOiB,KACPjB,IACFpU,EAAKoU,KAAOA,GAEdH,GAAQ/B,EAAOlS,GAGfoV,GAAUlD,EAAOrlC,EACnB,CArHI0oC,CAAmBrD,EAAOrlC,EAnB5B,CANA,CA2BF,CAQA,SAASsoC,GAAcjD,GACrB,IAAIgD,EAAW,KAgBf,GAbc,aAAV9C,MACF8C,EAAW,CAAA,GACFr3B,KAAO,WAChBs0B,KAGIG,KAAcC,GAAUC,aAC1B0C,EAASroC,GAAKulC,GACdD,OAKU,MAAVC,GAAe,CAejB,GAdAD,KAEK+C,IACHA,EAAW,CAAA,GAEbA,EAASz+B,OAASy7B,EAClBgD,EAASlV,KAAOkS,EAAMlS,KACtBkV,EAASvC,KAAOT,EAAMS,KACtBuC,EAAShD,MAAQA,EAAMA,MAGvBQ,GAAgBwC,GAGH,KAAT9C,GACF,MAAMK,GAAe,4BAEvBN,YAGO+C,EAASlV,YACTkV,EAASvC,YACTuC,EAAShD,aACTgD,EAASz+B,OAGXy7B,EAAMsD,YACTtD,EAAMsD,UAAY,IAEpBtD,EAAMsD,UAAUnpC,KAAK6oC,EACvB,CAEA,OAAOA,CACT,CAgEA,SAASE,GAAUlD,EAAOhsB,GACxB,KAAiB,OAAVksB,IAA4B,OAAVA,IAAgB,CACvC,IAAIxb,EACA/Y,EAAOu0B,GACXD,KAEA,IAAI+C,EAAWC,GAAcjD,GAC7B,GAAIgD,EACFte,EAAKse,MACA,CACL,GAAI5C,IAAaC,GAAUC,WACzB,MAAMC,GAAe,mCAGvBwB,GAAQ/B,EAAO,CACbrlC,GAFF+pB,EAAKwb,KAILD,IACF,CAOAoC,GAAQrC,EADGuC,GAAWvC,EAAOhsB,EAAM0Q,EAAI/Y,EAH5Bw3B,OAMXnvB,EAAO0Q,CACT,CACF,CAgQA,SAASye,KAuCP,IAtCA,IAAIjhC,EAsUAqhC,EArUArB,EAAO,KAGPsB,EAAa,CACfC,QAAQ,EACRC,OAAO,EACPC,OAAQ,CAAC,EAAG,IASVC,EAAa,CACf7D,IAAK,SACL8D,IAAK,MACLC,KAAM,OACNC,MAAO,QACPC,OAAQ,YACRC,OAAQ,WACRC,IAAK,eACL58B,QAAS,UACT68B,IAAK,MACLC,IAAK,OAQHC,EAAY,IAAI96B,MAChB+6B,EAAa,IAAI/6B,MAGJ,MAAV22B,IAAe,CAGpB,IAFAD,KACAiC,EAAO,CAAA,EACU,KAAVhC,IAAyB,KAATA,IAAc,CACnC,GAAIE,IAAaC,GAAUC,WACzB,MAAMC,GAAe,2BAEvB,IAAI/kC,EAAO0kC,GAGX,GADAD,KACa,KAATC,GACF,MAAMK,GAAe,yBAIvB,GAFAN,KAEIG,IAAaC,GAAUC,WACzB,MAAMC,GAAe,4BAEvB,IAAI5pC,EAAQupC,GAGC,UAAT1kC,IACF7E,EAAQ6sC,EAAW7sC,IAIR,cAAT6E,IAEFA,EAAO,SACP7E,EAAQ,CAAE+tB,GAAI,CAAE8d,SAAS,EAAM72B,KAFnBi4B,EAAWjtC,MAKZ,cAAT6E,IAEFA,EAAO,SACP7E,EAAQ,CAAEqd,KAAM,CAAEwuB,SAAS,EAAM72B,KAFrBi4B,EAAWjtC,MAKzB0tC,EAAUlqC,KAAK,CAAE+nC,KAAMA,EAAM1mC,KAAMA,EAAM7E,MAAOA,IAChD2tC,EAAWnqC,KAAKqB,GAEhBykC,KACa,KAATC,IACFD,IAEJ,CAEA,GAAa,KAATC,GACF,MAAMK,GAAe,sBAEvBN,IACF,CAWA,GAAIsE,GAAAD,GAAUnwC,KAAVmwC,EAAoB,OAAQ,CAC9B,IAAIE,EAAM,CACVA,OAAa,IACb,IAAKtiC,EAAI,EAAGA,EAAImiC,EAAUrsC,OAAQkK,IAChC,GAA0B,WAAtBmiC,EAAUniC,GAAG1G,KACf,GAA6B,MAAzB6oC,EAAUniC,GAAGvL,MAAM+tB,GACrB8f,EAAI/B,OAAO/d,GAAKxiB,MACX,IAA+B,MAA3BmiC,EAAUniC,GAAGvL,MAAMqd,KAG5B,MAAMusB,GAAe,2BAFrBiE,EAAI/B,OAAOzuB,KAAO9R,CAGpB,KAC+B,QAAtBmiC,EAAUniC,GAAG1G,OACtBgpC,EAAIC,IAAMviC,GAKd,IAyCIwiC,EACAC,EA1CAC,EAAWP,EAAUG,EAAIC,KAAK9tC,MAClC,IAAK4tC,GAAAD,GAAUnwC,KAAVmwC,EAAoB,UACvB,GAAiB,SAAbM,EACFP,EAAUlqC,KAAK,CACb+nC,KAAMmC,EAAUG,EAAIC,KAAKvC,KACzB1mC,KAAM,SACN7E,MAAO,CAAE+tB,GAAI,CAAE8d,SAAS,MAE1BgC,EAAI/B,OAAO/d,GAAK2f,EAAUrsC,OAAS,EACnCqsC,EAAUlqC,KAAK,CACb+nC,KAAMmC,EAAUG,EAAIC,KAAKvC,KACzB1mC,KAAM,SACN7E,MAAO,CAAEqd,KAAM,CAAEwuB,SAAS,MAE5BgC,EAAI/B,OAAOzuB,KAAOqwB,EAAUrsC,OAAS,OAChC,GAAiB,YAAb4sC,EACTP,EAAUlqC,KAAK,CACb+nC,KAAMmC,EAAUG,EAAIC,KAAKvC,KACzB1mC,KAAM,SACN7E,MAAO,CAAE+tB,GAAI,CAAE8d,SAAS,MAE1BgC,EAAI/B,OAAO/d,GAAK2f,EAAUrsC,OAAS,OAC9B,GAAiB,SAAb4sC,EACTP,EAAUlqC,KAAK,CACb+nC,KAAMmC,EAAUG,EAAIC,KAAKvC,KACzB1mC,KAAM,SACN7E,MAAO,CAAEqd,KAAM,CAAEwuB,SAAS,MAE5BgC,EAAI/B,OAAOzuB,KAAOqwB,EAAUrsC,OAAS,MAChC,IAAiB,SAAb4sC,EAQT,MAAMrE,GAAe,qBAAuBqE,EAAW,KAPvDP,EAAUlqC,KAAK,CACb+nC,KAAMmC,EAAUG,EAAIC,KAAKvC,KACzB1mC,KAAM,SACN7E,MAAO,KAET6tC,EAAI/B,OAAO/d,GAAK2f,EAAUrsC,OAAS,CAGrC,CAMF,GAAiB,SAAb4sC,EAEEJ,EAAI/B,OAAO/d,IAAM8f,EAAI/B,OAAOzuB,MAC9B2wB,EAAUN,EAAUG,EAAI/B,OAAO/d,IAAI/tB,MAAM+tB,GAAG/Y,KAC5C+4B,EAAYL,EAAUG,EAAI/B,OAAOzuB,MAAMrd,MAAMqd,KAAKrI,KAClD04B,EAAUG,EAAI/B,OAAO/d,IAAM,CACzBwd,KAAMmC,EAAUG,EAAI/B,OAAO/d,IAAIwd,KAC/B1mC,KAAM6oC,EAAUG,EAAI/B,OAAO/d,IAAIlpB,KAC/B7E,MAAO,CACL+tB,GAAI,CAAE8d,SAAS,EAAM72B,KAAMg5B,GAC3B3wB,KAAM,CAAEwuB,SAAS,EAAM72B,KAAM+4B,KAGjCG,GAAAR,GAASlwC,KAATkwC,EAAiBG,EAAI/B,OAAOzuB,KAAM,IAGzBwwB,EAAI/B,OAAO/d,IACpBigB,EAAUN,EAAUG,EAAI/B,OAAO/d,IAAI/tB,MAAM+tB,GAAG/Y,KAC5C+4B,EAAY,QACZL,EAAUG,EAAI/B,OAAO/d,IAAM,CACzBwd,KAAMmC,EAAUG,EAAI/B,OAAO/d,IAAIwd,KAC/B1mC,KAAM6oC,EAAUG,EAAI/B,OAAO/d,IAAIlpB,KAC/B7E,MAAO,CACL+tB,GAAI,CAAE8d,SAAS,EAAM72B,KAAMg5B,GAC3B3wB,KAAM,CAAEwuB,SAAS,EAAM72B,KAAM+4B,MAKxBF,EAAI/B,OAAOzuB,OACpB2wB,EAAU,QACVD,EAAYL,EAAUG,EAAI/B,OAAOzuB,MAAMrd,MAAMqd,KAAKrI,KAClD04B,EAAUG,EAAI/B,OAAOzuB,MAAQ,CAC3BkuB,KAAMmC,EAAUG,EAAI/B,OAAOzuB,MAAMkuB,KACjC1mC,KAAM6oC,EAAUG,EAAI/B,OAAOzuB,MAAMxY,KACjC7E,MAAO,CACL+tB,GAAI,CAAE8d,SAAS,EAAM72B,KAAMg5B,GAC3B3wB,KAAM,CAAEwuB,SAAS,EAAM72B,KAAM+4B,WAI9B,GAAiB,SAAbE,EAELJ,EAAI/B,OAAO/d,IAAM8f,EAAI/B,OAAOzuB,MAC9B2wB,EAAU,GACVD,EAAYL,EAAUG,EAAI/B,OAAOzuB,MAAMrd,MAAMqd,KAAKrI,KAClD04B,EAAUG,EAAI/B,OAAOzuB,MAAQ,CAC3BkuB,KAAMmC,EAAUG,EAAI/B,OAAOzuB,MAAMkuB,KACjC1mC,KAAM6oC,EAAUG,EAAI/B,OAAOzuB,MAAMxY,KACjC7E,MAAO,CACL+tB,GAAI,CAAE8d,SAAS,EAAM72B,KAAMg5B,GAC3B3wB,KAAM,CAAEwuB,SAAS,EAAM72B,KAAM+4B,MAKxBF,EAAI/B,OAAO/d,IACpBigB,EAAU,GACVD,EAAY,QACZF,EAAI/B,OAAOzuB,KAAOwwB,EAAI/B,OAAO/d,GAC7B2f,EAAUG,EAAI/B,OAAOzuB,MAAQ,CAC3BkuB,KAAMmC,EAAUG,EAAI/B,OAAOzuB,MAAMkuB,KACjC1mC,KAAM6oC,EAAUG,EAAI/B,OAAOzuB,MAAMxY,KACjC7E,MAAO,CACL+tB,GAAI,CAAE8d,SAAS,EAAM72B,KAAMg5B,GAC3B3wB,KAAM,CAAEwuB,SAAS,EAAM72B,KAAM+4B,MAKxBF,EAAI/B,OAAOzuB,OACpB2wB,EAAU,GACVD,EAAYL,EAAUG,EAAI/B,OAAOzuB,MAAMrd,MAAMqd,KAAKrI,KAClD04B,EAAUG,EAAI/B,OAAO/d,IAAM,CACzBwd,KAAMmC,EAAUG,EAAI/B,OAAOzuB,MAAMkuB,KACjC1mC,KAAM6oC,EAAUG,EAAI/B,OAAOzuB,MAAMxY,KACjC7E,MAAO,CACL+tB,GAAI,CAAE8d,SAAS,EAAM72B,KAAMg5B,GAC3B3wB,KAAM,CAAEwuB,SAAS,EAAM72B,KAAM+4B,MAKnCL,EAAUG,EAAI/B,OAAOzuB,MAAQ,CAC3BkuB,KAAMmC,EAAUG,EAAI/B,OAAOzuB,MAAMkuB,KACjC1mC,KAAM6oC,EAAUG,EAAI/B,OAAOzuB,MAAMxY,KACjC7E,MAAO,CACLqd,KAAM,CACJwuB,SAAS,EACT72B,KAAM04B,EAAUG,EAAI/B,OAAOzuB,MAAMrd,MAAMqd,KAAKrI,aAI7C,GAAiB,SAAbi5B,EAAqB,CAC9B,IAAIE,EAOJT,EALES,EADEN,EAAI/B,OAAO/d,GACD8f,EAAI/B,OAAO/d,GAEX8f,EAAI/B,OAAOzuB,MAGF,CACrBkuB,KAAMmC,EAAUS,GAAW5C,KAC3B1mC,KAAM6oC,EAAUS,GAAWtpC,KAC3B7E,MAAO,GAEX,KAAO,IAAiB,YAAbiuC,EAkDT,MAAMrE,GAAe,qBAAuBqE,EAAW,KAhDnDJ,EAAI/B,OAAO/d,IAAM8f,EAAI/B,OAAOzuB,MAarBwwB,EAAI/B,OAAO/d,IAZpBigB,EAAUN,EAAUG,EAAI/B,OAAO/d,IAAI/tB,MAAM+tB,GAAG/Y,KAC5C+4B,EAAY,GACZL,EAAUG,EAAI/B,OAAO/d,IAAM,CACzBwd,KAAMmC,EAAUG,EAAI/B,OAAO/d,IAAIwd,KAC/B1mC,KAAM6oC,EAAUG,EAAI/B,OAAO/d,IAAIlpB,KAC/B7E,MAAO,CACL+tB,GAAI,CAAE8d,SAAS,EAAM72B,KAAMg5B,GAC3B3wB,KAAM,CAAEwuB,SAAS,EAAM72B,KAAM+4B,MAkBxBF,EAAI/B,OAAOzuB,OACpB2wB,EAAU,QACVD,EAAY,GACZF,EAAI/B,OAAO/d,GAAK8f,EAAI/B,OAAOzuB,KAC3BqwB,EAAUG,EAAI/B,OAAO/d,IAAM,CACzBwd,KAAMmC,EAAUG,EAAI/B,OAAO/d,IAAIwd,KAC/B1mC,KAAM6oC,EAAUG,EAAI/B,OAAO/d,IAAIlpB,KAC/B7E,MAAO,CACL+tB,GAAI,CAAE8d,SAAS,EAAM72B,KAAMg5B,GAC3B3wB,KAAM,CAAEwuB,SAAS,EAAM72B,KAAM+4B,MAKnCL,EAAUG,EAAI/B,OAAO/d,IAAM,CACzBwd,KAAMmC,EAAUG,EAAI/B,OAAO/d,IAAIwd,KAC/B1mC,KAAM6oC,EAAUG,EAAI/B,OAAO/d,IAAIlpB,KAC/B7E,MAAO,CACL+tB,GAAI,CAAE8d,SAAS,EAAM72B,KAAM04B,EAAUG,EAAI/B,OAAO/d,IAAI/tB,MAAM+tB,GAAG/Y,OAKnE,CAGAk5B,GAAAR,GAASlwC,KAATkwC,EAAiBG,EAAIC,IAAK,EAC5B,CAIA,GAAIF,GAAAD,GAAUnwC,KAAVmwC,EAAoB,YAAa,CACnC,IAAIS,EAAgB,GAGpB,IADAxB,EAAgBc,EAAUrsC,OACrBkK,EAAI,EAAGA,EAAIqhC,EAAerhC,IAEH,UAAtBmiC,EAAUniC,GAAG1G,OACW,aAAtB6oC,EAAUniC,GAAG1G,OACf6oC,EAAUniC,GAAG1G,KAAO,SAEtBupC,EAAc5qC,KAAKkqC,EAAUniC,KAGjCmiC,EAAYU,CACd,CAGA,IADAxB,EAAgBc,EAAUrsC,OACrBkK,EAAI,EAAGA,EAAIqhC,EAAerhC,IAC7B2/B,GAASwC,EAAUniC,GAAGggC,KAAMmC,EAAUniC,GAAG1G,KAAM6oC,EAAUniC,GAAGvL,OAG9D,OAAOurC,CACT,CAQA,SAAS3B,GAAelE,GACtB,OAAO,IAAIwG,YACTxG,EAAU,UAAYyG,GAAK5C,GAAO,IAAM,WAAah/B,GAAQ,IAEjE,CASA,SAAS4hC,GAAKkC,EAAMC,GAClB,OAAOD,EAAKhtC,QAAUitC,EAAYD,EAAOA,EAAKE,OAAO,EAAG,IAAM,KAChE,CAyCA,SAASC,GAAQzmC,EAAQhH,EAAMf,GAM7B,IALA,IAAIsL,EAAQvK,EAAKT,MAAM,KACnBsyB,EAAOtnB,EAAMmjC,MAGb9jC,EAAM5C,EACDwD,EAAI,EAAGA,EAAID,EAAMjK,OAAQkK,IAAK,CACrC,IAAI1G,EAAOyG,EAAMC,GACX1G,KAAQ8F,IACZA,EAAI9F,GAAQ,IAEd8F,EAAMA,EAAI9F,EACZ,CAKA,OAFA8F,EAAIioB,GAAQ5yB,EAEL+H,CACT,CASA,SAAS2mC,GAAYnD,EAAM3tB,GACzB,IAAI+wB,EAAY,CAAA,EAEhB,IAAK,IAAI/b,KAAQ2Y,EACf,GAAIA,EAAKpuC,eAAey1B,GAAO,CAC7B,IAAIgc,EAAUhxB,EAAQgV,GAClB/G,GAAc+iB,GAChBC,GAAAD,GAAOpxC,KAAPoxC,GAAgB,SAAUE,GACxBN,GAAQG,EAAWG,EAAUvD,EAAK3Y,GACpC,IAEA4b,GAAQG,EADoB,iBAAZC,EACGA,EAEAhc,EAFS2Y,EAAK3Y,GAIrC,CAGF,OAAO+b,CACT,CASO,SAASI,GAAWtoC,GAEzB,IAQmB8hC,EARfyG,EAAU7F,GAAS1iC,GACnBwoC,EAAY,CACd3D,MAAO,GACPK,MAAO,GACPnjC,QAAS,CAAC,GAIRwmC,EAAQ1D,OACVuD,GAAAtG,EAAAyG,EAAQ1D,OAAK9tC,KAAA+qC,GAAS,SAAU2G,GAC9B,IAAIC,EAAY,CACdnrC,GAAIkrC,EAAQlrC,GACZorC,MAAO1tC,OAAOwtC,EAAQE,OAASF,EAAQlrC,KAEzCmiC,GAAMgJ,EAAWT,GAAYQ,EAAQ3D,KAAMvB,KACvCmF,EAAUE,QACZF,EAAUG,MAAQ,SAEpBL,EAAU3D,MAAM9nC,KAAK2rC,EACvB,IAIF,GAAIH,EAAQrD,MAAO,CAAA,IAAA4D,EAObC,EAAc,SAAUC,GAC1B,IAAIC,EAAY,CACdryB,KAAMoyB,EAAQpyB,KACd0Q,GAAI0hB,EAAQ1hB,IAWd,OATAoY,GAAMuJ,EAAWhB,GAAYe,EAAQlE,KAAMd,KAKnB,MAApBiF,EAAU5D,QAAmC,OAAjB2D,EAAQz6B,OACtC06B,EAAU5D,OAAS,MAGd4D,GAGTb,GAAAU,EAAAP,EAAQrD,OAAKnuC,KAAA+xC,GAAS,SAAUE,GAC9B,IAAIpyB,EAAM0Q,EAiBgD4hB,EA1J9CC,EAAQC,EAAQ/xC,EA6K0BgyC,GAlCpDzyB,EADEoyB,EAAQpyB,gBAAgBte,OACnB0wC,EAAQpyB,KAAKiuB,MAEb,CACLtnC,GAAIyrC,EAAQpyB,MAKd0Q,EADE0hB,EAAQ1hB,cAAchvB,OACnB0wC,EAAQ1hB,GAAGud,MAEX,CACHtnC,GAAIyrC,EAAQ1hB,IAIZ0hB,EAAQpyB,gBAAgBte,QAAU0wC,EAAQpyB,KAAKsuB,QACjDkD,GAAAc,EAAAF,EAAQpyB,KAAKsuB,OAAKnuC,KAAAmyC,GAAS,SAAUI,GACnC,IAAIL,EAAYF,EAAYO,GAC5Bd,EAAUtD,MAAMnoC,KAAKksC,EACvB,KA9JkBG,EAiKL9hB,EAjKajwB,EAiKT,SAAUuf,EAAM0Q,GACjC,IAAIgiB,EAAUnE,GACZqD,EACA5xB,EAAKrZ,GACL+pB,EAAG/pB,GACHyrC,EAAQz6B,KACRy6B,EAAQlE,MAENmE,EAAYF,EAAYO,GAC5Bd,EAAUtD,MAAMnoC,KAAKksC,EACvB,EA1KA7jB,GADY+jB,EAiKHvyB,GA/JXwxB,GAAAe,GAAMpyC,KAANoyC,GAAe,SAAUI,GACnBnkB,GAAcgkB,GAChBhB,GAAAgB,GAAMryC,KAANqyC,GAAe,SAAUI,GACvBnyC,EAAGkyC,EAAOC,EACZ,IAEAnyC,EAAGkyC,EAAOH,EAEd,IAEIhkB,GAAcgkB,GAChBhB,GAAAgB,GAAMryC,KAANqyC,GAAe,SAAUI,GACvBnyC,EAAG8xC,EAAQK,EACb,IAEAnyC,EAAG8xC,EAAQC,GA4JPJ,EAAQ1hB,cAAchvB,QAAU0wC,EAAQ1hB,GAAG4d,QAC7CkD,GAAAiB,EAAAL,EAAQ1hB,GAAG4d,OAAKnuC,KAAAsyC,GAAS,SAAUC,GACjC,IAAIL,EAAYF,EAAYO,GAC5Bd,EAAUtD,MAAMnoC,KAAKksC,EACvB,GAEJ,GACF,CAOA,OAJIV,EAAQzD,OACV0D,EAAUzmC,QAAUwmC,EAAQzD,MAGvB0D,CACT,kECl7CgB,SAAAiB,GACdC,EACAC,GAA8B,IAAA5kB,EAExBhjB,EAAU,CACdmjC,MAAO,CACL0E,cAAc,GAEhB/E,MAAO,CACLgF,OAAO,EACPC,YAAY,IAIE,MAAdH,IACsB,MAApBA,EAAWE,QACb9nC,EAAQ8iC,MAAMgF,MAAQF,EAAWE,OAEN,MAAzBF,EAAWG,aACb/nC,EAAQ8iC,MAAMiF,WAAaH,EAAWG,YAET,MAA3BH,EAAWC,eACb7nC,EAAQmjC,MAAM0E,aAAeD,EAAWC,eAI5C,IAAMG,EAASL,EAAUxE,MACnB8E,EAAS1H,GAAAyH,GAAMhzC,KAANgzC,GAAW,SAACE,GACzB,IAAMC,EAAiB,CACrBtzB,KAAMqzB,EAAM9sC,OACZI,GAAI0sC,EAAM1sC,GACV+pB,GAAI2iB,EAAMznC,QAqBZ,OAlBwB,MAApBynC,EAAME,aACRD,EAAMC,WAAaF,EAAME,YAER,MAAfF,EAAMtB,QACRuB,EAAMvB,MAAQsB,EAAMtB,OAEE,MAApBsB,EAAME,YAAgD,MAA1BF,EAAME,WAAWC,QAC/CF,EAAME,MAAQH,EAAME,WAAWC,OAEd,aAAfH,EAAM17B,OACR27B,EAAM7E,OAAS,MAIb4E,EAAMrG,QAAwC,IAA/B7hC,EAAQmjC,MAAM0E,eAC/BM,EAAMtG,MAAQqG,EAAMrG,OAGfsG,CACT,IAmDA,MAAO,CAAErF,MAjDMvC,GAAAvd,EAAA2kB,EAAU7E,OAAK9tC,KAAAguB,GAAK,SAACslB,GAClC,IAAMC,EAAiB,CACrB/sC,GAAI8sC,EAAM9sC,GACVssC,MAAO9nC,EAAQ8iC,MAAMgF,OAAoB,MAAXQ,EAAM9mC,GAAwB,MAAX8mC,EAAM9iC,GA2CzD,OAxCwB,MAApB8iC,EAAMF,aACRG,EAAMH,WAAaE,EAAMF,YAER,MAAfE,EAAM1B,QACR2B,EAAM3B,MAAQ0B,EAAM1B,OAEJ,MAAd0B,EAAM98B,OACR+8B,EAAM/8B,KAAO88B,EAAM98B,MAEG,MAApB88B,EAAMF,YAAgD,MAA1BE,EAAMF,WAAWC,QAC/CE,EAAMF,MAAQC,EAAMF,WAAWC,OAEd,MAAfC,EAAMD,QACRE,EAAMF,MAAQC,EAAMD,OAEP,MAAXC,EAAM9mC,IACR+mC,EAAM/mC,EAAI8mC,EAAM9mC,GAEH,MAAX8mC,EAAM9iC,IACR+iC,EAAM/iC,EAAI8iC,EAAM9iC,GAEC,MAAf8iC,EAAMzG,SACyB,IAA7B7hC,EAAQ8iC,MAAMiF,WAChBQ,EAAM1G,MAAQyG,EAAMzG,MAEpB0G,EAAM1G,MAAQ,CACZ2G,WAAYF,EAAMzG,MAClB4G,OAAQH,EAAMzG,MACd6G,UAAW,CACTF,WAAYF,EAAMzG,MAClB4G,OAAQH,EAAMzG,OAEhB8G,MAAO,CACLH,WAAYF,EAAMzG,MAClB4G,OAAQH,EAAMzG,SAMf0G,CACT,IAEwBpF,MAAO8E,EACjC,0FC5B0B,CACxBW,eAAgB,cAChB1F,QAAS,QACTN,QAAS,OACTiG,KAAM,KACNj7B,MAAO,KACPk7B,gBAAiB,eACjBC,IAAK,OACLC,mBAAoB,UACpBC,gBAAiB,6BACjBC,KAAM,KACNC,iBAAkB,UAClBC,SAAU,QACVC,oBAAqB,qBACrBC,SAAU,WA4Cc,CACxBV,eAAgB,6DAChB1F,QAAS,eACTN,QAAS,gBACTiG,KAAM,OACNj7B,MAAO,SACPk7B,gBAAiB,kCACjBC,IAAK,eACLC,mBAAoB,sBACpBC,gBACE,mFACFC,KAAM,UACNC,iBAAkB,0BAClBC,SAAU,gBACVC,oBACE,4EACFC,SAAU,qBArMc,CACxBV,eACE,oEACF1F,QAAS,mBACTN,QAAS,oBACTiG,KAAM,SACNj7B,MAAO,YACPk7B,gBACE,0DACFC,IAAK,iBACLC,mBAAoB,wCACpBC,gBACE,8FACFC,KAAM,YACNC,iBAAkB,wCAClBC,SAAU,kBACVC,oBACE,0FACFC,SAAU,uBAtCc,CACxBV,eAAgB,+CAChB1F,QAAS,WACTN,QAAS,WACTiG,KAAM,OACNj7B,MAAO,QACPk7B,gBAAiB,kCACjBC,IAAK,kBACLC,mBAAoB,8BACpBC,gBACE,qEACFC,KAAM,OACNC,iBAAkB,6BAClBC,SAAU,YACVC,oBACE,wEACFC,SAAU,gBA0Bc,CACxBV,eACE,0DACF1F,QAAS,gBACTN,QAAS,cACTiG,KAAM,QACNj7B,MAAO,SACPk7B,gBAAiB,8CACjBC,IAAK,qBACLC,mBAAoB,iCACpBC,gBACE,8EACFC,KAAM,SACNC,iBAAkB,+BAClBC,SAAU,gBACVC,oBACE,2EACFC,SAAU,kBA0Hc,CACxBV,eAAgB,oDAChB1F,QAAS,kBACTN,QAAS,kBACTiG,KAAM,SACNj7B,MAAO,SACPk7B,gBAAiB,+CACjBC,IAAK,uBACLC,mBAAoB,4CACpBC,gBACE,gFACFC,KAAM,SACNC,iBAAkB,2CAClBC,SAAU,iBACVC,oBACE,4EACFC,SAAU,qBAtIc,CACxBV,eAAgB,sCAChB1F,QAAS,sBACTN,QAAS,mBACTiG,KAAM,WACNj7B,MAAO,WACPk7B,gBAAiB,iDACjBC,IAAK,wBACLC,mBAAoB,0CACpBC,gBACE,mEACFC,KAAM,WACNC,iBAAkB,4CAClBC,SAAU,sBACVC,oBACE,yEACFC,SAAU,uBAIc,CACxBV,eAAgB,uDAChB1F,QAAS,iBACTN,QAAS,iBACTiG,KAAM,QACNj7B,MAAO,UACPk7B,gBAAiB,wCACjBC,IAAK,uBACLC,mBAAoB,0CACpBC,gBACE,6EACFC,KAAM,WACNC,iBAAkB,yCAClBC,SAAU,gBACVC,oBACE,kFACFC,SAAU,oBAIc,CACxBV,eAAgB,0DAChB1F,QAAS,mBACTN,QAAS,eACTiG,KAAM,SACNj7B,MAAO,SACPk7B,gBAAiB,gDACjBC,IAAK,sBACLC,mBAAoB,sCACpBC,gBACE,mEACFC,KAAM,SACNC,iBAAkB,qCAClBC,SAAU,gBACVC,oBACE,yEACFC,SAAU,gBAIc,CACxBV,eAAgB,yDAChB1F,QAAS,iBACTN,QAAS,gBACTiG,KAAM,QACNj7B,MAAO,YACPk7B,gBAAiB,wCACjBC,IAAK,oBACLC,mBAAoB,iCACpBC,gBACE,yEACFC,KAAM,gBACNC,iBAAkB,0CAClBC,SAAU,sBACVC,oBACE,mFACFC,SAAU,yBAsBc,CACxBV,eAAgB,oDAChB1F,QAAS,cACTN,QAAS,eACTiG,KAAM,QACNj7B,MAAO,UACPk7B,gBAAiB,qCACjBC,IAAK,kBACLC,mBAAoB,iCACpBC,gBACE,yEACFC,KAAM,aACNC,iBAAkB,oCAClBC,SAAU,kBACVC,oBACE,oFACFC,SAAU,sBCpMZ,IAWMC,GAAW,WAIf,SAAAA,IAAczxB,QAAAyxB,GACZr1C,KAAKs1C,eAAiB,EAEtBt1C,KAAK2yC,MAAQ,IAAI4C,MACjBv1C,KAAKw1C,OAAS3zC,SAASkH,cAAc,SACvC,CA6IC,OA3IDglB,GAAAsnB,EAAA,CAAA,CAAA5uC,IAAA,OAAAnD,MAGA,WACE,IAAItD,KAAKy1C,cAAT,CAEAz1C,KAAKsa,IAAMta,KAAK2yC,MAAMr4B,IACtB,IAAMzI,EAAI7R,KAAK2yC,MAAM+C,MACf5jC,EAAI9R,KAAK2yC,MAAMgD,OAGrB31C,KAAK01C,MAAQ7jC,EACb7R,KAAK21C,OAAS7jC,EAEd,IAAM8jC,EAAKj2C,KAAKyN,MAAM0E,EAAI,GACpB+jC,EAAKl2C,KAAKyN,MAAM0E,EAAI,GACpBgkC,EAAKn2C,KAAKyN,MAAM0E,EAAI,GACpBikC,EAAMp2C,KAAKyN,MAAM0E,EAAI,IAErBkkC,EAAKr2C,KAAKyN,MAAMyE,EAAI,GACpBokC,EAAKt2C,KAAKyN,MAAMyE,EAAI,GACpBqkC,EAAKv2C,KAAKyN,MAAMyE,EAAI,GACpBskC,EAAMx2C,KAAKyN,MAAMyE,EAAI,IAG3B7R,KAAKw1C,OAAOE,MAAQ,EAAIO,EACxBj2C,KAAKw1C,OAAOG,OAASC,EAKrB51C,KAAKo2C,YAAc,CACjB,CAAC,EAAG,EAAGJ,EAAIJ,GACX,CAACI,EAAI,EAAGC,EAAIJ,GACZ,CAACG,EAAIH,EAAIK,EAAIJ,GACb,CAAC,EAAII,EAAIL,EAAIM,EAAKJ,IAGpB/1C,KAAKq2C,aAlCmB,CAmC1B,GAEA,CAAA5vC,IAAA,cAAAnD,MAGA,WACE,YAA4BrB,IAArBjC,KAAKo2C,WACd,GAEA,CAAA3vC,IAAA,cAAAnD,MAiBA,WACE,IAAM+N,EAAMrR,KAAKw1C,OAAOc,WAAW,MAG7BjlB,EAAKrxB,KAAKo2C,YAAY,GAC5B/kC,EAAIklC,UAAUv2C,KAAK2yC,MAAOthB,EAAG,GAAIA,EAAG,GAAIA,EAAG,GAAIA,EAAG,IAGlD,IAAK,IAAImlB,EAAa,EAAGA,EAAax2C,KAAKs1C,eAAgBkB,IAAc,CACvE,IAAM71B,EAAO3gB,KAAKo2C,YAAYI,EAAa,GACrCnlB,EAAKrxB,KAAKo2C,YAAYI,GAE5BnlC,EAAIklC,UACFv2C,KAAKw1C,OACL70B,EAAK,GACLA,EAAK,GACLA,EAAK,GACLA,EAAK,GACL0Q,EAAG,GACHA,EAAG,GACHA,EAAG,GACHA,EAAG,GAEP,CACF,GAEA,CAAA5qB,IAAA,sBAAAnD,MAeA,SAAoB+N,EAAKolC,EAAQC,EAAMC,EAAKjB,EAAOC,GACjD,GAAK31C,KAAKy1C,cAEV,GAAIgB,EAAS,EAAG,CAEdA,GAAU,GAEV,IADA,IAAID,EAAa,EACVC,EAAS,GAAKD,EAAax2C,KAAKs1C,gBACrCmB,GAAU,GACVD,GAAc,EAGZA,GAAcx2C,KAAKs1C,iBACrBkB,EAAax2C,KAAKs1C,eAAiB,GAIrC,IAAM30B,EAAO3gB,KAAKo2C,YAAYI,GAC9BnlC,EAAIklC,UACFv2C,KAAKw1C,OACL70B,EAAK,GACLA,EAAK,GACLA,EAAK,GACLA,EAAK,GACL+1B,EACAC,EACAjB,EACAC,EAEJ,MAEEtkC,EAAIklC,UAAUv2C,KAAK2yC,MAAO+D,EAAMC,EAAKjB,EAAOC,EAEhD,KAACN,CAAA,CAtJc,GCGXuB,GAAM,WAIV,SAAAA,EAAYhiB,GAAUhR,QAAAgzB,GACpB52C,KAAK62C,OAAS,GACd72C,KAAK82C,YAAc,GACnB92C,KAAK40B,SAAWA,CAClB,CA0FC,OAxFD7G,GAAA6oB,EAAA,CAAA,CAAAnwC,IAAA,oBAAAnD,MAKA,SAAkByzC,EAAKC,EAAWC,QAEpBh1C,IAAR80C,QAAgD90C,IAA3Bg1C,SACPh1C,IAAd+0C,GAMJC,EAAuBtE,MAAMuE,QAAU,WACrC7N,QAAQjpC,MAAM,8BAA+B42C,IAK/CC,EAAuBtE,MAAMr4B,IAAM08B,GAXjC3N,QAAQC,KAAK,+BAYjB,GAEA,CAAA7iC,IAAA,mBAAAnD,MAKA,SAAiB6zC,GACXn3C,KAAK40B,UACP50B,KAAK40B,SAASuiB,EAElB,GAEA,CAAA1wC,IAAA,OAAAnD,MAKA,SAAKyzC,EAAKC,GAAW,IAAApX,EAAA5/B,KAEbo3C,EAAcp3C,KAAK62C,OAAOE,GAChC,GAAIK,EAAa,OAAOA,EAGxB,IAAMC,EAAM,IAAIhC,GAyBhB,OArBAr1C,KAAK62C,OAAOE,GAAOM,EAGnBA,EAAI1E,MAAM2E,OAAS,WAEjB1X,EAAK2X,qBAAqBF,EAAI1E,OAC9B0E,EAAI7Y,OACJoB,EAAK4X,iBAAiBH,IAIxBA,EAAI1E,MAAMuE,QAAU,WAClB7N,QAAQjpC,MAAM,wBAAyB22C,GAEvCnX,EAAK6X,kBAAkBV,EAAKC,EAAWK,IAIzCA,EAAI1E,MAAMr4B,IAAMy8B,EAGTM,CACT,GAEA,CAAA5wC,IAAA,uBAAAnD,MAQA,SAAqBo0C,GACQ,IAAvBA,EAAahC,QACf7zC,SAAS81C,KAAKt9B,YAAYq9B,GAC1BA,EAAahC,MAAQgC,EAAaE,YAClCF,EAAa/B,OAAS+B,EAAaG,aACnCh2C,SAAS81C,KAAKG,YAAYJ,GAE9B,KAACd,CAAA,CAlGS,mBCVZmB,GAFYz3C,GAEW,WACrB,GAA0B,mBAAf03C,YAA2B,CACpC,IAAIC,EAAS,IAAID,YAAY,GAEzB31C,OAAO61C,aAAaD,IAAS51C,OAAOC,eAAe21C,EAAQ,IAAK,CAAE30C,MAAO,GAC9E,CACH,ICTIpD,GAAQI,EACR8D,GAAW1C,GACX+B,GAAUC,EACVy0C,GAA8BlyC,GAG9BmyC,GAAgB/1C,OAAO61C,aAK3BG,GAJ0Bn4C,IAAM,WAAck4C,GAAc,EAAG,KAItBD,GAA+B,SAAsBz4C,GAC5F,QAAK0E,GAAS1E,OACVy4C,IAA+C,gBAAhB10C,GAAQ/D,OACpC04C,IAAgBA,GAAc14C,IACvC,EAAI04C,GCbJE,IAFYh4C,GAEY,WAEtB,OAAO+B,OAAO61C,aAAa71C,OAAOk2C,kBAAkB,CAAA,GACtD,ICLIh8B,GAAIjc,GACJe,GAAcK,EACdgN,GAAahL,GACbU,GAAW6B,GACXoB,GAASO,GACTtF,GAAiBwF,GAA+ChF,EAChE4kB,GAA4Bre,GAC5BmvC,GAAoCjvC,GACpC2uC,GAAe5sC,GAEfmtC,GAAW37B,GAEX47B,IAAW,EACXlsB,GAJMjhB,GAIS,QACfjE,GAAK,EAELqxC,GAAc,SAAUj5C,GAC1B4C,GAAe5C,EAAI8sB,GAAU,CAAElpB,MAAO,CACpCs1C,SAAU,IAAMtxC,KAChBuxC,SAAU,CAAE,IAEhB,EA4DIC,GAAOC,GAAA3jC,QAAiB,CAC1BgkB,OA3BW,WACX0f,GAAK1f,OAAS,aACdsf,IAAW,EACX,IAAItzB,EAAsBsC,GAA0B5kB,EAChDkT,EAAS3U,GAAY,GAAG2U,QACxBzV,EAAO,CAAA,EACXA,EAAKisB,IAAY,EAGbpH,EAAoB7kB,GAAMoE,SAC5B+iB,GAA0B5kB,EAAI,SAAUpD,GAEtC,IADA,IAAIiJ,EAASyc,EAAoB1lB,GACxBmP,EAAI,EAAGlK,EAASgE,EAAOhE,OAAQkK,EAAIlK,EAAQkK,IAClD,GAAIlG,EAAOkG,KAAO2d,GAAU,CAC1BxW,EAAOrN,EAAQkG,EAAG,GAClB,KACD,CACD,OAAOlG,CACf,EAEI4T,GAAE,CAAEhQ,OAAQ,SAAUG,MAAM,EAAMK,QAAQ,GAAQ,CAChDqY,oBAAqBozB,GAAkC11C,IAG7D,EAIEk2C,QA5DY,SAAUt5C,EAAImb,GAE1B,IAAKzW,GAAS1E,GAAK,MAAoB,iBAANA,EAAiBA,GAAmB,iBAANA,EAAiB,IAAM,KAAOA,EAC7F,IAAK2H,GAAO3H,EAAI8sB,IAAW,CAEzB,IAAK0rB,GAAax4C,GAAK,MAAO,IAE9B,IAAKmb,EAAQ,MAAO,IAEpB89B,GAAYj5C,EAEb,CAAC,OAAOA,EAAG8sB,IAAUosB,QACxB,EAiDEK,YA/CgB,SAAUv5C,EAAImb,GAC9B,IAAKxT,GAAO3H,EAAI8sB,IAAW,CAEzB,IAAK0rB,GAAax4C,GAAK,OAAO,EAE9B,IAAKmb,EAAQ,OAAO,EAEpB89B,GAAYj5C,EAEb,CAAC,OAAOA,EAAG8sB,IAAUqsB,QACxB,EAsCEK,SAnCa,SAAUx5C,GAEvB,OADI+4C,IAAYC,IAAYR,GAAax4C,KAAQ2H,GAAO3H,EAAI8sB,KAAWmsB,GAAYj5C,GAC5EA,CACT,GAmCAgP,GAAW8d,KAAY,oBCxFnBhsB,GAAOF,GACPQ,GAAOY,EACPgJ,GAAWhH,GACXyC,GAAcF,GACdoZ,GAAwBzX,GACxBoG,GAAoBlG,GACpBjD,GAAgBwE,GAChB8W,GAAc5W,GACd2W,GAAoB5U,GACpB0T,GAAgBzT,GAEhBxH,GAAaC,UAEbm1C,GAAS,SAAUrR,EAASn/B,GAC9B3I,KAAK8nC,QAAUA,EACf9nC,KAAK2I,OAASA,CAChB,EAEIywC,GAAkBD,GAAOv4C,UAE7By4C,GAAiB,SAAUj4B,EAAUk4B,EAAiBxtC,GACpD,IAMI/F,EAAUwzC,EAAQ1rC,EAAOlJ,EAAQgE,EAAQiU,EAAMuE,EAN/C3W,EAAOsB,GAAWA,EAAQtB,KAC1BgvC,KAAgB1tC,IAAWA,EAAQ0tC,YACnCC,KAAe3tC,IAAWA,EAAQ2tC,WAClCC,KAAiB5tC,IAAWA,EAAQ4tC,aACpCC,KAAiB7tC,IAAWA,EAAQ6tC,aACpCv4C,EAAKZ,GAAK84C,EAAiB9uC,GAG3Bo9B,EAAO,SAAUgS,GAEnB,OADI7zC,GAAUiZ,GAAcjZ,EAAU,SAAU6zC,GACzC,IAAIT,IAAO,EAAMS,EAC5B,EAEMC,EAAS,SAAUv2C,GACrB,OAAIk2C,GACF9uC,GAASpH,GACFq2C,EAAcv4C,EAAGkC,EAAM,GAAIA,EAAM,GAAIskC,GAAQxmC,EAAGkC,EAAM,GAAIA,EAAM,KAChEq2C,EAAcv4C,EAAGkC,EAAOskC,GAAQxmC,EAAGkC,EAChD,EAEE,GAAIm2C,EACF1zC,EAAWqb,EAASrb,cACf,GAAI2zC,EACT3zC,EAAWqb,MACN,CAEL,KADAm4B,EAASr5B,GAAkBkB,IACd,MAAM,IAAIrd,GAAWoC,GAAYib,GAAY,oBAE1D,GAAI/B,GAAsBk6B,GAAS,CACjC,IAAK1rC,EAAQ,EAAGlJ,EAASqJ,GAAkBoT,GAAWzc,EAASkJ,EAAOA,IAEpE,IADAlF,EAASkxC,EAAOz4B,EAASvT,MACXhJ,GAAcu0C,GAAiBzwC,GAAS,OAAOA,EAC7D,OAAO,IAAIwwC,IAAO,EACrB,CACDpzC,EAAWoa,GAAYiB,EAAUm4B,EAClC,CAGD,IADA38B,EAAO68B,EAAYr4B,EAASxE,KAAO7W,EAAS6W,OACnCuE,EAAOrgB,GAAK8b,EAAM7W,IAAWyY,MAAM,CAC1C,IACE7V,EAASkxC,EAAO14B,EAAK7d,MACtB,CAAC,MAAOlD,GACP4e,GAAcjZ,EAAU,QAAS3F,EAClC,CACD,GAAqB,iBAAVuI,GAAsBA,GAAU9D,GAAcu0C,GAAiBzwC,GAAS,OAAOA,CAC9F,CAAI,OAAO,IAAIwwC,IAAO,EACtB,ECnEIt0C,GAAgBvE,GAEhByD,GAAaC,UAEjB81C,GAAiB,SAAUp6C,EAAI8Q,GAC7B,GAAI3L,GAAc2L,EAAW9Q,GAAK,OAAOA,EACzC,MAAM,IAAIqE,GAAW,uBACvB,ECPIwY,GAAIjc,GACJV,GAAS8B,EACTq4C,GAAyBr2C,GACzBxD,GAAQ+F,EACRmF,GAA8BxD,GAC9ByxC,GAAUvxC,GACVgyC,GAAazwC,GACbnH,GAAaqH,EACbnF,GAAWkH,GACXxH,GAAoByH,EACpBmQ,GAAiBoB,GACjBxa,GAAiB6a,GAA+Cra,EAChE6M,GAAUoN,GAAwCpN,QAClDxG,GAAc8T,EAGd2B,GAFsB0I,GAEiBhR,IACvC0jC,GAHsB1yB,GAGuBlP,UAEjD6hC,GAAiB,SAAUC,EAAkBC,EAASC,GACpD,IAMIt2B,EANAsC,GAA8C,IAArC8zB,EAAiBzrC,QAAQ,OAClC4rC,GAAgD,IAAtCH,EAAiBzrC,QAAQ,QACnC6rC,EAAQl0B,EAAS,MAAQ,MACzB3a,EAAoB7L,GAAOs6C,GAC3BK,EAAkB9uC,GAAqBA,EAAkB7K,UACzD45C,EAAW,CAAA,EAGf,GAAKrxC,IAAgBjH,GAAWuJ,KACzB4uC,GAAWE,EAAgB5qC,UAAYzP,IAAM,YAAc,IAAIuL,GAAoB4S,UAAUzB,MAAS,KAKtG,CASL,IAAIpM,GARJsT,EAAcq2B,GAAQ,SAAU5tC,EAAQ6U,GACtCxC,GAAiBk7B,GAAWvtC,EAAQiE,GAAY,CAC9C8H,KAAM4hC,EACND,WAAY,IAAIxuC,IAEb3H,GAAkBsd,IAAWi4B,GAAQj4B,EAAU7U,EAAO+tC,GAAQ,CAAE9vC,KAAM+B,EAAQitC,WAAYpzB,GACrG,KAEgCxlB,UAExBie,EAAmBm7B,GAAuBE,GAE9CvqC,GAAQ,CAAC,MAAO,QAAS,SAAU,UAAW,MAAO,MAAO,MAAO,OAAQ,SAAU,YAAY,SAAUkO,GACzG,IAAI48B,EAAmB,QAAR58B,GAAyB,QAARA,IAC5BA,KAAO08B,IAAqBF,GAAmB,UAARx8B,GACzCzS,GAA4BoF,EAAWqN,GAAK,SAAU3U,EAAGyC,GACvD,IAAIsuC,EAAap7B,EAAiB7e,MAAMi6C,WACxC,IAAKQ,GAAYJ,IAAYj2C,GAAS8E,GAAI,MAAe,QAAR2U,QAAgB5b,EACjE,IAAI0G,EAASsxC,EAAWp8B,GAAW,IAAN3U,EAAU,EAAIA,EAAGyC,GAC9C,OAAO8uC,EAAWz6C,KAAO2I,CACnC,GAEA,IAEI0xC,GAAW/3C,GAAekO,EAAW,OAAQ,CAC3CjN,cAAc,EACdhB,IAAK,WACH,OAAOsc,EAAiB7e,MAAMi6C,WAAW3iC,IAC1C,GAEJ,MAjCCwM,EAAcs2B,EAAOM,eAAeP,EAASD,EAAkB9zB,EAAQk0B,GACvEP,GAAuB3gB,SAyCzB,OAPA1d,GAAeoI,EAAao2B,GAAkB,GAAO,GAErDM,EAASN,GAAoBp2B,EAC7BvH,GAAE,CAAE3c,QAAQ,EAAMmN,QAAQ,GAAQytC,GAE7BH,GAASD,EAAOO,UAAU72B,EAAao2B,EAAkB9zB,GAEvDtC,CACT,EC3EI1I,GAAgB9a,GAEpBs6C,GAAiB,SAAUruC,EAAQ+N,EAAKxO,GACtC,IAAK,IAAIrF,KAAO6T,EACVxO,GAAWA,EAAQ+uC,QAAUtuC,EAAO9F,GAAM8F,EAAO9F,GAAO6T,EAAI7T,GAC3D2U,GAAc7O,EAAQ9F,EAAK6T,EAAI7T,GAAMqF,GAC1C,OAAOS,CACX,ECPI/H,GAAalE,GACbulB,GAAwBnkB,GAExByH,GAAclD,EAEdke,GAHkBzgB,GAGQ,WAE9Bo3C,GAAiB,SAAUZ,GACzB,IAAIp2B,EAActf,GAAW01C,GAEzB/wC,IAAe2a,IAAgBA,EAAYK,KAC7C0B,GAAsB/B,EAAaK,GAAS,CAC1C5gB,cAAc,EACdhB,IAAK,WAAc,OAAOvC,IAAO,GAGvC,EChBI6a,GAASva,GACTulB,GAAwBnkB,GACxBk5C,GAAiBl3C,GACjBlD,GAAOyF,GACP6zC,GAAalyC,GACb9D,GAAoBgE,EACpBuxC,GAAUhwC,GACVqV,GAAiBnV,GACjBgV,GAAyBjT,GACzBwvC,GAAavvC,GACbpC,GAAc2T,EACdk8B,GAAU77B,GAA0C67B,QAGpDp6B,GAFsB7B,GAEiBzG,IACvC0jC,GAHsBj9B,GAGuB3E,UAEjD2iC,GAAiB,CACfL,eAAgB,SAAUP,EAASD,EAAkB9zB,EAAQk0B,GAC3D,IAAIx2B,EAAcq2B,GAAQ,SAAU3vC,EAAM4W,GACxC04B,GAAWtvC,EAAMgG,GACjBoO,GAAiBpU,EAAM,CACrB8N,KAAM4hC,EACNrsC,MAAOgN,GAAO,MACd1D,WAAOlV,EACP86B,UAAM96B,EACNqV,KAAM,IAEHnO,KAAaqB,EAAK8M,KAAO,GACzBxT,GAAkBsd,IAAWi4B,GAAQj4B,EAAU5W,EAAK8vC,GAAQ,CAAE9vC,KAAMA,EAAMgvC,WAAYpzB,GACjG,IAEQ5V,EAAYsT,EAAYljB,UAExBie,EAAmBm7B,GAAuBE,GAE1Cc,EAAS,SAAUxwC,EAAM/D,EAAKnD,GAChC,IAEI23C,EAAUptC,EAFViK,EAAQ+G,EAAiBrU,GACzB0wC,EAAQC,EAAS3wC,EAAM/D,GAqBzB,OAlBEy0C,EACFA,EAAM53C,MAAQA,GAGdwU,EAAMilB,KAAOme,EAAQ,CACnBrtC,MAAOA,EAAQmrC,GAAQvyC,GAAK,GAC5BA,IAAKA,EACLnD,MAAOA,EACP23C,SAAUA,EAAWnjC,EAAMilB,KAC3BngB,UAAM3a,EACNm5C,SAAS,GAENtjC,EAAMX,QAAOW,EAAMX,MAAQ+jC,GAC5BD,IAAUA,EAASr+B,KAAOs+B,GAC1B/xC,GAAa2O,EAAMR,OAClB9M,EAAK8M,OAEI,MAAVzJ,IAAeiK,EAAMjK,MAAMA,GAASqtC,IACjC1wC,CACf,EAEQ2wC,EAAW,SAAU3wC,EAAM/D,GAC7B,IAGIy0C,EAHApjC,EAAQ+G,EAAiBrU,GAEzBqD,EAAQmrC,GAAQvyC,GAEpB,GAAc,MAAVoH,EAAe,OAAOiK,EAAMjK,MAAMA,GAEtC,IAAKqtC,EAAQpjC,EAAMX,MAAO+jC,EAAOA,EAAQA,EAAMt+B,KAC7C,GAAIs+B,EAAMz0C,MAAQA,EAAK,OAAOy0C,CAEtC,EAuFI,OArFAN,GAAepqC,EAAW,CAIxB6qC,MAAO,WAKL,IAJA,IACIvjC,EAAQ+G,EADD7e,MAEP+J,EAAO+N,EAAMjK,MACbqtC,EAAQpjC,EAAMX,MACX+jC,GACLA,EAAME,SAAU,EACZF,EAAMD,WAAUC,EAAMD,SAAWC,EAAMD,SAASr+B,UAAO3a,UACpD8H,EAAKmxC,EAAMrtC,OAClBqtC,EAAQA,EAAMt+B,KAEhB9E,EAAMX,MAAQW,EAAMilB,UAAO96B,EACvBkH,GAAa2O,EAAMR,KAAO,EAXnBtX,KAYDsX,KAAO,CAClB,EAIDgkC,OAAU,SAAU70C,GAClB,IAAI+D,EAAOxK,KACP8X,EAAQ+G,EAAiBrU,GACzB0wC,EAAQC,EAAS3wC,EAAM/D,GAC3B,GAAIy0C,EAAO,CACT,IAAIt+B,EAAOs+B,EAAMt+B,KACbwP,EAAO8uB,EAAMD,gBACVnjC,EAAMjK,MAAMqtC,EAAMrtC,OACzBqtC,EAAME,SAAU,EACZhvB,IAAMA,EAAKxP,KAAOA,GAClBA,IAAMA,EAAKq+B,SAAW7uB,GACtBtU,EAAMX,QAAU+jC,IAAOpjC,EAAMX,MAAQyF,GACrC9E,EAAMilB,OAASme,IAAOpjC,EAAMilB,KAAO3Q,GACnCjjB,GAAa2O,EAAMR,OAClB9M,EAAK8M,MACpB,CAAU,QAAS4jC,CACZ,EAIDvrC,QAAS,SAAiBgX,GAIxB,IAHA,IAEIu0B,EAFApjC,EAAQ+G,EAAiB7e,MACzB0Q,EAAgBlQ,GAAKmmB,EAAY1lB,UAAU0D,OAAS,EAAI1D,UAAU,QAAKgB,GAEpEi5C,EAAQA,EAAQA,EAAMt+B,KAAO9E,EAAMX,OAGxC,IAFAzG,EAAcwqC,EAAM53C,MAAO43C,EAAMz0C,IAAKzG,MAE/Bk7C,GAASA,EAAME,SAASF,EAAQA,EAAMD,QAEhD,EAID1kC,IAAK,SAAa9P,GAChB,QAAS00C,EAASn7C,KAAMyG,EACzB,IAGHm0C,GAAepqC,EAAW4V,EAAS,CAGjC7jB,IAAK,SAAakE,GAChB,IAAIy0C,EAAQC,EAASn7C,KAAMyG,GAC3B,OAAOy0C,GAASA,EAAM53C,KACvB,EAGDgT,IAAK,SAAa7P,EAAKnD,GACrB,OAAO03C,EAAOh7C,KAAc,IAARyG,EAAY,EAAIA,EAAKnD,EAC1C,GACC,CAGFkkC,IAAK,SAAalkC,GAChB,OAAO03C,EAAOh7C,KAAMsD,EAAkB,IAAVA,EAAc,EAAIA,EAAOA,EACtD,IAEC6F,IAAa0c,GAAsBrV,EAAW,OAAQ,CACxDjN,cAAc,EACdhB,IAAK,WACH,OAAOsc,EAAiB7e,MAAMsX,IAC/B,IAEIwM,CACR,EACD62B,UAAW,SAAU72B,EAAao2B,EAAkB9zB,GAClD,IAAIm1B,EAAgBrB,EAAmB,YACnCsB,EAA6BxB,GAAuBE,GACpDuB,EAA2BzB,GAAuBuB,GAUtD78B,GAAeoF,EAAao2B,GAAkB,SAAUp7B,EAAUG,GAChEL,GAAiB5e,KAAM,CACrBsY,KAAMijC,EACNhvC,OAAQuS,EACRhH,MAAO0jC,EAA2B18B,GAClCG,KAAMA,EACN8d,UAAM96B,GAEd,IAAO,WAKD,IAJA,IAAI6V,EAAQ2jC,EAAyBz7C,MACjCif,EAAOnH,EAAMmH,KACbi8B,EAAQpjC,EAAMilB,KAEXme,GAASA,EAAME,SAASF,EAAQA,EAAMD,SAE7C,OAAKnjC,EAAMvL,SAAYuL,EAAMilB,KAAOme,EAAQA,EAAQA,EAAMt+B,KAAO9E,EAAMA,MAAMX,OAMjDoH,GAAf,SAATU,EAA+Ci8B,EAAMz0C,IAC5C,WAATwY,EAAiDi8B,EAAM53C,MAC7B,CAAC43C,EAAMz0C,IAAKy0C,EAAM53C,QAFc,IAJ5DwU,EAAMvL,YAAStK,EACRsc,QAAuBtc,GAAW,GAMjD,GAAOmkB,EAAS,UAAY,UAAWA,GAAQ,GAK3C00B,GAAWZ,EACZ,GC5Mc55C,GAKN,OAAO,SAAUk+B,GAC1B,OAAO,WAAiB,OAAOA,EAAKx+B,KAAMiB,UAAU0D,OAAS1D,UAAU,QAAKgB,EAAW,CACzF,GANuBP,ICGvB,SAAWkG,GAEW8zC,KCJTC,GAAM,WAIjB,SAAAA,IAAc/3B,QAAA+3B,GACZ37C,KAAKq7C,QACLr7C,KAAK47C,cAAgB,EACrB57C,KAAK67C,YAAc,EAEnB77C,KAAK87C,eAAiB,CACpB,CACEvH,OAAQ,UACRD,WAAY,UACZE,UAAW,CAAED,OAAQ,UAAWD,WAAY,WAC5CG,MAAO,CAAEF,OAAQ,UAAWD,WAAY,YAE1C,CACEC,OAAQ,UACRD,WAAY,UACZE,UAAW,CAAED,OAAQ,UAAWD,WAAY,WAC5CG,MAAO,CAAEF,OAAQ,UAAWD,WAAY,YAE1C,CACEC,OAAQ,UACRD,WAAY,UACZE,UAAW,CAAED,OAAQ,UAAWD,WAAY,WAC5CG,MAAO,CAAEF,OAAQ,UAAWD,WAAY,YAE1C,CACEC,OAAQ,UACRD,WAAY,UACZE,UAAW,CAAED,OAAQ,UAAWD,WAAY,WAC5CG,MAAO,CAAEF,OAAQ,UAAWD,WAAY,YAE1C,CACEC,OAAQ,UACRD,WAAY,UACZE,UAAW,CAAED,OAAQ,UAAWD,WAAY,WAC5CG,MAAO,CAAEF,OAAQ,UAAWD,WAAY,YAE1C,CACEC,OAAQ,UACRD,WAAY,UACZE,UAAW,CAAED,OAAQ,UAAWD,WAAY,WAC5CG,MAAO,CAAEF,OAAQ,UAAWD,WAAY,YAE1C,CACEC,OAAQ,UACRD,WAAY,UACZE,UAAW,CAAED,OAAQ,UAAWD,WAAY,WAC5CG,MAAO,CAAEF,OAAQ,UAAWD,WAAY,YAE1C,CACEC,OAAQ,UACRD,WAAY,UACZE,UAAW,CAAED,OAAQ,UAAWD,WAAY,WAC5CG,MAAO,CAAEF,OAAQ,UAAWD,WAAY,YAE1C,CACEC,OAAQ,UACRD,WAAY,UACZE,UAAW,CAAED,OAAQ,UAAWD,WAAY,WAC5CG,MAAO,CAAEF,OAAQ,UAAWD,WAAY,YAE1C,CACEC,OAAQ,UACRD,WAAY,UACZE,UAAW,CAAED,OAAQ,UAAWD,WAAY,WAC5CG,MAAO,CAAEF,OAAQ,UAAWD,WAAY,YAG1C,CACEC,OAAQ,UACRD,WAAY,UACZE,UAAW,CAAED,OAAQ,UAAWD,WAAY,WAC5CG,MAAO,CAAEF,OAAQ,UAAWD,WAAY,YAG1C,CACEC,OAAQ,UACRD,WAAY,UACZE,UAAW,CAAED,OAAQ,UAAWD,WAAY,WAC5CG,MAAO,CAAEF,OAAQ,UAAWD,WAAY,YAE1C,CACEC,OAAQ,UACRD,WAAY,UACZE,UAAW,CAAED,OAAQ,UAAWD,WAAY,WAC5CG,MAAO,CAAEF,OAAQ,UAAWD,WAAY,YAE1C,CACEC,OAAQ,UACRD,WAAY,UACZE,UAAW,CAAED,OAAQ,UAAWD,WAAY,WAC5CG,MAAO,CAAEF,OAAQ,UAAWD,WAAY,YAE1C,CACEC,OAAQ,UACRD,WAAY,UACZE,UAAW,CAAED,OAAQ,UAAWD,WAAY,WAC5CG,MAAO,CAAEF,OAAQ,UAAWD,WAAY,YAE1C,CACEC,OAAQ,UACRD,WAAY,UACZE,UAAW,CAAED,OAAQ,UAAWD,WAAY,WAC5CG,MAAO,CAAEF,OAAQ,UAAWD,WAAY,YAE1C,CACEC,OAAQ,UACRD,WAAY,UACZE,UAAW,CAAED,OAAQ,UAAWD,WAAY,WAC5CG,MAAO,CAAEF,OAAQ,UAAWD,WAAY,YAE1C,CACEC,OAAQ,UACRD,WAAY,UACZE,UAAW,CAAED,OAAQ,UAAWD,WAAY,WAC5CG,MAAO,CAAEF,OAAQ,UAAWD,WAAY,YAE1C,CACEC,OAAQ,UACRD,WAAY,UACZE,UAAW,CAAED,OAAQ,UAAWD,WAAY,WAC5CG,MAAO,CAAEF,OAAQ,UAAWD,WAAY,YAG1C,CACEC,OAAQ,UACRD,WAAY,UACZE,UAAW,CAAED,OAAQ,UAAWD,WAAY,WAC5CG,MAAO,CAAEF,OAAQ,UAAWD,WAAY,aAI5Ct0C,KAAK8L,QAAU,GACf9L,KAAK+7C,eAAiB,CACpBC,kBAAkB,GAEpBC,GAAcj8C,KAAK8L,QAAS9L,KAAK+7C,eACnC,CAmFC,OAjFDhuB,GAAA4tB,EAAA,CAAA,CAAAl1C,IAAA,aAAAnD,MAIA,SAAWwI,GACT,IAAMowC,EAAe,CAAC,oBAEtB,QAAgBj6C,IAAZ6J,EACF,IAAK,IAAMqwC,KAAarwC,EACtB,GAAIzJ,OAAOzB,UAAUH,eAAeK,KAAKgL,EAASqwC,KACP,IAArCpN,GAAAmN,GAAYp7C,KAAZo7C,EAAqBC,GAAmB,CAC1C,IAAMC,EAAQtwC,EAAQqwC,GACtBn8C,KAAKwnC,IAAI2U,EAAWC,EACtB,CAIR,GAEA,CAAA31C,IAAA,QAAAnD,MAGA,WACEtD,KAAKq8C,QAAU,IAAAC,GACft8C,KAAKu8C,YAAc,EACrB,GAEA,CAAA91C,IAAA,MAAAnD,MAQA,SAAIk5C,GAAgC,IAArBC,IAAYx7C,UAAA0D,OAAA,QAAA1C,IAAAhB,UAAA,KAAAA,UAAA,GACrBm7C,EAAQp8C,KAAKq8C,QAAQ95C,IAAIi6C,GAE7B,QAAcv6C,IAAVm6C,GAAuBK,EACzB,IACoC,IAAlCz8C,KAAK8L,QAAQkwC,kBACbh8C,KAAKu8C,YAAY53C,OAAS,EAC1B,CAEA,IAAMkJ,EAAQ7N,KAAK67C,YAAc77C,KAAKu8C,YAAY53C,SAChD3E,KAAK67C,aACPO,EAAQ,CAAA,GACFzO,MAAQ3tC,KAAKq8C,QAAQ95C,IAAIvC,KAAKu8C,YAAY1uC,IAChD7N,KAAKq8C,QAAQ/lC,IAAIkmC,EAAWJ,EAC9B,KAAO,CAEL,IAAMvuC,EAAQ7N,KAAK47C,cAAgB57C,KAAK87C,eAAen3C,OACvD3E,KAAK47C,iBACLQ,EAAQ,CAAA,GACFzO,MAAQ3tC,KAAK87C,eAAejuC,GAClC7N,KAAKq8C,QAAQ/lC,IAAIkmC,EAAWJ,EAC9B,CAGF,OAAOA,CACT,GAEA,CAAA31C,IAAA,MAAAnD,MAUA,SAAI64C,EAAWhiC,GAQb,OAJKna,KAAKq8C,QAAQ9lC,IAAI4lC,IACpBn8C,KAAKu8C,YAAYz1C,KAAKq1C,GAExBn8C,KAAKq8C,QAAQ/lC,IAAI6lC,EAAWhiC,GACrBA,CACT,KAACwhC,CAAA,CA/NgB,GCFXr7C,GAIN,CAAEiM,OAAQ,SAAUG,MAAM,GAAQ,CAClC6iC,MAAO,SAAe9hC,GAEpB,OAAOA,GAAWA,CACnB,ICPH,SAAW/L,GAEWksB,OAAO2hB,OCDzBmN,GAFSp8C,EAEeq8C,SAK5BC,GAAiBhvB,OAAO+uB,UAAY,SAAkBj9C,GACpD,MAAoB,iBAANA,GAAkBg9C,GAAeh9C,EACjD,ECTQY,GAKN,CAAEiM,OAAQ,SAAUG,MAAM,GAAQ,CAAEiwC,SAJjBj7C,KCArB,SAAWA,GAEWksB,OAAO+uB,UCFzBE,GAAQn7C,GAAwCslB,KAD5C1mB,GAQN,CAAEiM,OAAQ,QAASK,OAAO,EAAMG,QANRrJ,GAEc,SAIoB,CAC1DsjB,KAAM,SAAcL,GAClB,OAAOk2B,GAAM78C,KAAM2mB,EAAY1lB,UAAU0D,OAAS,EAAI1D,UAAU,QAAKgB,EACtE,ICVH,IAEA+kB,GAFmBtlB,GAEW,SAASslB,KCHnCniB,GAAgBvE,GAChBoE,GAAShD,GAET0d,GAAiBlJ,MAAMtV,UCHvBsQ,GDKa,SAAUxR,GACzB,IAAIyR,EAAMzR,EAAGsnB,KACb,OAAOtnB,IAAO0f,IAAmBva,GAAcua,GAAgB1f,IAAOyR,IAAQiO,GAAe4H,KAAQtiB,GAASyM,CAChH,OCNiBD,ICHF,SAASmkB,GAAuBt1B,GAC7C,QAAa,IAATA,EACF,MAAM,IAAIu1B,eAAe,6DAE3B,OAAOv1B,CACT,CCJA,ICAA8a,GDAava,YEALA,GAKN,CAAEiM,OAAQ,SAAUG,MAAM,GAAQ,CAClCyP,eALmBza,KCArB,ICDAya,GDCWza,GAEWW,OAAO8Z,6BEHhB7b,ICCE,SAASw8C,GAAgBzvB,EAAG0vB,GACzC,IAAIjuB,EAKJ,OAJAguB,GAAkBE,GAAyBC,GAAsBnuB,EAAWkuB,IAAwBl8C,KAAKguB,GAAY,SAAyBzB,EAAG0vB,GAE/I,OADA1vB,EAAE/Q,UAAYygC,EACP1vB,CACX,EACSyvB,GAAgBzvB,EAAG0vB,EAC5B,CCNe,SAASG,GAAU/nB,EAAUC,GAC1C,GAA0B,mBAAfA,GAA4C,OAAfA,EACtC,MAAM,IAAIpxB,UAAU,sDAEtBmxB,EAASv0B,UAAYotC,GAAe5Y,GAAcA,EAAWx0B,UAAW,CACtEma,YAAa,CACXzX,MAAO6xB,EACP3xB,UAAU,EACVD,cAAc,KAGlBuqB,GAAuBqH,EAAU,YAAa,CAC5C3xB,UAAU,IAER4xB,GAAYjZ,GAAegZ,EAAUC,EAC3C,CChBe,SAAS+nB,GAA2Bp9C,EAAMe,GACvD,GAAIA,IAA2B,WAAlBssB,GAAQtsB,IAAsC,mBAATA,GAChD,OAAOA,EACF,QAAa,IAATA,EACT,MAAM,IAAIkD,UAAU,4DAEtB,OAAOo5C,GAAsBr9C,EAC/B,CCRA,ICAAib,GDAa1a,YEEE,SAAS+8C,GAAgBhwB,GACtC,IAAIyB,EAIJ,OAHAuuB,GAAkBL,GAAyBC,GAAsBnuB,EAAWwuB,IAAwBx8C,KAAKguB,GAAY,SAAyBzB,GAC5I,OAAOA,EAAE/Q,WAAaghC,GAAuBjwB,EACjD,EACSgwB,GAAgBhwB,EACzB,CCPe,SAASkwB,GAAgBtvC,EAAKxH,EAAKnD,GAYhD,OAXAmD,EAAMoC,GAAcpC,MACTwH,EACT6f,GAAuB7f,EAAKxH,EAAK,CAC/BnD,MAAOA,EACPL,YAAY,EACZM,cAAc,EACdC,UAAU,IAGZyK,EAAIxH,GAAOnD,EAEN2K,CACT,kDCfA,IAAIqf,EAAUhtB,GACVitB,EAAmB7rB,GACvB,SAAS0rB,EAAQC,GAGf,OAAQlY,EAAAC,QAAiBgY,EAAU,mBAAqBE,GAAW,iBAAmBC,EAAmB,SAAUF,GACjH,cAAcA,CACf,EAAG,SAAUA,GACZ,OAAOA,GAAK,mBAAqBC,GAAWD,EAAEtS,cAAgBuS,GAAWD,IAAMC,EAAQ1sB,UAAY,gBAAkBysB,CACtH,EAAElY,EAA4BC,QAAAooC,YAAA,EAAMroC,EAAOC,QAAiB,QAAID,EAAOC,QAAUgY,EAAQC,EAC3F,CACDlY,EAAAC,QAAiBgY,EAASjY,EAA4BC,QAAAooC,YAAA,EAAMroC,EAAOC,QAAiB,QAAID,EAAOC,+BCV/FzF,GCAarP,GCAT+G,GAAS/G,GACT6vB,GAAUzuB,GACVqmB,GAAiCrkB,EACjCyH,GAAuBlF,GCHvB7B,GAAW9D,GACX8K,GAA8B1J,GCC9B+7C,GAASvU,MACT9+B,GAHc9J,EAGQ,GAAG8J,SAEzBszC,GAAgC14C,OAAO,IAAIy4C,GAAuB,UAAXtU,OAEvDwU,GAA2B,uBAC3BC,GAAwBD,GAAyBp9C,KAAKm9C,ICPtDt6C,GAA2B1B,EAE/Bm8C,IAHYv9C,GAGY,WACtB,IAAIF,EAAQ,IAAI8oC,MAAM,KACtB,QAAM,UAAW9oC,KAEjBiC,OAAOC,eAAelC,EAAO,QAASgD,GAAyB,EAAG,IAC3C,IAAhBhD,EAAM+oC,MACf,ICTI/9B,GAA8B9K,GAC9Bw9C,GFSa,SAAU3U,EAAO4U,GAChC,GAAIH,IAAyC,iBAATzU,IAAsBsU,GAAOO,kBAC/D,KAAOD,KAAe5U,EAAQ/+B,GAAQ++B,EAAOwU,GAA0B,IACvE,OAAOxU,CACX,EEZI8U,GAA0Bv6C,GAG1Bw6C,GAAoBhV,MAAMgV,kBCL1B58C,GAAWhB,GCAXic,GAAIjc,GACJuE,GAAgBnD,GAChBsZ,GAAiBtX,GACjByY,GAAiBlW,GACjBk4C,GNCa,SAAU5xC,EAAQrF,EAAQk3C,GAIzC,IAHA,IAAInvC,EAAOkhB,GAAQjpB,GACf5E,EAAiB6I,GAAqBrI,EACtCH,EAA2BolB,GAA+BjlB,EACrD+L,EAAI,EAAGA,EAAII,EAAKtK,OAAQkK,IAAK,CACpC,IAAIpI,EAAMwI,EAAKJ,GACVxH,GAAOkF,EAAQ9F,IAAU23C,GAAc/2C,GAAO+2C,EAAY33C,IAC7DnE,EAAeiK,EAAQ9F,EAAK9D,EAAyBuE,EAAQT,GAEhE,CACH,EMVIoU,GAAS/S,GACTsD,GAA8B/B,GAC9BjG,GAA2BmG,EAC3B80C,GLHa,SAAU30C,EAAGoC,GACxB1H,GAAS0H,IAAY,UAAWA,GAClCV,GAA4B1B,EAAG,QAASoC,EAAQwyC,MAEpD,EKAIC,GFFa,SAAUn+C,EAAOwQ,EAAGu4B,EAAO4U,GACtCE,KACEC,GAAmBA,GAAkB99C,EAAOwQ,GAC3CxF,GAA4BhL,EAAO,QAAS09C,GAAgB3U,EAAO4U,IAE5E,EEFI1E,GAAUv8B,GACV0hC,GDTa,SAAUr8C,EAAUs8C,GACnC,YAAoBx8C,IAAbE,EAAyBlB,UAAU0D,OAAS,EAAI,GAAK85C,EAAWn9C,GAASa,EAClF,ECUIuU,GAFkBqG,GAEc,eAChC0gC,GAASvU,MACTpiC,GAAO,GAAGA,KAEV43C,GAAkB,SAAwBC,EAAQ3V,GACpD,IACIx+B,EADAo0C,EAAa/5C,GAAcg6C,GAAyB7+C,MAEpDmc,GACF3R,EAAO2R,GAAe,IAAIshC,GAAUmB,EAAa5jC,GAAehb,MAAQ6+C,KAExEr0C,EAAOo0C,EAAa5+C,KAAO6a,GAAOgkC,IAClCzzC,GAA4BZ,EAAMkM,GAAe,eAEnCzU,IAAZ+mC,GAAuB59B,GAA4BZ,EAAM,UAAWg0C,GAAwBxV,IAChGuV,GAAkB/zC,EAAMk0C,GAAiBl0C,EAAK2+B,MAAO,GACjDloC,UAAU0D,OAAS,GAAG05C,GAAkB7zC,EAAMvJ,UAAU,IAC5D,IAAI69C,EAAc,GAGlB,OAFAzF,GAAQsF,EAAQ73C,GAAM,CAAE0D,KAAMs0C,IAC9B1zC,GAA4BZ,EAAM,SAAUs0C,GACrCt0C,CACT,EAEI2R,GAAgBA,GAAeuiC,GAAiBjB,IAC/CU,GAA0BO,GAAiBjB,GAAQ,CAAEt1C,MAAM,IAEhE,IAAI02C,GAA0BH,GAAgB99C,UAAYia,GAAO4iC,GAAO78C,UAAW,CACjFma,YAAa3X,GAAyB,EAAGs7C,IACzC1V,QAAS5lC,GAAyB,EAAG,IACrC+E,KAAM/E,GAAyB,EAAG,oBAKpCmZ,GAAE,CAAE3c,QAAQ,EAAMmb,aAAa,EAAM7K,MAAO,GAAK,CAC/C6uC,eAAgBL,KChDlB,ICuBIM,GAAWC,GAAOC,GAASC,GDpB/BC,GAA6C,YAF/B19C,EADDpB,EAGmB4E,SEH5B4a,GAAgBxf,GAChB6F,GAAczE,GAEdqC,GAAaC,UAGjBq7C,GAAiB,SAAUl9C,GACzB,GAAI2d,GAAc3d,GAAW,OAAOA,EACpC,MAAM,IAAI4B,GAAWoC,GAAYhE,GAAY,wBAC/C,ECTIuI,GAAWpK,GACX++C,GAAe39C,GACfoC,GAAoBJ,EAGpBygB,GAFkBle,GAEQ,WAI9Bq5C,GAAiB,SAAU51C,EAAG61C,GAC5B,IACIvvC,EADAY,EAAIlG,GAAShB,GAAGqR,YAEpB,YAAa9Y,IAAN2O,GAAmB9M,GAAkBkM,EAAItF,GAASkG,GAAGuT,KAAYo7B,EAAqBF,GAAarvC,EAC5G,ECVAwvC,GAAiB,qCAAqCj/C,KAHtCD,IHAZV,GAASU,EACTO,GAAQa,EACRlB,GAAOkD,GACPxB,GAAa+D,EACboB,GAASO,GACT1H,GAAQ4H,EACRiR,GAAO1P,GACP8G,GAAa5G,GACbR,GAAgBuC,GAChBwoB,GAA0BvoB,GAC1Bk0C,GAAS3iC,GACT4iC,GAAUviC,GAEV7G,GAAM1W,GAAO+/C,aACbtE,GAAQz7C,GAAOggD,eACf16C,GAAUtF,GAAOsF,QACjB26C,GAAWjgD,GAAOigD,SAClB5/C,GAAWL,GAAOK,SAClB6/C,GAAiBlgD,GAAOkgD,eACxB96C,GAASpF,GAAOoF,OAChB+6C,GAAU,EACVC,GAAQ,CAAA,EACRC,GAAqB,qBAGzB//C,IAAM,WAEJ8+C,GAAYp/C,GAAOsgD,QACrB,IAEA,IAAIC,GAAM,SAAU74C,GAClB,GAAID,GAAO24C,GAAO14C,GAAK,CACrB,IAAIlG,EAAK4+C,GAAM14C,UACR04C,GAAM14C,GACblG,GACD,CACH,EAEIg/C,GAAS,SAAU94C,GACrB,OAAO,WACL64C,GAAI74C,EACR,CACA,EAEI+4C,GAAgB,SAAU9qC,GAC5B4qC,GAAI5qC,EAAMxL,KACZ,EAEIu2C,GAAyB,SAAUh5C,GAErC1H,GAAO2gD,YAAYv7C,GAAOsC,GAAK03C,GAAUwB,SAAW,KAAOxB,GAAUyB,KACvE,EAGKnqC,IAAQ+kC,KACX/kC,GAAM,SAAsBke,GAC1BV,GAAwB7yB,UAAU0D,OAAQ,GAC1C,IAAIvD,EAAKc,GAAWsyB,GAAWA,EAAUv0B,GAASu0B,GAC9C7jB,EAAOR,GAAWlP,UAAW,GAKjC,OAJA++C,KAAQD,IAAW,WACjBl/C,GAAMO,OAAIa,EAAW0O,EAC3B,EACIsuC,GAAMc,IACCA,EACX,EACE1E,GAAQ,SAAwB/zC,UACvB04C,GAAM14C,EACjB,EAEMo4C,GACFT,GAAQ,SAAU33C,GAChBpC,GAAQw7C,SAASN,GAAO94C,GAC9B,EAEau4C,IAAYA,GAASlvB,IAC9BsuB,GAAQ,SAAU33C,GAChBu4C,GAASlvB,IAAIyvB,GAAO94C,GAC1B,EAGaw4C,KAAmBL,IAE5BN,IADAD,GAAU,IAAIY,IACCa,MACfzB,GAAQ0B,MAAMC,UAAYR,GAC1BpB,GAAQz+C,GAAK2+C,GAAKoB,YAAapB,KAI/Bv/C,GAAO0V,kBACPpT,GAAWtC,GAAO2gD,eACjB3gD,GAAOkhD,eACR9B,IAAoC,UAAvBA,GAAUwB,WACtBtgD,GAAMogD,KAEPrB,GAAQqB,GACR1gD,GAAO0V,iBAAiB,UAAW+qC,IAAe,IAGlDpB,GADSgB,MAAsBl3C,GAAc,UACrC,SAAUzB,GAChByR,GAAKsB,YAAYtR,GAAc,WAAWk3C,IAAsB,WAC9DlnC,GAAK++B,YAAY93C,MACjBmgD,GAAI74C,EACZ,CACA,EAGY,SAAUA,GAChBwtB,WAAWsrB,GAAO94C,GAAK,EAC7B,GAIA,IAAAy5C,GAAiB,CACfzqC,IAAKA,GACL+kC,MAAOA,IIlHL2F,GAAQ,WACVhhD,KAAKihD,KAAO,KACZjhD,KAAKkhD,KAAO,IACd,EAEKC,GAACvgD,UAAY,CAChB4mC,IAAK,SAAUnZ,GACb,IAAI6sB,EAAQ,CAAE7sB,KAAMA,EAAMzR,KAAM,MAC5BskC,EAAOlhD,KAAKkhD,KACZA,EAAMA,EAAKtkC,KAAOs+B,EACjBl7C,KAAKihD,KAAO/F,EACjBl7C,KAAKkhD,KAAOhG,CACb,EACD34C,IAAK,WACH,IAAI24C,EAAQl7C,KAAKihD,KACjB,GAAI/F,EAGF,OADa,QADFl7C,KAAKihD,KAAO/F,EAAMt+B,QACV5c,KAAKkhD,KAAO,MACxBhG,EAAM7sB,IAEhB,GAGH,ICNI+yB,GAAQC,GAAQ5mB,GAAM6mB,GAASC,GDMnCvB,GAAiBgB,GErBjBQ,GAAiB,oBAAoBjhD,KAFrBD,KAEyD,oBAAVmhD,OCA/DC,GAAiB,qBAAqBnhD,KAFtBD,IFAZV,GAASU,EACTE,GAAOkB,GACPiB,GAA2Be,EAA2DZ,EACtF6+C,GAAY17C,GAA6BqQ,IACzC0qC,GAAQp5C,GACR63C,GAAS33C,GACT85C,GAAgBv4C,GAChBw4C,GAAkBt4C,GAClBm2C,GAAUp0C,GAEVw2C,GAAmBliD,GAAOkiD,kBAAoBliD,GAAOmiD,uBACrDlgD,GAAWjC,GAAOiC,SAClBqD,GAAUtF,GAAOsF,QACjB88C,GAAUpiD,GAAOoiD,QAEjBC,GAA2Bt/C,GAAyB/C,GAAQ,kBAC5DsiD,GAAYD,IAA4BA,GAAyB3+C,MAIrE,IAAK4+C,GAAW,CACd,IAAIlC,GAAQ,IAAIgB,GAEZmB,GAAQ,WACV,IAAIjxC,EAAQ9P,EAEZ,IADIs+C,KAAYxuC,EAAShM,GAAQgV,SAAShJ,EAAOkxC,OAC1ChhD,EAAK4+C,GAAMz9C,WAChBnB,GACD,CAAC,MAAOhB,GAEP,MADI4/C,GAAMiB,MAAMG,KACVhhD,CACP,CACG8Q,GAAQA,EAAOmxC,OACvB,EAIO5C,IAAWC,IAAYmC,KAAmBC,KAAoBjgD,IAQvD+/C,IAAiBI,IAAWA,GAAQM,UAE9ChB,GAAUU,GAAQM,aAAQrgD,IAElB8Y,YAAcinC,GACtBT,GAAO/gD,GAAK8gD,GAAQC,KAAMD,IAC1BF,GAAS,WACPG,GAAKY,GACX,GAEazC,GACT0B,GAAS,WACPl8C,GAAQw7C,SAASyB,GACvB,GASIR,GAAYnhD,GAAKmhD,GAAW/hD,IAC5BwhD,GAAS,WACPO,GAAUQ,GAChB,IAhCId,IAAS,EACT5mB,GAAO54B,GAAS0gD,eAAe,IAC/B,IAAIT,GAAiBK,IAAOK,QAAQ/nB,GAAM,CAAEgoB,eAAe,IAC3DrB,GAAS,WACP3mB,GAAK1wB,KAAOs3C,IAAUA,EAC5B,GA8BEa,GAAY,SAAU9gD,GACf4+C,GAAMiB,MAAMG,KACjBpB,GAAMxY,IAAIpmC,EACd,CACA,CAEA,IAAAshD,GAAiBR,GG/EjBS,GAAiB,SAAUxiD,GACzB,IACE,MAAO,CAAEC,OAAO,EAAOkD,MAAOnD,IAC/B,CAAC,MAAOC,GACP,MAAO,CAAEA,OAAO,EAAMkD,MAAOlD,EAC9B,CACH,ECJAwiD,GAFatiD,EAEW0hD,QCDxBa,GAAgC,iBAAR19C,MAAoBA,MAA+B,iBAAhBA,KAAKhC,QCEhE2/C,IAHcxiD,KACAoB,IAGQ,iBAAV5B,QACY,iBAAZ+B,SCLRjC,GAASU,EACTyiD,GAA2BrhD,GAC3BQ,GAAawB,EACbkG,GAAW3D,GACXsZ,GAAgB3X,GAChBM,GAAkBJ,GAClBk7C,GAAa35C,GACb45C,GAAU15C,GAEVhE,GAAagG,GAEb23C,GAAyBH,IAA4BA,GAAyBniD,UAC9EujB,GAAUjc,GAAgB,WAC1Bi7C,IAAc,EACdC,GAAiClhD,GAAWtC,GAAOyjD,uBAEnDC,GAA6B15C,GAAS,WAAW,WACnD,IAAI25C,EAA6BhkC,GAAcwjC,IAC3CS,EAAyBD,IAA+Bv+C,OAAO+9C,IAInE,IAAKS,GAAyC,KAAfj+C,GAAmB,OAAO,EAEzD,IAAiB29C,GAA8B,QAAKA,GAAgC,QAAI,OAAO,EAI/F,IAAK39C,IAAcA,GAAa,KAAO,cAAchF,KAAKgjD,GAA6B,CAErF,IAAIjC,EAAU,IAAIyB,IAAyB,SAAUT,GAAWA,EAAQ,EAAG,IACvEmB,EAAc,SAAUtjD,GAC1BA,GAAK,WAAY,IAAiB,WAAY,GACpD,EAII,IAHkBmhD,EAAQvmC,YAAc,IAC5BoJ,IAAWs/B,IACvBN,GAAc7B,EAAQC,MAAK,WAA2B,cAAakC,GACjD,OAAO,CAE7B,CAAI,OAAQD,IAA2BR,IAAcC,MAAaG,EAClE,IAEAM,GAAiB,CACfzyC,YAAaqyC,GACbK,gBAAiBP,GACjBD,YAAaA,UC7CX/8C,GAAY9F,GAEZyD,GAAaC,UAEb4/C,GAAoB,SAAUhzC,GAChC,IAAI0xC,EAASuB,EACb7jD,KAAKshD,QAAU,IAAI1wC,GAAE,SAAUkzC,EAAWC,GACxC,QAAgB9hD,IAAZqgD,QAAoCrgD,IAAX4hD,EAAsB,MAAM,IAAI9/C,GAAW,2BACxEu+C,EAAUwB,EACVD,EAASE,CACb,IACE/jD,KAAKsiD,QAAUl8C,GAAUk8C,GACzBtiD,KAAK6jD,OAASz9C,GAAUy9C,EAC1B,EAIgBG,GAAAlhD,EAAG,SAAU8N,GAC3B,OAAO,IAAIgzC,GAAkBhzC,EAC/B,ECnBA,IAgDIqzC,GAAUC,GAhDV3nC,GAAIjc,GAEJo/C,GAAUh8C,GACV9D,GAASqG,EACTnF,GAAO8G,EACPwT,GAAgBtT,GAEhB4T,GAAiBnS,GACjBuxC,GAAaxvC,GACblF,GAAYmF,GACZrJ,GAAa4a,EACb1Y,GAAW+Y,GACX28B,GAAa/8B,GACbuiC,GAAqBriC,GACrB8jC,GAAOz5B,GAA6BhR,IACpC4rC,GAAY16B,GACZ28B,GChBa,SAAUj7C,EAAGyC,GAC5B,IAEuB,IAArB1K,UAAU0D,OAAe0kC,QAAQjpC,MAAM8I,GAAKmgC,QAAQjpC,MAAM8I,EAAGyC,EACjE,CAAI,MAAOvL,GAAsB,CACjC,EDYIuiD,GAAUh7B,GACVq5B,GAAQn5B,GACRpJ,GAAsBqJ,GACtBi7B,GAA2B/6B,GAC3Bo8B,GAA8Bn8B,GAC9Bo8B,GAA6Bn8B,GAE7Bo8B,GAAU,UACVhB,GAA6Bc,GAA4BnzC,YACzDmyC,GAAiCgB,GAA4BT,gBAE7DY,GAA0B9lC,GAAoBrG,UAAUksC,IACxD1lC,GAAmBH,GAAoBnI,IACvC4sC,GAAyBH,IAA4BA,GAAyBniD,UAC9E4jD,GAAqBzB,GACrB0B,GAAmBvB,GACnBl/C,GAAYpE,GAAOoE,UACnBnC,GAAWjC,GAAOiC,SAClBqD,GAAUtF,GAAOsF,QACjB8+C,GAAuBK,GAA2BvhD,EAClD4hD,GAA8BV,GAE9BW,MAAoB9iD,IAAYA,GAASwmC,aAAezoC,GAAO4oC,eAC/Doc,GAAsB,qBAWtBC,GAAa,SAAUnlD,GACzB,IAAI6hD,EACJ,SAAOn9C,GAAS1E,KAAOwC,GAAWq/C,EAAO7hD,EAAG6hD,QAAQA,CACtD,EAEIuD,GAAe,SAAUC,EAAUjtC,GACrC,IAMInP,EAAQ44C,EAAMyD,EANd1hD,EAAQwU,EAAMxU,MACd2hD,EAfU,IAeLntC,EAAMA,MACX0c,EAAUywB,EAAKF,EAASE,GAAKF,EAASG,KACtC5C,EAAUyC,EAASzC,QACnBuB,EAASkB,EAASlB,OAClB3pC,EAAS6qC,EAAS7qC,OAEtB,IACMsa,GACGywB,IApBK,IAqBJntC,EAAMqtC,WAAyBC,GAAkBttC,GACrDA,EAAMqtC,UAvBA,IAyBQ,IAAZ3wB,EAAkB7rB,EAASrF,GAEzB4W,GAAQA,EAAOmoC,QACnB15C,EAAS6rB,EAAQlxB,GACb4W,IACFA,EAAOkoC,OACP4C,GAAS,IAGTr8C,IAAWo8C,EAASzD,QACtBuC,EAAO,IAAI7/C,GAAU,yBACZu9C,EAAOsD,GAAWl8C,IAC3B7H,GAAKygD,EAAM54C,EAAQ25C,EAASuB,GACvBvB,EAAQ35C,IACVk7C,EAAOvgD,EACf,CAAC,MAAOlD,GACH8Z,IAAW8qC,GAAQ9qC,EAAOkoC,OAC9ByB,EAAOzjD,EACR,CACH,EAEIghD,GAAS,SAAUtpC,EAAOutC,GACxBvtC,EAAMwtC,WACVxtC,EAAMwtC,UAAW,EACjBpD,IAAU,WAGR,IAFA,IACI6C,EADAQ,EAAYztC,EAAMytC,UAEfR,EAAWQ,EAAUhjD,OAC1BuiD,GAAaC,EAAUjtC,GAEzBA,EAAMwtC,UAAW,EACbD,IAAavtC,EAAMqtC,WAAWK,GAAY1tC,EAClD,IACA,EAEI0wB,GAAgB,SAAUrgC,EAAMm5C,EAASmE,GAC3C,IAAIlwC,EAAOif,EACPmwB,KACFpvC,EAAQ1T,GAASwmC,YAAY,UACvBiZ,QAAUA,EAChB/rC,EAAMkwC,OAASA,EACflwC,EAAM+yB,UAAUngC,GAAM,GAAO,GAC7BvI,GAAO4oC,cAAcjzB,IAChBA,EAAQ,CAAE+rC,QAASA,EAASmE,OAAQA,IACtCrC,KAAmC5uB,EAAU50B,GAAO,KAAOuI,IAAQqsB,EAAQjf,GACvEpN,IAASy8C,IAAqBT,GAAiB,8BAA+BsB,EACzF,EAEID,GAAc,SAAU1tC,GAC1BhX,GAAKigD,GAAMnhD,IAAQ,WACjB,IAGI+I,EAHA24C,EAAUxpC,EAAME,OAChB1U,EAAQwU,EAAMxU,MAGlB,GAFmBoiD,GAAY5tC,KAG7BnP,EAASg6C,IAAQ,WACXjD,GACFx6C,GAAQ+Q,KAAK,qBAAsB3S,EAAOg+C,GACrC9Y,GAAcoc,GAAqBtD,EAASh+C,EAC3D,IAEMwU,EAAMqtC,UAAYzF,IAAWgG,GAAY5tC,GArF/B,EADF,EAuFJnP,EAAOvI,OAAO,MAAMuI,EAAOrF,KAErC,GACA,EAEIoiD,GAAc,SAAU5tC,GAC1B,OA7FY,IA6FLA,EAAMqtC,YAA0BrtC,EAAM5G,MAC/C,EAEIk0C,GAAoB,SAAUttC,GAChChX,GAAKigD,GAAMnhD,IAAQ,WACjB,IAAI0hD,EAAUxpC,EAAME,OAChB0nC,GACFx6C,GAAQ+Q,KAAK,mBAAoBqrC,GAC5B9Y,GAzGa,mBAyGoB8Y,EAASxpC,EAAMxU,MAC3D,GACA,EAEI9C,GAAO,SAAUY,EAAI0W,EAAO6tC,GAC9B,OAAO,SAAUriD,GACflC,EAAG0W,EAAOxU,EAAOqiD,EACrB,CACA,EAEIC,GAAiB,SAAU9tC,EAAOxU,EAAOqiD,GACvC7tC,EAAM0G,OACV1G,EAAM0G,MAAO,EACTmnC,IAAQ7tC,EAAQ6tC,GACpB7tC,EAAMxU,MAAQA,EACdwU,EAAMA,MArHO,EAsHbspC,GAAOtpC,GAAO,GAChB,EAEI+tC,GAAkB,SAAU/tC,EAAOxU,EAAOqiD,GAC5C,IAAI7tC,EAAM0G,KAAV,CACA1G,EAAM0G,MAAO,EACTmnC,IAAQ7tC,EAAQ6tC,GACpB,IACE,GAAI7tC,EAAME,SAAW1U,EAAO,MAAM,IAAIU,GAAU,oCAChD,IAAIu9C,EAAOsD,GAAWvhD,GAClBi+C,EACFW,IAAU,WACR,IAAI/H,EAAU,CAAE37B,MAAM,GACtB,IACE1d,GAAKygD,EAAMj+C,EACT9C,GAAKqlD,GAAiB1L,EAASriC,GAC/BtX,GAAKolD,GAAgBzL,EAASriC,GAEjC,CAAC,MAAO1X,GACPwlD,GAAezL,EAAS/5C,EAAO0X,EAChC,CACT,KAEMA,EAAMxU,MAAQA,EACdwU,EAAMA,MA/II,EAgJVspC,GAAOtpC,GAAO,GAEjB,CAAC,MAAO1X,GACPwlD,GAAe,CAAEpnC,MAAM,GAASpe,EAAO0X,EACxC,CAzBsB,CA0BzB,EAGIwrC,KAcFmB,IAZAD,GAAqB,SAAiBsB,GACpChM,GAAW95C,KAAMykD,IACjBr+C,GAAU0/C,GACVhlD,GAAKmjD,GAAUjkD,MACf,IAAI8X,EAAQysC,GAAwBvkD,MACpC,IACE8lD,EAAStlD,GAAKqlD,GAAiB/tC,GAAQtX,GAAKolD,GAAgB9tC,GAC7D,CAAC,MAAO1X,GACPwlD,GAAe9tC,EAAO1X,EACvB,CACL,GAEwCQ,WAGtCqjD,GAAW,SAAiB6B,GAC1BlnC,GAAiB5e,KAAM,CACrBsY,KAAMgsC,GACN9lC,MAAM,EACN8mC,UAAU,EACVp0C,QAAQ,EACRq0C,UAAW,IAAIvE,GACfmE,WAAW,EACXrtC,MAlLQ,EAmLRxU,WAAOrB,GAEb,GAIWrB,UAAYwa,GAAcqpC,GAAkB,QAAQ,SAAcsB,EAAaC,GACtF,IAAIluC,EAAQysC,GAAwBvkD,MAChC+kD,EAAWf,GAAqB1E,GAAmBt/C,KAAMwkD,KAS7D,OARA1sC,EAAM5G,QAAS,EACf6zC,EAASE,IAAK/iD,GAAW6jD,IAAeA,EACxChB,EAASG,KAAOhjD,GAAW8jD,IAAeA,EAC1CjB,EAAS7qC,OAASwlC,GAAUx6C,GAAQgV,YAASjY,EA/LnC,IAgMN6V,EAAMA,MAAmBA,EAAMytC,UAAU/d,IAAIud,GAC5C7C,IAAU,WACb4C,GAAaC,EAAUjtC,EAC7B,IACWitC,EAASzD,OACpB,IAEE4C,GAAuB,WACrB,IAAI5C,EAAU,IAAI2C,GACdnsC,EAAQysC,GAAwBjD,GACpCthD,KAAKshD,QAAUA,EACfthD,KAAKsiD,QAAU9hD,GAAKqlD,GAAiB/tC,GACrC9X,KAAK6jD,OAASrjD,GAAKolD,GAAgB9tC,EACvC,EAEEusC,GAA2BvhD,EAAIkhD,GAAuB,SAAUpzC,GAC9D,OAAOA,IAAM4zC,IA1MmByB,YA0MGr1C,EAC/B,IAAIszC,GAAqBtzC,GACzB8zC,GAA4B9zC,EACpC,GA4BA2L,GAAE,CAAE3c,QAAQ,EAAMmb,aAAa,EAAM9N,MAAM,EAAMF,OAAQu2C,IAA8B,CACrFtB,QAASwC,KAGX9oC,GAAe8oC,GAAoBF,IAAS,GAAO,GACnDxJ,GAAWwJ,IE9RX,IAAIvB,GAA2BziD,GAI/B4lD,GAFiCxiD,GAAsDuN,cADrDvP,IAG0C,SAAU0f,GACpF2hC,GAAyBjhD,IAAIsf,GAAUmgC,UAAKt/C,GAAW,WAAY,GACrE,ICLInB,GAAOY,EACP0E,GAAY1C,GACZ2gD,GAA6Bp+C,GAC7B08C,GAAU/6C,GACVyxC,GAAUvxC,GALNxH,GAUN,CAAEiM,OAAQ,UAAWG,MAAM,EAAMK,OAJO1D,IAIwC,CAChFvH,IAAK,SAAasf,GAChB,IAAIxQ,EAAI5Q,KACJmmD,EAAa9B,GAA2BvhD,EAAE8N,GAC1C0xC,EAAU6D,EAAW7D,QACrBuB,EAASsC,EAAWtC,OACpBl7C,EAASg6C,IAAQ,WACnB,IAAIyD,EAAkBhgD,GAAUwK,EAAE0xC,SAC9BhkC,EAAS,GACTyhC,EAAU,EACVsG,EAAY,EAChBhN,GAAQj4B,GAAU,SAAUkgC,GAC1B,IAAIzzC,EAAQkyC,IACRuG,GAAgB,EACpBD,IACAvlD,GAAKslD,EAAiBx1C,EAAG0wC,GAASC,MAAK,SAAUj+C,GAC3CgjD,IACJA,GAAgB,EAChBhoC,EAAOzQ,GAASvK,IACd+iD,GAAa/D,EAAQhkC,GACxB,GAAEulC,EACX,MACQwC,GAAa/D,EAAQhkC,EAC7B,IAEI,OADI3V,EAAOvI,OAAOyjD,EAAOl7C,EAAOrF,OACzB6iD,EAAW7E,OACnB,ICpCH,IAAI/kC,GAAIjc,GAEJgjD,GAA6B5/C,GAAsDuN,YACxDhL,OAKmDrF,UAIlF2b,GAAE,CAAEhQ,OAAQ,UAAWK,OAAO,EAAMG,OAAQu2C,GAA4Bp2C,MAAM,GAAQ,CACpFq5C,MAAS,SAAUP,GACjB,OAAOhmD,KAAKuhD,UAAKt/C,EAAW+jD,EAC7B,ICfH,IACIllD,GAAOY,EACP0E,GAAY1C,GACZ2gD,GAA6Bp+C,GAC7B08C,GAAU/6C,GACVyxC,GAAUvxC,GALNxH,GAUN,CAAEiM,OAAQ,UAAWG,MAAM,EAAMK,OAJO1D,IAIwC,CAChFm9C,KAAM,SAAcplC,GAClB,IAAIxQ,EAAI5Q,KACJmmD,EAAa9B,GAA2BvhD,EAAE8N,GAC1CizC,EAASsC,EAAWtC,OACpBl7C,EAASg6C,IAAQ,WACnB,IAAIyD,EAAkBhgD,GAAUwK,EAAE0xC,SAClCjJ,GAAQj4B,GAAU,SAAUkgC,GAC1BxgD,GAAKslD,EAAiBx1C,EAAG0wC,GAASC,KAAK4E,EAAW7D,QAASuB,EACnE,GACA,IAEI,OADIl7C,EAAOvI,OAAOyjD,EAAOl7C,EAAOrF,OACzB6iD,EAAW7E,OACnB,ICvBH,IACIxgD,GAAOY,EACP2iD,GAA6B3gD,GAFzBpD,GAON,CAAEiM,OAAQ,UAAWG,MAAM,EAAMK,OAJF9G,GAAsDgL,aAId,CACvE4yC,OAAQ,SAAgBtyC,GACtB,IAAI40C,EAAa9B,GAA2BvhD,EAAE9C,MAE9C,OADAc,GAAKqlD,EAAWtC,YAAQ5hD,EAAWsP,GAC5B40C,EAAW7E,OACnB,ICZH,IAAI52C,GAAWpK,GACX8D,GAAW1C,GACXsiD,GAAuBtgD,GAE3B+iD,GAAiB,SAAU71C,EAAGtD,GAE5B,GADA5C,GAASkG,GACLxM,GAASkJ,IAAMA,EAAEyN,cAAgBnK,EAAG,OAAOtD,EAC/C,IAAIo5C,EAAoB1C,GAAqBlhD,EAAE8N,GAG/C,OADA0xC,EADcoE,EAAkBpE,SACxBh1C,GACDo5C,EAAkBpF,OAC3B,ECXI/kC,GAAIjc,GAGJyiD,GAA2B98C,GAC3Bq9C,GAA6B17C,GAAsDqJ,YACnFw1C,GAAiB3+C,GAEjB6+C,GANajlD,GAM0B,WACvCklD,IAA4BtD,GAIhC/mC,GAAE,CAAEhQ,OAAQ,UAAWG,MAAM,EAAMK,OCZlB,MDYmE,CAClFu1C,QAAS,SAAiBh1C,GACxB,OAAOm5C,GAAeG,IAAiB5mD,OAAS2mD,GAA4B5D,GAA2B/iD,KAAMsN,EAC9G,IEfH,IACIxM,GAAOY,EACP0E,GAAY1C,GACZ2gD,GAA6Bp+C,GAC7B08C,GAAU/6C,GACVyxC,GAAUvxC,GALNxH,GAUN,CAAEiM,OAAQ,UAAWG,MAAM,EAAMK,OAJO1D,IAIwC,CAChFw9C,WAAY,SAAoBzlC,GAC9B,IAAIxQ,EAAI5Q,KACJmmD,EAAa9B,GAA2BvhD,EAAE8N,GAC1C0xC,EAAU6D,EAAW7D,QACrBuB,EAASsC,EAAWtC,OACpBl7C,EAASg6C,IAAQ,WACnB,IAAI8D,EAAiBrgD,GAAUwK,EAAE0xC,SAC7BhkC,EAAS,GACTyhC,EAAU,EACVsG,EAAY,EAChBhN,GAAQj4B,GAAU,SAAUkgC,GAC1B,IAAIzzC,EAAQkyC,IACRuG,GAAgB,EACpBD,IACAvlD,GAAK2lD,EAAgB71C,EAAG0wC,GAASC,MAAK,SAAUj+C,GAC1CgjD,IACJA,GAAgB,EAChBhoC,EAAOzQ,GAAS,CAAEi5C,OAAQ,YAAaxjD,MAAOA,KAC5C+iD,GAAa/D,EAAQhkC,GACxB,IAAE,SAAUle,GACPkmD,IACJA,GAAgB,EAChBhoC,EAAOzQ,GAAS,CAAEi5C,OAAQ,WAAYrB,OAAQrlD,KAC5CimD,GAAa/D,EAAQhkC,GACjC,GACA,MACQ+nC,GAAa/D,EAAQhkC,EAC7B,IAEI,OADI3V,EAAOvI,OAAOyjD,EAAOl7C,EAAOrF,OACzB6iD,EAAW7E,OACnB,ICzCH,IACIxgD,GAAOY,EACP0E,GAAY1C,GACZc,GAAayB,GACbo+C,GAA6Bz8C,GAC7B+6C,GAAU76C,GACVuxC,GAAUhwC,GAGV09C,GAAoB,0BAThBzmD,GAaN,CAAEiM,OAAQ,UAAWG,MAAM,EAAMK,OANOxD,IAMwC,CAChFy9C,IAAK,SAAa5lC,GAChB,IAAIxQ,EAAI5Q,KACJ++C,EAAiBv6C,GAAW,kBAC5B2hD,EAAa9B,GAA2BvhD,EAAE8N,GAC1C0xC,EAAU6D,EAAW7D,QACrBuB,EAASsC,EAAWtC,OACpBl7C,EAASg6C,IAAQ,WACnB,IAAI8D,EAAiBrgD,GAAUwK,EAAE0xC,SAC7B3D,EAAS,GACToB,EAAU,EACVsG,EAAY,EACZY,GAAkB,EACtB5N,GAAQj4B,GAAU,SAAUkgC,GAC1B,IAAIzzC,EAAQkyC,IACRmH,GAAkB,EACtBb,IACAvlD,GAAK2lD,EAAgB71C,EAAG0wC,GAASC,MAAK,SAAUj+C,GAC1C4jD,GAAmBD,IACvBA,GAAkB,EAClB3E,EAAQh/C,GACT,IAAE,SAAUlD,GACP8mD,GAAmBD,IACvBC,GAAkB,EAClBvI,EAAO9wC,GAASzN,IACdimD,GAAaxC,EAAO,IAAI9E,EAAeJ,EAAQoI,KAC3D,GACA,MACQV,GAAaxC,EAAO,IAAI9E,EAAeJ,EAAQoI,IACvD,IAEI,OADIp+C,EAAOvI,OAAOyjD,EAAOl7C,EAAOrF,OACzB6iD,EAAW7E,OACnB,IC7CH,IAAI/kC,GAAIjc,GAEJyiD,GAA2Br/C,GAC3BxD,GAAQ+F,EACRzB,GAAaoD,GACb1F,GAAa4F,EACbw3C,GAAqBj2C,GACrBo9C,GAAiBl9C,GAGjB25C,GAAyBH,IAA4BA,GAAyBniD,UAUlF2b,GAAE,CAAEhQ,OAAQ,UAAWK,OAAO,EAAMM,MAAM,EAAMH,SAP5Bg2C,IAA4B7iD,IAAM,WAEpDgjD,GAAgC,QAAEpiD,KAAK,CAAEygD,KAAM,WAA2B,IAAI,WAAY,GAC5F,KAIuE,CACrE4F,QAAW,SAAUC,GACnB,IAAIx2C,EAAI0uC,GAAmBt/C,KAAMwE,GAAW,YACxC6iD,EAAanlD,GAAWklD,GAC5B,OAAOpnD,KAAKuhD,KACV8F,EAAa,SAAU/5C,GACrB,OAAOm5C,GAAe71C,EAAGw2C,KAAa7F,MAAK,WAAc,OAAOj0C,CAAE,GAC1E,EAAU85C,EACJC,EAAa,SAAU73B,GACrB,OAAOi3B,GAAe71C,EAAGw2C,KAAa7F,MAAK,WAAc,MAAM/xB,CAAE,GACzE,EAAU43B,EAEP,ICxBH,ICLA9F,GDKWh2C,GAEW02C,QETlBqC,GAA6B3iD,GADzBpB,GAKN,CAAEiM,OAAQ,UAAWG,MAAM,GAAQ,CACnC46C,cAAe,WACb,IAAIZ,EAAoBrC,GAA2BvhD,EAAE9C,MACrD,MAAO,CACLshD,QAASoF,EAAkBpF,QAC3BgB,QAASoE,EAAkBpE,QAC3BuB,OAAQ6C,EAAkB7C,OAE7B,ICbH,IAGAvC,GAHahhD,GCET+jD,GAA6B3iD,GAC7BihD,GAAUj/C,GAFNpD,GAMN,CAAEiM,OAAQ,UAAWG,MAAM,EAAMK,QAAQ,GAAQ,CACjDw6C,IAAO,SAAU5gC,GACf,IAAI+/B,EAAoBrC,GAA2BvhD,EAAE9C,MACjD2I,EAASg6C,GAAQh8B,GAErB,OADChe,EAAOvI,MAAQsmD,EAAkB7C,OAAS6C,EAAkBpE,SAAS35C,EAAOrF,OACtEojD,EAAkBpF,OAC1B,ICbH,ICAAA,GDAahhD,GEAbywB,GCAazwB,gBCDb,IAAI8sB,EAAU9sB,GAAgC,QAC1CwtB,EAAyBpsB,GACzB4rB,EAAU5pB,GACVsqC,EAAiB/nC,GACjBq3C,EAAyB11C,GACzBuqC,EAA2BrqC,GAC3B4nB,EAAwBrmB,GACxB2zC,EAAyBzzC,GACzBi+C,EAAWl8C,GACXm8C,EAA2Bl8C,GAC3ByjB,EAAyBlS,GAC7B,SAAS4qC,IAEPvyC,EAAiBC,QAAAsyC,EAAsB,WACrC,OAAOl4B,CACX,EAAKra,EAAAC,QAAAooC,YAA4B,EAAMroC,EAAOC,QAAiB,QAAID,EAAOC,QACxE,IAAIka,EACFE,EAAI,CAAE,EACNje,EAAIlP,OAAOzB,UACX2M,EAAIgE,EAAE9Q,eACN4sB,EAAIS,GAA0B,SAAUwB,EAAGE,EAAGje,GAC5C+d,EAAEE,GAAKje,EAAEjO,KACV,EACDuL,EAAI,mBAAqBye,EAAUA,EAAU,CAAE,EAC/CpkB,EAAI2F,EAAE9I,UAAY,aAClB6F,EAAIiD,EAAE84C,eAAiB,kBACvBl4B,EAAI5gB,EAAE+4C,aAAe,gBACvB,SAAS5M,EAAO1rB,EAAGE,EAAGje,GACpB,OAAOuc,EAAuBwB,EAAGE,EAAG,CAClClsB,MAAOiO,EACPtO,YAAY,EACZM,cAAc,EACdC,UAAU,IACR8rB,EAAEE,EACP,CACD,IACEwrB,EAAO,CAAA,EAAI,GACZ,CAAC,MAAO1rB,GACP0rB,EAAS,SAAgB1rB,EAAGE,EAAGje,GAC7B,OAAO+d,EAAEE,GAAKje,CACpB,CACG,CACD,SAAStE,EAAKqiB,EAAGE,EAAGje,EAAGhE,GACrB,IAAIsB,EAAI2gB,GAAKA,EAAE5uB,qBAAqBinD,EAAYr4B,EAAIq4B,EAClD3+C,EAAI8kC,EAAen/B,EAAEjO,WACrBgL,EAAI,IAAIk8C,EAAQv6C,GAAK,IACvB,OAAO8f,EAAEnkB,EAAG,UAAW,CACrB5F,MAAOykD,EAAiBz4B,EAAG/d,EAAG3F,KAC5B1C,CACL,CACD,SAAS8+C,EAAS14B,EAAGE,EAAGje,GACtB,IACE,MAAO,CACL+G,KAAM,SACN0M,IAAKsK,EAAExuB,KAAK0uB,EAAGje,GAElB,CAAC,MAAO+d,GACP,MAAO,CACLhX,KAAM,QACN0M,IAAKsK,EAER,CACF,CACDE,EAAEviB,KAAOA,EACT,IAAI6E,EAAI,iBACNud,EAAI,iBACJvsB,EAAI,YACJ+R,EAAI,YACJvD,EAAI,CAAA,EACN,SAASu2C,IAAc,CACvB,SAASI,IAAsB,CAC/B,SAASC,IAA+B,CACxC,IAAInL,EAAI,CAAA,EACR/B,EAAO+B,EAAG7zC,GAAG,WACX,OAAOlJ,IACX,IACE,IACEi9B,EADMqgB,OACOh/B,EAAO,MACtB2e,GAAKA,IAAM1rB,GAAKhE,EAAEzM,KAAKm8B,EAAG/zB,KAAO6zC,EAAI9f,GACrC,IAAI6R,EAAIoZ,EAA2BtnD,UAAYinD,EAAUjnD,UAAYotC,EAAe+O,GACpF,SAASoL,EAAsB74B,GAC7B,IAAIR,EACJqjB,EAAyBrjB,EAAW,CAAC,OAAQ,QAAS,WAAWhuB,KAAKguB,GAAU,SAAUU,GACxFwrB,EAAO1rB,EAAGE,GAAG,SAAUF,GACrB,OAAOtvB,KAAKooD,QAAQ54B,EAAGF,EAC/B,GACA,GACG,CACD,SAAS+4B,EAAc/4B,EAAGE,GACxB,SAAS84B,EAAO/2C,EAAG8b,EAAGxe,EAAG3F,GACvB,IAAI0C,EAAIo8C,EAAS14B,EAAE/d,GAAI+d,EAAGjC,GAC1B,GAAI,UAAYzhB,EAAE0M,KAAM,CACtB,IAAImX,EAAI7jB,EAAEoZ,IACRlT,EAAI2d,EAAEnsB,MACR,OAAOwO,GAAK,UAAYsb,EAAQtb,IAAMvE,EAAEzM,KAAKgR,EAAG,WAAa0d,EAAE8yB,QAAQxwC,EAAEy2C,SAAShH,MAAK,SAAUjyB,GAC/Fg5B,EAAO,OAAQh5B,EAAGzgB,EAAG3F,EACtB,IAAE,SAAUomB,GACXg5B,EAAO,QAASh5B,EAAGzgB,EAAG3F,EAChC,IAAasmB,EAAE8yB,QAAQxwC,GAAGyvC,MAAK,SAAUjyB,GAC/BG,EAAEnsB,MAAQgsB,EAAGzgB,EAAE4gB,EAChB,IAAE,SAAUH,GACX,OAAOg5B,EAAO,QAASh5B,EAAGzgB,EAAG3F,EACvC,GACO,CACDA,EAAE0C,EAAEoZ,IACL,CACD,IAAIzT,EACJ8b,EAAErtB,KAAM,UAAW,CACjBsD,MAAO,SAAegsB,EAAG/hB,GACvB,SAASi7C,IACP,OAAO,IAAIh5B,GAAE,SAAUA,EAAGje,GACxB+2C,EAAOh5B,EAAG/hB,EAAGiiB,EAAGje,EAC5B,GACS,CACD,OAAOA,EAAIA,EAAIA,EAAEgwC,KAAKiH,EAA4BA,GAA8BA,GACjF,GAEJ,CACD,SAAST,EAAiBv4B,EAAGje,EAAGhE,GAC9B,IAAI8f,EAAIvb,EACR,OAAO,SAAUjD,EAAG3F,GAClB,GAAImkB,IAAMvqB,EAAG,MAAM,IAAIomC,MAAM,gCAC7B,GAAI7b,IAAMxY,EAAG,CACX,GAAI,UAAYhG,EAAG,MAAM3F,EACzB,MAAO,CACL5F,MAAOgsB,EACP9Q,MAAM,EAET,CACD,IAAKjR,EAAE7I,OAASmK,EAAGtB,EAAEyX,IAAM9b,IAAK,CAC9B,IAAI0C,EAAI2B,EAAEk7C,SACV,GAAI78C,EAAG,CACL,IAAI6jB,EAAIi5B,EAAoB98C,EAAG2B,GAC/B,GAAIkiB,EAAG,CACL,GAAIA,IAAMne,EAAG,SACb,OAAOme,CACR,CACF,CACD,GAAI,SAAWliB,EAAE7I,OAAQ6I,EAAEo7C,KAAOp7C,EAAEq7C,MAAQr7C,EAAEyX,SAAS,GAAI,UAAYzX,EAAE7I,OAAQ,CAC/E,GAAI2oB,IAAMvb,EAAG,MAAMub,EAAIxY,EAAGtH,EAAEyX,IAC5BzX,EAAEs7C,kBAAkBt7C,EAAEyX,IAChC,KAAe,WAAazX,EAAE7I,QAAU6I,EAAEu7C,OAAO,SAAUv7C,EAAEyX,KACrDqI,EAAIvqB,EACJ,IAAIi6C,EAAIiL,EAASx4B,EAAGje,EAAGhE,GACvB,GAAI,WAAawvC,EAAEzkC,KAAM,CACvB,GAAI+U,EAAI9f,EAAEiR,KAAO3J,EAAIwa,EAAG0tB,EAAE/3B,MAAQ1T,EAAG,SACrC,MAAO,CACLhO,MAAOy5C,EAAE/3B,IACTxG,KAAMjR,EAAEiR,KAEX,CACD,UAAYu+B,EAAEzkC,OAAS+U,EAAIxY,EAAGtH,EAAE7I,OAAS,QAAS6I,EAAEyX,IAAM+3B,EAAE/3B,IAC7D,CACP,CACG,CACD,SAAS0jC,EAAoBl5B,EAAGje,GAC9B,IAAIhE,EAAIgE,EAAE7M,OACR2oB,EAAImC,EAAEzpB,SAASwH,GACjB,GAAI8f,IAAMiC,EAAG,OAAO/d,EAAEk3C,SAAW,KAAM,UAAYl7C,GAAKiiB,EAAEzpB,SAAiB,SAAMwL,EAAE7M,OAAS,SAAU6M,EAAEyT,IAAMsK,EAAGo5B,EAAoBl5B,EAAGje,GAAI,UAAYA,EAAE7M,SAAW,WAAa6I,IAAMgE,EAAE7M,OAAS,QAAS6M,EAAEyT,IAAM,IAAIhhB,UAAU,oCAAsCuJ,EAAI,aAAc+D,EAC1R,IAAIzC,EAAIm5C,EAAS36B,EAAGmC,EAAEzpB,SAAUwL,EAAEyT,KAClC,GAAI,UAAYnW,EAAEyJ,KAAM,OAAO/G,EAAE7M,OAAS,QAAS6M,EAAEyT,IAAMnW,EAAEmW,IAAKzT,EAAEk3C,SAAW,KAAMn3C,EACrF,IAAIpI,EAAI2F,EAAEmW,IACV,OAAO9b,EAAIA,EAAEsV,MAAQjN,EAAEie,EAAEu5B,YAAc7/C,EAAE5F,MAAOiO,EAAEqL,KAAO4S,EAAEw5B,QAAS,WAAaz3C,EAAE7M,SAAW6M,EAAE7M,OAAS,OAAQ6M,EAAEyT,IAAMsK,GAAI/d,EAAEk3C,SAAW,KAAMn3C,GAAKpI,GAAKqI,EAAE7M,OAAS,QAAS6M,EAAEyT,IAAM,IAAIhhB,UAAU,oCAAqCuN,EAAEk3C,SAAW,KAAMn3C,EAC7P,CACD,SAAS23C,EAAa35B,GACpB,IAAIuc,EACArc,EAAI,CACN05B,OAAQ55B,EAAE,IAEZ,KAAKA,IAAME,EAAE25B,SAAW75B,EAAE,IAAK,KAAKA,IAAME,EAAE45B,WAAa95B,EAAE,GAAIE,EAAE65B,SAAW/5B,EAAE,IAAKI,EAAsBmc,EAAY7rC,KAAKspD,YAAYxoD,KAAK+qC,EAAWrc,EACvJ,CACD,SAAS+5B,EAAcj6B,GACrB,IAAIE,EAAIF,EAAEk6B,YAAc,GACxBh6B,EAAElX,KAAO,gBAAiBkX,EAAExK,IAAKsK,EAAEk6B,WAAah6B,CACjD,CACD,SAASs4B,EAAQx4B,GACftvB,KAAKspD,WAAa,CAAC,CACjBJ,OAAQ,SACN/W,EAAyB7iB,GAAGxuB,KAAKwuB,EAAG25B,EAAcjpD,MAAOA,KAAKmkC,OAAM,EACzE,CACD,SAAS7lB,EAAOkR,GACd,GAAIA,GAAK,KAAOA,EAAG,CACjB,IAAIje,EAAIie,EAAEtmB,GACV,GAAIqI,EAAG,OAAOA,EAAEzQ,KAAK0uB,GACrB,GAAI,mBAAqBA,EAAE5S,KAAM,OAAO4S,EACxC,IAAK+f,MAAM/f,EAAE7qB,QAAS,CACpB,IAAI0oB,GAAK,EACPxe,EAAI,SAAS+N,IACX,OAASyQ,EAAImC,EAAE7qB,QAAS,GAAI4I,EAAEzM,KAAK0uB,EAAGnC,GAAI,OAAOzQ,EAAKtZ,MAAQksB,EAAEnC,GAAIzQ,EAAK4B,MAAO,EAAI5B,EACpF,OAAOA,EAAKtZ,MAAQgsB,EAAG1S,EAAK4B,MAAO,EAAI5B,CACnD,EACQ,OAAO/N,EAAE+N,KAAO/N,CACjB,CACF,CACD,MAAM,IAAI7K,UAAUopB,EAAQoC,GAAK,mBAClC,CACD,OAAOy4B,EAAkBrnD,UAAYsnD,EAA4B76B,EAAEyhB,EAAG,cAAe,CACnFxrC,MAAO4kD,EACP3kD,cAAc,IACZ8pB,EAAE66B,EAA4B,cAAe,CAC/C5kD,MAAO2kD,EACP1kD,cAAc,IACZ0kD,EAAkBwB,YAAczO,EAAOkN,EAA4Bz4B,EAAG,qBAAsBD,EAAEk6B,oBAAsB,SAAUp6B,GAChI,IAAIE,EAAI,mBAAqBF,GAAKA,EAAEvU,YACpC,QAASyU,IAAMA,IAAMy4B,GAAqB,uBAAyBz4B,EAAEi6B,aAAej6B,EAAErnB,MAC1F,EAAKqnB,EAAEm6B,KAAO,SAAUr6B,GACpB,OAAO0tB,EAAyBA,EAAuB1tB,EAAG44B,IAA+B54B,EAAEhT,UAAY4rC,EAA4BlN,EAAO1rB,EAAGG,EAAG,sBAAuBH,EAAE1uB,UAAYotC,EAAec,GAAIxf,CAC5M,EAAKE,EAAEo6B,MAAQ,SAAUt6B,GACrB,MAAO,CACLi5B,QAASj5B,EAEf,EAAK64B,EAAsBE,EAAcznD,WAAYo6C,EAAOqN,EAAcznD,UAAWgL,GAAG,WACpF,OAAO5L,IACR,IAAGwvB,EAAE64B,cAAgBA,EAAe74B,EAAEq6B,MAAQ,SAAUv6B,EAAG/d,EAAGhE,EAAG8f,EAAGxe,QACnE,IAAWA,IAAMA,EAAI24C,GACrB,IAAIt+C,EAAI,IAAIm/C,EAAcp7C,EAAKqiB,EAAG/d,EAAGhE,EAAG8f,GAAIxe,GAC5C,OAAO2gB,EAAEk6B,oBAAoBn4C,GAAKrI,EAAIA,EAAE0T,OAAO2kC,MAAK,SAAUjyB,GAC5D,OAAOA,EAAE9Q,KAAO8Q,EAAEhsB,MAAQ4F,EAAE0T,MAClC,GACG,EAAEurC,EAAsBrZ,GAAIkM,EAAOlM,EAAGrf,EAAG,aAAcurB,EAAOlM,EAAG5lC,GAAG,WACnE,OAAOlJ,IACR,IAAGg7C,EAAOlM,EAAG,YAAY,WACxB,MAAO,oBACR,IAAGtf,EAAEvgB,KAAO,SAAUqgB,GACrB,IAAIE,EAAIntB,OAAOitB,GACb/d,EAAI,GACN,IAAK,IAAIhE,KAAKiiB,EAAGE,EAAsBne,GAAGzQ,KAAKyQ,EAAGhE,GAClD,OAAOk6C,EAAyBl2C,GAAGzQ,KAAKyQ,GAAI,SAASqL,IACnD,KAAOrL,EAAE5M,QAAS,CAChB,IAAI2qB,EAAI/d,EAAEwgC,MACV,GAAIziB,KAAKE,EAAG,OAAO5S,EAAKtZ,MAAQgsB,EAAG1S,EAAK4B,MAAO,EAAI5B,CACpD,CACD,OAAOA,EAAK4B,MAAO,EAAI5B,CAC7B,CACG,EAAE4S,EAAElR,OAASA,EAAQwpC,EAAQlnD,UAAY,CACxCma,YAAa+sC,EACb3jB,MAAO,SAAe3U,GACpB,IAAIqjB,EACJ,GAAI7yC,KAAKosB,KAAO,EAAGpsB,KAAK4c,KAAO,EAAG5c,KAAK2oD,KAAO3oD,KAAK4oD,MAAQt5B,EAAGtvB,KAAKwe,MAAO,EAAIxe,KAAKyoD,SAAW,KAAMzoD,KAAK0E,OAAS,OAAQ1E,KAAKglB,IAAMsK,EAAG6iB,EAAyBU,EAAY7yC,KAAKspD,YAAYxoD,KAAK+xC,EAAW0W,IAAiB/5B,EAAG,IAAK,IAAIje,KAAKvR,KAAM,MAAQuR,EAAEwF,OAAO,IAAMxJ,EAAEzM,KAAKd,KAAMuR,KAAOg+B,OAAOvgB,EAAuBzd,GAAGzQ,KAAKyQ,EAAG,MAAQvR,KAAKuR,GAAK+d,EAC7V,EACDsY,KAAM,WACJ5nC,KAAKwe,MAAO,EACZ,IAAI8Q,EAAItvB,KAAKspD,WAAW,GAAGE,WAC3B,GAAI,UAAYl6B,EAAEhX,KAAM,MAAMgX,EAAEtK,IAChC,OAAOhlB,KAAK8pD,IACb,EACDjB,kBAAmB,SAA2Br5B,GAC5C,GAAIxvB,KAAKwe,KAAM,MAAMgR,EACrB,IAAIje,EAAIvR,KACR,SAAS+pD,EAAOx8C,EAAG8f,GACjB,OAAOnkB,EAAEoP,KAAO,QAASpP,EAAE8b,IAAMwK,EAAGje,EAAEqL,KAAOrP,EAAG8f,IAAM9b,EAAE7M,OAAS,OAAQ6M,EAAEyT,IAAMsK,KAAMjC,CACxF,CACD,IAAK,IAAIA,EAAIrtB,KAAKspD,WAAW3kD,OAAS,EAAG0oB,GAAK,IAAKA,EAAG,CACpD,IAAIxe,EAAI7O,KAAKspD,WAAWj8B,GACtBnkB,EAAI2F,EAAE26C,WACR,GAAI,SAAW36C,EAAEq6C,OAAQ,OAAOa,EAAO,OACvC,GAAIl7C,EAAEq6C,QAAUlpD,KAAKosB,KAAM,CACzB,IAAIxgB,EAAI2B,EAAEzM,KAAK+N,EAAG,YAChB4gB,EAAIliB,EAAEzM,KAAK+N,EAAG,cAChB,GAAIjD,GAAK6jB,EAAG,CACV,GAAIzvB,KAAKosB,KAAOvd,EAAEs6C,SAAU,OAAOY,EAAOl7C,EAAEs6C,UAAU,GACtD,GAAInpD,KAAKosB,KAAOvd,EAAEu6C,WAAY,OAAOW,EAAOl7C,EAAEu6C,WAC/C,MAAM,GAAIx9C,GACT,GAAI5L,KAAKosB,KAAOvd,EAAEs6C,SAAU,OAAOY,EAAOl7C,EAAEs6C,UAAU,OACjD,CACL,IAAK15B,EAAG,MAAM,IAAIyZ,MAAM,0CACxB,GAAIlpC,KAAKosB,KAAOvd,EAAEu6C,WAAY,OAAOW,EAAOl7C,EAAEu6C,WAC/C,CACF,CACF,CACF,EACDN,OAAQ,SAAgBx5B,EAAGE,GACzB,IAAK,IAAIje,EAAIvR,KAAKspD,WAAW3kD,OAAS,EAAG4M,GAAK,IAAKA,EAAG,CACpD,IAAI8b,EAAIrtB,KAAKspD,WAAW/3C,GACxB,GAAI8b,EAAE67B,QAAUlpD,KAAKosB,MAAQ7e,EAAEzM,KAAKusB,EAAG,eAAiBrtB,KAAKosB,KAAOiB,EAAE+7B,WAAY,CAChF,IAAIv6C,EAAIwe,EACR,KACD,CACF,CACDxe,IAAM,UAAYygB,GAAK,aAAeA,IAAMzgB,EAAEq6C,QAAU15B,GAAKA,GAAK3gB,EAAEu6C,aAAev6C,EAAI,MACvF,IAAI3F,EAAI2F,EAAIA,EAAE26C,WAAa,CAAA,EAC3B,OAAOtgD,EAAEoP,KAAOgX,EAAGpmB,EAAE8b,IAAMwK,EAAG3gB,GAAK7O,KAAK0E,OAAS,OAAQ1E,KAAK4c,KAAO/N,EAAEu6C,WAAY93C,GAAKtR,KAAKgqD,SAAS9gD,EACvG,EACD8gD,SAAU,SAAkB16B,EAAGE,GAC7B,GAAI,UAAYF,EAAEhX,KAAM,MAAMgX,EAAEtK,IAChC,MAAO,UAAYsK,EAAEhX,MAAQ,aAAegX,EAAEhX,KAAOtY,KAAK4c,KAAO0S,EAAEtK,IAAM,WAAasK,EAAEhX,MAAQtY,KAAK8pD,KAAO9pD,KAAKglB,IAAMsK,EAAEtK,IAAKhlB,KAAK0E,OAAS,SAAU1E,KAAK4c,KAAO,OAAS,WAAa0S,EAAEhX,MAAQkX,IAAMxvB,KAAK4c,KAAO4S,GAAIle,CACzN,EACD24C,OAAQ,SAAgB36B,GACtB,IAAK,IAAIE,EAAIxvB,KAAKspD,WAAW3kD,OAAS,EAAG6qB,GAAK,IAAKA,EAAG,CACpD,IAAIje,EAAIvR,KAAKspD,WAAW95B,GACxB,GAAIje,EAAE63C,aAAe95B,EAAG,OAAOtvB,KAAKgqD,SAASz4C,EAAEi4C,WAAYj4C,EAAE83C,UAAWE,EAAch4C,GAAID,CAC3F,CACF,EACDi1C,MAAS,SAAgBj3B,GACvB,IAAK,IAAIE,EAAIxvB,KAAKspD,WAAW3kD,OAAS,EAAG6qB,GAAK,IAAKA,EAAG,CACpD,IAAIje,EAAIvR,KAAKspD,WAAW95B,GACxB,GAAIje,EAAE23C,SAAW55B,EAAG,CAClB,IAAI/hB,EAAIgE,EAAEi4C,WACV,GAAI,UAAYj8C,EAAE+K,KAAM,CACtB,IAAI+U,EAAI9f,EAAEyX,IACVukC,EAAch4C,EACf,CACD,OAAO8b,CACR,CACF,CACD,MAAM,IAAI6b,MAAM,wBACjB,EACDghB,cAAe,SAAuB16B,EAAGje,EAAGhE,GAC1C,OAAOvN,KAAKyoD,SAAW,CACrB1iD,SAAUuY,EAAOkR,GACjBu5B,WAAYx3C,EACZy3C,QAASz7C,GACR,SAAWvN,KAAK0E,SAAW1E,KAAKglB,IAAMsK,GAAIhe,CAC9C,GACAke,CACJ,CACDra,EAAAC,QAAiBsyC,EAAqBvyC,EAA4BC,QAAAooC,YAAA,EAAMroC,EAAOC,QAAiB,QAAID,EAAOC,iBC1TvG+0C,IAAU7pD,gBACd8pD,GAAiBD,GAGjB,IACEE,mBAAqBF,EACvB,CAAE,MAAOG,GACmB,iBAAfzqD,WACTA,WAAWwqD,mBAAqBF,GAEhClqD,SAAS,IAAK,yBAAdA,CAAwCkqD,GAE5C,cCbI/jD,GAAY9F,GACZ6G,GAAWzF,GACXwC,GAAgBR,EAChBsK,GAAoB/H,GAEpBlC,GAAaC,UAGbkK,GAAe,SAAUq8C,GAC3B,OAAO,SAAU//C,EAAMmc,EAAY5W,EAAiBy6C,GAClDpkD,GAAUugB,GACV,IAAIjd,EAAIvC,GAASqD,GACbzK,EAAOmE,GAAcwF,GACrB/E,EAASqJ,GAAkBtE,GAC3BmE,EAAQ08C,EAAW5lD,EAAS,EAAI,EAChCkK,EAAI07C,GAAY,EAAI,EACxB,GAAIx6C,EAAkB,EAAG,OAAa,CACpC,GAAIlC,KAAS9N,EAAM,CACjByqD,EAAOzqD,EAAK8N,GACZA,GAASgB,EACT,KACD,CAED,GADAhB,GAASgB,EACL07C,EAAW18C,EAAQ,EAAIlJ,GAAUkJ,EACnC,MAAM,IAAI9J,GAAW,8CAExB,CACD,KAAMwmD,EAAW18C,GAAS,EAAIlJ,EAASkJ,EAAOA,GAASgB,EAAOhB,KAAS9N,IACrEyqD,EAAO7jC,EAAW6jC,EAAMzqD,EAAK8N,GAAQA,EAAOnE,IAE9C,OAAO8gD,CACX,CACA,EC/BIC,GDiCa,CAGf/T,KAAMxoC,IAAa,GAGnBw8C,MAAOx8C,IAAa,ICvC6BwoC,KAD3Cp2C,GAaN,CAAEiM,OAAQ,QAASK,OAAO,EAAMG,QATpBnF,IADO3B,GAKyB,IALzBA,GAKgD,KAN3CvC,GAOsB,WAII,CAClDinD,OAAQ,SAAgBhkC,GACtB,IAAIhiB,EAAS1D,UAAU0D,OACvB,OAAO8lD,GAAQzqD,KAAM2mB,EAAYhiB,EAAQA,EAAS,EAAI1D,UAAU,QAAKgB,EACtE,IChBH,IAEA0oD,GAFmBjpD,GAEW,SAASipD,OCHnC9lD,GAAgBvE,GAChBoE,GAAShD,GAET0d,GAAiBlJ,MAAMtV,UCHvBsQ,GDKa,SAAUxR,GACzB,IAAIyR,EAAMzR,EAAGirD,OACb,OAAOjrD,IAAO0f,IAAmBva,GAAcua,GAAgB1f,IAAOyR,IAAQiO,GAAeurC,OAAUjmD,GAASyM,CAClH,OCNiBD,ICFb+S,GAAU3jB,GACV0N,GAAoBtM,GACpBwiB,GAA2BxgB,GAC3BlD,GAAOyF,GAIP2kD,GAAmB,SAAUr+C,EAAQs+C,EAAU3jD,EAAQ4jD,EAAWxlC,EAAOylC,EAAOC,EAAQC,GAM1F,IALA,IAGI3/B,EAAS4/B,EAHTC,EAAc7lC,EACd8lC,EAAc,EACdC,IAAQL,GAASxqD,GAAKwqD,EAAQC,GAG3BG,EAAcN,GACfM,KAAelkD,IACjBokB,EAAU+/B,EAAQA,EAAMnkD,EAAOkkD,GAAcA,EAAaP,GAAY3jD,EAAOkkD,GAEzEL,EAAQ,GAAK9mC,GAAQqH,IACvB4/B,EAAal9C,GAAkBsd,GAC/B6/B,EAAcP,GAAiBr+C,EAAQs+C,EAAUv/B,EAAS4/B,EAAYC,EAAaJ,EAAQ,GAAK,IAEhG7mC,GAAyBinC,EAAc,GACvC5+C,EAAO4+C,GAAe7/B,GAGxB6/B,KAEFC,IAEF,OAAOD,CACT,EC7BIP,GD+BaA,GC9BbxkD,GAAY1C,GACZyD,GAAWlB,GACX+H,GAAoBpG,GACpB0c,GAAqBxc,GALjBxH,GASN,CAAEiM,OAAQ,QAASK,OAAO,GAAQ,CAClC0+C,QAAS,SAAiB3kC,GACxB,IAEInX,EAFA9F,EAAIvC,GAASnH,MACb8qD,EAAY98C,GAAkBtE,GAKlC,OAHAtD,GAAUugB,IACVnX,EAAI8U,GAAmB5a,EAAG,IACxB/E,OAASimD,GAAiBp7C,EAAG9F,EAAGA,EAAGohD,EAAW,EAAG,EAAGnkC,EAAY1lB,UAAU0D,OAAS,EAAI1D,UAAU,QAAKgB,GACjGuN,CACR,IChBH,IAEA87C,GAFmB5nD,GAEW,SAAS4nD,QCJnCzmD,GAAgBvE,GAChBoE,GAAShD,GAET0d,GAAiBlJ,MAAMtV,UCHvBsQ,GDKa,SAAUxR,GACzB,IAAIyR,EAAMzR,EAAG4rD,QACb,OAAO5rD,IAAO0f,IAAmBva,GAAcua,GAAgB1f,IAAOyR,IAAQiO,GAAeksC,QAAW5mD,GAASyM,CACnH,OCNiBD,ICFA5Q,GAKN,OAAO,SAAUk+B,GAC1B,OAAO,WAAiB,OAAOA,EAAKx+B,KAAMiB,UAAU0D,OAAS1D,UAAU,QAAKgB,EAAW,CACzF,GANuBP,ICGvB,SAAWkG,GAEW2jD,UCPLjrD,SCGCoD,ICFdyM,GAAa7P,GAEb8M,GAAQzN,KAAKyN,MAEbo+C,GAAY,SAAU/mC,EAAOgnC,GAC/B,IAAI9mD,EAAS8f,EAAM9f,OACf+mD,EAASt+C,GAAMzI,EAAS,GAC5B,OAAOA,EAAS,EAAIgnD,GAAclnC,EAAOgnC,GAAahiB,GACpDhlB,EACA+mC,GAAUr7C,GAAWsU,EAAO,EAAGinC,GAASD,GACxCD,GAAUr7C,GAAWsU,EAAOinC,GAASD,GACrCA,EAEJ,EAEIE,GAAgB,SAAUlnC,EAAOgnC,GAKnC,IAJA,IAEIngC,EAASrb,EAFTtL,EAAS8f,EAAM9f,OACfkK,EAAI,EAGDA,EAAIlK,GAAQ,CAGjB,IAFAsL,EAAIpB,EACJyc,EAAU7G,EAAM5V,GACToB,GAAKw7C,EAAUhnC,EAAMxU,EAAI,GAAIqb,GAAW,GAC7C7G,EAAMxU,GAAKwU,IAAQxU,GAEjBA,IAAMpB,MAAK4V,EAAMxU,GAAKqb,EAC3B,CAAC,OAAO7G,CACX,EAEIglB,GAAQ,SAAUhlB,EAAOiyB,EAAMgU,EAAOe,GAMxC,IALA,IAAIG,EAAUlV,EAAK/xC,OACfknD,EAAUnB,EAAM/lD,OAChBmnD,EAAS,EACTC,EAAS,EAEND,EAASF,GAAWG,EAASF,GAClCpnC,EAAMqnC,EAASC,GAAWD,EAASF,GAAWG,EAASF,EACnDJ,EAAU/U,EAAKoV,GAASpB,EAAMqB,KAAY,EAAIrV,EAAKoV,KAAYpB,EAAMqB,KACrED,EAASF,EAAUlV,EAAKoV,KAAYpB,EAAMqB,KAC9C,OAAOtnC,CACX,EAEAunC,GAAiBR,GCzCbS,GAFY3rD,GAEQ4C,MAAM,mBAE9BgpD,KAAmBD,KAAYA,GAAQ,GCFvCE,GAAiB,eAAe5rD,KAFvBD,ICEL8rD,GAFY9rD,GAEO4C,MAAM,wBAE7BmpD,KAAmBD,KAAWA,GAAO,GCJjC7vC,GAAIjc,GACJe,GAAcK,EACd0E,GAAY1C,GACZyD,GAAWlB,GACX+H,GAAoBpG,GACpBqpB,GAAwBnpB,GACxBxG,GAAW+H,GACXnJ,GAAQqJ,EACR+iD,GAAehhD,GACfslB,GAAsBrlB,GACtBghD,GAAKzvC,GACL0vC,GAAarvC,GACbsvC,GAAK1vC,GACL2vC,GAASzvC,GAET1c,GAAO,GACPosD,GAAatrD,GAAYd,GAAKggC,MAC9Bz5B,GAAOzF,GAAYd,GAAKuG,MAGxB8lD,GAAqB1sD,IAAM,WAC7BK,GAAKggC,UAAKt+B,EACZ,IAEI4qD,GAAgB3sD,IAAM,WACxBK,GAAKggC,KAAK,KACZ,IAEIusB,GAAgBl8B,GAAoB,QAEpCm8B,IAAe7sD,IAAM,WAEvB,GAAIusD,GAAI,OAAOA,GAAK,GACpB,KAAIF,IAAMA,GAAK,GAAf,CACA,GAAIC,GAAY,OAAO,EACvB,GAAIE,GAAQ,OAAOA,GAAS,IAE5B,IACIM,EAAMp9C,EAAKtM,EAAOuK,EADlBlF,EAAS,GAIb,IAAKqkD,EAAO,GAAIA,EAAO,GAAIA,IAAQ,CAGjC,OAFAp9C,EAAM5K,OAAOioD,aAAaD,GAElBA,GACN,KAAK,GAAI,KAAK,GAAI,KAAK,GAAI,KAAK,GAAI1pD,EAAQ,EAAG,MAC/C,KAAK,GAAI,KAAK,GAAIA,EAAQ,EAAG,MAC7B,QAASA,EAAQ,EAGnB,IAAKuK,EAAQ,EAAGA,EAAQ,GAAIA,IAC1BtN,GAAKuG,KAAK,CAAEme,EAAGrV,EAAM/B,EAAOovB,EAAG35B,GAElC,CAID,IAFA/C,GAAKggC,MAAK,SAAUr3B,EAAGyC,GAAK,OAAOA,EAAEsxB,EAAI/zB,EAAE+zB,CAAI,IAE1CpvB,EAAQ,EAAGA,EAAQtN,GAAKoE,OAAQkJ,IACnC+B,EAAMrP,GAAKsN,GAAOoX,EAAElO,OAAO,GACvBpO,EAAOoO,OAAOpO,EAAOhE,OAAS,KAAOiL,IAAKjH,GAAUiH,GAG1D,MAAkB,gBAAXjH,CA7BkB,CA8B3B,IAeA4T,GAAE,CAAEhQ,OAAQ,QAASK,OAAO,EAAMG,OAbrB6/C,KAAuBC,KAAkBC,KAAkBC,IAapB,CAClDxsB,KAAM,SAAckrB,QACAxpD,IAAdwpD,GAAyBrlD,GAAUqlD,GAEvC,IAAIhnC,EAAQtd,GAASnH,MAErB,GAAI+sD,GAAa,YAAqB9qD,IAAdwpD,EAA0BkB,GAAWloC,GAASkoC,GAAWloC,EAAOgnC,GAExF,IAEIyB,EAAar/C,EAFbs/C,EAAQ,GACRC,EAAcp/C,GAAkByW,GAGpC,IAAK5W,EAAQ,EAAGA,EAAQu/C,EAAav/C,IAC/BA,KAAS4W,GAAO3d,GAAKqmD,EAAO1oC,EAAM5W,IAQxC,IALAy+C,GAAaa,EA3BI,SAAU1B,GAC7B,OAAO,SAAUn+C,EAAGgE,GAClB,YAAUrP,IAANqP,GAAyB,OACnBrP,IAANqL,EAAwB,OACVrL,IAAdwpD,GAAiCA,EAAUn+C,EAAGgE,IAAM,EACjDhQ,GAASgM,GAAKhM,GAASgQ,GAAK,GAAK,CAC5C,CACA,CAoBwB+7C,CAAe5B,IAEnCyB,EAAcl/C,GAAkBm/C,GAChCt/C,EAAQ,EAEDA,EAAQq/C,GAAazoC,EAAM5W,GAASs/C,EAAMt/C,KACjD,KAAOA,EAAQu/C,GAAan8B,GAAsBxM,EAAO5W,KAEzD,OAAO4W,CACR,ICtGH,IAEA8b,GAFmB7+B,GAEW,SAAS6+B,KCHnC17B,GAAgBvE,GAChBoE,GAAShD,GAET0d,GAAiBlJ,MAAMtV,UCHvBsQ,GDKa,SAAUxR,GACzB,IAAIyR,EAAMzR,EAAG6gC,KACb,OAAO7gC,IAAO0f,IAAmBva,GAAcua,GAAgB1f,IAAOyR,IAAQiO,GAAemhB,KAAQ77B,GAASyM,CAChH,OCNiBD,ICEjBjC,GAFmBvL,GAEW,SAASuL,KCHnCxL,GAAU/B,GACV2F,GAAS3D,GACTmB,GAAgBoB,GAChBvB,GCJSpE,GDMT8e,GAAiBlJ,MAAMtV,UAEvB6gB,GAAe,CACjBO,cAAc,EACdU,UAAU,GEXZzT,GFciB,SAAUvP,GACzB,IAAIyR,EAAMzR,EAAGuP,KACb,OAAOvP,IAAO0f,IAAmBva,GAAcua,GAAgB1f,IAAOyR,IAAQiO,GAAenQ,MACxF5H,GAAOoa,GAAche,GAAQ/D,IAAOgF,GAASyM,CACpD,WGbAmN,GAFmB5a,GAEW,SAAS4a,OCHnC7a,GAAU/B,GACV2F,GAAS3D,GACTmB,GAAgBoB,GAChBvB,GCJSpE,GDMT8e,GAAiBlJ,MAAMtV,UAEvB6gB,GAAe,CACjBO,cAAc,EACdU,UAAU,GEXZpE,GFciB,SAAU5e,GACzB,IAAIyR,EAAMzR,EAAG4e,OACb,OAAO5e,IAAO0f,IAAmBva,GAAcua,GAAgB1f,IAAOyR,IAAQiO,GAAed,QACxFjX,GAAOoa,GAAche,GAAQ/D,IAAOgF,GAASyM,CACpD,WGbAkN,GAFmB3a,GAEW,SAAS2a,QCHnC5a,GAAU/B,GACV2F,GAAS3D,GACTmB,GAAgBoB,GAChBvB,GCJSpE,GDMT8e,GAAiBlJ,MAAMtV,UAEvB6gB,GAAe,CACjBO,cAAc,EACdU,UAAU,GEXZrE,GFciB,SAAU3e,GACzB,IAAIyR,EAAMzR,EAAG2e,QACb,OAAO3e,IAAO0f,IAAmBva,GAAcua,GAAgB1f,IAAOyR,IAAQiO,GAAef,SACxFhX,GAAOoa,GAAche,GAAQ/D,IAAOgF,GAASyM,CACpD,gBGlBiB7Q,ICCbic,GAAIjc,GAEJO,GAAQ6C,EACRlD,GAAOyF,GACPo5C,GAAez3C,GACf8C,GAAW5C,GACX1D,GAAWiF,GACXwR,GAAStR,GACTrJ,GAAQoL,EAERgiD,GATa5rD,GASgB,UAAW,aACxCwZ,GAAkB7Y,OAAOzB,UACzBkG,GAAO,GAAGA,KAMVymD,GAAiBrtD,IAAM,WACzB,SAASqQ,IAAmB,CAC5B,QAAS+8C,IAAgB,WAA2B,GAAE,GAAI/8C,aAAcA,EAC1E,IAEIi9C,IAAYttD,IAAM,WACpBotD,IAAgB,WAAY,GAC9B,IAEIvhD,GAASwhD,IAAkBC,GAE/BjxC,GAAE,CAAEhQ,OAAQ,UAAWG,MAAM,EAAMK,OAAQhB,GAAQlG,KAAMkG,IAAU,CACjEgF,UAAW,SAAmB08C,EAAQ98C,GACpC0uC,GAAaoO,GACb/iD,GAASiG,GACT,IAAI+8C,EAAYzsD,UAAU0D,OAAS,EAAI8oD,EAASpO,GAAap+C,UAAU,IACvE,GAAIusD,KAAaD,GAAgB,OAAOD,GAAgBG,EAAQ98C,EAAM+8C,GACtE,GAAID,IAAWC,EAAW,CAExB,OAAQ/8C,EAAKhM,QACX,KAAK,EAAG,OAAO,IAAI8oD,EACnB,KAAK,EAAG,OAAO,IAAIA,EAAO98C,EAAK,IAC/B,KAAK,EAAG,OAAO,IAAI88C,EAAO98C,EAAK,GAAIA,EAAK,IACxC,KAAK,EAAG,OAAO,IAAI88C,EAAO98C,EAAK,GAAIA,EAAK,GAAIA,EAAK,IACjD,KAAK,EAAG,OAAO,IAAI88C,EAAO98C,EAAK,GAAIA,EAAK,GAAIA,EAAK,GAAIA,EAAK,IAG5D,IAAIg9C,EAAQ,CAAC,MAEb,OADA9sD,GAAMiG,GAAM6mD,EAAOh9C,GACZ,IAAK9P,GAAML,GAAMitD,EAAQE,GACjC,CAED,IAAI/gD,EAAQ8gD,EAAU9sD,UAClBijB,EAAWhJ,GAAOzW,GAASwI,GAASA,EAAQsO,IAC5CvS,EAAS9H,GAAM4sD,EAAQ5pC,EAAUlT,GACrC,OAAOvM,GAASuE,GAAUA,EAASkb,CACpC,ICrDH,SAAWniB,GAEWV,QAAQ+P,gBCFnBrP,GAEWW,OAAOqD,uCCHzB6W,GAAIjc,GACJJ,GAAQwB,EACRyC,GAAkBT,EAClB8lB,GAAiCvjB,EAA2DnD,EAC5FqG,GAAcvB,EAMlB2U,GAAE,CAAEhQ,OAAQ,SAAUG,MAAM,EAAMK,QAJpB5D,IAAejJ,IAAM,WAAcspB,GAA+B,EAAG,IAIjC3jB,MAAOsD,IAAe,CACtExG,yBAA0B,SAAkCjD,EAAI+G,GAC9D,OAAO+iB,GAA+BrlB,GAAgBzE,GAAK+G,EAC5D,ICZH,IAEIpE,GAFOX,GAEOW,OAEdM,GAA2BolB,GAAA3S,QAAiB,SAAkC1V,EAAI+G,GACpF,OAAOpE,GAAOM,yBAAyBjD,EAAI+G,EAC7C,EAEIpE,GAAOM,yBAAyBkD,OAAMlD,GAAyBkD,MAAO,OCP1ElD,mBCHiBrC,ICGb6vB,GAAUzsB,GACVS,GAAkB8B,EAClB8hB,GAAiCngB,EACjCoY,GAAiBlY,GALbxH,GASN,CAAEiM,OAAQ,SAAUG,MAAM,EAAM7G,MARhBnE,GAQsC,CACtDksD,0BAA2B,SAAmCviD,GAO5D,IANA,IAKI5E,EAAKzD,EALL0G,EAAIvF,GAAgBkH,GACpB1I,EAA2BolB,GAA+BjlB,EAC1DmM,EAAOkhB,GAAQzmB,GACff,EAAS,CAAA,EACTkF,EAAQ,EAELoB,EAAKtK,OAASkJ,QAEA5L,KADnBe,EAAaL,EAAyB+G,EAAGjD,EAAMwI,EAAKpB,QACtBmS,GAAerX,EAAQlC,EAAKzD,GAE5D,OAAO2F,CACR,ICrBH,SAAWjH,GAEWW,OAAOurD,2CCHzBrxC,GAAIjc,GACJ6I,GAAczH,EACdiX,GAAmBjV,GAAiDZ,EAKvE+qD,GAAC,CAAEthD,OAAQ,SAAUG,MAAM,EAAMK,OAAQ1K,OAAOsW,mBAAqBA,GAAkB9S,MAAOsD,IAAe,CAC5GwP,iBAAkBA,KCPpB,IAEItW,GAFOX,GAEOW,OAEdsW,GAAmBK,GAAA5D,QAAiB,SAA0BtF,EAAG6jB,GACnE,OAAOtxB,GAAOsW,iBAAiB7I,EAAG6jB,EACpC,EAEItxB,GAAOsW,iBAAiB9S,OAAM8S,GAAiB9S,MAAO,wBCP1D,IAAIioD,GACJ,MAAMC,GAAQ,IAAIC,WAAW,IACd,SAASC,KAEtB,IAAKH,KAEHA,GAAoC,oBAAXI,QAA0BA,OAAOJ,iBAAmBI,OAAOJ,gBAAgBttD,KAAK0tD,SAEpGJ,IACH,MAAM,IAAI5kB,MAAM,4GAIpB,OAAO4kB,GAAgBC,GACzB,CCXA,MAAMI,GAAY,GAElB,IAAK,IAAIt/C,EAAI,EAAGA,EAAI,MAAOA,EACzBs/C,GAAUrnD,MAAM+H,EAAI,KAAOvN,SAAS,IAAIE,MAAM,ICRjC,OAAA4sD,GAAA,CACbC,WAFmC,oBAAXH,QAA0BA,OAAOG,YAAcH,OAAOG,WAAW7tD,KAAK0tD,SCIhG,SAASI,GAAGxiD,EAASyiD,EAAKpiC,GACxB,GAAIiiC,GAAOC,aAAeE,IAAQziD,EAChC,OAAOsiD,GAAOC,aAIhB,MAAMG,GADN1iD,EAAUA,GAAW,IACAtE,SAAWsE,EAAQmiD,KAAOA,MAK/C,GAHAO,EAAK,GAAe,GAAVA,EAAK,GAAY,GAC3BA,EAAK,GAAe,GAAVA,EAAK,GAAY,IAEvBD,EAAK,CACPpiC,EAASA,GAAU,EAEnB,IAAK,IAAItd,EAAI,EAAGA,EAAI,KAAMA,EACxB0/C,EAAIpiC,EAAStd,GAAK2/C,EAAK3/C,GAGzB,OAAO0/C,CACR,CAED,OFbK,SAAyB7/B,EAAKvC,EAAS,GAG5C,OAAOgiC,GAAUz/B,EAAIvC,EAAS,IAAMgiC,GAAUz/B,EAAIvC,EAAS,IAAMgiC,GAAUz/B,EAAIvC,EAAS,IAAMgiC,GAAUz/B,EAAIvC,EAAS,IAAM,IAAMgiC,GAAUz/B,EAAIvC,EAAS,IAAMgiC,GAAUz/B,EAAIvC,EAAS,IAAM,IAAMgiC,GAAUz/B,EAAIvC,EAAS,IAAMgiC,GAAUz/B,EAAIvC,EAAS,IAAM,IAAMgiC,GAAUz/B,EAAIvC,EAAS,IAAMgiC,GAAUz/B,EAAIvC,EAAS,IAAM,IAAMgiC,GAAUz/B,EAAIvC,EAAS,KAAOgiC,GAAUz/B,EAAIvC,EAAS,KAAOgiC,GAAUz/B,EAAIvC,EAAS,KAAOgiC,GAAUz/B,EAAIvC,EAAS,KAAOgiC,GAAUz/B,EAAIvC,EAAS,KAAOgiC,GAAUz/B,EAAIvC,EAAS,IAChf,CESSsiC,CAAgBD,EACzB,iuDCmDA,IASME,GAAc,WAwBlB,SAAAA,EACmBC,EACAC,EACAC,GAAwB,IAAA//B,EAAA+c,EAAAgH,EAAAjvB,QAAA8qC,GAAAnR,GAAAv9C,KAAA,eAAA,GAAAu9C,GAAAv9C,KAAA,qBAAA,GAAAu9C,GAAAv9C,KAAA,eAAA,GApB3Cu9C,GAGsDv9C,KAAA,aAAA,CACpDwnC,IAAKyV,GAAAnuB,EAAI9uB,KAAC8uD,MAAIhuD,KAAAguB,EAAM9uB,MACpBioC,OAAQgV,GAAApR,EAAI7rC,KAAC+uD,SAAOjuD,KAAA+qC,EAAM7rC,MAC1Bg5B,OAAQikB,GAAApK,EAAI7yC,KAACgvD,SAAOluD,KAAA+xC,EAAM7yC,QAYTA,KAAO2uD,QAAPA,EACA3uD,KAAa4uD,cAAbA,EACA5uD,KAAO6uD,QAAPA,EAwFlB,wBApFMvrD,MAAA,WAEL,OADAtD,KAAK6uD,QAAQ71B,OAAOh5B,KAAKivD,gBAAgBjvD,KAAK2uD,QAAQpsD,QAC/CvC,oBAIFsD,MAAA,WAKL,OAJAtD,KAAK2uD,QAAQt5C,GAAG,MAAOrV,KAAKkvD,WAAW1nB,KACvCxnC,KAAK2uD,QAAQt5C,GAAG,SAAUrV,KAAKkvD,WAAWjnB,QAC1CjoC,KAAK2uD,QAAQt5C,GAAG,SAAUrV,KAAKkvD,WAAWl2B,QAEnCh5B,mBAIFsD,MAAA,WAKL,OAJAtD,KAAK2uD,QAAQj5C,IAAI,MAAO1V,KAAKkvD,WAAW1nB,KACxCxnC,KAAK2uD,QAAQj5C,IAAI,SAAU1V,KAAKkvD,WAAWjnB,QAC3CjoC,KAAK2uD,QAAQj5C,IAAI,SAAU1V,KAAKkvD,WAAWl2B,QAEpCh5B,OAGT,CAAAyG,IAAA,kBAAAnD,MAMQ,SAAgB6pD,GAAgB,IAAAla,EACtC,OAAOkc,GAAAlc,EAAAjzC,KAAK4uD,eAAa9tD,KAAAmyC,GAAQ,SAACka,EAAOiC,GACvC,OAAOA,EAAUjC,EAClB,GAAEA,KAGL,CAAA1mD,IAAA,OAAAnD,MAMQ,SACN+rD,EACAC,GAEe,MAAXA,GAIJtvD,KAAK6uD,QAAQrnB,IAAIxnC,KAAKivD,gBAAgBjvD,KAAK2uD,QAAQpsD,IAAI+sD,EAAQnC,WAGjE,CAAA1mD,IAAA,UAAAnD,MAMQ,SACN+rD,EACAC,GAEe,MAAXA,GAIJtvD,KAAK6uD,QAAQ71B,OAAOh5B,KAAKivD,gBAAgBjvD,KAAK2uD,QAAQpsD,IAAI+sD,EAAQnC,WAGpE,CAAA1mD,IAAA,UAAAnD,MAMQ,SACN+rD,EACAC,GAEe,MAAXA,GAIJtvD,KAAK6uD,QAAQ5mB,OAAOjoC,KAAKivD,gBAAgBK,EAAQC,cAClDb,CAAA,CAnHiB,GA6Hdc,GAAyB,WAgB7B,SAAAA,EAAoCb,GAA8B/qC,QAAA4rC,GAAAjS,GAAAv9C,KAAA,eAAA,GAZlEu9C,wBAIqD,IAQjBv9C,KAAO2uD,QAAPA,EAyDnC,OAvDD5gC,GAAAyhC,EAAA,CAAA,CAAA/oD,IAAA,SAAAnD,MAOO,SACLsxB,GAGA,OADA50B,KAAK4uD,cAAc9nD,MAAK,SAACuB,GAAK,OAAgBonD,GAAApnD,GAAKvH,KAALuH,EAAausB,MACpD50B,OAGT,CAAAyG,IAAA,MAAAnD,MASO,SACLsxB,GAGA,OADA50B,KAAK4uD,cAAc9nD,MAAK,SAACuB,GAAK,OAAgBgkC,GAAAhkC,GAAKvH,KAALuH,EAAUusB,MACjD50B,OAGT,CAAAyG,IAAA,UAAAnD,MASO,SACLsxB,GAGA,OADA50B,KAAK4uD,cAAc9nD,MAAK,SAACuB,GAAK,OAAgBqnD,GAAArnD,GAAKvH,KAALuH,EAAcusB,MACrD50B,OAGT,CAAAyG,IAAA,KAAAnD,MAOO,SAAGiJ,GACR,OAAO,IAAImiD,GAAe1uD,KAAK2uD,QAAS3uD,KAAK4uD,cAAeriD,OAC7DijD,CAAA,CAzE4B,iilBA/IzB,SAGJ7uC,GACA,OAAO,IAAI6uC,GAA0B7uC,EACvC,uCCxEI/gB,GAASU,EACTJ,GAAQwB,EAERJ,GAAW2E,GACX+sB,GAAOprB,GAAoCorB,KAC3CL,GAAc7qB,GAEdiP,GALcrT,EAKO,GAAGqT,QACxB44C,GAAc/vD,GAAOgwD,WACrBhqD,GAAShG,GAAOgG,OAChByV,GAAWzV,IAAUA,GAAOG,SAOhC8pD,GANa,EAAIF,GAAYh9B,GAAc,QAAWm9B,KAEhDz0C,KAAanb,IAAM,WAAcyvD,GAAYttD,OAAOgZ,IAAa,IAI7C,SAAoBlR,GAC5C,IAAI4lD,EAAgB/8B,GAAK1xB,GAAS6I,IAC9BxB,EAASgnD,GAAYI,GACzB,OAAkB,IAAXpnD,GAA6C,MAA7BoO,GAAOg5C,EAAe,IAAc,EAAIpnD,CACjE,EAAIgnD,GCrBIrvD,GAKN,CAAEV,QAAQ,EAAMmN,OAAQ6iD,aAJRluD,IAIsC,CACtDkuD,WALgBluD,KCAlB,SAAWA,GAEWkuD,YCHlBrzC,GAAIjc,GACJJ,GAAQwB,EACR0jB,GAAsB1hB,GAA+DZ,EAOzFyZ,GAAE,CAAEhQ,OAAQ,SAAUG,MAAM,EAAMK,OAJR7M,IAAM,WAAc,OAAQmC,OAAO+iB,oBAAoB,EAAG,KAInB,CAC/DA,oBAAqBA,KCTvB,IAEI/iB,GAFOX,GAEOW,OCHd6O,GDKa,SAA6BxR,GAC5C,OAAO2C,GAAO+iB,oBAAoB1lB,EACpC,OCLiBwR,ICwBV,SAAS8+C,GAASC,EAAWC,GAElC,IAAMC,EAAU,CAAC,OAAQ,OAAQ,SAC7B7sD,GAAQ,EAEN8sD,EAASC,GAAQH,EAAM,UAC7B,GAAsB,kBAAXE,EACT9sD,EAAQ8sD,OACH,GAAsB,WAAlBhjC,GAAOgjC,GAAqB,CACrC,IAAoC,IAAhCrhB,GAAAohB,GAAOrvD,KAAPqvD,EAAgBF,GAClB,MAAM,IAAI/mB,MACR,wBACE+mB,EADF,uBAIEE,EAAQtgD,KAAK,QACb,KAIN,IAAMygD,EAAaD,GAAQH,EAAM,CAAC,SAAUD,IAClB,kBAAfK,GAAkD,mBAAfA,IAC5ChtD,EAAQgtD,EAEZ,CAEA,OAAOhtD,CACT,CAUO,SAASitD,GAAY97C,EAAMsK,EAAOyxC,GACvC,GAAI/7C,EAAKihC,OAAS,GAAKjhC,EAAKkhC,QAAU,EACpC,OAAO,EAGT,QAAsB1zC,IAAlBuuD,EAA6B,CAE/B,IAAMC,EAAM,CACVnjD,EAAGyR,EAAMzR,EAAIkjD,EAAcljD,EAC3BgE,EAAGyN,EAAMzN,EAAIk/C,EAAcl/C,GAG7B,GAA4B,IAAxBk/C,EAAcz0B,MAAa,CAG7B,IAAMA,GAASy0B,EAAcz0B,MAM7Bhd,EAJa,CACXzR,EAAG3N,KAAK0U,IAAI0nB,GAAS00B,EAAInjD,EAAI3N,KAAK2U,IAAIynB,GAAS00B,EAAIn/C,EACnDA,EAAG3R,KAAK2U,IAAIynB,GAAS00B,EAAInjD,EAAI3N,KAAK0U,IAAI0nB,GAAS00B,EAAIn/C,EAGvD,MACEyN,EAAQ0xC,CAOZ,CAEA,IAAM/F,EAAQj2C,EAAKnH,EAAImH,EAAKihC,MACtBgb,EAASj8C,EAAKnD,EAAImD,EAAKihC,MAE7B,OACEjhC,EAAKiiC,KAAO33B,EAAMzR,GAClBo9C,EAAQ3rC,EAAMzR,GACdmH,EAAKkiC,IAAM53B,EAAMzN,GACjBo/C,EAAS3xC,EAAMzN,CAEnB,CAQO,SAASq/C,GAAahf,GAE3B,MAAuB,iBAATA,GAA8B,KAATA,CACrC,CAWO,SAASif,GAAsBv/C,EAAK0qB,EAAOpnB,EAAQ8lB,GACxD,IAAIntB,EAAImtB,EAAKntB,EACTgE,EAAImpB,EAAKnpB,EAEb,GAAqC,mBAA1BmpB,EAAKo2B,iBAAiC,CAI/C,IAAMC,EAAer2B,EAAKo2B,iBAAiBx/C,EAAK0qB,GAC1Cg1B,EAAkBpxD,KAAK2U,IAAIynB,GAAS+0B,EACpCE,EAAkBrxD,KAAK0U,IAAI0nB,GAAS+0B,EAKtCE,IAAoBF,GACtBxjD,GAAKwjD,EACLx/C,EAAImpB,EAAKnpB,GACAy/C,IAAoBD,GAC7BxjD,EAAImtB,EAAKntB,EACTgE,GAAKw/C,IAELxjD,GAAK0jD,EACL1/C,GAAKy/C,EAET,MAAWt2B,EAAKmY,MAAM8C,MAAQjb,EAAKmY,MAAM+C,QACvCroC,EAAImtB,EAAKntB,EAAuB,GAAnBmtB,EAAKmY,MAAM8C,MACxBpkC,EAAImpB,EAAKnpB,EAAIqD,IAEbrH,EAAImtB,EAAKntB,EAAIqH,EACbrD,EAAImpB,EAAKnpB,EAAwB,GAApBmpB,EAAKmY,MAAM+C,QAG1B,MAAO,CAAEroC,EAAAA,EAAGgE,EAAAA,EACd,CCxJA,IAKM2/C,GAAgB,WAIpB,SAAAA,EAAYC,GAAattC,QAAAqtC,GACvBjxD,KAAKkxD,YAAcA,EACnBlxD,KAAKkL,QAAU,EACflL,KAAK01C,MAAQ,EACb11C,KAAK21C,OAAS,EACd31C,KAAKmxD,MAAQ,EACf,CAuMC,OArMDpjC,GAAAkjC,EAAA,CAAA,CAAAxqD,IAAA,OAAAnD,MAQA,SAAK+rB,EAAGsiB,GAAsB,IAAhByf,EAAGnwD,UAAA0D,OAAA,QAAA1C,IAAAhB,UAAA,GAAAA,UAAA,GAAG,cACIgB,IAAlBjC,KAAKmxD,MAAM9hC,KACbrvB,KAAKmxD,MAAM9hC,GAAK,CACdqmB,MAAO,EACPC,OAAQ,EACR0b,OAAQ,KAUZ,IAAIC,EAAU3f,OACD1vC,IAAT0vC,GAA+B,KAATA,IAAa2f,EAAU,KAGjD,IAAM3oD,EAAS3I,KAAKkxD,YAAYI,EAASF,GACnCG,EAAQtV,GAAc,CAAA,EAAEuV,GAAE7oD,IAChC4oD,EAAM5f,KAAOA,EACb4f,EAAM7b,MAAQ/sC,EAAO+sC,MACrB6b,EAAMH,IAAMA,OAECnvD,IAAT0vC,GAA+B,KAATA,IACxB4f,EAAM7b,MAAQ,GAGhB11C,KAAKmxD,MAAM9hC,GAAGgiC,OAAOvqD,KAAKyqD,GAG1BvxD,KAAKmxD,MAAM9hC,GAAGqmB,OAAS6b,EAAM7b,KAC/B,GAEA,CAAAjvC,IAAA,WAAAnD,MAKA,WACE,IAAMmuD,EAAOzxD,KAAKmxD,MAAMnxD,KAAKkL,SAC7B,YAAajJ,IAATwvD,EAA2B,EAExBA,EAAK/b,KACd,GAEA,CAAAjvC,IAAA,SAAAnD,MAMA,SAAOquC,GAAsB,IAAhByf,EAAGnwD,UAAA0D,OAAA,QAAA1C,IAAAhB,UAAA,GAAAA,UAAA,GAAG,SACjBjB,KAAK8uD,KAAK9uD,KAAKkL,QAASymC,EAAMyf,EAChC,GAEA,CAAA3qD,IAAA,UAAAnD,MAMA,SAAQquC,GAAsB,IAAhByf,EAAGnwD,UAAA0D,OAAA,QAAA1C,IAAAhB,UAAA,GAAAA,UAAA,GAAG,SAClBjB,KAAK8uD,KAAK9uD,KAAKkL,QAASymC,EAAMyf,GAC9BpxD,KAAKkL,SACP,GAEA,CAAAzE,IAAA,uBAAAnD,MAOA,WACE,IAAK,IAAI2hB,EAAI,EAAGA,EAAIjlB,KAAKmxD,MAAMxsD,OAAQsgB,IAAK,CAC1C,IAAMwsC,EAAOzxD,KAAKmxD,MAAMlsC,GAGpB0wB,EAAS,EAEb,QAAoB1zC,IAAhBwvD,EAAKJ,OAEP,IAAK,IAAIhiC,EAAI,EAAGA,EAAIoiC,EAAKJ,OAAO1sD,OAAQ0qB,IAAK,CAC3C,IAAMkiC,EAAQE,EAAKJ,OAAOhiC,GAEtBsmB,EAAS4b,EAAM5b,SACjBA,EAAS4b,EAAM5b,OAEnB,CAGF8b,EAAK9b,OAASA,CAChB,CACF,GAEA,CAAAlvC,IAAA,qBAAAnD,MAKA,WAGE,IAFA,IAAIoyC,EAAQ,EACRC,EAAS,EACJ1wB,EAAI,EAAGA,EAAIjlB,KAAKmxD,MAAMxsD,OAAQsgB,IAAK,CAC1C,IAAMwsC,EAAOzxD,KAAKmxD,MAAMlsC,GAEpBwsC,EAAK/b,MAAQA,IACfA,EAAQ+b,EAAK/b,OAEfC,GAAU8b,EAAK9b,MACjB,CAEA31C,KAAK01C,MAAQA,EACb11C,KAAK21C,OAASA,CAChB,GAEA,CAAAlvC,IAAA,oBAAAnD,MASA,WAEE,IADA,IAAMouD,EAAW,GACRzsC,EAAI,EAAGA,EAAIjlB,KAAKmxD,MAAMxsD,OAAQsgB,IAAK,CAC1C,IAAMwsC,EAAOzxD,KAAKmxD,MAAMlsC,GAIxB,GAA2B,IAAvBwsC,EAAKJ,OAAO1sD,SAGZsgB,IAAMjlB,KAAKmxD,MAAMxsD,OAAS,GACT,IAAf8sD,EAAK/b,OADX,CAIA,IAAMic,EAAU,CAAA,EAChB1V,GAAc0V,EAASF,GACvBE,EAAQN,OAAS,GAIjB,IAFA,IAAIO,OAAe,EACbC,EAAY,GACTxiC,EAAI,EAAGA,EAAIoiC,EAAKJ,OAAO1sD,OAAQ0qB,IAAK,CAC3C,IAAMkiC,EAAQE,EAAKJ,OAAOhiC,GACN,IAAhBkiC,EAAM7b,MACRmc,EAAU/qD,KAAKyqD,QAEStvD,IAApB2vD,IACFA,EAAkBL,EAGxB,CAGyB,IAArBM,EAAUltD,aAAoC1C,IAApB2vD,GAC5BC,EAAU/qD,KAAK8qD,GAGjBD,EAAQN,OAASQ,EAEjBH,EAAS5qD,KAAK6qD,EA1Bd,CA2BF,CAEA,OAAOD,CACT,GAEA,CAAAjrD,IAAA,WAAAnD,MAKA,WAGEtD,KAAK8xD,uBACL9xD,KAAK+xD,qBACL,IAAML,EAAW1xD,KAAKgyD,oBAGtB,MAAO,CACLtc,MAAO11C,KAAK01C,MACZC,OAAQ31C,KAAK21C,OACbwb,MAAOO,EAEX,KAACT,CAAA,CAjNmB,GCVhBgB,GAAa,CAEjB,MAAO,MACP,MAAO,MACP,SAAU,SACV,OAAQ,QACR,OAAQ,QACR,UAAW,WAEX,IAAK,KACLC,EAAG,IACH,IAAK,IACLC,UAAW,OACXC,UAAW,OACXC,UAAW,QASPC,GAAiB,WAMrB,SAAAA,EAAY3gB,GAAM/tB,QAAA0uC,GAChBtyD,KAAK2xC,KAAOA,EACZ3xC,KAAKuyD,MAAO,EACZvyD,KAAKwyD,MAAO,EACZxyD,KAAKyyD,MAAO,EACZzyD,KAAK0yD,SAAU,EACf1yD,KAAKqX,SAAW,EAChBrX,KAAKi4C,OAAS,GACdj4C,KAAK2yD,SAAW,GAEhB3yD,KAAKqxD,OAAS,EAChB,CAwNC,OAtNDtjC,GAAAukC,EAAA,CAAA,CAAA7rD,IAAA,MAAAnD,MAMA,WACE,OAAgC,IAAzBtD,KAAK2yD,SAAShuD,OAAe,SAAW3E,KAAK2yD,SAAS,EAC/D,GAEA,CAAAlsD,IAAA,UAAAnD,MAMA,WACE,OAA6B,IAAzBtD,KAAK2yD,SAAShuD,OAAqB,SACT,SAArB3E,KAAK2yD,SAAS,GAAsB,OAEvC3yD,KAAKuyD,MAAQvyD,KAAKwyD,KACb,WACExyD,KAAKuyD,KACP,OACEvyD,KAAKwyD,KACP,YADF,CAIX,GAEA,CAAA/rD,IAAA,YAAAnD,MAGA,WACMtD,KAAK0yD,UACP1yD,KAAKwnC,IAAI,KACTxnC,KAAK0yD,SAAU,GAEb1yD,KAAKi4C,OAAOtzC,OAAS,IACvB3E,KAAKqxD,OAAOvqD,KAAK,CAAE6qC,KAAM3xC,KAAKi4C,OAAQmZ,IAAKpxD,KAAK4yD,YAChD5yD,KAAKi4C,OAAS,GAElB,GAEA,CAAAxxC,IAAA,MAAAnD,MAMA,SAAIquC,GACW,MAATA,IACF3xC,KAAK0yD,SAAU,GAEb1yD,KAAK0yD,UACP1yD,KAAKi4C,QAAU,IACfj4C,KAAK0yD,SAAU,GAEL,KAAR/gB,IACF3xC,KAAKi4C,QAAUtG,EAEnB,GAEA,CAAAlrC,IAAA,UAAAnD,MAMA,SAAQuvD,GACN,QAAI,QAAQtyD,KAAKsyD,KACV7yD,KAAKyyD,KAGRzyD,KAAKwnC,IAAIqrB,GAFT7yD,KAAK0yD,SAAU,GAIV,EAIX,GAEA,CAAAjsD,IAAA,SAAAnD,MAIA,SAAOwvD,GACL9yD,KAAK+yD,YACL/yD,KAAK8yD,IAAW,EAChB9yD,KAAK2yD,SAASK,QAAQF,EACxB,GAEA,CAAArsD,IAAA,WAAAnD,MAIA,SAASwvD,GACP9yD,KAAK+yD,YACL/yD,KAAK8yD,IAAW,EAChB9yD,KAAK2yD,SAASlkB,OAChB,GAEA,CAAAhoC,IAAA,gBAAAnD,MAKA,SAAcwvD,EAASl8C,GAErB,QAAK5W,KAAKyyD,MAASzyD,KAAK8yD,KAAY9yD,KAAKkD,MAAM0T,MAC7C5W,KAAKizD,OAAOH,IACL,EAIX,GAEA,CAAArsD,IAAA,QAAAnD,MAMA,SAAMsT,GAAqB,IAAhBs8C,IAAOjyD,UAAA0D,OAAA,QAAA1C,IAAAhB,UAAA,KAAAA,UAAA,GACgCkyD,EAAAjkC,GAAvBlvB,KAAKozD,cAAcx8C,GAAI,GAAzCy8C,EAAMF,EAAA,GAAExuD,EAAMwuD,EAAA,GACfG,EAAUD,EAAO9yD,KAAKP,KAAK2xC,KAAKE,OAAO7xC,KAAKqX,SAAU1S,IAM5D,OAJI2uD,GAAWJ,IACblzD,KAAKqX,UAAY1S,EAAS,GAGrB2uD,CACT,GAEA,CAAA7sD,IAAA,cAAAnD,MAMA,SAAYwvD,EAASl8C,EAAK28C,GACxB,IAAIC,EAAWxzD,KAAKoxD,QAAU0B,EAQ9B,UALEU,EAFc,SAAZV,EAESU,GAAYxzD,KAAKyyD,KAEjBe,IAAaxzD,KAAKyyD,QAGfzyD,KAAKkD,MAAM0T,WACT3U,IAAZsxD,GAIAvzD,KAAKqX,WAAarX,KAAK2xC,KAAKhtC,OAAS,GACrC3E,KAAKkD,MAAMqwD,GAAS,KAEpBvzD,KAAKyzD,SAASX,GAGhB9yD,KAAKyzD,SAASX,IAGT,EAIX,GAEA,CAAArsD,IAAA,UAAAnD,MAKA,SAAQsT,EAAKtT,GACX,QAAItD,KAAKkD,MAAM0T,KACb5W,KAAKwnC,IAAIlkC,GACTtD,KAAKqX,UAAY1S,OAAS,GACnB,EAIX,GAEA,CAAA8B,IAAA,gBAAAnD,MAWA,SAAcsT,GACZ,IAAIjS,EACA0uD,EACJ,GAAIz8C,aAAeic,OACjBwgC,EAASz8C,EACTjS,EAAS,MACJ,CAEL,IAAM+uD,EAAWzB,GAAWr7C,GAE1By8C,OADepxD,IAAbyxD,EACOA,EAEA,IAAI7gC,OAAOjc,GAGtBjS,EAASiS,EAAIjS,MACf,CAEA,MAAO,CAAC0uD,EAAQ1uD,EAClB,KAAC2tD,CAAA,CAzOoB,GAiPjBqB,GAAa,WAOjB,SAAAA,EAAYtiD,EAAKH,EAAQ0iD,EAAUnf,GAAO,IAAA7U,EAAA5/B,KAAA4jB,QAAA+vC,GACxC3zD,KAAKqR,IAAMA,EACXrR,KAAKkR,OAASA,EACdlR,KAAK4zD,SAAWA,EAChB5zD,KAAKy0C,MAAQA,EAyBbz0C,KAAKmxD,MAAQ,IAAIF,IAhBC,SAACtf,EAAMyf,GACvB,QAAanvD,IAAT0vC,EAAoB,OAAO,EAI/B,IAAMrzB,EAASshB,EAAK1uB,OAAO2iD,oBAAoBxiD,EAAKuiD,EAAUnf,EAAO2c,GAEjE1b,EAAQ,EACC,KAAT/D,IAEF+D,EADgB9V,EAAKvuB,IAAI6/C,YAAYvf,GACrB+D,OAGlB,MAAO,CAAEA,MAAAA,EAAOp3B,OAAQA,KAI5B,CAgVC,OA9UDyP,GAAA4lC,EAAA,CAAA,CAAAltD,IAAA,UAAAnD,MAiBA,SAAQquC,GACN,IAAKgf,GAAahf,GAChB,OAAO3xC,KAAKmxD,MAAM2C,WAGpB,IAAMC,EAAO/zD,KAAKkR,OAAO8iD,YAIzBriB,GADAA,EAAOA,EAAKvnC,QAAQ,QAAS,OACjBA,QAAQ,MAAO,MAK3B,IAAM6pD,EAAUjvD,OAAO2sC,GAAM/tC,MAAM,MAC7BswD,EAAYD,EAAQtvD,OAE1B,GAAIovD,EAAKI,MAEP,IAAK,IAAItlD,EAAI,EAAGA,EAAIqlD,EAAWrlD,IAAK,CAClC,IAAMwiD,EAASrxD,KAAKo0D,YAAYH,EAAQplD,GAAIklD,EAAKI,OAGjD,QAAelyD,IAAXovD,EAEJ,GAAsB,IAAlBA,EAAO1sD,OAAX,CAKA,GAAIovD,EAAKM,OAAS,EAGhB,IAAK,IAAIpkD,EAAI,EAAGA,EAAIohD,EAAO1sD,OAAQsL,IAAK,CACtC,IAAMmhD,EAAMC,EAAOphD,GAAGmhD,IAChBzf,EAAO0f,EAAOphD,GAAG0hC,KACvB3xC,KAAKs0D,qBAAqB3iB,EAAMyf,GAAK,EACvC,MAGA,IAAK,IAAInhD,EAAI,EAAGA,EAAIohD,EAAO1sD,OAAQsL,IAAK,CACtC,IAAMmhD,EAAMC,EAAOphD,GAAGmhD,IAChBzf,EAAO0f,EAAOphD,GAAG0hC,KACvB3xC,KAAKmxD,MAAMoD,OAAO5iB,EAAMyf,EAC1B,CAGFpxD,KAAKmxD,MAAMqD,SAnBX,MAFEx0D,KAAKmxD,MAAMqD,QAAQ,GAsBvB,MAGA,GAAIT,EAAKM,OAAS,EAGhB,IAAK,IAAIxlD,EAAI,EAAGA,EAAIqlD,EAAWrlD,IAC7B7O,KAAKs0D,qBAAqBL,EAAQplD,SAIpC,IAAK,IAAIA,EAAI,EAAGA,EAAIqlD,EAAWrlD,IAC7B7O,KAAKmxD,MAAMqD,QAAQP,EAAQplD,IAKjC,OAAO7O,KAAKmxD,MAAM2C,UACpB,GAEA,CAAArtD,IAAA,qBAAAnD,MAMA,SAAmBmxD,GACjB,IAAIC,EAAS,OAMb,MALqB,aAAjBD,GAAgD,OAAjBA,EACjCC,EAAS,YACiB,IAAjBD,GAA0C,SAAjBA,IAClCC,EAAS,QAEJA,CACT,GAEA,CAAAjuD,IAAA,kBAAAnD,MAKA,SAAgBquC,GAkBd,IAjBA,IAAM98B,EAAI,IAAIy9C,GAAkB3gB,GAE1BgjB,EAAgB,SAAC9B,GACrB,QAAI,IAAItyD,KAAKsyD,KAETh+C,EAAEzK,QAAQyK,EAAE88B,KAAM,OAAQ,MAAQ98B,EAAEzK,QAAQyK,EAAE88B,KAAM,QAAS,MAG7D98B,EAAE2yB,IAAI,MAGD,IAMJ3yB,EAAEwC,SAAWxC,EAAE88B,KAAKhtC,QAAQ,CACjC,IAAMkuD,EAAKh+C,EAAE88B,KAAK56B,OAAOlC,EAAEwC,UAGzBxC,EAAE+/C,QAAQ/B,IACT,IAAItyD,KAAKsyD,KACPh+C,EAAEggD,cAAc,OAAQ,QACvBhgD,EAAEggD,cAAc,OAAQ,QACxBhgD,EAAEggD,cAAc,OAAQ,WACxBhgD,EAAEigD,YAAY,OAAQ,SACtBjgD,EAAEigD,YAAY,OAAQ,SACtBjgD,EAAEigD,YAAY,OAAQ,aAC1BH,EAAc9B,IAGdh+C,EAAE2yB,IAAIqrB,GAERh+C,EAAEwC,UACJ,CAEA,OADAxC,EAAEk+C,YACKl+C,EAAEw8C,MACX,GAEA,CAAA5qD,IAAA,sBAAAnD,MAKA,SAAoBquC,GAuBlB,IAvBwB,IAAA3M,EAAAhlC,KAClB6U,EAAI,IAAIy9C,GAAkB3gB,GAC5BojB,GAAY,EAEVC,EAAgB,SAACnC,GACrB,QAAI,KAAKtyD,KAAKsyD,KACRh+C,EAAEwC,SAAW2tB,EAAK2M,KAAKhtC,OAAS,IAClCkQ,EAAEwC,WACFw7C,EAAK7tB,EAAK2M,KAAK56B,OAAOlC,EAAEwC,UACpB,MAAM9W,KAAKsyD,GACbh+C,EAAE69C,SAAU,GAEZ79C,EAAE2yB,IAAIqrB,GACNkC,GAAY,KAIT,IAMJlgD,EAAEwC,SAAWxC,EAAE88B,KAAKhtC,QAAQ,CACjC,IAAMkuD,EAAKh+C,EAAE88B,KAAK56B,OAAOlC,EAAEwC,UAGzBxC,EAAE+/C,QAAQ/B,IACVmC,EAAcnC,KACZkC,GAAalgD,EAAE69C,WACd79C,EAAEggD,cAAc,OAAQ,MACvBhgD,EAAEggD,cAAc,OAAQ,MACxBhgD,EAAEggD,cAAc,OAAQ,OAC5BhgD,EAAEigD,YAAY,OAAQ,IAAK,cAC3BjgD,EAAEigD,YAAY,OAAQ,IAAK,cAC3BjgD,EAAEigD,YAAY,OAAQ,IAAK,eAG3BjgD,EAAE2yB,IAAIqrB,GACNkC,GAAY,GAEdlgD,EAAEwC,UACJ,CAEA,OADAxC,EAAEk+C,YACKl+C,EAAEw8C,MACX,GAEA,CAAA5qD,IAAA,cAAAnD,MAQA,SAAYquC,EAAM8iB,GAChB,IAAMC,EAAS10D,KAAKi1D,mBAAmBR,GACvC,MAAe,SAAXC,EACK,CACL,CACE/iB,KAAMA,EACNyf,IAAK,WAGW,aAAXsD,EACF10D,KAAKk1D,oBAAoBvjB,GACZ,SAAX+iB,EACF10D,KAAKm1D,gBAAgBxjB,QADvB,CAGT,GAEA,CAAAlrC,IAAA,eAAAnD,MAKA,SAAaquC,GACX,IAAM+D,EAAQ11C,KAAKqR,IAAI6/C,YAAYvf,GAAM+D,MACzC,OAAO11C,KAAKmxD,MAAMiE,WAAa1f,EAAQ11C,KAAKkR,OAAO8iD,YAAYK,MACjE,GAEA,CAAA5tD,IAAA,gBAAAnD,MAQA,SAAc+xD,GAIZ,IAHA,IAAI1jB,EAAO,GACP9/B,EAAI,EAEDA,EAAIwjD,EAAM1wD,QAAQ,CACvB,IACM2wD,EAAU3jB,GADK,KAATA,EAAc,GAAK,KACF0jB,EAAMxjD,GAEnC,GAAI7R,KAAKu1D,aAAaD,GAAU,MAChC3jB,EAAO2jB,EACPzjD,GACF,CAEA,OAAOA,CACT,GAEA,CAAApL,IAAA,oBAAAnD,MAOA,SAAkB+xD,GAGhB,IAFA,IAAIxjD,EAAI,EAEDA,EAAIwjD,EAAM1wD,SACX3E,KAAKu1D,aAAavmC,GAAAqmC,GAAKv0D,KAALu0D,EAAY,EAAGxjD,KACrCA,IAGF,OAAOA,CACT,GAEA,CAAApL,IAAA,uBAAAnD,MAcA,SAAqBo1B,GAAyC,IAApC04B,EAAGnwD,UAAA0D,OAAA,QAAA1C,IAAAhB,UAAA,GAAAA,UAAA,GAAG,SAAUu0D,EAAUv0D,UAAA0D,OAAA,QAAA1C,IAAAhB,UAAA,IAAAA,UAAA,GAIlDjB,KAAKkR,OAAO2iD,oBAAoB7zD,KAAKqR,IAAKrR,KAAK4zD,SAAU5zD,KAAKy0C,MAAO2c,GAOrE,IAFA,IAAIiE,GADJ38B,GADAA,EAAMA,EAAItuB,QAAQ,SAAU,SAClBA,QAAQ,oBAAqB,aACvBxG,MAAM,MAEfyxD,EAAM1wD,OAAS,GAAG,CACvB,IAAIkN,EAAI7R,KAAKy1D,cAAcJ,GAE3B,GAAU,IAANxjD,EAAS,CAEX,IAAM6jD,EAAOL,EAAM,GAGb/nD,EAAItN,KAAK21D,kBAAkBD,GACjC11D,KAAKmxD,MAAMqD,QAAQxlC,GAAA0mC,GAAI50D,KAAJ40D,EAAW,EAAGpoD,GAAI8jD,GAGrCiE,EAAM,GAAKrmC,GAAA0mC,GAAI50D,KAAJ40D,EAAWpoD,EACxB,KAAO,CAEL,IAAIsoD,EAAO/jD,EACU,MAAjBwjD,EAAMxjD,EAAI,GACZA,IACyB,MAAhBwjD,EAAMO,IACfA,IAGF,IAAMjkB,EAAO3iB,GAAAqmC,GAAKv0D,KAALu0D,EAAY,EAAGxjD,GAAGhC,KAAK,IAEhCgC,GAAKwjD,EAAM1wD,QAAU6wD,EACvBx1D,KAAKmxD,MAAMoD,OAAO5iB,EAAMyf,GAExBpxD,KAAKmxD,MAAMqD,QAAQ7iB,EAAMyf,GAI3BiE,EAAQrmC,GAAAqmC,GAAKv0D,KAALu0D,EAAYO,EACtB,CACF,CACF,KAACjC,CAAA,CArXgB,GCnQbkC,GAAiB,CAAC,OAAQ,OAAQ,WAAY,QAK9CC,GAAK,WAMT,SAAAA,EAAYne,EAAM7rC,GAA4B,IAAnBiqD,EAAS90D,UAAA0D,OAAA,QAAA1C,IAAAhB,UAAA,IAAAA,UAAA,GAAQ2iB,QAAAkyC,GAC1C91D,KAAK23C,KAAOA,EACZ33C,KAAKg2D,aAAc,EACnBh2D,KAAKi2D,cAAWh0D,EAChBjC,KAAKg0D,YAAc,GACnBh0D,KAAKk2D,WAAWpqD,GAChB9L,KAAKsX,KAAO,CAAEq/B,IAAK,EAAGD,KAAM,EAAGhB,MAAO,EAAGC,OAAQ,EAAGwgB,MAAO,GAC3Dn2D,KAAKo2D,YAAcL,CACrB,CAkFC,OAhFDhoC,GAAA+nC,EAAA,CAAA,CAAArvD,IAAA,aAAAnD,MAGA,SAAWwI,GAYT,GAXA9L,KAAKq2D,eAAiBvqD,EAEtB9L,KAAKs2D,gBAAgBxqD,EAAQioD,MAEzBpD,GAAa7kD,EAAQ4mC,OACvB1yC,KAAKu2D,YAAa,EAGlBzqD,EAAQ4mC,WAAQzwC,OAGGA,IAAjB6J,EAAQioD,MAAuC,OAAjBjoD,EAAQioD,KAExC,GAA4B,iBAAjBjoD,EAAQioD,KACjB/zD,KAAKi2D,SAAWj2D,KAAKg0D,YAAY18C,UAC5B,GAA4B,WAAxB8V,GAAOthB,EAAQioD,MAAmB,CAC3C,IAAMz8C,EAAOxL,EAAQioD,KAAKz8C,UAEbrV,IAATqV,IACFtX,KAAKi2D,SAAW3+C,EAEpB,CAEJ,GAEA,CAAA7Q,IAAA,kBAAAnD,MASA,SAAgBkzD,GAAgB,IAAA52B,EAAA5/B,KAG9B2P,GAAQkmD,IAAgB,SAAC17C,GACvBylB,EAAKo0B,YAAY75C,GAAS,EAC5B,IAGI27C,EAAMW,gBAAgBz2D,KAAKg0D,YAAawC,GAC1Cx2D,KAAKg0D,YAAY0C,QAAU,EAK7B/mD,GAAQ6mD,GAAgB,SAACtgC,EAAM3oB,GACzB2oB,SAAuD,WAAhB9I,GAAO8I,KAChD0J,EAAKo0B,YAAYzmD,GAAK2oB,EAE1B,GACF,GAEA,CAAAzvB,IAAA,YAAAnD,MA8BA,SAAU4sD,GAIR,IAAM8D,EAAc,CAClB2C,gBAAgB,EAChBtC,QAAS,EACTuC,QAAS,EACTC,iBAAiB,EACjBC,QAAS,EACTC,OAAQ,UAGJC,EAAkB3G,GAAQH,EAAM,mBACtC,GAA+B,iBAApB8G,EACThD,EAAYK,OAASzmC,OAAOopC,GAC5BhD,EAAY4C,OAAShpC,OAAOopC,QACvB,GAA+B,WAA3B5pC,GAAO4pC,GAA8B,CAC9C,IAAMC,EAAyB5G,GAAQH,EAAM,CAC3C,kBACA,YAEoC,iBAA3B+G,IACTjD,EAAYK,OAASzmC,OAAOqpC,IAE9B,IAAMC,EAAyB7G,GAAQH,EAAM,CAC3C,kBACA,YAEoC,iBAA3BgH,IACTlD,EAAY4C,OAAShpC,OAAOspC,GAEhC,CAEA,IAAMC,EAAmB9G,GAAQH,EAAM,oBACvC,GAAgC,iBAArBiH,EACTnD,EAAY8C,OAASlpC,OAAOupC,QACvB,GAAgC,WAA5B/pC,GAAO+pC,GAA+B,CAC/C,IAAMC,EAA0B/G,GAAQH,EAAM,CAC5C,mBACA,YAEqC,iBAA5BkH,IACTpD,EAAY8C,OAASlpC,OAAOwpC,IAE9B,IAAMC,EAAyBhH,GAAQH,EAAM,CAC3C,mBACA,WAEoC,iBAA3BmH,IAEoB,QAA3BA,GAC2B,WAA3BA,IAEArD,EAAY+C,OAASM,GAG3B,CAEA,OAAOrD,CACT,GAEA,CAAAvtD,IAAA,SAAAnD,MAMA,SAAOwI,EAASokD,GACdlwD,KAAKk2D,WAAWpqD,GAAS,GACzB9L,KAAKs3D,eAAepH,GACpBqH,GAAWv3D,KAAKg0D,YAAah0D,KAAKw3D,UAAUtH,IAC5ClwD,KAAKg0D,YAAYyD,QAAUzH,GAAS,QAASE,EAC/C,GAEA,CAAAzpD,IAAA,cAAAnD,MAMA,SAAYo0D,GACV,IAAMC,EAAYD,EAAUA,EAAQhN,MAAQgN,EAAQhhB,KAAO,EACvD12C,KAAKg0D,YAAY2C,iBACnB32D,KAAKg0D,YAAYK,QAAUsD,EAC3B33D,KAAKg0D,YAAY4C,QAAUe,GAE7B,IAAMC,EAAaF,EAAUA,EAAQ/gB,IAAM+gB,EAAQhH,OAAS,EACxD1wD,KAAKg0D,YAAY6C,kBACnB72D,KAAKg0D,YAAY8C,QAAUc,EAE/B,GAOA,CAAAnxD,IAAA,uBAAAnD,MAOA,SAAqBu0D,EAASC,GAC5B,IAAK,IAAIjpD,EAAI,EAAGA,EAAIipD,EAAQnzD,SAAUkK,EACpC7O,KAAK+3D,cAAcF,EAASC,EAAQjpD,GAExC,GAEA,CAAApI,IAAA,gBAAAnD,MAQA,SAAc4sD,EAAMpkD,GAClB,QAAgB7J,IAAZ6J,QACiB7J,IAAjB6J,EAAQioD,MAAuC,OAAjBjoD,EAAQioD,KAA1C,CAEA,IAAM1lC,EAAOviB,EAAQioD,KACrB7D,EAAKppD,KAAKunB,EAH+C,CAI3D,GAEA,CAAA5nB,IAAA,kBAAAnD,MAOA,SAAgB4sD,GAId,IAHA,IAAM8H,EAAM,CAAA,EAGHzqD,EAAI,EAAGA,EAAI2iD,EAAKvrD,SAAU4I,EAAG,CACpC,IAAIymD,EAAc9D,EAAK3iD,GAGjB0qD,EAAe,CAAA,EACjBnC,EAAMW,gBAAgBwB,EAAcjE,KACtCA,EAAciE,GAGhBtoD,GAAQqkD,GAAa,SAACkE,EAAK/vD,QACblG,IAARi2D,IACA71D,OAAOzB,UAAUH,eAAeK,KAAKk3D,EAAK7vD,MAER,IAAlC4mC,GAAA8mB,IAAc/0D,KAAd+0D,GAAuB1tD,GAEzB6vD,EAAI7vD,GAAQ,GAEZ6vD,EAAI7vD,GAAQ+vD,GAEhB,GACF,CAEA,OAAOF,CACT,GAEA,CAAAvxD,IAAA,gBAAAnD,MA2BA,SAAc4sD,EAAMiI,EAAWC,GAI7B,IAHA,IAAIC,EAGK9qD,EAAI,EAAGA,EAAI2iD,EAAKvrD,SAAU4I,EAAG,CACpC,IAAMymD,EAAc9D,EAAK3iD,GAEzB,GAAIlL,OAAOzB,UAAUH,eAAeK,KAAKkzD,EAAamE,GAAY,CAEhE,GAAIE,OADJA,EAAYrE,EAAYmE,IAC2B,SAInD,IAAMF,EAAe,CAAA,EAKrB,GAJInC,EAAMW,gBAAgBwB,EAAcI,KACtCA,EAAYJ,GAGV51D,OAAOzB,UAAUH,eAAeK,KAAKu3D,EAAWD,GAClD,OAAOC,EAAUD,EAErB,CACF,CAIA,GAAI/1D,OAAOzB,UAAUH,eAAeK,KAAKd,KAAKg0D,YAAaoE,GACzD,OAAOp4D,KAAKg0D,YAAYoE,GAI1B,MAAM,IAAIlvB,MACR,oDAAsDkvB,EAAS,IAEnE,GAEA,CAAA3xD,IAAA,iBAAAnD,MAUA,SAAe4sD,EAAMiI,GAInB,IAHA,IAAMxvD,EAAS,CAAA,EACT2vD,EAAc,CAAC,QAAS,OAAQ,OAAQ,MAAO,WAE5CzpD,EAAI,EAAGA,EAAIypD,EAAY3zD,SAAUkK,EAAG,CAC3C,IAAMuiD,EAAMkH,EAAYzpD,GACxBlG,EAAOyoD,GAAOpxD,KAAKu4D,cAAcrI,EAAMiI,EAAW/G,EACpD,CAEA,OAAOzoD,CACT,GAMA,CAAAlC,IAAA,iBAAAnD,MAOA,SAAe4sD,GAAM,IAAAlrB,EAAAhlC,KACbw4D,EAAW,GAGjBx4D,KAAKy4D,qBAAqBD,EAAUtI,GACpClwD,KAAKg0D,YAAch0D,KAAK04D,gBAAgBF,GAGxC,IADA,IAAAG,EAAAA,WAEE,IAAMvH,EAAMyE,GAAehnD,GACrB+pD,EAAa5zB,EAAKgvB,YAAY5C,GAIpCzhD,GAH4Bq1B,EAAK6zB,eAAeL,EAAUpH,IAG7B,SAACgH,EAAQ7qD,GACpCqrD,EAAWrrD,GAAK6qD,CAClB,IAEAQ,EAAWthD,KAAOsW,OAAOgrC,EAAWthD,MACpCshD,EAAWlC,QAAU9oC,OAAOgrC,EAAWlC,UAXhC7nD,EAAI,EAAGA,EAAIgnD,GAAelxD,SAAUkK,EAAC8pD,GAahD,GAEA,CAAAlyD,IAAA,OAAAnD,MAUA,SAAK+N,EAAK/D,EAAGgE,EAAGsiD,EAAUnf,GAA4B,IAArBqkB,EAAQ73D,UAAA0D,OAAA,QAAA1C,IAAAhB,UAAA,GAAAA,UAAA,GAAG,SAE1C,QAAkCgB,IAA9BjC,KAAKq2D,eAAe3jB,MAAxB,CAGA,IAAIqmB,EAAe/4D,KAAKg0D,YAAY18C,KAAOtX,KAAK23C,KAAKqhB,KAAKx8B,MAExDx8B,KAAKq2D,eAAe3jB,OACpBqmB,EAAe/4D,KAAKq2D,eAAe4C,QAAQvmB,MAAMwmB,cAAgB,IAM/DH,GAAgB/4D,KAAKq2D,eAAe4C,QAAQvmB,MAAMymB,aACpDJ,EACEnrC,OAAO5tB,KAAKq2D,eAAe4C,QAAQvmB,MAAMymB,YACzCn5D,KAAK23C,KAAKqhB,KAAKx8B,OAInBx8B,KAAKo5D,mBAAmB/nD,EAAKuiD,EAAUnf,EAAOnnC,EAAGgE,EAAGwnD,GACpD94D,KAAKq5D,gBAAgBhoD,GACrBrR,KAAKs5D,UAAUjoD,EAAK/D,EAAGtN,KAAKsX,KAAK6+C,MAAO2C,EAAUC,GArBL,CAsB/C,GAEA,CAAAtyD,IAAA,kBAAAnD,MAMA,SAAgB+N,GACd,QACkCpP,IAAhCjC,KAAKg0D,YAAY1f,YACe,SAAhCt0C,KAAKg0D,YAAY1f,WACjB,CACAjjC,EAAIkoD,UAAYv5D,KAAKg0D,YAAY1f,WACjC,IAAMh9B,EAAOtX,KAAKw5D,UAClBnoD,EAAIooD,SAASniD,EAAKo/B,KAAMp/B,EAAKq/B,IAAKr/B,EAAKo+B,MAAOp+B,EAAKq+B,OACrD,CACF,GAEA,CAAAlvC,IAAA,YAAAnD,MASA,SAAU+N,EAAK/D,EAAGgE,GAAsC,IAAnCwnD,EAAQ73D,UAAA0D,OAAA,QAAA1C,IAAAhB,UAAA,GAAAA,UAAA,GAAG,SAAU83D,EAAY93D,UAAA0D,OAAA1D,EAAAA,kBAAAgB,EACJy3D,EAAAxqC,GAAvClvB,KAAK25D,cAActoD,EAAK/D,EAAGgE,EAAGwnD,GAAS,GAA/CxrD,EAACosD,EAAA,GAAEpoD,EAACooD,EAAA,GAELroD,EAAIuoD,UAAY,OAChBtsD,GAAQtN,KAAKsX,KAAKo+B,MAAQ,EACtB11C,KAAKg0D,YAAY+C,QAAU/2D,KAAKsX,KAAKq+B,OAAS31C,KAAKsX,KAAKuiD,cAC1B,QAA5B75D,KAAKg0D,YAAY+C,SACnBzlD,IAAMtR,KAAKsX,KAAKq+B,OAAS31C,KAAKsX,KAAKuiD,aAAe,GAEpB,WAA5B75D,KAAKg0D,YAAY+C,SACnBzlD,IAAMtR,KAAKsX,KAAKq+B,OAAS31C,KAAKsX,KAAKuiD,aAAe,IAKtD,IAAK,IAAIhrD,EAAI,EAAGA,EAAI7O,KAAKk0D,UAAWrlD,IAAK,CACvC,IAAM4iD,EAAOzxD,KAAKmxD,MAAMtiD,GACxB,GAAI4iD,GAAQA,EAAKJ,OAAQ,CACvB,IAAI3b,EAAQ,EACR11C,KAAKo2D,aAA0C,WAA3Bp2D,KAAKg0D,YAAY8F,MACvCpkB,IAAU11C,KAAKsX,KAAKo+B,MAAQ+b,EAAK/b,OAAS,EACN,UAA3B11C,KAAKg0D,YAAY8F,QAC1BpkB,GAAS11C,KAAKsX,KAAKo+B,MAAQ+b,EAAK/b,OAElC,IAAK,IAAIzlC,EAAI,EAAGA,EAAIwhD,EAAKJ,OAAO1sD,OAAQsL,IAAK,CAC3C,IAAMshD,EAAQE,EAAKJ,OAAOphD,GAC1BoB,EAAI0iD,KAAOxC,EAAMwC,KACjB,IAICgG,EAAA7qC,GAJgClvB,KAAKg6D,UACpCzI,EAAM5jB,MACNorB,EACAxH,EAAM0I,aACP,GAJMC,EAASH,EAAA,GAAEE,EAAWF,EAAA,GAKzBxI,EAAM4I,YAAc,IACtB9oD,EAAI+oD,UAAY7I,EAAM4I,YACtB9oD,EAAIgpD,YAAcJ,EAClB5oD,EAAIipD,SAAW,SAEjBjpD,EAAIkoD,UAAYW,EAEZ3I,EAAM4I,YAAc,GACtB9oD,EAAIkpD,WAAWhJ,EAAM5f,KAAMrkC,EAAIooC,EAAOpkC,EAAIigD,EAAMmF,SAElDrlD,EAAImpD,SAASjJ,EAAM5f,KAAMrkC,EAAIooC,EAAOpkC,EAAIigD,EAAMmF,SAC9ChhB,GAAS6b,EAAM7b,KACjB,CACApkC,GAAKmgD,EAAK9b,MACZ,CACF,CACF,GAEA,CAAAlvC,IAAA,gBAAAnD,MASA,SAAc+N,EAAK/D,EAAGgE,EAAGwnD,GAGvB,GACE94D,KAAKo2D,aACsB,eAA3Bp2D,KAAKg0D,YAAY8F,QACI,IAArB95D,KAAKg2D,YACL,CACA1oD,EAAI,EACJgE,EAAI,EAG2B,QAA3BtR,KAAKg0D,YAAY8F,OACnBzoD,EAAIopD,aAAe,aACnBnpD,GAAK,GAC+B,WAA3BtR,KAAKg0D,YAAY8F,OAC1BzoD,EAAIopD,aAAe,UACnBnpD,GAAK,GAELD,EAAIopD,aAAe,QAEvB,MACEppD,EAAIopD,aAAe3B,EAErB,MAAO,CAACxrD,EAAGgE,EACb,GAEA,CAAA7K,IAAA,YAAAnD,MAUA,SAAUqqC,EAAOorB,EAAc2B,GAC7B,IAAIR,EAAYvsB,GAAS,UACrBssB,EAAcS,GAAsB,UACxC,GAAI3B,GAAgB/4D,KAAKq2D,eAAe4C,QAAQvmB,MAAMwmB,cAAe,CACnE,IAAMyB,EAAUh7D,KAAK+N,IACnB,EACA/N,KAAKgO,IACH,EACA,GAAK3N,KAAKq2D,eAAe4C,QAAQvmB,MAAMwmB,cAAgBH,KAG3DmB,EAAYU,GAAgBV,EAAWS,GACvCV,EAAcW,GAAgBX,EAAaU,EAC7C,CACA,MAAO,CAACT,EAAWD,EACrB,GAEA,CAAAxzD,IAAA,cAAAnD,MAOA,SAAY+N,GAAsC,IAAjCuiD,EAAQ3yD,UAAA0D,OAAA,QAAA1C,IAAAhB,UAAA,IAAAA,UAAA,GAAUwzC,EAAKxzC,UAAA0D,OAAA,QAAA1C,IAAAhB,UAAA,IAAAA,UAAA,GAEtC,OADAjB,KAAK66D,cAAcxpD,EAAKuiD,EAAUnf,GAC3B,CACLiB,MAAO11C,KAAKsX,KAAKo+B,MACjBC,OAAQ31C,KAAKsX,KAAKq+B,OAClBue,UAAWl0D,KAAKk0D,UAEpB,GAEA,CAAAztD,IAAA,UAAAnD,MAKA,WACE,IACIgK,EAAItN,KAAKsX,KAAKo/B,KACdplC,EAAItR,KAAKsX,KAAKq/B,IAAM,EAExB,GAAI32C,KAAKo2D,YAAa,CACpB,IAAMpjD,EAAwB,IAAlBhT,KAAKsX,KAAKo+B,MAEtB,OAAQ11C,KAAKg0D,YAAY8F,OACvB,IAAK,SACHxsD,EAAI0F,EACJ1B,EAAwB,IAAnBtR,KAAKsX,KAAKq+B,OACf,MACF,IAAK,MACHroC,EAAI0F,EACJ1B,IAAMtR,KAAKsX,KAAKq+B,OAdH,GAeb,MACF,IAAK,SACHroC,EAAI0F,EACJ1B,EAlBa,EAqBnB,CASA,MAPY,CACVolC,KAAMppC,EACNqpC,IAAKrlC,EACLokC,MAAO11C,KAAKsX,KAAKo+B,MACjBC,OAAQ31C,KAAKsX,KAAKq+B,OAItB,GAEA,CAAAlvC,IAAA,qBAAAnD,MASA,SAAmB+N,EAAKuiD,EAAUnf,GAA0C,IAAnCnnC,EAACrM,UAAA0D,OAAA,QAAA1C,IAAAhB,UAAA,GAAAA,UAAA,GAAG,EAAGqQ,EAACrQ,UAAA0D,OAAA,QAAA1C,IAAAhB,UAAA,GAAAA,UAAA,GAAG,EAAG63D,EAAQ73D,UAAA0D,OAAA,QAAA1C,IAAAhB,UAAA,GAAAA,UAAA,GAAG,SAChEjB,KAAK66D,cAAcxpD,EAAKuiD,EAAUnf,GAClCz0C,KAAKsX,KAAKo/B,KAAOppC,EAAsB,GAAlBtN,KAAKsX,KAAKo+B,MAC/B11C,KAAKsX,KAAKq/B,IAAMrlC,EAAuB,GAAnBtR,KAAKsX,KAAKq+B,OAC9B31C,KAAKsX,KAAK6+C,MAAQ7kD,EAA2B,IAAtB,EAAItR,KAAKk0D,WAAmBl0D,KAAKg0D,YAAY18C,KACnD,YAAbwhD,IACF94D,KAAKsX,KAAKq/B,KAAO,GAAM32C,KAAKg0D,YAAY18C,KACxCtX,KAAKsX,KAAKq/B,KAAO,EACjB32C,KAAKsX,KAAK6+C,OAAS,EAEvB,GAEA,CAAA1vD,IAAA,sBAAAnD,MAQA,SAAoB+N,EAAKuiD,EAAUnf,EAAO2c,GACxC,IAAM0J,EAAW,SAAU9G,EAAa5C,EAAKgH,GAC3C,MAAY,WAARhH,EACa,QAAXgH,EAAyB,GACtBpE,EAAYoE,QAGYn2D,IAA7B+xD,EAAY5C,GAAKgH,GAEZpE,EAAY5C,GAAKgH,GAGjBpE,EAAYoE,IAIjB95C,EAAS,CACbqvB,MAAOmtB,EAAS96D,KAAKg0D,YAAa5C,EAAK,SACvC95C,KAAMwjD,EAAS96D,KAAKg0D,YAAa5C,EAAK,QACtC2J,KAAMD,EAAS96D,KAAKg0D,YAAa5C,EAAK,QACtCA,IAAK0J,EAAS96D,KAAKg0D,YAAa5C,EAAK,OACrCsF,QAASoE,EAAS96D,KAAKg0D,YAAa5C,EAAK,WACzC+I,YAAan6D,KAAKg0D,YAAYmG,YAC9BF,YAAaj6D,KAAKg0D,YAAYiG,cAE5BrG,GAAYnf,KAEJ,WAAR2c,IAC6B,IAA7BpxD,KAAKg0D,YAAYyD,SACjBz3D,KAAKq2D,eAAe2E,mBAEpB18C,EAAO8yC,IAAM,OAE2B,mBAA7BpxD,KAAKg0D,YAAYyD,SAC1Bz3D,KAAKg0D,YAAYyD,QACfn5C,EACAte,KAAKq2D,eAAe/uD,GACpBssD,EACAnf,IAMR,IAAIwmB,EAAa,GAUjB,YATmBh5D,IAAfqc,EAAO8yC,KAAoC,KAAf9yC,EAAO8yC,MAErC6J,GAAc38C,EAAO8yC,IAAM,KAE7B6J,GAAc38C,EAAOhH,KAAO,MAAQgH,EAAOy8C,KAE3C1pD,EAAI0iD,KAAOkH,EAAW7wD,QAAQ,KAAM,IACpCkU,EAAOy1C,KAAO1iD,EAAI0iD,KAClBz1C,EAAOq3B,OAASr3B,EAAOhH,KAChBgH,CACT,GAEA,CAAA7X,IAAA,iBAAAnD,MAMA,SAAeswD,EAAUnf,GACvB,OAAOmf,IAAa5zD,KAAKk7D,eAAiBzmB,IAAUz0C,KAAKm7D,UAC3D,GAEA,CAAA10D,IAAA,oBAAAnD,MAUA,SAAkB+N,EAAKuiD,EAAUnf,EAAO2mB,GAEtC,OADiB,IAAIzH,GAActiD,EAAKrR,KAAM4zD,EAAUnf,GACxCvvC,QAAQk2D,EAC1B,GAEA,CAAA30D,IAAA,gBAAAnD,MAQA,SAAc+N,EAAKuiD,EAAUnf,GAC3B,IAAwB,IAApBz0C,KAAKu2D,YAAyBv2D,KAAKq7D,eAAezH,EAAUnf,GAAhE,CAGA,IAAM38B,EAAQ9X,KAAKs7D,kBACjBjqD,EACAuiD,EACAnf,EACAz0C,KAAKq2D,eAAe3jB,OAGlB1yC,KAAKg0D,YAAY4C,OAAS,GAAK9+C,EAAM49B,MAAQ11C,KAAKg0D,YAAY4C,SAChE9+C,EAAM49B,MAAQ11C,KAAKg0D,YAAY4C,QAGjC52D,KAAKsX,KAAKuiD,YAAc/hD,EAAM69B,OAC1B31C,KAAKg0D,YAAY8C,OAAS,GAAKh/C,EAAM69B,OAAS31C,KAAKg0D,YAAY8C,SACjEh/C,EAAM69B,OAAS31C,KAAKg0D,YAAY8C,QAGlC92D,KAAKmxD,MAAQr5C,EAAMq5C,MACnBnxD,KAAKk0D,UAAYp8C,EAAMq5C,MAAMxsD,OAC7B3E,KAAKsX,KAAKo+B,MAAQ59B,EAAM49B,MACxB11C,KAAKsX,KAAKq+B,OAAS79B,EAAM69B,OACzB31C,KAAKk7D,cAAgBtH,EACrB5zD,KAAKm7D,WAAa1mB,EAElBz0C,KAAKu2D,YAAa,CAzBhB,CA0BJ,GAEA,CAAA9vD,IAAA,UAAAnD,MAKA,WACE,OACsB,IAApBtD,KAAKsX,KAAKo+B,OACW,IAArB11C,KAAKsX,KAAKq+B,aACoB1zC,IAA9BjC,KAAKq2D,eAAe3jB,SAKD1yC,KAAKg0D,YAAY18C,KAAOtX,KAAK23C,KAAKqhB,KAAKx8B,MACzCx8B,KAAKq2D,eAAe4C,QAAQvmB,MAAMwmB,cAAgB,EAKvE,IAAC,CAAA,CAAAzyD,IAAA,kBAAAnD,MA5rBD,SAAuBi4D,EAAYC,GACjC,IAAKA,GAAkC,iBAAdA,EAAwB,OAAO,EAExD,IAAMC,EAAkBD,EAAU53D,MAAM,KAMxC,OAJA23D,EAAWjkD,MAAQmkD,EAAgB,GAAGrxD,QAAQ,KAAM,IACpDmxD,EAAWR,KAAOU,EAAgB,GAClCF,EAAW5tB,MAAQ8tB,EAAgB,IAE5B,CACT,KAAC3F,CAAA,CAhGQ,GCXL4F,GAAQ,WAMZ,SAAAA,EAAY5vD,EAAS6rC,EAAMgkB,GAAa/3C,QAAA83C,GACtC17D,KAAK23C,KAAOA,EACZ33C,KAAK27D,YAAcA,EACnB37D,KAAKk2D,WAAWpqD,GAChB9L,KAAK22C,SAAM10C,EACXjC,KAAK02C,UAAOz0C,EACZjC,KAAK21C,YAAS1zC,EACdjC,KAAK01C,WAAQzzC,EACbjC,KAAK2U,YAAS1S,EACdjC,KAAK47D,YAAS35D,EACdjC,KAAK67D,eAAgB,EACrB77D,KAAK87D,YAAc,CAAEnlB,IAAK,EAAGD,KAAM,EAAGgU,MAAO,EAAGgG,OAAQ,EAC1D,CAuRC,OArRD3iC,GAAA2tC,EAAA,CAAA,CAAAj1D,IAAA,aAAAnD,MAIA,SAAWwI,GACT9L,KAAK8L,QAAUA,CACjB,GAEA,CAAArF,IAAA,cAAAnD,MAKA,SAAYq4D,GACV37D,KAAK47D,OAAS,GACV57D,KAAK8L,QAAQ8vD,SACmB,UAA9BxuC,GAAOptB,KAAK8L,QAAQ8vD,SACtB57D,KAAK47D,OAAOjlB,IAAM32C,KAAK8L,QAAQ8vD,OAAOjlB,IACtC32C,KAAK47D,OAAOlR,MAAQ1qD,KAAK8L,QAAQ8vD,OAAOlR,MACxC1qD,KAAK47D,OAAOlL,OAAS1wD,KAAK8L,QAAQ8vD,OAAOlL,OACzC1wD,KAAK47D,OAAOllB,KAAO12C,KAAK8L,QAAQ8vD,OAAOllB,OAEvC12C,KAAK47D,OAAOjlB,IAAM32C,KAAK8L,QAAQ8vD,OAC/B57D,KAAK47D,OAAOlR,MAAQ1qD,KAAK8L,QAAQ8vD,OACjC57D,KAAK47D,OAAOlL,OAAS1wD,KAAK8L,QAAQ8vD,OAClC57D,KAAK47D,OAAOllB,KAAO12C,KAAK8L,QAAQ8vD,SAGpCD,EAAYI,YAAY/7D,KAAK47D,OAC/B,GAEA,CAAAn1D,IAAA,oBAAAnD,MAOA,SAAkB+N,EAAK0qB,GACrB,IAAMigC,EAAch8D,KAAK8L,QAAQkwD,YAIjC,OAHI3qD,GACFrR,KAAKi8D,OAAO5qD,GAGZ1R,KAAKgO,IACHhO,KAAKm2B,IAAI91B,KAAK01C,MAAQ,EAAI/1C,KAAK0U,IAAI0nB,IACnCp8B,KAAKm2B,IAAI91B,KAAK21C,OAAS,EAAIh2C,KAAK2U,IAAIynB,KAClCigC,CAER,GAEA,CAAAv1D,IAAA,eAAAnD,MAKA,SAAa+N,EAAKiN,GACZA,EAAO49C,SACT7qD,EAAI8qD,YAAc79C,EAAO69C,YACzB9qD,EAAI+qD,WAAa99C,EAAO+9C,WACxBhrD,EAAIirD,cAAgBh+C,EAAOi+C,QAC3BlrD,EAAImrD,cAAgBl+C,EAAOm+C,QAE/B,GAEA,CAAAh2D,IAAA,gBAAAnD,MAKA,SAAc+N,EAAKiN,GACbA,EAAO49C,SACT7qD,EAAI8qD,YAAc,gBAClB9qD,EAAI+qD,WAAa,EACjB/qD,EAAIirD,cAAgB,EACpBjrD,EAAImrD,cAAgB,EAExB,GAEA,CAAA/1D,IAAA,qBAAAnD,MAKA,SAAmB+N,EAAKiN,GACtB,IAA4B,IAAxBA,EAAOo+C,aACT,QAAwBz6D,IAApBoP,EAAIsrD,YAA2B,CACjC,IAAIC,EAASt+C,EAAOo+C,cACL,IAAXE,IACFA,EAAS,CAAC,EAAG,KAEfvrD,EAAIsrD,YAAYC,EAClB,MACEvzB,QAAQC,KACN,oFAEFtpC,KAAK8L,QAAQ+wD,gBAAgBH,cAAe,EAC5Cp+C,EAAOo+C,cAAe,CAG5B,GAEA,CAAAj2D,IAAA,sBAAAnD,MAKA,SAAoB+N,EAAKiN,IACK,IAAxBA,EAAOo+C,oBACez6D,IAApBoP,EAAIsrD,YACNtrD,EAAIsrD,YAAY,CAAC,KAEjBtzB,QAAQC,KACN,oFAEFtpC,KAAK8L,QAAQ+wD,gBAAgBH,cAAe,EAC5Cp+C,EAAOo+C,cAAe,GAG5B,GAEA,CAAAj2D,IAAA,eAAAnD,MAQA,SAAaswD,EAAUnf,GACrB,OAA2B,IAAvBz0C,KAAK67D,eAGP77D,KAAK67D,eAAgB,GACd,QAIQ55D,IAAfjC,KAAK01C,OACL11C,KAAK27D,YAAYN,eAAezH,EAAUnf,EAE9C,GAEA,CAAAhuC,IAAA,qBAAAnD,MAKA,SAAmB+N,EAAKiN,GACtB,IAAM09C,EAAc19C,EAAO09C,YAAch8D,KAAK23C,KAAKqhB,KAAKx8B,MAExDnrB,EAAI+oD,UAAYz6D,KAAKgO,IAAI3N,KAAK01C,MAAOsmB,GACrC3qD,EAAIgpD,YAAc/7C,EAAOw+C,YACzBzrD,EAAIkoD,UAAYj7C,EAAOqvB,KACzB,GAEA,CAAAlnC,IAAA,gBAAAnD,MAKA,SAAc+N,EAAKiN,GACjB,IAAM09C,EAAc19C,EAAO09C,YAAch8D,KAAK23C,KAAKqhB,KAAKx8B,MAGxDnrB,EAAI0rD,OAEAf,EAAc,IAChBh8D,KAAKg9D,mBAAmB3rD,EAAKiN,GAE7BjN,EAAI4rD,SAEJj9D,KAAKk9D,oBAAoB7rD,EAAKiN,IAEhCjN,EAAI8rD,SACN,GAEA,CAAA12D,IAAA,cAAAnD,MAKA,SAAY+N,EAAKiN,GACfjN,EAAI0rD,OACJ1rD,EAAIkoD,UAAYj7C,EAAOqvB,MAEvB3tC,KAAKo9D,aAAa/rD,EAAKiN,GAEvB++C,GAAAhsD,GAAGvQ,KAAHuQ,GAEArR,KAAKs9D,cAAcjsD,EAAKiN,GAExBjN,EAAI8rD,UACJn9D,KAAKu9D,cAAclsD,EAAKiN,EAC1B,GAEA,CAAA7X,IAAA,wBAAAnD,MAKA,SAAsBs4D,GACpB57D,KAAK87D,YAAYplB,MAAQklB,EACzB57D,KAAK87D,YAAYnlB,KAAOilB,EACxB57D,KAAK87D,YAAYpL,QAAUkL,EAC3B57D,KAAK87D,YAAYpR,OAASkR,CAC5B,GAEA,CAAAn1D,IAAA,qBAAAnD,MAaA,SAAmBgK,EAAGgE,EAAGD,EAAKuiD,EAAUnf,QAC1BxyC,IAARoP,GACFrR,KAAKi8D,OAAO5qD,EAAKuiD,EAAUnf,GAG7Bz0C,KAAK02C,KAAOppC,EAAItN,KAAK01C,MAAQ,EAC7B11C,KAAK22C,IAAMrlC,EAAItR,KAAK21C,OAAS,EAE7B31C,KAAK87D,YAAYplB,KAAO12C,KAAK02C,KAC7B12C,KAAK87D,YAAYnlB,IAAM32C,KAAK22C,IAC5B32C,KAAK87D,YAAYpL,OAAS1wD,KAAK22C,IAAM32C,KAAK21C,OAC1C31C,KAAK87D,YAAYpR,MAAQ1qD,KAAK02C,KAAO12C,KAAK01C,KAC5C,GAEA,CAAAjvC,IAAA,oBAAAnD,MAUA,SAAkBgK,EAAGgE,EAAGD,EAAKuiD,EAAUnf,GACrCz0C,KAAKw9D,mBAAmBlwD,EAAGgE,EAAGD,EAAKuiD,EAAUnf,EAC/C,GAEA,CAAAhuC,IAAA,yBAAAnD,MAaA,SAAuB+N,EAAKuiD,EAAUnf,GAGpCz0C,KAAKy9D,SAAWz9D,KAAK27D,YAAY+B,YAAYrsD,EAAKuiD,EAAUnf,GAC5D,IAAIiB,EAAQ11C,KAAKy9D,SAAS/nB,MACtBC,EAAS31C,KAAKy9D,SAAS9nB,OAS3B,OANc,IAAVD,IAEFA,EAHmB,GAInBC,EAJmB,IAOd,CAAED,MAAOA,EAAOC,OAAQA,EACjC,KAAC+lB,CAAA,CAzSW,GCHD,SAAAiC,GAAAC,GAAAC,IAAAA,EAAA,WAAA78D,GAAA88D,oBAAA98D,UAAA88D,eAAAA,GAAAj4D,KAAA,OAAA,EAAA,GAAA,mBAAAk4D,MAAA,OAAA,EAAA,IAAA,OAAAp5C,QAAA/jB,UAAA4H,QAAA1H,KAAAg9D,GAAAn5C,QAAA,IAAA,WAAA,MAAA,CAAA,CAAA,MAAA6K,GAAA,OAAA,EAAA,CAAAwuC,GAAA,OAAA,WAAAC,IAAAt1D,EAAAs1D,EAAA5gB,GAAAugB,MAAAC,EAAA,CAAA,IAAAK,EAAA7gB,SAAAtiC,YAAApS,EAAAm1D,GAAAG,EAAAh9D,UAAAi9D,QAAAv1D,EAAAs1D,EAAAp9D,WAAAI,WAAA,OAAAk8C,GAAAn9C,KAAA2I,EAAA,CAAA,CAKb,IAKMw1D,YAAGC,GAAAlhB,GAAAihB,EAAAC,GAAA,IAAAr0B,EAAA4zB,GAAAQ,GAMP,SAAAA,EAAYryD,EAAS6rC,EAAMgkB,GAAa,IAAA/7B,EAER,OAFQhc,QAAAu6C,IACtCv+B,EAAAmK,EAAAjpC,UAAMgL,EAAS6rC,EAAMgkB,IAChB0C,YAAY1C,GAAa/7B,CAChC,CAsFC,OApFD7R,GAAAowC,EAAA,CAAA,CAAA13D,IAAA,SAAAnD,MAMA,SAAO+N,GAAmD,IAA9CuiD,EAAQ3yD,UAAA0D,OAAA1D,QAAAgB,IAAAhB,UAAAgB,GAAAhB,UAAG,GAAAjB,KAAK4zD,SAAUnf,EAAKxzC,UAAA0D,OAAA1D,QAAAgB,IAAAhB,UAAAgB,GAAAhB,UAAG,GAAAjB,KAAKy0C,MACjD,GAAIz0C,KAAKs+D,aAAa1K,EAAUnf,GAAQ,CACtC,IAAM8pB,EAAav+D,KAAKw+D,uBAAuBntD,EAAKuiD,EAAUnf,GAE9Dz0C,KAAK01C,MAAQ6oB,EAAW7oB,MAAQ11C,KAAK47D,OAAOlR,MAAQ1qD,KAAK47D,OAAOllB,KAChE12C,KAAK21C,OAAS4oB,EAAW5oB,OAAS31C,KAAK47D,OAAOjlB,IAAM32C,KAAK47D,OAAOlL,OAChE1wD,KAAK2U,OAAS3U,KAAK01C,MAAQ,CAC7B,CACF,GAEA,CAAAjvC,IAAA,OAAAnD,MASA,SAAK+N,EAAK/D,EAAGgE,EAAGsiD,EAAUnf,EAAOn2B,GAC/Bte,KAAKi8D,OAAO5qD,EAAKuiD,EAAUnf,GAC3Bz0C,KAAK02C,KAAOppC,EAAItN,KAAK01C,MAAQ,EAC7B11C,KAAK22C,IAAMrlC,EAAItR,KAAK21C,OAAS,EAE7B31C,KAAKy+D,mBAAmBptD,EAAKiN,GAC7B1M,GACEP,EACArR,KAAK02C,KACL12C,KAAK22C,IACL32C,KAAK01C,MACL11C,KAAK21C,OACLr3B,EAAOogD,cAET1+D,KAAK2+D,YAAYttD,EAAKiN,GAEtBte,KAAK4+D,kBAAkBtxD,EAAGgE,EAAGD,EAAKuiD,EAAUnf,GAC5Cz0C,KAAK27D,YAAYjoD,KACfrC,EACArR,KAAK02C,KAAO12C,KAAKy9D,SAAS/nB,MAAQ,EAAI11C,KAAK47D,OAAOllB,KAClD12C,KAAK22C,IAAM32C,KAAKy9D,SAAS9nB,OAAS,EAAI31C,KAAK47D,OAAOjlB,IAClDid,EACAnf,EAEJ,GAEA,CAAAhuC,IAAA,oBAAAnD,MAQA,SAAkBgK,EAAGgE,EAAGD,EAAKuiD,EAAUnf,GACrCz0C,KAAKw9D,mBAAmBlwD,EAAGgE,EAAGD,EAAKuiD,EAAUnf,GAE7C,IAAMiqB,EAAe1+D,KAAK8L,QAAQ+wD,gBAAgB6B,aAClD1+D,KAAK6+D,sBAAsBH,EAC7B,GAEA,CAAAj4D,IAAA,mBAAAnD,MAMA,SAAiB+N,EAAK0qB,GAChB1qB,GACFrR,KAAKi8D,OAAO5qD,GAEd,IAAM2qD,EAAch8D,KAAK8L,QAAQkwD,YAEjC,OACEr8D,KAAKgO,IACHhO,KAAKm2B,IAAI91B,KAAK01C,MAAQ,EAAI/1C,KAAK0U,IAAI0nB,IACnCp8B,KAAKm2B,IAAI91B,KAAK21C,OAAS,EAAIh2C,KAAK2U,IAAIynB,KAClCigC,CAER,KAACmC,CAAA,EA/FezC,mXCPlB,IAeMoD,YAAeV,GAAAlhB,GAAA4hB,EAAAV,GAAA,IAAAr0B,EAAA4zB,GAAAmB,GAMnB,SAAAA,EAAYhzD,EAAS6rC,EAAMgkB,GAAa,IAAA/7B,EAGhB,OAHgBhc,QAAAk7C,IACtCl/B,EAAAmK,EAAAjpC,UAAMgL,EAAS6rC,EAAMgkB,IAChBoD,YAAc,EACnBn/B,EAAKg0B,UAAW,EAAMh0B,CACxB,CA0MC,OAxMD7R,GAAA+wC,EAAA,CAAA,CAAAr4D,IAAA,aAAAnD,MAMA,SAAWwI,EAASkzD,EAAUC,GAC5Bj/D,KAAK8L,QAAUA,OAEI7J,IAAb+8D,QAA0C/8D,IAAhBg9D,GAC9Bj/D,KAAKk/D,UAAUF,EAAUC,EAE7B,GAEA,CAAAx4D,IAAA,YAAAnD,MAYA,SAAU07D,EAAUC,GACdA,GAAej/D,KAAK4zD,UACtB5zD,KAAKg/D,SAAWC,EAChBj/D,KAAKi/D,YAAcD,IAEnBh/D,KAAKg/D,SAAWA,EAChBh/D,KAAKi/D,YAAcA,EAEvB,GAEA,CAAAx4D,IAAA,eAAAnD,MAOA,SAAaswD,GACX,IAAMuL,EACHvL,IAAa5zD,KAAK4zD,WAAeA,GAAY5zD,KAAK4zD,SAGrD,GAFA5zD,KAAK4zD,SAAWA,OAES3xD,IAArBjC,KAAKi/D,aAA6BE,EAAmB,CACvD,IAAMC,EAAWp/D,KAAKg/D,SACtBh/D,KAAKg/D,SAAWh/D,KAAKi/D,YACrBj/D,KAAKi/D,YAAcG,CACrB,CACF,GAEA,CAAA34D,IAAA,mBAAAnD,MAMA,WACE,IAAM+7D,EAAa,CAAE1oB,IAAK,EAAG+T,MAAO,EAAGgG,OAAQ,EAAGha,KAAM,GACxD,GAAI12C,KAAK8L,QAAQwzD,aAAc,CAC7B,IAAMC,EAAgBv/D,KAAK8L,QAAQwzD,aACP,UAAxBlyC,GAAOmyC,IACTF,EAAW1oB,IAAM4oB,EAAc5oB,IAC/B0oB,EAAW3U,MAAQ6U,EAAc7U,MACjC2U,EAAW3O,OAAS6O,EAAc7O,OAClC2O,EAAW3oB,KAAO6oB,EAAc7oB,OAEhC2oB,EAAW1oB,IAAM4oB,EACjBF,EAAW3U,MAAQ6U,EACnBF,EAAW3O,OAAS6O,EACpBF,EAAW3oB,KAAO6oB,EAEtB,CAEA,OAAOF,CACT,GAEA,CAAA54D,IAAA,eAAAnD,MAKA,WACE,IAAIoyC,EAAOC,EAEX,IAAkD,IAA9C31C,KAAK8L,QAAQ+wD,gBAAgB2C,aAAwB,CAEvD,IAAIC,EAAc,EACdC,EAAe,EAGf1/D,KAAKg/D,SAAStpB,OAAS11C,KAAKg/D,SAASrpB,SACnC31C,KAAKg/D,SAAStpB,MAAQ11C,KAAKg/D,SAASrpB,OACtC8pB,EAAcz/D,KAAKg/D,SAAStpB,MAAQ11C,KAAKg/D,SAASrpB,OAElD+pB,EAAe1/D,KAAKg/D,SAASrpB,OAAS31C,KAAKg/D,SAAStpB,OAIxDA,EAA4B,EAApB11C,KAAK8L,QAAQwL,KAAWmoD,EAChC9pB,EAA6B,EAApB31C,KAAK8L,QAAQwL,KAAWooD,CACnC,KAAO,CAEL,IAAML,EAAar/D,KAAK2/D,mBACxBjqB,EAAQ11C,KAAKg/D,SAAStpB,MAAQ2pB,EAAW3oB,KAAO2oB,EAAW3U,MAC3D/U,EAAS31C,KAAKg/D,SAASrpB,OAAS0pB,EAAW1oB,IAAM0oB,EAAW3O,MAC9D,CAEA1wD,KAAK01C,MAAQA,EACb11C,KAAK21C,OAASA,EACd31C,KAAK2U,OAAS,GAAM3U,KAAK01C,KAC3B,GAEA,CAAAjvC,IAAA,iBAAAnD,MAQA,SAAe+N,EAAK/D,EAAGgE,EAAGgN,GACxBte,KAAKy+D,mBAAmBptD,EAAKiN,GAC7BlN,GAAWC,EAAK/D,EAAGgE,EAAGgN,EAAOhH,MAC7BtX,KAAK2+D,YAAYttD,EAAKiN,EACxB,GAEA,CAAA7X,IAAA,uBAAAnD,MAMA,SAAqB+N,EAAKiN,GACxB,GAA2B,GAAvBte,KAAKg/D,SAAStpB,MAAY,CAE5BrkC,EAAIuuD,iBAAiC39D,IAAnBqc,EAAOq8C,QAAwBr8C,EAAOq8C,QAAU,EAGlE36D,KAAKo9D,aAAa/rD,EAAKiN,GAEvB,IAAIm4B,EAAS,GACsC,IAA/Cz2C,KAAK8L,QAAQ+wD,gBAAgBgD,gBAC/BppB,EAASz2C,KAAKg/D,SAAStpB,MAAQ11C,KAAK01C,MAAQ11C,KAAK23C,KAAKqhB,KAAKx8B,OAG7D,IAAM6iC,EAAar/D,KAAK2/D,mBAElBG,EAAa9/D,KAAK02C,KAAO2oB,EAAW3oB,KACpCqpB,EAAY//D,KAAK22C,IAAM0oB,EAAW1oB,IAClCqpB,EAAWhgE,KAAK01C,MAAQ2pB,EAAW3oB,KAAO2oB,EAAW3U,MACrDuV,EAAYjgE,KAAK21C,OAAS0pB,EAAW1oB,IAAM0oB,EAAW3O,OAC5D1wD,KAAKg/D,SAASkB,oBACZ7uD,EACAolC,EACAqpB,EACAC,EACAC,EACAC,GAIFjgE,KAAKs9D,cAAcjsD,EAAKiN,EAC1B,CACF,GAEA,CAAA7X,IAAA,kBAAAnD,MASA,SAAgB+N,EAAK/D,EAAGgE,EAAGsiD,EAAUnf,GACnC,IAAItoB,EAAS,EAEb,QAAoBlqB,IAAhBjC,KAAK21C,OAAsB,CAC7BxpB,EAAuB,GAAdnsB,KAAK21C,OACd,IAAMwqB,EAAkBngE,KAAK27D,YAAY+B,YACvCrsD,EACAuiD,EACAnf,GAEE0rB,EAAgBjM,WAAa,IAC/B/nC,GAAUg0C,EAAgBxqB,OAAS,EAEvC,CAEA,IAAMyqB,EAAS9uD,EAAI6a,EAEfnsB,KAAK8L,QAAQ4mC,QACf1yC,KAAK++D,YAAc5yC,GAErBnsB,KAAK27D,YAAYjoD,KAAKrC,EAAK/D,EAAG8yD,EAAQxM,EAAUnf,EAAO,UACzD,KAACqqB,CAAA,EApN2BpD,IClBjB,SAAAiC,GAAAC,GAAAC,IAAAA,EAAA,WAAA78D,GAAA88D,oBAAA98D,UAAA88D,eAAAA,GAAAj4D,KAAA,OAAA,EAAA,GAAA,mBAAAk4D,MAAA,OAAA,EAAA,IAAA,OAAAp5C,QAAA/jB,UAAA4H,QAAA1H,KAAAg9D,GAAAn5C,QAAA,IAAA,WAAA,MAAA,CAAA,CAAA,MAAA6K,GAAA,OAAA,EAAA,CAAAwuC,GAAA,OAAA,WAAAC,IAAAt1D,EAAAs1D,EAAA5gB,GAAAugB,MAAAC,EAAA,CAAA,IAAAK,EAAA7gB,SAAAtiC,YAAApS,EAAAm1D,GAAAG,EAAAh9D,UAAAi9D,QAAAv1D,EAAAs1D,EAAAp9D,WAAAI,WAAA,OAAAk8C,GAAAn9C,KAAA2I,EAAA,CAAA,CAIb,IAKM03D,YAAMC,GAAApjB,GAAAmjB,EAAAC,GAAA,IAAAv2B,EAAA4zB,GAAA0C,GAMV,SAAAA,EAAYv0D,EAAS6rC,EAAMgkB,GAAa,IAAA/7B,EAER,OAFQhc,QAAAy8C,IACtCzgC,EAAAmK,EAAAjpC,UAAMgL,EAAS6rC,EAAMgkB,IAChB0C,YAAY1C,GAAa/7B,CAChC,CAwEC,OAtED7R,GAAAsyC,EAAA,CAAA,CAAA55D,IAAA,SAAAnD,MAMA,SAAO+N,GAAmD,IAA9CuiD,EAAQ3yD,UAAA0D,OAAA1D,QAAAgB,IAAAhB,UAAAgB,GAAAhB,UAAG,GAAAjB,KAAK4zD,SAAUnf,EAAKxzC,UAAA0D,OAAA1D,QAAAgB,IAAAhB,UAAAgB,GAAAhB,UAAG,GAAAjB,KAAKy0C,MACjD,GAAIz0C,KAAKs+D,aAAa1K,EAAUnf,GAAQ,CACtC,IAAM8pB,EAAav+D,KAAKw+D,uBAAuBntD,EAAKuiD,EAAUnf,GAExD8rB,EAAW5gE,KAAK+N,IACpB6wD,EAAW7oB,MAAQ11C,KAAK47D,OAAOlR,MAAQ1qD,KAAK47D,OAAOllB,KACnD6nB,EAAW5oB,OAAS31C,KAAK47D,OAAOjlB,IAAM32C,KAAK47D,OAAOlL,QAGpD1wD,KAAK8L,QAAQwL,KAAOipD,EAAW,EAC/BvgE,KAAK01C,MAAQ6qB,EACbvgE,KAAK21C,OAAS4qB,EACdvgE,KAAK2U,OAAS3U,KAAK01C,MAAQ,CAC7B,CACF,GAEA,CAAAjvC,IAAA,OAAAnD,MASA,SAAK+N,EAAK/D,EAAGgE,EAAGsiD,EAAUnf,EAAOn2B,GAC/Bte,KAAKi8D,OAAO5qD,EAAKuiD,EAAUnf,GAC3Bz0C,KAAK02C,KAAOppC,EAAItN,KAAK01C,MAAQ,EAC7B11C,KAAK22C,IAAMrlC,EAAItR,KAAK21C,OAAS,EAE7B31C,KAAKwgE,eAAenvD,EAAK/D,EAAGgE,EAAGgN,GAE/Bte,KAAK4+D,kBAAkBtxD,EAAGgE,GAC1BtR,KAAK27D,YAAYjoD,KACfrC,EACArR,KAAK02C,KAAO12C,KAAKy9D,SAAS/nB,MAAQ,EAAI11C,KAAK47D,OAAOllB,KAClDplC,EACAsiD,EACAnf,EAEJ,GAEA,CAAAhuC,IAAA,oBAAAnD,MAKA,SAAkBgK,EAAGgE,GACnBtR,KAAK87D,YAAYnlB,IAAMrlC,EAAItR,KAAK8L,QAAQwL,KACxCtX,KAAK87D,YAAYplB,KAAOppC,EAAItN,KAAK8L,QAAQwL,KACzCtX,KAAK87D,YAAYpR,MAAQp9C,EAAItN,KAAK8L,QAAQwL,KAC1CtX,KAAK87D,YAAYpL,OAASp/C,EAAItR,KAAK8L,QAAQwL,IAC7C,GAEA,CAAA7Q,IAAA,mBAAAnD,MAKA,SAAiB+N,GAIf,OAHIA,GACFrR,KAAKi8D,OAAO5qD,GAEM,GAAbrR,KAAK01C,KACd,KAAC2qB,CAAA,EAjFkBvB,ICTR,SAAAnB,GAAAC,GAAAC,IAAAA,EAAA,WAAA78D,GAAA88D,oBAAA98D,UAAA88D,eAAAA,GAAAj4D,KAAA,OAAA,EAAA,GAAA,mBAAAk4D,MAAA,OAAA,EAAA,IAAA,OAAAp5C,QAAA/jB,UAAA4H,QAAA1H,KAAAg9D,GAAAn5C,QAAA,IAAA,WAAA,MAAA,CAAA,CAAA,MAAA6K,GAAA,OAAA,EAAA,CAAAwuC,GAAA,OAAA,WAAAC,IAAAt1D,EAAAs1D,EAAA5gB,GAAAugB,MAAAC,EAAA,CAAA,IAAAK,EAAA7gB,SAAAtiC,YAAApS,EAAAm1D,GAAAG,EAAAh9D,UAAAi9D,QAAAv1D,EAAAs1D,EAAAp9D,WAAAI,WAAA,OAAAk8C,GAAAn9C,KAAA2I,EAAA,CAAA,CAIb,IAKM83D,YAAaH,GAAApjB,GAAAujB,EAAAH,GAAA,IAAAv2B,EAAA4zB,GAAA8C,GAQjB,SAAAA,EAAY30D,EAAS6rC,EAAMgkB,EAAaqD,EAAUC,GAAa,IAAAr/B,EAGvB,OAHuBhc,QAAA68C,IAC7D7gC,EAAAmK,EAAAjpC,UAAMgL,EAAS6rC,EAAMgkB,IAEhBuD,UAAUF,EAAUC,GAAar/B,CACxC,CAmHC,OAjHD7R,GAAA0yC,EAAA,CAAA,CAAAh6D,IAAA,SAAAnD,MAMA,SAAO+N,GAAmD,IAA9CuiD,EAAQ3yD,UAAA0D,OAAA1D,QAAAgB,IAAAhB,UAAAgB,GAAAhB,UAAG,GAAAjB,KAAK4zD,SAAUnf,EAAKxzC,UAAA0D,OAAA1D,QAAAgB,IAAAhB,UAAAgB,GAAAhB,UAAG,GAAAjB,KAAKy0C,MAMjD,QAJwBxyC,IAAtBjC,KAAKg/D,SAAS1kD,UACUrY,IAAxBjC,KAAKg/D,SAAStpB,YACWzzC,IAAzBjC,KAAKg/D,SAASrpB,OAEC,CACf,IAAM4qB,EAA+B,EAApBvgE,KAAK8L,QAAQwL,KAI9B,OAHAtX,KAAK01C,MAAQ6qB,EACbvgE,KAAK21C,OAAS4qB,OACdvgE,KAAK2U,OAAS,GAAM3U,KAAK01C,MAE3B,CAGI11C,KAAKs+D,aAAa1K,EAAUnf,IAC9Bz0C,KAAK0gE,cAET,GAEA,CAAAj6D,IAAA,OAAAnD,MASA,SAAK+N,EAAK/D,EAAGgE,EAAGsiD,EAAUnf,EAAOn2B,GAC/Bte,KAAK2gE,aAAa/M,GAClB5zD,KAAKi8D,SAEL,IAAI2E,EAAStzD,EACXuzD,EAASvvD,EAE2C,aAAlDtR,KAAK8L,QAAQ+wD,gBAAgBiE,kBAC/B9gE,KAAK02C,KAAOppC,EACZtN,KAAK22C,IAAMrlC,EACXsvD,GAAU5gE,KAAK01C,MAAQ,EACvBmrB,GAAU7gE,KAAK21C,OAAS,IAExB31C,KAAK02C,KAAOppC,EAAItN,KAAK01C,MAAQ,EAC7B11C,KAAK22C,IAAMrlC,EAAItR,KAAK21C,OAAS,GAI/B31C,KAAKwgE,eAAenvD,EAAKuvD,EAAQC,EAAQviD,GAGzCjN,EAAI0rD,OAEJ1rD,EAAI0vD,OAEJ/gE,KAAKghE,qBAAqB3vD,EAAKiN,GAE/BjN,EAAI8rD,UAEJn9D,KAAKihE,gBAAgB5vD,EAAKuvD,EAAQC,EAAQjN,EAAUnf,GAEpDz0C,KAAK4+D,kBAAkBtxD,EAAGgE,EAC5B,GAGA,CAAA7K,IAAA,oBAAAnD,MAKA,SAAkBgK,EAAGgE,GACmC,aAAlDtR,KAAK8L,QAAQ+wD,gBAAgBiE,kBAC/B9gE,KAAK87D,YAAYnlB,IAAMrlC,EACvBtR,KAAK87D,YAAYplB,KAAOppC,EACxBtN,KAAK87D,YAAYpR,MAAQp9C,EAAwB,EAApBtN,KAAK8L,QAAQwL,KAC1CtX,KAAK87D,YAAYpL,OAASp/C,EAAwB,EAApBtR,KAAK8L,QAAQwL,OAE3CtX,KAAK87D,YAAYnlB,IAAMrlC,EAAItR,KAAK8L,QAAQwL,KACxCtX,KAAK87D,YAAYplB,KAAOppC,EAAItN,KAAK8L,QAAQwL,KACzCtX,KAAK87D,YAAYpR,MAAQp9C,EAAItN,KAAK8L,QAAQwL,KAC1CtX,KAAK87D,YAAYpL,OAASp/C,EAAItR,KAAK8L,QAAQwL,MAI7CtX,KAAK87D,YAAYplB,KAAO/2C,KAAKgO,IAC3B3N,KAAK87D,YAAYplB,KACjB12C,KAAK27D,YAAYrkD,KAAKo/B,MAExB12C,KAAK87D,YAAYpR,MAAQ/qD,KAAK+N,IAC5B1N,KAAK87D,YAAYpR,MACjB1qD,KAAK27D,YAAYrkD,KAAKo/B,KAAO12C,KAAK27D,YAAYrkD,KAAKo+B,OAErD11C,KAAK87D,YAAYpL,OAAS/wD,KAAK+N,IAC7B1N,KAAK87D,YAAYpL,OACjB1wD,KAAK87D,YAAYpL,OAAS1wD,KAAK++D,YAEnC,GAEA,CAAAt4D,IAAA,mBAAAnD,MAKA,SAAiB+N,GAIf,OAHIA,GACFrR,KAAKi8D,OAAO5qD,GAEM,GAAbrR,KAAK01C,KACd,KAAC+qB,CAAA,EA/HyB3B,mXCN5B,IAKMoC,YAAS9C,GAAAlhB,GAAAgkB,EAAA9C,GAAA,IAAAr0B,EAAA4zB,GAAAuD,GAMb,SAAAA,EAAYp1D,EAAS6rC,EAAMgkB,GAAa,OAAA/3C,QAAAs9C,GAAAn3B,EAAAjpC,KAAAd,KAChC8L,EAAS6rC,EAAMgkB,EACvB,CA4GC,OA1GD5tC,GAAAmzC,EAAA,CAAA,CAAAz6D,IAAA,SAAAnD,MAOA,SACE+N,GAIA,IAHAuiD,EAAQ3yD,UAAA0D,OAAA1D,QAAAgB,IAAAhB,UAAAgB,GAAAhB,UAAG,GAAAjB,KAAK4zD,SAChBnf,EAAKxzC,UAAA0D,OAAA1D,QAAAgB,IAAAhB,UAAAgB,GAAAhB,UAAG,GAAAjB,KAAKy0C,MACbn2B,EAAMrd,UAAA0D,OAAA1D,QAAAgB,IAAAhB,UAAAgB,GAAAhB,UAAG,GAAA,CAAEqW,KAAMtX,KAAK8L,QAAQwL,MAE9B,GAAItX,KAAKs+D,aAAa1K,EAAUnf,GAAQ,CAAA,IAAA0sB,EAAAC,EACtCphE,KAAK27D,YAAY+B,YAAYrsD,EAAKuiD,EAAUnf,GAC5C,IAAMn9B,EAAO,EAAIgH,EAAOhH,KACxBtX,KAAK01C,MAA4ByrB,QAAvBA,EAAGnhE,KAAKqhE,uBAAeF,IAAAA,EAAAA,EAAI7pD,EACrCtX,KAAK21C,OAA8ByrB,QAAxBA,EAAGphE,KAAKshE,wBAAgBF,IAAAA,EAAAA,EAAI9pD,EACvCtX,KAAK2U,OAAS,GAAM3U,KAAK01C,KAC3B,CACF,GAEA,CAAAjvC,IAAA,aAAAnD,MAaA,SAAW+N,EAAKuhC,EAAO2uB,EAAgBj0D,EAAGgE,EAAGsiD,EAAUnf,EAAOn2B,GAAQ,IjYwVtEnW,EiYxVsEy3B,EAAA5/B,KAuBpE,OAtBAA,KAAKi8D,OAAO5qD,EAAKuiD,EAAUnf,EAAOn2B,GAClCte,KAAK02C,KAAOppC,EAAItN,KAAK01C,MAAQ,EAC7B11C,KAAK22C,IAAMrlC,EAAItR,KAAK21C,OAAS,EAE7B31C,KAAKy+D,mBAAmBptD,EAAKiN,IjYmV/BnW,EiYlVWyqC,EjYoVPvwC,OAAOzB,UAAUH,eAAeK,KAAK+S,GAAU1L,GACzC0L,GAAiB1L,GAElB,SAAUkJ,GAA6C,IAAA85B,IAAAA,EAAAlqC,UAAA0D,OAAXgM,MAAWuF,MAAAi1B,EAAAA,EAAAA,OAAAE,EAAA,EAAAA,EAAAF,EAAAE,IAAX16B,EAAW06B,EAAApqC,GAAAA,UAAAoqC,GAC3Dm2B,yBAAyB5gE,UAAkBuH,GAAMrH,KAAKuQ,EAAKV,KiYxV9CU,EAAK/D,EAAGgE,EAAGgN,EAAOhH,MAClCtX,KAAK2+D,YAAYttD,EAAKiN,QAEIrc,IAAtBjC,KAAK8L,QAAQ21D,WACgBx/D,IAA3BjC,KAAK8L,QAAQ21D,KAAKzU,OACpB37C,EAAI0iD,MACDH,EAAW,QAAU,IACtB5zD,KAAK21C,OAAS,EACd,OACC31C,KAAK8L,QAAQ21D,KAAK1G,MAAQ,eAC7B1pD,EAAIkoD,UAAYv5D,KAAK8L,QAAQ21D,KAAK9zB,OAAS,QAC3Ct8B,EAAIuoD,UAAY,SAChBvoD,EAAIopD,aAAe,SACnBppD,EAAImpD,SAASx6D,KAAK8L,QAAQ21D,KAAKzU,KAAM1/C,EAAGgE,IAIrC,CACLowD,kBAAmB,WACjB,QAA2Bz/D,IAAvB29B,EAAK9zB,QAAQ4mC,MAAqB,CAGpC9S,EAAK+7B,YAAYvC,mBACf/nD,EACAuiD,EACAnf,EACAnnC,EACAgE,EACA,WAEF,IAAM8uD,EACJ9uD,EAAI,GAAMsuB,EAAK+V,OAAS,GAAM/V,EAAK+7B,YAAYrkD,KAAKq+B,OACtD/V,EAAK+7B,YAAYjoD,KAAKrC,EAAK/D,EAAG8yD,EAAQxM,EAAUnf,EAAO,UACzD,CAEA7U,EAAKg/B,kBAAkBtxD,EAAGgE,EAC5B,EAEJ,GAEA,CAAA7K,IAAA,oBAAAnD,MAKA,SAAkBgK,EAAGgE,GACnBtR,KAAK87D,YAAYnlB,IAAMrlC,EAAItR,KAAK8L,QAAQwL,KACxCtX,KAAK87D,YAAYplB,KAAOppC,EAAItN,KAAK8L,QAAQwL,KACzCtX,KAAK87D,YAAYpR,MAAQp9C,EAAItN,KAAK8L,QAAQwL,KAC1CtX,KAAK87D,YAAYpL,OAASp/C,EAAItR,KAAK8L,QAAQwL,UAEhBrV,IAAvBjC,KAAK8L,QAAQ4mC,OAAuB1yC,KAAK27D,YAAYrkD,KAAKo+B,MAAQ,IACpE11C,KAAK87D,YAAYplB,KAAO/2C,KAAKgO,IAC3B3N,KAAK87D,YAAYplB,KACjB12C,KAAK27D,YAAYrkD,KAAKo/B,MAExB12C,KAAK87D,YAAYpR,MAAQ/qD,KAAK+N,IAC5B1N,KAAK87D,YAAYpR,MACjB1qD,KAAK27D,YAAYrkD,KAAKo/B,KAAO12C,KAAK27D,YAAYrkD,KAAKo+B,OAErD11C,KAAK87D,YAAYpL,OAAS/wD,KAAK+N,IAC7B1N,KAAK87D,YAAYpL,OACjB1wD,KAAK87D,YAAYpL,OAAS1wD,KAAK27D,YAAYrkD,KAAKq+B,QAGtD,KAACurB,CAAA,EApHqBxF,ICRX,SAAAvrC,GAAAX,EAAAje,OAAA+d,EAAAid,GAAA/c,GAAA,GAAAmyC,GAAAt0C,CAAAA,IAAAA,EAAAs0C,GAAAnyC,GAAAje,IAAA8b,EAAAoiC,GAAApiC,GAAAvsB,KAAAusB,GAAA9b,SAAAA,UAAAqwD,GAAApyC,EAAAje,GAAAtO,UAAAqsB,KAAAA,EAAAxoB,KAAAjG,MAAAyuB,EAAAjC,EAAA,CAAA,OAAAiC,CAAA,CAAA,SAAAuyC,GAAAryC,GAAAje,IAAAA,IAAAA,IAAAA,EAAAtQ,UAAA0D,OAAA4M,IAAA,CAAA,IAAAud,EAAA+c,EAAAvc,EAAA,MAAAruB,UAAAsQ,GAAAtQ,UAAAsQ,GAAAA,CAAAA,EAAAA,IAAA4gC,GAAArjB,EAAAqB,GAAA9tB,OAAAitB,IAAAxuB,IAAAA,KAAAguB,GAAA,SAAAvd,GAAAgsC,GAAA/tB,EAAAje,EAAA+d,EAAA/d,GAAA,IAAAuwD,GAAAC,GAAAvyC,EAAAsyC,GAAAxyC,IAAA6iB,GAAAtG,EAAA1b,GAAA9tB,OAAAitB,KAAAxuB,KAAA+qC,GAAA,SAAAt6B,GAAAuc,GAAA0B,EAAAje,EAAAqwD,GAAAtyC,EAAA/d,GAAA,GAAA,CAAA,OAAAie,CAAA,CAAA,SAAAmuC,GAAAC,GAAAC,IAAAA,EAAA,WAAA78D,GAAA88D,oBAAA98D,UAAA88D,eAAAA,GAAAj4D,KAAA,OAAA,EAAA,GAAA,mBAAAk4D,MAAA,OAAA,EAAA,IAAA,OAAAp5C,QAAA/jB,UAAA4H,QAAA1H,KAAAg9D,GAAAn5C,QAAA,IAAA,WAAA,MAAA,CAAA,CAAA,MAAA6K,GAAA,OAAA,EAAA,CAAAwuC,GAAA,OAAA,WAAAC,IAAAt1D,EAAAs1D,EAAA5gB,GAAAugB,MAAAC,EAAA,CAAA,IAAAK,EAAA7gB,SAAAtiC,YAAApS,EAAAm1D,GAAAG,EAAAh9D,UAAAi9D,QAAAv1D,EAAAs1D,EAAAp9D,WAAAI,WAAA,OAAAk8C,GAAAn9C,KAAA2I,EAAA,CAAA,CAIb,IAKMq5D,YAAWC,GAAA/kB,GAAA8kB,EAAAC,GAAA,IAAAl4B,EAAA4zB,GAAAqE,GAOf,SAAAA,EAAYl2D,EAAS6rC,EAAMgkB,EAAauG,GAAa,IAAAtiC,EAEpB,OAFoBhc,QAAAo+C,IACnDpiC,EAAAmK,EAAAjpC,KAAAd,KAAM8L,EAAS6rC,EAAMgkB,EAAauG,IAC7BA,YAAcA,EAAYtiC,CACjC,CA4DC,OA1DD7R,GAAAi0C,EAAA,CAAA,CAAAv7D,IAAA,OAAAnD,MAUA,SAAK+N,EAAK/D,EAAGgE,EAAGsiD,EAAUnf,EAAOn2B,GAC/Bte,KAAKi8D,OAAO5qD,EAAKuiD,EAAUnf,EAAOn2B,GAClCte,KAAK02C,KAAOppC,EAAItN,KAAK01C,MAAQ,EAC7B11C,KAAK22C,IAAMrlC,EAAItR,KAAK21C,OAAS,EAG7BtkC,EAAI0rD,OACJ,IAAMoF,EAAYniE,KAAKkiE,YAAY,CACjC7wD,IAAAA,EACA/J,GAAItH,KAAK8L,QAAQxE,GACjBgG,EAAAA,EACAgE,EAAAA,EACAwG,MAAO,CAAE87C,SAAAA,EAAUnf,MAAAA,GACnBt6B,MAAK0nD,GAAOvjD,CAAAA,EAAAA,GACZo0B,MAAO1yC,KAAK8L,QAAQ4mC,QAQtB,GAL0B,MAAtByvB,EAAUC,UACZD,EAAUC,WAEZ/wD,EAAI8rD,UAEAgF,EAAUT,kBAAmB,CAE/B,IAAMA,EAAoBS,EAAUT,kBACpCS,EAAUT,kBAAoB,WAC5BrwD,EAAI0rD,OACJ2E,IACArwD,EAAI8rD,UAER,CAOA,OALIgF,EAAUE,iBACZriE,KAAKqhE,gBAAkBc,EAAUE,eAAe3sB,MAChD11C,KAAKshE,iBAAmBa,EAAUE,eAAe1sB,QAG5CwsB,CACT,GAEA,CAAA17D,IAAA,mBAAAnD,MAMA,SAAiB+N,EAAK0qB,GACpB,OAAO/7B,KAAKsiE,kBAAkBjxD,EAAK0qB,EACrC,KAACimC,CAAA,EAtEuBd,ICTb,SAAAvD,GAAAC,GAAAC,IAAAA,EAAA,WAAA78D,GAAA88D,oBAAA98D,UAAA88D,eAAAA,GAAAj4D,KAAA,OAAA,EAAA,GAAA,mBAAAk4D,MAAA,OAAA,EAAA,IAAA,OAAAp5C,QAAA/jB,UAAA4H,QAAA1H,KAAAg9D,GAAAn5C,QAAA,IAAA,WAAA,MAAA,CAAA,CAAA,MAAA6K,GAAA,OAAA,EAAA,CAAAwuC,GAAA,OAAA,WAAAC,IAAAt1D,EAAAs1D,EAAA5gB,GAAAugB,MAAAC,EAAA,CAAA,IAAAK,EAAA7gB,SAAAtiC,YAAApS,EAAAm1D,GAAAG,EAAAh9D,UAAAi9D,QAAAv1D,EAAAs1D,EAAAp9D,WAAAI,WAAA,OAAAk8C,GAAAn9C,KAAA2I,EAAA,CAAA,CAKb,IAKM45D,YAAQnE,GAAAlhB,GAAAqlB,EAAAnE,GAAA,IAAAr0B,EAAA4zB,GAAA4E,GAMZ,SAAAA,EAAYz2D,EAAS6rC,EAAMgkB,GAAa,IAAA/7B,EAER,OAFQhc,QAAA2+C,IACtC3iC,EAAAmK,EAAAjpC,UAAMgL,EAAS6rC,EAAMgkB,IAChB0C,YAAY1C,GAAa/7B,CAChC,CA4DC,OA1DD7R,GAAAw0C,EAAA,CAAA,CAAA97D,IAAA,SAAAnD,MAMA,SAAO+N,EAAKuiD,EAAUnf,GACpB,GAAIz0C,KAAKs+D,aAAa1K,EAAUnf,GAAQ,CACtC,IACMn9B,EADatX,KAAKw+D,uBAAuBntD,EAAKuiD,EAAUnf,GACtCiB,MAAQ11C,KAAK47D,OAAOlR,MAAQ1qD,KAAK47D,OAAOllB,KAEhE12C,KAAK01C,MAAQp+B,EACbtX,KAAK21C,OAASr+B,EACdtX,KAAK2U,OAAS3U,KAAK01C,MAAQ,CAC7B,CACF,GAEA,CAAAjvC,IAAA,OAAAnD,MASA,SAAK+N,EAAK/D,EAAGgE,EAAGsiD,EAAUnf,EAAOn2B,GAC/Bte,KAAKi8D,OAAO5qD,EAAKuiD,EAAUnf,GAC3Bz0C,KAAK02C,KAAOppC,EAAItN,KAAK01C,MAAQ,EAC7B11C,KAAK22C,IAAMrlC,EAAItR,KAAK21C,OAAS,EAE7B31C,KAAKy+D,mBAAmBptD,EAAKiN,GAC7B3L,GACEtB,EACA/D,EAAItN,KAAK01C,MAAQ,EACjBpkC,EAAItR,KAAK21C,OAAS,EAClB31C,KAAK01C,MACL11C,KAAK21C,QAEP31C,KAAK2+D,YAAYttD,EAAKiN,GAEtBte,KAAK4+D,kBAAkBtxD,EAAGgE,EAAGD,EAAKuiD,EAAUnf,GAC5Cz0C,KAAK27D,YAAYjoD,KACfrC,EACArR,KAAK02C,KAAO12C,KAAKy9D,SAAS/nB,MAAQ,EAAI11C,KAAK47D,OAAOllB,KAClD12C,KAAK22C,IAAM32C,KAAKy9D,SAAS9nB,OAAS,EAAI31C,KAAK47D,OAAOjlB,IAClDid,EACAnf,EAEJ,GACA,CAAAhuC,IAAA,mBAAAnD,MAMA,SAAiB+N,EAAK0qB,GACpB,OAAO/7B,KAAKsiE,kBAAkBjxD,EAAK0qB,EACrC,KAACwmC,CAAA,EArEoB7G,ICVV,SAAAiC,GAAAC,GAAAC,IAAAA,EAAA,WAAA78D,GAAA88D,oBAAA98D,UAAA88D,eAAAA,GAAAj4D,KAAA,OAAA,EAAA,GAAA,mBAAAk4D,MAAA,OAAA,EAAA,IAAA,OAAAp5C,QAAA/jB,UAAA4H,QAAA1H,KAAAg9D,GAAAn5C,QAAA,IAAA,WAAA,MAAA,CAAA,CAAA,MAAA6K,GAAA,OAAA,EAAA,CAAAwuC,GAAA,OAAA,WAAAC,IAAAt1D,EAAAs1D,EAAA5gB,GAAAugB,MAAAC,EAAA,CAAA,IAAAK,EAAA7gB,SAAAtiC,YAAApS,EAAAm1D,GAAAG,EAAAh9D,UAAAi9D,QAAAv1D,EAAAs1D,EAAAp9D,WAAAI,WAAA,OAAAk8C,GAAAn9C,KAAA2I,EAAA,CAAA,CAIb,IAKM65D,YAAOP,GAAA/kB,GAAAslB,EAAAP,GAAA,IAAAl4B,EAAA4zB,GAAA6E,GAMX,SAAAA,EAAY12D,EAAS6rC,EAAMgkB,GAAa,OAAA/3C,QAAA4+C,GAAAz4B,EAAAjpC,KAAAd,KAChC8L,EAAS6rC,EAAMgkB,EACvB,CAwBC,OAtBD5tC,GAAAy0C,EAAA,CAAA,CAAA/7D,IAAA,OAAAnD,MAUA,SAAK+N,EAAK/D,EAAGgE,EAAGsiD,EAAUnf,EAAOn2B,GAC/B,OAAOte,KAAKyiE,WAAWpxD,EAAK,UAAW,EAAG/D,EAAGgE,EAAGsiD,EAAUnf,EAAOn2B,EACnE,GAEA,CAAA7X,IAAA,mBAAAnD,MAMA,SAAiB+N,EAAK0qB,GACpB,OAAO/7B,KAAKsiE,kBAAkBjxD,EAAK0qB,EACrC,KAACymC,CAAA,EAhCmBtB,ICTT,SAAAvD,GAAAC,GAAAC,IAAAA,EAAA,WAAA78D,GAAA88D,oBAAA98D,UAAA88D,eAAAA,GAAAj4D,KAAA,OAAA,EAAA,GAAA,mBAAAk4D,MAAA,OAAA,EAAA,IAAA,OAAAp5C,QAAA/jB,UAAA4H,QAAA1H,KAAAg9D,GAAAn5C,QAAA,IAAA,WAAA,MAAA,CAAA,CAAA,MAAA6K,GAAA,OAAA,EAAA,CAAAwuC,GAAA,OAAA,WAAAC,IAAAt1D,EAAAs1D,EAAA5gB,GAAAugB,MAAAC,EAAA,CAAA,IAAAK,EAAA7gB,SAAAtiC,YAAApS,EAAAm1D,GAAAG,EAAAh9D,UAAAi9D,QAAAv1D,EAAAs1D,EAAAp9D,WAAAI,WAAA,OAAAk8C,GAAAn9C,KAAA2I,EAAA,CAAA,CAIb,IAKM+5D,YAAGT,GAAA/kB,GAAAwlB,EAAAT,GAAA,IAAAl4B,EAAA4zB,GAAA+E,GAMP,SAAAA,EAAY52D,EAAS6rC,EAAMgkB,GAAa,OAAA/3C,QAAA8+C,GAAA34B,EAAAjpC,KAAAd,KAChC8L,EAAS6rC,EAAMgkB,EACvB,CA0BC,OAxBD5tC,GAAA20C,EAAA,CAAA,CAAAj8D,IAAA,OAAAnD,MAUA,SAAK+N,EAAK/D,EAAGgE,EAAGsiD,EAAUnf,EAAOn2B,GAC/B,OAAOte,KAAKyiE,WAAWpxD,EAAK,SAAU,EAAG/D,EAAGgE,EAAGsiD,EAAUnf,EAAOn2B,EAClE,GAEA,CAAA7X,IAAA,mBAAAnD,MAKA,SAAiB+N,GAIf,OAHIA,GACFrR,KAAKi8D,OAAO5qD,GAEPrR,KAAK8L,QAAQwL,IACtB,KAACorD,CAAA,EAlCexB,ICTL,SAAAvD,GAAAC,GAAAC,IAAAA,EAAA,WAAA78D,GAAA88D,oBAAA98D,UAAA88D,eAAAA,GAAAj4D,KAAA,OAAA,EAAA,GAAA,mBAAAk4D,MAAA,OAAA,EAAA,IAAA,OAAAp5C,QAAA/jB,UAAA4H,QAAA1H,KAAAg9D,GAAAn5C,QAAA,IAAA,WAAA,MAAA,CAAA,CAAA,MAAA6K,GAAA,OAAA,EAAA,CAAAwuC,GAAA,OAAA,WAAAC,IAAAt1D,EAAAs1D,EAAA5gB,GAAAugB,MAAAC,EAAA,CAAA,IAAAK,EAAA7gB,SAAAtiC,YAAApS,EAAAm1D,GAAAG,EAAAh9D,UAAAi9D,QAAAv1D,EAAAs1D,EAAAp9D,WAAAI,WAAA,OAAAk8C,GAAAn9C,KAAA2I,EAAA,CAAA,CAKb,IAKMg6D,YAAOvE,GAAAlhB,GAAAylB,EAAAvE,GAAA,IAAAr0B,EAAA4zB,GAAAgF,GAMX,SAAAA,EAAY72D,EAAS6rC,EAAMgkB,GAAa,OAAA/3C,QAAA++C,GAAA54B,EAAAjpC,KAAAd,KAChC8L,EAAS6rC,EAAMgkB,EACvB,CAuDC,OArDD5tC,GAAA40C,EAAA,CAAA,CAAAl8D,IAAA,SAAAnD,MAMA,SAAO+N,GAAmD,IAA9CuiD,EAAQ3yD,UAAA0D,OAAA1D,QAAAgB,IAAAhB,UAAAgB,GAAAhB,UAAG,GAAAjB,KAAK4zD,SAAUnf,EAAKxzC,UAAA0D,OAAA1D,QAAAgB,IAAAhB,UAAAgB,GAAAhB,UAAG,GAAAjB,KAAKy0C,MACjD,GAAIz0C,KAAKs+D,aAAa1K,EAAUnf,GAAQ,CACtC,IAAM8pB,EAAav+D,KAAKw+D,uBAAuBntD,EAAKuiD,EAAUnf,GAE9Dz0C,KAAK21C,OAA6B,EAApB4oB,EAAW5oB,OACzB31C,KAAK01C,MAAQ6oB,EAAW7oB,MAAQ6oB,EAAW5oB,OAC3C31C,KAAK2U,OAAS,GAAM3U,KAAK01C,KAC3B,CACF,GAEA,CAAAjvC,IAAA,OAAAnD,MASA,SAAK+N,EAAK/D,EAAGgE,EAAGsiD,EAAUnf,EAAOn2B,GAC/Bte,KAAKi8D,OAAO5qD,EAAKuiD,EAAUnf,GAC3Bz0C,KAAK02C,KAAOppC,EAAiB,GAAbtN,KAAK01C,MACrB11C,KAAK22C,IAAMrlC,EAAkB,GAAdtR,KAAK21C,OAEpB31C,KAAKy+D,mBAAmBptD,EAAKiN,GAC7BpM,GAAYb,EAAKrR,KAAK02C,KAAM12C,KAAK22C,IAAK32C,KAAK01C,MAAO11C,KAAK21C,QACvD31C,KAAK2+D,YAAYttD,EAAKiN,GAEtBte,KAAK4+D,kBAAkBtxD,EAAGgE,EAAGD,EAAKuiD,EAAUnf,GAC5Cz0C,KAAK27D,YAAYjoD,KAAKrC,EAAK/D,EAAGgE,EAAGsiD,EAAUnf,EAC7C,GAEA,CAAAhuC,IAAA,mBAAAnD,MAMA,SAAiB+N,EAAK0qB,GAChB1qB,GACFrR,KAAKi8D,OAAO5qD,GAEd,IAAMnI,EAAiB,GAAblJ,KAAK01C,MACT/pC,EAAkB,GAAd3L,KAAK21C,OACT9jC,EAAIlS,KAAK2U,IAAIynB,GAAS7yB,EACtB4I,EAAInS,KAAK0U,IAAI0nB,GAASpwB,EAC5B,OAAQzC,EAAIyC,EAAKhM,KAAK6T,KAAK3B,EAAIA,EAAIC,EAAIA,EACzC,KAAC6wD,CAAA,EA/DmBjH,ICVT,SAAAiC,GAAAC,GAAAC,IAAAA,EAAA,WAAA78D,GAAA88D,oBAAA98D,UAAA88D,eAAAA,GAAAj4D,KAAA,OAAA,EAAA,GAAA,mBAAAk4D,MAAA,OAAA,EAAA,IAAA,OAAAp5C,QAAA/jB,UAAA4H,QAAA1H,KAAAg9D,GAAAn5C,QAAA,IAAA,WAAA,MAAA,CAAA,CAAA,MAAA6K,GAAA,OAAA,EAAA,CAAAwuC,GAAA,OAAA,WAAAC,IAAAt1D,EAAAs1D,EAAA5gB,GAAAugB,MAAAC,EAAA,CAAA,IAAAK,EAAA7gB,SAAAtiC,YAAApS,EAAAm1D,GAAAG,EAAAh9D,UAAAi9D,QAAAv1D,EAAAs1D,EAAAp9D,WAAAI,WAAA,OAAAk8C,GAAAn9C,KAAA2I,EAAA,CAAA,CAIb,IAKMi6D,YAAIxE,GAAAlhB,GAAA0lB,EAAAxE,GAAA,IAAAr0B,EAAA4zB,GAAAiF,GAMR,SAAAA,EAAY92D,EAAS6rC,EAAMgkB,GAAa,IAAA/7B,EAER,OAFQhc,QAAAg/C,IACtChjC,EAAAmK,EAAAjpC,UAAMgL,EAAS6rC,EAAMgkB,IAChB0C,YAAY1C,GAAa/7B,CAChC,CAwIC,OAtID7R,GAAA60C,EAAA,CAAA,CAAAn8D,IAAA,SAAAnD,MAMA,SAAO+N,EAAKuiD,EAAUnf,GAChBz0C,KAAKs+D,aAAa1K,EAAUnf,KAC9Bz0C,KAAK6iE,SAAW,CACdntB,MAAO9nB,OAAO5tB,KAAK8L,QAAQ21D,KAAKnqD,MAChCq+B,OAAQ/nB,OAAO5tB,KAAK8L,QAAQ21D,KAAKnqD,OAEnCtX,KAAK01C,MAAQ11C,KAAK6iE,SAASntB,MAAQ11C,KAAK47D,OAAOlR,MAAQ1qD,KAAK47D,OAAOllB,KACnE12C,KAAK21C,OAAS31C,KAAK6iE,SAASltB,OAAS31C,KAAK47D,OAAOjlB,IAAM32C,KAAK47D,OAAOlL,OACnE1wD,KAAK2U,OAAS,GAAM3U,KAAK01C,MAE7B,GAEA,CAAAjvC,IAAA,OAAAnD,MAUA,SAAK+N,EAAK/D,EAAGgE,EAAGsiD,EAAUnf,EAAOn2B,GAAQ,IAAA0mB,EAAAhlC,KAQvC,OAPAA,KAAKi8D,OAAO5qD,EAAKuiD,EAAUnf,GAC3Bz0C,KAAK8L,QAAQ21D,KAAKnqD,KAAOtX,KAAK8L,QAAQ21D,KAAKnqD,MAAQ,GAEnDtX,KAAK02C,KAAOppC,EAAItN,KAAK01C,MAAQ,EAC7B11C,KAAK22C,IAAMrlC,EAAItR,KAAK21C,OAAS,EAC7B31C,KAAK8iE,MAAMzxD,EAAK/D,EAAGgE,EAAGsiD,EAAUnf,EAAOn2B,GAEhC,CACLojD,kBAAmB,WACjB,QAA2Bz/D,IAAvB+iC,EAAKl5B,QAAQ4mC,MAAqB,CAEpC1N,EAAK22B,YAAYjoD,KACfrC,EACA2zB,EAAK0R,KAAO1R,EAAK69B,SAASntB,MAAQ,EAAI1Q,EAAK42B,OAAOllB,KAClDplC,EAAI0zB,EAAK2Q,OAAS,EAJI,EAKtBie,EAEJ,CAEA5uB,EAAK45B,kBAAkBtxD,EAAGgE,EAC5B,EAEJ,GAEA,CAAA7K,IAAA,oBAAAnD,MAKA,SAAkBgK,EAAGgE,GAMnB,GALAtR,KAAK87D,YAAYnlB,IAAMrlC,EAA6B,GAAzBtR,KAAK8L,QAAQ21D,KAAKnqD,KAC7CtX,KAAK87D,YAAYplB,KAAOppC,EAA6B,GAAzBtN,KAAK8L,QAAQ21D,KAAKnqD,KAC9CtX,KAAK87D,YAAYpR,MAAQp9C,EAA6B,GAAzBtN,KAAK8L,QAAQ21D,KAAKnqD,KAC/CtX,KAAK87D,YAAYpL,OAASp/C,EAA6B,GAAzBtR,KAAK8L,QAAQ21D,KAAKnqD,UAErBrV,IAAvBjC,KAAK8L,QAAQ4mC,OAAuB1yC,KAAK27D,YAAYrkD,KAAKo+B,MAAQ,EAAG,CAEvE11C,KAAK87D,YAAYplB,KAAO/2C,KAAKgO,IAC3B3N,KAAK87D,YAAYplB,KACjB12C,KAAK27D,YAAYrkD,KAAKo/B,MAExB12C,KAAK87D,YAAYpR,MAAQ/qD,KAAK+N,IAC5B1N,KAAK87D,YAAYpR,MACjB1qD,KAAK27D,YAAYrkD,KAAKo/B,KAAO12C,KAAK27D,YAAYrkD,KAAKo+B,OAErD11C,KAAK87D,YAAYpL,OAAS/wD,KAAK+N,IAC7B1N,KAAK87D,YAAYpL,OACjB1wD,KAAK87D,YAAYpL,OAAS1wD,KAAK27D,YAAYrkD,KAAKq+B,OAX1B,EAa1B,CACF,GAEA,CAAAlvC,IAAA,QAAAnD,MASA,SAAM+N,EAAK/D,EAAGgE,EAAGsiD,EAAUnf,EAAOn2B,GAChC,IAAMukD,EAAWj1C,OAAO5tB,KAAK8L,QAAQ21D,KAAKnqD,WAEXrV,IAA3BjC,KAAK8L,QAAQ21D,KAAKzU,MACpB37C,EAAI0iD,KAAO,CACmB,MAA5B/zD,KAAK8L,QAAQ21D,KAAKsB,OACd/iE,KAAK8L,QAAQ21D,KAAKsB,OAClBnP,EACA,OACA,IAGyB,MAA5B5zD,KAAK8L,QAAQ21D,KAAKsB,QAAkBnP,EAAW,EAAI,GAClDiP,EACA,KACF7iE,KAAK8L,QAAQ21D,KAAK1G,MAClBlrD,KAAK,KAGPwB,EAAIkoD,UAAYv5D,KAAK8L,QAAQ21D,KAAK9zB,OAAS,QAC3Ct8B,EAAIuoD,UAAY,SAChBvoD,EAAIopD,aAAe,SAGnBz6D,KAAKo9D,aAAa/rD,EAAKiN,GACvBjN,EAAImpD,SAASx6D,KAAK8L,QAAQ21D,KAAKzU,KAAM1/C,EAAGgE,GAGxCtR,KAAKs9D,cAAcjsD,EAAKiN,IAExB+qB,QAAQjpC,MACN,4HAGN,GAEA,CAAAqG,IAAA,mBAAAnD,MAMA,SAAiB+N,EAAK0qB,GACpB,OAAO/7B,KAAKsiE,kBAAkBjxD,EAAK0qB,EACrC,KAAC6mC,CAAA,EAjJgBlH,ICTN,SAAAiC,GAAAC,GAAAC,IAAAA,EAAA,WAAA78D,GAAA88D,oBAAA98D,UAAA88D,eAAAA,GAAAj4D,KAAA,OAAA,EAAA,GAAA,mBAAAk4D,MAAA,OAAA,EAAA,IAAA,OAAAp5C,QAAA/jB,UAAA4H,QAAA1H,KAAAg9D,GAAAn5C,QAAA,IAAA,WAAA,MAAA,CAAA,CAAA,MAAA6K,GAAA,OAAA,EAAA,CAAAwuC,GAAA,OAAA,WAAAC,IAAAt1D,EAAAs1D,EAAA5gB,GAAAugB,MAAAC,EAAA,CAAA,IAAAK,EAAA7gB,SAAAtiC,YAAApS,EAAAm1D,GAAAG,EAAAh9D,UAAAi9D,QAAAv1D,EAAAs1D,EAAAp9D,WAAAI,WAAA,OAAAk8C,GAAAn9C,KAAA2I,EAAA,CAAA,CAKb,IAKM4sC,YAAK+qB,GAAApjB,GAAA3H,EAAA+qB,GAAA,IAAAv2B,EAAA4zB,GAAApoB,GAQT,SAAAA,EAAYzpC,EAAS6rC,EAAMgkB,EAAaqD,EAAUC,GAAa,IAAAr/B,EAGvB,OAHuBhc,QAAA2xB,IAC7D3V,EAAAmK,EAAAjpC,UAAMgL,EAAS6rC,EAAMgkB,IAEhBuD,UAAUF,EAAUC,GAAar/B,CACxC,CAuJC,OArJD7R,GAAAwnB,EAAA,CAAA,CAAA9uC,IAAA,SAAAnD,MAMA,SAAO+N,GAAmD,IAA9CuiD,EAAQ3yD,UAAA0D,OAAA1D,QAAAgB,IAAAhB,UAAAgB,GAAAhB,UAAG,GAAAjB,KAAK4zD,SAAUnf,EAAKxzC,UAAA0D,OAAA1D,QAAAgB,IAAAhB,UAAAgB,GAAAhB,UAAG,GAAAjB,KAAKy0C,MAMjD,QAJwBxyC,IAAtBjC,KAAKg/D,SAAS1kD,UACUrY,IAAxBjC,KAAKg/D,SAAStpB,YACWzzC,IAAzBjC,KAAKg/D,SAASrpB,OAEC,CACf,IAAMqtB,EAA2B,EAApBhjE,KAAK8L,QAAQwL,KAG1B,OAFAtX,KAAK01C,MAAQstB,OACbhjE,KAAK21C,OAASqtB,EAEhB,CAEIhjE,KAAKs+D,aAAa1K,EAAUnf,IAC9Bz0C,KAAK0gE,cAET,GAEA,CAAAj6D,IAAA,OAAAnD,MASA,SAAK+N,EAAK/D,EAAGgE,EAAGsiD,EAAUnf,EAAOn2B,GAC/BjN,EAAI0rD,OACJ/8D,KAAK2gE,aAAa/M,GAClB5zD,KAAKi8D,SAEL,IAAI2E,EAAStzD,EACXuzD,EAASvvD,EAYX,GAVsD,aAAlDtR,KAAK8L,QAAQ+wD,gBAAgBiE,kBAC/B9gE,KAAK02C,KAAOppC,EACZtN,KAAK22C,IAAMrlC,EACXsvD,GAAU5gE,KAAK01C,MAAQ,EACvBmrB,GAAU7gE,KAAK21C,OAAS,IAExB31C,KAAK02C,KAAOppC,EAAItN,KAAK01C,MAAQ,EAC7B11C,KAAK22C,IAAMrlC,EAAItR,KAAK21C,OAAS,IAGyB,IAApD31C,KAAK8L,QAAQ+wD,gBAAgBoG,mBAA6B,CAC5D,IAAMC,EAAqBljE,KAAK8L,QAAQkwD,YAClCmH,EACJnjE,KAAK8L,QAAQs3D,qBAAuB,EAAIpjE,KAAK8L,QAAQkwD,YACjDA,GACHpI,EAAWuP,EAAqBD,GACjCljE,KAAK23C,KAAKqhB,KAAKx8B,MACjBnrB,EAAI+oD,UAAYz6D,KAAKgO,IAAI3N,KAAK01C,MAAOsmB,GAErC3qD,EAAIG,YACJ,IAAI6oD,EAAczG,EACd5zD,KAAK8L,QAAQ6hC,MAAM6G,UAAUD,OAC7BE,EACAz0C,KAAK8L,QAAQ6hC,MAAM8G,MAAMF,OACzBv0C,KAAK8L,QAAQ6hC,MAAM4G,OACnBglB,EAAY3F,EACZ5zD,KAAK8L,QAAQ6hC,MAAM6G,UAAUF,WAC7BG,EACAz0C,KAAK8L,QAAQ6hC,MAAM8G,MAAMH,WACzBt0C,KAAK8L,QAAQ6hC,MAAM2G,gBAEAryC,IAAnBqc,EAAOq8C,UACTN,EAAcO,GAAgBP,EAAa/7C,EAAOq8C,SAClDpB,EAAYqB,GAAgBrB,EAAWj7C,EAAOq8C,UAGhDtpD,EAAIgpD,YAAcA,EAGlBhpD,EAAIkoD,UAAYA,EAGhBloD,EAAIoD,KACFzU,KAAK02C,KAAO,GAAMrlC,EAAI+oD,UACtBp6D,KAAK22C,IAAM,GAAMtlC,EAAI+oD,UACrBp6D,KAAK01C,MAAQrkC,EAAI+oD,UACjBp6D,KAAK21C,OAAStkC,EAAI+oD,WAEpBiD,GAAAhsD,GAAGvQ,KAAHuQ,GAEArR,KAAKu9D,cAAclsD,EAAKiN,GAExBjN,EAAIM,WACN,CAEA3R,KAAKghE,qBAAqB3vD,EAAKiN,GAE/Bte,KAAKihE,gBAAgB5vD,EAAKuvD,EAAQC,EAAQjN,EAAUnf,GAEpDz0C,KAAK4+D,kBAAkBtxD,EAAGgE,GAC1BD,EAAI8rD,SACN,GAEA,CAAA12D,IAAA,oBAAAnD,MAKA,SAAkBgK,EAAGgE,GACnBtR,KAAKi8D,SAEiD,aAAlDj8D,KAAK8L,QAAQ+wD,gBAAgBiE,kBAC/B9gE,KAAK02C,KAAOppC,EACZtN,KAAK22C,IAAMrlC,IAEXtR,KAAK02C,KAAOppC,EAAItN,KAAK01C,MAAQ,EAC7B11C,KAAK22C,IAAMrlC,EAAItR,KAAK21C,OAAS,GAG/B31C,KAAK87D,YAAYplB,KAAO12C,KAAK02C,KAC7B12C,KAAK87D,YAAYnlB,IAAM32C,KAAK22C,IAC5B32C,KAAK87D,YAAYpL,OAAS1wD,KAAK22C,IAAM32C,KAAK21C,OAC1C31C,KAAK87D,YAAYpR,MAAQ1qD,KAAK02C,KAAO12C,KAAK01C,WAEfzzC,IAAvBjC,KAAK8L,QAAQ4mC,OAAuB1yC,KAAK27D,YAAYrkD,KAAKo+B,MAAQ,IACpE11C,KAAK87D,YAAYplB,KAAO/2C,KAAKgO,IAC3B3N,KAAK87D,YAAYplB,KACjB12C,KAAK27D,YAAYrkD,KAAKo/B,MAExB12C,KAAK87D,YAAYpR,MAAQ/qD,KAAK+N,IAC5B1N,KAAK87D,YAAYpR,MACjB1qD,KAAK27D,YAAYrkD,KAAKo/B,KAAO12C,KAAK27D,YAAYrkD,KAAKo+B,OAErD11C,KAAK87D,YAAYpL,OAAS/wD,KAAK+N,IAC7B1N,KAAK87D,YAAYpL,OACjB1wD,KAAK87D,YAAYpL,OAAS1wD,KAAK++D,aAGrC,GAEA,CAAAt4D,IAAA,mBAAAnD,MAMA,SAAiB+N,EAAK0qB,GACpB,OAAO/7B,KAAKsiE,kBAAkBjxD,EAAK0qB,EACrC,KAACwZ,CAAA,EAnKiBupB,ICVP,SAAAnB,GAAAC,GAAAC,IAAAA,EAAA,WAAA78D,GAAA88D,oBAAA98D,UAAA88D,eAAAA,GAAAj4D,KAAA,OAAA,EAAA,GAAA,mBAAAk4D,MAAA,OAAA,EAAA,IAAA,OAAAp5C,QAAA/jB,UAAA4H,QAAA1H,KAAAg9D,GAAAn5C,QAAA,IAAA,WAAA,MAAA,CAAA,CAAA,MAAA6K,GAAA,OAAA,EAAA,CAAAwuC,GAAA,OAAA,WAAAC,IAAAt1D,EAAAs1D,EAAA5gB,GAAAugB,MAAAC,EAAA,CAAA,IAAAK,EAAA7gB,SAAAtiC,YAAApS,EAAAm1D,GAAAG,EAAAh9D,UAAAi9D,QAAAv1D,EAAAs1D,EAAAp9D,WAAAI,WAAA,OAAAk8C,GAAAn9C,KAAA2I,EAAA,CAAA,CAIb,IAKM06D,YAAMpB,GAAA/kB,GAAAmmB,EAAApB,GAAA,IAAAl4B,EAAA4zB,GAAA0F,GAMV,SAAAA,EAAYv3D,EAAS6rC,EAAMgkB,GAAa,OAAA/3C,QAAAy/C,GAAAt5B,EAAAjpC,KAAAd,KAChC8L,EAAS6rC,EAAMgkB,EACvB,CAwBC,OAtBD5tC,GAAAs1C,EAAA,CAAA,CAAA58D,IAAA,OAAAnD,MAUA,SAAK+N,EAAK/D,EAAGgE,EAAGsiD,EAAUnf,EAAOn2B,GAC/B,OAAOte,KAAKyiE,WAAWpxD,EAAK,SAAU,EAAG/D,EAAGgE,EAAGsiD,EAAUnf,EAAOn2B,EAClE,GAEA,CAAA7X,IAAA,mBAAAnD,MAMA,SAAiB+N,EAAK0qB,GACpB,OAAO/7B,KAAKsiE,kBAAkBjxD,EAAK0qB,EACrC,KAACsnC,CAAA,EAhCkBnC,ICTR,SAAAvD,GAAAC,GAAAC,IAAAA,EAAA,WAAA78D,GAAA88D,oBAAA98D,UAAA88D,eAAAA,GAAAj4D,KAAA,OAAA,EAAA,GAAA,mBAAAk4D,MAAA,OAAA,EAAA,IAAA,OAAAp5C,QAAA/jB,UAAA4H,QAAA1H,KAAAg9D,GAAAn5C,QAAA,IAAA,WAAA,MAAA,CAAA,CAAA,MAAA6K,GAAA,OAAA,EAAA,CAAAwuC,GAAA,OAAA,WAAAC,IAAAt1D,EAAAs1D,EAAA5gB,GAAAugB,MAAAC,EAAA,CAAA,IAAAK,EAAA7gB,SAAAtiC,YAAApS,EAAAm1D,GAAAG,EAAAh9D,UAAAi9D,QAAAv1D,EAAAs1D,EAAAp9D,WAAAI,WAAA,OAAAk8C,GAAAn9C,KAAA2I,EAAA,CAAA,CAIb,IAKM26D,YAAOrB,GAAA/kB,GAAAomB,EAAArB,GAAA,IAAAl4B,EAAA4zB,GAAA2F,GAMX,SAAAA,EAAYx3D,EAAS6rC,EAAMgkB,GAAa,OAAA/3C,QAAA0/C,GAAAv5B,EAAAjpC,KAAAd,KAChC8L,EAAS6rC,EAAMgkB,EACvB,CAwBC,OAtBD5tC,GAAAu1C,EAAA,CAAA,CAAA78D,IAAA,OAAAnD,MAUA,SAAK+N,EAAK/D,EAAGgE,EAAGsiD,EAAUnf,EAAOn2B,GAC/B,OAAOte,KAAKyiE,WAAWpxD,EAAK,UAAW,EAAG/D,EAAGgE,EAAGsiD,EAAUnf,EAAOn2B,EACnE,GAEA,CAAA7X,IAAA,mBAAAnD,MAMA,SAAiB+N,EAAK0qB,GACpB,OAAO/7B,KAAKsiE,kBAAkBjxD,EAAK0qB,EACrC,KAACunC,CAAA,EAhCmBpC,ICTT,SAAAvD,GAAAC,GAAAC,IAAAA,EAAA,WAAA78D,GAAA88D,oBAAA98D,UAAA88D,eAAAA,GAAAj4D,KAAA,OAAA,EAAA,GAAA,mBAAAk4D,MAAA,OAAA,EAAA,IAAA,OAAAp5C,QAAA/jB,UAAA4H,QAAA1H,KAAAg9D,GAAAn5C,QAAA,IAAA,WAAA,MAAA,CAAA,CAAA,MAAA6K,GAAA,OAAA,EAAA,CAAAwuC,GAAA,OAAA,WAAAC,IAAAt1D,EAAAs1D,EAAA5gB,GAAAugB,MAAAC,EAAA,CAAA,IAAAK,EAAA7gB,SAAAtiC,YAAApS,EAAAm1D,GAAAG,EAAAh9D,UAAAi9D,QAAAv1D,EAAAs1D,EAAAp9D,WAAAI,WAAA,OAAAk8C,GAAAn9C,KAAA2I,EAAA,CAAA,CAIb,IAKM46D,YAAItB,GAAA/kB,GAAAqmB,EAAAtB,GAAA,IAAAl4B,EAAA4zB,GAAA4F,GAMR,SAAAA,EAAYz3D,EAAS6rC,EAAMgkB,GAAa,OAAA/3C,QAAA2/C,GAAAx5B,EAAAjpC,KAAAd,KAChC8L,EAAS6rC,EAAMgkB,EACvB,CAwBC,OAtBD5tC,GAAAw1C,EAAA,CAAA,CAAA98D,IAAA,OAAAnD,MAUA,SAAK+N,EAAK/D,EAAGgE,EAAGsiD,EAAUnf,EAAOn2B,GAC/B,OAAOte,KAAKyiE,WAAWpxD,EAAK,OAAQ,EAAG/D,EAAGgE,EAAGsiD,EAAUnf,EAAOn2B,EAChE,GAEA,CAAA7X,IAAA,mBAAAnD,MAMA,SAAiB+N,EAAK0qB,GACpB,OAAO/7B,KAAKsiE,kBAAkBjxD,EAAK0qB,EACrC,KAACwnC,CAAA,EAhCgBrC,ICTN,SAAAvD,GAAAC,GAAAC,IAAAA,EAAA,WAAA78D,GAAA88D,oBAAA98D,UAAA88D,eAAAA,GAAAj4D,KAAA,OAAA,EAAA,GAAA,mBAAAk4D,MAAA,OAAA,EAAA,IAAA,OAAAp5C,QAAA/jB,UAAA4H,QAAA1H,KAAAg9D,GAAAn5C,QAAA,IAAA,WAAA,MAAA,CAAA,CAAA,MAAA6K,GAAA,OAAA,EAAA,CAAAwuC,GAAA,OAAA,WAAAC,IAAAt1D,EAAAs1D,EAAA5gB,GAAAugB,MAAAC,EAAA,CAAA,IAAAK,EAAA7gB,SAAAtiC,YAAApS,EAAAm1D,GAAAG,EAAAh9D,UAAAi9D,QAAAv1D,EAAAs1D,EAAAp9D,WAAAI,WAAA,OAAAk8C,GAAAn9C,KAAA2I,EAAA,CAAA,CAIb,IAKM66D,YAAIpF,GAAAlhB,GAAAsmB,EAAApF,GAAA,IAAAr0B,EAAA4zB,GAAA6F,GAMR,SAAAA,EAAY13D,EAAS6rC,EAAMgkB,GAAa,IAAA/7B,EAER,OAFQhc,QAAA4/C,IACtC5jC,EAAAmK,EAAAjpC,UAAMgL,EAAS6rC,EAAMgkB,IAChB0C,YAAY1C,GAAa/7B,CAChC,CAuDC,OArDD7R,GAAAy1C,EAAA,CAAA,CAAA/8D,IAAA,SAAAnD,MAMA,SAAO+N,EAAKuiD,EAAUnf,GAChBz0C,KAAKs+D,aAAa1K,EAAUnf,KAC9Bz0C,KAAKy9D,SAAWz9D,KAAK27D,YAAY+B,YAAYrsD,EAAKuiD,EAAUnf,GAC5Dz0C,KAAK01C,MAAQ11C,KAAKy9D,SAAS/nB,MAAQ11C,KAAK47D,OAAOlR,MAAQ1qD,KAAK47D,OAAOllB,KACnE12C,KAAK21C,OAAS31C,KAAKy9D,SAAS9nB,OAAS31C,KAAK47D,OAAOjlB,IAAM32C,KAAK47D,OAAOlL,OACnE1wD,KAAK2U,OAAS,GAAM3U,KAAK01C,MAE7B,GAEA,CAAAjvC,IAAA,OAAAnD,MASA,SAAK+N,EAAK/D,EAAGgE,EAAGsiD,EAAUnf,EAAOn2B,GAC/Bte,KAAKi8D,OAAO5qD,EAAKuiD,EAAUnf,GAC3Bz0C,KAAK02C,KAAOppC,EAAItN,KAAK01C,MAAQ,EAC7B11C,KAAK22C,IAAMrlC,EAAItR,KAAK21C,OAAS,EAG7B31C,KAAKo9D,aAAa/rD,EAAKiN,GACvBte,KAAK27D,YAAYjoD,KACfrC,EACArR,KAAK02C,KAAO12C,KAAKy9D,SAAS/nB,MAAQ,EAAI11C,KAAK47D,OAAOllB,KAClD12C,KAAK22C,IAAM32C,KAAKy9D,SAAS9nB,OAAS,EAAI31C,KAAK47D,OAAOjlB,IAClDid,EACAnf,GAIFz0C,KAAKs9D,cAAcjsD,EAAKiN,GAExBte,KAAK4+D,kBAAkBtxD,EAAGgE,EAAGD,EAAKuiD,EAAUnf,EAC9C,GAEA,CAAAhuC,IAAA,mBAAAnD,MAMA,SAAiB+N,EAAK0qB,GACpB,OAAO/7B,KAAKsiE,kBAAkBjxD,EAAK0qB,EACrC,KAACynC,CAAA,EAhEgB9H,ICTN,SAAAiC,GAAAC,GAAAC,IAAAA,EAAA,WAAA78D,GAAA88D,oBAAA98D,UAAA88D,eAAAA,GAAAj4D,KAAA,OAAA,EAAA,GAAA,mBAAAk4D,MAAA,OAAA,EAAA,IAAA,OAAAp5C,QAAA/jB,UAAA4H,QAAA1H,KAAAg9D,GAAAn5C,QAAA,IAAA,WAAA,MAAA,CAAA,CAAA,MAAA6K,GAAA,OAAA,EAAA,CAAAwuC,GAAA,OAAA,WAAAC,IAAAt1D,EAAAs1D,EAAA5gB,GAAAugB,MAAAC,EAAA,CAAA,IAAAK,EAAA7gB,SAAAtiC,YAAApS,EAAAm1D,GAAAG,EAAAh9D,UAAAi9D,QAAAv1D,EAAAs1D,EAAAp9D,WAAAI,WAAA,OAAAk8C,GAAAn9C,KAAA2I,EAAA,CAAA,CAIb,IAKM86D,YAAQxB,GAAA/kB,GAAAumB,EAAAxB,GAAA,IAAAl4B,EAAA4zB,GAAA8F,GAMZ,SAAAA,EAAY33D,EAAS6rC,EAAMgkB,GAAa,OAAA/3C,QAAA6/C,GAAA15B,EAAAjpC,KAAAd,KAChC8L,EAAS6rC,EAAMgkB,EACvB,CAwBC,OAtBD5tC,GAAA01C,EAAA,CAAA,CAAAh9D,IAAA,OAAAnD,MAUA,SAAK+N,EAAK/D,EAAGgE,EAAGsiD,EAAUnf,EAAOn2B,GAC/B,OAAOte,KAAKyiE,WAAWpxD,EAAK,WAAY,EAAG/D,EAAGgE,EAAGsiD,EAAUnf,EAAOn2B,EACpE,GAEA,CAAA7X,IAAA,mBAAAnD,MAMA,SAAiB+N,EAAK0qB,GACpB,OAAO/7B,KAAKsiE,kBAAkBjxD,EAAK0qB,EACrC,KAAC0nC,CAAA,EAhCoBvC,ICTV,SAAAvD,GAAAC,GAAAC,IAAAA,EAAA,WAAA78D,GAAA88D,oBAAA98D,UAAA88D,eAAAA,GAAAj4D,KAAA,OAAA,EAAA,GAAA,mBAAAk4D,MAAA,OAAA,EAAA,IAAA,OAAAp5C,QAAA/jB,UAAA4H,QAAA1H,KAAAg9D,GAAAn5C,QAAA,IAAA,WAAA,MAAA,CAAA,CAAA,MAAA6K,GAAA,OAAA,EAAA,CAAAwuC,GAAA,OAAA,WAAAC,IAAAt1D,EAAAs1D,EAAA5gB,GAAAugB,MAAAC,EAAA,CAAA,IAAAK,EAAA7gB,SAAAtiC,YAAApS,EAAAm1D,GAAAG,EAAAh9D,UAAAi9D,QAAAv1D,EAAAs1D,EAAAp9D,WAAAI,WAAA,OAAAk8C,GAAAn9C,KAAA2I,EAAA,CAAA,CAIb,IAKM+6D,YAAYzB,GAAA/kB,GAAAwmB,EAAAzB,GAAA,IAAAl4B,EAAA4zB,GAAA+F,GAMhB,SAAAA,EAAY53D,EAAS6rC,EAAMgkB,GAAa,OAAA/3C,QAAA8/C,GAAA35B,EAAAjpC,KAAAd,KAChC8L,EAAS6rC,EAAMgkB,EACvB,CAiCC,OA/BD5tC,GAAA21C,EAAA,CAAA,CAAAj9D,IAAA,OAAAnD,MAUA,SAAK+N,EAAK/D,EAAGgE,EAAGsiD,EAAUnf,EAAOn2B,GAC/B,OAAOte,KAAKyiE,WACVpxD,EACA,eACA,EACA/D,EACAgE,EACAsiD,EACAnf,EACAn2B,EAEJ,GAEA,CAAA7X,IAAA,mBAAAnD,MAMA,SAAiB+N,EAAK0qB,GACpB,OAAO/7B,KAAKsiE,kBAAkBjxD,EAAK0qB,EACrC,KAAC2nC,CAAA,EAzCwBxC,+XCoB3B,IAGMyC,GAAI,WAoBR,SAAAA,EACE73D,EACA6rC,EACAisB,EACAC,EACAC,EACA/nB,GACAn4B,QAAA+/C,GACA3jE,KAAK8L,QAAUi4D,GAAaD,GAC5B9jE,KAAK8jE,cAAgBA,EACrB9jE,KAAK+7C,eAAiBA,EACtB/7C,KAAK23C,KAAOA,EAEZ33C,KAAKivC,MAAQ,GAGbjvC,KAAKsH,QAAKrF,EACVjC,KAAK4jE,UAAYA,EACjB5jE,KAAK6jE,UAAYA,EAGjB7jE,KAAKsN,OAAIrL,EACTjC,KAAKsR,OAAIrP,EACTjC,KAAKi2D,SAAWj2D,KAAK8L,QAAQwL,KAC7BtX,KAAKgkE,aAAehkE,KAAK8L,QAAQioD,KAAKz8C,KACtCtX,KAAKikE,oBAAqB,EAC1BjkE,KAAK4zD,UAAW,EAChB5zD,KAAKy0C,OAAQ,EAEbz0C,KAAK27D,YAAc,IAAI7F,GACrB91D,KAAK23C,KACL33C,KAAK8L,SACL,GAEF9L,KAAKk2D,WAAWpqD,EAClB,CAsvBC,OApvBDiiB,GAAA41C,EAAA,CAAA,CAAAl9D,IAAA,aAAAnD,MAKA,SAAW8pC,GAAM,IAAAte,GACmB,IAA9BigB,GAAAjgB,EAAI9uB,KAACivC,OAAKnuC,KAAAguB,EAASse,IACrBptC,KAAKivC,MAAMnoC,KAAKsmC,EAEpB,GAEA,CAAA3mC,IAAA,aAAAnD,MAKA,SAAW8pC,GAAM,IAAAvB,EAEEgH,EADXhlC,EAAQkhC,GAAAlD,EAAI7rC,KAACivC,OAAKnuC,KAAA+qC,EAASuB,IACnB,GAAVv/B,GACF2jC,GAAAqB,EAAI7yC,KAACivC,OAAKnuC,KAAA+xC,EAAQhlC,EAAO,EAE7B,GAEA,CAAApH,IAAA,aAAAnD,MAMA,SAAWwI,GACT,IAAMo4D,EAAelkE,KAAK8L,QAAQ8mC,MAElC,GAAK9mC,EAAL,CAiBA,QAT6B,IAAlBA,EAAQ6hC,QACjB3tC,KAAKmkE,YAAcr4D,EAAQ6hC,YAIV1rC,IAAf6J,EAAQxE,KACVtH,KAAKsH,GAAKwE,EAAQxE,SAGJrF,IAAZjC,KAAKsH,GACP,MAAM,IAAI4hC,MAAM,wBAGlBy6B,EAAKS,UAAUt4D,EAAS9L,KAAKsH,SAIXrF,IAAd6J,EAAQwB,IACQ,OAAdxB,EAAQwB,GACVtN,KAAKsN,OAAIrL,EACTjC,KAAKikE,oBAAqB,IAE1BjkE,KAAKsN,EAAI+2D,GAASv4D,EAAQwB,GAC1BtN,KAAKikE,oBAAqB,SAGZhiE,IAAd6J,EAAQwF,IACQ,OAAdxF,EAAQwF,GACVtR,KAAKsR,OAAIrP,EACTjC,KAAKikE,oBAAqB,IAE1BjkE,KAAKsR,EAAI+yD,GAASv4D,EAAQwF,GAC1BtR,KAAKikE,oBAAqB,SAGThiE,IAAjB6J,EAAQwL,OACVtX,KAAKi2D,SAAWnqD,EAAQwL,WAEJrV,IAAlB6J,EAAQxI,QACVwI,EAAQxI,MAAQghE,GAAWx4D,EAAQxI,QAIrCqgE,EAAKY,aACHvkE,KAAK8L,QACLA,GACA,EACA9L,KAAK8jE,cACL9jE,KAAK6jE,WAGP,IAAM3T,EAAO,CAACpkD,EAAS9L,KAAK8L,QAAS9L,KAAK+7C,gBAa1C,OAZA/7C,KAAKy3D,QAAUzH,GAAS,OAAQE,GAEhClwD,KAAKwkE,eACLxkE,KAAKykE,kBAAkB34D,QAGC7J,IAApB6J,EAAQ6uD,SAAyBgJ,EAAKe,aAAa54D,EAAQ6uD,WAC7D36D,KAAK8L,QAAQ6uD,QAAU7uD,EAAQ6uD,SAGjC36D,KAAK2kE,YAAYT,QAESjiE,IAAnB6J,EAAQ84D,aAA4C3iE,IAApB6J,EAAQ+4D,OAtE/C,CAuEF,GAEA,CAAAp+D,IAAA,eAAAnD,MAQA,WACE,IACyB,kBAAvBtD,KAAK8L,QAAQ8mC,OACU,UAAvB5yC,KAAK8L,QAAQ8mC,aAEc3wC,IAAvBjC,KAAK8L,QAAQ6mC,MACf,MAAM,IAAIzJ,MACR,+CACElpC,KAAK8L,QAAQ8mC,MACb,KAKR,QAA2B3wC,IAAvBjC,KAAK8L,QAAQ6mC,MAAjB,CAIA,QAAuB1wC,IAAnBjC,KAAK4jE,UACP,MAAM,IAAI16B,MAAM,sCAGlB,GAAkC,iBAAvBlpC,KAAK8L,QAAQ6mC,MACtB3yC,KAAKg/D,SAAWh/D,KAAK4jE,UAAUkB,KAC7B9kE,KAAK8L,QAAQ6mC,MACb3yC,KAAK8L,QAAQi5D,YACb/kE,KAAKsH,QAEF,CACL,QAAsCrF,IAAlCjC,KAAK8L,QAAQ6mC,MAAMqyB,WACrB,MAAM,IAAI97B,MAAM,gCAGlBlpC,KAAKg/D,SAAWh/D,KAAK4jE,UAAUkB,KAC7B9kE,KAAK8L,QAAQ6mC,MAAMqyB,WACnBhlE,KAAK8L,QAAQi5D,YACb/kE,KAAKsH,SAG6BrF,IAAhCjC,KAAK8L,QAAQ6mC,MAAMihB,SACrB5zD,KAAKi/D,YAAcj/D,KAAK4jE,UAAUkB,KAChC9kE,KAAK8L,QAAQ6mC,MAAMihB,SACnB5zD,KAAK8L,QAAQi5D,YACb/kE,KAAKsH,IAGPtH,KAAKi/D,iBAAch9D,CAEvB,CAhCA,CAiCF,GAEA,CAAAwE,IAAA,sBAAAnD,MAuLA,WACE,IAAMgb,EAAS,CACbqvB,MAAO3tC,KAAK8L,QAAQ6hC,MAAM2G,WAC1BqmB,QAAS36D,KAAK8L,QAAQ6uD,QACtBqB,YAAah8D,KAAK8L,QAAQkwD,YAC1Bc,YAAa98D,KAAK8L,QAAQ6hC,MAAM4G,OAChCj9B,KAAMtX,KAAK8L,QAAQwL,KACnBolD,aAAc18D,KAAK8L,QAAQ+wD,gBAAgBH,aAC3CgC,aAAc1+D,KAAK8L,QAAQ+wD,gBAAgB6B,aAC3CxC,OAAQl8D,KAAK8L,QAAQowD,OAAO/sB,QAC5BgtB,YAAan8D,KAAK8L,QAAQowD,OAAOvuB,MACjC0uB,WAAYr8D,KAAK8L,QAAQowD,OAAO5kD,KAChCilD,QAASv8D,KAAK8L,QAAQowD,OAAO5uD,EAC7BmvD,QAASz8D,KAAK8L,QAAQowD,OAAO5qD,GAkC/B,GAhCItR,KAAK4zD,UAAY5zD,KAAKy0C,OACH,IAAjBz0C,KAAKy3D,QACHz3D,KAAK4zD,UACiC,MAApC5zD,KAAK8L,QAAQs3D,oBACf9kD,EAAO09C,YAAch8D,KAAK8L,QAAQs3D,oBAElC9kD,EAAO09C,aAAe,EAExB19C,EAAOqvB,MAAQ3tC,KAAK8L,QAAQ6hC,MAAM6G,UAAUF,WAC5Ch2B,EAAOw+C,YAAc98D,KAAK8L,QAAQ6hC,MAAM6G,UAAUD,OAClDj2B,EAAO49C,OAASl8D,KAAK8L,QAAQowD,OAAO/sB,SAC3BnvC,KAAKy0C,QACdn2B,EAAOqvB,MAAQ3tC,KAAK8L,QAAQ6hC,MAAM8G,MAAMH,WACxCh2B,EAAOw+C,YAAc98D,KAAK8L,QAAQ6hC,MAAM8G,MAAMF,OAC9Cj2B,EAAO49C,OAASl8D,KAAK8L,QAAQowD,OAAO/sB,SAEL,mBAAjBnvC,KAAKy3D,UACrBz3D,KAAKy3D,QAAQn5C,EAAQte,KAAK8L,QAAQxE,GAAItH,KAAK4zD,SAAU5zD,KAAKy0C,QACpC,IAAlBn2B,EAAO49C,SAEP59C,EAAO69C,cAAgBn8D,KAAK8L,QAAQowD,OAAOvuB,OAC3CrvB,EAAO+9C,aAAer8D,KAAK8L,QAAQowD,OAAO5kD,MAC1CgH,EAAOi+C,UAAYv8D,KAAK8L,QAAQowD,OAAO5uD,GACvCgR,EAAOm+C,UAAYz8D,KAAK8L,QAAQowD,OAAO5qD,IAEvCgN,EAAO49C,QAAS,KAKtB59C,EAAO49C,OAASl8D,KAAK8L,QAAQowD,OAAO/sB,aAETltC,IAAzBjC,KAAK8L,QAAQ6uD,QAAuB,CACtC,IAAMA,EAAU36D,KAAK8L,QAAQ6uD,QAC7Br8C,EAAOw+C,YAAclC,GAAgBt8C,EAAOw+C,YAAanC,GACzDr8C,EAAOqvB,MAAQitB,GAAgBt8C,EAAOqvB,MAAOgtB,GAC7Cr8C,EAAO69C,YAAcvB,GAAgBt8C,EAAO69C,YAAaxB,EAC3D,CACA,OAAOr8C,CACT,GAEA,CAAA7X,IAAA,oBAAAnD,MAIA,SAAkBwI,QACW7J,IAAvBjC,KAAK8L,QAAQ4mC,OAA8C,OAAvB1yC,KAAK8L,QAAQ4mC,QACnD1yC,KAAK8L,QAAQ4mC,MAAQ,IAGvBixB,EAAKsB,mBACHjlE,KAAK8L,QAAO+1D,GAAAA,GAAA,CAAA,EAEP/1D,GAAO,GAAA,CACV6hC,MAAQ7hC,GAAWA,EAAQ6hC,OAAU3tC,KAAKmkE,kBAAeliE,IAE3DjC,KAAK6jE,WAaP,IAAMqB,EAAellE,KAAK6jE,UAAUthE,IAAIvC,KAAK8L,QAAQswC,OAAO,GACtD8T,EAAO,CACXpkD,EACA9L,KAAK8L,QACLo5D,EACAllE,KAAK8jE,cACL9jE,KAAK+7C,gBAEP/7C,KAAK27D,YAAY3iC,OAAOh5B,KAAK8L,QAASokD,QAEJjuD,IAA9BjC,KAAK27D,YAAY1F,WACnBj2D,KAAKgkE,aAAehkE,KAAK27D,YAAY1F,SAEzC,GAEA,CAAAxvD,IAAA,cAAAnD,MAIA,SAAY4gE,GACV,GAAIA,IAAiBlkE,KAAK8L,QAAQ8mC,OAAS5yC,KAAK4yC,MAC9C5yC,KAAK4yC,MAAMsjB,WAAWl2D,KAAK8L,QAAS9L,KAAKg/D,SAAUh/D,KAAKi/D,kBAGxD,OAAQj/D,KAAK8L,QAAQ8mC,OACnB,IAAK,MACH5yC,KAAK4yC,MAAQ,IAAIurB,GAAIn+D,KAAK8L,QAAS9L,KAAK23C,KAAM33C,KAAK27D,aACnD,MACF,IAAK,SACH37D,KAAK4yC,MAAQ,IAAIytB,GAAOrgE,KAAK8L,QAAS9L,KAAK23C,KAAM33C,KAAK27D,aACtD,MACF,IAAK,gBACH37D,KAAK4yC,MAAQ,IAAI6tB,GACfzgE,KAAK8L,QACL9L,KAAK23C,KACL33C,KAAK27D,YACL37D,KAAKg/D,SACLh/D,KAAKi/D,aAEP,MACF,IAAK,SACHj/D,KAAK4yC,MAAQ,IAAIovB,GACfhiE,KAAK8L,QACL9L,KAAK23C,KACL33C,KAAK27D,YACL37D,KAAK8L,QAAQo2D,aAEf,MACF,IAAK,WACHliE,KAAK4yC,MAAQ,IAAI2vB,GAASviE,KAAK8L,QAAS9L,KAAK23C,KAAM33C,KAAK27D,aACxD,MACF,IAAK,UACH37D,KAAK4yC,MAAQ,IAAI4vB,GAAQxiE,KAAK8L,QAAS9L,KAAK23C,KAAM33C,KAAK27D,aACvD,MACF,IAAK,MACH37D,KAAK4yC,MAAQ,IAAI8vB,GAAI1iE,KAAK8L,QAAS9L,KAAK23C,KAAM33C,KAAK27D,aACnD,MACF,IAAK,UAqCL,QACE37D,KAAK4yC,MAAQ,IAAI+vB,GAAQ3iE,KAAK8L,QAAS9L,KAAK23C,KAAM33C,KAAK27D,aACvD,MApCF,IAAK,OACH37D,KAAK4yC,MAAQ,IAAIgwB,GAAK5iE,KAAK8L,QAAS9L,KAAK23C,KAAM33C,KAAK27D,aACpD,MACF,IAAK,QACH37D,KAAK4yC,MAAQ,IAAI2C,GACfv1C,KAAK8L,QACL9L,KAAK23C,KACL33C,KAAK27D,YACL37D,KAAKg/D,SACLh/D,KAAKi/D,aAEP,MACF,IAAK,SACHj/D,KAAK4yC,MAAQ,IAAIywB,GAAOrjE,KAAK8L,QAAS9L,KAAK23C,KAAM33C,KAAK27D,aACtD,MACF,IAAK,UACH37D,KAAK4yC,MAAQ,IAAI0wB,GAAQtjE,KAAK8L,QAAS9L,KAAK23C,KAAM33C,KAAK27D,aACvD,MACF,IAAK,OACH37D,KAAK4yC,MAAQ,IAAI2wB,GAAKvjE,KAAK8L,QAAS9L,KAAK23C,KAAM33C,KAAK27D,aACpD,MACF,IAAK,OACH37D,KAAK4yC,MAAQ,IAAI4wB,GAAKxjE,KAAK8L,QAAS9L,KAAK23C,KAAM33C,KAAK27D,aACpD,MACF,IAAK,WACH37D,KAAK4yC,MAAQ,IAAI6wB,GAASzjE,KAAK8L,QAAS9L,KAAK23C,KAAM33C,KAAK27D,aACxD,MACF,IAAK,eACH37D,KAAK4yC,MAAQ,IAAI8wB,GACf1jE,KAAK8L,QACL9L,KAAK23C,KACL33C,KAAK27D,aAQb37D,KAAKs+D,cACP,GAEA,CAAA73D,IAAA,SAAAnD,MAGA,WACEtD,KAAK4zD,UAAW,EAChB5zD,KAAKs+D,cACP,GAEA,CAAA73D,IAAA,WAAAnD,MAGA,WACEtD,KAAK4zD,UAAW,EAChB5zD,KAAKs+D,cACP,GAEA,CAAA73D,IAAA,eAAAnD,MAGA,WACEtD,KAAK4yC,MAAMipB,eAAgB,CAC7B,GAEA,CAAAp1D,IAAA,WAAAnD,MAMA,WACE,OAAOtD,KAAK8L,QAAQqoC,KACtB,GAEA,CAAA1tC,IAAA,mBAAAnD,MAOA,SAAiB+N,EAAK0qB,GACpB,OAAO/7B,KAAK4yC,MAAMie,iBAAiBx/C,EAAK0qB,EAC1C,GAEA,CAAAt1B,IAAA,UAAAnD,MAKA,WACE,OAAOtD,KAAK8L,QAAQ8nC,MAAMtmC,GAAKtN,KAAK8L,QAAQ8nC,MAAMtiC,CACpD,GAEA,CAAA7K,IAAA,aAAAnD,MAKA,WACE,OAAOtD,KAAK4zD,QACd,GAEA,CAAAntD,IAAA,WAAAnD,MAKA,WACE,OAAOtD,KAAK8L,QAAQxI,KACtB,GAEA,CAAAmD,IAAA,eAAAnD,MAKA,WACE,OAAOtD,KAAK27D,YAAYrkD,MAC1B,GAEA,CAAA7Q,IAAA,gBAAAnD,MAQA,SAAcqK,EAAKD,EAAKy3D,GACtB,QAA2BljE,IAAvBjC,KAAK8L,QAAQxI,MAAqB,CACpC,IAAMk5B,EAAQx8B,KAAK8L,QAAQmtD,QAAQmM,sBACjCz3D,EACAD,EACAy3D,EACAnlE,KAAK8L,QAAQxI,OAET+hE,EAAWrlE,KAAK8L,QAAQmtD,QAAQvrD,IAAM1N,KAAK8L,QAAQmtD,QAAQtrD,IACjE,IAA2C,IAAvC3N,KAAK8L,QAAQmtD,QAAQvmB,MAAMvD,QAAkB,CAC/C,IAAMm2B,EACJtlE,KAAK8L,QAAQmtD,QAAQvmB,MAAMhlC,IAAM1N,KAAK8L,QAAQmtD,QAAQvmB,MAAM/kC,IAC9D3N,KAAK8L,QAAQioD,KAAKz8C,KAChBtX,KAAK8L,QAAQmtD,QAAQvmB,MAAM/kC,IAAM6uB,EAAQ8oC,CAC7C,CACAtlE,KAAK8L,QAAQwL,KAAOtX,KAAK8L,QAAQmtD,QAAQtrD,IAAM6uB,EAAQ6oC,CACzD,MACErlE,KAAK8L,QAAQwL,KAAOtX,KAAKi2D,SACzBj2D,KAAK8L,QAAQioD,KAAKz8C,KAAOtX,KAAKgkE,aAGhChkE,KAAKykE,mBACP,GAEA,CAAAh+D,IAAA,OAAAnD,MAOA,SAAK+N,GACH,IAAMiN,EAASte,KAAK6zD,sBACpB,OACE7zD,KAAK4yC,MAAMl/B,KAAKrC,EAAKrR,KAAKsN,EAAGtN,KAAKsR,EAAGtR,KAAK4zD,SAAU5zD,KAAKy0C,MAAOn2B,IAChE,EAEJ,GAEA,CAAA7X,IAAA,oBAAAnD,MAKA,SAAkB+N,GAChBrR,KAAK4yC,MAAMgsB,kBAAkB5+D,KAAKsN,EAAGtN,KAAKsR,EAAGD,EAC/C,GAEA,CAAA5K,IAAA,SAAAnD,MAMA,SAAO+N,GACL,IAAMiN,EAASte,KAAK6zD,sBACpB7zD,KAAK4yC,MAAMqpB,OAAO5qD,EAAKrR,KAAK4zD,SAAU5zD,KAAKy0C,MAAOn2B,EACpD,GAEA,CAAA7X,IAAA,kBAAAnD,MAOA,SAAgByb,GACd,IAAMi5C,EAAM,GAYZ,OAVIh4D,KAAK27D,YAAY4J,WACfhV,GAAYvwD,KAAK27D,YAAYnC,UAAWz6C,IAC1Ci5C,EAAIlxD,KAAK,CAAE0+D,OAAQxlE,KAAKsH,GAAIm+D,QAAS,IAIrClV,GAAYvwD,KAAK4yC,MAAMkpB,YAAa/8C,IACtCi5C,EAAIlxD,KAAK,CAAE0+D,OAAQxlE,KAAKsH,KAGnB0wD,CACT,GAEA,CAAAvxD,IAAA,oBAAAnD,MAMA,SAAkB2K,GAChB,OACEjO,KAAK4yC,MAAM8D,KAAOzoC,EAAIy8C,OACtB1qD,KAAK4yC,MAAM8D,KAAO12C,KAAK4yC,MAAM8C,MAAQznC,EAAIyoC,MACzC12C,KAAK4yC,MAAM+D,IAAM1oC,EAAIyiD,QACrB1wD,KAAK4yC,MAAM+D,IAAM32C,KAAK4yC,MAAM+C,OAAS1nC,EAAI0oC,GAE7C,GAEA,CAAAlwC,IAAA,+BAAAnD,MAMA,SAA6B2K,GAC3B,OACEjO,KAAK4yC,MAAMkpB,YAAYplB,KAAOzoC,EAAIy8C,OAClC1qD,KAAK4yC,MAAMkpB,YAAYpR,MAAQz8C,EAAIyoC,MACnC12C,KAAK4yC,MAAMkpB,YAAYnlB,IAAM1oC,EAAIyiD,QACjC1wD,KAAK4yC,MAAMkpB,YAAYpL,OAASziD,EAAI0oC,GAExC,IAEA,CAAA,CAAAlwC,IAAA,eAAAnD,MAnjBA,SAAoBq3D,GAClB,OAAO,GAAKA,GAAWA,GAAW,CACpC,GAEA,CAAAl0D,IAAA,wBAAAnD,MAMA,SAA6BoiE,GAC3B,YAAkBzjE,IAAXyjE,GAAmC,WAAXA,GAAkC,aAAXA,CACxD,GAEA,CAAAj/D,IAAA,qBAAAnD,MAYA,SAA0BqiE,EAAeC,EAAYC,GAAW,IAAA5yB,EAC9D,QAAkBhxC,IAAd4jE,EAAJ,CAEA,IAAMzpB,EAAQupB,EAAcvpB,MAG5B,QACiBn6C,IAAf2jE,QACqB3jE,IAArB2jE,EAAWxpB,OACXA,IAAUwpB,EAAWxpB,MAErB,MAAM,IAAIlT,MACR,4DAMJ,GADmB,iBAAVkT,GAAwC,iBAAVA,GAA+B,IAATA,EAC7D,CAEA,IAAM0pB,EAAWD,EAAUtjE,IAAI65C,QAENn6C,IAArB6jE,EAASnL,cAAgD14D,IAAvB2jE,EAAWjL,UAC1CgJ,EAAKe,aAAaoB,EAASnL,WAC9BtxB,QAAQjpC,MACN,0EACE0lE,EAASnL,SAEbmL,EAASnL,aAAU14D,IAKvB,IAAM8jE,EAAiBtW,GAAAxc,EAAA+yB,GAA2BJ,IAAW9kE,KAAAmyC,GAC3D,SAAC8J,GAAC,OAAsB,MAAjB6oB,EAAW7oB,EAAU,IAG9BgpB,EAAej/D,KAAK,QACpBm/D,GAAuBF,EAAgBJ,EAAeG,GAItDH,EAAch4B,MAAQkG,GAAW8xB,EAAch4B,MAxBzB,CAjBc,CA0CtC,GAEA,CAAAlnC,IAAA,eAAAnD,MAWA,SACEqiE,EACAC,GAIA,IAHAM,EAAajlE,UAAA0D,OAAA,QAAA1C,IAAAhB,UAAA,IAAAA,UAAA,GACb6iE,EAAa7iE,UAAA0D,OAAA,QAAA1C,IAAAhB,UAAA,GAAAA,UAAA,GAAG,CAAA,EAChB4kE,EAAS5kE,UAAA0D,OAAA1D,EAAAA,kBAAAgB,EAyCT,GAtCAgkE,GADe,CAAC,QAAS,QAAS,UACHN,EAAeC,EAAYM,GAE1DvC,EAAKS,UAAUwB,QAEe3jE,IAA1B0jE,EAAchL,UACXgJ,EAAKe,aAAaiB,EAAchL,WACnCtxB,QAAQjpC,MACN,0EACEulE,EAAchL,SAElBgL,EAAchL,aAAU14D,SAIDA,IAAvB2jE,EAAWjL,UACRgJ,EAAKe,aAAakB,EAAWjL,WAChCtxB,QAAQjpC,MACN,0EACEwlE,EAAWjL,SAEfiL,EAAWjL,aAAU14D,IAKvB2jE,EAAW/I,kBACV8G,EAAKwC,sBAAsBP,EAAW/I,gBAAgBiE,mBAEvDz3B,QAAQjpC,MACN,oDACEwlE,EAAW/I,gBAAgBiE,kBAKjCsF,GAAaT,EAAeC,EAAY,SAAU9B,QAGzB7hE,IAArB2jE,EAAWj4B,OAA4C,OAArBi4B,EAAWj4B,MAAgB,CAC/D,IAAM04B,EAAcxyB,GAAW+xB,EAAWj4B,OAC1C24B,GAAcX,EAAch4B,MAAO04B,EACpC,MAA4B,IAAlBH,GAA+C,OAArBN,EAAWj4B,QAC9Cg4B,EAAch4B,MAAQo2B,GAAaD,EAAcn2B,aAI1B1rC,IAArB2jE,EAAWhyB,OAA4C,OAArBgyB,EAAWhyB,QACf,kBAArBgyB,EAAWhyB,OACpB+xB,EAAc/xB,MAAMtmC,EAAIs4D,EAAWhyB,MACnC+xB,EAAc/xB,MAAMtiC,EAAIs0D,EAAWhyB,aAGV3xC,IAAvB2jE,EAAWhyB,MAAMtmC,GACa,kBAAvBs4D,EAAWhyB,MAAMtmC,IAExBq4D,EAAc/xB,MAAMtmC,EAAIs4D,EAAWhyB,MAAMtmC,QAGlBrL,IAAvB2jE,EAAWhyB,MAAMtiC,GACa,kBAAvBs0D,EAAWhyB,MAAMtiC,IAExBq0D,EAAc/xB,MAAMtiC,EAAIs0D,EAAWhyB,MAAMtiC,MAKzB,IAAlB40D,GAA8C,OAApBN,EAAW7R,OACvC4R,EAAc5R,KAAOgQ,GAAaD,EAAc/P,OAGlD4P,EAAKsB,mBAAmBU,EAAeC,EAAYC,QAGxB5jE,IAAvB2jE,EAAW3M,SACbmN,GACET,EAAc1M,QACd2M,EAAW3M,QACX,QACA6K,EAAc7K,QAGpB,GAAC,CAAAxyD,IAAA,YAAAnD,MAiZD,SAAiBwI,EAASxE,GACxB,QAAqBrF,IAAjB6J,EAAQy6D,MAAsBz6D,EAAQy6D,MAAQ,EAAG,CACnD,IAAIC,EAAQ,QACDvkE,IAAPqF,IACFk/D,EAAQ,gBAAkBl/D,GAE5B+hC,QAAQjpC,MACN,qCAAuComE,EAAQ,uBAC/CC,IAEF36D,EAAQy6D,KAAO,CACjB,CACF,KAAC5C,CAAA,CA7yBO,y/BC5BV,IAGM+C,GAAY,WAOhB,SAAAA,EAAY/uB,EAAMd,EAAQ8vB,EAAQC,GAAc,IAAA93C,EAAA8Q,EAAA5/B,KA0I9C,GA1I8C4jB,QAAA8iD,GAC9C1mE,KAAK23C,KAAOA,EACZ33C,KAAK62C,OAASA,EACd72C,KAAK2mE,OAASA,EACd3mE,KAAK4mE,aAAeA,EAGpB5mE,KAAK23C,KAAKkvB,UAAUC,WAAa7pB,GAAAnuB,EAAI9uB,KAAC6a,QAAM/Z,KAAAguB,EAAM9uB,MAElDA,KAAK+mE,eAAiB,CACpBv/B,IAAK,SAACjyB,EAAOof,GACXiL,EAAK4H,IAAI7S,EAAOw4B,MACjB,EACDn0B,OAAQ,SAACzjB,EAAOof,GACdiL,EAAK5G,OAAOrE,EAAOw4B,MAAOx4B,EAAO5qB,KAAM4qB,EAAO46B,QAC/C,EACDtnB,OAAQ,SAAC1yB,EAAOof,GACdiL,EAAKqI,OAAOtT,EAAOw4B,MACrB,GAGFntD,KAAK+7C,eAAiB,CACpBigB,YAAa,EACboH,yBAAqBnhE,EACrB8iE,iBAAa9iE,EACb0rC,MAAO,CACL4G,OAAQ,UACRD,WAAY,UACZE,UAAW,CACTD,OAAQ,UACRD,WAAY,WAEdG,MAAO,CACLF,OAAQ,UACRD,WAAY,YAGhBqmB,aAAS14D,EACT2xC,MAAO,CACLtmC,GAAG,EACHgE,GAAG,GAELyiD,KAAM,CACJpmB,MAAO,UACPr2B,KAAM,GACNyjD,KAAM,QACNzmB,WAAY,OACZ6lB,YAAa,EACbF,YAAa,UACbH,MAAO,SACPpD,QAAS,EACTvC,OAAO,EACP5B,KAAM,CACJnB,IAAK,QAEP4V,SAAU,CACR5V,IAAK,eAEPoB,KAAM,CACJpB,IAAK,UAEPqB,KAAM,CACJrB,IAAK,GACL95C,KAAM,GACNyjD,KAAM,YACNrE,QAAS,IAGbta,WAAOn6C,EACP2iE,QAAQ,EACRnD,KAAM,CACJ1G,KAAM,cACN/N,UAAM/qD,EACNqV,KAAM,GACNq2B,MAAO,WAETgF,WAAO1wC,EACPq9D,aAAc,CAEZ3oB,IAAK,EACL+T,MAAO,EACPgG,OAAQ,EACRha,KAAM,GAERhE,WAAOzwC,EACP+4D,oBAAoB,EACpBiM,WAAOhlE,EACP25D,OAAQ,CACNjlB,IAAK,EACL+T,MAAO,EACPgG,OAAQ,EACRha,KAAM,GAER6vB,KAAM,EACN1B,SAAS,EACT5L,QAAS,CACPtrD,IAAK,GACLD,IAAK,GACLglC,MAAO,CACLvD,SAAS,EACTxhC,IAAK,GACLD,IAAK,GACLyrD,WAAY,GACZD,cAAe,GAEjBkM,sBAAuB,SAAUz3D,EAAKD,EAAKy3D,EAAO7hE,GAChD,GAAIoK,IAAQC,EACV,MAAO,GAEP,IAAM6uB,EAAQ,GAAK9uB,EAAMC,GACzB,OAAOhO,KAAK+N,IAAI,GAAIpK,EAAQqK,GAAO6uB,EAEvC,GAEF0/B,OAAQ,CACN/sB,SAAS,EACTxB,MAAO,kBACPr2B,KAAM,GACNhK,EAAG,EACHgE,EAAG,GAELshC,MAAO,UACPiqB,gBAAiB,CACfH,cAAc,EACdgC,aAAc,EACdmB,eAAe,EACfL,cAAc,EACdyD,oBAAoB,EACpBnC,iBAAkB,UAEpBxpD,KAAM,GACN68B,WAAOlyC,EACPqB,WAAOrB,EACPqL,OAAGrL,EACHqP,OAAGrP,GAIDjC,KAAK+7C,eAAewqB,MAAQ,EAC9B,KAAM,qFAGRvmE,KAAK8L,QAAUi4D,GAAa/jE,KAAK+7C,gBAEjC/7C,KAAKknE,oBACP,CAuaC,OAraDn5C,GAAA24C,EAAA,CAAA,CAAAjgE,IAAA,qBAAAnD,MAGA,WAAqB,IAAAuoC,EAAAgH,EAAA7N,EAAAhlC,KAEnBA,KAAK23C,KAAKwvB,QAAQ9xD,GAAG,eAAgB4nC,GAAApR,EAAI7rC,KAAConE,SAAOtmE,KAAA+qC,EAAM7rC,OACvDA,KAAK23C,KAAKwvB,QAAQ9xD,GAAG,UAAW4nC,GAAApK,EAAI7yC,KAAConE,SAAOtmE,KAAA+xC,EAAM7yC,OAClDA,KAAK23C,KAAKwvB,QAAQ9xD,GAAG,WAAW,WAC9B1F,GAAQq1B,EAAK+hC,gBAAgB,SAACnyC,EAAUrf,GAClCyvB,EAAK2S,KAAK5tC,KAAK6kC,OAAO5J,EAAK2S,KAAK5tC,KAAK6kC,MAAMl5B,IAAIH,EAAOqf,EAC5D,WACOoQ,EAAK2S,KAAKkvB,UAAUC,kBACpB9hC,EAAK+hC,eAAev/B,WACpBxC,EAAK+hC,eAAe/tC,cACpBgM,EAAK+hC,eAAe9+B,cACpBjD,EAAK+hC,cACd,GACF,GAEA,CAAAtgE,IAAA,aAAAnD,MAIA,SAAWwI,GACT,QAAgB7J,IAAZ6J,EAAuB,CAsBzB,GArBA63D,GAAKY,aAAavkE,KAAK8L,QAASA,QAIR7J,IAApB6J,EAAQ6uD,UAER0M,GAAav7D,EAAQ6uD,WACpB2M,GAAgBx7D,EAAQ6uD,UACzB7uD,EAAQ6uD,QAAU,GAClB7uD,EAAQ6uD,QAAU,EAElBtxB,QAAQjpC,MACN,0EACE0L,EAAQ6uD,SAGZ36D,KAAK8L,QAAQ6uD,QAAU7uD,EAAQ6uD,cAKb14D,IAAlB6J,EAAQ8mC,MACV,IAAK,IAAM4yB,KAAUxlE,KAAK23C,KAAK/I,MACzBvsC,OAAOzB,UAAUH,eAAeK,KAAKd,KAAK23C,KAAK/I,MAAO42B,IACxDxlE,KAAK23C,KAAK/I,MAAM42B,GAAQb,cAM9B,QAC0B,IAAjB74D,EAAQioD,WACoB,IAA5BjoD,EAAQkrD,sBACqB,IAA7BlrD,EAAQqrD,iBAEf,IAAA7qB,IAAAA,IAAAC,EAAqBC,GAAYxsC,KAAK23C,KAAK/I,OAAMtC,EAAAC,EAAA5nC,OAAA2nC,IAAE,CAA9C,IAAMk5B,EAAMj5B,EAAAD,GACftsC,KAAK23C,KAAK/I,MAAM42B,GAAQf,oBACxBzkE,KAAK23C,KAAK/I,MAAM42B,GAAQlH,cAC1B,CAIF,QAAqBr8D,IAAjB6J,EAAQwL,KACV,IAAK,IAAMkuD,KAAUxlE,KAAK23C,KAAK/I,MACzBvsC,OAAOzB,UAAUH,eAAeK,KAAKd,KAAK23C,KAAK/I,MAAO42B,IACxDxlE,KAAK23C,KAAK/I,MAAM42B,GAAQlH,oBAMPr8D,IAAnB6J,EAAQ84D,aAA4C3iE,IAApB6J,EAAQ+4D,SAC1C7kE,KAAK23C,KAAKwvB,QAAQlxD,KAAK,eAE3B,CACF,GAEA,CAAAxP,IAAA,UAAAnD,MAOA,SAAQsrC,GAA0B,IAAnB24B,EAAStmE,UAAA0D,OAAA,QAAA1C,IAAAhB,UAAA,IAAAA,UAAA,GAChBumE,EAAexnE,KAAK23C,KAAK5tC,KAAK6kC,MAEpC,GAAI64B,GAAe,KAAM74B,GACvB5uC,KAAK23C,KAAK5tC,KAAK6kC,MAAQA,OAClB,GAAIzf,GAAcyf,GACvB5uC,KAAK23C,KAAK5tC,KAAK6kC,MAAQ,IAAI84B,GAC3B1nE,KAAK23C,KAAK5tC,KAAK6kC,MAAMpH,IAAIoH,OACpB,IAAKA,EAGV,MAAM,IAAI5qC,UAAU,6BAFpBhE,KAAK23C,KAAK5tC,KAAK6kC,MAAQ,IAAI84B,EAG7B,CAYA,GAVIF,GAEF73D,GAAQ3P,KAAK+mE,gBAAgB,SAAUnyC,EAAUrf,GAC/CiyD,EAAa9xD,IAAIH,EAAOqf,EAC1B,IAIF50B,KAAK23C,KAAK/I,MAAQ,GAEd5uC,KAAK23C,KAAK5tC,KAAK6kC,MAAO,CAExB,IAAM+4B,EAAK3nE,KACX2P,GAAQ3P,KAAK+mE,gBAAgB,SAAUnyC,EAAUrf,GAC/CoyD,EAAGhwB,KAAK5tC,KAAK6kC,MAAMv5B,GAAGE,EAAOqf,EAC/B,IAGA,IAAMgzC,EAAM5nE,KAAK23C,KAAK5tC,KAAK6kC,MAAMi5B,SACjC7nE,KAAKwnC,IAAIogC,GAAK,EAChB,EAEkB,IAAdL,GACFvnE,KAAK23C,KAAKwvB,QAAQlxD,KAAK,eAE3B,GAEA,CAAAxP,IAAA,MAAAnD,MAOA,SAAIskE,GAGF,IAH0B,IACtBtgE,EADGigE,EAAStmE,UAAA0D,OAAA,QAAA1C,IAAAhB,UAAA,IAAAA,UAAA,GAEV6mE,EAAW,GACRj5D,EAAI,EAAGA,EAAI+4D,EAAIjjE,OAAQkK,IAAK,CACnCvH,EAAKsgE,EAAI/4D,GACT,IAAMwb,EAAarqB,KAAK23C,KAAK5tC,KAAK6kC,MAAMrsC,IAAI+E,GACtCmzB,EAAOz6B,KAAK6a,OAAOwP,GACzBy9C,EAAShhE,KAAK2zB,GACdz6B,KAAK23C,KAAK/I,MAAMtnC,GAAMmzB,CACxB,CAEAz6B,KAAK4mE,aAAamB,kBAAkBD,IAElB,IAAdP,GACFvnE,KAAK23C,KAAKwvB,QAAQlxD,KAAK,eAE3B,GAEA,CAAAxP,IAAA,SAAAnD,MAQA,SAAOskE,EAAKI,EAAazY,GAGvB,IAFA,IAAM3gB,EAAQ5uC,KAAK23C,KAAK/I,MACpBq5B,GAAc,EACTp5D,EAAI,EAAGA,EAAI+4D,EAAIjjE,OAAQkK,IAAK,CACnC,IAAMvH,EAAKsgE,EAAI/4D,GACX4rB,EAAOmU,EAAMtnC,GACXyC,EAAOi+D,EAAYn5D,QACZ5M,IAATw4B,EAEEA,EAAKy7B,WAAWnsD,KAClBk+D,GAAc,IAGhBA,GAAc,EAEdxtC,EAAOz6B,KAAK6a,OAAO9Q,GACnB6kC,EAAMtnC,GAAMmzB,EAEhB,CAEKwtC,QAA2BhmE,IAAZstD,IAIlB0Y,EAAcC,GAAAF,GAAWlnE,KAAXknE,GAAiB,SAAUG,EAAUt6D,GACjD,IAAMu6D,EAAW7Y,EAAQ1hD,GACzB,OAAOu6D,GAAYA,EAASnB,QAAUkB,EAASlB,KACjD,MAGkB,IAAhBgB,EACFjoE,KAAK23C,KAAKwvB,QAAQlxD,KAAK,gBAEvBjW,KAAK23C,KAAKwvB,QAAQlxD,KAAK,eAE3B,GAEA,CAAAxP,IAAA,SAAAnD,MAMA,SAAOskE,GAGL,IAFA,IAAMh5B,EAAQ5uC,KAAK23C,KAAK/I,MAEf//B,EAAI,EAAGA,EAAI+4D,EAAIjjE,OAAQkK,IAAK,QAE5B+/B,EADIg5B,EAAI/4D,GAEjB,CAEA7O,KAAK23C,KAAKwvB,QAAQlxD,KAAK,eACzB,GAEA,CAAAxP,IAAA,SAAAnD,MAOA,SAAO+mB,GACL,OAAO,IAD0BppB,UAAA0D,OAAA,QAAA1C,IAAAhB,UAAA,GAAAA,UAAA,GAAG0iE,IAElCt5C,EACArqB,KAAK23C,KACL33C,KAAK62C,OACL72C,KAAK2mE,OACL3mE,KAAK8L,QACL9L,KAAK+7C,eAET,GAEA,CAAAt1C,IAAA,UAAAnD,MAIA,WAAgC,IAAAiiC,EAAAvlC,KAAxBqoE,EAAcpnE,UAAA0D,OAAA,QAAA1C,IAAAhB,UAAA,IAAAA,UAAA,GACpB0O,GAAQ3P,KAAK23C,KAAK/I,OAAO,SAACnU,EAAM+qC,GAC9B,IAAMz7D,EAAOw7B,EAAKoS,KAAK5tC,KAAK6kC,MAAMrsC,IAAIijE,QACzBvjE,IAAT8H,KACqB,IAAnBs+D,GACF5tC,EAAKy7B,WAAW,CAAE5oD,EAAG,KAAMgE,EAAG,OAEhCmpB,EAAKy7B,WAAW,CAAEtiB,OAAO,IACzBnZ,EAAKy7B,WAAWnsD,GAEpB,GACF,GAEA,CAAAtD,IAAA,eAAAnD,MAMA,SAAaskE,GACX,IAAMU,EAAY,CAAA,EAClB,QAAYrmE,IAAR2lE,GACF,IAA2B,IAAvBz4C,GAAcy4C,IAChB,IAAK,IAAI/4D,EAAI,EAAGA,EAAI+4D,EAAIjjE,OAAQkK,IAC9B,QAAgC5M,IAA5BjC,KAAK23C,KAAK/I,MAAMg5B,EAAI/4D,IAAmB,CACzC,IAAM4rB,EAAOz6B,KAAK23C,KAAK/I,MAAMg5B,EAAI/4D,IACjCy5D,EAAUV,EAAI/4D,IAAM,CAClBvB,EAAG3N,KAAKk2B,MAAM4E,EAAKntB,GACnBgE,EAAG3R,KAAKk2B,MAAM4E,EAAKnpB,GAEvB,OAGF,QAA6BrP,IAAzBjC,KAAK23C,KAAK/I,MAAMg5B,GAAoB,CACtC,IAAMntC,EAAOz6B,KAAK23C,KAAK/I,MAAMg5B,GAC7BU,EAAUV,GAAO,CAAEt6D,EAAG3N,KAAKk2B,MAAM4E,EAAKntB,GAAIgE,EAAG3R,KAAKk2B,MAAM4E,EAAKnpB,GAC/D,OAGF,IAAK,IAAIzC,EAAI,EAAGA,EAAI7O,KAAK23C,KAAK4wB,YAAY5jE,OAAQkK,IAAK,CACrD,IAAM4rB,EAAOz6B,KAAK23C,KAAK/I,MAAM5uC,KAAK23C,KAAK4wB,YAAY15D,IACnDy5D,EAAUtoE,KAAK23C,KAAK4wB,YAAY15D,IAAM,CACpCvB,EAAG3N,KAAKk2B,MAAM4E,EAAKntB,GACnBgE,EAAG3R,KAAKk2B,MAAM4E,EAAKnpB,GAEvB,CAEF,OAAOg3D,CACT,GAEA,CAAA7hE,IAAA,cAAAnD,MAQA,SAAYgE,GACV,GAAUrF,MAANqF,EACF,MAAM,IAAItD,UAAU,+CACf,GAA2B/B,MAAvBjC,KAAK23C,KAAK/I,MAAMtnC,GACzB,MAAM,IAAIguB,eAAc,6DAAAhmB,OACuChI,IAG/D,MAAO,CACLgG,EAAG3N,KAAKk2B,MAAM71B,KAAK23C,KAAK/I,MAAMtnC,GAAIgG,GAClCgE,EAAG3R,KAAKk2B,MAAM71B,KAAK23C,KAAK/I,MAAMtnC,GAAIgK,GAGxC,GAEA,CAAA7K,IAAA,iBAAAnD,MAGA,WAEE,IAGkCyoC,EAH5Bu8B,EAAY,GACZE,EAAUxoE,KAAK23C,KAAK5tC,KAAK6kC,MAAM65B,aAAaz8B,EAAAC,GAE7Bu8B,EAAQjmE,OAAK,IAAlC,IAAAypC,EAAAn3B,MAAAk3B,EAAAC,EAAAz+B,KAAAiR,MAAoC,CAAA,IAAzBkqD,EAAM38B,EAAAzoC,MACTgE,EAAKohE,EAAOphE,GACZqhE,EAAW3oE,KAAK23C,KAAK/I,MAAMtnC,GAC3BgG,EAAI3N,KAAKk2B,MAAM8yC,EAASr7D,GACxBgE,EAAI3R,KAAKk2B,MAAM8yC,EAASr3D,GAE1Bo3D,EAAOp7D,IAAMA,GAAKo7D,EAAOp3D,IAAMA,GACjCg3D,EAAUxhE,KAAK,CAAEQ,GAAAA,EAAIgG,EAAAA,EAAGgE,EAAAA,GAE5B,CAAC,CAAA,MAAA86B,GAAAJ,EAAAxc,EAAA4c,EAAA,CAAA,QAAAJ,EAAAlpC,GAAA,CAED0lE,EAAQxvC,OAAOsvC,EACjB,GAEA,CAAA7hE,IAAA,iBAAAnD,MAMA,SAAekiE,GACb,QAAgCvjE,IAA5BjC,KAAK23C,KAAK/I,MAAM42B,GAClB,OAAOxlE,KAAK23C,KAAK/I,MAAM42B,GAAQ5yB,MAAMkpB,WAEzC,GAEA,CAAAr1D,IAAA,oBAAAnD,MAQA,SAAkBkiE,EAAQ7rC,GACxB,IAAMivC,EAAW,GACjB,QAAgC3mE,IAA5BjC,KAAK23C,KAAK/I,MAAM42B,GAGlB,IAFA,IAAM/qC,EAAOz6B,KAAK23C,KAAK/I,MAAM42B,GACvBqD,EAAU,CAAA,EACPh6D,EAAI,EAAGA,EAAI4rB,EAAKwU,MAAMtqC,OAAQkK,IAAK,CAC1C,IAAMu+B,EAAO3S,EAAKwU,MAAMpgC,GACN,OAAd8qB,GAAsByT,EAAK07B,MAAQruC,EAAKnzB,QAEbrF,IAAzB4mE,EAAQz7B,EAAK27B,UACfH,EAAS9hE,KAAKsmC,EAAK27B,QACnBF,EAAQz7B,EAAK27B,SAAU,GAEF,SAAdpvC,GAAwByT,EAAK27B,QAAUtuC,EAAKnzB,SAE1BrF,IAAvB4mE,EAAQz7B,EAAK07B,QACfF,EAAS9hE,KAAKsmC,EAAK07B,MACnBD,EAAQz7B,EAAK07B,OAAQ,EAG3B,CAEF,OAAOF,CACT,GAEA,CAAAniE,IAAA,oBAAAnD,MAMA,SAAkBkiE,GAChB,IAAMwD,EAAW,GACjB,QAAgC/mE,IAA5BjC,KAAK23C,KAAK/I,MAAM42B,GAElB,IADA,IAAM/qC,EAAOz6B,KAAK23C,KAAK/I,MAAM42B,GACpB32D,EAAI,EAAGA,EAAI4rB,EAAKwU,MAAMtqC,OAAQkK,IACrCm6D,EAASliE,KAAK2zB,EAAKwU,MAAMpgC,GAAGvH,SAG9B+hC,QAAQjpC,MACN,mEACAolE,GAGJ,OAAOwD,CACT,GAEA,CAAAviE,IAAA,WAAAnD,MAOA,SAASkiE,EAAQl4D,EAAGgE,GAAG,IAAA23D,EAAAjpE,UACWiC,IAA5BjC,KAAK23C,KAAK/I,MAAM42B,IAClBxlE,KAAK23C,KAAK/I,MAAM42B,GAAQl4D,EAAIsgB,OAAOtgB,GACnCtN,KAAK23C,KAAK/I,MAAM42B,GAAQl0D,EAAIsc,OAAOtc,GACnC43D,IAAW,WACTD,EAAKtxB,KAAKwvB,QAAQlxD,KAAK,kBACxB,GAAE,IAEHozB,QAAQjpC,MACN,0DACAolE,EAGN,KAACkB,CAAA,CA/jBe,GCNdr/D,GAAS/G,GCCTQ,GAAOY,EACP0C,GAAWV,GACXgH,GAAWzE,GACXkjE,GDFa,SAAUnmE,GACzB,YAAsBf,IAAfe,IAA6BqE,GAAOrE,EAAY,UAAYqE,GAAOrE,EAAY,YACxF,ECCI+kB,GAAiCjgB,EACjCkT,GAAiB3R,GANb/I,GAqBN,CAAEiM,OAAQ,UAAWG,MAAM,GAAQ,CACnCnK,IAZF,SAASA,EAAIgK,EAAQ0T,GACnB,IACIjd,EAAYpC,EADZwoE,EAAWnoE,UAAU0D,OAAS,EAAI4H,EAAStL,UAAU,GAEzD,OAAIyJ,GAAS6B,KAAY68D,EAAiB78D,EAAO0T,IACjDjd,EAAa+kB,GAA+BjlB,EAAEyJ,EAAQ0T,IAC/BkpD,GAAiBnmE,GACpCA,EAAWM,WACQrB,IAAnBe,EAAWT,SAAoBN,EAAYnB,GAAKkC,EAAWT,IAAK6mE,GAChEhlE,GAASxD,EAAYoa,GAAezO,IAAiBhK,EAAI3B,EAAWqf,EAAampD,QAArF,CACF,IClBA,SAAW1nE,GAEWV,QAAQuB,UCHjBjC,ICGE,SAAS+oE,KAEpB,IAAIv6C,EADiB,oBAAZ9tB,SAA2BsoE,GAEpCD,GAAOpsB,GAAsBnuB,EAAWw6C,IAAcxoE,KAAKguB,GAE3Du6C,GAAO,SAAc98D,EAAQypB,EAAUozC,GACrC,IAAIx/B,ECTK,SAAwBv+B,EAAQ2qB,GAC7C,MAAQ3zB,OAAOzB,UAAUH,eAAeK,KAAKuK,EAAQ2qB,IAEpC,QADf3qB,EAAS2P,GAAe3P,MAG1B,OAAOA,CACT,CDGiBk+D,CAAch9D,EAAQypB,GACjC,GAAK4T,EAAL,CACA,IAAI5lB,EAAO49C,GAAiCh4B,EAAM5T,GAClD,OAAIhS,EAAKzhB,IACAyhB,EAAKzhB,IAAIzB,KAAKG,UAAU0D,OAAS,EAAI4H,EAAS68D,GAEhDplD,EAAK1gB,KALM,CAMxB,EAEE,OAAO+lE,GAAKxoE,MAAMb,KAAMiB,UAC1B,CEnBA,IAAIsb,GAAIjc,GAGJkpE,GAAS7pE,KAAK8pE,MACd3zC,GAAMn2B,KAAKm2B,IACXtiB,GAAO7T,KAAK6T,KAQhB+I,GAAE,CAAEhQ,OAAQ,OAAQG,MAAM,EAAMwD,MAAO,EAAGnD,SAJ3By8D,IAAUA,GAAO1Z,IAAU4Z,OAAS5Z,KAIS,CAE1D2Z,MAAO,SAAeE,EAAQC,GAM5B,IALA,IAII5kD,EAAK6kD,EAJLC,EAAM,EACNj7D,EAAI,EACJk7D,EAAO9oE,UAAU0D,OACjBqlE,EAAO,EAEJn7D,EAAIk7D,GAELC,GADJhlD,EAAM8Q,GAAI70B,UAAU4N,QAGlBi7D,EAAMA,GADND,EAAMG,EAAOhlD,GACK6kD,EAAM,EACxBG,EAAOhlD,GAGP8kD,GAFS9kD,EAAM,GACf6kD,EAAM7kD,EAAMglD,GACCH,EACD7kD,EAEhB,OAAOglD,IAASla,IAAWA,IAAWka,EAAOx2D,GAAKs2D,EACnD,IChCH,SAAWpoE,GAEW/B,KAAK8pE,sXC4B3B,IAKMQ,GAAQ,WAAA,SAAAA,IAAArmD,QAAAqmD,EAAA,CA6CX,OA7CWl8C,GAAAk8C,EAAA,KAAA,CAAA,CAAAxjE,IAAA,YAAAnD,MAYL,SAAiB4mE,EAAyBC,GAC1Ch7C,GAAc+6C,KACjBA,EAAS,CAACA,IAQZ,IALA,IAAM58D,EAAI68D,EAAUprD,MAAMzR,EACpBgE,EAAI64D,EAAUprD,MAAMzN,EACpByqB,EAAQouC,EAAUpuC,MAClBp3B,EAASwlE,EAAUxlE,OAEhBkK,EAAI,EAAGA,EAAIq7D,EAAOvlE,SAAUkK,EAAG,CACtC,IAAMkuC,EAAImtB,EAAOr7D,GACXu7D,EAAKrtB,EAAEzvC,EAAI3N,KAAK0U,IAAI0nB,GAASghB,EAAEzrC,EAAI3R,KAAK2U,IAAIynB,GAC5CsuC,EAAKttB,EAAEzvC,EAAI3N,KAAK2U,IAAIynB,GAASghB,EAAEzrC,EAAI3R,KAAK0U,IAAI0nB,GAElDghB,EAAEzvC,EAAIA,EAAI3I,EAASylE,EACnBrtB,EAAEzrC,EAAIA,EAAI3M,EAAS0lE,CACpB,CACH,GAEA,CAAA5jE,IAAA,WAAAnD,MAMO,SAAgB+N,EAA+B64D,GACpD74D,EAAIG,YACJH,EAAIW,OAAOk4D,EAAO,GAAG58D,EAAG48D,EAAO,GAAG54D,GAClC,IAAK,IAAIzC,EAAI,EAAGA,EAAIq7D,EAAOvlE,SAAUkK,EACnCwC,EAAIY,OAAOi4D,EAAOr7D,GAAGvB,EAAG48D,EAAOr7D,GAAGyC,GAEpCD,EAAIM,WACN,KAACs4D,CAAA,CA7CW,GAmDR10B,YAAM+0B,GAAAptB,GAAA3H,EAAA+0B,GAAA,IAAAvgC,EAAA4zB,GAAApoB,GAAA,SAAAA,IAAA,OAAA3xB,QAAA2xB,GAAAxL,EAAAlpC,MAAAb,KAAAiB,UAAA,CAwCT,OAxCS8sB,GAAAwnB,EAAA,KAAA,CAAA,CAAA9uC,IAAA,OAAAnD,MAQH,SACL+N,EACA84D,GAEA,GAAIA,EAAUx3B,MAAO,CACnBthC,EAAI0rD,OAEJ1rD,EAAIk5D,UAAUJ,EAAUprD,MAAMzR,EAAG68D,EAAUprD,MAAMzN,GACjDD,EAAIm5D,OAAO7qE,KAAK+R,GAAK,EAAIy4D,EAAUpuC,OAEnC,IAAM2Z,EACoB,MAAxBy0B,EAAUM,WACNN,EAAUM,WACVN,EAAUx3B,MAAM+C,MAChBC,EACqB,MAAzBw0B,EAAUO,YACNP,EAAUO,YACVP,EAAUx3B,MAAMgD,OAEtBw0B,EAAUx3B,MAAMutB,oBACd7uD,EACA,GACCqkC,EAAQ,EACT,EACAA,EACAC,GAGFtkC,EAAI8rD,SACL,CAED,OAAO,CACT,KAAC5nB,CAAA,EAxCiB00B,IA8CdU,YAAMC,GAAA1tB,GAAAytB,EAAAC,GAAA,IAAAC,EAAAlN,GAAAgN,GAAA,SAAAA,IAAA,OAAA/mD,QAAA+mD,GAAAE,EAAAhqE,MAAAb,KAAAiB,UAAA,CAyBT,OAzBS8sB,GAAA48C,EAAA,KAAA,CAAA,CAAAlkE,IAAA,OAAAnD,MAQH,SACL+N,EACA84D,GAIA,IAAMD,EAAS,CACb,CAAE58D,EAAG,EAAGgE,EAAG,GACX,CAAEhE,GAAI,EAAGgE,EAAG,IACZ,CAAEhE,GAAI,GAAKgE,EAAG,GACd,CAAEhE,GAAI,EAAGgE,GAAI,KAMf,OAHA24D,GAAS7a,UAAU8a,EAAQC,GAC3BF,GAASa,SAASz5D,EAAK64D,IAEhB,CACT,KAACS,CAAA,EAzBiBV,IA+Bdc,GAAI,WAAA,SAAAA,IAAAnnD,QAAAmnD,EAAA,CAyBP,OAzBOh9C,GAAAg9C,EAAA,KAAA,CAAA,CAAAtkE,IAAA,OAAAnD,MAQD,SACL+N,EACA84D,GAIA,IAAMD,EAAS,CACb,CAAE58D,GAAI,EAAGgE,EAAG,GACZ,CAAEhE,EAAG,EAAGgE,EAAG,IACX,CAAEhE,GAAI,GAAKgE,EAAG,GACd,CAAEhE,EAAG,EAAGgE,GAAI,KAMd,OAHA24D,GAAS7a,UAAU8a,EAAQC,GAC3BF,GAASa,SAASz5D,EAAK64D,IAEhB,CACT,KAACa,CAAA,CAzBO,GA+BJC,GAAK,WAAA,SAAAA,IAAApnD,QAAAonD,EAAA,CAqCR,OArCQj9C,GAAAi9C,EAAA,KAAA,CAAA,CAAAvkE,IAAA,OAAAnD,MAQF,SACL+N,EACA84D,GAIA,IAAMprD,EAAQ,CAAEzR,GAAI,GAAKgE,EAAG,GAC5B24D,GAAS7a,UAAUrwC,EAAOorD,GAG1B94D,EAAIgpD,YAAchpD,EAAIkoD,UACtBloD,EAAIkoD,UAAY,mBAGhB,IAAM0R,EAAKtrE,KAAK+R,GACVw5D,EAAaf,EAAUpuC,MAAQkvC,EAAK,EACpCE,EAAWhB,EAAUpuC,MAAQkvC,EAAK,EAYxC,OAXA55D,EAAIG,YACJH,EAAII,IACFsN,EAAMzR,EACNyR,EAAMzN,EACa,GAAnB64D,EAAUxlE,OACVumE,EACAC,GACA,GAEF95D,EAAI4rD,UAEG,CACT,KAAC+N,CAAA,CArCQ,GA2CLI,GAAa,WAAA,SAAAA,IAAAxnD,QAAAwnD,EAAA,CAqChB,OArCgBr9C,GAAAq9C,EAAA,KAAA,CAAA,CAAA3kE,IAAA,OAAAnD,MAQV,SACL+N,EACA84D,GAIA,IAAMprD,EAAQ,CAAEzR,GAAI,GAAKgE,EAAG,GAC5B24D,GAAS7a,UAAUrwC,EAAOorD,GAG1B94D,EAAIgpD,YAAchpD,EAAIkoD,UACtBloD,EAAIkoD,UAAY,mBAGhB,IAAM0R,EAAKtrE,KAAK+R,GACVw5D,EAAaf,EAAUpuC,MAAQkvC,EAAK,EACpCE,EAAWhB,EAAUpuC,MAAS,EAAIkvC,EAAM,EAY9C,OAXA55D,EAAIG,YACJH,EAAII,IACFsN,EAAMzR,EACNyR,EAAMzN,EACa,GAAnB64D,EAAUxlE,OACVumE,EACAC,GACA,GAEF95D,EAAI4rD,UAEG,CACT,KAACmO,CAAA,CArCgB,GA2Cb3H,GAAQ,WAAA,SAAAA,IAAA7/C,QAAA6/C,EAAA,CAwBX,OAxBW11C,GAAA01C,EAAA,KAAA,CAAA,CAAAh9D,IAAA,OAAAnD,MAQL,SACL+N,EACA84D,GAIA,IAAMD,EAAS,CACb,CAAE58D,EAAG,IAAMgE,EAAG,GACd,CAAEhE,GAAI,EAAGgE,EAAG,IACZ,CAAEhE,GAAI,EAAGgE,GAAI,KAMf,OAHA24D,GAAS7a,UAAU8a,EAAQC,GAC3BF,GAASa,SAASz5D,EAAK64D,IAEhB,CACT,KAACzG,CAAA,CAxBW,GA8BR4H,GAAgB,WAAA,SAAAA,IAAAznD,QAAAynD,EAAA,CAwBnB,OAxBmBt9C,GAAAs9C,EAAA,KAAA,CAAA,CAAA5kE,IAAA,OAAAnD,MAQb,SACL+N,EACA84D,GAIA,IAAMD,EAAS,CACb,CAAE58D,EAAG,EAAGgE,EAAG,IACX,CAAEhE,EAAG,EAAGgE,GAAI,IACZ,CAAEhE,GAAI,EAAGgE,EAAG,IAMd,OAHA24D,GAAS7a,UAAU8a,EAAQC,GAC3BF,GAASa,SAASz5D,EAAK64D,IAEhB,CACT,KAACmB,CAAA,CAxBmB,GA8BhBhL,GAAM,WAAA,SAAAA,IAAAz8C,QAAAy8C,EAAA,CAkBT,OAlBStyC,GAAAsyC,EAAA,KAAA,CAAA,CAAA55D,IAAA,OAAAnD,MAQH,SACL+N,EACA84D,GAEA,IAAMprD,EAAQ,CAAEzR,GAAI,GAAKgE,EAAG,GAK5B,OAHA24D,GAAS7a,UAAUrwC,EAAOorD,GAC1B/4D,GAAWC,EAAK0N,EAAMzR,EAAGyR,EAAMzN,EAAsB,GAAnB64D,EAAUxlE,SAErC,CACT,KAAC07D,CAAA,CAlBS,GAwBNiL,GAAG,WAAA,SAAAA,IAAA1nD,QAAA0nD,EAAA,CAoCN,OApCMv9C,GAAAu9C,EAAA,KAAA,CAAA,CAAA7kE,IAAA,OAAAnD,MAQA,SACL+N,EACA84D,GAeA,IAAMD,EAAS,CACb,CAAE58D,EAAG,EAAGgE,EAAG,IACX,CAAEhE,EAAG,EAAGgE,GAAI,IACZ,CAAEhE,GAAI,IAAMgE,GAAI,IAChB,CAAEhE,GAAI,IAAMgE,EAAG,KAMjB,OAHA24D,GAAS7a,UAAU8a,EAAQC,GAC3BF,GAASa,SAASz5D,EAAK64D,IAEhB,CACT,KAACoB,CAAA,CApCM,GA0CHnN,GAAG,WAAA,SAAAA,IAAAv6C,QAAAu6C,EAAA,CAuBN,OAvBMpwC,GAAAowC,EAAA,KAAA,CAAA,CAAA13D,IAAA,OAAAnD,MAQA,SACL+N,EACA84D,GAEA,IAAMD,EAAS,CACb,CAAE58D,EAAG,EAAGgE,EAAG,IACX,CAAEhE,EAAG,EAAGgE,GAAI,IACZ,CAAEhE,GAAI,GAAKgE,GAAI,IACf,CAAEhE,GAAI,GAAKgE,EAAG,KAMhB,OAHA24D,GAAS7a,UAAU8a,EAAQC,GAC3BF,GAASa,SAASz5D,EAAK64D,IAEhB,CACT,KAAC/L,CAAA,CAvBM,GA6BHqE,GAAO,WAAA,SAAAA,IAAA5+C,QAAA4+C,EAAA,CAuBV,OAvBUz0C,GAAAy0C,EAAA,KAAA,CAAA,CAAA/7D,IAAA,OAAAnD,MAQJ,SACL+N,EACA84D,GAEA,IAAMD,EAAS,CACb,CAAE58D,EAAG,EAAGgE,EAAG,GACX,CAAEhE,GAAI,GAAKgE,GAAI,IACf,CAAEhE,GAAI,EAAGgE,EAAG,GACZ,CAAEhE,GAAI,GAAKgE,EAAG,KAMhB,OAHA24D,GAAS7a,UAAU8a,EAAQC,GAC3BF,GAASa,SAASz5D,EAAK64D,IAEhB,CACT,KAAC1H,CAAA,CAvBU,GA6BP+I,GAAG,WAAA,SAAAA,IAAA3nD,QAAA2nD,EAAA,CAyBN,OAzBMx9C,GAAAw9C,EAAA,KAAA,CAAA,CAAA9kE,IAAA,OAAAnD,MAQA,SACL+N,EACA84D,GAIA,IAAMD,EAAS,CACb,CAAE58D,GAAI,EAAGgE,EAAG,IACZ,CAAEhE,GAAI,GAAKgE,EAAG,GACd,CAAEhE,GAAI,EAAGgE,GAAI,IACb,CAAEhE,EAAG,EAAGgE,EAAG,IAMb,OAHA24D,GAAS7a,UAAU8a,EAAQC,GAC3BF,GAASa,SAASz5D,EAAK64D,IAEhB,CACT,KAACqB,CAAA,CAzBM,GA+BIC,GAAS,WAAA,SAAAA,IAAA5nD,QAAA4nD,EAAA,CA4CnB,OA5CmBz9C,GAAAy9C,EAAA,KAAA,CAAA,CAAA/kE,IAAA,OAAAnD,MAQb,SACL+N,EACA84D,GAEA,IAAI7xD,EAKJ,OAJI6xD,EAAU7xD,OACZA,EAAO6xD,EAAU7xD,KAAKjO,eAGhBiO,GACN,IAAK,QACH,OAAOi9B,GAAM7hC,KAAKrC,EAAK84D,GACzB,IAAK,SACH,OAAO9J,GAAO3sD,KAAKrC,EAAK84D,GAC1B,IAAK,MACH,OAAOhM,GAAIzqD,KAAKrC,EAAK84D,GACvB,IAAK,OACH,OAAOY,GAAKr3D,KAAKrC,EAAK84D,GACxB,IAAK,QACH,OAAOa,GAAMt3D,KAAKrC,EAAK84D,GACzB,IAAK,UACH,OAAO3H,GAAQ9uD,KAAKrC,EAAK84D,GAC3B,IAAK,YACH,OAAOiB,GAAc13D,KAAKrC,EAAK84D,GACjC,IAAK,WACH,OAAO1G,GAAS/vD,KAAKrC,EAAK84D,GAC5B,IAAK,eACH,OAAOkB,GAAiB33D,KAAKrC,EAAK84D,GACpC,IAAK,MACH,OAAOmB,GAAI53D,KAAKrC,EAAK84D,GACvB,IAAK,MACH,OAAOoB,GAAI73D,KAAKrC,EAAK84D,GAEvB,QACE,OAAOQ,GAAMj3D,KAAKrC,EAAK84D,GAE7B,KAACqB,CAAA,CA5CmB,8XC/ctB,IAAsBC,GAAQ,WAqB5B,SAAAA,EACE3/D,EACU4/D,EACAC,GAAmB/nD,QAAA6nD,GADnBzrE,KAAK0rE,MAALA,EACA1rE,KAAY2rE,aAAZA,EAjBL3rE,KAAK2tC,MAAY,GACjB3tC,KAAU4rE,YAAG,EAGb5rE,KAAU6rE,WAAG,IACb7rE,KAAc8rE,eAAG,EActB9rE,KAAKk2D,WAAWpqD,GAEhB9L,KAAK+rE,UAAY/rE,KAAK2gB,KACtB3gB,KAAKgsE,QAAUhsE,KAAKqxB,EACtB,CA03BC,OAh2BDtD,GAAA09C,EAAA,CAAA,CAAAhlE,IAAA,UAAAnD,MACO,WACLtD,KAAK2gB,KAAO3gB,KAAK0rE,MAAM98B,MAAM5uC,KAAK8L,QAAQ6U,MAC1C3gB,KAAKqxB,GAAKrxB,KAAK0rE,MAAM98B,MAAM5uC,KAAK8L,QAAQulB,GAC1C,GAEA,CAAA5qB,IAAA,UAAAnD,MACO,WACL,OAAO,CACT,GAEA,CAAAmD,IAAA,aAAAnD,MAKO,SAAWwI,GAChB9L,KAAK8L,QAAUA,EAEf9L,KAAK2gB,KAAO3gB,KAAK0rE,MAAM98B,MAAM5uC,KAAK8L,QAAQ6U,MAC1C3gB,KAAKqxB,GAAKrxB,KAAK0rE,MAAM98B,MAAM5uC,KAAK8L,QAAQulB,IACxCrxB,KAAKsH,GAAKtH,KAAK8L,QAAQxE,EACzB,GAEA,CAAAb,IAAA,WAAAnD,MACO,SACL+N,EACAiN,EAUA2tD,EACAC,GACgC,IAAhCC,EAAAlrE,UAAA0D,eAAA1C,IAAAhB,UAAA,GAAAA,UAAe,GAAAjB,KAAKosE,aAGpB/6D,EAAIgpD,YAAcr6D,KAAKqsE,SAASh7D,EAAKiN,GACrCjN,EAAI+oD,UAAY97C,EAAOo3B,OAED,IAAlBp3B,EAAOs+C,OACT58D,KAAKssE,gBAAgBj7D,EAAKiN,EAAQ6tD,GAElCnsE,KAAKusE,UAAUl7D,EAAKiN,EAAQ6tD,EAEhC,GAEA,CAAA1lE,IAAA,YAAAnD,MASQ,SACN+N,EACAiN,EAIA6tD,EACAJ,EACAC,GAEA,GAAIhsE,KAAK2gB,MAAQ3gB,KAAKqxB,GAEpBrxB,KAAKwsE,MAAMn7D,EAAKiN,EAAQ6tD,EAASJ,EAAWC,OACvC,CACL,IAA+CS,EAAAv9C,GAAxBlvB,KAAK0sE,eAAer7D,GAAI,GAAxC/D,EAACm/D,EAAA,GAAEn7D,EAACm7D,EAAA,GAAE93D,EAAM83D,EAAA,GACnBzsE,KAAK2sE,QAAQt7D,EAAKiN,EAAQhR,EAAGgE,EAAGqD,EACjC,CACH,GAEA,CAAAlO,IAAA,kBAAAnD,MASQ,SACN+N,EACAiN,EAIA6tD,EACAS,EACAC,GAEAx7D,EAAIy7D,QAAU,QACd,IAAM55D,EAAUic,GAAc7Q,EAAOs+C,QAAUt+C,EAAOs+C,OAAS,CAAC,EAAG,GAGnE,QAAwB36D,IAApBoP,EAAIsrD,YAA2B,CAQjC,GAPAtrD,EAAI0rD,OAGJ1rD,EAAIsrD,YAAYzpD,GAChB7B,EAAI07D,eAAiB,EAGjB/sE,KAAK2gB,MAAQ3gB,KAAKqxB,GAEpBrxB,KAAKwsE,MAAMn7D,EAAKiN,EAAQ6tD,OACnB,CACL,IAA+Ca,EAAA99C,GAAxBlvB,KAAK0sE,eAAer7D,GAAI,GAAxC/D,EAAC0/D,EAAA,GAAE17D,EAAC07D,EAAA,GAAEr4D,EAAMq4D,EAAA,GACnBhtE,KAAK2sE,QAAQt7D,EAAKiN,EAAQhR,EAAGgE,EAAGqD,EACjC,CAGDtD,EAAIsrD,YAAY,CAAC,IACjBtrD,EAAI07D,eAAiB,EACrB17D,EAAI8rD,SACL,KAAM,CAEL,GAAIn9D,KAAK2gB,MAAQ3gB,KAAKqxB,GAEpBte,GACE1B,EACArR,KAAK2gB,KAAKrT,EACVtN,KAAK2gB,KAAKrP,EACVtR,KAAKqxB,GAAG/jB,EACRtN,KAAKqxB,GAAG/f,EACR4B,OAEG,CACL,IAA+C+5D,EAAA/9C,GAAxBlvB,KAAK0sE,eAAer7D,GAAI,GAAxC/D,EAAC2/D,EAAA,GAAE37D,EAAC27D,EAAA,GAAEt4D,EAAMs4D,EAAA,GACnBjtE,KAAK2sE,QAAQt7D,EAAKiN,EAAQhR,EAAGgE,EAAGqD,EACjC,CAED3U,KAAKo9D,aAAa/rD,EAAKiN,GAEvBjN,EAAI4rD,SAGJj9D,KAAKs9D,cAAcjsD,EAAKiN,EACzB,CACH,GAmBA,CAAA7X,IAAA,qBAAAnD,MAQO,SACLm3B,EACAppB,EACAvF,GAEA,OAAI9L,KAAK2gB,MAAQ3gB,KAAKqxB,GACbrxB,KAAKktE,oBAAoBzyC,EAAMppB,EAAKvF,GAEpC9L,KAAKmtE,0BAA0B1yC,EAAMppB,EAAKvF,EAErD,GAEA,CAAArF,IAAA,sBAAAnD,MACO,SAAoB+N,GAIzB,GAAIrR,KAAK2gB,MAAQ3gB,KAAKqxB,GACpB,MAAO,CACL1Q,KAAM3gB,KAAKktE,oBAAoBltE,KAAK2gB,KAAMtP,GAC1CggB,GAAIrxB,KAAKktE,oBAAoBltE,KAAKqxB,GAAIhgB,IAEnC,IAAAyd,EAC8Cs+C,EAAAl+C,GAApCF,GAAAF,EAAA9uB,KAAK0sE,eAAer7D,IAAIvQ,KAAAguB,EAAO,EAAG,GAAE,GAA5CxhB,EAAC8/D,EAAA,GAAE97D,EAAC87D,EAAA,GAEX,MAAO,CACLzsD,KAAM3gB,KAAKmtE,0BAA0BntE,KAAK2gB,KAAMtP,EAAK,CACnD/D,EAAAA,EACAgE,EAAAA,EACAsa,IAAK,IACLyhD,KAAM,GACN1zC,WAAY,IAEdtI,GAAIrxB,KAAKmtE,0BAA0BntE,KAAK2gB,KAAMtP,EAAK,CACjD/D,EAAAA,EACAgE,EAAAA,EACAsa,IAAK,GACLyhD,KAAM,GACN1zC,UAAW,IAInB,GAEA,CAAAlzB,IAAA,iBAAAnD,MAMU,SACR+N,GAEA,IAAMsD,EAAS3U,KAAK8L,QAAQwhE,cAAch2D,UAE9BrV,IAARoP,QAC4BpP,IAA1BjC,KAAK2gB,KAAKiyB,MAAM8C,OAClB11C,KAAK2gB,KAAKiyB,MAAMqpB,OAAO5qD,GAK3B,IAAM+kC,EAAcwa,GAClBv/C,EACArR,KAAK8L,QAAQwhE,cAAcvxC,MAC3BpnB,EACA3U,KAAK2gB,MAGP,MAAO,CAACy1B,EAAY9oC,EAAG8oC,EAAY9kC,EAAGqD,EACxC,GAEA,CAAAlO,IAAA,iBAAAnD,MASQ,SACNgK,EACAgE,EACAqD,EACA0C,GAEA,IAAM0kB,EAAmB,EAAX1kB,EAAe1X,KAAK+R,GAClC,MAAO,CACLpE,EAAGA,EAAIqH,EAAShV,KAAK0U,IAAI0nB,GACzBzqB,EAAGA,EAAIqD,EAAShV,KAAK2U,IAAIynB,GAE7B,GAEA,CAAAt1B,IAAA,4BAAAnD,MAUQ,SACNiqE,EACAl8D,EACAvF,GAEA,IASIoL,EATE5J,EAAIxB,EAAQwB,EACZgE,EAAIxF,EAAQwF,EACdsa,EAAM9f,EAAQ8f,IACdyhD,EAAOvhE,EAAQuhE,KACb1zC,EAAY7tB,EAAQ6tB,UAGpBhlB,EAAS3U,KAAK8L,QAAQwhE,cAAch2D,KAItCo0C,EAAwB,IAAd9/B,EAAMyhD,GAEhBG,EAAiB,GACmB,IAApCxtE,KAAK8L,QAAQ2hE,sBACI,IAAf9zC,EACF6zC,EAAiBxtE,KAAK8L,QAAQ0hE,eAAe7sD,KACtB,IAAdgZ,IACT6zC,EAAiBxtE,KAAK8L,QAAQ0hE,eAAen8C,KAIjD,IAAIq8C,EAAY,EAChB,EAAG,CACDhiB,EAAwB,IAAd9/B,EAAMyhD,GAEhBn2D,EAAMlX,KAAK2tE,eAAergE,EAAGgE,EAAGqD,EAAQ+2C,GACxC,IAAM3vB,EAAQp8B,KAAK67B,MAAM+xC,EAASj8D,EAAI4F,EAAI5F,EAAGi8D,EAASjgE,EAAI4J,EAAI5J,GAQxDsgE,EALJL,EAAS1c,iBAAiBx/C,EAAK0qB,GAASyxC,EAElB7tE,KAAK6T,KAC3B7T,KAAKkuE,IAAI32D,EAAI5J,EAAIigE,EAASjgE,EAAG,GAAK3N,KAAKkuE,IAAI32D,EAAI5F,EAAIi8D,EAASj8D,EAAG,IAGjE,GAAI3R,KAAKm2B,IAAI83C,GA5BG,IA6Bd,MACSA,EAAa,EAElBj0C,EAAY,EACd/N,EAAM8/B,EAEN2hB,EAAO3hB,EAGL/xB,EAAY,EACd0zC,EAAO3hB,EAEP9/B,EAAM8/B,IAIRgiB,CACH,OAAQ9hD,GAAOyhD,GAAQK,EAhDF,IAkDtB,OAAA7L,GAAAA,GAAA,CAAA,EACK3qD,GAAG,CAAA,EAAA,CACNoY,EAAGo8B,GAEP,GAEA,CAAAjlD,IAAA,eAAAnD,MAOO,SAAaswD,EAAmBnf,GACrC,OAAiB,IAAbmf,EACKj0D,KAAK+N,IAAI1N,KAAK8rE,eAAgB,GAAM9rE,KAAK0rE,MAAM1S,KAAKx8B,QACxC,IAAViY,EACF90C,KAAK+N,IAAI1N,KAAK6rE,WAAY,GAAM7rE,KAAK0rE,MAAM1S,KAAKx8B,OAEhD78B,KAAK+N,IAAI1N,KAAK8L,QAAQ4pC,MAAO,GAAM11C,KAAK0rE,MAAM1S,KAAKx8B,MAE9D,GAEA,CAAA/1B,IAAA,WAAAnD,MASO,SACL+N,EACAiN,GAEA,IAA6B,IAAzBA,EAAOwvD,cAAyB,CAElC,GAA6B,SAAzBxvD,EAAOwvD,eAA4B9tE,KAAK2gB,KAAKrZ,KAAOtH,KAAKqxB,GAAG/pB,GAAI,CAClE,IAAMymE,EAAM18D,EAAI28D,qBACdhuE,KAAK2gB,KAAKrT,EACVtN,KAAK2gB,KAAKrP,EACVtR,KAAKqxB,GAAG/jB,EACRtN,KAAKqxB,GAAG/f,GAEN28D,EAAYjuE,KAAK2gB,KAAK7U,QAAQ6hC,MAAM6G,UAAUD,OAC9C25B,EAAUluE,KAAKqxB,GAAGvlB,QAAQ6hC,MAAM6G,UAAUD,OAoB9C,OAlB2B,IAAvBv0C,KAAK2gB,KAAKizC,WAA2C,IAArB5zD,KAAKqxB,GAAGuiC,UAC1Cqa,EAAYrT,GACV56D,KAAK2gB,KAAK7U,QAAQ6hC,MAAM4G,OACxBj2B,EAAOq8C,SAETuT,EAAUtT,GACR56D,KAAKqxB,GAAGvlB,QAAQ6hC,MAAM4G,OACtBj2B,EAAOq8C,WAEuB,IAAvB36D,KAAK2gB,KAAKizC,WAA0C,IAArB5zD,KAAKqxB,GAAGuiC,SAChDsa,EAAUluE,KAAKqxB,GAAGvlB,QAAQ6hC,MAAM4G,QACA,IAAvBv0C,KAAK2gB,KAAKizC,WAA2C,IAArB5zD,KAAKqxB,GAAGuiC,WACjDqa,EAAYjuE,KAAK2gB,KAAK7U,QAAQ6hC,MAAM4G,QAEtCw5B,EAAII,aAAa,EAAGF,GACpBF,EAAII,aAAa,EAAGD,GAGbH,CACR,CAED,MAA6B,OAAzBzvD,EAAOwvD,cACFlT,GAAgB56D,KAAKqxB,GAAGvlB,QAAQ6hC,MAAM4G,OAAQj2B,EAAOq8C,SAGrDC,GAAgB56D,KAAK2gB,KAAK7U,QAAQ6hC,MAAM4G,OAAQj2B,EAAOq8C,QAEjE,CACC,OAAOC,GAAgBt8C,EAAOqvB,MAAOrvB,EAAOq8C,QAEhD,GAEA,CAAAl0D,IAAA,UAAAnD,MASQ,SACN+N,EACAiN,EAIAhR,EACAgE,EACAqD,GAGA3U,KAAKo9D,aAAa/rD,EAAKiN,GAGvB,IAAI8vD,EAAY,EACZC,EAAoB,EAAV1uE,KAAK+R,GAEnB,IAAK1R,KAAK8L,QAAQwhE,cAAcgB,oBAAqB,CAInD,IAAM1iD,EAAM5rB,KAAK8L,QAAQwhE,cAAcvxC,MACjCsxC,EAAOrtE,KAAK8L,QAAQwhE,cAAcvxC,MAAQp8B,KAAK+R,GAC/C68D,EAAavuE,KAAKmtE,0BAA0BntE,KAAK2gB,KAAMtP,EAAK,CAChE/D,EAAAA,EACAgE,EAAAA,EACAsa,IAAAA,EACAyhD,KAAAA,EACA1zC,WAAY,IAER60C,EAAWxuE,KAAKmtE,0BAA0BntE,KAAK2gB,KAAMtP,EAAK,CAC9D/D,EAAAA,EACAgE,EAAAA,EACAsa,IAAAA,EACAyhD,KAAAA,EACA1zC,UAAW,IAEby0C,EAAYzuE,KAAK67B,MAAM+yC,EAAWj9D,EAAIA,EAAGi9D,EAAWjhE,EAAIA,GACxD+gE,EAAU1uE,KAAK67B,MAAMgzC,EAASl9D,EAAIA,EAAGk9D,EAASlhE,EAAIA,EACnD,CAGD+D,EAAIG,YACJH,EAAII,IAAInE,EAAGgE,EAAGqD,EAAQy5D,EAAWC,GAAS,GAC1Ch9D,EAAI4rD,SAGJj9D,KAAKs9D,cAAcjsD,EAAKiN,EAC1B,GAEA,CAAA7X,IAAA,oBAAAnD,MAKO,SACLmrE,EACAC,EACA17D,EACAC,EACA07D,EACAC,GAEA,GAAI5uE,KAAK2gB,MAAQ3gB,KAAKqxB,GACpB,OAAOrxB,KAAK6uE,mBAAmBJ,EAAIC,EAAI17D,EAAIC,EAAI07D,EAAIC,GAEnD,IAAqDE,EAAA5/C,GAA9BlvB,KAAK0sE,oBAAezqE,GAAU,GAA9CqL,EAACwhE,EAAA,GAAEx9D,EAACw9D,EAAA,GAAEn6D,EAAMm6D,EAAA,GACb17D,EAAK9F,EAAIqhE,EACTt7D,EAAK/B,EAAIs9D,EACf,OAAOjvE,KAAKm2B,IAAIn2B,KAAK6T,KAAKJ,EAAKA,EAAKC,EAAKA,GAAMsB,EAEnD,GA0BA,CAAAlO,IAAA,qBAAAnD,MAWU,SACRmrE,EACAC,EACA17D,EACAC,EACA07D,EACAC,GAEA,IAAMG,EAAK/7D,EAAKy7D,EACVO,EAAK/7D,EAAKy7D,EAEZj/C,IAAMk/C,EAAKF,GAAMM,GAAMH,EAAKF,GAAMM,IADpBD,EAAKA,EAAKC,EAAKA,GAG7Bv/C,EAAI,EACNA,EAAI,EACKA,EAAI,IACbA,EAAI,GAGN,IAEMrc,EAFIq7D,EAAKh/C,EAAIs/C,EAEJJ,EACTt7D,EAFIq7D,EAAKj/C,EAAIu/C,EAEJJ,EAQf,OAAOjvE,KAAK6T,KAAKJ,EAAKA,EAAKC,EAAKA,EAClC,GAsCA,CAAA5M,IAAA,eAAAnD,MACO,SACL+N,EACAgG,EACA80D,EACAF,EACAC,EACA5tD,GAGA,IAAIyd,EACAkzC,EACAC,EACAC,EACAC,EACAC,EACA/2D,EACE8hD,EAAoB97C,EAAOo3B,MAEhB,SAAbr+B,GACF63D,EAAQlvE,KAAK2gB,KACbwuD,EAAQnvE,KAAKqxB,GACb+9C,EAAW9wD,EAAOgxD,eAAkB,EACpCD,EAAc1vE,KAAKm2B,IAAIxX,EAAOgxD,gBAC9Bh3D,EAAOgG,EAAOixD,eACQ,OAAbl4D,GACT63D,EAAQlvE,KAAKqxB,GACb89C,EAAQnvE,KAAK2gB,KACbyuD,EAAW9wD,EAAOkxD,aAAgB,EAClCH,EAAc1vE,KAAKm2B,IAAIxX,EAAOkxD,cAC9Bl3D,EAAOgG,EAAOmxD,cAEdP,EAAQlvE,KAAKqxB,GACb89C,EAAQnvE,KAAK2gB,KACbyuD,EAAW9wD,EAAOoxD,iBAAoB,EACtCL,EAAc1vE,KAAKm2B,IAAIxX,EAAOoxD,kBAC9Bp3D,EAAOgG,EAAOqxD,iBAGhB,IAAMhrE,EAAS,GAAK0qE,EAAc,EAAIjV,EAGtC,GAAI8U,GAASC,EAAO,CAClB,IAIMS,EAAiBjrE,EAJOkrE,GAC5BX,EAAM5hE,EAAI6hE,EAAM7hE,EAChB4hE,EAAM59D,EAAI69D,EAAM79D,GAIlB,GAAiB,WAAb+F,EAEF,IAAoC,IAAhCrX,KAAK8L,QAAQgkE,OAAO3gC,QAAkB,CACxC,IAAM4gC,EAAS/vE,KAAKktE,oBAAoBgC,EAAO79D,EAAK,CAAE2+D,IAAK7D,IACrD8D,EAAWjwE,KAAKkwE,SACpBH,EAAOzgD,EAAIsgD,GAA+B,SAAbv4D,EAAsB,GAAK,GACxD80D,GAEFpwC,EAAQp8B,KAAK67B,MAAMu0C,EAAOz+D,EAAI2+D,EAAS3+D,EAAGy+D,EAAOziE,EAAI2iE,EAAS3iE,GAC9D2hE,EAAac,CACd,MACCh0C,EAAQp8B,KAAK67B,MAAM0zC,EAAM59D,EAAI69D,EAAM79D,EAAG49D,EAAM5hE,EAAI6hE,EAAM7hE,GACtD2hE,EAAajvE,KAAKktE,oBAAoBgC,EAAO79D,OAE1C,CAEL,IAAM8+D,GAAcf,GAAYQ,EAAiBA,GAAkB,EAC7DQ,EAAYpwE,KAAKkwE,SAAS,GAAMC,EAAYhE,GAC5CkE,EAAYrwE,KAAKkwE,SAAS,GAAMC,EAAYhE,GAClDpwC,EAAQp8B,KAAK67B,MACX40C,EAAU9+D,EAAI++D,EAAU/+D,EACxB8+D,EAAU9iE,EAAI+iE,EAAU/iE,GAE1B2hE,EAAajvE,KAAKkwE,SAAS,GAAK/D,EACjC,CACF,KAAM,CAEL,IAA+CmE,EAAAphD,GAAxBlvB,KAAK0sE,eAAer7D,GAAI,GAAxC/D,EAACgjE,EAAA,GAAEh/D,EAACg/D,EAAA,GAAE37D,EAAM27D,EAAA,GAEnB,GAAiB,SAAbj5D,EAAqB,CACvB,IAAMuU,EAAM5rB,KAAK8L,QAAQwhE,cAAcvxC,MACjCsxC,EAAOrtE,KAAK8L,QAAQwhE,cAAcvxC,MAAQp8B,KAAK+R,GAE/Cq+D,EAAS/vE,KAAKmtE,0BAA0BntE,KAAK2gB,KAAMtP,EAAK,CAC5D/D,EAAAA,EACAgE,EAAAA,EACAsa,IAAAA,EACAyhD,KAAAA,EACA1zC,WAAY,IAEdoC,GAAoB,EAAZg0C,EAAOzgD,EAAS3vB,KAAK+R,GAAK,IAAM/R,KAAK+R,GAAK,GAAM/R,KAAK+R,GAC7Du9D,EAAac,CACd,MAAM,GAAiB,OAAb14D,EAAmB,CAC5B,IAAMuU,EAAM5rB,KAAK8L,QAAQwhE,cAAcvxC,MACjCsxC,EAAOrtE,KAAK8L,QAAQwhE,cAAcvxC,MAAQp8B,KAAK+R,GAE/Cq+D,EAAS/vE,KAAKmtE,0BAA0BntE,KAAK2gB,KAAMtP,EAAK,CAC5D/D,EAAAA,EACAgE,EAAAA,EACAsa,IAAAA,EACAyhD,KAAAA,EACA1zC,UAAW,IAEboC,GAAoB,EAAZg0C,EAAOzgD,EAAS3vB,KAAK+R,GAAK,IAAM/R,KAAK+R,GAAK,IAAM/R,KAAK+R,GAC7Du9D,EAAac,CACd,KAAM,CACL,IAAM74D,EAAMlX,KAAK8L,QAAQwhE,cAAcvxC,OAAS,EAAIp8B,KAAK+R,IACzDu9D,EAAajvE,KAAK2tE,eAAergE,EAAGgE,EAAGqD,EAAQuC,GAC/C6kB,GAAe,EAAP7kB,EAAWvX,KAAK+R,GAAK,IAAM/R,KAAK+R,GAAK,GAAM/R,KAAK+R,EACzD,CACF,CAMD,MAAO,CACLqN,MAAOkwD,EACPsB,KAJgB,CAAEjjE,EAFT2hE,EAAW3hE,EAAa,GAAT3I,EAAehF,KAAK0U,IAAI0nB,GAEvBzqB,EADhB29D,EAAW39D,EAAa,GAAT3M,EAAehF,KAAK2U,IAAIynB,IAMhDA,MAAOA,EACPp3B,OAAQA,EACR2T,KAAMA,EAEV,GAEA,CAAA7R,IAAA,gBAAAnD,MACO,SACL+N,EACAiN,EAUA2tD,EACAC,EACA/B,GAGA94D,EAAIgpD,YAAcr6D,KAAKqsE,SAASh7D,EAAKiN,GACrCjN,EAAIkoD,UAAYloD,EAAIgpD,YACpBhpD,EAAI+oD,UAAY97C,EAAOo3B,MAEP81B,GAAU93D,KAAKrC,EAAK84D,KAIlCnqE,KAAKo9D,aAAa/rD,EAAKiN,GACvB++C,GAAAhsD,GAAGvQ,KAAHuQ,GAEArR,KAAKs9D,cAAcjsD,EAAKiN,GAE5B,GAEA,CAAA7X,IAAA,eAAAnD,MAMO,SACL+N,EACAiN,IAKsB,IAAlBA,EAAO49C,SACT7qD,EAAI8qD,YAAc79C,EAAO69C,YACzB9qD,EAAI+qD,WAAa99C,EAAO+9C,WACxBhrD,EAAIirD,cAAgBh+C,EAAOi+C,QAC3BlrD,EAAImrD,cAAgBl+C,EAAOm+C,QAE/B,GAEA,CAAAh2D,IAAA,gBAAAnD,MAMO,SACL+N,EACAiN,IAEsB,IAAlBA,EAAO49C,SACT7qD,EAAI8qD,YAAc,gBAClB9qD,EAAI+qD,WAAa,EACjB/qD,EAAIirD,cAAgB,EACpBjrD,EAAImrD,cAAgB,EAExB,GAEA,CAAA/1D,IAAA,iBAAAnD,MAMO,SACL+N,EACAiN,GAKA,IAA0B,IAAtBA,EAAOg2B,WAAsB,CAE/B,IAAMk8B,EAAc,CAClBnW,YAAahpD,EAAIgpD,YACjBD,UAAW/oD,EAAI+oD,UACfwC,OAASvrD,EAAYurD,QAGvBvrD,EAAIgpD,YAAc/7C,EAAOmyD,gBACzBp/D,EAAI+oD,UAAY97C,EAAOoyD,eACvB1wE,KAAK2wE,gBAAgBt/D,EAAKiN,EAAOsyD,kBAEjCv/D,EAAI4rD,SAGJ5rD,EAAIgpD,YAAcmW,EAAYnW,YAC9BhpD,EAAI+oD,UAAYoW,EAAYpW,UAC3B/oD,EAAYurD,OAAS4T,EAAY5T,OAClC58D,KAAK2wE,gBAAgBt/D,EAAKiN,EAAOs+C,OAClC,CACH,GAEA,CAAAn2D,IAAA,kBAAAnD,MAMO,SACL+N,EACAurD,GAEA,IAAe,IAAXA,EACF,QAAwB36D,IAApBoP,EAAIsrD,YAA2B,CACjC,IAAMzpD,EAAUic,GAAcytC,GAAUA,EAAS,CAAC,EAAG,GACrDvrD,EAAIsrD,YAAYzpD,EACjB,MACCm2B,QAAQC,KACN,6FAIoBrnC,IAApBoP,EAAIsrD,YACNtrD,EAAIsrD,YAAY,IAEhBtzB,QAAQC,KACN,kFAIR,KAACmiC,CAAA,CAx5B2B,6uBClBRoF,IAAAA,YAAoBC,GAAA5zB,GAAA2zB,EAAAC,GAAA,IAAA/mC,EAAA4zB,GAAAkT,GAQxC,SAAAA,EAAmB/kE,EAAsB6rC,EAAagkB,GAAkB,OAAA/3C,QAAAitD,GAAA9mC,EAAAjpC,KAAAd,KAChE8L,EAAS6rC,EAAMgkB,EACvB,CAuMC,OA9LD5tC,GAAA8iD,EAAA,CAAA,CAAApqE,IAAA,4BAAAnD,MAUU,SACRiqE,EACAl8D,GACwC,IAQpC6F,EACAw0C,EATJygB,EAAelrE,UAAA0D,eAAA1C,IAAAhB,UAAA,GAAAA,UAAA,GAAAjB,KAAK+wE,qBAIhBpwD,GAAO,EACP0sD,EAAO,EACPzhD,EAAM,EACN6O,EAAOz6B,KAAKqxB,GAIZm8C,EAAiBxtE,KAAK8L,QAAQ0hE,eAC9BxtE,KAAK8L,QAAQ0hE,eAAen8C,GAC5B,EAEAk8C,EAASjmE,KAAOtH,KAAK2gB,KAAKrZ,KAC5BmzB,EAAOz6B,KAAK2gB,KACZA,GAAO,EAEP6sD,EAAiBxtE,KAAK8L,QAAQ0hE,eAC1BxtE,KAAK8L,QAAQ0hE,eAAe7sD,KAC5B,IAGkC,IAApC3gB,KAAK8L,QAAQ2hE,qBACfD,EAAiB,GAGnB,IAAIE,EAAY,EAChB,EAAG,CACDhiB,EAAwB,IAAd9/B,EAAMyhD,GAEhBn2D,EAAMlX,KAAKkwE,SAASxkB,EAAQygB,GAC5B,IAAMpwC,EAAQp8B,KAAK67B,MAAMf,EAAKnpB,EAAI4F,EAAI5F,EAAGmpB,EAAKntB,EAAI4J,EAAI5J,GAQhDsgE,EALJnzC,EAAKo2B,iBAAiBx/C,EAAK0qB,GAASyxC,EAEd7tE,KAAK6T,KAC3B7T,KAAKkuE,IAAI32D,EAAI5J,EAAImtB,EAAKntB,EAAG,GAAK3N,KAAKkuE,IAAI32D,EAAI5F,EAAImpB,EAAKnpB,EAAG,IAGzD,GAAI3R,KAAKm2B,IAAI83C,GAvCG,GAwCd,MACSA,EAAa,GAET,IAATjtD,EACFiL,EAAM8/B,EAEN2hB,EAAO3hB,GAGI,IAAT/qC,EACF0sD,EAAO3hB,EAEP9/B,EAAM8/B,IAIRgiB,CACH,OAAQ9hD,GAAOyhD,GAAQK,EA1DF,IA4DtB,OAAA7L,GAAAA,GAAA,CAAA,EACK3qD,GAAG,CAAA,EAAA,CACNoY,EAAGo8B,GAEP,GAEA,CAAAjlD,IAAA,2BAAAnD,MAcU,SACRmrE,EACAC,EACA17D,EACAC,EACA07D,EACAC,EACAoB,GAGA,IACI51C,EACAvrB,EAAGygB,EAAGhiB,EAAGgE,EAFT0/D,EAAc,IAGdC,EAAQxC,EACRyC,EAAQxC,EACZ,IAAK7/D,EAAI,EAAGA,EAAI,GAAIA,IAClBygB,EAAI,GAAMzgB,EACVvB,EACE3N,KAAKkuE,IAAI,EAAIv+C,EAAG,GAAKm/C,EAAK,EAAIn/C,GAAK,EAAIA,GAAK0gD,EAAI1iE,EAAI3N,KAAKkuE,IAAIv+C,EAAG,GAAKtc,EACvE1B,EACE3R,KAAKkuE,IAAI,EAAIv+C,EAAG,GAAKo/C,EAAK,EAAIp/C,GAAK,EAAIA,GAAK0gD,EAAI1+D,EAAI3R,KAAKkuE,IAAIv+C,EAAG,GAAKrc,EACnEpE,EAAI,IAENmiE,GADA52C,EAAWp6B,KAAKmxE,mBAAmBF,EAAOC,EAAO5jE,EAAGgE,EAAGq9D,EAAIC,IAClCoC,EAAc52C,EAAW42C,GAEpDC,EAAQ3jE,EACR4jE,EAAQ5/D,EAGV,OAAO0/D,CACT,GAEA,CAAAvqE,IAAA,eAAAnD,MAWU,SACR+N,EACAiN,EASA8yD,EACAC,GAEAhgE,EAAIG,YACJH,EAAIW,OAAOhS,KAAK+rE,UAAUz+D,EAAGtN,KAAK+rE,UAAUz6D,GAE5B,MAAZ8/D,GAAkC,MAAdA,EAAS9jE,EACf,MAAZ+jE,GAAkC,MAAdA,EAAS/jE,EAC/B+D,EAAIqB,cACF0+D,EAAS9jE,EACT8jE,EAAS9/D,EACT+/D,EAAS/jE,EACT+jE,EAAS//D,EACTtR,KAAKgsE,QAAQ1+D,EACbtN,KAAKgsE,QAAQ16D,GAGfD,EAAIigE,iBACFF,EAAS9jE,EACT8jE,EAAS9/D,EACTtR,KAAKgsE,QAAQ1+D,EACbtN,KAAKgsE,QAAQ16D,GAKjBD,EAAIY,OAAOjS,KAAKgsE,QAAQ1+D,EAAGtN,KAAKgsE,QAAQ16D,GAI1CtR,KAAKuxE,eAAelgE,EAAKiN,GAGzBte,KAAKo9D,aAAa/rD,EAAKiN,GACvBjN,EAAI4rD,SACJj9D,KAAKs9D,cAAcjsD,EAAKiN,EAC1B,GAEA,CAAA7X,IAAA,aAAAnD,MACO,WACL,OAAOtD,KAAK+wE,oBACd,KAACF,CAAA,EAjN+CpF,mXCGrC+F,IAAAA,YAAkBC,GAAAv0B,GAAAs0B,EAAAC,GAAA,IAAA1nC,EAAA4zB,GAAA6T,GAW7B,SAAAA,EAAmB1lE,EAAsB6rC,EAAagkB,GAAkB,IAAA/7B,EAMD,OANChc,QAAA4tD,IAEtE5xC,EAAAmK,EAAAjpC,KAAAd,KAAM8L,EAAS6rC,EAAMgkB,IAZhBqU,IAAapwC,EAAKowC,IAavBpwC,EAAK8xC,eAAiB,WACpB9xC,EAAK+xC,sBAEP/xC,EAAK8rC,MAAMvE,QAAQ9xD,GAAG,yBAA0BuqB,EAAK8xC,gBAAgB9xC,CACvE,CA4KC,OA1KD7R,GAAAyjD,EAAA,CAAA,CAAA/qE,IAAA,aAAAnD,MACO,SAAWwI,GAChBu9D,GAAAhsB,GAAAm0B,EAAA5wE,WAAA,aAAAZ,MAAAc,KAAAd,KAAiB8L,GAGjB,IAAI8lE,GAAgB,EAChB5xE,KAAK8L,QAAQ+4D,UAAY/4D,EAAQ+4D,UACnC+M,GAAgB,GAIlB5xE,KAAK8L,QAAUA,EACf9L,KAAKsH,GAAKtH,KAAK8L,QAAQxE,GACvBtH,KAAK2gB,KAAO3gB,KAAK0rE,MAAM98B,MAAM5uC,KAAK8L,QAAQ6U,MAC1C3gB,KAAKqxB,GAAKrxB,KAAK0rE,MAAM98B,MAAM5uC,KAAK8L,QAAQulB,IAGxCrxB,KAAK6xE,mBACL7xE,KAAK8xE,WAGiB,IAAlBF,IACF5xE,KAAKgwE,IAAI9Z,WAAW,CAAE2O,QAAS7kE,KAAK8L,QAAQ+4D,UAC5C7kE,KAAK2xE,qBAET,GAEA,CAAAlrE,IAAA,UAAAnD,MACO,WACLtD,KAAK2gB,KAAO3gB,KAAK0rE,MAAM98B,MAAM5uC,KAAK8L,QAAQ6U,MAC1C3gB,KAAKqxB,GAAKrxB,KAAK0rE,MAAM98B,MAAM5uC,KAAK8L,QAAQulB,SAExBpvB,IAAdjC,KAAK2gB,WACO1e,IAAZjC,KAAKqxB,KACoB,IAAzBrxB,KAAK8L,QAAQ+4D,SAKT7kE,KAAK2gB,KAAKrZ,KAAOtH,KAAKqxB,GAAG/pB,GAH7BtH,KAAKgwE,IAAI9Z,WAAW,CAAE2O,SAAS,IAM7B7kE,KAAKgwE,IAAI9Z,WAAW,CAAE2O,SAAS,GAGrC,GAEA,CAAAp+D,IAAA,UAAAnD,MACO,WAEL,OADAtD,KAAK0rE,MAAMvE,QAAQzxD,IAAI,yBAA0B1V,KAAK0xE,qBACrCzvE,IAAbjC,KAAKgwE,aACAhwE,KAAK0rE,MAAM98B,MAAM5uC,KAAKgwE,IAAI1oE,IACjCtH,KAAKgwE,SAAM/tE,GACJ,EAGX,GAEA,CAAAwE,IAAA,mBAAAnD,MAUO,WACL,QAAiBrB,IAAbjC,KAAKgwE,IAAmB,CAC1B,IAAMxK,EAAS,UAAYxlE,KAAKsH,GAC1BmzB,EAAOz6B,KAAK0rE,MAAM7E,UAAUC,WAAW,CAC3Cx/D,GAAIk+D,EACJ5yB,MAAO,SACPiyB,SAAS,EACTD,QAAQ,IAEV5kE,KAAK0rE,MAAM98B,MAAM42B,GAAU/qC,EAC3Bz6B,KAAKgwE,IAAMv1C,EACXz6B,KAAKgwE,IAAI+B,aAAe/xE,KAAKsH,GAC7BtH,KAAK2xE,oBACN,CACH,GAEA,CAAAlrE,IAAA,qBAAAnD,MAGO,gBAEUrB,IAAbjC,KAAKgwE,UACS/tE,IAAdjC,KAAK2gB,WACO1e,IAAZjC,KAAKqxB,IAELrxB,KAAKgwE,IAAI1iE,EAAI,IAAOtN,KAAK2gB,KAAKrT,EAAItN,KAAKqxB,GAAG/jB,GAC1CtN,KAAKgwE,IAAI1+D,EAAI,IAAOtR,KAAK2gB,KAAKrP,EAAItR,KAAKqxB,GAAG/f,SACpBrP,IAAbjC,KAAKgwE,MACdhwE,KAAKgwE,IAAI1iE,EAAI,EACbtN,KAAKgwE,IAAI1+D,EAAI,EAEjB,GAEA,CAAA7K,IAAA,QAAAnD,MACU,SACR+N,EACAiN,EASA6tD,GAEAnsE,KAAKgyE,aAAa3gE,EAAKiN,EAAQ6tD,EACjC,GAEA,CAAA1lE,IAAA,qBAAAnD,MACU,WACR,OAAOtD,KAAKgwE,GACd,GAEA,CAAAvpE,IAAA,aAAAnD,MACO,WACL,OAAOtD,KAAKgwE,GACd,GAEA,CAAAvpE,IAAA,WAAAnD,MACO,SAAS+T,GAA2C,IAAzB80D,EAAiBlrE,UAAA0D,OAAA1D,QAAAgB,IAAAhB,UAAAgB,GAAAhB,UAAA,GAAAjB,KAAKgwE,IACtD,GAAIhwE,KAAK2gB,OAAS3gB,KAAKqxB,GAAI,CACzB,IAA0Co7C,EAAAv9C,GAArBlvB,KAAK0sE,iBAAgB,GAAnCuF,EAAExF,EAAA,GAAEyF,EAAEzF,EAAA,GAAE0F,EAAE1F,EAAA,GACXvjE,EAAI,EAAIvJ,KAAK+R,IAAM,EAAI2F,GAC7B,MAAO,CACL/J,EAAG2kE,EAAKE,EAAKxyE,KAAK2U,IAAIpL,GACtBoI,EAAG4gE,EAAKC,EAAKA,GAAM,EAAIxyE,KAAK0U,IAAInL,IAEnC,CACC,MAAO,CACLoE,EACE3N,KAAKkuE,IAAI,EAAIx2D,EAAU,GAAKrX,KAAK+rE,UAAUz+D,EAC3C,EAAI+J,GAAY,EAAIA,GAAY80D,EAAQ7+D,EACxC3N,KAAKkuE,IAAIx2D,EAAU,GAAKrX,KAAKgsE,QAAQ1+D,EACvCgE,EACE3R,KAAKkuE,IAAI,EAAIx2D,EAAU,GAAKrX,KAAK+rE,UAAUz6D,EAC3C,EAAI+F,GAAY,EAAIA,GAAY80D,EAAQ76D,EACxC3R,KAAKkuE,IAAIx2D,EAAU,GAAKrX,KAAKgsE,QAAQ16D,EAG7C,GAEA,CAAA7K,IAAA,sBAAAnD,MACU,SACRiqE,EACAl8D,GAEA,OAAOrR,KAAKoyE,0BAA0B7E,EAAUl8D,EAAKrR,KAAKgwE,IAC5D,GAEA,CAAAvpE,IAAA,qBAAAnD,MACU,SACRmrE,EACAC,EACA17D,EACAC,EACA07D,EACAC,GAGA,OAAO5uE,KAAKqyE,yBAAyB5D,EAAIC,EAAI17D,EAAIC,EAAI07D,EAAIC,EAAI5uE,KAAKgwE,IACpE,KAACwB,CAAA,EA9LoCX,mXCJ1ByB,IAAAA,YAAiBb,GAAAv0B,GAAAo1B,EAAAb,GAAA,IAAA1nC,EAAA4zB,GAAA2U,GAQ5B,SAAAA,EAAmBxmE,EAAsB6rC,EAAagkB,GAAkB,OAAA/3C,QAAA0uD,GAAAvoC,EAAAjpC,KAAAd,KAChE8L,EAAS6rC,EAAMgkB,EACvB,CAoNC,OAlND5tC,GAAAukD,EAAA,CAAA,CAAA7rE,IAAA,QAAAnD,MACU,SACR+N,EACAiN,EASA6tD,GAEAnsE,KAAKgyE,aAAa3gE,EAAKiN,EAAQ6tD,EACjC,GAEA,CAAA1lE,IAAA,aAAAnD,MACO,WACL,OAAOtD,KAAK+wE,oBACd,GAEA,CAAAtqE,IAAA,qBAAAnD,MAOU,WAER,IAuGMivE,EACAC,EAxGA/7B,EAASz2C,KAAK8L,QAAQgkE,OAAO2C,UAC7Bn6D,EAAOtY,KAAK8L,QAAQgkE,OAAOx3D,KAC7BlF,EAAKzT,KAAKm2B,IAAI91B,KAAK2gB,KAAKrT,EAAItN,KAAKqxB,GAAG/jB,GACpC+F,EAAK1T,KAAKm2B,IAAI91B,KAAK2gB,KAAKrP,EAAItR,KAAKqxB,GAAG/f,GACxC,GAAa,aAATgH,GAAgC,kBAATA,EAA0B,CACnD,IAAIi6D,EACAC,EAGFD,EAAQC,EADNp/D,GAAMC,EACQojC,EAASpjC,EAETojC,EAASrjC,EAGvBpT,KAAK2gB,KAAKrT,EAAItN,KAAKqxB,GAAG/jB,IACxBilE,GAASA,GAEPvyE,KAAK2gB,KAAKrP,GAAKtR,KAAKqxB,GAAG/f,IACzBkhE,GAASA,GAGX,IAAIE,EAAO1yE,KAAK2gB,KAAKrT,EAAIilE,EACrBI,EAAO3yE,KAAK2gB,KAAKrP,EAAIkhE,EAUzB,MARa,aAATl6D,IACElF,GAAMC,EACRq/D,EAAOt/D,EAAKqjC,EAASpjC,EAAKrT,KAAK2gB,KAAKrT,EAAIolE,EAExCC,EAAOt/D,EAAKojC,EAASrjC,EAAKpT,KAAK2gB,KAAKrP,EAAIqhE,GAIrC,CAAErlE,EAAGolE,EAAMphE,EAAGqhE,EACtB,CAAM,GAAa,kBAATr6D,EAA0B,CACnC,IAAIi6D,GAAS,EAAI97B,GAAUrjC,EACvBo/D,GAAS,EAAI/7B,GAAUpjC,EAgB3B,OAdID,GAAMC,GAERk/D,EAAQ,EACJvyE,KAAK2gB,KAAKrP,EAAItR,KAAKqxB,GAAG/f,IACxBkhE,GAASA,KAIPxyE,KAAK2gB,KAAKrT,EAAItN,KAAKqxB,GAAG/jB,IACxBilE,GAASA,GAEXC,EAAQ,GAGH,CACLllE,EAAGtN,KAAKqxB,GAAG/jB,EAAIilE,EACfjhE,EAAGtR,KAAKqxB,GAAG/f,EAAIkhE,EAElB,CAAM,GAAa,eAATl6D,EAAuB,CAChC,IAAIi6D,GAAS,EAAI97B,GAAUrjC,EAK3B,OAJIpT,KAAK2gB,KAAKrT,EAAItN,KAAKqxB,GAAG/jB,IACxBilE,GAASA,GAGJ,CACLjlE,EAAGtN,KAAKqxB,GAAG/jB,EAAIilE,EACfjhE,EAAGtR,KAAK2gB,KAAKrP,EAEhB,CAAM,GAAa,aAATgH,EAAqB,CAC9B,IAAIk6D,GAAS,EAAI/7B,GAAUpjC,EAK3B,OAJIrT,KAAK2gB,KAAKrP,EAAItR,KAAKqxB,GAAG/f,IACxBkhE,GAASA,GAGJ,CACLllE,EAAGtN,KAAK2gB,KAAKrT,EACbgE,EAAGtR,KAAKqxB,GAAG/f,EAAIkhE,EAElB,CAAM,GAAa,aAATl6D,EAAqB,CAC9BlF,EAAKpT,KAAKqxB,GAAG/jB,EAAItN,KAAK2gB,KAAKrT,EAC3B+F,EAAKrT,KAAK2gB,KAAKrP,EAAItR,KAAKqxB,GAAG/f,EAC3B,IAAMqD,EAAShV,KAAK6T,KAAKJ,EAAKA,EAAKC,EAAKA,GAClC43D,EAAKtrE,KAAK+R,GAGVkhE,GADgBjzE,KAAK67B,MAAMnoB,EAAID,IACM,GAATqjC,EAAe,IAAOw0B,IAAO,EAAIA,GAEnE,MAAO,CACL39D,EAAGtN,KAAK2gB,KAAKrT,GAAc,GAATmpC,EAAe,IAAO9hC,EAAShV,KAAK2U,IAAIs+D,GAC1DthE,EAAGtR,KAAK2gB,KAAKrP,GAAc,GAATmlC,EAAe,IAAO9hC,EAAShV,KAAK0U,IAAIu+D,GAE7D,CAAM,GAAa,cAATt6D,EAAsB,CAC/BlF,EAAKpT,KAAKqxB,GAAG/jB,EAAItN,KAAK2gB,KAAKrT,EAC3B+F,EAAKrT,KAAK2gB,KAAKrP,EAAItR,KAAKqxB,GAAG/f,EAC3B,IAAMqD,EAAShV,KAAK6T,KAAKJ,EAAKA,EAAKC,EAAKA,GAClC43D,EAAKtrE,KAAK+R,GAGVkhE,GADgBjzE,KAAK67B,MAAMnoB,EAAID,IACO,IAATqjC,EAAe,IAAOw0B,IAAO,EAAIA,GAEpE,MAAO,CACL39D,EAAGtN,KAAK2gB,KAAKrT,GAAc,GAATmpC,EAAe,IAAO9hC,EAAShV,KAAK2U,IAAIs+D,GAC1DthE,EAAGtR,KAAK2gB,KAAKrP,GAAc,GAATmlC,EAAe,IAAO9hC,EAAShV,KAAK0U,IAAIu+D,GAE7D,CAMGL,EAAQC,EADNp/D,GAAMC,EACQojC,EAASpjC,EAETojC,EAASrjC,EAGvBpT,KAAK2gB,KAAKrT,EAAItN,KAAKqxB,GAAG/jB,IACxBilE,GAASA,GAEPvyE,KAAK2gB,KAAKrP,GAAKtR,KAAKqxB,GAAG/f,IACzBkhE,GAASA,GAGX,IAAIE,EAAO1yE,KAAK2gB,KAAKrT,EAAIilE,EACrBI,EAAO3yE,KAAK2gB,KAAKrP,EAAIkhE,EAgBzB,OAdIp/D,GAAMC,EAENq/D,EADE1yE,KAAK2gB,KAAKrT,GAAKtN,KAAKqxB,GAAG/jB,EAClBtN,KAAKqxB,GAAG/jB,EAAIolE,EAAO1yE,KAAKqxB,GAAG/jB,EAAIolE,EAE/B1yE,KAAKqxB,GAAG/jB,EAAIolE,EAAO1yE,KAAKqxB,GAAG/jB,EAAIolE,EAItCC,EADE3yE,KAAK2gB,KAAKrP,GAAKtR,KAAKqxB,GAAG/f,EAClBtR,KAAKqxB,GAAG/f,EAAIqhE,EAAO3yE,KAAKqxB,GAAG/f,EAAIqhE,EAE/B3yE,KAAKqxB,GAAG/f,EAAIqhE,EAAO3yE,KAAKqxB,GAAG/f,EAAIqhE,EAInC,CAAErlE,EAAGolE,EAAMphE,EAAGqhE,EAEzB,GAEA,CAAAlsE,IAAA,sBAAAnD,MACU,SACRiqE,EACAl8D,GAC6B,IAA7BvF,yDAA2B,CAAA,EAE3B,OAAO9L,KAAKoyE,0BAA0B7E,EAAUl8D,EAAKvF,EAAQkkE,IAC/D,GAEA,CAAAvpE,IAAA,qBAAAnD,MACU,SACRmrE,EACAC,EACA17D,EACAC,EACA07D,EACAC,GACmC,IAAnCzC,EAAOlrE,UAAA0D,eAAA1C,IAAAhB,UAAA,GAAAA,UAAG,GAAAjB,KAAK+wE,qBAGf,OAAO/wE,KAAKqyE,yBAAyB5D,EAAIC,EAAI17D,EAAIC,EAAI07D,EAAIC,EAAIzC,EAC/D,GAEA,CAAA1lE,IAAA,WAAAnD,MACO,SACL+T,GAC0C,IAA1C80D,sDAAiB,GAAAnsE,KAAK+wE,qBAEhBzhD,EAAIjY,EAUV,MAAO,CAAE/J,EARP3N,KAAKkuE,IAAI,EAAIv+C,EAAG,GAAKtvB,KAAK+rE,UAAUz+D,EACpC,EAAIgiB,GAAK,EAAIA,GAAK68C,EAAQ7+D,EAC1B3N,KAAKkuE,IAAIv+C,EAAG,GAAKtvB,KAAKgsE,QAAQ1+D,EAMjBgE,EAJb3R,KAAKkuE,IAAI,EAAIv+C,EAAG,GAAKtvB,KAAK+rE,UAAUz6D,EACpC,EAAIge,GAAK,EAAIA,GAAK68C,EAAQ76D,EAC1B3R,KAAKkuE,IAAIv+C,EAAG,GAAKtvB,KAAKgsE,QAAQ16D,EAGlC,KAACghE,CAAA,EA9NmCzB,mXCNhBgC,IAAAA,YAAyBpB,GAAAv0B,GAAA21B,EAAApB,GAAA,IAAA1nC,EAAA4zB,GAAAkV,GAQ7C,SAAAA,EAAmB/mE,EAAsB6rC,EAAagkB,GAAkB,OAAA/3C,QAAAivD,GAAA9oC,EAAAjpC,KAAAd,KAChE8L,EAAS6rC,EAAMgkB,EACvB,CAkDC,OAhDD5tC,GAAA8kD,EAAA,CAAA,CAAApsE,IAAA,4BAAAnD,MAgBU,SACRmrE,EACAC,EACA17D,EACAC,EACA07D,EACAC,EACAkE,EACAC,GAOA,IAJA,IAAI/B,EAAc,IACdC,EAAQxC,EACRyC,EAAQxC,EACNsE,EAAM,CAAC,EAAG,EAAG,EAAG,GACbnkE,EAAI,EAAGA,EAAI,GAAIA,IAAK,CAC3B,IAAMygB,EAAI,GAAMzgB,EAChBmkE,EAAI,GAAKrzE,KAAKkuE,IAAI,EAAIv+C,EAAG,GACzB0jD,EAAI,GAAK,EAAI1jD,EAAI3vB,KAAKkuE,IAAI,EAAIv+C,EAAG,GACjC0jD,EAAI,GAAK,EAAIrzE,KAAKkuE,IAAIv+C,EAAG,IAAM,EAAIA,GACnC0jD,EAAI,GAAKrzE,KAAKkuE,IAAIv+C,EAAG,GACrB,IAAMhiB,EAAI0lE,EAAI,GAAKvE,EAAKuE,EAAI,GAAKF,EAAKxlE,EAAI0lE,EAAI,GAAKD,EAAKzlE,EAAI0lE,EAAI,GAAKhgE,EAC/D1B,EAAI0hE,EAAI,GAAKtE,EAAKsE,EAAI,GAAKF,EAAKxhE,EAAI0hE,EAAI,GAAKD,EAAKzhE,EAAI0hE,EAAI,GAAK//D,EACrE,GAAIpE,EAAI,EAAG,CACT,IAAMurB,EAAWp6B,KAAKmxE,mBAAmBF,EAAOC,EAAO5jE,EAAGgE,EAAGq9D,EAAIC,GACjEoC,EAAc52C,EAAW42C,EAAc52C,EAAW42C,CACnD,CACDC,EAAQ3jE,EACR4jE,EAAQ5/D,CACT,CAED,OAAO0/D,CACT,KAAC6B,CAAA,EA5DoDhC,mXCM1CoC,IAAAA,YAAgBC,GAAAh2B,GAAA+1B,EAAAC,GAAA,IAAAnpC,EAAA4zB,GAAAsV,GAQ3B,SAAAA,EAAmBnnE,EAAsB6rC,EAAagkB,GAAkB,OAAA/3C,QAAAqvD,GAAAlpC,EAAAjpC,KAAAd,KAChE8L,EAAS6rC,EAAMgkB,EACvB,CAgHC,OA9GD5tC,GAAAklD,EAAA,CAAA,CAAAxsE,IAAA,QAAAnD,MACU,SACR+N,EACAiN,EASA60D,GAGA,IAAML,EAAOK,EAAS,GAChBJ,EAAOI,EAAS,GACtBnzE,KAAKgyE,aAAa3gE,EAAKiN,EAAQw0D,EAAMC,EACvC,GAEA,CAAAtsE,IAAA,qBAAAnD,MAKU,WACR,IAGImrE,EACAC,EACA17D,EACAC,EANEG,EAAKpT,KAAK2gB,KAAKrT,EAAItN,KAAKqxB,GAAG/jB,EAC3B+F,EAAKrT,KAAK2gB,KAAKrP,EAAItR,KAAKqxB,GAAG/f,EAM3BmhE,EAAYzyE,KAAK8L,QAAQgkE,OAAO2C,UAoBtC,OAhBG9yE,KAAKm2B,IAAI1iB,GAAMzT,KAAKm2B,IAAIziB,KACgB,IAAvCrT,KAAK8L,QAAQgkE,OAAOsD,gBACmB,eAAvCpzE,KAAK8L,QAAQgkE,OAAOsD,iBACiB,aAAvCpzE,KAAK8L,QAAQgkE,OAAOsD,gBAEpB1E,EAAK1uE,KAAK2gB,KAAKrP,EACf2B,EAAKjT,KAAKqxB,GAAG/f,EACbm9D,EAAKzuE,KAAK2gB,KAAKrT,EAAImlE,EAAYr/D,EAC/BJ,EAAKhT,KAAKqxB,GAAG/jB,EAAImlE,EAAYr/D,IAE7Bs7D,EAAK1uE,KAAK2gB,KAAKrP,EAAImhE,EAAYp/D,EAC/BJ,EAAKjT,KAAKqxB,GAAG/f,EAAImhE,EAAYp/D,EAC7Bo7D,EAAKzuE,KAAK2gB,KAAKrT,EACf0F,EAAKhT,KAAKqxB,GAAG/jB,GAGR,CACL,CAAEA,EAAGmhE,EAAIn9D,EAAGo9D,GACZ,CAAEphE,EAAG0F,EAAI1B,EAAG2B,GAEhB,GAEA,CAAAxM,IAAA,aAAAnD,MACO,WACL,OAAOtD,KAAK+wE,oBACd,GAEA,CAAAtqE,IAAA,sBAAAnD,MACU,SACRiqE,EACAl8D,GAEA,OAAOrR,KAAKoyE,0BAA0B7E,EAAUl8D,EAClD,GAEA,CAAA5K,IAAA,qBAAAnD,MACU,SACRmrE,EACAC,EACA17D,EACAC,EACA07D,EACAC,GACwD,IAAAyE,EAAAnkD,GAAAjuB,UAAA0D,eAAA1C,IAAAhB,UAAA,GAAAA,UAAzB,GAAAjB,KAAK+wE,qBAAoB,GAAvD+B,EAAIO,EAAA,GAAEN,EAAIM,EAAA,GAGX,OAAOrzE,KAAKszE,0BAA0B7E,EAAIC,EAAI17D,EAAIC,EAAI07D,EAAIC,EAAIkE,EAAMC,EACtE,GAEA,CAAAtsE,IAAA,WAAAnD,MACO,SACL+T,GACwD,IAAAk8D,EAAArkD,GAAAjuB,UAAA0D,eAAA1C,IAAAhB,UAAA,GAAAA,UAAzB,GAAAjB,KAAK+wE,qBAAoB,GAAvD+B,EAAIS,EAAA,GAAER,EAAIQ,EAAA,GAELjkD,EAAIjY,EACJ27D,EAAwC,CAC5CrzE,KAAKkuE,IAAI,EAAIv+C,EAAG,GAChB,EAAIA,EAAI3vB,KAAKkuE,IAAI,EAAIv+C,EAAG,GACxB,EAAI3vB,KAAKkuE,IAAIv+C,EAAG,IAAM,EAAIA,GAC1B3vB,KAAKkuE,IAAIv+C,EAAG,IAad,MAAO,CAAEhiB,EAVP0lE,EAAI,GAAKhzE,KAAK+rE,UAAUz+D,EACxB0lE,EAAI,GAAKF,EAAKxlE,EACd0lE,EAAI,GAAKD,EAAKzlE,EACd0lE,EAAI,GAAKhzE,KAAKgsE,QAAQ1+D,EAOTgE,EALb0hE,EAAI,GAAKhzE,KAAK+rE,UAAUz6D,EACxB0hE,EAAI,GAAKF,EAAKxhE,EACd0hE,EAAI,GAAKD,EAAKzhE,EACd0hE,EAAI,GAAKhzE,KAAKgsE,QAAQ16D,EAG1B,KAAC2hE,CAAA,EA1HkCJ,mXCAxBW,IAAAA,YAAa1C,GAAA5zB,GAAAs2B,EAAA1C,GAAA,IAAA/mC,EAAA4zB,GAAA6V,GAQxB,SAAAA,EAAmB1nE,EAAsB6rC,EAAagkB,GAAkB,OAAA/3C,QAAA4vD,GAAAzpC,EAAAjpC,KAAAd,KAChE8L,EAAS6rC,EAAMgkB,EACvB,CAuEC,OArED5tC,GAAAylD,EAAA,CAAA,CAAA/sE,IAAA,QAAAnD,MACU,SACR+N,EACAiN,GAMAjN,EAAIG,YACJH,EAAIW,OAAOhS,KAAK+rE,UAAUz+D,EAAGtN,KAAK+rE,UAAUz6D,GAC5CD,EAAIY,OAAOjS,KAAKgsE,QAAQ1+D,EAAGtN,KAAKgsE,QAAQ16D,GAExCtR,KAAKo9D,aAAa/rD,EAAKiN,GACvBjN,EAAI4rD,SACJj9D,KAAKs9D,cAAcjsD,EAAKiN,EAC1B,GAEA,CAAA7X,IAAA,aAAAnD,MACO,WAEP,GAEA,CAAAmD,IAAA,WAAAnD,MACO,SAAS+T,GACd,MAAO,CACL/J,GAAI,EAAI+J,GAAYrX,KAAK+rE,UAAUz+D,EAAI+J,EAAWrX,KAAKgsE,QAAQ1+D,EAC/DgE,GAAI,EAAI+F,GAAYrX,KAAK+rE,UAAUz6D,EAAI+F,EAAWrX,KAAKgsE,QAAQ16D,EAEnE,GAEA,CAAA7K,IAAA,sBAAAnD,MACU,SACRiqE,EACAl8D,GAEA,IAAI69D,EAAQlvE,KAAKqxB,GACb89C,EAAQnvE,KAAK2gB,KACb4sD,EAASjmE,KAAOtH,KAAK2gB,KAAKrZ,KAC5B4nE,EAAQlvE,KAAK2gB,KACbwuD,EAAQnvE,KAAKqxB,IAGf,IAAM0K,EAAQp8B,KAAK67B,MAAM0zC,EAAM59D,EAAI69D,EAAM79D,EAAG49D,EAAM5hE,EAAI6hE,EAAM7hE,GACtD8F,EAAK87D,EAAM5hE,EAAI6hE,EAAM7hE,EACrB+F,EAAK67D,EAAM59D,EAAI69D,EAAM79D,EACrBmiE,EAAoB9zE,KAAK6T,KAAKJ,EAAKA,EAAKC,EAAKA,GAE7CqgE,GACHD,EAFkBlG,EAAS1c,iBAAiBx/C,EAAK0qB,IAEb03C,EAEvC,MAAO,CACLnmE,GAAI,EAAIomE,GAAiBvE,EAAM7hE,EAAIomE,EAAgBxE,EAAM5hE,EACzDgE,GAAI,EAAIoiE,GAAiBvE,EAAM79D,EAAIoiE,EAAgBxE,EAAM59D,EACzDge,EAAG,EAEP,GAEA,CAAA7oB,IAAA,qBAAAnD,MACU,SACRmrE,EACAC,EACA17D,EACAC,EACA07D,EACAC,GAGA,OAAO5uE,KAAKmxE,mBAAmB1C,EAAIC,EAAI17D,EAAIC,EAAI07D,EAAIC,EACrD,KAAC4E,CAAA,EAjF+B/H,ICS5BkI,GAAI,WAQR,SAAAA,EAAY7nE,EAAS6rC,EAAMisB,EAAWE,EAAe/nB,GACnD,GADmEn4B,QAAA+vD,QACtD1xE,IAAT01C,EACF,MAAM,IAAIzO,MAAM,oBAMlBlpC,KAAK8L,QAAUi4D,GAAaD,GAC5B9jE,KAAK8jE,cAAgBA,EACrB9jE,KAAK+7C,eAAiBA,EACtB/7C,KAAK23C,KAAOA,EACZ33C,KAAK4jE,UAAYA,EAGjB5jE,KAAKsH,QAAKrF,EACVjC,KAAK+oE,YAAS9mE,EACdjC,KAAK8oE,UAAO7mE,EACZjC,KAAK4zD,UAAW,EAChB5zD,KAAKy0C,OAAQ,EACbz0C,KAAKu2D,YAAa,EAElBv2D,KAAK4zE,UAAY5zE,KAAK8L,QAAQ4pC,MAC9B11C,KAAKgkE,aAAehkE,KAAK8L,QAAQioD,KAAKz8C,KAEtCtX,KAAK2gB,UAAO1e,EACZjC,KAAKqxB,QAAKpvB,EAEVjC,KAAK6zE,cAAW5xE,EAEhBjC,KAAK8zE,WAAY,EAEjB9zE,KAAK27D,YAAc,IAAI7F,GACrB91D,KAAK23C,KACL33C,KAAK8L,SACL,GAEF9L,KAAKk2D,WAAWpqD,EAClB,CAwRC,OAtRDiiB,GAAA4lD,EAAA,CAAA,CAAAltE,IAAA,aAAAnD,MAMA,SAAWwI,GACT,GAAKA,EAAL,CAKA,IAAIioE,OAC0B,IAApBjoE,EAAQ+4D,SACd7kE,KAAK8L,QAAQ+4D,UAAY/4D,EAAQ+4D,cACR,IAAnB/4D,EAAQ84D,SACb5kE,KAAK8L,QAAQ84D,SAAU,MAAY94D,EAAQ84D,SAAU,SAC/B,IAAjB94D,EAAQ6U,MACd3gB,KAAK8L,QAAQ6U,OAAS7U,EAAQ6U,WACT,IAAf7U,EAAQulB,IAAsBrxB,KAAK8L,QAAQulB,KAAOvlB,EAAQulB,GAEpEsiD,EAAKpP,aAAavkE,KAAK8L,QAASA,GAAS,EAAM9L,KAAK8jE,oBAEjC7hE,IAAf6J,EAAQxE,KACVtH,KAAKsH,GAAKwE,EAAQxE,SAECrF,IAAjB6J,EAAQ6U,OACV3gB,KAAK+oE,OAASj9D,EAAQ6U,WAEL1e,IAAf6J,EAAQulB,KACVrxB,KAAK8oE,KAAOh9D,EAAQulB,SAEApvB,IAAlB6J,EAAQqoC,QACVn0C,KAAKm0C,MAAQroC,EAAQqoC,YAEDlyC,IAAlB6J,EAAQxI,QACVwI,EAAQxI,MAAQghE,GAAWx4D,EAAQxI,QAGrC,IAAM4sD,EAAO,CAACpkD,EAAS9L,KAAK8L,QAAS9L,KAAK+7C,gBAe1C,OAdA/7C,KAAKy3D,QAAUzH,GAAS,OAAQE,GAGhClwD,KAAKykE,kBAAkB34D,GAGvBioE,EAAgB/zE,KAAKg0E,kBAAoBD,EAGzC/zE,KAAKi0E,wBAGLj0E,KAAK8xE,UAEEiC,CA7CP,CA8CF,GAEA,CAAAttE,IAAA,sBAAAnD,MAmOA,WACE,IAAM4wE,GACuB,IAA3Bl0E,KAAK8L,QAAQsjC,OAAO/d,KACe,IAAnCrxB,KAAK8L,QAAQsjC,OAAO/d,GAAG8d,QACnBglC,GACyB,IAA7Bn0E,KAAK8L,QAAQsjC,OAAOzuB,OACiB,IAArC3gB,KAAK8L,QAAQsjC,OAAOzuB,KAAKwuB,QACrBilC,GAC2B,IAA/Bp0E,KAAK8L,QAAQsjC,OAAOsc,SACmB,IAAvC1rD,KAAK8L,QAAQsjC,OAAOsc,OAAOvc,QACvB2+B,EAAgB9tE,KAAK8L,QAAQ6hC,MAAMjE,QACnCprB,EAAS,CACb41D,QAASA,EACT1E,aAAcxvE,KAAK8L,QAAQsjC,OAAO/d,GAAGg+C,YACrCI,YAAazvE,KAAK8L,QAAQsjC,OAAO/d,GAAG/Y,KACpC+7D,WAAYr0E,KAAK8L,QAAQsjC,OAAO/d,GAAG/W,IACnCg6D,kBAAmBt0E,KAAK8L,QAAQsjC,OAAO/d,GAAGo5C,WAC1C8J,mBAAoBv0E,KAAK8L,QAAQsjC,OAAO/d,GAAGq5C,YAC3C0J,YAAaA,EACb1E,iBAAkB1vE,KAAK8L,QAAQsjC,OAAOsc,OAAO2jB,YAC7CM,gBAAiB3vE,KAAK8L,QAAQsjC,OAAOsc,OAAOpzC,KAC5Ck8D,eAAgBx0E,KAAK8L,QAAQsjC,OAAOsc,OAAOpxC,IAC3Cm6D,sBAAuBz0E,KAAK8L,QAAQsjC,OAAOsc,OAAO+e,WAClDiK,uBAAwB10E,KAAK8L,QAAQsjC,OAAOsc,OAAOgf,YACnDyJ,UAAWA,EACX7E,eAAgBtvE,KAAK8L,QAAQsjC,OAAOzuB,KAAK0uD,YACzCE,cAAevvE,KAAK8L,QAAQsjC,OAAOzuB,KAAKrI,KACxCq8D,aAAc30E,KAAK8L,QAAQsjC,OAAOzuB,KAAKrG,IACvCs6D,oBAAqB50E,KAAK8L,QAAQsjC,OAAOzuB,KAAK8pD,WAC9CoK,qBAAsB70E,KAAK8L,QAAQsjC,OAAOzuB,KAAK+pD,YAC/C+C,mBAAoBztE,KAAK8L,QAAQ2hE,mBACjC9/B,MAAOmgC,OAAgB7rE,EAAYjC,KAAK8L,QAAQ6hC,MAAMA,MACtDmgC,cAAeA,EACfnT,QAAS36D,KAAK8L,QAAQ6hC,MAAMgtB,QAC5BiK,OAAQ5kE,KAAK8L,QAAQ84D,OACrBjgE,OAAQ3E,KAAK8L,QAAQnH,OACrBu3D,OAAQl8D,KAAK8L,QAAQowD,OAAO/sB,QAC5BgtB,YAAan8D,KAAK8L,QAAQowD,OAAOvuB,MACjC0uB,WAAYr8D,KAAK8L,QAAQowD,OAAO5kD,KAChCilD,QAASv8D,KAAK8L,QAAQowD,OAAO5uD,EAC7BmvD,QAASz8D,KAAK8L,QAAQowD,OAAO5qD,EAC7BsrD,OAAQ58D,KAAK8L,QAAQ8wD,OACrBlnB,MAAO11C,KAAK8L,QAAQ4pC,MACpBpB,WAAYt0C,KAAK8L,QAAQwoC,WAAWnF,QACpCshC,gBAAiBzwE,KAAK8L,QAAQwoC,WAAW3G,MACzC+iC,eAAgB1wE,KAAK8L,QAAQwoC,WAAWh9B,KACxCs5D,iBAAkB5wE,KAAK8L,QAAQwoC,WAAWsoB,QAE5C,GAAI58D,KAAK4zD,UAAY5zD,KAAKy0C,MACxB,IAAqB,IAAjBz0C,KAAKy3D,SACP,GAAIz3D,KAAK4zD,SAAU,CACjB,IAAMkhB,EAAgB90E,KAAK8L,QAAQggE,eACN,mBAAlBgJ,EACTx2D,EAAOo3B,MAAQo/B,EAAcx2D,EAAOo3B,OACF,iBAAlBo/B,IAChBx2D,EAAOo3B,OAASo/B,GAElBx2D,EAAOo3B,MAAQ/1C,KAAK+N,IAAI4Q,EAAOo3B,MAAO,GAAM11C,KAAK23C,KAAKqhB,KAAKx8B,OAC3Dle,EAAOqvB,MAAQ3tC,KAAK8L,QAAQ6hC,MAAM6G,UAClCl2B,EAAO49C,OAASl8D,KAAK8L,QAAQowD,OAAO/sB,OACtC,MAAO,GAAInvC,KAAKy0C,MAAO,CACrB,IAAMo3B,EAAa7rE,KAAK8L,QAAQ+/D,WACN,mBAAfA,EACTvtD,EAAOo3B,MAAQm2B,EAAWvtD,EAAOo3B,OACF,iBAAfm2B,IAChBvtD,EAAOo3B,OAASm2B,GAElBvtD,EAAOo3B,MAAQ/1C,KAAK+N,IAAI4Q,EAAOo3B,MAAO,GAAM11C,KAAK23C,KAAKqhB,KAAKx8B,OAC3Dle,EAAOqvB,MAAQ3tC,KAAK8L,QAAQ6hC,MAAM8G,MAClCn2B,EAAO49C,OAASl8D,KAAK8L,QAAQowD,OAAO/sB,OACtC,MACiC,mBAAjBnvC,KAAKy3D,UACrBz3D,KAAKy3D,QAAQn5C,EAAQte,KAAK8L,QAAQxE,GAAItH,KAAK4zD,SAAU5zD,KAAKy0C,YACrCxyC,IAAjBqc,EAAOqvB,QACTrvB,EAAOwvD,eAAgB,IAEH,IAAlBxvD,EAAO49C,SAEP59C,EAAO69C,cAAgBn8D,KAAK8L,QAAQowD,OAAOvuB,OAC3CrvB,EAAO+9C,aAAer8D,KAAK8L,QAAQowD,OAAO5kD,MAC1CgH,EAAOi+C,UAAYv8D,KAAK8L,QAAQowD,OAAO5uD,GACvCgR,EAAOm+C,UAAYz8D,KAAK8L,QAAQowD,OAAO5qD,IAEvCgN,EAAO49C,QAAS,UAKtB59C,EAAO49C,OAASl8D,KAAK8L,QAAQowD,OAAO/sB,QACpC7wB,EAAOo3B,MAAQ/1C,KAAK+N,IAAI4Q,EAAOo3B,MAAO,GAAM11C,KAAK23C,KAAKqhB,KAAKx8B,OAE7D,OAAOle,CACT,GAEA,CAAA7X,IAAA,oBAAAnD,MAKA,SAAkBwI,GAChB,IAAMokD,EAAO,CACXpkD,EACA9L,KAAK8L,QACL9L,KAAK8jE,cACL9jE,KAAK+7C,gBAGP/7C,KAAK27D,YAAY3iC,OAAOh5B,KAAK8L,QAASokD,QAEJjuD,IAA9BjC,KAAK27D,YAAY1F,WACnBj2D,KAAKgkE,aAAehkE,KAAK27D,YAAY1F,SAEzC,GAEA,CAAAxvD,IAAA,iBAAAnD,MAKA,WACE,IAAMwsE,EAAS9vE,KAAK8L,QAAQgkE,OACxB7H,GAAc,EACd8M,GAAe,EAsDnB,YArDsB9yE,IAAlBjC,KAAK6zE,YAEJ7zE,KAAK6zE,oBAAoBrC,KACL,IAAnB1B,EAAO3gC,SACS,YAAhB2gC,EAAOx3D,MACRtY,KAAK6zE,oBAAoBZ,KACL,IAAnBnD,EAAO3gC,SACS,gBAAhB2gC,EAAOx3D,MACRtY,KAAK6zE,oBAAoBvB,KACL,IAAnBxC,EAAO3gC,SACS,YAAhB2gC,EAAOx3D,MACS,gBAAhBw3D,EAAOx3D,MACRtY,KAAK6zE,oBAAoBL,KAAwC,IAAxB1D,EAAOx3D,KAAK62B,WAEtD4lC,GAAe,IAEI,IAAjBA,IACF9M,EAAcjoE,KAAKg1E,aAGF,IAAjBD,GACqB,IAAnBjF,EAAO3gC,QACW,YAAhB2gC,EAAOx3D,MACT2vD,GAAc,EACdjoE,KAAK6zE,SAAW,IAAIrC,GAClBxxE,KAAK8L,QACL9L,KAAK23C,KACL33C,KAAK27D,cAEkB,gBAAhBmU,EAAOx3D,KAChBtY,KAAK6zE,SAAW,IAAIZ,GAClBjzE,KAAK8L,QACL9L,KAAK23C,KACL33C,KAAK27D,aAGP37D,KAAK6zE,SAAW,IAAIvB,GAClBtyE,KAAK8L,QACL9L,KAAK23C,KACL33C,KAAK27D,aAIT37D,KAAK6zE,SAAW,IAAIL,GAClBxzE,KAAK8L,QACL9L,KAAK23C,KACL33C,KAAK27D,aAKT37D,KAAK6zE,SAAS3d,WAAWl2D,KAAK8L,SAEzBm8D,CACT,GAEA,CAAAxhE,IAAA,UAAAnD,MAGA,WACEtD,KAAKi1E,aAELj1E,KAAK2gB,KAAO3gB,KAAK23C,KAAK/I,MAAM5uC,KAAK+oE,cAAW9mE,EAC5CjC,KAAKqxB,GAAKrxB,KAAK23C,KAAK/I,MAAM5uC,KAAK8oE,YAAS7mE,EACxCjC,KAAK8zE,eAA0B7xE,IAAdjC,KAAK2gB,WAAkC1e,IAAZjC,KAAKqxB,IAE1B,IAAnBrxB,KAAK8zE,WACP9zE,KAAK2gB,KAAKu0D,WAAWl1E,MACrBA,KAAKqxB,GAAG6jD,WAAWl1E,QAEfA,KAAK2gB,MACP3gB,KAAK2gB,KAAKw0D,WAAWn1E,MAEnBA,KAAKqxB,IACPrxB,KAAKqxB,GAAG8jD,WAAWn1E,OAIvBA,KAAK6zE,SAAS/B,SAChB,GAEA,CAAArrE,IAAA,aAAAnD,MAGA,WACMtD,KAAK2gB,OACP3gB,KAAK2gB,KAAKw0D,WAAWn1E,MACrBA,KAAK2gB,UAAO1e,GAEVjC,KAAKqxB,KACPrxB,KAAKqxB,GAAG8jD,WAAWn1E,MACnBA,KAAKqxB,QAAKpvB,GAGZjC,KAAK8zE,WAAY,CACnB,GAEA,CAAArtE,IAAA,WAAAnD,MAMA,WACE,OAAOtD,KAAKm0C,KACd,GAEA,CAAA1tC,IAAA,aAAAnD,MAKA,WACE,OAAOtD,KAAK4zD,QACd,GAEA,CAAAntD,IAAA,WAAAnD,MAKA,WACE,OAAOtD,KAAK8L,QAAQxI,KACtB,GAEA,CAAAmD,IAAA,gBAAAnD,MAQA,SAAcqK,EAAKD,EAAKy3D,GACtB,QAA2BljE,IAAvBjC,KAAK8L,QAAQxI,MAAqB,CACpC,IAAMk5B,EAAQx8B,KAAK8L,QAAQmtD,QAAQmM,sBACjCz3D,EACAD,EACAy3D,EACAnlE,KAAK8L,QAAQxI,OAET8xE,EAAYp1E,KAAK8L,QAAQmtD,QAAQvrD,IAAM1N,KAAK8L,QAAQmtD,QAAQtrD,IAClE,IAA2C,IAAvC3N,KAAK8L,QAAQmtD,QAAQvmB,MAAMvD,QAAkB,CAC/C,IAAMm2B,EACJtlE,KAAK8L,QAAQmtD,QAAQvmB,MAAMhlC,IAAM1N,KAAK8L,QAAQmtD,QAAQvmB,MAAM/kC,IAC9D3N,KAAK8L,QAAQioD,KAAKz8C,KAChBtX,KAAK8L,QAAQmtD,QAAQvmB,MAAM/kC,IAAM6uB,EAAQ8oC,CAC7C,CACAtlE,KAAK8L,QAAQ4pC,MAAQ11C,KAAK8L,QAAQmtD,QAAQtrD,IAAM6uB,EAAQ44C,CAC1D,MACEp1E,KAAK8L,QAAQ4pC,MAAQ11C,KAAK4zE,UAC1B5zE,KAAK8L,QAAQioD,KAAKz8C,KAAOtX,KAAKgkE,aAGhChkE,KAAKi0E,wBACLj0E,KAAKykE,mBACP,GAEA,CAAAh+D,IAAA,wBAAAnD,MAIA,WACyC,mBAA5BtD,KAAK8L,QAAQ+/D,WACtB7rE,KAAK6zE,SAAShI,WAAa7rE,KAAK8L,QAAQ+/D,WAAW7rE,KAAK8L,QAAQ4pC,OAEhE11C,KAAK6zE,SAAShI,WAAa7rE,KAAK8L,QAAQ+/D,WAAa7rE,KAAK8L,QAAQ4pC,MAEzB,mBAAhC11C,KAAK8L,QAAQggE,eACtB9rE,KAAK6zE,SAAS/H,eAAiB9rE,KAAK8L,QAAQggE,eAC1C9rE,KAAK8L,QAAQ4pC,OAGf11C,KAAK6zE,SAAS/H,eACZ9rE,KAAK8L,QAAQggE,eAAiB9rE,KAAK8L,QAAQ4pC,KAEjD,GAEA,CAAAjvC,IAAA,OAAAnD,MAOA,SAAK+N,GACH,IAAMiN,EAASte,KAAK6zD,sBACpB,IAAIv1C,EAAOsmD,OAAX,CAKA,IAAMuH,EAAUnsE,KAAK6zE,SAASzH,aAG9BpsE,KAAK6zE,SAASwB,SAAShkE,EAAKiN,EAAQte,KAAK4zD,SAAU5zD,KAAKy0C,MAAO03B,GAC/DnsE,KAAKs1E,UAAUjkE,EAAK86D,EAPpB,CAQF,GAEA,CAAA1lE,IAAA,aAAAnD,MAOA,SAAW+N,GACT,IAAMiN,EAASte,KAAK6zD,sBACpB,IAAIv1C,EAAOsmD,OAAX,CAKA,IAAMuH,EAAUnsE,KAAK6zE,SAASzH,aACxBjC,EAAY,CAAA,EAGlBnqE,KAAK6zE,SAAS9H,UAAY/rE,KAAK6zE,SAASlzD,KACxC3gB,KAAK6zE,SAAS7H,QAAUhsE,KAAK6zE,SAASxiD,GAGlC/S,EAAO61D,YACThK,EAAUxpD,KAAO3gB,KAAK6zE,SAAS0B,aAC7BlkE,EACA,OACA86D,EACAnsE,KAAK4zD,SACL5zD,KAAKy0C,MACLn2B,IAEgC,IAA9BA,EAAOmvD,qBACTztE,KAAK6zE,SAAS9H,UAAY5B,EAAUxpD,KAAK4vD,MACvCjyD,EAAOq2D,eACTxK,EAAUxpD,KAAKgyB,MAAQ3yC,KAAK4jE,UAAUkB,KAAKxmD,EAAOq2D,eAEhDr2D,EAAOs2D,sBACTzK,EAAUxpD,KAAK8pD,WAAansD,EAAOs2D,qBAEjCt2D,EAAOu2D,uBACT1K,EAAUxpD,KAAK+pD,YAAcpsD,EAAOu2D,uBAGpCv2D,EAAO41D,UACT/J,EAAU94C,GAAKrxB,KAAK6zE,SAAS0B,aAC3BlkE,EACA,KACA86D,EACAnsE,KAAK4zD,SACL5zD,KAAKy0C,MACLn2B,IAEgC,IAA9BA,EAAOmvD,qBACTztE,KAAK6zE,SAAS7H,QAAU7B,EAAU94C,GAAGk/C,MACnCjyD,EAAO+1D,aACTlK,EAAU94C,GAAGshB,MAAQ3yC,KAAK4jE,UAAUkB,KAAKxmD,EAAO+1D,aAE9C/1D,EAAOg2D,oBACTnK,EAAU94C,GAAGo5C,WAAansD,EAAOg2D,mBAE/Bh2D,EAAOi2D,qBACTpK,EAAU94C,GAAGq5C,YAAcpsD,EAAOi2D,qBAKlCj2D,EAAO81D,cACTjK,EAAUze,OAAS1rD,KAAK6zE,SAAS0B,aAC/BlkE,EACA,SACA86D,EACAnsE,KAAK4zD,SACL5zD,KAAKy0C,MACLn2B,GAGEA,EAAOk2D,iBACTrK,EAAUze,OAAO/Y,MAAQ3yC,KAAK4jE,UAAUkB,KAAKxmD,EAAOk2D,iBAElDl2D,EAAOm2D,wBACTtK,EAAUze,OAAO+e,WAAansD,EAAOm2D,uBAEnCn2D,EAAOo2D,yBACTvK,EAAUze,OAAOgf,YAAcpsD,EAAOo2D,yBAItCp2D,EAAO61D,WACTn0E,KAAK6zE,SAAS2B,cACZnkE,EACAiN,EACAte,KAAK4zD,SACL5zD,KAAKy0C,MACL01B,EAAUxpD,MAGVrC,EAAO81D,aACTp0E,KAAK6zE,SAAS2B,cACZnkE,EACAiN,EACAte,KAAK4zD,SACL5zD,KAAKy0C,MACL01B,EAAUze,QAGVptC,EAAO41D,SACTl0E,KAAK6zE,SAAS2B,cACZnkE,EACAiN,EACAte,KAAK4zD,SACL5zD,KAAKy0C,MACL01B,EAAU94C,GApGd,CAuGF,GAEA,CAAA5qB,IAAA,YAAAnD,MAKA,SAAU+N,EAAK86D,GACb,QAA2BlqE,IAAvBjC,KAAK8L,QAAQ4mC,MAAqB,CAEpC,IAOI3zB,EAPEmwD,EAAQlvE,KAAK2gB,KACbwuD,EAAQnvE,KAAKqxB,GAOnB,GALIrxB,KAAK27D,YAAYN,eAAer7D,KAAK4zD,SAAU5zD,KAAKy0C,QACtDz0C,KAAK27D,YAAY+B,YAAYrsD,EAAKrR,KAAK4zD,SAAU5zD,KAAKy0C,OAIpDy6B,EAAM5nE,IAAM6nE,EAAM7nE,GAAI,CACxBtH,KAAK27D,YAAY3F,aAAc,EAC/Bj3C,EAAQ/e,KAAK6zE,SAAS3D,SAAS,GAAK/D,GACpC96D,EAAI0rD,OAEJ,IAAMvM,EAAgBxwD,KAAKy1E,aAAapkE,GACb,GAAvBm/C,EAAcz0B,QAChB1qB,EAAIk5D,UAAU/Z,EAAcljD,EAAGkjD,EAAcl/C,GAC7CD,EAAIm5D,OAAOha,EAAcz0B,QAI3B/7B,KAAK27D,YAAYjoD,KAAKrC,EAAK0N,EAAMzR,EAAGyR,EAAMzN,EAAGtR,KAAK4zD,SAAU5zD,KAAKy0C,OAWjEpjC,EAAI8rD,SACN,KAAO,CAELn9D,KAAK27D,YAAY3F,aAAc,EAG/B,IAAM5f,EAAcwa,GAClBv/C,EACArR,KAAK8L,QAAQwhE,cAAcvxC,MAC3B/7B,KAAK8L,QAAQwhE,cAAch2D,KAC3B43D,GAGFnwD,EAAQ/e,KAAK2tE,eACXv3B,EAAY9oC,EACZ8oC,EAAY9kC,EACZtR,KAAK8L,QAAQwhE,cAAch2D,KAC3BtX,KAAK8L,QAAQwhE,cAAcvxC,OAG7B/7B,KAAK27D,YAAYjoD,KAAKrC,EAAK0N,EAAMzR,EAAGyR,EAAMzN,EAAGtR,KAAK4zD,SAAU5zD,KAAKy0C,MACnE,CACF,CACF,GAEA,CAAAhuC,IAAA,kBAAAnD,MAOA,SAAgByb,GACd,IAAMi5C,EAAM,GAEZ,GAAIh4D,KAAK27D,YAAY4J,UAAW,CAC9B,IAAM/U,EAAgBxwD,KAAKy1E,eACvBllB,GAAYvwD,KAAK27D,YAAYnC,UAAWz6C,EAAOyxC,IACjDwH,EAAIlxD,KAAK,CAAE4uE,OAAQ11E,KAAKsH,GAAIm+D,QAAS,GAEzC,CAEA,IAAMx3D,EAAM,CACVyoC,KAAM33B,EAAMzR,EACZqpC,IAAK53B,EAAMzN,GAOb,OAJItR,KAAK21E,kBAAkB1nE,IACzB+pD,EAAIlxD,KAAK,CAAE4uE,OAAQ11E,KAAKsH,KAGnB0wD,CACT,GAEA,CAAAvxD,IAAA,oBAAAnD,MAMA,SAAkB2K,GAChB,GAAIjO,KAAK8zE,UAAW,CAClB,IACM8B,EAAQ51E,KAAK2gB,KAAKrT,EAClBuoE,EAAQ71E,KAAK2gB,KAAKrP,EAClBwkE,EAAM91E,KAAKqxB,GAAG/jB,EACdyoE,EAAM/1E,KAAKqxB,GAAG/f,EACd0kE,EAAO/nE,EAAIyoC,KACXu/B,EAAOhoE,EAAI0oC,IAWjB,OATa32C,KAAK6zE,SAASqC,kBACzBN,EACAC,EACAC,EACAC,EACAC,EACAC,GAdc,EAkBlB,CACE,OAAO,CAEX,GAEA,CAAAxvE,IAAA,eAAAnD,MAOA,SAAa+N,GACX,IAAM86D,EAAUnsE,KAAK6zE,SAASzH,aACxBrtD,EAAQ/e,KAAK6zE,SAAS3D,SAAS,GAAK/D,QAE9BlqE,IAARoP,GACFrR,KAAK27D,YAAYvC,mBACf/nD,EACArR,KAAK4zD,SACL5zD,KAAKy0C,MACL11B,EAAMzR,EACNyR,EAAMzN,GAIV,IAAM0mD,EAAM,CACV1qD,EAAGyR,EAAMzR,EACTgE,EAAGtR,KAAK27D,YAAYrkD,KAAK6+C,MACzBp6B,MAAO,GAGT,IAAK/7B,KAAK27D,YAAY4J,UACpB,OAAOvN,EAGT,GAAgC,eAA5Bh4D,KAAK8L,QAAQioD,KAAK+F,MACpB,OAAO9B,EAGT,IAAM3kD,EAAKrT,KAAK2gB,KAAKrP,EAAItR,KAAKqxB,GAAG/f,EAC3B8B,EAAKpT,KAAK2gB,KAAKrT,EAAItN,KAAKqxB,GAAG/jB,EAC7ByuB,EAAQp8B,KAAK67B,MAAMnoB,EAAID,GAQ3B,OALK2oB,GAAS,GAAK3oB,EAAK,GAAO2oB,EAAQ,GAAK3oB,EAAK,KAC/C2oB,GAASp8B,KAAK+R,IAEhBsmD,EAAIj8B,MAAQA,EAELi8B,CACT,GAEA,CAAAvxD,IAAA,iBAAAnD,MAUA,SAAegK,EAAGgE,EAAGqD,EAAQonB,GAC3B,MAAO,CACLzuB,EAAGA,EAAIqH,EAAShV,KAAK0U,IAAI0nB,GACzBzqB,EAAGA,EAAIqD,EAAShV,KAAK2U,IAAIynB,GAE7B,GAEA,CAAAt1B,IAAA,SAAAnD,MAGA,WACEtD,KAAK4zD,UAAW,CAClB,GAEA,CAAAntD,IAAA,WAAAnD,MAGA,WACEtD,KAAK4zD,UAAW,CAClB,GAEA,CAAAntD,IAAA,UAAAnD,MAKA,WACE,OAAOtD,KAAK6zE,SAASmB,SACvB,GAEA,CAAAvuE,IAAA,SAAAnD,MAGA,WACEtD,KAAKg1E,UACLh1E,KAAKi1E,oBACEj1E,KAAK23C,KAAK1I,MAAMjvC,KAAKsH,GAC9B,GAEA,CAAAb,IAAA,iBAAAnD,MAKA,WACE,YACmCrB,IAAjCjC,KAAK23C,KAAK/I,MAAM5uC,KAAK+oE,cACU9mE,IAA/BjC,KAAK23C,KAAK/I,MAAM5uC,KAAK8oE,KAEzB,IAAC,CAAA,CAAAriE,IAAA,eAAAnD,MAx3BD,SACEqiE,EACAC,GAIA,IAHAM,EAAajlE,UAAA0D,OAAA,QAAA1C,IAAAhB,UAAA,IAAAA,UAAA,GACb6iE,EAAa7iE,UAAA0D,OAAA,QAAA1C,IAAAhB,UAAA,GAAAA,UAAA,GAAG,CAAA,EAChBk1E,EAAel1E,UAAA0D,OAAA,QAAA1C,IAAAhB,UAAA,IAAAA,UAAA,GAiGf,GArEAm1E,GA1Be,CACb,iBACA,qBACA,KACA,OACA,SACA,aACA,qBACA,SACA,OACA,UACA,UACA,UACA,iBACA,oBACA,gBACA,KACA,QACA,QACA,QACA,OACA,SACA,mBAI0BzQ,EAAeC,EAAYM,QAIvBjkE,IAA9B2jE,EAAW4H,qBACwBvrE,IAAnC2jE,EAAW4H,eAAe7sD,OAEtB2mD,GAAgB1B,EAAW4H,eAAe7sD,MAC5CglD,EAAc6H,eAAe7sD,KAAOilD,EAAW4H,eAAe7sD,MAE9DglD,EAAc6H,eAAe7sD,UACW1e,IAAtC6hE,EAAc0J,eAAe7sD,KACzBmjD,EAAc0J,eAAe7sD,KAC7B,EACN0oB,QAAQjpC,MAAM,oDAKc6B,IAA9B2jE,EAAW4H,qBACsBvrE,IAAjC2jE,EAAW4H,eAAen8C,KAEtBi2C,GAAgB1B,EAAW4H,eAAen8C,IAC5Cs0C,EAAc6H,eAAen8C,GAAKu0C,EAAW4H,eAAen8C,IAE5Ds0C,EAAc6H,eAAen8C,QACSpvB,IAApC6hE,EAAc0J,eAAen8C,GACzByyC,EAAc0J,eAAen8C,GAC7B,EACNgY,QAAQjpC,MAAM,6CAKduwD,GAAaiV,EAAWlzB,OAC1BizB,EAAcjzB,MAAQkzB,EAAWlzB,MACvBie,GAAagV,EAAcjzB,SACrCizB,EAAcjzB,WAAQzwC,GAGxBmkE,GAAaT,EAAeC,EAAY,SAAU9B,GAClDsC,GAAaT,EAAeC,EAAY,SAAU9B,GAClDsC,GAAaT,EAAeC,EAAY,aAAc9B,QAE5B7hE,IAAtB2jE,EAAWhJ,QAA8C,OAAtBgJ,EAAWhJ,OAChD+I,EAAc/I,OAASgJ,EAAWhJ,QACP,IAAlBsJ,GAAgD,OAAtBN,EAAWhJ,SAC9C+I,EAAc/I,OAAS5uB,GAAc81B,EAAclH,cAI1B36D,IAAvB2jE,EAAW3M,SAAgD,OAAvB2M,EAAW3M,cAClBh3D,IAA3B2jE,EAAW3M,QAAQtrD,MACrBg4D,EAAc1M,QAAQtrD,IAAMi4D,EAAW3M,QAAQtrD,UAElB1L,IAA3B2jE,EAAW3M,QAAQvrD,MACrBi4D,EAAc1M,QAAQvrD,IAAMk4D,EAAW3M,QAAQvrD,KAEjD04D,GACET,EAAc1M,QACd2M,EAAW3M,QACX,QACA6K,EAAc7K,WAEW,IAAlBiN,GAAiD,OAAvBN,EAAW3M,UAC9C0M,EAAc1M,QAAUjrB,GAAc81B,EAAc7K,eAI5Bh3D,IAAtB2jE,EAAWx2B,QAA8C,OAAtBw2B,EAAWx2B,OAChD,GAAiC,iBAAtBw2B,EAAWx2B,OAAqB,CACzC,IAAMA,EAASw2B,EAAWx2B,OAAO/kC,cACjCs7D,EAAcv2B,OAAO/d,GAAG8d,SAAmC,GAAzBJ,GAAAK,GAAMtuC,KAANsuC,EAAe,MACjDu2B,EAAcv2B,OAAOsc,OAAOvc,SAAuC,GAA7BJ,GAAAK,GAAMtuC,KAANsuC,EAAe,UACrDu2B,EAAcv2B,OAAOzuB,KAAKwuB,SAAqC,GAA3BJ,GAAAK,GAAMtuC,KAANsuC,EAAe,OACpD,KAAM,IAAiC,WAA7BhiB,GAAOw4C,EAAWx2B,QAoB3B,MAAM,IAAIlG,MACR,gGACEmtC,GAAezQ,EAAWx2B,SArB9Bg3B,GACET,EAAcv2B,OACdw2B,EAAWx2B,OACX,KACA00B,EAAc10B,QAEhBg3B,GACET,EAAcv2B,OACdw2B,EAAWx2B,OACX,SACA00B,EAAc10B,QAEhBg3B,GACET,EAAcv2B,OACdw2B,EAAWx2B,OACX,OACA00B,EAAc10B,OAOlB,MAC2B,IAAlB82B,GAAgD,OAAtBN,EAAWx2B,SAC9Cu2B,EAAcv2B,OAASpB,GAAc81B,EAAc10B,SAIrD,QAAyBntC,IAArB2jE,EAAWj4B,OAA4C,OAArBi4B,EAAWj4B,MAAgB,CAC/D,IAAMsgC,EAAYqI,GAAS1Q,EAAWj4B,OAClC,CACEA,MAAOi4B,EAAWj4B,MAClB6G,UAAWoxB,EAAWj4B,MACtB8G,MAAOmxB,EAAWj4B,MAClBjE,SAAS,EACTixB,QAAS,GAEXiL,EAAWj4B,MACTugC,EAAUvI,EAAch4B,MAG9B,GAAIwoC,EACF5e,GAAW2W,EAASpK,EAAcn2B,OAAO,EAAOu4B,QAGhD,IAAK,IAAMr3D,KAAKq/D,EACV7rE,OAAOzB,UAAUH,eAAeK,KAAKotE,EAASr/D,WACzCq/D,EAAQr/D,GAKrB,GAAIynE,GAASpI,GACXA,EAAQvgC,MAAQugC,EAChBA,EAAQ15B,UAAY05B,EACpBA,EAAQz5B,MAAQy5B,EAChBA,EAAQxkC,SAAU,OACQznC,IAAtBgsE,EAAUtT,UACZuT,EAAQvT,QAAU,OAEf,CACL,IAAI4b,GAAgB,OACIt0E,IAApBgsE,EAAUtgC,QACZugC,EAAQvgC,MAAQsgC,EAAUtgC,MAC1B4oC,GAAgB,QAEUt0E,IAAxBgsE,EAAUz5B,YACZ05B,EAAQ15B,UAAYy5B,EAAUz5B,UAC9B+hC,GAAgB,QAEMt0E,IAApBgsE,EAAUx5B,QACZy5B,EAAQz5B,MAAQw5B,EAAUx5B,MAC1B8hC,GAAgB,QAEQt0E,IAAtBgsE,EAAUvkC,UACZwkC,EAAQxkC,QAAUukC,EAAUvkC,cAEJznC,IAAtBgsE,EAAUtT,UACZuT,EAAQvT,QAAUh7D,KAAKgO,IAAI,EAAGhO,KAAK+N,IAAI,EAAGugE,EAAUtT,YAGhC,IAAlB4b,EACFrI,EAAQxkC,SAAU,OAEMznC,IAApBisE,EAAQxkC,UACVwkC,EAAQxkC,QAAU,OAGxB,CACD,MAA4B,IAAlBw8B,GAA+C,OAArBN,EAAWj4B,QAC9Cg4B,EAAch4B,MAAQo2B,GAAaD,EAAcn2B,SAG7B,IAAlBu4B,GAA8C,OAApBN,EAAW7R,OACvC4R,EAAc5R,KAAOgQ,GAAaD,EAAc/P,OAG9C1xD,OAAOzB,UAAUH,eAAeK,KAAK8kE,EAAY,uBACnDv8B,QAAQC,KACN,qLAEFq8B,EAAc2H,cAAch2D,KAAOsuD,EAAW4Q,kBAElD,KAAC7C,CAAA,CAtUO,GCjBJ8C,GAAY,WAMhB,SAAAA,EAAY9+B,EAAMd,EAAQ8vB,GAAQ,IAAA73C,EAAA8Q,EAAA5/B,KAAA4jB,QAAA6yD,GAChCz2E,KAAK23C,KAAOA,EACZ33C,KAAK62C,OAASA,EACd72C,KAAK2mE,OAASA,EAGd3mE,KAAK23C,KAAKkvB,UAAU33B,WAAa+N,GAAAnuB,EAAI9uB,KAAC6a,QAAM/Z,KAAAguB,EAAM9uB,MAElDA,KAAK02E,eAAiB,CACpBlvC,IAAK,SAACjyB,EAAOof,GACXiL,EAAK4H,IAAI7S,EAAOw4B,MACjB,EACDn0B,OAAQ,SAACzjB,EAAOof,GACdiL,EAAK5G,OAAOrE,EAAOw4B,MACpB,EACDllB,OAAQ,SAAC1yB,EAAOof,GACdiL,EAAKqI,OAAOtT,EAAOw4B,MACrB,GAGFntD,KAAK8L,QAAU,GACf9L,KAAK+7C,eAAiB,CACpB3M,OAAQ,CACN/d,GAAI,CAAE8d,SAAS,EAAOkgC,YAAa,EAAG/2D,KAAM,SAC5CozC,OAAQ,CAAEvc,SAAS,EAAOkgC,YAAa,EAAG/2D,KAAM,SAChDqI,KAAM,CAAEwuB,SAAS,EAAOkgC,YAAa,EAAG/2D,KAAM,UAEhDk1D,eAAgB,CACd7sD,KAAM,EACN0Q,GAAI,GAENo8C,oBAAoB,EACpB9/B,MAAO,CACLA,MAAO,UACP6G,UAAW,UACXC,MAAO,UACP/K,QAAS,OACTixB,QAAS,GAEXiC,QAAQ,EACR7I,KAAM,CACJpmB,MAAO,UACPr2B,KAAM,GACNyjD,KAAM,QACNzmB,WAAY,OACZ6lB,YAAa,EACbF,YAAa,UACbH,MAAO,aACP3F,OAAO,EACPuC,QAAS,EACTnE,KAAM,CACJnB,IAAK,QAEP4V,SAAU,CACR5V,IAAK,eAEPoB,KAAM,CACJpB,IAAK,UAEPqB,KAAM,CACJrB,IAAK,GACL95C,KAAM,GACNyjD,KAAM,cACNrE,QAAS,IAGbkO,QAAQ,EACRiH,WAAY,IACZn5B,WAAOzwC,EACP+4D,oBAAoB,EACpBr2D,YAAQ1C,EACR4iE,SAAS,EACT5L,QAAS,CACPtrD,IAAK,EACLD,IAAK,GACLglC,MAAO,CACLvD,SAAS,EACTxhC,IAAK,GACLD,IAAK,GACLyrD,WAAY,GACZD,cAAe,GAEjBkM,sBAAuB,SAAUz3D,EAAKD,EAAKy3D,EAAO7hE,GAChD,GAAIoK,IAAQC,EACV,MAAO,GAEP,IAAM6uB,EAAQ,GAAK9uB,EAAMC,GACzB,OAAOhO,KAAK+N,IAAI,GAAIpK,EAAQqK,GAAO6uB,EAEvC,GAEFsvC,eAAgB,IAChBwB,cAAe,CACbh2D,KAAM,GACNykB,MAAOp8B,KAAK+R,GAAK,EACjB48D,qBAAqB,GAEvBpS,OAAQ,CACN/sB,SAAS,EACTxB,MAAO,kBACPr2B,KAAM,GACNhK,EAAG,EACHgE,EAAG,GAELgjC,WAAY,CACVnF,SAAS,EACTxB,MAAO,sBACPr2B,KAAM,GACNslD,QAAQ,GAEVkT,OAAQ,CACN3gC,SAAS,EACT72B,KAAM,UACN86D,eAAgB,OAChBX,UAAW,IAEbt+B,WAAOlyC,EACPyzC,MAAO,EACPpyC,WAAOrB,GAGTs1D,GAAWv3D,KAAK8L,QAAS9L,KAAK+7C,gBAE9B/7C,KAAKknE,oBACP,CAyXC,OAvXDn5C,GAAA0oD,EAAA,CAAA,CAAAhwE,IAAA,qBAAAnD,MAGA,WAAqB,IAAAuoC,EAAAgH,EAAA7N,EAAAhlC,KAEnBA,KAAK23C,KAAKwvB,QAAQ9xD,GAAG,8BAA8B,SAACiD,GAAsB,IAAhBrC,IAAIhV,UAAA0D,OAAA,QAAA1C,IAAAhB,UAAA,KAAAA,UAAA,GAC/C,YAATqX,IACFA,EAAO,cAET,IAAI2vD,GAAc,EAClB,IAAK,IAAMyN,KAAU1wC,EAAK2S,KAAK1I,MAC7B,GAAI5sC,OAAOzB,UAAUH,eAAeK,KAAKkkC,EAAK2S,KAAK1I,MAAOymC,GAAS,CACjE,IAAMtoC,EAAOpI,EAAK2S,KAAK1I,MAAMymC,GACvBiB,EAAW3xC,EAAK2S,KAAK5tC,KAAKklC,MAAM1sC,IAAImzE,GAI1C,GAAgB,MAAZiB,EAAkB,CACpB,IAAMC,EAAgBD,EAAS7G,YACT7tE,IAAlB20E,IAE0B,IAA1BA,EAAcznC,SACS,YAAvBynC,EAAct+D,YAEDrW,IAATqW,EACF80B,EAAK8oB,WAAW,CAAE4Z,QAAQ,IAE1B1iC,EAAK8oB,WAAW,CAAE4Z,OAAQ,CAAEx3D,KAAMA,KAEpC2vD,GAAc,EAGpB,CACF,EAEW,IAAThyD,IAAiC,IAAhBgyD,GACnBjjC,EAAK2S,KAAKwvB,QAAQlxD,KAAK,eAE3B,IAUAjW,KAAK23C,KAAKwvB,QAAQ9xD,GAAG,gBAAgB,WACnC2vB,EAAK6xC,gBACP,IAGA72E,KAAK23C,KAAKwvB,QAAQ9xD,GAAG,eAAgB4nC,GAAApR,EAAI7rC,KAAConE,SAAOtmE,KAAA+qC,EAAM7rC,OACvDA,KAAK23C,KAAKwvB,QAAQ9xD,GAAG,UAAW4nC,GAAApK,EAAI7yC,KAAConE,SAAOtmE,KAAA+xC,EAAM7yC,OAClDA,KAAK23C,KAAKwvB,QAAQ9xD,GAAG,WAAW,WAC9B1F,GAAQq1B,EAAK0xC,gBAAgB,SAAC9hD,EAAUrf,GAClCyvB,EAAK2S,KAAK5tC,KAAKklC,OAAOjK,EAAK2S,KAAK5tC,KAAKklC,MAAMv5B,IAAIH,EAAOqf,EAC5D,WACOoQ,EAAK2S,KAAKkvB,UAAU33B,kBACpBlK,EAAK0xC,eAAelvC,WACpBxC,EAAK0xC,eAAe19C,cACpBgM,EAAK0xC,eAAezuC,cACpBjD,EAAK0xC,cACd,GACF,GAEA,CAAAjwE,IAAA,aAAAnD,MAIA,SAAWwI,GACT,QAAgB7J,IAAZ6J,EAAuB,CAEzB6nE,GAAKpP,aAAavkE,KAAK8L,QAASA,GAAS,EAAM9L,KAAK+7C,gBAAgB,GAGpE,IAAIksB,GAAc,EAClB,QAAuBhmE,IAAnB6J,EAAQgkE,OACV,IAAK,IAAM4F,KAAU11E,KAAK23C,KAAK1I,MACzB5sC,OAAOzB,UAAUH,eAAeK,KAAKd,KAAK23C,KAAK1I,MAAOymC,KACxDzN,EACEjoE,KAAK23C,KAAK1I,MAAMymC,GAAQ1B,kBAAoB/L,GAMpD,QAAqBhmE,IAAjB6J,EAAQioD,KACV,IAAK,IAAM2hB,KAAU11E,KAAK23C,KAAK1I,MACzB5sC,OAAOzB,UAAUH,eAAeK,KAAKd,KAAK23C,KAAK1I,MAAOymC,IACxD11E,KAAK23C,KAAK1I,MAAMymC,GAAQjR,yBAOTxiE,IAAnB6J,EAAQ84D,aACY3iE,IAApB6J,EAAQ+4D,UACQ,IAAhBoD,GAEAjoE,KAAK23C,KAAKwvB,QAAQlxD,KAAK,eAE3B,CACF,GAEA,CAAAxP,IAAA,UAAAnD,MAOA,SAAQ2rC,GAA0B,IAAA1J,EAAAvlC,KAAnBunE,EAAStmE,UAAA0D,OAAA,QAAA1C,IAAAhB,UAAA,IAAAA,UAAA,GAChB61E,EAAe92E,KAAK23C,KAAK5tC,KAAKklC,MAEpC,GAAIw4B,GAAe,KAAMx4B,GACvBjvC,KAAK23C,KAAK5tC,KAAKklC,MAAQA,OAClB,GAAI9f,GAAc8f,GACvBjvC,KAAK23C,KAAK5tC,KAAKklC,MAAQ,IAAIy4B,GAC3B1nE,KAAK23C,KAAK5tC,KAAKklC,MAAMzH,IAAIyH,OACpB,IAAKA,EAGV,MAAM,IAAIjrC,UAAU,6BAFpBhE,KAAK23C,KAAK5tC,KAAKklC,MAAQ,IAAIy4B,EAG7B,CAcA,GAXIoP,GAEFnnE,GAAQ3P,KAAK02E,gBAAgB,SAAC9hD,EAAUrf,GACtCuhE,EAAaphE,IAAIH,EAAOqf,EAC1B,IAIF50B,KAAK23C,KAAK1I,MAAQ,GAGdjvC,KAAK23C,KAAK5tC,KAAKklC,MAAO,CAExBt/B,GAAQ3P,KAAK02E,gBAAgB,SAAC9hD,EAAUrf,GACtCgwB,EAAKoS,KAAK5tC,KAAKklC,MAAM55B,GAAGE,EAAOqf,EACjC,IAGA,IAAMgzC,EAAM5nE,KAAK23C,KAAK5tC,KAAKklC,MAAM44B,SACjC7nE,KAAKwnC,IAAIogC,GAAK,EAChB,CAEA5nE,KAAK23C,KAAKwvB,QAAQlxD,KAAK,sCACL,IAAdsxD,GACFvnE,KAAK23C,KAAKwvB,QAAQlxD,KAAK,eAE3B,GAEA,CAAAxP,IAAA,MAAAnD,MAOA,SAAIskE,GAIF,IAJ0B,IAAnBL,EAAStmE,UAAA0D,OAAA,QAAA1C,IAAAhB,UAAA,IAAAA,UAAA,GACVguC,EAAQjvC,KAAK23C,KAAK1I,MAClB8nC,EAAY/2E,KAAK23C,KAAK5tC,KAAKklC,MAExBpgC,EAAI,EAAGA,EAAI+4D,EAAIjjE,OAAQkK,IAAK,CACnC,IAAMvH,EAAKsgE,EAAI/4D,GAETmoE,EAAU/nC,EAAM3nC,GAClB0vE,GACFA,EAAQ/B,aAGV,IAAMlrE,EAAOgtE,EAAUx0E,IAAI+E,EAAI,CAAE2vE,iBAAiB,IAClDhoC,EAAM3nC,GAAMtH,KAAK6a,OAAO9Q,EAC1B,CAEA/J,KAAK23C,KAAKwvB,QAAQlxD,KAAK,sCAEL,IAAdsxD,GACFvnE,KAAK23C,KAAKwvB,QAAQlxD,KAAK,eAE3B,GAEA,CAAAxP,IAAA,SAAAnD,MAMA,SAAOskE,GAIL,IAHA,IAAM34B,EAAQjvC,KAAK23C,KAAK1I,MAClB8nC,EAAY/2E,KAAK23C,KAAK5tC,KAAKklC,MAC7Bg5B,GAAc,EACTp5D,EAAI,EAAGA,EAAI+4D,EAAIjjE,OAAQkK,IAAK,CACnC,IAAMvH,EAAKsgE,EAAI/4D,GACT9E,EAAOgtE,EAAUx0E,IAAI+E,GACrB8lC,EAAO6B,EAAM3nC,QACNrF,IAATmrC,GAEFA,EAAK6nC,aACLhN,EAAc76B,EAAK8oB,WAAWnsD,IAASk+D,EACvC76B,EAAK0kC,YAGL9xE,KAAK23C,KAAK1I,MAAM3nC,GAAMtH,KAAK6a,OAAO9Q,GAClCk+D,GAAc,EAElB,EAEoB,IAAhBA,GACFjoE,KAAK23C,KAAKwvB,QAAQlxD,KAAK,qCACvBjW,KAAK23C,KAAKwvB,QAAQlxD,KAAK,iBAEvBjW,KAAK23C,KAAKwvB,QAAQlxD,KAAK,eAE3B,GAEA,CAAAxP,IAAA,SAAAnD,MAOA,SAAOskE,GAAkB,IAAb3xD,IAAIhV,UAAA0D,OAAA,QAAA1C,IAAAhB,UAAA,KAAAA,UAAA,GACd,GAAmB,IAAf2mE,EAAIjjE,OAAR,CAEA,IAAMsqC,EAAQjvC,KAAK23C,KAAK1I,MACxBt/B,GAAQi4D,GAAK,SAACtgE,GACZ,IAAM8lC,EAAO6B,EAAM3nC,QACNrF,IAATmrC,GACFA,EAAKnF,QAET,IAEIhyB,GACFjW,KAAK23C,KAAKwvB,QAAQlxD,KAAK,eAXI,CAa/B,GAEA,CAAAxP,IAAA,UAAAnD,MAGA,WAAU,IAAA2lE,EAAAjpE,KACR2P,GAAQ3P,KAAK23C,KAAK1I,OAAO,SAAC7B,EAAMsoC,GAC9B,IAAM3rE,EAAOk/D,EAAKtxB,KAAK5tC,KAAKklC,MAAM1sC,IAAImzE,QACzBzzE,IAAT8H,GACFqjC,EAAK8oB,WAAWnsD,EAEpB,GACF,GAEA,CAAAtD,IAAA,SAAAnD,MAKA,SAAO+mB,GACL,OAAO,IAAIspD,GACTtpD,EACArqB,KAAK23C,KACL33C,KAAK62C,OACL72C,KAAK8L,QACL9L,KAAK+7C,eAET,GAEA,CAAAt1C,IAAA,iBAAAnD,MAKA,WACE,IAAIgE,EACEsnC,EAAQ5uC,KAAK23C,KAAK/I,MAClBK,EAAQjvC,KAAK23C,KAAK1I,MAExB,IAAK3nC,KAAMsnC,EACLvsC,OAAOzB,UAAUH,eAAeK,KAAK8tC,EAAOtnC,KAC9CsnC,EAAMtnC,GAAI2nC,MAAQ,IAItB,IAAK3nC,KAAM2nC,EACT,GAAI5sC,OAAOzB,UAAUH,eAAeK,KAAKmuC,EAAO3nC,GAAK,CACnD,IAAM8lC,EAAO6B,EAAM3nC,GACnB8lC,EAAKzsB,KAAO,KACZysB,EAAK/b,GAAK,KACV+b,EAAK0kC,SACP,CAEJ,GAEA,CAAArrE,IAAA,oBAAAnD,MAKA,SAAkBoyE,GAChB,IAAM9M,EAAW,GACjB,QAAgC3mE,IAA5BjC,KAAK23C,KAAK1I,MAAMymC,GAAuB,CACzC,IAAMtoC,EAAOptC,KAAK23C,KAAK1I,MAAMymC,QACTzzE,IAAhBmrC,EAAK27B,QACPH,EAAS9hE,KAAKsmC,EAAK27B,aAEH9mE,IAAdmrC,EAAK07B,MACPF,EAAS9hE,KAAKsmC,EAAK07B,KAEvB,CACA,OAAOF,CACT,GAEA,CAAAniE,IAAA,eAAAnD,MAIA,WACEtD,KAAKk3E,mBACLl3E,KAAKm3E,qBACP,GAEA,CAAA1wE,IAAA,sBAAAnD,MAKA,WAAsB,IAAA8zE,EAAAp3E,KACdq3E,EAAgB,GAEtB1nE,GAAQ3P,KAAK23C,KAAK1I,OAAO,SAAC7B,EAAM9lC,GAC9B,IAAMgwE,EAASF,EAAKz/B,KAAK/I,MAAMxB,EAAK07B,MAC9ByO,EAAWH,EAAKz/B,KAAK/I,MAAMxB,EAAK27B,aAIxB9mE,IAAXq1E,IAA6C,IAArBA,EAAOE,gBAClBv1E,IAAbs1E,IAAiD,IAAvBA,EAASC,gBAKvBv1E,IAAXq1E,QAAqCr1E,IAAbs1E,GAC1BF,EAAcvwE,KAAKQ,EAEvB,IAEAtH,KAAKioC,OAAOovC,GAAe,EAC7B,GAEA,CAAA5wE,IAAA,mBAAAnD,MAKA,WACE,IAAMyzE,EAAY/2E,KAAK23C,KAAK5tC,KAAKklC,MACjC,GAAI8nC,QAAJ,CAIA,IAAM9nC,EAAQjvC,KAAK23C,KAAK1I,MAClBwoC,EAAS,GAEftlC,GAAA4kC,GAASj2E,KAATi2E,GAAkB,SAACJ,EAAUjB,QAEdzzE,IADAgtC,EAAMymC,IAEjB+B,EAAO3wE,KAAK4uE,EAEhB,IAEA11E,KAAKwnC,IAAIiwC,GAAQ,EAZjB,CAaF,KAAChB,CAAA,CA3fe,GCFZiB,GAAe,WAMnB,SAAAA,EAAY//B,EAAMggC,EAAa7rE,GAAS8X,QAAA8zD,GACtC13E,KAAK23C,KAAOA,EACZ33C,KAAK23E,YAAcA,EACnB33E,KAAK43E,cACL53E,KAAKk2D,WAAWpqD,GAChB9L,KAAK63E,KAAOC,GAAK,oBAInB,CAgdC,OA9cD/pD,GAAA2pD,EAAA,CAAA,CAAAjxE,IAAA,aAAAnD,MAIA,SAAWwI,GACT9L,KAAK8L,QAAUA,EACf9L,KAAK+3E,cAAgB,EAAI/3E,KAAK8L,QAAQksE,MAGtCh4E,KAAKi4E,uBACH,EAAIt4E,KAAK+N,IAAI,EAAG/N,KAAKgO,IAAI,EAAG3N,KAAK8L,QAAQosE,cAC7C,GAEA,CAAAzxE,IAAA,QAAAnD,MAMA,WACE,GACyC,IAAvCtD,KAAK8L,QAAQqsE,uBACbn4E,KAAK23E,YAAYS,mBAAmBzzE,OAAS,EAC7C,CACA,IAAI81B,EACEmU,EAAQ5uC,KAAK23C,KAAK/I,MAClB25B,EAAcvoE,KAAK23E,YAAYS,mBAC/BC,EAAY9P,EAAY5jE,OAGxBizE,EAAgB53E,KAAKs4E,mBAAmB1pC,EAAO25B,GAGrDvoE,KAAK43E,cAAgBA,EAGrB,IAAK,IAAI/oE,EAAI,EAAGA,EAAIwpE,EAAWxpE,KAC7B4rB,EAAOmU,EAAM25B,EAAY15D,KAChB/C,QAAQy6D,KAAO,GAEtBvmE,KAAKu4E,uBAAuBX,EAAcpsD,KAAMiP,EAGtD,CACF,GAEA,CAAAh0B,IAAA,yBAAAnD,MAKA,SAAuBk1E,EAAc/9C,GACnCz6B,KAAKy4E,sBAAsBD,EAAaE,SAASC,GAAIl+C,GACrDz6B,KAAKy4E,sBAAsBD,EAAaE,SAASE,GAAIn+C,GACrDz6B,KAAKy4E,sBAAsBD,EAAaE,SAASG,GAAIp+C,GACrDz6B,KAAKy4E,sBAAsBD,EAAaE,SAASI,GAAIr+C,EACvD,GAEA,CAAAh0B,IAAA,wBAAAnD,MAQA,SAAsBk1E,EAAc/9C,GAElC,GAAI+9C,EAAaO,cAAgB,EAAG,CAElC,IAAM3lE,EAAKolE,EAAaQ,aAAa1rE,EAAImtB,EAAKntB,EACxC+F,EAAKmlE,EAAaQ,aAAa1nE,EAAImpB,EAAKnpB,EACxC8oB,EAAWz6B,KAAK6T,KAAKJ,EAAKA,EAAKC,EAAKA,GAKtC+mB,EAAWo+C,EAAaS,SAAWj5E,KAAK+3E,cAC1C/3E,KAAKk5E,iBAAiB9+C,EAAUhnB,EAAIC,EAAIonB,EAAM+9C,GAGX,IAA/BA,EAAaO,cACf/4E,KAAKu4E,uBAAuBC,EAAc/9C,GAGtC+9C,EAAaE,SAAS3uE,KAAKzC,IAAMmzB,EAAKnzB,IAExCtH,KAAKk5E,iBAAiB9+C,EAAUhnB,EAAIC,EAAIonB,EAAM+9C,EAItD,CACF,GAEA,CAAA/xE,IAAA,mBAAAnD,MAUA,SAAiB82B,EAAUhnB,EAAIC,EAAIonB,EAAM+9C,GACtB,IAAbp+C,IAEFhnB,EADAgnB,EAAW,IAITp6B,KAAKi4E,uBAAyB,GAAKx9C,EAAKmY,MAAMj+B,SAChDylB,EAAWz6B,KAAK+N,IACd,GAAM1N,KAAKi4E,uBAAyBx9C,EAAKmY,MAAMj+B,OAC/CylB,EAAWK,EAAKmY,MAAMj+B,SAM1B,IAAMwkE,EACHn5E,KAAK8L,QAAQqsE,sBACZK,EAAajS,KACb9rC,EAAK3uB,QAAQy6D,KACf5mE,KAAKkuE,IAAIzzC,EAAU,GACfg/C,EAAKhmE,EAAK+lE,EACVE,EAAKhmE,EAAK8lE,EAEhBn5E,KAAK23E,YAAY2B,OAAO7+C,EAAKnzB,IAAIgG,GAAK8rE,EACtCp5E,KAAK23E,YAAY2B,OAAO7+C,EAAKnzB,IAAIgK,GAAK+nE,CACxC,GAEA,CAAA5yE,IAAA,qBAAAnD,MAQA,SAAmBsrC,EAAO25B,GAUxB,IATA,IAAI9tC,EACE49C,EAAY9P,EAAY5jE,OAE1B40E,EAAO3qC,EAAM25B,EAAY,IAAIj7D,EAC7BksE,EAAO5qC,EAAM25B,EAAY,IAAIj3D,EAC7BmoE,EAAO7qC,EAAM25B,EAAY,IAAIj7D,EAC7BosE,EAAO9qC,EAAM25B,EAAY,IAAIj3D,EAGxBzC,EAAI,EAAGA,EAAIwpE,EAAWxpE,IAAK,CAClC,IAAM4rB,EAAOmU,EAAM25B,EAAY15D,IACzBvB,EAAImtB,EAAKntB,EACTgE,EAAImpB,EAAKnpB,EACXmpB,EAAK3uB,QAAQy6D,KAAO,IAClBj5D,EAAIisE,IACNA,EAAOjsE,GAELA,EAAImsE,IACNA,EAAOnsE,GAELgE,EAAIkoE,IACNA,EAAOloE,GAELA,EAAIooE,IACNA,EAAOpoE,GAGb,CAEA,IAAM+zD,EAAW1lE,KAAKm2B,IAAI2jD,EAAOF,GAAQ55E,KAAKm2B,IAAI4jD,EAAOF,GACrDnU,EAAW,GACbmU,GAAQ,GAAMnU,EACdqU,GAAQ,GAAMrU,IAGdkU,GAAQ,GAAMlU,EACdoU,GAAQ,GAAMpU,GAGhB,IACMsU,EAAWh6E,KAAK+N,IADE,KACmB/N,KAAKm2B,IAAI2jD,EAAOF,IACrDK,EAAe,GAAMD,EACrBE,EAAU,IAAON,EAAOE,GAC5BK,EAAU,IAAON,EAAOE,GAGpB9B,EAAgB,CACpBpsD,KAAM,CACJwtD,aAAc,CAAE1rE,EAAG,EAAGgE,EAAG,GACzBi1D,KAAM,EACNwT,MAAO,CACLR,KAAMM,EAAUD,EAChBH,KAAMI,EAAUD,EAChBJ,KAAMM,EAAUF,EAChBF,KAAMI,EAAUF,GAElBtiE,KAAMqiE,EACNV,SAAU,EAAIU,EACdjB,SAAU,CAAE3uE,KAAM,MAClBiwE,SAAU,EACV/S,MAAO,EACP8R,cAAe,IAGnB/4E,KAAKi6E,aAAarC,EAAcpsD,MAGhC,IAAK,IAAI3c,EAAI,EAAGA,EAAIwpE,EAAWxpE,KAC7B4rB,EAAOmU,EAAM25B,EAAY15D,KAChB/C,QAAQy6D,KAAO,GACtBvmE,KAAKk6E,aAAatC,EAAcpsD,KAAMiP,GAK1C,OAAOm9C,CACT,GAEA,CAAAnxE,IAAA,oBAAAnD,MAOA,SAAkBk1E,EAAc/9C,GAC9B,IAAMu+C,EAAeR,EAAaQ,aAC5BmB,EAAY3B,EAAajS,KAAO9rC,EAAK3uB,QAAQy6D,KAC7C6T,EAAe,EAAID,EAEzBnB,EAAa1rE,EACX0rE,EAAa1rE,EAAIkrE,EAAajS,KAAO9rC,EAAKntB,EAAImtB,EAAK3uB,QAAQy6D,KAC7DyS,EAAa1rE,GAAK8sE,EAElBpB,EAAa1nE,EACX0nE,EAAa1nE,EAAIknE,EAAajS,KAAO9rC,EAAKnpB,EAAImpB,EAAK3uB,QAAQy6D,KAC7DyS,EAAa1nE,GAAK8oE,EAElB5B,EAAajS,KAAO4T,EACpB,IAAME,EAAc16E,KAAK+N,IACvB/N,KAAK+N,IAAI+sB,EAAKkb,OAAQlb,EAAK9lB,QAC3B8lB,EAAKib,OAEP8iC,EAAawB,SACXxB,EAAawB,SAAWK,EAAcA,EAAc7B,EAAawB,QACrE,GAEA,CAAAvzE,IAAA,eAAAnD,MAQA,SAAak1E,EAAc/9C,EAAM6/C,GACT,GAAlBA,QAA6Cr4E,IAAnBq4E,GAE5Bt6E,KAAKu6E,kBAAkB/B,EAAc/9C,GAGvC,IACI+/C,EADET,EAAQvB,EAAaE,SAASC,GAAGoB,MAKnCS,EAHAT,EAAMN,KAAOh/C,EAAKntB,EAEhBysE,EAAML,KAAOj/C,EAAKnpB,EACX,KAEA,KAIPyoE,EAAML,KAAOj/C,EAAKnpB,EACX,KAEA,KAIbtR,KAAKy6E,eAAejC,EAAc/9C,EAAM+/C,EAC1C,GAEA,CAAA/zE,IAAA,iBAAAnD,MAQA,SAAek1E,EAAc/9C,EAAM+/C,GACjC,IAAM9B,EAAWF,EAAaE,SAAS8B,GAEvC,OAAQ9B,EAASK,eACf,KAAK,EACHL,EAASA,SAAS3uE,KAAO0wB,EACzBi+C,EAASK,cAAgB,EACzB/4E,KAAKu6E,kBAAkB7B,EAAUj+C,GACjC,MACF,KAAK,EAIDi+C,EAASA,SAAS3uE,KAAKuD,IAAMmtB,EAAKntB,GAClCorE,EAASA,SAAS3uE,KAAKuH,IAAMmpB,EAAKnpB,GAElCmpB,EAAKntB,GAAKtN,KAAK63E,OACfp9C,EAAKnpB,GAAKtR,KAAK63E,SAEf73E,KAAKi6E,aAAavB,GAClB14E,KAAKk6E,aAAaxB,EAAUj+C,IAE9B,MACF,KAAK,EACHz6B,KAAKk6E,aAAaxB,EAAUj+C,GAGlC,GAEA,CAAAh0B,IAAA,eAAAnD,MAOA,SAAak1E,GAEX,IAAIkC,EAAgB,KACe,IAA/BlC,EAAaO,gBACf2B,EAAgBlC,EAAaE,SAAS3uE,KACtCyuE,EAAajS,KAAO,EACpBiS,EAAaQ,aAAa1rE,EAAI,EAC9BkrE,EAAaQ,aAAa1nE,EAAI,GAEhCknE,EAAaO,cAAgB,EAC7BP,EAAaE,SAAS3uE,KAAO,KAC7B/J,KAAK26E,cAAcnC,EAAc,MACjCx4E,KAAK26E,cAAcnC,EAAc,MACjCx4E,KAAK26E,cAAcnC,EAAc,MACjCx4E,KAAK26E,cAAcnC,EAAc,MAEZ,MAAjBkC,GACF16E,KAAKk6E,aAAa1B,EAAckC,EAEpC,GAEA,CAAAj0E,IAAA,gBAAAnD,MASA,SAAck1E,EAAcgC,GAC1B,IAAIjB,EAAME,EAAMD,EAAME,EAChBkB,EAAY,GAAMpC,EAAalhE,KACrC,OAAQkjE,GACN,IAAK,KACHjB,EAAOf,EAAauB,MAAMR,KAC1BE,EAAOjB,EAAauB,MAAMR,KAAOqB,EACjCpB,EAAOhB,EAAauB,MAAMP,KAC1BE,EAAOlB,EAAauB,MAAMP,KAAOoB,EACjC,MACF,IAAK,KACHrB,EAAOf,EAAauB,MAAMR,KAAOqB,EACjCnB,EAAOjB,EAAauB,MAAMN,KAC1BD,EAAOhB,EAAauB,MAAMP,KAC1BE,EAAOlB,EAAauB,MAAMP,KAAOoB,EACjC,MACF,IAAK,KACHrB,EAAOf,EAAauB,MAAMR,KAC1BE,EAAOjB,EAAauB,MAAMR,KAAOqB,EACjCpB,EAAOhB,EAAauB,MAAMP,KAAOoB,EACjClB,EAAOlB,EAAauB,MAAML,KAC1B,MACF,IAAK,KACHH,EAAOf,EAAauB,MAAMR,KAAOqB,EACjCnB,EAAOjB,EAAauB,MAAMN,KAC1BD,EAAOhB,EAAauB,MAAMP,KAAOoB,EACjClB,EAAOlB,EAAauB,MAAML,KAI9BlB,EAAaE,SAAS8B,GAAU,CAC9BxB,aAAc,CAAE1rE,EAAG,EAAGgE,EAAG,GACzBi1D,KAAM,EACNwT,MAAO,CAAER,KAAMA,EAAME,KAAMA,EAAMD,KAAMA,EAAME,KAAMA,GACnDpiE,KAAM,GAAMkhE,EAAalhE,KACzB2hE,SAAU,EAAIT,EAAaS,SAC3BP,SAAU,CAAE3uE,KAAM,MAClBiwE,SAAU,EACV/S,MAAOuR,EAAavR,MAAQ,EAC5B8R,cAAe,EAEnB,GAIA,CAAAtyE,IAAA,SAAAnD,MAOA,SAAO+N,EAAKs8B,QACiB1rC,IAAvBjC,KAAK43E,gBACPvmE,EAAI+oD,UAAY,EAEhBp6D,KAAK66E,YAAY76E,KAAK43E,cAAcpsD,KAAMna,EAAKs8B,GAEnD,GAEA,CAAAlnC,IAAA,cAAAnD,MAQA,SAAYw3E,EAAQzpE,EAAKs8B,QACT1rC,IAAV0rC,IACFA,EAAQ,WAGmB,IAAzBmtC,EAAO/B,gBACT/4E,KAAK66E,YAAYC,EAAOpC,SAASC,GAAItnE,GACrCrR,KAAK66E,YAAYC,EAAOpC,SAASE,GAAIvnE,GACrCrR,KAAK66E,YAAYC,EAAOpC,SAASI,GAAIznE,GACrCrR,KAAK66E,YAAYC,EAAOpC,SAASG,GAAIxnE,IAEvCA,EAAIgpD,YAAc1sB,EAClBt8B,EAAIG,YACJH,EAAIW,OAAO8oE,EAAOf,MAAMR,KAAMuB,EAAOf,MAAMP,MAC3CnoE,EAAIY,OAAO6oE,EAAOf,MAAMN,KAAMqB,EAAOf,MAAMP,MAC3CnoE,EAAI4rD,SAEJ5rD,EAAIG,YACJH,EAAIW,OAAO8oE,EAAOf,MAAMN,KAAMqB,EAAOf,MAAMP,MAC3CnoE,EAAIY,OAAO6oE,EAAOf,MAAMN,KAAMqB,EAAOf,MAAML,MAC3CroE,EAAI4rD,SAEJ5rD,EAAIG,YACJH,EAAIW,OAAO8oE,EAAOf,MAAMN,KAAMqB,EAAOf,MAAML,MAC3CroE,EAAIY,OAAO6oE,EAAOf,MAAMR,KAAMuB,EAAOf,MAAML,MAC3CroE,EAAI4rD,SAEJ5rD,EAAIG,YACJH,EAAIW,OAAO8oE,EAAOf,MAAMR,KAAMuB,EAAOf,MAAML,MAC3CroE,EAAIY,OAAO6oE,EAAOf,MAAMR,KAAMuB,EAAOf,MAAMP,MAC3CnoE,EAAI4rD,QAQN,KAACya,CAAA,CA/dkB,GCAfqD,GAAe,WAMnB,SAAAA,EAAYpjC,EAAMggC,EAAa7rE,GAAS8X,QAAAm3D,GACtC/6E,KAAK63E,KAAOC,GAAK,oBAEjB93E,KAAK23C,KAAOA,EACZ33C,KAAK23E,YAAcA,EACnB33E,KAAKk2D,WAAWpqD,EAClB,CAiEC,OA/DDiiB,GAAAgtD,EAAA,CAAA,CAAAt0E,IAAA,aAAAnD,MAIA,SAAWwI,GACT9L,KAAK8L,QAAUA,CACjB,GAEA,CAAArF,IAAA,QAAAnD,MAMA,WAgBE,IAfA,IAAI8P,EAAIC,EAAI+mB,EAAUg/C,EAAIC,EAAI2B,EAAgB9L,EAAOC,EAE/CvgC,EAAQ5uC,KAAK23C,KAAK/I,MAClB25B,EAAcvoE,KAAK23E,YAAYS,mBAC/BkB,EAASt5E,KAAK23E,YAAY2B,OAG1B2B,EAAej7E,KAAK8L,QAAQmvE,aAG5B/xE,GAAK,EAAI,EAAI+xE,EAKVpsE,EAAI,EAAGA,EAAI05D,EAAY5jE,OAAS,EAAGkK,IAAK,CAC/CqgE,EAAQtgC,EAAM25B,EAAY15D,IAC1B,IAAK,IAAIoB,EAAIpB,EAAI,EAAGoB,EAAIs4D,EAAY5jE,OAAQsL,IAG1CmD,GAFA+7D,EAAQvgC,EAAM25B,EAAYt4D,KAEf3C,EAAI4hE,EAAM5hE,EACrB+F,EAAK87D,EAAM79D,EAAI49D,EAAM59D,EAIJ,KAHjB8oB,EAAWz6B,KAAK6T,KAAKJ,EAAKA,EAAKC,EAAKA,MAKlCD,EADAgnB,EAAW,GAAMp6B,KAAK63E,QAIpBz9C,EAAW,EAAI6gD,IAEfD,EADE5gD,EAAW,GAAM6gD,EACF,EAEA/xE,EAAIkxB,EAvBnB,mBA2BJg/C,EAAKhmE,GAFL4nE,GAAkC5gD,GAGlCi/C,EAAKhmE,EAAK2nE,EAEV1B,EAAOpK,EAAM5nE,IAAIgG,GAAK8rE,EACtBE,EAAOpK,EAAM5nE,IAAIgK,GAAK+nE,EACtBC,EAAOnK,EAAM7nE,IAAIgG,GAAK8rE,EACtBE,EAAOnK,EAAM7nE,IAAIgK,GAAK+nE,EAG5B,CACF,KAAC0B,CAAA,CA7EkB,GCFfG,GAA2B,WAM/B,SAAAA,EAAYvjC,EAAMggC,EAAa7rE,GAAS8X,QAAAs3D,GACtCl7E,KAAK23C,KAAOA,EACZ33C,KAAK23E,YAAcA,EACnB33E,KAAKk2D,WAAWpqD,EAClB,CAqEC,OAnEDiiB,GAAAmtD,EAAA,CAAA,CAAAz0E,IAAA,aAAAnD,MAIA,SAAWwI,GACT9L,KAAK8L,QAAUA,EACf9L,KAAKi4E,uBAAyBt4E,KAAK+N,IACjC,EACA/N,KAAKgO,IAAI,EAAG3N,KAAK8L,QAAQosE,cAAgB,GAE7C,GAEA,CAAAzxE,IAAA,QAAAnD,MAMA,WAUE,IATA,IAAMsrC,EAAQ5uC,KAAK23C,KAAK/I,MAClB25B,EAAcvoE,KAAK23E,YAAYS,mBAC/BkB,EAASt5E,KAAK23E,YAAY2B,OAG1B2B,EAAej7E,KAAK8L,QAAQmvE,aAIzBpsE,EAAI,EAAGA,EAAI05D,EAAY5jE,OAAS,EAAGkK,IAE1C,IADA,IAAMqgE,EAAQtgC,EAAM25B,EAAY15D,IACvBoB,EAAIpB,EAAI,EAAGoB,EAAIs4D,EAAY5jE,OAAQsL,IAAK,CAC/C,IAAMk/D,EAAQvgC,EAAM25B,EAAYt4D,IAGhC,GAAIi/D,EAAMjI,QAAUkI,EAAMlI,MAAO,CAC/B,IAAMkU,EACJF,EACAj7E,KAAKi4E,yBACD/I,EAAMt8B,MAAMj+B,QAAU,GAAK,GAAKw6D,EAAMv8B,MAAMj+B,QAAU,GAAK,GAE3DvB,EAAK+7D,EAAM7hE,EAAI4hE,EAAM5hE,EACrB+F,EAAK87D,EAAM79D,EAAI49D,EAAM59D,EACrB8oB,EAAWz6B,KAAK6T,KAAKJ,EAAKA,EAAKC,EAAKA,GAGtC2nE,OAAc,EAEhBA,EADE5gD,EAAW+gD,GAEVx7E,KAAKkuE,IAJQ,IAIQzzC,EAAU,GAChCz6B,KAAKkuE,IALS,IAKOsN,EAAoB,GAE1B,EAGF,IAAb/gD,IACF4gD,GAAkC5gD,GAEpC,IAAMg/C,EAAKhmE,EAAK4nE,EACV3B,EAAKhmE,EAAK2nE,EAEhB1B,EAAOpK,EAAM5nE,IAAIgG,GAAK8rE,EACtBE,EAAOpK,EAAM5nE,IAAIgK,GAAK+nE,EACtBC,EAAOnK,EAAM7nE,IAAIgG,GAAK8rE,EACtBE,EAAOnK,EAAM7nE,IAAIgK,GAAK+nE,CACxB,CACF,CAEJ,KAAC6B,CAAA,CA/E8B,GCA3BE,GAAY,WAMhB,SAAAA,EAAYzjC,EAAMggC,EAAa7rE,GAAS8X,QAAAw3D,GACtCp7E,KAAK23C,KAAOA,EACZ33C,KAAK23E,YAAcA,EACnB33E,KAAKk2D,WAAWpqD,EAClB,CAqFC,OAnFDiiB,GAAAqtD,EAAA,CAAA,CAAA30E,IAAA,aAAAnD,MAIA,SAAWwI,GACT9L,KAAK8L,QAAUA,CACjB,GAEA,CAAArF,IAAA,QAAAnD,MAKA,WAOE,IANA,IAAI+3E,EAAYjuC,EAGZ8hC,EAAOC,EAAOmM,EAFZC,EAAcv7E,KAAK23E,YAAY6D,mBAC/BvsC,EAAQjvC,KAAK23C,KAAK1I,MAIfpgC,EAAI,EAAGA,EAAI0sE,EAAY52E,OAAQkK,KAEf,KADvBu+B,EAAO6B,EAAMssC,EAAY1sE,KAChBilE,WAAsB1mC,EAAK07B,OAAS17B,EAAK27B,aAGf9mE,IAA/BjC,KAAK23C,KAAK/I,MAAMxB,EAAK07B,YACY7mE,IAAjCjC,KAAK23C,KAAK/I,MAAMxB,EAAK27B,eAEK9mE,IAAtBmrC,EAAKymC,SAAS7D,KAChBqL,OAC0Bp5E,IAAxBmrC,EAAKthC,QAAQnH,OACT3E,KAAK8L,QAAQ2vE,aACbruC,EAAKthC,QAAQnH,OACnBuqE,EAAQ9hC,EAAK/b,GACb89C,EAAQ/hC,EAAKymC,SAAS7D,IACtBsL,EAAQluC,EAAKzsB,KAEb3gB,KAAK07E,sBAAsBxM,EAAOC,EAAO,GAAMkM,GAC/Cr7E,KAAK07E,sBAAsBvM,EAAOmM,EAAO,GAAMD,KAI/CA,OAC0Bp5E,IAAxBmrC,EAAKthC,QAAQnH,OACmB,IAA5B3E,KAAK8L,QAAQ2vE,aACbruC,EAAKthC,QAAQnH,OACnB3E,KAAK07E,sBAAsBtuC,EAAKzsB,KAAMysB,EAAK/b,GAAIgqD,IAKzD,GAEA,CAAA50E,IAAA,wBAAAnD,MAQA,SAAsB4rE,EAAOC,EAAOkM,GAClC,IAAMjoE,EAAK87D,EAAM5hE,EAAI6hE,EAAM7hE,EACrB+F,EAAK67D,EAAM59D,EAAI69D,EAAM79D,EACrB8oB,EAAWz6B,KAAK+N,IAAI/N,KAAK6T,KAAKJ,EAAKA,EAAKC,EAAKA,GAAK,KAGlDsoE,EACH37E,KAAK8L,QAAQ8vE,gBAAkBP,EAAajhD,GAAaA,EAEtDg/C,EAAKhmE,EAAKuoE,EACVtC,EAAKhmE,EAAKsoE,OAG0B15E,IAAtCjC,KAAK23E,YAAY2B,OAAOpK,EAAM5nE,MAChCtH,KAAK23E,YAAY2B,OAAOpK,EAAM5nE,IAAIgG,GAAK8rE,EACvCp5E,KAAK23E,YAAY2B,OAAOpK,EAAM5nE,IAAIgK,GAAK+nE,QAGCp3E,IAAtCjC,KAAK23E,YAAY2B,OAAOnK,EAAM7nE,MAChCtH,KAAK23E,YAAY2B,OAAOnK,EAAM7nE,IAAIgG,GAAK8rE,EACvCp5E,KAAK23E,YAAY2B,OAAOnK,EAAM7nE,IAAIgK,GAAK+nE,EAE3C,KAAC+B,CAAA,CA/Fe,GCAZS,GAAwB,WAM5B,SAAAA,EAAYlkC,EAAMggC,EAAa7rE,GAAS8X,QAAAi4D,GACtC77E,KAAK23C,KAAOA,EACZ33C,KAAK23E,YAAcA,EACnB33E,KAAKk2D,WAAWpqD,EAClB,CA6GC,OA3GDiiB,GAAA8tD,EAAA,CAAA,CAAAp1E,IAAA,aAAAnD,MAIA,SAAWwI,GACT9L,KAAK8L,QAAUA,CACjB,GAEA,CAAArF,IAAA,QAAAnD,MAKA,WAWE,IAVA,IAAI+3E,EAAYjuC,EACZh6B,EAAIC,EAAI+lE,EAAIC,EAAIsC,EAAavhD,EA4D7B0hD,EAAUC,EA3DR9sC,EAAQjvC,KAAK23C,KAAK1I,MAClBwH,EAAS,GAET8kC,EAAcv7E,KAAK23E,YAAY6D,mBAC/BjT,EAAcvoE,KAAK23E,YAAYS,mBAC/BkB,EAASt5E,KAAK23E,YAAY2B,OAGvBzqE,EAAI,EAAGA,EAAI05D,EAAY5jE,OAAQkK,IAAK,CAC3C,IAAM22D,EAAS+C,EAAY15D,GAC3ByqE,EAAO9T,GAAQsW,SAAW,EAC1BxC,EAAO9T,GAAQuW,SAAW,CAC5B,CAGA,IAAK,IAAIltE,EAAI,EAAGA,EAAI0sE,EAAY52E,OAAQkK,KAEf,KADvBu+B,EAAO6B,EAAMssC,EAAY1sE,KAChBilE,YACPuH,OAC0Bp5E,IAAxBmrC,EAAKthC,QAAQnH,OACT3E,KAAK8L,QAAQ2vE,aACbruC,EAAKthC,QAAQnH,OAEnByO,EAAKg6B,EAAKzsB,KAAKrT,EAAI8/B,EAAK/b,GAAG/jB,EAC3B+F,EAAK+5B,EAAKzsB,KAAKrP,EAAI87B,EAAK/b,GAAG/f,EAE3B8oB,EAAwB,KADxBA,EAAWz6B,KAAK6T,KAAKJ,EAAKA,EAAKC,EAAKA,IACR,IAAO+mB,EAMnCg/C,EAAKhmE,GAHLuoE,EACG37E,KAAK8L,QAAQ8vE,gBAAkBP,EAAajhD,GAAaA,GAG5Di/C,EAAKhmE,EAAKsoE,EAENvuC,EAAK/b,GAAG41C,OAAS75B,EAAKzsB,KAAKsmD,YACHhlE,IAAtBq3E,EAAOlsC,EAAK07B,QACdwQ,EAAOlsC,EAAK07B,MAAMgT,UAAY1C,EAC9BE,EAAOlsC,EAAK07B,MAAMiT,UAAY1C,QAEJp3E,IAAxBq3E,EAAOlsC,EAAK27B,UACduQ,EAAOlsC,EAAK27B,QAAQ+S,UAAY1C,EAChCE,EAAOlsC,EAAK27B,QAAQgT,UAAY1C,UAGRp3E,IAAtBq3E,EAAOlsC,EAAK07B,QACdwQ,EAAOlsC,EAAK07B,MAAMx7D,GAAKmpC,EAAS2iC,EAChCE,EAAOlsC,EAAK07B,MAAMx3D,GAAKmlC,EAAS4iC,QAENp3E,IAAxBq3E,EAAOlsC,EAAK27B,UACduQ,EAAOlsC,EAAK27B,QAAQz7D,GAAKmpC,EAAS2iC,EAClCE,EAAOlsC,EAAK27B,QAAQz3D,GAAKmlC,EAAS4iC,KAO1CsC,EAAc,EAEd,IAAK,IAAI9sE,EAAI,EAAGA,EAAI05D,EAAY5jE,OAAQkK,IAAK,CAC3C,IAAM22D,EAAS+C,EAAY15D,GAC3BitE,EAAWn8E,KAAKgO,IACdguE,EACAh8E,KAAK+N,KAAKiuE,EAAarC,EAAO9T,GAAQsW,WAExCC,EAAWp8E,KAAKgO,IACdguE,EACAh8E,KAAK+N,KAAKiuE,EAAarC,EAAO9T,GAAQuW,WAGxCzC,EAAO9T,GAAQl4D,GAAKwuE,EACpBxC,EAAO9T,GAAQl0D,GAAKyqE,CACtB,CAKA,IAFA,IAAIC,EAAU,EACVC,EAAU,EACLptE,EAAI,EAAGA,EAAI05D,EAAY5jE,OAAQkK,IAAK,CAC3C,IAAM22D,EAAS+C,EAAY15D,GAC3BmtE,GAAW1C,EAAO9T,GAAQl4D,EAC1B2uE,GAAW3C,EAAO9T,GAAQl0D,CAC5B,CAIA,IAHA,IAAM4qE,EAAeF,EAAUzT,EAAY5jE,OACrCw3E,EAAeF,EAAU1T,EAAY5jE,OAElCkK,EAAI,EAAGA,EAAI05D,EAAY5jE,OAAQkK,IAAK,CAC3C,IAAM22D,EAAS+C,EAAY15D,GAC3ByqE,EAAO9T,GAAQl4D,GAAK4uE,EACpB5C,EAAO9T,GAAQl0D,GAAK6qE,CACtB,CACF,KAACN,CAAA,CAvH2B,GCAxBO,GAAoB,WAMxB,SAAAA,EAAYzkC,EAAMggC,EAAa7rE,GAAS8X,QAAAw4D,GACtCp8E,KAAK23C,KAAOA,EACZ33C,KAAK23E,YAAcA,EACnB33E,KAAKk2D,WAAWpqD,EAClB,CA6CC,OA3CDiiB,GAAAquD,EAAA,CAAA,CAAA31E,IAAA,aAAAnD,MAIA,SAAWwI,GACT9L,KAAK8L,QAAUA,CACjB,GAEA,CAAArF,IAAA,QAAAnD,MAGA,WAME,IALA,IAAI8P,EAAIC,EAAI+mB,EAAUK,EAChBmU,EAAQ5uC,KAAK23C,KAAK/I,MAClB25B,EAAcvoE,KAAK23E,YAAYS,mBAC/BkB,EAASt5E,KAAK23E,YAAY2B,OAEvBzqE,EAAI,EAAGA,EAAI05D,EAAY5jE,OAAQkK,IAAK,CAG3CuE,IADAqnB,EAAOmU,EADQ25B,EAAY15D,KAEhBvB,EACX+F,GAAMonB,EAAKnpB,EACX8oB,EAAWz6B,KAAK6T,KAAKJ,EAAKA,EAAKC,EAAKA,GAEpCrT,KAAKk5E,iBAAiB9+C,EAAUhnB,EAAIC,EAAIimE,EAAQ7+C,EAClD,CACF,GAEA,CAAAh0B,IAAA,mBAAAnD,MAUA,SAAiB82B,EAAUhnB,EAAIC,EAAIimE,EAAQ7+C,GACzC,IAAM0+C,EACS,IAAb/+C,EAAiB,EAAIp6B,KAAK8L,QAAQuwE,eAAiBjiD,EACrDk/C,EAAO7+C,EAAKnzB,IAAIgG,EAAI8F,EAAK+lE,EACzBG,EAAO7+C,EAAKnzB,IAAIgK,EAAI+B,EAAK8lE,CAC3B,KAACiD,CAAA,CAvDuB,kXCA1B,IAGME,YAA+BC,GAAAr/B,GAAAo/B,EAAAC,GAAA,IAAAxyC,EAAA4zB,GAAA2e,GAMnC,SAAAA,EAAY3kC,EAAMggC,EAAa7rE,GAAS,IAAA8zB,EAGmB,OAHnBhc,QAAA04D,IACtC18C,EAAAmK,EAAAjpC,UAAM62C,EAAMggC,EAAa7rE,IAEpB+rE,KAAOC,GAAK,wCAAwCl4C,CAC3D,CAuCC,OArCD7R,GAAAuuD,EAAA,CAAA,CAAA71E,IAAA,mBAAAnD,MAUA,SAAiB82B,EAAUhnB,EAAIC,EAAIonB,EAAM+9C,GACtB,IAAbp+C,IAEFhnB,EADAgnB,EAAW,GAAMp6B,KAAK63E,QAIpB73E,KAAKi4E,uBAAyB,GAAKx9C,EAAKmY,MAAMj+B,SAChDylB,EAAWz6B,KAAK+N,IACd,GAAM1N,KAAKi4E,uBAAyBx9C,EAAKmY,MAAMj+B,OAC/CylB,EAAWK,EAAKmY,MAAMj+B,SAI1B,IAAM6nE,EAAS/hD,EAAKwU,MAAMtqC,OAAS,EAG7Bw0E,EACHn5E,KAAK8L,QAAQqsE,sBACZK,EAAajS,KACb9rC,EAAK3uB,QAAQy6D,KACbiW,EACF78E,KAAKkuE,IAAIzzC,EAAU,GACfg/C,EAAKhmE,EAAK+lE,EACVE,EAAKhmE,EAAK8lE,EAEhBn5E,KAAK23E,YAAY2B,OAAO7+C,EAAKnzB,IAAIgG,GAAK8rE,EACtCp5E,KAAK23E,YAAY2B,OAAO7+C,EAAKnzB,IAAIgK,GAAK+nE,CACxC,KAACiD,CAAA,EAjD2C5E,mXCJ9C,IAGM+E,YAAoCC,GAAAx/B,GAAAu/B,EAAAC,GAAA,IAAA3yC,EAAA4zB,GAAA8e,GAMxC,SAAAA,EAAY9kC,EAAMggC,EAAa7rE,GAAS,OAAA8X,QAAA64D,GAAA1yC,EAAAjpC,KAAAd,KAChC23C,EAAMggC,EAAa7rE,EAC3B,CAoBC,OAlBDiiB,GAAA0uD,EAAA,CAAA,CAAAh2E,IAAA,mBAAAnD,MAUA,SAAiB82B,EAAUhnB,EAAIC,EAAIimE,EAAQ7+C,GACzC,GAAIL,EAAW,EAAG,CAChB,IAAMoiD,EAAS/hD,EAAKwU,MAAMtqC,OAAS,EAC7Bw0E,EACJn5E,KAAK8L,QAAQuwE,eAAiBG,EAAS/hD,EAAK3uB,QAAQy6D,KACtD+S,EAAO7+C,EAAKnzB,IAAIgG,EAAI8F,EAAK+lE,EACzBG,EAAO7+C,EAAKnzB,IAAIgK,EAAI+B,EAAK8lE,CAC3B,CACF,KAACsD,CAAA,EA5BgDL,ICa7CO,GAAa,WAIjB,SAAAA,EAAYhlC,GAAM/zB,QAAA+4D,GAChB38E,KAAK23C,KAAOA,EACZ33C,KAAK23E,YAAc,CACjBS,mBAAoB,GACpBoD,mBAAoB,GACpBlC,OAAQ,CAAE,EACVsD,WAAY,CAAC,GAGf58E,KAAK68E,gBAAiB,EACtB78E,KAAK88E,mBAAqB,IAAO,GACjC98E,KAAK+8E,iBAAkB,EACvB/8E,KAAKg9E,eAAiB,GACtBh9E,KAAKi9E,eAAiB,GACtBj9E,KAAKk9E,YAAc,GACnBl9E,KAAKm9E,iBAAcl7E,EAGnBjC,KAAKo9E,kBAAmB,EACxBp9E,KAAKq9E,yBAA0B,EAC/Br9E,KAAKs9E,gBAAkB,EACvBt9E,KAAKu9E,iBAAmB,EAExBv9E,KAAKw9E,YAAa,EAClBx9E,KAAKy9E,sBAAuB,EAC5Bz9E,KAAK09E,wBAA0B,EAC/B19E,KAAK29E,OAAQ,EAGb39E,KAAK8L,QAAU,GACf9L,KAAK+7C,eAAiB,CACpB5M,SAAS,EACTyuC,UAAW,CACT5F,MAAO,GACPG,uBAAwB,IACxBkE,eAAgB,GAChBZ,aAAc,GACdG,eAAgB,IAChBiC,QAAS,IACT3F,aAAc,GAEhB4F,iBAAkB,CAChB9F,MAAO,GACPG,uBAAwB,GACxBkE,eAAgB,IAChBT,eAAgB,IAChBH,aAAc,IACdoC,QAAS,GACT3F,aAAc,GAEhB6F,UAAW,CACT1B,eAAgB,GAChBZ,aAAc,IACdG,eAAgB,IAChBX,aAAc,IACd4C,QAAS,IACT3F,aAAc,GAEhB8F,sBAAuB,CACrB3B,eAAgB,EAChBZ,aAAc,IACdG,eAAgB,IAChBX,aAAc,IACd4C,QAAS,KAEXI,YAAa,GACbC,YAAa,IACbC,OAAQ,YACRC,cAAe,CACbjvC,SAAS,EACTqH,WAAY,IACZ6nC,eAAgB,GAChBC,kBAAkB,EAClBC,KAAK,GAEPC,SAAU,GACVpB,kBAAkB,EAClBqB,KAAM,CAAEnxE,EAAG,EAAGgE,EAAG,IAEnB2qC,GAAcj8C,KAAK8L,QAAS9L,KAAK+7C,gBACjC/7C,KAAKw+E,SAAW,GAChBx+E,KAAK0+E,cAAe,EAEpB1+E,KAAKknE,oBACP,CA+vBC,OA7vBDn5C,GAAA4uD,EAAA,CAAA,CAAAl2E,IAAA,qBAAAnD,MAGA,WAAqB,IAAAs8B,EAAA5/B,KACnBA,KAAK23C,KAAKwvB,QAAQ9xD,GAAG,eAAe,WAClCuqB,EAAK++C,aACP,IACA3+E,KAAK23C,KAAKwvB,QAAQ9xD,GAAG,iBAAiB,WACpCuqB,EAAK8+C,cAAe,CACtB,IACA1+E,KAAK23C,KAAKwvB,QAAQ9xD,GAAG,gBAAgB,WACnCuqB,EAAKg/C,iBACLh/C,EAAK+9C,OAAQ,CACf,IACA39E,KAAK23C,KAAKwvB,QAAQ9xD,GAAG,kBAAkB,WACrCuqB,EAAKi9C,gBAAiB,EACtBj9C,EAAKg/C,gBACP,IACA5+E,KAAK23C,KAAKwvB,QAAQ9xD,GAAG,kBAAkB,WACrCuqB,EAAKs2B,WAAWt2B,EAAK9zB,UACF,IAAf8zB,EAAK+9C,OACP/9C,EAAKi/C,iBAET,IACA7+E,KAAK23C,KAAKwvB,QAAQ9xD,GAAG,mBAAmB,YACnB,IAAfuqB,EAAK+9C,OACP/9C,EAAKi/C,iBAET,IACA7+E,KAAK23C,KAAKwvB,QAAQ9xD,GAAG,kBAAkB,WACrCuqB,EAAKg/C,gBACP,IACA5+E,KAAK23C,KAAKwvB,QAAQ9xD,GAAG,WAAW,WAC9BuqB,EAAKg/C,gBAAe,GACpBh/C,EAAK+X,KAAKwvB,QAAQzxD,KACpB,IACA1V,KAAK23C,KAAKwvB,QAAQ9xD,GAAG,gBAAgB,WAEnCuqB,EAAKk/C,mBACP,GAIF,GAEA,CAAAr4E,IAAA,aAAAnD,MAKA,SAAWwI,GACT,QAAgB7J,IAAZ6J,EACF,IAAgB,IAAZA,EACF9L,KAAK8L,QAAQqjC,SAAU,EACvBnvC,KAAK68E,gBAAiB,EACtB78E,KAAK4+E,sBACA,IAAgB,IAAZ9yE,EACT9L,KAAK8L,QAAQqjC,SAAU,EACvBnvC,KAAK68E,gBAAiB,EACtB78E,KAAK6+E,sBACA,CACL7+E,KAAK68E,gBAAiB,EACtB5W,GAAuB,CAAC,iBAAkBjmE,KAAK8L,QAASA,GACxDs6D,GAAapmE,KAAK8L,QAASA,EAAS,sBAEZ7J,IAApB6J,EAAQqjC,UACVnvC,KAAK8L,QAAQqjC,SAAU,IAGI,IAAzBnvC,KAAK8L,QAAQqjC,UACfnvC,KAAK68E,gBAAiB,EACtB78E,KAAK4+E,kBAGP,IAAMH,EAAOz+E,KAAK8L,QAAQ2yE,KACtBA,KACoB,iBAAXA,EAAKnxE,GAAkB+5D,GAAaoX,EAAKnxE,MAClDmxE,EAAKnxE,EAAI,IAEW,iBAAXmxE,EAAKntE,GAAkB+1D,GAAaoX,EAAKntE,MAClDmtE,EAAKntE,EAAI,IAKbtR,KAAKw+E,SAAWx+E,KAAK8L,QAAQ0yE,QAC/B,CAEFx+E,KAAKw+B,MACP,GAEA,CAAA/3B,IAAA,OAAAnD,MAGA,WACE,IAAIwI,EACwB,qBAAxB9L,KAAK8L,QAAQqyE,QACfryE,EAAU9L,KAAK8L,QAAQgyE,iBACvB99E,KAAK++E,YAAc,IAAIzC,GACrBt8E,KAAK23C,KACL33C,KAAK23E,YACL7rE,GAEF9L,KAAKg/E,YAAc,IAAI5D,GAAap7E,KAAK23C,KAAM33C,KAAK23E,YAAa7rE,GACjE9L,KAAKi/E,cAAgB,IAAIxC,GACvBz8E,KAAK23C,KACL33C,KAAK23E,YACL7rE,IAE+B,cAAxB9L,KAAK8L,QAAQqyE,QACtBryE,EAAU9L,KAAK8L,QAAQiyE,UACvB/9E,KAAK++E,YAAc,IAAIG,GAAUl/E,KAAK23C,KAAM33C,KAAK23E,YAAa7rE,GAC9D9L,KAAKg/E,YAAc,IAAI5D,GAAap7E,KAAK23C,KAAM33C,KAAK23E,YAAa7rE,GACjE9L,KAAKi/E,cAAgB,IAAI7C,GACvBp8E,KAAK23C,KACL33C,KAAK23E,YACL7rE,IAE+B,0BAAxB9L,KAAK8L,QAAQqyE,QACtBryE,EAAU9L,KAAK8L,QAAQkyE,sBACvBh+E,KAAK++E,YAAc,IAAII,GACrBn/E,KAAK23C,KACL33C,KAAK23E,YACL7rE,GAEF9L,KAAKg/E,YAAc,IAAInD,GACrB77E,KAAK23C,KACL33C,KAAK23E,YACL7rE,GAEF9L,KAAKi/E,cAAgB,IAAI7C,GACvBp8E,KAAK23C,KACL33C,KAAK23E,YACL7rE,KAIFA,EAAU9L,KAAK8L,QAAQ8xE,UACvB59E,KAAK++E,YAAc,IAAIrH,GACrB13E,KAAK23C,KACL33C,KAAK23E,YACL7rE,GAEF9L,KAAKg/E,YAAc,IAAI5D,GAAap7E,KAAK23C,KAAM33C,KAAK23E,YAAa7rE,GACjE9L,KAAKi/E,cAAgB,IAAI7C,GACvBp8E,KAAK23C,KACL33C,KAAK23E,YACL7rE,IAIJ9L,KAAKo/E,aAAetzE,CACtB,GAEA,CAAArF,IAAA,cAAAnD,MAGA,YAC8B,IAAxBtD,KAAK68E,iBAAoD,IAAzB78E,KAAK8L,QAAQqjC,SACJ,IAAvCnvC,KAAK8L,QAAQsyE,cAAcjvC,QAC7BnvC,KAAKq/E,aAELr/E,KAAKw9E,YAAa,EAClBx9E,KAAK29E,OAAQ,EACb39E,KAAK23C,KAAKwvB,QAAQlxD,KAAK,MAAO,GAAIjW,KAAK0+E,cACvC1+E,KAAK6+E,oBAGP7+E,KAAK29E,OAAQ,EACb39E,KAAK23C,KAAKwvB,QAAQlxD,KAAK,OAE3B,GAEA,CAAAxP,IAAA,kBAAAnD,MAGA,WASyC,IAAAwrB,GARX,IAAxB9uB,KAAK68E,iBAAoD,IAAzB78E,KAAK8L,QAAQqjC,SAC/CnvC,KAAKw9E,YAAa,EAGlBx9E,KAAKo9E,kBAAmB,EAGxBp9E,KAAK23C,KAAKwvB,QAAQlxD,KAAK,qBACGhU,IAAtBjC,KAAKs/E,eACPt/E,KAAKs/E,aAAeriC,GAAAnuB,EAAA9uB,KAAKu/E,gBAAcz+E,KAAAguB,EAAM9uB,MAC7CA,KAAK23C,KAAKwvB,QAAQ9xD,GAAG,aAAcrV,KAAKs/E,cACxCt/E,KAAK23C,KAAKwvB,QAAQlxD,KAAK,qBAGzBjW,KAAK23C,KAAKwvB,QAAQlxD,KAAK,UAE3B,GAEA,CAAAxP,IAAA,iBAAAnD,MAKA,WAA4B,IAAb2S,IAAIhV,UAAA0D,OAAA,QAAA1C,IAAAhB,UAAA,KAAAA,UAAA,GACjBjB,KAAKw9E,YAAa,GACL,IAATvnE,GACFjW,KAAKw/E,uBAEmBv9E,IAAtBjC,KAAKs/E,eACPt/E,KAAK23C,KAAKwvB,QAAQzxD,IAAI,aAAc1V,KAAKs/E,cACzCt/E,KAAKs/E,kBAAer9E,GACP,IAATgU,GACFjW,KAAK23C,KAAKwvB,QAAQlxD,KAAK,kBAG7B,GAEA,CAAAxP,IAAA,iBAAAnD,MAIA,WAEE,IAAMm8E,EAAYC,KAClB1/E,KAAK2/E,eACeD,KAAaD,EAIhB,GAAMz/E,KAAK88E,qBACA,IAAxB98E,KAAK4/E,kBACa,IAApB5/E,KAAKw9E,aAELx9E,KAAK2/E,cAGL3/E,KAAK4/E,gBAAiB,IAGA,IAApB5/E,KAAKw9E,YACPx9E,KAAK4+E,gBAET,GAEA,CAAAn4E,IAAA,kBAAAnD,MAMA,WAAmE,IAAA0hC,EAAAhlC,KAAnD6/E,EAAkB5+E,UAAA0D,OAAA1D,QAAAgB,IAAAhB,UAAAgB,GAAAhB,UAAG,GAAAjB,KAAK09E,yBAEtC19E,KAAK09E,wBAA0B,IACD,IAA9B19E,KAAKy9E,uBAELvU,IAAW,WACTlkC,EAAK2S,KAAKwvB,QAAQlxD,KAAK,aAAc,CACnCugC,WAAYqpC,IAEd76C,EAAKy4C,sBAAuB,EAC5Bz4C,EAAK04C,wBAA0B,CAChC,GAAE,EAEP,GAEA,CAAAj3E,IAAA,cAAAnD,MAKA,WACEtD,KAAKi/E,cAAca,QACnB9/E,KAAK++E,YAAYe,QACjB9/E,KAAKg/E,YAAYc,QACjB9/E,KAAK+/E,WACP,GAEA,CAAAt5E,IAAA,iBAAAnD,MAOA,YAIsC,IAAhCtD,KAAKggF,uBACPhgF,KAAKw+E,SAJQ,IAIYx+E,KAAKw+E,SAK1Bx+E,KAAKw+E,SATI,IASgBx+E,KAAK8L,QAAQ0yE,SACxCx+E,KAAKw+E,SAAWx+E,KAAK8L,QAAQ0yE,UAI7Bx+E,KAAKs9E,iBAAmB,EACxBt9E,KAAKw+E,SAAW7+E,KAAK+N,IAAI1N,KAAK8L,QAAQ0yE,SAAUx+E,KAAKw+E,SAf1C,KAkBjB,GAEA,CAAA/3E,IAAA,cAAAnD,MAKA,WAEE,GADAtD,KAAKigF,qBACmB,IAApBjgF,KAAKw9E,WAAT,CAGA,IAC4B,IAA1Bx9E,KAAKo9E,mBAC4B,IAAjCp9E,KAAKq9E,wBAGcr9E,KAAKs9E,gBAAkBt9E,KAAKu9E,kBAAqB,GAIlEv9E,KAAKw+E,SAAW,EAAIx+E,KAAKw+E,SACzBx+E,KAAKkgF,cACLlgF,KAAKmgF,SAGLngF,KAAKw+E,SAAW,GAAMx+E,KAAKw+E,SAG3Bx+E,KAAKkgF,cACLlgF,KAAKkgF,cAELlgF,KAAKogF,kBAELpgF,KAAKkgF,cAGPlgF,KAAKs9E,iBAAmB,OAGxBt9E,KAAKw+E,SAAWx+E,KAAK8L,QAAQ0yE,SAC7Bx+E,KAAKkgF,eAGiB,IAApBlgF,KAAKw9E,YAAqBx9E,KAAKmgF,SACnCngF,KAAK09E,yBApCyB,CAqChC,GAEA,CAAAj3E,IAAA,oBAAAnD,MAKA,WACEtD,KAAK23E,YAAY2B,OAAS,GAC1Bt5E,KAAK23E,YAAYS,mBAAqB,GACtCp4E,KAAK23E,YAAY6D,mBAAqB,GACtC,IAAM5sC,EAAQ5uC,KAAK23C,KAAK/I,MAClBK,EAAQjvC,KAAK23C,KAAK1I,MAGxB,IAAK,IAAMu2B,KAAU52B,EACfvsC,OAAOzB,UAAUH,eAAeK,KAAK8tC,EAAO42B,KACR,IAAlC52B,EAAM42B,GAAQ15D,QAAQ+4D,SACxB7kE,KAAK23E,YAAYS,mBAAmBtxE,KAAK8nC,EAAM42B,GAAQl+D,IAM7D,IAAK,IAAMouE,KAAUzmC,EACf5sC,OAAOzB,UAAUH,eAAeK,KAAKmuC,EAAOymC,KACR,IAAlCzmC,EAAMymC,GAAQ5pE,QAAQ+4D,SACxB7kE,KAAK23E,YAAY6D,mBAAmB10E,KAAKmoC,EAAMymC,GAAQpuE,IAM7D,IAAK,IAAIuH,EAAI,EAAGA,EAAI7O,KAAK23E,YAAYS,mBAAmBzzE,OAAQkK,IAAK,CACnE,IAAM22D,EAASxlE,KAAK23E,YAAYS,mBAAmBvpE,GACnD7O,KAAK23E,YAAY2B,OAAO9T,GAAU,CAAEl4D,EAAG,EAAGgE,EAAG,QAGDrP,IAAxCjC,KAAK23E,YAAYiF,WAAWpX,KAC9BxlE,KAAK23E,YAAYiF,WAAWpX,GAAU,CAAEl4D,EAAG,EAAGgE,EAAG,GAErD,CAGA,IAAK,IAAMk0D,KAAUxlE,KAAK23E,YAAYiF,gBACd36E,IAAlB2sC,EAAM42B,WACDxlE,KAAK23E,YAAYiF,WAAWpX,EAGzC,GAEA,CAAA/+D,IAAA,SAAAnD,MAGA,WACE,IAAM+8E,EAAU9zC,GAAYvsC,KAAKg9E,gBAC3BpuC,EAAQ5uC,KAAK23C,KAAK/I,MAClBguC,EAAa58E,KAAK23E,YAAYiF,WACpC58E,KAAKi9E,eAAiB,GAEtB,IAAK,IAAIpuE,EAAI,EAAGA,EAAIwxE,EAAQ17E,OAAQkK,IAAK,CACvC,IAAM22D,EAAS6a,EAAQxxE,QACD5M,IAAlB2sC,EAAM42B,IAC8B,IAAlC52B,EAAM42B,GAAQ15D,QAAQ+4D,UACxB7kE,KAAKi9E,eAAezX,GAAU,CAC5B8a,UAAW,CAAEhzE,EAAGshC,EAAM42B,GAAQl4D,EAAGgE,EAAGs9B,EAAM42B,GAAQl0D,IAEpDsrE,EAAWpX,GAAQl4D,EAAItN,KAAKg9E,eAAexX,GAAQ+a,GACnD3D,EAAWpX,GAAQl0D,EAAItR,KAAKg9E,eAAexX,GAAQgb,GACnD5xC,EAAM42B,GAAQl4D,EAAItN,KAAKg9E,eAAexX,GAAQl4D,EAC9CshC,EAAM42B,GAAQl0D,EAAItR,KAAKg9E,eAAexX,GAAQl0D,UAGzCtR,KAAKg9E,eAAexX,EAE/B,CACF,GAEA,CAAA/+D,IAAA,uBAAAnD,MAMA,WACE,IAAI8P,EAAIC,EACFu7B,EAAQ5uC,KAAK23C,KAAK/I,MAClB6xC,EAAYzgF,KAAKi9E,eAGvB,IAAK,IAAMzX,KAAUxlE,KAAKi9E,eACxB,GACE56E,OAAOzB,UAAUH,eAAeK,KAAKd,KAAKi9E,eAAgBzX,SACxCvjE,IAAlB2sC,EAAM42B,KAENpyD,EAAKw7B,EAAM42B,GAAQl4D,EAAImzE,EAAUjb,GAAQ8a,UAAUhzE,EACnD+F,EAAKu7B,EAAM42B,GAAQl0D,EAAImvE,EAAUjb,GAAQ8a,UAAUhvE,EAE5C3R,KAAK6T,KAAK7T,KAAKkuE,IAAIz6D,EAAI,GAAKzT,KAAKkuE,IAAIx6D,EAAI,IAV/B,IAaf,OAAO,EAIb,OAAO,CACT,GAEA,CAAA5M,IAAA,YAAAnD,MAGA,WAQE,IAPA,IAAMilE,EAAcvoE,KAAK23E,YAAYS,mBACjCsI,EAAkB,EAClBC,EAAsB,EAKjB9xE,EAAI,EAAGA,EAAI05D,EAAY5jE,OAAQkK,IAAK,CAC3C,IAAM22D,EAAS+C,EAAY15D,GACrB+xE,EAAe5gF,KAAK6gF,aAAarb,GAEvCkb,EAAkB/gF,KAAK+N,IAAIgzE,EAAiBE,GAC5CD,GAAuBC,CACzB,CAGA5gF,KAAKq9E,wBACHsD,EAAsBpY,EAAY5jE,OAZF,EAalC3E,KAAKw9E,WAAakD,EAAkB1gF,KAAK8L,QAAQoyE,WACnD,GAEA,CAAAz3E,IAAA,6BAAAnD,MASA,SAA2B25B,EAAGn6B,EAAGg+E,GAI/B7jD,IAFWn6B,EADA9C,KAAKo/E,aAAavB,QAAU5gD,GAClB6jD,EAEZ9gF,KAAKw+E,SAGd,IAAMuC,EAAO/gF,KAAK8L,QAAQmyE,aAAe,IAKzC,OAJIt+E,KAAKm2B,IAAImH,GAAK8jD,IAChB9jD,EAAIA,EAAI,EAAI8jD,GAAQA,GAGf9jD,CACT,GAEA,CAAAx2B,IAAA,eAAAnD,MAOA,SAAakiE,GACX,IAAM/qC,EAAOz6B,KAAK23C,KAAK/I,MAAM42B,GACvB39B,EAAQ7nC,KAAK23E,YAAY2B,OAAO9T,GAElCxlE,KAAK8L,QAAQ2yE,OACf52C,EAAMv6B,GAAKtN,KAAK8L,QAAQ2yE,KAAKnxE,EAC7Bu6B,EAAMv2B,GAAKtR,KAAK8L,QAAQ2yE,KAAKntE,GAG/B,IAAMsrB,EAAW58B,KAAK23E,YAAYiF,WAAWpX,GAqC7C,OAlCAxlE,KAAKg9E,eAAexX,GAAU,CAC5Bl4D,EAAGmtB,EAAKntB,EACRgE,EAAGmpB,EAAKnpB,EACRivE,GAAI3jD,EAAStvB,EACbkzE,GAAI5jD,EAAStrB,IAGc,IAAzBmpB,EAAK3uB,QAAQ8nC,MAAMtmC,GACrBsvB,EAAStvB,EAAItN,KAAKghF,2BAChBpkD,EAAStvB,EACTu6B,EAAMv6B,EACNmtB,EAAK3uB,QAAQy6D,MAEf9rC,EAAKntB,GAAKsvB,EAAStvB,EAAItN,KAAKw+E,WAE5B32C,EAAMv6B,EAAI,EACVsvB,EAAStvB,EAAI,IAGc,IAAzBmtB,EAAK3uB,QAAQ8nC,MAAMtiC,GACrBsrB,EAAStrB,EAAItR,KAAKghF,2BAChBpkD,EAAStrB,EACTu2B,EAAMv2B,EACNmpB,EAAK3uB,QAAQy6D,MAEf9rC,EAAKnpB,GAAKsrB,EAAStrB,EAAItR,KAAKw+E,WAE5B32C,EAAMv2B,EAAI,EACVsrB,EAAStrB,EAAI,GAGO3R,KAAK6T,KACzB7T,KAAKkuE,IAAIjxC,EAAStvB,EAAG,GAAK3N,KAAKkuE,IAAIjxC,EAAStrB,EAAG,GAGnD,GAEA,CAAA7K,IAAA,eAAAnD,MAMA,WACE,IAAMsrC,EAAQ5uC,KAAK23C,KAAK/I,MACxB,IAAK,IAAMtnC,KAAMsnC,EACf,GAAIvsC,OAAOzB,UAAUH,eAAeK,KAAK8tC,EAAOtnC,IAC1CsnC,EAAMtnC,GAAIgG,GAAKshC,EAAMtnC,GAAIgK,EAAG,CAC9B,IAAMsiC,EAAQhF,EAAMtnC,GAAIwE,QAAQ8nC,MAChC5zC,KAAKk9E,YAAY51E,GAAM,CAAEgG,EAAGsmC,EAAMtmC,EAAGgE,EAAGsiC,EAAMtiC,GAC9CsiC,EAAMtmC,GAAI,EACVsmC,EAAMtiC,GAAI,CACZ,CAGN,GAEA,CAAA7K,IAAA,sBAAAnD,MAKA,WACE,IAAMsrC,EAAQ5uC,KAAK23C,KAAK/I,MACxB,IAAK,IAAMtnC,KAAMsnC,EACXvsC,OAAOzB,UAAUH,eAAeK,KAAK8tC,EAAOtnC,SACjBrF,IAAzBjC,KAAKk9E,YAAY51E,KACnBsnC,EAAMtnC,GAAIwE,QAAQ8nC,MAAMtmC,EAAItN,KAAKk9E,YAAY51E,GAAIgG,EACjDshC,EAAMtnC,GAAIwE,QAAQ8nC,MAAMtiC,EAAItR,KAAKk9E,YAAY51E,GAAIgK,GAIvDtR,KAAKk9E,YAAc,EACrB,GAEA,CAAAz2E,IAAA,YAAAnD,MAKA,WAA8D,IAAAiiC,EAAAvlC,KAApDw2C,EAAUv1C,UAAA0D,OAAA,QAAA1C,IAAAhB,UAAAgB,GAAAhB,aAAGjB,KAAK8L,QAAQsyE,cAAc5nC,WACtB,iBAAfA,IACTA,EAAax2C,KAAK8L,QAAQsyE,cAAc5nC,WACxCnN,QAAQjpC,MACN,oFACAo2C,IAI+C,IAA/Cx2C,KAAK23E,YAAYS,mBAAmBzzE,QAMxC3E,KAAKo9E,iBAA2Bp9E,KAAK8L,QAAQsxE,iBAG7Cp9E,KAAK23C,KAAKwvB,QAAQlxD,KAAK,gBAEvBjW,KAAK4+E,iBACL5+E,KAAKw9E,YAAa,EAGlBx9E,KAAK23C,KAAKwvB,QAAQlxD,KAAK,gBACvBjW,KAAKihF,iBAAmBzqC,GAG4B,IAAhDx2C,KAAK8L,QAAQsyE,cAAcE,kBAC7Bt+E,KAAKkhF,eAEPlhF,KAAK09E,wBAA0B,EAE/BxU,IAAW,WAAA,OAAM3jC,EAAK47C,qBAAqB,GAAE,IAvB3CnhF,KAAK29E,OAAQ,CAwBjB,GAEA,CAAAl3E,IAAA,oBAAAnD,MAMA,WACE,OAAkC,IAA9BtD,KAAKy9E,uBAETz9E,KAAK23C,KAAKwvB,QAAQlxD,KAAK,oBACvBjW,KAAKy9E,sBAAuB,GACrB,EACT,GAEA,CAAAh3E,IAAA,sBAAAnD,MAKA,WAAsB,IAAA2lE,EAAAjpE,KACdohF,EAAU,WAAH,OACS,IAApBnY,EAAKuU,YACLvU,EAAKyU,wBAA0BzU,EAAKgY,gBAAgB,EAEhDI,EAAe,WACnBpY,EAAKtxB,KAAKwvB,QAAQlxD,KAAK,wBAAyB,CAC9CugC,WAAYyyB,EAAKyU,wBACjBvY,MAAO8D,EAAKgY,oBAIZjhF,KAAKigF,qBACPoB,IAIF,IADA,IAQex1C,EARX9G,EAAQ,EACLq8C,KAAar8C,EAAQ/kC,KAAK8L,QAAQsyE,cAAcC,gBACrDr+E,KAAK2/E,cACL56C,KAGFs8C,IAEID,KACFlY,GAAWjsB,GAAApR,EAAA7rC,KAAKmhF,qBAAmBrgF,KAAA+qC,EAAM7rC,MAAO,GAEhDA,KAAKshF,wBAET,GAEA,CAAA76E,IAAA,yBAAAnD,MAKA,WACEtD,KAAK23C,KAAKwvB,QAAQlxD,KAAK,iBACgB,IAAnCjW,KAAK8L,QAAQsyE,cAAcG,KAC7Bv+E,KAAK23C,KAAKwvB,QAAQlxD,KAAK,QAG2B,IAAhDjW,KAAK8L,QAAQsyE,cAAcE,kBAC7Bt+E,KAAKuhF,sBAGPvhF,KAAK23C,KAAKwvB,QAAQlxD,KAAK,+BACvBjW,KAAK23C,KAAKwvB,QAAQlxD,KAAK,mBAEC,IAApBjW,KAAKw9E,WACPx9E,KAAKw/E,kBAELx/E,KAAK6+E,kBAGP7+E,KAAK29E,OAAQ,CACf,GAIA,CAAAl3E,IAAA,cAAAnD,MAQA,SAAY+N,GACV,IAAK,IAAIxC,EAAI,EAAGA,EAAI7O,KAAK23E,YAAYS,mBAAmBzzE,OAAQkK,IAAK,CACnE,IAAMhB,EAAQ7N,KAAK23E,YAAYS,mBAAmBvpE,GAC5C4rB,EAAOz6B,KAAK23C,KAAK/I,MAAM/gC,GACvBg6B,EAAQ7nC,KAAK23E,YAAY2B,OAAOzrE,GAGhC2zE,EAAY7hF,KAAK6T,KAAK7T,KAAKkuE,IAAIhmC,EAAMv6B,EAAG,GAAK3N,KAAKkuE,IAAIhmC,EAAMv6B,EAAG,IAE/DgK,EAAO3X,KAAKgO,IAAIhO,KAAK+N,IAAI,EAAG8zE,GAAY,IACxCC,EAAY,EAAInqE,EAEhBq2B,EAAQ+zC,IACX,IAA0D,IAApD/hF,KAAKgO,IAAI,EAAGhO,KAAK+N,IAAI,EAPV,IAO2B8zE,KAAqB,IAClE,EACA,GAGIziE,EAAQ,CACZzR,EAAGmtB,EAAKntB,EAdK,GAcQu6B,EAAMv6B,EAC3BgE,EAAGmpB,EAAKnpB,EAfK,GAeQu2B,EAAMv2B,GAG7BD,EAAI+oD,UAAY9iD,EAChBjG,EAAIgpD,YAAc1sB,EAClBt8B,EAAIG,YACJH,EAAIW,OAAOyoB,EAAKntB,EAAGmtB,EAAKnpB,GACxBD,EAAIY,OAAO8M,EAAMzR,EAAGyR,EAAMzN,GAC1BD,EAAI4rD,SAEJ,IAAMlhC,EAAQp8B,KAAK67B,MAAMqM,EAAMv2B,EAAGu2B,EAAMv6B,GACxC+D,EAAIkoD,UAAY5rB,EAChB69B,GAAU93D,KAAKrC,EAAK,CAClBiH,KAAM,QACNyG,MAAOA,EACPgd,MAAOA,EACPp3B,OAAQ88E,IAEVpkB,GAAAhsD,GAAGvQ,KAAHuQ,EACF,CACF,KAACsrE,CAAA,CAv1BgB,GCbbgF,GAAW,WAIf,SAAAA,IAAc/9D,QAAA+9D,EAAC,CA6Gd,OA3GD5zD,GAAA4zD,EAAA,KAAA,CAAA,CAAAl7E,IAAA,WAAAnD,MAQA,SAAgBs+E,GAA8B,IAK1CnnD,EALsBonD,EAAa5gF,UAAA0D,OAAA,QAAA1C,IAAAhB,UAAA,GAAAA,UAAA,GAAG,GACpCu4E,EAAO,IACTE,GAAQ,IACRH,EAAO,IACPE,GAAQ,IAEV,GAAIoI,EAAcl9E,OAAS,EACzB,IAAK,IAAIkK,EAAI,EAAGA,EAAIgzE,EAAcl9E,OAAQkK,IAEpC0qE,GADJ9+C,EAAOmnD,EAASC,EAAchzE,KACd+jC,MAAMkpB,YAAYplB,OAChC6iC,EAAO9+C,EAAKmY,MAAMkpB,YAAYplB,MAE5B+iC,EAAOh/C,EAAKmY,MAAMkpB,YAAYpR,QAChC+uB,EAAOh/C,EAAKmY,MAAMkpB,YAAYpR,OAE5B8uB,EAAO/+C,EAAKmY,MAAMkpB,YAAYnlB,MAChC6iC,EAAO/+C,EAAKmY,MAAMkpB,YAAYnlB,KAE5B+iC,EAAOj/C,EAAKmY,MAAMkpB,YAAYpL,SAChCgpB,EAAOj/C,EAAKmY,MAAMkpB,YAAYpL,QAQpC,OAHa,MAAT6oB,IAA0B,MAAVE,GAA0B,MAATD,IAA0B,MAAVE,IAClDF,EAAO,EAAKE,EAAO,EAAKH,EAAO,EAAKE,EAAO,GAEvC,CAAEF,KAAMA,EAAME,KAAMA,EAAMD,KAAMA,EAAME,KAAMA,EACrD,GAEA,CAAAjzE,IAAA,eAAAnD,MAQA,SAAoBs+E,GAA8B,IAK9CnnD,EAL0BonD,EAAa5gF,UAAA0D,OAAA,QAAA1C,IAAAhB,UAAA,GAAAA,UAAA,GAAG,GACxCu4E,EAAO,IACTE,GAAQ,IACRH,EAAO,IACPE,GAAQ,IAEV,GAAIoI,EAAcl9E,OAAS,EACzB,IAAK,IAAIkK,EAAI,EAAGA,EAAIgzE,EAAcl9E,OAAQkK,IAEpC0qE,GADJ9+C,EAAOmnD,EAASC,EAAchzE,KACdvB,IACdisE,EAAO9+C,EAAKntB,GAEVmsE,EAAOh/C,EAAKntB,IACdmsE,EAAOh/C,EAAKntB,GAEVksE,EAAO/+C,EAAKnpB,IACdkoE,EAAO/+C,EAAKnpB,GAEVooE,EAAOj/C,EAAKnpB,IACdooE,EAAOj/C,EAAKnpB,GAQlB,OAHa,MAATioE,IAA0B,MAAVE,GAA0B,MAATD,IAA0B,MAAVE,IAClDF,EAAO,EAAKE,EAAO,EAAKH,EAAO,EAAKE,EAAO,GAEvC,CAAEF,KAAMA,EAAME,KAAMA,EAAMD,KAAMA,EAAME,KAAMA,EACrD,GAEA,CAAAjzE,IAAA,aAAAnD,MAKA,SAAkBy2E,GAChB,MAAO,CACLzsE,EAAG,IAAOysE,EAAMN,KAAOM,EAAMR,MAC7BjoE,EAAG,IAAOyoE,EAAML,KAAOK,EAAMP,MAEjC,GAEA,CAAA/yE,IAAA,eAAAnD,MAQA,SAAoB+qB,EAAM/V,GACxB,IAAMwpE,EAAgB,CAAA,EAStB,YARa7/E,IAATqW,GAA+B,SAATA,GACxBi/C,GAAWuqB,EAAezzD,EAAKviB,SAAS,GACxCg2E,EAAcx0E,EAAI+gB,EAAK/gB,EACvBw0E,EAAcxwE,EAAI+c,EAAK/c,EACvBwwE,EAAcC,oBAAsB1zD,EAAK4gB,MAAMtqC,QAE/C4yD,GAAWuqB,EAAezzD,EAAKviB,SAAS,GAEnCg2E,CACT,KAACH,CAAA,CAjHc,kXCFjB,IAMMK,YAAOC,GAAA/kC,GAAA8kC,EAAAC,GAAA,IAAAl4C,EAAA4zB,GAAAqkB,GASX,SAAAA,EACEl2E,EACA6rC,EACAisB,EACAC,EACAC,EACA/nB,GACA,IAAAnc,EAKyB,OALzBhc,QAAAo+D,IACApiD,EAAAmK,EAAAjpC,UAAMgL,EAAS6rC,EAAMisB,EAAWC,EAAWC,EAAe/nB,IAErDy7B,WAAY,EACjB53C,EAAKsiD,eAAiB,GACtBtiD,EAAKuiD,eAAiB,GAAGviD,CAC3B,CA2DC,OAzDD7R,GAAAi0D,EAAA,CAAA,CAAAv7E,IAAA,oBAAAnD,MAOA,SAAkB8+E,GAAgB,IAAAp9C,EAAAhlC,KAC1BqiF,EAAeriF,KAAK23C,KAAK/I,MAAMwzC,GACrC,QAA4CngF,IAAxCjC,KAAKkiF,eAAeE,GACtB,MAAM,IAAIl5C,MACR,iBAAmBk5C,EAAiB,2BAGxC,IAAKC,EAAa7K,UAChB,MAAM,IAAItuC,MAAM,iBAAmBk5C,EAAiB,4BAI/CpiF,KAAKkiF,eAAeE,GAC3BzyE,GAAQ0yE,EAAapzC,OAAO,SAAC7B,UACpBpI,EAAKm9C,eAAe/0C,EAAK9lC,GAClC,IAGAqI,GAAQ0yE,EAAaH,gBAAgB,SAACznD,EAAM+qC,GAC1CxgC,EAAKk9C,eAAe1c,GAAU/qC,CAChC,IACA4nD,EAAaH,eAAiB,GAE9BvyE,GAAQ0yE,EAAaF,gBAAgB,SAAC/0C,EAAMsoC,GAC1C1wC,EAAKm9C,eAAezM,GAAUtoC,CAChC,IACAi1C,EAAaF,eAAiB,GAG9BxyE,GAAQ0yE,EAAapzC,OAAO,SAACqzC,GAC3B3yE,GAAQq1B,EAAKiK,OAAO,SAACszC,GAAsB,IAAAzzD,EAAA+c,EAGnCh+B,EAAQkhC,GAAAjgB,EAAAyzD,EAAkBC,4BAA0B1hF,KAAAguB,EACxDwzD,EAAYh7E,KAEC,IAAXuG,IAEJ8B,GAAQ2yE,EAAYE,4BAA4B,SAACC,GAC/CF,EAAkBC,2BAA2B17E,KAAK27E,GAGlDz9C,EAAK2S,KAAK1I,MAAMwzC,GAAOC,iBAAmBH,EAAkBj7E,EAC9D,IAGAkqC,GAAA3F,EAAA02C,EAAkBC,4BAA0B1hF,KAAA+qC,EAAQh+B,EAAO,GAC7D,GACF,IACAw0E,EAAapzC,MAAQ,EACvB,KAAC+yC,CAAA,EAjFmBre,IC6FhBgf,GAAa,WAIjB,SAAAA,EAAYhrC,GAAM,IAAA/X,EAAA5/B,KAAA4jB,QAAA++D,GAChB3iF,KAAK23C,KAAOA,EACZ33C,KAAK4iF,eAAiB,GACtB5iF,KAAK6iF,eAAiB,GAEtB7iF,KAAK8L,QAAU,GACf9L,KAAK+7C,eAAiB,GACtBE,GAAcj8C,KAAK8L,QAAS9L,KAAK+7C,gBAEjC/7C,KAAK23C,KAAKwvB,QAAQ9xD,GAAG,cAAc,WACjCuqB,EAAKgjD,eAAiB,GACtBhjD,EAAKijD,eAAiB,EACxB,GACF,CAq6CC,OAn6CD90D,GAAA40D,EAAA,CAAA,CAAAl8E,IAAA,mBAAAnD,MAKA,SAAiBw/E,EAASh3E,QACR7J,IAAZ6gF,EACFA,EAAU9iF,KAAK+iF,cACa,WAAnB31D,GAAO01D,KAChBh3E,EAAU9L,KAAKgjF,cAAcF,GAC7BA,EAAU9iF,KAAK+iF,eAIjB,IADA,IAAME,EAAiB,GACdp0E,EAAI,EAAGA,EAAI7O,KAAK23C,KAAK4wB,YAAY5jE,OAAQkK,IAAK,CACrD,IAAM4rB,EAAOz6B,KAAK23C,KAAK/I,MAAM5uC,KAAK23C,KAAK4wB,YAAY15D,IAC/C4rB,EAAKwU,MAAMtqC,QAAUm+E,GACvBG,EAAen8E,KAAK2zB,EAAKnzB,GAE7B,CAEA,IAAK,IAAIuH,EAAI,EAAGA,EAAIo0E,EAAet+E,OAAQkK,IACzC7O,KAAKkjF,oBAAoBD,EAAep0E,GAAI/C,GAAS,GAGvD9L,KAAK23C,KAAKwvB,QAAQlxD,KAAK,eACzB,GAEA,CAAAxP,IAAA,UAAAnD,MAMA,WAA0C,IAAA0hC,EAAAhlC,KAAlC8L,EAAO7K,UAAA0D,OAAA,QAAA1C,IAAAhB,UAAA,GAAAA,UAAA,GAAG,CAAA,EAAIkiF,IAAWliF,UAAA0D,OAAA,QAAA1C,IAAAhB,UAAA,KAAAA,UAAA,GAC/B,QAA8BgB,IAA1B6J,EAAQs3E,cACV,MAAM,IAAIl6C,MACR,kFAKJp9B,EAAU9L,KAAKgjF,cAAcl3E,GAE7B,IAAMu3E,EAAgB,CAAA,EAChBC,EAAgB,CAAA,EAGtB3zE,GAAQ3P,KAAK23C,KAAK/I,OAAO,SAACnU,EAAM+qC,GAC1B/qC,EAAK3uB,UAAmD,IAAxCA,EAAQs3E,cAAc3oD,EAAK3uB,WAC7Cu3E,EAAc7d,GAAU/qC,EAGxB9qB,GAAQ8qB,EAAKwU,OAAO,SAAC7B,QACkBnrC,IAAjC+iC,EAAK69C,eAAez1C,EAAK9lC,MAC3Bg8E,EAAcl2C,EAAK9lC,IAAM8lC,EAE7B,IAEJ,IAEAptC,KAAKujF,SAASF,EAAeC,EAAex3E,EAASq3E,EACvD,GAEA,CAAA18E,IAAA,qBAAAnD,MAOA,SAAmBkgF,EAAW13E,GAA6B,IAAAy5B,EAAAvlC,KAApBmjF,IAAWliF,UAAA0D,OAAA,QAAA1C,IAAAhB,UAAA,KAAAA,UAAA,GAChD6K,EAAU9L,KAAKgjF,cAAcl3E,GAK7B,IAJA,IAEIshC,EAAM6B,EAAOw0C,EAFXC,EAAW,GACXC,EAAY,CAAA,EAElBhrB,EAAAA,WAEE,IAAM0qB,EAAgB,CAAA,EAChBC,EAAgB,CAAA,EAChB9d,EAASjgC,EAAKoS,KAAK4wB,YAAY15D,GAC/B4rB,EAAO8K,EAAKoS,KAAK/I,MAAM42B,GAG7B,QAA0BvjE,IAAtB0hF,EAAUne,GAAuB,CACnCie,EAAoB,EACpBx0C,EAAQ,GACR,IAAK,IAAIh/B,EAAI,EAAGA,EAAIwqB,EAAKwU,MAAMtqC,OAAQsL,IACrCm9B,EAAO3S,EAAKwU,MAAMh/B,QACmBhO,IAAjCsjC,EAAKs9C,eAAez1C,EAAK9lC,MACvB8lC,EAAK07B,OAAS17B,EAAK27B,QACrB0a,IAEFx0C,EAAMnoC,KAAKsmC,IAKf,GAAIq2C,IAAsBD,EAAW,CAcnC,IAbA,IAAMI,EAAqB,SAAUnpD,GACnC,QAC4Bx4B,IAA1B6J,EAAQs3E,eACkB,OAA1Bt3E,EAAQs3E,cAER,OAAO,EAGT,IAAMtB,EAAgBH,GAAYkC,aAAappD,GAC/C,OAAO3uB,EAAQs3E,cAActB,IAG3BgC,GAAsB,EACjB7zE,EAAI,EAAGA,EAAIg/B,EAAMtqC,OAAQsL,IAAK,CACrCm9B,EAAO6B,EAAMh/B,GACb,IAAM8zE,EAAcx+C,EAAKy+C,gBAAgB52C,EAAMo4B,GAE/C,IAAIoe,EAAmBnpD,GAKhB,CAELqpD,GAAsB,EACtB,KACF,CARER,EAAcl2C,EAAK9lC,IAAM8lC,EACzBi2C,EAAc7d,GAAU/qC,EACxB4oD,EAAcU,GAAex+C,EAAKoS,KAAK/I,MAAMm1C,GAC7CJ,EAAUne,IAAU,CAMxB,CAGA,GACEj5B,GAAY82C,GAAe1+E,OAAS,GACpC4nC,GAAY+2C,GAAe3+E,OAAS,IACZ,IAAxBm/E,EACA,CAMA,IAeMG,EAfkB,WACtB,IAAK,IAAI12E,EAAI,EAAGA,EAAIm2E,EAAS/+E,SAAU4I,EAErC,IAAK,IAAMuzE,KAAKuC,EACd,QAA6BphF,IAAzByhF,EAASn2E,GAAGqhC,MAAMkyC,GACpB,OAAO4C,EAASn2E,GAUH22E,GACrB,QAAqBjiF,IAAjBgiF,EAA4B,CAE9B,IAAK,IAAMnD,KAAKuC,OACgBphF,IAA1BgiF,EAAar1C,MAAMkyC,KACrBmD,EAAar1C,MAAMkyC,GAAKuC,EAAcvC,IAK1C,IAAK,IAAMA,KAAKwC,OACgBrhF,IAA1BgiF,EAAah1C,MAAM6xC,KACrBmD,EAAah1C,MAAM6xC,GAAKwC,EAAcxC,GAG5C,MAEE4C,EAAS58E,KAAK,CAAE8nC,MAAOy0C,EAAep0C,MAAOq0C,GAEjD,CACF,CACF,GAlGOz0E,EAAI,EAAGA,EAAI7O,KAAK23C,KAAK4wB,YAAY5jE,OAAQkK,IAAG8pD,IAqGrD,IAAK,IAAI9pD,EAAI,EAAGA,EAAI60E,EAAS/+E,OAAQkK,IACnC7O,KAAKujF,SAASG,EAAS70E,GAAG+/B,MAAO80C,EAAS70E,GAAGogC,MAAOnjC,GAAS,IAG3C,IAAhBq3E,GACFnjF,KAAK23C,KAAKwvB,QAAQlxD,KAAK,eAE3B,GAEA,CAAAxP,IAAA,kBAAAnD,MAMA,SAAgBwI,GAA6B,IAApBq3E,IAAWliF,UAAA0D,OAAA,QAAA1C,IAAAhB,UAAA,KAAAA,UAAA,GAClCjB,KAAKmkF,mBAAmB,EAAGr4E,EAASq3E,EACtC,GAEA,CAAA18E,IAAA,iBAAAnD,MAMA,SAAewI,GAA6B,IAApBq3E,IAAWliF,UAAA0D,OAAA,QAAA1C,IAAAhB,UAAA,KAAAA,UAAA,GACjCjB,KAAKmkF,mBAAmB,EAAGr4E,EAASq3E,EACtC,GAEA,CAAA18E,IAAA,sBAAAnD,MAOA,SAAoBkiE,EAAQ15D,GAA6B,IAAAgjB,EAApBq0D,IAAWliF,UAAA0D,OAAA,QAAA1C,IAAAhB,UAAA,KAAAA,UAAA,GAE9C,QAAegB,IAAXujE,EACF,MAAM,IAAIt8B,MAAM,8CAElB,QAAgCjnC,IAA5BjC,KAAK23C,KAAK/I,MAAM42B,GAClB,MAAM,IAAIt8B,MACR,2DAIJ,IAAMzO,EAAOz6B,KAAK23C,KAAK/I,MAAM42B,QAEWvjE,KADxC6J,EAAU9L,KAAKgjF,cAAcl3E,EAAS2uB,IAC1B2pD,sBAAsB92E,IAChCxB,EAAQs4E,sBAAsB92E,EAAImtB,EAAKntB,QAEDrL,IAApC6J,EAAQs4E,sBAAsB9yE,IAChCxF,EAAQs4E,sBAAsB9yE,EAAImpB,EAAKnpB,QAEGrP,IAAxC6J,EAAQs4E,sBAAsBxwC,QAChC9nC,EAAQs4E,sBAAsBxwC,MAAQ,GACtC9nC,EAAQs4E,sBAAsBxwC,MAAMtmC,EAAImtB,EAAK3uB,QAAQ8nC,MAAMtmC,EAC3DxB,EAAQs4E,sBAAsBxwC,MAAMtiC,EAAImpB,EAAK3uB,QAAQ8nC,MAAMtiC,GAG7D,IAAM+xE,EAAgB,CAAA,EAChBC,EAAgB,CAAA,EAChBe,EAAe5pD,EAAKnzB,GACpBg9E,EAAsB3C,GAAYkC,aAAappD,GACrD4oD,EAAcgB,GAAgB5pD,EAG9B,IAAK,IAAI5rB,EAAI,EAAGA,EAAI4rB,EAAKwU,MAAMtqC,OAAQkK,IAAK,CAC1C,IAAMu+B,EAAO3S,EAAKwU,MAAMpgC,GACxB,QAAqC5M,IAAjCjC,KAAK6iF,eAAez1C,EAAK9lC,IAAmB,CAC9C,IAAMy8E,EAAc/jF,KAAKgkF,gBAAgB52C,EAAMi3C,GAG/C,QAAyCpiF,IAArCjC,KAAK4iF,eAAemB,GACtB,GAAIA,IAAgBM,EAClB,QAA8BpiF,IAA1B6J,EAAQs3E,cACVE,EAAcl2C,EAAK9lC,IAAM8lC,EACzBi2C,EAAcU,GAAe/jF,KAAK23C,KAAK/I,MAAMm1C,OACxC,CAEL,IAAMQ,EAAqB5C,GAAYkC,aACrC7jF,KAAK23C,KAAK/I,MAAMm1C,KAMV,IAHNj4E,EAAQs3E,cACNkB,EACAC,KAGFjB,EAAcl2C,EAAK9lC,IAAM8lC,EACzBi2C,EAAcU,GAAe/jF,KAAK23C,KAAK/I,MAAMm1C,GAEjD,MAGAT,EAAcl2C,EAAK9lC,IAAM8lC,CAG/B,CACF,CACA,IAAMo3C,EAAen4C,GAAAvd,EAAAyd,GAAY82C,IAAcviF,KAAAguB,GAAK,SAAU21D,GAC5D,OAAOpB,EAAcoB,GAAWn9E,EAClC,IAEA,IAAK,IAAMo9E,KAAgBrB,EACzB,GAAKhhF,OAAOzB,UAAUH,eAAeK,KAAKuiF,EAAeqB,GAIzD,IADA,IAAMD,EAAYpB,EAAcqB,GACvBpzE,EAAI,EAAGA,EAAImzE,EAAUx1C,MAAMtqC,OAAQ2M,IAAK,CAC/C,IAAMqzE,EAAYF,EAAUx1C,MAAM39B,GAEhCy9B,GAAAy1C,GAAY1jF,KAAZ0jF,EAAqBxkF,KAAKgkF,gBAAgBW,EAAWF,EAAUn9E,MAC9D,IAEDg8E,EAAcqB,EAAUr9E,IAAMq9E,EAElC,CAEF3kF,KAAKujF,SAASF,EAAeC,EAAex3E,EAASq3E,EACvD,GAEA,CAAA18E,IAAA,sBAAAnD,MAUA,SACE+/E,EACAC,EACAc,EACAQ,GAQA,IANA,IAAIx3C,EAAM22C,EAAaU,EAAW3b,EAAMC,EAAQ8b,EAI1CC,EAAYv4C,GAAY82C,GACxB0B,EAAc,GACXl2E,EAAI,EAAGA,EAAIi2E,EAAUngF,OAAQkK,IAAK,CAEzC41E,EAAYpB,EADZU,EAAce,EAAUj2E,IAIxB,IAAK,IAAIoB,EAAI,EAAGA,EAAIw0E,EAAUx1C,MAAMtqC,OAAQsL,IAC1Cm9B,EAAOq3C,EAAUx1C,MAAMh/B,QAEchO,IAAjCjC,KAAK6iF,eAAez1C,EAAK9lC,MAEvB8lC,EAAK07B,MAAQ17B,EAAK27B,OACpBua,EAAcl2C,EAAK9lC,IAAM8lC,EAGrBA,EAAK07B,MAAQib,GAEfjb,EAAOsb,EAAsB98E,GAE7Bu9E,EADA9b,EAAS37B,EAAK27B,SAGdD,EAAO17B,EAAK07B,KACZC,EAASqb,EAAsB98E,GAC/Bu9E,EAAc/b,QAKiB7mE,IAA/BohF,EAAcwB,IAChBE,EAAYj+E,KAAK,CAAEsmC,KAAMA,EAAM27B,OAAQA,EAAQD,KAAMA,IAI7D,CAsCA,IA5BA,IAAMkc,EAAW,GAQXC,EAAa,SAAUC,GAC3B,IAAK,IAAIj1E,EAAI,EAAGA,EAAI+0E,EAASrgF,OAAQsL,IAAK,CACxC,IAAMk1E,EAAUH,EAAS/0E,GAGnBm1E,EACJF,EAAYnc,SAAWoc,EAAQpc,QAC/Bmc,EAAYpc,OAASqc,EAAQrc,KACzBuc,EACJH,EAAYnc,SAAWoc,EAAQrc,MAC/Boc,EAAYpc,OAASqc,EAAQpc,OAE/B,GAAIqc,GAAoBC,EACtB,OAAOF,CAEX,CAEA,OAAO,MAGAl1E,EAAI,EAAGA,EAAI80E,EAAYpgF,OAAQsL,IAAK,CAC3C,IAAMi1E,EAAcH,EAAY90E,GAC1Bm9B,EAAO83C,EAAY93C,KACrB+3C,EAAUF,EAAWC,GAET,OAAZC,GAEFA,EAAUnlF,KAAKslF,qBACbJ,EAAYnc,OACZmc,EAAYpc,KACZ17B,EACAw3C,GAGFI,EAASl+E,KAAKq+E,IAEdA,EAAQ3C,2BAA2B17E,KAAKsmC,EAAK9lC,IAI/CtH,KAAK23C,KAAK1I,MAAM7B,EAAK9lC,IAAIo7E,iBAAmByC,EAAQ79E,GAGpDtH,KAAKulF,mBAAmBn4C,GACxBA,EAAK8oB,WAAW,CAAE2O,SAAS,GAC7B,CACF,GAEA,CAAAp+D,IAAA,gBAAAnD,MAQA,WAA4B,IAAdwI,EAAO7K,UAAA0D,OAAA,QAAA1C,IAAAhB,UAAA,GAAAA,UAAA,GAAG,CAAA,EAQtB,YAPsCgB,IAAlC6J,EAAQ84E,wBACV94E,EAAQ84E,sBAAwB,SAEI3iF,IAAlC6J,EAAQs4E,wBACVt4E,EAAQs4E,sBAAwB,IAG3Bt4E,CACT,GAEA,CAAArF,IAAA,WAAAnD,MAQA,SAAS+/E,EAAeC,EAAex3E,GAA6B,IAApBq3E,IAAWliF,UAAA0D,OAAA,QAAA1C,IAAAhB,UAAA,KAAAA,UAAA,GAEnDukF,EAAmB,GACzB,IAAK,IAAMhgB,KAAU6d,EACfhhF,OAAOzB,UAAUH,eAAeK,KAAKuiF,EAAe7d,SAClBvjE,IAAhCjC,KAAK4iF,eAAepd,IACtBggB,EAAiB1+E,KAAK0+D,GAK5B,IAAK,IAAIj4D,EAAI,EAAGA,EAAIi4E,EAAiB7gF,SAAU4I,SACtC81E,EAAcmC,EAAiBj4E,IAIxC,GAAyC,GAArCg/B,GAAY82C,GAAe1+E,SAMQ,GAArC4nC,GAAY82C,GAAe1+E,QAC6B,GAAxDmH,EAAQs4E,sBAAsBqB,wBAFhC,CAOA,IAAIrB,EAAwB7sB,GAAW,CAAE,EAAEzrD,EAAQs4E,uBAGnD,QAAkCniF,IAA9B6J,EAAQ45E,kBAAiC,CAE3C,IAAMC,EAAoB,GAC1B,IAAK,IAAMngB,KAAU6d,EACnB,GAAIhhF,OAAOzB,UAAUH,eAAeK,KAAKuiF,EAAe7d,GAAS,CAC/D,IAAMsc,EAAgBH,GAAYkC,aAAaR,EAAc7d,IAC7DmgB,EAAkB7+E,KAAKg7E,EACzB,CAIF,IAAM8D,EAAoB,GAC1B,IAAK,IAAMlQ,KAAU4N,EACnB,GAAIjhF,OAAOzB,UAAUH,eAAeK,KAAKwiF,EAAe5N,IAEzB,iBAAzBA,EAAO7jC,OAAO,EAAG,IAAwB,CAC3C,IAAMiwC,EAAgBH,GAAYkC,aAChCP,EAAc5N,GACd,QAEFkQ,EAAkB9+E,KAAKg7E,EACzB,CASJ,KALAsC,EAAwBt4E,EAAQ45E,kBAC9BtB,EACAuB,EACAC,IAGA,MAAM,IAAI18C,MACR,6DAGN,MAGiCjnC,IAA7BmiF,EAAsB98E,KACxB88E,EAAsB98E,GAAK,WAAa+mD,MAE1C,IAAMw3B,EAAYzB,EAAsB98E,QAEJrF,IAAhCmiF,EAAsB1xC,QACxB0xC,EAAsB1xC,MAAQ,WAIhC,IAAIx7B,OAAMjV,OACsBA,IAA5BmiF,EAAsB92E,IACxB4J,EAAMlX,KAAK8lF,oBAAoBzC,GAC/Be,EAAsB92E,EAAI4J,EAAI5J,QAEArL,IAA5BmiF,EAAsB9yE,SACZrP,IAARiV,IACFA,EAAMlX,KAAK8lF,oBAAoBzC,IAEjCe,EAAsB9yE,EAAI4F,EAAI5F,GAIhC8yE,EAAsB98E,GAAKu+E,EAI3B,IAAME,EAAc/lF,KAAK23C,KAAKkvB,UAAUC,WACtCsd,EACApC,IAEF+D,EAAY7D,eAAiBmB,EAC7B0C,EAAY5D,eAAiBmB,EAE7ByC,EAAYnB,sBAAwB94E,EAAQ84E,sBAG5C5kF,KAAK23C,KAAK/I,MAAMw1C,EAAsB98E,IAAMy+E,EAE5C/lF,KAAKgmF,cACH3C,EACAC,EACAc,EACAt4E,EAAQ84E,uBAIVR,EAAsB98E,QAAKrF,GAGP,IAAhBkhF,GACFnjF,KAAK23C,KAAKwvB,QAAQlxD,KAAK,eA9FzB,CAgGF,GAEA,CAAAxP,IAAA,qBAAAnD,MAKA,SAAmB8pC,QACoBnrC,IAAjCjC,KAAK6iF,eAAez1C,EAAK9lC,MAC3BtH,KAAK6iF,eAAez1C,EAAK9lC,IAAM,CAAEu9D,QAASz3B,EAAKthC,QAAQ+4D,SAE3D,GAEA,CAAAp+D,IAAA,eAAAnD,MAKA,SAAa8pC,GACX,IAAM64C,EAAkBjmF,KAAK6iF,eAAez1C,EAAK9lC,SACzBrF,IAApBgkF,IACF74C,EAAK8oB,WAAW,CAAE2O,QAASohB,EAAgBphB,iBACpC7kE,KAAK6iF,eAAez1C,EAAK9lC,IAEpC,GAEA,CAAAb,IAAA,YAAAnD,MAMA,SAAUkiE,GACR,YAAgCvjE,IAA5BjC,KAAK23C,KAAK/I,MAAM42B,IAC2B,IAAtCxlE,KAAK23C,KAAK/I,MAAM42B,GAAQgS,WAE/BnuC,QAAQjpC,MAAM,yBACP,EAEX,GAEA,CAAAqG,IAAA,sBAAAnD,MAOA,SAAoB+/E,GAOlB,IANA,IAKI5oD,EALEqqD,EAAYv4C,GAAY82C,GAC1B9J,EAAO8J,EAAcyB,EAAU,IAAIx3E,EACnCmsE,EAAO4J,EAAcyB,EAAU,IAAIx3E,EACnCksE,EAAO6J,EAAcyB,EAAU,IAAIxzE,EACnCooE,EAAO2J,EAAcyB,EAAU,IAAIxzE,EAE9BzC,EAAI,EAAGA,EAAIi2E,EAAUngF,OAAQkK,IAEpC0qE,GADA9+C,EAAO4oD,EAAcyB,EAAUj2E,KACnBvB,EAAIisE,EAAO9+C,EAAKntB,EAAIisE,EAChCE,EAAOh/C,EAAKntB,EAAImsE,EAAOh/C,EAAKntB,EAAImsE,EAChCD,EAAO/+C,EAAKnpB,EAAIkoE,EAAO/+C,EAAKnpB,EAAIkoE,EAChCE,EAAOj/C,EAAKnpB,EAAIooE,EAAOj/C,EAAKnpB,EAAIooE,EAGlC,MAAO,CAAEpsE,EAAG,IAAOisE,EAAOE,GAAOnoE,EAAG,IAAOkoE,EAAOE,GACpD,GAEA,CAAAjzE,IAAA,cAAAnD,MAOA,SAAY4iF,EAAep6E,GAA6B,IAApBq3E,IAAWliF,UAAA0D,OAAA,QAAA1C,IAAAhB,UAAA,KAAAA,UAAA,GAE7C,QAAsBgB,IAAlBikF,EACF,MAAM,IAAIh9C,MAAM,6CAGlB,IAAM68C,EAAc/lF,KAAK23C,KAAK/I,MAAMs3C,GAEpC,QAAoBjkF,IAAhB8jF,EACF,MAAM,IAAI78C,MACR,6DAGJ,IAC4B,IAA1B68C,EAAYvO,gBACmBv1E,IAA/B8jF,EAAY7D,qBACmBjgF,IAA/B8jF,EAAY5D,eAEZ,MAAM,IAAIj5C,MAAM,YAAcg9C,EAAgB,4BAIhD,IAAM/8C,EAAQnpC,KAAKmmF,SAASD,GACtBE,EAAcr3C,GAAA5F,GAAKroC,KAALqoC,EAAc+8C,GAAiB,EACnD,GAAIE,GAAe,EAAG,CAEpB,IAAMC,EAAsBl9C,EAAMi9C,GAYlC,OAX0BpmF,KAAK23C,KAAK/I,MAAMy3C,GAGxBC,kBAAkBJ,UAG7BlmF,KAAK23C,KAAK/I,MAAMs3C,SACH,IAAhB/C,GACFnjF,KAAK23C,KAAKwvB,QAAQlxD,KAAK,gBAI3B,CAGA,IAAMisE,EAAiB6D,EAAY7D,eAC7BC,EAAiB4D,EAAY5D,eAGnC,QACclgF,IAAZ6J,QAC4B7J,IAA5B6J,EAAQy6E,iBAC2B,mBAA5Bz6E,EAAQy6E,gBACf,CACA,IAAMjG,EAAY,CAAA,EACZkG,EAAkB,CAAEl5E,EAAGy4E,EAAYz4E,EAAGgE,EAAGy0E,EAAYz0E,GAC3D,IAAK,IAAMk0D,KAAU0c,EACnB,GAAI7/E,OAAOzB,UAAUH,eAAeK,KAAKohF,EAAgB1c,GAAS,CAChE,IAAMkV,EAAgB16E,KAAK23C,KAAK/I,MAAM42B,GACtC8a,EAAU9a,GAAU,CAAEl4D,EAAGotE,EAAcptE,EAAGgE,EAAGopE,EAAcppE,EAC7D,CAEF,IAAMm1E,EAAe36E,EAAQy6E,gBAAgBC,EAAiBlG,GAE9D,IAAK,IAAM9a,KAAU0c,EACnB,GAAI7/E,OAAOzB,UAAUH,eAAeK,KAAKohF,EAAgB1c,GAAS,CAChE,IAAMkV,EAAgB16E,KAAK23C,KAAK/I,MAAM42B,QACTvjE,IAAzBwkF,EAAajhB,KACfkV,EAAcptE,OACerL,IAA3BwkF,EAAajhB,GAAQl4D,EACjBy4E,EAAYz4E,EACZm5E,EAAajhB,GAAQl4D,EAC3BotE,EAAcppE,OACerP,IAA3BwkF,EAAajhB,GAAQl0D,EACjBy0E,EAAYz0E,EACZm1E,EAAajhB,GAAQl0D,EAE/B,CAEJ,MAEE3B,GAAQuyE,GAAgB,SAAUxH,IAEM,IAAlCA,EAAc5uE,QAAQ8nC,MAAMtmC,IAC9BotE,EAAcptE,EAAIy4E,EAAYz4E,IAEM,IAAlCotE,EAAc5uE,QAAQ8nC,MAAMtiC,IAC9BopE,EAAcppE,EAAIy0E,EAAYz0E,EAElC,IAIF,IAAK,IAAMk0D,KAAU0c,EACnB,GAAI7/E,OAAOzB,UAAUH,eAAeK,KAAKohF,EAAgB1c,GAAS,CAChE,IAAMkV,EAAgB16E,KAAK23C,KAAK/I,MAAM42B,GAGtCkV,EAAc6F,GAAKwF,EAAYxF,GAC/B7F,EAAc8F,GAAKuF,EAAYvF,GAE/B9F,EAAcxkB,WAAW,CAAE2O,SAAS,WAE7B7kE,KAAK4iF,eAAepd,EAC7B,CAKF,IADA,IAAMkhB,EAAmB,GAChB73E,EAAI,EAAGA,EAAIk3E,EAAY92C,MAAMtqC,OAAQkK,IAC5C63E,EAAiB5/E,KAAKi/E,EAAY92C,MAAMpgC,IAI1C,IAAK,IAAIA,EAAI,EAAGA,EAAI63E,EAAiB/hF,OAAQkK,IAAK,CAKhD,IAJA,IAAMu+B,EAAOs5C,EAAiB73E,GACxBg2E,EAAc7kF,KAAKgkF,gBAAgB52C,EAAM84C,GACzCS,EAAY3mF,KAAK4iF,eAAeiC,GAE7B50E,EAAI,EAAGA,EAAIm9B,EAAKo1C,2BAA2B79E,OAAQsL,IAAK,CAC/D,IAAM22E,EAAax5C,EAAKo1C,2BAA2BvyE,GAC7C42E,EAAe7mF,KAAK23C,KAAK1I,MAAM23C,GACrC,QAAqB3kF,IAAjB4kF,EAGJ,QAAkB5kF,IAAd0kF,EAAyB,CAE3B,IAAMG,EAAe9mF,KAAK23C,KAAK/I,MAAM+3C,EAAUd,WAC/CiB,EAAa3E,eAAe0E,EAAav/E,IAAMu/E,SAGxC1E,EAAe0E,EAAav/E,IAGnC,IAAIyhE,EAAS8d,EAAa9d,OACtBD,EAAO+d,EAAa/d,KACpB+d,EAAa/d,MAAQ+b,EACvB/b,EAAO6d,EAAUd,UAEjB9c,EAAS4d,EAAUd,UAIrB7lF,KAAKslF,qBACHvc,EACAD,EACA+d,EACAC,EAAalC,sBACb,CAAEhgB,QAAQ,EAAOC,SAAS,GAE9B,MACE7kE,KAAK+mF,aAAaF,EAEtB,CAEAz5C,EAAKnF,QACP,CAGA,IAAK,IAAMytC,KAAUyM,EACf9/E,OAAOzB,UAAUH,eAAeK,KAAKqhF,EAAgBzM,IACvD11E,KAAK+mF,aAAa5E,EAAezM,WAK9B11E,KAAK23C,KAAK/I,MAAMs3C,IAEH,IAAhB/C,GACFnjF,KAAK23C,KAAKwvB,QAAQlxD,KAAK,eAE3B,GAEA,CAAAxP,IAAA,oBAAAnD,MAKA,SAAkBuiF,GAChB,IAAMmB,EAAa,GACnB,IAAkC,IAA9BhnF,KAAKw3E,UAAUqO,GAAqB,CACtC,IAAM3D,EAAiBliF,KAAK23C,KAAK/I,MAAMi3C,GAAW3D,eAClD,IAAK,IAAM1c,KAAU0c,EACf7/E,OAAOzB,UAAUH,eAAeK,KAAKohF,EAAgB1c,IACvDwhB,EAAWlgF,KAAK9G,KAAK23C,KAAK/I,MAAM42B,GAAQl+D,GAG9C,CAEA,OAAO0/E,CACT,GAEA,CAAAvgF,IAAA,WAAAnD,MAQA,SAASkiE,GAMP,IALA,IAGI/qC,EAHE0O,EAAQ,GAEV4W,EAAU,OAGyB99C,IAAhCjC,KAAK4iF,eAAepd,IAAyBzlB,EAJxC,KAIuD,CAEjE,QAAa99C,KADbw4B,EAAOz6B,KAAK23C,KAAK/I,MAAM42B,IACC,MAAO,GAC/Br8B,EAAMriC,KAAK2zB,EAAKnzB,IAEhBk+D,EAASxlE,KAAK4iF,eAAepd,GAAQqgB,UACrC9lC,GACF,CAGA,YAAa99C,KADbw4B,EAAOz6B,KAAK23C,KAAK/I,MAAM42B,IACQ,IAC/Br8B,EAAMriC,KAAK2zB,EAAKnzB,IAEhBmgD,GAAAte,GAAKroC,KAALqoC,GACOA,EACT,GAEA,CAAA1iC,IAAA,sBAAAnD,MAMA,SAAoB2jF,EAAiBrhB,GACnC,QAAwB3jE,IAApBglF,EACF,MAAM,IAAI/9C,MAAM,uDAElB,QAAmBjnC,IAAf2jE,EACF,MAAM,IAAI18B,MAAM,kDAElB,QAAyCjnC,IAArCjC,KAAK23C,KAAK/I,MAAMq4C,GAClB,MAAM,IAAI/9C,MACR,uEAIJlpC,KAAK23C,KAAK/I,MAAMq4C,GAAiB/wB,WAAW0P,GAC5C5lE,KAAK23C,KAAKwvB,QAAQlxD,KAAK,eACzB,GAEA,CAAAxP,IAAA,aAAAnD,MAMA,SAAW4jF,EAAathB,GACtB,QAAoB3jE,IAAhBilF,EACF,MAAM,IAAIh+C,MAAM,0CAElB,QAAmBjnC,IAAf2jE,EACF,MAAM,IAAI18B,MAAM,yCAElB,QAAqCjnC,IAAjCjC,KAAK23C,KAAK1I,MAAMi4C,GAClB,MAAM,IAAIh+C,MAAM,0DAIlB,IADA,IAAMi+C,EAAannF,KAAKonF,kBAAkBF,GACjCr4E,EAAI,EAAGA,EAAIs4E,EAAWxiF,OAAQkK,IAAK,CAC7B7O,KAAK23C,KAAK1I,MAAMk4C,EAAWt4E,IACnCqnD,WAAW0P,EAClB,CACA5lE,KAAK23C,KAAKwvB,QAAQlxD,KAAK,eACzB,GAEA,CAAAxP,IAAA,oBAAAnD,MAMA,SAAkBoyE,GAKhB,IAJA,IAAMvsC,EAAQ,GAEV4W,EAAU,OAGD99C,IAAXyzE,QAC4BzzE,IAA5BjC,KAAK23C,KAAK1I,MAAMymC,IAChB31B,EANU,KAQV5W,EAAMriC,KAAK9G,KAAK23C,KAAK1I,MAAMymC,GAAQpuE,IACnCouE,EAAS11E,KAAK23C,KAAK1I,MAAMymC,GAAQgN,iBACjC3iC,IAGF,OADA0H,GAAAte,GAAKroC,KAALqoC,GACOA,CACT,GAEA,CAAA1iC,IAAA,cAAAnD,MAQA,SAAY+jF,GAEV,OAAOrnF,KAAKsnF,aAAaD,GAAiB,EAC5C,GAEA,CAAA5gF,IAAA,eAAAnD,MAMA,SAAa+jF,GAOX,IANA,IAAME,EAAc,CAACF,GACfG,EAAU,GACVC,EAAW,GAEb1nC,EAAU,EAEPwnC,EAAY5iF,OAAS,GAAKo7C,EAHrB,KAGoC,CAC9C,IAAM2nC,EAASH,EAAYx1C,MAC3B,QAAe9vC,IAAXylF,EAAJ,CACA,IAAMC,EAAW3nF,KAAK23C,KAAK1I,MAAMy4C,GACjC,QAAiBzlF,IAAb0lF,EAAJ,CACA5nC,IAEA,IAAM6nC,EAAeD,EAASnF,2BAC9B,QAAqBvgF,IAAjB2lF,EAEFH,EAAS3gF,KAAK4gF,QAGd,IAAK,IAAI74E,EAAI,EAAGA,EAAI+4E,EAAajjF,SAAUkK,EAAG,CAC5C,IAAMg5E,EAAcD,EAAa/4E,IAKQ,IAAvCkgC,GAAAw4C,GAAWzmF,KAAXymF,EAAoBK,KACe,IAAnC74C,GAAAy4C,GAAO1mF,KAAP0mF,EAAgBI,IAKlBL,EAAYzgF,KAAK+gF,EACnB,CAGFL,EAAQ1gF,KAAK4gF,EAzBe,CAFO,CA4BrC,CAEA,OAAOD,CACT,GAEA,CAAAhhF,IAAA,kBAAAnD,MAQA,SAAgB8pC,EAAMo4B,GACpB,OAAIp4B,EAAK07B,MAAQtD,EACRp4B,EAAK07B,MACH17B,EAAK27B,OACP37B,EAAK27B,OAIhB,GAEA,CAAAtiE,IAAA,cAAAnD,MAOA,WAME,IALA,IAAIwkF,EAAU,EACVC,EAAiB,EACjBC,EAAa,EACbC,EAAa,EAERp5E,EAAI,EAAGA,EAAI7O,KAAK23C,KAAK4wB,YAAY5jE,OAAQkK,IAAK,CACrD,IAAM4rB,EAAOz6B,KAAK23C,KAAK/I,MAAM5uC,KAAK23C,KAAK4wB,YAAY15D,IAC/C4rB,EAAKwU,MAAMtqC,OAASsjF,IACtBA,EAAaxtD,EAAKwU,MAAMtqC,QAE1BmjF,GAAWrtD,EAAKwU,MAAMtqC,OACtBojF,GAAkBpoF,KAAKkuE,IAAIpzC,EAAKwU,MAAMtqC,OAAQ,GAC9CqjF,GAAc,CAChB,CACAF,GAAoBE,EAGpB,IAAME,GAFNH,GAAkCC,GAEAroF,KAAKkuE,IAAIia,EAAS,GAC9CK,EAAoBxoF,KAAK6T,KAAK00E,GAEhCE,EAAezoF,KAAKyN,MAAM06E,EAAU,EAAIK,GAO5C,OAJIC,EAAeH,IACjBG,EAAeH,GAGVG,CACT,GAEA,CAAA3hF,IAAA,uBAAAnD,MAWA,SACEylE,EACAD,EACAuf,EACAzD,EACA0D,GAGA,IAAMxG,EAAgBH,GAAYkC,aAAawE,EAAU,QAEzD9wB,GAAWuqB,EAAe8C,GAG1B9C,EAAcnhE,KAAOooD,EACrB+Y,EAAczwD,GAAKy3C,EACnBgZ,EAAcx6E,GAAK,eAAiB+mD,UAGfpsD,IAAjBqmF,GACF/wB,GAAWuqB,EAAewG,GAG5B,IAAMnD,EAAUnlF,KAAK23C,KAAKkvB,UAAU33B,WAAW4yC,GAO/C,OANAqD,EAAQ3C,2BAA6B,CAAC6F,EAAS/gF,IAC/C69E,EAAQrT,UAGR9xE,KAAK23C,KAAK1I,MAAMk2C,EAAQ79E,IAAM69E,EAEvBA,CACT,GAEA,CAAA1+E,IAAA,gBAAAnD,MASA,SAAcilF,EAAYC,EAAYzC,EAAanB,GACjD,GAAI4D,aAAsB7U,GAAM,CAC9B,IAAMvmC,EAAOo7C,EACPv6E,EAAM,CAAA,EACZA,EAAIm/B,EAAK9lC,IAAM8lC,EACfo7C,EAAav6E,CACf,CAEA,GAAIs6E,aAAsB5kB,GAAM,CAC9B,IAAMlpC,EAAO8tD,EACPt6E,EAAM,CAAA,EACZA,EAAIwsB,EAAKnzB,IAAMmzB,EACf8tD,EAAat6E,CACf,CAEA,GAAI83E,QACF,MAAM,IAAI78C,MAAM,iDAkBlB,IAAK,IAAMwsC,UAfmBzzE,IAA1B2iF,IAEFA,EAAwBmB,EAAYnB,uBAKtC5kF,KAAKyoF,oBACHF,EACAC,EACAzC,EACAnB,GAImB4D,EACnB,GAAInmF,OAAOzB,UAAUH,eAAeK,KAAK0nF,EAAY9S,SACnBzzE,IAA5BjC,KAAK23C,KAAK1I,MAAMymC,GAAuB,CACzC,IAAMtoC,EAAOptC,KAAK23C,KAAK1I,MAAMymC,GAE7B11E,KAAKulF,mBAAmBn4C,GAExBA,EAAK8oB,WAAW,CAAE2O,SAAS,GAC7B,CAKJ,IAAK,IAAMW,KAAU+iB,EACflmF,OAAOzB,UAAUH,eAAeK,KAAKynF,EAAY/iB,KACnDxlE,KAAK4iF,eAAepd,GAAU,CAC5BqgB,UAAWE,EAAYz+E,GACvBmzB,KAAMz6B,KAAK23C,KAAK/I,MAAM42B,IAExBxlE,KAAK23C,KAAK/I,MAAM42B,GAAQtP,WAAW,CAAE2O,SAAS,IAGpD,GAEA,CAAAp+D,IAAA,yBAAAnD,MAWA,SAAuBkiE,GACrB,QAAevjE,IAAXujE,EAAJ,CACA,IAAMkjB,EAAgB1oF,KAAK4iF,eAAepd,GAG1C,QAAsBvjE,IAAlBymF,EAAJ,CACA,IAAM7C,EAAY6C,EAAc7C,UAChC,QAAkB5jF,IAAd4jF,EAEJ,OAAO7lF,KAAK23C,KAAK/I,MAAMi3C,EAJ0B,CAJP,CAS5C,GAEA,CAAAp/E,IAAA,UAAAnD,MAUA,SAAQorB,EAAKkG,GACX,IAAMojC,EAAM,GAQZ,OANAroD,GAAQ+e,GAAK,SAACL,GACRuG,EAASvG,IACX2pC,EAAIlxD,KAAKunB,EAEb,IAEO2pC,CACT,GAEA,CAAAvxD,IAAA,eAAAnD,MASA,WAAe,IACTkiE,EADSyD,EAAAjpE,KAEP2oF,EAAiB,GACjBC,EAAiB,CAAA,EAOjBC,EAAkB,SAACj0D,GACvBjlB,GAAQs5D,EAAKtxB,KAAK/I,OAAO,SAACnU,IACD,IAAnBA,EAAK+8C,WACP5iD,EAAS6F,EAEb,KAQF,IAAK+qC,KAAUxlE,KAAK4iF,eAAgB,CAClC,GAAKvgF,OAAOzB,UAAUH,eAAeK,KAAKd,KAAK4iF,eAAgBpd,QAIlDvjE,IAFAjC,KAAK23C,KAAK/I,MAAM42B,IAG3BmjB,EAAe7hF,KAAK0+D,EAExB,CAGAqjB,GAAgB,SAAU9C,GACxB,IAAK,IAAIx4E,EAAI,EAAGA,EAAIo7E,EAAehkF,OAAQ4I,WAClCw4E,EAAY7D,eAAeyG,EAAep7E,GAErD,IAGA,IAAK,IAAIA,EAAI,EAAGA,EAAIo7E,EAAehkF,OAAQ4I,WAClCvN,KAAK4iF,eAAe+F,EAAep7E,IAQ5CoC,GAAQ3P,KAAK6iF,gBAAgB,SAACnN,GAC5B,IAAMtoC,EAAO67B,EAAKtxB,KAAK1I,MAAMymC,QAChBzzE,IAATmrC,GAAuBA,EAAK07C,mBAC9BF,EAAelT,GAAUA,EAE7B,IAKAmT,GAAgB,SAAU9C,GACxBp2E,GAAQo2E,EAAY5D,gBAAgB,SAAC/0C,EAAMsoC,GACpCtoC,EAAK07C,kBAAqBF,EAAelT,KAC5CkT,EAAelT,GAAUA,EAE7B,GACF,IAIA/lE,GAAQ3P,KAAK23C,KAAK1I,OAAO,SAAC7B,EAAMsoC,GAE9B,IAAI5vC,GAAU,EACRijD,EAAc37C,EAAKo1C,2BACzB,QAAoBvgF,IAAhB8mF,EAA2B,CAC7B,IAAIC,EAAW,EAEfr5E,GAAQo5E,GAAa,SAACE,GACpB,IAAMC,EAAgBjgB,EAAKtxB,KAAK1I,MAAMg6C,QAEhBhnF,IAAlBinF,GAA+BA,EAAcJ,mBAC/CE,GAAY,EAEhB,IAEAljD,EAAUkjD,EAAW,CACvB,CAEK57C,EAAK07C,kBAAqBhjD,IAC7B8iD,EAAelT,GAAUA,EAE7B,IAGAmT,GAAgB,SAAC9C,GACfp2E,GAAQi5E,GAAgB,SAACO,UAChBpD,EAAY5D,eAAegH,GAElCx5E,GAAQo2E,EAAY92C,OAAO,SAAC7B,EAAM0zC,GAC5B1zC,EAAK9lC,KAAO6hF,EAKhB/7C,EAAKo1C,2BAA6BvZ,EAAKmgB,QACrCh8C,EAAKo1C,4BACL,SAAUl7E,GACR,OAAQshF,EAAethF,EACzB,IARAy+E,EAAY92C,MAAM6xC,GAAK,IAU3B,IAGAiF,EAAY92C,MAAQg6B,EAAKmgB,QAAQrD,EAAY92C,OAAO,SAAU5gB,GAC5D,OAAgB,OAATA,CACT,GACF,GACF,IAGA1e,GAAQi5E,GAAgB,SAAClT,UAChBzM,EAAK4Z,eAAenN,EAC7B,IAKA/lE,GAAQi5E,GAAgB,SAAClT,UAChBzM,EAAKtxB,KAAK1I,MAAMymC,EACzB,IAQA/lE,GADY48B,GAAYvsC,KAAK23C,KAAK1I,QACrB,SAACymC,GACZ,IAAMtoC,EAAO67B,EAAKtxB,KAAK1I,MAAMymC,GAEvB2T,EACJpgB,EAAKqgB,iBAAiBl8C,EAAK27B,SAAWE,EAAKqgB,iBAAiBl8C,EAAK07B,MACnE,GAAIugB,IAAsBpgB,EAAKsgB,iBAAiBn8C,EAAK9lC,IAIrD,GAAI+hF,EAAmB,CAErB,IAAMG,EAAcvgB,EAAKwgB,uBAAuBr8C,EAAK27B,aACjC9mE,IAAhBunF,GACFvgB,EAAK+c,cAAc/c,EAAKtxB,KAAK/I,MAAMxB,EAAK27B,QAAS37B,EAAMo8C,GAGzD,IAAME,EAAYzgB,EAAKwgB,uBAAuBr8C,EAAK07B,WACjC7mE,IAAdynF,GACFzgB,EAAK+c,cAAc/c,EAAKtxB,KAAK/I,MAAMxB,EAAK07B,MAAO17B,EAAMs8C,EAKzD,aACSzgB,EAAK+c,cAActQ,GAC1BzM,EAAK8d,aAAa35C,EAQtB,IAKA,IAFA,IAAItE,GAAU,EACV6gD,GAAe,EAAKC,EAAAA,WAEtB,IAAMC,EAAiB,GAGvBhB,GAAgB,SAAU9C,GACxB,IAAM+D,EAAWv9C,GAAYw5C,EAAY7D,gBAAgBv9E,OACnDolF,GAA6D,IAA/ChE,EAAYj6E,QAAQ25E,wBACnCsE,GAAeD,EAAW,IAAQC,GAAeD,EAAW,IAC/DD,EAAe/iF,KAAKi/E,EAAYz+E,GAEpC,IAGA,IAAK,IAAIiG,EAAI,EAAGA,EAAIs8E,EAAellF,SAAU4I,EAC3C07D,EAAK+gB,YACHH,EAAet8E,GACf,CAAA,GACA,GAIJo8E,EAAeE,EAAellF,OAAS,EACvCmkC,EAAUA,GAAW6gD,GAtBhBA,GAAYC,IAyBf9gD,GACF9oC,KAAKiqF,cAET,GAEA,CAAAxjF,IAAA,mBAAAnD,MAMA,SAAiBkiE,GACf,YAAuCvjE,IAAhCjC,KAAK4iF,eAAepd,EAC7B,GAEA,CAAA/+D,IAAA,mBAAAnD,MAUA,SAAiBoyE,GACf,YAAuCzzE,IAAhCjC,KAAK6iF,eAAenN,EAC7B,KAACiN,CAAA,CAt7CgB,GCzDnB,IAGMuH,GAAc,WAKlB,SAAAA,EAAYvyC,EAAMnC,GA9BpB,IACMjvC,EA6BsBqd,QAAAsmE,QA3BXjoF,IAAXnC,SACFyG,EACEzG,OAAOqqF,uBACPrqF,OAAOsqF,0BACPtqF,OAAOuqF,6BACPvqF,OAAOwqF,yBAKTxqF,OAAOqqF,2BAFIloF,IAATsE,EAE6B,SAAUquB,GAEvCA,KAG6BruB,EAc/BvG,KAAK23C,KAAOA,EACZ33C,KAAKw1C,OAASA,EAEdx1C,KAAKuqF,iBAAkB,EACvBvqF,KAAKm9E,iBAAcl7E,EACnBjC,KAAK+8E,iBAAkB,EACvB/8E,KAAKwqF,iBAAkB,EACvBxqF,KAAKyqF,eAAiB,EACtBzqF,KAAK0qF,aAAc,EAEnB1qF,KAAK2qF,UAAW,EAChB3qF,KAAK4qF,SAAU,EACf5qF,KAAK8L,QAAU,GACf9L,KAAK+7C,eAAiB,CACpB8uC,iBAAiB,EACjBC,iBAAiB,EACjBC,iBAAiB,GAEnB9uC,GAAcj8C,KAAK8L,QAAS9L,KAAK+7C,gBAEjC/7C,KAAKgrF,0BACLhrF,KAAKknE,oBACP,CAqeC,OAneDn5C,GAAAm8D,EAAA,CAAA,CAAAzjF,IAAA,qBAAAnD,MAGA,WAAqB,IAAAuoC,EAAAjM,EAAA5/B,KACnBA,KAAK23C,KAAKwvB,QAAQ9xD,GAAG,aAAa,WAChCuqB,EAAK+qD,UAAW,CAClB,IACA3qF,KAAK23C,KAAKwvB,QAAQ9xD,GAAG,WAAW,WAC9BuqB,EAAK+qD,UAAW,CAClB,IACA3qF,KAAK23C,KAAKwvB,QAAQ9xD,GAAG,QAAQ,WAC3BuqB,EAAKgrD,SAAU,EACf9qF,OAAO0lC,aAAa5F,EAAKqrD,eACzBrrD,EAAKqrD,cAAgB/hB,IAAkB,WAAM,IAAAp6C,EAC3C8Q,EAAKgrD,SAAU,EACf3tC,GAAAnuB,EAAA8Q,EAAKsrD,gBAAcpqF,KAAAguB,EAAM8Q,EAAzBqd,EACD,GAAE,IACL,IACAj9C,KAAK23C,KAAKwvB,QAAQ9xD,GAAG,gBAAgB,WACnCuqB,EAAKurD,cACP,IACAnrF,KAAK23C,KAAKwvB,QAAQ9xD,GAAG,WAAW,YACD,IAAzBuqB,EAAK4qD,iBACP5qD,EAAKwrD,SAET,IACAprF,KAAK23C,KAAKwvB,QAAQ9xD,GAAG,gBAAgB,WACnCuqB,EAAK8qD,aAAc,CACrB,IACA1qF,KAAK23C,KAAKwvB,QAAQ9xD,GAAG,gBAAgB,WACnCuqB,EAAK8qD,aAAc,EACnB9qD,EAAK2qD,iBAAkB,CACzB,IACAvqF,KAAK23C,KAAKwvB,QAAQ9xD,GAAG,iBAAkB4nC,GAAApR,EAAI7rC,KAACkrF,gBAAcpqF,KAAA+qC,EAAM7rC,OAChEA,KAAK23C,KAAKwvB,QAAQ9xD,GAAG,mBAAmB,WACtCuqB,EAAK6qD,gBAAkB,EACvB7qD,EAAK4qD,iBAAkB,EACvB5qD,EAAKyrD,iBACP,IACArrF,KAAK23C,KAAKwvB,QAAQ9xD,GAAG,kBAAkB,WACrCuqB,EAAK6qD,gBAAkB,EACvB7qD,EAAK4qD,gBAAkB5qD,EAAK6qD,eAAiB,EAC7C7qD,EAAKu9C,iBAAcl7E,CACrB,IACAjC,KAAK23C,KAAKwvB,QAAQ9xD,GAAG,WAAW,WAC9BuqB,EAAK6qD,eAAiB,EACtB7qD,EAAK8qD,aAAc,EACnB9qD,EAAK4qD,iBAAkB,GACM,IAAzB5qD,EAAKm9C,gBACPv3C,aAAa5F,EAAKu9C,aAElBr9E,OAAOwrF,qBAAqB1rD,EAAKu9C,aAEnCv9C,EAAK+X,KAAKwvB,QAAQzxD,KACpB,GACF,GAEA,CAAAjP,IAAA,aAAAnD,MAIA,SAAWwI,GACT,QAAgB7J,IAAZ6J,EAAuB,CAEzBsqE,GADe,CAAC,kBAAmB,kBAAmB,mBAC1Bp2E,KAAK8L,QAASA,EAC5C,CACF,GAEA,CAAArF,IAAA,oBAAAnD,MAUA,SAAkBsxB,EAAU22D,GAY1B,GAAsB,oBAAXzrF,OAAX,CAEA,IAAI0rF,EAEEC,EAAW3rF,OAYjB,OAT6B,IAAzBE,KAAK+8E,gBAEPyO,EAAQtiB,GAAoBt0C,EAAU22D,GAElCE,EAAStB,wBACXqB,EAAQC,EAAStB,sBAAsBv1D,IAIpC42D,CAhBmC,CAiB5C,GAEA,CAAA/kF,IAAA,kBAAAnD,MAIA,WAEwC,IAAAuvC,GADT,IAAzB7yC,KAAKwqF,uBACkBvoF,IAArBjC,KAAKm9E,cACPn9E,KAAKm9E,YAAcn9E,KAAK0rF,kBACtBzuC,GAAApK,EAAI7yC,KAAC2rF,aAAW7qF,KAAA+xC,EAAM7yC,MACtBA,KAAK88E,qBAIb,GAEA,CAAAr2E,IAAA,cAAAnD,MAIA,YAC+B,IAAzBtD,KAAKwqF,kBAEPxqF,KAAKm9E,iBAAcl7E,GAEU,IAAzBjC,KAAK+8E,iBAEP/8E,KAAKqrF,kBAGPrrF,KAAKorF,WAEwB,IAAzBprF,KAAK+8E,iBAEP/8E,KAAKqrF,kBAGX,GAEA,CAAA5kF,IAAA,SAAAnD,MAIA,WACEtD,KAAK23C,KAAKwvB,QAAQlxD,KAAK,WACvBjW,KAAKorF,SACP,GAEA,CAAA3kF,IAAA,iBAAAnD,MAKA,WAAiB,IAAA0hC,EAAAhlC,MAEY,IAAzBA,KAAKuqF,kBACoB,IAAzBvqF,KAAKwqF,kBACgB,IAArBxqF,KAAK0qF,cAEL1qF,KAAKuqF,iBAAkB,EACvBvqF,KAAK0rF,mBAAkB,WACrB1mD,EAAKomD,SAAQ,EACd,GAAE,GAEP,GAEA,CAAA3kF,IAAA,UAAAnD,MAOA,WAAwB,IAAhBshE,EAAM3jE,UAAA0D,OAAA,QAAA1C,IAAAhB,UAAA,IAAAA,UAAA,GACZ,IAAyB,IAArBjB,KAAK0qF,YAAsB,CAC7B1qF,KAAK23C,KAAKwvB,QAAQlxD,KAAK,cAEvBjW,KAAKuqF,iBAAkB,EAEvB,IAAMpoB,EAAY,CAChBypB,mBAAoB,MAKe,IAAnC5rF,KAAKw1C,OAAOq2C,MAAMr2C,OAAOE,OACW,IAApC11C,KAAKw1C,OAAOq2C,MAAMr2C,OAAOG,QAEzB31C,KAAKw1C,OAAOs2C,UAGd9rF,KAAKw1C,OAAOu2C,eAEZ,IAAM16E,EAAMrR,KAAKw1C,OAAOc,aAGlBzkC,EAAI7R,KAAKw1C,OAAOq2C,MAAMr2C,OAAOw2C,YAC7Bl6E,EAAI9R,KAAKw1C,OAAOq2C,MAAMr2C,OAAOy2C,aAInC,GAHA56E,EAAI66E,UAAU,EAAG,EAAGr6E,EAAGC,GAGe,IAAlC9R,KAAKw1C,OAAOq2C,MAAMG,YACpB,OAwBF,GApBA36E,EAAI0rD,OACJ1rD,EAAIk5D,UAAUvqE,KAAK23C,KAAKqhB,KAAKmzB,YAAY7+E,EAAGtN,KAAK23C,KAAKqhB,KAAKmzB,YAAY76E,GACvED,EAAImrB,MAAMx8B,KAAK23C,KAAKqhB,KAAKx8B,MAAOx8B,KAAK23C,KAAKqhB,KAAKx8B,OAE/CnrB,EAAIG,YACJxR,KAAK23C,KAAKwvB,QAAQlxD,KAAK,gBAAiB5E,GACxCA,EAAIM,aAEW,IAAXizD,KAEmB,IAAlB5kE,KAAK2qF,WACe,IAAlB3qF,KAAK2qF,WAC6B,IAAjC3qF,KAAK8L,QAAQ++E,oBACC,IAAjB7qF,KAAK4qF,UACc,IAAjB5qF,KAAK4qF,UAAqD,IAAjC5qF,KAAK8L,QAAQg/E,kBAEzC9qF,KAAKosF,WAAW/6E,IAKA,IAAlBrR,KAAK2qF,WACc,IAAlB3qF,KAAK2qF,WAAsD,IAAjC3qF,KAAK8L,QAAQi/E,gBACxC,CACA,IAAQa,EAAuB5rF,KAAKqsF,WAAWh7E,EAAKuzD,GAA5CgnB,mBACRzpB,EAAUypB,mBAAqBA,CACjC,EAGe,IAAXhnB,KAEmB,IAAlB5kE,KAAK2qF,WACe,IAAlB3qF,KAAK2qF,WAC6B,IAAjC3qF,KAAK8L,QAAQ++E,oBACC,IAAjB7qF,KAAK4qF,UACc,IAAjB5qF,KAAK4qF,UAAqD,IAAjC5qF,KAAK8L,QAAQg/E,kBAEzC9qF,KAAKssF,YAAYj7E,GAIe,MAAhC8wD,EAAUypB,oBACZzpB,EAAUypB,sBAGG,IAAXhnB,GACF5kE,KAAKusF,kBAAkBl7E,GAGzBA,EAAIG,YACJxR,KAAK23C,KAAKwvB,QAAQlxD,KAAK,eAAgB5E,GACvCA,EAAIM,YAGJN,EAAI8rD,WACW,IAAXyH,GACFvzD,EAAI66E,UAAU,EAAG,EAAGr6E,EAAGC,EAE3B,CACF,GAEA,CAAArL,IAAA,eAAAnD,MAOA,WACEtD,KAAKw1C,OAAOu2C,eACZ,IAAM16E,EAAMrR,KAAKw1C,OAAOc,aACxBjlC,EAAI0rD,OACJ1rD,EAAIk5D,UAAUvqE,KAAK23C,KAAKqhB,KAAKmzB,YAAY7+E,EAAGtN,KAAK23C,KAAKqhB,KAAKmzB,YAAY76E,GACvED,EAAImrB,MAAMx8B,KAAK23C,KAAKqhB,KAAKx8B,MAAOx8B,KAAK23C,KAAKqhB,KAAKx8B,OAE/C,IACI/B,EADEmU,EAAQ5uC,KAAK23C,KAAK/I,MAIxB,IAAK,IAAM42B,KAAU52B,EACfvsC,OAAOzB,UAAUH,eAAeK,KAAK8tC,EAAO42B,MAC9C/qC,EAAOmU,EAAM42B,IACRvJ,OAAO5qD,GACZopB,EAAKmkC,kBAAkBvtD,EAAKopB,EAAKm5B,WAKrCviD,EAAI8rD,SACN,GAEA,CAAA12D,IAAA,aAAAnD,MAQA,SAAW+N,GAsBT,IAtBkC,IAG9BopB,EA2CA5rB,EA9CU29E,EAAUvrF,UAAA0D,OAAA,QAAA1C,IAAAhB,UAAA,IAAAA,UAAA,GAClB2tC,EAAQ5uC,KAAK23C,KAAK/I,MAClB25B,EAAcvoE,KAAK23C,KAAK4wB,YAExB3U,EAAW,GACX64B,EAAU,GAEVC,EAAU1sF,KAAKw1C,OAAOm3C,YAAY,CAAEr/E,GAD3B,GACuCgE,GADvC,KAETs7E,EAAc5sF,KAAKw1C,OAAOm3C,YAAY,CAC1Cr/E,EAAGtN,KAAKw1C,OAAOq2C,MAAMr2C,OAAOw2C,YAHf,GAIb16E,EAAGtR,KAAKw1C,OAAOq2C,MAAMr2C,OAAOy2C,aAJf,KAMTY,EAAe,CACnBl2C,IAAK+1C,EAAQp7E,EACbolC,KAAMg2C,EAAQp/E,EACdojD,OAAQk8B,EAAYt7E,EACpBo5C,MAAOkiC,EAAYt/E,GAGfs+E,EAAqB,GAGlB/8E,EAAI,EAAGA,EAAI05D,EAAY5jE,OAAQkK,IAGtC,IAFA4rB,EAAOmU,EAAM25B,EAAY15D,KAEhB4lC,MACPg4C,EAAQ3lF,KAAKyhE,EAAY15D,SACpB,GAAI4rB,EAAKqyD,aACdl5B,EAAS9sD,KAAKyhE,EAAY15D,SAE1B,IAAmB,IAAf29E,EAAqB,CACvB,IAAMrqB,EAAY1nC,EAAK/mB,KAAKrC,GACO,MAA/B8wD,EAAUT,mBACZkqB,EAAmB9kF,KAAKq7D,EAAUT,kBAErC,MAAM,IAAwD,IAApDjnC,EAAKsyD,6BAA6BF,GAAwB,CACnE,IAAM1qB,EAAY1nC,EAAK/mB,KAAKrC,GACO,MAA/B8wD,EAAUT,mBACZkqB,EAAmB9kF,KAAKq7D,EAAUT,kBAEtC,MACEjnC,EAAKmkC,kBAAkBvtD,EAAKopB,EAAKm5B,UAMvC,IAAMo5B,EAAiBp5B,EAASjvD,OAC1BsoF,EAAgBR,EAAQ9nF,OAG9B,IAAKkK,EAAI,EAAGA,EAAIm+E,EAAgBn+E,IAAK,CAEnC,IAAMszD,GADN1nC,EAAOmU,EAAMglB,EAAS/kD,KACC6E,KAAKrC,GACO,MAA/B8wD,EAAUT,mBACZkqB,EAAmB9kF,KAAKq7D,EAAUT,kBAEtC,CAGA,IAAK7yD,EAAI,EAAGA,EAAIo+E,EAAep+E,IAAK,CAElC,IAAMszD,GADN1nC,EAAOmU,EAAM69C,EAAQ59E,KACE6E,KAAKrC,GACO,MAA/B8wD,EAAUT,mBACZkqB,EAAmB9kF,KAAKq7D,EAAUT,kBAEtC,CAEA,MAAO,CACLkqB,mBAAoB,WAClB,IAAA,IAAAsB,EAAA,EAAAC,EAAmBvB,EAAkBsB,EAAAC,EAAAxoF,OAAAuoF,IAAE,EACrCx5E,EADay5E,EAAAD,KAEf,CACF,EAEJ,GAEA,CAAAzmF,IAAA,aAAAnD,MAMA,SAAW+N,GAIT,IAHA,IAAM49B,EAAQjvC,KAAK23C,KAAK1I,MAClBssC,EAAcv7E,KAAK23C,KAAK4jC,YAErB1sE,EAAI,EAAGA,EAAI0sE,EAAY52E,OAAQkK,IAAK,CAC3C,IAAMu+B,EAAO6B,EAAMssC,EAAY1sE,KACR,IAAnBu+B,EAAK0mC,WACP1mC,EAAK15B,KAAKrC,EAEd,CACF,GAEA,CAAA5K,IAAA,cAAAnD,MAMA,SAAY+N,GAIV,IAHA,IAAM49B,EAAQjvC,KAAK23C,KAAK1I,MAClBssC,EAAcv7E,KAAK23C,KAAK4jC,YAErB1sE,EAAI,EAAGA,EAAI0sE,EAAY52E,OAAQkK,IAAK,CAC3C,IAAMu+B,EAAO6B,EAAMssC,EAAY1sE,KACR,IAAnBu+B,EAAK0mC,WACP1mC,EAAKggD,WAAW/7E,EAEpB,CACF,GAEA,CAAA5K,IAAA,0BAAAnD,MAMA,WACE,GAAsB,oBAAXxD,OAAwB,CACjC,IAAMutF,EAActoF,UAAUE,UAAUoF,cACxCrK,KAAK+8E,iBAAkB,IACiB,GAApChuC,GAAAs+C,GAAWvsF,KAAXusF,EAAoB,cAGqB,GAAlCt+C,GAAAs+C,GAAWvsF,KAAXusF,EAAoB,WAEzBt+C,GAAAs+C,GAAWvsF,KAAXusF,EAAoB,YAAc,KAHtCrtF,KAAK+8E,iBAAkB,EAO3B,MACE/8E,KAAK+8E,iBAAkB,CAE3B,GAEA,CAAAt2E,IAAA,oBAAAnD,MAMA,SAAkB+N,GAChB,GAAIrR,KAAK23C,KAAK21C,aAAaC,KAAM,CAC/Bl8E,EAAIG,YACJ,IAAMkkC,EACJ11C,KAAK23C,KAAK21C,aAAaj2E,SAASkO,IAAIjY,EACpCtN,KAAK23C,KAAK21C,aAAaj2E,SAASiO,MAAMhY,EAClCqoC,EACJ31C,KAAK23C,KAAK21C,aAAaj2E,SAASkO,IAAIjU,EACpCtR,KAAK23C,KAAK21C,aAAaj2E,SAASiO,MAAMhU,EACxCD,EAAIoD,KACFzU,KAAK23C,KAAK21C,aAAaj2E,SAASiO,MAAMhY,EACtCtN,KAAK23C,KAAK21C,aAAaj2E,SAASiO,MAAMhU,EACtCokC,EACAC,GAEFtkC,EAAIkoD,UAAY,2BAChBloD,EAAIooD,SACFz5D,KAAK23C,KAAK21C,aAAaj2E,SAASiO,MAAMhY,EACtCtN,KAAK23C,KAAK21C,aAAaj2E,SAASiO,MAAMhU,EACtCokC,EACAC,GAEFtkC,EAAIgpD,YAAc,yBAClBhpD,EAAI4rD,QACN,MACE5rD,EAAIM,WAER,KAACu4E,CAAA,CAlgBiB,QC9CTxoF,GAEWmzB,aCEf,SAAS24D,GAAQC,EAAQ74D,GAC9BA,EAASyI,aAAe,SAAU9nB,GAC5BA,EAAMkoB,SACR7I,EAASrf,IAIbk4E,EAAOp4E,GAAG,eAAgBuf,EAASyI,aACrC,CASO,SAASqwD,GAAUD,EAAQ74D,GAOhC,OANAA,EAASyI,aAAe,SAAU9nB,GAC5BA,EAAMmoB,SACR9I,EAASrf,IAINk4E,EAAOp4E,GAAG,eAAgBuf,EAASyI,aAC5C,CC3BA,IAMMswD,GAAM,WAIV,SAAAA,EAAYh2C,GAAM/zB,QAAA+pE,GAChB3tF,KAAK23C,KAAOA,EACZ33C,KAAK4tF,WAAa,EAClB5tF,KAAK6tF,YAAc,GACnB7tF,KAAKy1C,aAAc,EACnBz1C,KAAK8tF,iBAAmB,GACxB9tF,KAAK+tF,kBAAoB,GAEzB/tF,KAAK8L,QAAU,GACf9L,KAAK+7C,eAAiB,CACpBiyC,YAAY,EACZr4C,OAAQ,OACRD,MAAO,QAETuG,GAAcj8C,KAAK8L,QAAS9L,KAAK+7C,gBAEjC/7C,KAAKknE,oBACP,CAihBC,OA/gBDn5C,GAAA4/D,EAAA,CAAA,CAAAlnF,IAAA,qBAAAnD,MAGA,WAAqB,IAAAwrB,EAAA8Q,EAAA5/B,KAEnBA,KAAK23C,KAAKwvB,QAAQ1xD,KAAK,UAAU,SAACxH,GACd,IAAdA,EAAIynC,QACN9V,EAAK+X,KAAKqhB,KAAKmzB,YAAY7+E,EAAgB,GAAZW,EAAIynC,OAElB,IAAfznC,EAAI0nC,SACN/V,EAAK+X,KAAKqhB,KAAKmzB,YAAY76E,EAAiB,GAAbrD,EAAI0nC,OAEvC,IACA31C,KAAK23C,KAAKwvB,QAAQ9xD,GAAG,UAAW4nC,GAAAnuB,EAAI9uB,KAAC8rF,SAAOhrF,KAAAguB,EAAM9uB,OAClDA,KAAK23C,KAAKwvB,QAAQ9xD,GAAG,WAAW,WAC9BuqB,EAAKquD,YAAYrvD,UACjBgB,EAAK6tD,OAAO7uD,UACZgB,EAAKsuD,UACP,GACF,GAEA,CAAAznF,IAAA,aAAAnD,MAGA,SAAWwI,GAAS,IAAAk5B,EAAAhlC,KAClB,QAAgBiC,IAAZ6J,EAAuB,CAEzBsqE,GADe,CAAC,QAAS,SAAU,cACPp2E,KAAK8L,QAASA,EAC5C,CAIA,GADA9L,KAAKkuF,YAC2B,IAA5BluF,KAAK8L,QAAQkiF,WAAqB,CAAA,IAAAniD,EACpC,GAAI/rC,OAAOquF,eAAgB,CAEzB,IAAMC,EAAW,IAAID,gBAAe,YAElB,IADAnpD,EAAK8mD,WAEnB9mD,EAAK2S,KAAKwvB,QAAQlxD,KAAK,iBAE3B,IACQ41E,EAAU7rF,KAAV6rF,MAERuC,EAAS5rC,QAAQqpC,GACjB7rF,KAAK+tF,kBAAkBjnF,MAAK,WAC1BsnF,EAASC,UAAUxC,EACrB,GACF,KAAO,CAEL,IAAMyC,EAAcC,IAAY,YAEd,IADAvpD,EAAK8mD,WAEnB9mD,EAAK2S,KAAKwvB,QAAQlxD,KAAK,iBAE1B,GAAE,KACHjW,KAAK+tF,kBAAkBjnF,MAAK,WAC1B0nF,cAAcF,EAChB,GACF,CAGA,IAAMG,EAAiBxxC,GAAApR,EAAI7rC,KAAC0uF,WAAS5tF,KAAA+qC,EAAM7rC,MAC3CF,OAAOwV,iBAAiB,SAAUm5E,GAClCzuF,KAAK+tF,kBAAkBjnF,MAAK,WAC1BhH,OAAO+V,oBAAoB,SAAU44E,EACvC,GACF,CACF,GAEA,CAAAhoF,IAAA,WAAAnD,MAGA,WAAW,IAAAuvC,EAAAI,EAAAG,EACTjB,GAAAU,EAAA4U,GAAAxU,EAAAzB,GAAA4B,EAAApzC,KAAK+tF,mBAAiBjtF,KAAAsyC,EACZ,IAAEtyC,KAAAmyC,IACAnyC,KAAA+xC,GACD,SAACje,GACR,IACEA,GACD,CAAC,MAAOx0B,GACPipC,QAAQjpC,MAAMA,EAChB,CACF,GACJ,GAEA,CAAAqG,IAAA,YAAAnD,MAGA,WACEtD,KAAK8rF,UACL9rF,KAAK23C,KAAKwvB,QAAQlxD,KAAK,UACzB,GAEA,CAAAxP,IAAA,kBAAAnD,MAMA,WAA8C,IAA9BsqF,EAAU3sF,UAAA0D,OAAA1D,QAAAgB,IAAAhB,UAAAgB,GAAAhB,UAAG,GAAAjB,KAAK4tF,YACP,IAArB5tF,KAAKy1C,cACPz1C,KAAK6tF,YAAYc,cAAgB3uF,KAAK6rF,MAAMr2C,OAAOE,MAAQk4C,EAC3D5tF,KAAK6tF,YAAYe,eAAiB5uF,KAAK6rF,MAAMr2C,OAAOG,OAASi4C,EAC7D5tF,KAAK6tF,YAAYrxD,MAAQx8B,KAAK23C,KAAKqhB,KAAKx8B,MACxCx8B,KAAK6tF,YAAYx2E,SAAWrX,KAAK2sF,YAAY,CAC3Cr/E,EAAI,GAAMtN,KAAK6rF,MAAMr2C,OAAOE,MAASk4C,EACrCt8E,EAAI,GAAMtR,KAAK6rF,MAAMr2C,OAAOG,OAAUi4C,IAG5C,GAEA,CAAAnnF,IAAA,kBAAAnD,MAKA,WACE,QAC6BrB,IAA3BjC,KAAK6tF,YAAYrxD,OACiB,IAAlCx8B,KAAK6rF,MAAMr2C,OAAOw2C,aACiB,IAAnChsF,KAAK6rF,MAAMr2C,OAAOy2C,cACE,IAApBjsF,KAAK4tF,YACL5tF,KAAK6tF,YAAYc,cAAgB,GACjC3uF,KAAK6tF,YAAYe,eAAiB,EAClC,CACA,IAAMC,EACJ7uF,KAAK6rF,MAAMr2C,OAAOE,MAClB11C,KAAK4tF,WACL5tF,KAAK6tF,YAAYc,cACbG,EACJ9uF,KAAK6rF,MAAMr2C,OAAOG,OAClB31C,KAAK4tF,WACL5tF,KAAK6tF,YAAYe,eACfG,EAAW/uF,KAAK6tF,YAAYrxD,MAEd,GAAdqyD,GAAkC,GAAfC,EACrBC,EAAoC,GAAzB/uF,KAAK6tF,YAAYrxD,OAAeqyD,EAAaC,GACjC,GAAdD,EACTE,EAAW/uF,KAAK6tF,YAAYrxD,MAAQqyD,EACZ,GAAfC,IACTC,EAAW/uF,KAAK6tF,YAAYrxD,MAAQsyD,GAGtC9uF,KAAK23C,KAAKqhB,KAAKx8B,MAAQuyD,EAEvB,IAAMC,EAAoBhvF,KAAK2sF,YAAY,CACzCr/E,EAAG,GAAMtN,KAAK6rF,MAAMr2C,OAAOw2C,YAC3B16E,EAAG,GAAMtR,KAAK6rF,MAAMr2C,OAAOy2C,eAGvBgD,EAAqB,CAEzB3hF,EAAG0hF,EAAkB1hF,EAAItN,KAAK6tF,YAAYx2E,SAAS/J,EACnDgE,EAAG09E,EAAkB19E,EAAItR,KAAK6tF,YAAYx2E,SAAS/F,GAErDtR,KAAK23C,KAAKqhB,KAAKmzB,YAAY7+E,GACzB2hF,EAAmB3hF,EAAItN,KAAK23C,KAAKqhB,KAAKx8B,MACxCx8B,KAAK23C,KAAKqhB,KAAKmzB,YAAY76E,GACzB29E,EAAmB39E,EAAItR,KAAK23C,KAAKqhB,KAAKx8B,KAC1C,CACF,GAEA,CAAA/1B,IAAA,gBAAAnD,MAMA,SAAcA,GACZ,GAAqB,iBAAVA,EACT,OAAOA,EAAQ,KACV,GAAqB,iBAAVA,EAAoB,CACpC,IAA4B,IAAxByrC,GAAAzrC,GAAKxC,KAALwC,EAAc,OAAwC,IAAzByrC,GAAAzrC,GAAKxC,KAALwC,EAAc,MAC7C,OAAOA,EACF,IAA4B,IAAxByrC,GAAAzrC,GAAKxC,KAALwC,EAAc,KACvB,OAAOA,EAAQ,IAEnB,CACA,MAAM,IAAI4lC,MACR,wDAA0D5lC,EAE9D,GAEA,CAAAmD,IAAA,UAAAnD,MAGA,WAEE,KAAOtD,KAAK23C,KAAKu3C,UAAUC,iBACzBnvF,KAAK23C,KAAKu3C,UAAUp3C,YAAY93C,KAAK23C,KAAKu3C,UAAUE,YAetD,GAZApvF,KAAK6rF,MAAQhqF,SAASkH,cAAc,OACpC/I,KAAK6rF,MAAMwD,UAAY,cACvBrvF,KAAK6rF,MAAM1xE,MAAM9C,SAAW,WAC5BrX,KAAK6rF,MAAM1xE,MAAMm1E,SAAW,SAC5BtvF,KAAK6rF,MAAM0D,SAAW,EAItBvvF,KAAK6rF,MAAMr2C,OAAS3zC,SAASkH,cAAc,UAC3C/I,KAAK6rF,MAAMr2C,OAAOr7B,MAAM9C,SAAW,WACnCrX,KAAK6rF,MAAMxxE,YAAYra,KAAK6rF,MAAMr2C,QAE7Bx1C,KAAK6rF,MAAMr2C,OAAOc,WAQrBt2C,KAAKwvF,iBACLxvF,KAAK+rF,mBAT4B,CACjC,IAAM0D,EAAW5tF,SAASkH,cAAc,OACxC0mF,EAASt1E,MAAMwzB,MAAQ,MACvB8hD,EAASt1E,MAAMu1E,WAAa,OAC5BD,EAASt1E,MAAMw1E,QAAU,OACzBF,EAASG,UAAY,mDACrB5vF,KAAK6rF,MAAMr2C,OAAOn7B,YAAYo1E,EAChC,CAMAzvF,KAAK23C,KAAKu3C,UAAU70E,YAAYra,KAAK6rF,OAErC7rF,KAAK23C,KAAKqhB,KAAKx8B,MAAQ,EACvBx8B,KAAK23C,KAAKqhB,KAAKmzB,YAAc,CAC3B7+E,EAAG,GAAMtN,KAAK6rF,MAAMr2C,OAAOw2C,YAC3B16E,EAAG,GAAMtR,KAAK6rF,MAAMr2C,OAAOy2C,cAG7BjsF,KAAK6vF,aACP,GAEA,CAAAppF,IAAA,cAAAnD,MAKA,WAAc,IAAAiiC,EAAAvlC,UACQiC,IAAhBjC,KAAKytF,QACPztF,KAAKytF,OAAO7uD,UAEd5+B,KAAK8vF,KAAO,GACZ9vF,KAAK+vF,MAAQ,GAGb/vF,KAAKytF,OAAS,IAAIxjD,GAAOjqC,KAAK6rF,MAAMr2C,QACpCx1C,KAAKytF,OAAOlrF,IAAI,SAAS+T,IAAI,CAAE8iB,QAAQ,IAEvCp5B,KAAKytF,OACFlrF,IAAI,OACJ+T,IAAI,CAAEmuB,UAAW,EAAG9K,UAAWsQ,GAAO9R,gBAEzCq1D,GAAQxtF,KAAKytF,QAAQ,SAACl4E,GACpBgwB,EAAKoS,KAAKq4C,eAAexC,QAAQj4E,EACnC,IACAvV,KAAKytF,OAAOp4E,GAAG,OAAO,SAACE,GACrBgwB,EAAKoS,KAAKq4C,eAAeC,MAAM16E,EACjC,IACAvV,KAAKytF,OAAOp4E,GAAG,aAAa,SAACE,GAC3BgwB,EAAKoS,KAAKq4C,eAAeE,YAAY36E,EACvC,IACAvV,KAAKytF,OAAOp4E,GAAG,SAAS,SAACE,GACvBgwB,EAAKoS,KAAKq4C,eAAeG,OAAO56E,EAClC,IACAvV,KAAKytF,OAAOp4E,GAAG,YAAY,SAACE,GAC1BgwB,EAAKoS,KAAKq4C,eAAeI,YAAY76E,EACvC,IACAvV,KAAKytF,OAAOp4E,GAAG,WAAW,SAACE,GACzBgwB,EAAKoS,KAAKq4C,eAAeK,OAAO96E,EAClC,IACAvV,KAAKytF,OAAOp4E,GAAG,UAAU,SAACE,GACxBgwB,EAAKoS,KAAKq4C,eAAeM,UAAU/6E,EACrC,IACAvV,KAAKytF,OAAOp4E,GAAG,SAAS,SAACE,GACvBgwB,EAAKoS,KAAKq4C,eAAeO,QAAQh7E,EACnC,IAGAvV,KAAK6rF,MAAMr2C,OAAOlgC,iBAAiB,SAAS,SAACC,GAC3CgwB,EAAKoS,KAAKq4C,eAAeQ,aAAaj7E,EACxC,IAEAvV,KAAK6rF,MAAMr2C,OAAOlgC,iBAAiB,aAAa,SAACC,GAC/CgwB,EAAKoS,KAAKq4C,eAAeS,YAAYl7E,EACvC,IACAvV,KAAK6rF,MAAMr2C,OAAOlgC,iBAAiB,eAAe,SAACC,GACjDgwB,EAAKoS,KAAKq4C,eAAeU,UAAUn7E,EACrC,IAEAvV,KAAKiuF,YAAc,IAAIhkD,GAAOjqC,KAAK6rF,OACnC6B,GAAU1tF,KAAKiuF,aAAa,SAAC14E,GAC3BgwB,EAAKoS,KAAKq4C,eAAetC,UAAUn4E,EACrC,GACF,GAEA,CAAA9O,IAAA,UAAAnD,MASA,WAAkE,IAA1DoyC,EAAKz0C,UAAA0D,eAAA1C,IAAAhB,UAAA,GAAAA,UAAG,GAAAjB,KAAK8L,QAAQ4pC,MAAOC,EAAM10C,UAAA0D,eAAA1C,IAAAhB,UAAA,GAAAA,UAAG,GAAAjB,KAAK8L,QAAQ6pC,OACxDD,EAAQ11C,KAAK2wF,cAAcj7C,GAC3BC,EAAS31C,KAAK2wF,cAAch7C,GAE5B,IAAIi7C,GAAY,EACVC,EAAW7wF,KAAK6rF,MAAMr2C,OAAOE,MAC7Bo7C,EAAY9wF,KAAK6rF,MAAMr2C,OAAOG,OAc9Bo7C,EAAgB/wF,KAAK4tF,WAG3B,GAFA5tF,KAAKwvF,iBAGH95C,GAAS11C,KAAK8L,QAAQ4pC,OACtBC,GAAU31C,KAAK8L,QAAQ6pC,QACvB31C,KAAK6rF,MAAM1xE,MAAMu7B,OAASA,GAC1B11C,KAAK6rF,MAAM1xE,MAAMw7B,QAAUA,EAE3B31C,KAAKgxF,gBAAgBD,GAErB/wF,KAAK6rF,MAAM1xE,MAAMu7B,MAAQA,EACzB11C,KAAK6rF,MAAM1xE,MAAMw7B,OAASA,EAE1B31C,KAAK6rF,MAAMr2C,OAAOr7B,MAAMu7B,MAAQ,OAChC11C,KAAK6rF,MAAMr2C,OAAOr7B,MAAMw7B,OAAS,OAEjC31C,KAAK6rF,MAAMr2C,OAAOE,MAAQ/1C,KAAKk2B,MAC7B71B,KAAK6rF,MAAMr2C,OAAOw2C,YAAchsF,KAAK4tF,YAEvC5tF,KAAK6rF,MAAMr2C,OAAOG,OAASh2C,KAAKk2B,MAC9B71B,KAAK6rF,MAAMr2C,OAAOy2C,aAAejsF,KAAK4tF,YAGxC5tF,KAAK8L,QAAQ4pC,MAAQA,EACrB11C,KAAK8L,QAAQ6pC,OAASA,EAEtB31C,KAAK8tF,iBAAmB,CACtBxgF,EAAG,GAAMtN,KAAK6rF,MAAMG,YACpB16E,EAAG,GAAMtR,KAAK6rF,MAAMI,cAGtB2E,GAAY,MACP,CAIL,IAAMK,EAAWtxF,KAAKk2B,MACpB71B,KAAK6rF,MAAMr2C,OAAOw2C,YAAchsF,KAAK4tF,YAEjCsD,EAAYvxF,KAAKk2B,MACrB71B,KAAK6rF,MAAMr2C,OAAOy2C,aAAejsF,KAAK4tF,YAKtC5tF,KAAK6rF,MAAMr2C,OAAOE,QAAUu7C,GAC5BjxF,KAAK6rF,MAAMr2C,OAAOG,SAAWu7C,GAE7BlxF,KAAKgxF,gBAAgBD,GAGnB/wF,KAAK6rF,MAAMr2C,OAAOE,QAAUu7C,IAC9BjxF,KAAK6rF,MAAMr2C,OAAOE,MAAQu7C,EAC1BL,GAAY,GAEV5wF,KAAK6rF,MAAMr2C,OAAOG,SAAWu7C,IAC/BlxF,KAAK6rF,MAAMr2C,OAAOG,OAASu7C,EAC3BN,GAAY,EAEhB,CAgBA,OAdkB,IAAdA,IACF5wF,KAAK23C,KAAKwvB,QAAQlxD,KAAK,SAAU,CAC/By/B,MAAO/1C,KAAKk2B,MAAM71B,KAAK6rF,MAAMr2C,OAAOE,MAAQ11C,KAAK4tF,YACjDj4C,OAAQh2C,KAAKk2B,MAAM71B,KAAK6rF,MAAMr2C,OAAOG,OAAS31C,KAAK4tF,YACnDiD,SAAUlxF,KAAKk2B,MAAMg7D,EAAW7wF,KAAK4tF,YACrCkD,UAAWnxF,KAAKk2B,MAAMi7D,EAAY9wF,KAAK4tF,cAIzC5tF,KAAKmxF,mBAIPnxF,KAAKy1C,aAAc,EACZm7C,CACT,GAEA,CAAAnqF,IAAA,aAAAnD,MAIA,WACE,OAAOtD,KAAK6rF,MAAMr2C,OAAOc,WAAW,KACtC,GAEA,CAAA7vC,IAAA,uBAAAnD,MAMA,WACE,IAAM+N,EAAMrR,KAAKs2C,aACjB,QAAYr0C,IAARoP,EACF,MAAM,IAAI63B,MAAM,gCAGlB,IAAIkoD,EAAY,EAehB,MAdsB,oBAAXtxF,SAGTsxF,EAAYtxF,OAAOuxF,kBAAoB,GAWlCD,GAPL//E,EAAIigF,8BACJjgF,EAAIkgF,2BACJlgF,EAAImgF,0BACJngF,EAAIogF,yBACJpgF,EAAIqgF,wBACJ,EAGJ,GAEA,CAAAjrF,IAAA,iBAAAnD,MAKA,WACEtD,KAAK4tF,WAAa5tF,KAAK2xF,sBACzB,GAEA,CAAAlrF,IAAA,eAAAnD,MAGA,WACE,IAAM+N,EAAMrR,KAAKs2C,aACjB,QAAYr0C,IAARoP,EACF,MAAM,IAAI63B,MAAM,gCAGlB73B,EAAI06E,aAAa/rF,KAAK4tF,WAAY,EAAG,EAAG5tF,KAAK4tF,WAAY,EAAG,EAC9D,GAEA,CAAAnnF,IAAA,uBAAAnD,MAQA,SAAqBgK,GACnB,OAAQA,EAAItN,KAAK23C,KAAKqhB,KAAKmzB,YAAY7+E,GAAKtN,KAAK23C,KAAKqhB,KAAKx8B,KAC7D,GAEA,CAAA/1B,IAAA,uBAAAnD,MAQA,SAAqBgK,GACnB,OAAOA,EAAItN,KAAK23C,KAAKqhB,KAAKx8B,MAAQx8B,KAAK23C,KAAKqhB,KAAKmzB,YAAY7+E,CAC/D,GAEA,CAAA7G,IAAA,uBAAAnD,MAQA,SAAqBgO,GACnB,OAAQA,EAAItR,KAAK23C,KAAKqhB,KAAKmzB,YAAY76E,GAAKtR,KAAK23C,KAAKqhB,KAAKx8B,KAC7D,GAEA,CAAA/1B,IAAA,uBAAAnD,MAQA,SAAqBgO,GACnB,OAAOA,EAAItR,KAAK23C,KAAKqhB,KAAKx8B,MAAQx8B,KAAK23C,KAAKqhB,KAAKmzB,YAAY76E,CAC/D,GAEA,CAAA7K,IAAA,cAAAnD,MAIA,SAAY4T,GACV,MAAO,CACL5J,EAAGtN,KAAK4xF,qBAAqB16E,EAAI5J,GACjCgE,EAAGtR,KAAK6xF,qBAAqB36E,EAAI5F,GAErC,GAEA,CAAA7K,IAAA,cAAAnD,MAKA,SAAY4T,GACV,MAAO,CACL5J,EAAGtN,KAAK8xF,qBAAqB56E,EAAI5J,GACjCgE,EAAGtR,KAAK+xF,qBAAqB76E,EAAI5F,GAErC,KAACq8E,CAAA,CAtiBS,GCLZ,IAGMqE,GAAI,WAKR,SAAAA,EAAYr6C,EAAMnC,GAAQ,IAAA1mB,EAAA+c,EAAAjM,EAAA5/B,KAAA4jB,QAAAouE,GACxBhyF,KAAK23C,KAAOA,EACZ33C,KAAKw1C,OAASA,EAEdx1C,KAAKiyF,eAAiB,EAAIjyF,KAAKkyF,kBAC/BlyF,KAAKmyF,wBAA0B,iBAC/BnyF,KAAKoyF,WAAa,EAClBpyF,KAAKqyF,YAAc,EACnBryF,KAAKsyF,YAAc,EACnBtyF,KAAKuyF,kBAAoB,EACzBvyF,KAAKwyF,kBAAoB,EACzBxyF,KAAKyyF,oBAAiBxwF,EACtBjC,KAAK0yF,wBAAqBzwF,EAC1BjC,KAAK2yF,UAAY,EAEjB3yF,KAAKs/E,kBAAer9E,EAEpBjC,KAAK23C,KAAKwvB,QAAQ9xD,GAAG,MAAO4nC,GAAAnuB,EAAI9uB,KAACu+E,KAAGz9E,KAAAguB,EAAM9uB,OAC1CA,KAAK23C,KAAKwvB,QAAQ9xD,GAAG,qBAAqB,WACxCuqB,EAAK+X,KAAKwvB,QAAQlxD,KAAK,iBACzB,IACAjW,KAAK23C,KAAKwvB,QAAQ9xD,GAAG,aAAc4nC,GAAApR,EAAI7rC,KAAC4yF,aAAW9xF,KAAA+qC,EAAM7rC,MAC3D,CAkYC,OAhYD+tB,GAAAikE,EAAA,CAAA,CAAAvrF,IAAA,aAAAnD,MAIA,WAAyB,IAAdwI,EAAO7K,UAAA0D,OAAA,QAAA1C,IAAAhB,UAAA,GAAAA,UAAA,GAAG,CAAA,EACnBjB,KAAK8L,QAAUA,CACjB,GAEA,CAAArF,IAAA,MAAAnD,MAOA,SAAIwI,GAA8B,IAArB+mF,EAAW5xF,UAAA0D,OAAA,QAAA1C,IAAAhB,UAAA,IAAAA,UAAA,GACtB6K,ECrCY,SACdgnF,EACAC,GAEA,IAAMjnF,EAAUmwC,GACd,CACErN,MAAOmkD,EACPC,aAAcplE,OAAOqlE,UACrBC,aAAc,GAEhBJ,QAAAA,EAAc,CAAA,GAGhB,IAAK3jE,GAAcrjB,EAAQ8iC,OACzB,MAAM,IAAI5qC,UAAU,oCAMtB,GAJ6B,IAAzB8H,EAAQ8iC,MAAMjqC,SAChBmH,EAAQ8iC,MAAQmkD,KAGoB,iBAAzBjnF,EAAQknF,cAA6BlnF,EAAQknF,aAAe,GACvE,MAAM,IAAIhvF,UAAU,uDAGtB,KAEoC,iBAAzB8H,EAAQonF,cACfpnF,EAAQknF,cAAgBlnF,EAAQonF,cAGlC,MAAM,IAAIlvF,UACR,iEAIJ,OAAO8H,CACT,CDCcqnF,CAAoBrnF,EAAS9L,KAAK23C,KAAK4wB,aAEjD,IAGIwR,EACAqZ,EAJEC,EAAcrzF,KAAKw1C,OAAOq2C,MAAMr2C,OAAOw2C,YACvCsH,EAAetzF,KAAKw1C,OAAOq2C,MAAMr2C,OAAOy2C,aAI9C,GAAoB,IAAhBoH,GAAsC,IAAjBC,EAMvBF,EAAY,EAEZrZ,EAAQ4H,GAAY4R,SAASvzF,KAAK23C,KAAK/I,MAAO9iC,EAAQ8iC,YACjD,IAAoB,IAAhBikD,EAAsB,CAE/B,IAAIW,EAAkB,EACtB,IAAK,IAAMhuB,KAAUxlE,KAAK23C,KAAK/I,MAAO,CACpC,GAAIvsC,OAAOzB,UAAUH,eAAeK,KAAKd,KAAK23C,KAAK/I,MAAO42B,IAExB,IADnBxlE,KAAK23C,KAAK/I,MAAM42B,GACpBvB,qBACPuvB,GAAmB,EAGzB,CACA,GAAIA,EAAkB,GAAMxzF,KAAK23C,KAAK4wB,YAAY5jE,OAEhD,YADA3E,KAAKu+E,IAAIzyE,GAAS,GAIpBiuE,EAAQ4H,GAAY4R,SAASvzF,KAAK23C,KAAK/I,MAAO9iC,EAAQ8iC,OAGtDwkD,EAAY,QADUpzF,KAAK23C,KAAK4wB,YAAY5jE,OACN,QAAU,SAIhDyuF,GADezzF,KAAKgO,IAAI0lF,EAAc,IAAKC,EAAe,IAE5D,KAAO,CACLtzF,KAAK23C,KAAKwvB,QAAQlxD,KAAK,gBACvB8jE,EAAQ4H,GAAY4R,SAASvzF,KAAK23C,KAAK/I,MAAO9iC,EAAQ8iC,OAEtD,IAGM6kD,EAAaJ,GAHmC,IAApC1zF,KAAKm2B,IAAIikD,EAAMN,KAAOM,EAAMR,OAIxCma,EAAaJ,GAHmC,IAApC3zF,KAAKm2B,IAAIikD,EAAML,KAAOK,EAAMP,OAK9C4Z,EAAYK,GAAcC,EAAaD,EAAaC,CACtD,CAEIN,EAAYtnF,EAAQonF,aACtBE,EAAYtnF,EAAQonF,aACXE,EAAYtnF,EAAQknF,eAC7BI,EAAYtnF,EAAQknF,cAGtB,IACMW,EAAmB,CACvBt8E,SAFasqE,GAAYiS,WAAW7Z,GAGpCv9C,MAAO42D,EACPS,UAAW/nF,EAAQ+nF,WAErB7zF,KAAKgS,OAAO2hF,EACd,GAIA,CAAAltF,IAAA,QAAAnD,MAMA,SAAMkiE,GAAsB,IAAd15D,EAAO7K,UAAA0D,OAAA,QAAA1C,IAAAhB,UAAA,GAAAA,UAAA,GAAG,CAAA,EACtB,QAAgCgB,IAA5BjC,KAAK23C,KAAK/I,MAAM42B,GAAuB,CACzC,IAAMsuB,EAAe,CACnBxmF,EAAGtN,KAAK23C,KAAK/I,MAAM42B,GAAQl4D,EAC3BgE,EAAGtR,KAAK23C,KAAK/I,MAAM42B,GAAQl0D,GAE7BxF,EAAQuL,SAAWy8E,EACnBhoF,EAAQioF,aAAevuB,EAEvBxlE,KAAKgS,OAAOlG,EACd,MACEu9B,QAAQjpC,MAAM,SAAWolE,EAAS,oBAEtC,GAEA,CAAA/+D,IAAA,SAAAnD,MAOA,SAAOwI,GACL,QAAgB7J,IAAZ6J,EAAJ,CAKA,GAAsB,MAAlBA,EAAQqgB,OAAgB,CAC1B,GAAwB,MAApBrgB,EAAQqgB,OAAO7e,GAGjB,GADAxB,EAAQqgB,OAAO7e,GAAKxB,EAAQqgB,OAAO7e,GAC9Bg6D,GAAgBx7D,EAAQqgB,OAAO7e,GAClC,MAAM,IAAItJ,UACR,yDAIJ8H,EAAQqgB,OAAO7e,EAAI,EAGrB,GAAwB,MAApBxB,EAAQqgB,OAAO7a,GAGjB,GADAxF,EAAQqgB,OAAO7a,GAAKxF,EAAQqgB,OAAO7a,GAC9Bg2D,GAAgBx7D,EAAQqgB,OAAO7a,GAClC,MAAM,IAAItN,UACR,yDAIJ8H,EAAQqgB,OAAO7e,EAAI,CAEvB,MACExB,EAAQqgB,OAAS,CACf7e,EAAG,EACHgE,EAAG,GAIP,GAAwB,MAApBxF,EAAQuL,SAAkB,CAC5B,GAA0B,MAAtBvL,EAAQuL,SAAS/J,GAGnB,GADAxB,EAAQuL,SAAS/J,GAAKxB,EAAQuL,SAAS/J,GAClCg6D,GAAgBx7D,EAAQuL,SAAS/J,GACpC,MAAM,IAAItJ,UACR,2DAIJ8H,EAAQuL,SAAS/J,EAAI,EAGvB,GAA0B,MAAtBxB,EAAQuL,SAAS/F,GAGnB,GADAxF,EAAQuL,SAAS/F,GAAKxF,EAAQuL,SAAS/F,GAClCg2D,GAAgBx7D,EAAQuL,SAAS/F,GACpC,MAAM,IAAItN,UACR,2DAIJ8H,EAAQuL,SAAS/J,EAAI,CAEzB,MACExB,EAAQuL,SAAWrX,KAAKg0F,kBAG1B,GAAqB,MAAjBloF,EAAQ0wB,OAGV,GADA1wB,EAAQ0wB,OAAS1wB,EAAQ0wB,QACnB1wB,EAAQ0wB,MAAQ,GACpB,MAAM,IAAIx4B,UACR,iEAIJ8H,EAAQ0wB,MAAQx8B,KAAK23C,KAAKqhB,KAAKx8B,WAGPv6B,IAAtB6J,EAAQ+nF,YACV/nF,EAAQ+nF,UAAY,CAAEI,SAAU,KAER,IAAtBnoF,EAAQ+nF,YACV/nF,EAAQ+nF,UAAY,CAAEI,SAAU,KAER,IAAtBnoF,EAAQ+nF,YACV/nF,EAAQ+nF,UAAY,SAEa5xF,IAA/B6J,EAAQ+nF,UAAUI,WACpBnoF,EAAQ+nF,UAAUI,SAAW,UAEUhyF,IAArC6J,EAAQ+nF,UAAUK,iBACpBpoF,EAAQ+nF,UAAUK,eAAiB,iBAGrCl0F,KAAKm0F,YAAYroF,EAzFjB,MAFEA,EAAU,CAAA,CA4Fd,GAEA,CAAArF,IAAA,cAAAnD,MAWA,SAAYwI,GACV,QAAgB7J,IAAZ6J,EAAJ,CAGA9L,KAAKmyF,wBAA0BrmF,EAAQ+nF,UAAUK,eAEjDl0F,KAAK4yF,eACkB,IAAnB9mF,EAAQsoF,SACVp0F,KAAKyyF,eAAiB3mF,EAAQioF,aAC9B/zF,KAAK0yF,mBAAqB5mF,EAAQqgB,QAIb,GAAnBnsB,KAAKoyF,YACPpyF,KAAKq0F,mBAAkB,GAGzBr0F,KAAKqyF,YAAcryF,KAAK23C,KAAKqhB,KAAKx8B,MAClCx8B,KAAKuyF,kBAAoBvyF,KAAK23C,KAAKqhB,KAAKmzB,YACxCnsF,KAAKsyF,YAAcxmF,EAAQ0wB,MAI3Bx8B,KAAK23C,KAAKqhB,KAAKx8B,MAAQx8B,KAAKsyF,YAC5B,IAuBwCz/C,EAQjCI,EA/BDqhD,EAAat0F,KAAKw1C,OAAOm3C,YAAY,CACzCr/E,EAAG,GAAMtN,KAAKw1C,OAAOq2C,MAAMr2C,OAAOw2C,YAClC16E,EAAG,GAAMtR,KAAKw1C,OAAOq2C,MAAMr2C,OAAOy2C,eAG9BgD,EAEDqF,EAAWhnF,EAAIxB,EAAQuL,SAAS/J,EAF/B2hF,EAGDqF,EAAWhjF,EAAIxF,EAAQuL,SAAS/F,EAcrC,GAZAtR,KAAKwyF,kBAAoB,CACvBllF,EACEtN,KAAKuyF,kBAAkBjlF,EACvB2hF,EAAuBjvF,KAAKsyF,YAC5BxmF,EAAQqgB,OAAO7e,EACjBgE,EACEtR,KAAKuyF,kBAAkBjhF,EACvB29E,EAAuBjvF,KAAKsyF,YAC5BxmF,EAAQqgB,OAAO7a,GAIgB,IAA/BxF,EAAQ+nF,UAAUI,SACpB,GAA2BhyF,MAAvBjC,KAAKyyF,eACPzyF,KAAKs/E,aAAeriC,GAAApK,EAAA7yC,KAAKu0F,eAAazzF,KAAA+xC,EAAM7yC,MAC5CA,KAAK23C,KAAKwvB,QAAQ9xD,GAAG,aAAcrV,KAAKs/E,mBAExCt/E,KAAK23C,KAAKqhB,KAAKx8B,MAAQx8B,KAAKsyF,YAC5BtyF,KAAK23C,KAAKqhB,KAAKmzB,YAAcnsF,KAAKwyF,kBAClCxyF,KAAK23C,KAAKwvB,QAAQlxD,KAAK,uBAGzBjW,KAAKiyF,eACH,GAAK,GAAKnmF,EAAQ+nF,UAAUI,SAAW,OAAU,EAAI,GACvDj0F,KAAKmyF,wBAA0BrmF,EAAQ+nF,UAAUK,eAEjDl0F,KAAKs/E,aAAeriC,GAAAhK,EAAAjzC,KAAKq0F,mBAAiBvzF,KAAAmyC,EAAMjzC,MAChDA,KAAK23C,KAAKwvB,QAAQ9xD,GAAG,aAAcrV,KAAKs/E,cACxCt/E,KAAK23C,KAAKwvB,QAAQlxD,KAAK,kBA3DzB,CA6DF,GAEA,CAAAxP,IAAA,gBAAAnD,MAKA,WACE,IAAMwwF,EACD9zF,KAAK23C,KAAK/I,MAAM5uC,KAAKyyF,gBAAgBnlF,EADpCwmF,EAED9zF,KAAK23C,KAAK/I,MAAM5uC,KAAKyyF,gBAAgBnhF,EAEpCgjF,EAAat0F,KAAKw1C,OAAOm3C,YAAY,CACzCr/E,EAAG,GAAMtN,KAAKw1C,OAAOq2C,MAAMr2C,OAAOw2C,YAClC16E,EAAG,GAAMtR,KAAKw1C,OAAOq2C,MAAMr2C,OAAOy2C,eAE9BgD,EAEDqF,EAAWhnF,EAAIwmF,EAFd7E,EAGDqF,EAAWhjF,EAAIwiF,EAEdvB,EAAoBvyF,KAAK23C,KAAKqhB,KAAKmzB,YACnCqG,EAAoB,CACxBllF,EACEilF,EAAkBjlF,EAClB2hF,EAAuBjvF,KAAK23C,KAAKqhB,KAAKx8B,MACtCx8B,KAAK0yF,mBAAmBplF,EAC1BgE,EACEihF,EAAkBjhF,EAClB29E,EAAuBjvF,KAAK23C,KAAKqhB,KAAKx8B,MACtCx8B,KAAK0yF,mBAAmBphF,GAG5BtR,KAAK23C,KAAKqhB,KAAKmzB,YAAcqG,CAC/B,GAEA,CAAA/rF,IAAA,cAAAnD,MAGA,gBAC8BrB,IAAxBjC,KAAKyyF,qBAAsDxwF,IAAtBjC,KAAKs/E,eAC5Ct/E,KAAK23C,KAAKwvB,QAAQzxD,IAAI,aAAc1V,KAAKs/E,cACzCt/E,KAAKyyF,oBAAiBxwF,EACtBjC,KAAK0yF,wBAAqBzwF,EAE9B,GAEA,CAAAwE,IAAA,oBAAAnD,MAIA,WAAoC,IAAlBkxF,EAAQvzF,UAAA0D,OAAA,QAAA1C,IAAAhB,UAAA,IAAAA,UAAA,GACxBjB,KAAKoyF,YAAcpyF,KAAKiyF,eACxBjyF,KAAKoyF,YAA0B,IAAboC,EAAoB,EAAMx0F,KAAKoyF,WAEjD,IAAMqC,EAAWC,GAAgB10F,KAAKmyF,yBACpCnyF,KAAKoyF,YAeP,GAZApyF,KAAK23C,KAAKqhB,KAAKx8B,MACbx8B,KAAKqyF,aAAeryF,KAAKsyF,YAActyF,KAAKqyF,aAAeoC,EAC7Dz0F,KAAK23C,KAAKqhB,KAAKmzB,YAAc,CAC3B7+E,EACEtN,KAAKuyF,kBAAkBjlF,GACtBtN,KAAKwyF,kBAAkBllF,EAAItN,KAAKuyF,kBAAkBjlF,GAAKmnF,EAC1DnjF,EACEtR,KAAKuyF,kBAAkBjhF,GACtBtR,KAAKwyF,kBAAkBlhF,EAAItR,KAAKuyF,kBAAkBjhF,GAAKmjF,GAIxDz0F,KAAKoyF,YAAc,EAAK,CAGY,IAAAh/C,EAAtC,GAFApzC,KAAK23C,KAAKwvB,QAAQzxD,IAAI,aAAc1V,KAAKs/E,cACzCt/E,KAAKoyF,WAAa,EACSnwF,MAAvBjC,KAAKyyF,eACPzyF,KAAKs/E,aAAeriC,GAAA7J,EAAApzC,KAAKu0F,eAAazzF,KAAAsyC,EAAMpzC,MAC5CA,KAAK23C,KAAKwvB,QAAQ9xD,GAAG,aAAcrV,KAAKs/E,cAE1Ct/E,KAAK23C,KAAKwvB,QAAQlxD,KAAK,oBACzB,CACF,GAEA,CAAAxP,IAAA,WAAAnD,MAIA,WACE,OAAOtD,KAAK23C,KAAKqhB,KAAKx8B,KACxB,GAEA,CAAA/1B,IAAA,kBAAAnD,MAIA,WACE,OAAOtD,KAAKw1C,OAAOm3C,YAAY,CAC7Br/E,EAAG,GAAMtN,KAAKw1C,OAAOq2C,MAAMr2C,OAAOw2C,YAClC16E,EAAG,GAAMtR,KAAKw1C,OAAOq2C,MAAMr2C,OAAOy2C,cAEtC,KAAC+F,CAAA,CA7ZO,GELK,SAAS2C,GAAS7oF,GAC/B,IAOI+C,EAPAkrB,EAAiBjuB,GAAWA,EAAQiuB,iBAAkB,EAEtDm1D,EAAYpjF,GAAWA,EAAQojF,WAAapvF,OAE5C80F,EAAmB,CAAA,EACnBC,EAAS,CAACC,QAAQ,CAAE,EAAEC,MAAM,CAAE,GAC9BC,EAAQ,CAAA,EAIZ,IAAKnmF,EAAI,GAAIA,GAAK,IAAKA,IAAMmmF,EAAMhwF,OAAOioD,aAAap+C,IAAM,CAACm+C,KAAWn+C,EAAI,GAAV,GAAe4/B,OAAO,GAEzF,IAAK5/B,EAAI,GAAIA,GAAK,GAAIA,IAAMmmF,EAAMhwF,OAAOioD,aAAap+C,IAAM,CAACm+C,KAAKn+C,EAAG4/B,OAAO,GAE5E,IAAK5/B,EAAI,EAAIA,GAAK,EAAKA,IAAMmmF,EAAM,GAAKnmF,GAAK,CAACm+C,KAAK,GAAKn+C,EAAG4/B,OAAO,GAElE,IAAK5/B,EAAI,EAAIA,GAAK,GAAMA,IAAMmmF,EAAM,IAAMnmF,GAAK,CAACm+C,KAAK,IAAMn+C,EAAG4/B,OAAO,GAErE,IAAK5/B,EAAI,EAAIA,GAAK,EAAKA,IAAMmmF,EAAM,MAAQnmF,GAAK,CAACm+C,KAAK,GAAKn+C,EAAG4/B,OAAO,GAGrEumD,EAAM,QAAU,CAAChoC,KAAK,IAAKve,OAAO,GAClCumD,EAAM,QAAU,CAAChoC,KAAK,IAAKve,OAAO,GAClCumD,EAAM,QAAU,CAAChoC,KAAK,IAAKve,OAAO,GAClCumD,EAAM,QAAU,CAAChoC,KAAK,IAAKve,OAAO,GAClCumD,EAAM,QAAU,CAAChoC,KAAK,IAAKve,OAAO,GAElCumD,EAAY,KAAK,CAAChoC,KAAK,GAAIve,OAAO,GAClCumD,EAAU,GAAO,CAAChoC,KAAK,GAAIve,OAAO,GAClCumD,EAAa,MAAI,CAAChoC,KAAK,GAAIve,OAAO,GAClCumD,EAAY,KAAK,CAAChoC,KAAK,GAAIve,OAAO,GAElCumD,EAAa,MAAI,CAAChoC,KAAK,GAAIve,OAAO,GAClCumD,EAAa,MAAI,CAAChoC,KAAK,GAAIve,OAAO,GAClCumD,EAAa,MAAI,CAAChoC,KAAK,GAAIve,WAAOxsC,GAClC+yF,EAAW,IAAM,CAAChoC,KAAK,GAAIve,OAAO,GAClCumD,EAAiB,UAAI,CAAChoC,KAAK,EAAGve,OAAO,GACrCumD,EAAW,IAAU,CAAChoC,KAAK,EAAGve,OAAO,GACrCumD,EAAY,KAAS,CAAChoC,KAAK,GAAIve,OAAO,GACtCumD,EAAW,IAAU,CAAChoC,KAAK,GAAIve,OAAO,GACtCumD,EAAc,OAAO,CAAChoC,KAAK,GAAIve,OAAO,GACtCumD,EAAc,OAAO,CAAChoC,KAAK,GAAIve,OAAO,GACtCumD,EAAgB,SAAK,CAAChoC,KAAK,GAAIve,OAAO,GAEtCumD,EAAM,KAAW,CAAChoC,KAAK,IAAKve,OAAO,GACnCumD,EAAM,KAAW,CAAChoC,KAAK,IAAKve,OAAO,GACnCumD,EAAM,KAAW,CAAChoC,KAAK,IAAKve,OAAO,GACnCumD,EAAM,KAAW,CAAChoC,KAAK,IAAKve,OAAO,GAInC,IAAIwmD,EAAO,SAAS1/E,GAAQ2/E,EAAY3/E,EAAM,UAAW,EACrD4/E,EAAK,SAAS5/E,GAAQ2/E,EAAY3/E,EAAM,QAAS,EAGjD2/E,EAAc,SAAS3/E,EAAM+C,GAC/B,QAAoCrW,IAAhC4yF,EAAOv8E,GAAM/C,EAAM6/E,SAAwB,CAE7C,IADA,IAAIC,EAAQR,EAAOv8E,GAAM/C,EAAM6/E,SACtBvmF,EAAI,EAAGA,EAAIwmF,EAAM1wF,OAAQkK,UACT5M,IAAnBozF,EAAMxmF,GAAG4/B,OAGc,GAAlB4mD,EAAMxmF,GAAG4/B,OAAmC,GAAlBl5B,EAAM+/E,UAGd,GAAlBD,EAAMxmF,GAAG4/B,OAAoC,GAAlBl5B,EAAM+/E,WALxCD,EAAMxmF,GAAGzN,GAAGmU,GAUM,GAAlBwkB,GACFxkB,EAAMwkB,gBAET,CACL,EAyFE,OAtFA66D,EAAiBp0F,KAAO,SAASiG,EAAKmuB,EAAUtc,GAI9C,QAHarW,IAATqW,IACFA,EAAO,gBAEUrW,IAAf+yF,EAAMvuF,GACR,MAAM,IAAIyiC,MAAM,oBAAsBziC,QAEFxE,IAAlC4yF,EAAOv8E,GAAM08E,EAAMvuF,GAAKumD,QAC1B6nC,EAAOv8E,GAAM08E,EAAMvuF,GAAKumD,MAAQ,IAElC6nC,EAAOv8E,GAAM08E,EAAMvuF,GAAKumD,MAAMlmD,KAAK,CAAC1F,GAAGwzB,EAAU6Z,MAAMumD,EAAMvuF,GAAKgoC,OACtE,EAIEmmD,EAAiBW,QAAU,SAAS3gE,EAAUtc,GAI5C,IAAK,IAAI7R,UAHIxE,IAATqW,IACFA,EAAO,WAEO08E,EACVA,EAAMv0F,eAAegG,IACvBmuF,EAAiBp0F,KAAKiG,EAAImuB,EAAStc,EAG3C,EAGEs8E,EAAiBY,OAAS,SAASjgF,GACjC,IAAK,IAAI9O,KAAOuuF,EACd,GAAIA,EAAMv0F,eAAegG,GAAM,CAC7B,GAAsB,GAAlB8O,EAAM+/E,UAAwC,GAApBN,EAAMvuF,GAAKgoC,OAAiBl5B,EAAM6/E,SAAWJ,EAAMvuF,GAAKumD,KACpF,OAAOvmD,EAEJ,GAAsB,GAAlB8O,EAAM+/E,UAAyC,GAApBN,EAAMvuF,GAAKgoC,OAAkBl5B,EAAM6/E,SAAWJ,EAAMvuF,GAAKumD,KAC3F,OAAOvmD,EAEJ,GAAI8O,EAAM6/E,SAAWJ,EAAMvuF,GAAKumD,MAAe,SAAPvmD,EAC3C,OAAOA,CAEV,CAEH,MAAO,sCACX,EAGEmuF,EAAiBa,OAAS,SAAShvF,EAAKmuB,EAAUtc,GAIhD,QAHarW,IAATqW,IACFA,EAAO,gBAEUrW,IAAf+yF,EAAMvuF,GACR,MAAM,IAAIyiC,MAAM,oBAAsBziC,GAExC,QAAiBxE,IAAb2yB,EAAwB,CAC1B,IAAI8gE,EAAc,GACdL,EAAQR,EAAOv8E,GAAM08E,EAAMvuF,GAAKumD,MACpC,QAAc/qD,IAAVozF,EACF,IAAK,IAAIxmF,EAAI,EAAGA,EAAIwmF,EAAM1wF,OAAQkK,IAC1BwmF,EAAMxmF,GAAGzN,IAAMwzB,GAAYygE,EAAMxmF,GAAG4/B,OAASumD,EAAMvuF,GAAKgoC,OAC5DinD,EAAY5uF,KAAK+tF,EAAOv8E,GAAM08E,EAAMvuF,GAAKumD,MAAMn+C,IAIrDgmF,EAAOv8E,GAAM08E,EAAMvuF,GAAKumD,MAAQ0oC,CACjC,MAECb,EAAOv8E,GAAM08E,EAAMvuF,GAAKumD,MAAQ,EAEtC,EAGE4nC,EAAiBzwD,MAAQ,WACvB0wD,EAAS,CAACC,QAAQ,CAAE,EAAEC,MAAM,CAAE,EAClC,EAGEH,EAAiBh2D,QAAU,WACzBi2D,EAAS,CAACC,QAAQ,CAAE,EAAEC,MAAM,CAAE,GAC9B7F,EAAUr5E,oBAAoB,UAAWo/E,GAAM,GAC/C/F,EAAUr5E,oBAAoB,QAASs/E,GAAI,EAC/C,EAGEjG,EAAU55E,iBAAiB,UAAU2/E,GAAK,GAC1C/F,EAAU55E,iBAAiB,QAAQ6/E,GAAG,GAG/BP,CACT,mDC/JMe,GAAiB,WAKrB,SAAAA,EAAYh+C,EAAMnC,GAAQ,IAAA5V,EAAA5/B,KAAA4jB,QAAA+xE,GACxB31F,KAAK23C,KAAOA,EACZ33C,KAAKw1C,OAASA,EAEdx1C,KAAK41F,cAAe,EACpB51F,KAAK61F,kBAAoB,GACzB71F,KAAK81F,eAAiB,GACtB91F,KAAK2yF,UAAY,EACjB3yF,KAAK+1F,WAAY,EAEjB/1F,KAAK23C,KAAKwvB,QAAQ9xD,GAAG,YAAY,WAC/BuqB,EAAKm2D,WAAY,EACjBn2D,EAAKo2D,2BACP,IACAh2F,KAAK23C,KAAKwvB,QAAQ9xD,GAAG,cAAc,WACjCuqB,EAAKm2D,WAAY,EACjBn2D,EAAKo2D,2BACP,IACAh2F,KAAK23C,KAAKwvB,QAAQ9xD,GAAG,WAAW,gBACRpT,IAAlB29B,EAAK+0D,UACP/0D,EAAK+0D,SAAS/1D,SAElB,IAEA5+B,KAAK8L,QAAU,EACjB,CAybC,OAvbDiiB,GAAA4nE,EAAA,CAAA,CAAAlvF,IAAA,aAAAnD,MAIA,SAAWwI,QACO7J,IAAZ6J,IACF9L,KAAK8L,QAAUA,EACf9L,KAAK6a,SAET,GAEA,CAAApU,IAAA,SAAAnD,MAGA,YACyC,IAAnCtD,KAAK8L,QAAQmqF,mBACW,IAAtBj2F,KAAK41F,cACP51F,KAAKk2F,0BAEwB,IAAtBl2F,KAAK41F,cACd51F,KAAKm2F,kBAGPn2F,KAAKg2F,2BACP,GAEA,CAAAvvF,IAAA,kBAAAnD,MAGA,WAEE,GAAqC,GAAjCtD,KAAK61F,kBAAkBlxF,OAAa,CACtC,IAAK,IAAIkK,EAAI,EAAGA,EAAI7O,KAAK61F,kBAAkBlxF,OAAQkK,IACjD7O,KAAK61F,kBAAkBhnF,GAAG+vB,UAE5B5+B,KAAK61F,kBAAoB,EAC3B,CAIE71F,KAAKo2F,eACLp2F,KAAKo2F,cAAuB,SAC5Bp2F,KAAKo2F,cAAuB,QAAE17D,YAE9B16B,KAAKo2F,cAAuB,QAAE17D,WAAWod,YACvC93C,KAAKo2F,cAAuB,SAIhCp2F,KAAK41F,cAAe,CACtB,GAEA,CAAAnvF,IAAA,yBAAAnD,MAQA,WAAyB,IAAA0hC,EAAAhlC,KACvBA,KAAKm2F,kBAELn2F,KAAKo2F,cAAgB,GACrB,IAAMC,EAAiB,CACrB,KACA,OACA,OACA,QACA,SACA,UACA,eAEIC,EAAuB,CAC3B,UACA,YACA,YACA,aACA,UACA,WACA,QAGFt2F,KAAKo2F,cAAuB,QAAIv0F,SAASkH,cAAc,OACvD/I,KAAKo2F,cAAuB,QAAE/G,UAAY,iBAC1CrvF,KAAKw1C,OAAOq2C,MAAMxxE,YAAYra,KAAKo2F,cAAuB,SAE1D,IAAK,IAAIvnF,EAAI,EAAGA,EAAIwnF,EAAe1xF,OAAQkK,IAAK,CAC9C7O,KAAKo2F,cAAcC,EAAexnF,IAAMhN,SAASkH,cAAc,OAC/D/I,KAAKo2F,cAAcC,EAAexnF,IAAIwgF,UACpC,kBAAoBgH,EAAexnF,GACrC7O,KAAKo2F,cAAuB,QAAE/7E,YAC5Bra,KAAKo2F,cAAcC,EAAexnF,KAGpC,IACwCigB,EAEjC+c,EAHD4hD,EAAS,IAAIxjD,GAAOjqC,KAAKo2F,cAAcC,EAAexnF,KAC5D,GAAgC,SAA5BynF,EAAqBznF,GACvB2+E,GAAQC,EAAQxwC,GAAAnuB,EAAI9uB,KAACu2F,MAAIz1F,KAAAguB,EAAM9uB,YAE/BwtF,GAAQC,EAAQxwC,GAAApR,EAAA7rC,KAAKw2F,cAAY11F,KAAA+qC,EAAM7rC,KAAMs2F,EAAqBznF,KAGpE7O,KAAK61F,kBAAkB/uF,KAAK2mF,EAC9B,CAIA,IAAMQ,EAAc,IAAIhkD,GAAOjqC,KAAKw1C,OAAOq2C,OAC3C6B,GAAUO,GAAa,WACrBjpD,EAAKyxD,eACP,IACAz2F,KAAK61F,kBAAkB/uF,KAAKmnF,GAE5BjuF,KAAK41F,cAAe,CACtB,GAEA,CAAAnvF,IAAA,eAAAnD,MAIA,SAAaozF,GACoC,IAAA7jD,OAAX5wC,IAAhCjC,KAAK81F,eAAeY,KACtB12F,KAAK81F,eAAeY,GAAUz5C,GAAApK,OAAK6jD,IAAO51F,KAAA+xC,EAAM7yC,MAChDA,KAAK23C,KAAKwvB,QAAQ9xD,GAAG,aAAcrV,KAAK81F,eAAeY,IACvD12F,KAAK23C,KAAKwvB,QAAQlxD,KAAK,mBAE3B,GAEA,CAAAxP,IAAA,mBAAAnD,MAIA,SAAiBozF,QACqBz0F,IAAhCjC,KAAK81F,eAAeY,KACtB12F,KAAK23C,KAAKwvB,QAAQzxD,IAAI,aAAc1V,KAAK81F,eAAeY,IACxD12F,KAAK23C,KAAKwvB,QAAQlxD,KAAK,yBAChBjW,KAAK81F,eAAeY,GAE/B,GAEA,CAAAjwF,IAAA,OAAAnD,MAKA,YACM,IAAIitB,MAAO/nB,UAAYxI,KAAK2yF,UAAY,MAE1C3yF,KAAK23C,KAAKwvB,QAAQlxD,KAAK,MAAO,CAAEg+E,SAAU,MAC1Cj0F,KAAK2yF,WAAY,IAAIpiE,MAAO/nB,UAEhC,GAEA,CAAA/B,IAAA,gBAAAnD,MAKA,WACE,IAAK,IAAMqzF,KAAe32F,KAAK81F,eAE3BzzF,OAAOzB,UAAUH,eAAeK,KAAKd,KAAK81F,eAAgBa,KAE1D32F,KAAK23C,KAAKwvB,QAAQzxD,IAAI,aAAc1V,KAAK81F,eAAea,IACxD32F,KAAK23C,KAAKwvB,QAAQlxD,KAAK,mBAG3BjW,KAAK81F,eAAiB,EACxB,GACA,CAAArvF,IAAA,UAAAnD,MAIA,WACEtD,KAAK23C,KAAKqhB,KAAKmzB,YAAY76E,GAAKtR,KAAK8L,QAAQ8qF,SAASC,MAAMvlF,CAC9D,GACA,CAAA7K,IAAA,YAAAnD,MAIA,WACEtD,KAAK23C,KAAKqhB,KAAKmzB,YAAY76E,GAAKtR,KAAK8L,QAAQ8qF,SAASC,MAAMvlF,CAC9D,GACA,CAAA7K,IAAA,YAAAnD,MAIA,WACEtD,KAAK23C,KAAKqhB,KAAKmzB,YAAY7+E,GAAKtN,KAAK8L,QAAQ8qF,SAASC,MAAMvpF,CAC9D,GACA,CAAA7G,IAAA,aAAAnD,MAIA,WACEtD,KAAK23C,KAAKqhB,KAAKmzB,YAAY7+E,GAAKtN,KAAK8L,QAAQ8qF,SAASC,MAAMvpF,CAC9D,GACA,CAAA7G,IAAA,UAAAnD,MAIA,WACE,IAAMwzF,EAAW92F,KAAK23C,KAAKqhB,KAAKx8B,MAC1BA,EAAQx8B,KAAK23C,KAAKqhB,KAAKx8B,OAAS,EAAIx8B,KAAK8L,QAAQ8qF,SAASC,MAAME,MAChE5K,EAAcnsF,KAAK23C,KAAKqhB,KAAKmzB,YAC7B6K,EAAYx6D,EAAQs6D,EACpBG,GACH,EAAID,GAAah3F,KAAKw1C,OAAOs4C,iBAAiBxgF,EAC/C6+E,EAAY7+E,EAAI0pF,EACZE,GACH,EAAIF,GAAah3F,KAAKw1C,OAAOs4C,iBAAiBx8E,EAC/C66E,EAAY76E,EAAI0lF,EAElBh3F,KAAK23C,KAAKqhB,KAAKx8B,MAAQA,EACvBx8B,KAAK23C,KAAKqhB,KAAKmzB,YAAc,CAAE7+E,EAAG2pF,EAAI3lF,EAAG4lF,GACzCl3F,KAAK23C,KAAKwvB,QAAQlxD,KAAK,OAAQ,CAC7B0jB,UAAW,IACX6C,MAAOx8B,KAAK23C,KAAKqhB,KAAKx8B,MACtB26D,QAAS,MAEb,GAEA,CAAA1wF,IAAA,WAAAnD,MAIA,WACE,IAAMwzF,EAAW92F,KAAK23C,KAAKqhB,KAAKx8B,MAC1BA,EAAQx8B,KAAK23C,KAAKqhB,KAAKx8B,OAAS,EAAIx8B,KAAK8L,QAAQ8qF,SAASC,MAAME,MAChE5K,EAAcnsF,KAAK23C,KAAKqhB,KAAKmzB,YAC7B6K,EAAYx6D,EAAQs6D,EACpBG,GACH,EAAID,GAAah3F,KAAKw1C,OAAOs4C,iBAAiBxgF,EAC/C6+E,EAAY7+E,EAAI0pF,EACZE,GACH,EAAIF,GAAah3F,KAAKw1C,OAAOs4C,iBAAiBx8E,EAC/C66E,EAAY76E,EAAI0lF,EAElBh3F,KAAK23C,KAAKqhB,KAAKx8B,MAAQA,EACvBx8B,KAAK23C,KAAKqhB,KAAKmzB,YAAc,CAAE7+E,EAAG2pF,EAAI3lF,EAAG4lF,GACzCl3F,KAAK23C,KAAKwvB,QAAQlxD,KAAK,OAAQ,CAC7B0jB,UAAW,IACX6C,MAAOx8B,KAAK23C,KAAKqhB,KAAKx8B,MACtB26D,QAAS,MAEb,GAEA,CAAA1wF,IAAA,4BAAAnD,MAGA,WAA4B,IAiBK2vC,EAAAG,EAAAgkD,EAAAC,EAAAC,EAAAC,EAAAC,EAAAC,EAAAC,EAAAC,EAAAC,EAAAC,EAAAC,EAAAC,EAAAC,EAAAC,EAAAC,EAAAC,EAAAC,EAAAC,EAAAC,EAAAC,EAAAC,EAAAC,EAjBLlzD,EAAAvlC,WACJiC,IAAlBjC,KAAK20F,UACP30F,KAAK20F,SAAS/1D,WAGsB,IAAlC5+B,KAAK8L,QAAQ8qF,SAASznD,YACmB,IAAvCnvC,KAAK8L,QAAQ8qF,SAAS8B,aACxB14F,KAAK20F,SAAWA,GAAS,CAAEzF,UAAWpvF,OAAQi6B,gBAAgB,IAE9D/5B,KAAK20F,SAAWA,GAAS,CACvBzF,UAAWlvF,KAAKw1C,OAAOq2C,MACvB9xD,gBAAgB,IAIpB/5B,KAAK20F,SAASxwD,SAES,IAAnBnkC,KAAK+1F,YACP94C,GAAAhK,EAAIjzC,KAAC20F,UAAQ7zF,KAAAmyC,EACX,MACA,WACE1N,EAAKixD,aAAa,UACnB,GACD,WAEFv5C,GAAA7J,EAAIpzC,KAAC20F,UAAQ7zF,KAAAsyC,EACX,QACA,WACE7N,EAAKixD,aAAa,YACnB,GACD,WAEFv5C,GAAAm6C,EAAIp3F,KAAC20F,UAAQ7zF,KAAAs2F,EACX,QACA,WACE7xD,EAAKixD,aAAa,YACnB,GACD,WAEFv5C,GAAAo6C,EAAIr3F,KAAC20F,UAAQ7zF,KAAAu2F,EACX,SACA,WACE9xD,EAAKixD,aAAa,aACnB,GACD,WAEFv5C,GAAAq6C,EAAIt3F,KAAC20F,UAAQ7zF,KAAAw2F,EACX,KACA,WACE/xD,EAAKixD,aAAa,UACnB,GACD,WAEFv5C,GAAAs6C,EAAIv3F,KAAC20F,UAAQ7zF,KAAAy2F,EACX,QACA,WACEhyD,EAAKixD,aAAa,UACnB,GACD,WAEFv5C,GAAAu6C,EAAIx3F,KAAC20F,UAAQ7zF,KAAA02F,EACX,QACA,WACEjyD,EAAKixD,aAAa,WACnB,GACD,WAEFv5C,GAAAw6C,EAAIz3F,KAAC20F,UAAQ7zF,KAAA22F,EACX,KACA,WACElyD,EAAKixD,aAAa,WACnB,GACD,WAEFv5C,GAAAy6C,EAAI13F,KAAC20F,UAAQ7zF,KAAA42F,EACX,KACA,WACEnyD,EAAKixD,aAAa,WACnB,GACD,WAEFv5C,GAAA06C,EAAI33F,KAAC20F,UAAQ7zF,KAAA62F,EACX,KACA,WACEpyD,EAAKixD,aAAa,UACnB,GACD,WAEFv5C,GAAA26C,EAAI53F,KAAC20F,UAAQ7zF,KAAA82F,EACX,UACA,WACEryD,EAAKixD,aAAa,UACnB,GACD,WAEFv5C,GAAA46C,EAAI73F,KAAC20F,UAAQ7zF,KAAA+2F,EACX,YACA,WACEtyD,EAAKixD,aAAa,WACnB,GACD,WAGFv5C,GAAA66C,EAAI93F,KAAC20F,UAAQ7zF,KAAAg3F,EACX,MACA,WACEvyD,EAAKozD,iBAAiB,UACvB,GACD,SAEF17C,GAAA86C,EAAI/3F,KAAC20F,UAAQ7zF,KAAAi3F,EACX,QACA,WACExyD,EAAKozD,iBAAiB,YACvB,GACD,SAEF17C,GAAA+6C,EAAIh4F,KAAC20F,UAAQ7zF,KAAAk3F,EACX,QACA,WACEzyD,EAAKozD,iBAAiB,YACvB,GACD,SAEF17C,GAAAg7C,EAAIj4F,KAAC20F,UAAQ7zF,KAAAm3F,EACX,SACA,WACE1yD,EAAKozD,iBAAiB,aACvB,GACD,SAEF17C,GAAAi7C,EAAIl4F,KAAC20F,UAAQ7zF,KAAAo3F,EACX,KACA,WACE3yD,EAAKozD,iBAAiB,UACvB,GACD,SAEF17C,GAAAk7C,EAAIn4F,KAAC20F,UAAQ7zF,KAAAq3F,EACX,QACA,WACE5yD,EAAKozD,iBAAiB,UACvB,GACD,SAEF17C,GAAAm7C,EAAIp4F,KAAC20F,UAAQ7zF,KAAAs3F,EACX,QACA,WACE7yD,EAAKozD,iBAAiB,WACvB,GACD,SAEF17C,GAAAo7C,EAAIr4F,KAAC20F,UAAQ7zF,KAAAu3F,EACX,KACA,WACE9yD,EAAKozD,iBAAiB,WACvB,GACD,SAEF17C,GAAAq7C,EAAIt4F,KAAC20F,UAAQ7zF,KAAAw3F,EACX,KACA,WACE/yD,EAAKozD,iBAAiB,WACvB,GACD,SAEF17C,GAAAs7C,EAAIv4F,KAAC20F,UAAQ7zF,KAAAy3F,EACX,KACA,WACEhzD,EAAKozD,iBAAiB,UACvB,GACD,SAEF17C,GAAAu7C,EAAIx4F,KAAC20F,UAAQ7zF,KAAA03F,EACX,UACA,WACEjzD,EAAKozD,iBAAiB,UACvB,GACD,SAEF17C,GAAAw7C,EAAIz4F,KAAC20F,UAAQ7zF,KAAA23F,EACX,YACA,WACElzD,EAAKozD,iBAAiB,WACvB,GACD,UAIR,KAAChD,CAAA,CAvdoB,y/BCCvB,IAGMiD,GAAkB,WAMtB,SAAAA,EAAYjhD,EAAMnC,EAAQqjD,GAAkB,IAAA/pE,EAAA+c,EAAAgH,EAAAI,EAAAG,EAAAgkD,EAAAC,EAAAC,EAAAC,EAAAC,EAAAC,EAAAC,EAAAC,EAAA/zE,QAAAg1E,GAC1C54F,KAAK23C,KAAOA,EACZ33C,KAAKw1C,OAASA,EACdx1C,KAAK64F,iBAAmBA,EACxB74F,KAAK84F,kBAAoB,IAAInD,GAAkBh+C,EAAMnC,GAGrDx1C,KAAK23C,KAAKq4C,eAAeC,MAAQhzC,GAAAnuB,EAAI9uB,KAACiwF,OAAKnvF,KAAAguB,EAAM9uB,MACjDA,KAAK23C,KAAKq4C,eAAexC,QAAUvwC,GAAApR,EAAI7rC,KAACwtF,SAAO1sF,KAAA+qC,EAAM7rC,MACrDA,KAAK23C,KAAKq4C,eAAeE,YAAcjzC,GAAApK,EAAI7yC,KAACkwF,aAAWpvF,KAAA+xC,EAAM7yC,MAC7DA,KAAK23C,KAAKq4C,eAAeG,OAASlzC,GAAAhK,EAAIjzC,KAACmwF,QAAMrvF,KAAAmyC,EAAMjzC,MACnDA,KAAK23C,KAAKq4C,eAAeI,YAAcnzC,GAAA7J,EAAIpzC,KAACowF,aAAWtvF,KAAAsyC,EAAMpzC,MAC7DA,KAAK23C,KAAKq4C,eAAeK,OAASpzC,GAAAm6C,EAAIp3F,KAACqwF,QAAMvvF,KAAAs2F,EAAMp3F,MACnDA,KAAK23C,KAAKq4C,eAAeM,UAAYrzC,GAAAo6C,EAAIr3F,KAACswF,WAASxvF,KAAAu2F,EAAMr3F,MACzDA,KAAK23C,KAAKq4C,eAAeQ,aAAevzC,GAAAq6C,EAAIt3F,KAACwwF,cAAY1vF,KAAAw2F,EAAMt3F,MAC/DA,KAAK23C,KAAKq4C,eAAeO,QAAUtzC,GAAAs6C,EAAIv3F,KAACuwF,SAAOzvF,KAAAy2F,EAAMv3F,MACrDA,KAAK23C,KAAKq4C,eAAeS,YAAcxzC,GAAAu6C,EAAIx3F,KAACywF,aAAW3vF,KAAA02F,EAAMx3F,MAC7DA,KAAK23C,KAAKq4C,eAAetC,UAAYzwC,GAAAw6C,EAAIz3F,KAAC0tF,WAAS5sF,KAAA22F,EAAMz3F,MACzDA,KAAK23C,KAAKq4C,eAAeU,UAAYzzC,GAAAy6C,EAAI13F,KAAC0wF,WAAS5vF,KAAA42F,EAAM13F,MAEzDA,KAAK2yF,UAAY,EACjB3yF,KAAK8vF,KAAO,GACZ9vF,KAAK+vF,MAAQ,GACb/vF,KAAK+4F,WAAQ92F,EACbjC,KAAKg5F,cAAW/2F,EAChBjC,KAAKi5F,gBAAah3F,EAElBjC,KAAK23C,KAAKkvB,UAAUqyB,WAAaj8C,GAAA06C,EAAI33F,KAACk5F,YAAUp4F,KAAA62F,EAAM33F,MAEtDA,KAAK8L,QAAU,GACf9L,KAAK+7C,eAAiB,CACpBo9C,WAAW,EACXC,UAAU,EACV3kD,OAAO,EACPmiD,SAAU,CACRznD,SAAS,EACT0nD,MAAO,CAAEvpF,EAAG,GAAIgE,EAAG,GAAIylF,KAAM,KAC7B2B,cAAc,EACdW,WAAW,GAEbpD,mBAAmB,EACnBqD,aAAc,IACdC,UAAU,EACVC,UAAW,GAEbv9C,GAAcj8C,KAAK8L,QAAS9L,KAAK+7C,gBAEjC/7C,KAAKknE,oBACP,CA0uBC,OAxuBDn5C,GAAA6qE,EAAA,CAAA,CAAAnyF,IAAA,qBAAAnD,MAGA,WAAqB,IAAAs8B,EAAA5/B,KACnBA,KAAK23C,KAAKwvB,QAAQ9xD,GAAG,WAAW,WAC9BmwB,aAAa5F,EAAKq5D,mBACXr5D,EAAK+X,KAAKkvB,UAAUqyB,UAC7B,GACF,GAEA,CAAAzyF,IAAA,aAAAnD,MAIA,SAAWwI,GACT,QAAgB7J,IAAZ6J,EAAuB,CAWzBm6D,GATe,CACb,kBACA,kBACA,kBACA,WACA,cACA,aACA,wBAE6BjmE,KAAK8L,QAASA,GAG7Cs6D,GAAapmE,KAAK8L,QAASA,EAAS,YAEhCA,EAAQ+hC,UACVoO,GAAcj8C,KAAK8L,QAAQ+hC,QAAS/hC,EAAQ+hC,SACxC/hC,EAAQ+hC,QAAQF,QAClB3tC,KAAK8L,QAAQ+hC,QAAQF,MAAQkG,GAAW/nC,EAAQ+hC,QAAQF,QAG9D,CAEA3tC,KAAK84F,kBAAkB5iC,WAAWl2D,KAAK8L,QACzC,GAEA,CAAArF,IAAA,aAAAnD,MAOA,SAAWi+B,GACT,MAAO,CACLj0B,EAAGi0B,EAAMj0B,EAAImsF,GAAgBz5F,KAAKw1C,OAAOq2C,MAAMr2C,QAC/ClkC,EAAGiwB,EAAMjwB,EAAIooF,GAAe15F,KAAKw1C,OAAOq2C,MAAMr2C,QAElD,GAEA,CAAA/uC,IAAA,UAAAnD,MAMA,SAAQiS,IACF,IAAIgb,MAAO/nB,UAAYxI,KAAK2yF,UAAY,KAC1C3yF,KAAK8vF,KAAKqH,QAAUn3F,KAAKk5F,WAAW3jF,EAAM0lB,QAC1Cj7B,KAAK8vF,KAAK6J,SAAU,EACpB35F,KAAK+vF,MAAMvzD,MAAQx8B,KAAK23C,KAAKqhB,KAAKx8B,MAElCx8B,KAAK2yF,WAAY,IAAIpiE,MAAO/nB,UAEhC,GAEA,CAAA/B,IAAA,QAAAnD,MAMA,SAAMiS,GACJ,IAAM4hF,EAAUn3F,KAAKk5F,WAAW3jF,EAAM0lB,QAChC2+D,EACJ55F,KAAK64F,iBAAiB/sF,QAAQ8tF,cAC7BrkF,EAAMioB,gBAAgB,GAAGq8D,SAAWtkF,EAAMioB,gBAAgB,GAAGs8D,SAEhE95F,KAAK+5F,sBAAsB5C,EAASyC,GAEpC55F,KAAK64F,iBAAiBmB,cAAc7C,EAAS5hF,GAC7CvV,KAAK64F,iBAAiBoB,mBAAmB,QAAS1kF,EAAO4hF,EAC3D,GAEA,CAAA1wF,IAAA,cAAAnD,MAMA,SAAYiS,GACV,IAAM4hF,EAAUn3F,KAAKk5F,WAAW3jF,EAAM0lB,QACtCj7B,KAAK64F,iBAAiBoB,mBAAmB,cAAe1kF,EAAO4hF,EACjE,GAEA,CAAA1wF,IAAA,SAAAnD,MAMA,SAAOiS,GACL,IAAM4hF,EAAUn3F,KAAKk5F,WAAW3jF,EAAM0lB,QAChC2+D,EAAc55F,KAAK64F,iBAAiB/sF,QAAQ8tF,YAElD55F,KAAK+5F,sBAAsB5C,EAASyC,GAEpC55F,KAAK64F,iBAAiBmB,cAAc7C,EAAS5hF,GAC7CvV,KAAK64F,iBAAiBoB,mBAAmB,QAAS1kF,EAAO4hF,GACzDn3F,KAAK64F,iBAAiBoB,mBAAmB,OAAQ1kF,EAAO4hF,EAC1D,GAEA,CAAA1wF,IAAA,YAAAnD,MAMA,SAAUiS,GACR,IAAI,IAAIgb,MAAO/nB,UAAYxI,KAAK2yF,UAAY,GAAI,CAC9C,IAAMwE,EAAUn3F,KAAKk5F,WAAW3jF,EAAM0lB,QACtCj7B,KAAK64F,iBAAiBoB,mBAAmB,UAAW1kF,EAAO4hF,GAE3Dn3F,KAAK2yF,WAAY,IAAIpiE,MAAO/nB,SAC9B,CACF,GAEA,CAAA/B,IAAA,YAAAnD,MAIA,SAAUiS,GACR,IAAM4hF,EAAUn3F,KAAKk5F,WAAW,CAAE5rF,EAAGiI,EAAMslB,QAASvpB,EAAGiE,EAAMulB,UAC7D96B,KAAK64F,iBAAiBoB,mBAAmB,YAAa1kF,EAAO4hF,EAC/D,GAEA,CAAA1wF,IAAA,wBAAAnD,MAMA,SAAsB6zF,IACR,KADoBl2F,UAAA0D,OAAA,QAAA1C,IAAAhB,UAAA,IAAAA,UAAA,IAE9BjB,KAAK64F,iBAAiBqB,wBAAwB/C,GAE9Cn3F,KAAK64F,iBAAiBsB,cAAchD,EAExC,GAEA,CAAA1wF,IAAA,uBAAAnD,MAQA,SAAqB82F,EAAUC,GAC7B,IAAMC,EAAY,SAAUC,EAAUC,GAGpC,IAFA,IAAM7xF,EAAS,GAENkG,EAAI,EAAGA,EAAI0rF,EAAS51F,OAAQkK,IAAK,CACxC,IAAMvL,EAAQi3F,EAAS1rF,IACW,IAA9BkgC,GAAAyrD,GAAS15F,KAAT05F,EAAkBl3F,IACpBqF,EAAO7B,KAAKxD,EAEhB,CAEA,OAAOqF,GAGT,MAAO,CACLimC,MAAO0rD,EAAUF,EAASxrD,MAAOyrD,EAAUzrD,OAC3CK,MAAOqrD,EAAUF,EAASnrD,MAAOorD,EAAUprD,OAE/C,GAEA,CAAAxoC,IAAA,cAAAnD,MAOA,SAAYiS,GAGV,IAAIvV,KAAK8vF,KAAKnF,SAAd,MAK0B1oF,IAAtBjC,KAAK8vF,KAAKqH,SACZn3F,KAAKwtF,QAAQj4E,GAIf,IAAMklB,EAAOz6B,KAAK64F,iBAAiB4B,UAAUz6F,KAAK8vF,KAAKqH,SAOvD,GALAn3F,KAAK8vF,KAAKnF,UAAW,EACrB3qF,KAAK8vF,KAAK4K,UAAY,GACtB16F,KAAK8vF,KAAK3D,YAAclwC,GAAc,CAAA,EAAIj8C,KAAK23C,KAAKqhB,KAAKmzB,aACzDnsF,KAAK8vF,KAAKtqB,YAASvjE,EAEfsT,EAAMmkB,SAAS47D,SAAU,CAC3Bt1F,KAAK23C,KAAK21C,aAAaC,MAAO,EAC9B,IAAM4J,EAAUn3F,KAAKk5F,WAAW3jF,EAAM0lB,QAEtCj7B,KAAK23C,KAAK21C,aAAaj2E,SAASiO,MAAQ,CACtChY,EAAGtN,KAAKw1C,OAAOs8C,qBAAqBqF,EAAQ7pF,GAC5CgE,EAAGtR,KAAKw1C,OAAOu8C,qBAAqBoF,EAAQ7lF,IAE9CtR,KAAK23C,KAAK21C,aAAaj2E,SAASkO,IAAM,CACpCjY,EAAGtN,KAAKw1C,OAAOs8C,qBAAqBqF,EAAQ7pF,GAC5CgE,EAAGtR,KAAKw1C,OAAOu8C,qBAAqBoF,EAAQ7lF,GAEhD,MAAO,QAAarP,IAATw4B,IAAiD,IAA3Bz6B,KAAK8L,QAAQqtF,UAAoB,CAChEn5F,KAAK8vF,KAAKtqB,OAAS/qC,EAAKnzB,IAEE,IAAtBmzB,EAAKqyD,cACP9sF,KAAK64F,iBAAiB8B,aAAa,CAAE/rD,MAAO,CAACnU,EAAKnzB,MAIpDtH,KAAK64F,iBAAiBoB,mBACpB,YACA1kF,EACAvV,KAAK8vF,KAAKqH,SAGZ,IAC2DprD,EAD3DC,EAAAC,GACmBjsC,KAAK64F,iBAAiB+B,oBAAkB,IAA3D,IAAA5uD,EAAAn3B,MAAAk3B,EAAAC,EAAAz+B,KAAAiR,MAA6D,CAAA,IAAlDic,EAAIsR,EAAAzoC,MACPuR,EAAI,CACRvN,GAAImzB,EAAKnzB,GACTmzB,KAAMA,EAGNntB,EAAGmtB,EAAKntB,EACRgE,EAAGmpB,EAAKnpB,EACRupF,OAAQpgE,EAAK3uB,QAAQ8nC,MAAMtmC,EAC3BwtF,OAAQrgE,EAAK3uB,QAAQ8nC,MAAMtiC,GAG7BmpB,EAAK3uB,QAAQ8nC,MAAMtmC,GAAI,EACvBmtB,EAAK3uB,QAAQ8nC,MAAMtiC,GAAI,EAEvBtR,KAAK8vF,KAAK4K,UAAU5zF,KAAK+N,EAC3B,CAAC,CAAA,MAAAu3B,GAAAJ,EAAAxc,EAAA4c,EAAA,CAAA,QAAAJ,EAAAlpC,GAAA,CACH,MAEE9C,KAAK64F,iBAAiBoB,mBACpB,YACA1kF,EACAvV,KAAK8vF,KAAKqH,aACVl1F,GACA,EAlEJ,CAqEF,GAEA,CAAAwE,IAAA,SAAAnD,MAMA,SAAOiS,GAAO,IAAAyvB,EAAAhlC,KACZ,IAA0B,IAAtBA,KAAK8vF,KAAK6J,QAAd,CAKA35F,KAAK23C,KAAKwvB,QAAQlxD,KAAK,cAEvB,IAAMkhF,EAAUn3F,KAAKk5F,WAAW3jF,EAAM0lB,QAEhCy/D,EAAY16F,KAAK8vF,KAAK4K,UAC5B,GAAIA,GAAaA,EAAU/1F,SAAqC,IAA3B3E,KAAK8L,QAAQqtF,UAAoB,CACpEn5F,KAAK64F,iBAAiBoB,mBAAmB,WAAY1kF,EAAO4hF,GAG5D,IAAMj8D,EAASi8D,EAAQ7pF,EAAItN,KAAK8vF,KAAKqH,QAAQ7pF,EACvC6tB,EAASg8D,EAAQ7lF,EAAItR,KAAK8vF,KAAKqH,QAAQ7lF,EAG7C6gC,GAAAuoD,GAAS55F,KAAT45F,GAAkB,SAACA,GACjB,IAAMjgE,EAAOigE,EAAUjgE,MAEE,IAArBigE,EAAUG,SACZpgE,EAAKntB,EAAI03B,EAAKwQ,OAAOs8C,qBACnB9sD,EAAKwQ,OAAOo8C,qBAAqB8I,EAAUptF,GAAK4tB,KAI3B,IAArBw/D,EAAUI,SACZrgE,EAAKnpB,EAAI0zB,EAAKwQ,OAAOu8C,qBACnB/sD,EAAKwQ,OAAOq8C,qBAAqB6I,EAAUppF,GAAK6pB,GAGtD,IAGAn7B,KAAK23C,KAAKwvB,QAAQlxD,KAAK,kBACzB,KAAO,CAEL,GAAIV,EAAMmkB,SAAS47D,SAAU,CAU3B,GATAt1F,KAAK64F,iBAAiBoB,mBACpB,WACA1kF,EACA4hF,OACAl1F,GACA,QAIwBA,IAAtBjC,KAAK8vF,KAAKqH,QAEZ,YADAn3F,KAAKowF,YAAY76E,GAInBvV,KAAK23C,KAAK21C,aAAaj2E,SAASkO,IAAM,CACpCjY,EAAGtN,KAAKw1C,OAAOs8C,qBAAqBqF,EAAQ7pF,GAC5CgE,EAAGtR,KAAKw1C,OAAOu8C,qBAAqBoF,EAAQ7lF,IAE9CtR,KAAK23C,KAAKwvB,QAAQlxD,KAAK,iBACzB,CAGA,IAA8B,IAA1BjW,KAAK8L,QAAQstF,WAAsB7jF,EAAMmkB,SAAS47D,SAAU,CAU9D,GATAt1F,KAAK64F,iBAAiBoB,mBACpB,WACA1kF,EACA4hF,OACAl1F,GACA,QAIwBA,IAAtBjC,KAAK8vF,KAAKqH,QAEZ,YADAn3F,KAAKowF,YAAY76E,GAInB,IAAMwlF,EAAQ5D,EAAQ7pF,EAAItN,KAAK8vF,KAAKqH,QAAQ7pF,EACtC0tF,EAAQ7D,EAAQ7lF,EAAItR,KAAK8vF,KAAKqH,QAAQ7lF,EAE5CtR,KAAK23C,KAAKqhB,KAAKmzB,YAAc,CAC3B7+E,EAAGtN,KAAK8vF,KAAK3D,YAAY7+E,EAAIytF,EAC7BzpF,EAAGtR,KAAK8vF,KAAK3D,YAAY76E,EAAI0pF,GAE/Bh7F,KAAK23C,KAAKwvB,QAAQlxD,KAAK,iBACzB,CACF,CAnFA,CAoFF,GAEA,CAAAxP,IAAA,YAAAnD,MAMA,SAAUiS,GAAO,IAAAgwB,EAAAvlC,KAGf,GAFAA,KAAK8vF,KAAKnF,UAAW,EAEjB3qF,KAAK23C,KAAK21C,aAAaC,KAAM,CAAA,IAAAqK,EAC/B53F,KAAK23C,KAAK21C,aAAaC,MAAO,EAC9B,IAAM0N,EAAuBj7F,KAAK23C,KAAK21C,aAAaj2E,SAC9C6jF,EAA6B,CACjC3hB,KAAM55E,KAAKgO,IACTstF,EAAqB31E,MAAMhY,EAC3B2tF,EAAqB11E,IAAIjY,GAE3BksE,KAAM75E,KAAKgO,IACTstF,EAAqB31E,MAAMhU,EAC3B2pF,EAAqB11E,IAAIjU,GAE3BmoE,KAAM95E,KAAK+N,IACTutF,EAAqB31E,MAAMhY,EAC3B2tF,EAAqB11E,IAAIjY,GAE3BosE,KAAM/5E,KAAK+N,IACTutF,EAAqB31E,MAAMhU,EAC3B2pF,EAAqB11E,IAAIjU,IAIvB6pF,EAAoB1rC,GAAAmoC,OAAKjgD,KAAK4wB,aAAWznE,KAAA82F,GAAQ,SAACpyB,GACtD,IAAM/qC,EAAO8K,EAAKoS,KAAK/I,MAAM42B,GAC7B,OACE/qC,EAAKntB,GAAK4tF,EAA2B3hB,MACrC9+C,EAAKntB,GAAK4tF,EAA2BzhB,MACrCh/C,EAAKnpB,GAAK4pF,EAA2B1hB,MACrC/+C,EAAKnpB,GAAK4pF,EAA2BxhB,IAEzC,IAEAvnC,GAAAgpD,GAAiBr6F,KAAjBq6F,GAA0B,SAAC31B,GAAM,OAC/BjgC,EAAKszD,iBAAiBuC,aAAa71D,EAAKoS,KAAK/I,MAAM42B,GAAQ,IAG7D,IAAM2xB,EAAUn3F,KAAKk5F,WAAW3jF,EAAM0lB,QACtCj7B,KAAK64F,iBAAiBmB,cAAc7C,EAAS5hF,GAC7CvV,KAAK64F,iBAAiBoB,mBACpB,UACA1kF,EACAvV,KAAKk5F,WAAW3jF,EAAM0lB,aACtBh5B,GACA,GAEFjC,KAAK23C,KAAKwvB,QAAQlxD,KAAK,iBACzB,KAAO,CACL,IAAMykF,EAAY16F,KAAK8vF,KAAK4K,UACxBA,GAAaA,EAAU/1F,QACzBwtC,GAAAuoD,GAAS55F,KAAT45F,GAAkB,SAAU7lF,GAE1BA,EAAE4lB,KAAK3uB,QAAQ8nC,MAAMtmC,EAAIuH,EAAEgmF,OAC3BhmF,EAAE4lB,KAAK3uB,QAAQ8nC,MAAMtiC,EAAIuD,EAAEimF,MAC7B,IACA96F,KAAK64F,iBAAiBoB,mBACpB,UACA1kF,EACAvV,KAAKk5F,WAAW3jF,EAAM0lB,SAExBj7B,KAAK23C,KAAKwvB,QAAQlxD,KAAK,qBAEvBjW,KAAK64F,iBAAiBoB,mBACpB,UACA1kF,EACAvV,KAAKk5F,WAAW3jF,EAAM0lB,aACtBh5B,GACA,GAEFjC,KAAK23C,KAAKwvB,QAAQlxD,KAAK,kBAE3B,CACF,GAEA,CAAAxP,IAAA,UAAAnD,MAMA,SAAQiS,GACN,IAAM4hF,EAAUn3F,KAAKk5F,WAAW3jF,EAAM0lB,QAEtCj7B,KAAK8vF,KAAK6J,SAAU,OACQ13F,IAAxBjC,KAAK+vF,MAAa,QACpB/vF,KAAK+vF,MAAMvzD,MAAQ,GAIrB,IAAMA,EAAQx8B,KAAK+vF,MAAMvzD,MAAQjnB,EAAMinB,MACvCx8B,KAAK+2F,KAAKv6D,EAAO26D,EACnB,GAEA,CAAA1wF,IAAA,OAAAnD,MAOA,SAAKk5B,EAAO26D,GACV,IAA8B,IAA1Bn3F,KAAK8L,QAAQytF,SAAmB,CAClC,IAAMzC,EAAW92F,KAAK23C,KAAKqhB,KAAKx8B,MAC5BA,EAAQ,OACVA,EAAQ,MAENA,EAAQ,KACVA,EAAQ,IAGV,IAAI6+D,OAAsBp5F,OACRA,IAAdjC,KAAK8vF,OACoB,IAAvB9vF,KAAK8vF,KAAKnF,WACZ0Q,EAAsBr7F,KAAKw1C,OAAOm3C,YAAY3sF,KAAK8vF,KAAKqH,UAI5D,IAAMhL,EAAcnsF,KAAK23C,KAAKqhB,KAAKmzB,YAE7B6K,EAAYx6D,EAAQs6D,EACpBG,GAAM,EAAID,GAAaG,EAAQ7pF,EAAI6+E,EAAY7+E,EAAI0pF,EACnDE,GAAM,EAAIF,GAAaG,EAAQ7lF,EAAI66E,EAAY76E,EAAI0lF,EAKzD,GAHAh3F,KAAK23C,KAAKqhB,KAAKx8B,MAAQA,EACvBx8B,KAAK23C,KAAKqhB,KAAKmzB,YAAc,CAAE7+E,EAAG2pF,EAAI3lF,EAAG4lF,GAEdj1F,MAAvBo5F,EAAkC,CACpC,IAAMC,EACJt7F,KAAKw1C,OAAO+lD,YAAYF,GAC1Br7F,KAAK8vF,KAAKqH,QAAQ7pF,EAAIguF,EAAqBhuF,EAC3CtN,KAAK8vF,KAAKqH,QAAQ7lF,EAAIgqF,EAAqBhqF,CAC7C,CAEAtR,KAAK23C,KAAKwvB,QAAQlxD,KAAK,kBAEnB6gF,EAAWt6D,EACbx8B,KAAK23C,KAAKwvB,QAAQlxD,KAAK,OAAQ,CAC7B0jB,UAAW,IACX6C,MAAOx8B,KAAK23C,KAAKqhB,KAAKx8B,MACtB26D,QAASA,IAGXn3F,KAAK23C,KAAKwvB,QAAQlxD,KAAK,OAAQ,CAC7B0jB,UAAW,IACX6C,MAAOx8B,KAAK23C,KAAKqhB,KAAKx8B,MACtB26D,QAASA,GAGf,CACF,GAEA,CAAA1wF,IAAA,eAAAnD,MAQA,SAAaiS,GACX,IAA8B,IAA1BvV,KAAK8L,QAAQytF,SAAmB,CAIlC,GAAqB,IAAjBhkF,EAAM4lB,OAAc,CAEtB,IAAIqB,EAAQx8B,KAAK23C,KAAKqhB,KAAKx8B,MAC3BA,GACE,GAAKjnB,EAAM4lB,OAAS,EAAI,GAAK,IAA+B,GAAzBn7B,KAAK8L,QAAQ0tF,WAGlD,IAAMrC,EAAUn3F,KAAKk5F,WAAW,CAAE5rF,EAAGiI,EAAMslB,QAASvpB,EAAGiE,EAAMulB,UAG7D96B,KAAK+2F,KAAKv6D,EAAO26D,EACnB,CAGA5hF,EAAMwkB,gBACR,CACF,GAEA,CAAAtzB,IAAA,cAAAnD,MAMA,SAAYiS,GAAO,IAAA0zD,EAAAjpE,KACXm3F,EAAUn3F,KAAKk5F,WAAW,CAAE5rF,EAAGiI,EAAMslB,QAASvpB,EAAGiE,EAAMulB,UACzD0gE,GAAe,OAGAv5F,IAAfjC,KAAK+4F,SACmB,IAAtB/4F,KAAK+4F,MAAMn0B,QACb5kE,KAAKy7F,gBAAgBtE,IAIG,IAAtBn3F,KAAK+4F,MAAMn0B,SACb42B,GAAe,EACfx7F,KAAK+4F,MAAM2C,YAAYvE,EAAQ7pF,EAAI,EAAG6pF,EAAQ7lF,EAAI,GAClDtR,KAAK+4F,MAAMxL,SAMbvtF,KAAK8L,QAAQ8qF,SAASyC,YACiB,IAAvCr5F,KAAK8L,QAAQ8qF,SAAS8B,eACY,IAAlC14F,KAAK8L,QAAQ8qF,SAASznD,SAEtBnvC,KAAKw1C,OAAOq2C,MAAM8P,SAIC,IAAjBH,SACsBv5F,IAApBjC,KAAKi5F,aACPzK,cAAcxuF,KAAKi5F,YACnBj5F,KAAKi5F,gBAAah3F,GAEfjC,KAAK8vF,KAAKnF,WACb3qF,KAAKi5F,WAAa/vB,IAChB,WAAA,OAAMD,EAAK2yB,gBAAgBzE,EAAQ,GACnCn3F,KAAK8L,QAAQwtF,iBAMQ,IAAvBt5F,KAAK8L,QAAQ2oC,OACfz0C,KAAK64F,iBAAiBgD,YAAYtmF,EAAO4hF,EAE7C,GAEA,CAAA1wF,IAAA,kBAAAnD,MAQA,SAAgB6zF,GACd,IAAM7pF,EAAItN,KAAKw1C,OAAOs8C,qBAAqBqF,EAAQ7pF,GAC7CgE,EAAItR,KAAKw1C,OAAOu8C,qBAAqBoF,EAAQ7lF,GAC7CwqF,EAAa,CACjBplD,KAAMppC,EACNqpC,IAAKrlC,EACLo5C,MAAOp9C,EACPojD,OAAQp/C,GAGJyqF,OACc95F,IAAlBjC,KAAKg5F,cAAyB/2F,EAAYjC,KAAKg5F,SAAS1xF,GACtD00F,GAAkB,EAClBC,EAAY,OAGhB,QAAsBh6F,IAAlBjC,KAAKg5F,SAAwB,CAM/B,IAJA,IAEIv+D,EAFE8tC,EAAcvoE,KAAK23C,KAAK4wB,YACxB35B,EAAQ5uC,KAAK23C,KAAK/I,MAElBstD,EAAmB,GAChBrtF,EAAI,EAAGA,EAAI05D,EAAY5jE,OAAQkK,KAEK,KAD3C4rB,EAAOmU,EAAM25B,EAAY15D,KAChB8mE,kBAAkBmmB,KACzBE,GAAkB,OACM/5F,IAApBw4B,EAAK0hE,YACPD,EAAiBp1F,KAAKyhE,EAAY15D,KAKpCqtF,EAAiBv3F,OAAS,IAE5B3E,KAAKg5F,SAAWpqD,EAAMstD,EAAiBA,EAAiBv3F,OAAS,IAEjEq3F,GAAkB,EAEtB,CAEA,QAAsB/5F,IAAlBjC,KAAKg5F,WAA8C,IAApBgD,EAA2B,CAM5D,IAJA,IAEI5uD,EAFEmuC,EAAcv7E,KAAK23C,KAAK4jC,YACxBtsC,EAAQjvC,KAAK23C,KAAK1I,MAElBmtD,EAAmB,GAChBvtF,EAAI,EAAGA,EAAI0sE,EAAY52E,OAAQkK,KAEK,KAD3Cu+B,EAAO6B,EAAMssC,EAAY1sE,KAChB8mE,kBAAkBmmB,KACF,IAAnB1uD,EAAK0mC,gBAA0C7xE,IAApBmrC,EAAK+uD,YAClCC,EAAiBt1F,KAAKy0E,EAAY1sE,IAKpCutF,EAAiBz3F,OAAS,IAC5B3E,KAAKg5F,SAAW/pD,EAAMmtD,EAAiBA,EAAiBz3F,OAAS,IACjEs3F,EAAY,OAEhB,MAEsBh6F,IAAlBjC,KAAKg5F,SAEHh5F,KAAKg5F,SAAS1xF,KAAOy0F,SACJ95F,IAAfjC,KAAK+4F,QACP/4F,KAAK+4F,MAAQ,IAAIsD,GAAMr8F,KAAKw1C,OAAOq2C,QAGrC7rF,KAAK+4F,MAAMuD,gBAAkBL,EAC7Bj8F,KAAK+4F,MAAMwD,cAAgBv8F,KAAKg5F,SAAS1xF,GAKzCtH,KAAK+4F,MAAM2C,YAAYvE,EAAQ7pF,EAAI,EAAG6pF,EAAQ7lF,EAAI,GAClDtR,KAAK+4F,MAAMyD,QAAQx8F,KAAKg5F,SAASmD,YACjCn8F,KAAK+4F,MAAMxL,OACXvtF,KAAK23C,KAAKwvB,QAAQlxD,KAAK,YAAajW,KAAKg5F,SAAS1xF,UAGjCrF,IAAfjC,KAAK+4F,QACP/4F,KAAK+4F,MAAM0D,OACXz8F,KAAK23C,KAAKwvB,QAAQlxD,KAAK,aAG7B,GAEA,CAAAxP,IAAA,kBAAAnD,MAOA,SAAgB6zF,GACd,IAAM2E,EAAa97F,KAAK64F,iBAAiB6D,yBAAyBvF,GAE9DwF,GAAa,EACjB,GAAmC,SAA/B38F,KAAK+4F,MAAMuD,iBACb,QAAkDr6F,IAA9CjC,KAAK23C,KAAK/I,MAAM5uC,KAAK+4F,MAAMwD,iBAQV,KAPnBI,EACE38F,KAAK23C,KAAK/I,MAAM5uC,KAAK+4F,MAAMwD,eAAe5mB,kBACxCmmB,IAKqB,CACvB,IAAMc,EAAW58F,KAAK64F,iBAAiB4B,UAAUtD,GACjDwF,OACe16F,IAAb26F,GAEIA,EAASt1F,KAAOtH,KAAK+4F,MAAMwD,aACnC,YAG+Ct6F,IAA7CjC,KAAK64F,iBAAiB4B,UAAUtD,SACgBl1F,IAA9CjC,KAAK23C,KAAK1I,MAAMjvC,KAAK+4F,MAAMwD,iBAC7BI,EACE38F,KAAK23C,KAAK1I,MAAMjvC,KAAK+4F,MAAMwD,eAAe5mB,kBACxCmmB,KAMS,IAAfa,IACF38F,KAAKg5F,cAAW/2F,EAChBjC,KAAK+4F,MAAM0D,OACXz8F,KAAK23C,KAAKwvB,QAAQlxD,KAAK,aAE3B,KAAC2iF,CAAA,CAhyBqB,GCZpBv3F,GAAcf,EACds6C,GAAiBl5C,GACjBu3C,GAAcv1C,GAA0Cu1C,YACxDa,GAAa7zC,GACbyE,GAAW9C,GACX9D,GAAoBgE,EACpB1D,GAAWiF,GACXgwC,GAAU9vC,GAEVlC,GAASkE,GAGTqT,GAFsB9B,GAEiBxG,IACvC0jC,GAHsBl9B,GAGuB1E,UAC7C8O,GANuB5b,GAMK4b,KAC5BC,GAPuB7b,GAOU6b,UACjCnR,GAAS3U,GAAY,GAAG2U,QACxB1O,GAAK,EAGLu1F,GAAsB,SAAU/kF,GAClC,OAAOA,EAAMglF,SAAWhlF,EAAMglF,OAAS,IAAIC,GAC7C,EAEIA,GAAsB,WACxB/8F,KAAKqe,QAAU,EACjB,EAEI2+E,GAAqB,SAAUp2F,EAAOH,GACxC,OAAOygB,GAAKtgB,EAAMyX,SAAS,SAAU3e,GACnC,OAAOA,EAAG,KAAO+G,CACrB,GACA,EAEAs2F,GAAoBn8F,UAAY,CAC9B2B,IAAK,SAAUkE,GACb,IAAIy0C,EAAQ8hD,GAAmBh9F,KAAMyG,GACrC,GAAIy0C,EAAO,OAAOA,EAAM,EACzB,EACD3kC,IAAK,SAAU9P,GACb,QAASu2F,GAAmBh9F,KAAMyG,EACnC,EACD6P,IAAK,SAAU7P,EAAKnD,GAClB,IAAI43C,EAAQ8hD,GAAmBh9F,KAAMyG,GACjCy0C,EAAOA,EAAM,GAAK53C,EACjBtD,KAAKqe,QAAQvX,KAAK,CAACL,EAAKnD,GAC9B,EACDg4C,OAAU,SAAU70C,GAClB,IAAIoH,EAAQsZ,GAAUnnB,KAAKqe,SAAS,SAAU3e,GAC5C,OAAOA,EAAG,KAAO+G,CACvB,IAEI,OADKoH,GAAOmI,GAAOhW,KAAKqe,QAASxQ,EAAO,MAC9BA,CACX,GAGH,IC3BIovF,GD2BJC,GAAiB,CACfxiD,eAAgB,SAAUP,EAASD,EAAkB9zB,EAAQk0B,GAC3D,IAAIx2B,EAAcq2B,GAAQ,SAAU3vC,EAAM4W,GACxC04B,GAAWtvC,EAAMgG,GACjBoO,GAAiBpU,EAAM,CACrB8N,KAAM4hC,EACN5yC,GAAIA,KACJw1F,YAAQ76F,IAEL6B,GAAkBsd,IAAWi4B,GAAQj4B,EAAU5W,EAAK8vC,GAAQ,CAAE9vC,KAAMA,EAAMgvC,WAAYpzB,GACjG,IAEQ5V,EAAYsT,EAAYljB,UAExBie,EAAmBm7B,GAAuBE,GAE1Cc,EAAS,SAAUxwC,EAAM/D,EAAKnD,GAChC,IAAIwU,EAAQ+G,EAAiBrU,GACzBT,EAAOkvC,GAAYvuC,GAASjE,IAAM,GAGtC,OAFa,IAATsD,EAAe8yF,GAAoB/kF,GAAOxB,IAAI7P,EAAKnD,GAClDyG,EAAK+N,EAAMxQ,IAAMhE,EACfkH,CACb,EAiDI,OA/CAowC,GAAepqC,EAAW,CAIxB8qC,OAAU,SAAU70C,GAClB,IAAIqR,EAAQ+G,EAAiB7e,MAC7B,IAAKoE,GAASqC,GAAM,OAAO,EAC3B,IAAIsD,EAAOkvC,GAAYxyC,GACvB,OAAa,IAATsD,EAAsB8yF,GAAoB/kF,GAAe,OAAErR,GACxDsD,GAAQ1C,GAAO0C,EAAM+N,EAAMxQ,YAAcyC,EAAK+N,EAAMxQ,GAC5D,EAIDiP,IAAK,SAAa9P,GAChB,IAAIqR,EAAQ+G,EAAiB7e,MAC7B,IAAKoE,GAASqC,GAAM,OAAO,EAC3B,IAAIsD,EAAOkvC,GAAYxyC,GACvB,OAAa,IAATsD,EAAsB8yF,GAAoB/kF,GAAOvB,IAAI9P,GAClDsD,GAAQ1C,GAAO0C,EAAM+N,EAAMxQ,GACnC,IAGHszC,GAAepqC,EAAW4V,EAAS,CAGjC7jB,IAAK,SAAakE,GAChB,IAAIqR,EAAQ+G,EAAiB7e,MAC7B,GAAIoE,GAASqC,GAAM,CACjB,IAAIsD,EAAOkvC,GAAYxyC,GACvB,OAAa,IAATsD,EAAsB8yF,GAAoB/kF,GAAOvV,IAAIkE,GAClDsD,EAAOA,EAAK+N,EAAMxQ,SAAMrF,CAChC,CACF,EAGDqU,IAAK,SAAa7P,EAAKnD,GACrB,OAAO03C,EAAOh7C,KAAMyG,EAAKnD,EAC1B,GACC,CAGFkkC,IAAK,SAAalkC,GAChB,OAAO03C,EAAOh7C,KAAMsD,GAAO,EAC5B,IAGIwgB,CACR,GChIC20B,GAAWn4C,GACXV,GAAS8B,EACTL,GAAcqC,EACdk3C,GAAiB30C,GACjB8zC,GAAyBnyC,GACzBqyC,GAAanyC,GACbo1F,GAAiB7zF,GACjBjF,GAAWmF,GACX4zF,GAAuB7xF,GAAuC6M,QAC9DjY,GAAQqL,EACRqM,GAAkBkF,GAElBnZ,GAAUtB,OAEV4hB,GAAU/N,MAAM+N,QAEhBi0B,GAAev0C,GAAQu0C,aAEvBklD,GAAWz5F,GAAQy5F,SAEnBC,GAAW15F,GAAQ05F,SAEnBC,GAAS35F,GAAQ25F,OAEjBC,GAAO55F,GAAQ45F,KAEfC,GAAS,CAAA,EACTC,GAAS,CAAA,EACTC,IAAW99F,GAAOka,eAAiB,kBAAmBla,GAGtDu6C,GAAU,SAAU3b,GACtB,OAAO,WACL,OAAOA,EAAKx+B,KAAMiB,UAAU0D,OAAS1D,UAAU,QAAKgB,EACxD,CACA,EAII07F,GAAW1jD,GAAW,UAAWE,GAAS+iD,IAC1CU,GAAmBD,GAAS/8F,UAC5Bi9F,GAAYx8F,GAAYu8F,GAAiBtnF,KAc7C,GAAIsB,GAAiB,GAAI8lF,GAAS,CAChCT,GAAkBC,GAAexiD,eAAeP,GAAS,WAAW,GACpEJ,GAAuB3gB,SACvB,IAAI0kE,GAAez8F,GAAYu8F,GAAyB,QACpDG,GAAY18F,GAAYu8F,GAAiBrnF,KACzCynF,GAAY38F,GAAYu8F,GAAiBr7F,KAC7Cq4C,GAAegjD,GAAkB,CAC/BtiD,OAAU,SAAU70C,GAClB,GAAIrC,GAASqC,KAASyxC,GAAazxC,GAAM,CACvC,IAAIqR,EAAQqlF,GAAqBn9F,MAEjC,OADK8X,EAAMglF,SAAQhlF,EAAMglF,OAAS,IAAIG,IAC/Ba,GAAa99F,KAAMyG,IAAQqR,EAAMglF,OAAe,OAAEr2F,EAC1D,CAAC,OAAOq3F,GAAa99F,KAAMyG,EAC7B,EACD8P,IAAK,SAAa9P,GAChB,GAAIrC,GAASqC,KAASyxC,GAAazxC,GAAM,CACvC,IAAIqR,EAAQqlF,GAAqBn9F,MAEjC,OADK8X,EAAMglF,SAAQhlF,EAAMglF,OAAS,IAAIG,IAC/Bc,GAAU/9F,KAAMyG,IAAQqR,EAAMglF,OAAOvmF,IAAI9P,EACjD,CAAC,OAAOs3F,GAAU/9F,KAAMyG,EAC1B,EACDlE,IAAK,SAAakE,GAChB,GAAIrC,GAASqC,KAASyxC,GAAazxC,GAAM,CACvC,IAAIqR,EAAQqlF,GAAqBn9F,MAEjC,OADK8X,EAAMglF,SAAQhlF,EAAMglF,OAAS,IAAIG,IAC/Bc,GAAU/9F,KAAMyG,GAAOu3F,GAAUh+F,KAAMyG,GAAOqR,EAAMglF,OAAOv6F,IAAIkE,EACvE,CAAC,OAAOu3F,GAAUh+F,KAAMyG,EAC1B,EACD6P,IAAK,SAAa7P,EAAKnD,GACrB,GAAIc,GAASqC,KAASyxC,GAAazxC,GAAM,CACvC,IAAIqR,EAAQqlF,GAAqBn9F,MAC5B8X,EAAMglF,SAAQhlF,EAAMglF,OAAS,IAAIG,IACtCc,GAAU/9F,KAAMyG,GAAOo3F,GAAU79F,KAAMyG,EAAKnD,GAASwU,EAAMglF,OAAOxmF,IAAI7P,EAAKnD,EAC5E,MAAMu6F,GAAU79F,KAAMyG,EAAKnD,GAC5B,OAAOtD,IACR,GAGL,MAhDSy4C,IAAYv4C,IAAM,WACvB,IAAI+9F,EAAcX,GAAO,IAEzB,OADAO,GAAU,IAAIF,GAAYM,EAAa,IAC/Bb,GAASa,EACrB,KA6CErjD,GAAegjD,GAAkB,CAC/BtnF,IAAK,SAAa7P,EAAKnD,GACrB,IAAI46F,EAQJ,OAPIj6E,GAAQxd,KACN22F,GAAS32F,GAAMy3F,EAAsBV,GAChCH,GAAS52F,KAAMy3F,EAAsBT,KAEhDI,GAAU79F,KAAMyG,EAAKnD,GACjB46F,IAAwBV,IAAQF,GAAO72F,GACvCy3F,IAAwBT,IAAQF,GAAK92F,GAClCzG,IACR,ICtGL,wBAAWiG,GAEWwR,mpDCUtB,SAAS0mF,GAAY/xE,EAAsBxP,GACzC,IACuBmvB,EADjBqyD,EAAO,IAAAC,GAAaryD,EAAAC,GACPrvB,GAAI,IAAvB,IAAAovB,EAAAn3B,MAAAk3B,EAAAC,EAAAz+B,KAAAiR,MAAyB,CAAA,IAAd6P,EAAI0d,EAAAzoC,MACR8oB,EAAK7V,IAAI8X,IACZ+vE,EAAK52D,IAAInZ,EAEZ,CAAA,CAAA,MAAA+d,GAAAJ,EAAAxc,EAAA4c,EAAA,CAAA,QAAAJ,EAAAlpC,GAAA,CACD,OAAOs7F,CACT,qDAAC,IAEKE,GAA8B,WAApC,SAAAA,IAAA16E,QAAA06E,GACEC,GAAqCjoF,IAAAtW,KAAA,IAAAq+F,IACrCG,GAAqBloF,IAAAtW,KAAA,IAAAq+F,GAgDvB,CADG,OACFtwE,GAAAuwE,EAAA,CAAA,CAAA73F,IAAA,OAAAlE,IA9CC,WACE,OAAOk8F,GAAAz+F,KAAew+F,GAAA,KAAClnF,IACzB,GAAC,CAAA7Q,IAAA,MAAAnD,MAEM,WAA0B,IAAA,IAAA6nC,EAAAlqC,UAAA0D,OAAnBwoD,EAAmBj3C,IAAAA,MAAAi1B,GAAAE,EAAA,EAAAA,EAAAF,EAAAE,IAAnB8hB,EAAmB9hB,GAAApqC,UAAAoqC,GAC/B,IAAA,IAAAiB,EAAA,EAAAoyD,EAAmBvxC,EAAK7gB,EAAAoyD,EAAA/5F,OAAA2nC,IAAE,CAArB,IAAMje,EAAIqwE,EAAApyD,GACbmyD,GAAAz+F,KAAew+F,GAAA,KAACh3D,IAAInZ,EACrB,CACH,GAAC,CAAA5nB,IAAA,SAAAnD,MACM,WAA6B,IAAA,IAAAqoC,EAAA1qC,UAAA0D,OAAnBwoD,EAAmBj3C,IAAAA,MAAAy1B,GAAAC,EAAA,EAAAA,EAAAD,EAAAC,IAAnBuhB,EAAmBvhB,GAAA3qC,UAAA2qC,GAClC,IAAA,IAAAshD,EAAA,EAAAyR,EAAmBxxC,EAAK+/B,EAAAyR,EAAAh6F,OAAAuoF,IAAE,CAArB,IAAM7+D,EAAIswE,EAAAzR,GACbuR,GAAAz+F,KAAew+F,GAAA,KAACljD,OAAOjtB,EACxB,CACH,GAAC,CAAA5nB,IAAA,QAAAnD,MACM,WACLm7F,GAAAz+F,KAAIw+F,GAAA,KAAYnjD,OAClB,GAAC,CAAA50C,IAAA,eAAAnD,MAEM,WACL,OAAAwsB,GAAW2uE,GAAAz+F,KAAIw+F,GAAA,KACjB,GAAC,CAAA/3F,IAAA,aAAAnD,MAEM,WACL,MAAO,CACLs7F,MAAK9uE,GAAMquE,GAASM,GAAAz+F,KAAIu+F,GAAA,KAAqBE,GAAAz+F,KAAIw+F,GAAA,OACjDK,QAAO/uE,GAAMquE,GAASM,GAAAz+F,KAAIw+F,GAAA,KAAaC,GAAAz+F,KAAIu+F,GAAA,OAC3CtjD,SAAQnrB,GAAM,IAAAuuE,GAAWI,GAAAz+F,KAAuBu+F,GAAA,OAChDrzF,QAAO4kB,GAAM,IAAAuuE,GAAWI,GAAAz+F,KAAew+F,GAAA,OAE3C,GAAC,CAAA/3F,IAAA,SAAAnD,MAEM,WACL,IAAMw7F,EAAU9+F,KAAK++F,aAErBC,GAAAh/F,KAA0Bu+F,GAAAE,GAAAz+F,KAAIw+F,GAAA,UAC9BQ,GAAAh/F,KAAkBw+F,GAAA,IAAAH,GAAQI,GAAAz+F,KAAIu+F,GAAA,MAAoB,KAAC,IAEnBU,EAFmBC,EAAAjzD,GAEhC6yD,EAAQF,OAAK,IAAhC,IAAAM,EAAArqF,MAAAoqF,EAAAC,EAAA3xF,KAAAiR,MAAkC,CAAnBygF,EAAA37F,MACR67F,QACN,CAAA,CAAA,MAAA/yD,GAAA8yD,EAAA1vE,EAAA4c,EAAA,CAAA,QAAA8yD,EAAAp8F,GAAA,CAAA,IACiCs8F,EADjCC,EAAApzD,GACkB6yD,EAAQD,SAAO,IAAlC,IAAAQ,EAAAxqF,MAAAuqF,EAAAC,EAAA9xF,KAAAiR,MAAoC,CAArB4gF,EAAA97F,MACRg8F,UACN,CAAA,CAAA,MAAAlzD,GAAAizD,EAAA7vE,EAAA4c,EAAA,CAAA,QAAAizD,EAAAv8F,GAAA,CAED,OAAOg8F,CACT,KAACR,CAAA,CAjDiC,uBAsEpC,IAAaiB,GAAoB,WAM/B,SAAAA,IAC+E,IAA7EC,EAA+Dv+F,UAAA0D,OAAA1D,QAAAgB,IAAAhB,UAAAgB,GAAAhB,UAAA,GAAA,WAAW,EAAG2iB,QAAA27E,GAN/EE,GAASnpF,IAAAtW,KAAA,IAAIs+F,IACboB,GAASppF,IAAAtW,KAAA,IAAIs+F,IAEbqB,GAAuErpF,IAAAtW,UAAA,GAKrEg/F,GAAAh/F,KAAI2/F,GAAkBH,EAAa,IACrC,CA0CC,OA1CAzxE,GAAAwxE,EAAA,CAAA,CAAA94F,IAAA,YAAAlE,IAED,WACE,OAAOk8F,GAAAz+F,KAAWy/F,GAAA,KAACnoF,IACrB,GAAC,CAAA7Q,IAAA,YAAAlE,IACD,WACE,OAAOk8F,GAAAz+F,KAAW0/F,GAAA,KAACpoF,IACrB,GAAC,CAAA7Q,IAAA,WAAAnD,MAEM,WACL,OAAOm7F,GAAAz+F,KAAIy/F,GAAA,KAAQG,cACrB,GAAC,CAAAn5F,IAAA,WAAAnD,MACM,WACL,OAAOm7F,GAAAz+F,KAAI0/F,GAAA,KAAQE,cACrB,GAAC,CAAAn5F,IAAA,WAAAnD,MAEM,WAAkC,IAAAu8F,GACvCA,EAAApB,GAAAz+F,cAAYwnC,IAAG3mC,MAAAg/F,EAAA5+F,UACjB,GAAC,CAAAwF,IAAA,WAAAnD,MACM,WAAkC,IAAAw8F,GACvCA,EAAArB,GAAAz+F,cAAYwnC,IAAG3mC,MAAAi/F,EAAA7+F,UACjB,GAAC,CAAAwF,IAAA,cAAAnD,MAEM,SAAYm3B,GACjBgkE,GAAAz+F,KAAWy/F,GAAA,KAACnkD,OAAO7gB,EACrB,GAAC,CAAAh0B,IAAA,cAAAnD,MACM,SAAY8pC,GACjBqxD,GAAAz+F,KAAW0/F,GAAA,KAACpkD,OAAOlO,EACrB,GAAC,CAAA3mC,IAAA,QAAAnD,MAEM,WACLm7F,GAAAz+F,KAAIy/F,GAAA,KAAQpkD,QACZojD,GAAAz+F,KAAI0/F,GAAA,KAAQrkD,OACd,GAAC,CAAA50C,IAAA,SAAAnD,MAEM,WAIH,IAJ6B,IAAAy8F,EAAAjxE,EACzBkxE,EAAU,CACdpxD,MAAO6vD,GAAAz+F,KAAWy/F,GAAA,KAACQ,SACnBhxD,MAAOwvD,GAAAz+F,KAAW0/F,GAAA,KAACO,UACnBC,EAAAj/F,UAAA0D,OAJaw7F,EAAgBjqF,IAAAA,MAAAgqF,GAAAE,EAAA,EAAAA,EAAAF,EAAAE,IAAhBD,EAAgBC,GAAAn/F,UAAAm/F,GAM/B,OADAL,EAAAtB,GAAAz+F,KAAmB2/F,GAAA,MAAA7+F,KAAAD,MAAAk/F,EAAAx0D,GAAAzc,EAAA,CAAnB9uB,KAAoBggG,IAAOl/F,KAAAguB,EAAKqxE,IACzBH,CACT,KAACT,CAAA,CApD8B,uhCC1FjC,IAGMc,GAAgB,WAKpB,SAAAA,EAAY1oD,EAAMnC,GAAQ,IAAA5V,EAAA5/B,KAAA4jB,QAAAy8E,GACxBrgG,KAAK23C,KAAOA,EACZ33C,KAAKw1C,OAASA,EAKdx1C,KAAKsgG,sBAAwB,IAAIf,GACjCv/F,KAAKugG,SAAW,CAAE3xD,MAAO,CAAE,EAAEK,MAAO,CAAC,GAErCjvC,KAAK8L,QAAU,GACf9L,KAAK+7C,eAAiB,CACpB69C,aAAa,EACb4G,YAAY,EACZC,sBAAsB,EACtBC,qBAAqB,GAEvBzkD,GAAcj8C,KAAK8L,QAAS9L,KAAK+7C,gBAEjC/7C,KAAK23C,KAAKwvB,QAAQ9xD,GAAG,gBAAgB,WACnCuqB,EAAK+gE,iBACP,GACF,CAyuBC,OAvuBD5yE,GAAAsyE,EAAA,CAAA,CAAA55F,IAAA,aAAAnD,MAIA,SAAWwI,GACT,QAAgB7J,IAAZ6J,EAAuB,CAOzBsqE,GANe,CACb,cACA,sBACA,aACA,wBAE0Bp2E,KAAK8L,QAASA,EAC5C,CACF,GAEA,CAAArF,IAAA,gBAAAnD,MAMA,SAAc6zF,GACZ,IAAIvjC,GAAW,EACf,IAAgC,IAA5B5zD,KAAK8L,QAAQ00F,WAAqB,CACpC,IAAMvyF,EAAMjO,KAAKy6F,UAAUtD,IAAYn3F,KAAK4gG,UAAUzJ,GAGtDn3F,KAAK6gG,mBAEO5+F,IAARgM,IACF2lD,EAAW5zD,KAAKo7F,aAAantF,IAE/BjO,KAAK23C,KAAKwvB,QAAQlxD,KAAK,iBACzB,CACA,OAAO29C,CACT,GAEA,CAAAntD,IAAA,0BAAAnD,MAKA,SAAwB6zF,GACtB,IAAI2J,GAAmB,EACvB,IAAgC,IAA5B9gG,KAAK8L,QAAQ00F,WAAqB,CACpC,IAAMvyF,EAAMjO,KAAKy6F,UAAUtD,IAAYn3F,KAAK4gG,UAAUzJ,QAE1Cl1F,IAARgM,IACF6yF,GAAmB,GACM,IAArB7yF,EAAI6+E,aACN9sF,KAAK+gG,eAAe9yF,GAEpBjO,KAAKo7F,aAAantF,GAGpBjO,KAAK23C,KAAKwvB,QAAQlxD,KAAK,kBAE3B,CACA,OAAO6qF,CACT,GAEA,CAAAr6F,IAAA,iBAAAnD,MAQA,SAAeiS,EAAO4hF,GACpB,IAAM9sE,EAAa,CAAA,EAQnB,OANAA,EAAoB,QAAI,CACtB22E,IAAK,CAAE1zF,EAAG6pF,EAAQ7pF,EAAGgE,EAAG6lF,EAAQ7lF,GAChCkkC,OAAQx1C,KAAKw1C,OAAOm3C,YAAYwK,IAElC9sE,EAAkB,MAAI9U,EAEf8U,CACT,GAEA,CAAA5jB,IAAA,qBAAAnD,MAYA,SACE64B,EACA5mB,EACA4hF,EACA8J,GAEA,IADAC,EAAcjgG,UAAA0D,OAAA,QAAA1C,IAAAhB,UAAA,IAAAA,UAAA,GAERopB,EAAarqB,KAAKmhG,eAAe5rF,EAAO4hF,GAE9C,IAAuB,IAAnB+J,EACF72E,EAAWukB,MAAQ,GACnBvkB,EAAW4kB,MAAQ,OACd,CACL,IAAMwhB,EAAMzwD,KAAK4/F,eACjBv1E,EAAWukB,MAAQ6hB,EAAI7hB,MACvBvkB,EAAW4kB,MAAQwhB,EAAIxhB,KACzB,MAEqBhtC,IAAjBg/F,IACF52E,EAA8B,kBAAI42E,GAGnB,SAAb9kE,IAGF9R,EAAW8iC,MAAQntD,KAAKohG,gBAAgBjK,SAGhBl1F,IAAtBsT,EAAM8rF,cACRh3E,EAAWg3E,YAAc9rF,EAAM8rF,aAGjCrhG,KAAK23C,KAAKwvB,QAAQlxD,KAAKkmB,EAAW9R,EACpC,GAEA,CAAA5jB,IAAA,eAAAnD,MAMA,SAAa2K,GAAyD,IAApDqzF,EAAcrgG,UAAA0D,eAAA1C,IAAAhB,UAAA,GAAAA,UAAG,GAAAjB,KAAK8L,QAAQ20F,qBAC9C,QAAYx+F,IAARgM,EAAmB,CACrB,GAAIA,aAAe01D,GAAM,CACM,IAAA49B,EAA7B,IAAuB,IAAnBD,GACFC,EAAIvhG,KAACsgG,uBAAsBkB,SAAQ3gG,MAAA0gG,EAAAzxE,GAAI7hB,EAAIghC,QAE7CjvC,KAAKsgG,sBAAsBmB,SAASxzF,EACtC,MACEjO,KAAKsgG,sBAAsBkB,SAASvzF,GAEtC,OAAO,CACT,CACA,OAAO,CACT,GAEA,CAAAxH,IAAA,iBAAAnD,MAIA,SAAe2K,IACY,IAArBA,EAAI6+E,eACN7+E,EAAI2lD,UAAW,EACf5zD,KAAK0hG,qBAAqBzzF,GAE9B,GAEA,CAAAxH,IAAA,8BAAAnD,MAOA,SAA4B+H,GAG1B,IAFA,IAAM6wF,EAAmB,GACnBttD,EAAQ5uC,KAAK23C,KAAK/I,MACf//B,EAAI,EAAGA,EAAI7O,KAAK23C,KAAK4wB,YAAY5jE,OAAQkK,IAAK,CACrD,IAAM22D,EAASxlE,KAAK23C,KAAK4wB,YAAY15D,GACjC+/B,EAAM42B,GAAQmQ,kBAAkBtqE,IAClC6wF,EAAiBp1F,KAAK0+D,EAE1B,CACA,OAAO02B,CACT,GAEA,CAAAz1F,IAAA,2BAAAnD,MAOA,SAAyB6zF,GACvB,IAAMwK,EAAY3hG,KAAKw1C,OAAOm3C,YAAYwK,GAC1C,MAAO,CACLzgD,KAAMirD,EAAUr0F,EAAI,EACpBqpC,IAAKgrD,EAAUrwF,EAAI,EACnBo5C,MAAOi3C,EAAUr0F,EAAI,EACrBojD,OAAQixC,EAAUrwF,EAAI,EAE1B,GAEA,CAAA7K,IAAA,YAAAnD,MAOA,SAAU6zF,GAA4B,IAAnByK,IAAU3gG,UAAA0D,OAAA,QAAA1C,IAAAhB,UAAA,KAAAA,UAAA,GAErB4gG,EAAiB7hG,KAAK08F,yBAAyBvF,GAC/C+E,EAAmBl8F,KAAK8hG,4BAA4BD,GAG1D,OAAI3F,EAAiBv3F,OAAS,GACT,IAAfi9F,EACK5hG,KAAK23C,KAAK/I,MAAMstD,EAAiBA,EAAiBv3F,OAAS,IAE3Du3F,EAAiBA,EAAiBv3F,OAAS,QAGpD,CAEJ,GAEA,CAAA8B,IAAA,2BAAAnD,MAOA,SAAyB+H,EAAQ+wF,GAE/B,IADA,IAAMntD,EAAQjvC,KAAK23C,KAAK1I,MACfpgC,EAAI,EAAGA,EAAI7O,KAAK23C,KAAK4jC,YAAY52E,OAAQkK,IAAK,CACrD,IAAM6mE,EAAS11E,KAAK23C,KAAK4jC,YAAY1sE,GACjCogC,EAAMymC,GAAQC,kBAAkBtqE,IAClC+wF,EAAiBt1F,KAAK4uE,EAE1B,CACF,GAEA,CAAAjvE,IAAA,8BAAAnD,MAOA,SAA4B+H,GAC1B,IAAM+wF,EAAmB,GAEzB,OADAp8F,KAAK+hG,yBAAyB12F,EAAQ+wF,GAC/BA,CACT,GAEA,CAAA31F,IAAA,YAAAnD,MAOA,SAAU6zF,GAMR,IANoC,IAAnB6K,IAAU/gG,UAAA0D,OAAA,QAAA1C,IAAAhB,UAAA,KAAAA,UAAA,GAErB0gG,EAAY3hG,KAAKw1C,OAAOm3C,YAAYwK,GACtC8K,EAAU,GACVC,EAAkB,KAChBjzD,EAAQjvC,KAAK23C,KAAK1I,MACfpgC,EAAI,EAAGA,EAAI7O,KAAK23C,KAAK4jC,YAAY52E,OAAQkK,IAAK,CACrD,IAAM6mE,EAAS11E,KAAK23C,KAAK4jC,YAAY1sE,GAC/Bu+B,EAAO6B,EAAMymC,GACnB,GAAItoC,EAAK0mC,UAAW,CAClB,IAAM8B,EAAQxoC,EAAKzsB,KAAKrT,EAClBuoE,EAAQzoC,EAAKzsB,KAAKrP,EAClBwkE,EAAM1oC,EAAK/b,GAAG/jB,EACdyoE,EAAM3oC,EAAK/b,GAAG/f,EACd6wF,EAAO/0D,EAAKymC,SAASqC,kBACzBN,EACAC,EACAC,EACAC,EACA4rB,EAAUr0F,EACVq0F,EAAUrwF,GAER6wF,EAAOF,IACTC,EAAkBxsB,EAClBusB,EAAUE,EAEd,CACF,CACA,OAAwB,OAApBD,GACiB,IAAfF,EACKhiG,KAAK23C,KAAK1I,MAAMizD,GAEhBA,OAGT,CAEJ,GAEA,CAAAz7F,IAAA,cAAAnD,MAMA,SAAY2K,GACNA,aAAe01D,GACjB3jE,KAAKugG,SAAS3xD,MAAM3gC,EAAI3G,IAAM2G,EAE9BjO,KAAKugG,SAAStxD,MAAMhhC,EAAI3G,IAAM2G,CAElC,GAEA,CAAAxH,IAAA,uBAAAnD,MAMA,SAAqB2K,GACM,IAAAm0F,EAArBn0F,aAAe01D,IACjB3jE,KAAKsgG,sBAAsB+B,YAAYp0F,IACvCm0F,EAAIpiG,KAACsgG,uBAAsBgC,YAAWzhG,MAAAuhG,EAAAtyE,GAAI7hB,EAAIghC,SAE9CjvC,KAAKsgG,sBAAsBgC,YAAYr0F,EAE3C,GAEA,CAAAxH,IAAA,cAAAnD,MAGA,WACEtD,KAAKsgG,sBAAsBjlD,OAC7B,GAEA,CAAA50C,IAAA,uBAAAnD,MAKA,WACE,OAAOtD,KAAKsgG,sBAAsBiC,SACpC,GAEA,CAAA97F,IAAA,uBAAAnD,MAKA,WACE,OAAOtD,KAAKsgG,sBAAsBkC,SACpC,GAEA,CAAA/7F,IAAA,uBAAAnD,MAMA,SAAqBm3B,GACnB,IAAK,IAAI5rB,EAAI,EAAGA,EAAI4rB,EAAKwU,MAAMtqC,OAAQkK,IAAK,CAC1C,IAAMu+B,EAAO3S,EAAKwU,MAAMpgC,GACxBu+B,EAAKqH,OAAQ,EACbz0C,KAAKyiG,YAAYr1D,EACnB,CACF,GAEA,CAAA3mC,IAAA,gBAAAnD,MAQA,SAAciS,EAAO4hF,EAAS9rF,GAC5B,IAAMgf,EAAarqB,KAAKmhG,eAAe5rF,EAAO4hF,IAEzB,IAAjB9rF,EAAOopC,QACTppC,EAAOopC,OAAQ,EACXppC,aAAkBs4D,IACpBt5C,EAAWoQ,KAAOpvB,EAAO/D,GACzBtH,KAAK23C,KAAKwvB,QAAQlxD,KAAK,WAAYoU,KAEnCA,EAAW+iB,KAAO/hC,EAAO/D,GACzBtH,KAAK23C,KAAKwvB,QAAQlxD,KAAK,WAAYoU,IAGzC,GAEA,CAAA5jB,IAAA,iBAAAnD,MASA,SAAeiS,EAAO4hF,EAAS9rF,GAC7B,IAAMgf,EAAarqB,KAAKmhG,eAAe5rF,EAAO4hF,GAC1CuL,GAAe,EAenB,OAbqB,IAAjBr3F,EAAOopC,QACTppC,EAAOopC,OAAQ,EACfz0C,KAAKyiG,YAAYp3F,GACjBq3F,GAAe,EACXr3F,aAAkBs4D,IACpBt5C,EAAWoQ,KAAOpvB,EAAO/D,GACzBtH,KAAK23C,KAAKwvB,QAAQlxD,KAAK,YAAaoU,KAEpCA,EAAW+iB,KAAO/hC,EAAO/D,GACzBtH,KAAK23C,KAAKwvB,QAAQlxD,KAAK,YAAaoU,KAIjCq4E,CACT,GAEA,CAAAj8F,IAAA,cAAAnD,MAMA,SAAYiS,EAAO4hF,GACjB,IAAI9rF,EAASrL,KAAKy6F,UAAUtD,QACbl1F,IAAXoJ,IACFA,EAASrL,KAAK4gG,UAAUzJ,IAG1B,IAAIuL,GAAe,EAEnB,IAAK,IAAMl9B,KAAUxlE,KAAKugG,SAAS3xD,MAC7BvsC,OAAOzB,UAAUH,eAAeK,KAAKd,KAAKugG,SAAS3xD,MAAO42B,UAE/CvjE,IAAXoJ,GACCA,aAAkBs4D,IAAQt4D,EAAO/D,IAAMk+D,GACxCn6D,aAAkBsoE,MAElB3zE,KAAK2iG,cAAcptF,EAAO4hF,EAASn3F,KAAKugG,SAAS3xD,MAAM42B,WAChDxlE,KAAKugG,SAAS3xD,MAAM42B,GAC3Bk9B,GAAe,GAMrB,IAAK,IAAMhtB,KAAU11E,KAAKugG,SAAStxD,MAC7B5sC,OAAOzB,UAAUH,eAAeK,KAAKd,KAAKugG,SAAStxD,MAAOymC,MAGvC,IAAjBgtB,GACF1iG,KAAKugG,SAAStxD,MAAMymC,GAAQjhC,OAAQ,SAC7Bz0C,KAAKugG,SAAStxD,MAAMymC,UAKhBzzE,IAAXoJ,GACCA,aAAkBsoE,IAAQtoE,EAAO/D,IAAMouE,GACvCrqE,aAAkBs4D,KAASt4D,EAAOopC,SAEnCz0C,KAAK2iG,cAAcptF,EAAO4hF,EAASn3F,KAAKugG,SAAStxD,MAAMymC,WAChD11E,KAAKugG,SAAStxD,MAAMymC,GAC3BgtB,GAAe,IAKrB,QAAezgG,IAAXoJ,EAAsB,CACxB,IAAMu3F,EAAoBr2D,GAAYvsC,KAAKugG,SAAStxD,OAAOtqC,OACrDk+F,EAAoBt2D,GAAYvsC,KAAKugG,SAAS3xD,OAAOjqC,QAUvD+9F,GARFr3F,aAAkBsoE,IACI,IAAtBivB,GACsB,IAAtBC,GAEAx3F,aAAkBs4D,IACI,IAAtBi/B,GACsB,IAAtBC,KAGAH,EAAe1iG,KAAK8iG,eAAevtF,EAAO4hF,EAAS9rF,IAGjDA,aAAkBs4D,KAA6C,IAArC3jE,KAAK8L,QAAQ40F,qBACzC1gG,KAAK+iG,qBAAqB13F,EAE9B,EAEqB,IAAjBq3F,GACF1iG,KAAK23C,KAAKwvB,QAAQlxD,KAAK,iBAE3B,GAEA,CAAAxP,IAAA,wBAAAnD,MAGA,WACEtD,KAAKsgG,sBAAsBL,QAC7B,GAEA,CAAAx5F,IAAA,gBAAAnD,MAaA,SAAc6zF,EAAS5hF,GACrB,IAAIq+C,GAAW,EAETovC,EAAmBhjG,KAAKsgG,sBAAsBL,SAC9CgD,EAAoB,CACxBr0D,MAAOo0D,EAAiBp0D,MAAMqM,SAC9BhM,MAAO+zD,EAAiB/zD,MAAMgM,UAG5B+nD,EAAiB/zD,MAAM4vD,QAAQl6F,OAAS,IAC1C3E,KAAKi6F,mBACH,eACA1kF,EACA4hF,EACA8L,GAEFrvC,GAAW,GAGTovC,EAAiBp0D,MAAMiwD,QAAQl6F,OAAS,IAC1C3E,KAAKi6F,mBACH,eACA1kF,EACA4hF,EACA8L,GAEFrvC,GAAW,GAGTovC,EAAiBp0D,MAAMgwD,MAAMj6F,OAAS,IACxC3E,KAAKi6F,mBAAmB,aAAc1kF,EAAO4hF,GAC7CvjC,GAAW,GAGTovC,EAAiB/zD,MAAM2vD,MAAMj6F,OAAS,IACxC3E,KAAKi6F,mBAAmB,aAAc1kF,EAAO4hF,GAC7CvjC,GAAW,IAII,IAAbA,GAEF5zD,KAAKi6F,mBAAmB,SAAU1kF,EAAO4hF,EAE7C,GAEA,CAAA1wF,IAAA,eAAAnD,MAMA,WACE,MAAO,CACLsrC,MAAO5uC,KAAKkjG,qBACZj0D,MAAOjvC,KAAKmjG,qBAEhB,GAEA,CAAA18F,IAAA,mBAAAnD,MAKA,WACE,OAAOtD,KAAKsgG,sBAAsB8C,UACpC,GAEA,CAAA38F,IAAA,mBAAAnD,MAKA,WACE,OAAOtD,KAAKsgG,sBAAsB+C,UACpC,GAEA,CAAA58F,IAAA,qBAAAnD,MAKA,WAAqB,IAAAwrB,EACnB,OAAOud,GAAAvd,EAAI9uB,KAACsgG,sBAAsB8C,YAAUtiG,KAAAguB,GAAK,SAAC2L,GAAI,OAAKA,EAAKnzB,KAClE,GAEA,CAAAb,IAAA,qBAAAnD,MAKA,WAAqB,IAAAuoC,EACnB,OAAOQ,GAAAR,EAAI7rC,KAACsgG,sBAAsB+C,YAAUviG,KAAA+qC,GAAK,SAACuB,GAAI,OAAKA,EAAK9lC,KAClE,GAEA,CAAAb,IAAA,eAAAnD,MAMA,SAAao3F,GAAyB,IAAd5uF,EAAO7K,UAAA0D,OAAA,QAAA1C,IAAAhB,UAAA,GAAAA,UAAA,GAAG,CAAA,EAChC,IAAKy5F,IAAeA,EAAU9rD,QAAU8rD,EAAUzrD,MAChD,MAAM,IAAIjrC,UACR,kEAQJ,IAHI8H,EAAQ+0F,kBAAuC5+F,IAAxB6J,EAAQ+0F,cACjC7gG,KAAK6gG,cAEHnG,EAAU9rD,MAAO,CAAA,IACa7C,EADbC,EAAAC,GACFyuD,EAAU9rD,OAAK,IAAhC,IAAA5C,EAAAn3B,MAAAk3B,EAAAC,EAAAz+B,KAAAiR,MAAkC,CAAA,IAAvBlX,EAAEykC,EAAAzoC,MACLm3B,EAAOz6B,KAAK23C,KAAK/I,MAAMtnC,GAC7B,IAAKmzB,EACH,MAAM,IAAInR,WAAW,iBAAmBhiB,EAAK,eAG/CtH,KAAKo7F,aAAa3gE,EAAM3uB,EAAQw1F,eAClC,CAAC,CAAA,MAAAl1D,GAAAJ,EAAAxc,EAAA4c,EAAA,CAAA,QAAAJ,EAAAlpC,GAAA,CACH,CAEA,GAAI43F,EAAUzrD,MAAO,CAAA,IACagwD,EADbC,EAAAjzD,GACFyuD,EAAUzrD,OAAK,IAAhC,IAAAiwD,EAAArqF,MAAAoqF,EAAAC,EAAA3xF,KAAAiR,MAAkC,CAAA,IAAvBlX,EAAE23F,EAAA37F,MACL8pC,EAAOptC,KAAK23C,KAAK1I,MAAM3nC,GAC7B,IAAK8lC,EACH,MAAM,IAAI9jB,WAAW,iBAAmBhiB,EAAK,eAE/CtH,KAAKo7F,aAAahuD,EACpB,CAAC,CAAA,MAAAhB,GAAA8yD,EAAA1vE,EAAA4c,EAAA,CAAA,QAAA8yD,EAAAp8F,GAAA,CACH,CACA9C,KAAK23C,KAAKwvB,QAAQlxD,KAAK,kBACvBjW,KAAKsgG,sBAAsBL,QAC7B,GAEA,CAAAx5F,IAAA,cAAAnD,MAOA,SAAYo3F,GAAkC,IAAvB4G,IAAcrgG,UAAA0D,OAAA,QAAA1C,IAAAhB,UAAA,KAAAA,UAAA,GACnC,IAAKy5F,QAAkCz4F,IAArBy4F,EAAU/1F,OAC1B,KAAM,sCAER3E,KAAK26F,aAAa,CAAE/rD,MAAO8rD,GAAa,CAAE4G,eAAgBA,GAC5D,GAEA,CAAA76F,IAAA,cAAAnD,MAMA,SAAYo3F,GACV,IAAKA,QAAkCz4F,IAArBy4F,EAAU/1F,OAC1B,KAAM,sCAER3E,KAAK26F,aAAa,CAAE1rD,MAAOyrD,GAC7B,GAEA,CAAAj0F,IAAA,kBAAAnD,MAKA,WACE,IAAK,IAAMm3B,KAAQz6B,KAAKsgG,sBAAsB8C,WACvC/gG,OAAOzB,UAAUH,eAAeK,KAAKd,KAAK23C,KAAK/I,MAAOnU,EAAKnzB,KAC9DtH,KAAKsgG,sBAAsB+B,YAAY5nE,GAG3C,IAAK,IAAM2S,KAAQptC,KAAKsgG,sBAAsB+C,WACvChhG,OAAOzB,UAAUH,eAAeK,KAAKd,KAAK23C,KAAK1I,MAAO7B,EAAK9lC,KAC9DtH,KAAKsgG,sBAAsBgC,YAAYl1D,EAG7C,GAEA,CAAA3mC,IAAA,kBAAAnD,MAyBA,SAAgB6zF,GAQd,IAPA,IAAMp4E,EAAQ/e,KAAKw1C,OAAOm3C,YAAYwK,GAChChqC,EAAQ,GAIRob,EAAcvoE,KAAK23C,KAAK4wB,YACxB35B,EAAQ5uC,KAAK23C,KAAK/I,MACf//B,EAAI05D,EAAY5jE,OAAS,EAAGkK,GAAK,EAAGA,IAAK,CAChD,IACMmpD,EADOppB,EAAM25B,EAAY15D,IACdy0F,gBAAgBvkF,GACjCouC,EAAMrmD,KAAKjG,MAAMssD,EAAO6K,EAC1B,CAIA,IAFA,IAAMujB,EAAcv7E,KAAK23C,KAAK4jC,YACxBtsC,EAAQjvC,KAAK23C,KAAK1I,MACfpgC,EAAI0sE,EAAY52E,OAAS,EAAGkK,GAAK,EAAGA,IAAK,CAChD,IACMmpD,EADO/oB,EAAMssC,EAAY1sE,IACdy0F,gBAAgBvkF,GACjCouC,EAAMrmD,KAAKjG,MAAMssD,EAAO6K,EAC1B,CAEA,OAAO7K,CACT,KAACkzC,CAAA,CApwBmB,kXCHtB,IAoBMkD,GAAkB,WAAA,SAAAA,IAAA3/E,QAAA2/E,EAAA,CA2GrB,OA3GqBx1E,GAAAw1E,EAAA,CAAA,CAAA98F,IAAA,WAAAnD,MAItB,WACE,MAAM,IAAI4lC,MAAM,oCAClB,GAEA,CAAAziC,IAAA,WAAAnD,MAOA,WACE,GAGF,CAAAmD,IAAA,YAAAnD,MAQA,WACE,OAAOtD,KAAKwjG,UACd,GAEA,CAAA/8F,IAAA,cAAAnD,MAMA,SAAYm3B,GAEV,OADAz6B,KAAKyjG,SAAShpE,GACPz6B,KAAKwjG,UACd,GAEA,CAAA/8F,IAAA,cAAAnD,MAOA,SAAYm3B,EAAMpjB,GAA6B,IAAnB4vD,EAAKhmE,UAAA0D,OAAA,QAAA1C,IAAAhB,UAAA,GAAAA,UAAA,QAAGgB,EAClCjC,KAAKyjG,SAAShpE,EAAMpjB,EAAU4vD,GAC9BjnE,KAAKwjG,UACP,GAEA,CAAA/8F,IAAA,cAAAnD,MASA,SAAYuK,GAEV,OADA7N,KAAKyjG,SAAS51F,GACP7N,KAAKwjG,UACd,GAEA,CAAA/8F,IAAA,OAAAnD,MAcA,SAAKogG,GACH1jG,KAAKyjG,SAASC,GACd1jG,KAAKwjG,UACP,GAEA,CAAA/8F,IAAA,MAAAnD,MAMA,SAAIm3B,EAAMwsC,GACRjnE,KAAKyjG,SAAShpE,EAAMwsC,GACpBjnE,KAAKwjG,UACP,GAEA,CAAA/8F,IAAA,QAAAnD,MAMA,SAAMkiE,EAAQ44B,GACZp+F,KAAKyjG,SAASj+B,EAAQ44B,GACtBp+F,KAAKwjG,UACP,KAACD,CAAA,CA3GqB,GAsHlBI,YAAgBC,GAAA1mD,GAAAymD,EAAAC,GAAA,IAAA75D,EAAA4zB,GAAAgmC,GAMpB,SAAAA,EAAYE,GAAQ,IAAAjkE,EAEG,OAFHhc,QAAA+/E,IAClB/jE,EAAAmK,EAAAjpC,KAAAd,OACK6jG,OAASA,EAAOjkE,CACvB,CA6CC,OA3CD7R,GAAA41E,EAAA,CAAA,CAAAl9F,IAAA,YAAAnD,MACA,WACE,MAAO,YACT,GAEA,CAAAmD,IAAA,cAAAnD,MACA,SAAYm3B,GACV,OAAOA,EAAKntB,CACd,GAEA,CAAA7G,IAAA,cAAAnD,MACA,SAAYm3B,EAAMpjB,GAA6B,IAAnB4vD,EAAKhmE,UAAA0D,OAAA,QAAA1C,IAAAhB,UAAA,GAAAA,UAAA,QAAGgB,OACpBA,IAAVglE,GACFjnE,KAAK6jG,OAAOC,aAAaC,cAActpE,EAAMwsC,GAE/CxsC,EAAKntB,EAAI+J,CACX,GAEA,CAAA5Q,IAAA,cAAAnD,MACA,SAAYuK,GACV,IAAM8f,EAAM3tB,KAAK6jG,OAAOC,aAAaE,YACnChkG,KAAK6jG,OAAOlsD,KAAK/I,MACjB/gC,GAEF,MAAO,CAAEF,IAAKggB,EAAIs2E,MAAOv2F,IAAKigB,EAAIu2E,MACpC,GAEA,CAAAz9F,IAAA,OAAAnD,MACA,SAAKogG,GACHS,GAAAT,GAAS5iG,KAAT4iG,GAAe,SAAUx6F,EAAGyC,GAC1B,OAAOzC,EAAEoE,EAAI3B,EAAE2B,CACjB,GACF,GAEA,CAAA7G,IAAA,MAAAnD,MACA,SAAIm3B,EAAMwsC,GACRxsC,EAAKnpB,EAAItR,KAAK6jG,OAAO/3F,QAAQg4F,aAAaM,gBAAkBn9B,EAC5DxsC,EAAK3uB,QAAQ8nC,MAAMtiC,GAAI,CACzB,GAEA,CAAA7K,IAAA,QAAAnD,MACA,SAAMkiE,EAAQ44B,GACZp+F,KAAK6jG,OAAOlsD,KAAK/I,MAAM42B,GAAQl4D,GAAK8wF,CACtC,KAACuF,CAAA,EAtD4BJ,IAiEzBc,YAAkBC,GAAApnD,GAAAmnD,EAAAC,GAAA,IAAAz5B,EAAAlN,GAAA0mC,GAMtB,SAAAA,EAAYR,GAAQ,IAAA7+D,EAEG,OAFHphB,QAAAygF,IAClBr/D,EAAA6lC,EAAA/pE,KAAAd,OACK6jG,OAASA,EAAO7+D,CACvB,CA6CC,OA3CDjX,GAAAs2E,EAAA,CAAA,CAAA59F,IAAA,YAAAnD,MACA,WACE,MAAO,UACT,GAEA,CAAAmD,IAAA,cAAAnD,MACA,SAAYm3B,GACV,OAAOA,EAAKnpB,CACd,GAEA,CAAA7K,IAAA,cAAAnD,MACA,SAAYm3B,EAAMpjB,GAA6B,IAAnB4vD,EAAKhmE,UAAA0D,OAAA,QAAA1C,IAAAhB,UAAA,GAAAA,UAAA,QAAGgB,OACpBA,IAAVglE,GACFjnE,KAAK6jG,OAAOC,aAAaC,cAActpE,EAAMwsC,GAE/CxsC,EAAKnpB,EAAI+F,CACX,GAEA,CAAA5Q,IAAA,cAAAnD,MACA,SAAYuK,GACV,IAAM8f,EAAM3tB,KAAK6jG,OAAOC,aAAaE,YACnChkG,KAAK6jG,OAAOlsD,KAAK/I,MACjB/gC,GAEF,MAAO,CAAEF,IAAKggB,EAAI42E,MAAO72F,IAAKigB,EAAI62E,MACpC,GAEA,CAAA/9F,IAAA,OAAAnD,MACA,SAAKogG,GACHS,GAAAT,GAAS5iG,KAAT4iG,GAAe,SAAUx6F,EAAGyC,GAC1B,OAAOzC,EAAEoI,EAAI3F,EAAE2F,CACjB,GACF,GAEA,CAAA7K,IAAA,MAAAnD,MACA,SAAIm3B,EAAMwsC,GACRxsC,EAAKntB,EAAItN,KAAK6jG,OAAO/3F,QAAQg4F,aAAaM,gBAAkBn9B,EAC5DxsC,EAAK3uB,QAAQ8nC,MAAMtmC,GAAI,CACzB,GAEA,CAAA7G,IAAA,QAAAnD,MACA,SAAMkiE,EAAQ44B,GACZp+F,KAAK6jG,OAAOlsD,KAAK/I,MAAM42B,GAAQl0D,GAAK8sF,CACtC,KAACiG,CAAA,EAtD8Bd,IC/M7BkB,GAAS/iG,GAAwCulB,MAD7C3mB,GAQN,CAAEiM,OAAQ,QAASK,OAAO,EAAMG,QANRrJ,GAEc,UAIoB,CAC1DujB,MAAO,SAAeN,GACpB,OAAO89E,GAAOzkG,KAAM2mB,EAAY1lB,UAAU0D,OAAS,EAAI1D,UAAU,QAAKgB,EACvE,ICVH,IAEAglB,GAFmBvlB,GAEW,SAASulB,MCHnCpiB,GAAgBvE,GAChBoE,GAAShD,GAET0d,GAAiBlJ,MAAMtV,UCHvBsQ,GDKa,SAAUxR,GACzB,IAAIyR,EAAMzR,EAAGunB,MACb,OAAOvnB,IAAO0f,IAAmBva,GAAcua,GAAgB1f,IAAOyR,IAAQiO,GAAe6H,MAASviB,GAASyM,CACjH,OCNiBD,0/BCkBjB,SAASwzF,GACP91D,EACA+1D,GAEA,IAAM11D,EAAQ,IAAAovD,GAsBd,OArBAlsD,GAAAvD,GAAK9tC,KAAL8tC,GAAc,SAACnU,GAAc,IAAA3L,EAC3BqjB,GAAArjB,EAAA2L,EAAKwU,OAAKnuC,KAAAguB,GAAS,SAACse,GACdA,EAAK0mC,WACP7kC,EAAMzH,IAAI4F,EAEd,GACF,IAEA+E,GAAAlD,GAAKnuC,KAALmuC,GAAc,SAAC7B,GACb,IAAM27B,EAAS37B,EAAKzsB,KAAKrZ,GACnBwhE,EAAO17B,EAAK/b,GAAG/pB,GAEC,MAAlBq9F,EAAO57B,KACT47B,EAAO57B,GAAU,IAGC,MAAhB47B,EAAO77B,IAAiB67B,EAAO57B,IAAW47B,EAAO77B,MACnD67B,EAAO77B,GAAQ67B,EAAO57B,GAAU,EAEpC,IAEO47B,CACT,CAyDA,SAASC,GACPC,EACAC,EACAnrE,EACAiV,GAAoB,IAAAwoD,EAkBwBrrD,EAhBtC44D,EAAS32D,GAAc,MAQvB+2D,EAAQ51C,GAAAioC,EAAAtnE,GAAI0hC,GAAA5iB,GAAK9tC,KAAL8tC,KAAc9tC,KAAAs2F,GAC9B,SAAC4N,EAAKvqE,GAAI,OAAauqE,EAAM,EAAIvqE,EAAKwU,MAAMtqC,MAAM,GAClD,GAGIsgG,EAAiCtrE,EAAY,KAC7CurE,EAA6B,OAAdvrE,EAAqB,GAAK,EAAEqS,EAAAC,GAEV2C,GAAK,IAAA,IAuD3Cu2D,EAvD2CxsC,EAAAA,WAAE,IAAAysC,EAAAl2E,GAAA6c,EAAAzoC,MAAA,GAAlC+hG,EAAWD,EAAA,GAAEE,EAASF,EAAA,GAChC,IAEGx2D,EAAMr4B,IAAI8uF,KAEVR,EAAYS,GACb,OAAA,EAKFX,EAAOU,GAAe,EAKtB,IAHA,IAEI5qE,EAuCH8qE,EAzCKp8D,EAAgB,CAACm8D,GACnB9mF,EAAO,EACgBorE,EAAAA,WACE,IAAAyN,EAAAC,EAC3B,IAAK1oD,EAAMr4B,IAAI8uF,GACb,OAAA,EAIF,IAAMG,EAAWb,EAAOlqE,EAAKnzB,IAAM49F,EA0BnC,GAxBA/yD,GAAAklD,EAAA5nC,GAAA6nC,EAAA78D,EAAKwU,OAAKnuC,KAAAw2F,GAEN,SAAClqD,GAAI,OAEHA,EAAK0mC,WAEL1mC,EAAK/b,KAAO+b,EAAKzsB,MAEjBysB,EAAKzT,KAAec,GAEpBmU,EAAMr4B,IAAI62B,EAAK07B,OAEfl6B,EAAMr4B,IAAI62B,EAAK27B,OAAO,KACzBjoE,KAAAu2F,GACQ,SAACjqD,GACR,IAAMq4D,EAAer4D,EAAK63D,GACpBS,EAAWf,EAAOc,IAER,MAAZC,GAAoBZ,EAAsBU,EAAUE,MACtDf,EAAOc,GAAgBD,EACvBr8D,EAAMriC,KAAKsmC,EAAKzT,IAEpB,IAEEnb,EAAOumF,EACT,MAAA,CAAA9nE,EAAA,CAAAA,EACOynE,GAA4B91D,EAAO+1D,OAExCnmF,CAEL,EAtCOic,EAAO0O,EAAM4I,OAAK,GAGtB,KAHsBwzD,EAAA3b,MAGb2b,EAAA,OAAAA,EAAAtoE,CAoCd,EAvDD,IAAA+O,EAAAn3B,MAAAk3B,EAAAC,EAAAz+B,KAAAiR,MAAA,GAOI,KAPJ2mF,EAAAxsC,MAOawsC,EAAA,OAAAA,EAAAloE,CAgDZ,CAAA,MAAAmP,GAAAJ,EAAAxc,EAAA4c,EAAA,CAAA,QAAAJ,EAAAlpC,GAAA,CAED,OAAO6hG,CACT,CCxIA,IAKMgB,GAAkB,WAItB,SAAAA,IAAc/hF,QAAA+hF,GACZ3lG,KAAK4lG,kBAAoB,GACzB5lG,KAAK6lG,gBAAkB,GACvB7lG,KAAK8lG,MAAQ,GAEb9lG,KAAK+lG,qBAAuB,GAC5B/lG,KAAK2kG,OAAS,GACd3kG,KAAKgmG,kBAAoB,GAEzBhmG,KAAKimG,QAAS,EACdjmG,KAAKkmG,WAAa,CACpB,CA2PC,OAzPDn4E,GAAA43E,EAAA,CAAA,CAAAl/F,IAAA,cAAAnD,MAMA,SAAY+gF,EAAcN,QACqB9hF,IAAzCjC,KAAK4lG,kBAAkBvhB,KACzBrkF,KAAK4lG,kBAAkBvhB,GAAgB,IAEzCrkF,KAAK4lG,kBAAkBvhB,GAAcv9E,KAAKi9E,QAEA9hF,IAAtCjC,KAAK6lG,gBAAgB9hB,KACvB/jF,KAAK6lG,gBAAgB9hB,GAAe,IAEtC/jF,KAAK6lG,gBAAgB9hB,GAAaj9E,KAAKu9E,EACzC,GAEA,CAAA59E,IAAA,cAAAnD,MAOA,WACE,IAAK,IAAMuL,KAAK7O,KAAK6lG,gBACnB,GAAI7lG,KAAK6lG,gBAAgBh3F,GAAGlK,OAAS,EAEnC,YADA3E,KAAKimG,QAAS,GAKlBjmG,KAAKimG,QAAS,CAChB,GAEA,CAAAx/F,IAAA,WAAAnD,MAKA,WACE,OAAOtD,KAAKkmG,UAAY,CAC1B,GAEA,CAAAz/F,IAAA,eAAAnD,MAMA,SAAam3B,EAAM0rE,QACFlkG,IAAXkkG,QAEwBlkG,IAAxBjC,KAAK8lG,MAAMrrE,EAAKnzB,MAClBtH,KAAK8lG,MAAMrrE,EAAKnzB,IAAM6+F,EACtBnmG,KAAKkmG,UAAYvmG,KAAK+N,IAAIy4F,EAAQnmG,KAAKkmG,WAE3C,GAEA,CAAAz/F,IAAA,cAAAnD,MAOA,SAAYkiE,QACkBvjE,IAAxBjC,KAAK2kG,OAAOn/B,KACdxlE,KAAK2kG,OAAOn/B,GAAU,EAE1B,GAEA,CAAA/+D,IAAA,cAAAnD,MAQA,SAAYkiE,GAAQ,IAAA5lC,EAAA5/B,KACZomG,EAAc,CAAA,EAmBpB,OAjBqB,SAAfC,EAAgB7gC,GACpB,QAA4BvjE,IAAxBmkG,EAAY5gC,GACd,OAAO4gC,EAAY5gC,GAErB,IAAIyB,EAAQrnC,EAAK+kE,OAAOn/B,GACxB,GAAI5lC,EAAKgmE,kBAAkBpgC,GAAS,CAClC,IAAMkT,EAAW94C,EAAKgmE,kBAAkBpgC,GACxC,GAAIkT,EAAS/zE,OAAS,EACpB,IAAK,IAAIkK,EAAI,EAAGA,EAAI6pE,EAAS/zE,OAAQkK,IACnCo4D,EAAQtnE,KAAK+N,IAAIu5D,EAAOo/B,EAAa3tB,EAAS7pE,IAGpD,CAEA,OADAu3F,EAAY5gC,GAAUyB,EACfA,EAGFo/B,CAAa7gC,EACtB,GAEA,CAAA/+D,IAAA,kBAAAnD,MAKA,SAAgBgjG,EAAOC,QACStkG,IAA1BjC,KAAK2kG,OAAO4B,EAAMj/F,WAEUrF,IAA1BjC,KAAK2kG,OAAO2B,EAAMh/F,MACpBtH,KAAK2kG,OAAO2B,EAAMh/F,IAAM,GAG1BtH,KAAK2kG,OAAO4B,EAAMj/F,IAAMtH,KAAK2kG,OAAO2B,EAAMh/F,IAAM,EAEpD,GAEA,CAAAb,IAAA,oBAAAnD,MAKA,SAAkBsrC,GAChB,IAAI43D,EAAW,IAEf,IAAK,IAAMhhC,KAAU52B,EACfvsC,OAAOzB,UAAUH,eAAeK,KAAK8tC,EAAO42B,SAClBvjE,IAAxBjC,KAAK2kG,OAAOn/B,KACdghC,EAAW7mG,KAAKgO,IAAI3N,KAAK2kG,OAAOn/B,GAASghC,IAM/C,IAAK,IAAMhhC,KAAU52B,EACfvsC,OAAOzB,UAAUH,eAAeK,KAAK8tC,EAAO42B,SAClBvjE,IAAxBjC,KAAK2kG,OAAOn/B,KACdxlE,KAAK2kG,OAAOn/B,IAAWghC,EAI/B,GAEA,CAAA//F,IAAA,cAAAnD,MAOA,SAAYsrC,EAAO/gC,GACjB,IAAIo2F,EAAQ,IACRC,GAAS,IACTK,EAAQ,IACRC,GAAS,IAEb,IAAK,IAAMh/B,KAAUxlE,KAAK8lG,MACxB,GAAIzjG,OAAOzB,UAAUH,eAAeK,KAAKd,KAAK8lG,MAAOtgC,IAC/CxlE,KAAK8lG,MAAMtgC,KAAY33D,EAAO,CAChC,IAAM4sB,EAAOmU,EAAM42B,GACnBy+B,EAAQtkG,KAAKgO,IAAI8sB,EAAKntB,EAAG22F,GACzBC,EAAQvkG,KAAK+N,IAAI+sB,EAAKntB,EAAG42F,GACzBK,EAAQ5kG,KAAKgO,IAAI8sB,EAAKnpB,EAAGizF,GACzBC,EAAQ7kG,KAAK+N,IAAI+sB,EAAKnpB,EAAGkzF,EAC3B,CAIJ,MAAO,CACLP,MAAOA,EACPC,MAAOA,EACPK,MAAOA,EACPC,MAAOA,EAEX,GAEA,CAAA/9F,IAAA,gBAAAnD,MAOA,SAAc4rE,EAAOC,GACnB,IAAMs3B,EAAWzmG,KAAK6lG,gBAAgB32B,EAAM5nE,IACtCo/F,EAAW1mG,KAAK6lG,gBAAgB12B,EAAM7nE,IAC5C,QAAiBrF,IAAbwkG,QAAuCxkG,IAAbykG,EAC5B,OAAO,EAGT,IAAK,IAAI73F,EAAI,EAAGA,EAAI43F,EAAS9hG,OAAQkK,IACnC,IAAK,IAAIoB,EAAI,EAAGA,EAAIy2F,EAAS/hG,OAAQsL,IACnC,GAAIw2F,EAAS53F,IAAM63F,EAASz2F,GAC1B,OAAO,EAIb,OAAO,CACT,GAEA,CAAAxJ,IAAA,mBAAAnD,MAOA,SAAiB4rE,EAAOC,GACtB,OAAOnvE,KAAK8lG,MAAM52B,EAAM5nE,MAAQtH,KAAK8lG,MAAM32B,EAAM7nE,GACnD,GAEA,CAAAb,IAAA,YAAAnD,MAKA,WACE,OAAOipC,GAAYvsC,KAAK+lG,qBAC1B,GAEA,CAAAt/F,IAAA,gBAAAnD,MAMA,SAAcm3B,EAAMwsC,QACuBhlE,IAArCjC,KAAK+lG,qBAAqB9+B,KAC5BjnE,KAAK+lG,qBAAqB9+B,GAAS,IAGrC,IAAI0/B,GAAY,EACVC,EAAW5mG,KAAK+lG,qBAAqB9+B,GAC3C,IAAK,IAAM15D,KAAKq5F,EAEd,GAAIA,EAASr5F,KAAOktB,EAAM,CACxBksE,GAAY,EACZ,KACF,CAGGA,IACH3mG,KAAK+lG,qBAAqB9+B,GAAOngE,KAAK2zB,GACtCz6B,KAAKgmG,kBAAkBvrE,EAAKnzB,IAC1BtH,KAAK+lG,qBAAqB9+B,GAAOtiE,OAAS,EAEhD,KAACghG,CAAA,CA1QqB,GAgRlBkB,GAAY,WAIhB,SAAAA,EAAYlvD,GAAM/zB,QAAAijF,GAChB7mG,KAAK23C,KAAOA,EAIZ33C,KAAK8mG,UAAUnnG,KAAK6H,SAAW,IAAMk4E,MAErC1/E,KAAK+mG,YAAa,EAClB/mG,KAAK8L,QAAU,GACf9L,KAAKgnG,cAAgB,CAAEniC,QAAS,CAAC,GAEjC7kE,KAAK+7C,eAAiB,CACpBkrD,gBAAYhlG,EACZilG,gBAAgB,EAChBC,iBAAkB,IAClBrD,aAAc,CACZ30D,SAAS,EACTi1D,gBAAiB,IACjBgD,YAAa,IACbC,YAAa,IACbC,eAAe,EACfC,kBAAkB,EAClBC,sBAAsB,EACtB7tE,UAAW,KACX8tE,WAAY,YAGhBxrD,GAAcj8C,KAAK8L,QAAS9L,KAAK+7C,gBACjC/7C,KAAKknE,oBACP,CA05CC,OAx5CDn5C,GAAA84E,EAAA,CAAA,CAAApgG,IAAA,qBAAAnD,MAGA,WAAqB,IAAA0hC,EAAAhlC,KACnBA,KAAK23C,KAAKwvB,QAAQ9xD,GAAG,gBAAgB,WACnC2vB,EAAK0iE,yBACP,IACA1nG,KAAK23C,KAAKwvB,QAAQ9xD,GAAG,eAAe,WAClC2vB,EAAK2iE,eACP,IACA3nG,KAAK23C,KAAKwvB,QAAQ9xD,GAAG,4BAA4B,WAC/C2vB,EAAK0iE,yBACP,IACA1nG,KAAK23C,KAAKwvB,QAAQ9xD,GAAG,qCAAqC,WACxD,IAA0C,IAAtC2vB,EAAKl5B,QAAQg4F,aAAa30D,QAA9B,CAIA,IAAM72B,EAAO0sB,EAAKrL,UAAUiuE,YAG5B5iE,EAAK2S,KAAKwvB,QAAQlxD,KAAK,6BAA8BqC,GAAM,EAL3D,CAMF,GACF,GAEA,CAAA7R,IAAA,aAAAnD,MAMA,SAAWwI,EAAS+7F,GAClB,QAAgB5lG,IAAZ6J,EAAuB,CACzB,IAAMg4F,EAAe9jG,KAAK8L,QAAQg4F,aAC5BgE,EAAwBhE,EAAa30D,QAY3C,GAXAinC,GACE,CAAC,aAAc,iBAAkB,oBACjCp2E,KAAK8L,QACLA,GAEFs6D,GAAapmE,KAAK8L,QAASA,EAAS,qBAET7J,IAAvB6J,EAAQm7F,YACVjnG,KAAK8mG,UAAUh7F,EAAQm7F,aAGI,IAAzBnD,EAAa30D,QAyBf,OAxB8B,IAA1B24D,GAEF9nG,KAAK23C,KAAKwvB,QAAQlxD,KAAK,WAAW,GAKP,OAA3B6tF,EAAanqE,WACc,OAA3BmqE,EAAanqE,UAETmqE,EAAaM,gBAAkB,IACjCN,EAAaM,kBAAoB,GAG/BN,EAAaM,gBAAkB,IACjCN,EAAaM,kBAAoB,GAIrCpkG,KAAK+nG,uBAEL/nG,KAAK23C,KAAKwvB,QAAQlxD,KAAK,4BAGhBjW,KAAKgoG,qCAAqCH,GAEjD,IAA8B,IAA1BC,EAGF,OADA9nG,KAAK23C,KAAKwvB,QAAQlxD,KAAK,WAChBshD,GAAWswC,EAAY7nG,KAAKgnG,cAGzC,CACA,OAAOa,CACT,GAEA,CAAAphG,IAAA,YAAAnD,MAKA,SAAU2kG,GACRjoG,KAAKkoG,kBAAoBD,EACzBjoG,KAAK63E,KAAOC,GAAK93E,KAAKkoG,kBACxB,GAEA,CAAAzhG,IAAA,uCAAAnD,MAKA,SAAqCukG,GACnC,IAA0C,IAAtC7nG,KAAK8L,QAAQg4F,aAAa30D,QAAkB,CAC9C,IAAMg5D,EAAgBnoG,KAAKgnG,cAAcniC,aAGd5iE,IAAvB4lG,EAAWhjC,UAAgD,IAAvBgjC,EAAWhjC,SACjDgjC,EAAWhjC,QAAU,CACnB11B,aAC4BltC,IAA1BkmG,EAAch5D,SAA+Bg5D,EAAch5D,QAC7DgvC,OAAQ,yBAEVgqB,EAAch5D,aACcltC,IAA1BkmG,EAAch5D,SAA+Bg5D,EAAch5D,QAC7Dg5D,EAAchqB,OAASgqB,EAAchqB,QAAU,aACR,WAA9B/wD,GAAOy6E,EAAWhjC,UAC3BsjC,EAAch5D,aACmBltC,IAA/B4lG,EAAWhjC,QAAQ11B,SAEf04D,EAAWhjC,QAAQ11B,QACzBg5D,EAAchqB,OAAS0pB,EAAWhjC,QAAQsZ,QAAU,YACpD0pB,EAAWhjC,QAAQsZ,OAAS,0BACI,IAAvB0pB,EAAWhjC,UACpBsjC,EAAchqB,OAAS,YACvB0pB,EAAWhjC,QAAU,CAAEsZ,OAAQ,0BAIjC,IAAI7lE,EAAOtY,KAAK25B,UAAUiuE,YAI1B,QAAyB3lG,IAArB4lG,EAAW54D,MACbjvC,KAAKgnG,cAAc/3D,MAAQ,CACzB6gC,OAAQ,CAAE3gC,SAAS,EAAM72B,KAAM,YAEjCuvF,EAAW54D,MAAQ,CAAE6gC,QAAQ,QACxB,QAAgC7tE,IAA5B4lG,EAAW54D,MAAM6gC,OAC1B9vE,KAAKgnG,cAAc/3D,MAAQ,CACzB6gC,OAAQ,CAAE3gC,SAAS,EAAM72B,KAAM,YAEjCuvF,EAAW54D,MAAM6gC,QAAS,OAE1B,GAAuC,kBAA5B+3B,EAAW54D,MAAM6gC,OAC1B9vE,KAAKgnG,cAAc/3D,MAAQ,CAAE6gC,OAAQ+3B,EAAW54D,MAAM6gC,QACtD+3B,EAAW54D,MAAM6gC,OAAS,CACxB3gC,QAAS04D,EAAW54D,MAAM6gC,OAC1Bx3D,KAAMA,OAEH,CACL,IAAMw3D,EAAS+3B,EAAW54D,MAAM6gC,YAGZ7tE,IAAhB6tE,EAAOx3D,MAAsC,YAAhBw3D,EAAOx3D,OACtCA,EAAOw3D,EAAOx3D,MAIhBtY,KAAKgnG,cAAc/3D,MAAQ,CACzB6gC,OAAQ,CACN3gC,aAA4BltC,IAAnB6tE,EAAO3gC,SAA+B2gC,EAAO3gC,QACtD72B,UAAsBrW,IAAhB6tE,EAAOx3D,KAAqB,UAAYw3D,EAAOx3D,KACrDm6D,eACuBxwE,IAArB6tE,EAAO2C,UAA0B,GAAM3C,EAAO2C,UAChDW,oBAC4BnxE,IAA1B6tE,EAAOsD,gBAEHtD,EAAOsD,iBAKjBy0B,EAAW54D,MAAM6gC,OAAS,CACxB3gC,aAA4BltC,IAAnB6tE,EAAO3gC,SAA+B2gC,EAAO3gC,QACtD72B,KAAMA,EACNm6D,eAAgCxwE,IAArB6tE,EAAO2C,UAA0B,GAAM3C,EAAO2C,UACzDW,oBAC4BnxE,IAA1B6tE,EAAOsD,gBAEHtD,EAAOsD,eAEjB,CAKFpzE,KAAK23C,KAAKwvB,QAAQlxD,KAAK,6BAA8BqC,EACvD,CAEA,OAAOuvF,CACT,GAEA,CAAAphG,IAAA,oBAAAnD,MAIA,SAAkB0jF,GAChB,IAA0C,IAAtChnF,KAAK8L,QAAQg4F,aAAa30D,QAAkB,CAC9CnvC,KAAK8mG,UAAU9mG,KAAKkoG,mBAEpB,IADA,IAAMvzF,EAASqyE,EAAWriF,OAAS,GAC1BkK,EAAI,EAAGA,EAAIm4E,EAAWriF,OAAQkK,IAAK,CAC1C,IAAM4rB,EAAOusD,EAAWn4E,GAClBktB,EAAQ,EAAIp8B,KAAK+R,GAAK1R,KAAK63E,YAClB51E,IAAXw4B,EAAKntB,IACPmtB,EAAKntB,EAAIqH,EAAShV,KAAK0U,IAAI0nB,SAEd95B,IAAXw4B,EAAKnpB,IACPmpB,EAAKnpB,EAAIqD,EAAShV,KAAK2U,IAAIynB,GAE/B,CACF,CACF,GAEA,CAAAt1B,IAAA,gBAAAnD,MAIA,WACE,IACwC,IAAtCtD,KAAK8L,QAAQg4F,aAAa30D,UACM,IAAhCnvC,KAAK8L,QAAQo7F,eACb,CAMA,IALA,IAAMkB,EAAUpoG,KAAK23C,KAAK4wB,YAItBirB,EAAkB,EACb3kF,EAAI,EAAGA,EAAIu5F,EAAQzjG,OAAQkK,IAAK,EAEP,IADnB7O,KAAK23C,KAAK/I,MAAMw5D,EAAQv5F,IAC5Bo1D,qBACPuvB,GAAmB,EAEvB,CAGA,GAAIA,EAAkB,GAAM4U,EAAQzjG,OAAQ,CAC1C,IACIsiE,EAAQ,EACNkgC,EAAmBnnG,KAAK8L,QAAQq7F,iBAchCkB,EAAiB,CACrBjkB,sBAAuB,CACrBxxC,MAAO,UACPF,MAAO,GACP0J,MAAO,GACP2X,KAAM,CAAEI,OAAO,IAEjBywB,sBAAuB,CACrBlyC,MAAO,GACPqhB,KAAM,CAAEI,OAAO,GACf2b,OAAQ,CACN3gC,SAAS,KASf,GAAIi5D,EAAQzjG,OAASwiG,EAAkB,CAErC,IADA,IAAMmB,EAAcF,EAAQzjG,OACrByjG,EAAQzjG,OAASwiG,GAAoBlgC,GAtC3B,IAsCgD,CAE/DA,GAAS,EACT,IAAMshC,EAASH,EAAQzjG,OAQvB,GANIsiE,EAAQ,GAAM,EAChBjnE,KAAK23C,KAAK6wD,QAAQC,WAAWC,eAAeL,GAE5CroG,KAAK23C,KAAK6wD,QAAQC,WAAWE,gBAAgBN,GAG3CE,GADUH,EAAQzjG,QACCsiE,EAAQ,GAAM,EAOnC,OANAjnE,KAAK4oG,gBACL5oG,KAAK23C,KAAKwvB,QAAQlxD,KAAK,sBACvBozB,QAAQw/D,KACN,+IAON,CAEA7oG,KAAK23C,KAAK6wD,QAAQM,YAAY5yC,WAAW,CACvCulB,aAAc97E,KAAK+N,IAAI,IAAK,EAAI46F,IAEpC,CACIrhC,EAlEe,IAmEjB59B,QAAQw/D,KACN,4GAMJ7oG,KAAK23C,KAAK6wD,QAAQM,YAAYhpB,MAC5BsoB,EACApoG,KAAK23C,KAAK4jC,aACV,GAIFv7E,KAAK+oG,iBAIL,IADA,IACSl6F,EAAI,EAAGA,EAAIu5F,EAAQzjG,OAAQkK,IAAK,CAEvC,IAAM4rB,EAAOz6B,KAAK23C,KAAK/I,MAAMw5D,EAAQv5F,KACL,IAA5B4rB,EAAKwpC,qBACPxpC,EAAKntB,GALM,IAKA,GAAMtN,KAAK63E,QACtBp9C,EAAKnpB,GANM,IAMA,GAAMtR,KAAK63E,QAE1B,CAGA73E,KAAK4oG,gBAGL5oG,KAAK23C,KAAKwvB,QAAQlxD,KAAK,yBACzB,CACF,CACF,GAEA,CAAAxP,IAAA,iBAAAnD,MAKA,WAME,IALA,IAAMy2E,EAAQ4H,GAAYqnB,aACxBhpG,KAAK23C,KAAK/I,MACV5uC,KAAK23C,KAAK4wB,aAENttC,EAAS0mD,GAAYiS,WAAW7Z,GAC7BlrE,EAAI,EAAGA,EAAI7O,KAAK23C,KAAK4wB,YAAY5jE,OAAQkK,IAAK,CACrD,IAAM4rB,EAAOz6B,KAAK23C,KAAK/I,MAAM5uC,KAAK23C,KAAK4wB,YAAY15D,IACnD4rB,EAAKntB,GAAK2tB,EAAO3tB,EACjBmtB,EAAKnpB,GAAK2pB,EAAO3pB,CACnB,CACF,GAEA,CAAA7K,IAAA,gBAAAnD,MAKA,WAEE,IADA,IAAI2lG,GAAkB,GACK,IAApBA,GAA0B,CAC/BA,GAAkB,EAClB,IAAK,IAAIp6F,EAAI,EAAGA,EAAI7O,KAAK23C,KAAK4wB,YAAY5jE,OAAQkK,KACY,IAAxD7O,KAAK23C,KAAK/I,MAAM5uC,KAAK23C,KAAK4wB,YAAY15D,IAAI2oE,YAC5CyxB,GAAkB,EAClBjpG,KAAK23C,KAAK6wD,QAAQC,WAAWze,YAC3BhqF,KAAK23C,KAAK4wB,YAAY15D,GACtB,CAAE,GACF,KAIkB,IAApBo6F,GACFjpG,KAAK23C,KAAKwvB,QAAQlxD,KAAK,eAE3B,CACF,GAEA,CAAAxP,IAAA,UAAAnD,MAIA,WACE,OAAOtD,KAAKkoG,iBACd,GAEA,CAAAzhG,IAAA,0BAAAnD,MAMA,WACE,IACwC,IAAtCtD,KAAK8L,QAAQg4F,aAAa30D,SAC1BnvC,KAAK23C,KAAK4wB,YAAY5jE,OAAS,EAC/B,CAEA,IAAI81B,EAAM+qC,EACN0jC,GAAe,EACfC,GAAiB,EAIrB,IAAK3jC,KAHLxlE,KAAKopG,gBAAkB,GACvBppG,KAAK8jG,aAAe,IAAI6B,GAET3lG,KAAK23C,KAAK/I,MACnBvsC,OAAOzB,UAAUH,eAAeK,KAAKd,KAAK23C,KAAK/I,MAAO42B,UAE7BvjE,KAD3Bw4B,EAAOz6B,KAAK23C,KAAK/I,MAAM42B,IACd15D,QAAQm7D,OACfiiC,GAAe,EACflpG,KAAK8jG,aAAaa,OAAOn/B,GAAU/qC,EAAK3uB,QAAQm7D,OAEhDkiC,GAAiB,GAMvB,IAAuB,IAAnBA,IAA4C,IAAjBD,EAC7B,MAAM,IAAIhgE,MACR,yHAKF,IAAuB,IAAnBigE,EAAyB,CAC3B,IAAM1B,EAAaznG,KAAK8L,QAAQg4F,aAAa2D,WAC1B,YAAfA,EACFznG,KAAKqpG,4BACmB,aAAf5B,EACTznG,KAAKspG,2BACmB,WAAf7B,GACTznG,KAAKupG,gCAET,CAGA,IAAK,IAAM/jC,KAAUxlE,KAAK23C,KAAK/I,MACzBvsC,OAAOzB,UAAUH,eAAeK,KAAKd,KAAK23C,KAAK/I,MAAO42B,IACxDxlE,KAAK8jG,aAAa0F,YAAYhkC,GAIlC,IAAMikC,EAAezpG,KAAK0pG,mBAG1B1pG,KAAK2pG,eAGL3pG,KAAK4pG,uBAAuBH,GAG5BzpG,KAAK6pG,qBAGL7pG,KAAK+oG,gBAET,CACF,GAEA,CAAAtiG,IAAA,qBAAAnD,MAGA,WAAqB,IAAAiiC,EAAAvlC,KAEf8pG,GAAgB,EACdC,EAAW,CAAA,EAcXC,EAAY,SAACn8F,EAAOse,GACxB,IAAM25E,EAAQvgE,EAAKu+D,aAAagC,MAEhC,IAAK,IAAMtgC,KAAUsgC,EACfzjG,OAAOzB,UAAUH,eAAeK,KAAKglG,EAAOtgC,IAC1CsgC,EAAMtgC,KAAY33D,GACpB03B,EAAK5L,UAAU8U,MAAM+2B,EAAQr5C,IAO/B89E,EAAe,WAEnB,IADA,IAAMC,EAAa,GACVr7F,EAAI,EAAGA,EAAI02B,EAAKu+D,aAAaqG,WAAYt7F,IAChDq7F,EAAWpjG,KAAKy+B,EAAK5L,UAAUqqE,YAAYn1F,IAE7C,OAAOq7F,GAIHE,EAAiB,SAAjBA,EAAkBljG,EAAQ4f,GAC9B,IAAIA,EAAI5f,EAAOI,MAGfwf,EAAI5f,EAAOI,KAAM,EACbi+B,EAAKu+D,aAAa8B,kBAAkB1+F,EAAOI,KAAK,CAClD,IAAMoxE,EAAWnzC,EAAKu+D,aAAa8B,kBAAkB1+F,EAAOI,IAC5D,GAAIoxE,EAAS/zE,OAAS,EACpB,IAAK,IAAIkK,EAAI,EAAGA,EAAI6pE,EAAS/zE,OAAQkK,IACnCu7F,EAAe7kE,EAAKoS,KAAK/I,MAAM8pC,EAAS7pE,IAAKiY,EAGnD,GAKIujF,EAAoB,SAACC,GAA8B,IAAnBC,EAAQtpG,UAAA0D,OAAA,QAAA1C,IAAAhB,UAAA,GAAAA,UAAA,GAAG,IAC3CupG,EAAW,IACXC,EAAW,IACX98F,EAAM,IACND,GAAO,IACX,IAAK,IAAMg9F,KAAcJ,EACvB,GAAIjoG,OAAOzB,UAAUH,eAAeK,KAAKwpG,EAAWI,GAAa,CAC/D,IAAMjwE,EAAO8K,EAAKoS,KAAK/I,MAAM87D,GACvBzjC,EAAQ1hC,EAAKu+D,aAAaa,OAAOlqE,EAAKnzB,IACtC+P,EAAWkuB,EAAK5L,UAAUgxE,YAAYlwE,GAM3CmwE,EAAA17E,GAHoCqW,EAAKslE,oBACxCpwE,EACA6vE,GACD,GAHMQ,EAAYF,EAAA,GAAEG,EAAYH,EAAA,GAIjCJ,EAAW7qG,KAAKgO,IAAIm9F,EAAcN,GAClCC,EAAW9qG,KAAKgO,IAAIo9F,EAAcN,GAG9BxjC,GAASsjC,IACX58F,EAAMhO,KAAKgO,IAAI0J,EAAU1J,GACzBD,EAAM/N,KAAK+N,IAAI2J,EAAU3J,GAE7B,CAGF,MAAO,CAACC,EAAKD,EAAK88F,EAAUC,IAiBxBO,EAAsB,SAACp2E,EAAU+vE,EAAQsG,GAG7C,IAFA,IAAMC,EAAO3lE,EAAKu+D,aAETj1F,EAAI,EAAGA,EAAI81F,EAAOhgG,OAAQkK,IAAK,CACtC,IAAMo4D,EAAQ09B,EAAO91F,GACfs8F,EAAaD,EAAKnF,qBAAqB9+B,GAC7C,GAAIkkC,EAAWxmG,OAAS,EACtB,IAAK,IAAIsL,EAAI,EAAGA,EAAIk7F,EAAWxmG,OAAS,EAAGsL,IAAK,CAC9C,IAAMi/D,EAAQi8B,EAAWl7F,GACnBk/D,EAAQg8B,EAAWl7F,EAAI,GAK3Bi7F,EAAKE,cAAcl8B,EAAOC,IAC1B+7B,EAAKG,iBAAiBn8B,EAAOC,IAE7Bv6C,EAASs6C,EAAOC,EAAO87B,EAE3B,CAEJ,GAIIK,EAAsB,SAACp8B,EAAOC,GAAgC,IAAzBo8B,EAAYtqG,UAAA0D,OAAA,QAAA1C,IAAAhB,UAAA,IAAAA,UAAA,GAE/CuqG,EAAOjmE,EAAK5L,UAAUgxE,YAAYz7B,GAClCu8B,EAAOlmE,EAAK5L,UAAUgxE,YAAYx7B,GAClCu8B,EAAU/rG,KAAKm2B,IAAI21E,EAAOD,GAC1BpE,EAAc7hE,EAAKz5B,QAAQg4F,aAAasD,YAE9C,GAAIsE,EAAUtE,EAAa,CACzB,IAAMuE,EAAe,CAAA,EACfC,EAAe,CAAA,EAErBxB,EAAel7B,EAAOy8B,GACtBvB,EAAej7B,EAAOy8B,GAGtB,IAAMrB,EArDgB,SAACr7B,EAAOC,GAChC,IAAM08B,EAAYtmE,EAAKu+D,aAAagI,YAAY58B,EAAM5nE,IAChDykG,EAAYxmE,EAAKu+D,aAAagI,YAAY38B,EAAM7nE,IACtD,OAAO3H,KAAKgO,IAAIk+F,EAAWE,GAkDRC,CAAkB98B,EAAOC,GACpC88B,EAAsB5B,EAAkBsB,EAAcpB,GACtD2B,EAAsB7B,EAAkBuB,EAAcrB,GACtD4B,EAAOF,EAAoB,GAC3BG,EAAOF,EAAoB,GAC3BG,EAAYH,EAAoB,GAKtC,GADmBvsG,KAAKm2B,IAAIq2E,EAAOC,GAClBhF,EAAa,CAC5B,IAAIj7E,EAASggF,EAAOC,EAAOhF,EACvBj7E,GAAUkgF,EAAYjF,IACxBj7E,GAAUkgF,EAAYjF,GAGpBj7E,EAAS,IAEXoZ,EAAK+mE,YAAYn9B,EAAM7nE,GAAI6kB,GAC3B29E,GAAgB,GAEK,IAAjByB,GAAuBhmE,EAAKgnE,cAAcp9B,GAElD,CACF,GAIIq9B,EAAqB,SAACh2D,EAAY/b,GAatC,IAVA,IAAM+qC,EAAS/qC,EAAKnzB,GACdmlG,EAAWhyE,EAAKwU,MAChBy9D,EAAYnnE,EAAKu+D,aAAaa,OAAOlqE,EAAKnzB,IAG1CqlG,EACJpnE,EAAKz5B,QAAQg4F,aAAaM,gBAC1B7+D,EAAKz5B,QAAQg4F,aAAaM,gBACtBwI,EAAiB,CAAA,EACjBC,EAAa,GACVh+F,EAAI,EAAGA,EAAI49F,EAAS9nG,OAAQkK,IAAK,CACxC,IAAMu+B,EAAOq/D,EAAS59F,GACtB,GAAIu+B,EAAK07B,MAAQ17B,EAAK27B,OAAQ,CAC5B,IAAM4d,EAAYv5C,EAAK07B,MAAQtD,EAASp4B,EAAKzsB,KAAOysB,EAAK/b,GACzDu7E,EAAeH,EAAS59F,GAAGvH,IAAMq/E,EAC7BphD,EAAKu+D,aAAaa,OAAOhe,EAAUr/E,IAAMolG,GAC3CG,EAAW/lG,KAAKsmC,EAEpB,CACF,CAGA,IAAM0/D,EAAQ,SAAC/tF,EAAOkwB,GAEpB,IADA,IAAI66B,EAAM,EACDj7D,EAAI,EAAGA,EAAIogC,EAAMtqC,OAAQkK,IAChC,QAAoC5M,IAAhC2qG,EAAe39D,EAAMpgC,GAAGvH,IAAmB,CAC7C,IAAM4B,EACJq8B,EAAK5L,UAAUgxE,YAAYiC,EAAe39D,EAAMpgC,GAAGvH,KAAOyX,EAC5D+qD,GAAO5gE,EAAIvJ,KAAK6T,KAAKtK,EAAIA,EAAIyjG,EAC/B,CAEF,OAAO7iC,GAIHijC,EAAS,SAAChuF,EAAOkwB,GAErB,IADA,IAAI66B,EAAM,EACDj7D,EAAI,EAAGA,EAAIogC,EAAMtqC,OAAQkK,IAChC,QAAoC5M,IAAhC2qG,EAAe39D,EAAMpgC,GAAGvH,IAAmB,CAC7C,IAAM4B,EACJq8B,EAAK5L,UAAUgxE,YAAYiC,EAAe39D,EAAMpgC,GAAGvH,KAAOyX,EAC5D+qD,GAAO6iC,EAAKhtG,KAAKkuE,IAAI3kE,EAAIA,EAAIyjG,GAAK,IACpC,CAEF,OAAO7iC,GAGHkjC,EAAW,SAACx2D,EAAYvH,GAI5B,IAHA,IAAIg+D,EAAQ1nE,EAAK5L,UAAUgxE,YAAYlwE,GAEjCyyE,EAAW,CAAA,EACRr+F,EAAI,EAAGA,EAAI2nC,EAAY3nC,IAAK,CACnC,IAAMuqE,EAAK0zB,EAAMG,EAAOh+D,GAClBk+D,EAAMJ,EAAOE,EAAOh+D,GAO1B,QAAwBhtC,IAApBirG,EAFJD,GADcttG,KAAK+N,KADL,GACiB/N,KAAKgO,IADtB,GACiChO,KAAKk2B,MAAMujD,EAAK+zB,MAI7D,MAEFD,EAASD,GAASp+F,CACpB,CACA,OAAOo+F,GAqELA,EAAQD,EAASx2D,EAAYq2D,IAlEd,SAACI,GAElB,IAAMnZ,EAAevuD,EAAK5L,UAAUgxE,YAAYlwE,GAGhD,QAA0Bx4B,IAAtB8nG,EAAStvE,EAAKnzB,IAAmB,CACnC,IAAM8lG,EAAc,CAAA,EACpBhD,EAAe3vE,EAAM2yE,GACrBrD,EAAStvE,EAAKnzB,IAAM8lG,CACtB,CACA,IAAMC,EAAiBhD,EAAkBN,EAAStvE,EAAKnzB,KACjDgmG,EAAiBD,EAAe,GAChCE,EAAiBF,EAAe,GAEhCjP,EAAO6O,EAAQnZ,EAGjB0Z,EAAe,EACfpP,EAAO,EACToP,EAAe7tG,KAAKgO,IAClBywF,EACAmP,EAAiBhoE,EAAKz5B,QAAQg4F,aAAasD,aAEpChJ,EAAO,IAChBoP,GAAgB7tG,KAAKgO,KAClBywF,EACDkP,EAAiB/nE,EAAKz5B,QAAQg4F,aAAasD,cAI3B,GAAhBoG,IAEFjoE,EAAK+mE,YAAY7xE,EAAKnzB,GAAIkmG,GAE1B1D,GAAgB,GAiCpB2D,CAAWR,GA7BM,SAACA,GAChB,IAAMnZ,EAAevuD,EAAK5L,UAAUgxE,YAAYlwE,GAGWizE,EAAAx+E,GAA9BqW,EAAKslE,oBAAoBpwE,GAAK,GAApD+vE,EAAQkD,EAAA,GAAEjD,EAAQiD,EAAA,GACnBtP,EAAO6O,EAAQnZ,EAEjB6Z,EAAc7Z,EACdsK,EAAO,EACTuP,EAAchuG,KAAKgO,IACjBmmF,GAAgB2W,EAAWllE,EAAKz5B,QAAQg4F,aAAasD,aACrD6F,GAEO7O,EAAO,IAChBuP,EAAchuG,KAAK+N,IACjBomF,GAAgB0W,EAAWjlE,EAAKz5B,QAAQg4F,aAAasD,aACrD6F,IAIAU,IAAgB7Z,IAElBvuD,EAAK5L,UAAU+hE,YAAYjhE,EAAMkzE,GAEjC7D,GAAgB,GAOpB8D,CADAX,EAAQD,EAASx2D,EAAYi2D,MA6DiB,IAA5CzsG,KAAK8L,QAAQg4F,aAAawD,gBAnCM,SAAC9wD,GACnC,IAAImuD,EAASp/D,EAAKu+D,aAAa+J,YAC/BlJ,EAASl9C,GAAAk9C,GAAM7jG,KAAN6jG,GACT,IAAK,IAAI91F,EAAI,EAAGA,EAAI2nC,IAClBszD,GAAgB,EAChBkB,EAAoBM,EAAqB3G,GAAQ,IAC3B,IAAlBmF,GAH0Bj7F,MAiChCi/F,CAA4B,GAtBL,WACvB,IAAK,IAAMtoC,KAAUjgC,EAAKoS,KAAK/I,MACzBvsC,OAAOzB,UAAUH,eAAeK,KAAKykC,EAAKoS,KAAK/I,MAAO42B,IACxDjgC,EAAKgnE,cAAchnE,EAAKoS,KAAK/I,MAAM42B,IAoBvCuoC,KAIiD,IAA/C/tG,KAAK8L,QAAQg4F,aAAayD,kBA7DK,SAAC/wD,GAClC,IAAImuD,EAASp/D,EAAKu+D,aAAa+J,YAC/BlJ,EAASl9C,GAAAk9C,GAAM7jG,KAAN6jG,GACT,IAAK,IAAI91F,EAAI,EAAGA,EAAI2nC,EAAY3nC,IAAK,CACnCi7F,GAAgB,EAChB,IAAK,IAAI75F,EAAI,EAAGA,EAAI00F,EAAOhgG,OAAQsL,IAGjC,IAFA,IAAMg3D,EAAQ09B,EAAO10F,GACfk7F,EAAa5lE,EAAKu+D,aAAaiC,qBAAqB9+B,GACjDhiD,EAAI,EAAGA,EAAIkmF,EAAWxmG,OAAQsgB,IACrCunF,EAAmB,IAAMrB,EAAWlmF,IAGxC,IAAsB,IAAlB6kF,EAEF,KAEJ,EA8CAkE,CAA2B,KAG0B,IAAnDhuG,KAAK8L,QAAQg4F,aAAa0D,sBAvBG,WAC/B,IAAI7C,EAASp/D,EAAKu+D,aAAa+J,YAC/BlJ,EAASl9C,GAAAk9C,GAAM7jG,KAAN6jG,GACT,IAAK,IAAI91F,EAAI,EAAGA,EAAI81F,EAAOhgG,OAAQkK,IAGjC,IAFA,IAAMo4D,EAAQ09B,EAAO91F,GACfs8F,EAAa5lE,EAAKu+D,aAAaiC,qBAAqB9+B,GACjDh3D,EAAI,EAAGA,EAAIk7F,EAAWxmG,OAAQsL,IACrCs1B,EAAKgnE,cAAcpB,EAAWl7F,IAiBlCg+F,GArXiB,WAGjB,IAFA,IAAMC,EAAYjE,IACdkE,EAAU,EACLt/F,EAAI,EAAGA,EAAIq/F,EAAUvpG,OAAS,EAAGkK,IAAK,CAE7Cs/F,GADaD,EAAUr/F,GAAGnB,IAAMwgG,EAAUr/F,EAAI,GAAGlB,IAC/B43B,EAAKz5B,QAAQg4F,aAAauD,YAC5C2C,EAAUn7F,EAAI,EAAGs/F,EACnB,EAiXFC,EACF,GAEA,CAAA3nG,IAAA,sBAAAnD,MASA,SAAoBm3B,EAAM3T,GACxB,IAAIunF,GAAS,OACDpsG,IAAR6kB,IACFunF,GAAS,GAEX,IAAMpnC,EAAQjnE,KAAK8jG,aAAaa,OAAOlqE,EAAKnzB,IAC5C,QAAcrF,IAAVglE,EAAqB,CACvB,IAAMp5D,EAAQ7N,KAAK8jG,aAAakC,kBAAkBvrE,EAAKnzB,IACjD+P,EAAWrX,KAAK25B,UAAUgxE,YAAYlwE,GACtC6zE,EAAWtuG,KAAK8jG,aAAaiC,qBAAqB9+B,GACpDujC,EAAW,IACXC,EAAW,IACf,GAAc,IAAV58F,EAAa,CACf,IAAM0gG,EAAWD,EAASzgG,EAAQ,GAClC,IACc,IAAXwgG,QAAwCpsG,IAArB6kB,EAAIynF,EAASjnG,MACtB,IAAX+mG,EAGA7D,EAAWnzF,EADKrX,KAAK25B,UAAUgxE,YAAY4D,EAG/C,CAEA,GAAI1gG,GAASygG,EAAS3pG,OAAS,EAAG,CAChC,IAAM6pG,EAAWF,EAASzgG,EAAQ,GAClC,IACc,IAAXwgG,QAAwCpsG,IAArB6kB,EAAI0nF,EAASlnG,MACtB,IAAX+mG,EACA,CACA,IAAMI,EAAUzuG,KAAK25B,UAAUgxE,YAAY6D,GAC3C/D,EAAW9qG,KAAKgO,IAAI88F,EAAUgE,EAAUp3F,EAC1C,CACF,CAEA,MAAO,CAACmzF,EAAUC,EACpB,CACE,MAAO,CAAC,EAAG,EAEf,GAEA,CAAAhkG,IAAA,gBAAAnD,MAMA,SAAcm3B,GACZ,GAAIz6B,KAAK8jG,aAAa+B,gBAAgBprE,EAAKnzB,IAEzC,IADA,IAAMonG,EAAU1uG,KAAK8jG,aAAa+B,gBAAgBprE,EAAKnzB,IAC9CuH,EAAI,EAAGA,EAAI6/F,EAAQ/pG,OAAQkK,IAAK,CACvC,IAAM8/F,EAAWD,EAAQ7/F,GACnB6rB,EAAa16B,KAAK23C,KAAK/I,MAAM+/D,GAC7Bj2B,EAAW14E,KAAK8jG,aAAa8B,kBAAkB+I,GAErD,QAAiB1sG,IAAby2E,EAAwB,CAE1B,IAAMi1B,EAAc3tG,KAAK4uG,mBAAmBl2B,GAEtCrhE,EAAWrX,KAAK25B,UAAUgxE,YAAYjwE,GACqBm0E,EAAA3/E,GAApClvB,KAAK6qG,oBAAoBnwE,GAAW,GAA1D8vE,EAAQqE,EAAA,GAAEpE,EAAQoE,EAAA,GACnBzQ,EAAO/mF,EAAWs2F,GAErBvP,EAAO,GACNz+F,KAAKm2B,IAAIsoE,GACPqM,EAAWzqG,KAAK8L,QAAQg4F,aAAasD,aACxChJ,EAAO,GACNz+F,KAAKm2B,IAAIsoE,GAAQoM,EAAWxqG,KAAK8L,QAAQg4F,aAAasD,cAExDpnG,KAAK25B,UAAU+hE,YAAYhhE,EAAYizE,EAE3C,CACF,CAEJ,GAEA,CAAAlnG,IAAA,yBAAAnD,MAMA,SAAuBmmG,GAGrB,IAAK,IAAMxiC,KAFXjnE,KAAK8uG,gBAAkB,GAEHrF,EAClB,GAAIpnG,OAAOzB,UAAUH,eAAeK,KAAK2oG,EAAcxiC,GAAQ,CAAA,IAAAn4C,EAEzD40E,EAAYn3D,GAAYk9D,EAAaxiC,IACzCy8B,EAAY1jG,KAAK+uG,mBAAmBrL,GACpCS,GAAAr1E,EAAA9uB,KAAK25B,WAAS74B,KAAAguB,EAAM40E,GAGpB,IAFA,IAAIsL,EAAmB,EAEdngG,EAAI,EAAGA,EAAI60F,EAAU/+F,OAAQkK,IAAK,CACzC,IAAM4rB,EAAOipE,EAAU70F,GACvB,QAAsC5M,IAAlCjC,KAAK8uG,gBAAgBr0E,EAAKnzB,IAAmB,CAC/C,IAAMorD,EAAU1yD,KAAK8L,QAAQg4F,aAAasD,YACtClwF,EAAMw7C,EAAUs8C,EAGhBA,EAAmB,IACrB93F,EAAMlX,KAAK25B,UAAUgxE,YAAYjH,EAAU70F,EAAI,IAAM6jD,GAEvD1yD,KAAK25B,UAAU+hE,YAAYjhE,EAAMvjB,EAAK+vD,GACtCjnE,KAAKivG,6BAA6Bx0E,EAAMwsC,EAAO/vD,GAE/C83F,GACF,CACF,CACF,CAEJ,GAEA,CAAAvoG,IAAA,oBAAAnD,MAQA,SAAkBqrG,EAAUO,GAAa,IAAArjE,EACjCsjE,EAAWnvG,KAAK8jG,aAAa8B,kBAAkB+I,GAGrD,QAAiB1sG,IAAbktG,EAAJ,CAMA,IADA,IAAM5mB,EAAa,GACV15E,EAAI,EAAGA,EAAIsgG,EAASxqG,OAAQkK,IACnC05E,EAAWzhF,KAAK9G,KAAK23C,KAAK/I,MAAMugE,EAAStgG,KAI3Cs1F,GAAAt4D,EAAA7rC,KAAK25B,WAAS74B,KAAA+qC,EAAM08C,GAGpB,IAAK,IAAI15E,EAAI,EAAGA,EAAI05E,EAAW5jF,OAAQkK,IAAK,CAC1C,IAAM41E,EAAY8D,EAAW15E,GACvBugG,EAAiBpvG,KAAK8jG,aAAaa,OAAOlgB,EAAUn9E,IAE1D,KACE8nG,EAAiBF,QACsBjtG,IAAvCjC,KAAK8uG,gBAAgBrqB,EAAUn9E,KAgB/B,OAbA,IAAMorD,EAAU1yD,KAAK8L,QAAQg4F,aAAasD,YACtClwF,OAAG,EAKLA,EADQ,IAANrI,EACI7O,KAAK25B,UAAUgxE,YAAY3qG,KAAK23C,KAAK/I,MAAM+/D,IAE3C3uG,KAAK25B,UAAUgxE,YAAYpiB,EAAW15E,EAAI,IAAM6jD,EAExD1yD,KAAK25B,UAAU+hE,YAAYjX,EAAWvtE,EAAKk4F,GAC3CpvG,KAAKivG,6BAA6BxqB,EAAW2qB,EAAgBl4F,EAIjE,CAGA,IAAM+jB,EAASj7B,KAAK4uG,mBAAmBrmB,GACvCvoF,KAAK25B,UAAU+hE,YAAY17F,KAAK23C,KAAK/I,MAAM+/D,GAAW1zE,EAAQi0E,EAxC9D,CAyCF,GAEA,CAAAzoG,IAAA,+BAAAnD,MASA,SAA6Bm3B,EAAMwsC,EAAO/vD,GAGxC,GAAKlX,KAAK8jG,aAAamC,OAAvB,CAGA,QAAoChkG,IAAhCjC,KAAKopG,gBAAgBniC,GAAsB,CAC7C,IAAMooC,EAAcrvG,KAAK25B,UAAUgxE,YACjC3qG,KAAK23C,KAAK/I,MAAM5uC,KAAKopG,gBAAgBniC,KAEvC,GAAI/vD,EAAMm4F,EAAcrvG,KAAK8L,QAAQg4F,aAAasD,YAAa,CAC7D,IAAMhJ,EAAOiR,EAAcrvG,KAAK8L,QAAQg4F,aAAasD,YAAclwF,EAC7Do4F,EAAetvG,KAAKuvG,kBACxBvvG,KAAKopG,gBAAgBniC,GACrBxsC,EAAKnzB,IAEPtH,KAAKssG,YAAYgD,EAAaE,UAAWpR,EAC3C,CACF,CAEAp+F,KAAKopG,gBAAgBniC,GAASxsC,EAAKnzB,GACnCtH,KAAK8uG,gBAAgBr0E,EAAKnzB,KAAM,EAChCtH,KAAKyvG,kBAAkBh1E,EAAKnzB,GAAI2/D,EAnBD,CAoBjC,GAEA,CAAAxgE,IAAA,qBAAAnD,MAOA,SAAmBosG,GAEjB,IADA,IAAMjrF,EAAQ,GACL5V,EAAI,EAAGA,EAAI6gG,EAAQ/qG,OAAQkK,IAClC4V,EAAM3d,KAAK9G,KAAK23C,KAAK/I,MAAM8gE,EAAQ7gG,KAErC,OAAO4V,CACT,GAEA,CAAAhe,IAAA,mBAAAnD,MAMA,WACE,IACIkiE,EAAQ/qC,EADNgvE,EAAe,CAAA,EAMrB,IAAKjkC,KAAUxlE,KAAK23C,KAAK/I,MACvB,GAAIvsC,OAAOzB,UAAUH,eAAeK,KAAKd,KAAK23C,KAAK/I,MAAO42B,GAAS,CACjE/qC,EAAOz6B,KAAK23C,KAAK/I,MAAM42B,GACvB,IAAMyB,OACiChlE,IAArCjC,KAAK8jG,aAAaa,OAAOn/B,GACrB,EACAxlE,KAAK8jG,aAAaa,OAAOn/B,GAC/BxlE,KAAK25B,UAAUg2E,IAAIl1E,EAAMwsC,QACGhlE,IAAxBwnG,EAAaxiC,KACfwiC,EAAaxiC,GAAS,IAExBwiC,EAAaxiC,GAAOzB,GAAU/qC,CAChC,CAEF,OAAOgvE,CACT,GAEA,CAAAhjG,IAAA,kBAAAnD,MAOA,SAAgBm3B,GAAM,IAAAwuC,EAAAjpE,KACd2I,EAAS,GAQf,OANAgH,GAAQ8qB,EAAKwU,OAAO,SAAC7B,GAAS,IAAAyF,GACoB,IAA5C9D,GAAA8D,EAAAo2B,EAAKtxB,KAAK4jC,aAAWz6E,KAAA+xC,EAASzF,EAAK9lC,KACrCqB,EAAO7B,KAAKsmC,EAEhB,IAEOzkC,CACT,GAEA,CAAAlC,IAAA,eAAAnD,MAMA,WAAe,IAAA8zE,EAAAp3E,KACP4vG,EAAW,CAAA,EAGjBjgG,GAFgB3P,KAAK23C,KAAK4wB,aAET,SAAC/C,GAChB,IAAM/qC,EAAO28C,EAAKz/B,KAAK/I,MAAM42B,GACvBqqC,EAAUz4B,EAAK04B,gBAAgBr1E,GAAM91B,OAC3CirG,EAASC,IAAW,CACtB,IAGA,IAAMlnG,EAAS,GASf,OARAgH,GAAQigG,GAAU,SAACt4F,GACjB3O,EAAO7B,KAAK8mB,OAAOtW,GACrB,IAEA6sF,GAAAx7F,GAAM7H,KAAN6H,GAAY,SAAUO,EAAGyC,GACvB,OAAOA,EAAIzC,CACb,IAEOP,CACT,GAEA,CAAAlC,IAAA,4BAAAnD,MAKA,WAOE,IAP0B,IAAAysG,EAAA/vG,KACpBgwG,EAAkB,SAAC1J,EAAOC,GAC9BwJ,EAAKjM,aAAakM,gBAAgB1J,EAAOC,IAGrCqJ,EAAW5vG,KAAKiwG,eAAet3C,EAAAA,WAGnC,IAAMk3C,EAAUD,EAAS/gG,GACzB,GAAgB,IAAZghG,EAAa,OAAA,EAEjBlgG,GAAQogG,EAAKp4D,KAAK4wB,aAAa,SAAC/C,GAC9B,IAAM/qC,EAAOs1E,EAAKp4D,KAAK/I,MAAM42B,GAEzBqqC,IAAYE,EAAKD,gBAAgBr1E,GAAM91B,QACzCorG,EAAKG,cAAcF,EAAiBxqC,EAExC,KAVO32D,EAAI,EAAGA,EAAI+gG,EAASjrG,SAAWg0D,MAAD9pD,GAYzC,GAEA,CAAApI,IAAA,iCAAAnD,MAMA,WAAiC,IAAA6sG,EAAAnwG,KAyB/BA,KAAKkwG,eAhBoB,SAAC5J,EAAOC,EAAOn5D,GACtC,IAAIgjE,EAASD,EAAKrM,aAAaa,OAAO2B,EAAMh/F,SAE7BrF,IAAXmuG,IACFA,EAASD,EAAKrM,aAAaa,OAAO2B,EAAMh/F,IAZ3B,KAef,IAAM82F,GACJzc,GAAYkC,aAAayiB,EAAO,QAChC3kB,GAAYkC,aAAa0iB,EAAO,aAChC5kB,GAAYkC,aAAaz2C,EAAM,SAGjC+iE,EAAKrM,aAAaa,OAAO4B,EAAMj/F,IAAM8oG,EAAShS,KAIhDp+F,KAAK8jG,aAAauM,kBAAkBrwG,KAAK23C,KAAK/I,MAChD,GAEA,CAAAnoC,IAAA,2BAAAnD,MAKA,WAA2B,IAAA2vC,EAAAq9D,EAAAtwG,KACnB4uC,EAAQugB,GAAAlc,EAAAjzC,KAAK23C,KAAK4wB,aAAWznE,KAAAmyC,GAAQ,SAAC+xD,EAAK19F,GAE/C,OADA09F,EAAI1uF,IAAIhP,EAAIgpG,EAAK34D,KAAK/I,MAAMtnC,IACrB09F,CACT,GAAG,IAAA1oD,IAE4C,UAA3Ct8C,KAAK8L,QAAQg4F,aAAayM,aAC5BvwG,KAAK8jG,aAAaa,ODp+ClB,SAAqC/1D,GACzC,OAAOg2D,IAEL,SAACnqE,GAAI,IAAAwY,EAAAG,EAAA,OACHo9D,GAAAv9D,EAAAwc,GAAArc,EAAA3Y,EAAKwU,OACHnuC,KAAAsyC,GACQ,SAAChG,GAAI,OAAcwB,EAAMr4B,IAAI62B,EAAK07B,KAAK,KAC/ChoE,KAAAmyC,GACO,SAAC7F,GAAI,OAAcA,EAAKzsB,OAAS8Z,IAAK,IAEjD,SAAC+qE,EAAUE,GAAQ,OAAcA,EAAWF,CAAQ,GAEpD,KACA52D,EAEJ,CCq9CiC6hE,CAA2B7hE,GAEtD5uC,KAAK8jG,aAAaa,OD7/ClB,SAAsC/1D,GAC1C,OAAOg2D,IAEL,SAACnqE,GAAI,IAAAoR,EAAAgH,EAAA,OACH29D,GAAA3kE,EAAA4jB,GAAA5c,EAAApY,EAAKwU,OACHnuC,KAAA+xC,GACQ,SAACzF,GAAI,OAAcwB,EAAMr4B,IAAI62B,EAAK07B,KAAK,KAC/ChoE,KAAA+qC,GACO,SAACuB,GAAI,OAAcA,EAAK/b,KAAOoJ,IAAK,IAE/C,SAAC+qE,EAAUE,GAAQ,OAAcA,EAAWF,CAAQ,GAEpD,OACA52D,EAEJ,CC8+CiC8hE,CAA4B9hE,GAGzD5uC,KAAK8jG,aAAauM,kBAAkBrwG,KAAK23C,KAAK/I,MAChD,GAEA,CAAAnoC,IAAA,eAAAnD,MAKA,WAAe,IAAAqtG,EAAA3wG,KAUbA,KAAKkwG,eATmB,SAACx1E,EAAY+pD,GAEjCksB,EAAK7M,aAAaa,OAAOlgB,EAAUn9E,IACnCqpG,EAAK7M,aAAaa,OAAOjqE,EAAWpzB,KAEpCqpG,EAAK7M,aAAa8M,YAAYl2E,EAAWpzB,GAAIm9E,EAAUn9E,OAK3DtH,KAAK8jG,aAAa+M,aACpB,GAEA,CAAApqG,IAAA,gBAAAnD,MAOA,WAAyD,IAAAwtG,EAAA9wG,KAA3C40B,EAAQ3zB,UAAA0D,OAAA1D,QAAAgB,IAAAhB,UAAAgB,GAAAhB,UAAG,GAAA,WAAY,EAAI8vG,EAAc9vG,UAAA0D,OAAA1D,EAAAA,kBAAAgB,EAC/CwyF,EAAW,CAAA,EAEXuc,EAAU,SAAVA,EAAWv2E,EAAMw2E,GACrB,QAA0BhvG,IAAtBwyF,EAASh6D,EAAKnzB,IAAmB,CAInC,IAAIm9E,EAHJqsB,EAAKhN,aAAaoN,aAAaz2E,EAAMw2E,GAErCxc,EAASh6D,EAAKnzB,KAAM,EAGpB,IADA,IAAM2nC,EAAQ6hE,EAAKhB,gBAAgBr1E,GAC1B5rB,EAAI,EAAGA,EAAIogC,EAAMtqC,OAAQkK,IAAK,CACrC,IAAMu+B,EAAO6B,EAAMpgC,IACI,IAAnBu+B,EAAK0mC,YAGL2Q,EAFEr3C,EAAK07B,MAAQruC,EAAKnzB,GAER8lC,EAAKzsB,KAELysB,EAAK/b,GAGfoJ,EAAKnzB,IAAMm9E,EAAUn9E,KAEvBstB,EAAS6F,EAAMgqD,EAAWr3C,GAC1B4jE,EAAQvsB,EAAWwsB,IAGzB,CACF,GAGF,QAAuBhvG,IAAnB8uG,EAIF,IAFA,IAAI7K,EAAY,EAEPr3F,EAAI,EAAGA,EAAI7O,KAAK23C,KAAK4wB,YAAY5jE,OAAQkK,IAAK,CACrD,IAAM22D,EAASxlE,KAAK23C,KAAK4wB,YAAY15D,GAErC,QAAyB5M,IAArBwyF,EAASjvB,GAEXwrC,EADahxG,KAAK23C,KAAK/I,MAAM42B,GACf0gC,GACdA,GAAa,CAEjB,KACK,CAEL,IAAMzrE,EAAOz6B,KAAK23C,KAAK/I,MAAMmiE,GAC7B,QAAa9uG,IAATw4B,EAEF,YADA4O,QAAQjpC,MAAM,kBAAmB2wG,GAGnCC,EAAQv2E,EACV,CACF,GAEA,CAAAh0B,IAAA,cAAAnD,MAOA,SAAYqrG,EAAUvQ,GAAM,IAAA+S,EAAAnxG,KACpBy0F,EAAW,CAAA,GACD,SAAV2c,EAAWzC,GACf,IAAIla,EAASka,GAAb,CAGAla,EAASka,IAAY,EACrBwC,EAAKx3E,UAAU8U,MAAMkgE,EAAUvQ,GAE/B,IAAM+Q,EAAWgC,EAAKrN,aAAa8B,kBAAkB+I,GACrD,QAAiB1sG,IAAbktG,EACF,IAAK,IAAItgG,EAAI,EAAGA,EAAIsgG,EAASxqG,OAAQkK,IACnCuiG,EAAQjC,EAAStgG,GAPrB,EAWFuiG,CAAQzC,EACV,GAEA,CAAAloG,IAAA,oBAAAnD,MAQA,SAAkB+tG,EAAQC,GAAQ,IAAAC,EAAAvxG,KAC1B0uG,EAAU,CAAA,EA6BhB,OA5BuB,SAAjB8C,EAAkB9C,EAAS/kE,GAC/B,IAAM8nE,EAAYF,EAAKzN,aAAa+B,gBAAgBl8D,GACpD,QAAkB1nC,IAAdwvG,EACF,IAAK,IAAI5iG,EAAI,EAAGA,EAAI4iG,EAAU9sG,OAAQkK,IAAK,CACzC,IAAMqC,EAASugG,EAAU5iG,GACzB6/F,EAAQx9F,IAAU,EAClBsgG,EAAe9C,EAASx9F,EAC1B,EAoBJsgG,CAAe9C,EAAS2C,GAjBL,SAAbK,EAAchD,EAAS/kE,GAC3B,IAAM8nE,EAAYF,EAAKzN,aAAa+B,gBAAgBl8D,GACpD,QAAkB1nC,IAAdwvG,EACF,IAAK,IAAI5iG,EAAI,EAAGA,EAAI4iG,EAAU9sG,OAAQkK,IAAK,CACzC,IAAMqC,EAASugG,EAAU5iG,GACzB,QAAwB5M,IAApBysG,EAAQx9F,GACV,MAAO,CAAEygG,YAAazgG,EAAQs+F,UAAW7lE,GAE3C,IAAMmxC,EAAS42B,EAAWhD,EAASx9F,GACnC,GAA2B,OAAvB4pE,EAAO62B,YACT,OAAO72B,CAEX,CAEF,MAAO,CAAE62B,YAAa,KAAMnC,UAAW7lE,GAIlC+nE,CAAWhD,EAAS4C,EAC7B,GAEA,CAAA7qG,IAAA,uBAAAnD,MAWA,WACE,IAAMsuG,EACoC,OAAxC5xG,KAAK8L,QAAQg4F,aAAanqE,WACc,OAAxC35B,KAAK8L,QAAQg4F,aAAanqE,UAG1B35B,KAAK25B,UADHi4E,EACe,IAAIjO,GAAiB3jG,MAErB,IAAIqkG,GAAmBrkG,KAE5C,GAEA,CAAAyG,IAAA,qBAAAnD,MASA,SAAmBilF,GAIjB,IAHA,IAAIspB,EAAS,IACTC,GAAU,IAELjjG,EAAI,EAAGA,EAAI05E,EAAW5jF,OAAQkK,IAAK,CAC1C,IAAI41E,OAAS,EACb,QAAyBxiF,IAArBsmF,EAAW15E,GAAGvH,GAChBm9E,EAAY8D,EAAW15E,OAClB,CACL,IAAMk1E,EAAcwE,EAAW15E,GAC/B41E,EAAYzkF,KAAK23C,KAAK/I,MAAMm1C,EAC9B,CAEA,IAAM1sE,EAAWrX,KAAK25B,UAAUgxE,YAAYlmB,GAC5CotB,EAASlyG,KAAKgO,IAAIkkG,EAAQx6F,GAC1By6F,EAASnyG,KAAK+N,IAAIokG,EAAQz6F,EAC5B,CAEA,MAAO,IAAOw6F,EAASC,EACzB,KAACjL,CAAA,CA37Ce,y/BChUlB,IAKMkL,GAAkB,WAOtB,SAAAA,EAAYp6D,EAAMnC,EAAQqjD,EAAkBmZ,GAAoB,IAAAljF,EAAA+c,EAAAjM,EAAA5/B,KAAA4jB,QAAAmuF,GAC9D/xG,KAAK23C,KAAOA,EACZ33C,KAAKw1C,OAASA,EACdx1C,KAAK64F,iBAAmBA,EACxB74F,KAAKgyG,mBAAqBA,EAE1BhyG,KAAKiyG,UAAW,EAChBjyG,KAAKkyG,qBAAkBjwG,EACvBjC,KAAKmyG,iBAAclwG,EACnBjC,KAAKoyG,cAAWnwG,EAEhBjC,KAAKqyG,8BAAgC,GACrCryG,KAAKsyG,qBAAuB,GAC5BtyG,KAAKuyG,wBAA0B,GAE/BvyG,KAAK2yF,UAAY,EACjB3yF,KAAKwyG,aAAe,CAAE5jE,MAAO,GAAIK,MAAO,IACxCjvC,KAAKyyG,YAAa,EAClBzyG,KAAK0yG,QAAS,EACd1yG,KAAK2yG,yBAAsB1wG,EAE3BjC,KAAK8L,QAAU,GACf9L,KAAK+7C,eAAiB,CACpB5M,SAAS,EACTyjE,iBAAiB,EACjBlkE,SAAS,EACTM,SAAS,EACToG,cAAUnzC,EACVizC,UAAU,EACV29D,YAAY,EACZC,YAAY,EACZC,iBAAkB,CAChBngE,MAAO,MACPt7B,KAAM,EACNq2B,MAAO,CACL2G,WAAY,UACZC,OAAQ,UACRC,UAAW,CAAEF,WAAY,UAAWC,OAAQ,YAE9CynB,YAAa,EACboH,oBAAqB,IAGzBnnB,GAAcj8C,KAAK8L,QAAS9L,KAAK+7C,gBAEjC/7C,KAAK23C,KAAKwvB,QAAQ9xD,GAAG,WAAW,WAC9BuqB,EAAKozE,QACP,IACAhzG,KAAK23C,KAAKwvB,QAAQ9xD,GAAG,eAAgB4nC,GAAAnuB,EAAI9uB,KAACizG,UAAQnyG,KAAAguB,EAAM9uB,OACxDA,KAAK23C,KAAKwvB,QAAQ9xD,GAAG,aAAc4nC,GAAApR,EAAI7rC,KAACizG,UAAQnyG,KAAA+qC,EAAM7rC,MACxD,CAs0CC,OAp0CD+tB,GAAAgkF,EAAA,CAAA,CAAAtrG,IAAA,WAAAnD,MAKA,YACsB,IAAhBtD,KAAK0yG,UAC8B,IAAjC1yG,KAAK8L,QAAQ8mG,gBACf5yG,KAAKkzG,iBAELlzG,KAAKmzG,kBAGX,GAEA,CAAA1sG,IAAA,aAAAnD,MAOA,SAAWwI,EAAS+7F,EAAY/jC,QACX7hE,IAAf4lG,SACwB5lG,IAAtB4lG,EAAWuL,OACbpzG,KAAK8L,QAAQsnG,OAASvL,EAAWuL,OAEjCpzG,KAAK8L,QAAQsnG,OAAStvC,EAAcsvC,YAEXnxG,IAAvB4lG,EAAWwL,QACbrzG,KAAK8L,QAAQunG,QAAUxL,EAAWwL,QAElCrzG,KAAK8L,QAAQunG,QAAUvvC,EAAcuvC,cAIzBpxG,IAAZ6J,IACqB,kBAAZA,EACT9L,KAAK8L,QAAQqjC,QAAUrjC,GAEvB9L,KAAK8L,QAAQqjC,SAAU,EACvBooB,GAAWv3D,KAAK8L,QAASA,KAEU,IAAjC9L,KAAK8L,QAAQ8mG,kBACf5yG,KAAKiyG,UAAW,GAElBjyG,KAAKszG,SAET,GAEA,CAAA7sG,IAAA,iBAAAnD,MAKA,YACwB,IAAlBtD,KAAKiyG,SACPjyG,KAAKmzG,kBAELnzG,KAAKkzG,gBAET,GAEA,CAAAzsG,IAAA,iBAAAnD,MAGA,WACEtD,KAAKiyG,UAAW,EAEhBjyG,KAAKgzG,UACmB,IAApBhzG,KAAKyyG,aACPzyG,KAAKkyG,gBAAgB/3F,MAAMC,QAAU,QACrCpa,KAAKoyG,SAASj4F,MAAMC,QAAU,QAC9Bpa,KAAKmyG,YAAYh4F,MAAMC,QAAU,OACjCpa,KAAKuzG,yBAET,GAEA,CAAA9sG,IAAA,kBAAAnD,MAGA,WACEtD,KAAKiyG,UAAW,EAEhBjyG,KAAKgzG,UACmB,IAApBhzG,KAAKyyG,aACPzyG,KAAKkyG,gBAAgB/3F,MAAMC,QAAU,OACrCpa,KAAKoyG,SAASj4F,MAAMC,QAAU,OAC9Bpa,KAAKmyG,YAAYh4F,MAAMC,QAAU,QACjCpa,KAAKwzG,oBAET,GAEA,CAAA/sG,IAAA,yBAAAnD,MAKA,WAQE,GANAtD,KAAKgzG,SAGLhzG,KAAKyzG,gBAAkB,IAGC,IAApBzzG,KAAKyyG,WAAqB,CAAA,IAAA5/D,EAAAI,EAE5BjzC,KAAKiyG,UAAW,EAChBjyG,KAAKkyG,gBAAgB/3F,MAAMC,QAAU,QACrCpa,KAAKoyG,SAASj4F,MAAMC,QAAU,QAE9B,IAAMs5F,EAAoB1zG,KAAK64F,iBAAiB8a,uBAC1CC,EAAoB5zG,KAAK64F,iBAAiBgb,uBAC1CC,EAAqBJ,EAAoBE,EACzCR,EAASpzG,KAAK8L,QAAQunG,QAAQrzG,KAAK8L,QAAQsnG,QAC7CW,GAAgB,GAES,IAAzB/zG,KAAK8L,QAAQ4iC,UACf1uC,KAAKg0G,qBAAqBZ,GAC1BW,GAAgB,IAEW,IAAzB/zG,KAAK8L,QAAQkjC,WACO,IAAlB+kE,EACF/zG,KAAKi0G,iBAAiB,GAEtBF,GAAgB,EAElB/zG,KAAKk0G,qBAAqBd,IAIJ,IAAtBM,GACiC,mBAA1B1zG,KAAK8L,QAAQspC,WAEE,IAAlB2+D,EACF/zG,KAAKi0G,iBAAiB,GAEtBF,GAAgB,EAElB/zG,KAAKm0G,sBAAsBf,IAEL,IAAtBQ,GACsB,IAAtBF,IAC0B,IAA1B1zG,KAAK8L,QAAQopC,YAES,IAAlB6+D,EACF/zG,KAAKi0G,iBAAiB,GAEtBF,GAAgB,EAElB/zG,KAAKo0G,sBAAsBhB,IAIF,IAAvBU,IACEJ,EAAoB,IAAiC,IAA5B1zG,KAAK8L,QAAQ+mG,YAMlB,IAAtBa,IAC4B,IAA5B1zG,KAAK8L,QAAQgnG,eANS,IAAlBiB,GACF/zG,KAAKi0G,iBAAiB,GAExBj0G,KAAKq0G,oBAAoBjB,IAa7BpzG,KAAKs0G,mBAAmBt0G,KAAKoyG,SAAUn1D,GAAApK,OAAK0hE,gBAAczzG,KAAA+xC,EAAM7yC,OAGhEA,KAAKw0G,oBACH,SACAv3D,GAAAhK,EAAAjzC,KAAKuzG,wBAAsBzyG,KAAAmyC,EAAMjzC,MAErC,CAGAA,KAAK23C,KAAKwvB,QAAQlxD,KAAK,UACzB,GAEA,CAAAxP,IAAA,cAAAnD,MAGA,WAAc,IAAA8zF,EAUZ,IARsB,IAAlBp3F,KAAKiyG,UACPjyG,KAAKkzG,iBAIPlzG,KAAKgzG,SAELhzG,KAAK0yG,OAAS,WACU,IAApB1yG,KAAKyyG,WAAqB,CAAA,IAAAr/D,EACtBggE,EAASpzG,KAAK8L,QAAQunG,QAAQrzG,KAAK8L,QAAQsnG,QACjDpzG,KAAKyzG,gBAAkB,GACvBzzG,KAAKy0G,kBAAkBrB,GACvBpzG,KAAKi0G,mBACLj0G,KAAK00G,mBACHtB,EAAuB,gBAAKpzG,KAAK8L,QAAQunG,QAAY,GAAkB,gBAIzErzG,KAAKs0G,mBAAmBt0G,KAAKoyG,SAAUn1D,GAAA7J,OAAKmhE,gBAAczzG,KAAAsyC,EAAMpzC,MAClE,CAEAA,KAAKw0G,oBAAoB,QAASv3D,GAAAm6C,EAAAp3F,KAAK20G,iBAAe7zG,KAAAs2F,EAAMp3F,MAC9D,GAEA,CAAAyG,IAAA,WAAAnD,MAGA,WAAW,IAAA0hC,EAAAhlC,MAEa,IAAlBA,KAAKiyG,UACPjyG,KAAKkzG,iBAIPlzG,KAAKgzG,SACL,IAAMv4E,EAAOz6B,KAAK64F,iBAAiB+B,mBAAmB,GACtD,QAAa34F,IAATw4B,EAAoB,CAEtB,GADAz6B,KAAK0yG,OAAS,WACuB,mBAA1B1yG,KAAK8L,QAAQspC,SA8BtB,MAAM,IAAIlM,MACR,mEA9BF,IAAuB,IAAnBzO,EAAK+8C,UAAoB,CAC3B,IAAMztE,EAAOwtD,GAAW,CAAA,EAAI98B,EAAK3uB,SAAS,GAI1C,GAHA/B,EAAKuD,EAAImtB,EAAKntB,EACdvD,EAAKuH,EAAImpB,EAAKnpB,EAEuB,IAAjCtR,KAAK8L,QAAQspC,SAASzwC,OAaxB,MAAM,IAAIukC,MACR,yEAbFlpC,KAAK8L,QAAQspC,SAASrrC,GAAM,SAAC6qG,GAEzBA,SAEgB,aAAhB5vE,EAAK0tE,QAGL1tE,EAAK2S,KAAK5tC,KAAK6kC,MAAM65B,aAAazvC,OAAO47E,GAE3C5vE,EAAKuuE,wBACP,GAMJ,MACEsB,MACE70G,KAAK8L,QAAQunG,QAAQrzG,KAAK8L,QAAQsnG,QAA0B,kBAC1DpzG,KAAK8L,QAAQunG,QAAY,GAAoB,iBAQvD,MACErzG,KAAKuzG,wBAET,GAEA,CAAA9sG,IAAA,cAAAnD,MAGA,WAAc,IAAAg0F,EAAAC,EAAAC,EAAAC,EAAAC,EAUZ,IARsB,IAAlB13F,KAAKiyG,UACPjyG,KAAKkzG,iBAIPlzG,KAAKgzG,SAELhzG,KAAK0yG,OAAS,WACU,IAApB1yG,KAAKyyG,WAAqB,CAAA,IAAApb,EACtB+b,EAASpzG,KAAK8L,QAAQunG,QAAQrzG,KAAK8L,QAAQsnG,QACjDpzG,KAAKyzG,gBAAkB,GACvBzzG,KAAKy0G,kBAAkBrB,GACvBpzG,KAAKi0G,mBACLj0G,KAAK00G,mBACHtB,EAAwB,iBACtBpzG,KAAK8L,QAAQunG,QAAY,GAAmB,iBAIhDrzG,KAAKs0G,mBAAmBt0G,KAAKoyG,SAAUn1D,GAAAo6C,OAAKkd,gBAAczzG,KAAAu2F,EAAMr3F,MAClE,CAGAA,KAAK80G,iBAAiB,UAAW73D,GAAAq6C,EAAAt3F,KAAK+0G,gBAAcj0G,KAAAw2F,EAAMt3F,OAC1DA,KAAK80G,iBAAiB,YAAa73D,GAAAs6C,EAAAv3F,KAAKg1G,gBAAcl0G,KAAAy2F,EAAMv3F,OAC5DA,KAAK80G,iBAAiB,SAAU73D,GAAAu6C,EAAAx3F,KAAKi1G,kBAAgBn0G,KAAA02F,EAAMx3F,OAC3DA,KAAK80G,iBAAiB,YAAa73D,GAAAw6C,EAAAz3F,KAAKg1G,gBAAcl0G,KAAA22F,EAAMz3F,OAC5DA,KAAK80G,iBAAiB,cAAe73D,GAAAy6C,EAAA13F,KAAKk1G,gBAAcp0G,KAAA42F,EAAM13F,OAC9DA,KAAK80G,iBAAiB,UAAU,WAAQ,GAC1C,GAEA,CAAAruG,IAAA,eAAAnD,MAGA,WAUE,IARsB,IAAlBtD,KAAKiyG,UACPjyG,KAAKkzG,iBAIPlzG,KAAKgzG,SAELhzG,KAAK0yG,OAAS,WAEqB,WAAjCtlF,GAAOptB,KAAK8L,QAAQopC,WAC6B,mBAA1Cl1C,KAAK8L,QAAQopC,SAASigE,kBAE7Bn1G,KAAKo1G,kBAAoBp1G,KAAK64F,iBAAiBsK,qBAAqB,QACrClhG,IAA3BjC,KAAKo1G,mBALX,CAWA,IAAwB,IAApBp1G,KAAKyyG,WAAqB,CAAA,IAAA9a,EACtByb,EAASpzG,KAAK8L,QAAQunG,QAAQrzG,KAAK8L,QAAQsnG,QACjDpzG,KAAKyzG,gBAAkB,GACvBzzG,KAAKy0G,kBAAkBrB,GACvBpzG,KAAKi0G,mBACLj0G,KAAK00G,mBACHtB,EAA4B,qBAC1BpzG,KAAK8L,QAAQunG,QAAY,GAAuB,qBAIpDrzG,KAAKs0G,mBAAmBt0G,KAAKoyG,SAAUn1D,GAAA06C,OAAK4c,gBAAczzG,KAAA62F,EAAM33F,MAClE,CAGA,GADAA,KAAKo1G,kBAAoBp1G,KAAK64F,iBAAiBsK,qBAAqB,QACrClhG,IAA3BjC,KAAKo1G,kBAAiC,CAAA,IAAAxd,EAAAC,EAAAC,EAAAC,EAClC3qD,EAAOptC,KAAK23C,KAAK1I,MAAMjvC,KAAKo1G,mBAG5BC,EAAkBr1G,KAAKs1G,kBAAkBloE,EAAKzsB,KAAKrT,EAAG8/B,EAAKzsB,KAAKrP,GAChEikG,EAAgBv1G,KAAKs1G,kBAAkBloE,EAAK/b,GAAG/jB,EAAG8/B,EAAK/b,GAAG/f,GAEhEtR,KAAKwyG,aAAa5jE,MAAM9nC,KAAKuuG,EAAgB/tG,IAC7CtH,KAAKwyG,aAAa5jE,MAAM9nC,KAAKyuG,EAAcjuG,IAE3CtH,KAAK23C,KAAK/I,MAAMymE,EAAgB/tG,IAAM+tG,EACtCr1G,KAAK23C,KAAK4wB,YAAYzhE,KAAKuuG,EAAgB/tG,IAC3CtH,KAAK23C,KAAK/I,MAAM2mE,EAAcjuG,IAAMiuG,EACpCv1G,KAAK23C,KAAK4wB,YAAYzhE,KAAKyuG,EAAcjuG,IAGzCtH,KAAK80G,iBAAiB,UAAW73D,GAAA26C,EAAI53F,KAACw1G,mBAAiB10G,KAAA82F,EAAM53F,OAC7DA,KAAK80G,iBAAiB,SAAS,WAAQ,IACvC90G,KAAK80G,iBAAiB,UAAU,WAAQ,IACxC90G,KAAK80G,iBACH,cACA73D,GAAA46C,EAAI73F,KAACy1G,uBAAqB30G,KAAA+2F,EAAM73F,OAElCA,KAAK80G,iBAAiB,SAAU73D,GAAA66C,EAAI93F,KAAC01G,kBAAgB50G,KAAAg3F,EAAM93F,OAC3DA,KAAK80G,iBAAiB,YAAa73D,GAAA86C,EAAI/3F,KAAC21G,qBAAmB70G,KAAAi3F,EAAM/3F,OACjEA,KAAK80G,iBAAiB,eAAe,WAAQ,IAI7C90G,KAAKw0G,oBAAoB,iBAAiB,SAACnjG,GACzC,IAAMivE,EAAYlzC,EAAKymC,SAAS+hC,oBAAoBvkG,IACnB,IAA7BgkG,EAAgBzhD,WAClByhD,EAAgB/nG,EAAIgzE,EAAU3/D,KAAKrT,EACnC+nG,EAAgB/jG,EAAIgvE,EAAU3/D,KAAKrP,IAEN,IAA3BikG,EAAc3hD,WAChB2hD,EAAcjoG,EAAIgzE,EAAUjvD,GAAG/jB,EAC/BioG,EAAcjkG,EAAIgvE,EAAUjvD,GAAG/f,EAEnC,IAEAtR,KAAK23C,KAAKwvB,QAAQlxD,KAAK,UACzB,MACEjW,KAAKuzG,wBA3DP,KAVA,CAMI,IAAMnmE,EAAOptC,KAAK23C,KAAK1I,MAAMjvC,KAAKo1G,mBAClCp1G,KAAK61G,iBAAiBzoE,EAAKzsB,KAAKrZ,GAAI8lC,EAAK/b,GAAG/pB,GAGhD,CA6DF,GAEA,CAAAb,IAAA,iBAAAnD,MAGA,WAAiB,IAAAiiC,EAAAvlC,MAEO,IAAlBA,KAAKiyG,UACPjyG,KAAKkzG,iBAIPlzG,KAAKgzG,SAELhzG,KAAK0yG,OAAS,SACd,IAAMoD,EAAgB91G,KAAK64F,iBAAiBqK,qBACtC6S,EAAgB/1G,KAAK64F,iBAAiBsK,qBACxC6S,OAAiB/zG,EACrB,GAAI6zG,EAAcnxG,OAAS,EAAG,CAC5B,IAAK,IAAIkK,EAAI,EAAGA,EAAIinG,EAAcnxG,OAAQkK,IACxC,IAAoD,IAAhD7O,KAAK23C,KAAK/I,MAAMknE,EAAcjnG,IAAI2oE,UAKpC,YAJAq9B,MACE70G,KAAK8L,QAAQunG,QAAQrzG,KAAK8L,QAAQsnG,QAA4B,oBAC5DpzG,KAAK8L,QAAQunG,QAAY,GAAsB,oBAMhB,mBAA5BrzG,KAAK8L,QAAQ+mG,aACtBmD,EAAiBh2G,KAAK8L,QAAQ+mG,WAElC,MAAWkD,EAAcpxG,OAAS,GACO,mBAA5B3E,KAAK8L,QAAQgnG,aACtBkD,EAAiBh2G,KAAK8L,QAAQgnG,YAIlC,GAA8B,mBAAnBkD,EAA+B,CACxC,IAAMjsG,EAAO,CAAE6kC,MAAOknE,EAAe7mE,MAAO8mE,GAC5C,GAA8B,IAA1BC,EAAerxG,OAkBjB,MAAM,IAAIukC,MACR,2EAlBF8sE,EAAejsG,GAAM,SAAC6qG,GAElBA,SAEgB,WAAhBrvE,EAAKmtE,QAGLntE,EAAKoS,KAAK5tC,KAAKklC,MAAMw5B,aAAaxgC,OAAO2sE,EAAc3lE,OACvD1J,EAAKoS,KAAK5tC,KAAK6kC,MAAM65B,aAAaxgC,OAAO2sE,EAAchmE,OACvDrJ,EAAKoS,KAAKwvB,QAAQlxD,KAAK,mBACvBsvB,EAAKguE,2BAELhuE,EAAKoS,KAAKwvB,QAAQlxD,KAAK,mBACvBsvB,EAAKguE,yBAET,GAMJ,MACEvzG,KAAK23C,KAAK5tC,KAAKklC,MAAMw5B,aAAaxgC,OAAO8tE,GACzC/1G,KAAK23C,KAAK5tC,KAAK6kC,MAAM65B,aAAaxgC,OAAO6tE,GACzC91G,KAAK23C,KAAKwvB,QAAQlxD,KAAK,mBACvBjW,KAAKuzG,wBAET,GAIA,CAAA9sG,IAAA,SAAAnD,MAKA,YAC+B,IAAzBtD,KAAK8L,QAAQqjC,SAEfnvC,KAAKyyG,YAAa,EAElBzyG,KAAKi2G,mBACiB,IAAlBj2G,KAAKiyG,SACPjyG,KAAKwzG,oBAELxzG,KAAKuzG,2BAGPvzG,KAAKk2G,yBAGLl2G,KAAKyyG,YAAa,EAEtB,GAEA,CAAAhsG,IAAA,kBAAAnD,MAKA,WA0BmC,IAAA6yG,EAAAC,QAxBJn0G,IAAzBjC,KAAKkyG,kBACPlyG,KAAKkyG,gBAAkBrwG,SAASkH,cAAc,OAC9C/I,KAAKkyG,gBAAgB7iB,UAAY,oBACX,IAAlBrvF,KAAKiyG,SACPjyG,KAAKkyG,gBAAgB/3F,MAAMC,QAAU,QAErCpa,KAAKkyG,gBAAgB/3F,MAAMC,QAAU,OAEvCpa,KAAKw1C,OAAOq2C,MAAMxxE,YAAYra,KAAKkyG,uBAIZjwG,IAArBjC,KAAKmyG,cACPnyG,KAAKmyG,YAActwG,SAASkH,cAAc,OAC1C/I,KAAKmyG,YAAY9iB,UAAY,iBACP,IAAlBrvF,KAAKiyG,SACPjyG,KAAKmyG,YAAYh4F,MAAMC,QAAU,OAEjCpa,KAAKmyG,YAAYh4F,MAAMC,QAAU,QAEnCpa,KAAKw1C,OAAOq2C,MAAMxxE,YAAYra,KAAKmyG,mBAIflwG,IAAlBjC,KAAKoyG,YACPpyG,KAAKoyG,SAAWvwG,SAASkH,cAAc,UACvC/I,KAAKoyG,SAAS/iB,UAAY,YAC1BrvF,KAAKoyG,SAASiE,aACZ,aACoDF,QADxCA,UAAAC,EACZp2G,KAAK8L,QAAQunG,QAAQrzG,KAAK8L,QAAQsnG,eAAO,IAAAgD,OAAA,EAAzCA,EAAmD,iBAACD,EAAAA,EAClDn2G,KAAK8L,QAAQunG,QAAY,GAAS,OAEtCrzG,KAAKoyG,SAASj4F,MAAMC,QAAUpa,KAAKkyG,gBAAgB/3F,MAAMC,QACzDpa,KAAKw1C,OAAOq2C,MAAMxxE,YAAYra,KAAKoyG,UAEvC,GAEA,CAAA3rG,IAAA,oBAAAnD,MAQA,SAAkBgK,EAAGgE,GACnB,IAAMyhG,EAAmBx7C,GAAW,CAAA,EAAIv3D,KAAK8L,QAAQinG,kBAErDA,EAAiBzrG,GAAK,aAAe+mD,KACrC0kD,EAAiBnuC,QAAS,EAC1BmuC,EAAiBluC,SAAU,EAC3BkuC,EAAiBzlG,EAAIA,EACrBylG,EAAiBzhG,EAAIA,EAGrB,IAAMmpB,EAAOz6B,KAAK23C,KAAKkvB,UAAUC,WAAWisC,GAG5C,OAFAt4E,EAAKmY,MAAMkpB,YAAc,CAAEplB,KAAMppC,EAAGo9C,MAAOp9C,EAAGqpC,IAAKrlC,EAAGo/C,OAAQp/C,GAEvDmpB,CACT,GAEA,CAAAh0B,IAAA,oBAAAnD,MAGA,WAAoB,IAAA00F,EAElBh4F,KAAKgzG,SAGLhzG,KAAKyzG,gBAAkB,GAGvB6C,GAAmBt2G,KAAKmyG,aAGxB,IAAMiB,EAASpzG,KAAK8L,QAAQunG,QAAQrzG,KAAK8L,QAAQsnG,QAC3ChzE,EAASpgC,KAAKu2G,cAClB,WACA,yBACAnD,EAAa,MAAKpzG,KAAK8L,QAAQunG,QAAY,GAAQ,MAErDrzG,KAAKmyG,YAAY93F,YAAY+lB,GAG7BpgC,KAAKs0G,mBAAmBl0E,EAAQ6c,GAAA+6C,EAAAh4F,KAAKu0G,gBAAczzG,KAAAk3F,EAAMh4F,MAC3D,GAEA,CAAAyG,IAAA,SAAAnD,MAKA,WAEEtD,KAAK0yG,QAAS,GAGU,IAApB1yG,KAAKyyG,aACP6D,GAAmBt2G,KAAKmyG,aACxBmE,GAAmBt2G,KAAKkyG,iBAGxBlyG,KAAKw2G,6BAIPx2G,KAAKy2G,iCAGLz2G,KAAK02G,sBAGL12G,KAAK22G,yBAGL32G,KAAK23C,KAAKwvB,QAAQlxD,KAAK,iBACzB,GAEA,CAAAxP,IAAA,4BAAAnD,MAKA,WAA4B,IAAA20F,EAEyClsD,EADnEC,EAAAC,GACuBuF,GAAAymD,EAAAj4F,KAAKqyG,+BAA6BvxG,KAAAm3F,EAAQ,IAAE,IAAnE,IAAAjsD,EAAAn3B,MAAAk3B,EAAAC,EAAAz+B,KAAAiR,MAAqE,EACnEoW,EADiBmX,EAAAzoC,QAEnB,CAAC,CAAA,MAAA8oC,GAAAJ,EAAAxc,EAAA4c,EAAA,CAAA,QAAAJ,EAAAlpC,GAAA,CACH,GAEA,CAAA2D,IAAA,yBAAAnD,MAKA,WAEEtD,KAAKgzG,SAGLsD,GAAmBt2G,KAAKkyG,iBACxBoE,GAAmBt2G,KAAKmyG,aACxBmE,GAAmBt2G,KAAKoyG,UAGpBpyG,KAAKkyG,iBACPlyG,KAAKw1C,OAAOq2C,MAAM/zC,YAAY93C,KAAKkyG,iBAEjClyG,KAAKmyG,aACPnyG,KAAKw1C,OAAOq2C,MAAM/zC,YAAY93C,KAAKmyG,aAEjCnyG,KAAKoyG,UACPpyG,KAAKw1C,OAAOq2C,MAAM/zC,YAAY93C,KAAKoyG,UAIrCpyG,KAAKkyG,qBAAkBjwG,EACvBjC,KAAKmyG,iBAAclwG,EACnBjC,KAAKoyG,cAAWnwG,CAClB,GAEA,CAAAwE,IAAA,mBAAAnD,MAMA,WAA4B,IAAXuK,EAAK5M,UAAA0D,OAAA,QAAA1C,IAAAhB,UAAA,GAAAA,UAAA,GAAG,EACvBjB,KAAKyzG,gBAAgB,mBAAqB5lG,GACxChM,SAASkH,cAAc,OACzB/I,KAAKyzG,gBAAgB,mBAAqB5lG,GAAOwhF,UAC/C,qBACFrvF,KAAKkyG,gBAAgB73F,YACnBra,KAAKyzG,gBAAgB,mBAAqB5lG,GAE9C,GAIA,CAAApH,IAAA,uBAAAnD,MAKA,SAAqB8vG,GAAQ,IAAAlb,EACrB93D,EAASpgC,KAAKu2G,cAClB,UACA,UACAnD,EAAgB,SAAKpzG,KAAK8L,QAAQunG,QAAY,GAAW,SAE3DrzG,KAAKkyG,gBAAgB73F,YAAY+lB,GACjCpgC,KAAKs0G,mBAAmBl0E,EAAQ6c,GAAAi7C,EAAAl4F,KAAK42G,aAAW91G,KAAAo3F,EAAMl4F,MACxD,GAEA,CAAAyG,IAAA,uBAAAnD,MAKA,SAAqB8vG,GAAQ,IAAAjb,EACrB/3D,EAASpgC,KAAKu2G,cAClB,UACA,cACAnD,EAAgB,SAAKpzG,KAAK8L,QAAQunG,QAAY,GAAW,SAE3DrzG,KAAKkyG,gBAAgB73F,YAAY+lB,GACjCpgC,KAAKs0G,mBAAmBl0E,EAAQ6c,GAAAk7C,EAAAn4F,KAAK62G,aAAW/1G,KAAAq3F,EAAMn4F,MACxD,GAEA,CAAAyG,IAAA,wBAAAnD,MAKA,SAAsB8vG,GAAQ,IAAAhb,EACtBh4D,EAASpgC,KAAKu2G,cAClB,WACA,WACAnD,EAAiB,UAAKpzG,KAAK8L,QAAQunG,QAAY,GAAY,UAE7DrzG,KAAKkyG,gBAAgB73F,YAAY+lB,GACjCpgC,KAAKs0G,mBAAmBl0E,EAAQ6c,GAAAm7C,EAAAp4F,KAAKo1C,UAAQt0C,KAAAs3F,EAAMp4F,MACrD,GAEA,CAAAyG,IAAA,wBAAAnD,MAKA,SAAsB8vG,GAAQ,IAAA/a,EACtBj4D,EAASpgC,KAAKu2G,cAClB,WACA,WACAnD,EAAiB,UAAKpzG,KAAK8L,QAAQunG,QAAY,GAAY,UAE7DrzG,KAAKkyG,gBAAgB73F,YAAY+lB,GACjCpgC,KAAKs0G,mBAAmBl0E,EAAQ6c,GAAAo7C,EAAAr4F,KAAK82G,cAAYh2G,KAAAu3F,EAAMr4F,MACzD,GAEA,CAAAyG,IAAA,sBAAAnD,MAKA,SAAoB8vG,GAAQ,IAAA9a,EACtBye,EAEFA,EADE/2G,KAAK8L,QAAQkrG,IACE,iBAEA,aAEnB,IAAM52E,EAASpgC,KAAKu2G,cAClB,SACAQ,EACA3D,EAAY,KAAKpzG,KAAK8L,QAAQunG,QAAY,GAAO,KAEnDrzG,KAAKkyG,gBAAgB73F,YAAY+lB,GACjCpgC,KAAKs0G,mBAAmBl0E,EAAQ6c,GAAAq7C,EAAAt4F,KAAKi3G,gBAAcn2G,KAAAw3F,EAAMt4F,MAC3D,GAEA,CAAAyG,IAAA,oBAAAnD,MAKA,SAAkB8vG,GAAQ,IAAA7a,EAClBn4D,EAASpgC,KAAKu2G,cAClB,OACA,WACAnD,EAAa,MAAKpzG,KAAK8L,QAAQunG,QAAY,GAAQ,MAErDrzG,KAAKkyG,gBAAgB73F,YAAY+lB,GACjCpgC,KAAKs0G,mBAAmBl0E,EAAQ6c,GAAAs7C,EAAAv4F,KAAKuzG,wBAAsBzyG,KAAAy3F,EAAMv4F,MACnE,GAEA,CAAAyG,IAAA,gBAAAnD,MASA,SAAcgE,EAAI+nF,EAAW38C,GAAqC,IAA9BwkE,EAAcj2G,UAAA0D,OAAA,QAAA1C,IAAAhB,UAAA,GAAAA,UAAA,GAAG,YASnD,OARAjB,KAAKyzG,gBAAgBnsG,EAAK,OAASzF,SAASkH,cAAc,UAC1D/I,KAAKyzG,gBAAgBnsG,EAAK,OAAO+nF,UAAY,cAAgBA,EAC7DrvF,KAAKyzG,gBAAgBnsG,EAAK,SAAWzF,SAASkH,cAAc,OAC5D/I,KAAKyzG,gBAAgBnsG,EAAK,SAAS+nF,UAAY6nB,EAC/Cl3G,KAAKyzG,gBAAgBnsG,EAAK,SAASsoF,UAAYl9C,EAC/C1yC,KAAKyzG,gBAAgBnsG,EAAK,OAAO+S,YAC/Bra,KAAKyzG,gBAAgBnsG,EAAK,UAErBtH,KAAKyzG,gBAAgBnsG,EAAK,MACnC,GAEA,CAAAb,IAAA,qBAAAnD,MAKA,SAAmBovC,GACjB1yC,KAAKyzG,gBAAkC,iBAAI5xG,SAASkH,cAAc,OAClE/I,KAAKyzG,gBAAkC,iBAAEpkB,UAAY,WACrDrvF,KAAKyzG,gBAAkC,iBAAE7jB,UAAYl9C,EACrD1yC,KAAKkyG,gBAAgB73F,YAAYra,KAAKyzG,gBAAkC,iBAC1E,GAIA,CAAAhtG,IAAA,sBAAAnD,MAOA,SAAoBiS,EAAO4hG,GACzBn3G,KAAKuyG,wBAAwBzrG,KAAK,CAChCyO,MAAOA,EACP7E,cAAeymG,IAEjBn3G,KAAK23C,KAAKwvB,QAAQ9xD,GAAGE,EAAO4hG,EAC9B,GAEA,CAAA1wG,IAAA,mBAAAnD,MAOA,SAAiB8zG,EAAgBD,GAC/B,QAAiDl1G,IAA7CjC,KAAK23C,KAAKq4C,eAAeonB,GAK3B,MAAM,IAAIluE,MACR,qDACEkuE,EACA,kBACA/gC,GAAe9pC,GAAYvsC,KAAK23C,KAAKq4C,kBARzChwF,KAAKsyG,qBAAqB8E,GACxBp3G,KAAK23C,KAAKq4C,eAAeonB,GAC3Bp3G,KAAK23C,KAAKq4C,eAAeonB,GAAkBD,CAS/C,GAEA,CAAA1wG,IAAA,sBAAAnD,MAKA,WACE,IAAK,IAAMkV,KAAgBxY,KAAKsyG,qBAE5BjwG,OAAOzB,UAAUH,eAAeK,KAC9Bd,KAAKsyG,qBACL95F,KAGFxY,KAAK23C,KAAKq4C,eAAex3E,GACvBxY,KAAKsyG,qBAAqB95F,UACrBxY,KAAKsyG,qBAAqB95F,IAGrCxY,KAAKsyG,qBAAuB,EAC9B,GAEA,CAAA7rG,IAAA,yBAAAnD,MAKA,WACE,IAAK,IAAIuL,EAAI,EAAGA,EAAI7O,KAAKuyG,wBAAwB5tG,OAAQkK,IAAK,CAC5D,IAAMwoG,EAAYr3G,KAAKuyG,wBAAwB1jG,GAAG0G,MAC5C7E,EAAgB1Q,KAAKuyG,wBAAwB1jG,GAAG6B,cACtD1Q,KAAK23C,KAAKwvB,QAAQzxD,IAAI2hG,EAAW3mG,EACnC,CACA1Q,KAAKuyG,wBAA0B,EACjC,GAEA,CAAA9rG,IAAA,qBAAAnD,MAMA,SAAmBg0G,EAAY5mG,GAE7B,IAAM+8E,EAAS,IAAIxjD,GAAOqtE,EAAY,CAAE,GACxC9pB,GAAQC,EAAQ/8E,GAChB1Q,KAAKqyG,8BAA8BvrG,MAAK,WACtC2mF,EAAO7uD,SACT,IAGA,IAAM24E,EAAgB,SAAHC,GAAyB,IAAnBpiB,EAAOoiB,EAAPpiB,QAAS3uF,EAAG+wG,EAAH/wG,IACpB,UAARA,GAA2B,MAARA,GAA2B,KAAZ2uF,GAA8B,KAAZA,GACtD1kF,KAGJ4mG,EAAWhiG,iBAAiB,QAASiiG,GAAe,GACpDv3G,KAAKqyG,8BAA8BvrG,MAAK,WACtCwwG,EAAWzhG,oBAAoB,QAAS0hG,GAAe,EACzD,GACF,GAEA,CAAA9wG,IAAA,iCAAAnD,MAKA,WAEE,IAAK,IAAIuL,EAAI,EAAGA,EAAI7O,KAAKwyG,aAAavjE,MAAMtqC,OAAQkK,IAAK,CAAA,IAAA2pF,EACvDx4F,KAAK23C,KAAK1I,MAAMjvC,KAAKwyG,aAAavjE,MAAMpgC,IAAIomE,oBACrCj1E,KAAK23C,KAAK1I,MAAMjvC,KAAKwyG,aAAavjE,MAAMpgC,IAC/C,IAG0B4pF,EAHpBgf,EAAgB1oE,GAAAypD,EAAIx4F,KAAC23C,KAAK4jC,aAAWz6E,KAAA03F,EACzCx4F,KAAKwyG,aAAavjE,MAAMpgC,IAE1B,IAAuB,IAAnB4oG,EACFjmE,GAAAinD,EAAIz4F,KAAC23C,KAAK4jC,aAAWz6E,KAAA23F,EAAQgf,EAAe,EAEhD,CAGA,IAAK,IAAI5oG,EAAI,EAAGA,EAAI7O,KAAKwyG,aAAa5jE,MAAMjqC,OAAQkK,IAAK,CAAA,IAAA6oG,SAChD13G,KAAK23C,KAAK/I,MAAM5uC,KAAKwyG,aAAa5jE,MAAM//B,IAC/C,IAG0B8oG,EAHpBC,EAAgB7oE,GAAA2oE,EAAI13G,KAAC23C,KAAK4wB,aAAWznE,KAAA42G,EACzC13G,KAAKwyG,aAAa5jE,MAAM//B,IAE1B,IAAuB,IAAnB+oG,EACFpmE,GAAAmmE,EAAI33G,KAAC23C,KAAK4wB,aAAWznE,KAAA62G,EAAQC,EAAe,EAEhD,CAEA53G,KAAKwyG,aAAe,CAAE5jE,MAAO,GAAIK,MAAO,GAC1C,GAIA,CAAAxoC,IAAA,oBAAAnD,MAMA,SAAkBiS,GAChBvV,KAAK64F,iBAAiBgI,cACtB7gG,KAAKmiC,UAAYniC,KAAK23C,KAAKkvB,UAAUqyB,WAAW3jF,EAAM0lB,QACtDj7B,KAAKmiC,UAAUgqD,YAAclwC,GAAc,CAAA,EAAIj8C,KAAK23C,KAAKqhB,KAAKmzB,YAChE,GAEA,CAAA1lF,IAAA,wBAAAnD,MAKA,WACE,IAAM6zF,EAAUn3F,KAAKmiC,UACf25D,EAAa97F,KAAK64F,iBAAiB6D,yBAAyBvF,GAC5Dx2E,EAAO3gB,KAAK23C,KAAK/I,MAAM5uC,KAAKwyG,aAAa5jE,MAAM,IAC/Cvd,EAAKrxB,KAAK23C,KAAK/I,MAAM5uC,KAAKwyG,aAAa5jE,MAAM,IAC7CxB,EAAOptC,KAAK23C,KAAK1I,MAAMjvC,KAAKo1G,mBAClCp1G,KAAK2yG,yBAAsB1wG,EAE3B,IAAM41G,EAAal3F,EAAKg1D,kBAAkBmmB,GACpCgc,EAAWzmF,EAAGskD,kBAAkBmmB,IAEnB,IAAf+b,GACF73G,KAAK2yG,oBAAsBhyF,EAC3BysB,EAAKymC,SAASlzD,KAAOA,IACC,IAAbm3F,IACT93G,KAAK2yG,oBAAsBthF,EAC3B+b,EAAKymC,SAASxiD,GAAKA,QAIYpvB,IAA7BjC,KAAK2yG,qBACP3yG,KAAK64F,iBAAiBuC,aAAap7F,KAAK2yG,qBAG1C3yG,KAAK23C,KAAKwvB,QAAQlxD,KAAK,UACzB,GAEA,CAAAxP,IAAA,mBAAAnD,MAMA,SAAiBiS,GACfvV,KAAK23C,KAAKwvB,QAAQlxD,KAAK,kBACvB,IAAMkhF,EAAUn3F,KAAK23C,KAAKkvB,UAAUqyB,WAAW3jF,EAAM0lB,QAC/C/jB,EAAMlX,KAAKw1C,OAAOm3C,YAAYwK,QACHl1F,IAA7BjC,KAAK2yG,qBACP3yG,KAAK2yG,oBAAoBrlG,EAAI4J,EAAI5J,EACjCtN,KAAK2yG,oBAAoBrhG,EAAI4F,EAAI5F,GAEjCtR,KAAKgyG,mBAAmB3hB,OAAO96E,GAEjCvV,KAAK23C,KAAKwvB,QAAQlxD,KAAK,UACzB,GAEA,CAAAxP,IAAA,sBAAAnD,MAMA,SAAoBiS,GAClB,IAAM4hF,EAAUn3F,KAAK23C,KAAKkvB,UAAUqyB,WAAW3jF,EAAM0lB,QAC/C6gE,EAAa97F,KAAK64F,iBAAiB6D,yBAAyBvF,GAC5D/pD,EAAOptC,KAAK23C,KAAK1I,MAAMjvC,KAAKo1G,mBAElC,QAAiCnzG,IAA7BjC,KAAK2yG,oBAAT,CAKA3yG,KAAK64F,iBAAiBgI,cAItB,IAHA,IAAMkX,EACJ/3G,KAAK64F,iBAAiBiJ,4BAA4BhG,GAChDrhE,OAAOx4B,EACF4M,EAAIkpG,EAAmBpzG,OAAS,EAAGkK,GAAK,EAAGA,IAClD,GAAIkpG,EAAmBlpG,KAAO7O,KAAK2yG,oBAAoBrrG,GAAI,CACzDmzB,EAAOz6B,KAAK23C,KAAK/I,MAAMmpE,EAAmBlpG,IAC1C,KACF,CAGF,QAAa5M,IAATw4B,QAAmDx4B,IAA7BjC,KAAK2yG,oBAC7B,IAAuB,IAAnBl4E,EAAK+8C,UACPq9B,MACE70G,KAAK8L,QAAQunG,QAAQrzG,KAAK8L,QAAQsnG,QAAyB,iBACzDpzG,KAAK8L,QAAQunG,QAAY,GAAmB,qBAE3C,CACL,IAAM1yF,EAAO3gB,KAAK23C,KAAK/I,MAAM5uC,KAAKwyG,aAAa5jE,MAAM,IACjD5uC,KAAK2yG,oBAAoBrrG,KAAOqZ,EAAKrZ,GACvCtH,KAAK61G,iBAAiBp7E,EAAKnzB,GAAI8lC,EAAK/b,GAAG/pB,IAEvCtH,KAAK61G,iBAAiBzoE,EAAKzsB,KAAKrZ,GAAImzB,EAAKnzB,GAE7C,MAEA8lC,EAAK4mC,iBACLh0E,KAAK23C,KAAKwvB,QAAQlxD,KAAK,kBAGzBjW,KAAK23C,KAAKwvB,QAAQlxD,KAAK,UAjCvB,CAkCF,GAKA,CAAAxP,IAAA,iBAAAnD,MAOA,SAAeiS,GAEb,IAAI,IAAIgb,MAAO/nB,UAAYxI,KAAK2yF,UAAY,IAAK,CAC/C3yF,KAAKmiC,UAAYniC,KAAK23C,KAAKkvB,UAAUqyB,WAAW3jF,EAAM0lB,QACtDj7B,KAAKmiC,UAAUgqD,YAAclwC,GAC3B,CAAA,EACAj8C,KAAK23C,KAAKqhB,KAAKmzB,aAGjBnsF,KAAKgyG,mBAAmBliB,KAAKqH,QAAUn3F,KAAKmiC,UAC5CniC,KAAKgyG,mBAAmBliB,KAAK3D,YAAcnsF,KAAKmiC,UAAUgqD,YAE1D,IAAMgL,EAAUn3F,KAAKmiC,UACf1H,EAAOz6B,KAAK64F,iBAAiB4B,UAAUtD,GAE7C,QAAal1F,IAATw4B,EACF,IAAuB,IAAnBA,EAAK+8C,UACPq9B,MACE70G,KAAK8L,QAAQunG,QAAQrzG,KAAK8L,QAAQsnG,QAAyB,iBACzDpzG,KAAK8L,QAAQunG,QAAY,GAAmB,qBAE3C,CAEL,IAAM2E,EAAah4G,KAAKs1G,kBAAkB76E,EAAKntB,EAAGmtB,EAAKnpB,GACvDtR,KAAK23C,KAAK/I,MAAMopE,EAAW1wG,IAAM0wG,EACjCh4G,KAAK23C,KAAK4wB,YAAYzhE,KAAKkxG,EAAW1wG,IAGtC,IAAM2wG,EAAiBj4G,KAAK23C,KAAKkvB,UAAU33B,WAAW,CACpD5nC,GAAI,iBAAmB+mD,KACvB1tC,KAAM8Z,EAAKnzB,GACX+pB,GAAI2mF,EAAW1wG,GACfu9D,SAAS,EACTiL,OAAQ,CACN3gC,SAAS,EACT72B,KAAM,aACNm6D,UAAW,MAGfzyE,KAAK23C,KAAK1I,MAAMgpE,EAAe3wG,IAAM2wG,EACrCj4G,KAAK23C,KAAK4jC,YAAYz0E,KAAKmxG,EAAe3wG,IAE1CtH,KAAKwyG,aAAa5jE,MAAM9nC,KAAKkxG,EAAW1wG,IACxCtH,KAAKwyG,aAAavjE,MAAMnoC,KAAKmxG,EAAe3wG,GAC9C,CAEFtH,KAAK2yF,WAAY,IAAIpiE,MAAO/nB,SAC9B,CACF,GAEA,CAAA/B,IAAA,mBAAAnD,MAKA,SAAiBiS,GACf,IAAM4hF,EAAUn3F,KAAK23C,KAAKkvB,UAAUqyB,WAAW3jF,EAAM0lB,QAE/C6gE,EAAa97F,KAAK64F,iBAAiB6D,yBAAyBvF,GAE9D+gB,OAAgBj2G,OACeA,IAA/BjC,KAAKwyG,aAAavjE,MAAM,KAC1BipE,EAAgBl4G,KAAK23C,KAAK1I,MAAMjvC,KAAKwyG,aAAavjE,MAAM,IAAI85B,QAO9D,IAHA,IAAMgvC,EACJ/3G,KAAK64F,iBAAiBiJ,4BAA4BhG,GAChDrhE,OAAOx4B,EACF4M,EAAIkpG,EAAmBpzG,OAAS,EAAGkK,GAAK,EAAGA,IAAK,CAAA,IAAAspG,EAEvD,IAAgE,IAA5DppE,GAAAopE,EAAAn4G,KAAKwyG,aAAa5jE,OAAK9tC,KAAAq3G,EAASJ,EAAmBlpG,IAAY,CACjE4rB,EAAOz6B,KAAK23C,KAAK/I,MAAMmpE,EAAmBlpG,IAC1C,KACF,CACF,CASA,GAPA0G,EAAM8rF,YAAc,CAAE1gF,KAAMu3F,EAAe7mF,GAAIoJ,EAAOA,EAAKnzB,QAAKrF,GAChEjC,KAAK64F,iBAAiBoB,mBACpB,sBACA1kF,EACA4hF,QAGiCl1F,IAA/BjC,KAAKwyG,aAAa5jE,MAAM,GAAkB,CAC5C,IAAMopE,EAAah4G,KAAK23C,KAAK/I,MAAM5uC,KAAKwyG,aAAa5jE,MAAM,IAC3DopE,EAAW1qG,EAAItN,KAAKw1C,OAAOs8C,qBAAqBqF,EAAQ7pF,GACxD0qG,EAAW1mG,EAAItR,KAAKw1C,OAAOu8C,qBAAqBoF,EAAQ7lF,GACxDtR,KAAK23C,KAAKwvB,QAAQlxD,KAAK,UACzB,MACEjW,KAAKgyG,mBAAmB3hB,OAAO96E,EAEnC,GAEA,CAAA9O,IAAA,iBAAAnD,MAMA,SAAeiS,GACb,IAAM4hF,EAAUn3F,KAAK23C,KAAKkvB,UAAUqyB,WAAW3jF,EAAM0lB,QAC/C6gE,EAAa97F,KAAK64F,iBAAiB6D,yBAAyBvF,GAG9D+gB,OAAgBj2G,OACeA,IAA/BjC,KAAKwyG,aAAavjE,MAAM,KAC1BipE,EAAgBl4G,KAAK23C,KAAK1I,MAAMjvC,KAAKwyG,aAAavjE,MAAM,IAAI85B,QAO9D,IAHA,IAAMgvC,EACJ/3G,KAAK64F,iBAAiBiJ,4BAA4BhG,GAChDrhE,OAAOx4B,EACF4M,EAAIkpG,EAAmBpzG,OAAS,EAAGkK,GAAK,EAAGA,IAAK,CAAA,IAAAupG,EAEvD,IAAgE,IAA5DrpE,GAAAqpE,EAAAp4G,KAAKwyG,aAAa5jE,OAAK9tC,KAAAs3G,EAASL,EAAmBlpG,IAAY,CACjE4rB,EAAOz6B,KAAK23C,KAAK/I,MAAMmpE,EAAmBlpG,IAC1C,KACF,CACF,CAGA7O,KAAKy2G,sCAGQx0G,IAATw4B,KACqB,IAAnBA,EAAK+8C,UACPq9B,MACE70G,KAAK8L,QAAQunG,QAAQrzG,KAAK8L,QAAQsnG,QAAyB,iBACzDpzG,KAAK8L,QAAQunG,QAAY,GAAmB,sBAIXpxG,IAAnCjC,KAAK23C,KAAK/I,MAAMspE,SACaj2G,IAA7BjC,KAAK23C,KAAK/I,MAAMnU,EAAKnzB,KAErBtH,KAAKq4G,gBAAgBH,EAAez9E,EAAKnzB,KAK/CiO,EAAM8rF,YAAc,CAAE1gF,KAAMu3F,EAAe7mF,GAAIoJ,EAAOA,EAAKnzB,QAAKrF,GAChEjC,KAAK64F,iBAAiBoB,mBACpB,qBACA1kF,EACA4hF,GAIFn3F,KAAK23C,KAAKwvB,QAAQlxD,KAAK,UACzB,GAEA,CAAAxP,IAAA,iBAAAnD,MAKA,SAAeiS,GACb,IAAM4hF,EAAUn3F,KAAKmiC,UACrBniC,KAAK64F,iBAAiBoB,mBACpB,YACA1kF,EACA4hF,OACAl1F,GACA,EAEJ,GAMA,CAAAwE,IAAA,kBAAAnD,MAMA,SAAgBg1G,GAAW,IAAArvC,EAAAjpE,KACnBu4G,EAAc,CAClBjxG,GAAI+mD,KACJ/gD,EAAGgrG,EAAUnhB,QAAQ3hD,OAAOloC,EAC5BgE,EAAGgnG,EAAUnhB,QAAQ3hD,OAAOlkC,EAC5BohC,MAAO,OAGT,GAAoC,mBAAzB1yC,KAAK8L,QAAQ4iC,QAAwB,CAC9C,GAAoC,IAAhC1uC,KAAK8L,QAAQ4iC,QAAQ/pC,OAcvB,MADA3E,KAAKuzG,yBACC,IAAIrqE,MACR,uEAdFlpC,KAAK8L,QAAQ4iC,QAAQ6pE,GAAa,SAAC3D,GAE/BA,SAEgB,YAAhB3rC,EAAKypC,QAGLzpC,EAAKtxB,KAAK5tC,KAAK6kC,MAAM65B,aAAajhC,IAAIotE,GAExC3rC,EAAKsqC,wBACP,GAOJ,MACEvzG,KAAK23C,KAAK5tC,KAAK6kC,MAAM65B,aAAajhC,IAAI+wE,GACtCv4G,KAAKuzG,wBAET,GAEA,CAAA9sG,IAAA,kBAAAnD,MAOA,SAAgBk1G,EAAc/S,GAAc,IAAAruB,EAAAp3E,KACpCu4G,EAAc,CAAE53F,KAAM63F,EAAcnnF,GAAIo0E,GAC9C,GAAoC,mBAAzBzlG,KAAK8L,QAAQkjC,QAAwB,CAC9C,GAAoC,IAAhChvC,KAAK8L,QAAQkjC,QAAQrqC,OAcvB,MAAM,IAAIukC,MACR,2EAdFlpC,KAAK8L,QAAQkjC,QAAQupE,GAAa,SAAC3D,GAE/BA,SAEgB,YAAhBx9B,EAAKs7B,SAGLt7B,EAAKz/B,KAAK5tC,KAAKklC,MAAMw5B,aAAajhC,IAAIotE,GACtCx9B,EAAKyhB,iBAAiBgI,cACtBzpB,EAAKm8B,yBAET,GAMJ,MACEvzG,KAAK23C,KAAK5tC,KAAKklC,MAAMw5B,aAAajhC,IAAI+wE,GACtCv4G,KAAK64F,iBAAiBgI,cACtB7gG,KAAKuzG,wBAET,GAEA,CAAA9sG,IAAA,mBAAAnD,MAOA,SAAiBk1G,EAAc/S,GAAc,IAAAsK,EAAA/vG,KACrCu4G,EAAc,CAClBjxG,GAAItH,KAAKo1G,kBACTz0F,KAAM63F,EACNnnF,GAAIo0E,EACJ/yD,MAAO1yC,KAAK23C,KAAK5tC,KAAKklC,MAAM1sC,IAAIvC,KAAKo1G,mBAAmB1iE,OAEtD+lE,EAAUz4G,KAAK8L,QAAQopC,SAI3B,GAHuB,WAAnB9nB,GAAOqrF,KACTA,EAAUA,EAAQtD,iBAEG,mBAAZsD,EAAwB,CACjC,GAAuB,IAAnBA,EAAQ9zG,OAkBV,MAAM,IAAIukC,MACR,yEAlBFuvE,EAAQF,GAAa,SAAC3D,GAElBA,SAEgB,aAAhB7E,EAAK2C,QAGL3C,EAAKp4D,KAAK1I,MAAMspE,EAAYjxG,IAAI0sE,iBAChC+7B,EAAKp4D,KAAKwvB,QAAQlxD,KAAK,WACvB85F,EAAKwD,2BAELxD,EAAKp4D,KAAK5tC,KAAKklC,MAAMw5B,aAAazvC,OAAO47E,GACzC7E,EAAKlX,iBAAiBgI,cACtBkP,EAAKwD,yBAET,GAMJ,MACEvzG,KAAK23C,KAAK5tC,KAAKklC,MAAMw5B,aAAazvC,OAAOu/E,GACzCv4G,KAAK64F,iBAAiBgI,cACtB7gG,KAAKuzG,wBAET,KAACxB,CAAA,CA/3CqB,GCElB5nG,GAAS,SACTuuG,GAAO,UACPjrG,GAAS,SACTgX,GAAQ,QACRpZ,GAAS,SAKTstG,GAAY,CAChB,QACA,MACA,MACA,SACA,OACA,QACA,UACA,QACA,YACA,eACA,WACA,OAIIC,GAA6B,CACjC58C,YAAa,CAAEvuD,OAAAA,IACf21D,oBAAqB,CAAE31D,OAAAA,GAAQxL,UAAW,aAC1C8iE,YAAa,CAAE56D,OAAAA,GAAQlI,UAAW,aAClCmuD,OAAQ,CACN1d,MAAO,CAAEmmE,QAASH,GAAMI,SAAU,YAClCr+E,KAAM,CAAEo+E,QAASH,GAAMI,SAAU,YACjCC,SAAU,CAAE1tG,OAAAA,GAAQwtG,QAASH,KAE/B/qE,MAAO,CACL4G,OAAQ,CAAEpqC,OAAAA,IACVmqC,WAAY,CAAEnqC,OAAAA,IACdqqC,UAAW,CACTD,OAAQ,CAAEpqC,OAAAA,IACVmqC,WAAY,CAAEnqC,OAAAA,IACd4uG,SAAU,CAAE1tG,OAAAA,GAAQlB,OAAAA,KAEtBsqC,MAAO,CACLF,OAAQ,CAAEpqC,OAAAA,IACVmqC,WAAY,CAAEnqC,OAAAA,IACd4uG,SAAU,CAAE1tG,OAAAA,GAAQlB,OAAAA,KAEtB4uG,SAAU,CAAE1tG,OAAAA,GAAQlB,OAAAA,KAEtBwwD,QAAS,CAAEltD,OAAAA,GAAQxL,UAAW,aAC9B2xC,MAAO,CACLtmC,EAAG,CAAEurG,QAASH,IACdpnG,EAAG,CAAEunG,QAASH,IACdK,SAAU,CAAE1tG,OAAAA,GAAQwtG,QAASH,KAE/B3kD,KAAM,CACJ+F,MAAO,CAAE3vD,OAAAA,IACTwjC,MAAO,CAAExjC,OAAAA,IACTmN,KAAM,CAAE7J,OAAAA,IACRstD,KAAM,CAAE5wD,OAAAA,IACRmqC,WAAY,CAAEnqC,OAAAA,IACdgwD,YAAa,CAAE1sD,OAAAA,IACfwsD,YAAa,CAAE9vD,OAAAA,IACfusD,QAAS,CAAEjpD,OAAAA,IACX0mD,MAAO,CAAE0kD,QAASH,GAAMvuG,OAAAA,IACxBooD,KAAM,CACJ5kB,MAAO,CAAExjC,OAAAA,IACTmN,KAAM,CAAE7J,OAAAA,IACRstD,KAAM,CAAE5wD,OAAAA,IACRinD,IAAK,CAAEjnD,OAAAA,IACPusD,QAAS,CAAEjpD,OAAAA,IACXsrG,SAAU,CAAE1tG,OAAAA,GAAQlB,OAAAA,KAEtB68D,SAAU,CACRr5B,MAAO,CAAExjC,OAAAA,IACTmN,KAAM,CAAE7J,OAAAA,IACRstD,KAAM,CAAE5wD,OAAAA,IACRinD,IAAK,CAAEjnD,OAAAA,IACPusD,QAAS,CAAEjpD,OAAAA,IACXsrG,SAAU,CAAE1tG,OAAAA,GAAQlB,OAAAA,KAEtBqoD,KAAM,CACJ7kB,MAAO,CAAExjC,OAAAA,IACTmN,KAAM,CAAE7J,OAAAA,IACRstD,KAAM,CAAE5wD,OAAAA,IACRinD,IAAK,CAAEjnD,OAAAA,IACPusD,QAAS,CAAEjpD,OAAAA,IACXsrG,SAAU,CAAE1tG,OAAAA,GAAQlB,OAAAA,KAEtBsoD,KAAM,CACJ9kB,MAAO,CAAExjC,OAAAA,IACTmN,KAAM,CAAE7J,OAAAA,IACRstD,KAAM,CAAE5wD,OAAAA,IACRinD,IAAK,CAAEjnD,OAAAA,IACPusD,QAAS,CAAEjpD,OAAAA,IACXsrG,SAAU,CAAE1tG,OAAAA,GAAQlB,OAAAA,KAEtB4uG,SAAU,CAAE1tG,OAAAA,GAAQlB,OAAAA,KAEtBiyC,MAAO,CAAEjyC,OAAAA,GAAQsD,OAAAA,GAAQxL,UAAW,aACpCk1D,iBAAkB,CAChB6hD,QAAS,CAAEvrG,OAAAA,IACXspD,OAAQ,CAAE5sD,OAAAA,IACV4uG,SAAU,CAAE1tG,OAAAA,GAAQwtG,QAASH,GAAMjrG,OAAAA,KAErCm3D,OAAQ,CAAEi0C,QAASH,IACnBj3C,KAAM,CACJ1G,KAAM,CAAE5wD,OAAAA,IACR6iD,KAAM,CAAE7iD,OAAAA,IACRmN,KAAM,CAAE7J,OAAAA,IACRkgC,MAAO,CAAExjC,OAAAA,IACT44D,OAAQ,CAAE54D,OAAAA,GAAQsD,OAAAA,IAClBsrG,SAAU,CAAE1tG,OAAAA,KAEd/D,GAAI,CAAE6C,OAAAA,GAAQsD,OAAAA,IACdklC,MAAO,CACLihB,SAAU,CAAEzpD,OAAAA,GAAQlI,UAAW,aAC/B+iE,WAAY,CAAE76D,OAAAA,GAAQlI,UAAW,aACjC82G,SAAU,CAAE1tG,OAAAA,GAAQlB,OAAAA,KAEtBm1D,aAAc,CACZ3oB,IAAK,CAAElpC,OAAAA,IACPi9C,MAAO,CAAEj9C,OAAAA,IACTijD,OAAQ,CAAEjjD,OAAAA,IACVipC,KAAM,CAAEjpC,OAAAA,IACRsrG,SAAU,CAAE1tG,OAAAA,GAAQoC,OAAAA,KAEtBilC,MAAO,CAAEvoC,OAAAA,GAAQlI,UAAW,aAC5B+4D,mBAAoB,CAAE69C,QAASH,IAC/BzxC,MAAO,CAAEx5D,OAAAA,GAAQxL,UAAW,aAC5B25D,OAAQ,CACNjlB,IAAK,CAAElpC,OAAAA,IACPi9C,MAAO,CAAEj9C,OAAAA,IACTijD,OAAQ,CAAEjjD,OAAAA,IACVipC,KAAM,CAAEjpC,OAAAA,IACRsrG,SAAU,CAAE1tG,OAAAA,GAAQoC,OAAAA,KAEtB84D,KAAM,CAAE94D,OAAAA,IACRo3D,QAAS,CAAEg0C,QAASH,IACpBz/C,QAAS,CACPtrD,IAAK,CAAEF,OAAAA,IACPC,IAAK,CAAED,OAAAA,IACPilC,MAAO,CACLvD,QAAS,CAAE0pE,QAASH,IACpB/qG,IAAK,CAAEF,OAAAA,IACPC,IAAK,CAAED,OAAAA,IACP0rD,WAAY,CAAE1rD,OAAAA,IACdyrD,cAAe,CAAEzrD,OAAAA,IACjBsrG,SAAU,CAAE1tG,OAAAA,GAAQwtG,QAASH,KAE/BtzC,sBAAuB,CAAE0zC,SAAU,YACnCC,SAAU,CAAE1tG,OAAAA,KAEd6wD,OAAQ,CACN/sB,QAAS,CAAE0pE,QAASH,IACpB/qE,MAAO,CAAExjC,OAAAA,IACTmN,KAAM,CAAE7J,OAAAA,IACRH,EAAG,CAAEG,OAAAA,IACL6D,EAAG,CAAE7D,OAAAA,IACLsrG,SAAU,CAAE1tG,OAAAA,GAAQwtG,QAASH,KAE/B9lE,MAAO,CACLzoC,OAAQ,CACN,SACA,UACA,SACA,WACA,MACA,OACA,QACA,gBACA,UACA,MACA,OACA,WACA,eACA,SACA,OACA,YAGJ+3D,YAAa,CAAE42C,SAAU,YACzBj8C,gBAAiB,CACfH,aAAc,CAAEm8C,QAASH,GAAMj0F,MAAAA,IAC/Bi6C,aAAc,CAAEjxD,OAAAA,IAChBoyD,cAAe,CAAEg5C,QAASH,IAC1Bl5C,aAAc,CAAEq5C,QAASH,IACzBz1C,mBAAoB,CAAE41C,QAASH,IAC/B53C,iBAAkB,CAAE32D,OAAQ,CAAC,SAAU,aACvC4uG,SAAU,CAAE1tG,OAAAA,KAEdiM,KAAM,CAAE7J,OAAAA,IACR0mC,MAAO,CAAEhqC,OAAAA,GAAQ8uG,IA3LP,MA2LYh3G,UAAW,aACjCqB,MAAO,CAAEmK,OAAAA,GAAQxL,UAAW,aAC5B+0D,gBAAiB,CACfgiD,QAAS,CAAEvrG,OAAAA,IACXyrG,QAAS,CAAEzrG,OAAAA,IACXsrG,SAAU,CAAE1tG,OAAAA,GAAQwtG,QAASH,GAAMjrG,OAAAA,KAErCH,EAAG,CAAEG,OAAAA,IACL6D,EAAG,CAAE7D,OAAAA,IACLsrG,SAAU,CAAE1tG,OAAAA,KAERw8F,GAA4B,CAChCsR,UAAW,CACThqE,QAAS,CAAE0pE,QAASH,IACpB3xF,OAAQ,CAAE8xF,QAASH,GAAMvuG,OAAAA,GAAQsa,MAAAA,GAAOq0F,SAAU,YAClD5pB,UAAW,CAAE+pB,IA1ML,OA2MRG,WAAY,CAAEP,QAASH,IACvBK,SAAU,CAAE1tG,OAAAA,GAAQwtG,QAASH,GAAMvuG,OAAAA,GAAQsa,MAAAA,GAAOq0F,SAAU,aAE9D7pE,MAAO,CACLG,OAAQ,CACN/d,GAAI,CACF8d,QAAS,CAAE0pE,QAASH,IACpBrpC,YAAa,CAAE5hE,OAAAA,IACf6K,KAAM,CAAEnO,OAAQwuG,IAChBjuC,YAAa,CAAEj9D,OAAAA,IACfg9D,WAAY,CAAEh9D,OAAAA,IACd6M,IAAK,CAAEnQ,OAAAA,IACP4uG,SAAU,CAAE1tG,OAAAA,GAAQwtG,QAASH,KAE/BhtD,OAAQ,CACNvc,QAAS,CAAE0pE,QAASH,IACpBrpC,YAAa,CAAE5hE,OAAAA,IACf6K,KAAM,CAAEnO,OAAQwuG,IAChBluC,WAAY,CAAEh9D,OAAAA,IACdi9D,YAAa,CAAEj9D,OAAAA,IACf6M,IAAK,CAAEnQ,OAAAA,IACP4uG,SAAU,CAAE1tG,OAAAA,GAAQwtG,QAASH,KAE/B/3F,KAAM,CACJwuB,QAAS,CAAE0pE,QAASH,IACpBrpC,YAAa,CAAE5hE,OAAAA,IACf6K,KAAM,CAAEnO,OAAQwuG,IAChBluC,WAAY,CAAEh9D,OAAAA,IACdi9D,YAAa,CAAEj9D,OAAAA,IACf6M,IAAK,CAAEnQ,OAAAA,IACP4uG,SAAU,CAAE1tG,OAAAA,GAAQwtG,QAASH,KAE/BK,SAAU,CAAE5uG,OAAQ,CAAC,OAAQ,KAAM,UAAWkB,OAAAA,KAEhDmiE,eAAgB,CACd7sD,KAAM,CACJlT,OAAQA,IAEV4jB,GAAI,CACF5jB,OAAQA,IAEVsrG,SAAU,CACR1tG,OAAQA,GACRoC,OAAQA,KAGZggE,mBAAoB,CAAEorC,QAASH,IAC/BpkE,WAAY,CACVnF,QAAS,CAAE0pE,QAASH,IACpB/qE,MAAO,CAAExjC,OAAAA,IACTmN,KAAM,CAAE7J,OAAAA,IACRmvD,OAAQ,CAAEi8C,QAASH,GAAMj0F,MAAAA,IACzBs0F,SAAU,CAAE1tG,OAAAA,GAAQwtG,QAASH,KAE/BtoD,OAAQ,CACN1d,MAAO,CAAEmmE,QAASH,GAAMI,SAAU,YAClC1rE,KAAM,CAAEyrE,QAASH,GAAMI,SAAU,YACjCC,SAAU,CAAE1tG,OAAAA,GAAQwtG,QAASH,KAE/B/qE,MAAO,CACLA,MAAO,CAAExjC,OAAAA,IACTqqC,UAAW,CAAErqC,OAAAA,IACbsqC,MAAO,CAAEtqC,OAAAA,IACTu/B,QAAS,CAAEv/B,OAAQ,CAAC,OAAQ,KAAM,QAAS0uG,QAASH,IACpD/9C,QAAS,CAAEltD,OAAAA,IACXsrG,SAAU,CAAE1tG,OAAAA,GAAQlB,OAAAA,KAEtByyD,OAAQ,CAAEi8C,QAASH,GAAMj0F,MAAAA,IACzBsvC,KAAM,CACJpmB,MAAO,CAAExjC,OAAAA,IACTmN,KAAM,CAAE7J,OAAAA,IACRstD,KAAM,CAAE5wD,OAAAA,IACRmqC,WAAY,CAAEnqC,OAAAA,IACdgwD,YAAa,CAAE1sD,OAAAA,IACfwsD,YAAa,CAAE9vD,OAAAA,IACf2vD,MAAO,CAAE3vD,OAAQ,CAAC,aAAc,MAAO,SAAU,WACjDusD,QAAS,CAAEjpD,OAAAA,IACX0mD,MAAO,CAAE0kD,QAASH,GAAMvuG,OAAAA,IACxBooD,KAAM,CACJ5kB,MAAO,CAAExjC,OAAAA,IACTmN,KAAM,CAAE7J,OAAAA,IACRstD,KAAM,CAAE5wD,OAAAA,IACRinD,IAAK,CAAEjnD,OAAAA,IACPusD,QAAS,CAAEjpD,OAAAA,IACXsrG,SAAU,CAAE1tG,OAAAA,GAAQlB,OAAAA,KAEtB68D,SAAU,CACRr5B,MAAO,CAAExjC,OAAAA,IACTmN,KAAM,CAAE7J,OAAAA,IACRstD,KAAM,CAAE5wD,OAAAA,IACRinD,IAAK,CAAEjnD,OAAAA,IACPusD,QAAS,CAAEjpD,OAAAA,IACXsrG,SAAU,CAAE1tG,OAAAA,GAAQlB,OAAAA,KAEtBqoD,KAAM,CACJ7kB,MAAO,CAAExjC,OAAAA,IACTmN,KAAM,CAAE7J,OAAAA,IACRstD,KAAM,CAAE5wD,OAAAA,IACRinD,IAAK,CAAEjnD,OAAAA,IACPusD,QAAS,CAAEjpD,OAAAA,IACXsrG,SAAU,CAAE1tG,OAAAA,GAAQlB,OAAAA,KAEtBsoD,KAAM,CACJ9kB,MAAO,CAAExjC,OAAAA,IACTmN,KAAM,CAAE7J,OAAAA,IACRstD,KAAM,CAAE5wD,OAAAA,IACRinD,IAAK,CAAEjnD,OAAAA,IACPusD,QAAS,CAAEjpD,OAAAA,IACXsrG,SAAU,CAAE1tG,OAAAA,GAAQlB,OAAAA,KAEtB4uG,SAAU,CAAE1tG,OAAAA,GAAQlB,OAAAA,KAEtBy6D,OAAQ,CAAEi0C,QAASH,IACnB7sC,WAAY,CAAEitC,SAAU,WAAYrrG,OAAAA,IACpCilC,MAAO,CAAEvoC,OAAAA,GAAQlI,UAAW,aAC5B+4D,mBAAoB,CAAE69C,QAASH,IAC/B/zG,OAAQ,CAAE8I,OAAAA,GAAQxL,UAAW,aAC7B4iE,QAAS,CAAEg0C,QAASH,IACpBz/C,QAAS,CACPtrD,IAAK,CAAEF,OAAAA,IACPC,IAAK,CAAED,OAAAA,IACPilC,MAAO,CACLvD,QAAS,CAAE0pE,QAASH,IACpB/qG,IAAK,CAAEF,OAAAA,IACPC,IAAK,CAAED,OAAAA,IACP0rD,WAAY,CAAE1rD,OAAAA,IACdyrD,cAAe,CAAEzrD,OAAAA,IACjBsrG,SAAU,CAAE1tG,OAAAA,GAAQwtG,QAASH,KAE/BtzC,sBAAuB,CAAE0zC,SAAU,YACnCC,SAAU,CAAE1tG,OAAAA,KAEdygE,eAAgB,CAAEgtC,SAAU,WAAYrrG,OAAAA,IACxC+oE,kBAAmB,CAAE/oE,OAAAA,IACrB6/D,cAAe,CACbh2D,KAAM,CAAE7J,OAAAA,IACRsuB,MAAO,CAAEtuB,OAAAA,IACT6gE,oBAAqB,CAAEuqC,QAASH,IAChCK,SAAU,CAAE1tG,OAAAA,KAEd6wD,OAAQ,CACN/sB,QAAS,CAAE0pE,QAASH,IACpB/qE,MAAO,CAAExjC,OAAAA,IACTmN,KAAM,CAAE7J,OAAAA,IACRH,EAAG,CAAEG,OAAAA,IACL6D,EAAG,CAAE7D,OAAAA,IACLsrG,SAAU,CAAE1tG,OAAAA,GAAQwtG,QAASH,KAE/B5oC,OAAQ,CACN3gC,QAAS,CAAE0pE,QAASH,IACpBpgG,KAAM,CACJnO,OAAQ,CACN,UACA,aACA,WACA,gBACA,gBACA,aACA,WACA,WACA,YACA,gBAGJsoE,UAAW,CAAEhlE,OAAAA,IACb2lE,eAAgB,CACdjpE,OAAQ,CAAC,aAAc,WAAY,QACnC0uG,QAASH,IAEXK,SAAU,CAAE1tG,OAAAA,GAAQwtG,QAASH,KAE/BvkE,MAAO,CAAEhqC,OAAAA,GAAQlI,UAAW,aAC5ByzC,MAAO,CAAEjoC,OAAAA,IACTupD,gBAAiB,CACfkiD,QAAS,CAAEzrG,OAAAA,IACXsrG,SAAU,CAAE1tG,OAAAA,GAAQwtG,QAASH,GAAMjrG,OAAAA,KAErCnK,MAAO,CAAEmK,OAAAA,GAAQxL,UAAW,aAC5B82G,SAAU,CAAE1tG,OAAAA,KAEds7D,OAAQ,CACN3qB,iBAAkB,CAAE68D,QAASH,IAC7BW,QAAST,GACTG,SAAU,CAAE1tG,OAAAA,KAEdiuG,YAAa,CACXngB,UAAW,CAAE0f,QAASH,IACtBtf,SAAU,CAAEyf,QAASH,IACrB7tB,gBAAiB,CAAEguB,QAASH,IAC5B5tB,gBAAiB,CAAE+tB,QAASH,IAC5B3tB,gBAAiB,CAAE8tB,QAASH,IAC5BjkE,MAAO,CAAEokE,QAASH,IAClB9hB,SAAU,CACRznD,QAAS,CAAE0pE,QAASH,IACpB7hB,MAAO,CACLvpF,EAAG,CAAEG,OAAAA,IACL6D,EAAG,CAAE7D,OAAAA,IACLspF,KAAM,CAAEtpF,OAAAA,IACRsrG,SAAU,CAAE1tG,OAAAA,KAEdqtF,aAAc,CAAEmgB,QAASH,IACzBrf,UAAW,CAAEwf,QAASH,IACtBK,SAAU,CAAE1tG,OAAAA,GAAQwtG,QAASH,KAE/B9e,YAAa,CAAEif,QAASH,IACxBziB,kBAAmB,CAAE4iB,QAASH,IAC9BlY,WAAY,CAAEqY,QAASH,IACvBjY,qBAAsB,CAAEoY,QAASH,IACjChY,oBAAqB,CAAEmY,QAASH,IAChCpf,aAAc,CAAE7rF,OAAAA,IAChB8rF,SAAU,CAAEsf,QAASH,IACrBlf,UAAW,CAAE/rF,OAAAA,IACbsrG,SAAU,CAAE1tG,OAAAA,KAEdw4F,OAAQ,CACNoD,WAAY,CAAEhlG,UAAW,YAAawL,OAAAA,GAAQtD,OAAAA,IAC9C+8F,eAAgB,CAAE2R,QAASH,IAC3BvR,iBAAkB,CAAE15F,OAAAA,IACpBq2F,aAAc,CACZ30D,QAAS,CAAE0pE,QAASH,IACpBtU,gBAAiB,CAAE32F,OAAAA,IACnB25F,YAAa,CAAE35F,OAAAA,IACf45F,YAAa,CAAE55F,OAAAA,IACf65F,cAAe,CAAEuR,QAASH,IAC1BnR,iBAAkB,CAAEsR,QAASH,IAC7BlR,qBAAsB,CAAEqR,QAASH,IACjC/+E,UAAW,CAAExvB,OAAQ,CAAC,KAAM,KAAM,KAAM,OACxCs9F,WAAY,CAAEt9F,OAAQ,CAAC,UAAW,aAClComG,aAAc,CAAEpmG,OAAQ,CAAC,SAAU,UACnC4uG,SAAU,CAAE1tG,OAAAA,GAAQwtG,QAASH,KAE/BK,SAAU,CAAE1tG,OAAAA,KAEdkuG,aAAc,CACZpqE,QAAS,CAAE0pE,QAASH,IACpB9F,gBAAiB,CAAEiG,QAASH,IAC5BhqE,QAAS,CAAEmqE,QAASH,GAAMI,SAAU,YACpC9pE,QAAS,CAAE6pE,QAASH,GAAMI,SAAU,YACpC1jE,SAAU,CAAE0jE,SAAU,YACtB5jE,SAAU,CACRigE,gBAAiB,CAAE2D,SAAU,YAC7BC,SAAU,CAAE1tG,OAAAA,GAAQwtG,QAASH,GAAMI,SAAU,aAE/CjG,WAAY,CAAEgG,QAASH,GAAMI,SAAU,YACvChG,WAAY,CAAE+F,QAASH,GAAMI,SAAU,YACvC/F,iBAAkB6F,GAClBG,SAAU,CAAE1tG,OAAAA,GAAQwtG,QAASH,KAE/B9pE,MAAOgqE,GACP/zC,QAAS,CACP11B,QAAS,CAAE0pE,QAASH,IACpB96B,UAAW,CACT5F,MAAO,CAAEvqE,OAAAA,IACT0qE,sBAAuB,CAAE1qE,OAAAA,IACzB4uE,eAAgB,CAAE5uE,OAAAA,IAClBguE,aAAc,CAAEhuE,OAAAA,IAChBmuE,eAAgB,CAAEnuE,OAAAA,IAClBowE,QAAS,CAAEpwE,OAAAA,IACXyqE,aAAc,CAAEzqE,OAAAA,IAChBsrG,SAAU,CAAE1tG,OAAAA,KAEdyyE,iBAAkB,CAChB9F,MAAO,CAAEvqE,OAAAA,IACT0qE,sBAAuB,CAAE1qE,OAAAA,IACzB4uE,eAAgB,CAAE5uE,OAAAA,IAClBguE,aAAc,CAAEhuE,OAAAA,IAChBmuE,eAAgB,CAAEnuE,OAAAA,IAClBowE,QAAS,CAAEpwE,OAAAA,IACXyqE,aAAc,CAAEzqE,OAAAA,IAChBsrG,SAAU,CAAE1tG,OAAAA,KAEd0yE,UAAW,CACT1B,eAAgB,CAAE5uE,OAAAA,IAClBguE,aAAc,CAAEhuE,OAAAA,IAChBmuE,eAAgB,CAAEnuE,OAAAA,IAClBwtE,aAAc,CAAExtE,OAAAA,IAChBowE,QAAS,CAAEpwE,OAAAA,IACXsrG,SAAU,CAAE1tG,OAAAA,KAEd2yE,sBAAuB,CACrB3B,eAAgB,CAAE5uE,OAAAA,IAClBguE,aAAc,CAAEhuE,OAAAA,IAChBmuE,eAAgB,CAAEnuE,OAAAA,IAClBwtE,aAAc,CAAExtE,OAAAA,IAChBowE,QAAS,CAAEpwE,OAAAA,IACXyqE,aAAc,CAAEzqE,OAAAA,IAChBsrG,SAAU,CAAE1tG,OAAAA,KAEd4yE,YAAa,CAAExwE,OAAAA,IACfywE,YAAa,CAAEzwE,OAAAA,IACf0wE,OAAQ,CACNh0E,OAAQ,CACN,YACA,YACA,wBACA,qBAGJi0E,cAAe,CACbjvC,QAAS,CAAE0pE,QAASH,IACpBliE,WAAY,CAAE/oC,OAAAA,IACd4wE,eAAgB,CAAE5wE,OAAAA,IAClB6wE,iBAAkB,CAAEu6B,QAASH,IAC7Bn6B,IAAK,CAAEs6B,QAASH,IAChBK,SAAU,CAAE1tG,OAAAA,GAAQwtG,QAASH,KAE/Bl6B,SAAU,CAAE/wE,OAAAA,IACZ2vE,iBAAkB,CAAEy7B,QAASH,IAC7Bj6B,KAAM,CACJnxE,EAAG,CAAEG,OAAAA,IACL6D,EAAG,CAAE7D,OAAAA,IACLsrG,SAAU,CAAE1tG,OAAAA,KAEd0tG,SAAU,CAAE1tG,OAAAA,GAAQwtG,QAASH,KAI/B1qB,WAAY,CAAE6qB,QAASH,IACvBc,WAAY,CAAEX,QAASH,IACvBtF,OAAQ,CAAEjpG,OAAAA,IACVkpG,QAAS,CACPgG,QAAS,CAAEryD,IA3gBH,OA4gBR+xD,SAAU,CAAE1tG,OAAAA,KAEdsqC,OAAQ,CAAExrC,OAAAA,IACVurC,MAAO,CAAEvrC,OAAAA,IACT4uG,SAAU,CAAE1tG,OAAAA,KA4BRouG,GAAuC,CAC3C7qE,MAAO,CACLotB,YAAa,CAAC,EAAG,EAAG,GAAI,GACxBoH,oBAAqB,CAAC,EAAG,EAAG,GAAI,GAChCz1B,MAAO,CACL4G,OAAQ,CAAC,QAAS,WAClBD,WAAY,CAAC,QAAS,WACtBE,UAAW,CACTD,OAAQ,CAAC,QAAS,WAClBD,WAAY,CAAC,QAAS,YAExBG,MAAO,CACLF,OAAQ,CAAC,QAAS,WAClBD,WAAY,CAAC,QAAS,aAG1BqmB,QAAS,CAAC,EAAG,EAAG,EAAG,IACnB/mB,MAAO,CACLtmC,GAAG,EACHgE,GAAG,GAELyiD,KAAM,CACJpmB,MAAO,CAAC,QAAS,WACjBr2B,KAAM,CAAC,GAAI,EAAG,IAAK,GACnByjD,KAAM,CAAC,QAAS,UAAW,UAC3BzmB,WAAY,CAAC,QAAS,QACtB6lB,YAAa,CAAC,EAAG,EAAG,GAAI,GACxBF,YAAa,CAAC,QAAS,YAGzB2K,QAAQ,EACR5J,oBAAoB,EAQpB6J,SAAS,EACT5L,QAAS,CACPtrD,IAAK,CAAC,GAAI,EAAG,IAAK,GAClBD,IAAK,CAAC,GAAI,EAAG,IAAK,GAClBglC,MAAO,CACLvD,SAAS,EACTxhC,IAAK,CAAC,GAAI,EAAG,IAAK,GAClBD,IAAK,CAAC,GAAI,EAAG,IAAK,GAClByrD,WAAY,CAAC,GAAI,EAAG,IAAK,GACzBD,cAAe,CAAC,EAAG,EAAG,GAAI,KAG9BgD,OAAQ,CACN/sB,SAAS,EACTxB,MAAO,kBACPr2B,KAAM,CAAC,GAAI,EAAG,GAAI,GAClBhK,EAAG,CAAC,GAAI,GAAI,GAAI,GAChBgE,EAAG,CAAC,GAAI,GAAI,GAAI,IAElBshC,MAAO,CACL,UACA,MACA,SACA,WACA,UACA,MACA,SACA,OACA,OACA,WACA,eACA,WAEFiqB,gBAAiB,CACfH,cAAc,EACdgC,aAAc,CAAC,EAAG,EAAG,GAAI,GACzBmB,eAAe,EACfL,cAAc,GAEhBloD,KAAM,CAAC,GAAI,EAAG,IAAK,IAErB23B,MAAO,CACLG,OAAQ,CACN/d,GAAI,CAAE8d,SAAS,EAAOkgC,YAAa,CAAC,EAAG,EAAG,EAAG,KAAO/2D,KAAM,SAC1DozC,OAAQ,CAAEvc,SAAS,EAAOkgC,YAAa,CAAC,EAAG,EAAG,EAAG,KAAO/2D,KAAM,SAC9DqI,KAAM,CAAEwuB,SAAS,EAAOkgC,YAAa,CAAC,EAAG,EAAG,EAAG,KAAO/2D,KAAM,UAE9Dk1D,eAAgB,CACd7sD,KAAM,CAAC,GAAI,GAAI,GAAI,GACnB0Q,GAAI,CAAC,GAAI,GAAI,GAAI,IAEnBo8C,oBAAoB,EACpB9/B,MAAO,CACLA,MAAO,CAAC,QAAS,WACjB6G,UAAW,CAAC,QAAS,WACrBC,MAAO,CAAC,QAAS,WACjB/K,QAAS,CAAC,OAAQ,KAAM,QAAQ,GAAM,GACtCixB,QAAS,CAAC,EAAG,EAAG,EAAG,MAErBiC,QAAQ,EACR7I,KAAM,CACJpmB,MAAO,CAAC,QAAS,WACjBr2B,KAAM,CAAC,GAAI,EAAG,IAAK,GACnByjD,KAAM,CAAC,QAAS,UAAW,UAC3BzmB,WAAY,CAAC,QAAS,QACtB6lB,YAAa,CAAC,EAAG,EAAG,GAAI,GACxBF,YAAa,CAAC,QAAS,WACvBH,MAAO,CAAC,aAAc,MAAO,SAAU,WAEzC8K,QAAQ,EACRiH,WAAY,CAAC,IAAK,EAAG,EAAG,IACxB7Q,oBAAoB,EACpB6J,SAAS,EACT5L,QAAS,CACPtrD,IAAK,CAAC,EAAG,EAAG,IAAK,GACjBD,IAAK,CAAC,GAAI,EAAG,IAAK,GAClBglC,MAAO,CACLvD,SAAS,EACTxhC,IAAK,CAAC,GAAI,EAAG,IAAK,GAClBD,IAAK,CAAC,GAAI,EAAG,IAAK,GAClByrD,WAAY,CAAC,GAAI,EAAG,IAAK,GACzBD,cAAe,CAAC,EAAG,EAAG,GAAI,KAG9B4S,eAAgB,CAAC,IAAK,EAAG,EAAG,IAC5B0K,kBAAmB,CAAC,GAAI,EAAG,IAAK,GAChClJ,cAAe,CACbh2D,KAAM,CAAC,GAAI,EAAG,IAAK,GACnBykB,MAAO,CAACp8B,KAAK+R,GAAK,GAAI,EAAI/R,KAAK+R,GAAI,EAAI/R,KAAK+R,GAAI/R,KAAK+R,GAAK,GAC1D48D,qBAAqB,GAEvBpS,OAAQ,CACN/sB,SAAS,EACTxB,MAAO,kBACPr2B,KAAM,CAAC,GAAI,EAAG,GAAI,GAClBhK,EAAG,CAAC,GAAI,GAAI,GAAI,GAChBgE,EAAG,CAAC,GAAI,GAAI,GAAI,IAElBw+D,OAAQ,CACN3gC,SAAS,EACT72B,KAAM,CACJ,UACA,aACA,WACA,gBACA,gBACA,aACA,WACA,WACA,YACA,eAEF86D,eAAgB,CAAC,aAAc,WAAY,QAC3CX,UAAW,CAAC,GAAK,EAAG,EAAG,MAEzB/8B,MAAO,CAAC,EAAG,EAAG,GAAI,IAEpBmuD,OAAQ,CAGNC,aAAc,CACZ30D,SAAS,EACTi1D,gBAAiB,CAAC,IAAK,GAAI,IAAK,GAChCgD,YAAa,CAAC,IAAK,GAAI,IAAK,GAC5BC,YAAa,CAAC,IAAK,GAAI,IAAK,GAC5BC,eAAe,EACfC,kBAAkB,EAClBC,sBAAsB,EACtB7tE,UAAW,CAAC,KAAM,KAAM,KAAM,MAC9B8tE,WAAY,CAAC,UAAW,YACxB8I,aAAc,CAAC,SAAU,WAG7B+I,YAAa,CACXngB,WAAW,EACXC,UAAU,EACVvO,iBAAiB,EACjBC,iBAAiB,EACjBC,iBAAiB,EACjBt2C,OAAO,EACPmiD,SAAU,CACRznD,SAAS,EACT0nD,MAAO,CACLvpF,EAAG,CAAC,GAAI,EAAG,GAAI,GACfgE,EAAG,CAAC,GAAI,EAAG,GAAI,GACfylF,KAAM,CAAC,IAAM,EAAG,GAAK,OAEvB2B,cAAc,EACdW,WAAW,GAEbO,aAAa,EACb3D,mBAAmB,EACnBuK,YAAY,EACZC,sBAAsB,EACtBC,qBAAqB,EACrBpH,aAAc,CAAC,IAAK,EAAG,IAAM,IAC7BC,UAAU,EACVC,UAAW,CAAC,EAAG,GAAK,EAAG,KAEzB+f,aAAc,CACZpqE,SAAS,EACTyjE,iBAAiB,GAEnB/tC,QAAS,CACP11B,SAAS,EACTyuC,UAAW,CACT5F,MAAO,CAAC,GAAK,GAAK,EAAG,KACrBG,sBAAuB,EAAE,KAAO,IAAO,EAAG,IAC1CkE,eAAgB,CAAC,GAAK,EAAG,GAAI,KAC7BZ,aAAc,CAAC,GAAI,EAAG,IAAK,GAC3BG,eAAgB,CAAC,IAAM,EAAG,IAAK,MAC/BiC,QAAS,CAAC,IAAM,EAAG,EAAG,KACtB3F,aAAc,CAAC,EAAG,EAAG,EAAG,MAE1B4F,iBAAkB,CAChB9F,MAAO,CAAC,GAAK,GAAK,EAAG,KACrBG,sBAAuB,EAAE,IAAK,IAAK,EAAG,GACtCkE,eAAgB,CAAC,IAAM,EAAG,EAAG,MAC7BZ,aAAc,CAAC,GAAI,EAAG,IAAK,GAC3BG,eAAgB,CAAC,IAAM,EAAG,IAAK,MAC/BiC,QAAS,CAAC,GAAK,EAAG,EAAG,KACrB3F,aAAc,CAAC,EAAG,EAAG,EAAG,MAE1B6F,UAAW,CACT1B,eAAgB,CAAC,GAAK,EAAG,GAAI,KAC7BZ,aAAc,CAAC,IAAK,EAAG,IAAK,GAC5BG,eAAgB,CAAC,IAAM,EAAG,IAAK,MAC/BX,aAAc,CAAC,IAAK,EAAG,IAAK,GAC5B4C,QAAS,CAAC,IAAM,EAAG,EAAG,MAExBG,sBAAuB,CACrB3B,eAAgB,CAAC,GAAK,EAAG,GAAI,KAC7BZ,aAAc,CAAC,IAAK,EAAG,IAAK,GAC5BG,eAAgB,CAAC,IAAM,EAAG,IAAK,MAC/BX,aAAc,CAAC,IAAK,EAAG,IAAK,GAC5B4C,QAAS,CAAC,IAAM,EAAG,EAAG,KACtB3F,aAAc,CAAC,EAAG,EAAG,EAAG,MAE1B+F,YAAa,CAAC,GAAI,EAAG,IAAK,GAC1BC,YAAa,CAAC,GAAK,IAAM,GAAK,KAC9BC,OAAQ,CACN,YACA,mBACA,YACA,yBAEFK,SAAU,CAAC,GAAK,IAAM,EAAG,KACzBC,KAAM,CACJnxE,EAAG,CAAC,GAAI,GAAI,GAAI,IAChBgE,EAAG,CAAC,GAAI,GAAI,GAAI,OAMTooG,GAAiD,SAC5DC,EACAC,EACA9tG,GACW,IAAAgjB,EACX,SACEoiB,GAAAyoE,GAAU74G,KAAV64G,EAAoB,aACnBzoE,GAAApiB,EAAA2qF,GAAyB50C,QAAQsZ,QAAMr9E,KAAAguB,EAAU8qF,IAClD9tG,EAAQ+4D,QAAQsZ,SAAWy7B,GACZ,SAAfA,EAMJ,iGCv0BMC,GAAa,WAIjB,SAAAA,IAAcj2F,QAAAi2F,EAAC,CA0Dd,OAxDD9rF,GAAA8rF,EAAA,CAAA,CAAApzG,IAAA,eAAAnD,MAOA,SAAaq0C,EAAMqvC,EAAY8yB,GAK7B,IAJA,IAAMC,EAAW,CAAA,EACX9qE,EAAQ0I,EAAK1I,MAGVpgC,EAAI,EAAGA,EAAIm4E,EAAWriF,OAAQkK,IAAK,CAC1C,IACMmrG,EAAO,CAAA,EACbD,EAFa/yB,EAAWn4E,IAEPmrG,EACjB,IAAK,IAAI/pG,EAAI,EAAGA,EAAI+2E,EAAWriF,OAAQsL,IACrC+pG,EAAKhzB,EAAW/2E,IAAMpB,GAAKoB,EAAI,EAAI,GAEvC,CAGA,IAAK,IAAIpB,EAAI,EAAGA,EAAIirG,EAAWn1G,OAAQkK,IAAK,CAC1C,IAAMu+B,EAAO6B,EAAM6qE,EAAWjrG,KAGT,IAAnBu+B,EAAK0mC,gBACqB7xE,IAA1B83G,EAAS3sE,EAAK27B,cACU9mE,IAAxB83G,EAAS3sE,EAAK07B,QAEdixC,EAAS3sE,EAAK27B,QAAQ37B,EAAK07B,MAAQ,EACnCixC,EAAS3sE,EAAK07B,MAAM17B,EAAK27B,QAAU,EAEvC,CAKA,IAHA,IAAMsP,EAAY2O,EAAWriF,OAGpBsgB,EAAI,EAAGA,EAAIozD,EAAWpzD,IAG7B,IAFA,IAAMg1F,EAAQjzB,EAAW/hE,GACnBi1F,EAAQH,EAASE,GACdprG,EAAI,EAAGA,EAAIwpE,EAAY,EAAGxpE,IAGjC,IAFA,IAAMsrG,EAAQnzB,EAAWn4E,GACnBurG,EAAQL,EAASI,GACdlqG,EAAIpB,EAAI,EAAGoB,EAAIooE,EAAWpoE,IAAK,CACtC,IAAMoqG,EAAQrzB,EAAW/2E,GACnBqqG,EAAQP,EAASM,GAEjB9xG,EAAM5I,KAAKgO,IAAIysG,EAAMC,GAAQD,EAAMH,GAASC,EAAMG,IACxDD,EAAMC,GAAS9xG,EACf+xG,EAAMH,GAAS5xG,CACjB,CAIJ,OAAOwxG,CACT,KAACF,CAAA,CA9DgB,GCMbU,GAAW,WAMf,SAAAA,EAAY5iE,EAAM0jC,EAAYm/B,GAAc52F,QAAA22F,GAC1Cv6G,KAAK23C,KAAOA,EACZ33C,KAAKy7E,aAAeJ,EACpBr7E,KAAK47E,eAAiB4+B,EACtBx6G,KAAKy6G,eAAiB,IAAIZ,EAC5B,CA+SC,OA7SD9rF,GAAAwsF,EAAA,CAAA,CAAA9zG,IAAA,aAAAnD,MAKA,SAAWwI,GACLA,IACEA,EAAQ2vE,eACVz7E,KAAKy7E,aAAe3vE,EAAQ2vE,cAE1B3vE,EAAQ8vE,iBACV57E,KAAK47E,eAAiB9vE,EAAQ8vE,gBAGpC,GAEA,CAAAn1E,IAAA,QAAAnD,MAOA,SAAM0jF,EAAY8yB,GAAoC,IAAxBY,EAAcz5G,UAAA0D,OAAA,QAAA1C,IAAAhB,UAAA,IAAAA,UAAA,GAEpC84G,EAAW/5G,KAAKy6G,eAAeE,aACnC36G,KAAK23C,KACLqvC,EACA8yB,GAIF95G,KAAK46G,gBAAgBb,GAGrB/5G,KAAK66G,gBAAgBd,GAGrB/5G,KAAK86G,kBAmBL,IAhBA,IAEItkE,EAAa,EACXukE,EAAgBp7G,KAAK+N,IACzB,IACA/N,KAAKgO,IAAI,GAAK3N,KAAK23C,KAAK4wB,YAAY5jE,OAAQ,MAI1Cq2G,EAAY,IACZC,EAAe,EACjBC,EAAQ,EACRC,EAAQ,EACRC,EAAU,EACVC,EAAgB,EAEXL,EAhBW,KAgBcxkE,EAAaukE,GAAe,CAC1DvkE,GAAc,EAAE,IAE4B8kE,EAAApsF,GAA1ClvB,KAAKu7G,sBAAsBb,GAAe,GAG5C,IAJCO,EAAYK,EAAA,GAAEN,EAASM,EAAA,GAAEJ,EAAKI,EAAA,GAAEH,EAAKG,EAAA,GAEtCF,EAAUJ,EACVK,EAAgB,EACTD,EArBc,GAqBcC,EAfV,GAe8C,CACrEA,GAAiB,EACjBr7G,KAAKw7G,UAAUP,EAAcC,EAAOC,GAAO,IACYM,EAAAvsF,GAA7BlvB,KAAK07G,WAAWT,GAAa,GAAtDG,EAAOK,EAAA,GAAEP,EAAKO,EAAA,GAAEN,EAAKM,EAAA,EACxB,CACF,CACF,GAEA,CAAAh1G,IAAA,wBAAAnD,MAOA,SAAsBo3G,GAQpB,IAPA,IAAM1zB,EAAahnF,KAAK23C,KAAK4wB,YACvB35B,EAAQ5uC,KAAK23C,KAAK/I,MACpBosE,EAAY,EACZW,EAAkB30B,EAAW,GAC7B40B,EAAY,EACdC,EAAY,EAELC,EAAU,EAAGA,EAAU90B,EAAWriF,OAAQm3G,IAAW,CAC5D,IAAMh7B,EAAIkG,EAAW80B,GAErB,IACkC,IAAhCltE,EAAMkyC,GAAG7c,qBACe,IAAvBr1B,EAAMkyC,GAAGtJ,YAAyC,IAAnBkjC,IACH,IAA7B9rE,EAAMkyC,GAAGh1E,QAAQ8nC,MAAMtmC,IACM,IAA7BshC,EAAMkyC,GAAGh1E,QAAQ8nC,MAAMtiC,EACvB,CACA,IAAkDyqG,EAAA7sF,GAAlBlvB,KAAK07G,WAAW56B,GAAE,GAA3Cs6B,EAAOW,EAAA,GAAEb,EAAKa,EAAA,GAAEZ,EAAKY,EAAA,GACxBf,EAAYI,IACdJ,EAAYI,EACZO,EAAkB76B,EAClB86B,EAAYV,EACZW,EAAYV,EAEhB,CACF,CAEA,MAAO,CAACQ,EAAiBX,EAAWY,EAAWC,EACjD,GAEA,CAAAp1G,IAAA,aAAAnD,MAOA,SAAWw9E,GACT,IAAAk7B,EAAA9sF,GAAuBlvB,KAAKi8G,OAAOn7B,GAAE,GAA9Bo6B,EAAKc,EAAA,GAAEb,EAAKa,EAAA,GAEnB,MAAO,CADSr8G,KAAK6T,KAAK7T,KAAAkuE,IAAAqtC,EAAS,GAACv7G,KAAAkuE,IAAGstC,EAAS,IAC/BD,EAAOC,EAC1B,GAEA,CAAA10G,IAAA,YAAAnD,MASA,SAAUw9E,EAAGo6B,EAAOC,GAYlB,IAXA,IAAMn0B,EAAahnF,KAAK23C,KAAK4wB,YACvB35B,EAAQ5uC,KAAK23C,KAAK/I,MACpBstE,EAAU,EACVC,EAAW,EACXC,EAAU,EAERC,EAAMztE,EAAMkyC,GAAGxzE,EACfgvG,EAAM1tE,EAAMkyC,GAAGxvE,EACfirG,EAAKv8G,KAAKw8G,SAAS17B,GACnB27B,EAAKz8G,KAAK08G,SAAS57B,GAEhB67B,EAAO,EAAGA,EAAO31B,EAAWriF,OAAQg4G,IAAQ,CACnD,IAAM9tG,EAAIm4E,EAAW21B,GACrB,GAAI9tG,IAAMiyE,EAAG,CACX,IAAM87B,EAAMhuE,EAAM//B,GAAGvB,EACfuvG,EAAMjuE,EAAM//B,GAAGyC,EACfwrG,EAAOP,EAAG1tG,GACVkuG,EAAON,EAAG5tG,GACVmuG,EAAc,EAAGr9G,KAAAkuE,IAAIluE,KAAAkuE,IAACwuC,EAAMO,EAAQ,GAACj9G,KAAAkuE,IAAIyuC,EAAMO,EAAQ,GAAM,KACnEX,GAAWY,GAAQ,EAAIC,EAAIp9G,KAAAkuE,IAAIyuC,EAAMO,EAAQ,GAAIG,GACjDb,GAAYW,GAAQC,GAAQV,EAAMO,IAAQN,EAAMO,GAAOG,GACvDZ,GAAWU,GAAQ,EAAIC,EAAIp9G,KAAAkuE,IAAIwuC,EAAMO,EAAQ,GAAII,EACnD,CACF,CAEA,IAOM3pG,GALA6nG,EAFIgB,EAIJf,EAHAgB,MADID,EAGJE,EAFAD,GAOA/oG,IAPA+oG,EAOW9oG,EANX6nG,GAFIgB,EAWVttE,EAAMkyC,GAAGxzE,GAAK8F,EACdw7B,EAAMkyC,GAAGxvE,GAAK+B,EAGdrT,KAAKi9G,gBAAgBn8B,EACvB,GAEA,CAAAr6E,IAAA,kBAAAnD,MAMA,SAAgBy2G,GACd,IAAM/yB,EAAahnF,KAAK23C,KAAK4wB,YACvB8S,EAAar7E,KAAKy7E,aAExBz7E,KAAK08G,SAAW,GAChB,IAAK,IAAI7tG,EAAI,EAAGA,EAAIm4E,EAAWriF,OAAQkK,IAAK,CAC1C7O,KAAK08G,SAAS11B,EAAWn4E,IAAM,CAAA,EAC/B,IAAK,IAAIoB,EAAI,EAAGA,EAAI+2E,EAAWriF,OAAQsL,IACrCjQ,KAAK08G,SAAS11B,EAAWn4E,IAAIm4E,EAAW/2E,IACtCorE,EAAa0+B,EAAS/yB,EAAWn4E,IAAIm4E,EAAW/2E,GAEtD,CACF,GAEA,CAAAxJ,IAAA,kBAAAnD,MAMA,SAAgBy2G,GACd,IAAM/yB,EAAahnF,KAAK23C,KAAK4wB,YACvBiyC,EAAex6G,KAAK47E,eAE1B57E,KAAKw8G,SAAW,GAChB,IAAK,IAAI3tG,EAAI,EAAGA,EAAIm4E,EAAWriF,OAAQkK,IAAK,CAC1C7O,KAAKw8G,SAASx1B,EAAWn4E,IAAM,CAAA,EAC/B,IAAK,IAAIoB,EAAI,EAAGA,EAAI+2E,EAAWriF,OAAQsL,IACrCjQ,KAAKw8G,SAASx1B,EAAWn4E,IAAIm4E,EAAW/2E,IACtCuqG,EAAY76G,KAAAkuE,IAAGksC,EAAS/yB,EAAWn4E,IAAIm4E,EAAW/2E,KAAQ,EAEhE,CACF,GAEA,CAAAxJ,IAAA,kBAAAnD,MAKA,WACE,IAAM0jF,EAAahnF,KAAK23C,KAAK4wB,YACvB35B,EAAQ5uC,KAAK23C,KAAK/I,MACxB5uC,KAAKk9G,SAAW,GAChBl9G,KAAKi8G,OAAS,GACd,IAAK,IAAIkB,EAAO,EAAGA,EAAOn2B,EAAWriF,OAAQw4G,IAC3Cn9G,KAAKk9G,SAASl2B,EAAWm2B,IAAS,GAEpC,IAAK,IAAIA,EAAO,EAAGA,EAAOn2B,EAAWriF,OAAQw4G,IAAQ,CAMnD,IALA,IAAMr8B,EAAIkG,EAAWm2B,GACfd,EAAMztE,EAAMkyC,GAAGxzE,EACfgvG,EAAM1tE,EAAMkyC,GAAGxvE,EACjB4pG,EAAQ,EACRC,EAAQ,EACHwB,EAAOQ,EAAMR,EAAO31B,EAAWriF,OAAQg4G,IAAQ,CACtD,IAAM9tG,EAAIm4E,EAAW21B,GACrB,GAAI9tG,IAAMiyE,EAAG,CACX,IAAM87B,EAAMhuE,EAAM//B,GAAGvB,EACfuvG,EAAMjuE,EAAM//B,GAAGyC,EACf0rG,EACJ,EAAMr9G,KAAK6T,KAAK7T,KAAAkuE,IAACwuC,EAAMO,EAAQ,GAACj9G,KAAAkuE,IAAIyuC,EAAMO,EAAQ,IACpD78G,KAAKk9G,SAASp8B,GAAG67B,GAAQ,CACvB38G,KAAKw8G,SAAS17B,GAAGjyE,IACdwtG,EAAMO,EAAM58G,KAAK08G,SAAS57B,GAAGjyE,IAAMwtG,EAAMO,GAAOI,GACnDh9G,KAAKw8G,SAAS17B,GAAGjyE,IACdytG,EAAMO,EAAM78G,KAAK08G,SAAS57B,GAAGjyE,IAAMytG,EAAMO,GAAOG,IAErDh9G,KAAKk9G,SAASruG,GAAGsuG,GAAQn9G,KAAKk9G,SAASp8B,GAAG67B,GAC1CzB,GAASl7G,KAAKk9G,SAASp8B,GAAG67B,GAAM,GAChCxB,GAASn7G,KAAKk9G,SAASp8B,GAAG67B,GAAM,EAClC,CACF,CAEA38G,KAAKi8G,OAAOn7B,GAAK,CAACo6B,EAAOC,EAC3B,CACF,GAEA,CAAA10G,IAAA,kBAAAnD,MAMA,SAAgBw9E,GAUd,IATA,IAAMkG,EAAahnF,KAAK23C,KAAK4wB,YACvB35B,EAAQ5uC,KAAK23C,KAAK/I,MAClBwuE,EAAOp9G,KAAKk9G,SAASp8B,GACrBo5B,EAAQl6G,KAAKw8G,SAAS17B,GACtBu8B,EAAQr9G,KAAK08G,SAAS57B,GACtBu7B,EAAMztE,EAAMkyC,GAAGxzE,EACfgvG,EAAM1tE,EAAMkyC,GAAGxvE,EACjB4pG,EAAQ,EACRC,EAAQ,EACHwB,EAAO,EAAGA,EAAO31B,EAAWriF,OAAQg4G,IAAQ,CACnD,IAAM9tG,EAAIm4E,EAAW21B,GACrB,GAAI9tG,IAAMiyE,EAAG,CAEX,IAAMk5B,EAAOoD,EAAKT,GACZW,EAAQtD,EAAK,GACbuD,EAAQvD,EAAK,GAGb4C,EAAMhuE,EAAM//B,GAAGvB,EACfuvG,EAAMjuE,EAAM//B,GAAGyC,EACf0rG,EACJ,EAAMr9G,KAAK6T,KAAK7T,KAAAkuE,IAACwuC,EAAMO,EAAQ,GAACj9G,KAAAkuE,IAAIyuC,EAAMO,EAAQ,IAC9CzpG,EACJ8mG,EAAMrrG,IAAMwtG,EAAMO,EAAMS,EAAMxuG,IAAMwtG,EAAMO,GAAOI,GAC7C3pG,EACJ6mG,EAAMrrG,IAAMytG,EAAMO,EAAMQ,EAAMxuG,IAAMytG,EAAMO,GAAOG,GACnDI,EAAKT,GAAQ,CAACvpG,EAAIC,GAClB6nG,GAAS9nG,EACT+nG,GAAS9nG,EAGT,IAAMy2D,EAAM9pE,KAAKi8G,OAAOptG,GACxBi7D,EAAI,IAAM12D,EAAKkqG,EACfxzC,EAAI,IAAMz2D,EAAKkqG,CACjB,CACF,CAEAv9G,KAAKi8G,OAAOn7B,GAAK,CAACo6B,EAAOC,EAC3B,KAACZ,CAAA,CA1Tc,GC4CV,SAASiD,GAAQtuB,EAAWnlF,EAAM+B,GAAS,IAAAgjB,EAAA+c,EAAAgH,EAAAI,EAAArT,EAAA5/B,KAChD,KAAMA,gBAAgBw9G,IACpB,MAAM,IAAIhuE,YAAY,oDAIxBxvC,KAAK8L,QAAU,GACf9L,KAAK+7C,eAAiB,CACpBq3D,OAAQ,KACRC,QAASA,GACTmG,YAAY,GAEdv9D,GAAcj8C,KAAK8L,QAAS9L,KAAK+7C,gBAcjC/7C,KAAK23C,KAAO,CACVu3C,UAAWA,EAGXtgD,MAAO,CAAE,EACT25B,YAAa,GACbt5B,MAAO,CAAE,EACTssC,YAAa,GAEbpU,QAAS,CACP9xD,GAAI4nC,GAAAnuB,EAAI9uB,KAACqV,IAAEvU,KAAAguB,EAAM9uB,MACjB0V,IAAKunC,GAAApR,EAAI7rC,KAAC0V,KAAG5U,KAAA+qC,EAAM7rC,MACnBiW,KAAMgnC,GAAApK,EAAI7yC,KAACiW,MAAInV,KAAA+xC,EAAM7yC,MACrByV,KAAMwnC,GAAAhK,EAAIjzC,KAACyV,MAAI3U,KAAAmyC,EAAMjzC,OAEvBgwF,eAAgB,CACdC,MAAO,WAAc,EACrBzC,QAAS,WAAc,EACvB0C,YAAa,WAAc,EAC3BC,OAAQ,WAAc,EACtBC,YAAa,WAAc,EAC3BC,OAAQ,WAAc,EACtBC,UAAW,WAAc,EACzBE,aAAc,WAAc,EAC5BD,QAAS,WAAc,EACvBE,YAAa,WAAc,EAC3B/C,UAAW,WAAc,EACzBgD,UAAW,WAAa,GAE1B3mF,KAAM,CACJ6kC,MAAO,KACPK,MAAO,MAET43B,UAAW,CACTC,WAAY,WAAc,EAC1B53B,WAAY,WAAc,EAC1BgqD,WAAY,WAAa,GAE3BsP,QAAS,CAAE,EACXxvC,KAAM,CACJx8B,MAAO,EACP2vD,YAAa,CAAE7+E,EAAG,EAAGgE,EAAG,IAE1Bg8E,aAAc,CACZC,MAAM,EACNl2E,SAAU,CACRiO,MAAO,CAAEhY,EAAG,EAAGgE,EAAG,GAClBiU,IAAK,CAAEjY,EAAG,EAAGgE,EAAG,MAMtBtR,KAAKknE,qBAGLlnE,KAAK62C,OAAS,IAAID,IAAO,WAAA,OAAMhX,EAAK+X,KAAKwvB,QAAQlxD,KAAK,iBAAiB,IACvEjW,KAAK2mE,OAAS,IAAIhrB,GAClB37C,KAAKw1C,OAAS,IAAIm4C,GAAO3tF,KAAK23C,MAC9B33C,KAAK64F,iBAAmB,IAAIwH,GAAiBrgG,KAAK23C,KAAM33C,KAAKw1C,QAC7Dx1C,KAAKgyG,mBAAqB,IAAIpZ,GAC5B54F,KAAK23C,KACL33C,KAAKw1C,OACLx1C,KAAK64F,kBAEP74F,KAAKg5D,KAAO,IAAIg5B,GAAKhyF,KAAK23C,KAAM33C,KAAKw1C,QACrCx1C,KAAKy9G,SAAW,IAAIvzB,GAAelqF,KAAK23C,KAAM33C,KAAKw1C,QACnDx1C,KAAK6kE,QAAU,IAAI8X,GAAc38E,KAAK23C,MACtC33C,KAAK4mE,aAAe,IAAIigC,GAAa7mG,KAAK23C,MAC1C33C,KAAKyoG,WAAa,IAAI9lB,GAAc3iF,KAAK23C,MACzC33C,KAAKu5G,aAAe,IAAIxH,GACtB/xG,KAAK23C,KACL33C,KAAKw1C,OACLx1C,KAAK64F,iBACL74F,KAAKgyG,oBAGPhyG,KAAK09G,aAAe,IAAIh3C,GACtB1mE,KAAK23C,KACL33C,KAAK62C,OACL72C,KAAK2mE,OACL3mE,KAAK4mE,cAEP5mE,KAAK29G,aAAe,IAAIlnC,GAAaz2E,KAAK23C,KAAM33C,KAAK62C,OAAQ72C,KAAK2mE,QAElE3mE,KAAK23C,KAAK6wD,QAAqB,YAAI,IAAI+R,GAAYv6G,KAAK23C,KAAM,IAAK,KACnE33C,KAAK23C,KAAK6wD,QAAoB,WAAIxoG,KAAKyoG,WAGvCzoG,KAAKw1C,OAAOooE,UAGZ59G,KAAKk2D,WAAWpqD,GAGhB9L,KAAK69G,QAAQ9zG,EACf,CCzKO,SAAS+zG,GAAgBC,GAE9B,IAAK,IAAMC,KAAeD,EACpB17G,OAAOzB,UAAUH,eAAeK,KAAKi9G,EAAeC,KACtDD,EAAcC,GAAaC,UAAYF,EAAcC,GAAaE,KAClEH,EAAcC,GAAaE,KAAO,GAGxC,CASO,SAASC,GAAgBJ,GAE9B,IAAK,IAAMC,KAAeD,EACxB,GAAI17G,OAAOzB,UAAUH,eAAeK,KAAKi9G,EAAeC,IAClDD,EAAcC,GAAaC,UAAW,CACxC,IAAK,IAAIpvG,EAAI,EAAGA,EAAIkvG,EAAcC,GAAaC,UAAUt5G,OAAQkK,IAC/DkvG,EAAcC,GAAaC,UAAUpvG,GAAG6rB,WAAWod,YACjDimE,EAAcC,GAAaC,UAAUpvG,IAGzCkvG,EAAcC,GAAaC,UAAY,EACzC,CAGN,CAuBO,SAASG,GAAcJ,EAAaD,EAAeM,GACxD,IAAI/yF,EA0BJ,OAxBIjpB,OAAOzB,UAAUH,eAAeK,KAAKi9G,EAAeC,GAGlDD,EAAcC,GAAaC,UAAUt5G,OAAS,GAChD2mB,EAAUyyF,EAAcC,GAAaC,UAAU,GAC/CF,EAAcC,GAAaC,UAAUxvE,UAGrCnjB,EAAUzpB,SAASy8G,gBACjB,6BACAN,GAEFK,EAAahkG,YAAYiR,KAI3BA,EAAUzpB,SAASy8G,gBACjB,6BACAN,GAEFD,EAAcC,GAAe,CAAEE,KAAM,GAAID,UAAW,IACpDI,EAAahkG,YAAYiR,IAE3ByyF,EAAcC,GAAaE,KAAKp3G,KAAKwkB,GAC9BA,CACT,CD0FArW,GAAQuoG,GAAQ58G,WAOhB48G,GAAQ58G,UAAUs1D,WAAa,SAAUpqD,GAAS,IAAAk5B,EAAAhlC,KAKhD,GAJgB,OAAZ8L,IACFA,OAAU7J,QAGIA,IAAZ6J,EAAuB,EAEN,IADAyyG,GAAUC,SAAS1yG,EAAS+7F,KAE7Cx+D,QAAQjpC,MACN,2DACAqmE,IAuDJ,GAjDA2P,GADe,CAAC,SAAU,UAAW,cACTp2E,KAAK8L,QAASA,QAGnB7J,IAAnB6J,EAAQsnG,SACVtnG,EAAQsnG,OEvME,SACdC,EACAoL,GAEA,IACE,IAA4DC,EAAAxvF,GAA1BuvF,EAAQ76G,MAAM,SAAU,GAAE,GAArD+6G,EAAWD,EAAA,GAAEE,EAAUF,EAAA,GACxBG,EAA0B,MAAfF,EAAsBA,EAAYt0G,cAAgB,KAC7Dy0G,EAAwB,MAAdF,EAAqBA,EAAWxoF,cAAgB,KAEhE,GAAIyoF,GAAYC,EAAS,CACvB,IAGOhwF,EAHDk+B,EAAO6xD,EAAW,IAAMC,EAC9B,GAAIz8G,OAAOzB,UAAUH,eAAeK,KAAKuyG,EAASrmD,GAChD,OAAOA,EAEP3jB,QAAQC,KAAIiC,GAAAzc,EAAAxf,mBAAAA,OAAoBwvG,oBAAOh+G,KAAAguB,EAAgB+vF,OAE1D,CAED,GAAIA,EAAU,CACZ,IAAM7xD,EAAO6xD,EACb,GAAIx8G,OAAOzB,UAAUH,eAAeK,KAAKuyG,EAASrmD,GAChD,OAAOA,EAEP3jB,QAAQC,KAAI,oBAAAh6B,OAAqBuvG,GAEpC,CAID,OAFAx1E,QAAQC,KAAI,kBAAAh6B,OAAmBmvG,iCAExB,IACR,CAAC,MAAOr+G,GAMP,OALAipC,QAAQjpC,MAAMA,GACdipC,QAAQC,KAAI,6CAAAh6B,OACmCmvG,iCAGxC,IACR,CACH,CFiKuBM,CACfjzG,EAAQunG,SAAWrzG,KAAK8L,QAAQunG,QAChCvnG,EAAQsnG,SAKZtnG,EAAU9L,KAAK4mE,aAAa1Q,WAAWpqD,EAAQ+3F,OAAQ/3F,GAEvD9L,KAAKw1C,OAAO0gB,WAAWpqD,GAGvB9L,KAAK2mE,OAAOzQ,WAAWpqD,EAAQ66D,QAC/B3mE,KAAK09G,aAAaxnD,WAAWpqD,EAAQ8iC,OACrC5uC,KAAK29G,aAAaznD,WAAWpqD,EAAQmjC,OACrCjvC,KAAK6kE,QAAQ3O,WAAWpqD,EAAQ+4D,SAChC7kE,KAAKu5G,aAAarjD,WAAWpqD,EAAQytG,aAAcztG,EAAS9L,KAAK8L,SAEjE9L,KAAKgyG,mBAAmB97C,WAAWpqD,EAAQwtG,aAC3Ct5G,KAAKy9G,SAASvnD,WAAWpqD,EAAQwtG,aACjCt5G,KAAK64F,iBAAiB3iC,WAAWpqD,EAAQwtG,kBAGlBr3G,IAAnB6J,EAAQ66D,QACV3mE,KAAK23C,KAAKwvB,QAAQlxD,KAAK,gBAMrB,cAAenK,IACZ9L,KAAKg/G,eACRh/G,KAAKg/G,aAAe,IAAIC,GACtBj/G,KACAA,KAAK23C,KAAKu3C,UACVuqB,GACAz5G,KAAKw1C,OAAOo4C,WACZ8rB,KAIJ15G,KAAKg/G,aAAa9oD,WAAWpqD,EAAQqtG,YAInCn5G,KAAKg/G,eAAsD,IAAtCh/G,KAAKg/G,aAAalzG,QAAQqjC,QAAkB,CACnE,IAAM+vE,EAAiB,CACrBtwE,MAAO,CAAE,EACTK,MAAO,CAAE,EACT40D,OAAQ,CAAE,EACVyV,YAAa,CAAE,EACfC,aAAc,CAAE,EAChB10C,QAAS,CAAE,EACXjlE,OAAQ,CAAC,GAEX23D,GAAW2nD,EAAetwE,MAAO5uC,KAAK09G,aAAa5xG,SACnDyrD,GAAW2nD,EAAejwE,MAAOjvC,KAAK29G,aAAa7xG,SACnDyrD,GAAW2nD,EAAerb,OAAQ7jG,KAAK4mE,aAAa96D,SAEpDyrD,GAAW2nD,EAAe5F,YAAat5G,KAAK64F,iBAAiB/sF,SAC7DyrD,GAAW2nD,EAAe5F,YAAat5G,KAAKy9G,SAAS3xG,SAErDyrD,GAAW2nD,EAAe5F,YAAat5G,KAAKgyG,mBAAmBlmG,SAC/DyrD,GAAW2nD,EAAe3F,aAAcv5G,KAAKu5G,aAAaztG,SAC1DyrD,GAAW2nD,EAAer6C,QAAS7kE,KAAK6kE,QAAQ/4D,SAGhDyrD,GAAW2nD,EAAet/G,OAAQI,KAAKw1C,OAAO1pC,SAC9CyrD,GAAW2nD,EAAet/G,OAAQI,KAAK8L,SAEvC9L,KAAKg/G,aAAaG,iBAAiBD,EACrC,MAG2Bj9G,IAAvB6J,EAAQ0tG,YACiB,IAAvB1tG,EAAQ0tG,gBACav3G,IAAnBjC,KAAKo/G,YACPp/G,KAAKo/G,UAAY,IAAIC,GAAUr/G,KAAKw1C,OAAOq2C,OAC3C7rF,KAAKo/G,UAAU/pG,GAAG,UAAU,WAC1B2vB,EAAK2S,KAAKwvB,QAAQlxD,KAAK,WACzB,WAGqBhU,IAAnBjC,KAAKo/G,YACPp/G,KAAKo/G,UAAUxgF,iBACR5+B,KAAKo/G,WAEdp/G,KAAK23C,KAAKwvB,QAAQlxD,KAAK,aAGzBjW,KAAK23C,KAAKwvB,QAAQlxD,KAAK,YAGzBjW,KAAKw1C,OAAOs2C,UAEZ9rF,KAAK23C,KAAKwvB,QAAQlxD,KAAK,kBACzB,CACF,EAWAunG,GAAQ58G,UAAU0+G,sBAAwB,WACxC,IAAM1wE,EAAQ5uC,KAAK23C,KAAK/I,MAClBK,EAAQjvC,KAAK23C,KAAK1I,MAIxB,IAAK,IAAMu2B,KAHXxlE,KAAK23C,KAAK4wB,YAAc,GACxBvoE,KAAK23C,KAAK4jC,YAAc,GAEH3sC,EACfvsC,OAAOzB,UAAUH,eAAeK,KAAK8tC,EAAO42B,KAE3CxlE,KAAKyoG,WAAWnf,iBAAiB9jB,KACD,IAAjC52B,EAAM42B,GAAQ15D,QAAQ84D,QAEtB5kE,KAAK23C,KAAK4wB,YAAYzhE,KAAK8nC,EAAM42B,GAAQl+D,KAK/C,IAAK,IAAMouE,KAAUzmC,EACnB,GAAI5sC,OAAOzB,UAAUH,eAAeK,KAAKmuC,EAAOymC,GAAS,CACvD,IAAMtoC,EAAO6B,EAAMymC,GAIb6B,EAAW3oC,EAAMxB,EAAK27B,QACtBuO,EAAS1oC,EAAMxB,EAAK07B,MACpBy2C,OAAgCt9G,IAAbs1E,QAAqCt1E,IAAXq1E,GAGhDt3E,KAAKyoG,WAAWlf,iBAAiB7T,KACV,IAAxBtoC,EAAKthC,QAAQ84D,QACb26C,IAC4B,IAA5BhoC,EAASzrE,QAAQ84D,SACS,IAA1B0S,EAAOxrE,QAAQ84D,QAGf5kE,KAAK23C,KAAK4jC,YAAYz0E,KAAKsmC,EAAK9lC,GAEpC,CAEJ,EAKAk2G,GAAQ58G,UAAUsmE,mBAAqB,WAAY,IAAA3hC,EAAAvlC,KAGjDA,KAAK23C,KAAKwvB,QAAQ9xD,GAAG,gBAAgB,WACnCkwB,EAAKo4E,aAAa1zB,eAClB1kD,EAAKoS,KAAKwvB,QAAQlxD,KAAK,eACzB,IAGAjW,KAAK23C,KAAKwvB,QAAQ9xD,GAAG,gBAAgB,WAEnCkwB,EAAKkjE,WAAWxe,eAChB1kD,EAAK+5E,wBAEL/5E,EAAKi6E,kBAAkBj6E,EAAKoS,KAAK/I,OACjCrJ,EAAKi6E,kBAAkBj6E,EAAKoS,KAAK1I,OAEjC1J,EAAKoS,KAAKwvB,QAAQlxD,KAAK,mBACvBsvB,EAAKoS,KAAKwvB,QAAQlxD,KAAK,iBACzB,GACF,EAYAunG,GAAQ58G,UAAUi9G,QAAU,SAAU9zG,GAQpC,GANA/J,KAAK23C,KAAKwvB,QAAQlxD,KAAK,gBACvBjW,KAAK23C,KAAKwvB,QAAQlxD,KAAK,cAGvBjW,KAAK64F,iBAAiBgI,cAElB92F,GAAQA,EAAK2iC,MAAQ3iC,EAAK6kC,OAAS7kC,EAAKklC,OAC1C,MAAM,IAAIO,YACR,kGAQJ,GAFAxvC,KAAKk2D,WAAWnsD,GAAQA,EAAK+B,SAEzB/B,GAAQA,EAAK2iC,IAAjB,CACErD,QAAQC,KACN,6PAGF,IAAMgJ,EAAUD,GAAWtoC,EAAK2iC,KAChC1sC,KAAK69G,QAAQvrE,EAaf,MAXO,GAAIvoC,GAAQA,EAAK01G,MAAjB,CAELp2E,QAAQC,KACN,qQAEF,IAAMo2E,EAAYlsE,GAAWzpC,EAAK01G,OAClCz/G,KAAK69G,QAAQ6B,EAKf,MAFE1/G,KAAK09G,aAAaG,QAAQ9zG,GAAQA,EAAK6kC,OAAO,GAC9C5uC,KAAK29G,aAAaE,QAAQ9zG,GAAQA,EAAKklC,OAAO,GAIhDjvC,KAAK23C,KAAKwvB,QAAQlxD,KAAK,gBAGvBjW,KAAK23C,KAAKwvB,QAAQlxD,KAAK,eAGvBjW,KAAK23C,KAAKwvB,QAAQlxD,KAAK,cACzB,EAQAunG,GAAQ58G,UAAUg+B,QAAU,WAsB1B,IAAK,IAAM4mC,KArBXxlE,KAAK23C,KAAKwvB,QAAQlxD,KAAK,WAEvBjW,KAAK23C,KAAKwvB,QAAQzxD,MAClB1V,KAAK0V,aAGE1V,KAAK2mE,cACL3mE,KAAKw1C,cACLx1C,KAAK64F,wBACL74F,KAAKgyG,0BACLhyG,KAAKg5D,YACLh5D,KAAKy9G,gBACLz9G,KAAK6kE,eACL7kE,KAAK4mE,oBACL5mE,KAAKyoG,kBACLzoG,KAAKu5G,oBACLv5G,KAAK09G,oBACL19G,KAAK29G,oBACL39G,KAAKg/G,oBACLh/G,KAAK62C,OAES72C,KAAK23C,KAAK/I,MACxBvsC,OAAOzB,UAAUH,eAAeK,KAAKd,KAAK23C,KAAK/I,MAAO42B,WAEpDxlE,KAAK23C,KAAK/I,MAAM42B,GAGzB,IAAK,IAAMkQ,KAAU11E,KAAK23C,KAAK1I,MACxB5sC,OAAOzB,UAAUH,eAAeK,KAAKd,KAAK23C,KAAK1I,MAAOymC,WAEpD11E,KAAK23C,KAAK1I,MAAMymC,GAIzB4gC,GAAmBt2G,KAAK23C,KAAKu3C,UAC/B,EAWAsuB,GAAQ58G,UAAU4+G,kBAAoB,SAAUvxG,GAC9C,IAAI3G,EAGAq4G,OAAW19G,EACX29G,OAAW39G,EACX49G,EAAa,EACjB,IAAKv4G,KAAM2G,EACT,GAAI5L,OAAOzB,UAAUH,eAAeK,KAAKmN,EAAK3G,GAAK,CACjD,IAAMhE,EAAQ2K,EAAI3G,GAAIwzD,gBACR74D,IAAVqB,IACFq8G,OAAwB19G,IAAb09G,EAAyBr8G,EAAQ3D,KAAKgO,IAAIrK,EAAOq8G,GAC5DC,OAAwB39G,IAAb29G,EAAyBt8G,EAAQ3D,KAAK+N,IAAIpK,EAAOs8G,GAC5DC,GAAcv8G,EAElB,CAIF,QAAiBrB,IAAb09G,QAAuC19G,IAAb29G,EAC5B,IAAKt4G,KAAM2G,EACL5L,OAAOzB,UAAUH,eAAeK,KAAKmN,EAAK3G,IAC5C2G,EAAI3G,GAAIw4G,cAAcH,EAAUC,EAAUC,EAIlD,EAOArC,GAAQ58G,UAAUm/G,SAAW,WAC3B,OAAQ//G,KAAKo/G,WAAap/G,KAAKo/G,UAAUY,MAC3C,EAEAxC,GAAQ58G,UAAUkrF,QAAU,WAC1B,OAAO9rF,KAAKw1C,OAAOs2C,QAAQjrF,MAAMb,KAAKw1C,OAAQv0C,UAChD,EACAu8G,GAAQ58G,UAAU26F,YAAc,WAC9B,OAAOv7F,KAAKw1C,OAAO+lD,YAAY16F,MAAMb,KAAKw1C,OAAQv0C,UACpD,EACAu8G,GAAQ58G,UAAU+rF,YAAc,WAC9B,OAAO3sF,KAAKw1C,OAAOm3C,YAAY9rF,MAAMb,KAAKw1C,OAAQv0C,UACpD,EAkBAu8G,GAAQ58G,UAAUulF,SAAW,WAC3B,OAAOnmF,KAAKyoG,WAAWtiB,SAAStlF,MAAMb,KAAKyoG,WAAYxnG,UACzD,EAEAu8G,GAAQ58G,UAAU42E,UAAY,WAC5B,OAAOx3E,KAAKyoG,WAAWjxB,UAAU32E,MAAMb,KAAKyoG,WAAYxnG,UAC1D,EACAu8G,GAAQ58G,UAAUopF,YAAc,WAC9B,OAAOhqF,KAAKyoG,WAAWze,YAAYnpF,MAAMb,KAAKyoG,WAAYxnG,UAC5D,EACAu8G,GAAQ58G,UAAUq/G,QAAU,WAC1B,OAAOjgH,KAAKyoG,WAAWwX,QAAQp/G,MAAMb,KAAKyoG,WAAYxnG,UACxD,EACAu8G,GAAQ58G,UAAUs/G,kBAAoB,WACpC,OAAOlgH,KAAKyoG,WAAWyX,kBAAkBr/G,MAAMb,KAAKyoG,WAAYxnG,UAClE,EACAu8G,GAAQ58G,UAAUsiF,oBAAsB,WACtC,OAAOljF,KAAKyoG,WAAWvlB,oBAAoBriF,MAAMb,KAAKyoG,WAAYxnG,UACpE,EACAu8G,GAAQ58G,UAAUu/G,iBAAmB,WACnC,OAAOngH,KAAKyoG,WAAW0X,iBAAiBt/G,MAAMb,KAAKyoG,WAAYxnG,UACjE,EACAu8G,GAAQ58G,UAAUw/G,oBAAsB,WACtC,OAAOpgH,KAAKyoG,WAAW2X,oBAAoBv/G,MAAMb,KAAKyoG,WAAYxnG,UACpE,EACAu8G,GAAQ58G,UAAUwmF,kBAAoB,WACpC,OAAOpnF,KAAKyoG,WAAWrhB,kBAAkBvmF,MAAMb,KAAKyoG,WAAYxnG,UAClE,EACAu8G,GAAQ58G,UAAUy/G,YAAc,WAC9B,OAAOrgH,KAAKyoG,WAAW4X,YAAYx/G,MAAMb,KAAKyoG,WAAYxnG,UAC5D,EACAu8G,GAAQ58G,UAAU0mF,aAAe,WAC/B,OAAOtnF,KAAKyoG,WAAWnhB,aAAazmF,MAAMb,KAAKyoG,WAAYxnG,UAC7D,EACAu8G,GAAQ58G,UAAU0/G,WAAa,WAC7B,OAAOtgH,KAAKyoG,WAAW6X,WAAWz/G,MAAMb,KAAKyoG,WAAYxnG,UAC3D,EASAu8G,GAAQ58G,UAAU+nG,gBAAkB,WAClC,OAAO3oG,KAAKyoG,WAAWE,gBAAgB9nG,MAAMb,KAAKyoG,WAAYxnG,UAChE,EAEAu8G,GAAQ58G,UAAU2/G,QAAU,WAC1B,OAAOvgH,KAAK4mE,aAAa25C,QAAQ1/G,MAAMb,KAAK4mE,aAAc3lE,UAC5D,EACAu8G,GAAQ58G,UAAUsyG,eAAiB,WACjC,OAAOlzG,KAAKu5G,aAAarG,eAAeryG,MAAMb,KAAKu5G,aAAct4G,UACnE,EACAu8G,GAAQ58G,UAAUuyG,gBAAkB,WAClC,OAAOnzG,KAAKu5G,aAAapG,gBAAgBtyG,MAAMb,KAAKu5G,aAAct4G,UACpE,EACAu8G,GAAQ58G,UAAUg2G,YAAc,WAC9B,OAAO52G,KAAKu5G,aAAa3C,YAAY/1G,MAAMb,KAAKu5G,aAAct4G,UAChE,EACAu8G,GAAQ58G,UAAUw0C,SAAW,WAC3B,OAAOp1C,KAAKu5G,aAAankE,SAASv0C,MAAMb,KAAKu5G,aAAct4G,UAC7D,EACAu8G,GAAQ58G,UAAU4/G,aAAe,WAE/B,OADAn3E,QAAQC,KAAK,4DACNtpC,KAAKu5G,aAAankE,SAASv0C,MAAMb,KAAKu5G,aAAct4G,UAC7D,EACAu8G,GAAQ58G,UAAUi2G,YAAc,WAC9B,OAAO72G,KAAKu5G,aAAa1C,YAAYh2G,MAAMb,KAAKu5G,aAAct4G,UAChE,EACAu8G,GAAQ58G,UAAUk2G,aAAe,WAC/B,OAAO92G,KAAKu5G,aAAazC,aAAaj2G,MAAMb,KAAKu5G,aAAct4G,UACjE,EACAu8G,GAAQ58G,UAAUq2G,eAAiB,WACjC,OAAOj3G,KAAKu5G,aAAatC,eAAep2G,MAAMb,KAAKu5G,aAAct4G,UACnE,EACAu8G,GAAQ58G,UAAU6/G,aAAe,WAC/B,OAAOzgH,KAAK09G,aAAa+C,aAAa5/G,MAAMb,KAAK09G,aAAcz8G,UACjE,EACAu8G,GAAQ58G,UAAU+pG,YAAc,WAC9B,OAAO3qG,KAAK09G,aAAa/S,YAAY9pG,MAAMb,KAAK09G,aAAcz8G,UAChE,EACAu8G,GAAQ58G,UAAU8/G,eAAiB,WACjC,OAAO1gH,KAAK09G,aAAagD,eAAe7/G,MAAMb,KAAK09G,aAAcz8G,UACnE,EACAu8G,GAAQ58G,UAAUgtG,SAAW,WAC3B,OAAO5tG,KAAK09G,aAAa9P,SAAS/sG,MAAMb,KAAK09G,aAAcz8G,UAC7D,EACAu8G,GAAQ58G,UAAU+/G,eAAiB,WACjC,OAAO3gH,KAAK09G,aAAaiD,eAAe9/G,MAAMb,KAAK09G,aAAcz8G,UACnE,EACAu8G,GAAQ58G,UAAUggH,kBAAoB,SAAUC,GAC9C,YAAkC5+G,IAA9BjC,KAAK23C,KAAK/I,MAAMiyE,GACX7gH,KAAK09G,aAAakD,kBAAkB//G,MACzCb,KAAK09G,aACLz8G,WAGKjB,KAAK29G,aAAaiD,kBAAkB//G,MACzCb,KAAK29G,aACL18G,UAGN,EACAu8G,GAAQ58G,UAAUkgH,kBAAoB,WACpC,OAAO9gH,KAAK09G,aAAaoD,kBAAkBjgH,MACzCb,KAAK09G,aACLz8G,UAEJ,EACAu8G,GAAQ58G,UAAUi+E,gBAAkB,WAClC,OAAO7+E,KAAK6kE,QAAQga,gBAAgBh+E,MAAMb,KAAK6kE,QAAS5jE,UAC1D,EACAu8G,GAAQ58G,UAAUg+E,eAAiB,WACjC,OAAO5+E,KAAK6kE,QAAQ+Z,eAAe/9E,MAAMb,KAAK6kE,QAAS5jE,UACzD,EACAu8G,GAAQ58G,UAAUy+E,UAAY,WAC5B,OAAOr/E,KAAK6kE,QAAQwa,UAAUx+E,MAAMb,KAAK6kE,QAAS5jE,UACpD,EACAu8G,GAAQ58G,UAAUg/F,aAAe,WAC/B,OAAO5/F,KAAK64F,iBAAiB+G,aAAa/+F,MACxCb,KAAK64F,iBACL53F,UAEJ,EACAu8G,GAAQ58G,UAAU+5F,aAAe,WAC/B,OAAO36F,KAAK64F,iBAAiB8B,aAAa95F,MACxCb,KAAK64F,iBACL53F,UAEJ,EACAu8G,GAAQ58G,UAAUg6F,iBAAmB,WACnC,OAAO56F,KAAK64F,iBAAiBqK,mBAAmBriG,MAC9Cb,KAAK64F,iBACL53F,UAEJ,EACAu8G,GAAQ58G,UAAUmgH,iBAAmB,WACnC,OAAO/gH,KAAK64F,iBAAiBsK,mBAAmBtiG,MAC9Cb,KAAK64F,iBACL53F,UAEJ,EACAu8G,GAAQ58G,UAAU65F,UAAY,WAC5B,IAAMhgE,EAAOz6B,KAAK64F,iBAAiB4B,UAAU55F,MAC3Cb,KAAK64F,iBACL53F,WAEF,YAAagB,IAATw4B,QAAkCx4B,IAAZw4B,EAAKnzB,GACtBmzB,EAAKnzB,GAEPmzB,CACT,EACA+iF,GAAQ58G,UAAUggG,UAAY,WAC5B,IAAMxzD,EAAOptC,KAAK64F,iBAAiB+H,UAAU//F,MAC3Cb,KAAK64F,iBACL53F,WAEF,YAAagB,IAATmrC,QAAkCnrC,IAAZmrC,EAAK9lC,GACtB8lC,EAAK9lC,GAEP8lC,CACT,EACAowE,GAAQ58G,UAAUogH,YAAc,WAC9B,OAAOhhH,KAAK64F,iBAAiBmoB,YAAYngH,MACvCb,KAAK64F,iBACL53F,UAEJ,EACAu8G,GAAQ58G,UAAUqgH,YAAc,WAC9B,OAAOjhH,KAAK64F,iBAAiBooB,YAAYpgH,MACvCb,KAAK64F,iBACL53F,UAEJ,EACAu8G,GAAQ58G,UAAUigG,YAAc,WAC9B7gG,KAAK64F,iBAAiBgI,YAAYhgG,MAAMb,KAAK64F,iBAAkB53F,WAC/DjB,KAAK64F,iBAAiBqoB,sBAAsBrgH,MAAMb,KAAK64F,kBACvD74F,KAAKmhH,QACP,EACA3D,GAAQ58G,UAAUugH,OAAS,WACzB,OAAOnhH,KAAKy9G,SAAS0D,OAAOtgH,MAAMb,KAAKy9G,SAAUx8G,UACnD,EACAu8G,GAAQ58G,UAAUwgH,SAAW,WAC3B,OAAOphH,KAAKg5D,KAAKooD,SAASvgH,MAAMb,KAAKg5D,KAAM/3D,UAC7C,EACAu8G,GAAQ58G,UAAUozF,gBAAkB,WAClC,OAAOh0F,KAAKg5D,KAAKg7B,gBAAgBnzF,MAAMb,KAAKg5D,KAAM/3D,UACpD,EACAu8G,GAAQ58G,UAAU29E,IAAM,WACtB,OAAOv+E,KAAKg5D,KAAKulB,IAAI19E,MAAMb,KAAKg5D,KAAM/3D,UACxC,EACAu8G,GAAQ58G,UAAUoR,OAAS,WACzB,OAAOhS,KAAKg5D,KAAKhnD,OAAOnR,MAAMb,KAAKg5D,KAAM/3D,UAC3C,EACAu8G,GAAQ58G,UAAU+6F,MAAQ,WACxB,OAAO37F,KAAKg5D,KAAK2iC,MAAM96F,MAAMb,KAAKg5D,KAAM/3D,UAC1C,EACAu8G,GAAQ58G,UAAUgyF,YAAc,WAC9B,OAAO5yF,KAAKg5D,KAAK45B,YAAY/xF,MAAMb,KAAKg5D,KAAM/3D,UAChD,EACAu8G,GAAQ58G,UAAUygH,2BAA6B,WAC7C,IAAIv1G,EAAU,CAAA,EAId,OAHI9L,KAAKg/G,eACPlzG,EAAU9L,KAAKg/G,aAAasC,WAAWzgH,MAAMb,KAAKg/G,eAE7ClzG,CACT,kECpiBO,SACLwB,EACAgE,EACAokC,EACAC,EACA05C,EACA0uB,EACAM,EACAlkG,GAEA,GAAc,GAAVw7B,EAAa,CACXA,EAAS,IAEXrkC,GADAqkC,IAAW,GAGb,IAAMlhC,EAAO2pG,GAAc,OAAQL,EAAeM,GAClD5pG,EAAK8sG,eAAe,KAAM,IAAKj0G,EAAI,GAAMooC,GACzCjhC,EAAK8sG,eAAe,KAAM,IAAKjwG,GAC/BmD,EAAK8sG,eAAe,KAAM,QAAS7rE,GACnCjhC,EAAK8sG,eAAe,KAAM,SAAU5rE,GACpClhC,EAAK8sG,eAAe,KAAM,QAASlyB,GAC/Bl1E,GACF1F,EAAK8sG,eAAe,KAAM,QAASpnG,EAEvC,CACF,YAxFO,SACL7M,EACAgE,EACAkwG,EACAzD,EACAM,EACAoD,GAEA,IAAI1iG,EAoBJ,GAnB2B,UAAvByiG,EAAcrnG,QAChB4E,EAAQq/F,GAAc,SAAUL,EAAeM,IACzCkD,eAAe,KAAM,KAAMj0G,GACjCyR,EAAMwiG,eAAe,KAAM,KAAMjwG,GACjCyN,EAAMwiG,eAAe,KAAM,IAAK,GAAMC,EAAclqG,SAEpDyH,EAAQq/F,GAAc,OAAQL,EAAeM,IACvCkD,eAAe,KAAM,IAAKj0G,EAAI,GAAMk0G,EAAclqG,MACxDyH,EAAMwiG,eAAe,KAAM,IAAKjwG,EAAI,GAAMkwG,EAAclqG,MACxDyH,EAAMwiG,eAAe,KAAM,QAASC,EAAclqG,MAClDyH,EAAMwiG,eAAe,KAAM,SAAUC,EAAclqG,YAGxBrV,IAAzBu/G,EAAcE,QAChB3iG,EAAMwiG,eAAe,KAAM,QAASC,EAAcE,QAEpD3iG,EAAMwiG,eAAe,KAAM,QAASC,EAAcnyB,UAAY,cAG1DoyB,EAAU,CACZ,IAAM/uE,EAAQ0rE,GAAc,OAAQL,EAAeM,GAC/CoD,EAASE,UACXr0G,GAAQm0G,EAASE,SAGfF,EAASG,UACXtwG,GAAQmwG,EAASG,SAEfH,EAASnoG,UACXo5B,EAAMmvE,YAAcJ,EAASnoG,SAG3BmoG,EAASpyB,WACX38C,EAAM6uE,eAAe,KAAM,QAASE,EAASpyB,UAAY,cAE3D38C,EAAM6uE,eAAe,KAAM,IAAKj0G,GAChColC,EAAM6uE,eAAe,KAAM,IAAKjwG,EAClC,CAEA,OAAOyN,CACT,gBApGO,SACLi/F,EACAD,EACA+D,EACAC,GAEA,IAAIz2F,EA4BJ,OA1BIjpB,OAAOzB,UAAUH,eAAeK,KAAKi9G,EAAeC,GAGlDD,EAAcC,GAAaC,UAAUt5G,OAAS,GAChD2mB,EAAUyyF,EAAcC,GAAaC,UAAU,GAC/CF,EAAcC,GAAaC,UAAUxvE,UAGrCnjB,EAAUzpB,SAASkH,cAAci1G,QACZ/7G,IAAjB8/G,EACFD,EAAaC,aAAaz2F,EAASy2F,GAEnCD,EAAaznG,YAAYiR,KAK7BA,EAAUzpB,SAASkH,cAAci1G,GACjCD,EAAcC,GAAe,CAAEE,KAAM,GAAID,UAAW,SAC/Bh8G,IAAjB8/G,EACFD,EAAaC,aAAaz2F,EAASy2F,GAEnCD,EAAaznG,YAAYiR,IAG7ByyF,EAAcC,GAAaE,KAAKp3G,KAAKwkB,GAC9BA,CACT,oDA3FO,SAAuByyF,GAC5BD,GAAgBC,GAChBI,GAAgBJ,GAChBD,GAAgBC,EAClB,IE1CaiE,GAAU,CACrBprE,OAAAA,GACAqrE,UAAAA,GACAC,YAAAA,GACAra,WAAAA,GACAsa,WAAYF,GACZG,aAAc5uE","x_google_ignoreList":[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,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,65,66,67,68,69,70,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,98,99,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,132,133,134,135,136,137,138,139,140,141,142,143,144,145,146,147,148,149,150,151,152,153,154,155,156,157,158,159,160,161,162,163,164,165,166,167,168,169,170,171,172,173,174,175,176,177,178,179,180,181,182,183,184,185,186,187,188,189,190,191,192,193,194,195,196,197,198,199,200,201,202,203,204,205,206,207,208,209,210,211,212,213,214,215,216,217,218,219,220,221,222,223,224,225,226,227,228,229,230,231,232,233,234,235,236,237,238,239,240,241,242,243,244,245,246,247,248,249,250,251,252,253,254,255,256,257,258,259,260,261,262,263,264,265,266,267,268,269,270,271,272,273,274,275,276,277,278,279,280,281,282,283,284,285,286,287,288,289,290,291,292,293,294,295,296,297,298,299,305,306,307,308,309,310,311,312,313,314,315,316,318,319,320,321,322,323,324,325,326,327,328,329,330,331,332,333,334,335,336,337,338,339,340,341,342,343,344,345,346,347,348,349,350,351,352,353,354,355,356,357,358,359,360,361,362,363,364,365,366,367,368,369,370,371,372,373,374,375,376,377,378,379,380,381,382,383,384,385,386,387,388,389,390,391,392,393,394,395,396,397,398,399,400,401,402,403,404,405,406,407,408,409,410,411,412,413,414,415,416,417,418,419,420,421,422,423,424,425,426,427,428,429,430,431,432,433,434,435,436,437,438,439,440,441,442,443,444,445,446,472,473,474,475,476,477,478,479,503,508,511,512,513,517,518,519,520]} \ No newline at end of file diff --git a/Perlite/perlite/.scripts/build.sh b/Perlite/perlite/.scripts/build.sh new file mode 100644 index 0000000..be2281a --- /dev/null +++ b/Perlite/perlite/.scripts/build.sh @@ -0,0 +1,73 @@ +#!/bin/bash + +# update JS dependencies + +# force update on asset-packagist +curl https://asset-packagist.org/package/npm-asset/katex -D - >/dev/null +curl https://asset-packagist.org/package/npm-asset/vis-network -D - >/dev/null +curl https://asset-packagist.org/package/npm-asset/jquery -D - >/dev/null +curl https://asset-packagist.org/package/npm-asset/highlightjs--cdn-assets -D - >/dev/null +# curl https://asset-packagist.org/package/npm-asset/mermaid -D - >/dev/null +# curl https://asset-packagist.org/package/npm-asset/roughjs -D - >/dev/null +# curl https://asset-packagist.org/package/npm-asset/stylis -D - >/dev/null +# curl https://asset-packagist.org/package/npm-asset/mlly -D - >/dev/null +# curl https://asset-packagist.org/package/npm-asset/tinyexec -D - >/dev/null +# curl https://asset-packagist.org/package/npm-asset/package-manager-detector -D - >/dev/null +# curl https://asset-packagist.org/package/npm-asset/iconify--utils -D - >/dev/null +# curl https://asset-packagist.org/package/npm-asset/antfu--install-pkg -D - >/dev/null + + + + + +# composer clear-cache +# rm -rf vendor +composer update -v + +# update highlight js +cp vendor/npm-asset/highlightjs--cdn-assets/highlight.min.js ../.js/ +cp vendor/npm-asset/highlightjs--cdn-assets/styles/atom-one-dark.min.css ../.styles/ + +# update jquery +cp vendor/npm-asset/jquery/dist/jquery.min.js ../.js/ + +# update katex +cp vendor/npm-asset/katex/dist/katex.min.js ../.js/ +cp vendor/npm-asset/katex/dist/contrib/auto-render.min.js ../.js/ +cp vendor/npm-asset/katex/dist/katex.min.css ../.styles/ +cp -r vendor/npm-asset/katex/dist/fonts ../.styles/ + +# update mermaid +# cp vendor/npm-asset/mermaid/dist/mermaid.min.js ../.js/ +# cp vendor/npm-asset/mermaid/dist/mermaid.min.js.map ../.js/ + +# update vis-network +cp vendor/npm-asset/vis-network/dist/vis-network.min.js ../.js/ +cp vendor/npm-asset/vis-network/dist/vis-network.min.js.map ../.js/ +cp vendor/npm-asset/vis-network/dist/dist/vis-network.min.css ../.styles/ + +# update Parsedown dependencie +cd .. +# composer clear-cache +# rm -rf vendor +composer update -v + + +#cp perlite/vendor/erusev/parsedown/Parsedown.php perlite/ + +# remove old container and images +# docker container rm perlite; +# docker container rm perlite_web; +# docker container rm perlite_web_dev; +# docker image rm sec77/perlite_web:stable; +# docker image rm sec77/perlite; +# docker image rm php; + +# # rebuild and start +# cd perlite +# docker build -t sec77/perlite:latest . --network host; +# cd ..; +# docker-compose --file docker-compose.yml up + + + diff --git a/Perlite/perlite/.scripts/composer.json b/Perlite/perlite/.scripts/composer.json new file mode 100644 index 0000000..2cf46db --- /dev/null +++ b/Perlite/perlite/.scripts/composer.json @@ -0,0 +1,39 @@ +{ + "name": "secure-77/perlite", + "description": "A web based markdown viewer optimized for Obsidian Notes", + "version": "1.5.9", + "type": "project", + "keywords": ["markdown viewer","obsidian notes"], + "homepage": "https://github.com/secure-77/Perlite", + "license": "MIT", + "authors": [ + { + "name": "secure-77", + "email": "sec77@secure77.de", + "homepage": "https://secure77.de" + } + ], + "support": { + "issues": "https://github.com/secure-77/Perlite/issues", + "wiki": "https://github.com/secure-77/Perlite/wiki", + "chat": "https://discord.gg/pkJ347ssWT" + }, + + "repositories": [ + { + "type": "composer", + "url": "https://asset-packagist.org" + } + ], + "config": { + "preferred-install": "dist" + }, + + "require": { + "npm-asset/vis-network": "^9.1", + "npm-asset/katex": ">=0.16.8", + "npm-asset/jquery": "^3.7", + "npm-asset/highlightjs--cdn-assets": "^11.7" + } + +} diff --git a/Perlite/perlite/.scripts/composer.lock b/Perlite/perlite/.scripts/composer.lock new file mode 100644 index 0000000..c339b4a --- /dev/null +++ b/Perlite/perlite/.scripts/composer.lock @@ -0,0 +1,82 @@ +{ + "_readme": [ + "This file locks the dependencies of your project to a known state", + "Read more about it at https://getcomposer.org/doc/01-basic-usage.md#installing-dependencies", + "This file is @generated automatically" + ], + "content-hash": "804283b252f55afc81b79735bfa0c2c1", + "packages": [ + { + "name": "npm-asset/commander", + "version": "8.3.0", + "dist": { + "type": "tar", + "url": "https://registry.npmjs.org/commander/-/commander-8.3.0.tgz" + }, + "type": "npm-asset", + "license": [ + "MIT" + ] + }, + { + "name": "npm-asset/highlightjs--cdn-assets", + "version": "11.11.1", + "dist": { + "type": "tar", + "url": "https://registry.npmjs.org/@highlightjs/cdn-assets/-/cdn-assets-11.11.1.tgz" + }, + "type": "npm-asset", + "license": [ + "BSD-3-Clause" + ] + }, + { + "name": "npm-asset/jquery", + "version": "3.7.1", + "dist": { + "type": "tar", + "url": "https://registry.npmjs.org/jquery/-/jquery-3.7.1.tgz" + }, + "type": "npm-asset", + "license": [ + "MIT" + ] + }, + { + "name": "npm-asset/katex", + "version": "0.16.22", + "dist": { + "type": "tar", + "url": "https://registry.npmjs.org/katex/-/katex-0.16.22.tgz" + }, + "require": { + "npm-asset/commander": ">=8.3.0,<9.0.0" + }, + "type": "npm-asset", + "license": [ + "MIT" + ] + }, + { + "name": "npm-asset/vis-network", + "version": "9.1.9", + "dist": { + "type": "tar", + "url": "https://registry.npmjs.org/vis-network/-/vis-network-9.1.9.tgz" + }, + "type": "npm-asset", + "license": [ + "(Apache-2.0 OR MIT)" + ] + } + ], + "packages-dev": [], + "aliases": [], + "minimum-stability": "stable", + "stability-flags": [], + "prefer-stable": false, + "prefer-lowest": false, + "platform": [], + "platform-dev": [], + "plugin-api-version": "2.6.0" +} diff --git a/Perlite/perlite/.scripts/create_GraphLinking.py b/Perlite/perlite/.scripts/create_GraphLinking.py new file mode 100644 index 0000000..2815351 --- /dev/null +++ b/Perlite/perlite/.scripts/create_GraphLinking.py @@ -0,0 +1,93 @@ +import json +import hashlib + +def remove_extension(path): + return path[:-3] + +def check_array(node_path): + return True + +json_metadata_file = "../Demo/metadata.json" +metadata_temp_file = "/tmp/metadata.temp" +metadata_temp_file_sum = "/tmp/metadata.md5" + +with open(json_metadata_file, "r") as file: + json_data = file.read() + +if json_data is None: + exit() + +json_obj = json.loads(json_data) +if not isinstance(json_obj, list): + exit() + +graph_nodes = [] +graph_edges = [] + +current_node = -1 +node_id = 0 + +# create nodes +for node in json_obj: + node_path = remove_extension(node['relativePath']) + + if check_array(node_path): + graph_nodes.append({'id': node_id, 'label': node['fileName'], 'title': node_path}) + node_id += 1 + +target_id = -1 +source_id = -1 + +for node in json_obj: + node_path = remove_extension(node['relativePath']) + + if check_array(node_path): + if 'links' in node: + for link in node['links']: + source = "" + target = "" + + if 'relativePath' in node: + temp_path = remove_extension(node['relativePath']) + if check_array(temp_path): + source = temp_path + + if 'relativePath' in link: + temp_path = remove_extension(link['relativePath']) + if check_array(temp_path): + target = temp_path + + if source and target: + for element in graph_nodes: + element_title = element['title'] + if element_title == target: + target_id = element['id'] + if element_title == source: + source_id = element['id'] + + edge_exists = any( + edge['from'] == source_id and edge['to'] == target_id or + edge['to'] == source_id and edge['from'] == target_id + for edge in graph_edges + ) + + if target_id != -1 and source_id != -1: + if not edge_exists: + graph_edges.append({'from': source_id, 'to': target_id}) + target_id = -1 + source_id = -1 + +my_graph_nodes = json.dumps(graph_nodes, separators=(',', ':'), ensure_ascii=False) +my_graph_edges = json.dumps(graph_edges, separators=(',', ':'), ensure_ascii=False) + +graph_html = f'' + +with open(metadata_temp_file, "w") as file: + file.write(graph_html) + +with open(metadata_temp_file_sum, "w") as file_handler: + md5_filesum = hashlib.md5() + with open(json_metadata_file, "rb") as json_file: + while chunk := json_file.read(8192): + md5_filesum.update(chunk) + file_handler.write(md5_filesum.hexdigest()) \ No newline at end of file diff --git a/Perlite/perlite/.src/PerliteParsedown.php b/Perlite/perlite/.src/PerliteParsedown.php new file mode 100644 index 0000000..3611598 --- /dev/null +++ b/Perlite/perlite/.src/PerliteParsedown.php @@ -0,0 +1,1158 @@ +BlockTypes['!'] = array('YouTube'); + } + + function text($text) + { + # make sure no definitions are set + $this->DefinitionData = array(); + + # standardize line breaks + $text = str_replace(array("\r\n", "\r"), "\n", $text); + + # remove surrounding line breaks + $text = trim($text, "\n"); + + # split text into lines + $lines = explode("\n", $text); + + # YAML front matter + $parsedYamlBlockText = ""; + if ($lines[0] === '---') { + + # search ending + $yamlBlockArray = array_slice($lines, 1, count($lines)); + $endIndex = 0; + foreach ($yamlBlockArray as $line) { + $endIndex += 1; + if ($line === '---') { + break; + } + } + $yamlBlockArray = array_slice($lines, 0, $endIndex); + $yamlBlockText = implode("\n", $yamlBlockArray); + $lines = array_slice($lines, $endIndex + 1, count($lines)); + $parsedYamlBlockText = $this->yamlFrontmatter($yamlBlockText); + } + + # iterate through lines to identify blocks + $markup = $this->lines($lines); + + # add front matter + $markup = $parsedYamlBlockText . $markup; + # trim line breaks + $markup = trim($markup, "\n"); + + return $markup; + } + + protected function yamlFrontmatter($yaml) + { + + if (!extension_loaded("yaml")) { + return "YAML front matter found but PHP YAML Parse extension is missing!
"; + } else { + + // var_dump($yaml); + $parsed = yaml_parse($yaml); + $yamlText = ' +
+ +
'; + return $yamlText; + } + } + + # + # Callout (based on blockQuotes) + # See: https://help.obsidian.md/How+to/Use+callouts + + + # Callout Block + protected function blockQuote($Line) + { + + + if (preg_match('/^>[ ]?(.*)/', $Line['text'], $matches)) { + $Block = array( + 'element' => array( + 'name' => 'blockquote', + 'handler' => 'lines', + 'text' => (array) $matches[1], + ), + ); + + + if (preg_match('/^>\s?\[\!(.*?)\](.*?)$/m', $Line['text'], $matches)) { + $type = strtolower($matches[1]); + $title = $matches[2]; + + $calloutTitle = $title ?: ucfirst($type); + + # Handle collapsible callouts + $calloutclass = 'callout'; + $calloutStyle = 'unset'; + $collapsibleIcon = array( + 'name' => 'div', + 'text' => '' + ); + $isCollapsed = ''; + $needCollapseIcon = False; + $isCollapsedIcon = ''; + $calloutTitleClass = 'callout-title-inner'; + + if (substr($calloutTitle, 0, 1) == '+') { + $calloutTitle = substr($calloutTitle, 1); + $calloutclass = 'callout is-collapsible'; + $calloutTitleClass = 'callout-title-inner is-collapsible'; + $calloutStyle = 'unset'; + $needCollapseIcon = True; + } + + if (substr($calloutTitle, 0, 1) == '-') { + $calloutTitle = substr($calloutTitle, 1); + $calloutclass = 'callout is-collapsible is-collapsed'; + $calloutStyle = 'none'; + $isCollapsed = 'is-collapsed-callout'; + $isCollapsedIcon = 'is-collapsed'; + $calloutTitleClass = 'callout-title-inner is-collapsed'; + $needCollapseIcon = True; + } + + if ($needCollapseIcon) { + $collapsibleIcon = array( + 'name' => 'div', + 'attributes' => array('class' => 'callout-fold ' . $isCollapsedIcon), + 'elements' => array( + # svg + array( + 'name' => 'svg', + 'attributes' => array( + 'xmlns' => 'http://www.w3.org/2000/svg', + 'width' => '24', + 'height' => '24', + 'viewBox' => '0 0 24 24', + 'fill' => 'none', + 'stroke' => 'currentColor', + 'stroke-width' => '2', + 'stroke-linecap' => 'round', + 'stroke-linejoin' => 'round', + 'class' => 'svg-icon lucide-chevron-down', + ), + # pathes and lines + 'elements' => array(array('name' => '')), + ), + ), + ); + } + + + + $Block = array( + 'element' => array( + 'name' => 'div', + 'attributes' => array( + 'data-callout' => $type, + 'class' => $calloutclass + ), + 'elements' => array( + array( + 'name' => 'div', + 'attributes' => array('class' => 'callout-title'), + 'elements' => array( + # callout icon + array( + 'name' => 'div', + 'attributes' => array('class' => 'callout-icon'), + 'elements' => array( + # svg + array( + 'name' => 'svg', + 'attributes' => array( + 'xmlns' => 'http://www.w3.org/2000/svg', + 'width' => '24', + 'height' => '24', + 'viewBox' => '0 0 24 24', + 'fill' => 'none', + 'stroke' => 'currentColor', + 'stroke-width' => '2', + 'stroke-linecap' => 'round', + 'stroke-linejoin' => 'round', + 'class' => $this->getCalloutIcon($type)[0], + ), + # pathes and lines + 'elements' => $this->getCalloutIcon($type)[1] + ), + ), + ), + # callout title + array( + 'name' => 'div', + 'attributes' => array('class' => $calloutTitleClass), + 'text' => (array) $calloutTitle, + 'handler' => 'lines', + + ), + # collapsible icon + $collapsibleIcon, + ), + ), + # callout content + array( + 'name' => 'div', + 'attributes' => array( + 'class' => 'callout-content ' . $isCollapsed, + ), + 'handler' => 'lines', + ), + + + ) + ), + ); + } + } + + + return $Block; + } + + # Callout Icons + protected function getCalloutIcon($callType) + { + // default = info + $class = 'svg-icon lucide-pencil'; + $pathes = array( + array('name' => 'line x1="18" y1="2" x2="22" y2="6"'), + array('name' => 'path d="M7.5 20.5 19 9l-4-4L3.5 16.5 2 22z"') + ); + + $callType = strtolower($callType); + switch ($callType) { + + case 'abstract': + $class = 'svg-icon lucide-clipboard-list'; + $pathes = array( + array('name' => 'rect x="8" y="2" width="8" height="4" rx="1" ry="1"'), + array('name' => 'path d="M16 4h2a2 2 0 0 1 2 2v14a2 2 0 0 1-2 2H6a2 2 0 0 1-2-2V6a2 2 0 0 1 2-2h2"'), + array('name' => 'path d="M12 11h4"'), + array('name' => 'path d="M12 16h4"'), + array('name' => 'path d="M8 11h.01"'), + array('name' => 'path d="M8 16h.01"'), + ); + break; + case 'info': + $class = 'svg-icon lucide-info'; + $pathes = array( + array('name' => 'circle cx="12" cy="12" r="10"'), + array('name' => 'line x1="12" y1="16" x2="12" y2="12"'), + array('name' => 'line x1="12" y1="8" x2="12.01" y2="8"'), + ); + break; + case 'todo': + $class = 'svg-icon lucide-check-circle-2'; + $pathes = array( + array('name' => 'path d="M12 22c5.523 0 10-4.477 10-10S17.523 2 12 2 2 6.477 2 12s4.477 10 10 10z"'), + array('name' => 'path d="m9 12 2 2 4-4"'), + ); + break; + case 'tip': + $class = 'svg-icon lucide-flame'; + $pathes = array( + array('name' => 'path d="M8.5 14.5A2.5 2.5 0 0 0 11 12c0-1.38-.5-2-1-3-1.072-2.143-.224-4.054 2-6 .5 2.5 2 4.9 4 6.5 2 1.6 3 3.5 3 5.5a7 7 0 1 1-14 0c0-1.153.433-2.294 1-3a2.5 2.5 0 0 0 2.5 2.5z"'), + ); + break; + case 'success': + $class = 'svg-icon lucide-check'; + $pathes = array( + array('name' => 'polyline points="20 6 9 17 4 12"'), + ); + break; + case 'question': + $class = 'svg-icon lucide-help-circle'; + $pathes = array( + array('name' => 'circle cx="12" cy="12" r="10"'), + array('name' => 'path d="M9.09 9a3 3 0 0 1 5.83 1c0 2-3 3-3 3"'), + array('name' => 'line x1="12" y1="17" x2="12.01" y2="17"'), + ); + break; + case 'warning': + $class = 'svg-icon lucide-alert-triangle'; + $pathes = array( + array('name' => 'path d="m21.73 18-8-14a2 2 0 0 0-3.48 0l-8 14A2 2 0 0 0 4 21h16a2 2 0 0 0 1.73-3Z"'), + array('name' => 'line x1="12" y1="9" x2="12" y2="13"'), + array('name' => 'line x1="12" y1="17" x2="12.01" y2="17"'), + ); + break; + case 'failure': + $class = 'svg-icon lucide-x'; + $pathes = array( + array('name' => 'line x1="18" y1="6" x2="6" y2="18"'), + array('name' => 'line x1="6" y1="6" x2="18" y2="18"'), + ); + break; + case 'danger': + $class = 'svg-icon lucide-zap'; + $pathes = array( + array('name' => 'polygon points="13 2 3 14 12 14 11 22 21 10 12 10 13 2"'), + ); + break; + case 'bug': + $class = 'svg-icon lucide-bug'; + $pathes = array( + array('name' => 'rect x="8" y="6" width="8" height="14" rx="4"'), + array('name' => 'path d="m19 7-3 2"'), + array('name' => 'path d="m5 7 3 2"'), + array('name' => 'path d="m19 19-3-2"'), + array('name' => 'path d="m5 19 3-2"'), + array('name' => 'path d="M20 13h-4"'), + array('name' => 'path d="M4 13h4"'), + array('name' => 'path d="m10 4 1 2"'), + array('name' => 'path d="m14 4-1 2"'), + ); + break; + case 'example': + $class = 'svg-icon lucide-list'; + $pathes = array( + array('name' => 'line x1="8" y1="6" x2="21" y2="6"'), + array('name' => 'line x1="8" y1="12" x2="21" y2="12"'), + array('name' => 'line x1="8" y1="18" x2="21" y2="18"'), + array('name' => 'line x1="3" y1="6" x2="3.01" y2="6"'), + array('name' => 'line x1="3" y1="12" x2="3.01" y2="12"'), + array('name' => 'line x1="3" y1="18" x2="3.01" y2="18"'), + ); + break; + case 'quote': + $class = 'svg-icon lucide-quote'; + $pathes = array( + array('name' => 'path d="M3 21c3 0 7-1 7-8V5c0-1.25-.756-2.017-2-2H4c-1.25 0-2 .75-2 1.972V11c0 1.25.75 2 2 2 1 0 1 0 1 1v1c0 1-1 2-2 2s-1 .008-1 1.031V20c0 1 0 1 1 1z"'), + array('name' => 'path d="M15 21c3 0 7-1 7-8V5c0-1.25-.757-2.017-2-2h-4c-1.25 0-2 .75-2 1.972V11c0 1.25.75 2 2 2h.75c0 2.25.25 4-2.75 4v3c0 1 0 1 1 1z"'), + ); + break; + } + + return array($class, $pathes); + } + + # Callout Block inner + protected function blockQuoteContinue($Line, array $Block) + { + + if ($Line['text'][0] === '>' and preg_match('/^>[ ]?(.*)/', $Line['text'], $matches)) { + + if (isset($Block['interrupted'])) { + + unset($Block['interrupted']); + } + + + $quoteContent = $matches[1]; + + if (isset($Block['element']['elements'])) { + $Block['element']['elements'][1]['text'][] = $quoteContent; + } else { + $Block['element']['text'][] = $quoteContent; + } + + + return $Block; + } + + + if (!isset($Block['interrupted'])) { + + if (isset($Block['element']['elements'])) { + $Block['element']['elements'][1]['text'][] = $Line['text']; + } else { + $Block['element']['text'][] = $Line['text']; + } + + return $Block; + } + } + + # blockHeader seperated from Tags + protected function blockHeader($Line) + { + if (isset($Line['text'][1]) && ($Line['text'][1] === ' ' || $Line['text'][1] === '#')) { + $level = 1; + + while (isset($Line['text'][$level]) and $Line['text'][$level] === '#') { + $level++; + } + + if ($level > 6) { + return; + } + + $text = trim($Line['text'], '# '); + + $Block = array( + 'element' => array( + 'name' => 'h' . min(6, $level), + 'text' => $text, + 'handler' => 'line', + ), + ); + + return $Block; + } + } + + protected function blockYouTube($Line) + { + + if ( ! isset($Line['text'][1]) or $Line['text'][1] !== '[') + { + return; + } + + $Line['text']= substr($Line['text'], 1); + + $Link = $this->inlineLink($Line); + + + if ($Link === null) + { + return; + } + + // See: https://stackoverflow.com/a/64320469 + $yt = preg_match('%(?:youtube(?:-nocookie)?\.com/(?:[^/]+/.+/|(?:v|e(?:mbed)?)/|.*[?&]v=)|youtu\.be/)([^"&?/ ]{11})%i', $Link['element']['attributes']['href'], $match); + + if (! $yt) + { + return; + } + + $youtubeId = $match[1]; + $Block = array( + 'element' => array( + 'name' => 'iframe', + 'text' => $Line['text'], + 'handler' => 'line', + + 'attributes' => array( + 'class' => 'external-embed mod-receives-events', 'sandbox' => 'allow-forms allow-presentation allow-same-origin allow-scripts allow-modals allow-popups', + 'allow' => 'fullscreen', + 'frameborder' => '0', + 'src' => 'https://www.youtube.com/embed/'. $youtubeId, + ), + + ), + ); + + return $Block; + } + + + # extend to obsidian tags + protected $inlineMarkerList = '!"*$_#&[:<>`~\\='; + protected $InlineTypes = array( + '"' => array('SpecialCharacter'), + '!' => array('Image'), + '&' => array('SpecialCharacter'), + '*' => array('Emphasis'), + ':' => array('Url'), + '<' => array('UrlTag', 'EmailTag', 'Markup', 'SpecialCharacter'), + '>' => array('SpecialCharacter'), + '[' => array('Link'), + '#' => array('Tag'), + '$' => array('Katex'), + '_' => array('Emphasis'), + '`' => array('Code'), + '~' => array('Strikethrough'), + '\\' => array('EscapeSequence'), + '=' => array('Highlight'), + ); + + + + # handle highlight code + protected function inlineHighlight($Excerpt) + { + $marker = $Excerpt['text'][1]; + + if (preg_match('/^==(.+?)==/s', $Excerpt['text'], $matches)) + { + $content = $matches[1]; + $Inline = array( + 'extent' => strlen($matches[0]), + 'element' => array( + 'name' => 'span', + 'text' => $content, + 'attributes' => array( + 'class' => 'cm-highlight' + ), + ), + ); + + return $Inline; + } + } + + + + + # handle katex code + protected function inlineKatex($Excerpt) + { + $marker = $Excerpt['text'][0]; + if (preg_match('/^(\\'.$marker.'+)[ ]*(.+?)[ ]*(? strlen($matches[0]), + 'element' => array( + 'name' => $name, + 'text' => $text, + ), + ); + } + } + + # handle obsidian tags + protected function inlineTag($Excerpt) + { + if (!isset($Excerpt['text'][1]) or $Excerpt['text'][0] !== '#') { + return; + } + + # ignore tags in links + $len = strlen($Excerpt['context']); + if ($len == 0) { + return; + } + if (substr(trim($Excerpt['context']), -1) === ']') { + return; + } + + if (preg_match("/(^| )#[\w'-\/]+/ui", $Excerpt['context'], $matches, PREG_OFFSET_CAPTURE)) { + $tag = $matches[0][0]; + + $Inline = array( + 'extent' => strlen($matches[0][0]), + 'position' => $matches[0][1], + 'element' => array( + 'name' => 'a', + 'text' => $tag, + 'attributes' => array( + 'href' => $tag, + 'class' => 'tag' + ), + ), + ); + + return $Inline; + } + } + + protected function blockList($Line) + { + list($name, $pattern) = $Line['text'][0] <= '-' ? array('ul', '[*+-]') : array('ol', '[0-9]+[.]'); + + + + if (preg_match('/(- \[(x| )\])(.*)/', $Line['text'], $matches)) { + + $text = isset($matches[3]) ? $matches[3] : ''; + $isActive = $matches[2]; + $checked = ''; + if ($isActive === 'x') { + $checked = 'checked'; + } + + + + $Block = array( + 'element' => array( + 'name' => 'div', + 'elements' => array( + array( + 'name' => 'div', + 'attributes' => array( + 'class' => 'HyperMD-list-line HyperMD-list-line-1 HyperMD-task-line cm-line', + 'data-task' => $isActive, + ), + ), + array( + 'name' => 'label', + 'attributes' => array('class' => 'task-list-label'), + 'elements' => array( + array( + 'name' => 'input', + 'attributes' => array( + 'class' => 'task-list-item-checkbox', + 'type' => 'checkbox', + 'data-task' => $isActive, + $checked => '', + ), + ), + array( + 'name' => 'label', + 'attributes' => array('class' => 'cm-widgetBuffer'), + 'text' => $text, + ), + ), + ), + ), + ), + ); + + + return $Block; + } + + if (preg_match('/^('.$pattern.'[ ]+)(.*)/', $Line['text'], $matches)) + { + $Block = array( + 'indent' => $Line['indent'], + 'pattern' => $pattern, + 'element' => array( + 'name' => $name, + 'handler' => 'elements', + ), + ); + + if($name === 'ol') + { + $listStart = stristr($matches[0], '.', true); + + if($listStart !== '1') + { + $Block['element']['attributes'] = array('start' => $listStart); + } + } + + $Block['li'] = array( + 'name' => 'li', + 'handler' => 'li', + 'text' => array( + $matches[2], + ), + ); + + $Block['element']['text'] []= & $Block['li']; + + return $Block; + } + } + + protected function blockListContinue($Line, array $Block) + { + + + if (preg_match('/(- \[(x| )\])(.*)/', $Line['text'], $matches)) { + + $text = isset($matches[3]) ? $matches[3] : ''; + $isActive = $matches[2]; + + $checked = ''; + if ($isActive === 'x') { + $checked = 'checked'; + } + + + + + + $conBlock = array( + 'name' => 'div', + 'attributes' => array( + 'class' => 'HyperMD-list-line HyperMD-list-line-1 HyperMD-task-line cm-line', + 'data-task' => $isActive, + ), + 'elements' => array( + array( + 'name' => 'label', + 'attributes' => array('class' => 'task-list-label'), + 'elements' => array( + array( + 'name' => 'input', + 'attributes' => array( + 'class' => 'task-list-item-checkbox', + 'type' => 'checkbox', + 'data-task' => $isActive, + $checked => '', + ), + ), + array( + 'name' => 'label', + 'attributes' => array('class' => 'cm-widgetBuffer'), + 'text' => $text, + ), + ), + ), + ) + ); + + + $Block['element']['elements'][ ] = & $conBlock; + + return $Block; + } + + $Block['indent'] = isset($Block['indent']) ? $Block['indent'] : '0'; + + if ($Block['indent'] === $Line['indent'] and preg_match('/^'.$Block['pattern'].'(?:[ ]+(.*)|$)/', $Line['text'], $matches)) + { + + if (isset($Block['interrupted'])) + { + $Block['li']['text'] []= ''; + + $Block['loose'] = true; + + unset($Block['interrupted']); + } + + unset($Block['li']); + + $text = isset($matches[1]) ? $matches[1] : ''; + + $Block['li'] = array( + 'name' => 'li', + 'handler' => 'li', + 'text' => array( + $text, + ), + ); + + $Block['element']['text'] []= & $Block['li']; + + return $Block; + } + + if ($Line['text'][0] === '[' and $this->blockReference($Line)) + { + return $Block; + } + + if ( ! isset($Block['interrupted'])) + { + $text = preg_replace('/^[ ]{0,4}/', '', $Line['body']); + + $Block['li']['text'] []= $text; + + return $Block; + } + + if ($Line['indent'] > 0) + { + $Block['li']['text'] []= ''; + + $text = preg_replace('/^[ ]{0,4}/', '', $Line['body']); + + $Block['li']['text'] []= $text; + + unset($Block['interrupted']); + + return $Block; + } + } + + # handle external Urls + protected function inlineUrl($Excerpt) + { + if ($this->urlsLinked !== true or !isset($Excerpt['text'][2]) or $Excerpt['text'][2] !== '/') { + return; + } + + if (preg_match('/\bhttps?:[\/]{2}[^\s<]+\b\/*/ui', $Excerpt['context'], $matches, PREG_OFFSET_CAPTURE)) { + $url = $matches[0][0]; + + $Inline = array( + 'extent' => strlen($matches[0][0]), + 'position' => $matches[0][1], + 'element' => array( + 'name' => 'a', + 'text' => $url, + 'attributes' => array( + 'href' => $url, + 'class' => 'external-link perlite-external-link', + 'target' => '_blank', + 'rel' => 'noopener noreferrer', + ), + ), + ); + + return $Inline; + } + } + + # handle external obsidian Urls + protected function inlineLink($Excerpt) + { + $Element = array( + 'name' => 'a', + 'handler' => 'line', + 'nonNestables' => array('Url', 'Link'), + 'text' => null, + 'attributes' => array( + 'href' => null, + 'title' => null, + 'class' => 'external-link perlite-external-link', + 'target' => '_blank', + 'rel' => 'noopener noreferrer', + ), + ); + + $extent = 0; + + $remainder = $Excerpt['text']; + + if (preg_match('/\[((?:[^][]++|(?R))*+)\]/', $remainder, $matches)) { + $Element['text'] = $matches[1]; + + $extent += strlen($matches[0]); + + $remainder = substr($remainder, $extent); + } else { + return; + } + + if (preg_match('/^[(]\s*+((?:[^ ()]++|[(][^ )]+[)])++)(?:[ ]+("[^"]*"|\'[^\']*\'))?\s*[)]/', $remainder, $matches)) { + $Element['attributes']['href'] = $matches[1]; + + if (isset($matches[2])) { + $Element['attributes']['title'] = substr($matches[2], 1, -1); + } + + $extent += strlen($matches[0]); + } else { + if (preg_match('/^\s*\[(.*?)\]/', $remainder, $matches)) { + $definition = strlen($matches[1]) ? $matches[1] : $Element['text']; + $definition = strtolower($definition); + + $extent += strlen($matches[0]); + } else { + $definition = strtolower($Element['text']); + } + + if (!isset($this->DefinitionData['Reference'][$definition])) { + return; + } + + $Definition = $this->DefinitionData['Reference'][$definition]; + + $Element['attributes']['href'] = $Definition['url']; + $Element['attributes']['title'] = $Definition['title']; + } + + return array( + 'extent' => $extent, + 'element' => $Element, + ); + } + + # adjusted to support nested elements + protected function element(array $Element) + { + if ($this->safeMode) { + $Element = $this->sanitiseElement($Element); + } + + $markup = '<' . $Element['name']; + + if (isset($Element['attributes'])) { + foreach ($Element['attributes'] as $name => $value) { + if ($value === null) { + continue; + } + + $markup .= ' ' . $name . '="' . self::escape($value) . '"'; + } + } + + $permitRawHtml = false; + + # nested element handling + $closing = false; + if (isset($Element['elements'])) { + $markup .= '>'; + $markup .= $this->elements($Element['elements']); + $closing = true; + } elseif (isset($Element['text'])) { + $text = $Element['text']; + } elseif (isset($Element['rawHtml'])) { + $text = $Element['rawHtml']; + $allowRawHtmlInSafeMode = isset($Element['allowRawHtmlInSafeMode']) && $Element['allowRawHtmlInSafeMode']; + $permitRawHtml = !$this->safeMode || $allowRawHtmlInSafeMode; + } + + if (isset($text)) { + $markup .= '>'; + + if (!isset($Element['nonNestables'])) { + $Element['nonNestables'] = array(); + } + + if (isset($Element['handler'])) { + $markup .= $this->{$Element['handler']}($text, $Element['nonNestables']); + } elseif (!$permitRawHtml) { + $markup .= self::escape($text, true); + } else { + $markup .= $text; + } + + $markup .= ''; + } elseif ($closing) { + $markup .= ''; + } else { + $markup .= ' />'; + } + + return $markup; + } + + # adjusted to handle interuppted quote blocks + protected function lines(array $lines) + { + $CurrentBlock = null; + + foreach ($lines as $line) { + if (chop($line) === '') { + if (isset($CurrentBlock)) { + $CurrentBlock['interrupted'] = true; + } + + continue; + } + + if (strpos($line, "\t") !== false) { + $parts = explode("\t", $line); + + $line = $parts[0]; + + unset($parts[0]); + + foreach ($parts as $part) { + $shortage = 4 - strlen(utf8_decode($input)) % 4; + + $line .= str_repeat(' ', $shortage); + $line .= $part; + } + } + + $indent = 0; + + while (isset($line[$indent]) and $line[$indent] === ' ') { + $indent++; + } + + $text = $indent > 0 ? substr($line, $indent) : $line; + + # ~ + + $Line = array('body' => $line, 'indent' => $indent, 'text' => $text); + + # ~ + + if (isset($CurrentBlock['continuable'])) { + + if ($CurrentBlock['type'] === 'Quote') { + + if (!isset($CurrentBlock['interrupted'])) { + $Block = $this->{'block' . $CurrentBlock['type'] . 'Continue'}($Line, $CurrentBlock); + if (isset($Block)) { + $CurrentBlock = $Block; + + continue; + } else { + if ($this->isBlockCompletable($CurrentBlock['type'])) { + $CurrentBlock = $this->{'block' . $CurrentBlock['type'] . 'Complete'}($CurrentBlock); + } + } + } + } else { + $Block = $this->{'block' . $CurrentBlock['type'] . 'Continue'}($Line, $CurrentBlock); + if (isset($Block)) { + $CurrentBlock = $Block; + + continue; + } else { + if ($this->isBlockCompletable($CurrentBlock['type'])) { + $CurrentBlock = $this->{'block' . $CurrentBlock['type'] . 'Complete'}($CurrentBlock); + } + } + } + } + + + # ~ + + $marker = $text[0]; + + # ~ + + $blockTypes = $this->unmarkedBlockTypes; + + if (isset($this->BlockTypes[$marker])) { + foreach ($this->BlockTypes[$marker] as $blockType) { + $blockTypes[] = $blockType; + } + } + + # + # ~ + + foreach ($blockTypes as $blockType) { + $Block = $this->{'block' . $blockType}($Line, $CurrentBlock); + + if (isset($Block)) { + $Block['type'] = $blockType; + + if (!isset($Block['identified'])) { + $Blocks[] = $CurrentBlock; + + $Block['identified'] = true; + } + + if ($this->isBlockContinuable($blockType)) { + $Block['continuable'] = true; + } + + $CurrentBlock = $Block; + + continue 2; + } + } + + # ~ + + if (isset($CurrentBlock) and !isset($CurrentBlock['type']) and !isset($CurrentBlock['interrupted'])) { + $CurrentBlock['element']['text'] .= "\n" . $text; + } else { + $Blocks[] = $CurrentBlock; + + $CurrentBlock = $this->paragraph($Line); + + $CurrentBlock['identified'] = true; + } + } + + # ~ + + if (isset($CurrentBlock['continuable']) and $this->isBlockCompletable($CurrentBlock['type'])) { + $CurrentBlock = $this->{'block' . $CurrentBlock['type'] . 'Complete'}($CurrentBlock); + } + + # ~ + + $Blocks[] = $CurrentBlock; + + unset($Blocks[0]); + + # ~ + + $markup = ''; + + foreach ($Blocks as $Block) { + if (isset($Block['hidden'])) { + continue; + } + + $markup .= "\n"; + $markup .= isset($Block['markup']) ? $Block['markup'] : $this->element($Block['element']); + } + + $markup .= "\n"; + + # ~ + + return $markup; + } +} diff --git a/Perlite/perlite/.styles/app.css b/Perlite/perlite/.styles/app.css new file mode 100644 index 0000000..e9c1d7c --- /dev/null +++ b/Perlite/perlite/.styles/app.css @@ -0,0 +1,14694 @@ +/* + * @obsidian Do not edit this file directly, it is generated from the pdf.js repo + * Either edit the CSS there, or override in pdf-view.less + */ + + + :root { + --highlight-bg-color: rgba(180, 0, 170, 1); + --highlight-selected-bg-color: rgba(0, 100, 0, 1); +} + +@media screen and (forced-colors: active) { + :root { + --highlight-bg-color: Highlight; + --highlight-selected-bg-color: ButtonText; + } +} + +.textLayer { + position: absolute; + text-align: left; + text-align: initial; + top: 0; + right: 0; + bottom: 0; + left: 0; + overflow: hidden; + /* @obsidian */ + /* opacity: 0.25; */ + line-height: 1; + -webkit-text-size-adjust: none; + -moz-text-size-adjust: none; + text-size-adjust: none; + forced-color-adjust: none; + transform-origin: 0 0; + z-index: 2; +} + +.textLayer span, .textLayer br { + color: transparent; + position: absolute; + white-space: pre; + cursor: text; + transform-origin: 0% 0%; +} + +/* Only necessary in Google Chrome, see issue 14205, and most unfortunately + * the problem doesn't show up in "text" reference tests. */ +.textLayer span.markedContent { + top: 0; + height: 0; +} + +.textLayer .highlight { + margin: -1px; + padding: 1px; + /* @obsidian */ + /* background-color: var(--highlight-bg-color); */ + /* border-radius: 4px; */ +} + +.textLayer .highlight.appended { + position: static; + position: initial; +} + +/* @obsidian */ +/* .textLayer .highlight.begin { + border-radius: 4px 0 0 4px; +} + +.textLayer .highlight.end { + border-radius: 0 4px 4px 0; +} */ + +.textLayer .highlight.middle { + border-radius: 0; +} + +/* @obsidian */ +/* .textLayer .highlight.selected { + background-color: var(--highlight-selected-bg-color); +} */ + +/* @obsidian */ +/* .textLayer ::selection { + background: blue; + background: AccentColor; +} */ + +/* Avoids https://github.com/mozilla/pdf.js/issues/13840 in Chrome */ +.textLayer br::-moz-selection { + background: transparent; +} +.textLayer br::selection { + background: transparent; +} + +.textLayer .endOfContent { + display: block; + position: absolute; + top: 100%; + right: 0; + bottom: 0; + left: 0; + z-index: -1; + cursor: default; + -webkit-user-select: none; + -moz-user-select: none; + user-select: none; +} + +.textLayer .endOfContent.active { + top: 0; +} + + +:root { + --annotation-unfocused-field-background: url("data:image/svg+xml;charset=UTF-8,"); + --input-focus-border-color: Highlight; + --input-focus-outline: 1px solid Canvas; + --input-unfocused-border-color: transparent; + --input-disabled-border-color: transparent; + --input-hover-border-color: black; + --link-outline: none; +} + +@media screen and (forced-colors: active) { + :root { + --input-focus-border-color: CanvasText; + --input-unfocused-border-color: ActiveText; + --input-disabled-border-color: GrayText; + --input-hover-border-color: Highlight; + --link-outline: 1.5px solid LinkText; + --hcm-highligh-filter: invert(100%); + } + .annotationLayer .textWidgetAnnotation input:required { + outline: 1.5px solid selectedItem; + } + .annotationLayer .textWidgetAnnotation textarea:required { + outline: 1.5px solid selectedItem; + } + .annotationLayer + .buttonWidgetAnnotation.checkBox + input:required { + outline: 1.5px solid selectedItem; + } + .annotationLayer + .buttonWidgetAnnotation.radioButton + input:required { + outline: 1.5px solid selectedItem; + } + .annotationLayer .choiceWidgetAnnotation select:required { + outline: 1.5px solid selectedItem; + } + + .annotationLayer .linkAnnotation:hover { + -webkit-backdrop-filter: var(--hcm-highligh-filter); + backdrop-filter: var(--hcm-highligh-filter); + } + + .annotationLayer .linkAnnotation > a:hover { + opacity: 0 !important; + background: none !important; + } + + .annotationLayer .linkAnnotation > a:hover { + box-shadow: none; + } + + .annotationLayer .popupAnnotation .popup { + outline: calc(1.5px * var(--scale-factor)) solid CanvasText !important; + background-color: ButtonFace !important; + color: ButtonText !important; + } + + .annotationLayer .highlightArea:hover::after { + position: absolute; + top: 0; + left: 0; + width: 100%; + height: 100%; + -webkit-backdrop-filter: var(--hcm-highligh-filter); + backdrop-filter: var(--hcm-highligh-filter); + content: ""; + pointer-events: none; + } + + .annotationLayer .popupAnnotation.focused .popup { + outline: calc(3px * var(--scale-factor)) solid Highlight !important; + } +} + +.annotationLayer { + position: absolute; + top: 0; + left: 0; + pointer-events: none; + transform-origin: 0 0; + z-index: 3; +} + +.annotationLayer[data-main-rotation="90"] .norotate { + transform: rotate(270deg) translateX(-100%); +} +.annotationLayer[data-main-rotation="180"] .norotate { + transform: rotate(180deg) translate(-100%, -100%); +} +.annotationLayer[data-main-rotation="270"] .norotate { + transform: rotate(90deg) translateY(-100%); +} + +.annotationLayer canvas { + position: absolute; + width: 100%; + height: 100%; + pointer-events: none; +} + +.annotationLayer section { + position: absolute; + text-align: left; + text-align: initial; + pointer-events: auto; + box-sizing: border-box; + transform-origin: 0 0; +} + +.annotationLayer .linkAnnotation { + outline: none; + outline: var(--link-outline); +} + +.annotationLayer .linkAnnotation:not(.does-not-exist) > a, .annotationLayer .buttonWidgetAnnotation.pushButton > a { + position: absolute; + font-size: 1em; + top: 0; + left: 0; + width: 100%; + height: 100%; +} + +.annotationLayer + .linkAnnotation:not(.does-not-exist):not(.hasBorder) + > a:hover, .annotationLayer + .buttonWidgetAnnotation.pushButton:not(.hasBorder) + > a:hover { + opacity: 0.2; + background-color: rgba(255, 255, 0, 1); + box-shadow: 0 2px 10px rgba(255, 255, 0, 1); +} + +.annotationLayer .linkAnnotation.hasBorder:hover { + background-color: rgba(255, 255, 0, 0.2); +} + +.annotationLayer .hasBorder { + background-size: 100% 100%; +} + +.annotationLayer .textAnnotation img { + position: absolute; + cursor: pointer; + width: 100%; + height: 100%; + top: 0; + left: 0; +} + +.annotationLayer .textWidgetAnnotation input, .annotationLayer .textWidgetAnnotation textarea, .annotationLayer .choiceWidgetAnnotation select, .annotationLayer .buttonWidgetAnnotation.checkBox input, .annotationLayer .buttonWidgetAnnotation.radioButton input { + background-image: url("data:image/svg+xml;charset=UTF-8,"); + background-image: var(--annotation-unfocused-field-background); + border: 2px solid transparent; + border: 2px solid var(--input-unfocused-border-color); + box-sizing: border-box; + font: calc(9px * var(--scale-factor)) sans-serif; + height: 100%; + margin: 0; + vertical-align: top; + width: 100%; +} + +.annotationLayer .textWidgetAnnotation input:required { + outline: 1.5px solid red; +} + +.annotationLayer .textWidgetAnnotation textarea:required { + outline: 1.5px solid red; +} + +.annotationLayer + .buttonWidgetAnnotation.checkBox + input:required { + outline: 1.5px solid red; +} + +.annotationLayer + .buttonWidgetAnnotation.radioButton + input:required { + outline: 1.5px solid red; +} + +.annotationLayer .choiceWidgetAnnotation select:required { + outline: 1.5px solid red; +} + +.annotationLayer .choiceWidgetAnnotation select option { + padding: 0; +} + +.annotationLayer .buttonWidgetAnnotation.radioButton input { + border-radius: 50%; +} + +.annotationLayer .textWidgetAnnotation textarea { + resize: none; +} + +.annotationLayer .textWidgetAnnotation input[disabled], .annotationLayer .textWidgetAnnotation textarea[disabled], .annotationLayer .choiceWidgetAnnotation select[disabled], .annotationLayer + .buttonWidgetAnnotation.checkBox + input[disabled], .annotationLayer + .buttonWidgetAnnotation.radioButton + input[disabled] { + background: none; + border: 2px solid transparent; + border: 2px solid var(--input-disabled-border-color); + cursor: not-allowed; +} + +.annotationLayer .textWidgetAnnotation input:hover, .annotationLayer .textWidgetAnnotation textarea:hover, .annotationLayer .choiceWidgetAnnotation select:hover, .annotationLayer + .buttonWidgetAnnotation.checkBox + input:hover, .annotationLayer + .buttonWidgetAnnotation.radioButton + input:hover { + border: 2px solid black; + border: 2px solid var(--input-hover-border-color); +} +.annotationLayer .textWidgetAnnotation input:hover, .annotationLayer .textWidgetAnnotation textarea:hover, .annotationLayer .choiceWidgetAnnotation select:hover, .annotationLayer .buttonWidgetAnnotation.checkBox input:hover { + border-radius: 2px; +} + +.annotationLayer .textWidgetAnnotation input:focus, .annotationLayer .textWidgetAnnotation textarea:focus, .annotationLayer .choiceWidgetAnnotation select:focus { + background: none; + border: 2px solid Highlight; + border: 2px solid var(--input-focus-border-color); + border-radius: 2px; + outline: 1px solid Canvas; + outline: var(--input-focus-outline); +} + +.annotationLayer .buttonWidgetAnnotation.checkBox :focus, .annotationLayer .buttonWidgetAnnotation.radioButton :focus { + background-image: none; + background-color: transparent; +} + +.annotationLayer .buttonWidgetAnnotation.checkBox :focus { + border: 2px solid Highlight; + border: 2px solid var(--input-focus-border-color); + border-radius: 2px; + outline: 1px solid Canvas; + outline: var(--input-focus-outline); +} + +.annotationLayer .buttonWidgetAnnotation.radioButton :focus { + border: 2px solid Highlight; + border: 2px solid var(--input-focus-border-color); + outline: 1px solid Canvas; + outline: var(--input-focus-outline); +} + +.annotationLayer .buttonWidgetAnnotation.checkBox input:checked::before, +.annotationLayer .buttonWidgetAnnotation.checkBox input:checked::after, +.annotationLayer .buttonWidgetAnnotation.radioButton input:checked::before { + background-color: CanvasText; + content: ""; + display: block; + position: absolute; +} + +.annotationLayer .buttonWidgetAnnotation.checkBox input:checked::before, +.annotationLayer .buttonWidgetAnnotation.checkBox input:checked::after { + height: 80%; + left: 45%; + width: 1px; +} + +.annotationLayer .buttonWidgetAnnotation.checkBox input:checked::before { + transform: rotate(45deg); +} + +.annotationLayer .buttonWidgetAnnotation.checkBox input:checked::after { + transform: rotate(-45deg); +} + +.annotationLayer .buttonWidgetAnnotation.radioButton input:checked::before { + border-radius: 50%; + height: 50%; + left: 30%; + top: 20%; + width: 50%; +} + +.annotationLayer .textWidgetAnnotation input.comb { + font-family: monospace; + padding-left: 2px; + padding-right: 0; +} + +.annotationLayer .textWidgetAnnotation input.comb:focus { + /* + * Letter spacing is placed on the right side of each character. Hence, the + * letter spacing of the last character may be placed outside the visible + * area, causing horizontal scrolling. We avoid this by extending the width + * when the element has focus and revert this when it loses focus. + */ + width: 103%; +} + +.annotationLayer .buttonWidgetAnnotation.checkBox input, .annotationLayer .buttonWidgetAnnotation.radioButton input { + -webkit-appearance: none; + -moz-appearance: none; + appearance: none; +} + +.annotationLayer .fileAttachmentAnnotation .popupTriggerArea { + height: 100%; + width: 100%; +} + +/* @obsidian */ +/* +.annotationLayer .popupAnnotation { + position: absolute; + font-size: calc(9px * var(--scale-factor)); + pointer-events: none; + width: max-content; + max-width: 45%; + height: auto; +} + +.annotationLayer .popup { + background-color: rgba(255, 255, 153, 1); + box-shadow: 0 calc(2px * var(--scale-factor)) calc(5px * var(--scale-factor)) + rgba(136, 136, 136, 1); + border-radius: calc(2px * var(--scale-factor)); + outline: 1.5px solid rgb(255, 255, 74); + padding: calc(6px * var(--scale-factor)); + cursor: pointer; + font: message-box; + white-space: normal; + word-wrap: break-word; + pointer-events: auto; +} + +.annotationLayer .popupAnnotation.focused .popup { + outline-width: 3px; +} + +.annotationLayer .popup * { + font-size: calc(9px * var(--scale-factor)); +} + +.annotationLayer .popup > .header { + display: inline-block; +} + +.annotationLayer .popup > .header h1 { + display: inline; +} + +.annotationLayer .popup > .header .popupDate { + display: inline-block; + margin-left: calc(5px * var(--scale-factor)); + width: fit-content; +} + +.annotationLayer .popupContent { + border-top: 1px solid rgba(51, 51, 51, 1); + margin-top: calc(2px * var(--scale-factor)); + padding-top: calc(2px * var(--scale-factor)); +} */ + +.annotationLayer .richText > * { + white-space: pre-wrap; + /* @obsidian */ + /* font-size: calc(9px * var(--scale-factor)); */ +} + +.annotationLayer .highlightAnnotation, +.annotationLayer .underlineAnnotation, +.annotationLayer .squigglyAnnotation, +.annotationLayer .strikeoutAnnotation, +.annotationLayer .freeTextAnnotation, +.annotationLayer .lineAnnotation svg line, +.annotationLayer .squareAnnotation svg rect, +.annotationLayer .circleAnnotation svg ellipse, +.annotationLayer .polylineAnnotation svg polyline, +.annotationLayer .polygonAnnotation svg polygon, +.annotationLayer .caretAnnotation, +.annotationLayer .inkAnnotation svg polyline, +.annotationLayer .stampAnnotation, +.annotationLayer .fileAttachmentAnnotation { + cursor: pointer; +} + +.annotationLayer section svg { + position: absolute; + width: 100%; + height: 100%; + top: 0; + left: 0; +} + +.annotationLayer .annotationTextContent { + position: absolute; + width: 100%; + height: 100%; + opacity: 0; + color: transparent; + -webkit-user-select: none; + -moz-user-select: none; + user-select: none; + pointer-events: none; +} + +.annotationLayer .annotationTextContent span { + width: 100%; + display: inline-block; +} + +.annotationLayer svg.quadrilateralsContainer { + contain: strict; + width: 0; + height: 0; + position: absolute; + top: 0; + left: 0; + z-index: -1; +} + + +:root { + --xfa-unfocused-field-background: url("data:image/svg+xml;charset=UTF-8,"); + --xfa-focus-outline: auto; +} + +@media screen and (forced-colors: active) { + :root { + --xfa-focus-outline: 2px solid CanvasText; + } + .xfaLayer *:required { + outline: 1.5px solid selectedItem; + } +} + +.xfaLayer { + background-color: transparent; +} + +.xfaLayer .highlight { + margin: -1px; + padding: 1px; + background-color: rgba(239, 203, 237, 1); + border-radius: 4px; +} + +.xfaLayer .highlight.appended { + position: static; + position: initial; +} + +.xfaLayer .highlight.begin { + border-radius: 4px 0 0 4px; +} + +.xfaLayer .highlight.end { + border-radius: 0 4px 4px 0; +} + +.xfaLayer .highlight.middle { + border-radius: 0; +} + +.xfaLayer .highlight.selected { + background-color: rgba(203, 223, 203, 1); +} + +.xfaPage { + overflow: hidden; + position: relative; +} + +.xfaContentarea { + position: absolute; +} + +.xfaPrintOnly { + display: none; +} + +.xfaLayer { + position: absolute; + text-align: left; + text-align: initial; + top: 0; + left: 0; + transform-origin: 0 0; + line-height: 1.2; +} + +.xfaLayer * { + color: inherit; + font: inherit; + font-style: inherit; + font-weight: inherit; + font-feature-settings: inherit; + font-kerning: inherit; + letter-spacing: -0.01px; + text-align: inherit; + text-decoration: inherit; + box-sizing: border-box; + background-color: transparent; + padding: 0; + margin: 0; + pointer-events: auto; + line-height: inherit; +} + +.xfaLayer *:required { + outline: 1.5px solid red; +} + +.xfaLayer div, +.xfaLayer svg, +.xfaLayer svg * { + pointer-events: none; +} + +.xfaLayer a { + color: blue; +} + +.xfaRich li { + margin-left: 3em; +} + +.xfaFont { + color: black; + font-weight: normal; + font-feature-settings: "kern" off; + font-kerning: none; + font-size: 10px; + font-style: normal; + letter-spacing: 0; + -webkit-text-decoration: none; + text-decoration: none; + vertical-align: 0; +} + +.xfaCaption { + overflow: hidden; + flex: 0 0 auto; +} + +.xfaCaptionForCheckButton { + overflow: hidden; + flex: 1 1 auto; +} + +.xfaLabel { + height: 100%; + width: 100%; +} + +.xfaLeft { + display: flex; + flex-direction: row; + align-items: center; +} + +.xfaRight { + display: flex; + flex-direction: row-reverse; + align-items: center; +} + +.xfaLeft > .xfaCaption, .xfaLeft > .xfaCaptionForCheckButton, .xfaRight > .xfaCaption, .xfaRight > .xfaCaptionForCheckButton { + max-height: 100%; +} + +.xfaTop { + display: flex; + flex-direction: column; + align-items: flex-start; +} + +.xfaBottom { + display: flex; + flex-direction: column-reverse; + align-items: flex-start; +} + +.xfaTop > .xfaCaption, .xfaTop > .xfaCaptionForCheckButton, .xfaBottom > .xfaCaption, .xfaBottom > .xfaCaptionForCheckButton { + width: 100%; +} + +.xfaBorder { + background-color: transparent; + position: absolute; + pointer-events: none; +} + +.xfaWrapped { + width: 100%; + height: 100%; +} + +.xfaTextfield:focus, .xfaSelect:focus { + background-image: none; + background-color: transparent; + outline: auto; + outline: var(--xfa-focus-outline); + outline-offset: -1px; +} + +.xfaCheckbox:focus, .xfaRadio:focus { + outline: auto; + outline: var(--xfa-focus-outline); +} + +.xfaTextfield, +.xfaSelect { + height: 100%; + width: 100%; + flex: 1 1 auto; + border: none; + resize: none; + background-image: url("data:image/svg+xml;charset=UTF-8,"); + background-image: var(--xfa-unfocused-field-background); +} + +.xfaSelect { + padding-left: 2px; + padding-right: 2px; +} + +.xfaTop > .xfaTextfield, .xfaTop > .xfaSelect, .xfaBottom > .xfaTextfield, .xfaBottom > .xfaSelect { + flex: 0 1 auto; +} + +.xfaButton { + cursor: pointer; + width: 100%; + height: 100%; + border: none; + text-align: center; +} + +.xfaLink { + width: 100%; + height: 100%; + position: absolute; + top: 0; + left: 0; +} + +.xfaCheckbox, +.xfaRadio { + width: 100%; + height: 100%; + flex: 0 0 auto; + border: none; +} + +.xfaRich { + white-space: pre-wrap; + width: 100%; + height: 100%; +} + +.xfaImage { + -o-object-position: left top; + object-position: left top; + -o-object-fit: contain; + object-fit: contain; + width: 100%; + height: 100%; +} + +.xfaLrTb, +.xfaRlTb, +.xfaTb { + display: flex; + flex-direction: column; + align-items: stretch; +} + +.xfaLr { + display: flex; + flex-direction: row; + align-items: stretch; +} + +.xfaRl { + display: flex; + flex-direction: row-reverse; + align-items: stretch; +} + +.xfaTb > div { + justify-content: left; +} + +.xfaPosition { + position: relative; +} + +.xfaArea { + position: relative; +} + +.xfaValignMiddle { + display: flex; + align-items: center; +} + +.xfaTable { + display: flex; + flex-direction: column; + align-items: stretch; +} + +.xfaTable .xfaRow { + display: flex; + flex-direction: row; + align-items: stretch; +} + +.xfaTable .xfaRlRow { + display: flex; + flex-direction: row-reverse; + align-items: stretch; + flex: 1; +} + +.xfaTable .xfaRlRow > div { + flex: 1; +} + +.xfaNonInteractive input, .xfaNonInteractive textarea, .xfaDisabled input, .xfaDisabled textarea, .xfaReadOnly input, .xfaReadOnly textarea { + background: transparent none repeat 0 0 / auto auto padding-box border-box scroll; + background: initial; +} + +@media print { + .xfaTextfield, + .xfaSelect { + background: transparent; + } + + .xfaSelect { + -webkit-appearance: none; + -moz-appearance: none; + appearance: none; + text-indent: 1px; + text-overflow: ""; + } +} + +/* @obsidian TODO: bring this in when we enable annotation editing */ +/* @import url(annotation_editor_layer_builder.css); */ + +:root { + --viewer-container-height: 0; + --pdfViewer-padding-bottom: 0; + --page-margin: 1px auto -8px; + --page-border: 9px solid transparent; + --spreadHorizontalWrapped-margin-LR: -3.5px; + --loading-icon-delay: 400ms; +} + +@media screen and (forced-colors: active) { + :root { + --pdfViewer-padding-bottom: 9px; + --page-margin: 8px auto -1px; + --page-border: 1px solid CanvasText; + --spreadHorizontalWrapped-margin-LR: 3.5px; + } +} + +[data-main-rotation="90"] { + transform: rotate(90deg) translateY(-100%); +} +[data-main-rotation="180"] { + transform: rotate(180deg) translate(-100%, -100%); +} +[data-main-rotation="270"] { + transform: rotate(270deg) translateX(-100%); +} + +/* @obsidian this was changed from an id to a class */ +.hiddenCopyElement { + position: absolute; + top: 0; + left: 0; + width: 0; + height: 0; + display: none; +} + +.pdf-viewer { + /* Define this variable here and not in :root to avoid to reflow all the UI + when scaling (see #15929). */ + --scale-factor: 1; + + padding-bottom: 0; + + padding-bottom: var(--pdfViewer-padding-bottom); +} + +.pdf-viewer .canvasWrapper { + overflow: hidden; + /* width: 100%; */ + /* height: 100%; */ + z-index: 1; +} + +.pdf-viewer .page { + direction: ltr; + width: 816px; + height: 1056px; + /* margin: var(--page-margin); */ + position: relative; + overflow: visible; + /* border: var(--page-border); */ + background-clip: content-box; + /* background-color: rgba(255, 255, 255, 1); */ +} + +.pdf-viewer .dummyPage { + position: relative; + width: 0; + height: 0; + height: var(--viewer-container-height); +} + +.pdf-viewer.removePageBorders .page { + margin: 0 auto 10px; + border: none; +} + +.pdf-viewer.scrollHorizontal, .pdf-viewer.scrollWrapped, .spread { + margin-left: 3.5px; + margin-right: 3.5px; + text-align: center; +} + +.pdf-viewer.scrollHorizontal, +.spread { + white-space: nowrap; +} + +.pdf-viewer.removePageBorders, +.pdf-viewer.scrollHorizontal .spread, +.pdf-viewer.scrollWrapped .spread { + margin-left: 0; + margin-right: 0; +} + +.spread .page, .spread .dummyPage, .pdf-viewer.scrollHorizontal .page, .pdf-viewer.scrollHorizontal .spread, .pdf-viewer.scrollWrapped .page, .pdf-viewer.scrollWrapped .spread { + display: inline-block; + vertical-align: middle; +} + +/* @obsidian */ +/* .spread .page, +.pdf-viewer:is(.scrollHorizontal, .scrollWrapped) .page { + margin-inline: var(--spreadHorizontalWrapped-margin-LR); +} */ + + @obsidian + .pdf-viewer.removePageBorders .spread .page, +.pdf-viewer.removePageBorders:is(.scrollHorizontal, .scrollWrapped) .page { + margin-left: 5px; + margin-right: 5px; +} + +.pdf-viewer .page canvas { + margin: 0; + display: block; +} + +.pdf-viewer .page canvas .structTree { + contain: strict; +} + +.pdf-viewer .page canvas[hidden] { + display: none; +} + +.pdf-viewer .page canvas[zooming] { + width: 100%; + height: 100%; +} + +.pdf-viewer .page.loadingIcon::after { + position: absolute; + top: 0; + left: 0; + content: ""; + width: 100%; + height: 100%; + /* @obsidian */ + /* background: url("images/loading-icon.gif") center no-repeat; */ + display: none; + /* Using a delay with background-image doesn't work, + consequently we use the display. */ + transition-property: display; + transition-delay: 400ms; + transition-delay: var(--loading-icon-delay); + z-index: 5; + contain: strict; +} + +.pdf-viewer .page.loading::after { + display: block; +} + +.pdf-viewer .page:not(.loading)::after { + transition-property: none; + display: none; +} + +.pdfPresentationMode .pdf-viewer { + padding-bottom: 0; +} + +.pdfPresentationMode .spread { + margin: 0; +} + +.pdfPresentationMode .pdf-viewer .page { + margin: 0 auto; + border: 2px solid transparent; +} + +/* Obsidian theme variables */ +/* ------------------------ */ +body { + /* Animations */ + --anim-duration-none: 0; + --anim-duration-superfast: 70ms; + --anim-duration-fast: 140ms; + --anim-duration-moderate: 300ms; + --anim-duration-slow: 560ms; + --anim-motion-smooth: cubic-bezier(0.45, 0.05, 0.55, 0.95); + --anim-motion-delay: cubic-bezier(0.65, 0.05, 0.36, 1); + --anim-motion-jumpy: cubic-bezier(0.68, -0.55, 0.27, 1.55); + --anim-motion-swing: cubic-bezier(0, 0.55, 0.45, 1); + /* Blockquotes */ + --blockquote-border-thickness: 2px; + --blockquote-border-color: var(--interactive-accent); + --blockquote-font-style: normal; + --blockquote-color: inherit; + --blockquote-background-color: transparent; + /* Bold */ + --bold-weight: var(--font-semibold); + --bold-color: inherit; + /* Borders */ + --border-width: 1px; + /* Buttons */ + --button-radius: var(--input-radius); + /* Callouts */ + --callout-border-width: 0px; + --callout-border-opacity: 0.25; + --callout-padding: var(--size-4-3) var(--size-4-3) var(--size-4-3) var(--size-4-6); + --callout-radius: var(--radius-s); + --callout-blend-mode: var(--highlight-mix-blend-mode); + --callout-title-color: inherit; + --callout-title-padding: 0; + --callout-title-size: inherit; + --callout-content-padding: 0; + --callout-content-background: transparent; + --callout-bug: var(--color-red-rgb); + --callout-default: var(--color-blue-rgb); + --callout-error: var(--color-red-rgb); + --callout-example: var(--color-purple-rgb); + --callout-fail: var(--color-red-rgb); + --callout-important: var(--color-cyan-rgb); + --callout-info: var(--color-blue-rgb); + --callout-question: var(--color-orange-rgb); + --callout-success: var(--color-green-rgb); + --callout-summary: var(--color-cyan-rgb); + --callout-tip: var(--color-cyan-rgb); + --callout-todo: var(--color-blue-rgb); + --callout-warning: var(--color-orange-rgb); + --callout-quote: 158, 158, 158; + /* Canvas */ + --canvas-background: var(--background-primary); + --canvas-card-label-color: var(--text-faint); + --canvas-color-1: var(--color-red-rgb); + --canvas-color-2: var(--color-orange-rgb); + --canvas-color-3: var(--color-yellow-rgb); + --canvas-color-4: var(--color-green-rgb); + --canvas-color-5: var(--color-cyan-rgb); + --canvas-color-6: var(--color-purple-rgb); + --canvas-dot-pattern: var(--color-base-30); + /* Checkboxes */ + --checkbox-radius: var(--radius-s); + --checkbox-size: var(--font-text-size); + --checkbox-marker-color: var(--background-primary); + --checkbox-color: var(--interactive-accent); + --checkbox-color-hover: var(--interactive-accent-hover); + --checkbox-border-color: var(--text-faint); + --checkbox-border-color-hover: var(--text-muted); + --checklist-done-decoration: line-through; + --checklist-done-color: var(--text-muted); + /* Code */ + --code-white-space: pre-wrap; + --code-radius: var(--radius-s); + --code-size: var(--font-smaller); + --code-background: var(--background-primary-alt); + --code-normal: var(--text-muted); + --code-comment: var(--text-faint); + --code-function: var(--color-yellow); + --code-important: var(--color-orange); + --code-keyword: var(--color-pink); + --code-operator: var(--color-red); + --code-property: var(--color-cyan); + --code-punctuation: var(--text-muted); + --code-string: var(--color-green); + --code-tag: var(--color-red); + --code-value: var(--color-purple); + /* Collapse icons */ + --collapse-icon-color: var(--text-faint); + --collapse-icon-color-collapsed: var(--text-accent); + /* Cursor */ + --cursor: default; + --cursor-link: pointer; + /* Dialogs - e.g. small modals, confirmations */ + --dialog-width: 560px; + --dialog-max-width: 80vw; + --dialog-max-height: 85vh; + /* Dividers — between panes */ + --divider-color: var(--background-modifier-border); + --divider-color-hover: var(--interactive-accent); + --divider-width: 1px; + --divider-width-hover: 3px; + --divider-vertical-height: calc(100% - var(--header-height)); + /* Dragging */ + --drag-ghost-background: rgba(0, 0, 0, 0.85); + --drag-ghost-text-color: #fff; + /* Embeds */ + --embed-max-height: 4000px; + --embed-canvas-max-height: 400px; + --embed-background: inherit; + --embed-border-left: 2px solid var(--interactive-accent); + --embed-border-right: none; + --embed-border-top: none; + --embed-border-bottom: none; + --embed-padding: 0 0 0 var(--size-4-6); + --embed-font-style: inherit; + /* Blocks */ + --embed-block-shadow-hover: 0 0 0 1px var(--background-modifier-border), + inset 0 0 0 1px var(--background-modifier-border); + /* File layout */ + --file-line-width: 700px; + --file-folding-offset: 24px; + --file-margins: var(--size-4-8); + --file-header-font-size: var(--font-ui-small); + --file-header-font-weight: 400; + --file-header-border: var(--border-width) solid transparent; + --file-header-justify: center; + /* Relative font sizes */ + --font-smallest: 0.8em; + --font-smaller: 0.875em; + --font-small: 0.933em; + /* UI font sizes */ + --font-ui-smaller: 12px; + --font-ui-small: 13px; + --font-ui-medium: 15px; + --font-ui-large: 20px; + /* Font weights */ + --font-thin: 100; + --font-extralight: 200; + --font-light: 300; + --font-normal: 400; + --font-medium: 500; + --font-semibold: 600; + --font-bold: 700; + --font-extrabold: 800; + --font-black: 900; + /* Footnotes */ + --footnote-size: var(--font-smaller); + /* Graphs */ + --graph-controls-width: 240px; + --graph-text: var(--text-normal); + --graph-line: var(--color-base-35, var(--background-modifier-border-focus)); + --graph-node: var(--text-muted); + --graph-node-unresolved: var(--text-faint); + --graph-node-focused: var(--text-accent); + --graph-node-tag: var(--color-green); + --graph-node-attachment: var(--color-yellow); + /* Headings */ + --heading-formatting: var(--text-faint); + --heading-spacing: calc(var(--p-spacing) * 2.5); + --h1-color: inherit; + --h2-color: inherit; + --h3-color: inherit; + --h4-color: inherit; + --h5-color: inherit; + --h6-color: inherit; + --h1-font: inherit; + --h2-font: inherit; + --h3-font: inherit; + --h4-font: inherit; + --h5-font: inherit; + --h6-font: inherit; + --h1-line-height: 1.2; + --h2-line-height: 1.2; + --h3-line-height: 1.3; + --h4-line-height: 1.4; + --h5-line-height: var(--line-height-normal); + --h6-line-height: var(--line-height-normal); + --h1-size: 1.802em; + --h2-size: 1.602em; + --h3-size: 1.424em; + --h4-size: 1.266em; + --h5-size: 1.125em; + --h6-size: 1em; + --h1-style: normal; + --h2-style: normal; + --h3-style: normal; + --h4-style: normal; + --h5-style: normal; + --h6-style: normal; + --h1-variant: normal; + --h2-variant: normal; + --h3-variant: normal; + --h4-variant: normal; + --h5-variant: normal; + --h6-variant: normal; + --h1-weight: 700; + --h2-weight: 600; + --h3-weight: 600; + --h4-weight: 600; + --h5-weight: 600; + --h6-weight: 600; + /* View header */ + --header-height: 40px; + /* Horizontal rules */ + --hr-color: var(--background-modifier-border); + --hr-thickness: 2px; + /* Icons */ + --icon-size: var(--icon-m); + --icon-stroke: var(--icon-m-stroke-width); + --icon-xs: 14px; + --icon-s: 16px; + --icon-m: 18px; + --icon-l: 18px; + --icon-xl: 32px; + --icon-xs-stroke-width: 2px; + --icon-s-stroke-width: 2px; + --icon-m-stroke-width: 1.75px; + --icon-l-stroke-width: 1.75px; + --icon-xl-stroke-width: 1.25px; + --icon-color: var(--text-muted); + --icon-color-hover: var(--text-muted); + --icon-color-active: var(--text-accent); + --icon-color-focused: var(--text-normal); + --icon-opacity: 0.85; + --icon-opacity-hover: 1; + --icon-opacity-active: 1; + --clickable-icon-radius: var(--radius-s); + /* Indentation guide */ + --indentation-guide-width: 1px; + --indentation-guide-width-active: 1px; + --indentation-guide-color: rgba(var(--mono-rgb-100), 0.12); + --indentation-guide-color-active: rgba(var(--mono-rgb-100), 0.3); + --indentation-guide-editing-indent: 1em; + /* Inline title */ + --inline-title-color: var(--h1-color); + --inline-title-font: var(--h1-font); + --inline-title-line-height: var(--h1-line-height); + --inline-title-size: var(--h1-size); + --inline-title-style: var(--h1-style); + --inline-title-variant: var(--h1-variant); + --inline-title-weight: var(--h1-weight); + --inline-title-margin-bottom: 0.5em; + /* Inputs */ + --input-height: 30px; + --input-radius: 5px; + --input-font-weight: var(--font-normal); + --input-border-width: 1px; + /* Italic */ + --italic-color: inherit; + --italic-weight: inherit; + /* Z-index */ + --layer-cover: 5; + --layer-sidedock: 10; + --layer-status-bar: 15; + --layer-popover: 30; + --layer-slides: 45; + --layer-modal: 50; + --layer-notice: 60; + --layer-menu: 65; + --layer-tooltip: 70; + --layer-dragged-item: 80; + /* Line heights */ + --line-height-normal: 1.5; + --line-height-tight: 1.3; + /* Links */ + --link-color: var(--text-accent); + --link-color-hover: var(--text-accent-hover); + --link-decoration: underline; + --link-decoration-hover: underline; + --link-decoration-thickness: auto; + --link-external-color: var(--text-accent); + --link-external-color-hover: var(--text-accent-hover); + --link-external-decoration: underline; + --link-external-decoration-hover: underline; + --link-external-filter: none; + --link-unresolved-color: var(--text-accent); + --link-unresolved-opacity: 0.7; + --link-unresolved-filter: none; + --link-unresolved-decoration-style: solid; + --link-unresolved-decoration-color: hsla(var(--interactive-accent-hsl), 0.3); + /* Lists */ + --list-indent: 2.25em; + --list-spacing: 0.075em; + --list-marker-color: var(--text-faint); + --list-marker-color-hover: var(--text-muted); + --list-marker-color-collapsed: var(--text-accent); + --list-bullet-border: none; + --list-bullet-radius: 50%; + --list-bullet-size: 0.3em; + --list-bullet-transform: none; + --list-numbered-style: decimal; + /* File navigator */ + --nav-item-size: var(--font-ui-small); + --nav-item-color: var(--text-muted); + --nav-item-color-hover: var(--text-normal); + --nav-item-color-active: var(--text-normal); + --nav-item-color-selected: var(--text-normal); + --nav-item-color-highlighted: var(--text-accent-hover); + --nav-item-background-hover: var(--background-modifier-hover); + --nav-item-background-active: var(--background-modifier-hover); + --nav-item-background-selected: hsla(var(--color-accent-hsl), 0.15); + --nav-item-padding: var(--size-4-1) var(--size-4-2) var(--size-4-1) var(--size-4-6); + --nav-item-parent-padding: var(--nav-item-padding); + --nav-item-children-padding-left: var(--size-2-2); + --nav-item-children-margin-left: var(--size-4-3); + --nav-item-weight: inherit; + --nav-item-weight-hover: inherit; + --nav-item-weight-active: inherit; + --nav-item-white-space: nowrap; + --nav-indentation-guide-width: var(--indentation-guide-width); + --nav-indentation-guide-color: var(--indentation-guide-color); + --nav-collapse-icon-color: var(--collapse-icon-color); + --nav-collapse-icon-color-collapsed: var(--text-faint); + /* Metadata */ + --metadata-background: transparent; + --metadata-display-reading: block; + --metadata-display-editing: block; + --metadata-max-width: none; + --metadata-padding: var(--size-4-2) 0; + --metadata-border-color: var(--background-modifier-border); + --metadata-border-radius: 0; + --metadata-border-width: 0; + --metadata-divider-color: var(--background-modifier-border); + --metadata-divider-color-hover: transparent; + --metadata-divider-color-focus: transparent; + --metadata-divider-width: 0; + --metadata-gap: 3px; + --metadata-property-padding: 0; + --metadata-property-radius: 6px; + --metadata-property-background: transparent; + --metadata-property-background-hover: transparent; + --metadata-property-background-active: var(--background-modifier-hover); + --metadata-label-background-hover: transparent; + --metadata-label-background-active: var(--background-modifier-hover); + --metadata-label-font-size: var(--font-smaller); + --metadata-label-font-weight: inherit; + --metadata-label-text-color: var(--text-muted); + --metadata-label-text-color-hover: var(--text-muted); + --metadata-label-width: 9em; + --metadata-input-height: calc(var(--font-text-size) * 1.75); + --metadata-input-text-color: var(--text-normal); + --metadata-input-font-size: var(--font-smaller); + --metadata-input-background: transparent; + --metadata-input-background-hover: transparent; + --metadata-input-background-active: var(--background-modifier-hover); + --metadata-sidebar-label-font-size: var(--font-ui-small); + --metadata-sidebar-input-font-size: var(--font-ui-small); + /* Modals - e.g. settings, community themes, community plugins */ + --modal-background: var(--background-primary); + --modal-width: 90vw; + --modal-height: 85vh; + --modal-max-width: 1100px; + --modal-max-height: 1000px; + --modal-max-width-narrow: 800px; + --modal-border-width: var(--border-width); + --modal-border-color: var(--color-base-40, var(--background-modifier-border-focus)); + --modal-radius: var(--radius-l); + --modal-community-sidebar-width: 280px; + /* Multi-select pills */ + --pill-color: var(--text-muted); + --pill-color-hover: var(--text-normal); + --pill-color-remove: var(--text-faint); + --pill-color-remove-hover: var(--text-accent); + --pill-decoration: none; + --pill-decoration-hover: none; + --pill-background: transparent; + --pill-background-hover: transparent; + --pill-border-color: var(--background-modifier-border); + --pill-border-color-hover: var(--background-modifier-border-hover); + --pill-border-width: var(--border-width); + --pill-padding-x: 0.65em; + --pill-padding-y: 0.25em; + --pill-radius: 2em; + --pill-weight: inherit; + /* Paragraphs */ + --p-spacing: 1rem; + --p-spacing-empty: 0rem; + /* PDF view */ + --pdf-background: var(--background-primary); + --pdf-page-background: var(--background-primary); + --pdf-shadow: 0 0 0 1px rgba(0, 0, 0, 0.05), 0 2px 8px rgba(0, 0, 0, 0.1); + --pdf-spread-shadow: 0 0 0 1px rgba(0, 0, 0, 0.05); + --pdf-sidebar-background: var(--background-primary); + --pdf-thumbnail-shadow: 0 0 0 1px rgba(0, 0, 0, 0.15), 0 2px 8px rgba(0, 0, 0, 0.2); + /* Popovers - file previews */ + --popover-width: 450px; + --popover-height: 400px; + --popover-max-height: 70vh; + --popover-pdf-width: 600px; + --popover-pdf-height: 800px; + --popover-font-size: var(--font-text-size); + /* Prompts - e.g. quick switcher, command palette */ + --prompt-width: 700px; + --prompt-max-width: 80vw; + --prompt-max-height: 70vh; + --prompt-border-width: var(--border-width); + --prompt-border-color: var(--color-base-40, var(--background-modifier-border-focus)); + /* Radiuses */ + --radius-s: 4px; + --radius-m: 8px; + --radius-l: 12px; + --radius-xl: 16px; + /* Ribbon */ + --ribbon-background: var(--background-secondary); + --ribbon-background-collapsed: var(--background-primary); + --ribbon-width: 44px; + --ribbon-padding: var(--size-4-2) var(--size-4-1) var(--size-4-3); + /* Scrollbars */ + --scrollbar-active-thumb-bg: rgba(var(--mono-rgb-100), 0.2); + --scrollbar-bg: rgba(var(--mono-rgb-100), 0.05); + --scrollbar-thumb-bg: rgba(var(--mono-rgb-100), 0.1); + /* Search */ + --search-clear-button-color: var(--text-muted); + --search-clear-button-size: 13px; + --search-icon-color: var(--text-muted); + --search-icon-size: 18px; + --search-result-background: var(--background-primary); + /* Layout sizing - for padding and margins */ + --size-2-1: 2px; + --size-2-2: 4px; + --size-2-3: 6px; + --size-4-1: 4px; + --size-4-2: 8px; + --size-4-3: 12px; + --size-4-4: 16px; + --size-4-5: 20px; + --size-4-6: 24px; + --size-4-8: 32px; + --size-4-9: 36px; + --size-4-12: 48px; + --size-4-16: 64px; + --size-4-18: 72px; + /* Sidebar */ + --sidebar-markdown-font-size: calc(var(--font-text-size) * 0.9); + --sidebar-tab-text-display: none; + /* Sliders */ + --slider-thumb-border-width: 1px; + --slider-thumb-border-color: var(--background-modifier-border-hover); + --slider-thumb-height: 18px; + --slider-thumb-width: 18px; + --slider-thumb-y: -6px; + --slider-thumb-radius: 50%; + --slider-s-thumb-size: 15px; + --slider-s-thumb-position: -5px; + --slider-track-background: var(--background-modifier-border); + --slider-track-height: 3px; + /* Status bar */ + --status-bar-background: var(--background-secondary); + --status-bar-border-color: var(--divider-color); + --status-bar-border-width: 1px 0 0 1px; + --status-bar-font-size: var(--font-ui-smaller); + --status-bar-text-color: var(--text-muted); + --status-bar-position: fixed; + --status-bar-radius: var(--radius-m) 0 0 0; + --status-bar-scroll-padding: calc(var(--status-bar-font-size) + 18px); + /* Sync */ + --sync-avatar-color-current-user: transparent; + --sync-avatar-color-1: var(--color-red); + --sync-avatar-color-2: var(--color-orange); + --sync-avatar-color-3: var(--color-yellow); + --sync-avatar-color-4: var(--color-green); + --sync-avatar-color-5: var(--color-cyan); + --sync-avatar-color-6: var(--color-blue); + --sync-avatar-color-7: var(--color-purple); + --sync-avatar-color-8: var(--color-pink); + /* Swatch for color inputs */ + --swatch-radius: 14px; + --swatch-height: 24px; + --swatch-width: 24px; + --swatch-shadow: inset 0 0 0 1px rgba(var(--mono-rgb-100), 0.15); + /* Tabs */ + --tab-background-active: var(--background-primary); + --tab-text-color: var(--text-faint); + --tab-text-color-active: var(--text-muted); + --tab-text-color-focused: var(--text-muted); + --tab-text-color-focused-active: var(--text-muted); + --tab-text-color-focused-highlighted: var(--text-accent); + --tab-text-color-focused-active-current: var(--text-normal); + --tab-font-size: var(--font-ui-small); + --tab-font-weight: inherit; + --tab-container-background: var(--background-secondary); + --tab-divider-color: var(--background-modifier-border-hover); + --tab-outline-color: var(--divider-color); + --tab-outline-width: 1px; + --tab-curve: 6px; + --tab-radius: var(--radius-s); + --tab-radius-active: 6px 6px 0 0; + --tab-width: 200px; + --tab-max-width: 320px; + /* Stacked tabs */ + --tab-stacked-pane-width: 700px; + --tab-stacked-header-width: var(--header-height); + --tab-stacked-font-size: var(--font-ui-small); + --tab-stacked-font-weight: 400; + --tab-stacked-text-align: left; + --tab-stacked-text-transform: rotate(0deg); + --tab-stacked-text-writing-mode: vertical-lr; + --tab-stacked-shadow: -8px 0 8px 0 rgba(0, 0, 0, 0.05); + /* Tables */ + --table-background: transparent; + --table-border-width: 1px; + --table-border-color: var(--background-modifier-border); + --table-white-space: break-spaces; + --table-header-background: var(--table-background); + --table-header-background-hover: inherit; + --table-header-border-width: var(--table-border-width); + --table-header-border-color: var(--table-border-color); + --table-header-font: inherit; + --table-header-size: var(--table-text-size); + --table-header-weight: var(--bold-weight); + --table-header-color: var(--text-normal); + --table-line-height: var(--line-height-tight); + --table-text-size: var(--font-text-size); + --table-text-color: inherit; + --table-column-min-width: 6ch; + --table-column-max-width: none; + --table-column-alt-background: var(--table-background); + --table-column-first-border-width: var(--table-border-width); + --table-column-last-border-width: var(--table-border-width); + --table-row-background-hover: var(--table-background); + --table-row-alt-background: var(--table-background); + --table-row-alt-background-hover: var(--table-background); + --table-row-last-border-width: var(--table-border-width); + --table-selection: hsla(var(--color-accent-hsl), 0.1); + --table-selection-blend-mode: var(--highlight-mix-blend-mode); + --table-selection-border-color: var(--interactive-accent); + --table-selection-border-width: 2px; + --table-selection-border-radius: 4px; + --table-cell-vertical-alignment: top; + --table-drag-handle-background: transparent; + --table-drag-handle-background-active: var(--table-selection-border-color); + --table-drag-handle-color: var(--text-faint); + --table-drag-handle-color-active: var(--text-on-accent); + --table-add-button-background: transparent; + --table-add-button-border-width: var(--table-border-width); + --table-add-button-border-color: var(--background-modifier-border); + /* Tags */ + --tag-size: var(--font-smaller); + --tag-color: var(--text-accent); + --tag-color-hover: var(--text-accent); + --tag-decoration: none; + --tag-decoration-hover: none; + --tag-background: hsla(var(--interactive-accent-hsl), 0.1); + --tag-background-hover: hsla(var(--interactive-accent-hsl), 0.2); + --tag-border-color: hsla(var(--interactive-accent-hsl), 0.15); + --tag-border-color-hover: hsla(var(--interactive-accent-hsl), 0.15); + --tag-border-width: 0px; + --tag-padding-x: 0.65em; + --tag-padding-y: 0.25em; + --tag-radius: 2em; + --tag-weight: inherit; + /* Window frame */ + --titlebar-background: var(--background-secondary); + --titlebar-background-focused: var(--background-secondary-alt); + --titlebar-border-width: 0px; + --titlebar-border-color: var(--background-modifier-border); + --titlebar-text-color: var(--text-muted); + --titlebar-text-color-focused: var(--text-normal); + --titlebar-text-weight: var(--font-bold); + /* Toggles */ + --toggle-border-width: 2px; + --toggle-width: 40px; + --toggle-radius: 18px; + --toggle-thumb-color: white; + --toggle-thumb-radius: 18px; + --toggle-thumb-height: 18px; + --toggle-thumb-width: 18px; + --toggle-s-border-width: 2px; + --toggle-s-width: 34px; + --toggle-s-thumb-height: 15px; + --toggle-s-thumb-width: 15px; + /* Vault name */ + --vault-name-font-size: var(--font-ui-small); + --vault-name-font-weight: var(--font-medium); + --vault-name-color: var(--text-normal); + /* Workspace */ + --workspace-background-translucent: rgba(var(--mono-rgb-0), 0.6); + /* Color mappings ------------------------ */ + /* Accent HSL values */ + --accent-h: 258; + --accent-s: 88%; + --accent-l: 66%; + /* Backgrounds */ + --background-primary: var(--color-base-00); + --background-primary-alt: var(--color-base-10); + --background-secondary: var(--color-base-20); + --background-modifier-hover: rgba(var(--mono-rgb-100), 0.075); + --background-modifier-active-hover: hsla(var(--interactive-accent-hsl), 0.15); + --background-modifier-border: var(--color-base-30); + --background-modifier-border-hover: var(--color-base-35); + --background-modifier-border-focus: var(--color-base-40); + --background-modifier-error-rgb: var(--color-red-rgb); + --background-modifier-error: var(--color-red); + --background-modifier-error-hover: var(--color-red); + --background-modifier-success-rgb: var(--color-green-rgb); + --background-modifier-success: var(--color-green); + --background-modifier-message: rgba(0, 0, 0, 0.9); + /* Inputs */ + --background-modifier-form-field: var(--color-base-00); + /* Text */ + --text-normal: var(--color-base-100); + --text-muted: var(--color-base-70); + --text-faint: var(--color-base-50); + --text-on-accent: white; + --text-on-accent-inverted: black; + --text-error: var(--color-red); + --text-warning: var(--color-orange); + --text-success: var(--color-green); + --text-selection: hsla(var(--color-accent-hsl), 0.2); + --text-highlight-bg-rgb: 255, 208, 0; + --text-highlight-bg: rgba(var(--text-highlight-bg-rgb), 0.4); + --text-accent: var(--color-accent); + --text-accent-hover: var(--color-accent-2); + --interactive-normal: var(--color-base-00); + --interactive-hover: var(--color-base-10); + --interactive-accent-hsl: var(--color-accent-hsl); + --interactive-accent: var(--color-accent-1); + --interactive-accent-hover: var(--color-accent-2); +} +.theme-light { + color-scheme: light; + --highlight-mix-blend-mode: darken; + --mono-rgb-0: 255, 255, 255; + --mono-rgb-100: 0, 0, 0; + --color-red-rgb: 233, 49, 71; + --color-red: #e93147; + --color-orange-rgb: 236, 117, 0; + --color-orange: #ec7500; + --color-yellow-rgb: 224, 172, 0; + --color-yellow: #e0ac00; + --color-green-rgb: 8, 185, 78; + --color-green: #08b94e; + --color-cyan-rgb: 0, 191, 188; + --color-cyan: #00bfbc; + --color-blue-rgb: 8, 109, 221; + --color-blue: #086ddd; + --color-purple-rgb: 120, 82, 238; + --color-purple: #7852ee; + --color-pink-rgb: 213, 57, 132; + --color-pink: #d53984; + --color-base-00: #ffffff; + --color-base-05: #fcfcfc; + --color-base-10: #fafafa; + --color-base-20: #f6f6f6; + --color-base-25: #e3e3e3; + --color-base-30: #e0e0e0; + --color-base-35: #d4d4d4; + --color-base-40: #bdbdbd; + --color-base-50: #ababab; + --color-base-60: #707070; + --color-base-70: #5c5c5c; + --color-base-100: #222222; + --color-accent-hsl: var(--accent-h), + var(--accent-s), + var(--accent-l); + --color-accent: hsl(var(--accent-h), var(--accent-s), var(--accent-l)); + --color-accent-1: hsl(calc(var(--accent-h) - 1), calc(var(--accent-s) * 1.01), calc(var(--accent-l) * 1.075)); + --color-accent-2: hsl(calc(var(--accent-h) - 3), calc(var(--accent-s) * 1.02), calc(var(--accent-l) * 1.15)); + --background-secondary-alt: var(--color-base-05); + --background-modifier-box-shadow: rgba(0, 0, 0, 0.1); + --background-modifier-cover: rgba(220, 220, 220, 0.4); + --input-shadow: inset 0 0 0 1px rgba(0, 0, 0, 0.12), + 0 2px 3px 0 rgba(0,0,0,.05), + 0 1px 1.5px 0 rgba(0,0,0,.03), + 0 1px 2px 0 rgba(0,0,0,.04), + 0 0 0 0 transparent; + --input-shadow-hover: inset 0 0 0 1px rgba(0, 0, 0, 0.17), + 0 2px 3px 0 rgba(0,0,0,.1), + 0 1px 1.5px 0 rgba(0,0,0,.03), + 0 1px 2px 0 rgba(0,0,0,.04), + 0 0 0 0 transparent; + --shadow-s: 0px 1px 2px rgba(0, 0, 0, 0.028), + 0px 3.4px 6.7px rgba(0, 0, 0, .042), + 0px 15px 30px rgba(0, 0, 0, .07); + --shadow-l: 0px 1.8px 7.3px rgba(0, 0, 0, 0.071), + 0px 6.3px 24.7px rgba(0, 0, 0, 0.112), + 0px 30px 90px rgba(0, 0, 0, 0.2); +} +.theme-dark { + color-scheme: dark; + --highlight-mix-blend-mode: lighten; + --mono-rgb-0: 0, 0, 0; + --mono-rgb-100: 255, 255, 255; + --color-red-rgb: 251, 70, 76; + --color-red: #fb464c; + --color-orange-rgb: 233, 151, 63; + --color-orange: #e9973f; + --color-yellow-rgb: 224, 222, 113; + --color-yellow: #e0de71; + --color-green-rgb: 68, 207, 110; + --color-green: #44cf6e; + --color-cyan-rgb: 83, 223, 221; + --color-cyan: #53dfdd; + --color-blue-rgb: 2, 122, 255; + --color-blue: #027aff; + --color-purple-rgb: 168, 130, 255; + --color-purple: #a882ff; + --color-pink-rgb: 250, 153, 205; + --color-pink: #fa99cd; + --color-base-00: #1e1e1e; + --color-base-05: #212121; + --color-base-10: #242424; + --color-base-20: #262626; + --color-base-25: #2a2a2a; + --color-base-30: #363636; + --color-base-35: #3f3f3f; + --color-base-40: #555555; + --color-base-50: #666666; + --color-base-60: #999999; + --color-base-70: #b3b3b3; + --color-base-100: #dadada; + --color-accent-hsl: var(--accent-h), + var(--accent-s), + var(--accent-l); + --color-accent: hsl(var(--accent-h), var(--accent-s), var(--accent-l)); + --color-accent-1: hsl(calc(var(--accent-h) - 3), calc(var(--accent-s) * 1.02), calc(var(--accent-l) * 1.15)); + --color-accent-2: hsl(calc(var(--accent-h) - 5), calc(var(--accent-s) * 1.05), calc(var(--accent-l) * 1.29)); + --background-modifier-form-field: var(--color-base-25); + --background-secondary-alt: var(--color-base-30); + --interactive-normal: var(--color-base-30); + --interactive-hover: var(--color-base-35); + --text-accent: var(--color-accent-1); + --interactive-accent: var(--color-accent); + --interactive-accent-hover: var(--color-accent-1); + --background-modifier-box-shadow: rgba(0, 0, 0, 0.3); + --background-modifier-cover: rgba(10, 10, 10, 0.4); + --text-selection: hsla(var(--interactive-accent-hsl), 0.25); + --input-shadow: inset 0 0.5px 0.5px 0.5px rgba(255, 255, 255, 0.09), + 0 2px 4px 0 rgba(0,0,0,.15), + 0 1px 1.5px 0 rgba(0,0,0,.1), + 0 1px 2px 0 rgba(0,0,0,.2), + 0 0 0 0 transparent; + --input-shadow-hover: inset 0 0.5px 1px 0.5px rgba(255, 255, 255, 0.16), + 0 2px 3px 0 rgba(0,0,0,.3), + 0 1px 1.5px 0 rgba(0,0,0,.2), + 0 1px 2px 0 rgba(0,0,0,.4), + 0 0 0 0 transparent; + --shadow-s: 0px 1px 2px rgba(0, 0, 0, 0.121), + 0px 3.4px 6.7px rgba(0, 0, 0, 0.179), + 0px 15px 30px rgba(0, 0, 0, 0.3); + --shadow-l: 0px 1.8px 7.3px rgba(0, 0, 0, 0.071), + 0px 6.3px 24.7px rgba(0, 0, 0, 0.112), + 0px 30px 90px rgba(0, 0, 0, 0.2); + --pdf-shadow: 0 0 0 1px var(--background-modifier-border); + --pdf-thumbnail-shadow: 0 0 0 1px var(--background-modifier-border); +} +iframe { + color-scheme: normal; +} +@media print { + .theme-dark { + --highlight-mix-blend-mode: darken; + } +} +@font-face { + font-family: 'Avenir Next'; + font-weight: normal; + font-style: normal; + font-display: swap; + src: url(public/fonts/94f2f163d4b698242fef.otf); +} +@font-face { + font-family: 'Inter'; + font-style: normal; + font-weight: 200; + font-display: swap; + src: url(public/fonts/72505e6a122c6acd5471.woff2) format('woff2'); +} +@font-face { + font-family: 'Inter'; + font-style: normal; + font-weight: 300; + font-display: swap; + src: url(public/fonts/2d5198822ab091ce4305.woff2) format('woff2'); +} +@font-face { + font-family: 'Inter'; + font-weight: 400; + font-style: normal; + font-display: swap; + src: url(public/fonts/c8ba52b05a9ef10f4758.woff2); +} +@font-face { + font-family: 'Inter'; + font-weight: 400; + font-style: italic; + font-display: swap; + src: url(public/fonts/cb10ffd7684cd9836a05.woff2); +} +@font-face { + font-family: 'Inter'; + font-weight: 600; + font-style: normal; + font-display: swap; + src: url(public/fonts/b5f0f109bc88052d4000.woff2); +} +@font-face { + font-family: 'Inter'; + font-weight: 800; + font-style: normal; + font-display: swap; + src: url(public/fonts/cbe0ae49c52c920fd563.woff2); +} +@font-face { + font-family: 'Inter'; + font-weight: 800; + font-style: italic; + font-display: swap; + src: url(public/fonts/535a6cf662596b3bd6a6.woff2); +} +@font-face { + font-family: 'Source Code Pro'; + font-weight: normal; + font-style: normal; + font-display: swap; + src: url(public/fonts/70cc7ff27245e82ad414.ttf); +} +@font-face { + font-family: 'Source Code Pro'; + font-weight: normal; + font-style: italic; + font-display: swap; + src: url(public/fonts/454577c22304619db035.ttf); +} +@font-face { + font-family: 'Source Code Pro'; + font-weight: bold; + font-style: normal; + font-display: swap; + src: url(public/fonts/52ac8f3034507f1d9e53.ttf); +} +@font-face { + font-family: 'Source Code Pro'; + font-weight: bold; + font-style: italic; + font-display: swap; + src: url(public/fonts/05b618077343fbbd92b7.ttf); +} +@font-face { + font-family: 'Flow Circular'; + font-display: swap; + src: url(public/fonts/4bb6ac751d1c5478ff3a.woff2); +} +@font-face { + font-family: '??'; + unicode-range: U+0; +} +body { + --font-default: ui-sans-serif, -apple-system, BlinkMacSystemFont, "Segoe UI", Roboto, "Inter", "Apple Color Emoji", "Segoe UI Emoji", "Segoe UI Symbol", "Microsoft YaHei Light", sans-serif; + --font-monospace-default: Menlo, SFMono-Regular, Consolas, "Roboto Mono", 'Source Code Pro', monospace; + --font-interface-override: '??'; + --font-interface-theme: '??'; + --font-interface: var(--font-interface-override), var(--font-interface-theme), var(--default-font, '??'), var(--font-default); + --font-text-override: '??'; + --font-text-theme: '??'; + --font-text: var(--font-text-override), var(--font-text-theme), var(--font-interface); + --font-print-override: '??'; + --font-print: var(--font-print-override), var(--font-text-override), var(--font-text-theme), 'Arial'; + --font-monospace-override: '??'; + --font-monospace-theme: '??'; + --font-monospace: var(--font-monospace-override), var(--font-monospace-theme), var(--font-monospace-default); + --font-text-size: 16px; + --font-mermaid: var(--font-text); +} +@media print { + html, + body { + padding-top: 0 !important; + overflow: auto !important; + height: auto !important; + } + iframe, + .titlebar, + .app-container, + .progress-bar, + .popover, + .markdown-embed-link { + display: none !important; + } + body > :not(.print) { + display: none !important; + } + .print .markdown-preview-view { + -webkit-print-color-adjust: exact; + color: initial; + } + .print .markdown-preview-view mark { + color: initial; + } + .print .markdown-preview-view .metadata-container { + display: none; + } + .print .markdown-preview-view .markdown-embed-content { + max-height: none; + overflow: visible; + } + .print .markdown-preview-view .callout-content { + display: inherit !important; + } + .print .external-link { + background: none; + padding-right: 0; + } + * { + text-shadow: none !important; + } + webview { + display: none; + } + ::-webkit-scrollbar { + display: none; + } + body { + --font-text: var(--font-print) !important; + } +} +* { + box-sizing: border-box; +} +html, +body { + margin: 0; + padding: 0; + height: 100%; + width: 100%; + overflow: hidden; +} +body { + text-rendering: optimizeLegibility; + font-family: var(--font-interface); + line-height: var(--line-height-tight); + font-size: var(--font-ui-medium); + background-color: var(--background-primary); + color: var(--text-normal); + -webkit-tap-highlight-color: rgba(255, 255, 255, 0); +} +body.is-translucent { + background-color: transparent; +} +@keyframes node-inserted { + from { + outline-color: #fff; + } + to { + outline-color: #000; + } +} +.node-insert-event { + animation-duration: 0.01s; + animation-name: node-inserted; +} +.is-flashing { + transition: all 0.25s ease; + background-color: var(--text-highlight-bg) !important; + color: var(--text-normal); + mix-blend-mode: var(--highlight-mix-blend-mode); + border-radius: var(--radius-s); +} +body { + user-select: none; + -webkit-user-select: none; + overflow: hidden; +} +body [contenteditable="true"], +body [contenteditable=""] { + user-select: text; + -webkit-user-select: text; +} +body.is-grabbing, +body.is-grabbing *:not(.workspace-leaf-resize-handle) { + cursor: -moz-grabbing !important; + cursor: -webkit-grabbing !important; + cursor: grabbing !important; +} +body.is-grabbing iframe:not(.is-controlled), +body.is-grabbing webview { + pointer-events: none; +} +.app-container { + display: flex; + height: 100%; + width: 100%; + position: relative; + flex-direction: column; +} +.app-container.no-transition * { + transition: none !important; +} +.horizontal-main-container { + width: 100%; + display: flex; + overflow: hidden; + flex: 1 0 0; +} +:focus { + outline: none; +} +.is-text-garbled * { + font-family: 'Flow Circular', sans-serif !important; + line-height: 1.45em !important; +} +/* CURSOR */ +.cm-s-obsidian .cm-cursor, +.cm-s-obsidian .cm-dropCursor { + border-left-color: var(--text-normal); +} +.cm-fat-cursor-mark { + background-color: rgba(20, 255, 20, 0.5); + -webkit-animation: blink 1.06s steps(1) infinite; + -moz-animation: blink 1.06s steps(1) infinite; + animation: blink 1.06s steps(1) infinite; +} +.cm-animate-fat-cursor { + width: auto; + border: 0; + -webkit-animation: blink 1.06s steps(1) infinite; + -moz-animation: blink 1.06s steps(1) infinite; + animation: blink 1.06s steps(1) infinite; + background: var(--interactive-accent); + color: var(--text-on-accent); +} +@-moz-keyframes blink { + 50% { + background-color: transparent; + } +} +@-webkit-keyframes blink { + 50% { + background-color: transparent; + } +} +@keyframes blink { + 50% { + background-color: transparent; + } +} +.cm-tab { + display: inline-block; + text-decoration: inherit; +} +.cm-negative { + color: var(--text-error); +} +.cm-positive { + color: var(--text-success); +} +.cm-strikethrough { + text-decoration: line-through; +} +.cm-invalidchar { + color: var(--text-error); +} +.cm-searching { + background-color: #ffa; + background-color: rgba(255, 255, 0, 0.4); +} +/* Used to force a border model for a node */ +.cm-force-border { + padding-right: 0.1px; +} +/* See issue #2901 */ +.cm-tab-wrap-hack:after { + content: ''; +} +.markdown-source-view { + font-size: var(--font-text-size); + font-family: var(--font-text); +} +.workspace-leaf-content.is-read-mode .markdown-source-view { + z-index: 0; +} +.drag-ghost { + position: fixed; + font-size: var(--font-ui-small); + color: var(--drag-ghost-text-color); + padding: var(--size-2-3) var(--size-4-2); + border-radius: var(--radius-s); + background-color: var(--drag-ghost-background); + box-shadow: 0 2px 8px var(--background-modifier-box-shadow); + z-index: var(--layer-dragged-item); + max-width: 300px; + font-weight: var(--font-medium); + pointer-events: none; +} +.drag-ghost.mod-leaf { + display: flex; + z-index: var(--layer-tooltip); +} +.drag-ghost-icon { + margin-right: var(--size-2-3); + position: relative; +} +.drag-reorder-ghost { + position: fixed; + border-radius: var(--radius-s); + background-color: var(--background-primary); + box-shadow: 0 2px 8px var(--background-modifier-box-shadow); + z-index: var(--layer-dragged-item); + pointer-events: none; +} +.drag-ghost-self { + display: flex; +} +.drag-ghost-self > .svg-icon { + --icon-size: var(--icon-xs); + --icon-stroke: var(--icon-xs-stroke-width); + opacity: 0.7; + vertical-align: middle; + align-self: center; + margin-right: var(--size-2-2); + flex-shrink: 0; +} +.drag-ghost-self span { + overflow: hidden; + white-space: nowrap; + text-overflow: ellipsis; +} +.drag-ghost-action { + padding: var(--size-2-1) 0 0 0; + font-size: var(--font-ui-smaller); + opacity: 0.7; + overflow: hidden; + white-space: nowrap; + text-overflow: ellipsis; +} +.drag-ghost-hidden { + visibility: hidden; + position: relative; +} +.drag-ghost-hidden:before { + content: ' '; + position: absolute; + top: 0; + left: 0; + right: 0; + bottom: 0; + visibility: visible; + border-radius: 5px; + background-color: hsla(var(--interactive-accent-hsl), 0.3); +} +.markdown-source-view:not(.is-live-preview) { + --p-spacing: 0rem; +} +.markdown-source-view.mod-cm6 { + height: 100%; + display: flex; + flex-direction: column; +} +.markdown-source-view.mod-cm6 ::selection { + background-color: var(--text-selection); +} +.markdown-source-view.mod-cm6 .cm-line .cm-selection, +.markdown-source-view.mod-cm6 .cm-line .cm-inline-code .cm-selection { + background-color: var(--text-selection); +} +.markdown-source-view.mod-cm6 .cm-selectionBackground, +.markdown-source-view.mod-cm6 .cm-editor > .cm-scroller > .cm-selectionLayer > .cm-selectionBackground { + background-color: var(--text-selection); +} +.markdown-source-view.mod-cm6.is-readable-line-width .cm-sizer { + max-width: var(--file-line-width); + margin-left: auto; + margin-right: auto; +} +.markdown-source-view.mod-cm6.is-readable-line-width .cm-content { + max-width: var(--file-line-width); +} +.markdown-source-view.mod-cm6.is-readable-line-width .cm-line { + max-width: var(--file-line-width); +} +.markdown-source-view.mod-cm6.is-readable-line-width .cm-line.HyperMD-table-row { + max-width: 100%; +} +.markdown-source-view.mod-cm6 .cm-editor { + flex: 1 1 0; + min-height: 0; +} +.markdown-source-view.mod-cm6 .cm-editor.cm-focused { + outline: none; +} +.markdown-source-view.mod-cm6 .cm-scroller { + font-family: var(--font-text); + line-height: var(--line-height-normal); + scroll-padding-block-end: var(--status-bar-scroll-padding); + scrollbar-gutter: stable; +} +.markdown-source-view.mod-cm6 .cm-sizer { + display: flex; + flex-direction: column; + align-items: stretch; + width: 100%; + min-height: 100%; +} +.markdown-source-view.mod-cm6 .cm-contentContainer { + flex: 1 1 auto; + display: flex; + align-items: stretch; + overflow-x: visible; +} +.markdown-source-view.mod-cm6 .cm-content { + flex-basis: unset !important; + width: 0; + caret-color: var(--text-normal); + min-height: unset; + padding: 0; +} +.is-mobile.is-ios .markdown-source-view.mod-cm6 .cm-content { + -webkit-user-modify: read-write; +} +.markdown-source-view.mod-cm6 .cm-content > * { + margin: 0 !important; + display: block; +} +.markdown-source-view.mod-cm6 .cm-content > [contenteditable=false] { + contain: paint !important; +} +.markdown-source-view.mod-cm6 .cm-gutters { + flex: 0 0 auto; + background-color: transparent; + color: var(--text-faint) !important; + border-right: none !important; + margin-inline-end: var(--file-folding-offset); + font-size: var(--font-ui-smaller); + z-index: 1; + font-variant: tabular-nums; +} +.markdown-source-view.mod-cm6 .cm-line > * { + text-indent: 0; +} +.markdown-source-view.mod-cm6 .cm-transparent { + color: transparent; +} +.markdown-source-view.mod-cm6 .cm-html-embed, +.markdown-source-view.mod-cm6 .cm-callout, +.markdown-source-view.mod-cm6 .cm-table-widget { + white-space: normal; + overflow-wrap: normal; + word-break: normal; +} +.markdown-source-view.mod-cm6 .cm-table-widget { + padding: var(--size-4-4); + margin: 0 calc(-1 * var(--size-4-4)) !important; + overflow-x: auto; + overflow-y: hidden; +} +.markdown-source-view.mod-cm6 .cm-table-widget.is-loading { + padding: 0; + margin: 0 !important; +} +.markdown-source-view.mod-cm6 .cm-table-widget .table-wrapper { + position: relative; + width: fit-content; +} +.markdown-source-view.mod-cm6 .cm-table-widget th, +.markdown-source-view.mod-cm6 .cm-table-widget td { + min-width: var(--table-column-min-width); + cursor: text; + overflow: visible; + padding: 0; + position: relative; +} +.markdown-source-view.mod-cm6 .cm-table-widget th.is-selected::after, +.markdown-source-view.mod-cm6 .cm-table-widget td.is-selected::after { + pointer-events: none; + content: ""; + display: block; + position: absolute; + top: calc(-1 * var(--table-border-width)); + right: calc(-1 * var(--table-border-width)); + bottom: calc(-1 * var(--table-border-width)); + left: calc(-1 * var(--table-border-width)); + background-color: var(--table-selection); + border: 0px solid var(--table-selection-border-color); + mix-blend-mode: var(--table-selection-blend-mode); + z-index: 1; +} +.markdown-source-view.mod-cm6 .cm-table-widget th.is-selected.left::after, +.markdown-source-view.mod-cm6 .cm-table-widget td.is-selected.left::after { + border-left-width: var(--table-selection-border-width); + left: calc(-1 * var(--table-selection-border-width)); +} +.markdown-source-view.mod-cm6 .cm-table-widget th.is-selected.right::after, +.markdown-source-view.mod-cm6 .cm-table-widget td.is-selected.right::after { + border-right-width: var(--table-selection-border-width); + right: calc(-1 * var(--table-selection-border-width)); +} +.markdown-source-view.mod-cm6 .cm-table-widget th.is-selected.top::after, +.markdown-source-view.mod-cm6 .cm-table-widget td.is-selected.top::after { + border-top-width: var(--table-selection-border-width); + top: calc(-1 * var(--table-selection-border-width)); +} +.markdown-source-view.mod-cm6 .cm-table-widget th.is-selected.bottom::after, +.markdown-source-view.mod-cm6 .cm-table-widget td.is-selected.bottom::after { + border-bottom-width: var(--table-selection-border-width); + bottom: calc(-1 * var(--table-selection-border-width)); +} +.markdown-source-view.mod-cm6 .cm-table-widget th.is-selected.top.right::after, +.markdown-source-view.mod-cm6 .cm-table-widget td.is-selected.top.right::after { + border-top-right-radius: var(--table-selection-border-radius); +} +.markdown-source-view.mod-cm6 .cm-table-widget th.is-selected.bottom.right::after, +.markdown-source-view.mod-cm6 .cm-table-widget td.is-selected.bottom.right::after { + border-bottom-right-radius: var(--table-selection-border-radius); +} +.markdown-source-view.mod-cm6 .cm-table-widget th.is-selected.top.left::after, +.markdown-source-view.mod-cm6 .cm-table-widget td.is-selected.top.left::after { + border-top-left-radius: var(--table-selection-border-radius); +} +.markdown-source-view.mod-cm6 .cm-table-widget th.is-selected.bottom.left::after, +.markdown-source-view.mod-cm6 .cm-table-widget td.is-selected.bottom.left::after { + border-bottom-left-radius: var(--table-selection-border-radius); +} +.markdown-source-view.mod-cm6 .cm-table-widget.has-selection { + --text-selection: transparent; +} +.markdown-source-view.mod-cm6 .cm-table-widget.has-selection .cm-content { + caret-color: transparent; +} +.markdown-source-view.mod-cm6 .cm-table-widget.has-selection .cm-selectionLayer, +.markdown-source-view.mod-cm6 .cm-table-widget.has-selection .cm-cursorLayer { + display: none; +} +.markdown-source-view.mod-cm6 .cm-table-widget.is-selected { + --text-selection: transparent; +} +.markdown-source-view.mod-cm6 .cm-table-widget.is-selected table { + position: relative; +} +.markdown-source-view.mod-cm6 .cm-table-widget.is-selected table::after { + pointer-events: none; + content: ""; + display: block; + position: absolute; + top: calc(-1 * var(--table-border-width)); + right: calc(-1 * var(--table-border-width)); + bottom: calc(-1 * var(--table-border-width)); + left: calc(-1 * var(--table-border-width)); + background-color: var(--table-selection); +} +.markdown-source-view.mod-cm6 .cm-table-widget .table-cell-wrapper { + height: 100%; + padding: var(--size-2-2) var(--size-4-2); +} +.markdown-source-view.mod-cm6 .cm-table-widget .table-row-drag-handle, +.markdown-source-view.mod-cm6 .cm-table-widget .table-col-drag-handle { + --icon-size: var(--icon-s); + --icon-stroke: var(--icon-s-stroke-width); + position: absolute; + display: flex; + align-items: center; + justify-content: center; + cursor: grab; + background-color: var(--table-drag-handle-background); + color: var(--table-drag-handle-color); + opacity: 0; +} +.markdown-source-view.mod-cm6 .cm-table-widget .table-row-drag-handle:active, +.markdown-source-view.mod-cm6 .cm-table-widget .table-col-drag-handle:active, +.markdown-source-view.mod-cm6 .cm-table-widget .table-row-drag-handle:hover, +.markdown-source-view.mod-cm6 .cm-table-widget .table-col-drag-handle:hover { + opacity: 1; +} +.markdown-source-view.mod-cm6 .cm-table-widget .table-row-drag-handle:active, +.markdown-source-view.mod-cm6 .cm-table-widget .table-col-drag-handle:active { + cursor: grabbing; + background-color: var(--table-drag-handle-background-active); + color: var(--table-drag-handle-color-active); + box-shadow: 0 0 0 var(--table-selection-border-width) var(--table-selection-border-color); +} +.markdown-source-view.mod-cm6 .cm-table-widget .table-row-drag-handle *, +.markdown-source-view.mod-cm6 .cm-table-widget .table-col-drag-handle * { + pointer-events: none; +} +.markdown-source-view.mod-cm6 .cm-table-widget .table-row-drag-handle { + top: 0; + left: -1px; + width: calc(var(--size-4-4) - var(--table-selection-border-width)); + height: 100%; + transform: translateX(-100%); + border-top-left-radius: var(--radius-s); + border-bottom-left-radius: var(--radius-s); +} +.markdown-source-view.mod-cm6 .cm-table-widget .table-col-drag-handle { + top: -1px; + left: 0; + width: 100%; + height: calc(var(--size-4-4) - var(--table-selection-border-width)); + transform: translateY(-100%); + border-top-left-radius: var(--radius-s); + border-top-right-radius: var(--radius-s); +} +.markdown-source-view.mod-cm6 .cm-table-widget.is-dragging .table-row-drag-handle:not(:active), +.markdown-source-view.mod-cm6 .cm-table-widget.is-dragging .table-col-drag-handle:not(:active) { + display: none; +} +.markdown-source-view.mod-cm6 .cm-table-widget .table-drag-target { + position: absolute; + border-radius: 2px; + background-color: var(--interactive-accent); +} +.markdown-source-view.mod-cm6 .cm-table-widget .table-drag-target.mod-row { + height: 3px; + transform: translateY(-2px); +} +.markdown-source-view.mod-cm6 .cm-table-widget .table-drag-target.mod-col { + width: 3px; + transform: translateX(-2px); +} +.markdown-source-view.mod-cm6 .cm-table-widget .table-row-btn, +.markdown-source-view.mod-cm6 .cm-table-widget .table-col-btn { + --icon-size: var(--icon-s); + --icon-stroke: var(--icon-s-stroke-width); + position: absolute; + display: flex; + align-items: center; + justify-content: center; + height: var(--size-4-4); + width: var(--size-4-4); + background-color: var(--table-add-button-background); + border: var(--table-add-button-border-width) solid var(--table-add-button-border-color); + color: var(--text-faint); + opacity: 0; + transition: opacity 0s 0.1s; +} +@media (hover: hover) { + .markdown-source-view.mod-cm6 .cm-table-widget .table-row-btn:hover, + .markdown-source-view.mod-cm6 .cm-table-widget .table-col-btn:hover { + opacity: 1; + } +} +.markdown-source-view.mod-cm6 .cm-table-widget .table-row-btn { + top: 100%; + left: 0; + width: 100%; + border-top: none; + cursor: s-resize; +} +.markdown-source-view.mod-cm6 .cm-table-widget .table-col-btn { + top: 0; + left: 100%; + height: 100%; + border-left: none; + cursor: e-resize; +} +.markdown-source-view.mod-cm6 .cm-table-widget .cm-editor { + flex-basis: content; +} +.markdown-source-view.mod-cm6 .cm-table-widget .cm-content, +.markdown-source-view.mod-cm6 .cm-table-widget .cm-line { + max-width: none; +} +.markdown-source-view.mod-cm6 .cm-table-widget .cm-content { + width: auto; +} +.markdown-source-view.mod-cm6 .cm-table-widget .cm-content.cm-lineWrapping { + overflow-wrap: normal; + white-space: var(--table-white-space); + word-break: normal; +} +.markdown-source-view.mod-cm6 .cm-table-widget .cm-scroller { + overflow-y: hidden; + scrollbar-gutter: auto; + line-height: var(--table-line-height); +} +.markdown-source-view.mod-cm6 .cm-line { + position: relative; + padding: 0; +} +.markdown-source-view.mod-cm6 .edit-block-button { + padding: var(--size-2-2) var(--size-2-3); + position: absolute; + top: var(--size-2-2); + right: var(--size-2-2); + display: flex; + opacity: 0; + color: var(--text-muted); + border-radius: var(--radius-s); + cursor: var(--cursor); +} +@media (hover: hover) { + .markdown-source-view.mod-cm6 .edit-block-button:hover { + background-color: var(--background-modifier-hover); + } +} +.markdown-source-view.mod-cm6 .cm-panels { + background-color: inherit; + color: inherit; +} +.markdown-source-view.mod-cm6 img.cm-widgetBuffer { + display: inline !important; + width: 0 !important; + border: 0 !important; + margin: 0 !important; + padding: 0 !important; +} +.view-content > .markdown-source-view.mod-cm6 > .cm-editor > .cm-scroller { + padding: var(--file-margins); +} +.empty-state { + position: absolute; + height: 100%; + width: 100%; + top: 0; + left: 0; + display: flex; + align-items: center; + justify-content: center; + flex-direction: column; +} +.empty-state-container { + max-width: 480px; + max-height: 280px; + margin: 20px; + text-align: center; +} +.empty-state-title { + margin: 20px 0; + font-weight: var(--h2-weight); + font-size: var(--h2-size); + line-height: var(--line-height-tight); + position: relative; +} +.empty-state-action-list { + font-size: var(--font-text-size); + line-height: var(--line-height-tight); + color: var(--text-muted); + margin-top: 20px; +} +.empty-state-action { + cursor: var(--cursor); + line-height: 36px; + color: var(--text-accent); +} +@media (hover: hover) { + .empty-state-action:hover { + color: var(--text-accent-hover); + } +} +/* Can be removed since it is redundant with Close link */ +.empty-state-close-button { + display: none; +} +/* + +OS-dependent rules to make space for traffic lights buttons, +window buttons and sidebar toggles. + +--- + +Scenarios to account for: + +Window frame styles +- Hidden +- Custom +- Native +- Full screen + +Sidebar states +- Left sidebar open +- Left sidebar closed +- Right sidebar open +- Right sidebar closed +- Pop-out (no sidebars) + +*/ +body { + --zoom-factor: 1; + --titlebar-height: 30px; +} +.mod-macos { + --frame-left-space: calc(80px - var(--ribbon-width)); + --frame-right-space: 0px; +} +.mod-macos.is-popout-window { + --frame-left-space: 80px; +} +.mod-windows, +.mod-linux { + --frame-left-space: 0px; + --frame-right-space: 126px; +} +body.is-frameless:not(.is-hidden-frameless) { + padding-top: calc(var(--titlebar-height) / var(--zoom-factor)); +} +body.is-frameless:not(.is-hidden-frameless) .titlebar { + height: var(--titlebar-height); + zoom: calc(1 / var(--zoom-factor)); +} +body.is-frameless:not(.is-hidden-frameless):not(.is-maximized) .titlebar { + padding-top: 2px; +} +body.is-frameless.is-hidden-frameless .titlebar { + height: calc(var(--header-height) - 1px); +} +body.is-frameless.is-hidden-frameless.starter .titlebar { + height: var(--titlebar-height); +} +.is-fullscreen .titlebar { + display: none; +} +.sidebar-toggle-button, +.workspace-tabs.mod-top { + --tab-container-background: var(--titlebar-background); +} +body.is-focused .titlebar, +body.is-focused .workspace-ribbon.mod-left { + --titlebar-background: var(--titlebar-background-focused); +} +body.is-focused .sidebar-toggle-button, +body.is-focused .workspace-tabs.mod-top { + --tab-container-background: var(--titlebar-background-focused); +} +.is-hidden-frameless { + --divider-vertical-height: 100%; +} +.workspace-ribbon .sidebar-toggle-button { + position: absolute; + top: 0; + left: 0; + width: var(--ribbon-width); + justify-content: center; +} +.titlebar-button.mod-logo { + width: var(--ribbon-width); + justify-content: center; +} +.is-hidden-frameless:not(.starter) .titlebar { + -webkit-app-region: no-drag; +} +.is-hidden-frameless .titlebar-button.mod-logo { + display: none; +} +.is-hidden-frameless:not(.is-fullscreen) .workspace-tabs.mod-top-left-space .workspace-tab-header-container { + padding-left: var(--frame-left-space); +} +.is-hidden-frameless:not(.is-fullscreen) .workspace-tabs.mod-top-right-space .workspace-tab-header-container { + padding-right: var(--frame-right-space); +} +.is-hidden-frameless:not(.is-fullscreen):not(.mod-macos) .workspace-tabs.mod-top-left-space .workspace-tab-header-container:before { + -webkit-app-region: no-drag; + content: ''; + height: 100%; + left: 0; + top: 0; + position: absolute; + width: var(--frame-left-space); +} +.is-hidden-frameless:not(.is-fullscreen):not(.mod-macos) .workspace-tabs.mod-top-right-space .workspace-tab-header-container:after { + -webkit-app-region: no-drag; + content: ''; + height: 100%; + right: 0; + top: 0; + position: absolute; + width: var(--frame-right-space); +} +.is-hidden-frameless:not(.is-fullscreen) .titlebar-button-container.mod-right { + background-color: var(--titlebar-background); +} +.is-hidden-frameless:not(.is-fullscreen).is-focused .titlebar-button-container.mod-right { + background-color: var(--titlebar-background-focused); +} +.titlebar-button.mod-logo:hover .logo-wireframe, +.titlebar-button.mod-logo:not(:hover) .logo-full { + display: none; +} +body.is-frameless > .app-container ~ * { + -webkit-app-region: no-drag; +} +body.is-frameless .modal-container, +body.is-frameless .suggestion-bg { + -webkit-app-region: initial; +} +body.is-frameless .modal { + -webkit-app-region: no-drag; +} +.loader-spinner { + width: var(--size-4-8); + height: var(--size-4-8); + margin: 100px auto; + color: var(--interactive-accent); +} +.loader-spinner svg { + animation-name: spin; + animation-duration: 5000ms; + animation-iteration-count: infinite; + animation-timing-function: linear; + --icon-size: var(--icon-size-lx); +} +@keyframes spin { + from { + transform: rotate(0deg); + } + to { + transform: rotate(360deg); + } +} +.loader-cube { + width: 40px; + height: 40px; + margin: 100px auto; +} +.loader-cube .sk-cube { + width: 33%; + height: 33%; + background-color: var(--interactive-accent); + float: left; + -webkit-animation: sk-cubeGridScaleDelay 1.3s infinite ease-in-out; + animation: sk-cubeGridScaleDelay 1.3s infinite ease-in-out; +} +.loader-cube .sk-cube1 { + -webkit-animation-delay: 0.2s; + animation-delay: 0.2s; +} +.loader-cube .sk-cube2 { + -webkit-animation-delay: 0.3s; + animation-delay: 0.3s; +} +.loader-cube .sk-cube3 { + -webkit-animation-delay: 0.4s; + animation-delay: 0.4s; +} +.loader-cube .sk-cube4 { + -webkit-animation-delay: 0.1s; + animation-delay: 0.1s; +} +.loader-cube .sk-cube5 { + -webkit-animation-delay: 0.2s; + animation-delay: 0.2s; +} +.loader-cube .sk-cube6 { + -webkit-animation-delay: 0.3s; + animation-delay: 0.3s; +} +.loader-cube .sk-cube7 { + -webkit-animation-delay: 0s; + animation-delay: 0s; +} +.loader-cube .sk-cube8 { + -webkit-animation-delay: 0.1s; + animation-delay: 0.1s; +} +.loader-cube .sk-cube9 { + -webkit-animation-delay: 0.2s; + animation-delay: 0.2s; +} +@-webkit-keyframes sk-cubeGridScaleDelay { + 0%, + 70%, + 100% { + -webkit-transform: scale3D(1, 1, 1); + transform: scale3D(1, 1, 1); + } + 35% { + -webkit-transform: scale3D(0, 0, 1); + transform: scale3D(0, 0, 1); + } +} +@keyframes sk-cubeGridScaleDelay { + 0%, + 70%, + 100% { + -webkit-transform: scale3D(1, 1, 1); + transform: scale3D(1, 1, 1); + } + 35% { + -webkit-transform: scale3D(0, 0, 1); + transform: scale3D(0, 0, 1); + } +} +.is-loading { + position: relative; +} +.is-loading:before { + content: ' '; + position: absolute; + top: 0; + width: 0; + height: 3px; + background-color: var(--interactive-accent); + animation: 1000ms ease-in-out 300ms infinite progress-bar; +} +.pane-empty { + color: var(--text-faint); + font-size: var(--font-ui-small); + margin: var(--size-4-2) auto; + text-align: center; +} +.view-header { + height: var(--header-height); + display: none; + border-bottom: var(--file-header-border); + background-color: var(--background-primary); + z-index: 1; + position: relative; + gap: var(--size-4-2); + padding: 0 var(--size-4-3); +} +body.is-phone .view-header, +.show-view-header .view-header { + display: flex; +} +.is-focused .workspace-leaf.mod-active .view-header { + background-color: var(--background-primary); +} +.workspace-split.mod-left-split .view-header, +.workspace-split.mod-right-split .view-header, +.workspace-fake-target-overlay.is-in-sidebar .view-header { + display: none; +} +.view-header.is-highlighted:after { + content: ' '; + position: absolute; + width: 100%; + height: 100%; + top: 0; + left: 0; + background-color: hsla(var(--interactive-accent-hsl), 0.5); +} +.view-header .view-header-icon { + display: none; + padding: var(--size-2-2); + margin-right: var(--size-2-3); + color: var(--text-muted); + align-self: center; + cursor: grab; +} +.view-header .view-header-icon:active { + cursor: grabbing; +} +.view-header-title { + font-size: var(--file-header-font-size); + font-weight: var(--file-header-font-weight); + flex: 1 1 0; + max-width: max-content; + overflow: auto; + padding: 0 var(--size-4-1); + white-space: pre; + word-wrap: normal; + color: var(--text-muted); + scroll-padding-inline-end: 20px; +} +.is-focused .workspace-leaf.mod-active .view-header-title { + color: var(--text-normal); +} +.view-header-title::-webkit-scrollbar { + display: none; +} +.view-header-title-container { + flex-grow: 1; + overflow: hidden; + position: relative; + justify-content: var(--file-header-justify); + display: flex; + align-items: center; + gap: 0; + white-space: nowrap; +} +.view-header-title-parent { + font-size: var(--file-header-font-size); + color: var(--text-muted); + min-width: 0; + display: flex; + gap: 0; + overflow: hidden; +} +.view-header-title-parent .view-header-breadcrumb { + padding: 2px 4px; + border-radius: var(--radius-s); +} +@media (hover: hover) { + .view-header-title-parent .view-header-breadcrumb:hover { + background-color: var(--background-modifier-hover); + color: var(--text-normal); + } +} +.view-header-title-parent .view-header-breadcrumb-separator { + padding: 2px 1px; + color: var(--text-faint); +} +.view-content { + width: 100%; + height: calc(100% - var(--header-height)); +} +.workspace-split.mod-root .view-content { + background-color: var(--background-primary); +} +.workspace-split.mod-root .workspace-fake-target-overlay .view-content { + background-color: transparent; +} +.workspace-split.mod-left-split .view-content, +.workspace-split.mod-right-split .view-content { + height: 100%; + overflow: auto; +} +.inline-title { + font-weight: var(--inline-title-weight); + font-size: var(--inline-title-size); + line-height: var(--inline-title-line-height); + font-style: var(--inline-title-style); + font-variant: var(--inline-title-variant); + font-family: var(--inline-title-font); + margin-bottom: var(--inline-title-margin-bottom); + letter-spacing: -0.015em; + color: var(--inline-title-color); +} +.hover-popover .inline-title, +.inline-embed .inline-title { + display: none; +} +body:not(.show-inline-title) .inline-title:not([data-level]) { + display: none; +} +::selection { + background-color: var(--text-selection); +} +.markdown-reading-view { + display: flex; + flex-direction: column; +} +.markdown-preview-view { + font-size: var(--font-text-size); + font-family: var(--font-text); + line-height: var(--line-height-normal); + width: 100%; + height: 100%; + padding: var(--file-margins); + position: relative; + overflow-y: auto; + overflow-wrap: break-word; + color: var(--text-normal); + user-select: text; + -webkit-user-select: text; + scrollbar-gutter: stable; +} +.workspace-leaf-content.is-read-mode .markdown-preview-view { + width: 100%; + left: 0; + background-color: var(--background-primary); +} +.markdown-preview-view.is-readable-line-width .markdown-preview-sizer { + max-width: var(--file-line-width); + margin-left: auto; + margin-right: auto; +} +.markdown-rendered.rtl { + direction: rtl; +} +/* Ribbon */ +/* Add background to top left corner space above ribbon */ +.workspace-ribbon.mod-left { + margin-top: var(--header-height); + /* Add the tab background in the top left corner */ +} +.workspace-ribbon.mod-left:before { + -webkit-app-region: drag; + position: absolute; + left: 0; + top: 0; + background-color: var(--titlebar-background); + content: " "; + border-bottom: var(--tab-outline-width) solid var(--tab-outline-color); + height: var(--header-height); + width: var(--ribbon-width); + box-sizing: border-box; +} +.workspace-ribbon { + width: var(--ribbon-width); + flex: 0 0 var(--ribbon-width); + display: flex; + flex-direction: column; + overflow: hidden; + background-color: var(--ribbon-background); + z-index: var(--layer-sidedock); + color: var(--text-muted); + padding: var(--ribbon-padding); + gap: var(--size-4-1); + border-right: var(--divider-width) solid var(--divider-color); +} +.workspace-ribbon.mod-left.is-collapsed { + transition: background-color 250ms 95ms ease-in-out; + background-color: var(--ribbon-background-collapsed); + border-right-color: var(--divider-color); +} +.workspace-ribbon.mod-right { + display: none; +} +.workspace-ribbon.is-hidden { + display: none; +} +.workspace-ribbon.is-collapsed { + background-color: var(--background-secondary); +} +.side-dock-settings, +.side-dock-actions { + flex-direction: column; +} +.side-dock-settings .side-dock-ribbon-action, +.side-dock-actions .side-dock-ribbon-action { + margin: 0 auto; +} +.side-dock-settings { + margin-top: auto; +} +.release-notes-view { + padding: var(--file-margins); +} +.release-notes-view .markdown-preview-view { + overflow: visible; +} +.release-notes-view .is-readable-line-width { + max-width: var(--file-line-width); + margin-left: auto; + margin-right: auto; +} +.setting { + display: flex; + align-items: center; +} +.setting-text { + flex-grow: 1; +} +.setting-title { + font-size: var(--font-ui-large); + line-height: var(--line-height-normal); +} +.setting-explanation { + color: var(--text-muted); +} +.modal.mod-new-editor { + max-width: 600px; +} +.modal.mod-trust-folder { + max-width: 700px; +} +.modal.mod-settings .vertical-tab-header { + flex: 0 0 25%; + min-width: 180px; + max-width: 250px; + overflow: auto; + border-right: 1px solid var(--divider-color); +} +.modal.mod-settings .modal-content { + margin-top: 0; + overflow: hidden; +} +.modal.mod-plugin-options .modal-content { + margin: var(--size-4-6) 0; +} +.setting-item { + display: flex; + align-items: center; + padding: 0.75em 0; + border-top: 1px solid var(--background-modifier-border); + /* Add extra space for setting heading if it starts a new section */ +} +.setting-item + div > .setting-item-heading, +.setting-item + .setting-item-heading { + margin-top: 0.75em; +} +.setting-item:first-child { + padding-top: 0; + border-top: none; +} +.setting-item > *:first-child { + margin-right: var(--size-4-4); +} +.setting-item > *:last-child { + margin-right: 0; +} +.setting-item.mod-cta { + justify-content: center; +} +.setting-item-heading { + font-weight: var(--font-semibold); + border-top: none; +} +.setting-item-heading .setting-item-info { + flex-grow: 0; + margin-right: 0; +} +.setting-item-heading .setting-item-description { + font-weight: var(--font-normal); +} +.setting-item-info { + flex: 1 1 auto; +} +.setting-item-description { + color: var(--text-muted); + font-size: var(--font-ui-smaller); + padding-top: var(--size-4-1); + line-height: var(--line-height-tight); +} +.setting-item-description:empty { + display: none; +} +.setting-item-description code { + font-family: var(--font-monospace); + font-size: var(--font-smaller); + border-radius: var(--radius-s); + padding: 0 3px 2px 3px; + position: relative; + bottom: 1px; +} +.setting-item-description ul { + margin: var(--size-4-1) 0; + padding-left: var(--size-4-6); +} +.setting-item-name { + color: var(--text-normal); + font-size: var(--font-ui-medium); + line-height: var(--line-height-tight); +} +.setting-item-control { + flex: 1 1 auto; + text-align: right; + display: flex; + justify-content: flex-end; + align-items: center; + gap: var(--size-4-2); +} +.setting-item-control.mod-vertical { + flex-direction: column; +} +.setting-item-control.mod-vertical > *:not(:last-child) { + margin-bottom: 10px; + margin-right: 0; +} +.setting-item-control.mod-hotkey { + padding-top: 0; + cursor: default; +} +.setting-item-control.mod-hotkey input { + font-family: var(--font-monospace); + font-size: var(--font-smaller); +} +.setting-item-control.mod-hotkey input:focus { + background-color: var(--interactive-accent); + color: var(--text-on-accent); +} +.setting-item-control select { + width: inherit; + max-width: 400px; +} +.setting-command-hotkeys { + display: flex; + flex-wrap: wrap; + gap: var(--size-4-1); +} +.setting-hotkey { + font-family: -apple-system, BlinkMacSystemFont, var(--font-monospace); + font-size: var(--font-ui-small); + background-color: var(--background-modifier-hover); + border-radius: var(--radius-s); + padding: 2px 4px 2px 8px; + align-self: flex-end; + white-space: nowrap; + display: flex; + align-items: center; + gap: var(--size-4-1); +} +.setting-hotkey.has-conflict { + background-color: var(--background-modifier-error); + color: var(--text-on-accent); +} +@media (hover: hover) { + .setting-hotkey.has-conflict:hover { + background-color: var(--background-modifier-error-hover); + } +} +.setting-hotkey.mod-active { + background-color: var(--interactive-accent); + color: var(--text-on-accent); +} +.setting-hotkey.mod-empty { + padding-right: var(--size-4-2); +} +.setting-hotkey-icon { + display: flex; + align-items: center; + cursor: var(--cursor); + border-radius: 50%; + line-height: 1; + text-align: center; +} +.setting-hotkey-icon .svg-icon { + width: 16px; + height: 16px; + stroke-width: 2px; + opacity: 0.6; +} +@media (hover: hover) { + .setting-hotkey-icon:hover .svg-icon { + opacity: 1; + } +} +@media (hover: hover) { + .setting-delete-hotkey:hover { + background-color: var(--background-modifier-error); + color: var(--text-on-accent); + } +} +.setting-add-hotkey-button, +.setting-restore-hotkey-button { + padding: var(--size-2-2); + border-radius: var(--radius-s); + color: var(--text-faint); + cursor: var(--cursor); + height: calc(var(--icon-l) + var(--size-2-2) + var(--size-2-2)); +} +.setting-add-hotkey-button.mod-active, +.setting-restore-hotkey-button.mod-active { + color: var(--text-accent); +} +@media (hover: hover) { + .setting-add-hotkey-button:hover, + .setting-restore-hotkey-button:hover { + background-color: var(--background-modifier-hover); + color: var(--text-normal); + } +} +.setting-editor-extra-setting-button { + line-height: 0; +} +.setting-message { + font-size: var(--font-ui-small); +} +.setting-font-list { + margin: 1.5em 0 0.75em 0; +} +.hotkey-settings-container { + display: flex; + flex-direction: column; +} +.hotkey-settings-container .setting-item-description { + padding-top: 0; +} +.hotkey-settings-container hr { + margin: 20px 0 10px 0; +} +.hotkey-list-container { + overflow: auto; +} +.hotkey-header-container { + justify-content: space-between; + padding-bottom: var(--size-4-8); + display: flex; + flex-wrap: wrap; +} +.hotkey-filter { + align-items: center; + background-color: var(--background-secondary); + border-radius: var(--radius-s); + display: flex; + font-size: var(--font-ui-small); + padding: var(--size-4-1) var(--size-4-1) var(--size-4-1) var(--size-4-2); + gap: var(--size-2-1); +} +.setting-filter-container { + display: flex; + gap: var(--size-4-2); + margin-bottom: var(--size-4-8); +} +.input-right-decorator { + position: absolute; + transform: translateY(-50%); + top: 50%; + right: var(--size-4-1); +} +.search-input-container input:not(:placeholder-shown) ~ .input-right-decorator { + right: calc(var(--size-4-1) + 28px); +} +.search-input-container.mod-hotkey .clickable-icon { + padding: var(--size-2-1); +} +.hotkey-filter-remove-button { + cursor: var(--cursor); + color: var(--text-muted); + padding: var(--size-2-1); + border-radius: var(--radius-s); + display: flex; + align-items: center; + --icon-size: var(--icon-xs); + --icon-stroke: var(--icon-xs-stroke-width); +} +@media (hover: hover) { + .hotkey-filter-remove-button:hover { + background-color: var(--background-modifier-hover); + } +} +.modal.mod-image-lightbox { + max-width: 90vw; + max-height: 90vh; + padding: 0; +} +.modal.mod-image-lightbox .modal-content { + padding: var(--size-4-12) var(--size-4-3) var(--size-4-2) var(--size-4-3); + text-align: center; +} +.login-field { + max-width: 500px; + margin: 1em auto; +} +.spellchecker-dictionary-container { + max-height: 60vh; + overflow: auto; +} +.spellchecker-dictionary-item { + display: flex; + margin-bottom: 10px; +} +.spellchecker-dictionary-word { + flex-grow: 1; +} +.spellchecker-dictionary-remove-button { + cursor: var(--cursor); + color: var(--text-muted); + margin-right: 10px; +} +@media (hover: hover) { + .spellchecker-dictionary-remove-button:hover { + color: var(--text-normal); + } +} +.modal.mod-new-editor .card, +.modal.mod-restricted-mode .card { + flex: 1 0 0; +} +.input-right-decorator { + position: absolute; + transform: translateY(-50%); + top: 50%; + right: var(--size-4-1); +} +.input-right-decorator.clickable-icon { + padding: var(--size-2-1) var(--size-2-2); +} +.input-right-decorator.clickable-icon.is-active { + background-color: transparent; +} +.search-input-container input:not(:placeholder-shown) ~ .input-right-decorator { + right: calc(var(--size-4-1) + 28px); +} +.search-input-container input:placeholder-shown ~ .search-input-clear-button { + display: none; +} +.setting-progress-bar { + width: 100%; + height: var(--size-4-2); + border-radius: var(--radius-s); + background-color: var(--background-secondary); + box-shadow: inset 0 0 0 1px var(--background-modifier-border); +} +.setting-progress-bar-inner { + width: 0; + height: 100%; + border-radius: var(--radius-s); + background-color: var(--interactive-accent); +} +.mod-community-modal .modal-sidebar .setting-item { + max-width: var(--modal-community-sidebar-width); + padding: 0 var(--size-4-3) var(--size-4-1); + border: none; + gap: var(--size-4-2); +} +.mod-community-modal .modal-sidebar .setting-item:first-child { + max-width: 500px; + gap: 0; + margin-bottom: var(--size-4-2); +} +.mod-community-modal .modal-sidebar .setting-item-name { + font-size: var(--font-ui-small); + padding-left: var(--size-4-1); +} +.mod-community-modal .modal-sidebar .setting-item-info { + margin: 0; + flex-grow: 0; +} +.mod-community-modal .modal-sidebar .search-input-container { + width: 100%; +} +.mod-community-modal .modal-sidebar button.clickable-icon { + padding: 6px 10px; + display: flex; + align-items: center; + color: var(--text-normal); +} +.community-modal-details-empty-state { + padding: 0; + text-align: center; +} +.community-modal-search-summary { + font-size: var(--font-ui-small); + padding: var(--size-4-1) var(--size-4-3) var(--size-4-3) var(--size-4-4); +} +.community-modal-search-results-wrapper { + flex: 1 0 auto; + overflow: auto; + border-top: var(--border-width) solid var(--divider-color); + scroll-padding: var(--size-4-3); + /* This helps with performance of the app */ + contain: strict; +} +.community-modal-search-results { + display: grid; + grid-template-columns: repeat(auto-fill, minmax(240px, 1fr)); + gap: var(--size-4-3); + padding: var(--size-4-3); +} +.community-item { + position: relative; + background-color: var(--background-primary); + padding: var(--size-4-3); + cursor: var(--cursor); + border-radius: var(--radius-m); + border: 1px solid var(--background-modifier-border); + display: flex; + flex-direction: column; + gap: var(--size-2-1); +} +.community-item:last-child { + margin-bottom: 0; +} +.community-item .suggestion-highlight { + background-color: var(--text-highlight-bg); +} +.community-item.is-selected, +.community-item.is-selected:hover { + border-color: var(--interactive-accent); + background-color: var(--interactive-accent); + color: var(--text-on-accent); +} +.community-item.is-selected .community-item-author, +.community-item.is-selected:hover .community-item-author, +.community-item.is-selected .community-item-repo, +.community-item.is-selected:hover .community-item-repo, +.community-item.is-selected .community-item-downloads, +.community-item.is-selected:hover .community-item-downloads, +.community-item.is-selected .community-item-updated, +.community-item.is-selected:hover .community-item-updated { + color: var(--text-on-accent); + opacity: 0.8; +} +.community-item.is-selected .flair, +.community-item.is-selected:hover .flair { + color: var(--text-on-accent); + background-color: transparent; +} +@media (hover: hover) { + .community-item:hover { + border-color: var(--background-modifier-border-hover); + } +} +.is-mobile .community-item { + max-width: 500px; +} +.community-item .flair { + margin-left: var(--size-4-1); + background-color: var(--tag-background); + color: var(--tag-color); + vertical-align: middle; + top: -1px; +} +.community-item-name { + font-size: var(--font-ui-medium); + line-height: var(--line-height-tight); + font-weight: var(--font-medium); +} +.community-item-author { + font-size: var(--font-ui-smaller); + line-height: var(--line-height-tight); + color: var(--text-muted); +} +.community-item-downloads { + font-size: var(--font-ui-smaller); + color: var(--text-muted); + --icon-color: var(--text-faint); + --icon-size: var(--icon-xs); + --icon-stroke: var(--icon-xs-stroke-width); +} +.community-item-downloads svg { + vertical-align: text-bottom; +} +.community-item-updated { + font-size: var(--font-ui-smaller); + color: var(--text-muted); + margin-bottom: var(--size-4-2); +} +.community-item-downloads-text { + margin-left: var(--size-2-2); +} +.community-item-desc { + font-size: var(--font-ui-small); + line-height: var(--line-height-tight); + margin-top: 4px; +} +.community-item-badge.mod-update { + --icon-size: var(--icon-xs); + --icon-stroke: var(--icon-xs-stroke-width); + color: var(--interactive-accent); + position: absolute; + top: var(--size-4-3); + right: var(--size-4-3); +} +.community-item-screenshot { + max-width: 100%; + margin-top: auto; + object-fit: cover; + border-radius: var(--radius-s); + aspect-ratio: 16/9; + image-rendering: -webkit-optimize-contrast; + margin-top: var(--size-4-1); +} +.community-item-screenshot.mod-unavailable { + text-align: center; + color: var(--text-muted); +} +.community-item-screenshot .placeholder-icon { + display: flex; + align-items: center; + justify-content: center; + height: 100%; +} +.community-item-screenshot .placeholder-icon .svg-icon { + color: var(--text-faint); + width: var(--size-4-8); + height: var(--size-4-8); +} +.community-modal-info-name { + font-size: var(--h2-size); + font-weight: var(--font-semibold); + line-height: var(--line-height-tight); + margin-bottom: var(--size-4-6); +} +.community-modal-info-author, +.community-modal-info-repo, +.community-modal-info-version { + font-size: var(--font-ui-small); + line-height: var(--line-height-tight); + color: var(--text-muted); +} +.community-modal-info-desc { + font-size: var(--font-ui-small); + line-height: var(--line-height-tight); + margin-top: 4px; +} +.community-modal-details { + flex: 1 1 calc(var(--modal-max-width) - var(--modal-community-sidebar-width)); + overflow: auto; + display: flex; + flex-direction: column; + border-left: 1px solid var(--divider-color); +} +.community-modal-info { + flex: 1 1 0; + overflow-y: auto; + padding: var(--size-4-8) var(--size-4-16); + scroll-padding: var(--size-4-4); +} +.community-readme { + overflow-y: visible; + height: auto; + padding: var(--size-4-4) 0; +} +.community-readme video, +.community-readme img { + max-width: 100%; +} +.community-modal-info-desc { + font-size: var(--font-ui-medium); + line-height: var(--line-height-tight); + margin-top: var(--size-4-2); +} +.community-modal-button-container { + display: flex; + flex-wrap: wrap; + gap: var(--size-4-2); + margin: 1.5em 0; +} +.community-modal-info-downloads { + color: var(--text-muted); + margin-top: var(--size-4-1); + display: inline-block; + --icon-size: var(--icon-xs); + --icon-stroke: var(--icon-xs-stroke-width); +} +.community-modal-info-downloads-text { + margin-left: var(--size-4-1); + position: relative; + top: -1px; +} +.community-modal-readme { + font-size: var(--font-text-size); + font-family: var(--font-text); + line-height: var(--line-height-normal); + overflow-wrap: break-word; + color: var(--text-normal); + user-select: text; + -webkit-user-select: text; +} +.installed-plugins-container { + padding-top: var(--size-4-4); + border-top: 1px solid var(--background-modifier-border); +} +.community-modal-grid-button-container { + position: absolute; + top: var(--size-4-4); + right: var(--size-4-12); + display: flex; + gap: var(--size-4-2); +} +.status-bar { + position: var(--status-bar-position); + width: auto; + bottom: 0; + right: 0; + border-radius: var(--status-bar-radius); + border-style: solid; + border-width: var(--status-bar-border-width); + border-color: var(--status-bar-border-color); + background-color: var(--status-bar-background); + color: var(--status-bar-text-color); + display: flex; + font-size: var(--status-bar-font-size); + justify-content: flex-end; + min-height: 18px; + padding: var(--size-4-1); + gap: var(--size-2-1); + user-select: none; + z-index: var(--layer-status-bar); + font-variant-numeric: tabular-nums; +} +.status-bar-item { + border-radius: var(--radius-s); + display: inline-flex; + align-items: center; + padding: 3px var(--size-2-2); + line-height: 1; +} +.status-bar-item.mod-clickable { + cursor: var(--cursor); +} +@media (hover: hover) { + .status-bar-item.mod-clickable:hover { + background-color: var(--background-modifier-hover); + color: var(--text-normal); + } +} +.status-bar-item.plugin-editor-status, +.status-bar-item.plugin-sync { + padding: 0 var(--size-2-2); +} +@media (hover: hover) { + .status-bar-item.plugin-editor-status:hover, + .status-bar-item.plugin-sync:hover { + background-color: var(--background-modifier-hover); + } +} +.status-bar-item:empty { + display: none; +} +.status-bar-item-icon { + vertical-align: middle; + display: flex; + align-items: center; +} +.status-bar-item-segment { + margin-right: var(--size-4-2); +} +.status-bar-item-segment:last-child { + margin-right: 0; +} +.is-screenshotting .status-bar { + display: none; +} +.titlebar { + -webkit-app-region: drag; + position: fixed; + top: 0; + left: 0; + right: 0; + display: flex; + background-color: var(--titlebar-background); + border-bottom: var(--titlebar-border-width) solid var(--titlebar-border-color); +} +.titlebar-inner { + color: var(--titlebar-text-color); + font-weight: var(--titlebar-text-weight); + width: 100%; + display: flex; +} +.is-focused .titlebar-inner { + color: var(--titlebar-text-color-focused); +} +.titlebar-text { + opacity: 0.85; + position: absolute; + width: 100%; + height: 100%; + top: 0; + left: 0; + flex-grow: 1; + font-size: var(--font-ui-small); + text-align: center; + display: flex; + justify-content: center; + align-items: center; + padding: 0 125px; + overflow: hidden; + white-space: nowrap; + text-overflow: ellipsis; +} +.titlebar-button-container { + display: flex; + position: absolute; + top: 0; +} +.mod-macos .titlebar-button-container { + top: 8px; +} +.titlebar-button-container.mod-left { + left: 0; +} +.mod-macos .titlebar-button-container.mod-left { + left: calc(80px / var(--zoom-factor)); +} +.titlebar-button-container .mod-back, +.titlebar-button-container .mod-forward { + color: var(--icon-color); +} +.titlebar-button-container .mod-back .svg-icon, +.titlebar-button-container .mod-forward .svg-icon { + width: 14px; + height: 14px; + stroke-width: 2.25px; +} +@media (hover: hover) { + .titlebar-button-container .mod-back:hover, + .titlebar-button-container .mod-forward:hover { + color: var(--icon-color-hover); + } +} +.titlebar-button-container.mod-right { + right: 0; +} +.titlebar-button { + -webkit-app-region: no-drag; + padding: var(--size-2-2) var(--size-2-3); + cursor: var(--cursor); + display: inline-flex; + align-items: center; +} +@media (hover: hover) { + .titlebar-button:hover { + opacity: 1; + background-color: var(--background-modifier-hover); + } + .titlebar-button.mod-close:hover { + background-color: var(--background-modifier-error); + } +} +.mod-macos .titlebar-button { + border-radius: var(--radius-s); +} +/* Hidden titlebar interferes with mouse */ +body.is-frameless.is-hidden-frameless { + padding-top: 0 !important; +} +.is-hidden-frameless.mod-macos .titlebar { + display: none; +} +.is-hidden-frameless.mod-windows .titlebar, +.is-hidden-frameless.mod-linux .titlebar { + background: transparent; + border: none; + z-index: var(--layer-popover); + pointer-events: none; +} +.is-hidden-frameless.mod-windows .titlebar-button.mod-back, +.is-hidden-frameless.mod-linux .titlebar-button.mod-back, +.is-hidden-frameless.mod-windows .titlebar-button.mod-forward, +.is-hidden-frameless.mod-linux .titlebar-button.mod-forward, +.is-hidden-frameless.mod-windows .titlebar-text, +.is-hidden-frameless.mod-linux .titlebar-text { + display: none; +} +.is-hidden-frameless.mod-windows .titlebar-button-container, +.is-hidden-frameless.mod-linux .titlebar-button-container { + pointer-events: auto; +} +.mod-linux .titlebar-button-container, +.mod-windows .titlebar-button-container { + height: 100%; +} +.mod-linux .titlebar-button, +.mod-windows .titlebar-button { + padding: 0 16px; + display: flex; + align-items: center; +} +.mod-linux .titlebar-button.mod-logo, +.mod-windows .titlebar-button.mod-logo { + padding: 4px 8px; +} +@media (hover: hover) { + .mod-linux .titlebar-button.mod-close:hover, + .mod-windows .titlebar-button.mod-close:hover { + background-color: var(--background-modifier-error); + } + .mod-linux .titlebar-button.mod-close:hover .svg-icon, + .mod-windows .titlebar-button.mod-close:hover .svg-icon { + fill: white; + stroke: white; + } +} +@media screen and (max-width: 300px) { + .titlebar-text { + display: none; + } +} +.is-translucent:not(.is-fullscreen) { + --nav-collapse-icon-color: rgba(var(--mono-rgb-100), 0.3); + --nav-collapse-icon-color-collapsed: rgba(var(--mono-rgb-100), 0.3); + --divider-color: rgba(0, 0, 0, 0.15); +} +.is-translucent:not(.is-fullscreen) .titlebar, +.is-translucent:not(.is-fullscreen) .app-container { + background-color: var(--workspace-background-translucent); +} +.is-translucent:not(.is-fullscreen) .workspace-ribbon.mod-left, +.is-translucent:not(.is-fullscreen) .workspace-tabs, +.is-translucent:not(.is-fullscreen) .workspace-split.mod-root, +.is-translucent:not(.is-fullscreen) .sidebar-toggle-button, +.is-translucent:not(.is-fullscreen) .mod-left-split .workspace-tab-header-container, +.is-translucent:not(.is-fullscreen) .mod-right-split .workspace-tab-header-container, +.is-translucent:not(.is-fullscreen) .mod-top .workspace-tab-header-container, +.is-translucent:not(.is-fullscreen) .workspace-tabs .workspace-leaf, +.is-translucent:not(.is-fullscreen) .workspace-ribbon.mod-left:before { + background-color: transparent !important; +} +.workspace { + background-color: var(--background-primary); + display: flex; + flex: 1 0 0; + transition: padding-left 100ms ease-in; + overflow: hidden; + height: 100%; +} +.is-translucent .workspace { + background-color: transparent; +} +.workspace-split { + display: flex; + position: relative; +} +.workspace-split.mod-vertical > .workspace-split:last-child { + padding-right: 0; +} +.workspace-split:last-child:not(.mod-right-split) > .workspace-leaf-resize-handle { + display: none; +} +.workspace-split.mod-vertical { + flex-direction: row; +} +.workspace-split.mod-horizontal { + flex-direction: column; +} +.workspace-split.mod-root { + background-color: var(--background-primary); +} +.workspace-leaf { + display: flex; + flex-direction: column; + position: relative; + contain: strict !important; + overflow: hidden; + isolation: isolate; +} +.workspace-split.mod-root .workspace-leaf:last-child .workspace-leaf-resize-handle { + display: none; +} +.workspace-leaf.is-highlighted:before { + content: ' '; + position: absolute; + height: 100%; + width: 100%; + top: 0; + left: 0; + background-color: hsla(var(--interactive-accent-hsl), 0.25); + z-index: var(--layer-popover); + pointer-events: none; +} +.workspace > .workspace-leaf, +.workspace > .workspace-split { + height: 100%; + width: 100%; +} +/* Resize handles */ +.workspace-split.mod-root > .workspace-leaf-resize-handle { + display: none; +} +.workspace-leaf-resize-handle { + -webkit-app-region: no-drag; + position: absolute; + z-index: var(--layer-cover); + background-color: transparent; + transition: background-color 200ms ease-in-out, border-color 200ms ease-in-out, opacity 200ms ease-in-out; + border-color: var(--divider-color); + border-top: 0; + border-width: var(--divider-width); + margin: 0; +} +@media (hover: hover) { + .workspace-leaf-resize-handle:hover { + background-color: var(--divider-color-hover); + border-color: var(--divider-color-hover); + } + .is-translucent .workspace-leaf-resize-handle:hover { + background-color: var(--divider-color-hover); + border-color: var(--divider-color-hover); + } +} +.workspace-split.mod-horizontal > * > .workspace-leaf-resize-handle { + bottom: 0; + left: 0; + border-bottom-style: solid; + border-bottom-width: var(--divider-width); + height: var(--divider-width-hover); + width: 100%; + cursor: row-resize; +} +.workspace-split.mod-vertical > * > .workspace-leaf-resize-handle, +.workspace-split.mod-left-split > .workspace-leaf-resize-handle, +.workspace-split.mod-right-split > .workspace-leaf-resize-handle { + right: 0; + bottom: 0; + width: var(--divider-width-hover); + height: var(--divider-vertical-height); + cursor: col-resize; +} +.workspace-split.mod-right-split > .workspace-leaf-resize-handle { + border-left-style: solid; + border-left-width: var(--divider-width); +} +.workspace-split.mod-vertical > * > .workspace-leaf-resize-handle, +.workspace-split.mod-left-split > .workspace-leaf-resize-handle { + border-right-style: solid; + border-right-width: var(--divider-width); +} +.workspace-split.mod-right-split > .workspace-leaf-resize-handle { + right: unset; + left: 0; +} +.workspace-split.mod-vertical > * { + height: 100%; + flex: 1 0 0; + width: 0; +} +.workspace-split.mod-horizontal > * { + width: 100%; + flex: 1 0 0; + height: 0; +} +.workspace-split.mod-left-split, +.workspace-split.mod-right-split { + flex: 0 0 auto; +} +.is-translucent .workspace-split.mod-left-split.is-sidedock-collapsed .workspace-tabs, +.is-translucent .workspace-split.mod-right-split.is-sidedock-collapsed .workspace-tabs { + visibility: hidden; +} +.workspace-split.mod-left-split > .workspace-leaf-resize-handle, +.workspace-split.mod-right-split > .workspace-leaf-resize-handle { + z-index: var(--layer-status-bar); + height: var(--divider-vertical-height); + top: unset; + bottom: 0; +} +.view-header-nav-buttons { + --icon-size: var(--icon-s); + align-items: center; + display: flex; + margin-right: var(--size-4-1); +} +body.is-phone .view-header-nav-buttons { + display: none; +} +.workspace-leaf-content { + width: 100%; + height: 100%; + overflow: hidden; + position: relative; + display: flex; + flex-direction: column; +} +.workspace-leaf-content .view-content { + padding: var(--size-4-4); + overflow: auto; +} +.workspace-leaf-content[data-type='markdown'] .view-content { + padding: 0; + overflow: hidden; +} +.workspace-leaf-content[data-type='backlink'] .view-content, +.workspace-leaf-content[data-type='outgoing-link'] .view-content { + padding: 0; + overflow: hidden; + display: flex; + flex-direction: column; +} +.workspace-leaf-content .image-container, +.workspace-leaf-content .audio-container, +.workspace-leaf-content .video-container { + text-align: center; +} +.workspace-leaf-content img:not([width]), +.workspace-leaf-content audio, +.workspace-leaf-content video { + max-width: 100%; +} +.workspace-fake-target-overlay, +.workspace-drop-overlay { + will-change: transform, width, height; + position: fixed; + left: 0; + top: 0; + width: 0; + height: 0; + transform: translate(0, 0); + transition: all 100ms ease-in-out; + z-index: var(--layer-cover); + pointer-events: none; +} +.workspace-drop-overlay:before { + content: ' '; + position: absolute; + width: calc(100% - 6px); + height: calc(100% - 6px); + top: 0; + left: 0; + bottom: 0; + right: 0; + margin: auto; + background-color: var(--interactive-accent); + border-radius: var(--radius-m); + opacity: 0.5; +} +.workspace-fake-target-container { + visibility: hidden; + position: absolute; + pointer-events: none; + top: 0; + left: 0; +} +.workspace-fake-target-overlay { + visibility: visible; + overflow: hidden; + background-color: var(--background-primary); + /* + &.is-in-sidebar { + background-color: var(--background-secondary); + .workspace-leaf { + background-color: var(--background-secondary); + } + }*/ +} +.workspace-fake-target-overlay > * { + width: 100%; + height: 100%; +} +.workspace-tabs { + overflow: hidden; + display: flex; + flex-direction: column; + position: relative; +} +.workspace-tabs > * { + flex: 1 0 0; +} +.workspace-tabs .workspace-leaf { + height: 100%; +} +.workspace-split.mod-right-split .workspace-tabs { + padding-right: 0; +} +.workspace-tabs:last-child .workspace-leaf-resize-handle { + display: none; +} +.workspace-fake-target-overlay:not(.is-in-sidebar) .workspace-tabs .workspace-leaf, +.mod-root .workspace-tabs .workspace-leaf { + background-color: var(--background-primary); +} +.workspace-tabs .workspace-leaf { + background-color: var(--background-secondary); +} +.workspace-tabs .workspace-leaf .view-content { + height: 100%; +} +.workspace-tab-header-container { + display: flex; + background-color: var(--tab-container-background); + height: var(--header-height); + border-bottom: var(--tab-outline-width) solid var(--tab-outline-color); + flex: 0 0 auto; + padding-left: 0; + padding-right: var(--size-4-2); + position: relative; +} +.is-phone .workspace-tab-header-container { + display: none; +} +.workspace-tab-header-container-inner { + -webkit-app-region: drag; + display: flex; + flex: 0 1 auto; + overflow: auto; + margin: 6px -5px calc(var(--tab-outline-width) * -1); + padding: 1px 15px 0; +} +.mod-root .workspace-tab-header-container-inner { + padding: 1px 15px 0; +} +.workspace-tab-header-container-inner::-webkit-scrollbar, +.workspace-tab-header-container-inner::-webkit-scrollbar-thumb { + display: none; +} +.workspace-tab-header-inner-icon { + flex: 0 0 auto; + display: flex; +} +/* Hide tab icon if it's a note */ +.mod-root .workspace-tab-header[data-type="markdown"] .workspace-tab-header-inner-icon, +.mod-root .workspace-tab-header[data-type="empty"] .workspace-tab-header-inner-icon { + display: none; +} +.is-focused .workspace-tab-header { + color: var(--tab-text-color-focused); +} +.is-focused .workspace-tab-header.is-active { + color: var(--tab-text-color-focused-active); +} +.is-focused .mod-active .workspace-tab-header.is-active .workspace-tab-header-inner-icon, +.is-focused .mod-active .workspace-tab-header.is-active .workspace-tab-header-inner-title { + color: var(--tab-text-color-focused-active-current); +} +.is-focused .mod-active .workspace-tab-header.is-active.is-highlighted .workspace-tab-header-inner-icon, +.is-focused .mod-active .workspace-tab-header.is-active.is-highlighted .workspace-tab-header-inner-title { + color: var(--tab-text-color-focused-highlighted); +} +.is-focused .workspace-tab-header.active.is-highlighted .workspace-tab-header-inner-icon, +.is-focused .workspace-tab-header.is-highlighted .workspace-tab-header-inner-icon, +.is-focused .workspace-tab-header.active.is-highlighted .workspace-tab-header-inner-title, +.is-focused .workspace-tab-header.is-highlighted .workspace-tab-header-inner-title { + color: var(--tab-text-color-focused-highlighted); +} +.workspace-tab-header { + -webkit-app-region: no-drag; + color: var(--tab-text-color); + display: flex; + position: relative; + padding: 1px 4px 3.5px; + scroll-margin-inline-start: var(--size-2-3); + scroll-margin-inline-end: var(--size-4-1); + text-align: center; + border-radius: var(--tab-radius-active); + /* Decorative curves */ +} +.workspace-tab-header:not(.is-active):hover .workspace-tab-header-inner { + background-color: var(--background-modifier-hover); +} +.workspace-tab-header::before, +.workspace-tab-header::after { + position: absolute; + bottom: 0; + content: ''; + width: calc(var(--tab-curve) * 2); + height: calc(var(--tab-curve) * 2); + border-radius: 100%; + box-shadow: 0 0 0 calc(var(--tab-curve) * 3) transparent; +} +.workspace-tab-header::before { + left: calc(var(--tab-curve) * -2); + clip-path: inset(50% calc(var(--tab-curve) * -1) 0 50%); +} +.workspace-tab-header::after { + right: calc(var(--tab-curve) * -2); + clip-path: inset(50% 50% 0 calc(var(--tab-curve) * -1)); +} +.workspace-tab-header.is-active { + box-shadow: 0 0 0 var(--tab-outline-width) var(--tab-outline-color); + color: var(--tab-text-color-active); + background-color: var(--tab-background-active); +} +.workspace-split.mod-root .workspace-tab-header.is-active::before, +.workspace-split.mod-root .workspace-tab-header.is-active::after { + box-shadow: inset 0 0 0 var(--tab-outline-width) var(--tab-outline-color), 0 0 0 calc(var(--tab-curve) * 4) var(--tab-background-active); +} +.workspace-tab-header.is-active .workspace-tab-header-inner::after { + opacity: 0; +} +.workspace-tab-container { + display: flex; + overflow: hidden; +} +.workspace-tab-container > * { + flex: 1 0 0; +} +.workspace-tab-header-inner { + align-items: center; + display: flex; + gap: var(--size-2-1); + height: 100%; + border-radius: var(--tab-radius); + overflow: hidden; + padding: 0 8px; + width: 100%; +} +.workspace-tab-header-inner .workspace-tab-header-inner-icon { + color: var(--icon-color); + opacity: var(--icon-opacity); +} +@media (hover: hover) { + .workspace-tab-header-inner:hover .workspace-tab-header-inner-icon { + color: var(--icon-color-hover); + opacity: var(--icon-opacity-hover); + } +} +.mod-root .workspace-tab-header-inner { + padding: 0 3px 0 6px; +} +.workspace-tab-header-inner-title { + flex: 1 1 auto; + font-size: var(--tab-font-size); + font-weight: var(--tab-font-weight); + overflow: hidden; + text-align: left; + text-overflow: ellipsis; + white-space: nowrap; + width: 100%; +} +.workspace-tab-header-status-container { + display: flex; + flex-shrink: 0; + gap: var(--size-2-1); + justify-content: center; +} +.workspace-tab-header-status-container:empty { + display: none; +} +.workspace-tab-header-status-icon, +.workspace-tab-header-inner-close-button { + cursor: var(--cursor); + padding: var(--size-2-1); + border-radius: var(--radius-s); + display: flex; + align-items: center; + --icon-size: var(--icon-xs); + --icon-stroke: var(--icon-xs-stroke-width); +} +@media (hover: hover) { + .workspace-tab-header.is-active .workspace-tab-header-status-icon:hover, + .workspace-tab-header.is-active .workspace-tab-header-inner-close-button:hover { + background-color: var(--background-modifier-hover); + } + .mod-root .workspace-tab-header.is-active .workspace-tab-header-status-icon.mod-linked:hover, + .mod-root .workspace-tab-header.is-active .workspace-tab-header-inner-close-button.mod-linked:hover, + .mod-root .workspace-tab-header.is-active .workspace-tab-header-status-icon.mod-pinned:hover, + .mod-root .workspace-tab-header.is-active .workspace-tab-header-inner-close-button.mod-pinned:hover { + background-color: var(--background-modifier-active-hover); + } +} +.workspace-tab-header.is-active .workspace-tab-header-status-icon::after, +.workspace-tab-header.is-active .workspace-tab-header-inner-close-button::after { + background-color: transparent; +} +@media (hover: hover) { + .workspace-tab-header-inner-close-button:hover { + color: var(--tab-text-color-focused-active-current); + } +} +.workspace-tab-header:hover .workspace-tab-header-inner-close-button { + color: var(--tab-text-color-focused); +} +@media (hover: hover) { + .workspace-tab-header:hover .workspace-tab-header-inner-close-button:hover { + color: var(--tab-text-color-focused-active-current); + } +} +.workspace-tab-header.is-active .workspace-tab-header-inner-close-button { + color: var(--tab-text-color-focused); +} +@media (hover: hover) { + .workspace-tab-header.is-active .workspace-tab-header-inner-close-button:hover { + color: var(--tab-text-color-focused-active-current); + } +} +.workspace-sidedock-empty-state { + font-size: var(--font-ui-small); + padding: 20px 30px; +} +.workspace-tab-header.is-before-active .workspace-tab-header-inner { + border-bottom-right-radius: 10px; +} +.workspace-tab-header-spacer { + display: flex; + flex-grow: 1; +} +body:not(.is-grabbing):not(.is-fullscreen) .workspace-tabs.mod-top .workspace-tab-header-spacer { + -webkit-app-region: drag; +} +body:not(.is-grabbing):not(.is-fullscreen).is-hidden-frameless .mod-top .workspace-tab-header-container { + -webkit-app-region: drag; +} +.workspace-tab-header-tab-list, +.workspace-tab-header-new-tab { + -webkit-app-region: no-drag; + display: none; + z-index: 1; + align-items: center; +} +.titlebar .workspace-tab-header-tab-list, +.titlebar .workspace-tab-header-new-tab, +.mod-root .workspace-tab-header-tab-list, +.mod-root .workspace-tab-header-new-tab { + display: flex; +} +.workspace-tab-header-tab-list .clickable-icon, +.workspace-tab-header-new-tab .clickable-icon { + color: var(--icon-color); + padding: var(--size-2-2); + --icon-size: var(--icon-m); + --icon-stroke: var(--icon-m-stroke-width); + align-items: center; +} +.workspace-tab-header-new-tab { + padding: var(--size-4-2) 0 var(--size-2-3); + margin-right: var(--size-4-3); + margin-left: -4px; +} +.workspace-tab-header-tab-list { + margin-right: var(--size-4-1); + padding: var(--size-4-2) 0 var(--size-2-3); +} +/* Remove tab titles in sidebar */ +.workspace-fake-target-overlay.is-in-sidebar .workspace-tab-header-inner-title, +.mod-left-split .workspace-tab-header-inner-title, +.mod-right-split .workspace-tab-header-inner-title { + display: var(--sidebar-tab-text-display); +} +.workspace-fake-target-overlay.is-in-sidebar .workspace-tab-header-inner-close-button, +.mod-left-split .workspace-tab-header-inner-close-button, +.mod-right-split .workspace-tab-header-inner-close-button { + display: none; +} +body > .workspace-split { + height: 100%; +} +.mod-root .workspace-tabs > .workspace-leaf .view-header-title { + white-space: normal; +} +.mod-root .workspace-tab-header-status-icon { + color: var(--text-accent); +} +.mod-root .workspace-tab-header-status-icon, +.mod-root .workspace-tab-header-inner-icon { + --icon-size: var(--icon-xs); + --icon-stroke: var(--icon-xs-stroke-width); +} +.mod-root .mod-pinned, +.mod-root .workspace-tab-header-inner-close-button { + --icon-size: var(--icon-s); + --icon-stroke: var(--icon-s-stroke-width); +} +.mod-right-split .markdown-preview-view, +.mod-left-split .markdown-preview-view, +.mod-right-split .markdown-source-view.mod-cm6 .cm-scroller, +.mod-left-split .markdown-source-view.mod-cm6 .cm-scroller { + --file-margins: var(--size-4-5); +} +.mod-right-split .markdown-preview-view, +.mod-left-split .markdown-preview-view, +.mod-right-split .markdown-source-view, +.mod-left-split .markdown-source-view { + font-size: var(--sidebar-markdown-font-size); +} +/* Sidebar tabs */ +.mod-left-split .workspace-tab-header-container-inner, +.mod-right-split .workspace-tab-header-container-inner { + padding: 1px 8px 7px; + margin: 6px 0 0 0; + gap: 3px; +} +.mod-left-split .workspace-tab-header, +.mod-right-split .workspace-tab-header { + box-shadow: none; + background-color: transparent; + padding: 0; + margin: 0; + border-radius: var(--radius-s); +} +.mod-left-split .workspace-tab-header:before, +.mod-right-split .workspace-tab-header:before, +.mod-left-split .workspace-tab-header:after, +.mod-right-split .workspace-tab-header:after { + display: none; +} +.mod-left-split .workspace-tab-header:active .workspace-tab-header-inner-icon, +.mod-right-split .workspace-tab-header:active .workspace-tab-header-inner-icon { + color: var(--icon-color-focused); +} +.mod-left-split .workspace-tab-header.has-active-menu, +.mod-right-split .workspace-tab-header.has-active-menu, +.mod-left-split .workspace-tab-header.is-active, +.mod-right-split .workspace-tab-header.is-active { + background-color: var(--background-modifier-hover); +} +@media (hover: hover) { + .mod-left-split .workspace-tab-header.has-active-menu:hover, + .mod-right-split .workspace-tab-header.has-active-menu:hover, + .mod-left-split .workspace-tab-header.is-active:hover, + .mod-right-split .workspace-tab-header.is-active:hover { + background-color: var(--background-modifier-hover); + } +} +.mod-left-split .workspace-tab-header.has-active-menu .workspace-tab-header-inner-icon, +.mod-right-split .workspace-tab-header.has-active-menu .workspace-tab-header-inner-icon, +.mod-left-split .workspace-tab-header.is-active .workspace-tab-header-inner-icon, +.mod-right-split .workspace-tab-header.is-active .workspace-tab-header-inner-icon { + opacity: var(--icon-opacity-active); + color: var(--icon-color-focused); +} +.workspace .mod-root .workspace-tab-header { + -webkit-app-region: no-drag; + flex: 1 1 0; + width: var(--tab-width); + min-width: 0; + max-width: var(--tab-max-width); + padding: 1px 3px 3.5px; +} +.workspace .mod-root .workspace-tab-header .workspace-tab-header-status-container { + position: sticky; + right: 0; +} +.workspace .mod-root .workspace-tab-header .workspace-tab-header-inner-close-button { + position: sticky; + right: 0; +} +.workspace .mod-root .workspace-tab-header.is-active:hover .workspace-tab-header-inner-close-button, +.workspace .mod-root .workspace-tab-header.is-active .workspace-tab-header-inner-close-button { + pointer-events: all; + opacity: 1; +} +.workspace .mod-root .workspace-tab-header.is-active:hover .workspace-tab-header-inner-close-button svg, +.workspace .mod-root .workspace-tab-header.is-active .workspace-tab-header-inner-close-button svg { + opacity: 1; +} +.workspace .mod-root .workspace-tab-header.is-active .workspace-tab-header-inner-close-button::after { + background-color: transparent; +} +.workspace .mod-root .workspace-tab-header-inner::after { + position: absolute; + right: -0.5px; + width: 1px; + background-color: var(--tab-divider-color); + content: ''; + height: 20px; +} +.workspace .mod-root .workspace-tab-header-inner-icon { + display: flex; + padding-right: 4px; +} +.workspace .mod-root .workspace-tab-header[data-type="markdown"] .workspace-tab-header-inner-icon, +.workspace .mod-root .workspace-tab-header[data-type="empty"] .workspace-tab-header-inner-icon { + display: none; +} +.workspace .mod-root .workspace-tab-header-inner-title { + text-overflow: ellipsis; + width: 100%; +} +.workspace .mod-root .workspace-tab-header-status-container.mod-linked { + display: none; +} +.workspace .mod-root .workspace-tab-header-spacer { + flex-shrink: 1; +} +.workspace .mod-root .workspace-tabs:not(.mod-stacked) .workspace-tab-header:not(.is-active) .workspace-tab-header-inner-close-button { + display: none; +} +.workspace .mod-root .workspace-tabs:not(.mod-stacked) .workspace-tab-header:hover .workspace-tab-header-inner-close-button { + display: flex; +} +/* Stacked tabs */ +.workspace .mod-root .workspace-tabs.mod-stacked .workspace-tab-header-container-inner { + padding: 0 0 0 var(--size-4-3); + margin: 0; +} +.workspace .mod-root .workspace-tabs.mod-stacked .workspace-tab-container { + overflow-x: auto; + overflow-y: hidden; + position: relative; + display: flex; + flex-direction: row; +} +.workspace .mod-root .workspace-tabs.mod-stacked .workspace-tab-container > * { + flex: 0 0 auto; + position: sticky; +} +.workspace .mod-root .workspace-tabs.mod-stacked .workspace-tab-container .workspace-tab-header { + width: var(--tab-stacked-header-width); + writing-mode: var(--tab-stacked-text-writing-mode); + text-orientation: sideways; + background-color: var(--background-primary); + padding: 0; + border-radius: 0; + box-shadow: -1px 0 0 0 var(--tab-outline-color), var(--tab-stacked-shadow); + --no-tooltip: true; +} +.workspace .mod-root .workspace-tabs.mod-stacked .workspace-tab-container .workspace-tab-header:before, +.workspace .mod-root .workspace-tabs.mod-stacked .workspace-tab-container .workspace-tab-header:after { + display: none; +} +.workspace .mod-root .workspace-tabs.mod-stacked .workspace-tab-container .workspace-tab-header:hover .workspace-tab-header-inner { + background-color: transparent; +} +.workspace .mod-root .workspace-tabs.mod-stacked .workspace-tab-container .workspace-tab-header-inner { + padding: var(--size-4-2) var(--size-4-2) var(--size-4-4); + border-radius: 0; +} +.workspace .mod-root .workspace-tabs.mod-stacked .workspace-tab-container .workspace-tab-header-inner:after { + display: none; +} +.workspace .mod-root .workspace-tabs.mod-stacked .workspace-tab-container .workspace-tab-header-inner-title { + order: 3; + width: auto; + -webkit-mask-image: unset; + padding: var(--size-4-1) 0; + transform: var(--tab-stacked-text-transform); + text-align: var(--tab-stacked-text-align); + font-weight: var(--tab-stacked-font-weight); + font-size: var(--tab-stacked-font-size); + text-orientation: mixed; +} +.workspace .mod-root .workspace-tabs.mod-stacked .workspace-tab-container .workspace-tab-header-inner-icon { + order: 2; + cursor: grab; + display: flex; + padding: var(--size-2-2); + border-radius: var(--radius-s); +} +@media (hover: hover) { + .workspace .mod-root .workspace-tabs.mod-stacked .workspace-tab-container .workspace-tab-header-inner-icon:hover { + background-color: var(--background-modifier-hover); + } +} +.workspace .mod-root .workspace-tabs.mod-stacked .workspace-tab-container .workspace-tab-header-inner-icon:active { + cursor: grabbing; +} +.workspace .mod-root .workspace-tabs.mod-stacked .workspace-tab-container .workspace-tab-header-inner-close-button { + color: var(--tab-text-color-focused); +} +@media (hover: hover) { + .workspace .mod-root .workspace-tabs.mod-stacked .workspace-tab-container .workspace-tab-header-inner-close-button:hover { + background-color: var(--background-modifier-hover); + } +} +.workspace .mod-root .workspace-tabs.mod-stacked .workspace-tab-container .workspace-leaf { + width: var(--tab-stacked-pane-width); + /* This is here for performance reasons - it helps the engine know + what's out of view and avoid rendering them */ + contain: strict; +} +.workspace .mod-root .workspace-tabs.mod-stacked .workspace-tab-container .workspace-leaf.is-hidden > * { + display: none; +} +.sidebar-toggle-button { + -webkit-app-region: inherit; + height: calc(var(--header-height) - 1px); + display: flex; + justify-content: center; + padding: var(--size-4-2) 0 7px 0; + -webkit-app-region: no-drag; + --icon-size: var(--icon-l); + --icon-stroke: var(--icon-l-stroke-width); +} +/* Smoother animation for right sidebar button positioning during close */ +.mod-macos.is-hidden-frameless:not(.is-popout-window) .sidebar-toggle-button.mod-right { + background-color: var(--tab-container-background); + position: fixed; + top: 0; + right: 0; + padding-right: var(--size-4-2); + z-index: var(--layer-popover); +} +.mod-macos.is-hidden-frameless:not(.is-popout-window) .workspace .workspace-tabs.mod-top-right-space .workspace-tab-header-container { + padding-right: 38px; +} +.button-container { + margin-top: 20px; +} +button { + -webkit-app-region: no-drag; + display: inline-flex; + align-items: center; + justify-content: center; + color: var(--text-normal); + font-size: var(--font-ui-small); + border-radius: var(--button-radius); + border: 0; + padding: var(--size-4-1) var(--size-4-3); + height: var(--input-height); + font-weight: var(--input-font-weight); + cursor: var(--cursor); + font-family: inherit; + outline: none; + user-select: none; + white-space: nowrap; +} +button:not(.clickable-icon) { + background-color: var(--interactive-normal); + box-shadow: var(--input-shadow); +} +@media (hover: hover) { + button:hover { + background-color: var(--interactive-hover); + box-shadow: var(--input-shadow-hover); + } +} +button[aria-disabled='true'] { + background-color: var(--interactive-normal); +} +button:focus-visible { + box-shadow: 0 0 0 3px var(--background-modifier-border-focus); +} +button[disabled="true"] { + cursor: not-allowed; +} +button.mod-cta { + background-color: var(--interactive-accent); + color: var(--text-on-accent); +} +@media (hover: hover) { + button.mod-cta:hover { + background-color: var(--interactive-accent-hover); + } +} +button.mod-cta:focus-visible { + box-shadow: 0 0 0 3px var(--background-modifier-border-focus); +} +button.mod-muted { + background-color: var(--background-secondary); + color: var(--text-muted); +} +@media (hover: hover) { + button.mod-muted:hover { + background-color: var(--background-secondary); + } +} +button.mod-warning { + background-color: var(--background-modifier-error); + color: var(--text-on-accent); +} +@media (hover: hover) { + button.mod-warning:hover { + background-color: var(--background-modifier-error-hover); + } +} +button.mod-destructive { + color: var(--text-error); +} +.card-container { + display: flex; +} +.card-container.mod-horizontal { + flex-direction: column; +} +.card { + background-color: var(--background-secondary-alt); + border-radius: 4px; + border: 1px solid var(--background-modifier-border); + margin: 0 10px; + padding: 15px 30px; + display: flex; + flex-direction: column; + flex-grow: 1; +} +.card ul { + padding: 0; +} +.card .button-container { + margin: 10px 0; +} +.card-container.mod-horizontal .card { + margin: 10px 0; +} +.card-container.mod-horizontal .card ul { + padding-left: 24px; +} +.card li { + margin: 5px 0; +} +.card.u-clickable { + cursor: var(--cursor); +} +@media (hover: hover) { + .card.u-clickable:hover { + border: 1px solid var(--interactive-accent); + background-color: hsla(var(--interactive-accent-hsl), 0.1); + } +} +.card.is-selected { + border: 1px solid var(--interactive-accent); + background-color: hsla(var(--interactive-accent-hsl), 0.2); +} +.card-title { + text-align: center; + font-size: 20px; + line-height: 30px; + color: var(--text-muted); + margin-bottom: 8px; +} +.card-description { + color: var(--text-muted); + font-size: var(--font-ui-small); + line-height: 20px; + flex-grow: 1; +} +/* Only used in Format Converter so far */ +.changelog-item { + margin: var(--size-4-2) 0; + font-size: var(--font-ui-medium); + line-height: var(--line-height); +} +.changelog-item:before { + content: attr(data-label); + width: 50px; + border-radius: var(--radius-m); + font-size: var(--font-ui-small); + display: inline-block; + text-align: center; + margin-right: 14px; + text-transform: uppercase; + letter-spacing: 1px; + line-height: 22px; +} +.changelog-item.mod-success:before { + background-color: var(--background-modifier-success); +} +.changelog-item.mod-highlighted:before { + background-color: var(--interactive-accent); +} +[contenteditable] { + outline: none; +} +.list-item { + display: flex; + padding: 0; + margin: 8px 0; + gap: var(--size-4-2); + align-items: center; +} +.list-item-part.mod-extended { + flex-grow: 1; + overflow-wrap: anywhere; +} +.list-item-part.clickable-icon { + display: flex; + align-items: center; + justify-content: center; + padding: var(--size-2-2); + cursor: var(--cursor); + border-radius: var(--radius-s); + color: var(--icon-color); +} +.list-item-part.clickable-icon:hover, +.list-item-part.clickable-icon:active { + color: var(--icon-color-hover); + background-color: var(--background-modifier-hover); +} +.u-center-text { + text-align: center; +} +.u-faded-text { + color: var(--text-muted); +} +.u-pop { + color: var(--text-accent); + font-weight: var(--font-semibold); +} +.u-muted { + color: var(--text-muted); +} +.u-small { + font-size: 0.8em; +} +.u-clickable { + cursor: var(--cursor); +} +/* In file recovery, sync version history, and publish diff */ +.diff-view { + user-select: text; +} +.diff-line { + padding: 0 var(--size-4-2); +} +.diff-line.mod-left { + background-color: rgba(var(--background-modifier-error-rgb), 0.2); +} +.diff-line.mod-left .diff-changed { + background-color: rgba(var(--background-modifier-error-rgb), 0.4); +} +.diff-line.mod-right { + background-color: rgba(var(--background-modifier-success-rgb), 0.2); +} +.diff-line.mod-right .diff-changed { + background-color: rgba(var(--background-modifier-success-rgb), 0.4); +} +.diff-collapsed { + text-align: center; + color: var(--text-muted); + cursor: pointer; + font-size: var(--font-ui-small); + margin: var(--size-4-2) 0; +} +.diff-collapsed:hover { + color: var(--text-accent); +} +/* Document search and replace */ +/* +Moves search to the top +#todo move this into DOM */ +.markdown-reading-view.is-searching, +.markdown-source-view.is-replacing, +.markdown-source-view.is-searching { + flex-direction: column-reverse; +} +/* Container for dcoument search/replace UI */ +.mod-active .document-search-container { + background-color: var(--background-primary); +} +.document-search-container { + display: flex; + flex-direction: column; + padding: var(--size-4-2) 0; + margin: 0 var(--size-4-4); + gap: var(--size-4-2); + z-index: var(--layer-popover); +} +.document-search, +.document-replace { + width: 100%; + max-width: var(--file-line-width); + margin: 0 auto; + display: flex; + padding: 0 var(--size-4-2); + gap: var(--size-4-2); +} +.document-replace { + display: none; +} +.document-search-container.mod-replace-mode .document-replace { + display: flex; +} +input.document-search-input, +input.document-replace-input { + flex-grow: 1; +} +input.document-search-input.mod-no-match, +input.document-replace-input.mod-no-match { + background-color: rgba(var(--background-modifier-error-rgb), 0.2); +} +@media (hover: hover) { + input.document-search-input.mod-no-match:hover, + input.document-replace-input.mod-no-match:hover { + background-color: rgba(var(--background-modifier-error-rgb), 0.2); + } +} +.document-replace-buttons, +.document-search-buttons { + display: flex; + gap: var(--size-4-2); + align-items: center; +} +.document-search-button { + font-size: var(--font-ui-small); + padding: 0 var(--size-4-2); + color: var(--text-muted); +} +.document-search-close-button { + cursor: var(--cursor); + position: relative; + top: 2px; + font-size: 24px; + line-height: 20px; + height: 24px; + width: 24px; + padding: 0 var(--size-2-2); + border-radius: var(--radius-s); + color: var(--text-muted); +} +.document-search-close-button:before { + font-family: Inter, sans-serif; + content: "\d7"; + font-weight: 300; +} +@media (hover: hover) { + .document-search-close-button:hover { + background-color: var(--background-modifier-hover); + color: var(--text-normal); + } +} +/* Read */ +.markdown-rendered .search-highlight > div { + position: absolute; + pointer-events: none; + box-shadow: 0 0 0px 2px var(--text-normal); + opacity: 0.3; + mix-blend-mode: var(--highlight-mix-blend-mode); + border-radius: 2px; +} +.markdown-rendered .search-highlight > div.is-active { + box-shadow: 0 0 0px 3px var(--text-accent); + opacity: 1; +} +.cm-s-obsidian span.obsidian-search-match-highlight { + box-shadow: 0 0 0px 3px var(--text-accent); + mix-blend-mode: var(--highlight-mix-blend-mode); + border-radius: 2px; +} +/* Edit */ +.markdown-source-view.mod-cm6 .document-search-container { + flex: 0 0 auto; +} +.cm-s-obsidian span.cm-highlight.obsidian-search-match-highlight { + background-color: var(--text-selection); +} +/* Support for rtl text, explicit support for Arabic and Hebrew */ +*[dir="rtl"] .dropdown, +:root:lang(ar) .dropdown, +:root:lang(iw) .dropdown { + background-position: left 0.7em top 50%, 0 0; + padding: 0.6em 0.8em 0.5em 1.4em; +} +/* class applies to select element itself, not a wrapper element */ +select, +.dropdown { + -webkit-app-region: no-drag; + height: var(--input-height); + font-size: var(--font-ui-small); + font-family: inherit; + font-weight: var(--input-font-weight); + color: var(--text-normal); + line-height: var(--line-height-tight); + padding: 0 1.9em 0 0.8em; + max-width: 100%; + /* useful when width is set to anything other than 100% */ + box-sizing: border-box; + margin: 0; + border: 0; + box-shadow: var(--input-shadow); + border-radius: var(--input-radius); + -webkit-appearance: none; + appearance: none; + background-color: var(--interactive-normal); + background-repeat: no-repeat, repeat; + /* arrow icon position (1em from the right, 50% vertical) , then gradient position*/ + background-position: right 0.7em top 50%, 0 0; + /* icon size, then gradient */ + background-size: 0.65em auto, 100%; +} +@media (hover: hover) { + select:hover, + .dropdown:hover { + box-shadow: var(--input-shadow-hover); + background-color: var(--interactive-hover); + } +} +select:focus, +.dropdown:focus { + box-shadow: 0 0 0px 3px var(--background-modifier-border-focus); + outline: none; +} +.dropdown { + background-image: url('data:image/svg+xml,%3Csvg xmlns="http://www.w3.org/2000/svg" width="292.4" height="292.4"%3E%3Cpath fill="%23000" opacity="0.4" d="M287 69.4a17.6 17.6 0 0 0-13-5.4H18.4c-5 0-9.3 1.8-12.9 5.4A17.6 17.6 0 0 0 0 82.2c0 5 1.8 9.3 5.4 12.9l128 127.9c3.6 3.6 7.8 5.4 12.8 5.4s9.2-1.8 12.8-5.4L287 95c3.5-3.5 5.4-7.8 5.4-12.8 0-5-1.9-9.2-5.5-12.8z"/%3E%3C/svg%3E'); +} +.theme-dark .dropdown { + background-image: url('data:image/svg+xml,%3Csvg xmlns="http://www.w3.org/2000/svg" width="292.4" height="292.4"%3E%3Cpath fill="%23FFF" opacity="0.4" d="M287 69.4a17.6 17.6 0 0 0-13-5.4H18.4c-5 0-9.3 1.8-12.9 5.4A17.6 17.6 0 0 0 0 82.2c0 5 1.8 9.3 5.4 12.9l128 127.9c3.6 3.6 7.8 5.4 12.8 5.4s9.2-1.8 12.8-5.4L287 95c3.5-3.5 5.4-7.8 5.4-12.8 0-5-1.9-9.2-5.5-12.8z"/%3E%3C/svg%3E'); +} +/* Set options to normal weight */ +.dropdown option { + font-weight: normal; + background-color: var(--background-primary); +} +.flair { + background-color: var(--interactive-normal); + border-radius: var(--radius-s); + color: var(--text-normal); + font-size: 10px; + letter-spacing: 0.05em; + margin-left: var(--size-4-2); + padding: var(--size-2-1) var(--size-2-2); + position: relative; + text-transform: uppercase; + white-space: nowrap; + vertical-align: middle; +} +.flair.mod-flat { + vertical-align: top; +} +.flair.mod-pop { + background-color: var(--interactive-accent); + color: var(--text-on-accent); +} +.markdown-preview-view:not(.allow-fold-lists) .list-collapse-indicator, +.markdown-preview-view:not(.allow-fold-headings) .heading-collapse-indicator { + display: none; +} +/* #todo Reduce specificity here */ +.cm-fold-indicator .collapse-indicator, +.cm-gutterElement .collapse-indicator, +.collapse-indicator, +.fold-gutter { + opacity: 0; +} +/* +.is-mobile & .cm-fold-indicator .collapse-indicator { + opacity: 1; +}*/ +h1:hover .collapse-indicator, +h2:hover .collapse-indicator, +h3:hover .collapse-indicator, +h4:hover .collapse-indicator, +h5:hover .collapse-indicator, +h6:hover .collapse-indicator, +.collapse-indicator:hover, +.is-collapsed .collapse-indicator, +.cm-fold-indicator.is-collapsed .collapse-indicator, +.cm-gutterElement:hover .collapse-indicator, +.cm-gutterElement .is-collapsed .collapse-indicator, +.cm-line:hover .cm-fold-indicator .collapse-indicator, +.fold-gutter.is-collapsed, +.fold-gutter:hover, +.metadata-properties-heading:hover .collapse-indicator { + opacity: 1; +} +.collapse-icon { + display: flex; + align-items: center; +} +.collapse-icon:before { + content: "\200B"; +} +.collapse-icon svg.svg-icon { + color: var(--nav-collapse-icon-color); + stroke-width: 4px; + width: 10px; + height: 10px; + transition: transform 100ms ease-in-out; +} +.collapse-icon.is-collapsed svg.svg-icon { + transform: rotate(-90deg); +} +.rtl .collapse-icon.is-collapsed svg.svg-icon { + transform: rotate(90deg); +} +.view-content .list-collapse-indicator svg.svg-icon, +.view-content .collapse-indicator svg.svg-icon { + color: var(--collapse-icon-color); +} +.view-content .is-collapsed .list-collapse-indicator svg.svg-icon, +.view-content .is-collapsed .collapse-indicator svg.svg-icon { + color: var(--collapse-icon-color-collapsed); +} +.markdown-preview-view .collapse-indicator { + position: absolute; + cursor: var(--cursor); +} +.markdown-preview-view .collapse-indicator .svg-icon { + vertical-align: middle; +} +.markdown-preview-view li.is-collapsed > ul, +.markdown-preview-view li.is-collapsed > ol { + display: none; +} +.markdown-preview-view .heading-collapse-indicator { + margin-left: -22px; + padding: 0 6px; +} +.markdown-source-view.mod-cm6 .cm-fold-indicator .collapse-indicator { + opacity: 0; +} +.markdown-source-view.mod-cm6 .cm-line:hover .cm-fold-indicator .collapse-indicator, +.markdown-source-view.mod-cm6 .cm-fold-indicator.is-collapsed .collapse-indicator { + opacity: 1; +} +.markdown-source-view.mod-cm6 .cm-foldPlaceholder { + color: var(--text-faint); + background-color: transparent; + border: none; + margin-left: 8px; +} +.markdown-source-view.mod-cm6 .cm-fold-indicator { + display: inline-block; + position: relative; + z-index: 1; +} +.markdown-source-view.mod-cm6 .cm-fold-indicator .collapse-indicator { + position: absolute; + top: 0; + right: 0; + height: 100%; + cursor: var(--cursor); + padding-right: 5px; +} +/* Consistency for hover states across all icon buttons */ +svg.svg-icon { + height: var(--icon-size); + width: var(--icon-size); + stroke-width: var(--icon-stroke); +} +/* Parent container of button rows */ +.nav-buttons-container, +.view-actions, +.workspace-tab-header-inner, +.side-dock-settings, +.side-dock-actions { + display: flex; + justify-content: center; +} +.side-dock-settings, +.side-dock-actions { + gap: var(--size-2-3); +} +.view-actions { + gap: 0; + align-items: center; + --icon-size: var(--icon-s); +} +.nav-file-icon .svg-icon, +.suggestion-flair .svg-icon, +.menu-item-icon .svg-icon, +.status-bar-item .svg-icon { + --icon-size: var(--icon-s); + --icon-stroke: var(--icon-s-stroke-width); +} +.clickable-icon.side-dock-ribbon-action .svg-icon, +.mod-left-split .workspace-tab-header-inner-icon .svg-icon, +.mod-right-split .workspace-tab-header-inner-icon .svg-icon { + --icon-size: var(--icon-l); + --icon-stroke: var(--icon-l-stroke-width); +} +.clickable-icon.side-dock-ribbon-action:active, +.mod-left-split .workspace-tab-header-inner-icon:active, +.mod-right-split .workspace-tab-header-inner-icon:active { + color: var(--icon-color-focused); +} +/* Use horizontal more actions "..." on macOS/iOS per OS guidelines */ +.is-ios .lucide-more-vertical, +.mod-macos .lucide-more-vertical { + transform: rotate(90deg); +} +/* Parent button containers for SVG button icons */ +.clickable-icon { + -webkit-app-region: no-drag; + background-color: transparent; + display: flex; + align-items: center; + justify-content: center; + padding: var(--size-2-2) var(--size-2-3); + cursor: var(--cursor); + border-radius: var(--clickable-icon-radius); + color: var(--icon-color); + opacity: var(--icon-opacity); + transition: opacity 0.15s ease-in-out; + height: auto; +} +@media (hover: hover) { + .clickable-icon:hover { + box-shadow: none; + opacity: var(--icon-opacity-hover); + color: var(--icon-color-hover); + background-color: var(--background-modifier-hover); + } + .clickable-icon.has-active-menu, + .clickable-icon:active { + opacity: var(--icon-opacity-hover); + color: var(--icon-color-focused); + background-color: var(--background-modifier-hover); + } +} +.clickable-icon.is-active { + opacity: var(--icon-opacity-hover); + color: var(--icon-color-active); + background-color: var(--background-modifier-active-hover); +} +@media (hover: hover) { + .clickable-icon.is-active:hover { + background-color: var(--background-modifier-active-hover); + } +} +.clickable-icon[aria-disabled='true'] { + background-color: unset; + color: var(--text-muted); + opacity: 0.4; +} +@media (hover: hover) { + .clickable-icon[aria-disabled='true']:hover { + background-color: unset; + } +} +.clickable-icon.mod-warning { + color: var(--text-error); +} +.clickable-icon.mod-filled svg { + fill: var(--icon-color); +} +.setting-item-control .clickable-icon { + padding: var(--size-2-2); +} +.text-icon-button { + -webkit-app-region: no-drag; + display: inline-flex; + align-items: center; + color: var(--text-muted); + font-size: var(--font-ui-small); + border-radius: var(--button-radius); + padding: var(--size-2-1) var(--size-4-3) var(--size-2-1) var(--size-4-2); + height: var(--input-height); + font-weight: var(--input-font-weight); + cursor: var(--cursor); + font-family: inherit; + gap: var(--size-2-2); + user-select: none; + white-space: nowrap; +} +.text-icon-button .text-button-icon { + display: flex; + align-items: center; + justify-content: center; +} +.text-icon-button .text-button-icon svg.svg-icon { + height: var(--icon-size); + width: var(--icon-size); + stroke-width: var(--icon-stroke); +} +.text-icon-button:focus { + box-shadow: 0 0 0px 2px var(--background-modifier-border-focus); + outline: none; +} +@media (hover: hover) { + .text-icon-button:hover { + box-shadow: none; + opacity: var(--icon-opacity-hover); + background-color: var(--background-modifier-hover); + color: var(--text-normal); + } + .text-icon-button:hover .text-button-icon { + color: var(--icon-color-hover); + } + .text-icon-button.has-active-menu, + .text-icon-button:active { + opacity: var(--icon-opacity-hover); + background-color: var(--background-modifier-hover); + color: var(--text-normal); + } + .text-icon-button.has-active-menu .text-button-icon, + .text-icon-button:active .text-button-icon { + color: var(--icon-color-focused); + } +} +.markdown-rendered.show-indentation-guide li > ul, +.markdown-rendered.show-indentation-guide li > ol { + position: relative; +} +.markdown-rendered.show-indentation-guide li > ul::before, +.markdown-rendered.show-indentation-guide li > ol::before { + content: "\200B"; + position: absolute; + display: block; + left: -0.85em; + top: 0; + bottom: 0; + border-right: var(--indentation-guide-width) solid var(--indentation-guide-color); +} +.markdown-source-view.mod-cm6 .cm-indent { + min-width: var(--list-indent); + display: inline-block; +} +.markdown-source-view.mod-cm6 .cm-indent::before { + content: "\200B"; + display: block; + width: 1px; + border-right: var(--indentation-guide-width) solid var(--indentation-guide-color); + color: transparent; + position: absolute; + top: 0; + bottom: 0; + transform: translateX(var(--indentation-guide-editing-indent)); +} +.markdown-source-view.mod-cm6 .cm-active-indent::before { + border-right: var(--indentation-guide-width-active) solid var(--indentation-guide-color-active); +} +.input-label { + display: inline-block; + width: 150px; + text-align: right; + margin-right: var(--size-4-2); +} +.input-button { + padding: 6px 14px; + margin-left: 14px; + color: var(--text-muted); + font-size: var(--font-ui-medium); + position: relative; + top: -1px; +} +@media (hover: hover) { + .input-button:hover { + color: var(--text-normal); + } +} +textarea, +input.metadata-input-text, +input[type='date'], +input[type='datetime-local'], +input[type='text'], +input[type='search'], +input[type='email'], +input[type='password'], +input[type='number'] { + -webkit-app-region: no-drag; + background: var(--background-modifier-form-field); + border: var(--input-border-width) solid var(--background-modifier-border); + color: var(--text-normal); + font-family: inherit; + padding: var(--size-4-1) var(--size-4-2); + font-size: var(--font-ui-small); + border-radius: var(--input-radius); + outline: none; +} +@media (hover: hover) { + textarea:hover, + input.metadata-input-text:hover, + input[type='date']:hover, + input[type='datetime-local']:hover, + input[type='text']:hover, + input[type='search']:hover, + input[type='email']:hover, + input[type='password']:hover, + input[type='number']:hover { + border-color: var(--background-modifier-border-hover); + transition: box-shadow 0.15s ease-in-out, border 0.15s ease-in-out; + } +} +textarea:active, +input.metadata-input-text:active, +input[type='date']:active, +input[type='datetime-local']:active, +input[type='text']:active, +input[type='search']:active, +input[type='email']:active, +input[type='password']:active, +input[type='number']:active, +textarea:focus, +input.metadata-input-text:focus, +input[type='date']:focus, +input[type='datetime-local']:focus, +input[type='text']:focus, +input[type='search']:focus, +input[type='email']:focus, +input[type='password']:focus, +input[type='number']:focus { + border-color: var(--background-modifier-border-focus); + transition: box-shadow 0.15s ease-in-out, border 0.15s ease-in-out; +} +textarea:active, +input.metadata-input-text:active, +input[type='date']:active, +input[type='datetime-local']:active, +input[type='text']:active, +input[type='search']:active, +input[type='email']:active, +input[type='password']:active, +input[type='number']:active, +textarea:focus, +input.metadata-input-text:focus, +input[type='date']:focus, +input[type='datetime-local']:focus, +input[type='text']:focus, +input[type='search']:focus, +input[type='email']:focus, +input[type='password']:focus, +input[type='number']:focus, +textarea:focus-visible, +input.metadata-input-text:focus-visible, +input[type='date']:focus-visible, +input[type='datetime-local']:focus-visible, +input[type='text']:focus-visible, +input[type='search']:focus-visible, +input[type='email']:focus-visible, +input[type='password']:focus-visible, +input[type='number']:focus-visible { + box-shadow: 0 0 0 2px var(--background-modifier-border-focus); +} +textarea::placeholder, +input.metadata-input-text::placeholder, +input[type='date']::placeholder, +input[type='datetime-local']::placeholder, +input[type='text']::placeholder, +input[type='search']::placeholder, +input[type='email']::placeholder, +input[type='password']::placeholder, +input[type='number']::placeholder { + color: var(--text-faint); +} +input[type='text'], +input[type='search'], +input[type='email'], +input[type='password'], +input[type='number'] { + height: var(--input-height); +} +/* Textarea */ +textarea { + line-height: var(--line-height-tight); +} +input[type="search"]::-webkit-search-decoration, +input[type="search"]::-webkit-search-cancel-button { + display: none; + pointer-events: none; +} +input[type=number]::-webkit-inner-spin-button { + -webkit-appearance: none; +} +/* Date input */ +input[type='date'], +input[type='datetime-local'] { + font-variant-numeric: tabular-nums; + position: relative; +} +input[type='date']::-webkit-datetime-edit-text, +input[type='datetime-local']::-webkit-datetime-edit-text { + color: var(--text-faint); +} +input[type='date']::-webkit-calendar-picker-indicator, +input[type='datetime-local']::-webkit-calendar-picker-indicator { + position: absolute; + left: var(--size-4-1); + opacity: 0.5; +} +input[type='date']::-webkit-datetime-edit-month-field:active, +input[type='datetime-local']::-webkit-datetime-edit-month-field:active, +input[type='date']::-webkit-datetime-edit-month-field:focus, +input[type='datetime-local']::-webkit-datetime-edit-month-field:focus, +input[type='date']::-webkit-datetime-edit-day-field:active, +input[type='datetime-local']::-webkit-datetime-edit-day-field:active, +input[type='date']::-webkit-datetime-edit-day-field:focus, +input[type='datetime-local']::-webkit-datetime-edit-day-field:focus, +input[type='date']::-webkit-datetime-edit-year-field:active, +input[type='datetime-local']::-webkit-datetime-edit-year-field:active, +input[type='date']::-webkit-datetime-edit-year-field:focus, +input[type='datetime-local']::-webkit-datetime-edit-year-field:focus { + background-color: var(--text-selection); + color: var(--text-normal); + cursor: text; +} +body:not(.is-ios):not(.is-android) input[type='date'], +body:not(.is-ios):not(.is-android) input[type='datetime-local'] { + padding-left: var(--size-4-6); +} +/* Range slider */ +input[type='range'] { + width: 100px; + -webkit-appearance: none; + background-color: var(--slider-track-background); + border-radius: var(--slider-track-height); + height: var(--slider-track-height); + padding: 0; + outline: none; +} +input[type='range']::-webkit-slider-runnable-track { + height: 6px; + -webkit-appearance: none; +} +input[type='range']::-webkit-slider-thumb { + -webkit-appearance: none; + height: var(--slider-thumb-height); + width: var(--slider-thumb-width); + border-radius: var(--slider-thumb-radius); + cursor: default; + background: #FFF; + border: var(--slider-thumb-border-width) solid var(--slider-thumb-border-color); + position: relative; + top: var(--slider-thumb-y); + transition: all 0.1s linear; + box-shadow: 0 1px 1px 0px rgba(0, 0, 0, 0.05), 0 2px 2px 0px rgba(0, 0, 0, 0.1); +} +input[type='range']::-webkit-slider-thumb:hover, +input[type='range']::-webkit-slider-thumb:active { + background: white; + border-color: var(--background-modifier-border-focus); + box-shadow: 0 1px 2px 0px rgba(0, 0, 0, 0.1), 0 2px 3px 0px rgba(0, 0, 0, 0.2); + transition: all 0.1s linear; +} +body:not(.is-mobile) input[type=range]:focus { + box-shadow: none; +} +body:not(.is-mobile) input[type=range]:focus::-webkit-slider-thumb { + box-shadow: 0 1px 2px 0px rgba(0, 0, 0, 0.05), 0 2px 3px 0px rgba(0, 0, 0, 0.2); +} +body:not(.is-mobile) input[type=range]:focus-visible::-webkit-slider-thumb { + border-color: var(--background-modifier-border-focus); + box-shadow: 0 1px 2px 0px rgba(0, 0, 0, 0.05), 0 2px 3px 0px rgba(0, 0, 0, 0.2), 0 0 0px 2px var(--background-modifier-border-focus); +} +/* Color inputs */ +input[type="color"] { + -webkit-appearance: none; + width: calc(var(--swatch-width) + 4px); + background-color: transparent; + border: none; + cursor: var(--cursor); + padding: 0; +} +input[type="color"]::-webkit-color-swatch-wrapper { + padding: 2px; +} +input[type="color"]::-webkit-color-swatch { + border: 0px; + box-shadow: var(--swatch-shadow); + border-radius: var(--swatch-radius); + height: var(--swatch-height); + width: var(--swatch-width); + align-self: center; +} +@media (hover: hover) { + input[type="color"]::-webkit-color-swatch:hover { + box-shadow: inset 0 0 0 1px rgba(var(--mono-rgb-100), 0.25), 0 0 0 3px var(--background-modifier-border-hover); + } +} +input[type="color"]:focus-visible::-webkit-color-swatch, +input[type="color"]:focus::-webkit-color-swatch { + box-shadow: var(--swatch-shadow), 0 0 0 3px var(--background-modifier-border-focus); +} +select.mod-hidden { + display: none; +} +.notice-container { + z-index: var(--layer-notice); + position: fixed; + top: 22px; + right: 0; + padding: 10px; + overflow: hidden; +} +.notice { + background-color: var(--background-modifier-message); + border-radius: var(--radius-m); + box-shadow: 0 2px 8px var(--background-modifier-box-shadow); + color: #FAFAFA; + font-size: var(--font-ui-small); + line-height: var(--line-height-tight); + padding: 0.75em 1em 0.75em 1em; + max-width: 300px; + margin-bottom: 14px; + white-space: pre-wrap; + overflow-wrap: anywhere; + word-break: break-word; + cursor: var(--cursor); +} +.menu { + -webkit-app-region: no-drag; + padding: var(--size-2-3); + border: 1px solid var(--background-modifier-border-hover); + background-color: var(--background-secondary); + border-radius: var(--radius-m); + box-shadow: var(--shadow-s); + position: fixed; + z-index: var(--layer-menu); + user-select: none; + max-height: calc(100% - var(--header-height)); + overflow: hidden; +} +.menu.mod-no-icon .menu-item-icon:first-child { + display: none; +} +.menu-separator { + height: 0; + margin: var(--size-2-3) calc(var(--size-2-3) * -1); + border-bottom: 1px solid var(--background-modifier-border); +} +.menu-separator:last-child, +.menu-separator:first-child { + display: none; +} +.menu-separator + .menu-separator { + display: none; +} +.menu-separator + .menu-item.is-label { + padding-bottom: var(--size-4-1); +} +.menu-item { + display: flex; + align-items: center; + gap: var(--size-4-2); + padding: var(--size-4-1) var(--size-4-2); + cursor: var(--cursor); + font-size: var(--font-ui-small); + border-radius: var(--radius-s); + white-space: nowrap; +} +.menu-item.is-disabled { + cursor: default; + color: var(--text-faint); +} +.menu-item.is-warning.selected { + color: var(--text-error); +} +.menu-item.is-label { + cursor: default; + font-size: var(--font-ui-medium); + color: var(--text-muted); + white-space: pre-wrap; + overflow-wrap: anywhere; + word-break: break-word; +} +.menu-item.selected:not(.is-label):not(.is-disabled) { + background-color: var(--background-modifier-hover); +} +.menu-item-icon { + flex: 0 1 auto; + display: flex; + color: var(--text-muted); +} +.menu-item-icon .menu-item.is-warning.selected { + color: var(--text-error); +} +.menu-item.is-disabled .menu-item-icon { + color: var(--text-faint); +} +.menu-item-icon .mod-submenu { + color: var(--text-faint); +} +.menu-item-title { + flex: 1 0 0; +} +.menu.mod-tab-list .menu-item-title { + max-width: 300px; + overflow: hidden; + text-overflow: ellipsis; + white-space: nowrap; + vertical-align: bottom; +} +.debug-textarea { + width: 100%; + height: 50vh; + max-height: 80vh; + font-family: var(--font-monospace); + tab-size: 4; + resize: none; +} +.modal-container { + display: flex; + align-items: center; + justify-content: center; + position: absolute; + top: 0; + left: 0; + width: 100%; + height: 100%; + z-index: var(--layer-modal); +} +.modal-container.mod-dim .modal { + box-shadow: var(--shadow-l); +} +.modal-bg { + position: absolute; + top: 0; + left: 0; + width: 100%; + height: 100%; + background-color: var(--background-modifier-cover); +} +.modal { + --checkbox-size: var(--font-ui-medium); + background-color: var(--modal-background); + border-radius: var(--modal-radius); + border: var(--modal-border-width) solid var(--modal-border-color); + padding: var(--size-4-4); + position: relative; + min-height: 100px; + width: var(--dialog-width); + max-width: var(--dialog-max-width); + max-height: var(--dialog-max-height); + display: flex; + flex-direction: column; + overflow: auto; +} +.modal.mod-sidebar-layout { + padding: 0; + width: var(--modal-width); + height: var(--modal-height); + max-width: var(--modal-max-width); + max-height: var(--modal-max-height); + overflow: hidden; + display: flex; + flex-direction: column; +} +.modal.mod-sidebar-layout .modal-content { + display: flex; +} +.modal.mod-scrollable-content { + padding: 0; + overflow: hidden; +} +.modal.mod-scrollable-content .modal-title { + padding: var(--size-4-4) var(--size-4-4) 0 var(--size-4-4); +} +.modal.mod-scrollable-content .modal-content { + padding: 0 var(--size-4-4) var(--size-4-4) var(--size-4-4); + overflow: auto; +} +.modal-sidebar { + background-color: var(--background-secondary); + flex: 1 1 var(--modal-community-sidebar-width); + min-width: var(--modal-community-sidebar-width); + padding: var(--size-4-3) 0 0 0; + display: flex; + flex-direction: column; +} +body:not(.native-scrollbars) .modal-close-button { + right: 12px; +} +.modal-close-button { + cursor: var(--cursor); + position: absolute; + top: var(--size-2-3); + right: var(--size-2-3); + font-size: 24px; + line-height: 20px; + height: 24px; + width: 24px; + padding: 0 var(--size-2-2); + border-radius: var(--radius-s); + color: var(--text-muted); +} +@media (hover: hover) { + .modal-close-button:hover { + background-color: var(--background-modifier-hover); + color: var(--text-normal); + } +} +.modal-close-button:before { + font-family: Inter, sans-serif; + content: '\D7'; + font-weight: 300; +} +.modal-title { + font-size: var(--font-ui-large); + margin-bottom: 0.75em; + font-weight: var(--font-semibold); + text-align: left; + line-height: var(--line-height-tight); +} +.mod-sidebar-layout .modal-title { + display: none; +} +.modal-title:empty { + display: none; +} +.modal-content { + flex: 1 1 auto; + font-size: var(--font-ui-medium); +} +.modal-button-container { + margin-top: 1.5em; + display: flex; + justify-content: flex-end; + gap: var(--size-4-2); + flex-wrap: wrap; + font-size: var(--font-ui-medium); +} +.modal-button-container .mod-checkbox { + flex-grow: 1; + display: flex; + align-items: center; + gap: var(--size-4-1); +} +.modal-button-container .mod-secondary { + margin-right: auto; +} +.modal.mod-scrollable-content > .modal-button-container { + margin-top: 0; + border-top: 1px solid var(--background-modifier-border); + padding: var(--size-4-4); +} +.modal-checkbox-label { + cursor: var(--cursor); + margin-left: 10px; + user-select: none; +} +.message-container { + margin: var(--size-4-4) 0; +} +.message { + display: inline-block; + padding: 6px 12px 6px 12px; + border-radius: var(--radius-s); +} +.message.mod-success { + background-color: var(--background-modifier-success); + color: var(--text-on-accent); +} +.message.mod-success a { + color: var(--text-normal); +} +.message.mod-info { + background-color: var(--background-modifier-info); +} +.message.mod-error { + background-color: var(--background-modifier-error); + color: var(--text-on-accent); +} +.message.mod-error a { + color: var(--text-normal); +} +.mod-warning { + color: var(--text-error); +} +.mod-success { + color: var(--text-success); +} +.mod-file-rename .rename-textarea { + overflow: hidden; + padding: var(--size-2-3) var(--size-4-2); + resize: none; + width: 100%; +} +.modal-setting-back-button { + position: absolute; + top: var(--safe-area-inset-top); + left: 0; + padding: var(--size-4-3) var(--size-4-3); + height: var(--modal-header-height); + color: var(--text-normal); + font-weight: var(--font-semibold); +} +.modal-setting-back-button-icon { + display: flex; + align-items: center; + margin-right: 6px; +} +.modal-setting-nav-bar { + display: flex; + flex: 0 1 auto; + padding: var(--size-4-3); + border-bottom: 1px solid var(--background-modifier-border); +} +.modal .modal-nav-action { + background-color: unset; + margin-top: var(--size-4-1); + position: absolute; + top: 0; + width: unset; +} +.modal .modal-nav-action.mod-secondary { + left: 0; +} +.modal .modal-nav-action.mod-cta { + color: var(--color-accent); + font-weight: var(--font-semibold); + right: 0; +} +.nav-header { + padding: var(--size-4-2); +} +.nav-header .search-input-container { + margin: 4px auto; + padding: 0; +} +.nav-buttons-container { + flex-wrap: wrap; + gap: var(--size-2-1); +} +.nav-buttons-container.has-separator { + border-bottom: 1px solid var(--background-modifier-border); + padding-bottom: var(--size-2-3); + margin-bottom: var(--size-4-2); +} +body { + --pill-focus-width: calc(100% + 6px); + --pill-focus-left-adjust: -4px; +} +.multi-select-container { + cursor: text; + display: inline-flex; + vertical-align: top; + flex-wrap: wrap; + min-height: var(--input-height); + width: 100%; + background: var(--background-modifier-form-field); + border: var(--input-border-width) solid var(--background-modifier-border); + color: var(--text-normal); + font-size: var(--font-ui-small); + border-radius: var(--input-radius); + outline: none; + padding: var(--size-4-1); + gap: var(--size-4-1); +} +.multi-select-pill { + --icon-size: var(--icon-xs); + --icon-stroke: var(--icon-xs-stroke-width); + display: flex; + align-items: center; + background-color: var(--pill-background); + border: var(--pill-border-width) solid var(--pill-border-color); + border-radius: var(--pill-radius); + color: var(--pill-color); + cursor: var(--cursor); + font-weight: var(--pill-weight); + padding: var(--pill-padding-y) 0; + line-height: 1; + max-width: 100%; + gap: var(--size-2-1); + position: relative; +} +.multi-select-pill:focus:after { + content: ''; + display: block; + position: absolute; + pointer-events: none; + border-radius: var(--pill-radius); + left: var(--pill-focus-left-adjust); + width: var(--pill-focus-width); + height: 100%; + box-shadow: 0 0 0 1px var(--background-modifier-border-focus), inset 0 0 0 1px var(--background-modifier-border-focus); +} +@media (hover: hover) { + .multi-select-pill:hover { + background-color: var(--pill-background-hover); + border: var(--pill-border-width) solid var(--pill-border-color-hover); + color: var(--pill-color-hover); + text-decoration: var(--pill-decoration-hover); + } +} +.multi-select-pill-content { + margin-left: var(--pill-padding-x); +} +.multi-select-pill-remove-button { + margin-right: min(var(--size-2-3),var(--pill-padding-x)); + cursor: var(--cursor); + color: var(--pill-color-remove); + border-radius: var(--radius-s); + display: flex; + align-items: center; + --icon-size: var(--icon-xs); + --icon-stroke: var(--icon-xs-stroke-width); +} +.multi-select-pill-remove-button:hover { + color: var(--pill-color-remove-hover); +} +.multi-select-input { + cursor: text; + font-family: var(--font-interface); + min-width: 1ch; + max-width: max-content; + color: var(--text-normal); + background-color: inherit; + border: none; + overflow-x: auto; + white-space: nowrap; +} +.multi-select-input::-webkit-scrollbar { + display: none; +} +.multi-select-input:before { + content: '\200B'; +} +.multi-select-input:empty:before { + content: attr(placeholder); + color: var(--text-faint); + pointer-events: none; +} +@keyframes multi-select-highlight { + from { + color: var(--text-warning); + --link-color: var(--text-warning); + } +} +.multi-select-duplicate { + animation: multi-select-highlight 2000ms ease-in; +} +.popover { + background-color: var(--background-primary); + border: 1px solid var(--background-modifier-border); + box-shadow: var(--shadow-s); + border-radius: var(--radius-m); + padding: var(--size-4-5); + position: relative; + max-height: 95vh; +} +.popover.hover-popover { + position: absolute; + z-index: var(--layer-popover); + max-width: 80vw; + min-height: 60px; + overflow: hidden; + width: fit-content; + padding: 0; +} +.popover.hover-popover > * { + width: var(--popover-width); +} +.popover.hover-popover .markdown-preview-view { + font-size: var(--popover-font-size); +} +.popover.hover-popover > .mod-empty { + display: flex; + justify-content: center; + align-items: center; + padding: 20px; + font-size: var(--popover-font-size); + color: var(--text-muted); +} +.popover.hover-popover > .media-embed { + min-height: 0; + line-height: 0; + border: none; +} +.popover.hover-popover > .media-embed video { + max-height: 100%; + max-width: 100%; + height: auto; +} +.popover.hover-popover > .image-embed img { + max-height: 100%; + max-width: 100%; + height: auto; +} +.popover.hover-popover > .pdf-embed { + width: var(--popover-pdf-width); + height: var(--popover-pdf-height); + max-height: var(--popover-max-height); +} +.popover.hover-popover > .markdown-embed { + height: var(--popover-height); + max-height: var(--popover-max-height); + border: 0; + padding: 0; + margin: 0; +} +.popover.hover-popover > .markdown-embed > .markdown-embed-content { + height: 100%; + overflow: auto; +} +.popover.hover-popover > .markdown-embed > .markdown-embed-content > .markdown-preview-view { + padding: var(--file-margins); +} +.popover.hover-popover > .markdown-embed .mod-header + div > *:first-child { + margin-top: 0; +} +.follow-link-popover { + box-shadow: 0 2px 8px var(--background-modifier-box-shadow); + background-color: rgba(0, 0, 0, 0.9); + border-radius: var(--radius-m); + color: #ccc; + font-size: var(--font-ui-small); + line-height: 20px; + max-width: 300px; + padding: 5px 12px; + text-align: center; + z-index: var(--layer-tooltip); + white-space: pre-wrap; + top: calc(100%); +} +.follow-link-popover.mod-bottom { + top: 0; +} +@media (hover: hover) { + .follow-link-popover:hover { + background-color: #000000; + } +} +.follow-link-popover .popover-arrow { + position: absolute; + top: calc(100%); + left: 50%; + width: 0; + margin-left: -5px; + border-right: 5px solid transparent; + border-left: 5px solid transparent; + content: " "; + font-size: 0; + line-height: 0; + border-top: 5px solid rgba(0, 0, 0, 0.9); + border-bottom: 5px solid transparent; +} +.follow-link-popover.mod-bottom .popover-arrow { + border-bottom: 5px solid rgba(0, 0, 0, 0.9); + border-top: none; + top: -5px; +} +.markdown-preview-view progress, +.markdown-rendered progress, +.markdown-source-view.is-live-preview progress { + -webkit-writing-mode: horizontal-tb; + writing-mode: horizontal-tb; + appearance: none; + box-sizing: border-box; + display: inline-block; + height: 6px; + margin-bottom: 4px; + max-width: 100%; + overflow: hidden; + border-radius: 0px; + border: 0; + vertical-align: -0.2rem; +} +.markdown-preview-view progress[value]::-webkit-progress-bar, +.markdown-rendered progress[value]::-webkit-progress-bar, +.markdown-source-view.is-live-preview progress[value]::-webkit-progress-bar { + background-color: var(--background-secondary); + box-shadow: inset 0px 0px 0px 1px var(--background-modifier-border); + border-radius: 6px; + overflow: hidden; +} +.markdown-preview-view progress[value]::-webkit-progress-value, +.markdown-rendered progress[value]::-webkit-progress-value, +.markdown-source-view.is-live-preview progress[value]::-webkit-progress-value { + background-color: var(--interactive-accent); + overflow: hidden; +} +.progress-bar { + position: absolute; + height: 100vh; + width: 100vw; + top: 0; + left: 0; + background-color: var(--background-primary); + z-index: 10000; + display: flex; + flex-direction: column; + justify-content: center; + align-items: center; +} +.progress-bar-message { + margin-bottom: var(--size-4-8); + opacity: 1; + color: var(--text-muted); +} +.progress-bar-indicator { + position: relative; + height: 8px; + margin: 0 10vw; + width: 90vw; + overflow-x: hidden; + border-radius: 3px; +} +.progress-bar-line { + position: absolute; + opacity: 0.4; + background-color: var(--interactive-accent); + width: 150%; + height: 8px; +} +.progress-bar-subline { + position: absolute; + background-color: var(--interactive-accent); + height: 8px; +} +.progress-bar-subline.mod-increase { + animation: increase 2s infinite; +} +.progress-bar-subline.mod-decrease { + animation: decrease 2s 0.5s infinite; +} +.progress-bar .progress-bar-subline { + transition: width 150ms ease-in-out; +} +@keyframes increase { + from { + left: -5%; + width: 5%; + } + to { + left: 130%; + width: 100%; + } +} +@keyframes decrease { + from { + left: -80%; + width: 80%; + } + to { + left: 110%; + width: 10%; + } +} +.prompt { + display: flex; + flex-direction: column; + border-radius: var(--radius-l); + background-color: var(--background-primary); + box-shadow: var(--shadow-l); + border: var(--prompt-border-width) solid var(--prompt-border-color); + z-index: 1; + position: absolute; + top: 80px; + width: var(--prompt-width); + max-width: var(--prompt-max-width); + max-height: var(--prompt-max-height); + overflow: hidden; +} +.prompt-input-container { + display: flex; +} +input.prompt-input { + width: 100%; + padding: var(--size-4-6); + background-color: var(--background-primary); + font-size: var(--font-ui-medium); + border: none; + height: 40px; + border-radius: 0; + border-bottom: 1px solid var(--background-secondary); +} +input.prompt-input:hover, +input.prompt-input:focus, +input.prompt-input:focus-visible { + border-bottom: 1px solid var(--background-secondary); + box-shadow: none; +} +.prompt-results { + list-style: none; + margin: 0; + padding: var(--size-4-3); + overflow-y: auto; +} +.prompt-instructions { + border-top: 1px solid var(--background-secondary); + user-select: none; + font-size: var(--font-ui-smaller); + color: var(--text-muted); + padding: var(--size-4-2); + text-align: center; + display: flex; + flex-wrap: wrap; + justify-content: center; + gap: var(--size-4-3); +} +.prompt-instruction { + display: inline-block; +} +.prompt-instruction-command { + font-weight: var(--bold-weight); + margin-right: var(--size-2-2); +} +body:not(.native-scrollbars) ::-webkit-scrollbar { + background-color: var(--scrollbar-bg); + width: 12px; + height: 12px; + -webkit-border-radius: var(--radius-l); + background-color: transparent; +} +body:not(.native-scrollbars) ::-webkit-scrollbar-track { + background-color: transparent; +} +body:not(.native-scrollbars) ::-webkit-scrollbar-thumb { + background-color: var(--scrollbar-thumb-bg); + -webkit-border-radius: var(--radius-l); + background-clip: padding-box; + border: 2px solid transparent; + border-width: 3px 3px 3px 2px; + min-height: 45px; +} +body:not(.native-scrollbars) ::-webkit-scrollbar-thumb:active { + -webkit-border-radius: var(--radius-l); +} +body:not(.native-scrollbars) ::-webkit-scrollbar-thumb:hover, +body:not(.native-scrollbars) ::-webkit-scrollbar-thumb:active { + background-color: var(--scrollbar-active-thumb-bg); +} +body:not(.native-scrollbars) ::-webkit-scrollbar-corner { + background: transparent; +} +body:not(.native-scrollbars) * { + scrollbar-width: thin; + scrollbar-color: var(--scrollbar-thumb-bg) var(--scrollbar-bg); +} +/* Scroll indicator for sidebar containers +body:not(.is-translucent):not(.is-mobile) .workspace-tabs { + .item-list, + .nav-files-container, + .search-result-container, + .tag-container, + .outgoing-link-pane, + .backlink-pane { + background: + linear-gradient( + var(--background-secondary) 10%, + rgba(0, 0, 0, 0) + ) + center top, + linear-gradient( + var(--background-modifier-border) 100%, + rgba(0, 0, 0, 0) + ) + center top; + background-repeat: no-repeat; + background-size: 100% 40px, 91% 1px; + background-attachment: local, scroll; + } +} + */ +.suggestion-container { + position: absolute; + overflow: hidden; + display: flex; + flex-direction: column; + background-color: var(--background-primary); + max-width: 500px; + max-height: 300px; + border-radius: var(--radius-m); + border: 1px solid var(--background-modifier-border); + box-shadow: var(--shadow-s); + z-index: var(--layer-notice); +} +.is-mobile .suggestion-container { + max-width: calc(100vw - 20px); + max-height: 240px; +} +.suggestion { + overflow-y: auto; + padding: var(--size-2-3); +} +.suggestion-item, +.suggestion-empty { + font-size: var(--font-ui-medium); + margin-bottom: 1px; +} +.suggestion-empty { + color: var(--text-muted); + padding: var(--size-4-2); + padding-top: var(--size-4-3); + text-align: center; +} +.suggestion-item { + cursor: var(--cursor); + padding: var(--size-2-3) var(--size-4-3); + padding-left: 12px; + white-space: pre-wrap; + border-radius: var(--radius-s); +} +.suggestion-item.is-selected { + background-color: var(--background-modifier-hover); +} +.suggestion-item.mod-downranked { + color: var(--text-muted); +} +.suggestion-item.mod-complex { + align-items: baseline; + display: flex; + justify-content: space-between; +} +.suggestion-item.mod-complex .suggestion-title { + overflow-wrap: break-word; +} +.suggestion-item.mod-complex .suggestion-content { + display: flex; + flex-direction: column; + overflow: hidden; + text-overflow: ellipsis; + margin-right: auto; +} +.suggestion-item.mod-complex .suggestion-prefix:after { + content: ': '; +} +.suggestion-item.mod-complex .suggestion-highlight { + font-weight: bold; +} +.suggestion-item.mod-complex .suggestion-note { + font-size: 0.8em; + color: var(--text-muted); + width: 100%; + flex-basis: 100%; + overflow-wrap: break-word; +} +.suggestion-item.mod-complex .suggestion-icon, +.suggestion-item.mod-complex .suggestion-aux { + display: flex; + align-items: center; + align-self: center; + flex-shrink: 0; +} +.suggestion-item.mod-complex .suggestion-hotkey { + font-size: var(--font-ui-smaller); + font-family: var(--font-interface); + padding: 2px 6px; +} +.suggestion-item.mod-complex .suggestion-hotkey:not(:last-child) { + margin-left: 10px; +} +.suggestion-item.mod-complex .suggestion-flair { + color: var(--text-muted); + opacity: var(--icon-opacity); + display: flex; + align-items: center; +} +.suggestion-item.mod-complex .suggestion-flair:not(:last-child) { + margin-left: 6px; +} +.suggestion-item.mod-complex .suggestion-icon .suggestion-flair { + margin: 0 var(--size-4-3) 0 var(--size-4-1); +} +.suggestion-item.mod-complex .suggestion-aux .suggestion-flair { + margin: 0 var(--size-4-1) 0 var(--size-4-3); +} +.suggestion-highlight { + font-weight: bold; +} +.suggestion-bg { + position: fixed; + top: 0; + left: 0; + width: 100%; + height: 100%; + background-color: var(--background-modifier-cover); + z-index: var(--layer-popover); +} +.horizontal-tab-header { + display: flex; +} +.horizontal-tab-nav-item, +.vertical-tab-nav-item { + padding: var(--size-4-1) var(--size-4-2); + user-select: none; + cursor: var(--cursor); + font-size: calc(var(--font-ui-small) + 1px); + border-radius: var(--radius-s); +} +.horizontal-tab-nav-item.is-active, +.vertical-tab-nav-item.is-active { + background-color: var(--interactive-accent); + color: var(--text-on-accent); +} +@media (hover: hover) { + .horizontal-tab-nav-item.is-active:hover, + .vertical-tab-nav-item.is-active:hover { + background-color: var(--interactive-accent); + } +} +@media (hover: hover) { + .horizontal-tab-nav-item:hover, + .vertical-tab-nav-item:hover { + background-color: var(--background-modifier-hover); + } +} +.vertical-tab-nav-item { + margin-bottom: var(--size-2-1); +} +.vertical-tab-nav-item-chevron { + display: none; +} +.horizontal-tab-content, +.vertical-tab-content { + background-color: var(--background-primary); + padding-left: var(--size-4-12); + padding-right: var(--size-4-12); +} +.vertical-tabs-container { + display: flex; +} +.vertical-tab-header { + padding: var(--size-4-3); + background-color: var(--background-secondary); +} +.vertical-tab-header-group-items { + display: flex; + flex-direction: column; +} +.vertical-tab-header-group-title { + font-size: var(--font-ui-smaller); + color: var(--text-faint); + font-weight: var(--font-semibold); + padding: var(--size-4-2); + user-select: none; +} +.vertical-tab-header-group { + padding: var(--size-4-3) 0; +} +.vertical-tab-content-container { + overflow: hidden; + flex-grow: 1; +} +.vertical-tab-content { + overflow-y: auto; + height: 100%; + padding-top: var(--size-4-8); + padding-bottom: var(--size-4-16); +} +.vertical-tab-content h2 { + font-size: var(--font-ui-medium); + font-weight: var(--font-semibold); +} +.checkbox-container { + -webkit-app-region: no-drag; + cursor: var(--cursor); + background-color: var(--background-modifier-border-hover); + border-radius: var(--toggle-radius); + display: inline-block; + flex-shrink: 0; + height: calc(var(--toggle-thumb-height) + var(--toggle-border-width) * 2); + position: relative; + user-select: none; + width: var(--toggle-width); + box-shadow: inset 0 4px 10px rgba(0, 0, 0, 0.07), inset 0 0 1px rgba(0, 0, 0, 0.21); + transition: box-shadow 0.15s ease-in-out, outline 0.15s ease-in-out, border 0.15s ease-in-out, opacity 0.15s ease-in-out; + outline: 0 solid var(--background-modifier-border-focus); +} +.checkbox-container input[type='checkbox'] { + position: absolute; + opacity: 0; + left: 0; +} +.checkbox-container:focus-within { + outline: var(--toggle-border-width) solid var(--background-modifier-border-focus); +} +@media (hover: hover) { + .checkbox-container:hover { + box-shadow: inset 0 6px 20px rgba(0, 0, 0, 0.14), inset 0 0 1px rgba(0, 0, 0, 0.28); + } +} +.checkbox-container.is-enabled { + background-color: var(--interactive-accent); +} +.checkbox-container.is-enabled:after { + transform: translate3d(calc(var(--toggle-width) - var(--toggle-thumb-width) - var(--toggle-border-width)), 0, 0); +} +.checkbox-container.is-enabled:active:after { + left: -4px; +} +.checkbox-container:before { + content: ''; + display: block; + position: absolute; + top: 0; + left: 0; + bottom: 0; + right: 0; + opacity: 0; +} +.checkbox-container:after { + pointer-events: none; + content: ''; + display: block; + position: absolute; + background-color: var(--toggle-thumb-color); + width: var(--toggle-thumb-width); + height: var(--toggle-thumb-height); + margin: var(--toggle-border-width) 0 0 0; + border-radius: var(--toggle-thumb-radius); + transition: transform 0.15s ease-in-out, width 0.1s ease-in-out, left 0.1s ease-in-out; + left: 0; + transform: translate3d(var(--toggle-border-width), 0, 0); + box-shadow: 0 1px 2px rgba(0, 0, 0, 0.15); +} +.checkbox-container:active:after { + width: calc(var(--toggle-thumb-width) + var(--toggle-border-width)); +} +.checkbox-container.mod-small { + width: var(--toggle-s-width); + height: calc(var(--toggle-s-thumb-height) + var(--toggle-s-border-width) * 2); +} +.checkbox-container.mod-small:focus-within { + outline: var(--toggle-s-border-width) solid var(--background-modifier-border-focus); +} +.checkbox-container.mod-small:after { + width: var(--toggle-s-thumb-width); + height: var(--toggle-s-thumb-height); + margin: var(--toggle-s-border-width) 0 0 0; + transform: translate3d(var(--toggle-s-border-width), 0, 0); +} +.checkbox-container.mod-small.is-enabled:after { + transform: translate3d(calc(var(--toggle-s-width) - var(--toggle-s-thumb-width) - var(--toggle-s-border-width)), 0, 0); +} +.checkbox-container.mod-small:active:after { + width: calc(var(--toggle-s-thumb-width) + var(--toggle-s-border-width)); +} +/* Add this attribute to the element that needs a tooltip */ +.tooltip { + animation: pop-down 200ms forwards ease-in-out; + box-shadow: 0 2px 8px var(--background-modifier-box-shadow); + background-color: var(--background-modifier-message); + border-radius: var(--radius-s); + color: #FAFAFA; + font-size: var(--font-ui-smaller); + font-weight: var(--font-medium); + left: 50%; + line-height: var(--line-height-tight); + max-width: 300px; + padding: 4px 8px; + position: fixed; + text-align: center; + transform: translateX(-50%); + z-index: var(--layer-tooltip); + pointer-events: none; + white-space: pre-wrap; + word-break: normal; + overflow-wrap: anywhere; +} +.tooltip.mod-right { + animation: pop-right 200ms forwards ease-in-out; + transform: translateY(-50%); +} +.tooltip.mod-left { + animation: pop-right 200ms forwards ease-in-out; + transform: translateY(-50%); +} +.tooltip.mod-error { + width: 200px; + background-color: var(--background-modifier-error); + color: var(--text-on-accent); +} +.tooltip.mod-wide { + max-width: 450px; + width: 400px; +} +/* Triangle hack to make tooltip look like a speech bubble */ +.tooltip .tooltip-arrow { + position: absolute; + top: -5px; + left: 50%; + width: 0; + margin-left: -5px; + border-bottom: 5px solid var(--background-modifier-message); + border-right: 5px solid transparent; + border-left: 5px solid transparent; + content: " "; + font-size: 0; + line-height: 0; +} +.tooltip.mod-right .tooltip-arrow { + top: calc(50% - 5px); + left: -5px; + border-right: 5px solid var(--background-modifier-message); + border-top: 5px solid transparent; + border-bottom: 5px solid transparent; +} +.tooltip.mod-left .tooltip-arrow { + top: calc(50% - 5px); + left: calc(100% + 5px); + border-left: 5px solid var(--background-modifier-message); + border-top: 5px solid transparent; + border-bottom: 5px solid transparent; +} +.tooltip.mod-top .tooltip-arrow { + top: calc(100%); + border-top: 5px solid var(--background-modifier-message); + border-bottom: 5px solid transparent; +} +.tooltip.mod-error .tooltip-arrow { + border-bottom-color: var(--background-modifier-error); +} +.tooltip.mod-error.mod-right .tooltip-arrow { + border-right-color: var(--background-modifier-error); + border-bottom: 5px solid transparent; +} +.tooltip.mod-error.mod-left .tooltip-arrow { + border-left-color: var(--background-modifier-error); + border-bottom: 5px solid transparent; +} +[aria-label] .svg-icon { + pointer-events: none; +} +@keyframes pop-down { + 0% { + opacity: 0; + transform: translateX(-50%) scale(1); + } + 20% { + opacity: 0.7; + transform: translateX(-50%) scale(1.02); + } + 40% { + opacity: 1; + transform: translateX(-50%) scale(1.05); + } + 100% { + opacity: 1; + transform: translateX(-50%) scale(1); + } +} +@keyframes pop-right { + 0% { + opacity: 0; + transform: translateY(-50%) scale(1); + } + 20% { + opacity: 0.7; + transform: translateY(-50%) scale(1.02); + } + 40% { + opacity: 1; + transform: translateY(-50%) scale(1.05); + } + 100% { + opacity: 1; + transform: translateY(-50%) scale(1); + } +} +.tree-item-self { + align-items: baseline; + display: flex; + border-radius: var(--radius-s); + color: var(--nav-item-color); + font-size: var(--nav-item-size); + line-height: var(--line-height-tight); + font-weight: var(--nav-item-weight); + margin-bottom: var(--size-2-1); + padding: var(--nav-item-padding); + position: relative; +} +.tree-item-self:before { + content: '\200B'; +} +.tree-item-self.mod-collapsible { + padding: var(--nav-item-parent-padding); +} +.tree-item-self.is-being-dragged-over { + border-radius: var(--radius-s); + color: var(--nav-item-color-highlighted); + background: hsla(var(--interactive-accent-hsl), 0.1); +} +.tree-item-self.is-being-dragged-over .collapse-icon { + color: var(--nav-item-color-highlighted); +} +.tree-item-self.is-being-renamed .tree-item-inner { + cursor: text; +} +.tree-item-self.is-clickable { + cursor: var(--cursor); +} +@media (hover: hover) { + body:not(.is-grabbing) .tree-item-self.is-clickable:hover { + color: var(--nav-item-color-hover); + background-color: var(--nav-item-background-hover); + font-weight: var(--nav-item-weight-hover); + } +} +body:not(.is-grabbing) .tree-item-self.is-active:hover, +.tree-item-self.is-active { + color: var(--nav-item-color-active); + background-color: var(--nav-item-background-active); + font-weight: var(--nav-item-weight-active); +} +body:not(.is-grabbing) .tree-item-self.is-selected:hover, +.tree-item-self.is-selected { + color: var(--nav-item-color-selected); + background-color: var(--nav-item-background-selected); +} +body:not(.is-grabbing) .tree-item-self.is-being-dragged:hover, +.tree-item-self.is-being-dragged { + color: var(--text-on-accent); + background-color: var(--interactive-accent); +} +body:not(.is-grabbing) .tree-item-self.is-being-dragged:hover .tree-item-icon, +.tree-item-self.is-being-dragged .tree-item-icon { + color: var(--text-on-accent); +} +body:not(.is-phone) .workspace-leaf.mod-active .tree-item-self.has-focus { + border-radius: var(--radius-s); + box-shadow: 0 0 0 2px var(--background-modifier-border-focus); +} +body:not(.is-phone) .workspace-leaf.mod-active .tree-item-self.has-focus:focus-within { + box-shadow: 0 0 0 2px var(--interactive-accent); +} +.tree-item-self .tree-item-icon { + position: absolute; + margin-left: calc(-1 * var(--size-4-5)); + width: var(--size-4-4); + display: flex; + align-items: center; + justify-content: center; + opacity: var(--icon-opacity); + color: var(--icon-color); + flex: 0 0 auto; +} +.tree-item-self .tree-item-icon:before { + content: "\200b"; +} +.tree-item-self .tree-item-icon .svg-icon:not(.right-triangle) { + --icon-size: var(--icon-xs); + --icon-stroke: var(--icon-s-stroke-width); +} +.tree-item-flair-outer { + padding-left: var(--size-4-1); + margin-left: auto; + display: flex; + flex-shrink: 0; + align-items: center; +} +.tree-item-flair { + font-size: var(--font-ui-smaller); + color: var(--text-faint); + line-height: 1; + border-radius: var(--radius-s); +} +@media (hover: hover) { + .tree-item-self:hover .tree-item-flair { + color: var(--text-muted); + } +} +.tree-item-inner { + overflow: hidden; +} +.tree-item-inner-text { + overflow: hidden; + text-overflow: ellipsis; +} +.tree-item-inner-subtext { + color: var(--text-faint); + font-size: 85%; +} +.tree-item-children { + padding-left: var(--nav-item-children-padding-left); + margin-left: var(--nav-item-children-margin-left); + margin-bottom: 1px; + border-left: var(--nav-indentation-guide-width) solid var(--nav-indentation-guide-color); +} +.drop-indicator { + position: absolute; + left: 0; + width: 100%; + height: 0; + border: 2px solid var(--interactive-accent); + pointer-events: none; +} +.drop-indicator:not(.is-active) { + display: none; +} +audio { + outline: none; +} +.markdown-rendered audio { + max-width: 100%; + outline: none; +} +audio { + width: 100%; + height: 42px; +} +audio::-webkit-media-controls-enclosure { + border-radius: calc(var(--radius-m) - 1px); + border: 1px solid var(--background-modifier-border); + background-color: var(--background-primary-alt); +} +audio::-webkit-media-controls-current-time-display, +audio::-webkit-media-controls-time-remaining-display { + font-family: var(--font-interface); +} +iframe { + border: 0; +} +kbd { + color: var(--code-normal); + font-family: var(--font-monospace); + background-color: var(--code-background); + border-radius: var(--radius-s); + font-size: var(--code-size); + padding: 0.1em 0.25em; +} +.workspace-leaf-content[data-type="pdf"] .view-content { + display: flex; + flex-direction: column; + overflow: hidden; + padding: 0; +} +.pdf-container { + background-color: var(--pdf-background); + flex-grow: 1; + min-width: 350px; + overflow: hidden; + position: relative; +} +.theme-dark .pdf-container.mod-themed .annotationLayer .textWidgetAnnotation input, +.theme-dark .pdf-container.mod-themed .annotationLayer .textWidgetAnnotation textarea { + filter: invert(100%) hue-rotate(180deg); +} +.theme-dark .pdf-container.mod-themed .popupWrapper > div { + background-color: var(--background-secondary-alt); + filter: drop-shadow(0px 0px 1px var(--color-base-60)) drop-shadow(0px 1px 2px rgba(0, 0, 0, 0.4)) drop-shadow(0px 4px 6px rgba(0, 0, 0, 0.4)); +} +.theme-dark .pdf-container.mod-themed .popupWrapper > div::after { + background-color: var(--background-secondary-alt); +} +.theme-dark .pdf-container.mod-themed .popupContent:empty + .popupMeta { + background-color: var(--background-secondary-alt); +} +.pdf-viewer-container { + outline: none; + overflow: auto; + position: absolute; + top: 0; + right: 0; + bottom: 0; + left: 0; + scroll-padding: var(--size-4-3); +} +.findbarOpen .pdf-viewer-container { + margin-top: var(--findbar-height); +} +.pdf-content-container { + --sidebar-width: 140px; +} +.pdf-content-container.sidebarMoving .pdf-sidebar-container, +.pdf-content-container.sidebarOpen .pdf-sidebar-container { + visibility: visible; +} +.pdf-content-container.sidebarOpen .pdf-sidebar-container { + inset-inline-start: 0; +} +.pdf-content-container.sidebarOpen .pdf-viewer-container { + inset-inline-start: var(--sidebar-width); + transition-property: inset-inline-start; +} +.pdf-embed .pdf-content-container.sidebarOpen .pdf-sidebar-container, +.is-mobile .pdf-content-container.sidebarOpen .pdf-sidebar-container { + inset-inline-start: 0; +} +.pdf-embed .pdf-content-container.sidebarOpen .pdf-viewer-container, +.is-mobile .pdf-content-container.sidebarOpen .pdf-viewer-container { + inset-inline-start: 0; +} +.pdf-content-container .pdf-sidebar-container, +.pdf-content-container .pdf-viewer-container { + transition-duration: 275ms; + transition-timing-function: var(--anim-motion-swing); +} +.pdf-content-container.sidebarResizing .pdf-sidebar-container, +.pdf-content-container.sidebarResizing .pdf-viewer-container { + /* Improve responsiveness and avoid visual glitches when the sidebar is resized. */ + transition-duration: 0s; +} +.pdf-content-container { + bottom: 0; + left: 0; + min-width: 350px; + position: absolute; + right: 0; + top: 0; +} +.pdf-content-container.is-loading:before { + z-index: 1; +} +.pdf-sidebar-container { + background-color: var(--pdf-sidebar-background); + border-right: var(--divider-width) solid var(--divider-color); + bottom: 0; + display: flex; + flex-direction: column; + inset-inline-start: calc(-1 * var(--sidebar-width)); + position: absolute; + top: 0; + transition-property: inset-inline-start; + visibility: hidden; + width: var(--sidebar-width); + z-index: 100; +} +.findbarOpen .pdf-sidebar-container { + top: var(--findbar-height); +} +.is-mobile .pdf-sidebar-container[data-view="1"], +.pdf-embed .pdf-sidebar-container[data-view="1"] { + inset-inline-start: -140px; + width: 140px; +} +.is-mobile .pdf-sidebar-container[data-view="2"], +.pdf-embed .pdf-sidebar-container[data-view="2"] { + inset-inline-start: -275px; + width: 275px; +} +.pdf-sidebar-container .pdf-thumbnail-view, +.pdf-sidebar-container .pdf-outline-view { + bottom: 0; + overflow: auto; + padding: var(--size-4-2) var(--size-4-2); + position: absolute; + top: 0; + -webkit-user-select: none; + user-select: none; + width: 100%; +} +.pdf-sidebar-container .pdf-thumbnail-view { + display: flex; + flex-wrap: wrap; + gap: var(--size-4-1); + justify-content: center; + align-content: flex-start; + padding: var(--size-4-3); + width: 100%; +} +.pdf-sidebar-container .pdf-thumbnail-view a { + display: block; + cursor: var(--cursor); +} +.pdf-sidebar-container .pdf-thumbnail-view a:active, +.pdf-sidebar-container .pdf-thumbnail-view a:focus { + outline: 0; +} +.pdf-sidebar-container .thumbnail { + --thumbnail-width: 0; + --thumbnail-height: 0; + position: relative; + width: var(--thumbnail-width); + height: var(--thumbnail-height); + border: var(--size-4-2) solid transparent; + border-radius: var(--radius-s); + box-sizing: content-box; +} +.pdf-sidebar-container .thumbnail::before { + content: " "; + position: absolute; + top: 0; + right: 0; + bottom: 0; + left: 0; + box-shadow: var(--pdf-thumbnail-shadow); +} +.pdf-sidebar-container .thumbnail::after { + background-color: var(--background-secondary); + border-radius: 3px; + bottom: var(--size-4-1); + content: attr(data-page-label); + color: var(--text-muted); + display: block; + font-size: var(--font-ui-smaller); + line-height: 1; + padding: var(--size-2-1) var(--size-4-1); + position: absolute; + right: var(--size-4-1); +} +.pdf-sidebar-container .thumbnail:not([data-loaded]) { + border: 1px dashed var(--background-modifier-border); + margin: calc(var(--size-4-2) - 1px); +} +.pdf-sidebar-container .thumbnail:hover, +.pdf-sidebar-container .thumbnail.selected { + border-color: var(--background-modifier-hover); +} +.pdf-sidebar-container img.thumbnailImage { + border: 1px solid transparent; + max-width: unset; + width: var(--thumbnail-width); + height: var(--thumbnail-height); +} +.pdf-outline-view .tree-item-self:not(.mod-collapsible) { + padding-left: calc(10px + var(--size-4-2) + var(--size-2-3)); +} +.pdf-outline-view .tree-item-self.mod-active { + color: var(--nav-item-color-active); + background-color: var(--nav-item-background-active); + font-weight: var(--nav-item-weight-active); +} +.pdf-outline-view .tree-item-flair { + white-space: nowrap; +} +.pdf-sidebar-content-wrapper { + position: relative; + flex-grow: 1; +} +.pdf-sidebar-content { + bottom: 0; + inset-inline-start: 0; + overflow: auto; + position: absolute; + top: 0; + width: 100%; +} +.pdf-sidebar-content > .hidden { + display: none; +} +.pdf-sidebar-resizer { + background-color: transparent; + bottom: 0; + cursor: col-resize; + inset-inline-end: calc(var(--divider-width-hover) * -1); + position: absolute; + top: 0; + transition: background-color 200ms ease-in-out; + width: var(--divider-width-hover); + z-index: var(--layer-cover); +} +.is-mobile .pdf-sidebar-resizer, +.pdf-embed .pdf-sidebar-resizer { + display: none; +} +@media (hover: hover) { + .pdf-sidebar-resizer:hover { + background-color: var(--divider-color-hover); + } + .is-translucent .pdf-sidebar-resizer:hover { + background-color: var(--divider-color-hover); + } +} +.pdf-toolbar { + align-items: stretch; + background-color: var(--background-primary); + border-bottom: 1px solid var(--background-modifier-border); + display: flex; + justify-content: space-between; + overflow: auto; + padding: var(--size-4-1) var(--size-4-3); + position: relative; +} +.hover-popover .pdf-toolbar { + display: none; +} +.pdf-page-numbers { + white-space: nowrap; + margin-right: var(--size-4-1); + font-size: var(--font-ui-small); + font-variant-numeric: tabular-nums; +} +.pdf-toolbar-left, +.pdf-toolbar-center, +.pdf-toolbar-right { + display: flex; + align-items: center; + gap: var(--size-4-1); +} +.pdf-toolbar-left.hidden, +.pdf-toolbar-center.hidden, +.pdf-toolbar-right.hidden { + display: none; +} +.pdf-toolbar-center { + position: absolute; + top: var(--size-4-1); + height: calc(100% - var(--size-4-2)); + left: 50%; + transform: translateX(-50%); +} +.pdf-toolbar-spacer { + width: var(--size-4-3); +} +.pdf-toolbar-divider { + width: var(--border-width); + height: var(--icon-size); + background-color: var(--background-modifier-border); +} +.pdf-page-input { + width: 7ch; + text-align: right; + font-variant-numeric: tabular-nums; +} +.pdf-page-input.mod-page-loading { + background-color: var(--background-secondary); + opacity: 0.5; +} +.pdf-findbar { + background-color: var(--background-primary); + flex-direction: row-reverse; + font-size: var(--font-ui-small); + gap: var(--size-4-1); + left: 0; + line-height: 1; + padding: var(--size-2-3); + position: absolute; + right: 0; + top: 0; + z-index: 101; +} +.pdf-findbar input { + min-width: 300px; +} +.pdf-findbar.mod-hidden { + display: none; +} +.pdf-findbar input[type="checkbox"] { + display: none; + pointer-events: none; +} +.pdf-findbar label { + -webkit-user-select: none; + user-select: none; +} +.pdf-findbar label:hover, +.pdf-findbar input:focus-visible + label { + color: var(--toggled-btn-color); + background-color: var(--button-hover-color); +} +.pdf-findbar .pdf-toolbar-field[type="checkbox"]:checked + .pdf-toolbar-label { + background-color: var(--toggled-btn-bg-color) !important; + color: var(--toggled-btn-color); +} +.pdf-findbar .pdf-search-wrapper { + display: flex; + gap: var(--size-4-1); + align-items: center; +} +.pdf-findbar .mod-not-found { + --background-modifier-form-field: rgba(var(--background-modifier-error-rgb), 0.1); + --background-modifier-border-focus: rgba(var(--background-modifier-error-rgb), 0.6); +} +.pdf-findbar .mod-pending::before { + -webkit-mask-image: url('data:image/svg+xml,'); + animation: rotation 1s infinite linear; +} +.is-phone .pdf-findbar { + overflow: none; +} +.is-phone .pdf-findbar .pdf-toolbar-button { + height: auto; + width: auto; + padding: 6px 0; + background-color: transparent; + color: var(--text-accent); + flex-grow: 0; + flex-shrink: 0; +} +.is-phone .pdf-findbar .pdf-toolbar-divider, +.is-phone .pdf-findbar .pdf-findbar-settings-btn, +.is-phone .pdf-findbar .pdf-findbar-message { + display: none; +} +.is-phone .pdf-findbar input { + min-width: 0; +} +.is-phone .pdf-findbar .search-input-container { + flex-grow: 1; +} +.is-phone .pdf-findbar .pdf-search-wrapper { + gap: var(--size-4-2); +} +@keyframes rotation { + from { + transform: rotate(0deg); + } + to { + transform: rotate(360deg); + } +} +.pdf-find-results-count { + color: var(--text-muted); + margin: 0 var(--size-4-2); + font-style: italic; + white-space: nowrap; +} +.pdf-find-results-count:empty { + display: none; +} +.pdf-findbar-settings { + background-color: var(--background-primary); + border-radius: var(--radius-m); + border: 1px solid var(--background-modifier-border); + box-shadow: var(--shadow-s); + padding: var(--size-4-1) var(--size-4-2); + position: absolute; + transform: translateX(-100%); + width: 200px; + z-index: 200; +} +.pdf-findbar-settings .setting-item { + padding: var(--size-4-1) 0; + border: none; +} +.pdf-findbar-settings .setting-item-name { + font-size: var(--font-ui-small); +} +.pdf-password-dialog { + align-items: center; + display: flex; + flex-direction: column; + font-size: var(--font-ui-medium); + gap: var(--size-4-1); + justify-content: center; + left: 50%; + position: absolute; + top: 50%; + transform: translate(-50%, -50%); +} +.pdf-password-dialog .mod-small { + font-size: var(--font-ui-small); +} +.pdf-password-dialog input { + margin-top: var(--size-4-2); +} +.pdf-lock-icon .svg-icon { + --icon-size: var(--icon-xl); + --icon-stroke: var(--icon-xl-stroke-width); +} +.textLayer .mod-focused { + background-color: rgb(var(--text-highlight-bg-rgb)); + border-radius: var(--radius-s); + box-sizing: content-box; + padding: var(--size-4-1); + margin: calc(var(--size-4-1) * -1); +} +.textLayer .mod-focused.appended { + position: static; +} +.annotationLayer .mod-focused { + background-color: rgba(var(--text-highlight-bg-rgb), 0.1); + border-radius: var(--radius-s); + box-shadow: var(--shadow-s); + box-sizing: content-box; + margin: calc(var(--size-4-2) * -1); + border: var(--size-4-1) solid rgba(var(--text-highlight-bg-rgb), 0.8); + padding: var(--size-4-1); +} +.annotationLayer .boundingRect { + z-index: 2000; + position: absolute; + pointer-events: none; +} +.annotationLayer .boundingRect > * { + pointer-events: initial; +} +.pdf-viewer .canvasWrapper { + position: absolute; + inset: 0; + box-shadow: var(--pdf-shadow); +} +.pdf-viewer .page { + box-sizing: content-box; + border: calc(var(--size-4-1) * var(--scale-factor)) solid transparent; + flex-shrink: 0; + margin: 0 auto; +} +.spread .page, +.pdf-viewer:is(.scrollHorizontal, .scrollWrapped) .page { + border: var(--size-4-1) solid transparent; +} +.pdf-viewer.removePageBorders .page + .page { + border-top: var(--size-4-1) solid transparent; +} +.pdf-viewer.removePageBorders .spread .page + .page { + border-top: none; +} +.pdf-viewer.removePageBorders .spread .canvasWrapper { + box-shadow: var(--pdf-spread-shadow); +} +.pdf-viewer.removePageBorders .spread + .spread { + border-top: var(--size-4-1) solid transparent; +} +.textLayer { + -webkit-user-select: text; + user-select: text; + opacity: 0.2; +} +.textLayer ::selection, +.markdown-source-view.mod-cm6 .textLayer ::selection { + background-color: hsl(var(--color-accent-hsl)); +} +.textLayer .highlight { + margin: -1px; + padding: 1px; + border-radius: var(--radius-s); +} +.textLayer .highlight.appended { + position: static; + display: inline-block; +} +.textLayer .highlight.begin { + border-radius: var(--radius-s) 0 0 var(--radius-s); +} +.textLayer .highlight.end { + border-radius: 0 var(--radius-s) var(--radius-s) 0; +} +.textLayer .highlight.selected { + box-shadow: 0 0 0 2px hsl(var(--interactive-accent-hsl)); + background-color: hsl(var(--interactive-accent-hsl)); +} +.textLayer .highlight:not(.selected) { + box-shadow: 0 0 0 2px rgb(var(--color-yellow-rgb)); + background-color: rgb(var(--color-yellow-rgb)); +} +.popupWrapper { + --pdf-popup-width: 280px; + font-size: var(--font-ui-medium); + pointer-events: none; + position: absolute; + transform: translate(-50%, 0); + z-index: 10000; +} +.popupWrapper > div { + margin: var(--size-4-3); + background-color: var(--background-primary); + border-radius: var(--radius-s); + filter: drop-shadow(0px 0px 1px rgba(0, 0, 0, 0.2)) drop-shadow(0px 1px 2px rgba(0, 0, 0, 0.3)) drop-shadow(0px 4px 6px rgba(0, 0, 0, 0.3)); +} +.popupWrapper > div:after { + background: var(--background-primary); + border-top-left-radius: 2px; + content: ""; + height: var(--size-4-3); + left: calc(50% - 2px); + position: absolute; + top: -5px; + transform: rotate(45deg); + width: var(--size-4-3); + z-index: -1; +} +.is-phone .pdf-annotation-modal .modal { + height: auto; + max-height: 40vh; + min-height: 0; + top: unset; +} +.is-phone .pdf-annotation-modal .modal .modal-close-button, +.is-phone .pdf-annotation-modal .modal .modal-title { + display: none; +} +.is-phone .pdf-annotation-modal .modal-content { + overflow: hidden; + padding: 0; +} +.is-phone .pdf-annotation-modal .popup { + flex-direction: column-reverse; + height: 100%; + overflow: hidden; +} +.is-phone .pdf-annotation-modal .popupContent { + height: 100%; + max-height: none; + padding-bottom: calc(var(--modal-bottom) + var(--size-4-4)); + padding-top: 0; +} +.is-phone .pdf-annotation-modal .popupContent:empty + .popupMeta, +.is-phone .pdf-annotation-modal .popupMeta { + --icon-size: var(--font-ui-medium); + --icon-stroke: var(--icon-m-stroke-width); + background-color: transparent; + padding: var(--size-4-2) var(--size-4-4); + border-top: none; +} +.popup { + cursor: initial; + display: flex; + flex-direction: column; + pointer-events: auto; + -webkit-user-select: text; + user-select: text; + white-space: normal; + width: var(--pdf-popup-width); + word-wrap: break-word; +} +.popupContent { + font-size: var(--font-ui-small); + line-height: var(--line-height-tight); + max-height: 200px; + overflow: auto; + padding: var(--size-4-4); +} +.popupContent:empty { + display: none; +} +.popupMeta { + --icon-size: var(--font-ui-small); + --icon-stroke: 2.5px; + align-items: center; + background-color: var(--background-secondary); + border-top: 1px solid var(--background-modifier-border); + color: var(--text-muted); + display: flex; + font-size: var(--font-ui-smaller); + gap: var(--size-4-1); + justify-content: space-between; + padding: var(--size-4-1) var(--size-4-2); + border-bottom-left-radius: var(--radius-s); + border-bottom-right-radius: var(--radius-s); +} +.popupContent:empty + .popupMeta { + border-top: none; + background-color: var(--background-primary); + border-top-left-radius: var(--radius-s); + border-top-right-radius: var(--radius-s); +} +.popupMeta .clickable-icon { + margin-right: calc(var(--size-4-1) * -1); + margin-left: calc(var(--size-2-1) * -1); +} +.popupDate { + white-space: nowrap; +} +.markdown-rendered video { + max-width: 100%; + outline: none; +} +.markdown-rendered blockquote { + color: var(--blockquote-color); + font-style: var(--blockquote-font-style); + background-color: var(--blockquote-background-color); + border-left: var(--blockquote-border-thickness) solid var(--blockquote-border-color); + padding: 0 0 0 var(--size-4-6); + margin-inline-start: 0; + margin-inline-end: 0; +} +.markdown-rendered blockquote > :first-child { + margin-top: 0; +} +.markdown-rendered blockquote > :last-child { + margin-bottom: 0; +} +.cm-s-obsidian span.cm-quote { + color: var(--blockquote-color); +} +.cm-s-obsidian span.cm-formatting-quote { + color: var(--text-faint); +} +.cm-s-obsidian .hmd-inactive-line span.cm-formatting-quote { + color: transparent; +} +.markdown-source-view.mod-cm6.is-live-preview .HyperMD-quote:before, +.markdown-source-view.mod-cm6 .cm-blockquote-border:before { + content: "\200b"; + display: block; + width: 1px; + border-left: var(--blockquote-border-thickness) solid var(--blockquote-border-color); + color: transparent; + position: absolute; + top: 0; + bottom: 0; +} +.markdown-source-view.mod-cm6.is-live-preview .HyperMD-quote { + font-style: var(--blockquote-style); + background-color: var(--blockquote-background-color); +} +.markdown-source-view.mod-cm6.is-live-preview .HyperMD-quote:before { + left: 0; +} +.markdown-source-view.mod-cm6 .cm-blockquote-border { + display: inline-block; +} +.callout { + --callout-color: var(--callout-default); + --callout-icon: lucide-pencil; +} +.callout[data-callout="abstract"], +.callout[data-callout="summary"], +.callout[data-callout="tldr"] { + --callout-color: var(--callout-summary); + --callout-icon: lucide-clipboard-list; +} +.callout[data-callout="info"] { + --callout-color: var(--callout-info); + --callout-icon: lucide-info; +} +.callout[data-callout="todo"] { + --callout-color: var(--callout-todo); + --callout-icon: lucide-check-circle-2; +} +.callout[data-callout="important"] { + --callout-color: var(--callout-important); + --callout-icon: lucide-flame; +} +.callout[data-callout="tip"], +.callout[data-callout="hint"] { + --callout-color: var(--callout-tip); + --callout-icon: lucide-flame; +} +.callout[data-callout="success"], +.callout[data-callout="check"], +.callout[data-callout="done"] { + --callout-color: var(--callout-success); + --callout-icon: lucide-check; +} +.callout[data-callout="question"], +.callout[data-callout="help"], +.callout[data-callout="faq"] { + --callout-color: var(--callout-question); + --callout-icon: help-circle; +} +.callout[data-callout="warning"], +.callout[data-callout="caution"], +.callout[data-callout="attention"] { + --callout-color: var(--callout-warning); + --callout-icon: lucide-alert-triangle; +} +.callout[data-callout="failure"], +.callout[data-callout="fail"], +.callout[data-callout="missing"] { + --callout-color: var(--callout-fail); + --callout-icon: lucide-x; +} +.callout[data-callout="danger"], +.callout[data-callout="error"] { + --callout-color: var(--callout-error); + --callout-icon: lucide-zap; +} +.callout[data-callout="bug"] { + --callout-color: var(--callout-bug); + --callout-icon: lucide-bug; +} +.callout[data-callout="example"] { + --callout-color: var(--callout-example); + --callout-icon: lucide-list; +} +.callout[data-callout="quote"], +.callout[data-callout="cite"] { + --callout-color: var(--callout-quote); + --callout-icon: quote-glyph; +} +.callout { + overflow: hidden; + border-style: solid; + border-color: rgba(var(--callout-color), var(--callout-border-opacity)); + border-width: var(--callout-border-width); + border-radius: var(--callout-radius); + margin: 1em 0; + mix-blend-mode: var(--callout-blend-mode); + background-color: rgba(var(--callout-color), 0.1); + padding: var(--callout-padding); +} +.callout.is-collapsible .callout-title { + cursor: var(--cursor); +} +.callout-title { + padding: var(--callout-title-padding); + display: flex; + gap: var(--size-4-1); + font-size: var(--callout-title-size); + color: rgb(var(--callout-color)); + line-height: var(--line-height-tight); + align-items: flex-start; +} +.callout-content { + overflow-x: auto; + padding: var(--callout-content-padding); + background-color: var(--callout-content-background); +} +.callout-icon { + flex: 0 0 auto; + display: flex; + align-items: center; +} +.callout-icon .svg-icon { + color: rgb(var(--callout-color)); +} +.callout-icon::after { + content: "\200B"; +} +.callout-title-inner { + font-weight: var(--bold-weight); + color: var(--callout-title-color); +} +.callout-fold { + display: flex; + align-items: center; + padding-right: var(--size-4-2); +} +.callout-fold::after { + content: "\200B"; +} +.callout-fold .svg-icon { + transition: transform 100ms ease-in-out; +} +.callout-fold.is-collapsed .svg-icon { + transform: rotate(-90deg); +} +.markdown-source-view.mod-cm6 .callout { + margin: 0; +} +.markdown-rendered code { + color: var(--code-normal); + font-family: var(--font-monospace); + background-color: var(--code-background); + border-radius: var(--code-radius); + font-size: var(--code-size); + padding: 0.1em 0.25em; + -webkit-box-decoration-break: clone; +} +.cm-s-obsidian span.cm-inline-code { + color: var(--code-normal); + font-size: var(--code-size); + background-color: var(--code-background); + vertical-align: baseline; + -webkit-box-decoration-break: clone; +} +.cm-s-obsidian span.cm-inline-code span.cm-inline-code.cm-hmd-indented-code { + background-color: transparent; +} +.cm-s-obsidian span.cm-inline-code span.cm-inline-code:not(.cm-formatting):not(.cm-hmd-indented-code):not(.obsidian-search-match-highlight) { + background-color: var(--code-background); + vertical-align: baseline; +} +.cm-s-obsidian span.cm-inline-code span.cm-inline-code.hmd-hidden-token { + font-size: 0; +} +.cm-s-obsidian .cm-inline-code:not(.cm-formatting) { + border-radius: var(--code-radius); + padding: 0.1em 0.25em; +} +.cm-s-obsidian .cm-inline-code.cm-formatting { + border-radius: var(--code-radius) 0 0 var(--code-radius); + padding: 0.1em 0; +} +.cm-s-obsidian .cm-inline-code:not(.cm-formatting) + .cm-formatting.cm-inline-code { + border-radius: 0 var(--code-radius) var(--code-radius) 0; + padding-left: 0; +} +.cm-s-obsidian .cm-inline-code.cm-formatting ~ .cm-inline-code:not(.cm-formatting) { + border-radius: 0; + padding: 0.1em 0; +} +.markdown-rendered pre { + position: relative; + padding: var(--size-4-3) var(--size-4-4); + min-height: 38px; + background-color: var(--code-background); + border-radius: var(--code-radius); + white-space: var(--code-white-space); + overflow-x: auto; +} +.markdown-rendered pre code { + border: none; + padding: 0; + background-color: transparent; +} +.markdown-rendered pre:not(:hover) > button.copy-code-button { + display: none; +} +.markdown-rendered button.copy-code-button { + margin: 6px; + padding: 6px 8px; + height: auto; + background-color: transparent; + box-shadow: none; + color: var(--text-muted); + font-size: var(--font-ui-smaller); + font-family: var(--font-interface); + position: absolute; + top: 0; + right: 0; +} +@media (hover: hover) { + .markdown-rendered button.copy-code-button:hover { + background-color: var(--background-modifier-hover); + } +} +.markdown-source-view.mod-cm6 .cm-preview-code-block pre { + margin: 0; +} +.markdown-source-view.mod-cm6 .code-block-flair { + position: absolute; + right: 6px; + top: 6px; + z-index: 1; + display: inline-block; + padding: var(--size-4-1) var(--size-4-2); + border-radius: var(--code-radius); + font-family: var(--font-interface); + font-size: var(--font-ui-smaller); + color: var(--text-muted); + cursor: var(--cursor); +} +@media (hover: hover) { + .markdown-source-view.mod-cm6 .code-block-flair:hover { + background-color: var(--background-modifier-hover); + } +} +.markdown-source-view.mod-cm6 .cm-line.HyperMD-codeblock { + padding-left: var(--size-4-4); + color: var(--code-normal); +} +.cm-s-obsidian .HyperMD-codeblock { + font-family: var(--font-monospace); + font-size: var(--code-size); +} +.cm-s-obsidian .HyperMD-codeblock-begin, +.cm-s-obsidian .HyperMD-codeblock-end { + color: var(--code-normal); +} +.cm-s-obsidian .HyperMD-codeblock span.cm-inline-code { + background-color: inherit; + border: inherit; + padding: inherit; + font-size: inherit; +} +.cm-s-obsidian div.HyperMD-codeblock-bg { + left: 0; + right: 0; + background-color: var(--code-background); +} +.cm-s-obsidian div.HyperMD-codeblock-begin-bg { + border-top-left-radius: var(--code-radius); + border-top-right-radius: var(--code-radius); +} +.cm-s-obsidian div.HyperMD-codeblock-end-bg { + border-bottom-left-radius: var(--code-radius); + border-bottom-right-radius: var(--code-radius); +} +.cm-s-obsidian div.HyperMD-codeblock-begin-bg, +.cm-s-obsidian div.HyperMD-codeblock-end-bg { + background-color: var(--code-background); +} +code[class*="language-"], +pre[class*="language-"] { + color: var(--code-normal); + background: none; + word-wrap: break-word; + white-space: pre-wrap; + word-break: normal; + font-family: var(--font-monospace); + text-align: left; + word-spacing: normal; + line-height: var(--line-height-normal); + -webkit-hyphens: none; + -moz-hyphens: none; + -ms-hyphens: none; + hyphens: none; +} +@media print { + code[class*="language-"], + pre[class*="language-"] { + text-shadow: none; + } +} +:not(pre) > code[class*="language-"], +pre[class*="language-"] { + background: var(--code-background); +} +/* Code blocks */ +pre[class*="language-"] { + overflow: hidden; +} +code[class*="language-"] { + display: block; + padding: 1em; + overflow: auto; +} +/* Inline code */ +:not(pre) > code[class*="language-"] { + padding: 0.1em; + border-radius: 0.3em; + white-space: normal; +} +.token.important, +.token.bold { + font-weight: bold; +} +.token.italic { + font-style: italic; +} +.token.entity { + cursor: help; +} +/* Syntax highlighting */ +.token.comment, +.token.prolog, +.token.doctype, +.token.cdata { + color: var(--code-comment); +} +.token.namespace { + opacity: 0.7; +} +.token.tag, +.token.constant, +.token.symbol, +.token.deleted { + color: var(--code-tag); +} +.token.punctuation { + color: var(--code-punctuation); +} +.token.boolean, +.token.number { + color: var(--code-value); +} +.token.selector, +.token.attr-name, +.token.string, +.token.char, +.token.inserted { + color: var(--code-string); +} +.token.operator { + color: var(--code-operator); +} +.token.entity, +.token.parameter, +.token.property, +.token.url, +.language-css .token.string, +.style .token.string, +.token.variable { + color: var(--code-property); +} +.token.atrule, +.token.attr-value, +.token.builtin, +.token.function, +.token.class-name, +.token.property-access { + color: var(--code-function); +} +.token.keyword { + color: var(--code-keyword); +} +.token.regex, +.token.important { + color: var(--code-important); +} +.cm-inline-code, +.cm-math { + color: var(--code-normal); +} +.cm-comment, +.cm-meta { + color: var(--code-comment); +} +.cm-tag { + color: var(--code-tag); +} +.cm-punctuation, +.cm-bracket, +.cm-hr { + color: var(--code-punctuation); +} +.cm-number { + color: var(--code-value); +} +.cm-qualifier, +.cm-string, +.cm-string-2 { + color: var(--code-string); +} +.cm-operator { + color: var(--code-operator); +} +.cm-link, +.cm-variable, +.cm-variable-2, +.cm-variable-3 { + color: var(--code-property); +} +.cm-builtin, +.cm-property, +.cm-attribute, +.cm-type { + color: var(--code-function); +} +.cm-keyword { + color: var(--code-keyword); +} +.markdown-preview-view .markdown-embed .markdown-preview-view { + --file-folding-offset: 0px; + height: 100%; + padding: 0; +} +.markdown-preview-view .markdown-embed .markdown-preview-view .markdown-preview-pusher h1, +.markdown-preview-view .markdown-embed .markdown-preview-view .markdown-preview-pusher h2, +.markdown-preview-view .markdown-embed .markdown-preview-view .markdown-preview-pusher h3, +.markdown-preview-view .markdown-embed .markdown-preview-view .markdown-preview-pusher h4, +.markdown-preview-view .markdown-embed .markdown-preview-view .markdown-preview-pusher h5, +.markdown-preview-view .markdown-embed .markdown-preview-view .markdown-preview-pusher h6 { + margin-top: 0; +} +.pdf-embed, +.markdown-source-view .pdf-embed, +.markdown-source-view.mod-cm6 .cm-content > .pdf-embed, +.internal-embed.pdf-embed:not(.image-embed) { + width: 100%; + height: 800px; + display: flex; + flex-direction: column; +} +.pdf-embed { + overflow: hidden; + position: relative; +} +.pdf-embed:not(.canvas-node-content) { + border: 1px solid var(--background-modifier-border); + border-radius: var(--radius-s); +} +.pdf-embed:not(.canvas-node-content) .edit-block-button + .pdf-toolbar { + padding-right: var(--size-4-9); +} +.markdown-source-view.mod-cm6 .pdf-embed .edit-block-button { + background-color: var(--background-primary); + opacity: 1; + top: 6px; + z-index: 1; +} +.markdown-source-view.mod-cm6 .pdf-embed .edit-block-button:hover { + color: var(--icon-color-hover); + background-color: var(--background-modifier-hover); +} +@media print { + .pdf-embed:not(.canvas-node-content) { + align-items: center; + border: none; + justify-content: center; + max-height: 80vh; + } + .pdf-embed:not(.canvas-node-content) .pdf-container, + .pdf-embed:not(.canvas-node-content) .pdf-toolbar { + display: none; + } + .pdf-embed:not(.canvas-node-content) .canvasWrapper { + border-radius: var(--radius-s); + border: 1px solid var(--background-modifier-border); + max-height: 100%; + overflow: hidden; + width: fit-content; + } + .pdf-embed:not(.canvas-node-content) canvas { + height: auto; + width: 100%; + } +} +.markdown-embed, +.file-embed { + position: relative; +} +.markdown-embed-link, +.file-embed-link { + position: absolute; + top: 4px; + right: 4px; + color: var(--icon-color); + opacity: var(--icon-opacity); + cursor: var(--cursor-link); + padding: var(--size-2-2); + border-radius: var(--radius-s); + display: flex; + align-items: center; + --icon-size: var(--icon-s); + --icon-stroke: var(--icon-s-stroke-width); +} +@media (hover: hover) { + .markdown-embed-link:hover, + .file-embed-link:hover { + color: var(--icon-color-hover); + opacity: var(--icon-opacity-hover); + background: var(--background-modifier-hover); + } +} +.file-embed-title { + display: flex; + align-items: center; + justify-content: center; + gap: var(--size-4-2); +} +.file-embed-icon { + color: var(--text-muted); + display: flex; +} +.file-embed { + display: flex; + justify-content: center; + border-radius: var(--radius-m); + background-color: var(--background-primary-alt); +} +.file-embed.mod-generic, +.file-embed.mod-empty { + cursor: var(--cursor-link); + padding: var(--size-4-2); + color: var(--text-muted); + text-align: center; + font-size: var(--font-smaller); +} +@media (hover: hover) { + .file-embed.mod-generic:hover, + .file-embed.mod-empty:hover { + color: var(--text-normal); + background-color: var(--background-secondary); + } +} +.file-embed.mod-empty-attachment { + padding: var(--size-4-2); + color: var(--text-muted); + text-align: center; + font-size: var(--font-smaller); +} +.markdown-embed-content { + height: 100%; +} +.embed-title { + align-items: center; + display: flex; + gap: var(--size-4-1); + font-size: var(--font-text-size); + font-weight: var(--bold-weight); + text-align: left; + text-overflow: ellipsis; + white-space: nowrap; + padding: 0 0 var(--size-4-2) 0; +} +.markdown-embed { + font-style: var(--embed-font-style); + background-color: var(--embed-background); + border-top: var(--embed-border-top); + border-right: var(--embed-border-right); + border-bottom: var(--embed-border-bottom); + border-left: var(--embed-border-left); + margin: 0; + padding: var(--embed-padding); +} +.markdown-embed .markdown-preview-view { + padding: 0; +} +.internal-embed:not(.image-embed) { + display: block; +} +.internal-embed img:not([width]), +.internal-embed audio, +.internal-embed video { + max-width: 100%; +} +.inline-embed .markdown-embed-content { + height: fit-content; + max-height: var(--embed-max-height); + overflow: auto; +} +.inline-embed .markdown-embed-content p:first-child { + margin-top: 0; +} +.inline-embed .markdown-source-view.mod-cm6 .cm-editor { + min-height: unset; +} +.embed-iframe { + width: 100%; + height: 100%; +} +iframe.external-embed { + width: 600px; + max-width: 100%; + height: 350px; +} +.markdown-source-view.mod-cm6 .internal-embed { + white-space: normal; +} +.markdown-source-view.mod-cm6 .cm-embed-block { + position: relative; + white-space: normal; + overflow-wrap: normal; + word-break: normal; +} +@media (hover: hover) { + .markdown-source-view.mod-cm6 .cm-embed-block:not(.cm-table-widget):hover { + box-shadow: var(--embed-block-shadow-hover); + border-radius: var(--radius-s); + overflow: hidden; + cursor: text; + } + .markdown-source-view.mod-cm6 .cm-embed-block:not(.cm-table-widget):hover .edit-block-button { + opacity: 1; + } + .markdown-source-view.mod-cm6 .cm-embed-block:not(.cm-table-widget):hover .edit-block-button:hover { + background-color: var(--background-modifier-hover); + } +} +.markdown-source-view.mod-cm6 .cm-embed-block pre { + margin: 0; +} +.markdown-source-view.mod-inside-iframe > .cm-editor > .cm-scroller { + flex-direction: column; + padding: 0 var(--size-4-4); +} +.markdown-source-view.mod-inside-iframe > .cm-editor > .cm-scroller::before, +.markdown-source-view.mod-inside-iframe > .cm-editor > .cm-scroller::after { + content: " "; + display: block; + min-height: min(calc(10vh - 3px), var(--size-4-4)); + max-height: var(--size-4-4); + flex: 1 1 0; +} +.markdown-source-view.mod-inside-iframe > .cm-editor > .cm-scroller > .cm-sizer { + min-height: unset; + flex: 1 0 0; +} +.footnote-link { + text-decoration: none; +} +.footnotes { + font-size: var(--footnote-size); +} +.footnote-ref { + vertical-align: super; +} +.footnote-backref { + color: var(--text-faint); + text-decoration: none; +} +@media (hover: hover) { + .footnote-backref:hover { + color: var(--text-accent); + text-decoration: none; + } +} +.cm-s-obsidian .cm-line.HyperMD-footnote { + font-size: var(--footnote-size); + padding-left: 8px; +} +.cm-s-obsidian .cm-line.HyperMD-footnote span.cm-hmd-footnote { + color: var(--text-faint); + cursor: text; +} +.cm-s-obsidian .cm-line.HyperMD-footnote span.cm-hmd-footnote .cm-underline { + text-decoration: none; +} +@media (hover: hover) { + .cm-s-obsidian .cm-line.HyperMD-footnote span.cm-hmd-footnote:hover { + color: var(--text-accent); + } +} +.markdown-rendered .frontmatter.mod-failed { + position: relative; +} +.markdown-rendered .frontmatter.mod-failed .mod-error { + color: var(--text-error); + font-size: var(--font-smaller); +} +.markdown-rendered .frontmatter.mod-failed:after { + content: ''; + position: absolute; + top: 0; + right: 0; + width: 100%; + height: 100%; + background-color: var(--background-modifier-error); + opacity: 0.3; + mix-blend-mode: var(--highlight-mix-blend-mode); +} +.metadata-container { + --input-height: var(--metadata-input-height); + border-radius: var(--metadata-border-radius); + background-color: var(--metadata-background); + border-color: var(--metadata-border-color); + border-style: solid; + border-width: var(--metadata-border-width); + padding: var(--metadata-padding); + color: var(--text-muted); + position: relative; + max-width: var(--metadata-max-width); + margin-block-end: var(--p-spacing); + transform: translateX(calc(var(--size-4-1) * -1)); +} +.metadata-container .metadata-add-button { + padding-left: var(--size-2-3); + margin-top: 0.5em; + font-size: var(--metadata-label-font-size); +} +.markdown-embed-content .metadata-container { + display: none; +} +.metadata-container.is-collapsed .metadata-property { + display: none; +} +.metadata-container:focus-within .metadata-property.is-selected { + color: var(--nav-item-color-selected); + background-color: var(--nav-item-background-selected); +} +.metadata-properties { + display: flex; + flex-direction: column; + gap: var(--metadata-gap); +} +.metadata-properties-heading { + display: inline-block; + padding: var(--size-4-1); + margin-bottom: var(--size-4-2); + position: relative; + line-height: 1.2; +} +.metadata-properties-heading:before { + content: ''; + border-radius: var(--metadata-property-radius); + position: absolute; + display: inline-block; + left: 0; + right: 0; + top: 0; + bottom: 0; +} +.metadata-properties-heading:focus:before { + box-shadow: 0 0 0 2px var(--background-modifier-border-focus); +} +.metadata-properties-heading .collapse-indicator { + position: absolute; + left: -22px; + padding: 0 6px; +} +.metadata-properties-title { + user-select: none; + font-size: max(var(--font-ui-small), 1em); + color: var(--text-normal); + font-weight: var(--font-medium); +} +.metadata-input-text { + background-color: transparent; + width: 100%; + min-height: var(--input-height); + border-width: 0px; + resize: none; + overflow-y: hidden; +} +.metadata-input-text::-webkit-date-and-time-value { + text-align: left; +} +.metadata-input-text.mod-date { + padding-right: 0; + width: auto; +} +.metadata-property { + position: relative; + display: flex; + align-items: start; + padding: var(--metadata-property-padding); + border-radius: var(--metadata-property-radius); + overflow: hidden; + background-color: var(--metadata-property-background); +} +@media (hover: hover) { + .metadata-property:hover { + --metadata-divider-color: var(--metadata-divider-color-hover); + background-color: var(--metadata-property-background-hover); + box-shadow: 0 0 0 1px var(--background-modifier-border); + } +} +.metadata-property:focus-within { + --metadata-divider-color: var(--metadata-divider-color-hover); + background-color: var(--metadata-property-background-hover); + box-shadow: 0 0 0 1px var(--background-modifier-border); + --metadata-divider-color: var(--metadata-divider-color-focus); + box-shadow: 0 0 0 2px var(--background-modifier-border-focus); +} +.metadata-property-icon { + cursor: var(--cursor); + color: var(--icon-color); + display: flex; + align-items: center; + padding: var(--size-4-1) 0; + height: var(--input-height); + -webkit-user-select: none; +} +.metadata-property-icon:before { + content: "\200B"; + width: var(--size-4-1); +} +@media (hover: hover) { + .metadata-property-icon:hover .svg-icon { + color: var(--icon-color-focused); + } +} +.metadata-property-icon[aria-disabled='true'] { + color: var(--text-muted); + opacity: 0.4; +} +.metadata-input-number { + background-color: transparent; + width: 100%; + border-width: 0px; +} +input[type=checkbox].metadata-input-checkbox { + margin-left: var(--size-4-2); +} +.metadata-property-key { + display: flex; + align-self: stretch; + align-items: flex-start; + flex-direction: row; + flex-shrink: 0; + border-bottom: var(--metadata-divider-width) solid var(--metadata-divider-color); + background-color: var(--metadata-label-background); + width: var(--metadata-label-width); + min-width: var(--metadata-label-width); +} +@media (hover: hover) { + .metadata-property-key:hover { + background-color: var(--metadata-label-background-hover); + } +} +.metadata-property-key:focus-within { + background-color: var(--metadata-label-background-active); +} +input.metadata-property-key-input { + border: none; + flex-grow: 1; + color: var(--metadata-label-text-color); + font-size: var(--metadata-label-font-size); + font-weight: var(--metadata-label-font-weight); + height: var(--input-height); + background-color: transparent; + display: flex; + align-items: center; + text-overflow: ellipsis; + overflow: hidden; +} +@media (hover: hover) { + input.metadata-property-key-input:hover { + background-color: transparent; + } +} +input.metadata-property-key-input:active, +input.metadata-property-key-input:focus { + background-color: transparent; +} +.metadata-property button { + margin-top: var(--size-4-2); +} +.metadata-property input[type='text'], +.metadata-property input[type='date'], +.metadata-property input[type='datetime-local'], +.metadata-property input[type='number'], +.metadata-property .multi-select-container { + border-radius: 0; + border: none; +} +.metadata-property input[type='text']:hover, +.metadata-property input[type='date']:hover, +.metadata-property input[type='datetime-local']:hover, +.metadata-property input[type='number']:hover, +.metadata-property .multi-select-container:hover, +.metadata-property input[type='text']:active, +.metadata-property input[type='date']:active, +.metadata-property input[type='datetime-local']:active, +.metadata-property input[type='number']:active, +.metadata-property .multi-select-container:active, +.metadata-property input[type='text']:focus, +.metadata-property input[type='date']:focus, +.metadata-property input[type='datetime-local']:focus, +.metadata-property input[type='number']:focus, +.metadata-property .multi-select-container:focus { + box-shadow: none; + border: none; +} +.metadata-property .metadata-input-text, +.metadata-property .metadata-input-number, +.metadata-property .multi-select-container { + background-color: transparent; +} +.metadata-property .metadata-input-text:hover, +.metadata-property .metadata-input-number:hover, +.metadata-property .multi-select-container:hover { + background-color: transparent; +} +.metadata-property .metadata-input-text:active, +.metadata-property .metadata-input-number:active, +.metadata-property .multi-select-container:active, +.metadata-property .metadata-input-text:focus, +.metadata-property .metadata-input-number:focus, +.metadata-property .multi-select-container:focus, +.metadata-property .metadata-input-text:focus-within, +.metadata-property .metadata-input-number:focus-within, +.metadata-property .multi-select-container:focus-within { + background-color: transparent; +} +.metadata-property .metadata-input-text { + text-overflow: ellipsis; + overflow: hidden; +} +.metadata-property .multi-select-container input { + background-color: transparent; +} +.metadata-property .multi-select-container { + padding: var(--size-4-1) var(--size-4-2); +} +.metadata-property[data-property-key="tags"] { + --pill-color: var( + --tag-color); + --pill-color-hover: var( + --tag-color-hover); + --pill-color-remove: var( + --tag-color); + --pill-color-remove-hover: var( + --tag-color-hover); + --pill-decoration: var( + --tag-decoration); + --pill-decoration-hover: var( + --tag-decoration-hover); + --pill-background: var( + --tag-background); + --pill-background-hover: var( + --tag-background-hover); + --pill-border-color: var( + --tag-border-color); + --pill-border-color-hover: var( + --tag-border-color-hover); + --pill-border-width: var( + --tag-border-width); + --pill-padding-x: var( + --tag-padding-x); + --pill-padding-y: var( + --tag-padding-y); + --pill-radius: var( + --tag-radius); + --pill-weight: var( + --tag-weight); + --pill-focus-width: 100%; + --pill-focus-left-adjust: 0; +} +.metadata-property[data-property-key="tags"] .multi-select-pill { + cursor: var(--cursor-link); +} +.metadata-property:not([data-property-key="tags"]) { + --pill-border-width: 0; + --pill-padding-x: 0; + --pill-padding-y: 0; + --pill-color: var(--metadata-input-text-color); +} +.metadata-property:not([data-property-key="tags"]) .multi-select-pill { + line-height: var(--line-height-tight); +} +.metadata-property-warning-icon { + --icon-size: var(--icon-s); + position: absolute; + right: var(--size-2-1); + top: var(--size-2-1); + bottom: var(--size-2-1); + align-items: center; + display: flex; + color: var(--text-warning); +} +@media (hover: hover) { + .metadata-property-warning-icon:hover { + color: var(--text-warning); + background-color: rgba(var(--color-orange-rgb), 0.15); + } +} +.metadata-property-value { + display: flex; + flex: 1 1 auto; + gap: var(--size-2-2); + align-items: center; + align-self: stretch; + min-height: var(--input-height); + background-color: var(--metadata-input-background); + border-bottom: var(--metadata-divider-width) solid var(--metadata-divider-color); + overflow: hidden; +} +.metadata-property-value.mod-external-link:not(:placeholder-shown) { + text-decoration-line: var(--link-decoration); + text-decoration-thickness: var(--link-decoration-thickness); + text-decoration-color: var(--text-faint); +} +@media (hover: hover) { + .metadata-property-value.mod-external-link:not(:placeholder-shown) .metadata-link-inner:hover { + text-decoration-line: var(--link-decoration-hover); + } +} +.metadata-property-value .mod-unknown { + color: var(--text-warning); + padding: var(--size-4-1) var(--size-4-2); + font-size: var(--metadata-input-font-size); + text-overflow: ellipsis; + overflow: hidden; + white-space: nowrap; +} +.metadata-property-value .multi-select-input { + font-size: inherit; +} +.metadata-property-value .multi-select-container, +.metadata-property-value .metadata-link-inner, +.metadata-property-value input { + font-size: var(--metadata-input-font-size); +} +.metadata-property-value .multi-select-container { + --background-modifier-form-field: transparent; + --background-modifier-border: transparent; + align-items: center; +} +.metadata-property-value .multi-select-container .multi-select-pill.is-invalid { + --pill-background: transparent; + --pill-color: var(--text-error); + --pill-color-remove: var(--text-error); +} +.metadata-property-value .external-link.multi-select-pill-content, +.metadata-property-value .internal-link .multi-select-pill-content { + overflow: hidden; + text-overflow: ellipsis; + white-space: nowrap; +} +.metadata-property-value .clickable-icon { + --icon-size: var(--icon-xs); + --icon-stroke: var(--icon-xs-stroke-width); + margin-right: 2px; + margin-left: -4px; + padding: 4px; +} +.metadata-property-value .clickable-icon:hover { + background: transparent; + color: var(--text-normal); + cursor: var(--cursor-link); +} +@media (hover: hover) { + .metadata-property-value:hover { + background-color: var(--metadata-input-background-hover); + } +} +.metadata-property-value:focus-within { + background-color: var(--metadata-input-background-active); +} +/* Edit mode */ +.cm-hmd-frontmatter { + font-size: var(--font-smaller); + color: var(--text-muted); +} +.cm-hmd-frontmatter.cm-hmd-frontmatter.cm-def { + color: var(--text-muted); +} +.cm-hmd-frontmatter .is-invalid { + color: var(--text-error); +} +.cm-hmd-frontmatter .error-marker { + background-color: var(--text-error); +} +.cm-hmd-frontmatter .error-marker .is-invalid { + color: var(--text-on-accent); +} +.metadata-input-longtext { + cursor: text; + white-space: pre-wrap; + -webkit-box-orient: vertical; + -webkit-line-clamp: 3; + color: var(--metadata-input-text-color); + font-size: var(--metadata-input-font-size); + max-height: 300px; + overflow-y: auto; + padding: var(--size-4-1) var(--size-4-2); + width: 100%; +} +.metadata-input-longtext:focus { + -webkit-line-clamp: unset; +} +.metadata-input-longtext:not(:empty) { + display: -webkit-box; +} +.metadata-input-longtext:empty:before { + content: attr(placeholder); + color: var(--text-faint); +} +.metadata-link { + cursor: text; + align-items: center; + padding: var(--size-4-1) var(--size-4-2); + display: flex; + gap: var(--size-4-2); + width: 100%; +} +@media (hover: hover) { + .metadata-link:hover .metadata-link-flair { + opacity: var(--icon-opacity); + transition: 0.1s opacity 0.25s ease-in-out; + } +} +.metadata-link-inner { + cursor: var(--cursor-link); + color: var(--link-color); + text-decoration-line: var(--link-decoration); + text-decoration-thickness: var(--link-decoration-thickness); + text-overflow: ellipsis; + overflow: hidden; + white-space: nowrap; +} +@media (hover: hover) { + .metadata-link-inner:hover { + text-decoration-line: var(--link-decoration-hover); + color: var(--link-color-hover); + } + .metadata-link-inner:hover ~ .metadata-link-flair { + opacity: 0; + } +} +.metadata-link-flair { + --icon-size: var(--icon-xs); + background-color: transparent; + cursor: text; + margin-left: auto; + display: flex; + align-items: center; + justify-content: center; + padding: var(--size-2-1); + border-radius: var(--clickable-icon-radius); + color: var(--icon-color); + opacity: 0; + transition: opacity 0.15s ease-in-out; + height: auto; +} +.markdown-source-view .metadata-container, +.markdown-preview-view .metadata-container { + display: unset; +} +.markdown-source-view.is-live-preview.show-properties .metadata-container { + display: var(--metadata-display-editing); +} +.markdown-preview-view.show-properties .metadata-container { + display: var(--metadata-display-reading); +} +.markdown-source-view.is-live-preview.show-properties .metadata-container[data-property-count="0"], +.markdown-preview-view.show-properties .metadata-container[data-property-count="0"] { + display: none; +} +.markdown-rendered li h1, +.markdown-rendered li h2, +.markdown-rendered li h3, +.markdown-rendered li h4, +.markdown-rendered li h5 { + margin-top: 0; + margin-bottom: 0; +} +.markdown-rendered div:has( > :is(p,pre,table,ul,ol)) + div > :is(h1,h2,h3,h4,h5,h6) { + margin-top: var(--heading-spacing); +} +h1, +.markdown-rendered h1 { + font-variant: var(--h1-variant); + letter-spacing: -0.015em; + line-height: var(--h1-line-height); + font-size: var(--h1-size); + color: var(--h1-color); + font-weight: var(--h1-weight); + font-style: var(--h1-style); + font-family: var(--h1-font); + margin-block-start: var(--p-spacing); + margin-block-end: var(--p-spacing); +} +h1 a, +.markdown-rendered h1 a { + font-weight: inherit; +} +h2, +.markdown-rendered h2 { + font-variant: var(--h2-variant); + letter-spacing: -0.015em; + line-height: var(--h2-line-height); + font-size: var(--h2-size); + color: var(--h2-color); + font-weight: var(--h2-weight); + font-style: var(--h2-style); + font-family: var(--h2-font); + margin-block-start: var(--p-spacing); + margin-block-end: var(--p-spacing); +} +h2 a, +.markdown-rendered h2 a { + font-weight: inherit; +} +h3, +.markdown-rendered h3 { + font-variant: var(--h3-variant); + letter-spacing: -0.015em; + line-height: var(--h3-line-height); + font-size: var(--h3-size); + color: var(--h3-color); + font-weight: var(--h3-weight); + font-style: var(--h3-style); + font-family: var(--h3-font); + margin-block-start: var(--p-spacing); + margin-block-end: var(--p-spacing); +} +h3 a, +.markdown-rendered h3 a { + font-weight: inherit; +} +h4, +.markdown-rendered h4 { + font-variant: var(--h4-variant); + letter-spacing: 0.015em; + line-height: var(--h4-line-height); + font-size: var(--h4-size); + color: var(--h4-color); + font-weight: var(--h4-weight); + font-style: var(--h4-style); + font-family: var(--h4-font); + margin-block-start: var(--p-spacing); + margin-block-end: var(--p-spacing); +} +h4 a, +.markdown-rendered h4 a { + font-weight: inherit; +} +h5, +.markdown-rendered h5 { + font-variant: var(--h5-variant); + letter-spacing: 0.015em; + font-size: var(--h5-size); + line-height: var(--h5-line-height); + color: var(--h5-color); + font-weight: var(--h5-weight); + font-style: var(--h5-style); + font-family: var(--h5-font); + margin-block-start: var(--p-spacing); + margin-block-end: var(--p-spacing); +} +h5 a, +.markdown-rendered h5 a { + font-weight: inherit; +} +h6, +.markdown-rendered h6 { + font-variant: var(--h6-variant); + letter-spacing: 0.015em; + font-size: var(--h6-size); + line-height: var(--h6-line-height); + color: var(--h6-color); + font-weight: var(--h6-weight); + font-style: var(--h6-style); + font-family: var(--h6-font); + margin-block-start: var(--p-spacing); + margin-block-end: var(--p-spacing); +} +h6 a, +.markdown-rendered h6 a { + font-weight: inherit; +} +.cm-formatting-header { + color: var(--text-faint); +} +.cm-s-obsidian .cm-line.HyperMD-header { + padding-top: var(--p-spacing); +} +.cm-s-obsidian .cm-line.HyperMD-header + .cm-line:not(.HyperMD-header):not(:has(>br:only-child)) { + padding-top: var(--p-spacing-empty); +} +.cm-s-obsidian .cm-line.HyperMD-header + .cm-line:not(.HyperMD-header):has(>br:only-child) + .cm-line.HyperMD-header { + padding-top: 0; +} +.HyperMD-header-1, +.inline-title[data-level='1'], +.HyperMD-list-line .cm-header-1 { + font-variant: var(--h1-variant); + letter-spacing: -0.015em; + line-height: var(--h1-line-height); + font-size: var(--h1-size); + color: var(--h1-color); + font-weight: var(--h1-weight); + font-style: var(--h1-style); + font-family: var(--h1-font); +} +.HyperMD-header-1 a, +.inline-title[data-level='1'] a, +.HyperMD-list-line .cm-header-1 a { + font-weight: inherit; +} +.HyperMD-header-2, +.inline-title[data-level='2'], +.HyperMD-list-line .cm-header-2 { + font-variant: var(--h2-variant); + letter-spacing: -0.015em; + line-height: var(--h2-line-height); + font-size: var(--h2-size); + color: var(--h2-color); + font-weight: var(--h2-weight); + font-style: var(--h2-style); + font-family: var(--h2-font); +} +.HyperMD-header-2 a, +.inline-title[data-level='2'] a, +.HyperMD-list-line .cm-header-2 a { + font-weight: inherit; +} +.HyperMD-header-3, +.inline-title[data-level='3'], +.HyperMD-list-line .cm-header-3 { + font-variant: var(--h3-variant); + letter-spacing: -0.015em; + line-height: var(--h3-line-height); + font-size: var(--h3-size); + color: var(--h3-color); + font-weight: var(--h3-weight); + font-style: var(--h3-style); + font-family: var(--h3-font); +} +.HyperMD-header-3 a, +.inline-title[data-level='3'] a, +.HyperMD-list-line .cm-header-3 a { + font-weight: inherit; +} +.HyperMD-header-4, +.inline-title[data-level='4'], +.HyperMD-list-line .cm-header-4 { + font-variant: var(--h4-variant); + letter-spacing: 0.015em; + line-height: var(--h4-line-height); + font-size: var(--h4-size); + color: var(--h4-color); + font-weight: var(--h4-weight); + font-style: var(--h4-style); + font-family: var(--h4-font); +} +.HyperMD-header-4 a, +.inline-title[data-level='4'] a, +.HyperMD-list-line .cm-header-4 a { + font-weight: inherit; +} +.HyperMD-header-5, +.inline-title[data-level='5'], +.HyperMD-list-line .cm-header-5 { + font-variant: var(--h5-variant); + letter-spacing: 0.015em; + font-size: var(--h5-size); + line-height: var(--h5-line-height); + color: var(--h5-color); + font-weight: var(--h5-weight); + font-style: var(--h5-style); + font-family: var(--h5-font); +} +.HyperMD-header-5 a, +.inline-title[data-level='5'] a, +.HyperMD-list-line .cm-header-5 a { + font-weight: inherit; +} +.HyperMD-header-6, +.inline-title[data-level='6'], +.HyperMD-list-line .cm-header-6 { + font-variant: var(--h6-variant); + letter-spacing: 0.015em; + font-size: var(--h6-size); + line-height: var(--h6-line-height); + color: var(--h6-color); + font-weight: var(--h6-weight); + font-style: var(--h6-style); + font-family: var(--h6-font); +} +.HyperMD-header-6 a, +.inline-title[data-level='6'] a, +.HyperMD-list-line .cm-header-6 a { + font-weight: inherit; +} +.HyperMD-header .cm-header-1, +.HyperMD-header .cm-header-2, +.HyperMD-header .cm-header-3, +.HyperMD-header .cm-header-4, +.HyperMD-header .cm-header-5, +.HyperMD-header .cm-header-6 { + font-size: inherit !important; +} +hr { + border: none; + border-top: var(--hr-thickness) solid; + border-color: var(--hr-color); + margin: 2rem 0; +} +.markdown-rendered hr { + border: none; + border-top: var(--hr-thickness) solid; + border-color: var(--hr-color); +} +.cm-s-obsidian .hmd-inactive-line.HyperMD-hr { + color: transparent; + background-color: transparent; +} +.markdown-source-view.mod-cm6 .hr { + display: flex; + align-items: center; +} +.markdown-source-view.mod-cm6 hr { + margin: 0; + flex: 1 0 0; +} +.cm-s-obsidian .hmd-fold-html-stub, +.cm-s-obsidian .hmd-fold-code-stub { + display: inline-block; + font-size: 67%; + color: #999; + vertical-align: middle; + border: 1px solid #999; + padding: 0 0.2em; + border-radius: 5px; + margin: 0 0.5em; + background-color: var(--background-primary-alt); + cursor: var(--cursor); +} +.cm-s-obsidian .hmd-fold-html-stub.omittable, +.cm-s-obsidian .omittable.hmd-fold-code-stub { + display: none; +} +.cm-s-obsidian .hmd-fold-html-stub:hover, +.cm-s-obsidian .hmd-fold-code-stub:hover, +.cm-s-obsidian .hmd-fold-html-stub.highlight, +.cm-s-obsidian .highlight.hmd-fold-code-stub { + color: #FFF; + border-color: #C30; + background: #F40; +} +.cm-s-obsidian .hmd-fold-html { + position: relative; + border: 1px solid #FFF; +} +@media (hover: hover) { + .cm-s-obsidian .hmd-fold-html:hover { + border: 1px dashed #999; + } +} +.cm-s-obsidian .hmd-fold-html:hover .hmd-fold-html-stub.omittable, +.cm-s-obsidian .hmd-fold-html:hover .omittable.hmd-fold-code-stub { + display: block; + right: 0; + bottom: 100%; + margin: 0; + position: absolute; + z-index: 100; +} +.markdown-preview-view img, +.markdown-rendered img { + -webkit-touch-callout: default; + image-rendering: -webkit-optimize-contrast; +} +.markdown-preview-view img:not([width]), +.markdown-rendered img:not([width]) { + max-width: 100%; + outline: none; +} +.cm-s-obsidian .hmd-fold-html a > img { + border: 0; +} +.cm-s-obsidian img.hmd-image { + vertical-align: middle; + width: auto; + max-width: 100%; + height: auto; +} +.cm-s-obsidian img.hmd-image.hmd-image-loading, +.cm-s-obsidian img.hmd-image.hmd-image-error { + min-width: 24px; + min-height: 24px; +} +.markdown-source-view.mod-cm6 .cm-line .internal-embed.image-embed { + display: inline; +} +.internal-query { + margin: 0; + border-top: 1px solid var(--background-modifier-border); +} +.internal-query .search-result-container { + padding: var(--size-4-2); + max-height: 800px; + overflow: auto; + border: 1px solid var(--background-modifier-border); + background-color: var(--background-secondary); + border-radius: var(--radius-m); +} +.internal-query .internal-query-header { + text-align: center; + padding: var(--size-4-3) 0 var(--size-4-3) var(--size-4-1); + color: var(--text-normal); + display: flex; + justify-content: flex-start; + align-items: center; +} +.internal-query .internal-query-header-icon { + color: var(--text-faint); + margin-right: var(--size-4-1); + display: flex; +} +.internal-query .internal-query-header-title { + font-weight: var(--font-medium); +} +.internal-query .internal-query-header-title:before, +.internal-query .internal-query-header-title:after { + content: '"'; +} +/* Default markers */ +ul ul, +ol ul, +ol ol ul, +ol ul ul, +ul ol ul, +ul ul ul { + list-style-type: disc; +} +ol { + list-style-type: var(--list-numbered-style); +} +ol > li::marker, +ul > li::marker { + color: var(--list-marker-color); +} +ol > li.is-collapsed::marker, +ul > li.is-collapsed::marker { + color: var(--list-marker-color-collapsed); +} +/* Indent depth + Consistency in horizontal positioning of lists +*/ +.markdown-rendered ul, +.markdown-rendered ol { + padding-inline-start: var(--list-indent); + margin-block-start: var(--p-spacing); + margin-block-end: var(--p-spacing); + /* Space between list items */ +} +.markdown-rendered ul ul, +.markdown-rendered ol ul, +.markdown-rendered ul ol, +.markdown-rendered ol ol { + margin-block-start: 0; + margin-block-end: 0; +} +.markdown-rendered ul li p:first-of-type, +.markdown-rendered ol li p:first-of-type { + margin-block-start: 0; +} +.markdown-rendered ul li p:last-of-type, +.markdown-rendered ol li p:last-of-type { + margin-block-end: 0; +} +.markdown-rendered ul > li, +.markdown-rendered ol > li { + padding-top: var(--list-spacing); + padding-bottom: var(--list-spacing); + position: relative; +} +.cm-formatting-list-ul, +.cm-formatting-list-ol { + font-variant-numeric: tabular-nums; + padding-inline-start: 0.75em; +} +.markdown-source-view.mod-cm6 .HyperMD-list-line-nobullet .cm-indent { + min-width: var(--list-indent); +} +.cm-s-obsidian .cm-formatting-list { + color: var(--list-marker-color); +} +.cm-s-obsidian .is-collapsed ~ .cm-formatting-list { + color: var(--list-marker-color-collapsed); +} +/* Indent depth + Consistency in horizontal positioning of lists +*/ +.cm-line.HyperMD-list-line { + tab-size: var(--list-indent); +} +/* Space between list items */ +.markdown-source-view ol > li, +.markdown-source-view ul > li, +.markdown-preview-view ol > li, +.markdown-preview-view ul > li, +.mod-cm6 .HyperMD-list-line.cm-line { + padding-top: var(--list-spacing); + padding-bottom: var(--list-spacing); +} +/* Allow clicking on the bullet to collapse */ +/* #todo move this into folding.less */ +.markdown-rendered .list-collapse-indicator { + margin-inline-start: -2.65em; + padding-inline-end: 2em; +} +.markdown-rendered .list-bullet { + float: left; + margin-inline-start: -0.8em; +} +.markdown-rendered .task-list-item > .list-bullet { + display: none; +} +/* Remove default bullets so we can replace them */ +.markdown-rendered ul.has-list-bullet { + list-style-type: '\200B'; +} +.markdown-rendered ul.has-list-bullet > li::marker { + color: transparent; +} +.list-bullet { + /* hide bullet when editing the marker */ + color: transparent; + position: relative; + display: inline-flex; + justify-content: center; + align-items: center; + will-change: transform; +} +.list-bullet:before { + content: '\200B'; +} +.list-bullet:after { + position: absolute; + content: '\200B'; + pointer-events: none; + color: var(--list-marker-color); + border-radius: var(--list-bullet-radius); + width: var(--list-bullet-size); + height: var(--list-bullet-size); + border: var(--list-bullet-border); + transform: var(--list-bullet-transform); + background-color: var(--list-marker-color); + transition: transform 0.15s, box-shadow 0.15s; + will-change: transform; +} +.list-bullet::selection { + background-color: transparent !important; +} +.is-live-preview .list-bullet { + min-width: 0.75em; +} +@media (hover: hover) { + .list-collapse-indicator:hover ~ .list-bullet:after, + .cm-fold-indicator:hover ~ .list-bullet:after, + .list-collapse-indicator:hover ~ .cm-formatting-list .list-bullet:after, + .cm-fold-indicator:hover ~ .cm-formatting-list .list-bullet:after { + background-color: var(--list-marker-color-hover); + box-shadow: 0 0 0 4px var(--background-modifier-hover); + } + li.is-collapsed .list-collapse-indicator:hover ~ .list-bullet:after, + li.is-collapsed .cm-fold-indicator:hover ~ .list-bullet:after, + .list-collapse-indicator:hover.is-collapsed ~ .list-bullet:after, + .cm-fold-indicator:hover.is-collapsed ~ .list-bullet:after, + li.is-collapsed .list-collapse-indicator:hover ~ .cm-formatting-list .list-bullet:after, + li.is-collapsed .cm-fold-indicator:hover ~ .cm-formatting-list .list-bullet:after, + .list-collapse-indicator:hover.is-collapsed ~ .cm-formatting-list .list-bullet:after, + .cm-fold-indicator:hover.is-collapsed ~ .cm-formatting-list .list-bullet:after { + background-color: var(--list-marker-color-collapsed); + box-shadow: 0 0 0 4px var(--background-modifier-active-hover); + } +} +li.is-collapsed .list-bullet:after, +.is-collapsed ~ .cm-formatting-list .list-bullet:after { + background-color: var(--list-marker-color-collapsed); + box-shadow: 0 0 0 4px var(--background-modifier-active-hover); +} +/* Allow clicking on the bullet to collapse */ +/* #todo move this into folding.less */ +.markdown-source-view.mod-cm6 { + /* only allow this if line is not active, so that it's still editable */ +} +.markdown-source-view.mod-cm6 .cm-fold-indicator .collapse-indicator { + padding-right: 0.25rem; +} +.markdown-source-view.mod-cm6 .cm-line.HyperMD-list-line.HyperMD-list-line .cm-fold-indicator .collapse-indicator { + right: -0.5rem; +} +.markdown-source-view.mod-cm6 .cm-line:not(.cm-active):not(.HyperMD-header):not(.HyperMD-task-line) .cm-fold-indicator .collapse-indicator { + padding-right: 1rem; + right: -1.25rem; +} +@media (hover: hover) { + .list-collapse-indicator:hover ~ .list-bullet:after, + .cm-fold-indicator:hover ~ .list-bullet:after, + .list-collapse-indicator:hover ~ .cm-formatting-list .list-bullet:after, + .cm-fold-indicator:hover ~ .cm-formatting-list .list-bullet:after { + background-color: var(--list-marker-color-hover); + box-shadow: 0 0 0 4px var(--background-modifier-hover); + } + li.is-collapsed .list-collapse-indicator:hover ~ .list-bullet:after, + li.is-collapsed .cm-fold-indicator:hover ~ .list-bullet:after, + .list-collapse-indicator:hover.is-collapsed ~ .list-bullet:after, + .cm-fold-indicator:hover.is-collapsed ~ .list-bullet:after, + li.is-collapsed .list-collapse-indicator:hover ~ .cm-formatting-list .list-bullet:after, + li.is-collapsed .cm-fold-indicator:hover ~ .cm-formatting-list .list-bullet:after, + .list-collapse-indicator:hover.is-collapsed ~ .cm-formatting-list .list-bullet:after, + .cm-fold-indicator:hover.is-collapsed ~ .cm-formatting-list .list-bullet:after { + background-color: var(--list-marker-color-collapsed); + box-shadow: 0 0 0 4px var(--background-modifier-active-hover); + } +} +.cm-s-obsidian .HyperMD-list-line.HyperMD-list-line-nobullet { + padding-top: initial; +} +.markdown-source-view.mod-cm6 .cm-hmd-list-indent { + display: inline-block; + white-space: nowrap; +} +.markdown-source-view.mod-cm6 .cm-formatting-list-ul, +.markdown-source-view.mod-cm6 .cm-formatting-list-ol { + white-space: pre; +} +a { + color: var(--link-color); + outline: none; + text-decoration-line: var(--link-decoration); + text-decoration-thickness: var(--link-decoration-thickness); + cursor: var(--cursor-link); +} +@media (hover: hover) { + a:hover { + color: var(--link-color-hover); + text-decoration-line: var(--link-decoration-hover); + } +} +.external-link { + color: var(--link-external-color); + text-decoration-line: var(--link-external-decoration); + background-position: center right; + background-repeat: no-repeat; + background-image: linear-gradient(transparent, transparent), url(public/images/874d8b8e340f75575caa.svg); + background-size: 13px; + padding-right: 16px; + background-position-y: 4px; + cursor: var(--cursor-link); + filter: var(--link-external-filter); +} +@media (hover: hover) { + .external-link:hover { + color: var(--link-external-color-hover); + text-decoration-line: var(--link-external-decoration-hover); + } +} +.metadata-container .internal-link, +.markdown-rendered .internal-link { + cursor: var(--cursor-link); + text-decoration-line: var(--link-decoration); + color: var(--link-color); +} +@media (hover: hover) { + .metadata-container .internal-link:hover, + .markdown-rendered .internal-link:hover { + color: var(--link-color-hover); + text-decoration-line: var(--link-decoration-hover); + } +} +.metadata-container .internal-link.is-unresolved, +.markdown-rendered .internal-link.is-unresolved { + color: var(--link-unresolved-color); + opacity: var(--link-unresolved-opacity); + filter: var(--link-unresolved-filter); + text-decoration-style: var(--link-unresolved-decoration-style); + text-decoration-color: var(--link-unresolved-decoration-color); +} +@media (hover: hover) { + .metadata-container .internal-link.is-unresolved:hover, + .markdown-rendered .internal-link.is-unresolved:hover { + opacity: 1; + color: var(--link-color-hover); + text-decoration-color: var(--link-color-hover); + text-decoration-line: var(--link-decoration-hover); + } +} +.cm-s-obsidian span.cm-hmd-internal-link { + color: var(--link-color); +} +.cm-s-obsidian span.cm-hmd-internal-link:hover { + text-decoration-line: var(--link-decoration-hover); + color: var(--link-color-hover); +} +.cm-s-obsidian span.cm-link { + color: var(--link-external-color); + word-break: break-word; +} +@media (hover: hover) { + .cm-s-obsidian span.cm-link:hover { + color: var(--link-external-color-hover); + text-decoration-line: var(--link-external-decoration-hover); + } +} +.cm-s-obsidian span.cm-formatting-link.cm-url, +.cm-s-obsidian span.cm-url { + color: var(--link-external-color); + text-decoration-line: var(--link-external-decoration); + filter: var(--link-external-filter); + word-break: break-all; +} +@media (hover: hover) { + .cm-s-obsidian span.cm-formatting-link.cm-url:hover, + .cm-s-obsidian span.cm-url:hover { + color: var(--link-external-color-hover); + text-decoration-line: var(--link-external-decoration-hover); + } +} +.cm-s-obsidian span.cm-formatting-link { + color: var(--text-faint); +} +.cm-s-obsidian span.hmd-link-icon { + width: 20px; + height: 16px; + display: inline-block; + vertical-align: middle; + opacity: 0.4; +} +@media (hover: hover) { + .cm-s-obsidian span.hmd-link-icon:hover { + opacity: 1; + } +} +.cm-s-obsidian span.hmd-link-icon:after { + content: ""; +} +.markdown-source-view.mod-cm6 .is-unresolved { + color: var(--link-unresolved-color); + opacity: var(--link-unresolved-opacity); + filter: var(--link-unresolved-filter); +} +@media (hover: hover) { + .markdown-source-view.mod-cm6 .is-unresolved:hover { + opacity: 1; + color: var(--link-color-hover); + text-decoration-color: var(--link-color-hover); + } +} +.markdown-source-view.mod-cm6 .is-unresolved .cm-underline { + text-decoration-line: var(--link-decoration); + text-decoration-style: var(--link-unresolved-decoration-style); + text-decoration-color: var(--link-unresolved-decoration-color); +} +.markdown-source-view.mod-cm6 .cm-underline { + text-decoration-line: var(--link-decoration); + text-decoration-thickness: var(--link-decoration-thickness); +} +body.is-mobile .markdown-source-view.mod-cm6 .cm-underline { + -webkit-user-select: text; +} +.markdown-source-view.mod-cm6.is-live-preview .cm-hashtag.cm-meta, +.markdown-source-view.mod-cm6 .cm-hmd-internal-link .cm-underline, +.markdown-source-view.mod-cm6 .cm-link .cm-underline, +.markdown-source-view.mod-cm6 .cm-url .cm-underline { + cursor: var(--cursor-link); +} +@media (hover: hover) { + .markdown-source-view.mod-cm6 .cm-hmd-internal-link .cm-underline:hover { + text-decoration-line: var(--link-decoration-hover); + } +} +.markdown-source-view.mod-cm6 .cm-link .cm-underline, +.markdown-source-view.mod-cm6 .cm-url .cm-underline { + text-decoration-line: var(--link-external-decoration); +} +@media (hover: hover) { + .markdown-source-view.mod-cm6 .cm-link .cm-underline:hover, + .markdown-source-view.mod-cm6 .cm-url .cm-underline:hover { + color: var(--link-external-color-hover); + text-decoration-line: var(--link-external-decoration-hover); + } +} +.cm-s-obsidian.HyperMD-with-alt span.cm-url, +.cm-s-obsidian.HyperMD-with-alt span.cm-link, +.cm-s-obsidian.HyperMD-with-alt span.cm-hashtag, +.cm-s-obsidian.HyperMD-with-ctrl span.cm-url, +.cm-s-obsidian.HyperMD-with-ctrl span.cm-link, +.cm-s-obsidian.HyperMD-with-ctrl span.cm-hashtag { + cursor: var(--cursor-link); +} +.inline-block { + display: inline-block; + vertical-align: middle; +} +.hidden-token { + display: inline; + font-size: 1px !important; + letter-spacing: -1ch; + font-family: monospace; + color: transparent; +} +.cm-s-obsidian { + /* tooltip for addon/hover */ + /* gutter for addon/click */ + /* addon/fold */ + /* addon/fold-emoji */ +} +.cm-s-obsidian span.hmd-hidden-token.cm-formatting-em, +.cm-s-obsidian span.hmd-hidden-token.cm-formatting-strong, +.cm-s-obsidian span.hmd-hidden-token.cm-formatting-strikethrough, +.cm-s-obsidian span.hmd-hidden-token.cm-formatting-code, +.cm-s-obsidian span.hmd-hidden-token.cm-formatting-link { + display: inline; + font-size: 1px !important; + letter-spacing: -1ch; + font-family: monospace; + color: transparent; +} +.cm-s-obsidian div.HyperMD-hover > .HyperMD-hover-content { + background-color: #fff; + color: #000; + border: 1px solid #000; + padding: 0.5em; +} +.cm-s-obsidian div.HyperMD-hover > .HyperMD-hover-content p { + margin: 0.2em 0; +} +.cm-s-obsidian .HyperMD-goback { + width: 1px; +} +.cm-s-obsidian div.HyperMD-goback-button { + background-color: #ddd; + color: #333; + text-align: center; + cursor: var(--cursor); +} +.cm-s-obsidian .hmd-link-icon:after { + content: "🔗»"; + color: #009; + text-shadow: 0 0 2px #69F; +} +.cm-s-obsidian img.hmd-emoji { + height: 1.2em; + vertical-align: middle; +} +.cm-s-obsidian { + line-height: var(--line-height-normal); +} +.cm-s-obsidian .hmd-fold-html-stub, +.cm-s-obsidian .hmd-fold-code-stub, +.cm-s-obsidian .cm-inline-code, +.cm-s-obsidian .HyperMD-codeblock, +.cm-s-obsidian .HyperMD-hr, +.cm-s-obsidian .cm-hmd-frontmatter, +.cm-s-obsidian .cm-hmd-orgmode-markup, +.cm-s-obsidian .cm-formatting-code, +.cm-s-obsidian .cm-math, +.cm-s-obsidian span.hmd-fold-math-placeholder, +.cm-s-obsidian .hmd-fold-html kbd { + font-family: var(--font-monospace); +} +.cm-s-obsidian span.cm-hmd-toc { + font-size: 24pt; + color: #999; +} +.cm-s-obsidian .HyperMD-header-line { + color: var(--text-muted); +} +.cm-s-obsidian span.cm-hmd-escape-backslash { + color: var(--text-faint); +} +.cm-s-obsidian span.cm-footref, +.cm-s-obsidian span.cm-blockid { + display: inline-block; + font-size: var(--font-smallest); + vertical-align: text-top; + color: var(--text-muted); + margin-top: -0.2em; +} +.cm-s-obsidian .hmd-file-uploading { + outline: 2px dashed #CCC; + outline-offset: -2px; + animation: hmd-file-uploading-ani 1.5s linear infinite; +} +.cm-s-obsidian .hmd-file-uploaded { + outline: 2px solid #6C3; + outline-offset: -2px; +} +.cm-s-obsidian .HyperMD-goback { + width: 1px; +} +.cm-s-obsidian div.HyperMD-goback-button { + padding-right: 15px; + border-radius: 0 10px 10px 0; + display: inline-block; + text-align: center; + background-color: #8daed9; + color: #f7f7f7; + cursor: var(--cursor); +} +.cm-s-obsidian .hmd-fold-code-image { + text-align: center; +} +.cm-s-obsidian .HyperMD-header, +.cm-s-obsidian .HyperMD-footnote, +.cm-s-obsidian .HyperMD-codeblock, +.cm-s-obsidian .HyperMD-hr { + clear: left; +} +.cm-s-obsidian .cm-s-obsidian span.hmd-hidden-token.cm-formatting-task { + color: transparent !important; +} +.cm-s-obsidian .hmd-inactive-line span.cm-hmd-escape-backslash, +.cm-s-obsidian .hmd-inactive-line span.cm-formatting-header { + font-size: 0 !important; + display: inline; +} +.cm-s-obsidian .hmd-inactive-line span.cm-hmd-list-indent { + border-right: 0; +} +@keyframes hmd-file-uploading-ani { + 0%, + 100% { + opacity: 0.4; + } + 50% { + opacity: 0.7; + } +} +@media (hover: hover) { + .cm-s-obsidian div.HyperMD-goback-button:hover { + color: transparent; + text-align: left; + } + .cm-s-obsidian div.HyperMD-goback-button:hover:before { + position: absolute; + padding-left: 5px; + content: "Back"; + color: #f7f7f7; + } +} +mjx-container { + outline: none; +} +.cm-s-obsidian { + /* addon/fold-math */ +} +.cm-s-obsidian .hmd-fold-math { + display: inline-block; + vertical-align: middle; +} +.cm-s-obsidian .hmd-fold-math.hmd-fold-math.math-2 { + width: 100%; +} +.cm-s-obsidian span.cm-math, +.cm-s-obsidian span.hmd-fold-math-placeholder { + font-size: var(--code-size); + font-style: italic; +} +.cm-s-obsidian span.cm-formatting-math { + color: var(--text-accent); + font-weight: inherit; +} +.cm-s-obsidian span.cm-math-2 { + font-size: 13.2pt; +} +.markdown-source-view.mod-cm6 .math-block > mjx-container { + margin: 0; + padding: 1em 0; + overflow-x: auto; +} +/* Tables */ +.markdown-reading-view table { + margin-block-start: var(--p-spacing); + margin-block-end: var(--p-spacing); +} +.markdown-rendered tr { + height: 1px; +} +.markdown-rendered td, +.markdown-rendered th { + height: inherit; +} +.markdown-rendered table { + border-collapse: collapse; + line-height: var(--table-line-height); +} +.markdown-rendered td, +.markdown-rendered th { + padding: var(--size-2-2) var(--size-4-2); + border: var(--table-border-width) solid var(--table-border-color); + max-width: var(--table-column-max-width); + min-width: var(--table-column-min-width); + vertical-align: var(--table-cell-vertical-alignment); +} +.markdown-rendered td { + font-size: var(--table-text-size); + color: var(--table-text-color); +} +.markdown-rendered th { + font-size: var(--table-header-size); + font-weight: var(--table-header-weight); + color: var(--table-header-color); + font-family: var(--table-header-font); + text-align: left; + line-height: var(--line-height-tight); +} +.markdown-rendered th[align="center"] { + text-align: center; +} +.markdown-rendered th[align="right"] { + text-align: right; +} +.markdown-rendered thead > tr > th, +.markdown-rendered tbody > tr > td { + white-space: var(--table-white-space); + text-overflow: ellipsis; + overflow: hidden; +} +.markdown-rendered tbody tr { + background-color: var(--table-background); +} +@media (hover: hover) { + .markdown-rendered tbody tr:hover { + background-color: var(--table-row-background-hover); + } +} +.markdown-rendered tbody tr:nth-child(odd) { + background-color: var(--table-row-alt-background); +} +@media (hover: hover) { + .markdown-rendered tbody tr:nth-child(odd):hover { + background-color: var(--table-row-alt-background-hover); + } +} +.markdown-rendered tbody tr > td:nth-child(2n+2) { + background-color: var(--table-column-alt-background); +} +.markdown-rendered tbody tr:last-child > td { + border-bottom-width: var(--table-row-last-border-width); +} +.markdown-rendered tbody tr > td:first-child { + border-left-width: var(--table-column-first-border-width); +} +.markdown-rendered tbody tr > td:last-child { + border-right-width: var(--table-column-last-border-width); +} +.markdown-rendered thead tr { + background-color: var(--table-header-background); +} +@media (hover: hover) { + .markdown-rendered thead tr:hover { + background-color: var(--table-header-background-hover); + } +} +.markdown-rendered thead tr > th { + border-top-width: var(--table-header-border-width); + border-color: var(--table-header-border-color); +} +.markdown-rendered thead tr > th:nth-child(2n+2) { + background-color: var(--table-column-alt-background); +} +.markdown-rendered thead tr > th:first-child { + border-left-width: var(--table-column-first-border-width); +} +.markdown-rendered thead tr > th:last-child { + border-right-width: var(--table-column-last-border-width); +} +.cm-s-obsidian .HyperMD-table-row { + white-space: pre; + word-break: normal; + overflow-wrap: normal; + font-size: 0.95em; + font-family: var(--font-monospace); +} +.cm-s-obsidian .hmd-table-column, +.cm-s-obsidian .hmd-table-column-content { + display: inline-block; +} +.cm-s-obsidian .hmd-table-column-left { + text-align: left; +} +.cm-s-obsidian .hmd-table-column-center { + text-align: center; +} +.cm-s-obsidian .hmd-table-column-right { + text-align: right; +} +.cm-s-obsidian .HyperMD-table-row span.cm-hmd-table-sep, +.cm-s-obsidian .HyperMD-table-row-1 { + color: var(--text-faint); +} +.cm-s-obsidian .HyperMD-table-row-0 { + color: var(--table-header-color); +} +.cm-s-obsidian .hmd-fold-html table { + border-collapse: collapse; +} +.cm-s-obsidian .hmd-fold-html table td, +.cm-s-obsidian .hmd-fold-html table th { + padding: 10px; + border: 1px solid #ccc; +} +.cm-s-obsidian .hmd-inactive-line.HyperMD-table-row-1 { + color: transparent; + text-shadow: none; +} +.cm-s-obsidian .hmd-inactive-line.HyperMD-table-row-1 > span { + background: url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAEAAAACCAQAAAAziH6sAAAADklEQVR42mOc+Z9x5n8ACTkDM4ikM1IAAAAASUVORK5CYII=) repeat-x 0px center; +} +.cm-s-obsidian .hmd-inactive-line.HyperMD-table-row span.cm-hmd-table-sep { + color: transparent; +} +.markdown-source-view.mod-cm6 .cm-line.HyperMD-table-row { + min-width: max-content; +} +.markdown-source-view.mod-cm6 .cm-table-widget table { + margin-bottom: 0; +} +a.tag { + background-color: var(--tag-background); + border: var(--tag-border-width) solid var(--tag-border-color); + border-radius: var(--tag-radius); + color: var(--tag-color); + font-size: var(--tag-size); + font-weight: var(--tag-weight); + text-decoration: var(--tag-decoration); + padding: var(--tag-padding-y) var(--tag-padding-x); + line-height: 1; +} +@media (hover: hover) { + a.tag:hover { + background-color: var(--tag-background-hover); + border: var(--tag-border-width) solid var(--tag-border-color-hover); + color: var(--tag-color-hover); + text-decoration: var(--tag-decoration-hover); + } +} +a.tag { + background-color: var(--tag-background); + border: var(--tag-border-width) solid var(--tag-border-color); + border-radius: var(--tag-radius); + color: var(--tag-color); + font-size: var(--tag-size); + font-weight: var(--tag-weight); + text-decoration: var(--tag-decoration); + padding: var(--tag-padding-y) var(--tag-padding-x); + line-height: 1; +} +@media (hover: hover) { + a.tag:hover { + background-color: var(--tag-background-hover); + border: var(--tag-border-width) solid var(--tag-border-color-hover); + color: var(--tag-color-hover); + text-decoration: var(--tag-decoration-hover); + } +} +.cm-hashtag { + color: var(--tag-color); + background-color: var(--tag-background); + border: var(--tag-border-width) solid var(--tag-border-color); + font-size: var(--tag-size); + font-weight: var(--tag-weight); + vertical-align: baseline; + border-left: none; + border-right: none; + padding-top: var(--tag-padding-y); + padding-bottom: var(--tag-padding-y); +} +.cm-hashtag.cm-hashtag-begin { + border-top-left-radius: var(--tag-radius); + border-bottom-left-radius: var(--tag-radius); + border-right: none; + border-left: var(--tag-border-width) solid var(--tag-border-color); + padding-left: var(--tag-padding-x); +} +.cm-hashtag.cm-hashtag-end { + border-top-right-radius: var(--tag-radius); + border-bottom-right-radius: var(--tag-radius); + border-left: none; + border-right: var(--tag-border-width) solid var(--tag-border-color); + padding-right: var(--tag-padding-x); +} +.cm-s-obsidian span.cm-hashtag.cm-hmd-escape-backslash { + color: #FCC; +} +input[type=checkbox] { + -webkit-appearance: none; + appearance: none; + border-radius: var(--checkbox-radius); + border: 1px solid var(--checkbox-border-color); + flex-shrink: 0; + padding: 0; + margin: 0; + margin-inline-end: 6px; + width: var(--checkbox-size); + height: var(--checkbox-size); + position: relative; + transition: box-shadow 0.15s ease-in-out; +} +input[type=checkbox]:hover, +input[type=checkbox]:active, +input[type=checkbox]:focus { + outline: 0; + border-color: var(--checkbox-border-color-hover); +} +input[type=checkbox]:focus-visible { + box-shadow: 0 0 0 2px var(--background-modifier-border-focus); +} +input[type=checkbox]:checked:after { + content: ""; + top: -1px; + left: -1px; + position: absolute; + width: var(--checkbox-size); + height: var(--checkbox-size); + display: block; + background-color: var(--checkbox-marker-color); + -webkit-mask-position: 52% 52%; + -webkit-mask-size: 65%; + -webkit-mask-repeat: no-repeat; + -webkit-mask-image: url('data:image/svg+xml; utf8, '); +} +input[type=checkbox]:checked { + background-color: var(--checkbox-color); + border-color: var(--checkbox-color); +} +@media (hover: hover) { + input[type=checkbox]:checked:hover { + background-color: var(--checkbox-color-hover); + border-color: var(--checkbox-color-hover); + } +} +input[type=checkbox][data-indeterminate="true"]:not(:checked):after { + content: ""; + position: absolute; + top: calc(var(--checkbox-size)/2 - 2px); + width: calc(var(--checkbox-size) - 6px); + left: 0; + right: 0; + margin: 0 auto; + height: 2px; + display: block; + border-radius: 2px; + background-color: var(--text-normal); +} +.task-list-item-checkbox { + width: var(--checkbox-size); + height: var(--checkbox-size); +} +.markdown-preview-view .task-list-item-checkbox { + position: relative; + top: 0.2em; + margin-inline-end: 0.6em; +} +ul > li.task-list-item { + list-style: none; +} +ul > li.task-list-item .task-list-item-checkbox { + margin-inline-start: calc(var(--checkbox-size) * -1.5); +} +ul > li.task-list-item[data-task="x"], +ul > li.task-list-item[data-task="X"] { + text-decoration: var(--checklist-done-decoration); + color: var(--checklist-done-color); +} +.cm-s-obsidian span.cm-formatting-task { + white-space: pre; + height: 1em; + line-height: 1em; + min-width: 1em; + text-align: center; + color: var(--text-muted); + background-size: 1em; + font-family: var(--font-monospace); +} +.cm-s-obsidian span.hmd-hidden-token.cm-formatting-task { + color: transparent !important; +} +.markdown-source-view.mod-cm6 .task-list-label { + padding: 0; + margin-inline-start: -0.25em; +} +.markdown-source-view.mod-cm6 .task-list-item-checkbox { + top: -0.1em; + vertical-align: middle; + margin-inline-start: 1em; + margin-inline-end: 0.25em; +} +.markdown-source-view.mod-cm6 .cm-formatting-list-ol > .task-list-label .task-list-item-checkbox { + margin-inline-start: 2px; +} +.markdown-source-view.mod-cm6 .HyperMD-task-line[data-task="x"], +.markdown-source-view.mod-cm6 .HyperMD-task-line[data-task="X"] { + text-decoration: var(--checklist-done-decoration); + color: var(--checklist-done-color); +} +b, +strong { + font-weight: var(--bold-weight); + color: var(--bold-color); +} +i, +em { + font-style: italic; + color: var(--italic-color); +} +/* Highlights */ +.markdown-rendered p { + margin-block-start: var(--p-spacing); + margin-block-end: var(--p-spacing); +} +.markdown-rendered mark { + background-color: var(--text-highlight-bg); + color: var(--text-normal); +} +.markdown-rendered mark .internal-link { + color: var(--text-normal); +} +.cm-s-obsidian span.cm-formatting-highlight, +.cm-s-obsidian span.cm-highlight { + background-color: var(--text-highlight-bg); + color: var(--text-normal); +} +.cm-strong { + font-weight: var(--bold-weight); + color: var(--bold-color); +} +.cm-em { + font-style: italic; + color: var(--italic-color); + font-weight: var(--italic-weight); +} +.cm-strong.cm-em { + font-weight: var(--bold-weight); +} +.cm-s-obsidian span.cm-error { + color: var(--text-error); +} +/* Backlinks in Preview */ +.embedded-backlinks { + border-top: 1px solid var(--background-modifier-border); +} +.markdown-preview-view .embedded-backlinks { + margin-top: 3em; +} +.embedded-backlinks .backlink-pane { + padding: var(--size-4-3) 0 0 0; +} +.embedded-backlinks .backlink-pane .search-empty-state, +.embedded-backlinks .backlink-pane .tree-item-self { + /* Use quotes because Less overrides CSS math */ + font-size: max(var(--font-ui-small),var(--font-smaller)); + align-items: center; +} +.embedded-backlinks .backlink-pane > .tree-item-self { + font-size: max(var(--font-ui-small),1em); + gap: var(--size-2-3); + width: fit-content; +} +.embedded-backlinks .backlink-pane .tree-item-flair { + font-size: max(var(--font-ui-small),var(--font-smallest)); +} +.embedded-backlinks .nav-header { + padding: 0; + position: relative; +} +.embedded-backlinks .nav-header ~ .search-input-container { + width: calc(100% - 150px); + margin: var(--size-4-3) 0 0 0; +} +.embedded-backlinks .nav-buttons-container { + position: absolute; + right: 0; + top: 14px; + z-index: 1; +} +.view-action.mod-bookmarked { + --icon-color: var(--icon-color-active); + --icon-color-hover: var(--icon-color-active); +} +/* Only browser shows the bookmark icon if not bookmarked */ +.workspace-leaf-content:not([data-type="browser"]) .view-action.mod-bookmark { + display: none; +} +.workspace-leaf-content:not([data-type="browser"]) .view-action.mod-bookmarked { + display: flex; +} +.workspace-leaf-content[data-type=bookmarks] .view-content { + padding: var(--size-4-3) var(--size-4-3) var(--size-4-8); +} +.modal.mod-bookmark .setting-item-control input { + width: 100%; +} +.nav-buttons-container.has-separator { + border-bottom: 1px solid var(--background-modifier-border); + padding-bottom: var(--size-2-3); + margin-bottom: var(--size-4-2); +} +.nav-files-container { + flex-grow: 1; + overflow-y: auto; + overflow-x: hidden; + padding: 0 var(--size-4-3) var(--size-4-6) var(--size-4-3); + scroll-padding-block: var(--size-4-2); +} +/* Vault name */ +.nav-folder.mod-root > .nav-folder-title { + font-size: var(--vault-name-font-size); + color: var(--vault-name-color); + font-weight: var(--vault-name-font-weight); + cursor: default; +} +@media (hover: hover) { + .nav-folder.mod-root > .nav-folder-title:hover { + background-color: inherit; + font-weight: var(--vault-name-font-weight); + } +} +.nav-folder.mod-root > .nav-folder-children { + border-left: none; + margin-left: 0; + padding-left: 0; +} +.nav-file-tag { + background-color: var(--background-modifier-hover); + border-radius: var(--radius-s); + font-size: 9px; + font-weight: var(--font-semibold); + letter-spacing: 0.05em; + line-height: var(--line-height-normal); + margin-left: var(--size-2-3); + padding: 0 var(--size-4-1); + text-transform: uppercase; + align-self: center; +} +.nav-file-icon { + display: inline-flex; + align-items: center; + margin-right: var(--size-2-3); + position: relative; + color: var(--icon-color); + opacity: var(--icon-opacity); +} +.nav-files-container:not(.show-unsupported) .is-unsupported { + display: none; +} +.nav-file-title-content, +.nav-folder-title-content { + display: inline-block; + overflow-wrap: anywhere; + overflow: hidden; + white-space: var(--nav-item-white-space); + text-overflow: ellipsis; +} +.nav-file-title-content.is-being-renamed, +.nav-folder-title-content.is-being-renamed { + flex-grow: 1; + white-space: normal; + cursor: text; +} +.nav-folder.is-being-dragged-over { + border-radius: var(--radius-s); + background: hsla(var(--interactive-accent-hsl), 0.1); +} +.nav-folder.is-being-dragged-over > .nav-folder-title { + color: var(--nav-item-color-highlighted); +} +.nav-folder.is-being-dragged-over > .nav-folder-title .collapse-icon { + color: var(--nav-item-color-highlighted); +} +/* LEGACY Styles for plugin backwards compatibility */ +/* Vault name */ +.nav-folder.mod-root > .nav-folder-title { + font-size: var(--vault-name-font-size); + color: var(--vault-name-color); + font-weight: var(--vault-name-font-weight); + cursor: default; +} +@media (hover: hover) { + .nav-folder.mod-root > .nav-folder-title:hover { + background-color: inherit; + font-weight: var(--vault-name-font-weight); + } +} +/* Style children + The first level of folders and files + needs slightly different styling */ +.nav-folder.mod-root .nav-folder > .nav-folder-children { + padding-left: var(--nav-item-children-padding-left); + margin: 0 0 0 var(--nav-item-children-margin-left); + border-left: var(--nav-indentation-guide-width) solid var(--nav-indentation-guide-color); +} +.nav-file { + border-radius: var(--radius-s); +} +/* Folders and files */ +.nav-folder-title { + padding: var(--nav-item-parent-padding); +} +.nav-file-title { + padding: var(--nav-item-padding); +} +.nav-file-title, +.nav-folder-title { + margin-bottom: var(--size-2-1); + display: flex; + border-radius: var(--radius-s); + cursor: var(--cursor); + color: var(--nav-item-color); + font-size: var(--nav-item-size); + font-weight: var(--nav-item-weight); + line-height: var(--line-height-tight); +} +@media (hover: hover) { + body:not(.is-grabbing) .nav-file-title:hover, + body:not(.is-grabbing) .nav-folder-title:hover { + background-color: var(--nav-item-background-hover); + color: var(--nav-item-color-hover); + font-weight: var(--nav-item-weight-hover); + } +} +body:not(.is-grabbing) .nav-file-title.is-active:hover, +body:not(.is-grabbing) .nav-folder-title.is-active:hover, +.nav-file-title.is-active, +.nav-folder-title.is-active { + color: var(--nav-item-color-active); + background-color: var(--nav-item-background-active); + font-weight: var(--nav-item-weight-active); +} +body:not(.is-grabbing) .nav-file-title.is-selected:hover, +body:not(.is-grabbing) .nav-folder-title.is-selected:hover, +.nav-file-title.is-selected, +.nav-folder-title.is-selected { + color: var(--nav-item-color-selected); + background-color: var(--nav-item-background-selected); +} +body:not(.is-grabbing) .nav-file-title.is-being-dragged, +body:not(.is-grabbing) .nav-folder-title.is-being-dragged, +.nav-file-title.is-being-dragged, +.nav-folder-title.is-being-dragged { + background-color: var(--interactive-accent); + color: var(--text-on-accent); +} +body:not(.is-grabbing) .nav-file-title.is-being-dragged .nav-folder-collapse-indicator, +body:not(.is-grabbing) .nav-folder-title.is-being-dragged .nav-folder-collapse-indicator, +.nav-file-title.is-being-dragged .nav-folder-collapse-indicator, +.nav-folder-title.is-being-dragged .nav-folder-collapse-indicator { + color: var(--text-on-accent); +} +body:not(.is-grabbing) .nav-file-title.is-being-dragged .nav-file-tag, +body:not(.is-grabbing) .nav-folder-title.is-being-dragged .nav-file-tag, +.nav-file-title.is-being-dragged .nav-file-tag, +.nav-folder-title.is-being-dragged .nav-file-tag { + color: var(--text-normal); +} +/* 2022-07 Only used for Publish AFAIK */ +.file-tree-item-checkbox, +.file-tree-item-icon { + flex-shrink: 0; +} +.file-tree-item-title { + flex-grow: 1; + word-break: break-word; +} +.file-tree-item-icon { + --icon-size: var(--icon-s); + --icon-stroke: var(--icon-s-stroke-width); + margin-right: var(--size-4-1); + color: var(--icon-color); + position: relative; + top: var(--size-2-1); +} +.file-tree .tree-item-inner { + display: flex; + align-items: center; + position: relative; + width: 100%; +} +.file-tree .tree-item-flair { + line-height: 1; + padding: var(--size-2-1) var(--size-2-3); + color: var(--text-on-accent); +} +.file-tree .is-selected { + color: var(--text-normal); +} +.file-tree .mod-changed.is-selected { + background-color: hsla(var(--interactive-accent-hsl), 0.2); +} +.file-tree .mod-changed .tree-item-flair { + color: var(--text-accent-hover); +} +.file-tree .mod-new.is-selected { + background-color: rgba(var(--background-modifier-success-rgb), 0.2); +} +.file-tree .mod-new .tree-item-flair { + color: var(--text-success); +} +.file-tree .mod-deleted.is-selected, +.file-tree .mod-to-delete.is-selected { + background-color: rgba(var(--background-modifier-error-rgb), 0.2); +} +.file-tree .mod-deleted .tree-item-flair, +.file-tree .mod-to-delete .tree-item-flair { + color: var(--text-error); +} +.file-tree .mod-to-delete .tree-item-flair { + display: none; +} +.file-tree .mod-to-delete.is-selected .tree-item-flair { + display: block; +} +.file-tree .clickable-icon { + display: flex; + --icon-size: var(--icon-s); + --icon-stroke: var(--icon-s-stroke-width); +} +.file-recovery-list-item-container { + overflow: auto; + flex: 1 1 0; +} +.file-recovery-list { + overflow: auto; + padding: var(--size-4-3) var(--size-4-2); + flex-grow: 1; + display: flex; + flex-direction: column; +} +.file-recovery-list .search-input-container { + width: 100%; +} +.file-recovery-list-container { + display: flex; + flex-direction: column; + flex-basis: 250px; + flex-shrink: 0; + border-right: 1px solid var(--background-modifier-border); +} +.file-recovery-list-item-header { + display: flex; + padding: var(--size-4-2); + border-radius: var(--radius-s); + transition: background-color 200ms ease-in-out, color 200ms ease-in-out; +} +.file-recovery-list-item-header:not(:last-child) { + margin-bottom: var(--size-4-2); +} +.file-recovery-list-item-header.is-active, +.file-recovery-list-item-header.is-active:hover { + background-color: var(--interactive-accent); + color: var(--text-on-accent); +} +.file-recovery-list-item-header.is-active .u-muted, +.file-recovery-list-item-header.is-active:hover .u-muted { + color: var(--text-on-accent); + opacity: 0.8; +} +@media (hover: hover) { + .file-recovery-list-item-header:hover { + background-color: var(--background-modifier-hover); + } +} +.file-recovery-list-item-header .file-recovery-list-item-details { + flex-grow: 1; + cursor: var(--cursor); + font-size: var(--font-ui-small); +} +.file-recovery-list-item-header .collapse-indicator { + min-width: var(--size-4-6); + padding-left: var(--size-4-2); + opacity: 1; +} +.graph-view.color-fill { + color: var(--graph-node); +} +.graph-view.color-fill-focused { + color: var(--graph-node-focused); +} +.graph-view.color-fill-tag { + color: var(--graph-node-tag); +} +.graph-view.color-fill-attachment { + color: var(--graph-node-attachment); +} +.graph-view.color-fill-unresolved { + color: var(--graph-node-unresolved); + opacity: 0.5; +} +.graph-view.color-fill-1 { + color: var(--text-muted); +} +.graph-view.color-fill-2 { + color: var(--text-muted); +} +.graph-view.color-fill-3 { + color: var(--text-muted); +} +.graph-view.color-fill-4 { + color: var(--text-muted); +} +.graph-view.color-fill-5 { + color: var(--text-muted); +} +.graph-view.color-fill-6 { + color: var(--text-muted); +} +.graph-view.color-arrow { + color: var(--text-normal); + opacity: 0.5; +} +.graph-view.color-circle { + color: var(--graph-node-focused); +} +.graph-view.color-line { + color: var(--graph-line); +} +.graph-view.color-text { + color: var(--graph-text); +} +.graph-view.color-fill-highlight { + color: var(--interactive-accent); +} +.graph-view.color-line-highlight { + color: var(--interactive-accent); +} +.graph-controls { + border-radius: var(--radius-m); + position: absolute; + right: var(--size-4-3); + top: var(--size-4-3); + padding: 0; + background-color: var(--background-primary); + width: var(--graph-controls-width); + overflow: auto; +} +.graph-controls:not(.is-close) { + max-height: calc(100% - var(--size-4-4)); + border: 1px solid var(--background-modifier-border); + box-shadow: var(--shadow-s); +} +.graph-controls.is-close { + min-width: inherit; + width: auto; + background-color: var(--background-primary); + border: 1px solid transparent; + padding: var(--size-2-3); +} +.graph-controls.is-close > .graph-control-section { + display: none; +} +.workspace-split:not(.mod-root) .graph-controls.is-close { + background-color: var(--background-secondary); +} +.graph-controls input[type='text'], +.graph-controls input[type='range'] { + width: 100%; + font-size: var(--font-ui-small); +} +.graph-controls .mod-cta { + margin-top: var(--size-2-3); + width: 100%; +} +.graph-controls .setting-item { + padding: var(--size-2-3) 0; + border: none; +} +.graph-controls .setting-item .setting-item-info { + display: flex; + align-items: center; +} +.graph-controls .setting-item:first-of-type { + border-top: none; +} +.graph-controls .setting-item.mod-slider { + flex-direction: column; +} +.graph-controls .setting-item.mod-slider > * { + width: 100%; +} +.graph-controls .setting-item.mod-slider .setting-item-info { + margin-right: 0; +} +.graph-controls .setting-item.mod-slider .setting-item-control { + padding-top: var(--size-4-3); +} +.graph-controls .setting-item.mod-toggle .setting-item-control { + padding-top: 0; +} +.graph-controls .setting-item.mod-search-setting .setting-item-info { + margin-right: 0; +} +.graph-controls .setting-item-name { + font-size: var(--font-ui-small); +} +.graph-controls::-webkit-scrollbar, +.graph-controls::-webkit-scrollbar-thumb { + display: none; +} +.graph-color-group { + --swatch-height: 18px; + --swatch-width: 18px; + position: relative; + display: flex; + align-items: center; + padding: 0 0 6px 0; + transition: top 200ms ease-in-out; +} +.graph-color-group input[type="color"] { + margin: 0 2px 0 6px; +} +.graph-color-group .clickable-icon { + padding: var(--size-2-2); +} +.graph-color-button-container { + text-align: center; + margin-bottom: 10px; +} +.graph-color-button-container button { + margin: 0; + width: 100%; +} +.graph-color-group.drag-ghost { + position: fixed; + display: flex; + max-width: unset; + border: none; + box-shadow: none; + background-color: var(--background-primary-alt); + padding: 0; + transition: none; + pointer-events: none; +} +.graph-color-group.drag-ghost input[type='text'] { + width: 100%; +} +.graph-color-group.drag-ghost input[type='color'] { + margin-left: 6px; +} +.graph-control-section.mod-color-groups .tree-item-children.is-grabbing .graph-color-groups-container { + padding-bottom: 40px; +} +.graph-controls-button { + display: none; + z-index: 1; +} +.graph-controls-button.mod-close, +.graph-controls-button.mod-reset { + position: absolute; + top: var(--size-4-2); + right: var(--size-4-2); + padding: var(--size-2-2); +} +.graph-controls:not(.is-close) .graph-controls-button.mod-close, +.graph-controls:not(.is-close) .graph-controls-button.mod-reset { + display: flex; +} +.graph-controls-button.mod-reset { + right: 36px; +} +.graph-controls.is-close .graph-controls-button.mod-open { + display: flex; +} +.graph-controls-button.mod-animate { + margin-top: var(--size-4-2); +} +.graph-controls.is-close .graph-controls-button.mod-animate { + display: flex; +} +.setting-item.mod-search-setting .setting-item-info { + display: none; +} +.setting-item.mod-search-setting .setting-item-control .search-input-container { + position: relative; + flex-grow: 1; + margin: 0; +} +.setting-item.mod-search-setting.is-loading .setting-item-control:before { + background-color: var(--interactive-accent); + animation: 1000ms ease-in-out 300ms infinite progress-bar; +} +.graph-control-section-header { + font-weight: var(--font-semibold); + font-size: var(--font-ui-small); + color: var(--text-normal); +} +.graph-control-section { + padding: var(--size-2-3) var(--size-4-3); + border-bottom: 1px solid var(--background-modifier-border); +} +.graph-control-section:last-child { + border-bottom: none; +} +.graph-control-section:last-child .tree-item-children { + padding-bottom: var(--size-4-4); +} +.graph-control-section > .tree-item-self { + padding-left: var(--size-4-4); +} +.graph-control-section .tree-item-children { + margin: 0; + padding: var(--size-4-1) 0; + border-left: none; +} +.graph-control-section.mod-display .setting-item:not(.mod-slider):last-child .setting-item-info { + display: none; +} +.workspace-leaf-content[data-type='outline'] .view-content { + padding: var(--size-4-3) var(--size-4-3) var(--size-4-8); +} +.workspace-leaf-content[data-type=all-properties] .view-content, +.workspace-leaf-content[data-type=properties] .view-content { + padding: var(--size-4-3) var(--size-4-3) var(--size-4-8); +} +.is-phone, +.workspace-drawer { + --metadata-input-height: calc(var(--font-text-size) * 2.25); + --metadata-padding: 0; + --metadata-divider-width: 1px; + --metadata-divider-color-hover: var(--metadata-divider-color); +} +.is-phone .metadata-properties, +.workspace-drawer .metadata-properties { + --metadata-gap: 0; +} +.is-phone .metadata-property:hover:not(:focus-within), +.workspace-drawer .metadata-property:hover:not(:focus-within) { + box-shadow: none; +} +.workspace > .workspace-split:not(.mod-root) .metadata-container { + --metadata-label-font-size: var(--metadata-sidebar-label-font-size); + --metadata-input-font-size: var(--metadata-sidebar-label-font-size); + --icon-size: var(--icon-xs); + --icon-stroke: var(--icon-xs-stroke-width); + --metadata-padding: 0; + --metadata-divider-width: 1px; + --metadata-divider-color-hover: var(--metadata-divider-color); +} +.workspace > .workspace-split:not(.mod-root) .metadata-container .metadata-properties { + --metadata-gap: 0; +} +.workspace > .workspace-split:not(.mod-root) .metadata-container .metadata-property:hover:not(:focus-within) { + box-shadow: none; +} +.workspace > .workspace-split:not(.mod-root) .metadata-container .metadata-property-value .clickable-icon { + --icon-size: var(--icon-xs); + --icon-stroke: var(--icon-xs-stroke-width); +} +.workspace-leaf-content[data-type=file-properties] .metadata-properties-heading { + display: none; +} +.metadata-container { + container-type: inline-size; + container-name: metadata; +} +@container (width < 250px) { + .metadata-property { + flex-wrap: wrap; + } + .metadata-property .metadata-property-key { + width: 100%; + border-bottom: 0; + } + .metadata-property .metadata-property-value { + margin-top: -2px; + padding-left: calc(var(--icon-size) + var(--size-4-1)); + } +} +.modal.mod-publish { + height: var(--modal-height); + width: var(--modal-width); + max-width: var(--modal-max-width-narrow); + padding: var(--size-4-4) 0 0 0; + position: relative; + overflow: hidden; +} +.modal.mod-publish .modal-title { + padding: 0 var(--size-4-4); +} +.modal.mod-publish .modal-content { + overflow: auto; + padding: 0 var(--size-4-4) var(--size-4-4); + margin-bottom: calc(var(--input-height) + var(--size-4-8)); + border-top: var(--border-width) solid var(--background-modifier-border); +} +.modal.mod-publish .modal-button-container { + margin: 0 0 0 calc(var(--size-4-4) * -1); + padding: var(--size-4-4); + gap: var(--size-4-2); + position: absolute; + bottom: 0; + background-color: var(--background-primary); + border-top: var(--border-width) solid var(--background-modifier-border); + width: 100%; +} +.publish-section { + margin-bottom: var(--size-4-1); +} +.publish-change-list { + padding: var(--size-4-2) 0 var(--size-4-2) 0; +} +.site-list-site-id-setting { + margin-top: var(--size-4-4); +} +.publish-section-header-text, +.publish-section-header-toggle-collapsed-button, +.publish-section-header-action { + cursor: var(--cursor); +} +@media (hover: hover) { + .publish-section-header-text:hover, + .publish-section-header-toggle-collapsed-button:hover, + .publish-section-header-action:hover { + color: var(--text-accent-hover); + } +} +.publish-section-header { + border-bottom: 1px solid var(--background-modifier-border); + font-size: var(--font-ui-small); + line-height: 1.1; + color: var(--text-muted); + display: flex; + padding: var(--size-4-2) 0; + align-items: center; +} +.publish-section-header-text { + flex-grow: 1; + font-size: var(--font-ui-medium); + color: var(--text-normal); + line-height: var(--line-height-tight); + font-weight: var(--font-medium); +} +.publish-changes-switch-site { + margin-left: var(--size-4-2); + display: flex; + flex-direction: row; + flex-grow: 1; + font-size: var(--font-ui-small); + position: relative; + gap: var(--size-2-1); + top: 2px; +} +.publish-changes-switch-site .clickable-icon { + --icon-size: var(--icon-s); + --icon-stroke: var(--icon-s-stroke-width); + padding: var(--size-2-2); +} +.upload-progress-container { + max-height: 60vh; + overflow: auto; +} +.upload-progress-container.is-finished { + max-height: calc(60vh - 200px); +} +.publish-changes-current-site-name { + margin-left: var(--size-2-3); + text-decoration: underline; +} +.publish-changes-info { + display: flex; + align-items: center; + margin-bottom: 20px; +} +.publish-changes-info button { + margin-right: 0; + margin-left: var(--size-4-2); +} +.publish-changes-info .search-input-container { + margin: 0; + width: 0; + flex: 1 0 auto; +} +.publish-section-header-toggle-collapsed-button { + margin-right: var(--size-4-1); + color: var(--text-faint); + width: 9px; + height: 9px; +} +.publish-section-header-action { + color: var(--text-faint); + margin-left: var(--size-4-3); +} +.publish-upload-item-title { + word-break: break-word; + font-size: var(--nav-item-size); + line-height: var(--line-height-tight); +} +.publish-changes-buttons { + text-align: right; + padding-bottom: var(--size-4-4); +} +.publish-upload-item { + position: relative; + padding: var(--size-4-1) var(--size-4-2); +} +.publish-upload-item .flair { + background-color: transparent; + text-transform: unset; + letter-spacing: normal; + font-size: var(--font-ui-smaller); +} +.publish-upload-item .list-item-part { + --icon-size: var(--icon-s); + --icon-stroke: var(--icon-s-stroke-width); + display: flex; + align-items: center; +} +.publish-upload-item:before { + content: ' '; + position: absolute; + top: 0; + left: 0; + width: 0; + height: 100%; + transition: width 150ms ease-in-out; + background-color: rgba(var(--background-modifier-success-rgb), 0.2); + z-index: 0; + border-radius: var(--radius-s); +} +.publish-upload-item.mod-failed { + color: var(--text-error); +} +.publish-upload-item.mod-failed:before { + background-color: rgba(var(--background-modifier-error-rgb), 0.2); +} +.publish-upload-item.mod-completed { + color: var(--text-success); +} +.publish-upload-item.mod-completed > * { + position: relative; +} +.publish-upload-item.mod-completed:before { + width: 100%; +} +.site-list-container { + border-top: 1px solid var(--background-modifier-border); + margin-bottom: var(--size-4-4); +} +.site-list-container .list-item:last-child { + padding-top: var(--size-4-4); +} +.site-list-item-name { + flex-grow: 1; +} +.slug-input { + text-transform: lowercase; +} +.passwords-container { + margin-bottom: var(--size-4-4); +} +.password-item { + border-radius: var(--radius-s); + padding: var(--size-4-2) var(--size-4-4); + margin: var(--size-4-1) 0; +} +@media (hover: hover) { + .password-item:hover { + background-color: var(--background-primary); + } +} +.tree-item.mod-custom-nav.hidden .tree-item-self { + color: var(--text-faint); +} +.tree-item.mod-custom-nav .tree-item-inner { + display: flex; + align-items: center; + position: relative; +} +.tree-list { + padding: var(--size-4-4) 0; +} +.tree-list-header { + border-bottom: 1px solid var(--background-modifier-border); + padding: var(--size-4-2) 0; + line-height: 1.1; + display: flex; + align-items: center; + justify-content: space-between; +} +.tree-list-title { + font-size: var(--font-ui-medium); + font-weight: var(--font-semibold); +} +.tree-list-action { + align-items: center; + display: flex; + color: var(--text-muted); + font-size: var(--font-ui-small); +} +.search-input-container { + position: relative; +} +.search-input-container:before { + top: calc((var(--input-height) - var(--search-icon-size)) / 2); + left: 8px; + position: absolute; + content: ''; + height: var(--search-icon-size); + width: var(--search-icon-size); + display: block; + background-color: var(--search-icon-color); + -webkit-mask-image: url("data:image/svg+xml,"); + -webkit-mask-repeat: no-repeat; +} +.search-input-container input { + display: block; + width: 100%; + padding-right: 28px; + padding-left: 36px; +} +.global-search-input-container.search-input-container input { + padding-right: 56px; +} +.search-input-clear-button { + position: absolute; + background: transparent; + border-radius: 50%; + color: var(--search-clear-button-color); + cursor: var(--cursor); + top: 0px; + right: 2px; + bottom: 0px; + line-height: 0; + height: var(--input-height); + width: 28px; + margin: auto; + padding: 0 0; + text-align: center; + display: flex; + justify-content: center; + align-items: center; + transition: color 0.15s ease-in-out; +} +.search-input-clear-button:after { + content: ''; + height: var(--search-clear-button-size); + width: var(--search-clear-button-size); + display: block; + background-color: currentColor; + -webkit-mask-image: url("data:image/svg+xml,"); + -webkit-mask-repeat: no-repeat; +} +.search-input-clear-button:hover, +.search-input-clear-button:active { + color: var(--text-normal); + transition: color 0.15s ease-in-out; +} +.search-input-suggest-button { + position: absolute; + left: 0; + top: 0; + color: var(--text-faint); + cursor: var(--cursor); + padding: var(--size-4-1) var(--size-4-2); + opacity: 0; + z-index: 10; +} +@media (hover: hover) { + .search-input-suggest-button:hover { + color: var(--text-muted); + } +} +.backlink-pane, +.outgoing-link-pane { + overflow-y: auto; + padding: var(--size-4-3) var(--size-4-3) var(--size-4-8); + flex: 1 0 0; + /* #todo This should be removed and make the DOM changes instead + Section headers for linked/unlinked mentions + */ +} +.backlink-pane .search-result-container, +.outgoing-link-pane .search-result-container { + padding: var(--size-4-1) 1px var(--size-4-4); +} +.backlink-pane > .tree-item-self, +.outgoing-link-pane > .tree-item-self { + color: var(--text-normal); + padding-left: var(--size-4-2); +} +.backlink-pane > .tree-item-self .tree-item-inner, +.outgoing-link-pane > .tree-item-self .tree-item-inner { + font-weight: var(--font-medium); +} +.backlink-pane > .tree-item-self.is-collapsed, +.outgoing-link-pane > .tree-item-self.is-collapsed { + color: var(--text-faint); +} +@media (hover: hover) { + .backlink-pane > .tree-item-self.is-collapsed:hover, + .outgoing-link-pane > .tree-item-self.is-collapsed:hover { + color: var(--text-muted); + } +} +.backlink-pane > .tree-item-self .collapse-icon, +.outgoing-link-pane > .tree-item-self .collapse-icon { + display: none; +} +.search-result-container { + padding: var(--size-4-3) var(--size-4-3) var(--size-4-4); + position: relative; + flex: 1 0 0; +} +.search-result-container.mod-global-search { + overflow-y: auto; +} +.search-result-container:before { + content: ' '; + position: absolute; + top: 0; + width: 0; + height: 3px; +} +.search-result-container.is-loading:before { + background-color: var(--interactive-accent); + animation: 1000ms ease-in-out 300ms infinite progress-bar; +} +.search-suggest-info-text { + color: var(--text-muted); + margin-left: 4px; +} +.search-suggest-icon { + padding: 4px; + border-radius: var(--radius-s); +} +@media (hover: hover) { + .search-suggest-icon:hover { + background-color: var(--background-modifier-hover); + } +} +.suggestion-container.mod-search-suggestion { + max-width: unset; + background-color: var(--background-secondary); + border-color: var(--prompt-border-color); + max-height: 600px; +} +.suggestion-container.mod-search-suggestion .suggestion { + padding: var(--size-2-3); + background-color: var(--background-secondary); + border-radius: var(--radius-m); +} +.search-suggest-icon { + align-items: center; + display: flex; +} +.search-suggest-item { + padding: var(--size-4-1) var(--size-4-2); + border-radius: var(--radius-s); +} +.search-suggest-item.suggestion-item { + font-size: var(--font-ui-small); +} +.search-suggest-item.mod-group { + align-items: center; + margin: 0; + color: var(--text-muted); + padding: 0 0 0 var(--size-4-2); + cursor: default; + font-weight: var(--font-semibold); + font-size: var(--font-ui-smaller); + border-radius: 0; +} +.search-suggest-item.mod-group:not(:first-child) { + border-top: 1px solid var(--background-modifier-border); + margin-top: 6px; + padding: 6px 6px 0px 14px; + margin-left: -6px; + margin-right: -6px; +} +.search-suggest-item.mod-group:hover, +.search-suggest-item.mod-group.is-selected { + background-color: initial; +} +@keyframes progress-bar { + 0% { + width: 0; + left: 0; + } + 5% { + width: 0; + left: 0; + } + 50% { + width: 100%; + right: 0; + } + 95% { + width: 0; + right: 0; + } + 100% { + width: 0; + right: 0; + } +} +.search-empty-state { + color: var(--text-faint); + font-size: var(--font-ui-small); + margin: 0 0 var(--size-4-3); + padding-left: var(--size-4-2); +} +.search-result { + word-break: break-word; +} +.search-result:not(.is-collapsed) .search-result-file-title { + color: var(--nav-item-color-active); +} +.search-result-file-matches { + font-size: var(--font-ui-smaller); + line-height: var(--line-height-tight); + background-color: var(--search-result-background); + border-radius: var(--radius-s); + overflow: hidden; + margin: var(--size-4-1) 0 var(--size-4-2); + color: var(--text-muted); + box-shadow: 0 0 0 1px var(--background-modifier-border); +} +.search-result-file-matches:empty { + display: none; +} +.search-info-more-matches { + color: var(--text-faint); +} +.search-result-file-match { + cursor: var(--cursor); + position: relative; + padding: var(--size-4-2) var(--size-4-5) var(--size-4-2) var(--size-4-3); + white-space: pre-wrap; + width: 100%; + border-bottom: 1px solid var(--background-modifier-border); +} +.search-result-file-match:last-child { + border-bottom: none; +} +@media (hover: hover) { + .search-result-file-match:hover { + color: var(--text-normal); + background-color: var(--text-selection); + } +} +.search-result-file-match:hover .search-result-file-match-replace-button { + display: block; +} +.search-result-file-match-replace-button { + display: none; + position: absolute; + height: auto; + bottom: 5px; + right: 24px; + padding: var(--size-4-1) var(--size-4-2); + color: var(--text-muted); + font-size: var(--font-ui-smaller); +} +@media (hover: hover) { + .search-result-file-match-replace-button:hover { + color: var(--text-normal); + } +} +.search-result-hover-button { + position: absolute; + display: flex; + right: 2px; + border-radius: var(--radius-s); + color: var(--text-faint); + padding: 1px 3px; +} +@media (hover: hover) { + .search-result-hover-button:hover { + opacity: 1; + background-color: var(--background-modifier-hover); + } +} +.search-result-hover-button.mod-top { + top: 2px; +} +.search-result-hover-button.mod-bottom { + bottom: 2px; +} +.search-result-file-matched-text { + color: var(--text-normal); + background-color: var(--text-highlight-bg); +} +.search-info-container { + color: var(--text-muted); + padding: var(--size-4-1) var(--size-4-4) var(--size-4-1); + font-size: var(--font-ui-smaller); +} +.search-info-children { + padding-left: 20px; + border-left: 1px solid var(--background-modifier-border); + margin: 1px 0; +} +.copy-search-result-container { + display: flex; + flex-direction: column; +} +.copy-search-result-textarea { + height: 300px; + max-height: 20vh; + resize: none; +} +.copy-search-result-textarea + .setting-item { + border-top: none; +} +.search-result-file-match-destination-file-container { + margin-top: var(--size-2-3); +} +.search-result-file-match-destination-file { + display: inline-flex; + background-color: var(--interactive-normal); + border-radius: var(--radius-s); + box-shadow: var(--input-shadow); + color: var(--text-muted); + padding: var(--size-2-2) var(--size-2-3); + margin-bottom: var(--size-2-1); +} +@media (hover: hover) { + .search-result-file-match:hover .search-result-file-match-destination-file { + background-color: var(--background-secondary); + } + .search-result-file-match:hover .search-result-file-match-destination-file:hover { + background-color: var(--interactive-hover); + box-shadow: var(--input-shadow-hover); + color: var(--text-normal); + } +} +.search-result-file-match-destination-file-icon { + --icon-size: var(--icon-xs); + --icon-stroke: var(--icon-xs-stroke-width); + margin-right: var(--size-4-1); + display: flex; + color: var(--text-faint); +} +.search-result-file-match-destination-file-icon .svg-icon { + align-self: center; +} +.search-result-file-match-destination-file-name { + white-space: pre-wrap; + word-break: break-all; +} +body:not(.is-phone) .workspace-leaf.mod-active .search-result.has-focus .tree-item-self, +body:not(.is-phone) .workspace-leaf.mod-active .search-result-file-match.has-focus { + border-radius: var(--radius-s); + box-shadow: inset 0 0 0 2px var(--background-modifier-border-focus); +} +.search-results-info { + color: var(--text-muted); + display: flex; + align-items: center; + justify-content: space-between; + border-bottom: 1px solid var(--background-modifier-border); + margin: var(--size-4-1) var(--size-4-2) 0; + padding-bottom: var(--size-4-1); + white-space: nowrap; +} +.search-results-info .dropdown { + height: 24px; + box-shadow: none; + background-color: transparent; + font-size: 12px; + color: var(--text-muted); + text-align-last: right; + max-width: 60%; + text-overflow: ellipsis; + white-space: nowrap; +} +@media (hover: hover) { + .search-results-info .dropdown:hover { + color: var(--interactive-accent); + } +} +.search-results-info .dropdown option { + color: initial; + text-align: left; +} +.search-results-result-count { + font-size: var(--font-ui-smaller); + font-variant-numeric: tabular-nums; +} +.search-row { + display: flex; + margin: var(--size-4-2); + gap: var(--size-4-1); +} +.search-params { + margin: var(--size-4-1) var(--size-4-4); +} +.search-params input[type='text'], +.search-params input[type='range'] { + width: 100%; + font-size: var(--font-ui-small); +} +.search-params .mod-cta { + margin-top: var(--size-2-3); + width: 100%; +} +.search-params .setting-item { + padding: var(--size-2-3) 0; + border: none; +} +.search-params .setting-item .setting-item-info { + display: flex; + align-items: center; +} +.search-params .setting-item:first-of-type { + border-top: none; +} +.search-params .setting-item.mod-slider { + flex-direction: column; +} +.search-params .setting-item.mod-slider > * { + width: 100%; +} +.search-params .setting-item.mod-slider .setting-item-info { + margin-right: 0; +} +.search-params .setting-item.mod-slider .setting-item-control { + padding-top: var(--size-4-3); +} +.search-params .setting-item.mod-toggle .setting-item-control { + padding-top: 0; +} +.search-params .setting-item.mod-search-setting .setting-item-info { + margin-right: 0; +} +.search-params .setting-item-name { + font-size: var(--font-ui-small); +} +.search-params::-webkit-scrollbar, +.search-params::-webkit-scrollbar-thumb { + display: none; +} +.global-search-input-container { + flex-grow: 1; +} +.more-options-icon { + --icon-size: 10px; + background-color: var(--icon-color); + border-radius: 50%; + color: var(--background-secondary); + display: flex; + margin-left: var(--size-2-3); + opacity: var(--icon-opacity); + padding: 0.5px; +} +.clickable-icon:hover .more-options-icon { + background-color: var(--icon-color-hover); + opacity: var(--icon-opacity-hover); +} +.slides-container { + position: fixed; + top: 0; + left: 0; + height: 100vh; + width: 100vw; + transition: -webkit-transform 0.8s ease 0s; + background-color: #191919; + z-index: var(--layer-slides); + border: none; +} +.slides-container li .collapse-indicator { + display: none; +} +.slides-close-btn { + display: inline-block; + position: absolute; + top: var(--size-4-2); + right: var(--size-4-2); + color: var(--text-faint); + cursor: var(--cursor); + z-index: 1; +} +@media (hover: hover) { + .slides-close-btn:hover { + color: var(--text-muted); + } +} +.reveal input[type='checkbox'] { + width: 24px; + height: 24px; +} +.reveal .task-list-item, +.reveal .footnote-item { + list-style: none; +} +.reveal .task-list-item { + margin-left: -1.5em; +} +.mod-sync-history .modal-content { + height: 100%; +} +.vault-list-item { + margin: 6px 0; + display: flex; +} +.vault-list-item.is-connected .vault-list-item-title { + color: var(--text-normal); +} +.vault-list-item-icon { + color: var(--text-muted); + position: relative; + top: 1px; +} +.vault-list-item-title { + color: var(--text-muted); + user-select: none; +} +.vault-list-item-creation-time { + color: var(--text-faint); + font-size: var(--font-ui-small); +} +.sync-status-icon { + display: flex; + align-items: center; + cursor: var(--cursor); +} +.sync-status-icon.mod-success { + color: var(--text-success); +} +.sync-status-icon.mod-working { + color: var(--interactive-accent); +} +.sync-status-icon.mod-error { + color: var(--text-error); +} +.sync-status-icon.mod-spin svg { + animation-name: spin; + animation-duration: 5000ms; + animation-iteration-count: infinite; + animation-timing-function: linear; +} +@media (prefers-reduced-motion: reduce) { + .sync-status-icon.mod-spin svg { + animation: none; + } +} +@keyframes spin { + from { + transform: rotate(0deg); + } + to { + transform: rotate(360deg); + } +} +.sync-history-list-container { + display: flex; + flex-direction: column; + flex-basis: 250px; + flex-shrink: 0; + border-right: 1px solid var(--background-modifier-border); + background-color: var(--background-secondary); +} +.sync-history-list { + overflow: auto; + padding: var(--size-4-2) var(--size-4-2) 0; + display: flex; + flex: 0 1 auto; + flex-direction: column; +} +.sync-history-list .search-input-container { + width: 100%; +} +.sync-history-list-item-container { + overflow: auto; + flex: 1 1 0; +} +.sync-history-list-item-header { + display: flex; + align-items: center; + padding: var(--size-4-2); + margin-bottom: var(--size-4-1); + border-radius: var(--radius-s); +} +.sync-history-list-item-header:last-child { + margin-bottom: 0; +} +.sync-history-list-item-header.is-active, +.sync-history-list-item-header.is-active:hover { + background-color: var(--interactive-accent); + color: var(--text-on-accent); +} +.sync-history-list-item-header.is-active .u-muted, +.sync-history-list-item-header.is-active:hover .u-muted { + color: var(--text-on-accent); + opacity: 0.8; +} +.sync-history-list-item-header.is-active { + --nav-collapse-icon-color: var(--text-on-accent); +} +@media (hover: hover) { + .sync-history-list-item-header.is-active:hover { + --nav-collapse-icon-color: var(--text-on-accent); + } +} +@media (hover: hover) { + .sync-history-list-item-header.is-active .tree-item-flair:hover { + --nav-collapse-icon-color: var(--text-on-accent); + } +} +@media (hover: hover) { + .sync-history-list-item-header:hover { + background-color: var(--background-modifier-hover); + } +} +.sync-history-list-item-header .mod-avatar-current-user { + background-color: var(--sync-avatar-color-current-user); +} +.sync-history-list-item-header .mod-avatar-color-1 { + background-color: var(--sync-avatar-color-1); +} +.sync-history-list-item-header .mod-avatar-color-2 { + background-color: var(--sync-avatar-color-2); +} +.sync-history-list-item-header .mod-avatar-color-3 { + background-color: var(--sync-avatar-color-3); +} +.sync-history-list-item-header .mod-avatar-color-4 { + background-color: var(--sync-avatar-color-4); +} +.sync-history-list-item-header .mod-avatar-color-5 { + background-color: var(--sync-avatar-color-5); +} +.sync-history-list-item-header .mod-avatar-color-6 { + background-color: var(--sync-avatar-color-6); +} +.sync-history-list-item-header .mod-avatar-color-7 { + background-color: var(--sync-avatar-color-7); +} +.sync-history-list-item-header .mod-avatar-color-8 { + background-color: var(--sync-avatar-color-8); +} +.sync-history-list-item-header .sync-history-list-item-avatar { + border-radius: 50%; + height: var(--size-4-8); + width: var(--size-4-8); + min-width: var(--size-4-8); + margin-right: var(--size-4-2); + display: flex; + justify-content: center; + align-items: center; + text-transform: uppercase; + color: var(--text-on-accent); + border: 1px solid rgba(var(--mono-rgb-100), 0.2); +} +.sync-history-list-item-header.is-active .sync-history-list-item-avatar { + border: 1px solid rgba(255, 255, 255, 0.25); +} +.sync-history-list-item-header:not(.is-active) .sync-history-list-item-avatar.mod-avatar-current-user { + color: var(--text-normal); +} +.sync-history-list-item-header .sync-history-list-item-details { + flex-grow: 1; + cursor: var(--cursor); + font-size: var(--font-ui-small); +} +.sync-history-list-item-header .tree-item-flair { + padding: var(--size-4-1); +} +@media (hover: hover) { + .sync-history-list-item-header .tree-item-flair:hover { + opacity: 1; + background-color: var(--background-modifier-hover); + --nav-collapse-icon-color: var(--text-normal); + } +} +.sync-history-list-item .version-group-container { + position: relative; + margin-bottom: var(--size-4-2); +} +.sync-history-list-item .version-group-container .connecting-line { + position: absolute; + top: 0; + left: var(--size-4-6); + height: 100%; + width: var(--indentation-guide-width); + background-color: var(--indentation-guide-color); +} +.sync-history-list-item .version-group-container .version-group-item { + padding: var(--size-4-1) var(--size-2-2) var(--size-4-1) var(--size-4-12); + margin-bottom: var(--size-2-1); + border-radius: var(--radius-s); + font-size: var(--nav-item-size); + line-height: var(--line-height-tight); + color: var(--nav-item-color); + font-variant: tabular-nums; +} +.sync-history-list-item .version-group-container .version-group-item:hover { + background-color: var(--nav-item-background-hover); + color: var(--nav-item-color-hover); +} +.sync-history-list-item .version-group-container .version-group-item.is-active, +.sync-history-list-item .version-group-container .version-group-item.is-active:hover { + background-color: var(--nav-item-background-active); + color: var(--nav-item-color-active); +} +.sync-history-list-item .version-group-container .version-group-item.is-active .u-muted, +.sync-history-list-item .version-group-container .version-group-item.is-active:hover .u-muted { + color: var(--text-on-accent); + opacity: 0.8; +} +@media (hover: hover) { + .sync-history-list-item .version-group-container .version-group-item:hover { + background-color: var(--background-modifier-hover); + } +} +.sync-history-content-container { + background-color: var(--background-primary); + padding: 0; + height: auto; + display: flex; + flex-direction: column; + width: 0; + flex: 1 1 auto; +} +.sync-history-content-container .modal-button-container { + border-top: 1px solid var(--background-modifier-border); + margin: 0; + padding: 12px; + justify-content: center; +} +.sync-history-content-container textarea { + resize: none; + border: none; + box-shadow: none; +} +.sync-history-content-container textarea:hover, +.sync-history-content-container textarea:active, +.sync-history-content-container textarea:focus { + border: none; + box-shadow: none; +} +.sync-history-content-empty { + display: none; +} +.sync-history-content-container.mod-empty .sync-history-content-empty { + display: block; + text-align: center; + padding: 24px; +} +.sync-history-content { + display: flex; + flex-direction: column; + flex-grow: 1; + overflow: hidden; + padding: 0; +} +.sync-history-content .setting-item:first-child { + padding: var(--size-4-4) var(--size-4-6) var(--size-4-4); + border-bottom: 1px solid var(--background-modifier-border); +} +.sync-history-content .setting-item-info { + flex-grow: 1; + font-weight: var(--bold-weight); + overflow: hidden; +} +.sync-history-content .setting-item-info .setting-item-name { + text-overflow: ellipsis; + white-space: nowrap; + overflow: hidden; +} +.sync-history-content .setting-item-control { + justify-content: flex-end; + padding-right: var(--size-4-8); + white-space: nowrap; +} +.sync-history-content .setting-item-control .checkbox-container { + margin-right: var(--size-4-3); +} +.sync-history-preview, +.sync-history-text, +.sync-history-diff { + flex: 1 0 0; + padding: var(--size-4-6); + font-size: var(--font-ui-medium); + background-color: var(--background-primary); +} +.sync-history-preview, +.sync-history-diff { + overflow: auto; + user-select: text; +} +.sync-history-preview { + --cursor-link: default; + font-family: var(--font-text); + font-size: var(--font-text-size); +} +.sync-history-content-other { + flex-grow: 1; + padding: var(--size-4-6); + text-align: center; +} +.sync-history-content-other img { + max-width: 100%; +} +.sync-history-content-container.mod-empty .sync-history-content, +.sync-history-content-container.mod-empty .sync-history-content-buttons { + display: none; +} +.sync-history-content-buttons { + border-top: 1px solid var(--background-modifier-border); + margin: 0; + padding: var(--size-4-3); +} +.mod-selectable { + cursor: var(--cursor); + padding: var(--size-4-2) var(--size-4-4); + border-radius: var(--radius-m); +} +@media (hover: hover) { + .mod-selectable:hover { + background-color: var(--background-modifier-hover); + } +} +.sync-history-load-more-button { + background-color: var(--background-secondary); + height: 32px; + text-align: center; + line-height: 32px; + font-size: var(--font-ui-small); + cursor: var(--cursor); + color: var(--text-muted); + margin: var(--size-4-1) var(--size-4-2) var(--size-4-2); + border-radius: var(--radius-s); +} +@media (hover: hover) { + .sync-history-load-more-button:hover { + background-color: var(--background-modifier-hover); + color: var(--text-normal); + } +} +/* Sync log */ +.modal.mod-sync-log { + height: var(--modal-height); + width: var(--modal-width); + max-width: var(--modal-max-width-narrow); + padding: var(--size-4-4) 0 0 0; +} +.modal.mod-sync-log .modal-title { + padding: 0 var(--size-4-4); +} +.modal.mod-sync-log .modal-content { + display: flex; + flex-direction: column; + overflow: hidden; + padding: 0; +} +.modal.mod-sync-log .modal-button-container { + margin: 0; + padding: var(--size-4-4); +} +.modal.mod-sync-log .setting-item { + padding: 0.75em var(--size-4-4) var(--size-4-4); +} +.modal.mod-sync-log .sync-log-container { + overflow: auto; + flex-grow: 1; + font-family: var(--font-monospace); + font-size: var(--font-ui-smaller); + color: var(--text-muted); + border-top: 1px solid var(--background-modifier-border); + border-bottom: 1px solid var(--background-modifier-border); + padding: var(--size-4-4); + background-color: var(--background-secondary); +} +.modal.mod-sync-log .sync-log-container .list-item { + line-height: var(--line-height-normal); + margin: 0; +} +.modal.mod-sync-log .sync-log-container .list-item.mod-error { + color: var(--text-error); +} +.sync-file-tree-container { + max-height: calc(90vh - 250px); + overflow: auto; +} +.sync-exclude-folder { + display: flex; + margin: var(--size-4-3) 0; +} +.sync-exclude-folder > * { + align-self: center; + display: flex; +} +.sync-exclude-folder-name { + flex-grow: 1; +} +.sync-exclude-folder-remove { + visibility: hidden; + margin-right: 6px; +} +.sync-exclude-folder:hover .sync-exclude-folder-remove { + visibility: visible; +} +.tag-pane-tag.is-active { + background-color: var(--interactive-accent); + color: var(--text-on-accent); +} +.tag-pane-tag.is-active .tag-pane-tag-count { + background-color: var(--background-modifier-hover); + color: var(--text-normal); +} +@media (hover: hover) { + .tag-pane-tag.is-active:hover { + background-color: var(--interactive-accent); + color: var(--text-on-accent); + } +} +.tag-container { + font-size: var(--font-ui-small); + padding: var(--size-4-3) var(--size-4-3) var(--size-4-8); + overflow: auto; +} +.tree-item-children .tag-pane-tag .tag-pane-tag-parent { + display: none; +} +body:not(.is-phone) .workspace-leaf.mod-active .tree-item.has-focus > .tag-pane-tag { + border-radius: var(--radius-s); + box-shadow: 0 0 0 2px var(--background-modifier-border-focus); +} +.mod-canvas-color-1 { + --canvas-color: var(--canvas-color-1); +} +.mod-canvas-color-2 { + --canvas-color: var(--canvas-color-2); +} +.mod-canvas-color-3 { + --canvas-color: var(--canvas-color-3); +} +.mod-canvas-color-4 { + --canvas-color: var(--canvas-color-4); +} +.mod-canvas-color-5 { + --canvas-color: var(--canvas-color-5); +} +.mod-canvas-color-6 { + --canvas-color: var(--canvas-color-6); +} +.workspace-leaf-content[data-type='canvas'] .view-content { + padding: 0; + position: relative; +} +body { + --canvas-color: 192, 192, 192; +} +body.theme-dark { + --canvas-color: 126, 126, 126; +} +.canvas-wrapper { + position: absolute; + width: 100%; + height: 100%; + left: 0; + top: 0; + --resizer-size: 20px; + --shadow-stationary: 0px 0.5px 1px 0.5px rgba(0, 0, 0, 0.1); + --shadow-drag: 0px 2px 10px rgba(0, 0, 0, 0.1); + --shadow-border-accent: 0 0 0 2px var(--color-accent); + --zoom-multiplier: 1; + background-color: var(--canvas-background); + overflow: hidden; + contain: strict; + touch-action: none; + user-select: none; +} +.canvas-wrapper.is-dragging { + cursor: grabbing; +} +.canvas-wrapper.is-dragging iframe:not(.is-controlled), +.canvas-wrapper.is-dragging webview { + pointer-events: none; +} +.canvas-wrapper.is-screenshotting { + z-index: 999999; +} +.canvas-wrapper.is-screenshotting .canvas-card-menu, +.canvas-wrapper.is-screenshotting .canvas-controls { + display: none !important; +} +.canvas-wrapper.is-screenshotting * { + pointer-events: none !important; +} +.canvas-mover { + position: absolute; + width: 100%; + height: 100%; + left: 0; + top: 0; + cursor: grab; +} +.canvas-mover:active { + cursor: grabbing; +} +.canvas-background { + position: absolute; + width: 100%; + height: 100%; + left: 0; + top: 0; + pointer-events: none; +} +.canvas-background circle { + fill: var(--canvas-dot-pattern); +} +.canvas { + position: absolute; + width: 100%; + height: 100%; + left: 0; + top: 0; + transform-origin: 0 0; + pointer-events: none; +} +.canvas > * { + pointer-events: initial; +} +.canvas-selection { + pointer-events: none; + position: absolute; + background-color: hsla(var(--color-accent-hsl), 0.1); + border: 2px solid var(--color-accent); + z-index: -1; +} +.canvas-selection.mod-group-selection { + border-width: 3px; + border-radius: 3px; + background-color: hsla(var(--color-accent-hsl), 0.03); + border-color: hsla(var(--color-accent-hsl), 0.3); + pointer-events: initial; +} +.canvas-wrapper:not(.mod-readonly) .canvas-selection.mod-group-selection { + cursor: grab; +} +.canvas-wrapper:not(.mod-readonly) .canvas-selection.mod-group-selection:active { + cursor: grabbing; +} +.canvas-selection.mod-node-highlight { + border-radius: var(--radius-m); +} +.canvas-controls, +.canvas-card-menu { + display: flex; + position: absolute; + z-index: var(--layer-cover); + font-size: var(--font-ui-medium); +} +.canvas-card-menu { + background-color: var(--background-primary); + border-radius: var(--radius-s); + box-shadow: var(--input-shadow); + bottom: var(--size-4-4); + left: 50%; + transform: translatex(-50%); + align-items: stretch; +} +.is-phone .canvas-card-menu, +.mod-toolbar-open .canvas-card-menu { + display: none; +} +.theme-dark .canvas-card-menu { + background-color: var(--background-secondary); +} +.canvas-card-menu .canvas-card-menu-divider { + width: 1px; + background-color: var(--background-modifier-border); +} +.canvas-card-menu .canvas-card-menu-button { + color: var(--text-muted); + height: auto; + display: flex; + line-height: 1; + align-items: center; + justify-content: center; + padding: var(--size-4-2); + --icon-size: var(--icon-xl); + --icon-stroke: var(--icon-xl-stroke-width); +} +@media (hover: hover) { + .canvas-card-menu .canvas-card-menu-button:hover { + color: var(--color-accent); + } +} +.canvas-card-menu .canvas-card-menu-button svg { + fill: var(--background-primary); +} +.theme-dark .canvas-card-menu .canvas-card-menu-button svg { + fill: var(--background-secondary); +} +.canvas-card-menu .canvas-card-menu-button.mod-draggable { + cursor: grab; +} +.canvas-card-menu .canvas-card-menu-button.mod-draggable:active { + cursor: grabbing; +} +.canvas-card-menu .canvas-card-menu-button.mod-draggable svg { + transition: 90ms transform ease-out; +} +@media (hover: hover) { + .canvas-card-menu .canvas-card-menu-button.mod-draggable:hover svg { + transform: translateY(-6px); + filter: drop-shadow(0px 6px 2px rgba(0, 0, 0, 0.1)); + } +} +.canvas-controls { + right: var(--size-4-2); + top: var(--size-4-2); + gap: var(--size-4-2); + display: flex; + flex-direction: column; +} +.canvas-control-group { + border-radius: var(--radius-s); + background-color: var(--background-primary); + border: 1px solid var(--background-modifier-border); + box-shadow: var(--input-shadow); + display: flex; + flex-direction: column; + overflow: hidden; +} +.canvas-control-item { + border-radius: 0; + box-shadow: none; + height: auto; + display: flex; + line-height: 1; + font-size: inherit; + align-items: center; + justify-content: center; + cursor: var(--cursor); + padding: var(--size-4-2); + border-bottom: 1px solid var(--background-modifier-border); + color: var(--text-muted); + background-color: var(--interactive-normal); + --icon-size: var(--icon-s); + --icon-stroke: var(--icon-s-stroke-width); +} +.canvas-control-item:last-child { + border-bottom: none; +} +@media (hover: hover) { + .canvas-control-item:hover { + color: var(--text-normal); + background-color: var(--interactive-hover); + } +} +.canvas-control-item.is-active { + color: var(--color-accent); +} +.canvas-control-item.is-disabled svg { + color: var(--text-faint); +} +.canvas-control-item svg { + pointer-events: none; +} +.canvas-node-container { + background-color: var(--background-primary); + border-radius: var(--radius-m); + border: 2px solid rgb(var(--canvas-color)); + contain: strict; + display: flex; + flex-direction: column; + overflow: hidden; + position: absolute; + left: 0; + top: 0; + width: 100%; + height: 100%; + box-shadow: var(--shadow-stationary); +} +.canvas-wrapper:not(.mod-readonly) .canvas-node:not(.is-editing) .canvas-node-container { + cursor: grab; +} +.canvas-wrapper:not(.mod-readonly) .canvas-node:not(.is-editing) .canvas-node-container:active { + cursor: grabbing; +} +.canvas-node-label { + position: absolute; + left: 0; + top: calc(-1 * var(--size-4-1) * var(--zoom-multiplier)); + transform: translate(0, -100%) scale(var(--zoom-multiplier)); + transform-origin: bottom left; + max-width: calc(100% / var(--zoom-multiplier)); + overflow: hidden; + text-overflow: ellipsis; + white-space: nowrap; + color: var(--canvas-card-label-color); + --icon-size: 1em; +} +body:not(.is-ios) .canvas-wrapper.mod-animating .canvas-node-label { + transition: transform 500ms cubic-bezier(0.16, 1, 0.3, 1); +} +.canvas-node-label svg { + position: relative; + top: 2px; + margin-right: var(--size-4-1); +} +.canvas-node-label.mod-hover-label { + opacity: 0; +} +@media (hover: hover) { + .canvas-node-label:hover { + color: var(--text-muted); + } + .canvas-node:hover .canvas-node-label.mod-hover-label { + opacity: 1; + } +} +@media (hover: none) { + .canvas-node.is-focused .canvas-node-label.mod-hover-label { + opacity: 1; + } +} +.canvas-wrapper.mod-zoomed-out .canvas-node-label { + display: none; +} +.canvas-node-placeholder { + display: flex; + align-items: center; + justify-content: center; + text-align: center; + width: 100%; + height: 100%; + overflow: hidden; + overflow-wrap: anywhere; + padding: var(--size-4-6); + font-size: 32px; + font-weight: var(--font-semibold); +} +.canvas-node-placeholder::after { + border-radius: var(--radius-s); + content: ' '; + display: block; + position: absolute; + top: var(--size-4-4); + right: var(--size-4-4); + bottom: var(--size-4-4); + left: var(--size-4-4); + background-color: rgba(var(--canvas-color), 0.1); +} +.canvas-icon-placeholder { + display: flex; + width: 40%; + height: 40%; +} +.canvas-icon-placeholder svg { + opacity: 0.3; + color: rgb(var(--canvas-color)); + width: 100%; + height: 100%; +} +.canvas-node-interaction-layer { + position: absolute; + width: 0; + height: 0; + pointer-events: none; +} +.canvas-node-interaction-layer > * { + pointer-events: initial; +} +.canvas-node { + --shadow-border-themed-inset: inset 0 0 0 1px rgb(var(--canvas-color)); + --shadow-border-themed: 0 0 0 2px rgb(var(--canvas-color)); + position: absolute; + width: 0; + height: 0; +} +.canvas-node.is-dragging { + pointer-events: none; +} +.canvas-node.is-dragging .canvas-node-container { + box-shadow: var(--shadow-drag); +} +.canvas-node.is-selected, +.canvas-node.is-focused { + touch-action: initial; +} +.canvas-node.is-selected .canvas-node-label, +.canvas-node.is-focused .canvas-node-label { + color: var(--text-muted); +} +.canvas-node.is-selected .canvas-node-container, +.canvas-node.is-focused .canvas-node-container { + border-color: var(--color-accent); + box-shadow: var(--shadow-stationary), var(--shadow-border-accent); +} +.canvas-node.is-selected.is-dragging .canvas-node-container, +.canvas-node.is-focused.is-dragging .canvas-node-container { + box-shadow: var(--shadow-drag), var(--shadow-border-accent); +} +.canvas-node.is-themed .canvas-node-container { + border-color: rgba(var(--canvas-color), 0.7); + box-shadow: inset 0 0 0 1px rgba(var(--canvas-color), 0.7), var(--shadow-stationary); +} +.canvas-node.is-selected.is-themed .canvas-node-container, +.canvas-node.is-focused.is-themed .canvas-node-container { + border-color: rgb(var(--canvas-color)); + box-shadow: var(--shadow-border-themed-inset), var(--shadow-border-themed); +} +.canvas-node.is-selected.is-themed.is-dragging .canvas-node-container, +.canvas-node.is-focused.is-themed.is-dragging .canvas-node-container { + box-shadow: var(--shadow-border-themed-inset), var(--shadow-border-themed); +} +.canvas-node.is-dummy { + cursor: grabbing; +} +.canvas-node.is-dummy .canvas-node-container { + border: 4px solid var(--color-accent); + box-shadow: 0px 2px 10px rgba(0, 0, 0, 0.15); + background-color: hsla(var(--color-accent-hsl), 0.2); +} +.canvas-node.is-focused:not(.is-dragging) .canvas-node-content-blocker { + display: none; +} +.canvas-node-content-blocker { + position: absolute; + width: 100%; + height: 100%; + left: 0; + top: 0; + z-index: var(--layer-cover); +} +.canvas-node-group:not(.is-focused):not(.is-selected) { + pointer-events: none; +} +.canvas-node-group .canvas-node-resizer { + pointer-events: initial; +} +.canvas-node-group .canvas-node-container { + background-color: transparent; +} +.canvas-node-group .canvas-node-content { + background-color: rgba(var(--canvas-color), 0.07); +} +.canvas-group-label { + position: absolute; + left: 0; + top: calc(-1 * var(--size-4-1) * var(--zoom-multiplier)); + transform: translate(0, -100%) scale(var(--zoom-multiplier)); + transform-origin: bottom left; + max-width: calc(100% / var(--zoom-multiplier)); + overflow: hidden; + text-overflow: ellipsis; + white-space: nowrap; + pointer-events: initial; + font-size: 1.5em; + padding: var(--size-4-1) var(--size-4-2); + border-radius: var(--radius-s); + color: var(--text-muted); + background-color: rgba(var(--canvas-color), 0.1); + line-height: 1; +} +body:not(.is-ios) .canvas-wrapper.mod-animating .canvas-group-label { + transition: transform 500ms cubic-bezier(0.16, 1, 0.3, 1); +} +.canvas-wrapper:not(.mod-readonly) .canvas-group-label { + cursor: grab; +} +.canvas-wrapper:not(.mod-readonly) .canvas-group-label:active { + cursor: grabbing; +} +.canvas-group-label[contenteditable="true"] { + cursor: text; + background-color: var(--background-primary); + box-shadow: 0 0 0 2px rgb(var(--canvas-color)); + color: var(--text-normal); + text-overflow: initial; +} +.canvas-node-group.is-themed .canvas-group-label:not([contenteditable="true"]) { + background-color: rgb(var(--canvas-color)); +} +.canvas-node-group.is-themed .canvas-group-label:not([contenteditable="true"]).mod-foreground-light { + color: var(--text-on-accent); +} +.canvas-node-group.is-themed .canvas-group-label:not([contenteditable="true"]).mod-foreground-dark { + color: var(--text-on-accent-inverted); +} +.canvas-node-content { + backface-visibility: hidden; + width: 100%; + height: 100%; + overflow: hidden; + position: relative; +} +.canvas-node-content.markdown-embed { + border: none; + padding: 0; +} +.canvas-node-content.markdown-embed .inline-title { + cursor: text; +} +.canvas-node-content.markdown-embed > .markdown-embed-content > .markdown-preview-view { + padding: 0 var(--size-4-6); + display: flex; + flex-direction: column; +} +.canvas-wrapper:not(.mod-readonly) .canvas-node-content.markdown-embed > .markdown-embed-content > .markdown-preview-view { + user-select: none; + -webkit-user-select: none; +} +.canvas-node-content.markdown-embed > .markdown-embed-content > .markdown-preview-view::before, +.canvas-node-content.markdown-embed > .markdown-embed-content > .markdown-preview-view::after { + content: " "; + display: block; + min-height: min(calc(var(--canvas-node-height) * 0.1 - 3px), var(--size-4-6)); + max-height: var(--size-4-4); + flex: 1 1 0; +} +.canvas-node-content.markdown-embed > .markdown-embed-content > .markdown-preview-view > .markdown-preview-sizer { + flex: 1 0 0; +} +.canvas-node-content.markdown-embed > .markdown-embed-content > .markdown-preview-view .callout { + mix-blend-mode: normal; +} +.canvas-node-content.markdown-embed > .markdown-embed-content > .markdown-preview-view .markdown-preview-pusher + div > *:first-child { + margin-top: 0; +} +.canvas-node-content.markdown-embed > .markdown-embed-content > .markdown-preview-view .mod-header + div > *:first-child { + margin-top: 0; +} +.canvas-node-content.markdown-embed > .markdown-embed-content > .markdown-preview-view .markdown-preview-sizer > div:last-child > *:last-child { + margin-bottom: 0; +} +.is-focused .canvas-node-content.markdown-embed > .markdown-embed-content > .markdown-preview-view { + transform: translateZ(0); +} +.canvas-node.is-themed .canvas-node-content { + background-color: rgba(var(--canvas-color), 0.07); +} +.canvas-node-content.media-embed { + justify-content: center; + align-items: center; + display: flex; +} +.canvas-node-content.media-embed img, +.canvas-node-content.media-embed video, +.canvas-node-content.media-embed audio { + flex-shrink: 0; + flex-grow: 1; +} +.canvas-node-content.media-embed img:not([width]), +.canvas-node-content.media-embed video, +.canvas-node-content.media-embed audio { + max-width: 100%; +} +.canvas-node-resizer { + position: absolute; + height: calc(var(--resizer-size) * var(--zoom-multiplier)); + width: calc(var(--resizer-size) * var(--zoom-multiplier)); +} +.is-selected .canvas-node-resizer { + pointer-events: none; +} +body.is-mobile .canvas-node-resizer { + --zoom-multiplier: 1; +} +.canvas-wrapper.mod-readonly .canvas-node-resizer { + display: none; +} +.canvas-node-resizer[data-resize='top'] { + left: 0; + right: 0; + width: auto; + top: calc(var(--resizer-size) * var(--zoom-multiplier) * -0.5); + cursor: ns-resize; +} +.canvas-node-resizer[data-resize='bottom'] { + left: 0; + right: 0; + width: auto; + bottom: calc(var(--resizer-size) * var(--zoom-multiplier) * -0.5); + cursor: ns-resize; +} +.canvas-node-resizer[data-resize='left'] { + top: 0; + bottom: 0; + height: auto; + left: calc(var(--resizer-size) * var(--zoom-multiplier) * -0.5); + cursor: ew-resize; +} +.canvas-node-resizer[data-resize='right'] { + top: 0; + bottom: 0; + height: auto; + right: calc(var(--resizer-size) * var(--zoom-multiplier) * -0.5); + cursor: ew-resize; +} +.canvas-node-resizer[data-resize='topright'] { + right: calc(var(--resizer-size) * var(--zoom-multiplier) * -0.5); + top: calc(var(--resizer-size) * var(--zoom-multiplier) * -0.5); + cursor: nesw-resize; +} +.canvas-node-resizer[data-resize='bottomright'] { + right: calc(var(--resizer-size) * var(--zoom-multiplier) * -0.5); + bottom: calc(var(--resizer-size) * var(--zoom-multiplier) * -0.5); + cursor: nwse-resize; +} +.canvas-node-resizer[data-resize='topleft'] { + left: calc(var(--resizer-size) * var(--zoom-multiplier) * -0.5); + top: calc(var(--resizer-size) * var(--zoom-multiplier) * -0.5); + cursor: nwse-resize; +} +.canvas-node-resizer[data-resize='bottomleft'] { + left: calc(var(--resizer-size) * var(--zoom-multiplier) * -0.5); + bottom: calc(var(--resizer-size) * var(--zoom-multiplier) * -0.5); + cursor: nesw-resize; +} +.is-mobile .canvas-node-resizer { + pointer-events: none; +} +.is-mobile .canvas-wrapper:not(.mod-readonly) .canvas-node-interaction-layer .canvas-node-resizer[data-resize='topright'], +.is-mobile .canvas-wrapper:not(.mod-readonly) .canvas-node-interaction-layer .canvas-node-resizer[data-resize='bottomright'], +.is-mobile .canvas-wrapper:not(.mod-readonly) .canvas-node-interaction-layer .canvas-node-resizer[data-resize='topleft'], +.is-mobile .canvas-wrapper:not(.mod-readonly) .canvas-node-interaction-layer .canvas-node-resizer[data-resize='bottomleft'] { + pointer-events: all; + width: 20px; + height: 20px; + display: block; + background-color: var(--background-primary); + border: 2px solid var(--color-accent); + border-radius: 3px; +} +.canvas-node-connection-point { + width: calc(var(--resizer-size) * var(--zoom-multiplier)); + height: calc(var(--resizer-size) * var(--zoom-multiplier)); + position: absolute; + pointer-events: all; + cursor: pointer; +} +.canvas-node-connection-point[data-side='top'] { + top: 1px; + left: calc(50% - var(--resizer-size) * var(--zoom-multiplier) / 2); +} +.canvas-node-connection-point[data-side='right'] { + right: 1px; + top: calc(50% - var(--resizer-size) * var(--zoom-multiplier) / 2); +} +.canvas-node-connection-point[data-side='bottom'] { + bottom: 1px; + left: calc(50% - var(--resizer-size) * var(--zoom-multiplier) / 2); +} +.canvas-node-connection-point[data-side='left'] { + left: 1px; + top: calc(50% - var(--resizer-size) * var(--zoom-multiplier) / 2); +} +.canvas-node-connection-point::after { + content: ' '; + background-color: var(--color-accent); + border-radius: 50%; + border: 3px solid var(--background-modifier-border); + box-sizing: border-box; + display: block; + height: calc(var(--resizer-size) * var(--zoom-multiplier)); + opacity: 0; + position: relative; + width: calc(var(--resizer-size) * var(--zoom-multiplier)); + left: 0; + top: 0; +} +.is-mobile .canvas-node-interaction-layer .canvas-node-connection-point::after, +.canvas-node-resizer:hover .canvas-node-connection-point::after { + opacity: 1; +} +.canvas-snaps { + position: absolute; + width: 100%; + height: 100%; + left: 0; + top: 0; + overflow: visible; + pointer-events: none; + opacity: 0.6; +} +.canvas-snaps line { + stroke-width: 1px; + stroke: var(--color-accent); +} +.canvas-snaps circle { + fill: var(--color-accent); +} +.canvas-edges { + position: absolute; + width: 100%; + height: 100%; + left: 0; + top: 0; + overflow: visible; + pointer-events: none; +} +.canvas-edges > * { + pointer-events: initial; +} +.canvas-edges path.canvas-display-path { + pointer-events: none; + stroke-width: calc(3px * var(--zoom-multiplier)); + stroke: rgb(var(--canvas-color)); + fill: none; + transition: stroke-width 100ms ease-out; +} +.canvas-edges path.canvas-interaction-path { + pointer-events: stroke; + stroke-width: calc(24px * var(--zoom-multiplier)); + stroke-linecap: round; + stroke: transparent; + fill: none; + transition: stroke 100ms ease-out; +} +.canvas-wrapper:not(.mod-readonly) .canvas-edges path.canvas-interaction-path { + cursor: grab; +} +.canvas-wrapper:not(.mod-readonly) .canvas-edges path.canvas-interaction-path:active { + cursor: grabbing; +} +.canvas-edges polygon.canvas-path-end { + pointer-events: none; + stroke: rgb(var(--canvas-color)); + fill: rgb(var(--canvas-color)); + stroke-linecap: round; + stroke-linejoin: round; + stroke-width: 1px; + transform-box: fill-box; + transform: scale(var(--zoom-multiplier)); + transform-origin: center top; +} +.canvas-edges g.is-focused path.canvas-display-path, +.canvas:not(.is-connecting) .canvas-edges g:hover path.canvas-display-path { + stroke-width: calc(5.5px * var(--zoom-multiplier)); +} +.canvas-edges g.is-focused path.canvas-interaction-path, +.canvas:not(.is-connecting) .canvas-edges g:hover path.canvas-interaction-path { + stroke: rgba(var(--canvas-color), 0.1); +} +.canvas-path-label-wrapper { + position: absolute; + width: fit-content; + height: fit-content; +} +.canvas-path-label { + font-size: calc(var(--font-ui-large) * var(--zoom-multiplier)); + background-color: var(--background-primary); + border-radius: var(--radius-s); + padding: calc(var(--size-2-3) * var(--zoom-multiplier)); + line-height: var(--line-height-tight); + white-space: pre-wrap; + transform: translate(-50%, -50%); + text-align: center; + max-width: calc(17em * var(--zoom-multiplier)); +} +.canvas-path-label.is-editing { + border-color: rgb(var(--canvas-color)); + box-shadow: var(--shadow-stationary), 0 0 0 calc(3px * var(--zoom-multiplier)) rgb(var(--canvas-color)); +} +.canvas-menu-container { + position: absolute; + width: 0; + height: 0; + top: 0; + left: 0; +} +.canvas-menu { + position: relative; + width: fit-content; + height: fit-content; + line-height: 1; + background-color: var(--background-primary); + border: 1px solid var(--background-modifier-border); + border-radius: var(--radius-s); + box-shadow: 0px 2px 10px rgba(0, 0, 0, 0.07); + display: flex; + padding: var(--size-2-1); + gap: 1px; +} +.canvas-menu .clickable-icon { + padding: var(--size-2-3) var(--size-4-2); +} +.canvas-submenu { + display: flex; + position: absolute; + top: calc(100% + 5px); + left: 50%; + transform: translateX(-50%); + padding: var(--size-4-2); + border: 1px solid var(--background-modifier-border); + background-color: var(--background-primary); + border-radius: var(--radius-s); + box-shadow: 0px 2px 10px rgba(0, 0, 0, 0.07); + overflow: hidden; + gap: 1px; +} +.canvas-submenu .clickable-icon { + padding: var(--size-2-2) var(--size-2-3); +} +.canvas-color-picker-item { + cursor: var(--cursor); + width: 24px; + height: 24px; + margin: 2px; + border-radius: 12px; + border: 2px solid var(--background-primary); + background-color: rgb(var(--canvas-color)); +} +.canvas-color-picker-item.is-active { + box-shadow: 0 0 0 2px rgb(var(--canvas-color)); +} +@media (hover: hover) { + .canvas-color-picker-item:hover { + box-shadow: 0 0 0 2px rgb(var(--canvas-color)); + } +} +.canvas-color-picker-item input[type="color"] { + margin: -4px 0 0 -2px; + --swatch-width: 20px; + --swatch-height: 20px; + opacity: 0; +} +.canvas-color-picker-item.canvas-color-picker-custom:not(.is-active) { + background: conic-gradient(var(--color-red), var(--color-yellow), var(--color-green), var(--color-blue), var(--color-purple), var(--color-red)); +} +@media (hover: hover) { + .canvas-color-picker-item.canvas-color-picker-custom:not(.is-active):hover { + box-shadow: 0 0 0 2px var(--background-modifier-border-hover); + } +} +.canvas-empty-embed-container { + align-items: center; + display: flex; + flex-direction: column; + gap: var(--size-4-6); + justify-content: center; + height: 100%; + padding: var(--size-4-3); + text-align: center; +} +.canvas-empty-embed-action-list { + display: flex; + flex-direction: column; + gap: var(--size-4-3); +} +.canvas-empty-embed-action-list button { + font-size: var(--font-text-size); + padding: var(--size-4-5) var(--size-4-9); +} +.canvas-help { + display: flex; + flex-direction: column; + gap: var(--size-4-3); +} +.canvas-instruction { + display: flex; + justify-content: space-between; +} +.canvas-instruction-desc { + display: flex; + gap: var(--size-4-1); +} +.canvas-instruction-desc .setting-hotkey { + display: inline; + align-self: unset; + padding: var(--size-4-1); + margin: 0; + line-height: 1; +} +.canvas-placeholder-message { + max-width: 70vw; + background: hsla(var(--color-accent-hsl), 0.1); + border-radius: var(--radius-m); + color: var(--color-accent); + font-size: var(--font-ui-large); + line-height: var(--line-height-normal); + padding: var(--size-4-4) var(--size-4-6); + pointer-events: none; + position: absolute; + text-align: center; + transform: translate(-50%, -50%); +} +.canvas-minimap { + width: 100%; + height: 100%; + padding: var(--size-4-1); +} +.inline-embed > .canvas-minimap { + max-height: var(--embed-canvas-max-height); +} +.canvas-minimap rect { + stroke-width: 5px; + stroke: var(--background-modifier-border); + fill: var(--background-modifier-border); + fill-opacity: 0.65; +} +.canvas-minimap rect.is-themed { + stroke: rgb(var(--canvas-color)); + fill: rgb(var(--canvas-color)); + fill-opacity: 0.5; +} +.canvas-minimap path { + stroke: #c0c0c0; + fill: none; +} +.canvas-minimap path.is-themed { + stroke: rgb(var(--canvas-color)); +} +.canvas-cursor { + position: absolute; + width: 1px; + height: 1px; + border: 5px solid var(--color-accent); + border-radius: 5px; + pointer-events: none; +} +.canvas-watermark * { + font-family: var(--font-default) !important; +} +.browser-favicon-container { + display: flex; + align-items: center; +} +.browser-favicon-container > * { + height: var(--icon-size); + max-width: var(--icon-size); +} +.view-action.mod-browser { + --icon-color: var(--icon-color-active); + --icon-color-hover: var(--icon-color-active); +} +.browser-container { + height: 100%; + display: flex; + flex-direction: column; +} +.workspace-leaf-content[data-type="browser"] .view-header { + gap: 0; +} +.view-header-always-show { + display: flex !important; +} +.view-header-reload-button { + display: flex; + align-items: center; + --icon-size: var(--icon-s); +} +.browser-address { + width: 100%; + display: flex; + margin: 0 2px; +} +.browser-address input { + flex-grow: 1; + min-width: 50px; +} +.browser-address-container { + padding: 0 var(--size-4-2); +} +.browser-address-container::after { + /* Remove the gradient normally at the end of the titleContainerEl */ + background: transparent !important; +} +.browser-addressbar-suggestion.suggestion-item { + gap: var(--size-4-2); + align-items: center; +} +.browser-addressbar-suggestion.suggestion-item .suggestion-flair-left, +.browser-addressbar-suggestion.suggestion-item .suggestion-icon:first-child { + color: var(--text-muted); + --icon-size: var(--icon-s); + --icon-stroke: var(--icon-s-stroke-width); + display: flex; + min-width: var(--icon-s); +} +.browser-addressbar-suggestion.suggestion-item .suggestion-flair-left img, +.browser-addressbar-suggestion.suggestion-item .suggestion-icon:first-child img { + height: var(--icon-size); + max-width: var(--icon-size); +} +.browser-addressbar-suggestion.suggestion-item .suggestion-icon:last-child:empty { + display: none; +} +.browser-addressbar-suggestion.suggestion-item > .suggestion-content { + align-items: baseline; + flex-direction: row; + flex-grow: 1; +} +.browser-addressbar-suggestion.suggestion-item > .suggestion-content > .suggestion-title { + max-width: 75%; + flex-shrink: 0; + overflow: hidden; + text-overflow: ellipsis; + text-wrap: nowrap; + font-size: var(--font-ui-medium); +} +.browser-addressbar-suggestion.suggestion-item > .suggestion-content > .suggestion-url { + overflow: hidden; + text-overflow: ellipsis; + text-wrap: nowrap; + font-size: var(--font-ui-small); + color: var(--text-muted); +} +.browser-addressbar-suggestion.suggestion-item > .suggestion-content .suggestion-title + .suggestion-url { + margin-left: var(--size-4-2); +} +.browser-addressbar-suggestion.suggestion-item > .suggestion-content .suggestion-title:empty + .suggestion-url { + margin-left: 0; +} +.view-content.browser-content { + padding: 0; +} +.browser-content { + border-top: 1px solid var(--divider-color); + height: 100%; + display: flex; + flex-direction: column; +} +.browser-content webview { + flex-grow: 1; + width: 100%; +} +.browser-content .reader-mode-content { + overflow-y: auto; +} +.browser-content .reader-mode-content.is-readable-line-width .markdown-preview-sizer { + max-width: var(--file-line-width); + margin-left: auto; + margin-right: auto; +} +.browser-content .markdown-preview-view .external-link { + /* Hide the external link icon */ + background-image: none; + padding-right: 0; +} +.browser-content .error-notice { + max-width: var(--file-line-width); + margin: 25% auto 0; + padding: var(--file-margins); +} +/* History View */ +.browser-history-view-item { + text-wrap: nowrap; + overflow: hidden; +} +/* Settings */ +textarea.browser-adblock-lists { + flex-grow: 1; +} +.starter.is-hidden-frameless .titlebar { + display: block; +} +.starter { + -webkit-user-select: none; + padding-top: 0! important; +} +.starter .titlebar { + background-color: transparent; + border: none; +} +.starter .titlebar-inner .titlebar-text { + display: none; +} +.starter-screen { + display: flex; + flex-direction: column; + background-color: var(--background-primary); + width: 100%; + height: 100%; +} +.starter-screen-inner { + flex-grow: 1; + display: flex; + height: calc(100% - 24px); +} +.splash { + align-items: center; + background-color: var(--background-primary); + display: flex; + flex-direction: column; + justify-content: center; + flex: 1 1 auto; + text-align: center; + padding: 36px 0 0; +} +.splash-brand { + flex: 0 0 content; + padding: 20px 0; +} +.splash-brand-logo-text { + margin-top: 20px; + color: white; +} +.splash-brand-version { + color: var(--text-muted); + margin-top: 8px; + font-size: var(--font-ui-small); +} +.help-options-container { + flex: 1 0 0; + overflow: auto; + width: 100%; + max-width: 82%; + text-align: left; + padding: var(--size-4-6) 0; +} +.help-options-container::-webkit-scrollbar { + display: none; +} +.help-options-container .setting-item-description { + max-width: 30em; + padding-right: 12px; +} +.help-options-container .setting-icon .svg-icon { + stroke-width: 1px; + --icon-size: 48px; + color: var(--text-faint); +} +.open-vault-options-container { + flex: 1 0 0; + overflow: auto; + width: 100%; + position: relative; +} +.open-vault-options-container::-webkit-scrollbar { + display: none; +} +.open-vault-options { + position: absolute; + top: 0; + left: 0; + width: 100%; + height: 100%; + padding: 12px 36px; + text-align: left; + overflow-y: auto; + display: flex; + flex-direction: column; +} +.open-vault-options input[type='text'] { + width: 150px; +} +.open-vault-options .setting-item-control button { + width: 100px; +} +.open-vault-options .back-button { + display: flex; + align-items: center; + -webkit-app-region: no-drag; + color: var(--text-muted); + user-select: none; + cursor: var(--cursor); +} +@media (hover: hover) { + .open-vault-options .back-button:hover { + color: var(--text-normal); + } +} +.open-vault-options .setting-item-description { + display: -webkit-box; + -webkit-line-clamp: 3; + -webkit-box-orient: vertical; + overflow: hidden; +} +.open-vault-options.mod-login { + justify-content: flex-start; +} +.open-vault-options.mod-login input[type='text'] { + width: 250px; +} +.quick-start-container { + margin-bottom: 10px; +} +.quick-start-container button { + font-size: var(--font-ui-medium); + padding: 8px 60px; +} +.quick-start-container + .setting-item { + border-top: none; +} +.open-folder-input[type='text'] { + font-size: var(--font-ui-small); + width: 200px; + height: 28px; +} +.browse-folder-button { + margin-left: 10px; +} +.open-folder-button { + margin-top: 14px; + padding: 6px 36px; +} +.starter .notice { + top: 38px; +} +.setting-item.mod-change-language { + -webkit-app-region: no-drag; +} +.setting-item.mod-change-language .setting-item-info { + flex-grow: 0; +} +.setting-item.mod-change-language .setting-item-control { + flex-grow: 1; + justify-content: flex-start; +} +.setting-item.mod-change-language select { + width: 100%; + max-width: 100%; +} +.setting-item.mod-change-language .setting-item-name { + color: var(--text-faint); + position: relative; + top: 3px; + cursor: var(--cursor); +} +@media (hover: hover) { + .setting-item.mod-change-language .setting-item-name:hover { + color: var(--text-muted); + } +} +.setting-icon { + display: flex; + color: var(--text-muted); + margin-right: 24px; +} +.recent-vaults { + background-color: var(--background-secondary); + border-right: 1px solid var(--background-modifier-border); + padding: var(--size-4-8) 0 0 0; + flex-shrink: 0; + width: 280px; + overflow-y: hidden; + height: 100%; +} +.recent-vaults-list { + overflow-y: auto; + height: 100%; + padding: var(--size-4-2); + display: flex; + flex-direction: column; +} +.recent-vaults-list:after { + -webkit-app-region: drag; + display: block; + content: ' '; + width: 100%; + height: 100px; + flex-grow: 1; +} +.recent-vaults-list-item { + -webkit-app-region: no-drag; + border-radius: var(--radius-s); + margin-bottom: var(--size-4-1); + padding: var(--size-4-2) var(--size-4-6) var(--size-4-2) var(--size-4-3); + cursor: var(--cursor); + position: relative; +} +@media (hover: hover) { + .recent-vaults-list-item:hover { + background-color: var(--background-modifier-hover); + color: var(--text-on-accent); + } +} +.recent-vaults-list-item-name, +.recent-vaults-list-item-path { + word-break: break-all; +} +.recent-vaults-list-item-name { + border-radius: 2px; + border: 1px solid transparent; +} +.recent-vaults-list-item-name[contenteditable] { + cursor: text; + border-color: var(--interactive-accent); + background-color: var(--background-modifier-hover); + font-size: 0.9em; + padding: 0 var(--size-4-1); +} +.recent-vaults-list-item-path { + font-size: var(--font-ui-smaller); + color: var(--text-muted); + line-height: 16px; +} +.recent-vaults-list-item-option-button { + position: absolute; + top: var(--size-4-3); + right: var(--size-4-1); + color: var(--text-faint); + width: 30px; + height: 30px; + line-height: 36px; + text-align: center; + transition: background-color 200ms ease-in-out; +} +.recent-vaults-list-item-option-button:hover { + color: var(--text-normal); +} +:root { + --safe-area-inset-top: env(safe-area-inset-top); + --safe-area-inset-bottom: env(safe-area-inset-bottom); + --safe-area-inset-left: env(safe-area-inset-left); + --safe-area-inset-right: env(safe-area-inset-right); +} +.is-mobile { + --ribbon-width: 58px; + --view-header-height: 50px; + --mobile-toolbar-height: 40px; + --caret-color: var(--text-accent); + --font-ui-smaller: calc(var(--font-text-size) * 0.8); + --font-ui-small: calc(var(--font-text-size) * 0.937); + --font-ui-medium: var(--font-text-size); + --font-ui-large: calc(var(--font-text-size) * 1.2); + --icon-s: 18px; + --icon-m: 20px; + --icon-l: 24px; + --icon-l-stroke-width: 1.8px; + --icon-opacity: 1; + --input-height: 40px; + --input-shadow: none; + --input-shadow-hover: none; + --input-font-weight: var(--font-medium); + --input-border-width: 0px; + --interactive-normal: var(--background-secondary); + --mobile-sidebar-width: 340px; + --mobile-sidebar-max-width: 500px; + --nav-item-padding: var(--size-2-3) var(--size-4-2) var(--size-2-3) var(--size-4-6); + --nav-item-color: var(--text-normal); + --search-clear-button-size: 16px; + --search-icon-size: 20px; + --settings-home-background: var(--background-secondary); + --slider-thumb-border-width: 0px; + --slider-thumb-height: 24px; + --slider-thumb-width: 24px; + --slider-thumb-y: -9px; + --slider-track-height: 6px; + --swatch-shadow: none; + --swatch-height: 40px; + --swatch-width: 40px; + --swatch-radius: 40px; + --toggle-width: 48px; + --toggle-radius: 26px; + --toggle-thumb-radius: 26px; + --toggle-thumb-height: 26px; + --toggle-thumb-width: 26px; + --file-margins: var(--size-4-2) var(--size-4-5); + --background-modifier-cover: rgba(0, 0, 0, 0.25); + --background-modifier-form-field: var(--background-secondary); + --keyboard-background: var(--background-primary); + --checkbox-size: 17px; +} +.is-mobile.theme-dark { + --color-base-00: #000; + --color-base-10: #111; + --color-base-20: #1e1e1e; + --tag-background: hsla(var(--interactive-accent-hsl), 0.2); + --search-result-background: var(--background-secondary); + --background-modifier-form-field: var(--background-modifier-border); + --background-modifier-cover: rgba(0, 0, 0, 0.5); + --background-modifier-hover: rgba(var(--mono-rgb-100), 0.15); + --settings-home-background: var(--background-primary); +} +.is-tablet { + --nav-item-padding: var(--size-2-3) var(--size-4-2) var(--size-2-3) var(--size-4-6); + --tab-font-size: var(--font-ui-smaller); +} +.is-tablet.theme-dark { + --titlebar-background: var(--background-primary); + --titlebar-background-focused: var(--background-primary); + --interactive-normal: var(--background-modifier-border); + --modal-background: var(--background-secondary); +} +.is-phone { + --border-width: 0.5pt; + --divider-width: 0.5pt; + --tab-outline-width: 0.5pt; + --modal-header-height: 44px; + --modal-community-sidebar-width: 100%; + --metadata-label-width: 7.5em; + --nav-item-size: var(--font-ui-medium); +} +body.is-mobile { + height: 100vh; + width: 100vw; + caret-color: var(--caret-color); + padding-bottom: 50px; +} +.is-mobile .markdown-source-view.mod-cm6 .cm-content, +.is-mobile .mod-cm6 .cm-line { + caret-color: var(--caret-color); +} +.is-mobile .markdown-source-view.mod-cm6 .cm-gutters { + margin-left: -18px; +} +.is-mobile .workspace > .mod-root { + padding-left: var(--safe-area-inset-left); +} +body.is-mobile { + padding: var(--safe-area-inset-top) 0 0 0; + -webkit-text-size-adjust: 100%; +} +.is-mobile .workspace-split.mod-left-split, +.is-mobile .workspace-split.mod-right-split { + display: none; +} +.is-mobile .tree-item .tree-item-self { + padding-right: var(--size-4-2); +} +.is-mobile .input-label { + display: block; + text-align: left; + color: var(--text-muted); + margin-bottom: 8px; +} +.is-mobile input[type='text'] { + width: 100%; +} +.is-mobile .markdown-rendered pre:not(:hover) > button.copy-code-button { + display: block; +} +.is-mobile .markdown-rendered button.copy-code-button { + width: auto; +} +.is-mobile .empty-state-action-list { + margin-top: 40px; +} +.is-mobile .empty-state-action { + background-color: var(--background-primary-alt); + margin: 12px 0; + padding: 6px 30px; + border-radius: var(--button-radius); + text-align: center; +} +.is-mobile .login-field { + width: 100%; + margin: 0.5em 0 0.5em 0; +} +.is-mobile .login-field input { + width: 100%; +} +.is-mobile .markdown-rendered .heading-collapse-indicator { + margin-left: -20px; +} +.is-mobile .markdown-rendered ul, +.is-mobile .markdown-rendered ol { + padding-inline-start: 25px; +} +.is-mobile .message-container { + text-align: center; + margin: 8px 0; +} +.is-mobile .search-result-file-match-replace-button { + display: block; + position: relative; + padding: 6px 10px; + right: 0; + margin-top: var(--size-4-3); + background-color: var(--settings-home-background); +} +.is-mobile .suggestion-flair { + position: relative; + margin-right: 6px; + left: 0; + top: 0; +} +.is-mobile .document-search-container { + height: auto; + margin-left: 0; + margin-right: 0; + padding: 0 var(--size-4-4) var(--size-4-2); + border-bottom: var(--border-width) solid var(--background-modifier-border); +} +.is-mobile .document-search-container.mod-replace-mode { + height: auto; +} +.is-mobile .document-search, +.is-mobile .document-replace { + height: auto; + padding: 0; +} +.is-mobile .document-search .document-search-button, +.is-mobile .document-replace .document-search-button { + height: auto; + padding: 6px 0; + background-color: transparent; + color: var(--text-accent); +} +.is-mobile .document-search input, +.is-mobile .document-replace input, +.is-mobile .document-search button, +.is-mobile .document-replace button { + width: auto; + flex-grow: 1; +} +.is-mobile .document-search .document-search-buttons, +.is-mobile .document-replace .document-search-buttons, +.is-mobile .document-search .document-replace-buttons, +.is-mobile .document-replace .document-replace-buttons { + display: flex; + flex-grow: 1; +} +.is-mobile .document-search .document-search-close-button, +.is-mobile .document-replace .document-search-close-button { + height: 34px; + line-height: 34px; + top: 0; +} +.is-tablet .mod-left-split-toggle { + display: none; +} +.is-tablet button:not(.clickable-icon) { + padding: var(--size-4-1) var(--size-4-5); +} +.is-phone .vault-list-item-creation-time { + display: none; +} +.is-phone .vault-list-item { + padding: 5px 0; +} +.is-phone .vault-list-item .flair { + display: none; +} +.is-phone .vault-list-item-title { + flex: 1 0 auto; +} +.is-phone .vault-list-item-button { + margin-right: 0; +} +.suggestion-bg { + display: none; +} +body.is-phone .suggestion-bg { + display: block; + z-index: var(--layer-modal); +} +@keyframes fadeIn { + 0% { + opacity: 0; + } + 100% { + opacity: 1; + } +} +@keyframes fadeOut { + 0% { + opacity: 1; + } + 100% { + opacity: 0; + } +} +.mobile-image-viewer { + position: absolute; + height: 100%; + width: 100%; + top: 0; + left: 0; + background-color: var(--background-modifier-cover); + display: flex; + justify-content: center; + overflow: hidden; + z-index: var(--layer-modal); +} +.mobile-image-viewer img { + align-self: center; + max-height: 100%; + max-width: 100%; +} +.mod-tappable { + transition: opacity 0.15s ease-in-out; +} +.mod-tappable.mod-tap { + opacity: 0.5; +} +.mod-fade { + --scroll-fade-offset-right: 0; + --scroll-fade-offset-left: 0; +} +.mod-fade:not(.mod-at-start):before { + content: ' '; + position: absolute; + top: 0; + left: var(--scroll-fade-offset-left); + width: 30px; + height: 100%; + background: linear-gradient(to right, var(--background-primary), transparent); +} +.mod-fade:not(.mod-at-end):after { + content: ' '; + position: absolute; + top: 0; + right: var(--scroll-fade-offset-right); + width: 30px; + height: 100%; + background: linear-gradient(to right, transparent, var(--background-primary)); +} +.is-mobile .document-search-container { + height: auto; + margin-left: 0; + margin-right: 0; + padding: 0 var(--size-4-4) var(--size-4-2); + border-bottom: var(--border-width) solid var(--background-modifier-border); +} +.is-mobile .document-search-container.mod-replace-mode { + height: auto; +} +.is-mobile .document-search, +.is-mobile .document-replace { + height: auto; + padding: 0; +} +.is-mobile .document-search .document-search-button, +.is-mobile .document-replace .document-search-button { + height: auto; + padding: 6px 0; + background-color: transparent; + color: var(--text-accent); +} +.is-mobile .document-search input, +.is-mobile .document-replace input, +.is-mobile .document-search button, +.is-mobile .document-replace button { + width: auto; + flex-grow: 1; +} +.is-mobile .document-search .document-search-buttons, +.is-mobile .document-replace .document-search-buttons, +.is-mobile .document-search .document-replace-buttons, +.is-mobile .document-replace .document-replace-buttons { + display: flex; + flex-grow: 1; +} +.is-mobile .document-search .document-search-close-button, +.is-mobile .document-replace .document-search-close-button { + height: 34px; + line-height: 34px; + top: 0; +} +.is-mobile .view-header { + border-top: none; + height: var(--view-header-height); +} +.is-mobile .workspace-split.mod-root > .workspace-leaf:first-of-type .workspace-leaf-content, +.is-mobile .workspace-split.mod-root > .workspace-leaf:last-of-type .workspace-leaf-content { + border-radius: 0; +} +.is-mobile .view-header-title { + padding-right: 0px; +} +.is-mobile .view-header-title-container { + padding-left: 24px; +} +.is-mobile .view-header-title-container:after { + display: none; +} +.is-mobile .view-header-icon { + padding: 10px; +} +.is-mobile .inline-title { + padding-top: 0.25em; +} +.is-mobile .horizontal-main-container { + position: relative; +} +.is-mobile .view-header-title-container { + height: 50px; +} +.is-mobile .view-actions { + padding: var(--size-4-2) 0; + gap: var(--size-2-1); +} +.is-mobile .view-header-nav-buttons, +.is-mobile .view-header .view-action { + --icon-color: var(--interactive-accent); + --icon-color-hover: var(--interactive-accent); + --icon-color-active: var(--interactive-accent-hover); + --icon-color-focus: var(--interactive-accent-hover); + --icon-size: var(--icon-l); + --icon-stroke: var(--icon-l-stroke-width); +} +.is-mobile .view-action { + margin: auto 0; + width: auto; +} +.is-phone .view-header-title-parent, +.is-phone .view-header-title { + display: block; + text-overflow: ellipsis; + opacity: 0.7; +} +.is-phone .view-header-title-parent:focus-within, +.is-phone .view-header-title:focus-within { + text-overflow: unset; + opacity: 1; +} +.is-mobile .hotkey-list-container .setting-item { + flex-direction: column; + align-items: stretch; +} +.is-mobile .hotkey-list-container .setting-item-control { + margin-top: 10px; + align-items: flex-start; +} +.is-mobile .hotkey-list-container .setting-command-hotkeys { + flex: 1 0 auto; +} +.is-mobile .hotkey-list-container .setting-hotkey { + align-self: flex-start; +} +.is-tablet .horizontal-tab-nav-item, +.is-tablet .vertical-tab-nav-item { + padding: var(--size-4-2) var(--size-4-3); +} +.is-tablet .modal.mod-settings .vertical-tab-header { + max-width: none; +} +.is-tablet.theme-dark .community-item, +.is-tablet.theme-dark .vertical-tab-content { + background-color: var(--background-secondary); +} +.is-phone.theme-dark .modal.mod-settings { + background-color: var(--background-primary); +} +.is-phone.theme-dark .modal.mod-settings .vertical-tab-header { + background-color: var(--background-primary); +} +.is-phone.theme-dark .modal.mod-settings .vertical-tab-nav-item { + background-color: var(--background-secondary); +} +.is-phone.theme-dark .modal.mod-settings .vertical-tab-header-title { + background-color: var(--background-primary); +} +.is-phone .setting-item-heading { + margin-top: 1.5em; +} +.is-phone .vertical-tab-header-group { + margin: 0 auto; + width: calc(100% - var(--size-4-8)); +} +.is-phone .vertical-tab-header-group-title { + padding-bottom: 1em; +} +.is-phone .vertical-tab-header-group-title, +.is-phone .setting-item-heading .setting-item-name { + color: var(--text-normal); + font-weight: var(--font-bold); + font-size: var(--font-ui-large); +} +.is-phone .setting-item { + padding: 1em 0; + border-width: var(--border-width) 0 0 0; + gap: var(--size-4-1); +} +.is-phone .setting-item-name { + font-weight: var(--font-medium); +} +.is-phone .setting-item-info { + min-width: 0; +} +.is-phone .setting-item:not(.mod-toggle):not(.setting-item-heading) { + flex-direction: column; + align-items: flex-start; +} +.is-phone .setting-item:not(.mod-toggle):not(.setting-item-heading) .setting-item-control { + margin-top: 12px; + width: 100%; +} +.is-phone .setting-icon { + margin-right: 10px; + display: inline-flex; + vertical-align: middle; +} +.is-phone .setting-item-control select, +.is-phone .setting-item-control input, +.is-phone .setting-item-control button { + width: 100%; + margin: 0; +} +.is-phone .setting-item-control button { + padding: 10px; +} +.is-phone .setting-item-control select { + max-width: 100%; +} +.is-phone .modal.mod-settings { + background-color: var(--background-secondary); +} +.is-phone .modal.mod-settings .modal-title { + border-bottom: var(--border-width) solid var(--background-modifier-border); +} +.is-phone .modal.mod-settings .vertical-tabs-container { + display: block; + overflow-y: auto; +} +.is-phone .modal.mod-settings .vertical-tab-header { + background-color: var(--background-secondary); + border-right: none; + flex-grow: 1; + height: 100%; + min-width: 100%; + padding: var(--size-4-4); + width: 100%; +} +.is-phone .modal.mod-settings .vertical-tab-content { + background-color: var(--background-primary); + padding: var(--size-4-5) max(var(--size-4-5), var(--safe-area-inset-right)) 100px max(var(--size-4-5), var(--safe-area-inset-left)); +} +.is-phone .modal.mod-settings .vertical-tab-header-group-items { + border-radius: var(--radius-m); + overflow: hidden; +} +.is-phone .modal.mod-settings .vertical-tab-nav-item { + display: flex; + align-items: center; + height: 44px; + background-color: var(--background-primary); + padding: 0 var(--size-4-2) 0 var(--size-4-3); + margin: 0; + border-radius: 0; + border-bottom: var(--border-width) solid var(--background-modifier-border); + transition: background-color 200ms ease-in-out, color 200ms ease-in-out; +} +.is-phone .modal.mod-settings .vertical-tab-nav-item.is-active { + background-color: var(--interactive-accent); +} +.is-phone .modal.mod-settings .vertical-tab-nav-item:last-child { + border-bottom: none; +} +.is-phone .modal.mod-settings .vertical-tab-nav-item-chevron { + display: flex; + margin-left: auto; + color: var(--text-faint); +} +.is-phone .vertical-tab-header-title { + font-weight: var(--font-semibold); +} +.is-phone .installed-plugins-container .setting-item { + flex-direction: column; + align-items: stretch; + gap: var(--size-4-3); +} +.is-phone .installed-plugins-container .setting-item > *:first-child { + margin-right: 0; +} +.is-phone .installed-plugins-container .setting-item .setting-item-description div:first-child:after { + content: ' • '; +} +.is-phone .installed-plugins-container .setting-item .setting-item-description div:first-child, +.is-phone .installed-plugins-container .setting-item .setting-item-description div:nth-child(2) { + display: inline; +} +.is-phone .installed-plugins-container .setting-item .setting-item-control { + flex-wrap: wrap; +} +.is-phone .installed-plugins-container .setting-item .checkbox-container { + margin-left: auto; +} +.is-phone .community-modal { + width: 100%; + margin-bottom: 10px; +} +.is-phone .modal.mod-community-theme { + min-height: unset; +} +.is-phone .community-modal-sidebar { + background-color: var(--background-primary); +} +.is-phone .community-modal-controls { + background-color: transparent; +} +.is-phone .community-modal-controls .setting-item { + flex: 0 0 auto; + padding: 0.25em 0; +} +.is-phone .community-modal-controls .setting-item-control { + flex-direction: column; + align-items: flex-end; +} +.is-phone .community-modal-controls .search-input-container { + width: 100%; +} +.is-phone .community-modal-search-results { + gap: 0; + padding: 0; +} +.is-phone .community-modal-info { + padding: var(--size-4-4); +} +.is-phone .community-item { + border-width: 0 0 var(--border-width) 0; + border-radius: 0; + padding: var(--size-4-4); +} +.is-phone .community-item-info { + padding: 20px; +} +.is-phone .community-modal-details { + background-color: var(--background-primary); + border: none; +} +.is-phone .community-modal-readme { + padding: 20px 0; +} +.is-phone .community-modal-controls { + padding: 0 var(--size-4-4); +} +.is-phone .community-modal-search-summary { + padding: var(--size-4-1) var(--size-4-1) var(--size-4-4); +} +.is-phone .mod-community-theme .community-item { + display: grid; + grid-template-columns: 1fr 160px; + grid-auto-flow: column dense; +} +.is-phone .mod-community-theme .community-item .community-item-name { + grid-column: 1 / 2; +} +.is-phone .mod-community-theme .community-item .community-item-author { + grid-column: 1 / 2; +} +.is-phone .mod-community-theme .community-item .community-item-badge.mod-update { + position: static; + grid-row: 4; +} +.is-phone .mod-community-theme .community-item .community-item-downloads { + grid-column: 1 / 2; +} +.is-phone .mod-community-theme .community-item .community-item-screenshot { + grid-row: 1 / span 4; + height: 90px; +} +.is-phone .mod-community-plugin .community-item { + display: grid; + grid-template-columns: 3fr 1fr; + grid-auto-flow: column dense; +} +.is-phone .mod-community-plugin .community-item .community-item-name { + grid-column: 1 / 2; +} +.is-phone .mod-community-plugin .community-item .community-item-author { + grid-column: 1 / 2; +} +.is-phone .mod-community-plugin .community-item .community-item-badge.mod-update { + position: static; + grid-row: 4; +} +.is-phone .mod-community-plugin .community-item .community-item-downloads { + grid-column: 2 / 2; + text-align: right; + color: var(--text-faint); +} +.is-phone .mod-community-plugin .community-item .community-item-desc { + grid-column: 1 / span 2; +} +.is-phone .community-modal-button-container { + flex-direction: column; +} +.mobile-option-setting-item { + font-size: var(--font-ui-medium); + display: flex; + align-items: center; + margin: 8px 0; + gap: var(--size-4-1); + transition: transform 1000ms ease-in-out; + color: var(--text-muted); +} +.mobile-option-setting-item:first-of-type:last-of-type .mobile-option-setting-drag-icon { + display: none; +} +.mobile-option-setting-item-name { + flex: 1 0 0; + color: var(--text-normal); +} +.mobile-option-setting-item-option-icon { + display: flex; + align-items: center; + justify-content: center; + padding: 4px 4px; + cursor: var(--cursor); + border-radius: var(--radius-s); +} +:not(.is-mobile) .mobile-option-setting-item-option-icon:hover, +:not(.is-mobile) .mobile-option-setting-item-option-icon:active { + background-color: var(--background-modifier-hover); +} +.mobile-option-setting-item-option-icon.mobile-option-setting-drag-icon { + cursor: grab; +} +.mobile-option-setting-item-option-icon.mobile-option-setting-drag-icon:active { + cursor: grabbing; +} +.mobile-option-setting-item-remove-icon { + color: var(--text-error); + display: flex; +} +.mobile-option-setting-item-add-icon { + color: var(--text-success); + display: flex; +} +.is-mobile .status-bar { + display: none; +} +.workspace-drawer { + position: fixed; + top: 0; + bottom: 0; + display: flex; + overflow: hidden; + font-size: var(--font-ui-small); + min-width: var(--mobile-sidebar-width); + max-width: var(--mobile-sidebar-max-width); + width: 85vw; + z-index: var(--layer-popover); + margin: 0; + border-radius: 0; + padding-top: var(--safe-area-inset-top); + background-color: var(--background-primary); +} +.workspace-drawer .nav-folder.mod-root > .nav-folder-title { + display: none; +} +.workspace-drawer .nav-header { + margin-top: auto; + padding-bottom: max(var(--size-4-2), var(--safe-area-inset-bottom)); + order: 10; +} +.workspace-drawer .nav-header ~ .search-input-container { + width: calc(100% - var(--size-4-9)); +} +.workspace-drawer .workspace-leaf { + background-color: transparent; +} +.theme-dark .workspace-drawer { + background-color: var(--background-secondary); +} +.workspace-drawer.is-pinned { + height: 100%; + position: relative; + max-width: var(--mobile-sidebar-width); + z-index: var(--layer-cover); + border-radius: 0; + margin: 0; + box-shadow: none; +} +.workspace-drawer.mod-left { + left: 0; + padding-left: var(--safe-area-inset-left); + border-top-right-radius: var(--radius-xl); + border-bottom-right-radius: var(--radius-xl); +} +.workspace-drawer.mod-left.is-pinned { + border-right: var(--divider-width) solid var(--divider-color); + border-radius: 0; +} +body.is-tablet .workspace-drawer.mod-left .workspace-drawer-inner { + padding-left: var(--ribbon-width); +} +.workspace-drawer.mod-right { + right: 0; + padding-right: var(--safe-area-inset-right); + border-top-left-radius: var(--radius-xl); + border-bottom-left-radius: var(--radius-xl); +} +.workspace-drawer.mod-right.is-pinned { + border-left: var(--divider-width) solid var(--divider-color); + border-radius: 0; +} +.workspace-drawer.is-collapsed { + overflow: hidden; +} +.workspace-drawer .nav-buttons-container { + padding-left: var(--size-4-3); + padding-right: var(--size-4-3); + --icon-size: var(--icon-l); + --icon-stroke: var(--icon-l-stroke-width); + --icon-color: var(--interactive-accent); + --icon-color-hover: var(--interactive-accent); + --icon-color-active: var(--interactive-accent); + --icon-color-focus: var(--interactive-accent-hover); +} +.workspace-drawer .nav-buttons-container .nav-action-button { + flex-grow: 1; +} +.workspace-drawer .workspace-drawer-actions, +.workspace-drawer .nav-buttons-container { + overflow: auto; + flex-wrap: nowrap; +} +.workspace-drawer .workspace-drawer-actions::-webkit-scrollbar, +.workspace-drawer .nav-buttons-container::-webkit-scrollbar, +.workspace-drawer .workspace-drawer-actions::-webkit-scrollbar-thumb, +.workspace-drawer .nav-buttons-container::-webkit-scrollbar-thumb { + visibility: hidden; +} +.workspace-drawer .side-dock-settings { + margin-bottom: 0; +} +.workspace-drawer-inner { + flex: 1 1 auto; + overflow: hidden; + display: flex; + flex-direction: column; + background-color: var(--background-primary); + position: relative; + transition: width ease-out 150ms; +} +.theme-dark .workspace-drawer-inner { + background-color: var(--background-secondary); +} +.workspace-drawer.is-collapsed .workspace-drawer-inner { + padding: 0; + width: 0; +} +.workspace-drawer-backdrop { + display: block; + position: fixed; + z-index: var(--layer-cover); + width: 100%; + height: 100%; + background-color: var(--background-modifier-cover); + top: 0; + left: 0; + opacity: 1; + transition: opacity ease-out 150ms; +} +.workspace-drawer.is-collapsed .workspace-drawer-backdrop { + display: none; + opacity: 0; +} +.workspace-drawer-ribbon { + position: absolute; + left: 0; + top: 0; + height: 100%; + overflow: auto; + width: var(--ribbon-width); + padding: var(--size-4-1) 0 var(--safe-area-inset-bottom); +} +.workspace-drawer-ribbon::-webkit-scrollbar, +.workspace-drawer-ribbon::-webkit-scrollbar-thumb { + visibility: hidden; + width: 0; +} +.workspace-drawer-ribbon .side-dock-actions { + padding: var(--size-4-2) 0; +} +.workspace-drawer-ribbon .side-dock-actions, +.workspace-drawer-ribbon .side-dock-settings { + gap: var(--size-4-2); +} +.workspace-drawer-ribbon .side-dock-ribbon-action { + padding: var(--size-4-2); +} +.workspace-drawer-header { + padding: var(--size-4-2) var(--size-4-5) 0 var(--size-4-5); + display: flex; + align-items: flex-start; +} +.workspace-drawer.is-pinned .workspace-drawer-header { + padding-top: 0; +} +.workspace-drawer-header-left { + display: flex; + flex-direction: column; + flex: 1 1 auto; + overflow: hidden; +} +.workspace-drawer-header-name { + display: flex; +} +.workspace-drawer-header-switcher { + display: flex; + flex: 0 1 auto; + position: relative; +} +.workspace-drawer-header-switcher select { + opacity: 0; + position: absolute; +} +.workspace-drawer-header-name-text { + text-overflow: ellipsis; + overflow: hidden; + font-size: var(--font-ui-large); + font-weight: var(--font-semibold); +} +.workspace-drawer-header-name-chevron { + --icon-size: var(--icon-m); + --icon-stroke: 2.25px; + color: var(--text-faint); + display: flex; + align-items: center; + margin-left: var(--size-2-1); +} +.workspace-drawer-header-name-action-icon { + color: var(--text-muted); + margin-left: var(--size-4-2); + display: flex; + align-items: center; +} +.workspace-drawer-header-info { + color: var(--text-muted); + margin: var(--size-4-1) 0 var(--size-4-4) 0; + font-size: var(--font-ui-small); +} +.workspace-drawer-header-icon { + --icon-size: var(--icon-l); + --icon-stroke: var(--icon-l-stroke-width); + padding-top: var(--size-2-2); + color: var(--interactive-accent); + margin-left: var(--size-4-3); +} +.workspace-drawer-actions { + margin: var(--size-4-4) 0 var(--size-4-3) 0; + display: flex; + color: var(--text-muted); +} +.workspace-drawer-action-item { + flex: 0 0 70px; + display: flex; + flex-direction: column; + align-items: center; + overflow: hidden; +} +.workspace-drawer-action-icon { + color: var(--text-faint); +} +.workspace-drawer-action-short-name { + font-size: var(--font-ui-small); + overflow: hidden; + white-space: nowrap; + text-overflow: ellipsis; + max-width: 80px; +} +.workspace-drawer-separator { + margin: 0 0 12px 0; +} +.workspace-drawer-tab-option-item { + display: flex; + align-items: center; + margin: var(--size-4-5); + gap: var(--size-4-2); +} +.workspace-drawer-active-tab-icon, +.workspace-drawer-tab-option-item-icon { + --icon-size: var(--icon-l); + --icon-stroke: var(--icon-l-stroke-width); + color: var(--text-normal); + display: flex; +} +.workspace-drawer-active-tab-icon:last-child { + color: var(--interactive-accent); + order: 2; +} +.workspace-drawer-active-tab-back-icon { + --icon-size: var(--icon-l); + --icon-stroke: var(--icon-l-stroke-width); + display: flex; + color: var(--interactive-accent); + order: 1; + margin-right: var(--size-4-1); +} +.workspace-drawer-tab-option-item-title, +.workspace-drawer-active-tab-title { + color: var(--text-normal); + font-weight: var(--font-medium); + font-size: var(--font-ui-medium); + flex: 1 0 0; + overflow: hidden; + white-space: nowrap; + text-overflow: ellipsis; +} +.workspace-drawer-active-tab-header { + display: flex; + align-items: center; + padding: var(--size-4-3) var(--size-4-5) var(--size-4-4); + margin: 0; + gap: var(--size-4-2); +} +.workspace-drawer-tab-container { + overflow: hidden; + position: relative; + flex: 1 0 0; +} +.workspace-drawer-tab-container > * { + position: absolute; + top: 0; + left: 0; + width: 100%; + height: 100%; +} +.workspace-drawer-active-tab-icon.mod-exit-fullscreen { + display: none; +} +.workspace-drawer-active-tab-container { + display: flex; + flex-direction: column; +} +.theme-dark .workspace-drawer-active-tab-container.is-fullscreen { + background-color: var(--background-secondary); +} +.workspace-drawer-active-tab-container .workspace-drawer-active-tab-content .nav-files-container { + padding-top: var(--size-4-3); +} +.workspace-drawer-active-tab-container.is-fullscreen { + position: fixed; + width: 100%; + top: 0; + left: 0; + background-color: var(--background-primary); + margin: 0 env(safe-area-inset-right, 20px) 0 env(safe-area-inset-left, 20px); + padding: env(safe-area-inset-top, 20px) 0 0; +} +.workspace-drawer-active-tab-container.is-fullscreen .workspace-drawer-active-tab-back-icon { + display: none; +} +.workspace-drawer-active-tab-container.is-fullscreen .workspace-leaf { + width: 100%; +} +.workspace-drawer-active-tab-container.is-fullscreen .workspace-drawer-active-tab-header { + margin: 0 env(safe-area-inset-right, 20px) 0 env(safe-area-inset-left, 20px); + padding: var(--size-4-4) var(--size-4-6); +} +.workspace-drawer-active-tab-content { + flex: 1 0 0; + overflow: auto; + display: flex; +} +.workspace-drawer-active-tab-content > * { + flex: 1 0 0; + width: 100%; + height: 100%; +} +.workspace-drawer-active-tab-content .view-header { + display: none !important; +} +.workspace-drawer-active-tab-content .view-content { + padding-top: 4px; + height: 100%; +} +.workspace-drawer-active-tab-content .graph-controls { + display: none; +} +.workspace-drawer-active-tab-content .outline { + font-size: var(--font-ui-medium); +} +.is-phone .side-dock-ribbon { + display: none; +} +.is-phone .workspace-drawer .workspace-drawer-header-icon.mod-pin { + display: none; +} +.is-phone .mod-root .workspace-split:not(.mod-visible), +.is-phone .mod-root .workspace-tabs:not(.mod-visible) { + display: none; +} +.is-tablet .workspace-drawer .workspace-drawer-header-icon.mod-settings { + display: none; +} +body.is-tablet .sidebar-toggle-button { + padding-left: var(--size-4-2); + --icon-color: var(--interactive-accent); + --icon-color-hover: var(--interactive-accent); + --icon-color-active: var(--interactive-accent-hover); + --icon-color-focus: var(--interactive-accent-hover); + --icon-size: var(--icon-l); + --icon-stroke: var(--icon-l-stroke-width); +} +.is-mobile .menu { + border: none; + max-width: 100%; +} +.is-phone .menu { + background-color: var(--background-secondary); + max-height: 60vh; + width: calc(100% - var(--safe-area-inset-left) - var(--safe-area-inset-right)); + min-width: unset; + position: absolute; + padding-bottom: var(--safe-area-inset-bottom); + margin-left: var(--safe-area-inset-left); + margin-right: var(--safe-area-inset-right); + border-radius: var(--radius-l) var(--radius-l) 0 0; + bottom: 0; + left: 0; + right: 0; + margin: 0 auto; + top: unset !important; + overflow-y: auto; +} +.is-phone .menu-item { + padding: var(--size-4-3) var(--size-4-3); + height: unset; + line-height: unset; +} +.is-phone .menu-item.is-label .menu-item-title { + display: -webkit-box; + overflow: hidden; + -webkit-box-orient: vertical; + -webkit-line-clamp: 3; +} +.is-mobile .modal { + border: none; +} +.is-mobile .modal-button-container { + display: flex; + flex-direction: column; +} +.is-mobile .community-modal { + width: 100%; + margin-bottom: 10px; +} +.is-mobile .modal.mod-community-theme { + min-height: unset; +} +.is-mobile .mod-confirmation .modal-close-button { + display: none; +} +.is-phone .modal, +.is-phone .prompt { + border-radius: 0; + border: none; + max-height: 100vh; + width: 100vw; + max-width: 100vw; + min-width: unset; + position: absolute; + bottom: unset; + padding: 0; + left: 0; + right: 0; +} +.is-phone .modal { + --modal-top: calc(var(--safe-area-inset-top) + var(--size-4-2)); + --modal-bottom: var(--safe-area-inset-bottom); + border-radius: var(--radius-m) var(--radius-m) 0 0; + padding: 0 var(--safe-area-inset-right) 0 var(--safe-area-inset-left); + top: var(--modal-top); + bottom: 0; + width: 100vw; +} +.is-phone .modal .modal-close-button { + top: var(--size-4-3); +} +.is-phone .modal .modal-title { + display: block; + font-size: var(--font-ui-medium); + margin-bottom: 0; + padding-top: calc(env(safe-area-inset-top) + var(--size-4-3)); + padding-bottom: var(--size-4-4); + text-align: center; +} +.is-phone .mod-confirmation .modal { + --interactive-normal: var(--background-modifier-hover); + top: auto; + height: auto; + background-color: var(--background-secondary); +} +.is-phone .mod-confirmation .modal .modal-title { + border-bottom: 1px solid var(--background-modifier-border); +} +.is-phone .modal-sidebar { + background-color: var(--background-primary); +} +.is-phone .modal-content { + display: flex; + position: relative; + flex-direction: column; + margin-top: 0; + overflow: auto; + padding: var(--size-4-3); +} +.is-phone .modal-button-container { + width: 100%; + padding: var(--size-4-3); + margin-top: 0; + margin-bottom: var(--safe-area-inset-bottom); +} +.is-phone .modal.mod-lg { + max-height: 100%; +} +.is-phone .modal.mod-lg .modal-title { + padding-top: calc(env(safe-area-inset-top) + var(--size-4-3)); + padding-bottom: var(--size-4-3); +} +.is-phone .modal.mod-lg .modal-close-button, +.is-phone .modal.mod-sidebar-layout .modal-close-button { + top: calc(var(--safe-area-inset-top) + 10px); + right: var(--size-4-5); + z-index: var(--layer-modal); +} +.is-phone .modal.mod-sidebar-layout { + bottom: 0; + top: 0; + border-radius: 0; + height: 100%; + max-height: 100%; + margin: 0; + padding: 0 var(--safe-area-inset-right) 0 var(--safe-area-inset-left); + width: 100vw; +} +.is-phone .modal.mod-sidebar-layout .search-input-container { + flex-grow: 1; +} +.is-phone .modal.mod-sidebar-layout .modal-title { + display: block; + padding-top: calc(env(safe-area-inset-top) + var(--size-4-3)); + padding-bottom: var(--size-4-3); + margin-bottom: 0; +} +.is-phone .modal.mod-sidebar-layout .modal-content > * { + width: 100%; + height: 100%; + position: absolute; + top: 0; + left: 0; + right: 0; + padding: 0 var(--safe-area-inset-right) 0 var(--safe-area-inset-left); +} +.is-phone.mod-publish .modal-button-container, +.is-phone.mod-sync-log .modal-button-container { + padding-bottom: calc(env(safe-area-inset-bottom) + var(--size-4-3)); +} +.mobile-navbar { + background-color: var(--background-primary); + padding: 0 max(var(--safe-area-inset-right), var(--size-4-4)) 0 max(var(--safe-area-inset-left), var(--size-4-4)); + position: absolute; + left: 0; + right: 0; + bottom: 0; +} +body.is-tablet .mobile-navbar { + display: none; +} +.mobile-navbar-text { + font-size: var(--font-ui-small); + padding: var(--size-4-1) 0; + white-space: nowrap; + text-overflow: clip; + width: 100%; + -webkit-mask-image: linear-gradient(to left, rgba(0, 0, 0, 0) var(--size-4-4), #000000 var(--size-4-8)); +} +.mobile-navbar-actions { + --icon-size: var(--icon-l); + --icon-stroke: var(--icon-l-stroke-width); + --icon-color: var(--interactive-accent); + --icon-color-hover: var(--interactive-accent); + --icon-color-active: var(--interactive-accent-hover); + --icon-color-focus: var(--interactive-accent-hover); + display: flex; + align-items: center; + justify-content: space-between; + padding: var(--size-4-2) 0 max(var(--size-4-2), var(--safe-area-inset-bottom)) 0; +} +.mobile-navbar-tabs-action { + align-items: center; + border-radius: var(--clickable-icon-radius); + border: 2px solid var(--icon-color); + display: flex; + font-size: calc(var(--icon-size) * 0.6); + font-weight: var(--bold-weight); + justify-content: center; + height: 20px; + width: var(--icon-size); +} +.mobile-navbar-action.has-longpress-menu { + position: relative; +} +.mobile-navbar-action.has-longpress-menu .navbar-action-flair { + --icon-size: 12px; + --icon-stroke: 3px; + color: var(--interactive-accent); + position: absolute; + left: -6px; + top: 0; + height: 100%; + align-items: center; + display: flex; +} +.is-phone .notice-container { + padding: 0; + top: max(var(--size-4-1),var(--safe-area-inset-top)); + left: 0; + right: 0; + max-width: 96%; + margin: 0 auto; +} +.is-phone .notice { + background-color: var(--interactive-accent); + color: var(--text-on-accent); + margin: 0 auto var(--size-4-1); + text-align: center; + border-radius: 30px; + max-width: none; + box-shadow: none; +} +.is-mobile .prompt { + border: none; +} +.theme-dark.is-mobile .prompt { + background-color: var(--background-secondary); +} +.theme-dark.is-mobile .prompt input.prompt-input { + background-color: var(--background-secondary); +} +.is-mobile .prompt-input[type=text] { + padding: var(--size-4-4); +} +.is-phone .prompt { + position: relative; + margin: 0 auto; + width: calc(100% - var(--safe-area-inset-left) - var(--safe-area-inset-right)); +} +.is-phone .prompt .suggestion-hotkey { + display: none; +} +.is-phone .prompt { + --mobile-height: 100vh; + --prompt-bottom: 0px; + --prompt-top: calc(var(--safe-area-inset-top) + var(--header-height) + var(--size-4-2)); + border-radius: var(--radius-l) var(--radius-l) 0 0; + min-width: unset; + margin-bottom: var(--prompt-bottom); + margin-top: var(--prompt-top); + box-shadow: none; + top: 0; + height: calc(var(--mobile-height) - var(--prompt-top) - var(--prompt-bottom)); +} +.is-phone .prompt-input-container { + border-bottom: var(--border-width) solid var(--background-modifier-border); +} +.is-phone .prompt-input[type=text] { + border: none; +} +.is-phone .prompt-input-cta { + --icon-color: var(--interactive-accent); + display: flex; + align-items: center; + padding: 0 var(--size-4-3); + flex: 0 1 auto; +} +.is-phone .prompt-instructions { + display: none; +} +.pull-action { + position: absolute; + background-color: var(--background-secondary); + z-index: var(--layer-popover); + color: var(--text-muted); + font-size: 90%; + transition: background-color ease-in-out 150ms; +} +.pull-action.mod-activated { + background-color: var(--interactive-accent); + color: var(--text-on-accent); +} +.pull-down-action { + top: 0; + left: 0; + right: 0; + width: 96%; + max-width: 500px; + margin: var(--safe-area-inset-top) auto 0 auto; + padding: var(--size-4-3) var(--size-4-4); + text-align: center; + border-radius: 40px; +} +.pull-out-action { + top: 50%; + padding: var(--size-4-3) var(--size-4-4); + border-radius: 40px; + margin: 0 var(--size-4-4); +} +.mobile-toolbar { + -webkit-app-region: drag; + flex: 0 0 auto; + width: 100%; + overflow-y: hidden; + background-color: var(--background-primary); + bottom: 0; + z-index: var(--layer-menu); +} +.is-tablet.is-ios .mobile-toolbar { + padding-bottom: 16px; +} +.mobile-toolbar-options-container { + --scroll-fade-offset-right: 50px; + position: relative; + height: var(--mobile-toolbar-height); + display: flex; + width: 100%; +} +.mobile-toolbar-options-list { + display: flex; + width: 100%; + overflow-x: auto; + overflow-y: hidden; + padding: 0 10px; + scrollbar-width: none !important; + /* Firefox */ + -ms-overflow-style: none !important; + /* Internet Explorer 10+ */ +} +.mobile-toolbar-options-list::-webkit-scrollbar { + width: 0 !important; + height: 0 !important; +} +.mobile-toolbar-floating-options { + display: flex; +} +.mobile-toolbar-floating-options .mobile-toolbar-option { + min-width: 50px; + color: var(--text-accent); +} +.mobile-toolbar-option { + display: flex; + font-size: var(--font-ui-medium); + color: var(--text-muted); + font-family: var(--font-monospace); + justify-content: center; + align-items: center; + min-width: 50px; + position: relative; + left: 0; + transition: left 200ms ease-in-out; +} +.is-mobile .suggestion-item { + padding: var(--size-4-2) var(--size-4-3); +} +.is-tablet.theme-dark .suggestion-container { + background-color: var(--background-secondary); +} +.is-phone .suggestion-item.mod-group { + border-radius: 0; +} +.is-mobile .modal.mod-publish { + background-color: var(--modal-background); + height: 100%; + margin: 0; + padding-top: var(--safe-area-inset-top); + width: 100vw; +} +.is-mobile .publish-changes-info-publishing-to { + display: none; +} +.is-mobile .publish-changes-add-linked-btn { + width: auto; +} +.is-mobile .file-tree .tree-item-self { + font-size: var(--font-ui-small); +} +.is-phone .modal.mod-publish { + border-radius: 0; +} +.is-phone .modal.mod-publish .modal-button-container { + background-color: var(--modal-background); + position: fixed; +} +.is-phone .modal.mod-publish .modal-content { + display: unset; +} +.is-phone .publish-changes-info { + flex-wrap: wrap; +} +.is-phone .publish-changes-info .search-input-container { + width: auto; +} +.is-mobile .sync-history-list { + padding-left: max(var(--size-4-5), var(--safe-area-inset-left)); + padding-right: max(var(--size-4-5), var(--safe-area-inset-right)); +} +.is-mobile .sync-history-list-item-header { + padding: var(--size-4-2) 0; +} +.is-mobile .sync-history-list-item-details { + padding: var(--size-4-1) var(--size-4-4); +} +.is-mobile .sync-history-content-container { + display: flex; + flex-direction: column; + max-width: unset; +} +.is-mobile .sync-history-content { + flex: 1 1 auto; + padding: 10px; + border-radius: 0; + border: none; +} +.is-phone .sync-log-container { + flex: 1 1 auto; +} +.is-phone .modal.mod-sync-history .search-input-container { + width: 100%; + margin-bottom: 0; +} +.is-phone .sync-history-list-container { + background-color: var(--background-primary); +} +.is-phone .sync-history-content .setting-item { + flex-direction: column; + align-items: start; +} +.is-phone .sync-history-content .setting-item:first-child { + padding: 0 var(--size-4-6) var(--size-4-4); +} +.is-phone .sync-history-content .setting-item-name { + font-weight: var(--font-semibold); + font-size: var(--font-ui-large); +} +.is-phone .sync-history-content .setting-item-control { + padding-right: 0; +} +.is-phone .sync-history-content .setting-item-control label { + min-width: fit-content; +} +.mobile-vault-chooser { + width: 100%; + height: 100%; + background-color: var(--background-primary); + position: relative; +} +.mobile-vault-chooser hr { + margin: 12px 0; + border-width: var(--border-width); +} +.mobile-vault-chooser-screen { + display: flex; + flex-direction: column; + position: absolute; + left: 0; + top: 0; + width: 100%; + height: 100%; +} +.mobile-vault-chooser-header { + display: flex; + background-color: var(--background-primary); + border-bottom: var(--border-width) solid var(--background-modifier-border); + color: var(--text-muted); + flex: 0 0 50px; + font-size: 18px; + align-items: center; +} +.mobile-vault-chooser-header-icon { + display: flex; + margin: 0 6px 0 10px; +} +.mobile-vault-chooser-content { + flex: 1 0 0; + padding: 20px; + height: 100%; + overflow-y: auto; + max-width: 800px; + width: 100%; + margin: 0 auto; +} +.mobile-vault-chooser-logo-container { + margin: 40px 0; + text-align: center; + color: var(--text-muted); +} +.mobile-vault-logo-text { + margin-top: 10px; + margin-bottom: 10px; + color: white; +} +.mobile-vault-chooser-load-text { + margin: 20px 0; + text-align: center; +} +.mobile-vault-chooser-version { + font-size: var(--font-ui-small); + color: var(--text-faint); +} +.mobile-vault-chooser-empty-state { + margin: 20px 0; + font-size: 17px; + color: var(--text-muted); +} +.mobile-vault-chooser-actions { + padding-bottom: 40px; +} +.mobile-vault-chooser-action-icon { + color: var(--text-muted); + display: flex; + padding: 10px; + margin: -10px 0; +} +.mobile-vault-chooser-action { + display: flex; + padding: 14px 0; + align-items: center; + font-size: 18px; +} +.mobile-vault-chooser-action-name { + flex: 1 0 0; + overflow: hidden; + text-overflow: ellipsis; + white-space: nowrap; +} +.mobile-vault-chooser-action-description { + color: var(--text-muted); + font-size: 17px; + overflow: hidden; + text-overflow: ellipsis; + max-width: calc(100vw - 110px); + white-space: nowrap; +} +.mobile-vault-chooser-field-name { + color: var(--text-muted); + margin: 20px 0 10px 0; + font-size: 18px; +} +input.mobile-vault-chooser-field-input { + width: 100%; + font-size: var(--font-ui-medium); + padding: 8px 12px; + height: auto; +} +.mobile-vault-chooser-button-container { + margin: 20px 0; +} +.mobile-vault-chooser-button-container button { + padding: 10px 20px; + font-size: var(--font-ui-medium); + width: 100%; +} + diff --git a/Perlite/perlite/.styles/atom-one-dark.min.css b/Perlite/perlite/.styles/atom-one-dark.min.css new file mode 100644 index 0000000..5344ee3 --- /dev/null +++ b/Perlite/perlite/.styles/atom-one-dark.min.css @@ -0,0 +1 @@ +pre code.hljs{display:block;overflow-x:auto;padding:1em}code.hljs{padding:3px 5px}.hljs{color:#abb2bf;background:#282c34}.hljs-comment,.hljs-quote{color:#5c6370;font-style:italic}.hljs-doctag,.hljs-formula,.hljs-keyword{color:#c678dd}.hljs-deletion,.hljs-name,.hljs-section,.hljs-selector-tag,.hljs-subst{color:#e06c75}.hljs-literal{color:#56b6c2}.hljs-addition,.hljs-attribute,.hljs-meta .hljs-string,.hljs-regexp,.hljs-string{color:#98c379}.hljs-attr,.hljs-number,.hljs-selector-attr,.hljs-selector-class,.hljs-selector-pseudo,.hljs-template-variable,.hljs-type,.hljs-variable{color:#d19a66}.hljs-bullet,.hljs-link,.hljs-meta,.hljs-selector-id,.hljs-symbol,.hljs-title{color:#61aeee}.hljs-built_in,.hljs-class .hljs-title,.hljs-title.class_{color:#e6c07b}.hljs-emphasis{font-style:italic}.hljs-strong{font-weight:700}.hljs-link{text-decoration:underline} \ No newline at end of file diff --git a/Perlite/perlite/.styles/fontawesome-color.svg b/Perlite/perlite/.styles/fontawesome-color.svg new file mode 100644 index 0000000..1c4b642 --- /dev/null +++ b/Perlite/perlite/.styles/fontawesome-color.svg @@ -0,0 +1 @@ +Font Awesome \ No newline at end of file diff --git a/Perlite/perlite/.styles/fonts/KaTeX_AMS-Regular.ttf b/Perlite/perlite/.styles/fonts/KaTeX_AMS-Regular.ttf new file mode 100644 index 0000000..c6f9a5e Binary files /dev/null and b/Perlite/perlite/.styles/fonts/KaTeX_AMS-Regular.ttf differ diff --git a/Perlite/perlite/.styles/fonts/KaTeX_AMS-Regular.woff b/Perlite/perlite/.styles/fonts/KaTeX_AMS-Regular.woff new file mode 100644 index 0000000..b804d7b Binary files /dev/null and b/Perlite/perlite/.styles/fonts/KaTeX_AMS-Regular.woff differ diff --git a/Perlite/perlite/.styles/fonts/KaTeX_AMS-Regular.woff2 b/Perlite/perlite/.styles/fonts/KaTeX_AMS-Regular.woff2 new file mode 100644 index 0000000..0acaaff Binary files /dev/null and b/Perlite/perlite/.styles/fonts/KaTeX_AMS-Regular.woff2 differ diff --git a/Perlite/perlite/.styles/fonts/KaTeX_Caligraphic-Bold.ttf b/Perlite/perlite/.styles/fonts/KaTeX_Caligraphic-Bold.ttf new file mode 100644 index 0000000..9ff4a5e Binary files /dev/null and b/Perlite/perlite/.styles/fonts/KaTeX_Caligraphic-Bold.ttf differ diff --git a/Perlite/perlite/.styles/fonts/KaTeX_Caligraphic-Bold.woff b/Perlite/perlite/.styles/fonts/KaTeX_Caligraphic-Bold.woff new file mode 100644 index 0000000..9759710 Binary files /dev/null and b/Perlite/perlite/.styles/fonts/KaTeX_Caligraphic-Bold.woff differ diff --git a/Perlite/perlite/.styles/fonts/KaTeX_Caligraphic-Bold.woff2 b/Perlite/perlite/.styles/fonts/KaTeX_Caligraphic-Bold.woff2 new file mode 100644 index 0000000..f390922 Binary files /dev/null and b/Perlite/perlite/.styles/fonts/KaTeX_Caligraphic-Bold.woff2 differ diff --git a/Perlite/perlite/.styles/fonts/KaTeX_Caligraphic-Regular.ttf b/Perlite/perlite/.styles/fonts/KaTeX_Caligraphic-Regular.ttf new file mode 100644 index 0000000..f522294 Binary files /dev/null and b/Perlite/perlite/.styles/fonts/KaTeX_Caligraphic-Regular.ttf differ diff --git a/Perlite/perlite/.styles/fonts/KaTeX_Caligraphic-Regular.woff b/Perlite/perlite/.styles/fonts/KaTeX_Caligraphic-Regular.woff new file mode 100644 index 0000000..9bdd534 Binary files /dev/null and b/Perlite/perlite/.styles/fonts/KaTeX_Caligraphic-Regular.woff differ diff --git a/Perlite/perlite/.styles/fonts/KaTeX_Caligraphic-Regular.woff2 b/Perlite/perlite/.styles/fonts/KaTeX_Caligraphic-Regular.woff2 new file mode 100644 index 0000000..75344a1 Binary files /dev/null and b/Perlite/perlite/.styles/fonts/KaTeX_Caligraphic-Regular.woff2 differ diff --git a/Perlite/perlite/.styles/fonts/KaTeX_Fraktur-Bold.ttf b/Perlite/perlite/.styles/fonts/KaTeX_Fraktur-Bold.ttf new file mode 100644 index 0000000..4e98259 Binary files /dev/null and b/Perlite/perlite/.styles/fonts/KaTeX_Fraktur-Bold.ttf differ diff --git a/Perlite/perlite/.styles/fonts/KaTeX_Fraktur-Bold.woff b/Perlite/perlite/.styles/fonts/KaTeX_Fraktur-Bold.woff new file mode 100644 index 0000000..e7730f6 Binary files /dev/null and b/Perlite/perlite/.styles/fonts/KaTeX_Fraktur-Bold.woff differ diff --git a/Perlite/perlite/.styles/fonts/KaTeX_Fraktur-Bold.woff2 b/Perlite/perlite/.styles/fonts/KaTeX_Fraktur-Bold.woff2 new file mode 100644 index 0000000..395f28b Binary files /dev/null and b/Perlite/perlite/.styles/fonts/KaTeX_Fraktur-Bold.woff2 differ diff --git a/Perlite/perlite/.styles/fonts/KaTeX_Fraktur-Regular.ttf b/Perlite/perlite/.styles/fonts/KaTeX_Fraktur-Regular.ttf new file mode 100644 index 0000000..b8461b2 Binary files /dev/null and b/Perlite/perlite/.styles/fonts/KaTeX_Fraktur-Regular.ttf differ diff --git a/Perlite/perlite/.styles/fonts/KaTeX_Fraktur-Regular.woff b/Perlite/perlite/.styles/fonts/KaTeX_Fraktur-Regular.woff new file mode 100644 index 0000000..acab069 Binary files /dev/null and b/Perlite/perlite/.styles/fonts/KaTeX_Fraktur-Regular.woff differ diff --git a/Perlite/perlite/.styles/fonts/KaTeX_Fraktur-Regular.woff2 b/Perlite/perlite/.styles/fonts/KaTeX_Fraktur-Regular.woff2 new file mode 100644 index 0000000..735f694 Binary files /dev/null and b/Perlite/perlite/.styles/fonts/KaTeX_Fraktur-Regular.woff2 differ diff --git a/Perlite/perlite/.styles/fonts/KaTeX_Main-Bold.ttf b/Perlite/perlite/.styles/fonts/KaTeX_Main-Bold.ttf new file mode 100644 index 0000000..4060e62 Binary files /dev/null and b/Perlite/perlite/.styles/fonts/KaTeX_Main-Bold.ttf differ diff --git a/Perlite/perlite/.styles/fonts/KaTeX_Main-Bold.woff b/Perlite/perlite/.styles/fonts/KaTeX_Main-Bold.woff new file mode 100644 index 0000000..f38136a Binary files /dev/null and b/Perlite/perlite/.styles/fonts/KaTeX_Main-Bold.woff differ diff --git a/Perlite/perlite/.styles/fonts/KaTeX_Main-Bold.woff2 b/Perlite/perlite/.styles/fonts/KaTeX_Main-Bold.woff2 new file mode 100644 index 0000000..ab2ad21 Binary files /dev/null and b/Perlite/perlite/.styles/fonts/KaTeX_Main-Bold.woff2 differ diff --git a/Perlite/perlite/.styles/fonts/KaTeX_Main-BoldItalic.ttf b/Perlite/perlite/.styles/fonts/KaTeX_Main-BoldItalic.ttf new file mode 100644 index 0000000..dc00797 Binary files /dev/null and b/Perlite/perlite/.styles/fonts/KaTeX_Main-BoldItalic.ttf differ diff --git a/Perlite/perlite/.styles/fonts/KaTeX_Main-BoldItalic.woff b/Perlite/perlite/.styles/fonts/KaTeX_Main-BoldItalic.woff new file mode 100644 index 0000000..67807b0 Binary files /dev/null and b/Perlite/perlite/.styles/fonts/KaTeX_Main-BoldItalic.woff differ diff --git a/Perlite/perlite/.styles/fonts/KaTeX_Main-BoldItalic.woff2 b/Perlite/perlite/.styles/fonts/KaTeX_Main-BoldItalic.woff2 new file mode 100644 index 0000000..5931794 Binary files /dev/null and b/Perlite/perlite/.styles/fonts/KaTeX_Main-BoldItalic.woff2 differ diff --git a/Perlite/perlite/.styles/fonts/KaTeX_Main-Italic.ttf b/Perlite/perlite/.styles/fonts/KaTeX_Main-Italic.ttf new file mode 100644 index 0000000..0e9b0f3 Binary files /dev/null and b/Perlite/perlite/.styles/fonts/KaTeX_Main-Italic.ttf differ diff --git a/Perlite/perlite/.styles/fonts/KaTeX_Main-Italic.woff b/Perlite/perlite/.styles/fonts/KaTeX_Main-Italic.woff new file mode 100644 index 0000000..6f43b59 Binary files /dev/null and b/Perlite/perlite/.styles/fonts/KaTeX_Main-Italic.woff differ diff --git a/Perlite/perlite/.styles/fonts/KaTeX_Main-Italic.woff2 b/Perlite/perlite/.styles/fonts/KaTeX_Main-Italic.woff2 new file mode 100644 index 0000000..b50920e Binary files /dev/null and b/Perlite/perlite/.styles/fonts/KaTeX_Main-Italic.woff2 differ diff --git a/Perlite/perlite/.styles/fonts/KaTeX_Main-Regular.ttf b/Perlite/perlite/.styles/fonts/KaTeX_Main-Regular.ttf new file mode 100644 index 0000000..dd45e1e Binary files /dev/null and b/Perlite/perlite/.styles/fonts/KaTeX_Main-Regular.ttf differ diff --git a/Perlite/perlite/.styles/fonts/KaTeX_Main-Regular.woff b/Perlite/perlite/.styles/fonts/KaTeX_Main-Regular.woff new file mode 100644 index 0000000..21f5812 Binary files /dev/null and b/Perlite/perlite/.styles/fonts/KaTeX_Main-Regular.woff differ diff --git a/Perlite/perlite/.styles/fonts/KaTeX_Main-Regular.woff2 b/Perlite/perlite/.styles/fonts/KaTeX_Main-Regular.woff2 new file mode 100644 index 0000000..eb24a7b Binary files /dev/null and b/Perlite/perlite/.styles/fonts/KaTeX_Main-Regular.woff2 differ diff --git a/Perlite/perlite/.styles/fonts/KaTeX_Math-BoldItalic.ttf b/Perlite/perlite/.styles/fonts/KaTeX_Math-BoldItalic.ttf new file mode 100644 index 0000000..728ce7a Binary files /dev/null and b/Perlite/perlite/.styles/fonts/KaTeX_Math-BoldItalic.ttf differ diff --git a/Perlite/perlite/.styles/fonts/KaTeX_Math-BoldItalic.woff b/Perlite/perlite/.styles/fonts/KaTeX_Math-BoldItalic.woff new file mode 100644 index 0000000..0ae390d Binary files /dev/null and b/Perlite/perlite/.styles/fonts/KaTeX_Math-BoldItalic.woff differ diff --git a/Perlite/perlite/.styles/fonts/KaTeX_Math-BoldItalic.woff2 b/Perlite/perlite/.styles/fonts/KaTeX_Math-BoldItalic.woff2 new file mode 100644 index 0000000..2965702 Binary files /dev/null and b/Perlite/perlite/.styles/fonts/KaTeX_Math-BoldItalic.woff2 differ diff --git a/Perlite/perlite/.styles/fonts/KaTeX_Math-Italic.ttf b/Perlite/perlite/.styles/fonts/KaTeX_Math-Italic.ttf new file mode 100644 index 0000000..70d559b Binary files /dev/null and b/Perlite/perlite/.styles/fonts/KaTeX_Math-Italic.ttf differ diff --git a/Perlite/perlite/.styles/fonts/KaTeX_Math-Italic.woff b/Perlite/perlite/.styles/fonts/KaTeX_Math-Italic.woff new file mode 100644 index 0000000..eb5159d Binary files /dev/null and b/Perlite/perlite/.styles/fonts/KaTeX_Math-Italic.woff differ diff --git a/Perlite/perlite/.styles/fonts/KaTeX_Math-Italic.woff2 b/Perlite/perlite/.styles/fonts/KaTeX_Math-Italic.woff2 new file mode 100644 index 0000000..215c143 Binary files /dev/null and b/Perlite/perlite/.styles/fonts/KaTeX_Math-Italic.woff2 differ diff --git a/Perlite/perlite/.styles/fonts/KaTeX_SansSerif-Bold.ttf b/Perlite/perlite/.styles/fonts/KaTeX_SansSerif-Bold.ttf new file mode 100644 index 0000000..2f65a8a Binary files /dev/null and b/Perlite/perlite/.styles/fonts/KaTeX_SansSerif-Bold.ttf differ diff --git a/Perlite/perlite/.styles/fonts/KaTeX_SansSerif-Bold.woff b/Perlite/perlite/.styles/fonts/KaTeX_SansSerif-Bold.woff new file mode 100644 index 0000000..8d47c02 Binary files /dev/null and b/Perlite/perlite/.styles/fonts/KaTeX_SansSerif-Bold.woff differ diff --git a/Perlite/perlite/.styles/fonts/KaTeX_SansSerif-Bold.woff2 b/Perlite/perlite/.styles/fonts/KaTeX_SansSerif-Bold.woff2 new file mode 100644 index 0000000..cfaa3bd Binary files /dev/null and b/Perlite/perlite/.styles/fonts/KaTeX_SansSerif-Bold.woff2 differ diff --git a/Perlite/perlite/.styles/fonts/KaTeX_SansSerif-Italic.ttf b/Perlite/perlite/.styles/fonts/KaTeX_SansSerif-Italic.ttf new file mode 100644 index 0000000..d5850df Binary files /dev/null and b/Perlite/perlite/.styles/fonts/KaTeX_SansSerif-Italic.ttf differ diff --git a/Perlite/perlite/.styles/fonts/KaTeX_SansSerif-Italic.woff b/Perlite/perlite/.styles/fonts/KaTeX_SansSerif-Italic.woff new file mode 100644 index 0000000..7e02df9 Binary files /dev/null and b/Perlite/perlite/.styles/fonts/KaTeX_SansSerif-Italic.woff differ diff --git a/Perlite/perlite/.styles/fonts/KaTeX_SansSerif-Italic.woff2 b/Perlite/perlite/.styles/fonts/KaTeX_SansSerif-Italic.woff2 new file mode 100644 index 0000000..349c06d Binary files /dev/null and b/Perlite/perlite/.styles/fonts/KaTeX_SansSerif-Italic.woff2 differ diff --git a/Perlite/perlite/.styles/fonts/KaTeX_SansSerif-Regular.ttf b/Perlite/perlite/.styles/fonts/KaTeX_SansSerif-Regular.ttf new file mode 100644 index 0000000..537279f Binary files /dev/null and b/Perlite/perlite/.styles/fonts/KaTeX_SansSerif-Regular.ttf differ diff --git a/Perlite/perlite/.styles/fonts/KaTeX_SansSerif-Regular.woff b/Perlite/perlite/.styles/fonts/KaTeX_SansSerif-Regular.woff new file mode 100644 index 0000000..31b8482 Binary files /dev/null and b/Perlite/perlite/.styles/fonts/KaTeX_SansSerif-Regular.woff differ diff --git a/Perlite/perlite/.styles/fonts/KaTeX_SansSerif-Regular.woff2 b/Perlite/perlite/.styles/fonts/KaTeX_SansSerif-Regular.woff2 new file mode 100644 index 0000000..a90eea8 Binary files /dev/null and b/Perlite/perlite/.styles/fonts/KaTeX_SansSerif-Regular.woff2 differ diff --git a/Perlite/perlite/.styles/fonts/KaTeX_Script-Regular.ttf b/Perlite/perlite/.styles/fonts/KaTeX_Script-Regular.ttf new file mode 100644 index 0000000..fd679bf Binary files /dev/null and b/Perlite/perlite/.styles/fonts/KaTeX_Script-Regular.ttf differ diff --git a/Perlite/perlite/.styles/fonts/KaTeX_Script-Regular.woff b/Perlite/perlite/.styles/fonts/KaTeX_Script-Regular.woff new file mode 100644 index 0000000..0e7da82 Binary files /dev/null and b/Perlite/perlite/.styles/fonts/KaTeX_Script-Regular.woff differ diff --git a/Perlite/perlite/.styles/fonts/KaTeX_Script-Regular.woff2 b/Perlite/perlite/.styles/fonts/KaTeX_Script-Regular.woff2 new file mode 100644 index 0000000..b3048fc Binary files /dev/null and b/Perlite/perlite/.styles/fonts/KaTeX_Script-Regular.woff2 differ diff --git a/Perlite/perlite/.styles/fonts/KaTeX_Size1-Regular.ttf b/Perlite/perlite/.styles/fonts/KaTeX_Size1-Regular.ttf new file mode 100644 index 0000000..871fd7d Binary files /dev/null and b/Perlite/perlite/.styles/fonts/KaTeX_Size1-Regular.ttf differ diff --git a/Perlite/perlite/.styles/fonts/KaTeX_Size1-Regular.woff b/Perlite/perlite/.styles/fonts/KaTeX_Size1-Regular.woff new file mode 100644 index 0000000..7f292d9 Binary files /dev/null and b/Perlite/perlite/.styles/fonts/KaTeX_Size1-Regular.woff differ diff --git a/Perlite/perlite/.styles/fonts/KaTeX_Size1-Regular.woff2 b/Perlite/perlite/.styles/fonts/KaTeX_Size1-Regular.woff2 new file mode 100644 index 0000000..c5a8462 Binary files /dev/null and b/Perlite/perlite/.styles/fonts/KaTeX_Size1-Regular.woff2 differ diff --git a/Perlite/perlite/.styles/fonts/KaTeX_Size2-Regular.ttf b/Perlite/perlite/.styles/fonts/KaTeX_Size2-Regular.ttf new file mode 100644 index 0000000..7a212ca Binary files /dev/null and b/Perlite/perlite/.styles/fonts/KaTeX_Size2-Regular.ttf differ diff --git a/Perlite/perlite/.styles/fonts/KaTeX_Size2-Regular.woff b/Perlite/perlite/.styles/fonts/KaTeX_Size2-Regular.woff new file mode 100644 index 0000000..d241d9b Binary files /dev/null and b/Perlite/perlite/.styles/fonts/KaTeX_Size2-Regular.woff differ diff --git a/Perlite/perlite/.styles/fonts/KaTeX_Size2-Regular.woff2 b/Perlite/perlite/.styles/fonts/KaTeX_Size2-Regular.woff2 new file mode 100644 index 0000000..e1bccfe Binary files /dev/null and b/Perlite/perlite/.styles/fonts/KaTeX_Size2-Regular.woff2 differ diff --git a/Perlite/perlite/.styles/fonts/KaTeX_Size3-Regular.ttf b/Perlite/perlite/.styles/fonts/KaTeX_Size3-Regular.ttf new file mode 100644 index 0000000..00bff34 Binary files /dev/null and b/Perlite/perlite/.styles/fonts/KaTeX_Size3-Regular.ttf differ diff --git a/Perlite/perlite/.styles/fonts/KaTeX_Size3-Regular.woff b/Perlite/perlite/.styles/fonts/KaTeX_Size3-Regular.woff new file mode 100644 index 0000000..e6e9b65 Binary files /dev/null and b/Perlite/perlite/.styles/fonts/KaTeX_Size3-Regular.woff differ diff --git a/Perlite/perlite/.styles/fonts/KaTeX_Size3-Regular.woff2 b/Perlite/perlite/.styles/fonts/KaTeX_Size3-Regular.woff2 new file mode 100644 index 0000000..249a286 Binary files /dev/null and b/Perlite/perlite/.styles/fonts/KaTeX_Size3-Regular.woff2 differ diff --git a/Perlite/perlite/.styles/fonts/KaTeX_Size4-Regular.ttf b/Perlite/perlite/.styles/fonts/KaTeX_Size4-Regular.ttf new file mode 100644 index 0000000..74f0892 Binary files /dev/null and b/Perlite/perlite/.styles/fonts/KaTeX_Size4-Regular.ttf differ diff --git a/Perlite/perlite/.styles/fonts/KaTeX_Size4-Regular.woff b/Perlite/perlite/.styles/fonts/KaTeX_Size4-Regular.woff new file mode 100644 index 0000000..e1ec545 Binary files /dev/null and b/Perlite/perlite/.styles/fonts/KaTeX_Size4-Regular.woff differ diff --git a/Perlite/perlite/.styles/fonts/KaTeX_Size4-Regular.woff2 b/Perlite/perlite/.styles/fonts/KaTeX_Size4-Regular.woff2 new file mode 100644 index 0000000..680c130 Binary files /dev/null and b/Perlite/perlite/.styles/fonts/KaTeX_Size4-Regular.woff2 differ diff --git a/Perlite/perlite/.styles/fonts/KaTeX_Typewriter-Regular.ttf b/Perlite/perlite/.styles/fonts/KaTeX_Typewriter-Regular.ttf new file mode 100644 index 0000000..c83252c Binary files /dev/null and b/Perlite/perlite/.styles/fonts/KaTeX_Typewriter-Regular.ttf differ diff --git a/Perlite/perlite/.styles/fonts/KaTeX_Typewriter-Regular.woff b/Perlite/perlite/.styles/fonts/KaTeX_Typewriter-Regular.woff new file mode 100644 index 0000000..2432419 Binary files /dev/null and b/Perlite/perlite/.styles/fonts/KaTeX_Typewriter-Regular.woff differ diff --git a/Perlite/perlite/.styles/fonts/KaTeX_Typewriter-Regular.woff2 b/Perlite/perlite/.styles/fonts/KaTeX_Typewriter-Regular.woff2 new file mode 100644 index 0000000..771f1af Binary files /dev/null and b/Perlite/perlite/.styles/fonts/KaTeX_Typewriter-Regular.woff2 differ diff --git a/Perlite/perlite/.styles/github-color.svg b/Perlite/perlite/.styles/github-color.svg new file mode 100644 index 0000000..775adcc --- /dev/null +++ b/Perlite/perlite/.styles/github-color.svg @@ -0,0 +1 @@ +GitHub \ No newline at end of file diff --git a/Perlite/perlite/.styles/katex.min.css b/Perlite/perlite/.styles/katex.min.css new file mode 100644 index 0000000..3d176ab --- /dev/null +++ b/Perlite/perlite/.styles/katex.min.css @@ -0,0 +1 @@ +@font-face{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-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-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-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-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-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-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-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-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-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-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-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-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-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-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-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-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-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-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-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,Times New Roman,serif;line-height:1.2;text-indent:0;text-rendering:auto}.katex *{-ms-high-contrast-adjust:none!important;border-color:currentColor}.katex .katex-version:after{content:"0.16.22"}.katex .katex-mathml{clip:rect(1px,1px,1px,1px);border:0;height:1px;overflow:hidden;padding:0;position:absolute;width:1px}.katex .katex-html>.newline{display:block}.katex .base{position:relative;white-space:nowrap;width:-webkit-min-content;width:-moz-min-content;width:min-content}.katex .base,.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 .vbox{align-items:baseline;display:inline-flex;flex-direction:column}.katex .hbox{width:100%}.katex .hbox,.katex .thinbox{display:inline-flex;flex-direction:row}.katex .thinbox{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 .hdashline,.katex .hline,.katex .mfrac .frac-line,.katex .overline .overline-line,.katex .rule,.katex .underline .underline-line{min-height:1px}.katex .mspace{display:inline-block}.katex .clap,.katex .llap,.katex .rlap{position:relative;width:0}.katex .clap>.inner,.katex .llap>.inner,.katex .rlap>.inner{position:absolute}.katex .clap>.fix,.katex .llap>.fix,.katex .rlap>.fix{display:inline-block}.katex .llap>.inner{right:0}.katex .clap>.inner,.katex .rlap>.inner{left:0}.katex .clap>.inner>span{margin-left:-50%;margin-right:50%}.katex .rule{border:0 solid;display:inline-block;position:relative}.katex .hline,.katex .overline .overline-line,.katex .underline .underline-line{border-bottom-style:solid;display:inline-block;width:100%}.katex .hdashline{border-bottom-style:dashed;display:inline-block;width:100%}.katex .sqrt>.root{margin-left:.2777777778em;margin-right:-.5555555556em}.katex .fontsize-ensurer.reset-size1.size1,.katex .sizing.reset-size1.size1{font-size:1em}.katex .fontsize-ensurer.reset-size1.size2,.katex .sizing.reset-size1.size2{font-size:1.2em}.katex .fontsize-ensurer.reset-size1.size3,.katex .sizing.reset-size1.size3{font-size:1.4em}.katex .fontsize-ensurer.reset-size1.size4,.katex .sizing.reset-size1.size4{font-size:1.6em}.katex .fontsize-ensurer.reset-size1.size5,.katex .sizing.reset-size1.size5{font-size:1.8em}.katex .fontsize-ensurer.reset-size1.size6,.katex .sizing.reset-size1.size6{font-size:2em}.katex .fontsize-ensurer.reset-size1.size7,.katex .sizing.reset-size1.size7{font-size:2.4em}.katex .fontsize-ensurer.reset-size1.size8,.katex .sizing.reset-size1.size8{font-size:2.88em}.katex .fontsize-ensurer.reset-size1.size9,.katex .sizing.reset-size1.size9{font-size:3.456em}.katex .fontsize-ensurer.reset-size1.size10,.katex .sizing.reset-size1.size10{font-size:4.148em}.katex .fontsize-ensurer.reset-size1.size11,.katex .sizing.reset-size1.size11{font-size:4.976em}.katex .fontsize-ensurer.reset-size2.size1,.katex .sizing.reset-size2.size1{font-size:.8333333333em}.katex .fontsize-ensurer.reset-size2.size2,.katex .sizing.reset-size2.size2{font-size:1em}.katex .fontsize-ensurer.reset-size2.size3,.katex .sizing.reset-size2.size3{font-size:1.1666666667em}.katex .fontsize-ensurer.reset-size2.size4,.katex .sizing.reset-size2.size4{font-size:1.3333333333em}.katex .fontsize-ensurer.reset-size2.size5,.katex .sizing.reset-size2.size5{font-size:1.5em}.katex .fontsize-ensurer.reset-size2.size6,.katex .sizing.reset-size2.size6{font-size:1.6666666667em}.katex .fontsize-ensurer.reset-size2.size7,.katex .sizing.reset-size2.size7{font-size:2em}.katex .fontsize-ensurer.reset-size2.size8,.katex .sizing.reset-size2.size8{font-size:2.4em}.katex .fontsize-ensurer.reset-size2.size9,.katex .sizing.reset-size2.size9{font-size:2.88em}.katex .fontsize-ensurer.reset-size2.size10,.katex .sizing.reset-size2.size10{font-size:3.4566666667em}.katex .fontsize-ensurer.reset-size2.size11,.katex .sizing.reset-size2.size11{font-size:4.1466666667em}.katex .fontsize-ensurer.reset-size3.size1,.katex .sizing.reset-size3.size1{font-size:.7142857143em}.katex .fontsize-ensurer.reset-size3.size2,.katex .sizing.reset-size3.size2{font-size:.8571428571em}.katex .fontsize-ensurer.reset-size3.size3,.katex .sizing.reset-size3.size3{font-size:1em}.katex .fontsize-ensurer.reset-size3.size4,.katex .sizing.reset-size3.size4{font-size:1.1428571429em}.katex .fontsize-ensurer.reset-size3.size5,.katex .sizing.reset-size3.size5{font-size:1.2857142857em}.katex .fontsize-ensurer.reset-size3.size6,.katex .sizing.reset-size3.size6{font-size:1.4285714286em}.katex .fontsize-ensurer.reset-size3.size7,.katex .sizing.reset-size3.size7{font-size:1.7142857143em}.katex .fontsize-ensurer.reset-size3.size8,.katex .sizing.reset-size3.size8{font-size:2.0571428571em}.katex .fontsize-ensurer.reset-size3.size9,.katex .sizing.reset-size3.size9{font-size:2.4685714286em}.katex .fontsize-ensurer.reset-size3.size10,.katex .sizing.reset-size3.size10{font-size:2.9628571429em}.katex .fontsize-ensurer.reset-size3.size11,.katex .sizing.reset-size3.size11{font-size:3.5542857143em}.katex .fontsize-ensurer.reset-size4.size1,.katex .sizing.reset-size4.size1{font-size:.625em}.katex .fontsize-ensurer.reset-size4.size2,.katex .sizing.reset-size4.size2{font-size:.75em}.katex .fontsize-ensurer.reset-size4.size3,.katex .sizing.reset-size4.size3{font-size:.875em}.katex .fontsize-ensurer.reset-size4.size4,.katex .sizing.reset-size4.size4{font-size:1em}.katex .fontsize-ensurer.reset-size4.size5,.katex .sizing.reset-size4.size5{font-size:1.125em}.katex .fontsize-ensurer.reset-size4.size6,.katex .sizing.reset-size4.size6{font-size:1.25em}.katex .fontsize-ensurer.reset-size4.size7,.katex .sizing.reset-size4.size7{font-size:1.5em}.katex .fontsize-ensurer.reset-size4.size8,.katex .sizing.reset-size4.size8{font-size:1.8em}.katex .fontsize-ensurer.reset-size4.size9,.katex .sizing.reset-size4.size9{font-size:2.16em}.katex .fontsize-ensurer.reset-size4.size10,.katex .sizing.reset-size4.size10{font-size:2.5925em}.katex .fontsize-ensurer.reset-size4.size11,.katex .sizing.reset-size4.size11{font-size:3.11em}.katex .fontsize-ensurer.reset-size5.size1,.katex .sizing.reset-size5.size1{font-size:.5555555556em}.katex .fontsize-ensurer.reset-size5.size2,.katex .sizing.reset-size5.size2{font-size:.6666666667em}.katex .fontsize-ensurer.reset-size5.size3,.katex .sizing.reset-size5.size3{font-size:.7777777778em}.katex .fontsize-ensurer.reset-size5.size4,.katex .sizing.reset-size5.size4{font-size:.8888888889em}.katex .fontsize-ensurer.reset-size5.size5,.katex .sizing.reset-size5.size5{font-size:1em}.katex .fontsize-ensurer.reset-size5.size6,.katex .sizing.reset-size5.size6{font-size:1.1111111111em}.katex .fontsize-ensurer.reset-size5.size7,.katex .sizing.reset-size5.size7{font-size:1.3333333333em}.katex .fontsize-ensurer.reset-size5.size8,.katex .sizing.reset-size5.size8{font-size:1.6em}.katex .fontsize-ensurer.reset-size5.size9,.katex .sizing.reset-size5.size9{font-size:1.92em}.katex .fontsize-ensurer.reset-size5.size10,.katex .sizing.reset-size5.size10{font-size:2.3044444444em}.katex .fontsize-ensurer.reset-size5.size11,.katex .sizing.reset-size5.size11{font-size:2.7644444444em}.katex .fontsize-ensurer.reset-size6.size1,.katex .sizing.reset-size6.size1{font-size:.5em}.katex .fontsize-ensurer.reset-size6.size2,.katex .sizing.reset-size6.size2{font-size:.6em}.katex .fontsize-ensurer.reset-size6.size3,.katex .sizing.reset-size6.size3{font-size:.7em}.katex .fontsize-ensurer.reset-size6.size4,.katex .sizing.reset-size6.size4{font-size:.8em}.katex .fontsize-ensurer.reset-size6.size5,.katex .sizing.reset-size6.size5{font-size:.9em}.katex .fontsize-ensurer.reset-size6.size6,.katex .sizing.reset-size6.size6{font-size:1em}.katex .fontsize-ensurer.reset-size6.size7,.katex .sizing.reset-size6.size7{font-size:1.2em}.katex .fontsize-ensurer.reset-size6.size8,.katex .sizing.reset-size6.size8{font-size:1.44em}.katex .fontsize-ensurer.reset-size6.size9,.katex .sizing.reset-size6.size9{font-size:1.728em}.katex .fontsize-ensurer.reset-size6.size10,.katex .sizing.reset-size6.size10{font-size:2.074em}.katex .fontsize-ensurer.reset-size6.size11,.katex .sizing.reset-size6.size11{font-size:2.488em}.katex .fontsize-ensurer.reset-size7.size1,.katex .sizing.reset-size7.size1{font-size:.4166666667em}.katex .fontsize-ensurer.reset-size7.size2,.katex .sizing.reset-size7.size2{font-size:.5em}.katex .fontsize-ensurer.reset-size7.size3,.katex .sizing.reset-size7.size3{font-size:.5833333333em}.katex .fontsize-ensurer.reset-size7.size4,.katex .sizing.reset-size7.size4{font-size:.6666666667em}.katex .fontsize-ensurer.reset-size7.size5,.katex .sizing.reset-size7.size5{font-size:.75em}.katex .fontsize-ensurer.reset-size7.size6,.katex .sizing.reset-size7.size6{font-size:.8333333333em}.katex .fontsize-ensurer.reset-size7.size7,.katex .sizing.reset-size7.size7{font-size:1em}.katex .fontsize-ensurer.reset-size7.size8,.katex .sizing.reset-size7.size8{font-size:1.2em}.katex .fontsize-ensurer.reset-size7.size9,.katex .sizing.reset-size7.size9{font-size:1.44em}.katex .fontsize-ensurer.reset-size7.size10,.katex .sizing.reset-size7.size10{font-size:1.7283333333em}.katex .fontsize-ensurer.reset-size7.size11,.katex .sizing.reset-size7.size11{font-size:2.0733333333em}.katex .fontsize-ensurer.reset-size8.size1,.katex .sizing.reset-size8.size1{font-size:.3472222222em}.katex .fontsize-ensurer.reset-size8.size2,.katex .sizing.reset-size8.size2{font-size:.4166666667em}.katex .fontsize-ensurer.reset-size8.size3,.katex .sizing.reset-size8.size3{font-size:.4861111111em}.katex .fontsize-ensurer.reset-size8.size4,.katex .sizing.reset-size8.size4{font-size:.5555555556em}.katex .fontsize-ensurer.reset-size8.size5,.katex .sizing.reset-size8.size5{font-size:.625em}.katex .fontsize-ensurer.reset-size8.size6,.katex .sizing.reset-size8.size6{font-size:.6944444444em}.katex .fontsize-ensurer.reset-size8.size7,.katex .sizing.reset-size8.size7{font-size:.8333333333em}.katex .fontsize-ensurer.reset-size8.size8,.katex .sizing.reset-size8.size8{font-size:1em}.katex .fontsize-ensurer.reset-size8.size9,.katex .sizing.reset-size8.size9{font-size:1.2em}.katex .fontsize-ensurer.reset-size8.size10,.katex .sizing.reset-size8.size10{font-size:1.4402777778em}.katex .fontsize-ensurer.reset-size8.size11,.katex .sizing.reset-size8.size11{font-size:1.7277777778em}.katex .fontsize-ensurer.reset-size9.size1,.katex .sizing.reset-size9.size1{font-size:.2893518519em}.katex .fontsize-ensurer.reset-size9.size2,.katex .sizing.reset-size9.size2{font-size:.3472222222em}.katex .fontsize-ensurer.reset-size9.size3,.katex .sizing.reset-size9.size3{font-size:.4050925926em}.katex .fontsize-ensurer.reset-size9.size4,.katex .sizing.reset-size9.size4{font-size:.462962963em}.katex .fontsize-ensurer.reset-size9.size5,.katex .sizing.reset-size9.size5{font-size:.5208333333em}.katex .fontsize-ensurer.reset-size9.size6,.katex .sizing.reset-size9.size6{font-size:.5787037037em}.katex .fontsize-ensurer.reset-size9.size7,.katex .sizing.reset-size9.size7{font-size:.6944444444em}.katex .fontsize-ensurer.reset-size9.size8,.katex .sizing.reset-size9.size8{font-size:.8333333333em}.katex .fontsize-ensurer.reset-size9.size9,.katex .sizing.reset-size9.size9{font-size:1em}.katex .fontsize-ensurer.reset-size9.size10,.katex .sizing.reset-size9.size10{font-size:1.2002314815em}.katex .fontsize-ensurer.reset-size9.size11,.katex .sizing.reset-size9.size11{font-size:1.4398148148em}.katex .fontsize-ensurer.reset-size10.size1,.katex .sizing.reset-size10.size1{font-size:.2410800386em}.katex .fontsize-ensurer.reset-size10.size2,.katex .sizing.reset-size10.size2{font-size:.2892960463em}.katex .fontsize-ensurer.reset-size10.size3,.katex .sizing.reset-size10.size3{font-size:.337512054em}.katex .fontsize-ensurer.reset-size10.size4,.katex .sizing.reset-size10.size4{font-size:.3857280617em}.katex .fontsize-ensurer.reset-size10.size5,.katex .sizing.reset-size10.size5{font-size:.4339440694em}.katex .fontsize-ensurer.reset-size10.size6,.katex .sizing.reset-size10.size6{font-size:.4821600771em}.katex .fontsize-ensurer.reset-size10.size7,.katex .sizing.reset-size10.size7{font-size:.5785920926em}.katex .fontsize-ensurer.reset-size10.size8,.katex .sizing.reset-size10.size8{font-size:.6943105111em}.katex .fontsize-ensurer.reset-size10.size9,.katex .sizing.reset-size10.size9{font-size:.8331726133em}.katex .fontsize-ensurer.reset-size10.size10,.katex .sizing.reset-size10.size10{font-size:1em}.katex .fontsize-ensurer.reset-size10.size11,.katex .sizing.reset-size10.size11{font-size:1.1996142719em}.katex .fontsize-ensurer.reset-size11.size1,.katex .sizing.reset-size11.size1{font-size:.2009646302em}.katex .fontsize-ensurer.reset-size11.size2,.katex .sizing.reset-size11.size2{font-size:.2411575563em}.katex .fontsize-ensurer.reset-size11.size3,.katex .sizing.reset-size11.size3{font-size:.2813504823em}.katex .fontsize-ensurer.reset-size11.size4,.katex .sizing.reset-size11.size4{font-size:.3215434084em}.katex .fontsize-ensurer.reset-size11.size5,.katex .sizing.reset-size11.size5{font-size:.3617363344em}.katex .fontsize-ensurer.reset-size11.size6,.katex .sizing.reset-size11.size6{font-size:.4019292605em}.katex .fontsize-ensurer.reset-size11.size7,.katex .sizing.reset-size11.size7{font-size:.4823151125em}.katex .fontsize-ensurer.reset-size11.size8,.katex .sizing.reset-size11.size8{font-size:.578778135em}.katex .fontsize-ensurer.reset-size11.size9,.katex .sizing.reset-size11.size9{font-size:.6945337621em}.katex .fontsize-ensurer.reset-size11.size10,.katex .sizing.reset-size11.size10{font-size:.8336012862em}.katex .fontsize-ensurer.reset-size11.size11,.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 .accent>.vlist-t,.katex .op-limits>.vlist-t{text-align:center}.katex .accent .accent-body{position:relative}.katex .accent .accent-body:not(.accent-full){width:0}.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;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;display:block;height:inherit;position:absolute;width:100%}.katex svg path{stroke:none}.katex img{border-style:none;max-height:none;max-width:none;min-height:0;min-width:0}.katex .stretchy{display:block;overflow:hidden;position:relative;width:100%}.katex .stretchy:after,.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 .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 .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>.tag{position:absolute;right:0}.katex-display.leqno>.katex>.katex-html>.tag{left:0;right:auto}.katex-display.fleqn>.katex{padding-left:2em;text-align:left}body{counter-reset:katexEqnNo mmlEqnNo} diff --git a/Perlite/perlite/.styles/perlite.css b/Perlite/perlite/.styles/perlite.css new file mode 100644 index 0000000..4652a80 --- /dev/null +++ b/Perlite/perlite/.styles/perlite.css @@ -0,0 +1,183 @@ + +.logo { + position: fixed; + top: 8px; + left: 5px; +} + +.custom-page { + text-align: center; + border-bottom: var(--divider-width) solid var(--divider-color); +} + +.custom-page-logo { + border-radius: 50%; + width: 130px; +} + +.social-logo { + width: 20px; +} + +.social-media-list { + padding-left: 10px; + list-style-type: none; +} + +.social-media-list li { + display: inline-block; + padding-right: 10px; +} + +.sm-site-title { + padding-top: 0px; + padding-bottom: 10px; +} + +.sm-site-desc { + padding-bottom: 10px; + max-width: 80%; + display: inline-block; +} + + +.sidebar-toggle-button.mod-left { + position: relative; + width: unset; +} + +.collapse:not(.show) { + display: none; +} + +.workspace-split.mod-vertical.mod-root { + min-width: 400px; +} + +/* fix graph canvas height */ +#localGraph { + border: calc(0.5px + var(--divider-width)) solid var(--divider-color); + height: 50%; +} + +#mynetwork { + height: 100%; +} + +#graph_all{ + height: 100%; +} + +.is-sidedock-collapse { + display: none; + width: 0%; +} + +.nav-buttons-container { + justify-content: right !important; +} + +img { + display: initial !important; + max-width: 100%; +} + +.images.center { + display: block !important; + margin-left: auto; + margin-right: auto; +} + +.images.right { + display: block !important; + margin-left: auto; + margin-right: 0; +} + +.popup-icon { + padding-bottom: 1px; + top: -6px; + position: relative; + left: 3px; +} + +#loading-text { + position: absolute; + top: 8px; +} + +.inline-title { + padding-bottom: 30px; +} + +#mdContent h1:nth-of-type(1) { + padding-top: 0px !important; +} + +h1, h2, h3, h4 { + padding-top: 30px; +} + +.sidebar-top h3{ + padding-top: 0px !important; + margin-top: 0px !important; +} + +.toc-item { + padding-left: 10px !important; +} + +.metadata-text { + line-height: 1.9; + text-indent: 5px; +} + +.is-collapsed-callout { + display: none; +} + +.callout-title-inner * { + display: inline !important; + +} + +span.cm-highlight { + background-color: var(--text-highlight-bg); + color: var(--text-normal); +} + +#tags_container { + margin-top: 30px; +} + +/* --------------- */ +/* Mobile / Responive Settings */ + +@media screen and (max-width: 990px) { + + .workspace-split.mod-horizontal.mod-right-split { + display: none; + } + .workspace-split.mod-horizontal.mod-left-split { + width: 90vw !important; + max-width: 300px !important; + } + + .markdown-preview-view { + padding: 10px !important; + + } + + .sidebar-toggle-button.mod-right { + display: none; + } + + .workspace-split.mod-vertical.mod-root { + min-width: unset; + } + + #mdContent { + padding-right: 30px; + } + +} \ No newline at end of file diff --git a/Perlite/perlite/.styles/public/fonts/05b618077343fbbd92b7.ttf b/Perlite/perlite/.styles/public/fonts/05b618077343fbbd92b7.ttf new file mode 100644 index 0000000..0878199 Binary files /dev/null and b/Perlite/perlite/.styles/public/fonts/05b618077343fbbd92b7.ttf differ diff --git a/Perlite/perlite/.styles/public/fonts/2d5198822ab091ce4305.woff2 b/Perlite/perlite/.styles/public/fonts/2d5198822ab091ce4305.woff2 new file mode 100644 index 0000000..bc4be66 Binary files /dev/null and b/Perlite/perlite/.styles/public/fonts/2d5198822ab091ce4305.woff2 differ diff --git a/Perlite/perlite/.styles/public/fonts/454577c22304619db035.ttf b/Perlite/perlite/.styles/public/fonts/454577c22304619db035.ttf new file mode 100644 index 0000000..91a2a44 Binary files /dev/null and b/Perlite/perlite/.styles/public/fonts/454577c22304619db035.ttf differ diff --git a/Perlite/perlite/.styles/public/fonts/52ac8f3034507f1d9e53.ttf b/Perlite/perlite/.styles/public/fonts/52ac8f3034507f1d9e53.ttf new file mode 100644 index 0000000..c790e04 Binary files /dev/null and b/Perlite/perlite/.styles/public/fonts/52ac8f3034507f1d9e53.ttf differ diff --git a/Perlite/perlite/.styles/public/fonts/535a6cf662596b3bd6a6.woff2 b/Perlite/perlite/.styles/public/fonts/535a6cf662596b3bd6a6.woff2 new file mode 100644 index 0000000..4a81dc7 Binary files /dev/null and b/Perlite/perlite/.styles/public/fonts/535a6cf662596b3bd6a6.woff2 differ diff --git a/Perlite/perlite/.styles/public/fonts/70cc7ff27245e82ad414.ttf b/Perlite/perlite/.styles/public/fonts/70cc7ff27245e82ad414.ttf new file mode 100644 index 0000000..3563e73 Binary files /dev/null and b/Perlite/perlite/.styles/public/fonts/70cc7ff27245e82ad414.ttf differ diff --git a/Perlite/perlite/.styles/public/fonts/72505e6a122c6acd5471.woff2 b/Perlite/perlite/.styles/public/fonts/72505e6a122c6acd5471.woff2 new file mode 100644 index 0000000..f2ea706 Binary files /dev/null and b/Perlite/perlite/.styles/public/fonts/72505e6a122c6acd5471.woff2 differ diff --git a/Perlite/perlite/.styles/public/fonts/853ff76f08786ae44ca0.woff b/Perlite/perlite/.styles/public/fonts/853ff76f08786ae44ca0.woff new file mode 100644 index 0000000..a1a0a4a Binary files /dev/null and b/Perlite/perlite/.styles/public/fonts/853ff76f08786ae44ca0.woff differ diff --git a/Perlite/perlite/.styles/public/fonts/94f2f163d4b698242fef.otf b/Perlite/perlite/.styles/public/fonts/94f2f163d4b698242fef.otf new file mode 100644 index 0000000..263ae4c Binary files /dev/null and b/Perlite/perlite/.styles/public/fonts/94f2f163d4b698242fef.otf differ diff --git a/Perlite/perlite/.styles/public/fonts/b5f0f109bc88052d4000.woff2 b/Perlite/perlite/.styles/public/fonts/b5f0f109bc88052d4000.woff2 new file mode 100644 index 0000000..611e90c Binary files /dev/null and b/Perlite/perlite/.styles/public/fonts/b5f0f109bc88052d4000.woff2 differ diff --git a/Perlite/perlite/.styles/public/fonts/c8ba52b05a9ef10f4758.woff2 b/Perlite/perlite/.styles/public/fonts/c8ba52b05a9ef10f4758.woff2 new file mode 100644 index 0000000..6c2b689 Binary files /dev/null and b/Perlite/perlite/.styles/public/fonts/c8ba52b05a9ef10f4758.woff2 differ diff --git a/Perlite/perlite/.styles/public/fonts/cb10ffd7684cd9836a05.woff2 b/Perlite/perlite/.styles/public/fonts/cb10ffd7684cd9836a05.woff2 new file mode 100644 index 0000000..a619fc5 Binary files /dev/null and b/Perlite/perlite/.styles/public/fonts/cb10ffd7684cd9836a05.woff2 differ diff --git a/Perlite/perlite/.styles/public/fonts/cbe0ae49c52c920fd563.woff2 b/Perlite/perlite/.styles/public/fonts/cbe0ae49c52c920fd563.woff2 new file mode 100644 index 0000000..c24c2bd Binary files /dev/null and b/Perlite/perlite/.styles/public/fonts/cbe0ae49c52c920fd563.woff2 differ diff --git a/Perlite/perlite/.styles/public/images/7877465e5f8197b19e8e.gif b/Perlite/perlite/.styles/public/images/7877465e5f8197b19e8e.gif new file mode 100644 index 0000000..8766b3c Binary files /dev/null and b/Perlite/perlite/.styles/public/images/7877465e5f8197b19e8e.gif differ diff --git a/Perlite/perlite/.styles/public/images/874d8b8e340f75575caa.svg b/Perlite/perlite/.styles/public/images/874d8b8e340f75575caa.svg new file mode 100644 index 0000000..db5d5a6 --- /dev/null +++ b/Perlite/perlite/.styles/public/images/874d8b8e340f75575caa.svg @@ -0,0 +1,2 @@ + + diff --git a/Perlite/perlite/.styles/vis-network.min.css b/Perlite/perlite/.styles/vis-network.min.css new file mode 100644 index 0000000..8b03219 --- /dev/null +++ b/Perlite/perlite/.styles/vis-network.min.css @@ -0,0 +1 @@ +.vis-overlay{bottom:0;left:0;position:absolute;right:0;top:0;z-index:10}.vis-active{box-shadow:0 0 10px #86d5f8}.vis [class*=span]{min-height:0;width:auto}div.vis-color-picker{background-color:#fff;border-radius:15px;box-shadow:0 0 10px 0 rgba(0,0,0,.5);display:none;height:444px;left:30px;margin-left:30px;margin-top:-140px;padding:10px;position:absolute;top:0;width:310px;z-index:1}div.vis-color-picker div.vis-arrow{left:5px;position:absolute;top:147px}div.vis-color-picker div.vis-arrow:after,div.vis-color-picker div.vis-arrow:before{border:solid transparent;content:" ";height:0;pointer-events:none;position:absolute;right:100%;top:50%;width:0}div.vis-color-picker div.vis-arrow:after{border-color:hsla(0,0%,100%,0) #fff hsla(0,0%,100%,0) hsla(0,0%,100%,0);border-width:30px;margin-top:-30px}div.vis-color-picker div.vis-color{cursor:pointer;height:289px;position:absolute;width:289px}div.vis-color-picker div.vis-brightness{position:absolute;top:313px}div.vis-color-picker div.vis-opacity{position:absolute;top:350px}div.vis-color-picker div.vis-selector{background:#4c4c4c;background:-moz-linear-gradient(top,#4c4c4c 0,#595959 12%,#666 25%,#474747 39%,#2c2c2c 50%,#000 51%,#111 60%,#2b2b2b 76%,#1c1c1c 91%,#131313 100%);background:-webkit-gradient(linear,left top,left bottom,color-stop(0,#4c4c4c),color-stop(12%,#595959),color-stop(25%,#666),color-stop(39%,#474747),color-stop(50%,#2c2c2c),color-stop(51%,#000),color-stop(60%,#111),color-stop(76%,#2b2b2b),color-stop(91%,#1c1c1c),color-stop(100%,#131313));background:-webkit-linear-gradient(top,#4c4c4c,#595959 12%,#666 25%,#474747 39%,#2c2c2c 50%,#000 51%,#111 60%,#2b2b2b 76%,#1c1c1c 91%,#131313);background:-o-linear-gradient(top,#4c4c4c 0,#595959 12%,#666 25%,#474747 39%,#2c2c2c 50%,#000 51%,#111 60%,#2b2b2b 76%,#1c1c1c 91%,#131313 100%);background:-ms-linear-gradient(top,#4c4c4c 0,#595959 12%,#666 25%,#474747 39%,#2c2c2c 50%,#000 51%,#111 60%,#2b2b2b 76%,#1c1c1c 91%,#131313 100%);background:linear-gradient(180deg,#4c4c4c 0,#595959 12%,#666 25%,#474747 39%,#2c2c2c 50%,#000 51%,#111 60%,#2b2b2b 76%,#1c1c1c 91%,#131313);border:1px solid #fff;border-radius:15px;filter:progid:DXImageTransform.Microsoft.gradient(startColorstr="#4c4c4c",endColorstr="#131313",GradientType=0);height:15px;left:137px;position:absolute;top:137px;width:15px}div.vis-color-picker div.vis-new-color{left:159px;padding-right:2px;text-align:right}div.vis-color-picker div.vis-initial-color,div.vis-color-picker div.vis-new-color{border:1px solid rgba(0,0,0,.1);border-radius:5px;color:rgba(0,0,0,.4);font-size:10px;height:20px;line-height:20px;position:absolute;top:380px;vertical-align:middle;width:140px}div.vis-color-picker div.vis-initial-color{left:10px;padding-left:2px;text-align:left}div.vis-color-picker div.vis-label{left:10px;position:absolute;width:300px}div.vis-color-picker div.vis-label.vis-brightness{top:300px}div.vis-color-picker div.vis-label.vis-opacity{top:338px}div.vis-color-picker div.vis-button{background-color:#f7f7f7;border:2px solid #d9d9d9;border-radius:10px;cursor:pointer;height:25px;line-height:25px;position:absolute;text-align:center;top:410px;vertical-align:middle;width:68px}div.vis-color-picker div.vis-button.vis-cancel{left:5px}div.vis-color-picker div.vis-button.vis-load{left:82px}div.vis-color-picker div.vis-button.vis-apply{left:159px}div.vis-color-picker div.vis-button.vis-save{left:236px}div.vis-color-picker input.vis-range{height:20px;width:290px}div.vis-configuration{display:block;float:left;font-size:12px;position:relative}div.vis-configuration-wrapper{display:block;width:700px}div.vis-configuration-wrapper:after{clear:both;content:"";display:block}div.vis-configuration.vis-config-option-container{background-color:#fff;border:2px solid #f7f8fa;border-radius:4px;display:block;left:10px;margin-top:20px;padding-left:5px;width:495px}div.vis-configuration.vis-config-button{background-color:#f7f8fa;border:2px solid #ceced0;border-radius:4px;cursor:pointer;display:block;height:25px;left:10px;line-height:25px;margin-bottom:30px;margin-top:20px;padding-left:5px;vertical-align:middle;width:495px}div.vis-configuration.vis-config-button.hover{background-color:#4588e6;border:2px solid #214373;color:#fff}div.vis-configuration.vis-config-item{display:block;float:left;height:25px;line-height:25px;vertical-align:middle;width:495px}div.vis-configuration.vis-config-item.vis-config-s2{background-color:#f7f8fa;border-radius:3px;left:10px;padding-left:5px}div.vis-configuration.vis-config-item.vis-config-s3{background-color:#e4e9f0;border-radius:3px;left:20px;padding-left:5px}div.vis-configuration.vis-config-item.vis-config-s4{background-color:#cfd8e6;border-radius:3px;left:30px;padding-left:5px}div.vis-configuration.vis-config-header{font-size:18px;font-weight:700}div.vis-configuration.vis-config-label{height:25px;line-height:25px;width:120px}div.vis-configuration.vis-config-label.vis-config-s3{width:110px}div.vis-configuration.vis-config-label.vis-config-s4{width:100px}div.vis-configuration.vis-config-colorBlock{border:1px solid #444;border-radius:2px;cursor:pointer;height:19px;margin:0;padding:0;top:1px;width:30px}input.vis-configuration.vis-config-checkbox{left:-5px}input.vis-configuration.vis-config-rangeinput{margin:0;padding:1px;pointer-events:none;position:relative;top:-5px;width:60px}input.vis-configuration.vis-config-range{-webkit-appearance:none;background-color:transparent;border:0 solid #fff;height:20px;width:300px}input.vis-configuration.vis-config-range::-webkit-slider-runnable-track{background:#dedede;background:-moz-linear-gradient(top,#dedede 0,#c8c8c8 99%);background:-webkit-gradient(linear,left top,left bottom,color-stop(0,#dedede),color-stop(99%,#c8c8c8));background:-webkit-linear-gradient(top,#dedede,#c8c8c8 99%);background:-o-linear-gradient(top,#dedede 0,#c8c8c8 99%);background:-ms-linear-gradient(top,#dedede 0,#c8c8c8 99%);background:linear-gradient(180deg,#dedede 0,#c8c8c8 99%);border:1px solid #999;border-radius:3px;box-shadow:0 0 3px 0 #aaa;filter:progid:DXImageTransform.Microsoft.gradient(startColorstr="#dedede",endColorstr="#c8c8c8",GradientType=0);height:5px;width:300px}input.vis-configuration.vis-config-range::-webkit-slider-thumb{-webkit-appearance:none;background:#3876c2;background:-moz-linear-gradient(top,#3876c2 0,#385380 100%);background:-webkit-gradient(linear,left top,left bottom,color-stop(0,#3876c2),color-stop(100%,#385380));background:-webkit-linear-gradient(top,#3876c2,#385380);background:-o-linear-gradient(top,#3876c2 0,#385380 100%);background:-ms-linear-gradient(top,#3876c2 0,#385380 100%);background:linear-gradient(180deg,#3876c2 0,#385380);border:1px solid #14334b;border-radius:50%;box-shadow:0 0 1px 0 #111927;filter:progid:DXImageTransform.Microsoft.gradient(startColorstr="#3876c2",endColorstr="#385380",GradientType=0);height:17px;margin-top:-7px;width:17px}input.vis-configuration.vis-config-range:focus{outline:none}input.vis-configuration.vis-config-range:focus::-webkit-slider-runnable-track{background:#9d9d9d;background:-moz-linear-gradient(top,#9d9d9d 0,#c8c8c8 99%);background:-webkit-gradient(linear,left top,left bottom,color-stop(0,#9d9d9d),color-stop(99%,#c8c8c8));background:-webkit-linear-gradient(top,#9d9d9d,#c8c8c8 99%);background:-o-linear-gradient(top,#9d9d9d 0,#c8c8c8 99%);background:-ms-linear-gradient(top,#9d9d9d 0,#c8c8c8 99%);background:linear-gradient(180deg,#9d9d9d 0,#c8c8c8 99%);filter:progid:DXImageTransform.Microsoft.gradient(startColorstr="#9d9d9d",endColorstr="#c8c8c8",GradientType=0)}input.vis-configuration.vis-config-range::-moz-range-track{background:#dedede;background:-moz-linear-gradient(top,#dedede 0,#c8c8c8 99%);background:-webkit-gradient(linear,left top,left bottom,color-stop(0,#dedede),color-stop(99%,#c8c8c8));background:-webkit-linear-gradient(top,#dedede,#c8c8c8 99%);background:-o-linear-gradient(top,#dedede 0,#c8c8c8 99%);background:-ms-linear-gradient(top,#dedede 0,#c8c8c8 99%);background:linear-gradient(180deg,#dedede 0,#c8c8c8 99%);border:1px solid #999;border-radius:3px;box-shadow:0 0 3px 0 #aaa;filter:progid:DXImageTransform.Microsoft.gradient(startColorstr="#dedede",endColorstr="#c8c8c8",GradientType=0);height:10px;width:300px}input.vis-configuration.vis-config-range::-moz-range-thumb{background:#385380;border:none;border-radius:50%;height:16px;width:16px}input.vis-configuration.vis-config-range:-moz-focusring{outline:1px solid #fff;outline-offset:-1px}input.vis-configuration.vis-config-range::-ms-track{background:transparent;border-color:transparent;border-width:6px 0;color:transparent;height:5px;width:300px}input.vis-configuration.vis-config-range::-ms-fill-lower{background:#777;border-radius:10px}input.vis-configuration.vis-config-range::-ms-fill-upper{background:#ddd;border-radius:10px}input.vis-configuration.vis-config-range::-ms-thumb{background:#385380;border:none;border-radius:50%;height:16px;width:16px}input.vis-configuration.vis-config-range:focus::-ms-fill-lower{background:#888}input.vis-configuration.vis-config-range:focus::-ms-fill-upper{background:#ccc}.vis-configuration-popup{background:rgba(57,76,89,.85);border:2px solid #f2faff;border-radius:4px;color:#fff;font-size:14px;height:30px;line-height:30px;position:absolute;text-align:center;-webkit-transition:opacity .3s ease-in-out;-moz-transition:opacity .3s ease-in-out;transition:opacity .3s ease-in-out;width:150px}.vis-configuration-popup:after,.vis-configuration-popup:before{border:solid transparent;content:" ";height:0;left:100%;pointer-events:none;position:absolute;top:50%;width:0}.vis-configuration-popup:after{border-color:rgba(136,183,213,0) rgba(136,183,213,0) rgba(136,183,213,0) rgba(57,76,89,.85);border-width:8px;margin-top:-8px}.vis-configuration-popup:before{border-color:rgba(194,225,245,0) rgba(194,225,245,0) rgba(194,225,245,0) #f2faff;border-width:12px;margin-top:-12px}div.vis-tooltip{background-color:#f5f4ed;border:1px solid #808074;-moz-border-radius:3px;-webkit-border-radius:3px;border-radius:3px;box-shadow:3px 3px 10px rgba(0,0,0,.2);color:#000;font-family:verdana;font-size:14px;padding:5px;pointer-events:none;position:absolute;visibility:hidden;white-space:nowrap;z-index:5}div.vis-network div.vis-navigation div.vis-button{-webkit-touch-callout:none;background-position:2px 2px;background-repeat:no-repeat;-moz-border-radius:17px;border-radius:17px;cursor:pointer;display:inline-block;height:34px;position:absolute;-webkit-user-select:none;-khtml-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none;width:34px}div.vis-network div.vis-navigation div.vis-button:hover{box-shadow:0 0 3px 3px rgba(56,207,21,.3)}div.vis-network div.vis-navigation div.vis-button:active{box-shadow:0 0 1px 3px rgba(56,207,21,.95)}div.vis-network div.vis-navigation div.vis-button.vis-up{background-image:url("data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAB4AAAAeCAYAAAA7MK6iAAAACXBIWXMAAAsTAAALEwEAmpwYAAAKT2lDQ1BQaG90b3Nob3AgSUNDIHByb2ZpbGUAAHjanVNnVFPpFj333vRCS4iAlEtvUhUIIFJCi4AUkSYqIQkQSoghodkVUcERRUUEG8igiAOOjoCMFVEsDIoK2AfkIaKOg6OIisr74Xuja9a89+bN/rXXPues852zzwfACAyWSDNRNYAMqUIeEeCDx8TG4eQuQIEKJHAAEAizZCFz/SMBAPh+PDwrIsAHvgABeNMLCADATZvAMByH/w/qQplcAYCEAcB0kThLCIAUAEB6jkKmAEBGAYCdmCZTAKAEAGDLY2LjAFAtAGAnf+bTAICd+Jl7AQBblCEVAaCRACATZYhEAGg7AKzPVopFAFgwABRmS8Q5ANgtADBJV2ZIALC3AMDOEAuyAAgMADBRiIUpAAR7AGDIIyN4AISZABRG8lc88SuuEOcqAAB4mbI8uSQ5RYFbCC1xB1dXLh4ozkkXKxQ2YQJhmkAuwnmZGTKBNA/g88wAAKCRFRHgg/P9eM4Ors7ONo62Dl8t6r8G/yJiYuP+5c+rcEAAAOF0ftH+LC+zGoA7BoBt/qIl7gRoXgugdfeLZrIPQLUAoOnaV/Nw+H48PEWhkLnZ2eXk5NhKxEJbYcpXff5nwl/AV/1s+X48/Pf14L7iJIEyXYFHBPjgwsz0TKUcz5IJhGLc5o9H/LcL//wd0yLESWK5WCoU41EScY5EmozzMqUiiUKSKcUl0v9k4t8s+wM+3zUAsGo+AXuRLahdYwP2SycQWHTA4vcAAPK7b8HUKAgDgGiD4c93/+8//UegJQCAZkmScQAAXkQkLlTKsz/HCAAARKCBKrBBG/TBGCzABhzBBdzBC/xgNoRCJMTCQhBCCmSAHHJgKayCQiiGzbAdKmAv1EAdNMBRaIaTcA4uwlW4Dj1wD/phCJ7BKLyBCQRByAgTYSHaiAFiilgjjggXmYX4IcFIBBKLJCDJiBRRIkuRNUgxUopUIFVIHfI9cgI5h1xGupE7yAAygvyGvEcxlIGyUT3UDLVDuag3GoRGogvQZHQxmo8WoJvQcrQaPYw2oefQq2gP2o8+Q8cwwOgYBzPEbDAuxsNCsTgsCZNjy7EirAyrxhqwVqwDu4n1Y8+xdwQSgUXACTYEd0IgYR5BSFhMWE7YSKggHCQ0EdoJNwkDhFHCJyKTqEu0JroR+cQYYjIxh1hILCPWEo8TLxB7iEPENyQSiUMyJ7mQAkmxpFTSEtJG0m5SI+ksqZs0SBojk8naZGuyBzmULCAryIXkneTD5DPkG+Qh8lsKnWJAcaT4U+IoUspqShnlEOU05QZlmDJBVaOaUt2ooVQRNY9aQq2htlKvUYeoEzR1mjnNgxZJS6WtopXTGmgXaPdpr+h0uhHdlR5Ol9BX0svpR+iX6AP0dwwNhhWDx4hnKBmbGAcYZxl3GK+YTKYZ04sZx1QwNzHrmOeZD5lvVVgqtip8FZHKCpVKlSaVGyovVKmqpqreqgtV81XLVI+pXlN9rkZVM1PjqQnUlqtVqp1Q61MbU2epO6iHqmeob1Q/pH5Z/YkGWcNMw09DpFGgsV/jvMYgC2MZs3gsIWsNq4Z1gTXEJrHN2Xx2KruY/R27iz2qqaE5QzNKM1ezUvOUZj8H45hx+Jx0TgnnKKeX836K3hTvKeIpG6Y0TLkxZVxrqpaXllirSKtRq0frvTau7aedpr1Fu1n7gQ5Bx0onXCdHZ4/OBZ3nU9lT3acKpxZNPTr1ri6qa6UbobtEd79up+6Ynr5egJ5Mb6feeb3n+hx9L/1U/W36p/VHDFgGswwkBtsMzhg8xTVxbzwdL8fb8VFDXcNAQ6VhlWGX4YSRudE8o9VGjUYPjGnGXOMk423GbcajJgYmISZLTepN7ppSTbmmKaY7TDtMx83MzaLN1pk1mz0x1zLnm+eb15vft2BaeFostqi2uGVJsuRaplnutrxuhVo5WaVYVVpds0atna0l1rutu6cRp7lOk06rntZnw7Dxtsm2qbcZsOXYBtuutm22fWFnYhdnt8Wuw+6TvZN9un2N/T0HDYfZDqsdWh1+c7RyFDpWOt6azpzuP33F9JbpL2dYzxDP2DPjthPLKcRpnVOb00dnF2e5c4PziIuJS4LLLpc+Lpsbxt3IveRKdPVxXeF60vWdm7Obwu2o26/uNu5p7ofcn8w0nymeWTNz0MPIQ+BR5dE/C5+VMGvfrH5PQ0+BZ7XnIy9jL5FXrdewt6V3qvdh7xc+9j5yn+M+4zw33jLeWV/MN8C3yLfLT8Nvnl+F30N/I/9k/3r/0QCngCUBZwOJgUGBWwL7+Hp8Ib+OPzrbZfay2e1BjKC5QRVBj4KtguXBrSFoyOyQrSH355jOkc5pDoVQfujW0Adh5mGLw34MJ4WHhVeGP45wiFga0TGXNXfR3ENz30T6RJZE3ptnMU85ry1KNSo+qi5qPNo3ujS6P8YuZlnM1VidWElsSxw5LiquNm5svt/87fOH4p3iC+N7F5gvyF1weaHOwvSFpxapLhIsOpZATIhOOJTwQRAqqBaMJfITdyWOCnnCHcJnIi/RNtGI2ENcKh5O8kgqTXqS7JG8NXkkxTOlLOW5hCepkLxMDUzdmzqeFpp2IG0yPTq9MYOSkZBxQqohTZO2Z+pn5mZ2y6xlhbL+xW6Lty8elQfJa7OQrAVZLQq2QqboVFoo1yoHsmdlV2a/zYnKOZarnivN7cyzytuQN5zvn//tEsIS4ZK2pYZLVy0dWOa9rGo5sjxxedsK4xUFK4ZWBqw8uIq2Km3VT6vtV5eufr0mek1rgV7ByoLBtQFr6wtVCuWFfevc1+1dT1gvWd+1YfqGnRs+FYmKrhTbF5cVf9go3HjlG4dvyr+Z3JS0qavEuWTPZtJm6ebeLZ5bDpaql+aXDm4N2dq0Dd9WtO319kXbL5fNKNu7g7ZDuaO/PLi8ZafJzs07P1SkVPRU+lQ27tLdtWHX+G7R7ht7vPY07NXbW7z3/T7JvttVAVVN1WbVZftJ+7P3P66Jqun4lvttXa1ObXHtxwPSA/0HIw6217nU1R3SPVRSj9Yr60cOxx++/p3vdy0NNg1VjZzG4iNwRHnk6fcJ3/ceDTradox7rOEH0x92HWcdL2pCmvKaRptTmvtbYlu6T8w+0dbq3nr8R9sfD5w0PFl5SvNUyWna6YLTk2fyz4ydlZ19fi753GDborZ752PO32oPb++6EHTh0kX/i+c7vDvOXPK4dPKy2+UTV7hXmq86X23qdOo8/pPTT8e7nLuarrlca7nuer21e2b36RueN87d9L158Rb/1tWeOT3dvfN6b/fF9/XfFt1+cif9zsu72Xcn7q28T7xf9EDtQdlD3YfVP1v+3Njv3H9qwHeg89HcR/cGhYPP/pH1jw9DBY+Zj8uGDYbrnjg+OTniP3L96fynQ89kzyaeF/6i/suuFxYvfvjV69fO0ZjRoZfyl5O/bXyl/erA6xmv28bCxh6+yXgzMV70VvvtwXfcdx3vo98PT+R8IH8o/2j5sfVT0Kf7kxmTk/8EA5jz/GMzLdsAAAAgY0hSTQAAeiUAAICDAAD5/wAAgOkAAHUwAADqYAAAOpgAABdvkl/FRgAABphJREFUeNqcV2twU9cR/nbPlVTHxpKRbNnBLyEbPyJisLEcPwgwUMKQtjNJAzNJZkgNNJOmJaZAaDKlxaXDTIBAcJtOOzSYKSkdiimhAdIMjyT4bYgBYxA2BgcUQPLrCiGDR4qt2x+yXTASFt1/957d7zt3z3d39xDCMQWUfgAz/RI/T4pSTAJpAGL8rECAXX7QFQGq9wOHOxYO1oCgjAdJj1wtB095Giv9TFuZAIWHAziATMPhTAwiHgUkYPXFJu92lMP/2MTpB1AKUCVEgNAcleUo1M+2F8TO6crSTncb1QleAOj2OTSX3Ge1p+Va42m5JrnzbnsCE8Ov+EHgpa0LPLvCJjZ/whuIlN8wAcXG+e1LUn9hm238QU84p1Ld83nsXvuO7Lq+LzKYGAT6/dn58m/HJTYf4O3EShkT8Irpzab1Uz9sGevT5+tWn+j6NB4A5hp/5NSr43xjfd5rW5tT9e3OAhCBiCua5/WsDEls/hdvYklZSwDefmrT8eXmtzuDkb5YZ33p9ndylICAVjWxf39xw/5g5Luv/9H84ZWNcwNEypZT87rXjqyJB85UYDMJYN3U7UdLJ6/6JlgqV517teRqf9uTlug8e1zEk27HgD22o98WsTBh8fWxvjm6ApdONbGvse8LM5NUPOm1Cfabuz3nACAgxX0QEFTJAnjNvLJ+Sepb14KRHnN+Ev+1XJOhZs3Qu1mbG97J2NQgsXroa1dtxrGuf8cHi1mUtPTay0lv1DMJSCRVLtoX+FgGgDQNysBAcez89l9nbbsQSji7rlXkEhjPxb/QatHOcFu0M9zz419oFSRhj/3PuaHiyqasv1Con9NGxHAYUsoCxAqImbYSgCWmFbZQwdsur7N0eC4m6tT6/jUZ750Zeb82c+OZGLWh/2p/W+Kfrmy0hIp/aVKpTSIJEqu2QgFx2iE8CwDp0RbH7Ljng/4yXr+XT3QdyhYsodS0slGr0g2OrEUK7eCrKW82SqzCVz3/yfb6vRwM4xn9rN7JkRkOQRLmfJn2LBPxQjDBqp9lD7XbX7X8pKTP160zR2bdeiX5jYeU/nLSTztNkem3XL5eXbltRUkonBxdgZ2IIUmahUxERQSCVT+rK5hzQ89xQ6P8VaaK1f5VmRvqQ4G+lba+nlnlb5brMhvlk7FBiaPzuwQEmEQhg5BOxMjWTncHc2501cQLkjDTsMCWpyuRQxFP0xXIJfp5FyVW4Zy7KajC06ItbiIGg6ZITBxDxIgbrr1jTSM0fibGIHz8O9sKK0GAibEua9spANh4aY2VmcEg+DEkiBgR/L2hYFgGtcErkQQAMVJgBxyy9hboZzv32v+Kpr7qbEECTAIMAoaJa3qPTmNiiAAgJAjk6J5xhu6HDAIgQYGLmI29PocmMcI8MNYvT1ckfzD9H/ub5br4e4Me9WfOKqtyX6Ud2cwC449PRamifDm6Auc0rTXokci+Xo1EAgBckiDuYGLjpTvntcGIA+SFcp6uUAaAI879VhWrRteYAqn/edq758brXJ1327QMhgJcZjA3EBjNrgZjOG1PkAjyTGENMjZPq5ECQ0MDE9ERBqFZrk0OJ3i4x/7vyIjBxGERt3takgVJEAp9xq3f769WiPDNvSsJdT3HDOEASPelmoBRYT3Kzt5uMtwauJEgSOCpwrk1DIJCoNUMwj9v7MweP9XSQ8/hJPp496fZTAICvLqcyv2B7nRbrgCA03JN5h8ub7A8VqpB437xHvsOy3l3cyaB4L2uqxhti1WLMcSgZQCw7+bOooO3Pk4JBZIYYXISMV5sKH59UePM10GESRGpIf/bE92HU452HywSJIGIllctrhp6YAK5+fHds0lLtJFMXNwkV6fFqA29mROefqiMJj1h6um4a5vY/92dKGaBxIhU5zJTWW2cJmEgGOmeb3c8FxAfb9mdf2RzyGGv5MvU7QwuEySwKHFp/c/M71zA/2F7b1RajnYdLAqMukMVu2YcfmDYE2MD7H+7/Xlq6cRIJqm4zXM+qd3TGjVBir43KSLlXjiELe5TsX+3/yW/ST45PaAHbKmccWh12AP93JNZywj0kSABIobpiXRHjtZ6faout2tyZMadGLXBCxBcvl6NfaAz+tKdFmObpzWl2+tIIBACYy0t/yj34M7HvsKUK+CGassvicX7alYDwwq+vykIEqPVa+Q9gdYk5+V+UE7lj3+FGbuBM/X5JUT8QwIVSSSZiTgmoFR2MfiqYFFPfjpkyrfWPopwxP47AP1pK1g9/dqeAAAAAElFTkSuQmCC");bottom:50px;left:55px}div.vis-network div.vis-navigation div.vis-button.vis-down{background-image:url("data:image/png;base64,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");bottom:10px;left:55px}div.vis-network div.vis-navigation div.vis-button.vis-left{background-image:url("data:image/png;base64,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");bottom:10px;left:15px}div.vis-network div.vis-navigation div.vis-button.vis-right{background-image:url("data:image/png;base64,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");bottom:10px;left:95px}div.vis-network div.vis-navigation div.vis-button.vis-zoomIn{background-image:url("data:image/png;base64,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");bottom:10px;right:15px}div.vis-network div.vis-navigation div.vis-button.vis-zoomOut{background-image:url("data:image/png;base64,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");bottom:10px;right:55px}div.vis-network div.vis-navigation div.vis-button.vis-zoomExtends{background-image:url("data:image/png;base64,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");bottom:50px;right:15px}div.vis-network div.vis-manipulation{background:#fff;background:-moz-linear-gradient(top,#fff 0,#fcfcfc 48%,#fafafa 50%,#fcfcfc 100%);background:-webkit-gradient(linear,left top,left bottom,color-stop(0,#fff),color-stop(48%,#fcfcfc),color-stop(50%,#fafafa),color-stop(100%,#fcfcfc));background:-webkit-linear-gradient(top,#fff,#fcfcfc 48%,#fafafa 50%,#fcfcfc);background:-o-linear-gradient(top,#fff 0,#fcfcfc 48%,#fafafa 50%,#fcfcfc 100%);background:-ms-linear-gradient(top,#fff 0,#fcfcfc 48%,#fafafa 50%,#fcfcfc 100%);background:linear-gradient(180deg,#fff 0,#fcfcfc 48%,#fafafa 50%,#fcfcfc);border:0 solid #d6d9d8;border-bottom:1px;box-sizing:content-box;filter:progid:DXImageTransform.Microsoft.gradient(startColorstr="#ffffff",endColorstr="#fcfcfc",GradientType=0);height:28px;left:0;padding-top:4px;position:absolute;top:0;width:100%}div.vis-network button.vis-edit-mode,div.vis-network div.vis-edit-mode{height:30px;left:0;position:absolute;top:5px}div.vis-network button.vis-close{-webkit-touch-callout:none;background-color:transparent;background-image:url("data:image/png;base64,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/GMzLdsAADvGaVRYdFhNTDpjb20uYWRvYmUueG1wAAAAAAA8P3hwYWNrZXQgYmVnaW49Iu+7vyIgaWQ9Ilc1TTBNcENlaGlIenJlU3pOVGN6a2M5ZCI/Pgo8eDp4bXBtZXRhIHhtbG5zOng9ImFkb2JlOm5zOm1ldGEvIiB4OnhtcHRrPSJBZG9iZSBYTVAgQ29yZSA1LjUtYzAyMSA3OS4xNTQ5MTEsIDIwMTMvMTAvMjktMTE6NDc6MTYgICAgICAgICI+CiAgIDxyZGY6UkRGIHhtbG5zOnJkZj0iaHR0cDovL3d3dy53My5vcmcvMTk5OS8wMi8yMi1yZGYtc3ludGF4LW5zIyI+CiAgICAgIDxyZGY6RGVzY3JpcHRpb24gcmRmOmFib3V0PSIiCiAgICAgICAgICAgIHhtbG5zOnhtcD0iaHR0cDovL25zLmFkb2JlLmNvbS94YXAvMS4wLyIKICAgICAgICAgICAgeG1sbnM6eG1wTU09Imh0dHA6Ly9ucy5hZG9iZS5jb20veGFwLzEuMC9tbS8iCiAgICAgICAgICAgIHhtbG5zOnN0RXZ0PSJodHRwOi8vbnMuYWRvYmUuY29tL3hhcC8xLjAvc1R5cGUvUmVzb3VyY2VFdmVudCMiCiAgICAgICAgICAgIHhtbG5zOmRjPSJodHRwOi8vcHVybC5vcmcvZGMvZWxlbWVudHMvMS4xLyIKICAgICAgICAgICAgeG1sbnM6cGhvdG9zaG9wPSJodHRwOi8vbnMuYWRvYmUuY29tL3Bob3Rvc2hvcC8xLjAvIgogICAgICAgICAgICB4bWxuczp0aWZmPSJodHRwOi8vbnMuYWRvYmUuY29tL3RpZmYvMS4wLyIKICAgICAgICAgICAgeG1sbnM6ZXhpZj0iaHR0cDovL25zLmFkb2JlLmNvbS9leGlmLzEuMC8iPgogICAgICAgICA8eG1wOkNyZWF0b3JUb29sPkFkb2JlIFBob3Rvc2hvcCBDQyAoV2luZG93cyk8L3htcDpDcmVhdG9yVG9vbD4KICAgICAgICAgPHhtcDpDcmVhdGVEYXRlPjIwMTQtMDItMTRUMTE6NTU6MzUrMDE6MDA8L3htcDpDcmVhdGVEYXRlPgogICAgICAgICA8eG1wOk1ldGFkYXRhRGF0ZT4yMDE0LTAyLTE0VDEyOjA1OjE3KzAxOjAwPC94bXA6TWV0YWRhdGFEYXRlPgogICAgICAgICA8eG1wOk1vZGlmeURhdGU+MjAxNC0wMi0xNFQxMjowNToxNyswMTowMDwveG1wOk1vZGlmeURhdGU+CiAgICAgICAgIDx4bXBNTTpJbnN0YW5jZUlEPnhtcC5paWQ6NjU0YmM5YmQtMWI2Yi1jYjRhLTllOWQtNWY2MzgxNDVjZjk0PC94bXBNTTpJbnN0YW5jZUlEPgogICAgICAgICA8eG1wTU06RG9jdW1lbnRJRD54bXAuZGlkOjk4MmM2MGIwLWUzZjMtMDk0MC04MjU0LTFiZTliNWE0ZTE4MzwveG1wTU06RG9jdW1lbnRJRD4KICAgICAgICAgPHhtcE1NOk9yaWdpbmFsRG9jdW1lbnRJRD54bXAuZGlkOjk4MmM2MGIwLWUzZjMtMDk0MC04MjU0LTFiZTliNWE0ZTE4MzwveG1wTU06T3JpZ2luYWxEb2N1bWVudElEPgogICAgICAgICA8eG1wTU06SGlzdG9yeT4KICAgICAgICAgICAgPHJkZjpTZXE+CiAgICAgICAgICAgICAgIDxyZGY6bGkgcmRmOnBhcnNlVHlwZT0iUmVzb3VyY2UiPgogICAgICAgICAgICAgICAgICA8c3RFdnQ6YWN0aW9uPmNyZWF0ZWQ8L3N0RXZ0OmFjdGlvbj4KICAgICAgICAgICAgICAgICAgPHN0RXZ0Omluc3RhbmNlSUQ+eG1wLmlpZDo5ODJjNjBiMC1lM2YzLTA5NDAtODI1NC0xYmU5YjVhNGUxODM8L3N0RXZ0Omluc3RhbmNlSUQ+CiAgICAgICAgICAgICAgICAgIDxzdEV2dDp3aGVuPjIwMTQtMDItMTRUMTE6NTU6MzUrMDE6MDA8L3N0RXZ0OndoZW4+CiAgICAgICAgICAgICAgICAgIDxzdEV2dDpzb2Z0d2FyZUFnZW50PkFkb2JlIFBob3Rvc2hvcCBDQyAoV2luZG93cyk8L3N0RXZ0OnNvZnR3YXJlQWdlbnQ+CiAgICAgICAgICAgICAgIDwvcmRmOmxpPgogICAgICAgICAgICAgICA8cmRmOmxpIHJkZjpwYXJzZVR5cGU9IlJlc291cmNlIj4KICAgICAgICAgICAgICAgICAgPHN0RXZ0OmFjdGlvbj5zYXZlZDwvc3RFdnQ6YWN0aW9uPgogICAgICAgICAgICAgICAgICA8c3RFdnQ6aW5zdGFuY2VJRD54bXAuaWlkOjIxODYxNmM2LTM1MWMtNDI0OS04YWFkLWJkZDQ2ZTczNWE0NDwvc3RFdnQ6aW5zdGFuY2VJRD4KICAgICAgICAgICAgICAgICAgPHN0RXZ0OndoZW4+MjAxNC0wMi0xNFQxMTo1NTozNSswMTowMDwvc3RFdnQ6d2hlbj4KICAgICAgICAgICAgICAgICAgPHN0RXZ0OnNvZnR3YXJlQWdlbnQ+QWRvYmUgUGhvdG9zaG9wIENDIChXaW5kb3dzKTwvc3RFdnQ6c29mdHdhcmVBZ2VudD4KICAgICAgICAgICAgICAgICAgPHN0RXZ0OmNoYW5nZWQ+Lzwvc3RFdnQ6Y2hhbmdlZD4KICAgICAgICAgICAgICAgPC9yZGY6bGk+CiAgICAgICAgICAgICAgIDxyZGY6bGkgcmRmOnBhcnNlVHlwZT0iUmVzb3VyY2UiPgogICAgICAgICAgICAgICAgICA8c3RFdnQ6YWN0aW9uPnNhdmVkPC9zdEV2dDphY3Rpb24+CiAgICAgICAgICAgICAgICAgIDxzdEV2dDppbnN0YW5jZUlEPnhtcC5paWQ6NjU0YmM5YmQtMWI2Yi1jYjRhLTllOWQtNWY2MzgxNDVjZjk0PC9zdEV2dDppbnN0YW5jZUlEPgogICAgICAgICAgICAgICAgICA8c3RFdnQ6d2hlbj4yMDE0LTAyLTE0VDEyOjA1OjE3KzAxOjAwPC9zdEV2dDp3aGVuPgogICAgICAgICAgICAgICAgICA8c3RFdnQ6c29mdHdhcmVBZ2VudD5BZG9iZSBQaG90b3Nob3AgQ0MgKFdpbmRvd3MpPC9zdEV2dDpzb2Z0d2FyZUFnZW50PgogICAgICAgICAgICAgICAgICA8c3RFdnQ6Y2hhbmdlZD4vPC9zdEV2dDpjaGFuZ2VkPgogICAgICAgICAgICAgICA8L3JkZjpsaT4KICAgICAgICAgICAgPC9yZGY6U2VxPgogICAgICAgICA8L3htcE1NOkhpc3Rvcnk+CiAgICAgICAgIDxkYzpmb3JtYXQ+aW1hZ2UvcG5nPC9kYzpmb3JtYXQ+CiAgICAgICAgIDxwaG90b3Nob3A6Q29sb3JNb2RlPjM8L3Bob3Rvc2hvcDpDb2xvck1vZGU+CiAgICAgICAgIDxwaG90b3Nob3A6SUNDUHJvZmlsZT5zUkdCIElFQzYxOTY2LTIuMTwvcGhvdG9zaG9wOklDQ1Byb2ZpbGU+CiAgICAgICAgIDx0aWZmOk9yaWVudGF0aW9uPjE8L3RpZmY6T3JpZW50YXRpb24+CiAgICAgICAgIDx0aWZmOlhSZXNvbHV0aW9uPjcyMDAwMC8xMDAwMDwvdGlmZjpYUmVzb2x1dGlvbj4KICAgICAgICAgPHRpZmY6WVJlc29sdXRpb24+NzIwMDAwLzEwMDAwPC90aWZmOllSZXNvbHV0aW9uPgogICAgICAgICA8dGlmZjpSZXNvbHV0aW9uVW5pdD4yPC90aWZmOlJlc29sdXRpb25Vbml0PgogICAgICAgICA8ZXhpZjpDb2xvclNwYWNlPjE8L2V4aWY6Q29sb3JTcGFjZT4KICAgICAgICAgPGV4aWY6UGl4ZWxYRGltZW5zaW9uPjc8L2V4aWY6UGl4ZWxYRGltZW5zaW9uPgogICAgICAgICA8ZXhpZjpQaXhlbFlEaW1lbnNpb24+NzwvZXhpZjpQaXhlbFlEaW1lbnNpb24+CiAgICAgIDwvcmRmOkRlc2NyaXB0aW9uPgogICA8L3JkZjpSREY+CjwveDp4bXBtZXRhPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgIAo8P3hwYWNrZXQgZW5kPSJ3Ij8+cZUZMwAAACBjSFJNAAB6JQAAgIMAAPn/AACA6QAAdTAAAOpgAAA6mAAAF2+SX8VGAAAA2ElEQVR42gDLADT/AS0tLUQFBQUVFxcXtPHx8fPl5eUNCAgITCkpKesEHx8fGgYGBjH+/v4a+Pj4qgQEBFU6OjodMTExzwQUFBSvEBAQEfX19SD19fVqNDQ0CElJSd/9/f2vAwEBAfrn5+fkBwcHLRYWFgsXFxfz29vbo9LS0uwDDQ0NDfPz81orKysXIyMj+ODg4Avh4eEa/f391gMkJCRYPz8/KUhISOMCAgKh8fHxHRsbGx4UFBQQBDk5OeY7Ozv7CAgItPb29vMEBASaJSUlTQ0NDesDAEwpT0Ko8Ri2AAAAAElFTkSuQmCC");background-position:20px 3px;background-repeat:no-repeat;border:none;cursor:pointer;height:30px;position:absolute;right:0;top:0;-webkit-user-select:none;-khtml-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none;width:30px}div.vis-network button.vis-close:hover{opacity:.6}div.vis-network div.vis-edit-mode button.vis-button,div.vis-network div.vis-manipulation button.vis-button{-webkit-touch-callout:none;background-color:transparent;background-position:0 0;background-repeat:no-repeat;border:none;-moz-border-radius:15px;border-radius:15px;box-sizing:content-box;cursor:pointer;float:left;font-family:verdana;font-size:12px;height:24px;margin-left:10px;padding:0 8px;-webkit-user-select:none;-khtml-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none}div.vis-network div.vis-manipulation button.vis-button:hover{box-shadow:1px 1px 8px rgba(0,0,0,.2)}div.vis-network div.vis-manipulation button.vis-button:active{box-shadow:1px 1px 8px rgba(0,0,0,.5)}div.vis-network div.vis-manipulation button.vis-button.vis-back{background-image:url("data:image/png;base64,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/GMzLdsAAEEOaVRYdFhNTDpjb20uYWRvYmUueG1wAAAAAAA8P3hwYWNrZXQgYmVnaW49Iu+7vyIgaWQ9Ilc1TTBNcENlaGlIenJlU3pOVGN6a2M5ZCI/Pgo8eDp4bXBtZXRhIHhtbG5zOng9ImFkb2JlOm5zOm1ldGEvIiB4OnhtcHRrPSJBZG9iZSBYTVAgQ29yZSA1LjUtYzAyMSA3OS4xNTQ5MTEsIDIwMTMvMTAvMjktMTE6NDc6MTYgICAgICAgICI+CiAgIDxyZGY6UkRGIHhtbG5zOnJkZj0iaHR0cDovL3d3dy53My5vcmcvMTk5OS8wMi8yMi1yZGYtc3ludGF4LW5zIyI+CiAgICAgIDxyZGY6RGVzY3JpcHRpb24gcmRmOmFib3V0PSIiCiAgICAgICAgICAgIHhtbG5zOnhtcD0iaHR0cDovL25zLmFkb2JlLmNvbS94YXAvMS4wLyIKICAgICAgICAgICAgeG1sbnM6ZGM9Imh0dHA6Ly9wdXJsLm9yZy9kYy9lbGVtZW50cy8xLjEvIgogICAgICAgICAgICB4bWxuczp4bXBNTT0iaHR0cDovL25zLmFkb2JlLmNvbS94YXAvMS4wL21tLyIKICAgICAgICAgICAgeG1sbnM6c3RFdnQ9Imh0dHA6Ly9ucy5hZG9iZS5jb20veGFwLzEuMC9zVHlwZS9SZXNvdXJjZUV2ZW50IyIKICAgICAgICAgICAgeG1sbnM6c3RSZWY9Imh0dHA6Ly9ucy5hZG9iZS5jb20veGFwLzEuMC9zVHlwZS9SZXNvdXJjZVJlZiMiCiAgICAgICAgICAgIHhtbG5zOnBob3Rvc2hvcD0iaHR0cDovL25zLmFkb2JlLmNvbS9waG90b3Nob3AvMS4wLyIKICAgICAgICAgICAgeG1sbnM6dGlmZj0iaHR0cDovL25zLmFkb2JlLmNvbS90aWZmLzEuMC8iCiAgICAgICAgICAgIHhtbG5zOmV4aWY9Imh0dHA6Ly9ucy5hZG9iZS5jb20vZXhpZi8xLjAvIj4KICAgICAgICAgPHhtcDpDcmVhdG9yVG9vbD5BZG9iZSBQaG90b3Nob3AgQ0MgKFdpbmRvd3MpPC94bXA6Q3JlYXRvclRvb2w+CiAgICAgICAgIDx4bXA6Q3JlYXRlRGF0ZT4yMDE0LTAxLTIyVDE5OjI0OjUxKzAxOjAwPC94bXA6Q3JlYXRlRGF0ZT4KICAgICAgICAgPHhtcDpNZXRhZGF0YURhdGU+MjAxNC0wMi0wNFQxNTowMTowOSswMTowMDwveG1wOk1ldGFkYXRhRGF0ZT4KICAgICAgICAgPHhtcDpNb2RpZnlEYXRlPjIwMTQtMDItMDRUMTU6MDE6MDkrMDE6MDA8L3htcDpNb2RpZnlEYXRlPgogICAgICAgICA8ZGM6Zm9ybWF0PmltYWdlL3BuZzwvZGM6Zm9ybWF0PgogICAgICAgICA8eG1wTU06SW5zdGFuY2VJRD54bXAuaWlkOmI2YjQwMjVkLTAxNjQtMzU0OC1hOTdlLTQ4ZmYxMWM3NTYzMzwveG1wTU06SW5zdGFuY2VJRD4KICAgICAgICAgPHhtcE1NOkRvY3VtZW50SUQ+eG1wLmRpZDpFQTc2MkY5Njc0ODNFMzExOTQ4QkQxM0UyQkU3OTlBMTwveG1wTU06RG9jdW1lbnRJRD4KICAgICAgICAgPHhtcE1NOk9yaWdpbmFsRG9jdW1lbnRJRD54bXAuZGlkOjczQjYyQUFEOTE4M0UzMTE5NDhCRDEzRTJCRTc5OUExPC94bXBNTTpPcmlnaW5hbERvY3VtZW50SUQ+CiAgICAgICAgIDx4bXBNTTpIaXN0b3J5PgogICAgICAgICAgICA8cmRmOlNlcT4KICAgICAgICAgICAgICAgPHJkZjpsaSByZGY6cGFyc2VUeXBlPSJSZXNvdXJjZSI+CiAgICAgICAgICAgICAgICAgIDxzdEV2dDphY3Rpb24+Y3JlYXRlZDwvc3RFdnQ6YWN0aW9uPgogICAgICAgICAgICAgICAgICA8c3RFdnQ6aW5zdGFuY2VJRD54bXAuaWlkOjczQjYyQUFEOTE4M0UzMTE5NDhCRDEzRTJCRTc5OUExPC9zdEV2dDppbnN0YW5jZUlEPgogICAgICAgICAgICAgICAgICA8c3RFdnQ6d2hlbj4yMDE0LTAxLTIyVDE5OjI0OjUxKzAxOjAwPC9zdEV2dDp3aGVuPgogICAgICAgICAgICAgICAgICA8c3RFdnQ6c29mdHdhcmVBZ2VudD5BZG9iZSBQaG90b3Nob3AgQ1M2IChXaW5kb3dzKTwvc3RFdnQ6c29mdHdhcmVBZ2VudD4KICAgICAgICAgICAgICAgPC9yZGY6bGk+CiAgICAgICAgICAgICAgIDxyZGY6bGkgcmRmOnBhcnNlVHlwZT0iUmVzb3VyY2UiPgogICAgICAgICAgICAgICAgICA8c3RFdnQ6YWN0aW9uPnNhdmVkPC9zdEV2dDphY3Rpb24+CiAgICAgICAgICAgICAgICAgIDxzdEV2dDppbnN0YW5jZUlEPnhtcC5paWQ6RUE2MEEyNEUxOTg0RTMxMUFEQUZFRkU2RUMzMzNFMDM8L3N0RXZ0Omluc3RhbmNlSUQ+CiAgICAgICAgICAgICAgICAgIDxzdEV2dDp3aGVuPjIwMTQtMDEtMjNUMTk6MTg6MDcrMDE6MDA8L3N0RXZ0OndoZW4+CiAgICAgICAgICAgICAgICAgIDxzdEV2dDpzb2Z0d2FyZUFnZW50PkFkb2JlIFBob3Rvc2hvcCBDUzYgKFdpbmRvd3MpPC9zdEV2dDpzb2Z0d2FyZUFnZW50PgogICAgICAgICAgICAgICAgICA8c3RFdnQ6Y2hhbmdlZD4vPC9zdEV2dDpjaGFuZ2VkPgogICAgICAgICAgICAgICA8L3JkZjpsaT4KICAgICAgICAgICAgICAgPHJkZjpsaSByZGY6cGFyc2VUeXBlPSJSZXNvdXJjZSI+CiAgICAgICAgICAgICAgICAgIDxzdEV2dDphY3Rpb24+c2F2ZWQ8L3N0RXZ0OmFjdGlvbj4KICAgICAgICAgICAgICAgICAgPHN0RXZ0Omluc3RhbmNlSUQ+eG1wLmlpZDpmOWQ3OGY4ZC1lNzY0LTc1NDgtODZiNy1iNmQ1OGMzZDg2OTc8L3N0RXZ0Omluc3RhbmNlSUQ+CiAgICAgICAgICAgICAgICAgIDxzdEV2dDp3aGVuPjIwMTQtMDItMDRUMTU6MDE6MDkrMDE6MDA8L3N0RXZ0OndoZW4+CiAgICAgICAgICAgICAgICAgIDxzdEV2dDpzb2Z0d2FyZUFnZW50PkFkb2JlIFBob3Rvc2hvcCBDQyAoV2luZG93cyk8L3N0RXZ0OnNvZnR3YXJlQWdlbnQ+CiAgICAgICAgICAgICAgICAgIDxzdEV2dDpjaGFuZ2VkPi88L3N0RXZ0OmNoYW5nZWQ+CiAgICAgICAgICAgICAgIDwvcmRmOmxpPgogICAgICAgICAgICAgICA8cmRmOmxpIHJkZjpwYXJzZVR5cGU9IlJlc291cmNlIj4KICAgICAgICAgICAgICAgICAgPHN0RXZ0OmFjdGlvbj5jb252ZXJ0ZWQ8L3N0RXZ0OmFjdGlvbj4KICAgICAgICAgICAgICAgICAgPHN0RXZ0OnBhcmFtZXRlcnM+ZnJvbSBhcHBsaWNhdGlvbi92bmQuYWRvYmUucGhvdG9zaG9wIHRvIGltYWdlL3BuZzwvc3RFdnQ6cGFyYW1ldGVycz4KICAgICAgICAgICAgICAgPC9yZGY6bGk+CiAgICAgICAgICAgICAgIDxyZGY6bGkgcmRmOnBhcnNlVHlwZT0iUmVzb3VyY2UiPgogICAgICAgICAgICAgICAgICA8c3RFdnQ6YWN0aW9uPmRlcml2ZWQ8L3N0RXZ0OmFjdGlvbj4KICAgICAgICAgICAgICAgICAgPHN0RXZ0OnBhcmFtZXRlcnM+Y29udmVydGVkIGZyb20gYXBwbGljYXRpb24vdm5kLmFkb2JlLnBob3Rvc2hvcCB0byBpbWFnZS9wbmc8L3N0RXZ0OnBhcmFtZXRlcnM+CiAgICAgICAgICAgICAgIDwvcmRmOmxpPgogICAgICAgICAgICAgICA8cmRmOmxpIHJkZjpwYXJzZVR5cGU9IlJlc291cmNlIj4KICAgICAgICAgICAgICAgICAgPHN0RXZ0OmFjdGlvbj5zYXZlZDwvc3RFdnQ6YWN0aW9uPgogICAgICAgICAgICAgICAgICA8c3RFdnQ6aW5zdGFuY2VJRD54bXAuaWlkOmI2YjQwMjVkLTAxNjQtMzU0OC1hOTdlLTQ4ZmYxMWM3NTYzMzwvc3RFdnQ6aW5zdGFuY2VJRD4KICAgICAgICAgICAgICAgICAgPHN0RXZ0OndoZW4+MjAxNC0wMi0wNFQxNTowMTowOSswMTowMDwvc3RFdnQ6d2hlbj4KICAgICAgICAgICAgICAgICAgPHN0RXZ0OnNvZnR3YXJlQWdlbnQ+QWRvYmUgUGhvdG9zaG9wIENDIChXaW5kb3dzKTwvc3RFdnQ6c29mdHdhcmVBZ2VudD4KICAgICAgICAgICAgICAgICAgPHN0RXZ0OmNoYW5nZWQ+Lzwvc3RFdnQ6Y2hhbmdlZD4KICAgICAgICAgICAgICAgPC9yZGY6bGk+CiAgICAgICAgICAgIDwvcmRmOlNlcT4KICAgICAgICAgPC94bXBNTTpIaXN0b3J5PgogICAgICAgICA8eG1wTU06RGVyaXZlZEZyb20gcmRmOnBhcnNlVHlwZT0iUmVzb3VyY2UiPgogICAgICAgICAgICA8c3RSZWY6aW5zdGFuY2VJRD54bXAuaWlkOmY5ZDc4ZjhkLWU3NjQtNzU0OC04NmI3LWI2ZDU4YzNkODY5Nzwvc3RSZWY6aW5zdGFuY2VJRD4KICAgICAgICAgICAgPHN0UmVmOmRvY3VtZW50SUQ+eG1wLmRpZDpFQTc2MkY5Njc0ODNFMzExOTQ4QkQxM0UyQkU3OTlBMTwvc3RSZWY6ZG9jdW1lbnRJRD4KICAgICAgICAgICAgPHN0UmVmOm9yaWdpbmFsRG9jdW1lbnRJRD54bXAuZGlkOjczQjYyQUFEOTE4M0UzMTE5NDhCRDEzRTJCRTc5OUExPC9zdFJlZjpvcmlnaW5hbERvY3VtZW50SUQ+CiAgICAgICAgIDwveG1wTU06RGVyaXZlZEZyb20+CiAgICAgICAgIDxwaG90b3Nob3A6Q29sb3JNb2RlPjM8L3Bob3Rvc2hvcDpDb2xvck1vZGU+CiAgICAgICAgIDxwaG90b3Nob3A6SUNDUHJvZmlsZT5zUkdCIElFQzYxOTY2LTIuMTwvcGhvdG9zaG9wOklDQ1Byb2ZpbGU+CiAgICAgICAgIDx0aWZmOk9yaWVudGF0aW9uPjE8L3RpZmY6T3JpZW50YXRpb24+CiAgICAgICAgIDx0aWZmOlhSZXNvbHV0aW9uPjcyMDA5MC8xMDAwMDwvdGlmZjpYUmVzb2x1dGlvbj4KICAgICAgICAgPHRpZmY6WVJlc29sdXRpb24+NzIwMDkwLzEwMDAwPC90aWZmOllSZXNvbHV0aW9uPgogICAgICAgICA8dGlmZjpSZXNvbHV0aW9uVW5pdD4yPC90aWZmOlJlc29sdXRpb25Vbml0PgogICAgICAgICA8ZXhpZjpDb2xvclNwYWNlPjE8L2V4aWY6Q29sb3JTcGFjZT4KICAgICAgICAgPGV4aWY6UGl4ZWxYRGltZW5zaW9uPjI0PC9leGlmOlBpeGVsWERpbWVuc2lvbj4KICAgICAgICAgPGV4aWY6UGl4ZWxZRGltZW5zaW9uPjI0PC9leGlmOlBpeGVsWURpbWVuc2lvbj4KICAgICAgPC9yZGY6RGVzY3JpcHRpb24+CiAgIDwvcmRmOlJERj4KPC94OnhtcG1ldGE+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgCjw/eHBhY2tldCBlbmQ9InciPz4jq1U/AAAAIGNIUk0AAHolAACAgwAA+f8AAIDpAAB1MAAA6mAAADqYAAAXb5JfxUYAAAVTSURBVHjanFVfTFNnFP+d77ve8qeVFbBrpcVgRrCRFikFByLxwSAaE32oRCHD6JMxxhhn8G2RxxH3MsOTbyYsmCAxPMmMMYtkIUYmK60OO0qAK23BFlNob0uh3x7WS5jLZPpLbm6+k/P9zrm5v9855PF4UFhYCABgjIExBgAgIqRSqRIi6gDQRkQ1RGTB3wgR0e8AHgH4Sa/XR/EBiAiJRAJ04cIF5Ofng4g2n0gkUkxENwF0c843LzHGQEQQQkCLExEA9ALotVgsUQAQQmgNQhJCbF5kjCEUCl0moj4t5na7fTU1NUpVVVXUYrEkASAcDhe8efOmxOfzWScmJqoBdBNR99LS0hWz2dynNSSEAF28eBGFhYVgjCEcDn9HRD1EhIMHD3o9Hs9kWVlZAh9BKBQqGB4edr58+dKZ+6JbJpOpBwBWV1fB6+rqIMsyIpHIFcZYL2MMra2tY5cuXRrfuXNnBtvAYDBk3G63oqpqZm5uzgrgSDKZjBoMhueZTAbc5XIhFouVEtFTxhiOHTs2dv78eS8+Efv374+oqpqZnZ21cs5PJJPJPlmWkyynnBuMMTQ0NHi7uro+mVyDx+Pxulwu71ZOlkqlSonoJhGhvb39s8k1nDx50ss5hyRJN9PpdKlERB2aWjSVaEilUvzBgwcORVEs5eXloXPnzk1sV8BkMiUdDofP7/dXZ7PZDilnIhw4cGBeS1pbW2P37t1zBwKBikQiUUREWFhYsHHO0d7evm0Ru90+/+rVq2rO+XGJiJxEhMrKyhgAjI6OWoeHh5tWVla+4JzDZrO9bW5unhwcHGzz+/32np4e+xaDbfoHAMxmc6ijo2O0oqIiJkkSNjY2HBIRmRljMJvNyWfPnln7+/tPMMZQXl6+0NbW9qK2tjYcj8floaEhqKpq+HCkbD3PzMwYBgYG0NXV9UuusFna2kEgELAQEQ4dOvSis7PzN41Ar9dnrl27NqCNkv/C3bt3zy4tLVmICJxzEBFJRBQmorLFxcWCqqqq0Pj4eO3Y2JhbUZTdra2tL2pra8OJRGLHnTt3zkqS9K+huHU4EhHMZnMoGo0W5OIh7nK5jjLGKq1W69vDhw8rRqMxMjc3t2t5eXnX5ORklc/nM+fl5SWnpqa+0uv1K/n5+Ws6nW5NluXNd15e3ppOp1uz2WyzZ86cGQ0Gg6ZAIFCZzWZ/lYjokRDiuN/vt7W0tMw3NTUpbrd78P79++5gMFgRiUTKHj58WMYYQ3V19etTp05tq6Lp6Wkb5xxCiEfc7XZPM8a6FxcXTfX19a/1en2Gcy5qamreNjY2/qGq6joRZe12+9Tp06e3JY/FYgWPHz8+mhvr3/CWlpbk+vp6PmOseWVlBS6XS9GSJUkSdrs93NDQ8Oe+ffvC/8fJIyMjddFo9Esi6pVleVjT2m0A8Hq9zqGhIefnjoknT544A4GAM/eDbxMReFNTE0pKSpKqqsaI6Pj8/LxVVdWM3W6PfCr5xMTE1zllXS0uLn6aSqXAGxsbodPpoNfrn6uqCs75EUVRrJFIZMfevXsXdTrdxseIE4mEPDIyUu/3++tynd8yGo29RIR0Og26fv06ioqKwBgD5xzv3r27zBjrIyJIkgSHwzFZWVmp7NmzJ1ZaWpoAgGg0WqgoSvHMzIw1GAw6tvjhitFo7NPW5fv370Hd3d0oKCgA53zTQMvLy+VCiKuSJH0rSdLmztZytIWv5RPRD0T0Y3Fx8dzWfby6ugopHo//w4mcc8iyPMc5v5FOp7/PZrOdQohWInIC2C2EgBBigYi8Qoifs9lsv06nWyIiaFxagXg8jr8GAGxuIe7LBeWhAAAAAElFTkSuQmCC")}div.vis-network div.vis-manipulation div.vis-none:hover{box-shadow:1px 1px 8px transparent;cursor:default}div.vis-network div.vis-manipulation div.vis-none:active{box-shadow:1px 1px 8px transparent}div.vis-network div.vis-manipulation div.vis-none{line-height:23px;padding:0}div.vis-network div.vis-manipulation div.notification{font-weight:700;margin:2px}div.vis-network div.vis-manipulation button.vis-button.vis-add{background-image:url("data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABgAAAAYCAYAAADgdz34AAAACXBIWXMAAAsTAAALEwEAmpwYAAAKT2lDQ1BQaG90b3Nob3AgSUNDIHByb2ZpbGUAAHjanVNnVFPpFj333vRCS4iAlEtvUhUIIFJCi4AUkSYqIQkQSoghodkVUcERRUUEG8igiAOOjoCMFVEsDIoK2AfkIaKOg6OIisr74Xuja9a89+bN/rXXPues852zzwfACAyWSDNRNYAMqUIeEeCDx8TG4eQuQIEKJHAAEAizZCFz/SMBAPh+PDwrIsAHvgABeNMLCADATZvAMByH/w/qQplcAYCEAcB0kThLCIAUAEB6jkKmAEBGAYCdmCZTAKAEAGDLY2LjAFAtAGAnf+bTAICd+Jl7AQBblCEVAaCRACATZYhEAGg7AKzPVopFAFgwABRmS8Q5ANgtADBJV2ZIALC3AMDOEAuyAAgMADBRiIUpAAR7AGDIIyN4AISZABRG8lc88SuuEOcqAAB4mbI8uSQ5RYFbCC1xB1dXLh4ozkkXKxQ2YQJhmkAuwnmZGTKBNA/g88wAAKCRFRHgg/P9eM4Ors7ONo62Dl8t6r8G/yJiYuP+5c+rcEAAAOF0ftH+LC+zGoA7BoBt/qIl7gRoXgugdfeLZrIPQLUAoOnaV/Nw+H48PEWhkLnZ2eXk5NhKxEJbYcpXff5nwl/AV/1s+X48/Pf14L7iJIEyXYFHBPjgwsz0TKUcz5IJhGLc5o9H/LcL//wd0yLESWK5WCoU41EScY5EmozzMqUiiUKSKcUl0v9k4t8s+wM+3zUAsGo+AXuRLahdYwP2SycQWHTA4vcAAPK7b8HUKAgDgGiD4c93/+8//UegJQCAZkmScQAAXkQkLlTKsz/HCAAARKCBKrBBG/TBGCzABhzBBdzBC/xgNoRCJMTCQhBCCmSAHHJgKayCQiiGzbAdKmAv1EAdNMBRaIaTcA4uwlW4Dj1wD/phCJ7BKLyBCQRByAgTYSHaiAFiilgjjggXmYX4IcFIBBKLJCDJiBRRIkuRNUgxUopUIFVIHfI9cgI5h1xGupE7yAAygvyGvEcxlIGyUT3UDLVDuag3GoRGogvQZHQxmo8WoJvQcrQaPYw2oefQq2gP2o8+Q8cwwOgYBzPEbDAuxsNCsTgsCZNjy7EirAyrxhqwVqwDu4n1Y8+xdwQSgUXACTYEd0IgYR5BSFhMWE7YSKggHCQ0EdoJNwkDhFHCJyKTqEu0JroR+cQYYjIxh1hILCPWEo8TLxB7iEPENyQSiUMyJ7mQAkmxpFTSEtJG0m5SI+ksqZs0SBojk8naZGuyBzmULCAryIXkneTD5DPkG+Qh8lsKnWJAcaT4U+IoUspqShnlEOU05QZlmDJBVaOaUt2ooVQRNY9aQq2htlKvUYeoEzR1mjnNgxZJS6WtopXTGmgXaPdpr+h0uhHdlR5Ol9BX0svpR+iX6AP0dwwNhhWDx4hnKBmbGAcYZxl3GK+YTKYZ04sZx1QwNzHrmOeZD5lvVVgqtip8FZHKCpVKlSaVGyovVKmqpqreqgtV81XLVI+pXlN9rkZVM1PjqQnUlqtVqp1Q61MbU2epO6iHqmeob1Q/pH5Z/YkGWcNMw09DpFGgsV/jvMYgC2MZs3gsIWsNq4Z1gTXEJrHN2Xx2KruY/R27iz2qqaE5QzNKM1ezUvOUZj8H45hx+Jx0TgnnKKeX836K3hTvKeIpG6Y0TLkxZVxrqpaXllirSKtRq0frvTau7aedpr1Fu1n7gQ5Bx0onXCdHZ4/OBZ3nU9lT3acKpxZNPTr1ri6qa6UbobtEd79up+6Ynr5egJ5Mb6feeb3n+hx9L/1U/W36p/VHDFgGswwkBtsMzhg8xTVxbzwdL8fb8VFDXcNAQ6VhlWGX4YSRudE8o9VGjUYPjGnGXOMk423GbcajJgYmISZLTepN7ppSTbmmKaY7TDtMx83MzaLN1pk1mz0x1zLnm+eb15vft2BaeFostqi2uGVJsuRaplnutrxuhVo5WaVYVVpds0atna0l1rutu6cRp7lOk06rntZnw7Dxtsm2qbcZsOXYBtuutm22fWFnYhdnt8Wuw+6TvZN9un2N/T0HDYfZDqsdWh1+c7RyFDpWOt6azpzuP33F9JbpL2dYzxDP2DPjthPLKcRpnVOb00dnF2e5c4PziIuJS4LLLpc+Lpsbxt3IveRKdPVxXeF60vWdm7Obwu2o26/uNu5p7ofcn8w0nymeWTNz0MPIQ+BR5dE/C5+VMGvfrH5PQ0+BZ7XnIy9jL5FXrdewt6V3qvdh7xc+9j5yn+M+4zw33jLeWV/MN8C3yLfLT8Nvnl+F30N/I/9k/3r/0QCngCUBZwOJgUGBWwL7+Hp8Ib+OPzrbZfay2e1BjKC5QRVBj4KtguXBrSFoyOyQrSH355jOkc5pDoVQfujW0Adh5mGLw34MJ4WHhVeGP45wiFga0TGXNXfR3ENz30T6RJZE3ptnMU85ry1KNSo+qi5qPNo3ujS6P8YuZlnM1VidWElsSxw5LiquNm5svt/87fOH4p3iC+N7F5gvyF1weaHOwvSFpxapLhIsOpZATIhOOJTwQRAqqBaMJfITdyWOCnnCHcJnIi/RNtGI2ENcKh5O8kgqTXqS7JG8NXkkxTOlLOW5hCepkLxMDUzdmzqeFpp2IG0yPTq9MYOSkZBxQqohTZO2Z+pn5mZ2y6xlhbL+xW6Lty8elQfJa7OQrAVZLQq2QqboVFoo1yoHsmdlV2a/zYnKOZarnivN7cyzytuQN5zvn//tEsIS4ZK2pYZLVy0dWOa9rGo5sjxxedsK4xUFK4ZWBqw8uIq2Km3VT6vtV5eufr0mek1rgV7ByoLBtQFr6wtVCuWFfevc1+1dT1gvWd+1YfqGnRs+FYmKrhTbF5cVf9go3HjlG4dvyr+Z3JS0qavEuWTPZtJm6ebeLZ5bDpaql+aXDm4N2dq0Dd9WtO319kXbL5fNKNu7g7ZDuaO/PLi8ZafJzs07P1SkVPRU+lQ27tLdtWHX+G7R7ht7vPY07NXbW7z3/T7JvttVAVVN1WbVZftJ+7P3P66Jqun4lvttXa1ObXHtxwPSA/0HIw6217nU1R3SPVRSj9Yr60cOxx++/p3vdy0NNg1VjZzG4iNwRHnk6fcJ3/ceDTradox7rOEH0x92HWcdL2pCmvKaRptTmvtbYlu6T8w+0dbq3nr8R9sfD5w0PFl5SvNUyWna6YLTk2fyz4ydlZ19fi753GDborZ752PO32oPb++6EHTh0kX/i+c7vDvOXPK4dPKy2+UTV7hXmq86X23qdOo8/pPTT8e7nLuarrlca7nuer21e2b36RueN87d9L158Rb/1tWeOT3dvfN6b/fF9/XfFt1+cif9zsu72Xcn7q28T7xf9EDtQdlD3YfVP1v+3Njv3H9qwHeg89HcR/cGhYPP/pH1jw9DBY+Zj8uGDYbrnjg+OTniP3L96fynQ89kzyaeF/6i/suuFxYvfvjV69fO0ZjRoZfyl5O/bXyl/erA6xmv28bCxh6+yXgzMV70VvvtwXfcdx3vo98PT+R8IH8o/2j5sfVT0Kf7kxmTk/8EA5jz/GMzLdsAAEEOaVRYdFhNTDpjb20uYWRvYmUueG1wAAAAAAA8P3hwYWNrZXQgYmVnaW49Iu+7vyIgaWQ9Ilc1TTBNcENlaGlIenJlU3pOVGN6a2M5ZCI/Pgo8eDp4bXBtZXRhIHhtbG5zOng9ImFkb2JlOm5zOm1ldGEvIiB4OnhtcHRrPSJBZG9iZSBYTVAgQ29yZSA1LjUtYzAyMSA3OS4xNTQ5MTEsIDIwMTMvMTAvMjktMTE6NDc6MTYgICAgICAgICI+CiAgIDxyZGY6UkRGIHhtbG5zOnJkZj0iaHR0cDovL3d3dy53My5vcmcvMTk5OS8wMi8yMi1yZGYtc3ludGF4LW5zIyI+CiAgICAgIDxyZGY6RGVzY3JpcHRpb24gcmRmOmFib3V0PSIiCiAgICAgICAgICAgIHhtbG5zOnhtcD0iaHR0cDovL25zLmFkb2JlLmNvbS94YXAvMS4wLyIKICAgICAgICAgICAgeG1sbnM6ZGM9Imh0dHA6Ly9wdXJsLm9yZy9kYy9lbGVtZW50cy8xLjEvIgogICAgICAgICAgICB4bWxuczp4bXBNTT0iaHR0cDovL25zLmFkb2JlLmNvbS94YXAvMS4wL21tLyIKICAgICAgICAgICAgeG1sbnM6c3RFdnQ9Imh0dHA6Ly9ucy5hZG9iZS5jb20veGFwLzEuMC9zVHlwZS9SZXNvdXJjZUV2ZW50IyIKICAgICAgICAgICAgeG1sbnM6c3RSZWY9Imh0dHA6Ly9ucy5hZG9iZS5jb20veGFwLzEuMC9zVHlwZS9SZXNvdXJjZVJlZiMiCiAgICAgICAgICAgIHhtbG5zOnBob3Rvc2hvcD0iaHR0cDovL25zLmFkb2JlLmNvbS9waG90b3Nob3AvMS4wLyIKICAgICAgICAgICAgeG1sbnM6dGlmZj0iaHR0cDovL25zLmFkb2JlLmNvbS90aWZmLzEuMC8iCiAgICAgICAgICAgIHhtbG5zOmV4aWY9Imh0dHA6Ly9ucy5hZG9iZS5jb20vZXhpZi8xLjAvIj4KICAgICAgICAgPHhtcDpDcmVhdG9yVG9vbD5BZG9iZSBQaG90b3Nob3AgQ0MgKFdpbmRvd3MpPC94bXA6Q3JlYXRvclRvb2w+CiAgICAgICAgIDx4bXA6Q3JlYXRlRGF0ZT4yMDE0LTAxLTIyVDE5OjI0OjUxKzAxOjAwPC94bXA6Q3JlYXRlRGF0ZT4KICAgICAgICAgPHhtcDpNZXRhZGF0YURhdGU+MjAxNC0wMi0wNFQxNDo0MDoyOSswMTowMDwveG1wOk1ldGFkYXRhRGF0ZT4KICAgICAgICAgPHhtcDpNb2RpZnlEYXRlPjIwMTQtMDItMDRUMTQ6NDA6MjkrMDE6MDA8L3htcDpNb2RpZnlEYXRlPgogICAgICAgICA8ZGM6Zm9ybWF0PmltYWdlL3BuZzwvZGM6Zm9ybWF0PgogICAgICAgICA8eG1wTU06SW5zdGFuY2VJRD54bXAuaWlkOjVkNWIwNmQwLTVmMjAtOGE0NC1hMzIwLWZmMTEzMzQwNDc0YjwveG1wTU06SW5zdGFuY2VJRD4KICAgICAgICAgPHhtcE1NOkRvY3VtZW50SUQ+eG1wLmRpZDpFQTc2MkY5Njc0ODNFMzExOTQ4QkQxM0UyQkU3OTlBMTwveG1wTU06RG9jdW1lbnRJRD4KICAgICAgICAgPHhtcE1NOk9yaWdpbmFsRG9jdW1lbnRJRD54bXAuZGlkOjczQjYyQUFEOTE4M0UzMTE5NDhCRDEzRTJCRTc5OUExPC94bXBNTTpPcmlnaW5hbERvY3VtZW50SUQ+CiAgICAgICAgIDx4bXBNTTpIaXN0b3J5PgogICAgICAgICAgICA8cmRmOlNlcT4KICAgICAgICAgICAgICAgPHJkZjpsaSByZGY6cGFyc2VUeXBlPSJSZXNvdXJjZSI+CiAgICAgICAgICAgICAgICAgIDxzdEV2dDphY3Rpb24+Y3JlYXRlZDwvc3RFdnQ6YWN0aW9uPgogICAgICAgICAgICAgICAgICA8c3RFdnQ6aW5zdGFuY2VJRD54bXAuaWlkOjczQjYyQUFEOTE4M0UzMTE5NDhCRDEzRTJCRTc5OUExPC9zdEV2dDppbnN0YW5jZUlEPgogICAgICAgICAgICAgICAgICA8c3RFdnQ6d2hlbj4yMDE0LTAxLTIyVDE5OjI0OjUxKzAxOjAwPC9zdEV2dDp3aGVuPgogICAgICAgICAgICAgICAgICA8c3RFdnQ6c29mdHdhcmVBZ2VudD5BZG9iZSBQaG90b3Nob3AgQ1M2IChXaW5kb3dzKTwvc3RFdnQ6c29mdHdhcmVBZ2VudD4KICAgICAgICAgICAgICAgPC9yZGY6bGk+CiAgICAgICAgICAgICAgIDxyZGY6bGkgcmRmOnBhcnNlVHlwZT0iUmVzb3VyY2UiPgogICAgICAgICAgICAgICAgICA8c3RFdnQ6YWN0aW9uPnNhdmVkPC9zdEV2dDphY3Rpb24+CiAgICAgICAgICAgICAgICAgIDxzdEV2dDppbnN0YW5jZUlEPnhtcC5paWQ6RUE2MEEyNEUxOTg0RTMxMUFEQUZFRkU2RUMzMzNFMDM8L3N0RXZ0Omluc3RhbmNlSUQ+CiAgICAgICAgICAgICAgICAgIDxzdEV2dDp3aGVuPjIwMTQtMDEtMjNUMTk6MTg6MDcrMDE6MDA8L3N0RXZ0OndoZW4+CiAgICAgICAgICAgICAgICAgIDxzdEV2dDpzb2Z0d2FyZUFnZW50PkFkb2JlIFBob3Rvc2hvcCBDUzYgKFdpbmRvd3MpPC9zdEV2dDpzb2Z0d2FyZUFnZW50PgogICAgICAgICAgICAgICAgICA8c3RFdnQ6Y2hhbmdlZD4vPC9zdEV2dDpjaGFuZ2VkPgogICAgICAgICAgICAgICA8L3JkZjpsaT4KICAgICAgICAgICAgICAgPHJkZjpsaSByZGY6cGFyc2VUeXBlPSJSZXNvdXJjZSI+CiAgICAgICAgICAgICAgICAgIDxzdEV2dDphY3Rpb24+c2F2ZWQ8L3N0RXZ0OmFjdGlvbj4KICAgICAgICAgICAgICAgICAgPHN0RXZ0Omluc3RhbmNlSUQ+eG1wLmlpZDo2OWVmYWE1NS01ZTI5LTIzNGUtYTUzMy0xNDkxYjM1NDNmYmE8L3N0RXZ0Omluc3RhbmNlSUQ+CiAgICAgICAgICAgICAgICAgIDxzdEV2dDp3aGVuPjIwMTQtMDItMDRUMTQ6NDA6MjkrMDE6MDA8L3N0RXZ0OndoZW4+CiAgICAgICAgICAgICAgICAgIDxzdEV2dDpzb2Z0d2FyZUFnZW50PkFkb2JlIFBob3Rvc2hvcCBDQyAoV2luZG93cyk8L3N0RXZ0OnNvZnR3YXJlQWdlbnQ+CiAgICAgICAgICAgICAgICAgIDxzdEV2dDpjaGFuZ2VkPi88L3N0RXZ0OmNoYW5nZWQ+CiAgICAgICAgICAgICAgIDwvcmRmOmxpPgogICAgICAgICAgICAgICA8cmRmOmxpIHJkZjpwYXJzZVR5cGU9IlJlc291cmNlIj4KICAgICAgICAgICAgICAgICAgPHN0RXZ0OmFjdGlvbj5jb252ZXJ0ZWQ8L3N0RXZ0OmFjdGlvbj4KICAgICAgICAgICAgICAgICAgPHN0RXZ0OnBhcmFtZXRlcnM+ZnJvbSBhcHBsaWNhdGlvbi92bmQuYWRvYmUucGhvdG9zaG9wIHRvIGltYWdlL3BuZzwvc3RFdnQ6cGFyYW1ldGVycz4KICAgICAgICAgICAgICAgPC9yZGY6bGk+CiAgICAgICAgICAgICAgIDxyZGY6bGkgcmRmOnBhcnNlVHlwZT0iUmVzb3VyY2UiPgogICAgICAgICAgICAgICAgICA8c3RFdnQ6YWN0aW9uPmRlcml2ZWQ8L3N0RXZ0OmFjdGlvbj4KICAgICAgICAgICAgICAgICAgPHN0RXZ0OnBhcmFtZXRlcnM+Y29udmVydGVkIGZyb20gYXBwbGljYXRpb24vdm5kLmFkb2JlLnBob3Rvc2hvcCB0byBpbWFnZS9wbmc8L3N0RXZ0OnBhcmFtZXRlcnM+CiAgICAgICAgICAgICAgIDwvcmRmOmxpPgogICAgICAgICAgICAgICA8cmRmOmxpIHJkZjpwYXJzZVR5cGU9IlJlc291cmNlIj4KICAgICAgICAgICAgICAgICAgPHN0RXZ0OmFjdGlvbj5zYXZlZDwvc3RFdnQ6YWN0aW9uPgogICAgICAgICAgICAgICAgICA8c3RFdnQ6aW5zdGFuY2VJRD54bXAuaWlkOjVkNWIwNmQwLTVmMjAtOGE0NC1hMzIwLWZmMTEzMzQwNDc0Yjwvc3RFdnQ6aW5zdGFuY2VJRD4KICAgICAgICAgICAgICAgICAgPHN0RXZ0OndoZW4+MjAxNC0wMi0wNFQxNDo0MDoyOSswMTowMDwvc3RFdnQ6d2hlbj4KICAgICAgICAgICAgICAgICAgPHN0RXZ0OnNvZnR3YXJlQWdlbnQ+QWRvYmUgUGhvdG9zaG9wIENDIChXaW5kb3dzKTwvc3RFdnQ6c29mdHdhcmVBZ2VudD4KICAgICAgICAgICAgICAgICAgPHN0RXZ0OmNoYW5nZWQ+Lzwvc3RFdnQ6Y2hhbmdlZD4KICAgICAgICAgICAgICAgPC9yZGY6bGk+CiAgICAgICAgICAgIDwvcmRmOlNlcT4KICAgICAgICAgPC94bXBNTTpIaXN0b3J5PgogICAgICAgICA8eG1wTU06RGVyaXZlZEZyb20gcmRmOnBhcnNlVHlwZT0iUmVzb3VyY2UiPgogICAgICAgICAgICA8c3RSZWY6aW5zdGFuY2VJRD54bXAuaWlkOjY5ZWZhYTU1LTVlMjktMjM0ZS1hNTMzLTE0OTFiMzU0M2ZiYTwvc3RSZWY6aW5zdGFuY2VJRD4KICAgICAgICAgICAgPHN0UmVmOmRvY3VtZW50SUQ+eG1wLmRpZDpFQTc2MkY5Njc0ODNFMzExOTQ4QkQxM0UyQkU3OTlBMTwvc3RSZWY6ZG9jdW1lbnRJRD4KICAgICAgICAgICAgPHN0UmVmOm9yaWdpbmFsRG9jdW1lbnRJRD54bXAuZGlkOjczQjYyQUFEOTE4M0UzMTE5NDhCRDEzRTJCRTc5OUExPC9zdFJlZjpvcmlnaW5hbERvY3VtZW50SUQ+CiAgICAgICAgIDwveG1wTU06RGVyaXZlZEZyb20+CiAgICAgICAgIDxwaG90b3Nob3A6Q29sb3JNb2RlPjM8L3Bob3Rvc2hvcDpDb2xvck1vZGU+CiAgICAgICAgIDxwaG90b3Nob3A6SUNDUHJvZmlsZT5zUkdCIElFQzYxOTY2LTIuMTwvcGhvdG9zaG9wOklDQ1Byb2ZpbGU+CiAgICAgICAgIDx0aWZmOk9yaWVudGF0aW9uPjE8L3RpZmY6T3JpZW50YXRpb24+CiAgICAgICAgIDx0aWZmOlhSZXNvbHV0aW9uPjcyMDA5MC8xMDAwMDwvdGlmZjpYUmVzb2x1dGlvbj4KICAgICAgICAgPHRpZmY6WVJlc29sdXRpb24+NzIwMDkwLzEwMDAwPC90aWZmOllSZXNvbHV0aW9uPgogICAgICAgICA8dGlmZjpSZXNvbHV0aW9uVW5pdD4yPC90aWZmOlJlc29sdXRpb25Vbml0PgogICAgICAgICA8ZXhpZjpDb2xvclNwYWNlPjE8L2V4aWY6Q29sb3JTcGFjZT4KICAgICAgICAgPGV4aWY6UGl4ZWxYRGltZW5zaW9uPjI0PC9leGlmOlBpeGVsWERpbWVuc2lvbj4KICAgICAgICAgPGV4aWY6UGl4ZWxZRGltZW5zaW9uPjI0PC9leGlmOlBpeGVsWURpbWVuc2lvbj4KICAgICAgPC9yZGY6RGVzY3JpcHRpb24+CiAgIDwvcmRmOlJERj4KPC94OnhtcG1ldGE+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgCjw/eHBhY2tldCBlbmQ9InciPz5WKqp9AAAAIGNIUk0AAHolAACAgwAA+f8AAIDpAAB1MAAA6mAAADqYAAAXb5JfxUYAAAYXSURBVHjafFZtUFTXGX7e9z27sveuMCwYV8ElrA7YSFYHtJUPkaaI0aRqG8wP00zUzljDINNSA/2ROtpO24SxnahlxjYd7SSjmUkymcxYlDhQPzHGisEVp8HwYWCVVVgEsrsuLnL74+5uqTF9Z+7cO/d8PO95zvO851BlZSV0XQcAMDOYGQBARDhX3JRmMDYZwLPMWAzGHACYIgwS46oBNBNwtOL8CwE8EkSEUCgE2rJlC2w2G4go8Zwo/bMDgnoG6gxLfAAAYvPDMCCszKTAMIAGAhrWnf15AAAMwwARIRKJgDZv3gy73Q4iAjPjxIr9VVOMRhbAYKB8zvrO0llrfEsdKwLZek6YAPSFvtSu3GtLawu0ZJ6625SHGBQB1T88t6MxvopgMAjaunUrdF0HM+P4yv27DMYeJmB1RqW3Jnf3tQX2p0L4P9EXuqEd7PmDp+XuMU9sRbvXnnt1TxxACgoKYLVacbzsQDUJGkSATe6qi28uPtzusM6Kxie6NHLGUX3lxVUNX9StPHnn4wy3njuUYcu6n2pNi66avcEXnByP/nv8aiaIyrqz2gO5A9+9FI1GIfn5+WhZdTAdjFMkwMvZOy7uWnTAOz3L4Yk71m3t69fdfTDoUGTBeHTUfiHQ6lo7Z2OXJvpDAChKe+aOCdKRKWxZ2+1qb3yyd3GYmRkQ7GQBVs99wfv6on3eR2k4PdTkDEbH7IuS8/svld/561PJS/pDk1/bzwx94pze7xc5v/H+YPY6r5BAkdrJzODTK46lE6PeYEJt7u+8j+OZwCBiEAgAoNgKJoEQf6PvNvdrXgtZoNhSf7q0KZ3B2AQmVMze0Jmt54S/DcDCVig2NcvEUGxJAE4Pl+YOr0iv6BRSIPAmBeBZAmHlE2sH4p1uhrq1s0MnnEQMBsf8wRASAICQQCCITN1X7/sOuc0kgOVp3/fPs2WHv+coG7gQOJUnLGsUCTxEjPzUohEA+NfIWUdtx0+efzA1kSSkIGyBAQNCKgHAEBAJ3u79U7kiAcWoem/gb5Fd33nrH3kp+SMWtuAB+GllMJxMjCx9QRgA3uiqL5kwHiTlpxb3smlfMDGYGPP1hcMAkJvs8ScpfdJspdj+MK6Pf+5+u29vyb4lR4+BGEziVESAkEpw6Av1OhUpHCz4qOXbzFWz4Ncdj/v/o08Lt92ODDgZDCEFJYoUGH4mzugP92puPTf0pD3H7wvfdFZdqSxnMtWjoGAAmG9fOLxjwesdjT2/XzIQ7ks3sycYMSEwGHNtWf5bkX5NkYCJBxUBXiGV0XHvosOt54Zey33j/K+8P33++vjnbiGJbbLE+J9SANAb6nJ2B79wcUwETAwQQ7fMjPzMvfP8ja87HUIKMOiaAqMZhrGmLdAy78eZrwwsTS0eObTs+IdtgVanxBUExqGbb5VzrIISGIoUXsmqbgEhJldCQWqRf27SvPAn/o8XmgLhZsUkR4ll37mhk3n94Z4OlzY/7NLcYZfm7o1z2zT4vsvUNSXqprBCkmiTFbPX90/fh8GIT2sf+zTPdDMf4dVnNg4z+E0ixsGeBs9jd5ViSgLHjCb/peaR+MD3d4/ZJg2llyuG2Vwy7QWAs8PNnn1f7vkGSGxAzE6mk+kxkx/p/4unffSCR0hAoL1EBCYiPNdWNcwkNQTCR7feWX6g+7f/A7I8rcw/U6UEe0Ndrhc/W7mtL9ztmqlSgstSS/zTJ28dalpOpkRryrwbhwBACgsLMWPGDOT4ll3qyeqAkJTdCF7P/CrUY/GkLL1rE+2hTbSH8+0Lb/WEuhzhyaA905blf9Vd/895WnZwLHrPevir/cvOB1oLYpTtLrm6oYGIMDExAaqtrUVKSgqYGSKCk0WHq5ikkWEWtNL0imv5qUW+RclLRjJsrhBAuH1/QL8R7HR4xy5nescuP23E6hOA6mLv+sb4uTw6Ogqqq6uDpmkQkcStorX4XRcM1FjZ+kvFFjCJKU1WpkNJJUqIMtX1RyLeX3JtQ0JRhmGYZ/L27duRnJycuFGISOJ9pqh5lrB6iYgqGOxRrOaa54DcZmKvkJxk8JHC9rKh+KVhOsD4+Dj+MwADIf8n5m4xGwAAAABJRU5ErkJggg==")}div.vis-network div.vis-edit-mode button.vis-button.vis-edit,div.vis-network div.vis-manipulation button.vis-button.vis-edit{background-image:url("data:image/png;base64,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/GMzLdsAAEEOaVRYdFhNTDpjb20uYWRvYmUueG1wAAAAAAA8P3hwYWNrZXQgYmVnaW49Iu+7vyIgaWQ9Ilc1TTBNcENlaGlIenJlU3pOVGN6a2M5ZCI/Pgo8eDp4bXBtZXRhIHhtbG5zOng9ImFkb2JlOm5zOm1ldGEvIiB4OnhtcHRrPSJBZG9iZSBYTVAgQ29yZSA1LjUtYzAyMSA3OS4xNTQ5MTEsIDIwMTMvMTAvMjktMTE6NDc6MTYgICAgICAgICI+CiAgIDxyZGY6UkRGIHhtbG5zOnJkZj0iaHR0cDovL3d3dy53My5vcmcvMTk5OS8wMi8yMi1yZGYtc3ludGF4LW5zIyI+CiAgICAgIDxyZGY6RGVzY3JpcHRpb24gcmRmOmFib3V0PSIiCiAgICAgICAgICAgIHhtbG5zOnhtcD0iaHR0cDovL25zLmFkb2JlLmNvbS94YXAvMS4wLyIKICAgICAgICAgICAgeG1sbnM6ZGM9Imh0dHA6Ly9wdXJsLm9yZy9kYy9lbGVtZW50cy8xLjEvIgogICAgICAgICAgICB4bWxuczp4bXBNTT0iaHR0cDovL25zLmFkb2JlLmNvbS94YXAvMS4wL21tLyIKICAgICAgICAgICAgeG1sbnM6c3RFdnQ9Imh0dHA6Ly9ucy5hZG9iZS5jb20veGFwLzEuMC9zVHlwZS9SZXNvdXJjZUV2ZW50IyIKICAgICAgICAgICAgeG1sbnM6c3RSZWY9Imh0dHA6Ly9ucy5hZG9iZS5jb20veGFwLzEuMC9zVHlwZS9SZXNvdXJjZVJlZiMiCiAgICAgICAgICAgIHhtbG5zOnBob3Rvc2hvcD0iaHR0cDovL25zLmFkb2JlLmNvbS9waG90b3Nob3AvMS4wLyIKICAgICAgICAgICAgeG1sbnM6dGlmZj0iaHR0cDovL25zLmFkb2JlLmNvbS90aWZmLzEuMC8iCiAgICAgICAgICAgIHhtbG5zOmV4aWY9Imh0dHA6Ly9ucy5hZG9iZS5jb20vZXhpZi8xLjAvIj4KICAgICAgICAgPHhtcDpDcmVhdG9yVG9vbD5BZG9iZSBQaG90b3Nob3AgQ0MgKFdpbmRvd3MpPC94bXA6Q3JlYXRvclRvb2w+CiAgICAgICAgIDx4bXA6Q3JlYXRlRGF0ZT4yMDE0LTAxLTIyVDE5OjI0OjUxKzAxOjAwPC94bXA6Q3JlYXRlRGF0ZT4KICAgICAgICAgPHhtcDpNZXRhZGF0YURhdGU+MjAxNC0wMi0wNVQxNDoxMjoyNSswMTowMDwveG1wOk1ldGFkYXRhRGF0ZT4KICAgICAgICAgPHhtcDpNb2RpZnlEYXRlPjIwMTQtMDItMDVUMTQ6MTI6MjUrMDE6MDA8L3htcDpNb2RpZnlEYXRlPgogICAgICAgICA8ZGM6Zm9ybWF0PmltYWdlL3BuZzwvZGM6Zm9ybWF0PgogICAgICAgICA8eG1wTU06SW5zdGFuY2VJRD54bXAuaWlkOjY5OTM3ZGZjLTJjNzQtYTU0YS05OTIzLTQyMmZhNDNkMjljNDwveG1wTU06SW5zdGFuY2VJRD4KICAgICAgICAgPHhtcE1NOkRvY3VtZW50SUQ+eG1wLmRpZDpFQTc2MkY5Njc0ODNFMzExOTQ4QkQxM0UyQkU3OTlBMTwveG1wTU06RG9jdW1lbnRJRD4KICAgICAgICAgPHhtcE1NOk9yaWdpbmFsRG9jdW1lbnRJRD54bXAuZGlkOjczQjYyQUFEOTE4M0UzMTE5NDhCRDEzRTJCRTc5OUExPC94bXBNTTpPcmlnaW5hbERvY3VtZW50SUQ+CiAgICAgICAgIDx4bXBNTTpIaXN0b3J5PgogICAgICAgICAgICA8cmRmOlNlcT4KICAgICAgICAgICAgICAgPHJkZjpsaSByZGY6cGFyc2VUeXBlPSJSZXNvdXJjZSI+CiAgICAgICAgICAgICAgICAgIDxzdEV2dDphY3Rpb24+Y3JlYXRlZDwvc3RFdnQ6YWN0aW9uPgogICAgICAgICAgICAgICAgICA8c3RFdnQ6aW5zdGFuY2VJRD54bXAuaWlkOjczQjYyQUFEOTE4M0UzMTE5NDhCRDEzRTJCRTc5OUExPC9zdEV2dDppbnN0YW5jZUlEPgogICAgICAgICAgICAgICAgICA8c3RFdnQ6d2hlbj4yMDE0LTAxLTIyVDE5OjI0OjUxKzAxOjAwPC9zdEV2dDp3aGVuPgogICAgICAgICAgICAgICAgICA8c3RFdnQ6c29mdHdhcmVBZ2VudD5BZG9iZSBQaG90b3Nob3AgQ1M2IChXaW5kb3dzKTwvc3RFdnQ6c29mdHdhcmVBZ2VudD4KICAgICAgICAgICAgICAgPC9yZGY6bGk+CiAgICAgICAgICAgICAgIDxyZGY6bGkgcmRmOnBhcnNlVHlwZT0iUmVzb3VyY2UiPgogICAgICAgICAgICAgICAgICA8c3RFdnQ6YWN0aW9uPnNhdmVkPC9zdEV2dDphY3Rpb24+CiAgICAgICAgICAgICAgICAgIDxzdEV2dDppbnN0YW5jZUlEPnhtcC5paWQ6RUE2MEEyNEUxOTg0RTMxMUFEQUZFRkU2RUMzMzNFMDM8L3N0RXZ0Omluc3RhbmNlSUQ+CiAgICAgICAgICAgICAgICAgIDxzdEV2dDp3aGVuPjIwMTQtMDEtMjNUMTk6MTg6MDcrMDE6MDA8L3N0RXZ0OndoZW4+CiAgICAgICAgICAgICAgICAgIDxzdEV2dDpzb2Z0d2FyZUFnZW50PkFkb2JlIFBob3Rvc2hvcCBDUzYgKFdpbmRvd3MpPC9zdEV2dDpzb2Z0d2FyZUFnZW50PgogICAgICAgICAgICAgICAgICA8c3RFdnQ6Y2hhbmdlZD4vPC9zdEV2dDpjaGFuZ2VkPgogICAgICAgICAgICAgICA8L3JkZjpsaT4KICAgICAgICAgICAgICAgPHJkZjpsaSByZGY6cGFyc2VUeXBlPSJSZXNvdXJjZSI+CiAgICAgICAgICAgICAgICAgIDxzdEV2dDphY3Rpb24+c2F2ZWQ8L3N0RXZ0OmFjdGlvbj4KICAgICAgICAgICAgICAgICAgPHN0RXZ0Omluc3RhbmNlSUQ+eG1wLmlpZDozOWNhNzE5ZC03YzNlLTUyNGEtYmY1NS03NGVmMmM1MzE0YTc8L3N0RXZ0Omluc3RhbmNlSUQ+CiAgICAgICAgICAgICAgICAgIDxzdEV2dDp3aGVuPjIwMTQtMDItMDVUMTQ6MTI6MjUrMDE6MDA8L3N0RXZ0OndoZW4+CiAgICAgICAgICAgICAgICAgIDxzdEV2dDpzb2Z0d2FyZUFnZW50PkFkb2JlIFBob3Rvc2hvcCBDQyAoV2luZG93cyk8L3N0RXZ0OnNvZnR3YXJlQWdlbnQ+CiAgICAgICAgICAgICAgICAgIDxzdEV2dDpjaGFuZ2VkPi88L3N0RXZ0OmNoYW5nZWQ+CiAgICAgICAgICAgICAgIDwvcmRmOmxpPgogICAgICAgICAgICAgICA8cmRmOmxpIHJkZjpwYXJzZVR5cGU9IlJlc291cmNlIj4KICAgICAgICAgICAgICAgICAgPHN0RXZ0OmFjdGlvbj5jb252ZXJ0ZWQ8L3N0RXZ0OmFjdGlvbj4KICAgICAgICAgICAgICAgICAgPHN0RXZ0OnBhcmFtZXRlcnM+ZnJvbSBhcHBsaWNhdGlvbi92bmQuYWRvYmUucGhvdG9zaG9wIHRvIGltYWdlL3BuZzwvc3RFdnQ6cGFyYW1ldGVycz4KICAgICAgICAgICAgICAgPC9yZGY6bGk+CiAgICAgICAgICAgICAgIDxyZGY6bGkgcmRmOnBhcnNlVHlwZT0iUmVzb3VyY2UiPgogICAgICAgICAgICAgICAgICA8c3RFdnQ6YWN0aW9uPmRlcml2ZWQ8L3N0RXZ0OmFjdGlvbj4KICAgICAgICAgICAgICAgICAgPHN0RXZ0OnBhcmFtZXRlcnM+Y29udmVydGVkIGZyb20gYXBwbGljYXRpb24vdm5kLmFkb2JlLnBob3Rvc2hvcCB0byBpbWFnZS9wbmc8L3N0RXZ0OnBhcmFtZXRlcnM+CiAgICAgICAgICAgICAgIDwvcmRmOmxpPgogICAgICAgICAgICAgICA8cmRmOmxpIHJkZjpwYXJzZVR5cGU9IlJlc291cmNlIj4KICAgICAgICAgICAgICAgICAgPHN0RXZ0OmFjdGlvbj5zYXZlZDwvc3RFdnQ6YWN0aW9uPgogICAgICAgICAgICAgICAgICA8c3RFdnQ6aW5zdGFuY2VJRD54bXAuaWlkOjY5OTM3ZGZjLTJjNzQtYTU0YS05OTIzLTQyMmZhNDNkMjljNDwvc3RFdnQ6aW5zdGFuY2VJRD4KICAgICAgICAgICAgICAgICAgPHN0RXZ0OndoZW4+MjAxNC0wMi0wNVQxNDoxMjoyNSswMTowMDwvc3RFdnQ6d2hlbj4KICAgICAgICAgICAgICAgICAgPHN0RXZ0OnNvZnR3YXJlQWdlbnQ+QWRvYmUgUGhvdG9zaG9wIENDIChXaW5kb3dzKTwvc3RFdnQ6c29mdHdhcmVBZ2VudD4KICAgICAgICAgICAgICAgICAgPHN0RXZ0OmNoYW5nZWQ+Lzwvc3RFdnQ6Y2hhbmdlZD4KICAgICAgICAgICAgICAgPC9yZGY6bGk+CiAgICAgICAgICAgIDwvcmRmOlNlcT4KICAgICAgICAgPC94bXBNTTpIaXN0b3J5PgogICAgICAgICA8eG1wTU06RGVyaXZlZEZyb20gcmRmOnBhcnNlVHlwZT0iUmVzb3VyY2UiPgogICAgICAgICAgICA8c3RSZWY6aW5zdGFuY2VJRD54bXAuaWlkOjM5Y2E3MTlkLTdjM2UtNTI0YS1iZjU1LTc0ZWYyYzUzMTRhNzwvc3RSZWY6aW5zdGFuY2VJRD4KICAgICAgICAgICAgPHN0UmVmOmRvY3VtZW50SUQ+eG1wLmRpZDpFQTc2MkY5Njc0ODNFMzExOTQ4QkQxM0UyQkU3OTlBMTwvc3RSZWY6ZG9jdW1lbnRJRD4KICAgICAgICAgICAgPHN0UmVmOm9yaWdpbmFsRG9jdW1lbnRJRD54bXAuZGlkOjczQjYyQUFEOTE4M0UzMTE5NDhCRDEzRTJCRTc5OUExPC9zdFJlZjpvcmlnaW5hbERvY3VtZW50SUQ+CiAgICAgICAgIDwveG1wTU06RGVyaXZlZEZyb20+CiAgICAgICAgIDxwaG90b3Nob3A6Q29sb3JNb2RlPjM8L3Bob3Rvc2hvcDpDb2xvck1vZGU+CiAgICAgICAgIDxwaG90b3Nob3A6SUNDUHJvZmlsZT5zUkdCIElFQzYxOTY2LTIuMTwvcGhvdG9zaG9wOklDQ1Byb2ZpbGU+CiAgICAgICAgIDx0aWZmOk9yaWVudGF0aW9uPjE8L3RpZmY6T3JpZW50YXRpb24+CiAgICAgICAgIDx0aWZmOlhSZXNvbHV0aW9uPjcyMDA5MC8xMDAwMDwvdGlmZjpYUmVzb2x1dGlvbj4KICAgICAgICAgPHRpZmY6WVJlc29sdXRpb24+NzIwMDkwLzEwMDAwPC90aWZmOllSZXNvbHV0aW9uPgogICAgICAgICA8dGlmZjpSZXNvbHV0aW9uVW5pdD4yPC90aWZmOlJlc29sdXRpb25Vbml0PgogICAgICAgICA8ZXhpZjpDb2xvclNwYWNlPjE8L2V4aWY6Q29sb3JTcGFjZT4KICAgICAgICAgPGV4aWY6UGl4ZWxYRGltZW5zaW9uPjI0PC9leGlmOlBpeGVsWERpbWVuc2lvbj4KICAgICAgICAgPGV4aWY6UGl4ZWxZRGltZW5zaW9uPjI0PC9leGlmOlBpeGVsWURpbWVuc2lvbj4KICAgICAgPC9yZGY6RGVzY3JpcHRpb24+CiAgIDwvcmRmOlJERj4KPC94OnhtcG1ldGE+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgCjw/eHBhY2tldCBlbmQ9InciPz4ykninAAAAIGNIUk0AAHolAACAgwAA+f8AAIDpAAB1MAAA6mAAADqYAAAXb5JfxUYAAAYpSURBVHjafFZtTFvnFX7Oea+NudiY2Hwam4CBlgQwXdKREDKUoYg0jbRJ29RJ2VZ1mjRFUxSpA3VTfkzJfkQbS7spU6rtx5Z2UtppScjaHxvLuiatWi2jLEoMIUDCh23g2gbj7+tPuPvhOurawPl1dc99n+c55z33fV46ceIEZFkGADAziAgAQERoe/9ZK4GPM/AcgbsIXAcABCgMvkfAqAa89eDoJyF8LogIqqqChoaGYDAYHr8kItS8uc8iIH6iAa9IkAo5EAQX8pqmgUVBCBggYFgDhv0/GAsBgKZpICJkMhnQ4OAgZFkGEYGZUXmp+0cS+CKBwWA0DVRPOg5Zl2q6zaHyJlnVAMQXVTkwHrUqH0Xsvn+tdQAAMQDgpPLS2MViFY8rkGUZzIzaS/t/xqCzGggtz9e697zsnKhoLUtim4jOq/LE6x7X0nsh16dEZ5a/O3a2SCAOHjwInU6Hujd6ThJ4mCDQ+b2G232v7v6vwarPbQn8MGlMr+X0kpE3Wr5Zt5hL5HPhqYSdQIfKJ+yhxDPKWC6Xg+jt7UXD5b5KBt1kCHS85Ljd8/On3NupfnhFaZj4rWff1B98B1R/hnUmKd36bdtCNl4g0en4edNE/cXwLq8qMTMIPAQwmo/WuHvObA8+9c58k/dKtD0TyZWXN5YGA7ej7epKxspM//7SoNOdWc/Jyq2wiwhDzPxT8cP0jys3VMM7OmL0/77zn4Ydui3b8uiK0jD7RrA77c9Wd57cefPpF+2T6bWsFPWkaiPTCWvTsZpHFU+XrS+8G3AR08F6X+1FJvBxQQzHQOWk2SmrW4FPX/U2LVwPuDZj+fJKl2khPpeyAqA9rzR/YqwuiWXX8taN/CabGkrVuq9YJlkQQDjOAJ5jAhz9Vt9W4N5/rNp8I+vtMV/aZm4zLnUNNt0urdYnF68HWoJj4Wo1mLGUNRr8LEgDgNqeCh8xQIKOsgC7iAjVe83rT9zQa8uNM28u70kspessu8q8zq/V3NcZpVzb9+0zmVhOvvvrhaMVzrJg0zeq7xMVCCwdpnWSGBqjUyJwLTFgbvxie3w31uoWR1Y74r60rdxZqrR8q85t2W2MGCp12bm/KC3hyaSTiMhxuGrKcahqpbjOaDOoEhOEoFqJQCCJvqA85I6bfTdDjQlf2lbxVNlS6wt19yy7jRHZZlDnrinNj/6sHMhnNw2Ogco7O79e5fm/xQywRBBCEAuwn4gQ96bkYj4Vyuq9N1Z3Bj4Od5bs0MXt/dZZ21ctiqFan174q985P+Lfp+U1g7XDON/1ctP458WlVjLyJhOISZE0wM0S1QfuRC3lTjkJAKKEtNC9eIOhSh9xHLZOJRZTFuXDsEoStLkR/768ummsaJG9Pb9oe+9J+xaeSVokiQDSJphAo5uaBuWjiKP4QTqS1cUWU7ayesN66wu22frD1vmVW6GW6T8u9eVjGyZzs+w78Nqu0a2mbvVu1KEJQAgeZRL0liQYyx+GOmKeQpu0rMYsAJPNEFGD2dLodLIy6c9Ys7G8yeSUl3tf2/X3rcBVJSOv34l3sCBogi7z1LH/rBHjl4IJ93/ncQFAnjeImJD0Z8zuCwu9q3djDXqTlAKID5xv+9t2R8n8VcUFBljQ8Gyfe40BYBM4DwDLt8Kue79ZcFkbzfEdbUbv+oN4c9KTtsfm1MbYQqqh+2zrVZYKs/7Ef+byimt1POYiJhDhPBFBIiIEXhxfs7/dfYoIF+auBfYTE/pebx/V8hqBP2ODvD34yvuh/WCAmU75Bx6sIgaI/v5+6PV6JLqUsYr7dpDAoehs0h73pHTWrvKgThYbRSt9UmSjef3MpaUvBz4O72UmADgTOPJguGiZor+/HyUlJWBmJFz+D8xTtlUiOpbwpmrmrweeSXrT+g11k4SBN3RGKUcAVCVdFhyP1nreDbY//NPyEXUlU/Pp4XYycGT6V0Ux2WwWdO7cOZSWlkII8diX7SPPNgDaKdbxoNAxwATBAEkEEgSWCEQAqPAMwqvMdCEwMO0tVqZpWsGTT58+DaPR+PhGIYQAAAgh0P7B3ioW/B0iGiCGiwXbCuOHFSJys6AbYFye2T+xWhT3WYJEIoH/DQBMw3kes8OJPgAAAABJRU5ErkJggg==")}div.vis-network div.vis-edit-mode button.vis-button.vis-edit.vis-edit-mode{background-color:#fcfcfc;border:1px solid #ccc}div.vis-network div.vis-manipulation button.vis-button.vis-connect{background-image:url("data:image/png;base64,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/GMzLdsAAEEOaVRYdFhNTDpjb20uYWRvYmUueG1wAAAAAAA8P3hwYWNrZXQgYmVnaW49Iu+7vyIgaWQ9Ilc1TTBNcENlaGlIenJlU3pOVGN6a2M5ZCI/Pgo8eDp4bXBtZXRhIHhtbG5zOng9ImFkb2JlOm5zOm1ldGEvIiB4OnhtcHRrPSJBZG9iZSBYTVAgQ29yZSA1LjUtYzAyMSA3OS4xNTQ5MTEsIDIwMTMvMTAvMjktMTE6NDc6MTYgICAgICAgICI+CiAgIDxyZGY6UkRGIHhtbG5zOnJkZj0iaHR0cDovL3d3dy53My5vcmcvMTk5OS8wMi8yMi1yZGYtc3ludGF4LW5zIyI+CiAgICAgIDxyZGY6RGVzY3JpcHRpb24gcmRmOmFib3V0PSIiCiAgICAgICAgICAgIHhtbG5zOnhtcD0iaHR0cDovL25zLmFkb2JlLmNvbS94YXAvMS4wLyIKICAgICAgICAgICAgeG1sbnM6ZGM9Imh0dHA6Ly9wdXJsLm9yZy9kYy9lbGVtZW50cy8xLjEvIgogICAgICAgICAgICB4bWxuczp4bXBNTT0iaHR0cDovL25zLmFkb2JlLmNvbS94YXAvMS4wL21tLyIKICAgICAgICAgICAgeG1sbnM6c3RFdnQ9Imh0dHA6Ly9ucy5hZG9iZS5jb20veGFwLzEuMC9zVHlwZS9SZXNvdXJjZUV2ZW50IyIKICAgICAgICAgICAgeG1sbnM6c3RSZWY9Imh0dHA6Ly9ucy5hZG9iZS5jb20veGFwLzEuMC9zVHlwZS9SZXNvdXJjZVJlZiMiCiAgICAgICAgICAgIHhtbG5zOnBob3Rvc2hvcD0iaHR0cDovL25zLmFkb2JlLmNvbS9waG90b3Nob3AvMS4wLyIKICAgICAgICAgICAgeG1sbnM6dGlmZj0iaHR0cDovL25zLmFkb2JlLmNvbS90aWZmLzEuMC8iCiAgICAgICAgICAgIHhtbG5zOmV4aWY9Imh0dHA6Ly9ucy5hZG9iZS5jb20vZXhpZi8xLjAvIj4KICAgICAgICAgPHhtcDpDcmVhdG9yVG9vbD5BZG9iZSBQaG90b3Nob3AgQ0MgKFdpbmRvd3MpPC94bXA6Q3JlYXRvclRvb2w+CiAgICAgICAgIDx4bXA6Q3JlYXRlRGF0ZT4yMDE0LTAxLTIyVDE5OjI0OjUxKzAxOjAwPC94bXA6Q3JlYXRlRGF0ZT4KICAgICAgICAgPHhtcDpNZXRhZGF0YURhdGU+MjAxNC0wMi0wNFQxNDozODo1NyswMTowMDwveG1wOk1ldGFkYXRhRGF0ZT4KICAgICAgICAgPHhtcDpNb2RpZnlEYXRlPjIwMTQtMDItMDRUMTQ6Mzg6NTcrMDE6MDA8L3htcDpNb2RpZnlEYXRlPgogICAgICAgICA8ZGM6Zm9ybWF0PmltYWdlL3BuZzwvZGM6Zm9ybWF0PgogICAgICAgICA8eG1wTU06SW5zdGFuY2VJRD54bXAuaWlkOjlmYjUwMDU0LWE3ODEtMWQ0OC05ZTllLTU2ZWQ5YzhlYjdjNjwveG1wTU06SW5zdGFuY2VJRD4KICAgICAgICAgPHhtcE1NOkRvY3VtZW50SUQ+eG1wLmRpZDpFQTc2MkY5Njc0ODNFMzExOTQ4QkQxM0UyQkU3OTlBMTwveG1wTU06RG9jdW1lbnRJRD4KICAgICAgICAgPHhtcE1NOk9yaWdpbmFsRG9jdW1lbnRJRD54bXAuZGlkOjczQjYyQUFEOTE4M0UzMTE5NDhCRDEzRTJCRTc5OUExPC94bXBNTTpPcmlnaW5hbERvY3VtZW50SUQ+CiAgICAgICAgIDx4bXBNTTpIaXN0b3J5PgogICAgICAgICAgICA8cmRmOlNlcT4KICAgICAgICAgICAgICAgPHJkZjpsaSByZGY6cGFyc2VUeXBlPSJSZXNvdXJjZSI+CiAgICAgICAgICAgICAgICAgIDxzdEV2dDphY3Rpb24+Y3JlYXRlZDwvc3RFdnQ6YWN0aW9uPgogICAgICAgICAgICAgICAgICA8c3RFdnQ6aW5zdGFuY2VJRD54bXAuaWlkOjczQjYyQUFEOTE4M0UzMTE5NDhCRDEzRTJCRTc5OUExPC9zdEV2dDppbnN0YW5jZUlEPgogICAgICAgICAgICAgICAgICA8c3RFdnQ6d2hlbj4yMDE0LTAxLTIyVDE5OjI0OjUxKzAxOjAwPC9zdEV2dDp3aGVuPgogICAgICAgICAgICAgICAgICA8c3RFdnQ6c29mdHdhcmVBZ2VudD5BZG9iZSBQaG90b3Nob3AgQ1M2IChXaW5kb3dzKTwvc3RFdnQ6c29mdHdhcmVBZ2VudD4KICAgICAgICAgICAgICAgPC9yZGY6bGk+CiAgICAgICAgICAgICAgIDxyZGY6bGkgcmRmOnBhcnNlVHlwZT0iUmVzb3VyY2UiPgogICAgICAgICAgICAgICAgICA8c3RFdnQ6YWN0aW9uPnNhdmVkPC9zdEV2dDphY3Rpb24+CiAgICAgICAgICAgICAgICAgIDxzdEV2dDppbnN0YW5jZUlEPnhtcC5paWQ6RUE2MEEyNEUxOTg0RTMxMUFEQUZFRkU2RUMzMzNFMDM8L3N0RXZ0Omluc3RhbmNlSUQ+CiAgICAgICAgICAgICAgICAgIDxzdEV2dDp3aGVuPjIwMTQtMDEtMjNUMTk6MTg6MDcrMDE6MDA8L3N0RXZ0OndoZW4+CiAgICAgICAgICAgICAgICAgIDxzdEV2dDpzb2Z0d2FyZUFnZW50PkFkb2JlIFBob3Rvc2hvcCBDUzYgKFdpbmRvd3MpPC9zdEV2dDpzb2Z0d2FyZUFnZW50PgogICAgICAgICAgICAgICAgICA8c3RFdnQ6Y2hhbmdlZD4vPC9zdEV2dDpjaGFuZ2VkPgogICAgICAgICAgICAgICA8L3JkZjpsaT4KICAgICAgICAgICAgICAgPHJkZjpsaSByZGY6cGFyc2VUeXBlPSJSZXNvdXJjZSI+CiAgICAgICAgICAgICAgICAgIDxzdEV2dDphY3Rpb24+c2F2ZWQ8L3N0RXZ0OmFjdGlvbj4KICAgICAgICAgICAgICAgICAgPHN0RXZ0Omluc3RhbmNlSUQ+eG1wLmlpZDo3ZWRhMjI0MC0yYTQxLTNlNDQtYWM2My1iNzNiYTE5OWI3Y2E8L3N0RXZ0Omluc3RhbmNlSUQ+CiAgICAgICAgICAgICAgICAgIDxzdEV2dDp3aGVuPjIwMTQtMDItMDRUMTQ6Mzg6NTcrMDE6MDA8L3N0RXZ0OndoZW4+CiAgICAgICAgICAgICAgICAgIDxzdEV2dDpzb2Z0d2FyZUFnZW50PkFkb2JlIFBob3Rvc2hvcCBDQyAoV2luZG93cyk8L3N0RXZ0OnNvZnR3YXJlQWdlbnQ+CiAgICAgICAgICAgICAgICAgIDxzdEV2dDpjaGFuZ2VkPi88L3N0RXZ0OmNoYW5nZWQ+CiAgICAgICAgICAgICAgIDwvcmRmOmxpPgogICAgICAgICAgICAgICA8cmRmOmxpIHJkZjpwYXJzZVR5cGU9IlJlc291cmNlIj4KICAgICAgICAgICAgICAgICAgPHN0RXZ0OmFjdGlvbj5jb252ZXJ0ZWQ8L3N0RXZ0OmFjdGlvbj4KICAgICAgICAgICAgICAgICAgPHN0RXZ0OnBhcmFtZXRlcnM+ZnJvbSBhcHBsaWNhdGlvbi92bmQuYWRvYmUucGhvdG9zaG9wIHRvIGltYWdlL3BuZzwvc3RFdnQ6cGFyYW1ldGVycz4KICAgICAgICAgICAgICAgPC9yZGY6bGk+CiAgICAgICAgICAgICAgIDxyZGY6bGkgcmRmOnBhcnNlVHlwZT0iUmVzb3VyY2UiPgogICAgICAgICAgICAgICAgICA8c3RFdnQ6YWN0aW9uPmRlcml2ZWQ8L3N0RXZ0OmFjdGlvbj4KICAgICAgICAgICAgICAgICAgPHN0RXZ0OnBhcmFtZXRlcnM+Y29udmVydGVkIGZyb20gYXBwbGljYXRpb24vdm5kLmFkb2JlLnBob3Rvc2hvcCB0byBpbWFnZS9wbmc8L3N0RXZ0OnBhcmFtZXRlcnM+CiAgICAgICAgICAgICAgIDwvcmRmOmxpPgogICAgICAgICAgICAgICA8cmRmOmxpIHJkZjpwYXJzZVR5cGU9IlJlc291cmNlIj4KICAgICAgICAgICAgICAgICAgPHN0RXZ0OmFjdGlvbj5zYXZlZDwvc3RFdnQ6YWN0aW9uPgogICAgICAgICAgICAgICAgICA8c3RFdnQ6aW5zdGFuY2VJRD54bXAuaWlkOjlmYjUwMDU0LWE3ODEtMWQ0OC05ZTllLTU2ZWQ5YzhlYjdjNjwvc3RFdnQ6aW5zdGFuY2VJRD4KICAgICAgICAgICAgICAgICAgPHN0RXZ0OndoZW4+MjAxNC0wMi0wNFQxNDozODo1NyswMTowMDwvc3RFdnQ6d2hlbj4KICAgICAgICAgICAgICAgICAgPHN0RXZ0OnNvZnR3YXJlQWdlbnQ+QWRvYmUgUGhvdG9zaG9wIENDIChXaW5kb3dzKTwvc3RFdnQ6c29mdHdhcmVBZ2VudD4KICAgICAgICAgICAgICAgICAgPHN0RXZ0OmNoYW5nZWQ+Lzwvc3RFdnQ6Y2hhbmdlZD4KICAgICAgICAgICAgICAgPC9yZGY6bGk+CiAgICAgICAgICAgIDwvcmRmOlNlcT4KICAgICAgICAgPC94bXBNTTpIaXN0b3J5PgogICAgICAgICA8eG1wTU06RGVyaXZlZEZyb20gcmRmOnBhcnNlVHlwZT0iUmVzb3VyY2UiPgogICAgICAgICAgICA8c3RSZWY6aW5zdGFuY2VJRD54bXAuaWlkOjdlZGEyMjQwLTJhNDEtM2U0NC1hYzYzLWI3M2JhMTk5YjdjYTwvc3RSZWY6aW5zdGFuY2VJRD4KICAgICAgICAgICAgPHN0UmVmOmRvY3VtZW50SUQ+eG1wLmRpZDpFQTc2MkY5Njc0ODNFMzExOTQ4QkQxM0UyQkU3OTlBMTwvc3RSZWY6ZG9jdW1lbnRJRD4KICAgICAgICAgICAgPHN0UmVmOm9yaWdpbmFsRG9jdW1lbnRJRD54bXAuZGlkOjczQjYyQUFEOTE4M0UzMTE5NDhCRDEzRTJCRTc5OUExPC9zdFJlZjpvcmlnaW5hbERvY3VtZW50SUQ+CiAgICAgICAgIDwveG1wTU06RGVyaXZlZEZyb20+CiAgICAgICAgIDxwaG90b3Nob3A6Q29sb3JNb2RlPjM8L3Bob3Rvc2hvcDpDb2xvck1vZGU+CiAgICAgICAgIDxwaG90b3Nob3A6SUNDUHJvZmlsZT5zUkdCIElFQzYxOTY2LTIuMTwvcGhvdG9zaG9wOklDQ1Byb2ZpbGU+CiAgICAgICAgIDx0aWZmOk9yaWVudGF0aW9uPjE8L3RpZmY6T3JpZW50YXRpb24+CiAgICAgICAgIDx0aWZmOlhSZXNvbHV0aW9uPjcyMDA5MC8xMDAwMDwvdGlmZjpYUmVzb2x1dGlvbj4KICAgICAgICAgPHRpZmY6WVJlc29sdXRpb24+NzIwMDkwLzEwMDAwPC90aWZmOllSZXNvbHV0aW9uPgogICAgICAgICA8dGlmZjpSZXNvbHV0aW9uVW5pdD4yPC90aWZmOlJlc29sdXRpb25Vbml0PgogICAgICAgICA8ZXhpZjpDb2xvclNwYWNlPjE8L2V4aWY6Q29sb3JTcGFjZT4KICAgICAgICAgPGV4aWY6UGl4ZWxYRGltZW5zaW9uPjI0PC9leGlmOlBpeGVsWERpbWVuc2lvbj4KICAgICAgICAgPGV4aWY6UGl4ZWxZRGltZW5zaW9uPjI0PC9leGlmOlBpeGVsWURpbWVuc2lvbj4KICAgICAgPC9yZGY6RGVzY3JpcHRpb24+CiAgIDwvcmRmOlJERj4KPC94OnhtcG1ldGE+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgCjw/eHBhY2tldCBlbmQ9InciPz4ubxs+AAAAIGNIUk0AAHolAACAgwAA+f8AAIDpAAB1MAAA6mAAADqYAAAXb5JfxUYAAAUtSURBVHjajJZ/bNT1Gcdfz/P53PV6B4W7VltLqdAaplIOiMOoyxxJCSs/Gv/yB4gzJroAosmmDklwkYWR0bQsdmkykoojTpcsWYLxD/lRZdMQkTHRtkLZRqG0tIVe7662vTu43n32x/VKZ/jh89cn38/zvN7P5/l88zwf2blzJz6fDwARQUSm1n8s31CM0/VAnbNmsUPuAsDpgEO+Bg4C7//iyv5hvmMiQiqVQpqamvB6vVNwEeG1JZtCBrYi/MrkAwDNgjhwAlbzICBLA0rDb0+/839C6XQaaWxspLCw8Dp86cbNmqVFJQddE6KzdjZ9D89g+B6fSyCOcyn1nxil+O9xKg5HqWFSHGXLjrP7W/ICqVQK2bNnDz6fDxFh65KNvxbHDhF4rJj2bXPo+IGfcW5h5xL4f99P+FCEMIAob75x9t0dAMlkElNXV4e1lteXbNqiQoMaeOFOjrdU868SD2luYyEP6dUh+sYmSHeOU6GO5Z8VLx5+NNZxIpPJ5AS2L3upROCoCvz8Lo7vnkf77cAHhpiz/zIL9vWz8L8p/NvupmM0Q7pjnAoLqz8tDrc8MnQqYVUVhVdF4LEg7b+rvDn8wDDlH0WoPpukLJImSBaMwjcJqmwWts2jPZLG/8kwYVFeVdXXZcFf4yVDc2cNKfBFmD9X+0ncCP58F48eG+Feo2CAUkvs4dl0V/uJvdXLiiV+ut++n7YLSfxPfMMG54ChzB3WIesVWB2i82bw1AR6fJR7C4VsfYiv6u/k3A9nEgP4zXke8DiYHyAOMK+QxPIgnZ9GqSHr1itQJ8DK2fTerDQ+S/bHRXQJaHSCwNIZ2Xh+7+S3VAmwNMBA/tuPZtErgKquUmdMWIFlRURvdamRNEXGwIWrlP47pTMzLiunxghGMwTLvcTWlHAp77s4QNSrYMQtss6ZMgWqCm5cHoDHO1nbk6K8zEN8+3zatv2Hn1b59EqJZdxmYUERg9P9KwpIiAOTdWUWBXuLzB/vZG3P1Un4PNp2d1MbmyD45TWCxuCsQm0x56bHGHFYEZwxok7toAA9Sfw3hCcoL/NOwi9QO5wmWO1j4JEgZxTkodmcWRGkf3pcX0r8xoAaBixKu4U5/xwndM+0tpAvS6mP+PZK2nb1UBvPEKwKMLDvPj4ESGc55lGy303sdJKQdZB2rkMdctAB/4gzN+/Q2ENNd4LyUi/xN+bTtquX2thk5nk4wI3gAF+OMNcA1nFQDfK+BY5GqbkwWabTY5QZhXWlnNx1ntrY1Rz87fuvw29m/Sn8J+PUGAFj5T19baA1IspuBZp7cx1x4SwG1cEf+lgRSROs8jGwb+Ht4QB/GSSsAhYano39LWIBxNEIbP14hPDuiyS2VtJuHXQlKKvxM/jiXDq/D/xPlwifGMkJZB2NIoKpr69nxeiZxLHicFSFVWfGqBidIP3LSjrWltD94CyufF/4kQgPuVz2Lz93+dDRa9eu5QQ8Hg8/iXee+Dy4CKMs7xqn4nwKz9IirhQqmVuB42m8ey+x7LMoD6iAON782eChhqmRuXfvXgKBAKqKqtI0/8nNKrQI4BVYXkzHgzPpC88gWuHL/caXrhLoGiN0apSKr0ZZRBZM7q2w5ZnLR1oAnHOMjY0hra2tFBQUYIyZmstvVT1Z6eDlAuEVq7merxmwueNPDXy9PvybjKP5mctHLk4/XTKZRJqbm/H7/VNw1VyEMYbW4FN3WNWnnchKoy5sHeVGBRX6VWi3ymFx7r11Ix8MTX/y5C2RSPC/AQB61erowbpqSwAAAABJRU5ErkJggg==")}div.vis-network div.vis-manipulation button.vis-button.vis-delete{background-image:url("data:image/png;base64,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/GMzLdsAAEEOaVRYdFhNTDpjb20uYWRvYmUueG1wAAAAAAA8P3hwYWNrZXQgYmVnaW49Iu+7vyIgaWQ9Ilc1TTBNcENlaGlIenJlU3pOVGN6a2M5ZCI/Pgo8eDp4bXBtZXRhIHhtbG5zOng9ImFkb2JlOm5zOm1ldGEvIiB4OnhtcHRrPSJBZG9iZSBYTVAgQ29yZSA1LjUtYzAyMSA3OS4xNTQ5MTEsIDIwMTMvMTAvMjktMTE6NDc6MTYgICAgICAgICI+CiAgIDxyZGY6UkRGIHhtbG5zOnJkZj0iaHR0cDovL3d3dy53My5vcmcvMTk5OS8wMi8yMi1yZGYtc3ludGF4LW5zIyI+CiAgICAgIDxyZGY6RGVzY3JpcHRpb24gcmRmOmFib3V0PSIiCiAgICAgICAgICAgIHhtbG5zOnhtcD0iaHR0cDovL25zLmFkb2JlLmNvbS94YXAvMS4wLyIKICAgICAgICAgICAgeG1sbnM6ZGM9Imh0dHA6Ly9wdXJsLm9yZy9kYy9lbGVtZW50cy8xLjEvIgogICAgICAgICAgICB4bWxuczp4bXBNTT0iaHR0cDovL25zLmFkb2JlLmNvbS94YXAvMS4wL21tLyIKICAgICAgICAgICAgeG1sbnM6c3RFdnQ9Imh0dHA6Ly9ucy5hZG9iZS5jb20veGFwLzEuMC9zVHlwZS9SZXNvdXJjZUV2ZW50IyIKICAgICAgICAgICAgeG1sbnM6c3RSZWY9Imh0dHA6Ly9ucy5hZG9iZS5jb20veGFwLzEuMC9zVHlwZS9SZXNvdXJjZVJlZiMiCiAgICAgICAgICAgIHhtbG5zOnBob3Rvc2hvcD0iaHR0cDovL25zLmFkb2JlLmNvbS9waG90b3Nob3AvMS4wLyIKICAgICAgICAgICAgeG1sbnM6dGlmZj0iaHR0cDovL25zLmFkb2JlLmNvbS90aWZmLzEuMC8iCiAgICAgICAgICAgIHhtbG5zOmV4aWY9Imh0dHA6Ly9ucy5hZG9iZS5jb20vZXhpZi8xLjAvIj4KICAgICAgICAgPHhtcDpDcmVhdG9yVG9vbD5BZG9iZSBQaG90b3Nob3AgQ0MgKFdpbmRvd3MpPC94bXA6Q3JlYXRvclRvb2w+CiAgICAgICAgIDx4bXA6Q3JlYXRlRGF0ZT4yMDE0LTAxLTIyVDE5OjI0OjUxKzAxOjAwPC94bXA6Q3JlYXRlRGF0ZT4KICAgICAgICAgPHhtcDpNZXRhZGF0YURhdGU+MjAxNC0wMi0wNFQxNDo0MTowNCswMTowMDwveG1wOk1ldGFkYXRhRGF0ZT4KICAgICAgICAgPHhtcDpNb2RpZnlEYXRlPjIwMTQtMDItMDRUMTQ6NDE6MDQrMDE6MDA8L3htcDpNb2RpZnlEYXRlPgogICAgICAgICA8ZGM6Zm9ybWF0PmltYWdlL3BuZzwvZGM6Zm9ybWF0PgogICAgICAgICA8eG1wTU06SW5zdGFuY2VJRD54bXAuaWlkOjc3NDkzYmUxLTEyZGItOTg0NC1iNDYyLTg2NGVmNGIzMzM3MTwveG1wTU06SW5zdGFuY2VJRD4KICAgICAgICAgPHhtcE1NOkRvY3VtZW50SUQ+eG1wLmRpZDpFQTc2MkY5Njc0ODNFMzExOTQ4QkQxM0UyQkU3OTlBMTwveG1wTU06RG9jdW1lbnRJRD4KICAgICAgICAgPHhtcE1NOk9yaWdpbmFsRG9jdW1lbnRJRD54bXAuZGlkOjczQjYyQUFEOTE4M0UzMTE5NDhCRDEzRTJCRTc5OUExPC94bXBNTTpPcmlnaW5hbERvY3VtZW50SUQ+CiAgICAgICAgIDx4bXBNTTpIaXN0b3J5PgogICAgICAgICAgICA8cmRmOlNlcT4KICAgICAgICAgICAgICAgPHJkZjpsaSByZGY6cGFyc2VUeXBlPSJSZXNvdXJjZSI+CiAgICAgICAgICAgICAgICAgIDxzdEV2dDphY3Rpb24+Y3JlYXRlZDwvc3RFdnQ6YWN0aW9uPgogICAgICAgICAgICAgICAgICA8c3RFdnQ6aW5zdGFuY2VJRD54bXAuaWlkOjczQjYyQUFEOTE4M0UzMTE5NDhCRDEzRTJCRTc5OUExPC9zdEV2dDppbnN0YW5jZUlEPgogICAgICAgICAgICAgICAgICA8c3RFdnQ6d2hlbj4yMDE0LTAxLTIyVDE5OjI0OjUxKzAxOjAwPC9zdEV2dDp3aGVuPgogICAgICAgICAgICAgICAgICA8c3RFdnQ6c29mdHdhcmVBZ2VudD5BZG9iZSBQaG90b3Nob3AgQ1M2IChXaW5kb3dzKTwvc3RFdnQ6c29mdHdhcmVBZ2VudD4KICAgICAgICAgICAgICAgPC9yZGY6bGk+CiAgICAgICAgICAgICAgIDxyZGY6bGkgcmRmOnBhcnNlVHlwZT0iUmVzb3VyY2UiPgogICAgICAgICAgICAgICAgICA8c3RFdnQ6YWN0aW9uPnNhdmVkPC9zdEV2dDphY3Rpb24+CiAgICAgICAgICAgICAgICAgIDxzdEV2dDppbnN0YW5jZUlEPnhtcC5paWQ6RUE2MEEyNEUxOTg0RTMxMUFEQUZFRkU2RUMzMzNFMDM8L3N0RXZ0Omluc3RhbmNlSUQ+CiAgICAgICAgICAgICAgICAgIDxzdEV2dDp3aGVuPjIwMTQtMDEtMjNUMTk6MTg6MDcrMDE6MDA8L3N0RXZ0OndoZW4+CiAgICAgICAgICAgICAgICAgIDxzdEV2dDpzb2Z0d2FyZUFnZW50PkFkb2JlIFBob3Rvc2hvcCBDUzYgKFdpbmRvd3MpPC9zdEV2dDpzb2Z0d2FyZUFnZW50PgogICAgICAgICAgICAgICAgICA8c3RFdnQ6Y2hhbmdlZD4vPC9zdEV2dDpjaGFuZ2VkPgogICAgICAgICAgICAgICA8L3JkZjpsaT4KICAgICAgICAgICAgICAgPHJkZjpsaSByZGY6cGFyc2VUeXBlPSJSZXNvdXJjZSI+CiAgICAgICAgICAgICAgICAgIDxzdEV2dDphY3Rpb24+c2F2ZWQ8L3N0RXZ0OmFjdGlvbj4KICAgICAgICAgICAgICAgICAgPHN0RXZ0Omluc3RhbmNlSUQ+eG1wLmlpZDowNmE3NWYwMy04MDdhLWUzNGYtYjk1Zi1jZGU2MjM0Mzg4OGY8L3N0RXZ0Omluc3RhbmNlSUQ+CiAgICAgICAgICAgICAgICAgIDxzdEV2dDp3aGVuPjIwMTQtMDItMDRUMTQ6NDE6MDQrMDE6MDA8L3N0RXZ0OndoZW4+CiAgICAgICAgICAgICAgICAgIDxzdEV2dDpzb2Z0d2FyZUFnZW50PkFkb2JlIFBob3Rvc2hvcCBDQyAoV2luZG93cyk8L3N0RXZ0OnNvZnR3YXJlQWdlbnQ+CiAgICAgICAgICAgICAgICAgIDxzdEV2dDpjaGFuZ2VkPi88L3N0RXZ0OmNoYW5nZWQ+CiAgICAgICAgICAgICAgIDwvcmRmOmxpPgogICAgICAgICAgICAgICA8cmRmOmxpIHJkZjpwYXJzZVR5cGU9IlJlc291cmNlIj4KICAgICAgICAgICAgICAgICAgPHN0RXZ0OmFjdGlvbj5jb252ZXJ0ZWQ8L3N0RXZ0OmFjdGlvbj4KICAgICAgICAgICAgICAgICAgPHN0RXZ0OnBhcmFtZXRlcnM+ZnJvbSBhcHBsaWNhdGlvbi92bmQuYWRvYmUucGhvdG9zaG9wIHRvIGltYWdlL3BuZzwvc3RFdnQ6cGFyYW1ldGVycz4KICAgICAgICAgICAgICAgPC9yZGY6bGk+CiAgICAgICAgICAgICAgIDxyZGY6bGkgcmRmOnBhcnNlVHlwZT0iUmVzb3VyY2UiPgogICAgICAgICAgICAgICAgICA8c3RFdnQ6YWN0aW9uPmRlcml2ZWQ8L3N0RXZ0OmFjdGlvbj4KICAgICAgICAgICAgICAgICAgPHN0RXZ0OnBhcmFtZXRlcnM+Y29udmVydGVkIGZyb20gYXBwbGljYXRpb24vdm5kLmFkb2JlLnBob3Rvc2hvcCB0byBpbWFnZS9wbmc8L3N0RXZ0OnBhcmFtZXRlcnM+CiAgICAgICAgICAgICAgIDwvcmRmOmxpPgogICAgICAgICAgICAgICA8cmRmOmxpIHJkZjpwYXJzZVR5cGU9IlJlc291cmNlIj4KICAgICAgICAgICAgICAgICAgPHN0RXZ0OmFjdGlvbj5zYXZlZDwvc3RFdnQ6YWN0aW9uPgogICAgICAgICAgICAgICAgICA8c3RFdnQ6aW5zdGFuY2VJRD54bXAuaWlkOjc3NDkzYmUxLTEyZGItOTg0NC1iNDYyLTg2NGVmNGIzMzM3MTwvc3RFdnQ6aW5zdGFuY2VJRD4KICAgICAgICAgICAgICAgICAgPHN0RXZ0OndoZW4+MjAxNC0wMi0wNFQxNDo0MTowNCswMTowMDwvc3RFdnQ6d2hlbj4KICAgICAgICAgICAgICAgICAgPHN0RXZ0OnNvZnR3YXJlQWdlbnQ+QWRvYmUgUGhvdG9zaG9wIENDIChXaW5kb3dzKTwvc3RFdnQ6c29mdHdhcmVBZ2VudD4KICAgICAgICAgICAgICAgICAgPHN0RXZ0OmNoYW5nZWQ+Lzwvc3RFdnQ6Y2hhbmdlZD4KICAgICAgICAgICAgICAgPC9yZGY6bGk+CiAgICAgICAgICAgIDwvcmRmOlNlcT4KICAgICAgICAgPC94bXBNTTpIaXN0b3J5PgogICAgICAgICA8eG1wTU06RGVyaXZlZEZyb20gcmRmOnBhcnNlVHlwZT0iUmVzb3VyY2UiPgogICAgICAgICAgICA8c3RSZWY6aW5zdGFuY2VJRD54bXAuaWlkOjA2YTc1ZjAzLTgwN2EtZTM0Zi1iOTVmLWNkZTYyMzQzODg4Zjwvc3RSZWY6aW5zdGFuY2VJRD4KICAgICAgICAgICAgPHN0UmVmOmRvY3VtZW50SUQ+eG1wLmRpZDpFQTc2MkY5Njc0ODNFMzExOTQ4QkQxM0UyQkU3OTlBMTwvc3RSZWY6ZG9jdW1lbnRJRD4KICAgICAgICAgICAgPHN0UmVmOm9yaWdpbmFsRG9jdW1lbnRJRD54bXAuZGlkOjczQjYyQUFEOTE4M0UzMTE5NDhCRDEzRTJCRTc5OUExPC9zdFJlZjpvcmlnaW5hbERvY3VtZW50SUQ+CiAgICAgICAgIDwveG1wTU06RGVyaXZlZEZyb20+CiAgICAgICAgIDxwaG90b3Nob3A6Q29sb3JNb2RlPjM8L3Bob3Rvc2hvcDpDb2xvck1vZGU+CiAgICAgICAgIDxwaG90b3Nob3A6SUNDUHJvZmlsZT5zUkdCIElFQzYxOTY2LTIuMTwvcGhvdG9zaG9wOklDQ1Byb2ZpbGU+CiAgICAgICAgIDx0aWZmOk9yaWVudGF0aW9uPjE8L3RpZmY6T3JpZW50YXRpb24+CiAgICAgICAgIDx0aWZmOlhSZXNvbHV0aW9uPjcyMDA5MC8xMDAwMDwvdGlmZjpYUmVzb2x1dGlvbj4KICAgICAgICAgPHRpZmY6WVJlc29sdXRpb24+NzIwMDkwLzEwMDAwPC90aWZmOllSZXNvbHV0aW9uPgogICAgICAgICA8dGlmZjpSZXNvbHV0aW9uVW5pdD4yPC90aWZmOlJlc29sdXRpb25Vbml0PgogICAgICAgICA8ZXhpZjpDb2xvclNwYWNlPjE8L2V4aWY6Q29sb3JTcGFjZT4KICAgICAgICAgPGV4aWY6UGl4ZWxYRGltZW5zaW9uPjI0PC9leGlmOlBpeGVsWERpbWVuc2lvbj4KICAgICAgICAgPGV4aWY6UGl4ZWxZRGltZW5zaW9uPjI0PC9leGlmOlBpeGVsWURpbWVuc2lvbj4KICAgICAgPC9yZGY6RGVzY3JpcHRpb24+CiAgIDwvcmRmOlJERj4KPC94OnhtcG1ldGE+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgCjw/eHBhY2tldCBlbmQ9InciPz4aYJzYAAAAIGNIUk0AAHolAACAgwAA+f8AAIDpAAB1MAAA6mAAADqYAAAXb5JfxUYAAAYGSURBVHjalJZ7UJTnFcZ/73m/72PdJY1RbhoQp6lkXRAvmIYxdCUadLVOozPNtGObap1JsKipjiShbdoRbeKEiQHpQK3xj0xa03aamTbaTGyAYV1QGeqFi+JyiZFLAlmESBkWRmS3fyzslGkmnZ5/v/M873Oe75zzvqqoqAibzQaAiKCUAkApRdHIK/NFsx2NR91nOSILADDoJyzNaM4xxbtvPHh0iC+JiYkJ1OHDh4mJiUEpFSXPv/ziPC28TIiXDCOSrAClQDSEpsCwJPIhrEBRQpiSytXlQwDhcBilFPfu3UMVFxdjt9ujFTzfcLBADCoEEAFr1ZbrrNjch2vtEImPBgHob7fTcWE+bVXJNJ/NiFQlEGLvieXHKmYqGB8fRx05cgSbzYaIsPvywV8pKFaA7fGtLTzz61YWpo/xVTHQbufsq5lcez9zWuWhk5mvFwMEg0H0+vXrMU2Tn1wp3CtCiQ5DjGd3A/m/v8IDCZP8r4iNmyRrWx/j/5qktykZpXKzAjVDVxPzGqemptDr1q1jX3NRnIJarcDKK2hgR2ULXRfncv7UYv7xpovhnhiW5Mz+kefeSKO6LJ1A1xzEuk/Ojm4mRibpuZaMZW3OCtRUND60NmiICCIUShisx7a2sLMiQn4s77uEQgIabnqdfHIlgT1/qQeg8vs5dHhdCNB1wYn3RIiC995j26stjAbsNH+YiZJCESnS1Y/XxIXu8r4YIPv/VkVs3CTnTy2ms34xro1+sp9po6sxlTu34ultmsPVvy6is86FCHgO+DDs49zpjufBpCG+seYOC9OHaTidieicb9ouVAhKtouAseI710ma7pLuqwmgYfHqAFt+6WdLoQ/LBl11Lm7VudAa8vb72PCin9TlAWIsGGhLACD+kSAZnusYBii1XQAPYWDllt6ov2lrBkDBR2+6Ofuak2//3M+G/T4wAAPW7fPhKfRTVeqk9qQbFKRmDUTxS3N7QYGYmwzCkqklBGlPDEcTNv+sg9tNCbTXuvBWujE0bHrZj9JE1B/wU1Pm5PwJN6YBS9a2kVvQEcWnrh5GTFD3lxkYkqRMgYQlwVldUvDnen73LHTUuqitdKM0eAr9AFQfd1J/yo2aJn+2sn4Wdn5qEFODJskgBIjx5T0uCrQA08pnIjS9PERDjPnfOKXAMEBECUoGEIHBj+2zkt76UQ6dXheGAev3+cg74Kf6uJPqcicbfuond7cPy4SOiy7+tD9nFvZurx00KOk3CNEC+mE+vjSPBc7IWqgqTaPT60IMcO/xsXGa3HfKjRgRdbl7/KDg0jtubje6aHj7c7J3dgLQ2zoPwwQ91SooOQdAW1VKVMHty0kA5Bb48BycJn/LjWFGbLv4thvvb53kFvjJ+XEdWkPfjQVR/CcNKYgGMc8JWt5Fa2j+MIPPuyI2pa4IoHSkt6vLIuRaQ9q32khzt4GCxtNu6k46GeiIR2lIfDQQsafPzq1LGRGL9Gk9d+vrwewvfHPQOoexQVjxdB/auk/zmaUMdsfz6bVUtIalT7bxveP1ZHh6GPDPYeSzeD69kcpIfxymFWLNrka+ljhBTWkWwz2JiJT84YHnz2iPx0P20PkmRF5i6HYiwZFJsn/YzdezbzE3cQibY5xV266z6RfXohakb+xB9CjanCD9qTbW7Grk4WV38VZm0l6dhQiEw9taHSuDqrS0FIfDwXM3X9mHMsvRAk/sauDpQy38P+GtzOTGB9mEpkD0C2dS8n8zOjqK9ng8WJZFU+JTjasGvaCNXPpvJBPoMlm0OoDNMfWVxONfWNSUPUZ7TUQ56tCZlPwSgMnJSVRpaSmxsbFE1raw82ZxAZZRQUiBYUKGp5UlOX2krBzmoUVjiIKhHge9rfPo+Wcy3ZeXIYASgL1/X5RfMXMvj46OosrLy7HZbGitUUohIuzoem0RofALaOsghgWGjky0MiJTL8b0lOvI8hN1DKXKP0jd3TNTWDgcJhgMoo4ePYrD4Yi+KmaeLlprnrtXFo9h/AAlG1AqE8yFmBrC+jO0bgH9EVpO/1F2Dc5g//OAsbEx/j0Af+USsQynL1UAAAAASUVORK5CYII=")}div.vis-network div.vis-edit-mode div.vis-label,div.vis-network div.vis-manipulation div.vis-label{line-height:25px;margin:0 0 0 23px}div.vis-network div.vis-manipulation div.vis-separator-line{background-color:#bdbdbd;display:inline-block;float:left;height:21px;margin:0 7px 0 15px;width:1px} \ No newline at end of file diff --git a/Perlite/perlite/.styles/vis.min.css b/Perlite/perlite/.styles/vis.min.css new file mode 100644 index 0000000..c324706 --- /dev/null +++ b/Perlite/perlite/.styles/vis.min.css @@ -0,0 +1 @@ +div.vis-network div.vis-close,div.vis-network div.vis-edit-mode div.vis-button,div.vis-network div.vis-manipulation div.vis-button{cursor:pointer;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;-webkit-touch-callout:none;-khtml-user-select:none}.vis .overlay{position:absolute;top:0;left:0;width:100%;height:100%;z-index:10}.vis-active{box-shadow:0 0 10px #86d5f8}.vis [class*=span]{min-height:0;width:auto}div.vis-configuration{position:relative;display:block;float:left;font-size:12px}div.vis-configuration-wrapper{display:block;width:700px}div.vis-configuration-wrapper::after{clear:both;content:"";display:block}div.vis-configuration.vis-config-option-container{display:block;width:495px;background-color:#fff;border:2px solid #f7f8fa;border-radius:4px;margin-top:20px;left:10px;padding-left:5px}div.vis-configuration.vis-config-button{display:block;width:495px;height:25px;vertical-align:middle;line-height:25px;background-color:#f7f8fa;border:2px solid #ceced0;border-radius:4px;margin-top:20px;left:10px;padding-left:5px;cursor:pointer;margin-bottom:30px}div.vis-configuration.vis-config-button.hover{background-color:#4588e6;border:2px solid #214373;color:#fff}div.vis-configuration.vis-config-item{display:block;float:left;width:495px;height:25px;vertical-align:middle;line-height:25px}div.vis-configuration.vis-config-item.vis-config-s2{left:10px;background-color:#f7f8fa;padding-left:5px;border-radius:3px}div.vis-configuration.vis-config-item.vis-config-s3{left:20px;background-color:#e4e9f0;padding-left:5px;border-radius:3px}div.vis-configuration.vis-config-item.vis-config-s4{left:30px;background-color:#cfd8e6;padding-left:5px;border-radius:3px}div.vis-configuration.vis-config-header{font-size:18px;font-weight:700}div.vis-configuration.vis-config-label{width:120px;height:25px;line-height:25px}div.vis-configuration.vis-config-label.vis-config-s3{width:110px}div.vis-configuration.vis-config-label.vis-config-s4{width:100px}div.vis-configuration.vis-config-colorBlock{top:1px;width:30px;height:19px;border:1px solid #444;border-radius:2px;padding:0;margin:0;cursor:pointer}input.vis-configuration.vis-config-checkbox{left:-5px}input.vis-configuration.vis-config-rangeinput{position:relative;top:-5px;width:60px;padding:1px;margin:0;pointer-events:none}input.vis-configuration.vis-config-range{-webkit-appearance:none;border:0 solid #fff;background-color:rgba(0,0,0,0);width:300px;height:20px}input.vis-configuration.vis-config-range::-webkit-slider-runnable-track{width:300px;height:5px;background:#dedede;background:-moz-linear-gradient(top,#dedede 0,#c8c8c8 99%);background:-webkit-gradient(linear,left top,left bottom,color-stop(0,#dedede),color-stop(99%,#c8c8c8));background:-webkit-linear-gradient(top,#dedede 0,#c8c8c8 99%);background:-o-linear-gradient(top,#dedede 0,#c8c8c8 99%);background:-ms-linear-gradient(top,#dedede 0,#c8c8c8 99%);background:linear-gradient(to bottom,#dedede 0,#c8c8c8 99%);filter:progid:DXImageTransform.Microsoft.gradient( startColorstr='#dedede', endColorstr='#c8c8c8', GradientType=0 );border:1px solid #999;box-shadow:#aaa 0 0 3px 0;border-radius:3px}input.vis-configuration.vis-config-range::-webkit-slider-thumb{-webkit-appearance:none;border:1px solid #14334b;height:17px;width:17px;border-radius:50%;background:#3876c2;background:-moz-linear-gradient(top,#3876c2 0,#385380 100%);background:-webkit-gradient(linear,left top,left bottom,color-stop(0,#3876c2),color-stop(100%,#385380));background:-webkit-linear-gradient(top,#3876c2 0,#385380 100%);background:-o-linear-gradient(top,#3876c2 0,#385380 100%);background:-ms-linear-gradient(top,#3876c2 0,#385380 100%);background:linear-gradient(to bottom,#3876c2 0,#385380 100%);filter:progid:DXImageTransform.Microsoft.gradient( startColorstr='#3876c2', endColorstr='#385380', GradientType=0 );box-shadow:#111927 0 0 1px 0;margin-top:-7px}input.vis-configuration.vis-config-range:focus{outline:0}input.vis-configuration.vis-config-range:focus::-webkit-slider-runnable-track{background:#9d9d9d;background:-moz-linear-gradient(top,#9d9d9d 0,#c8c8c8 99%);background:-webkit-gradient(linear,left top,left bottom,color-stop(0,#9d9d9d),color-stop(99%,#c8c8c8));background:-webkit-linear-gradient(top,#9d9d9d 0,#c8c8c8 99%);background:-o-linear-gradient(top,#9d9d9d 0,#c8c8c8 99%);background:-ms-linear-gradient(top,#9d9d9d 0,#c8c8c8 99%);background:linear-gradient(to bottom,#9d9d9d 0,#c8c8c8 99%);filter:progid:DXImageTransform.Microsoft.gradient( startColorstr='#9d9d9d', endColorstr='#c8c8c8', GradientType=0 )}input.vis-configuration.vis-config-range::-moz-range-track{width:300px;height:10px;background:#dedede;background:-moz-linear-gradient(top,#dedede 0,#c8c8c8 99%);background:-webkit-gradient(linear,left top,left bottom,color-stop(0,#dedede),color-stop(99%,#c8c8c8));background:-webkit-linear-gradient(top,#dedede 0,#c8c8c8 99%);background:-o-linear-gradient(top,#dedede 0,#c8c8c8 99%);background:-ms-linear-gradient(top,#dedede 0,#c8c8c8 99%);background:linear-gradient(to bottom,#dedede 0,#c8c8c8 99%);filter:progid:DXImageTransform.Microsoft.gradient( startColorstr='#dedede', endColorstr='#c8c8c8', GradientType=0 );border:1px solid #999;box-shadow:#aaa 0 0 3px 0;border-radius:3px}input.vis-configuration.vis-config-range::-moz-range-thumb{border:none;height:16px;width:16px;border-radius:50%;background:#385380}input.vis-configuration.vis-config-range:-moz-focusring{outline:#fff solid 1px;outline-offset:-1px}input.vis-configuration.vis-config-range::-ms-track{width:300px;height:5px;background:0 0;border-color:transparent;border-width:6px 0;color:transparent}input.vis-configuration.vis-config-range::-ms-fill-lower{background:#777;border-radius:10px}input.vis-configuration.vis-config-range::-ms-fill-upper{background:#ddd;border-radius:10px}input.vis-configuration.vis-config-range::-ms-thumb{border:none;height:16px;width:16px;border-radius:50%;background:#385380}input.vis-configuration.vis-config-range:focus::-ms-fill-lower{background:#888}input.vis-configuration.vis-config-range:focus::-ms-fill-upper{background:#ccc}.vis-configuration-popup{position:absolute;background:rgba(57,76,89,.85);border:2px solid #f2faff;line-height:30px;height:30px;width:150px;text-align:center;color:#fff;font-size:14px;border-radius:4px;-webkit-transition:opacity .3s ease-in-out;-moz-transition:opacity .3s ease-in-out;transition:opacity .3s ease-in-out}.vis-configuration-popup:after,.vis-configuration-popup:before{left:100%;top:50%;border:solid transparent;content:" ";height:0;width:0;position:absolute;pointer-events:none}.vis-configuration-popup:after{border-color:rgba(136,183,213,0);border-left-color:rgba(57,76,89,.85);border-width:8px;margin-top:-8px}.vis-configuration-popup:before{border-color:rgba(194,225,245,0);border-left-color:#f2faff;border-width:12px;margin-top:-12px}div.vis-color-picker{position:absolute;top:0;left:30px;margin-top:-140px;margin-left:30px;width:310px;height:444px;z-index:1;padding:10px;border-radius:15px;background-color:#fff;display:none;box-shadow:rgba(0,0,0,.5) 0 0 10px 0}div.vis-color-picker div.vis-arrow{position:absolute;top:147px;left:5px}div.vis-color-picker div.vis-arrow::after,div.vis-color-picker div.vis-arrow::before{right:100%;top:50%;border:solid transparent;content:" ";height:0;width:0;position:absolute;pointer-events:none}div.vis-color-picker div.vis-arrow:after{border-color:rgba(255,255,255,0);border-right-color:#fff;border-width:30px;margin-top:-30px}div.vis-color-picker div.vis-color{position:absolute;width:289px;height:289px;cursor:pointer}div.vis-color-picker div.vis-brightness{position:absolute;top:313px}div.vis-color-picker div.vis-opacity{position:absolute;top:350px}div.vis-color-picker div.vis-selector{position:absolute;top:137px;left:137px;width:15px;height:15px;border-radius:15px;border:1px solid #fff;background:#4c4c4c;background:-moz-linear-gradient(top,#4c4c4c 0,#595959 12%,#666 25%,#474747 39%,#2c2c2c 50%,#000 51%,#111 60%,#2b2b2b 76%,#1c1c1c 91%,#131313 100%);background:-webkit-gradient(linear,left top,left bottom,color-stop(0,#4c4c4c),color-stop(12%,#595959),color-stop(25%,#666),color-stop(39%,#474747),color-stop(50%,#2c2c2c),color-stop(51%,#000),color-stop(60%,#111),color-stop(76%,#2b2b2b),color-stop(91%,#1c1c1c),color-stop(100%,#131313));background:-webkit-linear-gradient(top,#4c4c4c 0,#595959 12%,#666 25%,#474747 39%,#2c2c2c 50%,#000 51%,#111 60%,#2b2b2b 76%,#1c1c1c 91%,#131313 100%);background:-o-linear-gradient(top,#4c4c4c 0,#595959 12%,#666 25%,#474747 39%,#2c2c2c 50%,#000 51%,#111 60%,#2b2b2b 76%,#1c1c1c 91%,#131313 100%);background:-ms-linear-gradient(top,#4c4c4c 0,#595959 12%,#666 25%,#474747 39%,#2c2c2c 50%,#000 51%,#111 60%,#2b2b2b 76%,#1c1c1c 91%,#131313 100%);background:linear-gradient(to bottom,#4c4c4c 0,#595959 12%,#666 25%,#474747 39%,#2c2c2c 50%,#000 51%,#111 60%,#2b2b2b 76%,#1c1c1c 91%,#131313 100%);filter:progid:DXImageTransform.Microsoft.gradient( startColorstr='#4c4c4c', endColorstr='#131313', GradientType=0 )}div.vis-color-picker div.vis-initial-color,div.vis-color-picker div.vis-new-color{width:140px;height:20px;top:380px;font-size:10px;color:rgba(0,0,0,.4);line-height:20px;vertical-align:middle;position:absolute}div.vis-color-picker div.vis-new-color{border:1px solid rgba(0,0,0,.1);border-radius:5px;left:159px;text-align:right;padding-right:2px}div.vis-color-picker div.vis-initial-color{border:1px solid rgba(0,0,0,.1);border-radius:5px;left:10px;text-align:left;padding-left:2px}div.vis-color-picker div.vis-label{position:absolute;width:300px;left:10px}div.vis-color-picker div.vis-label.vis-brightness{top:300px}div.vis-color-picker div.vis-label.vis-opacity{top:338px}div.vis-color-picker div.vis-button{position:absolute;width:68px;height:25px;border-radius:10px;vertical-align:middle;text-align:center;line-height:25px;top:410px;border:2px solid #d9d9d9;background-color:#f7f7f7;cursor:pointer}div.vis-color-picker div.vis-button.vis-cancel{left:5px}div.vis-color-picker div.vis-button.vis-load{left:82px}div.vis-color-picker div.vis-button.vis-apply{left:159px}div.vis-color-picker div.vis-button.vis-save{left:236px}div.vis-color-picker input.vis-range{width:290px;height:20px}div.vis-network div.vis-manipulation{border-width:0;border-bottom:1px;border-style:solid;border-color:#d6d9d8;background:#fff;background:-moz-linear-gradient(top,#fff 0,#fcfcfc 48%,#fafafa 50%,#fcfcfc 100%);background:-webkit-gradient(linear,left top,left bottom,color-stop(0,#fff),color-stop(48%,#fcfcfc),color-stop(50%,#fafafa),color-stop(100%,#fcfcfc));background:-webkit-linear-gradient(top,#fff 0,#fcfcfc 48%,#fafafa 50%,#fcfcfc 100%);background:-o-linear-gradient(top,#fff 0,#fcfcfc 48%,#fafafa 50%,#fcfcfc 100%);background:-ms-linear-gradient(top,#fff 0,#fcfcfc 48%,#fafafa 50%,#fcfcfc 100%);background:linear-gradient(to bottom,#fff 0,#fcfcfc 48%,#fafafa 50%,#fcfcfc 100%);filter:progid:DXImageTransform.Microsoft.gradient( startColorstr='#ffffff', endColorstr='#fcfcfc', GradientType=0 );padding-top:4px;position:absolute;left:0;top:0;width:100%;height:28px}div.vis-network div.vis-edit-mode{position:absolute;left:0;top:5px;height:30px}div.vis-network div.vis-close{position:absolute;right:0;top:0;width:30px;height:30px;background-position:20px 3px;background-repeat:no-repeat;background-image:url(img/network/cross.png);user-select:none}div.vis-network div.vis-close:hover{opacity:.6}div.vis-network div.vis-edit-mode div.vis-button,div.vis-network div.vis-manipulation div.vis-button{float:left;font-family:verdana;font-size:12px;-moz-border-radius:15px;border-radius:15px;display:inline-block;background-position:0 0;background-repeat:no-repeat;height:24px;margin-left:10px;padding:0 8px;user-select:none}div.vis-network div.vis-manipulation div.vis-button:hover{box-shadow:1px 1px 8px rgba(0,0,0,.2)}div.vis-network div.vis-manipulation div.vis-button:active{box-shadow:1px 1px 8px rgba(0,0,0,.5)}div.vis-network div.vis-manipulation div.vis-button.vis-back{background-image:url(img/network/backIcon.png)}div.vis-network div.vis-manipulation div.vis-button.vis-none:hover{box-shadow:1px 1px 8px transparent;cursor:default}div.vis-network div.vis-manipulation div.vis-button.vis-none:active{box-shadow:1px 1px 8px transparent}div.vis-network div.vis-manipulation div.vis-button.vis-none{padding:0}div.vis-network div.vis-manipulation div.notification{margin:2px;font-weight:700}div.vis-network div.vis-manipulation div.vis-button.vis-add{background-image:url(img/network/addNodeIcon.png)}div.vis-network div.vis-edit-mode div.vis-button.vis-edit,div.vis-network div.vis-manipulation div.vis-button.vis-edit{background-image:url(img/network/editIcon.png)}div.vis-network div.vis-edit-mode div.vis-button.vis-edit.vis-edit-mode{background-color:#fcfcfc;border:1px solid #ccc}div.vis-network div.vis-manipulation div.vis-button.vis-connect{background-image:url(img/network/connectIcon.png)}div.vis-network div.vis-manipulation div.vis-button.vis-delete{background-image:url(img/network/deleteIcon.png)}div.vis-network div.vis-edit-mode div.vis-label,div.vis-network div.vis-manipulation div.vis-label{margin:0 0 0 23px;line-height:25px}div.vis-network div.vis-manipulation div.vis-separator-line{float:left;display:inline-block;width:1px;height:21px;background-color:#bdbdbd;margin:0 7px 0 15px}div.vis-network div.vis-navigation div.vis-button{width:34px;height:34px;-moz-border-radius:17px;border-radius:17px;position:absolute;display:inline-block;background-position:2px 2px;background-repeat:no-repeat;cursor:pointer;-webkit-touch-callout:none;-webkit-user-select:none;-khtml-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none}div.vis-network div.vis-navigation div.vis-button:hover{box-shadow:0 0 3px 3px rgba(56,207,21,.3)}div.vis-network div.vis-navigation div.vis-button:active{box-shadow:0 0 1px 3px rgba(56,207,21,.95)}div.vis-network div.vis-navigation div.vis-button.vis-up{background-image:url(img/network/upArrow.png);bottom:50px;left:55px}div.vis-network div.vis-navigation div.vis-button.vis-down{background-image:url(img/network/downArrow.png);bottom:10px;left:55px}div.vis-network div.vis-navigation div.vis-button.vis-left{background-image:url(img/network/leftArrow.png);bottom:10px;left:15px}div.vis-network div.vis-navigation div.vis-button.vis-right{background-image:url(img/network/rightArrow.png);bottom:10px;left:95px}div.vis-network div.vis-navigation div.vis-button.vis-zoomIn{background-image:url(img/network/plus.png);bottom:10px;right:15px}div.vis-network div.vis-navigation div.vis-button.vis-zoomOut{background-image:url(img/network/minus.png);bottom:10px;right:55px}div.vis-network div.vis-navigation div.vis-button.vis-zoomExtends{background-image:url(img/network/zoomExtends.png);bottom:50px;right:15px}div.vis-network-tooltip{position:absolute;visibility:hidden;padding:5px;white-space:nowrap;font-family:verdana;font-size:14px;color:#000;background-color:#f5f4ed;-moz-border-radius:3px;-webkit-border-radius:3px;border-radius:3px;border:1px solid #808074;box-shadow:3px 3px 10px rgba(0,0,0,.2);pointer-events:none}.vis-current-time{background-color:#FF7F6E;width:2px;z-index:1}.vis-custom-time{background-color:#6E94FF;width:2px;cursor:move;z-index:1}.vis-panel.vis-background.vis-horizontal .vis-grid.vis-horizontal{position:absolute;width:100%;height:0;border-bottom:1px solid}.vis-panel.vis-background.vis-horizontal .vis-grid.vis-minor{border-color:#e5e5e5}.vis-panel.vis-background.vis-horizontal .vis-grid.vis-major{border-color:#bfbfbf}.vis-data-axis .vis-y-axis.vis-major{width:100%;position:absolute;color:#4d4d4d;white-space:nowrap}.vis-data-axis .vis-y-axis.vis-major.vis-measure{padding:0;margin:0;border:0;visibility:hidden;width:auto}.vis-data-axis .vis-y-axis.vis-minor{position:absolute;width:100%;color:#bebebe;white-space:nowrap}.vis-data-axis .vis-y-axis.vis-minor.vis-measure{padding:0;margin:0;border:0;visibility:hidden;width:auto}.vis-data-axis .vis-y-axis.vis-title{position:absolute;color:#4d4d4d;white-space:nowrap;bottom:20px;text-align:center}.vis-data-axis .vis-y-axis.vis-title.vis-measure{padding:0;margin:0;visibility:hidden;width:auto}.vis-data-axis .vis-y-axis.vis-title.vis-left{bottom:0;-webkit-transform-origin:left top;-moz-transform-origin:left top;-ms-transform-origin:left top;-o-transform-origin:left top;transform-origin:left bottom;-webkit-transform:rotate(-90deg);-moz-transform:rotate(-90deg);-ms-transform:rotate(-90deg);-o-transform:rotate(-90deg);transform:rotate(-90deg)}.vis-data-axis .vis-y-axis.vis-title.vis-right{bottom:0;-webkit-transform-origin:right bottom;-moz-transform-origin:right bottom;-ms-transform-origin:right bottom;-o-transform-origin:right bottom;transform-origin:right bottom;-webkit-transform:rotate(90deg);-moz-transform:rotate(90deg);-ms-transform:rotate(90deg);-o-transform:rotate(90deg);transform:rotate(90deg)}.vis-legend{background-color:rgba(247,252,255,.65);padding:5px;border:1px solid #b3b3b3;box-shadow:2px 2px 10px rgba(154,154,154,.55)}.vis-legend-text{white-space:nowrap;display:inline-block}.vis-item{position:absolute;color:#1A1A1A;border-color:#97B0F8;border-width:1px;background-color:#D5DDF6;display:inline-block}.vis-item.vis-point.vis-selected,.vis-item.vis-selected{background-color:#FFF785}.vis-item.vis-selected{border-color:#FFC200;z-index:2}.vis-editable.vis-selected{cursor:move}.vis-item.vis-box{text-align:center;border-style:solid;border-radius:2px}.vis-item.vis-point{background:0 0}.vis-item.vis-dot{position:absolute;padding:0;border-width:4px;border-style:solid;border-radius:4px}.vis-item.vis-range{border-style:solid;border-radius:2px;box-sizing:border-box}.vis-item.vis-background{border:none;background-color:rgba(213,221,246,.4);box-sizing:border-box;padding:0;margin:0}.vis-item .vis-item-overflow{position:relative;width:100%;height:100%;padding:0;margin:0;overflow:hidden}.vis-item.vis-range .vis-item-content{position:relative;display:inline-block}.vis-item.vis-background .vis-item-content{position:absolute;display:inline-block}.vis-item.vis-line{padding:0;position:absolute;width:0;border-left-width:1px;border-left-style:solid}.vis-item .vis-item-content{white-space:nowrap;box-sizing:border-box;padding:5px}.vis-item .vis-onUpdateTime-tooltip{position:absolute;background:#4f81bd;color:#fff;width:200px;text-align:center;white-space:nowrap;padding:5px;border-radius:1px}.vis-item .vis-delete,.vis-item .vis-delete-rtl{position:absolute;top:0;width:24px;height:24px;box-sizing:border-box;padding:0 5px;cursor:pointer;-webkit-transition:background .2s linear;-moz-transition:background .2s linear;-ms-transition:background .2s linear;-o-transition:background .2s linear;transition:background .2s linear}.vis-item .vis-delete{right:-24px}.vis-item .vis-delete-rtl{left:-24px}.vis-item .vis-delete-rtl:after,.vis-item .vis-delete:after{content:"\00D7";color:red;font-family:arial,sans-serif;font-size:22px;font-weight:700;-webkit-transition:color .2s linear;-moz-transition:color .2s linear;-ms-transition:color .2s linear;-o-transition:color .2s linear;transition:color .2s linear}.vis-item .vis-delete-rtl:hover,.vis-item .vis-delete:hover{background:red}.vis-item .vis-delete-rtl:hover:after,.vis-item .vis-delete:hover:after{color:#fff}.vis-item .vis-drag-center{position:absolute;width:100%;height:100%;top:0;left:0;cursor:move}.vis-item.vis-range .vis-drag-left,.vis-item.vis-range .vis-drag-right{position:absolute;width:24px;max-width:20%;min-width:2px;height:100%;top:0}.vis-item.vis-range .vis-drag-left{left:-4px;cursor:w-resize}.vis-item.vis-range .vis-drag-right{right:-4px;cursor:e-resize}.vis-range.vis-item.vis-readonly .vis-drag-left,.vis-range.vis-item.vis-readonly .vis-drag-right{cursor:auto}.vis-itemset{position:relative;padding:0;margin:0;box-sizing:border-box}.vis-itemset .vis-background,.vis-itemset .vis-foreground{position:absolute;width:100%;height:100%;overflow:visible}.vis-axis{position:absolute;width:100%;height:0;left:0;z-index:1}.vis-foreground .vis-group{position:relative;box-sizing:border-box;border-bottom:1px solid #bfbfbf}.vis-foreground .vis-group:last-child{border-bottom:none}.vis-overlay{position:absolute;top:0;left:0;width:100%;height:100%;z-index:10}.vis-labelset,.vis-labelset .vis-label{position:relative;box-sizing:border-box}.vis-labelset{overflow:hidden}.vis-labelset .vis-label{left:0;top:0;width:100%;color:#4d4d4d;border-bottom:1px solid #bfbfbf}.vis-labelset .vis-label.draggable{cursor:pointer}.vis-labelset .vis-label:last-child{border-bottom:none}.vis-labelset .vis-label .vis-inner{display:inline-block;padding:5px}.vis-labelset .vis-label .vis-inner.vis-hidden{padding:0}.vis-panel{position:absolute;padding:0;margin:0;box-sizing:border-box}.vis-panel.vis-bottom,.vis-panel.vis-center,.vis-panel.vis-left,.vis-panel.vis-right,.vis-panel.vis-top{border:1px #bfbfbf}.vis-panel.vis-center,.vis-panel.vis-left,.vis-panel.vis-right{border-top-style:solid;border-bottom-style:solid;overflow:hidden}.vis-left.vis-panel.vis-vertical-scroll,.vis-right.vis-panel.vis-vertical-scroll{height:100%;overflow-x:hidden;overflow-y:scroll}.vis-background,.vis-time-axis,.vis-timeline{overflow:hidden}.vis-left.vis-panel.vis-vertical-scroll{direction:rtl}.vis-left.vis-panel.vis-vertical-scroll .vis-content,.vis-right.vis-panel.vis-vertical-scroll{direction:ltr}.vis-right.vis-panel.vis-vertical-scroll .vis-content{direction:rtl}.vis-panel.vis-bottom,.vis-panel.vis-center,.vis-panel.vis-top{border-left-style:solid;border-right-style:solid}.vis-panel>.vis-content{position:relative}.vis-panel .vis-shadow{position:absolute;width:100%;height:1px;box-shadow:0 0 10px rgba(0,0,0,.8)}.vis-panel .vis-shadow.vis-top{top:-1px;left:0}.vis-panel .vis-shadow.vis-bottom{bottom:-1px;left:0}.vis-graph-group0{fill:#4f81bd;fill-opacity:0;stroke-width:2px;stroke:#4f81bd}.vis-graph-group1{fill:#f79646;fill-opacity:0;stroke-width:2px;stroke:#f79646}.vis-graph-group2{fill:#8c51cf;fill-opacity:0;stroke-width:2px;stroke:#8c51cf}.vis-graph-group3{fill:#75c841;fill-opacity:0;stroke-width:2px;stroke:#75c841}.vis-graph-group4{fill:#ff0100;fill-opacity:0;stroke-width:2px;stroke:#ff0100}.vis-graph-group5{fill:#37d8e6;fill-opacity:0;stroke-width:2px;stroke:#37d8e6}.vis-graph-group6{fill:#042662;fill-opacity:0;stroke-width:2px;stroke:#042662}.vis-graph-group7{fill:#00ff26;fill-opacity:0;stroke-width:2px;stroke:#00ff26}.vis-graph-group8{fill:#f0f;fill-opacity:0;stroke-width:2px;stroke:#f0f}.vis-graph-group9{fill:#8f3938;fill-opacity:0;stroke-width:2px;stroke:#8f3938}.vis-timeline .vis-fill{fill-opacity:.1;stroke:none}.vis-timeline .vis-bar{fill-opacity:.5;stroke-width:1px}.vis-timeline .vis-point{stroke-width:2px;fill-opacity:1}.vis-timeline .vis-legend-background{stroke-width:1px;fill-opacity:.9;fill:#fff;stroke:#c2c2c2}.vis-timeline .vis-outline{stroke-width:1px;fill-opacity:1;fill:#fff;stroke:#e5e5e5}.vis-timeline .vis-icon-fill{fill-opacity:.3;stroke:none}.vis-time-axis{position:relative}.vis-time-axis.vis-foreground{top:0;left:0;width:100%}.vis-time-axis.vis-background{position:absolute;top:0;left:0;width:100%;height:100%}.vis-time-axis .vis-text{position:absolute;color:#4d4d4d;padding:3px;overflow:hidden;box-sizing:border-box;white-space:nowrap}.vis-time-axis .vis-text.vis-measure{position:absolute;padding-left:0;padding-right:0;margin-left:0;margin-right:0;visibility:hidden}.vis-time-axis .vis-grid.vis-vertical{position:absolute;border-left:1px solid}.vis-time-axis .vis-grid.vis-vertical-rtl{position:absolute;border-right:1px solid}.vis-time-axis .vis-grid.vis-minor{border-color:#e5e5e5}.vis-time-axis .vis-grid.vis-major{border-color:#bfbfbf}.vis-timeline{position:relative;border:1px solid #bfbfbf;padding:0;margin:0;box-sizing:border-box} \ No newline at end of file diff --git a/Perlite/perlite/.styles/x-color.svg b/Perlite/perlite/.styles/x-color.svg new file mode 100644 index 0000000..dbdaf4b --- /dev/null +++ b/Perlite/perlite/.styles/x-color.svg @@ -0,0 +1 @@ +X \ No newline at end of file diff --git a/Perlite/perlite/Demo/.about.md b/Perlite/perlite/Demo/.about.md new file mode 100644 index 0000000..c89cbe0 --- /dev/null +++ b/Perlite/perlite/Demo/.about.md @@ -0,0 +1,20 @@ +![GitHub release (latest by date)](https://img.shields.io/github/v/release/secure-77/perlite) ![GitHub](https://img.shields.io/github/license/secure-77/perlite) ![GitHub last commit](https://img.shields.io/github/last-commit/secure-77/Perlite) + + + +A web-based markdown viewer optimized for [Obsidian](https://obsidian.md/) Notes + +Just put your whole Obsidian vault or markdown folder/file structure in your web directory. The page builds itself. + +It's an open source alternative to Obsidian publish. + + +#### Download & Infos + +[Perlite on Github](https://github.com/secure-77/Perlite) + +[Demo](https://perlite.secure77.de) + +[Blog Post by Secure77](https://secure77.de/perlite) + +[Perlite Discord Server](https://discord.gg/pkJ347ssWT) \ No newline at end of file diff --git a/Perlite/perlite/Demo/.obsidian/appearance.json b/Perlite/perlite/Demo/.obsidian/appearance.json new file mode 100644 index 0000000..3e82f87 --- /dev/null +++ b/Perlite/perlite/Demo/.obsidian/appearance.json @@ -0,0 +1,7 @@ +{ + "theme": "obsidian", + "translucency": false, + "baseFontSize": 24, + "accentColor": "", + "cssTheme": "Clair de Lune" +} \ No newline at end of file diff --git a/Perlite/perlite/Demo/.obsidian/themes/Atom/manifest.json b/Perlite/perlite/Demo/.obsidian/themes/Atom/manifest.json new file mode 100644 index 0000000..d0d338f --- /dev/null +++ b/Perlite/perlite/Demo/.obsidian/themes/Atom/manifest.json @@ -0,0 +1,6 @@ +{ + "name": "Atom", + "version": "0.0.0", + "minAppVersion": "0.16.0", + "author": "kognise" +} \ No newline at end of file diff --git a/Perlite/perlite/Demo/.obsidian/themes/Atom/theme.css b/Perlite/perlite/Demo/.obsidian/themes/Atom/theme.css new file mode 100644 index 0000000..707483e --- /dev/null +++ b/Perlite/perlite/Demo/.obsidian/themes/Atom/theme.css @@ -0,0 +1,339 @@ +/* Base colors - TODO: are grey 1 and grey 2 used? */ +.theme-dark { + --accent-h: 219; + --accent-s: 56%; + --accent-l: 55%; + + --background-primary: #272b34; + --background-primary-alt: #20242b; + --background-secondary: #20242b; + --background-secondary-alt: #1a1e24; + --background-accent: #000; + --background-modifier-border: #424958; + --background-modifier-form-field: rgba(0, 0, 0, 0.3); + --background-modifier-form-field-highlighted: rgba(0, 0, 0, 0.22); + --background-modifier-box-shadow: rgba(0, 0, 0, 0.3); + --background-modifier-success: #539126; + --background-modifier-error: #3d0000; + --background-modifier-error-rgb: 61, 0, 0; + --background-modifier-error-hover: #470000; + --background-modifier-cover: rgba(0, 0, 0, 0.6); + --text-accent: #61afef; + --text-accent-hover: #70bdfc; + --text-normal: #dcddde; + --text-muted: #888; + --text-faint: rgb(81, 86, 99); + --text-error: #e16d76; + --text-error-hover: #c9626a; + --text-highlight-bg: rgba(255, 255, 0, 0.4); + --text-selection: rgba(0, 122, 255, 0.2); + --text-on-accent: #dcddde; + --interactive-normal: #20242b; + --interactive-hover: #353b47; + --interactive-accent-hover: hsl(var(--accent-h), calc(var(--accent-s) + 5%), calc(var(--accent-l) - 10%)); + --scrollbar-active-thumb-bg: rgba(255, 255, 255, 0.2); + --scrollbar-bg: rgba(255, 255, 255, 0.05); + --scrollbar-thumb-bg: rgba(255, 255, 255, 0.1); + --panel-border-color: #18191e; + --gray-1: #5C6370; + --gray-2: #abb2bf; + --red: #e06c75; + --orange: #d19a66; + --green: #98c379; + --aqua: #56b6c2; + --purple: #c678dd; + --blue: #61afef; + --yellow: #e5c07b; + + --background-modifier-hover: hsla(var(--accent-h), calc(var(--accent-s) - 35%), var(--accent-l), 0.06); + --divider-color-hover: #404754; +} + +.theme-light { + --accent-h: 230; + --accent-s: 83%; + --accent-l: 64%; + + --background-primary: #fafafa; + --background-primary-alt: #eaeaeb; + --background-secondary: #eaeaeb; + --background-secondary-alt: #dbdbdc; + --background-accent: #fff; + --background-modifier-border: #dbdbdc; + --background-modifier-form-field: #fff; + --background-modifier-form-field-highlighted: #fff; + --background-modifier-box-shadow: rgba(0, 0, 0, 0.1); + --background-modifier-success: #A4E7C3; + --background-modifier-error: #e68787; + --background-modifier-error-rgb: 230, 135, 135; + --background-modifier-error-hover: #FF9494; + --background-modifier-cover: rgba(0, 0, 0, 0.8); + --text-accent: #1592ff; + --text-accent-hover: #097add; + --text-normal: #383a42; + --text-muted: #8e8e90; + --text-faint: #999999; + --text-error: #e75545; + --text-error-hover: #f86959; + --text-highlight-bg: rgba(255, 255, 0, 0.4); + --text-selection: rgba(0, 122, 255, 0.15); + --text-on-accent: #f2f2f2; + --interactive-normal: #eaeaeb; + --interactive-hover: #dbdbdc; + --interactive-accent-rgb: 21, 146, 255; + --interactive-accent-hover: hsl(var(--accent-h), calc(var(--accent-s) - 10%), calc(var(--accent-l) - 4%)); + --scrollbar-active-thumb-bg: rgba(0, 0, 0, 0.2); + --scrollbar-bg: rgba(0, 0, 0, 0.05); + --scrollbar-thumb-bg: rgba(0, 0, 0, 0.1); + --panel-border-color: #dbdbdc; + --gray-1: #383a42; + --gray-2: #383a42; + --red: #e75545; + --green: #4ea24c; + --blue: #3d74f6; + --purple: #a625a4; + --aqua: #0084bc; + --yellow: #e35649; + --orange: #986800; +} + +.theme-dark, .theme-light { + --ribbon-background: var(--background-primary); + --drag-ghost-background: var(--background-secondary-alt); + --background-modifier-message: var(--background-secondary-alt); + + --tab-outline-color: transparent; + --divider-color: transparent; + + --prompt-border-color: var(--panel-border-color); + --modal-border-color: var(--panel-border-color); + + --background-modifier-border-hover: var(--interactive-hover); + --background-modifier-border-focus: var(--interactive-hover); + + --checkbox-color: var(--text-accent); + --checkbox-color-hover: var(--text-accent-hover); + + --nav-item-background-active: var(--interactive-accent); + --nav-item-color-active: #ffffff; + + --tag-color: var(--yellow); + --tag-background: var(--background-primary-alt); + --tag-color-hover: var(--yellow); + --tag-background-hover: var(--background-primary-alt); + --tag-padding-x: 4px; + --tag-padding-y: 2px; + --tag-radius: 4px; + + --inline-title-weight: var(--bold-weight); + --link-decoration: none; + --link-external-decoration: none; + --embed-padding: 0 0 0 var(--size-4-4); +} + +/* Search */ +.search-result .search-result-file-title { + cursor: pointer; +} + +.search-result .collapse-icon { + cursor: var(--cursor); +} + +.search-result:not(.is-collapsed) .search-result-file-title { + color: var(--blue); +} + +/* File tab separators */ +.workspace .mod-root .workspace-tab-header-inner::after { + right: unset; + left: -0.5px; +} + +.workspace .mod-root .workspace-tab-header:last-child .workspace-tab-header-inner::before { + position: absolute; + right: -0.5px; + width: 1px; + background-color: var(--tab-divider-color); + content: ''; + height: 20px; +} + +.workspace .mod-root .workspace-tab-header.is-active .workspace-tab-header-inner::after, +.workspace .mod-root .workspace-tab-header.is-active .workspace-tab-header-inner::before, +.workspace .mod-root .workspace-tab-header:first-child .workspace-tab-header-inner::after, +.workspace .mod-root .workspace-tab-header.is-active + .workspace-tab-header .workspace-tab-header-inner::after { + opacity: 0; +} + +/* Editor and output */ +.markdown-rendered blockquote { + padding: var(--embed-padding); +} + +mjx-container { + text-align: left !important; +} + +.math-block { + font-size: 1.3em; +} + +.theme-light :not(pre)>code, +.theme-light pre { + background: var(--background-primary); + box-shadow: inset 0 0 0 1px var(--background-primary-alt); + border-radius: 4px; +} + +.markdown-preview-section > div h1, +.markdown-preview-section > div h2, +.markdown-preview-section > div h3, +.markdown-preview-section > div h4, +.markdown-preview-section > div h5, +.markdown-preview-section > div h6 { + margin-top: 40px; +} + +.mod-header + div h1, +.mod-header + div h2, +.mod-header + div h3, +.mod-header + div h4, +.mod-header + div h5, +.mod-header + div h6 { + margin-top: 30px; +} + +.cm-sizer > .inline-title { + margin-bottom: 20px; +} + +/* Miscellaneous */ +.theme-dark .dropdown:hover { + background-color: var(--background-modifier-form-field); +} + +.tooltip { + color: var(--text-muted); +} + +.nav-file, .nav-folder { + padding: 1px 2px; +} + +body:not(.is-grabbing) .nav-file-title.is-being-dragged, +body:not(.is-grabbing) .nav-folder-title.is-being-dragged, +.nav-file-title.is-being-dragged, +.nav-folder-title.is-being-dragged { + background-color: var(--background-primary-alt); + color: var(--nav-item-color); +} + +.view-header-title { + text-decoration: underline; + text-decoration-color: var(--text-muted); + text-underline-offset: 1.5px; +} + +.status-bar { + border-color: var(--panel-border-color); + border-width: 1px; + padding: 4px 8px; +} + +.theme-dark button.mod-warning { + --background-modifier-error: #d42020; + --background-modifier-error-hover: #b01515; +} + +.theme-light button.mod-warning { + --background-modifier-error: #f23f3f; + --background-modifier-error-hover: #d72020; +} + +/* Code syntax highlighting */ +code[class*='language-'], pre[class*='language-'] { + text-align: left !important; + white-space: pre !important; + word-spacing: normal !important; + word-break: normal !important; + word-wrap: normal !important; + line-height: 1.5 !important; + tab-size: 4 !important; + hyphens: none !important; +} + +pre[class*='language-'] { + /* Code blocks */ + padding: 1em !important; + margin: .5em 0 !important; + overflow: auto !important; +} + +:not(pre)>code[class*='language-'] { + /* Inline code */ + padding: .1em !important; + border-radius: .3em !important; + white-space: normal !important; +} + +.token.comment, .token.prolog, .token.doctype, .token.cdata, +.HyperMD-codeblock .cm-comment { + color: var(--gray-1) !important; +} + +.token.punctuation, +.HyperMD-codeblock .cm-hmd-codeblock, .HyperMD-codeblock .cm-bracket { + color: var(--gray-2) !important; +} + +.token.selector, .token.tag, +.HyperMD-codeblock .cm-tag, .HyperMD-codeblock .cm-property, .HyperMD-codeblock .cm-meta, .HyperMD-codeblock .cm-qualifier, .HyperMD-codeblock .cm-header, .HyperMD-codeblock .cm-quote, .HyperMD-codeblock .cm-hr, .HyperMD-codeblock .cm-link { + color: var(--red) !important; +} + +.token.property, .token.boolean, .token.number, .token.constant, .token.symbol, .token.attr-name, .token.deleted, +.HyperMD-codeblock .cm-number, .HyperMD-codeblock .cm-atom, .HyperMD-codeblock .cm-attribute { + color: var(--orange) !important; +} + +.token.string, .token.char, .token.attr-value, .token.builtin, .token.inserted, +.HyperMD-codeblock .cm-string, .HyperMD-codeblock .cm-builtin { + color: var(--green) !important; +} + +.token.operator, .token.entity, .token.url, .language-css .token.string, .style .token.string, +.HyperMD-codeblock .cm-string-2, .HyperMD-codeblock .cm-operator { + color: var(--aqua) !important; +} + +.token.atrule, .token.keyword, +.HyperMD-codeblock .cm-keyword { + color: var(--purple) !important; +} + +.token.function, .token.macro.property, +.HyperMD-codeblock .cm-def, .HyperMD-codeblock .cm-variable { + color: var(--blue) !important; +} + +.token.class-name, +.HyperMD-codeblock .cm-variable-2, .HyperMD-codeblock .cm-variable-3 { + color: var(--yellow) !important; +} + +.token.regex, .token.important, .token.variable { + color: var(--purple) !important; +} + +.token.important, .token.bold { + font-weight: bold !important; +} + +.token.italic { + font-style: italic !important; +} + +.token.entity { + cursor: help !important; +} \ No newline at end of file diff --git a/Perlite/perlite/Demo/.obsidian/themes/Clair de Lune/manifest.json b/Perlite/perlite/Demo/.obsidian/themes/Clair de Lune/manifest.json new file mode 100644 index 0000000..e0d5d6b --- /dev/null +++ b/Perlite/perlite/Demo/.obsidian/themes/Clair de Lune/manifest.json @@ -0,0 +1,6 @@ +{ + "name": "Clair de Lune", + "version": "0.0.0", + "minAppVersion": "0.16.0", + "author": "Jamie Brynes" +} \ No newline at end of file diff --git a/Perlite/perlite/Demo/.obsidian/themes/Clair de Lune/theme.css b/Perlite/perlite/Demo/.obsidian/themes/Clair de Lune/theme.css new file mode 100644 index 0000000..15da5a0 --- /dev/null +++ b/Perlite/perlite/Demo/.obsidian/themes/Clair de Lune/theme.css @@ -0,0 +1,1231 @@ +@charset "UTF-8"; +:root { + --default-font: "Inter", sans-serif; + --font-monospace: "Jetbrains Mono", monospace; + --font-editor-size: 1em; + --font-editor-linenumbers-size: medium; + --font-h1-preview-size: 2em; + --font-h2-preview-size: 1.5em; + --font-h3-preview-size: 1.25em; + --font-h4-preview-size: 1em; + --font-h5-preview-size: 0.875em; + --font-h6-preview-size: 0.85em; + --font-math-preview-size: 1.126em; + --font-tag-preview-size: 0.9em; + --font-hover-preview-size: 0.9em; + --font-prompts-size: 0.875em; + --font-todoist-title-size: 1em; + --font-todoist-metadata-size: small; +} + +.theme-dark { + --background-code: #222436; + --background-code-preview: #222436; + --background-preview: #222436; + --background-primary: #222436; + --background-primary-alt: #222436; + --background-secondary: #1e2030; + --background-secondary-alt: #1e2030; + --background-tag: #131421; + --background-quick: #191a2a; + --background-modifier-cover: rgba(0, 0, 0, 0.8); + --background-modifier-border: #1e2030; + --background-modifier-form-field: #191a2a; + --background-modifier-form-field-highlighted: #1e2030; + --interactive-hover: #2f334d; + --interactive-accent: #444a73; + --interactive-accent-rgb: 68, 74, 115; + --interactive-accent-hover: #828bb8; + --scrollbar-bg: inherit; + --scrollbar-thumb-bg: #2f334d; + --scrollbar-active-thumb-bg: #444a73; + --table-line: #828bb8; + --text-accent: #50c4fa; + --text-accent-hover: rgba(80, 196, 250, 0.8); + --text-faint: $text-dark; + --text-highlight-bg: rgba(252, 167, 234, 0.2); + --text-muted: #a9b8e8; + --text-normal: #c8d3f5; + --text-on-accent: #e2e8fa; + --text-selection: rgba(252, 167, 234, 0.2); + --text-tag: #7a88cf; + --text-error: #ff98a4; + --file-hr: #a9b8e8; + --leaf-handle: #a9b8e8; +} + +.cm-s-obsidian { + font-family: var(--font-monospace); + color: #c0cdf3; + font-size: var(--font-editor-size); + line-height: 1.5em; +} +.cm-s-obsidian .CodeMirror-linenumber { + color: rgba(122, 136, 207, 0.5); + font-size: var(--font-editor-linenumbers-size); +} +.cm-s-obsidian .CodeMirror-gutter-elt { + width: 25px !important; +} +.cm-s-obsidian .cm-formatting, +.cm-s-obsidian .CodeMirror-foldmarker { + color: #7a88cf !important; +} +.cm-s-obsidian .cm-header { + color: #ffc777; +} +.cm-s-obsidian .cm-header-1, +.cm-s-obsidian .cm-header-2, +.cm-s-obsidian .cm-header-3, +.cm-s-obsidian .cm-header-4, +.cm-s-obsidian .cm-header-5, +.cm-s-obsidian .cm-header-6 { + font-size: var(--font-editor-size); + line-height: 1.5em; +} +.cm-s-obsidian .cm-formatting-link, +.cm-s-obsidian .cm-link { + color: #82aaff !important; +} +.cm-s-obsidian .cm-formatting-link-string, +.cm-s-obsidian .cm-url { + color: #ff966c !important; +} +.cm-s-obsidian span.cm-hmd-internal-link { + color: #c3e88d !important; +} +.cm-s-obsidian .cm-em, +.cm-s-obsidian .cm-strong { + color: #ff98a4; +} +.cm-s-obsidian span.cm-inline-code { + color: #86e1fc; + font-size: inherit; + padding: 0 !important; +} +.cm-s-obsidian pre.HyperMD-codeblock { + line-height: 1.5em; + font-size: var(--font-editor-size); +} +.cm-s-obsidian span.cm-hmd-codeblock, +.cm-s-obsidian span.cm-hmd-indented-code, +.cm-s-obsidian span.cm-math, +.cm-s-obsidian pre.HyperMD-codeblock { + color: #828bb8; +} +.cm-s-obsidian span.cm-hmd-codeblock span.cm-keyword, +.cm-s-obsidian span.cm-hmd-indented-code span.cm-keyword, +.cm-s-obsidian span.cm-math span.cm-keyword, +.cm-s-obsidian pre.HyperMD-codeblock span.cm-keyword { + color: #c099ff !important; +} +.cm-s-obsidian span.cm-hmd-codeblock span.cm-def, +.cm-s-obsidian span.cm-hmd-indented-code span.cm-def, +.cm-s-obsidian span.cm-math span.cm-def, +.cm-s-obsidian pre.HyperMD-codeblock span.cm-def { + color: #c8d3f5 !important; +} +.cm-s-obsidian span.cm-hmd-codeblock span.cm-variable, +.cm-s-obsidian span.cm-hmd-codeblock span.cm-variable-2, +.cm-s-obsidian span.cm-hmd-codeblock span.cm-variable-3, +.cm-s-obsidian span.cm-hmd-indented-code span.cm-variable, +.cm-s-obsidian span.cm-hmd-indented-code span.cm-variable-2, +.cm-s-obsidian span.cm-hmd-indented-code span.cm-variable-3, +.cm-s-obsidian span.cm-math span.cm-variable, +.cm-s-obsidian span.cm-math span.cm-variable-2, +.cm-s-obsidian span.cm-math span.cm-variable-3, +.cm-s-obsidian pre.HyperMD-codeblock span.cm-variable, +.cm-s-obsidian pre.HyperMD-codeblock span.cm-variable-2, +.cm-s-obsidian pre.HyperMD-codeblock span.cm-variable-3 { + color: #65bcff !important; +} +.cm-s-obsidian span.cm-hmd-codeblock span.cm-operator, +.cm-s-obsidian span.cm-hmd-indented-code span.cm-operator, +.cm-s-obsidian span.cm-math span.cm-operator, +.cm-s-obsidian pre.HyperMD-codeblock span.cm-operator { + color: #86e1fc !important; +} +.cm-s-obsidian span.cm-hmd-codeblock span.cm-number, +.cm-s-obsidian span.cm-hmd-indented-code span.cm-number, +.cm-s-obsidian span.cm-math span.cm-number, +.cm-s-obsidian pre.HyperMD-codeblock span.cm-number { + color: #ff966c !important; +} +.cm-s-obsidian span.cm-hmd-codeblock span.cm-string, +.cm-s-obsidian span.cm-hmd-indented-code span.cm-string, +.cm-s-obsidian span.cm-math span.cm-string, +.cm-s-obsidian pre.HyperMD-codeblock span.cm-string { + color: #c3e88d !important; +} +.cm-s-obsidian span.cm-hmd-codeblock span.cm-comment, +.cm-s-obsidian span.cm-hmd-indented-code span.cm-comment, +.cm-s-obsidian span.cm-math span.cm-comment, +.cm-s-obsidian pre.HyperMD-codeblock span.cm-comment { + color: #7a88cf !important; +} +.cm-s-obsidian span.cm-quote { + font-style: italic; +} +.cm-s-obsidian span.cm-comment { + color: #444a73 !important; + font-style: italic; +} +.cm-s-obsidian .cm-hmd-frontmatter.cm-def { + color: rgba(195, 232, 141, 0.8) !important; +} +.cm-s-obsidian .cm-hmd-frontmatter.cm-atom { + color: #ff966c !important; +} + +.cm-s-obsidian .hmd-fold-html-stub, +.cm-s-obsidian .hmd-fold-code-stub, +.cm-s-obsidian.CodeMirror .HyperMD-hover > .HyperMD-hover-content code, +.cm-s-obsidian .cm-formatting-hashtag, +.cm-s-obsidian .cm-inline-code, +.cm-s-obsidian .HyperMD-codeblock, +.cm-s-obsidian .HyperMD-hr, +.cm-s-obsidian .cm-hmd-frontmatter, +.cm-s-obsidian .cm-hmd-orgmode-markup, +.cm-s-obsidian .cm-formatting-code, +.cm-s-obsidian .cm-math, +.cm-s-obsidian span.hmd-fold-math-placeholder, +.cm-s-obsidian .CodeMirror-linewidget kbd, +.cm-s-obsidian .hmd-fold-html kbd { + font-family: var(--font-monospace); +} + +.cm-s-obsidian div.HyperMD-codeblock-begin-bg { + border-top: none; +} + +.cm-s-obsidian div.HyperMD-codeblock-bg { + border-left: none; + border-right: none; +} + +.cm-s-obsidian div.HyperMD-codeblock-end-bg { + border-bottom: none; +} + +.markdown-preview-view blockquote { + padding: 10px; + border: unset; + border-left: 3px solid #444a73; + margin-left: 1em; + color: #828bb8; +} + +.markdown-preview-view ul > li.task-list-item { + margin-left: 0em; + text-indent: unset; +} +.markdown-preview-view ul > li.task-list-item input[type=checkbox] { + appearance: none; + -webkit-appearance: none; + border-radius: 50%; + border: 1px solid #131421 !important; + background-color: #828bb8 !important; + padding: 0; + filter: none; + width: 18px; + height: 18px; + position: relative; + top: 6px; + line-height: 0; + margin-right: 5px; + margin-left: -27px; +} +.markdown-preview-view ul > li.task-list-item input[type=checkbox]:hover { + background-color: rgba(130, 170, 255, 0.5) !important; +} +.markdown-preview-view ul > li.task-list-item input[type=checkbox]:focus { + outline: none; + background-color: #82aaff !important; +} +.markdown-preview-view ul > li.task-list-item.is-checked input[type=checkbox] { + background-color: #82aaff !important; + background-position: center; + background-size: 70%; + background-repeat: no-repeat; + background-image: url('data:image/svg+xml; utf8, '); +} + +.markdown-preview-view :not(pre) > code { + color: #c8d3f5; + background-color: #191a2a; + border: 1px solid #131421; + font-family: var(--font-monospace); + padding: 0.2em 0.4em; + border-radius: 6px; +} +.markdown-preview-view pre { + padding: 16px !important; + line-height: 1.45 !important; + border: 1px solid #131421 !important; + border-radius: 6px !important; + background-color: #191a2a !important; + font-family: var(--font-monospace) !important; +} +.markdown-preview-view pre code { + background-color: unset; + color: #c0cdf3; +} +.markdown-preview-view .token.keyword { + color: #c099ff; +} +.markdown-preview-view .token.class-name { + color: #ffc777; +} +.markdown-preview-view .token.operator { + color: #86e1fc; +} +.markdown-preview-view .token.number { + color: #ff966c; +} +.markdown-preview-view .token.punctuation { + color: #e2e8fa; +} +.markdown-preview-view .token.function { + color: #65bcff; +} +.markdown-preview-view .token.string { + color: #c3e88d; +} +.markdown-preview-view .token.comment { + color: #7a88cf; +} +.markdown-preview-view .token.macro { + color: #82aaff; +} + +.markdown-preview-view .markdown-embed { + margin: 0; + border: none; +} +.markdown-preview-view .markdown-embed .markdown-preview-view { + padding: 0px; +} +.markdown-preview-view .markdown-embed-link { + top: 12px; + right: 12px; + color: #7a88cf; +} +.markdown-preview-view .markdown-embed-link:hover { + color: #86e1fc; +} + +.markdown-preview-view h1, +.markdown-preview-view h2, +.markdown-preview-view h3, +.markdown-preview-view h4, +.markdown-preview-view h5, +.markdown-preview-view h6 { + margin-top: 24px; + margin-bottom: 16px; + font-weight: 600; + line-height: 1.25; + color: #c8d3f5; + display: block; + align-items: center; + white-space: pre-wrap; +} +.markdown-preview-view h1 { + font-size: var(--font-h1-preview-size); +} +.markdown-preview-view h2 { + font-size: var(--font-h2-preview-size); +} +.markdown-preview-view h3 { + font-size: var(--font-h3-preview-size); +} +.markdown-preview-view h4 { + font-size: var(--font-h4-preview-size); +} +.markdown-preview-view h5 { + font-size: var(--font-h5-preview-size); +} +.markdown-preview-view h6 { + font-size: var(--font-h6-preview-size); + color: #a9b8e8; +} +.markdown-preview-view h1, +.markdown-preview-view h2 { + padding-bottom: 0.3em; + border-bottom: 1px solid rgba(122, 136, 207, 0.25); +} +.markdown-preview-view .heading-collapse-indicator { + color: #7a88cf; +} + +.popover.hover-popover { + max-height: 500px; + min-height: 200px; + width: 600px; +} +.popover.hover-popover .markdown-embed { + height: unset; +} +.popover.hover-popover > .markdown-embed { + height: 500px; + font-size: var(--font-hover-preview-size); +} +.popover.hover-popover > .markdown-embed .markdown-embed-link { + color: #7a88cf; +} +.popover.hover-popover > .markdown-embed .markdown-embed-link:hover { + color: #86e1fc; +} + +.markdown-preview-view a { + color: #82aaff; + text-decoration: none; +} +.markdown-preview-view a:hover { + text-decoration: underline; +} +.markdown-preview-view a.external-link { + background-image: none; + background-size: 0px; + padding-right: 0px; +} +.markdown-preview-view a.internal-link { + text-decoration: none; + color: #c3e88d; +} +.markdown-preview-view a.internal-link:hover { + text-decoration: underline; +} +.markdown-preview-view a.tag { + color: #7a88cf; +} + +.markdown-preview-view ul ul, +.markdown-preview-view ol ol, +.markdown-preview-view ul ol, +.markdown-preview-view ol ul { + padding-inline-start: 30px; +} +.markdown-preview-view ul:not(.contains-task-list) ul:not(.contains-task-list) { + border-left: 1px solid rgba(122, 136, 207, 0.25); + margin-left: -12px; + padding-inline-start: 42px; +} +.markdown-preview-view ul li, +.markdown-preview-view ol li { + margin: 5px 0; +} +.markdown-preview-view ul { + list-style: none; +} +.markdown-preview-view ul li:not(.task-list-item)::before { + content: "•"; + color: #7a88cf; + font-weight: bold; + display: inline-block; + width: 1em; + margin-left: -1em; +} +.markdown-preview-view .list-collapse-indicator { + color: #7a88cf; +} +.markdown-preview-view li > p { + display: inline; +} + +span.math.math-block { + font-size: var(--font-math-preview-size); +} + +.frontmatter-container { + background-color: #191a2a; + border: none; +} +.frontmatter-container .frontmatter-collapse-indicator { + color: #7a88cf; +} +.frontmatter-container .frontmatter-section { + align-items: center; +} +.frontmatter-container .frontmatter-section-label::after { + content: ":"; +} + +.node rect, +.node circle, +.node ellipse, +.node path, +.node polygon, +rect.actor, +.labelBox { + fill: #2f334d !important; + stroke: #444a73 !important; +} + +text.actor { + color: #c8d3f5; +} + +.loopLine { + stroke: #444a73 !important; +} + +rect.note, +.statediagram-note rect { + fill: rgba(255, 199, 119, 0.3) !important; + stroke: rgba(255, 199, 119, 0.75) !important; +} + +.statediagram-cluster .outer, +.statediagram-cluster .inner { + stroke: #444a73 !important; +} + +.edge-thickness-normal { + stroke: #444a73 !important; +} + +.section0, +.section2 { + fill: #222436 !important; + opacity: 1 !important; +} + +.section1, +.section3 { + fill: #2f334d !important; + opacity: 1 !important; +} + +.task0, +.task1, +.task2, +.task3 { + fill: #191a2a !important; + stroke: #191a2a !important; +} + +.done0, +.done1, +.done2, +.done3 { + fill: rgba(195, 232, 141, 0.1) !important; + stroke: rgba(195, 232, 141, 0.75) !important; +} + +.active0, +.active1, +.active2, +.active3 { + fill: rgba(255, 199, 119, 0.1) !important; + stroke: rgba(255, 199, 119, 0.75) !important; +} + +.doneCrit0, +.doneCrit1, +.doneCrit2, +.doneCrit3 { + fill: rgba(255, 152, 164, 0.05) !important; + stroke: rgba(255, 152, 164, 0.25) !important; + shape-rendering: unset !important; +} + +.activeCrit0, +.activeCrit1, +.activeCrit2, +.activeCrit3 { + fill: rgba(255, 117, 127, 0.1) !important; + stroke: rgba(255, 117, 127, 0.75) !important; +} + +.crit0, +.crit1, +.crit2, +.crit3 { + fill: rgba(255, 150, 108, 0.1) !important; + stroke: rgba(255, 150, 108, 0.75) !important; +} + +.classGroup rect, +.classGroup line { + fill: #2f334d !important; + stroke: #444a73 !important; +} + +path.relation { + stroke: #444a73 !important; +} + +.classLabel rect { + fill: rgba(0, 0, 0, 0) !important; +} +.classLabel text { + fill: #c8d3f5 !important; +} + +#extensionStart, +#compositionStart, +#aggregationStart, +#dependencyStart, +#extensionEnd, +#compositionEnd, +#aggregationEnd, +#dependencyEnd, +#statediagram-barbEnd { + fill: #444a73 !important; +} + +.commit { + fill: rgba(255, 199, 119, 0.25) !important; + stroke: rgba(255, 199, 119, 0.75) !important; +} + +.internal-query { + border: none; + background-color: #191a2a; + border-radius: 10px; + padding: 10px; +} +.internal-query .internal-query-header { + justify-content: inherit; + margin-bottom: 10px; +} +.internal-query .internal-query-header-title { + color: #7a88cf; +} +.internal-query .internal-query-header-title::before, .internal-query .internal-query-header-title::after { + content: "" !important; +} +.internal-query .search-result .search-result-collapse-indicator { + color: #7a88cf; +} +.internal-query .search-result .search-result-file-matches { + border-bottom: none; +} +.internal-query .search-result .search-result-file-match::before { + height: 0px; +} +.internal-query .search-result .search-result-file-match:hover { + background-color: #2f334d; +} + +.markdown-preview-view table { + border: 3px solid #444a73; +} +.markdown-preview-view thead { + border-bottom: 3px solid #444a73; + color: #7a88cf; +} +.markdown-preview-view tbody { + color: #c0cdf3; +} +.markdown-preview-view th { + background-color: #1e2030; +} +.markdown-preview-view tr td:not(:last-child), +.markdown-preview-view tr th:not(:last-child) { + border-right: 1px solid #2f334d; +} + +.tag { + font-size: var(--font-tag-preview-size); + font-weight: 900; + background-color: #131421; + padding: 3px 5px; + border-radius: 5px; + letter-spacing: -0.05ch; +} + +.tag[href="#drafting"] { + font-size: 0; + padding: 0; +} +.tag[href="#drafting"]:after { + font-size: var(--font-tag-preview-size); + font-weight: 900; + background-color: #131421; + padding: 3px 5px; + border-radius: 5px; + letter-spacing: -0.05ch; + content: "◩ DRAFTING"; +} + +.tag[href="#complete"] { + font-size: 0; + padding: 0; +} +.tag[href="#complete"]:after { + font-size: var(--font-tag-preview-size); + font-weight: 900; + background-color: #131421; + padding: 3px 5px; + border-radius: 5px; + letter-spacing: -0.05ch; + content: "◼ COMPLETE"; +} + +.tag[href="#archived"] { + font-size: 0; + padding: 0; +} +.tag[href="#archived"]:after { + font-size: var(--font-tag-preview-size); + font-weight: 900; + background-color: #131421; + padding: 3px 5px; + border-radius: 5px; + letter-spacing: -0.05ch; + content: "◻ ARCHIVED"; +} + +.tag[href="#seedling"] { + font-size: 0; + padding: 0; +} +.tag[href="#seedling"]:after { + font-size: var(--font-tag-preview-size); + font-weight: 900; + background-color: #131421; + padding: 3px 5px; + border-radius: 5px; + letter-spacing: -0.05ch; + content: "🌱 SEEDLING"; +} + +.tag[href="#evergreen"] { + font-size: 0; + padding: 0; +} +.tag[href="#evergreen"]:after { + font-size: var(--font-tag-preview-size); + font-weight: 900; + background-color: #131421; + padding: 3px 5px; + border-radius: 5px; + letter-spacing: -0.05ch; + content: "🌲 EVERGREEN"; +} + +.markdown-preview-view { + color: #c0cdf3; +} +.markdown-preview-view hr { + border-color: rgba(122, 136, 207, 0.3); +} +.markdown-preview-view del { + color: #7a88cf; +} + +@media print { + .markdown-preview-view h1, +.markdown-preview-view h2, +.markdown-preview-view h3, +.markdown-preview-view h4, +.markdown-preview-view h5, +.markdown-preview-view h6 { + color: #131421 !important; + } +} +.modal button:not(.mod-cta):not(.mod-warning), +.modal.mod-settings button:not(.mod-cta):not(.mod-warning), +button:not(.mod-cta):not(.mod-warning) { + background-color: #191a2a; + border: 1px solid #131421; +} +.modal button:not(.mod-cta):not(.mod-warning):hover, +.modal.mod-settings button:not(.mod-cta):not(.mod-warning):hover, +button:not(.mod-cta):not(.mod-warning):hover { + background-color: #1e2030; +} +.modal button.mod-warning, +.modal.mod-settings button.mod-warning, +button.mod-warning { + border: 1px solid #ff757f; + color: #ff757f; + background-color: #191a2a; +} +.modal button.mod-warning:hover, +.modal.mod-settings button.mod-warning:hover, +button.mod-warning:hover { + color: #ff98a4; + background-color: #1e2030; +} +.modal button.mod-cta, +.modal.mod-settings button.mod-cta, +button.mod-cta { + border: 1px solid #7a88cf; + color: #e2e8fa; + background-color: #191a2a; +} +.modal button.mod-cta:hover, +.modal.mod-settings button.mod-cta:hover, +button.mod-cta:hover { + color: #e2e8fa; + background-color: #1e2030; +} + +.view-header { + background-color: #1e2030; + border-bottom: 1px solid #131421; +} +.view-header .view-actions { + background-color: #1e2030; +} +.view-header .view-header-title, +.view-header .view-action { + color: rgba(169, 184, 232, 0.75); +} + +.workspace-leaf.mod-active .view-header { + background-color: #222436; + color: #e2e8fa; + border-bottom: 1px solid #c3e88d; +} +.workspace-leaf.mod-active .view-header .view-action { + color: #e2e8fa; +} +.workspace-leaf.mod-active .view-header .view-actions { + background-color: #222436; +} + +body.plugin-sliding-panes .mod-root .workspace-leaf { + box-shadow: rgba(0, 0, 0, 0.25) 0px 0px 10px 10px !important; +} +body.plugin-sliding-panes .mod-root .workspace-leaf.mod-active .view-header { + border-right: 1px solid rgba(195, 232, 141, 0.5) !important; +} + +.view-header-icon { + color: rgba(68, 74, 115, 0.5); +} +.view-header-icon:hover { + color: #828bb8; +} + +.mod-root > .nav-folder-title { + display: none; +} + +.nav-file-title.is-active { + background-color: #444a73; +} + +body:not(.is-grabbing) .nav-file-title:hover, +body:not(.is-grabbing) .nav-folder-title:hover { + background-color: #2f334d; +} + +.nav-folder-title.is-being-dragged-over { + background-color: #2f334d; + border: 1px solid #444a73; +} + +.nav-folder-collapse-indicator { + background-color: unset !important; +} + +.nav-folder-children > .nav-file, +.nav-folder-children > .nav-folder { + border-left: 1px solid #2f334d; +} + +.mod-root > .nav-folder-children > .nav-file, +.mod-root > .nav-folder-children > .nav-folder { + border-left: none; +} + +.graph-view.color-line { + color: #7a88cf; +} +.graph-view.color-fill { + color: #82aaff; +} +.graph-view.color-text { + color: rgba(200, 211, 245, 0.8); +} +.graph-view.color-fill-highlight { + color: #3e68d7; +} +.graph-view.color-line-hightlight { + color: #c3e88d; +} + +input, +input[type=text], +input[type=search], +input[type=email], +input[type=password], +input[type=number], +textarea { + border: 1px #131421; + color: #c8d3f5; + font-family: var(--font-monospace); +} +input:hover, +input[type=text]:hover, +input[type=search]:hover, +input[type=email]:hover, +input[type=password]:hover, +input[type=number]:hover, +textarea:hover { + background: var(--background-modifier-form-field); + border: 1px solid var(--interactive-accent); +} + +.menu-item:hover { + background-color: #2f334d; +} + +.collapsible-item-self.is-clickable:hover { + background-color: #2f334d; +} + +.collapsible-item-children { + border-left: 1px solid #2f334d; +} + +.prompt { + background-color: #1e2030; + border: 1px solid #131421; +} +.prompt .prompt-input { + font-size: var(--font-prompt-size); +} +.prompt .prompt-results .suggestion-item { + padding: 8px 10px 8px 34px; + font-size: var(--font-prompt-size); + margin-right: 2px; +} +.prompt .prompt-results .suggestion-item.is-selected { + background-color: #2f334d; +} +.prompt .prompt-instructions { + border-top: 1px solid #131421; + color: #7a88cf; +} + +.vertical-tab-header, +.vertical-tab-nav-item { + background-color: #1e2030; +} + +.vertical-tab-nav-item.is-active { + border-left-color: #50c4fa; +} + +.checkbox-container { + background-color: #191a2a; + border: 1px solid #131421; +} + +.checkbox-container.is-enabled { + background-color: rgba(195, 232, 141, 0.8); +} + +.vertical-tab-content .setting-item:not(:first-child) { + border-top: 1px solid #191a2a; +} + +.dropdown { + background-color: #191a2a; + background-image: url("data:image/svg+xml;charset=US-ASCII,%3Csvg%20xmlns%3D%22http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%22%20width%3D%22292.4%22%20height%3D%22292.4%22%3E%3Cpath%20fill%3D%22%23c8d3f5%22%20d%3D%22M287%2069.4a17.6%2017.6%200%200%200-13-5.4H18.4c-5%200-9.3%201.8-12.9%205.4A17.6%2017.6%200%200%200%200%2082.2c0%205%201.8%209.3%205.4%2012.9l128%20127.9c3.6%203.6%207.8%205.4%2012.8%205.4s9.2-1.8%2012.8-5.4L287%2095c3.5-3.5%205.4-7.8%205.4-12.8%200-5-1.9-9.2-5.5-12.8z%22%2F%3E%3C%2Fsvg%3E"); +} + +.dropdown:hover { + background-color: #1e2030; +} + +.suggestion-container { + background-color: #1e2030; + border: 1px solid #131421; +} +.suggestion-container .suggestion { + max-height: 450px; +} +.suggestion-container .suggestion .suggestion-item { + padding: 8px 10px 8px 34px; + font-size: var(--font-preview-size); + margin-right: 2px; +} +.suggestion-container .suggestion .suggestion-item .suggestion-content .suggestion-heading-level { + background-color: #131421; + color: rgba(255, 199, 119, 0.7); +} +.suggestion-container .suggestion .suggestion-item.is-selected { + background-color: #2f334d; +} +.suggestion-container .suggestion .suggestion-item .suggestion-note { + color: #7a88cf; + font-style: italic; +} + +.titlebar { + background-color: #131421; +} + +.titlebar-button { + opacity: 1; +} + +.tree-item-self .collapse-icon { + color: #7a88cf; + opacity: 0.5; +} +.tree-item-self.is-clickable:hover { + background-color: #2f334d; +} + +.tree-item-children { + margin-left: 10px; +} +.tree-item-children > .tree-item { + border-left: 1px solid #2f334d; + padding-left: 10px; +} + +.tree-item-flair { + background-color: #444a73; + text-align: center; +} + +.search-result-file-match { + background-color: #191a2a; + border: 1px solid #131421; + padding: 15px; + margin-top: 3px; + border-radius: 5px; +} +.search-result-file-match:hover { + background-color: #191a2a; + border: 1px solid var(--interactive-accent); + cursor: pointer; +} + +.tooltip { + background-color: #131421; +} + +.tooltip .tooltip-arrow { + border-color: #131421 !important; +} + +.workspace-split, +.workspace-ribbon, +.workspace-ribbon.mod-left.is-collapsed { + border-right: 1px solid #191a2a; +} + +.workspace-ribbon.mod-right.is-collapsed { + border-left: none; +} + +.status-bar { + border-top: 1px solid #191a2a; +} + +.status-bar, +.workspace-ribbon, +.workspace-ribbon.is-collapsed, +.workspace-split.mod-left-split .workspace-tabs, +.workspace-split.mod-left-split .workspace-tabs .workspace-leaf, +.workspace-split.mod-right-split .workspace-tabs .workspace-leaf, +.workspace-leaf-resize-handle { + background-color: #1e2030; +} + +.workspace-tab-container-before, +.workspace-tab-container-after { + display: none; +} + +.workspace-split .workspace-tabs:not(:first-child) { + border-top: 1px solid #191a2a; +} + +.workspace-tab-header-container { + height: 40px; + padding: 0; + margin-top: 4px; + margin-left: 4px; +} + +.workspace-tab-container-inner { + border-radius: 10px; + background-color: #131421 !important; + border: 2px solid #131421; + display: flex; + justify-content: center; + align-items: center; + stroke-width: 0; +} + +.workspace-tab-header { + background-color: transparent; + border-radius: 10px !important; +} + +.workspace-tab-header-inner { + padding: 10px; +} + +.workspace-tab-header-inner-icon { + display: flex; + justify-content: center; + align-items: center; +} + +.workspace-tab-header.is-before-active, +.workspace-tab-header.is-after-active { + background-color: transparent; +} +.workspace-tab-header.is-before-active .workspace-tab-header-inner, +.workspace-tab-header.is-after-active .workspace-tab-header-inner { + background-color: transparent; +} + +/* Support for https://github.com/liamcain/obsidian-calendar-plugin */ +#calendar-container { + --color-text-today: #c3e88d; + --color-text-weeknum: rgba(122, 136, 207, 0.8); + --color-arrow: #7a88cf; + --color-dot: rgba(195, 232, 141, 0.5); +} +#calendar-container .year { + color: #7a88cf; +} + +.todoist-query-title { + display: inline !important; +} + +.todoist-refresh-button { + display: inline; + float: right; + margin-left: 8px; + padding: 3px 10px; + background-color: #2f334d; +} +.todoist-refresh-button:hover { + background-color: #444a73; +} + +.todoist-refresh-spin { + animation: spin 1s linear infinite; +} + +@-webkit-keyframes spin { + 100% { + -webkit-transform: rotate(360deg); + } +} +.markdown-preview-view ul > li.task-list-item .todoist-p1 > input[type=checkbox] { + border: 1px solid #ff757f !important; + background-color: rgba(255, 117, 127, 0.25) !important; +} +.markdown-preview-view ul > li.task-list-item .todoist-p1 > input[type=checkbox]:hover { + background-color: rgba(255, 117, 127, 0.5) !important; +} +.markdown-preview-view ul > li.task-list-item .todoist-p2 > input[type=checkbox] { + border: 1px solid #ffc777 !important; + background-color: rgba(255, 199, 119, 0.25) !important; +} +.markdown-preview-view ul > li.task-list-item .todoist-p2 > input[type=checkbox]:hover { + background-color: rgba(255, 199, 119, 0.5) !important; +} +.markdown-preview-view ul > li.task-list-item .todoist-p3 > input[type=checkbox] { + border: 1px solid #65bcff !important; + background-color: rgba(101, 188, 255, 0.25) !important; +} +.markdown-preview-view ul > li.task-list-item .todoist-p3 > input[type=checkbox]:hover { + background-color: rgba(101, 188, 255, 0.5) !important; +} +.markdown-preview-view ul > li.task-list-item .todoist-p4 > input[type=checkbox] { + border: 1px solid #b4c2f0 !important; + background-color: rgba(180, 194, 240, 0.25) !important; +} +.markdown-preview-view ul > li.task-list-item .todoist-p4 > input[type=checkbox]:hover { + background-color: rgba(180, 194, 240, 0.5) !important; +} + +.task-metadata { + font-size: var(--font-todoist-metadata-size); + color: #7a88cf; + margin-left: unset !important; +} + +.task-metadata > * { + margin-right: 30px; +} + +.task-date.task-overdue { + color: rgba(255, 152, 164, 0.75) !important; +} + +.task-calendar-icon, +.task-project-icon, +.task-labels-icon { + vertical-align: middle; + height: 17px; + width: 17px; +} + +.todoist-project .todoist-project { + margin-left: 20px; +} + +.todoist-section { + margin-left: 20px; +} + +.todoist-project .todoist-project-title { + font-weight: 700; + margin-block-end: 0px; +} + +.todoist-section .todoist-section-title { + font-size: var(--font-todoist-title-size); + color: #7a88cf; + font-weight: 700; + margin-block-end: 0px; +} + +.todoist-error { + border: 1px solid #ff98a4; + background-color: rgba(255, 152, 164, 0.05); + padding: 1em 1em; + margin: 1em 0px; +} +.todoist-error p { + margin: 0 0 1em 0; + font-weight: 600; +} +.todoist-error code { + background-color: unset !important; + padding: unset !important; + margin: unset !important; +} + +.todoist-success { + border: 1px solid #c3e88d !important; + background-color: rgba(195, 232, 141, 0.05); + padding: 1em 1em !important; + margin: 1em 0px; +} +.todoist-success p { + margin: 0; + font-weight: 600; +} + +.priority-container .priority-1 { + color: #ff98a4; +} +.priority-container .priority-2 { + color: #ffc777; +} +.priority-container .priority-3 { + color: #65bcff; +} +.priority-container .priority-4 { + color: #b4c2f0; +} + +/*# sourceMappingURL=obsidian.css.map */ diff --git a/Perlite/perlite/Demo/.obsidian/themes/Cyber Glow/manifest.json b/Perlite/perlite/Demo/.obsidian/themes/Cyber Glow/manifest.json new file mode 100644 index 0000000..16b76d6 --- /dev/null +++ b/Perlite/perlite/Demo/.obsidian/themes/Cyber Glow/manifest.json @@ -0,0 +1,8 @@ +{ + "name": "Cyber Glow", + "version": "8.2.3", + "minAppVersion": "1.3.0", + "author": "TheEmperorArt", + "authorUrl": "https://github.com/ArtexJay/Obsidian-CyberGlow" +} + diff --git a/Perlite/perlite/Demo/.obsidian/themes/Cyber Glow/theme.css b/Perlite/perlite/Demo/.obsidian/themes/Cyber Glow/theme.css new file mode 100644 index 0000000..3a60a95 --- /dev/null +++ b/Perlite/perlite/Demo/.obsidian/themes/Cyber Glow/theme.css @@ -0,0 +1,4170 @@ +/* Cyber Glow for Obsidian built by TheEmperorArt version 8.x.x +/* Please give credits if you modify or take parts for your own theme*/ +/*===================== Style Settings ======================*/ +/* @settings +name: Cyber Glow Tweakbox +id: CG +collapsed: false +settings: + - + id: CG-workspace + title: Background Controls + type: heading + level: 1 + description: Background and Wallpaper Controls + collapsed: true + - + id: CG-workspace-background + title: Enable Workspace Backgound + description: Enable Custom Wallpaper background + type: class-toggle + default: CG-workspace-background-image-custom + - + id: CG-workspace-background-image + title: Select Background Image + description: Select Custom to use your custom links or paths to your wallpaper in "Custom Workspace Background Image". (Author's) + type: class-select + allowEmpty: false + default: CG-workspace-background-image-obsidianbg + options: + - + label: CG v8 (chesterocampo - Papillon Kotetsu) + value: CG-workspace-background-image-obsidianbg + - + label: Custom + value: CG-workspace-background-image-custom + - + id: CG-workspace-background-image-custom-option + title: Custom Workspace Background Image + description: Add your wallpaper. Paste the entire link to the image including "https://" -> url("your link here"). Local file links are no longer supported by Obsidian and Style Settings haven't been updated to support any alternatives. + type: variable-text + default: url("") + value: CG-workspace-background-image-custom + - + id: CG-workspace-background-workspace-slider + title: Container opacity + description: Suggestion Increase opacity a bit on Dark mode, decrease opacity on light mode. + type: variable-number-slider + min: 0.10 + max: 1 + step: 0.01 + default: 0.45 + - + id: CG-workspace-background-blur + title: Background blur + description: Level of blurryness + type: variable-number-slider + min: 0 + max: 20 + step: 1 + default: 15 + format: px + - + id: CG-workspace-background-brightness + title: Background brightness + description: Suggestion Increase brightness on Dark mode, decrease brightness on light mode. + type: variable-number-slider + min: 0 + max: 3 + step: 0.01 + default: 1.15 + - + id: CG-workspace-background-saturation + title: Background Saturation + description: Increase/Decrease the color vibrancy of the background image. + type: variable-number-slider + min: 0 + max: 4 + step: 0.01 + default: 2 + - + id: CG-workspace-background-contrast + title: Background Contrast + description: Increase/Decrease the contrast of the background image. + type: variable-number-slider + min: 40 + max: 200 + step: 1 + default: 100 + format: "%" + - + id: CG-Workspace + title: Workspace Controls + type: heading + description: Phone Header Folder Path, + level: 1 + collapsed: true + - + id: CG-header-crumbs + title: Disable Phone's Header Folder Path + description: The folder paths in the header easily hides the note's title. Toggle off if you want the folder path on phone. + default: true + type: class-toggle + - + title: Disable Full Status-bar + description: Returns Status-bar to a hover state + id: CG-Fullstatus-off + type: class-toggle + default: false + - + id: CG-workspace-sbt + title: Left Sidebar Toggle + type: class-select + allowEmpty: false + description: Pick the Icon/image, be sure that all custom images/gifs are square aspect. + default: CG-MObsidian-sbt + options: + - + label: New Obsidian Logo + value: CG-MObsidian-sbt + - + label: Classic Obsidian Logo + value: CG-Obsidian-sbt + - + label: Custom + value: CG-Custom-sbt + - + id: CG-workspace-custom-sbt + title: Custom Left Sidebar Toggle + description: Add your custom Left Toggle. Paste the entire link to the image including "https://" -> url("your link here"), Obsidian no longer supports local links. + type: variable-text + default: url("") + value: CG-Custom-sbt + - + id: CG-Note + title: Note Controls + type: heading + description: Custom Checkboxes, Line Width, Codeblocks Controls, Signature/Cite font, Base Font + level: 1 + collapsed: true + - + id: CG-custom-checkbox + title: Custom Checkbox + description: Enable custom checkboxes for checkbox customization + default: true + type: class-toggle + - + id: CG-line-width + title: Readable line width + description: The maximum line width in rem (unit relative to Appearance -> Font Size) + type: variable-number-slider + default: 40 + min: 30 + max: 70 + step: 1 + format: 'rem' + - + title: Disable Codeblocks Gutter + description: Remove line numbers and additional styling to code blocks + id: no-codeblock-line-numbers + type: class-toggle + default: false + - + id: CG-cite-font + title: Cite/Signature Font (Used in blockquotes and quote callouts) + description: Get Font from Cyber Glow's Github page. Recommend using a cursive font style + type: variable-text + default: 'Edwardian Script ITC' + - + id: default-font + title: Base font (UI and notes font) WIP⚠️ + description: Get Font from Cyber Glow's Github page. For System Default type Inter. + type: variable-text + default: 'Quantico' + - + id: headings + title: Heading Controls + type: heading + description: Headings Font and Size and Dividing Line Controls + level: 1 + collapsed: true + - + id: CG-hr + title: Heading Dividing Line (---) + type: class-select + allowEmpty: false + default: CG-NewObsidian-hr + options: + - + label: New Obsidian Outline + value: CG-NewObsidian-hr + - + label: CG Old Default + value: CG-OG-hr + - + label: Classic Obsidian Outline + value: CG-ClassicObsidian-hr + - + label: Windows + value: CG-Windows-hr + - + label: Apple + value: CG-Apple-hr + - + id: CG-workspace-custom-sbt + title: Custom Left Sidebar Toggle + description: Add your custom Left Toggle. Paste the entire link to the image including "https://" -> url("your link here") or paste the local file location. Be sure to use "/" instead of "\" on Windows. + type: variable-text + default: url("app://local/") + value: CG-Custom-sbt + - + id: title-heading + title: Title Heading (H1) WIP ⚠️ + description: Get Font from Cyber Glow's Github page. For System Default type Inter. + type: variable-text + default: 'Space Wham' + - + id: mini-header-hide + title: Hide Header Indication + description: Enabling this will hide the small header indicator next to headers, such as H1, H2, etc. + type: class-toggle + default: false + - + id: h1-size + title: H1 font size + description: Enter Header 1 Font + type: variable-text + default: 2.1em + - + id: major-heading + title: Major Heading font (H2) WIP ⚠️ + description: Get Font from Cyber Glow's Github page. For System Default type Inter + type: variable-text + default: 'Quantico' + - + id: h2-size + title: H2 font size + description: Enter Header 2 Font + type: variable-text + default: 1.85em + - + id: minor-heading + title: Minor Headings font (H3-6) WIP⚠️ + description: Get Font from Cyber Glow's Github page. For System Default type Inter. + type: variable-text + default: 'Oxanium' + - + id: h3-size + title: H3 font size + description: Enter Header 3 Font + type: variable-text + default: 1.65em + - + id: h4-size + title: H4 font size + description: Enter Header 4 Font + type: variable-text + default: 1.45em + - + id: h5-size + title: H5 font size + description: Enter Header 5 Font + type: variable-text + default: 1.25em + - + id: h6-size + title: H6 font size + description: Enter Header 6 Font + type: variable-text + default: 1.25em + - + id: CG-Color + title: Color Picker + type: heading + description: Change Colors of certain elements + level: 1 + collapsed: true + - + title: Accent Text Color + id: custom-accent + type: variable-color + format: hsl-values + default: 'hsl(170, 49%, 32%)' + - + title: Inactive Tab Color + id: inactivetab-color + type: variable-color + format: hsl-values + default: 'hsl(170, 49%, 32%)' + - + title: Tab & Icon Color + id: activetab-color + type: variable-color + format: hsl-values + default: 'hsl(170, 49%, 32%)' + - + title: Active Note Title Color + id: active-title + type: variable-color + format: hsl-values + default: 'hsl(170, 49%, 32%)' + - + title: Inactive Note Title Color + id: Inactive-title + type: variable-color + opacity: true + format: hsl + default: 'hsl(170, 49%, 32%)' + - + title: Outgoing link color + id: outlink-color + type: variable-color + format: hex + default: '#FFA500' + - + title: Internal link color + id: inlink-color + type: variable-color + format: hex + default: '#ffc400' + - + title: Bullet List Color + id: bulletlist-color + type: variable-color + format: hex + default: '#21B59C' + - + title: Header 1 Color + id: h1-glow + type: variable-color + format: hex + default: '#21B59C' + - + title: Header 2 Color + id: h2-glow + type: variable-color + format: hex + default: '#0cd0d0' + - + title: Header 3 Color + id: h3-glow + type: variable-color + format: hex + default: '#00d200' + - + title: Header 4 Color + id: h4-glow + type: variable-color + format: hex + default: '#ffc400' + - + title: Header 5 Color + id: h5-glow + type: variable-color + format: hex + default: '#FF0000' + - + title: Header 6 Color + id: h6-glow + type: variable-color + format: hex + default: '#FF00FF' + - + title: Change Blockquote color + id: block-color + type: variable-color + format: hsl + default: 'hsl(170, 49%, 32%)' + - + id: CG-other + title: Other Controls + type: heading + description: Stacked tabs width + level: 1 + collapsed: true + - + id: GC-stacked-width + title: Stacked tabs header width + description: If the stacked tab looks weird, after altering the width, please change tabs first or open a new tab to "refresh" the theme + type: variable-number-slider + min: 20 + max: 70 + step: 1 + default: 35 + format: px +*/ +@font-face { + font-family: "OxaniumFira"; + src: url(data:application/octet-stream;base64,AAEAAAAQAQAABAAAR0RFRg4BEp8AAYbcAAAANEdQT1NNf0wDAAGHEAAAGkBHU1VCQczx9AABoVAAAF20T1MvMhd5EocAAAGIAAAAYFNUQVR4kWzeAAH/BAAAAC5jbWFwLPCWDAAAFOAAACr2Z2FzcAAAABAAAYbUAAAACGdseWb8bZfKAABJYAABDTpoZWFkHbNgeQAAAQwAAAA2aGhlYQMPBIcAAAFEAAAAJGhtdHiNLbOMAAAB6AAAEvhsb2NhSxOMRwAAP+AAAAmAbWF4cATWAQMAAAFoAAAAIG5hbWUSryzsAAFWnAAAASJwb3N0q1C4fgABV8AAAC8ScHJlcGgGjIUAAD/YAAAABwABAAAABQCDr0e2xV8PPPUAAwfQAAAAAOGbKiAAAAAA4azrkvId/BgJMwlgAAAABwACAAAAAAAAAAEAAAe8/XwAAAlg8h345wkzAAcAAAAAAAAAAAAAAAAAAAS9AAEAAAS/AJcACQBoAAoAAQAAAAAAAAAAAAAAAAADAAMABASiAZAABQAABPQEkgAAAJIE9ASSAAACqwAyAngAAAILBQkFAAACAASgAADvEgGo+wAAAAAAAAAAQ1REQgGAAA3//we8/XwAAAh0A+hgAACbndUAAAQdBWEAAAAgAAUElAC6BOwAKATsACgE7AAoBOwAKATsACgE7AAoBOwAKATsACgE7AAoBOwAKAb0ACgG9AAoBQgAtATEAKAExACgBMQAoATEAKAExACgBMQAoAVQALQFZAAoBVAAtAVkACgEnAC0BJwAtAScALQEnAC0BJwAtAScALQEnAC0BJwAtAScALQEnAC0BHQAtAU8AKAFPACgBTwAoAU8/XUFPACgBXgAtASwAAQFeAC0AhAAtASwABcCEAC0AhAAIwIQ//4CEAC0AhAAsgIQALQCEAAGAhD/pwIQ/+sEuAB4BLgAeATsALQE7P1lBCwAtAQsAJwELAC0BCz9dwQsALQEQAAUBr4AtAWgALQFoAC0BaAAtAWg/TgEsACnBaAAtAV4AKAFeACgBXgAoAV4AKAFeACgBXgAoAV4AKAFeACgBXgAoAV4AKAFeACgB4QAoATsALQE7AC0BXgAoAUAALQFAAC0BQAAtAUA/twEiAB4BIgAeASIAHgEiAB4BIgAeASI/vUEsACTBKAAMASwAFAEoAAwBKAAMASg/wIFYACoBWAAqAVgAKgFYACoBWAAqAVgAKgFYACoBWAAqAVgAKgFYACoBWAAqATYACgHMAA8BzAAPAcwADwHMAA8BzAAPATEADwEiAAoBIgAKASIACgEiAAoBIgAKASwAGQEsABkBLAAZASwAGQExACgBaAAtAV4AKAEiAB4BLAAZAQ8AGgEPABoBDwAaAQ8AGgEPABoBDwAaAQ8AGgEPABoBDwAaAQ8AGgG1ABoBtQAaASMAKAD8ACQA/AAkAPwAJAD8ACQA/AAkAPwAJAEjACQBJAAkASwAFYEjACQBHwAkAR8AJAEfACQBHwAkAR8AJAEfACQBHwAkAR8AJAEfACQBLAAnQL4AKAEjACQBIwAkASMAJAEjACQBIwAkASUAKAEsAAnBJQAoAHgAJgEsADxBLAA8QSwAPEEsADjBLAA8QSwAPEEsADxBLAAYQSwAPEEsADxBLAAwQHg//AB4P/wAeD/3wQgAKAEIP1DBLAAyQIIAJgCCAB9AggAmAII/AsCCACYAigABgcAAKAElACgBJQAoASwAAEElACgBJT9OgSwAMkElACgBJAAkASQAJAEkACQBJAAkASQAJAEkACQBJAAkASQAJAEkACQBJAAkASQAJAHJACQBIwAoASMAKAEjACQAugAmALoAJgC6ABxAuj+0gPoAHgD6AB4A+gAeAPoAHgD6AB4A+j+sgS0AKADEACYBLAAnwMQAJgDEACYAxD/EwSUAJgElACYBJQAmASUAJgElACYBJQAmASUAJgElACYBJQAmASUAJgElACYBBAAKAYiADAGIgAwBiIAMAYiADAGIgAwBLAAbwQQACgEEAAoBBAAKAQQACgEEAAoA/wAZAP8AGQD/ABkA/wAZAPwAJAElACgBJAAkAPoAHgD/ABkBLAAwQSwAPEEsAC/BLAAeASwAAAEsADBBLD3ZASwANMEsADRBLABTwS4AHgE7AAoBQgAtASwARAEsAApBJwAtASwAGQFeAC0BLAAXQIQALQE7AC0BLAAMQa+ALQFoAC0BLAAmQV4AKAEnACgBOwAtASwAJIEoAAwBIgAKASwABUExAA8BLAAGwV4AHgE7AAoBJz/wgV4/28CEP+WBXj/rgSI/wsFeP+tAhAAtASIACgEsADkBLAASASwAKcEsABdBLAAlQSwAP0EsACNBLAAMwSwAMkEsABLBLD/HASwAEsEsABdBOwAtASwAH8GvgC0BLAAQQSw/dEEsPzTBLAAdQSwALYEsABWBLAAhwSwAKYEsADdBLAAkgSwAJMEsAB9BLAArQSwAGEEsACxBLAAPwSwAMUEkACQBLAADQSwALsEsADLBLAAkwSwAE4EsADOBLAAQwSwAGwEsABTBLAANQSwAH0EsAB9BLAAfQSwAM4EsADOBLAAzgSQAJAEsAA1BLAAdQSwAKYEsACSBLAA2wSwACUEsAC/BLAAtwSw/aAEsPzZBLAAkwSwAIsEsAD7BLAArgSwAD8EsAB8BLAAnQSwAJkEsABZBLAAEQSwAHsEsAC7BLAAtwHg//AEsAC3BIwAoASwACgEsABZBLABigSwADwEsAA8BLAAegSwAH8EsAAzBLAApwSwAHkEsABbBLAAeQSwAI8EhACABIQAuASEAIAEhACUBIQAgASEAGwEhACABIQAgASEAIAEhACABIQAgASEAIAEhACABIQAuASEAIAEhACNBIQAgASEAGwEhACABIQAgASEAIAEhACABIQAgASwAUIC0AB0BLABWQSwAWAEsABIBLABhwSwAToEsAFZBLABUASwATIEsAFCAtAAdASwAVkEsAFgAtAASASwAYcEsAE6BLABWQSwAVAEsAEyBLABQgLQAHQEsAFZBLABYALQAFAEsAGHBLABOgSwAVkEsAFQBLABMgSwAUIC0AB0BLABWQSwAWAEsABIBLABhwSwAToEsAFZBLABUASwATIAAP3LBLAAJQSwAAcEsAAEBLAAHQSwAAcEsAAjBLD/4ASw/+gEsP/1BLD/1wSwAAcEsAAYBLD/+wSwAAYEsP/0BLD/9QIIAKQCCABAAggApASwAXUEsABAAggApAIIAKQD6ABQA8AAZAIIAKQC0ACsA+gAUgSwABsFPABkAwwAKAMMACgEsAC8AggArAPAAHMCCACkBLAAUgSwAAAEsAAABLAAAASwAAAEsAAABLAAAASwAAAEsAAABLAAAASwAJIEsABpBLAApASwAbkEsAHJAm4AkAJuACoC+ABkAvgAPAKoALQCqAA8BLACOASwAIMEsADIBLAAyASwAbkEsAHJBLAAkASwACoEsABkBLAAPASwALQEsAA8BLACOASwAIMEsAAABLAAAASwAAAC0ABQAtAAUASIAFAH0ABQBLAAUASwAEcH0ABQB9AAUASIAFAEsABkBLAAUASwAFAEsABQBLAAUALOAFAEsAAABLAAAAIIAEADcABAA3AAfgNwAHACCAB+AggAcASwAKUD6P8nAlgAPAJYAFADDACMAawAjAPo/v8EsP8nBLAAPASwAFAEsAG5BLAByQSw/LAEsPgCBLD8SQSw/moEsP7hBLD8mwSw/NMEsPzkBLD41gSw+pEEsPr9BLD9bASw/NMEsPy8BLD4NASw+X4EsP3QBLD9twSw/OQEsPzkBLD+9ASw/aMEsP2EBLD8wQSw/BgEsPvUBLD3ugSw+6gEsPvqBLD7tASw/KYEsPwyBLD8ggSw/IIEsPvTBLD7vQSw/DIEsPeCBLD8GASw/IEEsPvcBLD3kASw/PUEsPz1BLABuQSwAckEsP/sBLAA+QSw/+wEsP9tBLD/7AU8AGQFPABkBTwAZASw/+wEsP/sBLAARwSw+zwEsPs8BLD8hQSw/+wEsP/sBLAAZASw/QsEsP5bBLD3cwSwAWwEsAFJBLAApgSwAYYEsAAABLAAAAGnAAAEsAAAAAAAAASwAAAEsAAAAAAAAASEALwEhAB0BIQAigSwAPwEhABEBHQAUASwAH8EhABYBLAApwSEAIAEhAA8BLAAAASwAFcEsAFzBLAAjQAA/LAEsAEaBLACCwAA/csEsACfBLAAqwSwADsEsAAxBLAA/gSwAW0EsAFtBLAA0wSwAHgEsACfBLAAKASwAJsEsAH4BLACCwSwANwEsAILBLACCwSwAgsEsAILBLABbwSwAW8EsAFzBLAAOwSwADEEsABvBLAARwSwADEEsADTBLAAMQSwAEcEsACrBIQAgASEAIAEhACoBIQAgASwANMEhACABIQAgASEAIAEsP2/BIQAgASEAIAEhABtBIQAYgSEAIAEOABQBMQAUASwADMEsACEBLAAhASwAJMEsACTA0gAKAUAACgFeAC0BIgAZASIACgEsACxBIQAkASwAgsEsAILBLACCwSwAgsEsABUBLAAVAa4AEsHwQAeBLABbQSwAW0EsACkBLAAMQSwAG8EsADnBLABDwSwAgsEsAEOBLACCwSwALIEsACyBLAAqwSwADEEsAAxBLAAbwSwAG8EsABvBLAASgSwAG8EsACVBLAAkwSwADsEsACrBLAAKASwAEoEsABQBIQAgASwAKwEsACABLAAAASwAAAEsAAABLAAAASwAAAEsP/nBLAATgSwAC0EsABOBLD/5wSwAE4EsAAtBLAATgSw/2sEsP/nBLAALASwADQEsAA5BLAAOgSwAGcEsAA6BLAAZwlgAIwJYAHuBLAAAASw/7AEsAAABLD/sASwACYEsP+1BLD/3ASw/9wJYAA7CWAAOwlgADsJYAA7CWAAOwlgADsJYACRCWAAOwlgADsJYAA7CWAAOwlgADsEsP+wBLAAPASwADwEsAA8BLAAPASwADwEsAA8BLAAPASwADwEsAJYBLAAPASwADwEsAA8BLAAPASwADwEsAA8BLAAPASwADwEsAA8BLAAPASwADwEsAA8BLAAPASwAlgEsAJYBLAAPASwADwEsAA8BIQAbASwARwEsAA8BLAAPASwARwEsAIIBLACCASw//YEsP/2BLD/9gSw//YEsP/2BLACCASw//YEsP/2BLACCASw//YEsP/2BLD/9gSw//YEsP/2BLABaASw//YEsP/2BLD/9gSw//YEsAIIBLABaASwAWgEsAFoBLD/9gSw//YEsAFoBLD/9gSw//YEsP/2BLD/9gSw//YEsP/2BLABaASwAggEsAIIBLABaASw//YEsP/2BLAAPASwADwEsAA8BLAAPASwADwEsAA8BLAAPASwADwEsAA8BLAAPASwARwEsAEcBLAAPASwADwEsAA8BLAAPASwADwEsAA8BLAAPASwADwEsAA8BLAAPASwADwEsAA8BLAAPASwADwEsAA8BLAAPASwADwEsAA8BLAAPASw//YEsP/2BLD/9gSwAWgEsAFoBLD/9gSw//YEsP/2BLD/9gSwAggEsAFoBLD/9gSwAFAEsAFoBLABaASw//YEsP/2BLABaASw//YEsP/2BLD/9gSwAEsEsAFoBLACCASwAFAEsAFoBLABaASw//YEsP/2BLABaASwAWgEsAFoBLD/9gSw//YEsAFoBLD/9gSw//YEsP/2BLD/9gSw//YEsP/2BLD/9gSw//YEsP+1BLD/ugSw/7UEsABQBLACCASwAggEsP/2BLD/9gSwAEsEsAIIBLACCASwAFAEsAIIBLACCASwAWgEsP/2BLD/9gSw//YEsP/2BLD/9gSw//YEsP/2BLD/9gSw//YEsP/2BLD/9gSw//YEsAFoBLABaASw//YEsP/2BLD/9gSw//YEsAFoBLACCASw//YEsP/2BLABaASw//YEsP/2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IBMAACAVAAACIQAAIBYAACAWAAAB8QAAIBcAACAXAAACKAAAIBgAACAZAAACNAAAIBoAACAaAAACMAAAIBwAACAdAAACMgAAIB4AACAeAAACMQAAICAAACAhAAAD/gAAICIAACAiAAAB7wAAICYAACAmAAAB6QAAIDAAACAwAAAC5QAAIDkAACA6AAACOAAAIEQAACBEAAAB1AAAIEoAACBKAAAB9QAAIHAAACBwAAABygAAIHQAACB5AAABzgAAIHoAACB6AAAC5wAAIHsAACB7AAACtwAAIHwAACB8AAACqQAAIH0AACB+AAACEgAAIH8AACB/AAABGAAAIIAAACCJAAABrAAAIIoAACCKAAAC5gAAIIsAACCLAAACtgAAIIwAACCMAAACqAAAII0AACCOAAACBgAAIKwAACCsAAAClAAAIK8AACCvAAACkwAAILkAACC5AAACmAAAILoAACC6AAAClgAAIL0AACC9AAAClwAAIQIAACECAAABjgAAIQ0AACENAAABjwAAIRMAACETAAAD/QAAIRUAACEVAAABkAAAIRYAACEWAAAEAQAAIRkAACEaAAABkQAAIR0AACEdAAABkwAAISIAACEiAAAD+AAAISQAACEkAAABlAAAIS4AACEuAAAEAAAAIVMAACFUAAAB1wAAIVUAACFeAAAB2wAAIV8AACFfAAAB1QAAIYoAACGKAAAEFAAAIYsAACGLAAAEEwAAIZAAACGQAAADDwAAIZEAACGRAAADCQAAIZIAACGSAAADCwAAIZMAACGTAAADDQAAIZQAACGVAAADEQAAIZYAACGWAAADEAAAIZcAACGXAAADCgAAIZgAACGYAAADDAAAIZkAACGZAAADDgAAIakAACGpAAADFQAAIbAAACGzAAADFgAAId4AACHeAAAEDgAAId8AACHfAAAEDQAAIeQAACHlAAADEwAAIeYAACHmAAADHwAAIecAACHpAAADHAAAIeoAACHqAAAEBgAAIgAAACIAAAAC/gAAIgIAACICAAAC3QAAIgMAACIDAAACqwAAIgQAACIEAAAC+gAAIgUAACIFAAAC0gAAIgYAACIGAAAC2AAAIgcAACIHAAACrQAAIggAACIIAAACpgAAIgkAACIJAAACvQAAIgoAACIKAAACpwAAIgsAACILAAAC9QAAIgwAACIMAAACvAAAIg0AACINAAACoAAAIg8AACIPAAAC2QAAIhEAACIRAAAC2gAAIhIAACISAAACwwAAIhUAACIVAAACogAAIhkAACIZAAACnwAAIhoAACIaAAAC2wAAIh4AACIeAAAC0QAAIicAACIrAAAC0wAAIjQAACI0AAAC+wAAIjUAACI1AAACngAAIjYAACI2AAAC6AAAIkgAACJIAAACzQAAImAAACJgAAACxwAAImEAACJhAAACqgAAImIAACJiAAACvgAAImQAACJkAAACywAAImUAACJlAAACygAAIoIAACKCAAAC8wAAIoMAACKDAAAC9gAAIoQAACKFAAACvwAAIoYAACKHAAAC6QAAIogAACKJAAACugAAIooAACKKAAAC9AAAIosAACKLAAAC9wAAIqIAACKiAAAC8gAAIqMAACKjAAAC+QAAIqQAACKkAAAC+AAAIqUAACKlAAAC/wAAIqYAACKmAAACnQAAIqcAACKnAAACuAAAIqgAACKoAAAC/QAAIqkAACKpAAACrAAAIqoAACKqAAAC/AAAIqsAACKrAAACpQAAIqwAACKsAAACpAAAIq0AACKtAAACwQAAIq4AACKuAAACowAAIq8AACKvAAACuQAAIwAAACMAAAAD+gAAIwIAACMCAAAEBQAAIwMAACMDAAAEAwAAIwQAACMEAAADIAAAIwUAACMFAAAEEgAAIwYAACMGAAAEEQAAIxAAACMQAAAC6wAAIxgAACMYAAAEDwAAIyAAACMgAAACrwAAIyEAACMhAAACrgAAIyQAACMkAAADIQAAIyUAACMlAAAEDAAAIyYAACMmAAAECQAAIycAACMnAAAEBwAAIygAACMoAAAECwAAIysAACMrAAAECAAAI4cAACOHAAAD8QAAI4gAACOIAAAEBAAAI4sAACOLAAAEAgAAI5sAACObAAAC4AAAI5wAACOdAAAC3gAAI54AACOeAAAC4wAAI58AACOgAAAC4QAAI6EAACOhAAACtQAAI6IAACOjAAACswAAI6QAACOkAAAC8QAAI6UAACOmAAAC7wAAI6cAACOnAAACsgAAI6gAACOoAAACsQAAI6kAACOpAAACsAAAI6oAACOqAAACoQAAI6sAACOrAAAC7gAAI6wAACOsAAAC7QAAI60AACOtAAAC7AAAI84AACPOAAAEEAAAI88AACPPAAAECgAAJQAAACUAAAADWgAAJQEAACUBAAADqgAAJQIAACUCAAADWwAAJQMAACUDAAADtwAAJQQAACUEAAADzgAAJQUAACUFAAADsAAAJQYAACUGAAADzwAAJQcAACUHAAADsQAAJQgAACUIAAADywAAJQkAACUJAAADrQAAJQoAACUKAAADzAAAJQsAACULAAADrgAAJQwAACUMAAADUQAAJQ0AACUNAAADoQAAJQ4AACUOAAADmwAAJQ8AACUPAAADqQAAJRAAACUQAAADUwAAJREAACURAAADnwAAJRIAACUSAAADmQAAJRMAACUTAAADqAAAJRQAACUUAAADUgAAJRUAACUVAAAD5QAAJRYAACUWAAAD3wAAJRcAACUXAAADtgAAJRgAACUYAAADVAAAJRkAACUZAAAD4wAAJRoAACUaAAAD3QAAJRsAACUbAAADtAAAJRwAACUcAAADWAAAJR0AACUdAAAD6wAAJR4AACUeAAAD3gAAJR8AACUfAAADnAAAJSAAACUgAAAD6AAAJSEAACUhAAADogAAJSIAACUiAAAD5AAAJSMAACUjAAADugAAJSQAACUkAAADWQAAJSUAACUlAAAD6gAAJSYAACUmAAAD3AAAJScAACUnAAADmgAAJSgAACUoAAAD5wAAJSkAACUpAAADoAAAJSoAACUqAAAD4gAAJSsAACUrAAADuQAAJSwAACUsAAADVgAAJS0AACUtAAADvAAAJS4AACUuAAAD0wAAJS8AACUvAAADngAAJTAAACUwAAADmAAAJTEAACUxAAAD1gAAJTIAACUyAAADvwAAJTMAACUzAAADpwAAJTQAACU0AAADVwAAJTUAACU1AAADvQAAJTYAACU2AAAD1AAAJTcAACU3AAAD4QAAJTgAACU4AAAD2wAAJTkAACU5AAAD1wAAJToAACU6AAADwAAAJTsAACU7AAADswAAJTwAACU8AAADVQAAJT0AACU9AAADvgAAJT4AACU+AAAD1QAAJT8AACU/AAAD6QAAJUAAACVAAAAD2gAAJUEAACVBAAADnQAAJUIAACVCAAAD5gAAJUMAACVDAAADwgAAJUQAACVEAAAD2QAAJUUAACVFAAADuwAAJUYAACVGAAAD0gAAJUcAACVHAAADowAAJUgAACVIAAAD4AAAJUkAACVJAAAD2AAAJUoAACVKAAADwQAAJUsAACVLAAADuAAAJUwAACVMAAADxgAAJU0AACVNAAADpAAAJU4AACVOAAADxwAAJU8AACVPAAADpQAAJVAAACVQAAADbQAAJVEAACVRAAADYQAAJVIAACVTAAADdQAAJVQAACVUAAADaQAAJVUAACVVAAADXwAAJVYAACVWAAADXgAAJVcAACVXAAADYgAAJVgAACVYAAADdAAAJVkAACVZAAADcwAAJVoAACVaAAADaAAAJVsAACVbAAADZQAAJVwAACVcAAADZAAAJV0AACVdAAADYwAAJV4AACVfAAADZgAAJWAAACVgAAADbAAAJWEAACViAAADXAAAJWMAACVjAAADYAAAJWQAACVlAAADcQAAJWYAACVmAAADawAAJWcAACVoAAADbwAAJWkAACVpAAADagAAJWoAACVqAAADeAAAJWsAACVrAAADdwAAJWwAACVsAAADbgAAJW0AACVwAAAD7AAAJXEAACVxAAADxQAAJXIAACVyAAADxAAAJXMAACVzAAADwwAAJXQAACV0AAADyQAAJXUAACV1AAAD0AAAJXYAACV2AAADzQAAJXcAACV3AAADyAAAJXgAACV4AAADqwAAJXkAACV5AAADsgAAJXoAACV6AAADrwAAJXsAACV7AAADpgAAJXwAACV8AAADygAAJX0AACV9AAAD0QAAJX4AACV+AAADrAAAJX8AACV/AAADtQAAJaAAACWrAAADeQAAJawAACWtAAADTgAAJa4AACWuAAADTQAAJa8AACWvAAADUAAAJbIAACWyAAADjgAAJbYAACW2AAADjwAAJboAACW6AAADkgAAJbwAACW8AAADkAAAJcAAACXAAAADkQAAJcQAACXEAAADkwAAJcYAACXHAAADSgAAJckAACXJAAADPwAAJcoAACXKAAADTAAAJcsAACXLAAADMgAAJc4AACXOAAADQAAAJc8AACXPAAADMQAAJdAAACXTAAADNAAAJdUAACXVAAADOgAAJdYAACXXAAADOAAAJdkAACXbAAADQQAAJdwAACXfAAADRgAAJeAAACXhAAADRAAAJeIAACXkAAADlQAAJeUAACXlAAADlAAAJecAACXrAAADhQAAJe8AACXvAAADMwAAJfAAACXzAAADigAAJfQAACX3AAADOwAAJxMAACcTAAAD8AAAJ3AAACdxAAACEAAA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VW5VhFWaVcRWAVY/Vn1WulcEV15XmFe+V+NYBFglWDtYUVhnWHxYjFilWMJY0FjeWPNZCFkYWSlZOVlKWWNZdlmJWZxZr1m8WcpZ4ln8WhFaJlpHWltadVqPWqVau1rTWuxbBlsgW0JbYluDW5dbxFveW/ZcEFwoXD5cVFxpXH5coVzEXNJc6F0iXT9dYl2FXbVd4l4TXlxeal5+XpReql6/XtNe8V8SXzNfUl9zX4FfiV+XX59frV+7X8lf1l/jX/FgBGAVYCtgPGBSYGtgf2CQYKZgt2DNYOdg/GESYSBhNGFFYVZhZGFyYYVhp2HKYdhh82IPYh1iMWJCYlViZmJ0Yo5iomK2YtJi6GL+YxdjLWNDY11jeGODY5JjoWO0Y8lj12PkY/dkFmQ1ZEJkWmRzZIFklGSwZMZk3GT1ZQtlIWU7ZVZlb2WCZZhlqWW/ZdBl6mX+ZhVmJmY9Zk5mZ2Z7Zo9mqWa9ZtFm7GcGZyBnO2dPZ2pnoGfraAVoSGiFaMho72kRaUxpWWlsaaVpvWnfaghqWGqRaqVrDWsoa11rlWvJa/1sKGzwbQxtLW1Pbctt/W4ebjluam6UbpRulG7vbz5vum/Pb9xv8HCBcK5wyXDWcOZxDXEucUhxsHHTcgFyKHI8cldyd3KcctFzEnNEc4ZzoHPAc+d0EnR5dPB1FnVMdWx1iHWtdeJ2PHZNduJ3AHctd1x36nhEeFB45XkDeRB5GXkieSt5W3l2eZh5unnbefB6C3omekJ6Xnpzeoh6nHqwesR62Hsoe1d7lXvKe/B8H3xZfH98s3zefPp9IH1wfZ991H4Sfjd+Zn6gfsZ+8X8lf0F/Z3+Hf6eACoBvgOSBNoFYgYiBuoHCgdCB3YHqgfiCB4IQgh2CLII8glOCZoJ4gpGCs4LXguSC8oMJgxKDIoMyg0aDVINig4iDkYOag6ODrIO1g8eD0IPZg+KD64P0hBiEJ4QvhDiEQYRKhFOEXIRlhHeEgISJhJKEm4SjhLKEwYTJhOSE84UChTCFOIWyhm6Gd4Z3hp2GnQACALoAAAPaBcgAAwAHAAAzESERJSERIboDIP1EAlj9qAXI+jhkBQAAAgAoAAAExAVkAAkADQAANwEhAQcjAyEDIwEhAyMoAcQBFAHEGIpy/YxyigEuAhDwMCQFQPrAJAFc/qQB9ALY//8AKAAABMQHFQIi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AFABzARgA6wAAwAHAAABESERIxEhEQRg/kig/kgDrP4gAeD+IAHgAAACAWj+mANIB/gAAwAHAAABESERAREhEQNI/iAB4P4gAlj8QAPABaD8QAPAAAEBaPwYA0gDDAADAAABESERA0j+IAMM+QwG9AAB//b8GAS6A6wABwAAAREhESERIREEuv6O/iD+jgOs/iD6TAW0AeAAAf/2/BgDSAOsAAUAAAERIREhEQNI/iD+jgOs+GwFtAHgAAEBaPwYBLoDrAAFAAABESERIREEuv6O/iADrP4g+kwHlAAB//YBzAS6A6wAAwAAAREhEQS6+zwDrP4gAeAAAf/2AcwCqAOsAAMAAAERIRECqP1OA6z+IAHgAAH/9gHMBLoDrAAHAAABFSEVIRUhEQKoAhL97v1OA6ygoKAB4AAABABLAcwEZQOsAAMABwALAA8AAAEzESMBMxEjATMRIwEzESMBd5aWASyWlv2olpYDhJaWA6z+IAHg/iAB4P4gAeD+IAAEAWj9+ANICEgAAwAHAAsADwAAJSERIREhESERIREhESERIQFoAeD+IAHg/iAB4P4gAeD+IBT95ATY/eQE2P3kBNj95AAAAQIIAcwEugOsAAMAAAERIREEuv1OA6z+IAHgAAMAUAHMBGADrAADAAcACwAAAREjESERIxEhESMRAUDwAoDwAoDwA6z+IAHg/iAB4P4gAeAAAAMBaP34A0gImAADAAcACwAAASERIREhESERIREhAWgB4P4gAeD+IAHg/iABGPzgBuD84Abg/OAAAQFoAmwDSAfQAAMAAAERIREDSP4gB9D6nAVkAAH/9gHMBLoH0AAHAAABESERIREhEQNIAXL7PAFyB9D73P4gAeAEJAAB//YBzANIB9AABQAAAREhESERA0j8rgFyB9D5/AHgBCQAAQFo/BgDSAfQAAcAAAERIxEjESMRA0igoKAH0Pqc+awGVAVkAAABAWgBzAS6B9AABQAAAREhESERA0gBcvyuB9D73P4gBgQAAQFo/BgDSAfQAAMAAAERIREDSP4gB9D0SAu4AAH/9vwYBLoH0AALAAABESERIREhESERIREDSAFy/o7+IP6OAXIH0Pvc/iD6TAW0AeAEJAAB//b8GANIB9AABwAAAREhESERIREDSP4g/o4BcgfQ9EgFtAHgBCQAAQFo/BgEugfQAAcAAAERIREhESERA0gBcv6O/iAH0Pvc/iD6TAu4AAH/9vwYBLoH0AANAAABETMVIRUhESERIREhEQKooAFy/o7+IP6OAhIH0PvcoKD5rAW0AeAEJAAAAf/2/BgEugOsAAkAAAEVIRUhESMRIRECqAIS/e6g/e4DrKCg+awFtAHgAAAB//YBzAS6B9AACQAAAREhFSEVIREhEQKoAhL97v1OAhIH0Ps8oKAB4AQkAAH/9vwYBLoH0AALAAABESEVIREjESERIRECqAIS/e6g/e4CEgfQ+zyg+awFtAHgBCQAAf/2/BgEugOsAAkAAAERIREhESE1ITUEuv6O/iD+jgFyA6z+IPpMBlSgoAAB//YBzAS6B9AACQAAAREhESE1ITUhEQNIAXL8rv6OAXIH0Pvc/iCgoATEAAH/9vwYBLoH0AALAAABESERIREhESE1IREDSAFy/o7+IP6OAXIH0Pvc/iD6TAZUoATEAAAB//b8GAS6B9AADQAAAREhFSEVIxEjESERIREDSAFy/o6goP3uAXIH0Ps8oKD6TAW0AeAEJP///7X9hQT7By0CIgPEAAAAAgPFAAAAAf+6/YUE+wctAAMAABMHATdKkASwkQctR/afSAAAAf+1/YUE9gctAAMAAAEXAScEZpD7UJEHLUf2n0gAAgBQAmwEYAMMAAMABwAAARUhNSMVITUEYP5IoP5IAwygoKCgAAACAgj9+AKoCJgAAwAHAAABESMRExEjEQKooKCgAvj7AAUABaD7AAUAAAABAgj8GAKoAwwAAwAAAREjEQKooAMM+QwG9AAAAf/2AmwCqAMMAAMAAAEVITUCqP1OAwygoAAB//YBzAS6A6wABwAAAREhNSE1ITUEuv1O/e4CEgOs/iCgoKAAAAQASwJsBGUDDAADAAcACwAPAAABMxUjJTMVIyUzFSMlMxUjAXeWlgEslpb9qJaWA4SWlgMMoKCgoKCgoAAABAII/fgCqAhIAAMABwALAA8AACUzESMRMxEjETMRIxEzESMCCKCgoKCgoKCgFP3kBNj95ATY/eQE2P3kAAABAggCbAS6AwwAAwAAARUhNQS6/U4DDKCgAAMAUAJsBGADDAADAAcACwAAARUjNSEVIzUhFSM1AUDwAoDwAoDwAwygoKCgoKAAAAMCCP34AqgImAADAAcACwAAATMRIxEzESMRMxEjAgigoKCgoKABGPzgBuD84Abg/OAAAQIIAmwCqAfQAAMAAAERIxECqKAH0PqcBWQAAAEBaPwYA0gH0AAHAAABETMRIREzEQKooP4goAfQ+zz5DAb0BMQAAf/2/BgEugfQAA0AAAERIREhESERITUhNTMRAqgCEv6O/iD+jgFyoAfQ+9z+IPpMBlSgoAQkAAAB//b8GAS6A6wACQAAAREhESMRITUhNQS6/e6g/e4CEgOs/iD6TAZUoKAAAAH/9gHMBLoH0AAJAAABESERITUhNSERAqgCEv1O/e4CEgfQ+9z+IKCgBMQAAf/2/BgEugfQAAsAAAERIREhESMRITUhEQKoAhL97qD97gISB9D73P4g+kwGVKAExAAB//b8GAS6A6wACQAAARUhFSERIREhEQNIAXL+jv4g/o4DrKCg+awFtAHgAAH/9gHMBLoH0AAJAAABESEVIRUhESERA0gBcv6O/K4BcgfQ+zygoAHgBCQAAf/2/BgEugfQAAsAAAERIRUhESERIREhEQNIAXL+jv4g/o4BcgfQ+zyg+awFtAHgBCQAAAH/9vwYBLoH0AANAAABESERIREjESM1ITUhEQNIAXL97qCg/o4BcgfQ+9z+IPpMBbSgoATEAAH/9vwYBLoH0AALAAABESEVIREjESE1IREDSAFy/e6g/e4BcgfQ+zyg+awGVKAExAAAAf/2AmwEugfQAAcAAAERIRUhNSERA0gBcvs8AXIH0Ps8oKAExAAB//b8GANIB9AACQAAAREjESMRITUhEQNIoKD97gFyB9D6nPmsBlSgBMQAAAH/9gJsA0gH0AAFAAABESE1IREDSPyuAXIH0PqcoATEAAABAWj8GAS6B9AACQAAAREhFSERIxEjEQNIAXL97qCgB9D7PKD5rAZUBWQAAAEBaAJsBLoH0AAFAAABESEVIREDSAFy/K4H0Ps8oAVkAAAB//b8GAS6B9AACwAAAREhESERIREhESERAqgCEv6O/iD+jgISB9D73P4g+kwFtAHgBCQAAf/2AcwEugfQAAcAAAERIREhESERAqgCEvs8AhIH0Pvc/iAB4AQkAAH/9vwYA0gH0AAJAAABETMRIREhESERAqig/iD+jgISB9D73PhsBbQB4AQkAAAB//YBzAKoB9AABQAAAREhESERAqj9TgISB9D5/AHgBCQAAQFo/BgEugfQAAkAAAER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ADMA7QA0ADUBKAEpASoANgErAOQA+wEsAS0BLgA3AS8BMAExATIAOADUATMA1QBoANYBNAE1ATYBNwE4ADkAOgE5AToBOwE8ADsAPADrAT0AuwE+AD0BPwDmAUABQQFCAUMBRAFFAEQAaQFGAGsAbABqAUcBSABuAG0AoAFJAEUARgD+AQAAbwFKAUsARwDqAUwBAQBIAHABTQFOAHIAcwFPAHEBUAFRAEkASgD5AVIBUwFUAEsBVQFWAEwA1wB0AVcAdgB3AVgAdQFZAVoBWwFcAE0BXQFeAE4BXwFgAE8BYQFiAWMBZADjAFAAUQFlAWYBZwFoAWkAeABSAHkBagB7AHwAegFrAWwAoQFtAH0AsQBTAO4AVABVAW4BbwFwAFYBcQDlAPwBcgFzAIkAVwF0AXUBdgF3AFgAfgF4AIAAgQB/AXkBegF7AXwBfQBZAFoBfgF/AYABgQBbAFwA7AGCALoBgwBdAYQA5wGFAYYBhwGIAYkBigGLAYwBjQGOAY8BkAGRAJ0AngGSAZMBlAGVAZYBlwGYAZkBmgGbAZwBnQGeAZ8BoAGhAaIBowGkAaUBpgGnAagBqQGqAasBrAGtAa4BrwGwAbEBsgGzAbQBtQG2AbcBuAG5AboBuwG8Ab0BvgG/AcABwQHCAcMBxAHFAcYBxwHIAckBygHLAcwBzQHOAc8B0AHRAdIB0wHUAdUB1gCbAdcB2AHZAdoB2wHcAd0B3gHfAeAB4QHiAeMB5AHlAeYB5wHoAekB6gHrAewB7QHuAe8B8AHxAfIB8wH0AfUB9gH3AfgB+QH6AfsB/AH9Af4B/wIAAgECAgIDAgQCBQIGAgcCCAIJAgoCCwIMAg0AEwAUABUAFgAXABgAGQAaABsAHAIOAg8CEAIRAhICEwIUAhUCFgIXAhgCGQIaAhsCHAIdAh4CHwIgAiECIgIjAiQCJQImAicCKAIpAioCKwIsAi0CLgIvAjACMQIyAjMCNAI1AjYCNwI4AjkCOgI7AjwCPQI+Aj8CQAJBAkIAvAJDAPQCRAJFAPUA9gJGAkcCSAJJAkoCSwJMAk0CTgJPABEADwAdAB4AqwAEAKMAIgCiAMMAhwANAlAABgASAD8CUQJSAlMCVAJVAlYCVwJYAlkCWgJbAlwCXQJeAl8CYAJhAmICYwALAAwAXgBgAD4AQAJkAmUCZgJnAmgCaQJqAmsCbAJtAm4CbwJwAnECcgJzAnQAEAJ1ALIAswJ2AncCeAJ5AEICegJ7AnwCfQJ+An8CgAKBAMQAxQC0ALUAtgC3AKkAqgC+AL8ABQAKAoICgwKEAoUChgKHAogCiQKKAosCjAKNAo4CjwKQApECkgKTApQClQKWApcCmAKZApoCmwKcAp0CngKfAqACoQKiAqMCpAKlAqYCpwKoAqkCqgKrAqwCrQKuAq8CsAKxArICswK0ArUCtgK3ArgCuQK6ArsCvAK9Ar4CvwLAAsECwgLDAsQCxQLGAscCyALJAsoCywLMAs0CzgLPAAMC0ALRAtIC0wLUAIQAvQAHAtUC1gCmAtcC2ALZAIUAlgLaAtsC3ALdAt4C3wLgAuEC4gLjAuQC5QLmAucC6ALpAuoC6wLsAu0C7gLvAvAC8QLyAvMC9AL1AvYC9wL4AvkC+gL7AvwC/QL+Av8DAAAOAO8A8AC4ACAAjwAhAB8AlQCUAJMApwBhAKQAQQCSAwEDAgMDAwQDBQCcAKgAmgCZAKUAlwCYAwYDBwMIAwkDCgMLAAgAxgMMAw0DDgMPAxADEQMSAxMDFAMVAxYDFwMYAxkDGgMbAxwDHQMeAx8DIAMhAyIDIwMkAyUDJgMnAygDKQMqAysDLAMtAy4DLwMwAzEDMgMzAzQDNQM2AzcDOAM5AzoDOwM8Az0DPgM/A0ADQQNCA0MDRANFA0YDRwNIA0kDSgNLA0wDTQNOA08DUANRA1IDUwNUA1UDVgNXA1gDWQNaA1sDXANdA14DXwNgA2EDYgNjA2QDZQNmA2cDaANpA2oDawNsA20DbgNvA3ADcQC5A3IDcwN0A3UDdgN3A3gDeQN6A3sDfAN9A34DfwOAA4EDggODA4QDhQOGA4cDiAOJA4oDiwOMA40DjgOPA5ADkQOSA5MDlAOVA5YDlwOYA5kDmgObA5wDnQOeA58DoAOhA6IDowOkA6UDpgOnA6gDqQOqA6sDrAOtA64DrwOwA7EDsgOzA7QDtQO2A7cDuAO5A7oDuwO8A70DvgO/A8ADwQPCA8MDxAPFA8YDxwPIA8kDygPLA8wDzQPOA88D0APRA9ID0wPUA9UD1gPXA9gD2QPaA9sD3APdA94D3wPgA+ED4gPjA+QD5QPmA+cD6APpA+oD6wPsA+0D7gPvA/AD8QPyA/MD9AP1A/YD9wP4A/kD+gP7A/wD/QP+A/8EAAQBBAIEAwQEBAUEBgQHBAgECQQKBAsEDAQNBA4EDwQQBBEEEgQTBBQEFQQWACMACQCIAIYAiwCKAIwAgwQXAF8A6AQYAIIAwgQZBBoEGwQcBB0EHgQfBCAEIQQiBCMEJAQlBCYEJwQoBCkEKgQrBCwELQQuBC8EMAQxBDIEMwQ0BDUENgQ3BDgEOQQ6BDsEPAQ9BD4EPwRABEEEQgRDBEQERQRGBEcESARJBEoESwRMBE0ETgRPBFAEUQRSBFMEVARVBFYEVwRYBFkEWgRbBFwEXQReBF8EYARhBGIEYwRkBGUEZgRnBGgEaQRqBGsEbARtBG4EbwRwBHEEcgRzBHQEdQR2BHcEeAR5BHoEewR8BH0EfgR/BIAEgQSCBIMEhASFBIYEhwSIBIkEigSLBIwEjQSOBI8EkASRBJIEkwSUBJUElgSXBJgEmQSaBJsEnASdBJ4EnwSgBKEEogSjBKQEpQSmBKcEqASpBKoEqwSsBK0ErgCOANwAQwCNAN8A2ADhANsA3QDZANoA3gDgBK8EsASxBLIEswS0BLUEtgS3BLgEuQS6BLsEvAS9BL4EvwTABMEEwgTDBMQExQTGBMcEyATJBMoGQWJyZXZlB0FtYWNyb24HQW9nb25lawdBRWFjdXRlC0NjaXJjdW1mbGV4CkNkb3RhY2NlbnQGRGNhcm9uBkRjcm9hdAZFYnJldmUGRWNhcm9uCkVkb3RhY2NlbnQHRW1hY3JvbgdFb2dvbmVrC0djaXJjdW1mbGV4B3VuaTAxMjIKR2RvdGFjY2VudARIYmFyC0hjaXJjdW1mbGV4AklKBklicmV2ZQpJZG90YWNjZW50B0ltYWNyb24HSW9nb25lawZJdGlsZGULSmNpcmN1bWZsZXgHdW5pMDEzNgZMYWN1dGUGTGNhcm9uB3VuaTAxM0IETGRvdAZOYWN1dGUGTmNhcm9uB3VuaTAxNDUDRW5nBk9icmV2ZQ1PaHVuZ2FydW1sYXV0B09tYWNyb24LT3NsYXNoYWN1dGUGUmFjdXRlBlJjYXJvbgd1bmkwMTU2BlNhY3V0ZQtTY2lyY3VtZmxleAd1bmkwMjE4B3VuaTFFOUUEVGJhcgZUY2Fyb24HdW5pMDE2Mgd1bmkwMjFBBlVicmV2ZQ1VaHVuZ2FydW1sYXV0B1VtYWNyb24HVW9nb25lawVVcmluZwZVdGlsZGUGV2FjdXRlC1djaXJjdW1mbGV4CVdkaWVyZXNpcwZXZ3JhdmULWWNpcmN1bWZsZXgGWWdyYXZlBlphY3V0ZQpaZG90YWNjZW50A0MuMQNOLjEDTy4xA1MuMQNaLjEGYWJyZXZlB2FtYWNyb24HYW9nb25lawdhZWFjdXRlC2NjaXJjdW1mbGV4CmNkb3RhY2NlbnQGZGNhcm9uBmVicmV2ZQZlY2Fyb24KZWRvdGFjY2VudAdlbWFjcm9uB2VvZ29uZWsLZ2NpcmN1bWZsZXgHdW5pMDEyMwpnZG90YWNjZW50BGhiYXILaGNpcmN1bWZsZXgGaWJyZXZlC3VuaTAxMzEwMkQ5AmlqB2ltYWNyb24HaW9nb25lawZpdGlsZGUHdW5pMDIzNwtqY2lyY3VtZmxleAd1bmkwMTM3DGtncmVlbmxhbmRpYwZsYWN1dGUGbGNhcm9uB3VuaTAxM0MEbGRvdAZuYWN1dGULbmFwb3N0cm9waGUGbmNhcm9uB3VuaTAxNDYDZW5nBm9icmV2ZQ1vaHVuZ2FydW1sYXV0B29tYWNyb24Lb3NsYXNoYWN1dGUGcmFjdXRlBnJjYXJvbgd1bmkwMTU3BnNhY3V0ZQtzY2lyY3VtZmxleAd1bmkwMjE5BHRiYXIGdGNhcm9uB3VuaTAxNjMHdW5pMDIxQgZ1YnJldmUNdWh1bmdhcnVtbGF1dAd1bWFjcm9uB3VvZ29uZWsFdXJpbmcGdXRpbGRlBndhY3V0ZQt3Y2lyY3VtZmxleAl3ZGllcmVzaXMGd2dyYXZlC3ljaXJjdW1mbGV4BnlncmF2ZQZ6YWN1dGUKemRvdGFjY2VudANjLjEDbi4xA28uMQNzLjEDei4xCngubXVsdGlwbHkKaS5zYWx0X2xvdwpqLnNhbHRfbG93Cmwuc2FsdF9sb3cIdy5zcGFjZXIPeC5tdWx0aXBseS50b3NmCndfd193LmxpZ2EHdW5pMjA3Rgd1bmkwMzdGBUFscGhhBEJldGEFR2FtbWEHdW5pMDM5NAdFcHNpbG9uBFpldGEDRXRhBVRoZXRhBElvdGEFS2FwcGEGTGFtYmRhAk11Ak51AlhpB09taWNyb24CUGkDUmhvBVNpZ21hA1RhdQdVcHNpbG9uA1BoaQNDaGkDUHNpB3VuaTAzQTkKQWxwaGF0b25vcwxFcHNpbG9udG9ub3MIRXRhdG9ub3MJSW90YXRvbm9zDE9taWNyb250b25vcwxVcHNpbG9udG9ub3MKT21lZ2F0b25vcwxJb3RhZGllcmVzaXMPVXBzaWxvbmRpZXJlc2lzB3VuaTAzNzAHdW5pMDM3Mgd1bmkwMzc2B3VuaTAzRDgHdW5pMDNEQQd1bmkwM0RDB3VuaTAzREUHdW5pMDNFMAd1bmkwM0NGCFVwc2lsb24xB3VuaTAzRDMHdW5pMDNENAd1bmkwM0Y0B3VuaTAzRjcHdW5pMDNGOQd1bmkwM0ZBB3VuaTAzRkQHdW5pMDNGRQd1bmkwM0ZGBWFscGhhBGJldGEFZ2FtbWEFZGVsdGEHZXBzaWxvbgR6ZXRhA2V0YQV0aGV0YQRpb3RhBWthcHBhBmxhbWJkYQd1bmkwM0JDAm51AnhpB29taWNyb24DcmhvBnNpZ21hMQVzaWdtYQN0YXUHdXBzaWxvbgNwaGkDY2hpA3BzaQVvbWVnYQlpb3RhdG9ub3MMaW90YWRpZXJlc2lzEWlvdGFkaWVyZXNpc3Rvbm9zDHVwc2lsb250b25vcw91cHNpbG9uZGllcmVzaXMUdXBzaWxvbmRpZXJlc2lzdG9ub3MMb21pY3JvbnRvbm9zCm9tZWdhdG9ub3MKYWxwaGF0b25vcwxlcHNpbG9udG9ub3MIZXRhdG9ub3MHdW5pMDM3MQd1bmkwMzczB3VuaTAzNzcHdW5pMDM3Qgd1bmkwMzdDB3VuaTAzN0QHdW5pMDNEOQd1bmkwM0RCB3VuaTAzREQHdW5pMDNERgd1bmkwM0UxB3VuaTAzRDcHdW5pMDNEMAZ0aGV0YTEEcGhpMQZvbWVnYTEHdW5pMDNGMAd1bmkwM0YxB3VuaTAzRjIHdW5pMDNGMwd1bmkwM0Y1B3VuaTAzRjgHdW5pMDNGQgd1bmkwM0ZDB3VuaTAzN0EHdW5pMTQwNQd1bmkxNDBBBnUxRDUzOQd1bmkyMTAyB3VuaTIxMEQHdW5pMjExNQd1bmkyMTE5B3VuaTIxMUEHdW5pMjExRAd1bmkyMTI0CXplcm8uemVybwl6ZXJvLnRvc2YOemVyby56ZXJvLnRvc2YIb25lLnRvc2YIdHdvLnRvc2YKdGhyZWUudG9zZglmb3VyLnRvc2YJZml2ZS50b3NmCHNpeC50b3NmCnNldmVuLnRvc2YKZWlnaHQudG9zZgluaW5lLnRvc2YOemVyby50b3NmLnplcm8HdW5pMjA4MAd1bmkyMDgxB3VuaTIwODIHdW5pMjA4Mwd1bmkyMDg0B3VuaTIwODUHdW5pMjA4Ngd1bmkyMDg3B3VuaTIwODgHdW5pMjA4OQl6ZXJvLmRub20HdW5pMDBCOQh0d28uZG5vbQp0aHJlZS5kbm9tCWZvdXIuZG5vbQlmaXZlLmRub20Ic2l4LmRub20Kc2V2ZW4uZG5vbQplaWdodC5kbm9tCW5pbmUuZG5vbQl6ZXJvLm51bXIIb25lLm51bXIIdHdvLm51bXIKdGhyZWUubnVtcglmb3VyLm51bXIJZml2ZS5udW1yCHNpeC5udW1yCnNldmVuLm51bXIKZWlnaHQubnVtcgluaW5lLm51bXIHdW5pMjA3MAl1bmkwMEI5LjEHdW5pMDBCMgd1bmkwMEIzB3VuaTIwNzQHdW5pMjA3NQd1bmkyMDc2B3VuaTIwNzcHdW5pMjA3OAd1bmkyMDc5B3VuaTIxNUYIb25ldGhpcmQJdHdvdGhpcmRzB3VuaTIxNTUHdW5pMjE1Ngd1bmkyMTU3B3VuaTIxNTgHdW5pMjE1OQd1bmkyMTVBCW9uZWVpZ2h0aAx0aHJlZWVpZ2h0aHMLZml2ZWVpZ2h0aHMMc2V2ZW5laWdodGhzB3VuaTIwMTYHdW5pMjA0QQx1bmkwMEExLmNhc2UMdW5pMDBCRi5jYXNlC3VuaTAwMkUwMDJFCXVuaTAwMkEuMQ51bmkwMDJFLnNwYWNlcgxjb2xvbi5zcGFjZXIOdW5pMDAzQi5zcGFjZXIOdW5pMDAyMS5zcGFjZXIOdW5pMDAzRi5zcGFjZXIOdW5pMDAyQS5zcGFjZXIOdW5pMDAyMy5zcGFjZXIMc2xhc2guc3BhY2VyDnVuaTAwNUMuc3BhY2VyDHVuaTAwNUMuc3MwNhJ1bmkwMDVDLnRoaWNrLnNzMDYHY29sb24uMQd1bmkyMDhEB3VuaTIwOEUHdW5pMzAwQwd1bmkzMDBEB3VuaTI3NzAHdW5pMjc3MQd1bmkyMDdEB3VuaTIwN0UJdW5pMDAyOC4xCXVuaTAwMjkuMQl1bmkwMDdCLjEJdW5pMDA3RC4xCXVuaTAwNUIuMQl1bmkwMDVELjEHdW5pRkY2Mgd1bmlGRjYzDnVuaTAwN0Iuc3BhY2VyDnVuaTAwNUIuc3BhY2VyDnVuaTAwNUQuc3BhY2VyB3VuaTAwQUQHdW5pMjAxNQpmaWd1cmVkYXNoB3VuaTJFM0IHdW5pMkUzQQ11bmRlcnNjb3JlZGJsCXVuaTAwMkQuMQl1bmkwMEFELjEJdW5pMjAxMy4xCXVuaTIwMTQuMQl1bmkwMDJELjIOdW5pMDAyRC5zcGFjZXIOdW5pMDA1Ri5zcGFjZXILdW5pMjAzOTIwMzkJdW5pMDBCQi4xCXVuaTIwMzkuMQl1bmkyMDNBLjEMdW5pMDAyOC5kbm9tDHVuaTAwMjkuZG5vbRB1bmkwMDJEMDAyRC5saWdhFHVuaTAwMkQwMDJEMDAyRC5saWdhEHVuaTAwMkQwMDdFLmxpZ2EQdW5pMDA3Ql9iYXIubGlnYRB1bmkwMDVCX2Jhci5saWdhEHVuaTAwNUQwMDIzLmxpZ2EQdW5pMDAyRTAwMkQubGlnYQ11bmkwMDJFMDAyRS4xD3VuaTAwMkUwMDJFMDAyRRZ1bmkwMDJFMDAyRV9lcXVhbC5saWdhEmxlc3NfdW5pMDAyRTAwMkUuMRB1bmkwMDJFMDAzRi5saWdhEnVuaTAwMkVfZXF1YWwubGlnYQtjb2xvbl9jb2xvbhFjb2xvbl9jb2xvbl9jb2xvbhZjb2xvbl9jb2xvbl9lcXVhbC5saWdhEGNvbG9uX2VxdWFsLmxpZ2ELdW5pMDAzQjAwM0ILdW5pMDAyMTAwMjEUdW5pMDAyMTAwMjEwMDJFLmxpZ2ESdW5pMDAyMV9lcXVhbC5saWdhGHVuaTAwMjFfZXF1YWxfZXF1YWwubGlnYRB1bmkwMDNGMDAyRS5saWdhC3VuaTAwM0YwMDNGEnVuaTAwM0ZfZXF1YWwubGlnYQt1bmkwMDJBMDAyQQ91bmkwMDJBMDAyQTAwMkEQdW5pMDAyQTAwM0UubGlnYQ11bmkwMDJBX3NsYXNoEHVuaTAwMjMwMDI4LmxpZ2EJdW5pMDA3Qi4yEHVuaTAwMjMwMDVCLmxpZ2ESdW5pMDAyM19jb2xvbi5saWdhEHVuaTAwMjMwMDIxLmxpZ2EJdW5pMDAzRi4xEnVuaTAwMjNfZXF1YWwubGlnYRB1bmkwMDIzMDA1Ri5saWdhFHVuaTAwMjMwMDVGMDAyOC5saWdhDXNsYXNoX3VuaTAwMkESc2xhc2hfdW5pMDAzRS5saWdhC3NsYXNoX3NsYXNoEXNsYXNoX3NsYXNoX3NsYXNoEnNsYXNoX3VuaTAwNUMubGlnYRJ1bmkwMDVDX3NsYXNoLmxpZ2EMdW5pMDAyOC5udW1yDHVuaTAwMjkubnVtcgx1bmkwMDJELmNhbHQOdW5pMDAyRC5jYWx0LjEOdW5pMDAyRC5jYWx0LjIKY29sb24uY2FsdAx1bmkwMDIxLmNhbHQMdW5pMDAyMy5jYWx0DnVuaTAwMjMuY2FsdC4xDnVuaTAwMjMuY2FsdC4yCnNsYXNoLmNhbHQMc2xhc2guY2FsdC4xDHNsYXNoLmNhbHQuMgxzbGFzaC5jYWx0LjMMc2xhc2guY2FsdC40DHNsYXNoLmNhbHQuNQx1bmkwMDVGLmNhbHQOdW5pMDA1Ri5jYWx0LjEOdW5pMDA1Ri5jYWx0LjIQdW5pMDAyMTAwN0Uuc3MwNxJ1bmkwMDIxX2VxdWFsLnNzMDgYdW5pMDAyMV9lcXVhbF9lcXVhbC5zczA4B3VuaTI3RTgHdW5pMjdFOQlhbm90ZWxlaWEHdW5pMDM3RQd1bmkyMDA3B3VuaTIwMDgHdW5pMDBBMAd1bmkyMDBCCnVuaTIwMDcudGYHdW5pMDAwRAd1bmlGRUZGB3VuaTIwQUYERXVybwd1bmkyMEJBB3VuaTIwQkQHdW5pMjBCOQ51bmkwMDI0LnNwYWNlcgx1bmkwMDI0LnNzMDQHdW5pMjJBNgd1bmkyMjM1B3VuaTIyMTkHdW5pMjIwRAd1bmkyM0FBB3VuaTIyMTUHdW5pMjJBRQd1bmkyMkFDB3VuaTIyQUIHZWxlbWVudAd1bmkyMjBBB3VuaTIwOEMHdW5pMjA3QwtlcXVpdmFsZW5jZQtleGlzdGVudGlhbAd1bmkyMkE5CGdyYWRpZW50CmludGVncmFsYnQKaW50ZWdyYWx0cAd1bmkyM0E5B3VuaTIzQTgHdW5pMjNBNwd1bmkyM0EyB3VuaTIzQTMHdW5pMjNBMQd1bmkyMDhCB3VuaTIwN0IHdW5pMjJBNwd1bmkyMkFGB3VuaTIyODgHdW5pMjI4OQd1bmkyMjBDCm5vdGVsZW1lbnQHdW5pMjI2Mglub3RzdWJzZXQHdW5pMjI4NQd1bmkyMkFECGVtcHR5c2V0CmxvZ2ljYWxhbmQJbG9naWNhbG9yDGludGVyc2VjdGlvbgV1bmlvbgd1bmkyMzlDB3VuaTIzOUQHdW5pMjM5Qgd1bmkyMzlGB3VuaTIzQTAHdW5pMjM5RQd1bmkyMDhBB3VuaTIwN0EHdW5pMjIzNgxyZWZsZXhzdWJzZXQOcmVmbGV4c3VwZXJzZXQNcmV2bG9naWNhbG5vdAd1bmkyM0FEB3VuaTIzQUMHdW5pMjNBQgd1bmkyM0E1B3VuaTIzQTYHdW5pMjNBNAd1bmkyMkEyDHByb3BlcnN1YnNldAd1bmkyMjhBCHN1Y2h0aGF0DnByb3BlcnN1cGVyc2V0B3VuaTIyOEIHdW5pMjJBNAd1bmkyMkEzB3VuaTIyMDQJdGhlcmVmb3JlB3VuaTIyQUEHdW5pMjJBOAl1bml2ZXJzYWwNcGVycGVuZGljdWxhcgl1bmkyMjFFLjEOdW5pMDAzRS5jZW50ZXILbGVzcy5jZW50ZXIGcGx1cy4xC3BsdXMuc3BhY2VyDGVxdWFsLnNwYWNlcg51bmkwMDNFLnNwYWNlcgtsZXNzLnNwYWNlcg51bmkwMDI1LnNwYWNlcgdhcnJvd3VwB3VuaTIxOTcKYXJyb3dyaWdodAd1bmkyMTk4CWFycm93ZG93bgd1bmkyMTk5CWFycm93bGVmdAd1bmkyMTk2CWFycm93Ym90aAlhcnJvd3VwZG4HdW5pMjFFNAd1bmkyMUU1B3VuaTIxQTkHdW5pMjFCMAd1bmkyMUIxB3VuaTIxQjIHdW5pMjFCMwd1bmkyN0YyB3VuaTI3RjMHdW5pMjFFNwd1bmkyMUU4B3VuaTIxRTkHdW5pMjFFNgd1bmkyMzA0B3VuaTIzMjQHdW5pMjdGMAd1bmkyN0YxB3VuaTI3RjQHdW5pMjdGNQd1bmkyN0Y2B3VuaTI3RjcHdW5pMjdGOAd1bmkyN0Y5B3VuaTI3RkEHdW5pMjdGQgd1bmkyN0ZDB3VuaTI3RkQHdW5pMjdGRQd1bmkyN0ZGB3VuaTI3QTEGSDE4NTMzBmNpcmNsZQd1bmkyNUVGB3VuaTI1RDAHdW5pMjVEMQd1bmkyNUQyB3VuaTI1RDMHdW5pMjVENgd1bmkyNUQ3B3VuaTI1RDUHdW5pMjVGNAd1bmkyNUY1B3VuaTI1RjYHdW5pMjVGNwd1bmkyNUM5B3VuaTI1Q0UJaW52Y2lyY2xlB3VuaTI1REEHdW5pMjVEQgd1bmkyNUUwB3VuaTI1RTEHdW5pMjVEQwd1bmkyNUREB3VuaTI1REUHdW5pMjVERgd1bmkyNUM2B3VuaTI1QzcHdW5pMjVBRQpmaWxsZWRyZWN0B3VuaTI1QUQHdW5pMjVBRghTRjAxMDAwMAhTRjAyMDAwMAhTRjAzMDAwMAhTRjA0MDAwMAhTRjA1MDAwMAhTRjA2MDAwMAhTRjA3MDAwMAhTRjA4MDAwMAhTRjA5MDAwMAhTRjEwMDAwMAhTRjExMDAwMAhTRjE5MDAwMAhTRjIwMDAwMAhTRjIxMDAwMAhTRjIyMDAwMAhTRjIzMDAwMAhTRjI0MDAwMAhTRjI1MDAwMAhTRjI2MDAwMAhTRjI3MDAwMAhTRjI4MDAwMAhTRjM2MDAwMAhTRjM3MDAwMAhTRjM4MDAwMAhTRjM5MDAwMAhTRjQwMDAwMAhTRjQxMDAwMAhTRjQyMDAwMAhTRjQzMDAwMAhTRjQ0MDAwMAhTRjQ1MDAwMAhTRjQ2MDAwMAhTRjQ3MDAwMAhTRjQ4MDAwMAhTRjQ5MDAwMAhTRjUwMDAwMAhTRjUxMDAwMAhTRjUyMDAwMAhTRjUzMDAwMAhTRjU0MDAwMAlmaWxsZWRib3gGSDIyMDczB3VuaTI1QTIHdW5pMjVBMwd1bmkyNUE0B3VuaTI1QTUHdW5pMjVBNgd1bmkyNUE3B3VuaTI1QTgHdW5pMjVBOQZIMTg1NDMGSDE4NTUxB3VuaTI1RTcHdW5pMjVFOAd1bmkyNUU5B3VuaTI1RUEHdW5pMjVFQgd1bmkyNUYwB3VuaTI1RjEHdW5pMjVGMgd1bmkyNUYzB3RyaWFndXAHdW5pMjVCNgd0cmlhZ2RuB3VuaTI1QzAHdHJpYWdydAd0cmlhZ2xmB3VuaTI1RTUHdW5pMjVFMgd1bmkyNUUzB3VuaTI1RTQHdW5pMjUzMAd1bmkyNTEyB3VuaTI1MjcHdW5pMjUwRQd1bmkyNTFGB3VuaTI1NDEHdW5pMjUyRgd1bmkyNTExB3VuaTI1MjkHdW5pMjUwRAd1bmkyNTIxB3VuaTI1NDcHdW5pMjU0RAd1bmkyNTRGB3VuaTI1N0IHdW5pMjUzMwd1bmkyNTEzB3VuaTI1MEYHdW5pMjUwMQd1bmkyNTc4B3VuaTI1N0UHdW5pMjUwOQd1bmkyNTBCB3VuaTI1N0EHdW5pMjUwNQd1bmkyNTA3B3VuaTI1NzkHdW5pMjUzQgd1bmkyNTFCB3VuaTI1N0YHdW5pMjUxNwd1bmkyNTAzB3VuaTI1NEIHdW5pMjUyQgd1bmkyNTIzB3VuaTI1NDUHdW5pMjUyRAd1bmkyNTM1B3VuaTI1M0QHdW5pMjUzMgd1bmkyNTNBB3VuaTI1NEEHdW5pMjU0Mwd1bmkyNTczB3VuaTI1NzIHdW5pMjU3MQd1bmkyNTRDB3VuaTI1NEUHdW5pMjU3Nwd1bmkyNTc0B3VuaTI1N0MHdW5pMjUwOAd1bmkyNTBBB3VuaTI1NzYHdW5pMjUwNAd1bmkyNTA2B3VuaTI1NzUHdW5pMjU3RAd1bmkyNTQ2B3VuaTI1MkUHdW5pMjUzNgd1bmkyNTNFB3VuaTI1MzEHdW5pMjUzOQd1bmkyNTQ5B3VuaTI1NDQHdW5pMjU0MAd1bmkyNTM4B3VuaTI1MjYHdW5pMjUxQQd1bmkyNTFFB3VuaTI1MTYHdW5pMjU0OAd1bmkyNTM3B3VuaTI1MkEHdW5pMjUxOQd1bmkyNTIyB3VuaTI1MTUHdW5pMjU0Mgd1bmkyNTI4B3VuaTI1MjAHdW5pMjUzRgd1bmkyNTI1B3VuaTI1MUQHdW5pMjU2RAd1bmkyNTZFB3VuaTI1NkYHdW5pMjU3MAd1bmkyNzEzB3VuaTIzODcHdW5pMjMwMAd1bmkyMTEzCWVzdGltYXRlZAd1bmkyMTE2B3VuaTIzOEIHdW5pMjMwMwd1bmkyMzg4BWhvdXNlB3VuaTIxRUEHdW5pMjMyNwd1bmkyMzJCB3VuaTIzMjYHdW5pMjNDRgd1bmkyMzI4B3VuaTIzMjUHdW5pMjFERgd1bmkyMURFB3VuaTIzMTgHdW5pMjNDRQd1bmkyMzA2B3VuaTIzMDUHdW5pMjE4Qgd1bmkyMThBDnVuaTAwMjYuc3BhY2VyCmJhci5zcGFjZXIMdW5pMDAyNi5zczAzE3VuaTAwMjYuYmVmb3JlLnNzMDMHYXQuc3MwNQlwbHVzLmRub20KbWludXMuZG5vbQplcXVhbC5kbm9tEHVuaTAwMjYwMDI2LmxpZ2EQYmFyX3VuaTAwN0QubGlnYRBiYXJfdW5pMDA1RC5saWdhB2Jhcl9iYXILYmFyX2Jhcl9iYXIYYmFyX2Jhcl9iYXJfdW5pMDAzRS5saWdhFGJhcl9iYXJfdW5pMDAzRS5saWdhEGJhcl91bmkwMDNFLmxpZ2EQdW5pMDAyNDAwM0UubGlnYQ5wbHVzX3BsdXMubGlnYRNwbHVzX3BsdXNfcGx1cy5saWdhEXBsdXNfdW5pMDAzRS5saWdhEGVxdWFsX2VxdWFsLmxpZ2EWZXF1YWxfZXF1YWxfZXF1YWwubGlnYRJ1bmkwMDNFX2VxdWFsLmxpZ2EQdW5pMDAzRTAwM0UubGlnYRR1bmkwMDNFMDAzRTAwM0UubGlnYRlsZXNzX3VuaTAwMjEwMDJEMDAyRC5saWdhEWxlc3NfdW5pMDAyQS5saWdhFWxlc3NfdW5pMDAyQTAwM0UubGlnYQ1sZXNzX2Jhci5saWdhEWxlc3NfYmFyX2Jhci5saWdhFWxlc3NfYmFyX2Jhcl9iYXIubGlnYRVsZXNzX2Jhcl91bmkwMDNFLmxpZ2ERbGVzc191bmkwMDI0LmxpZ2EVbGVzc191bmkwMDI0MDAzRS5saWdhDmxlc3NfcGx1cy5saWdhFmxlc3NfcGx1c191bmkwMDNFLmxpZ2EPbGVzc19lcXVhbC5saWdhEWxlc3NfdW5pMDAzRS5saWdhDmxlc3NfbGVzcy5saWdhE2xlc3NfbGVzc19sZXNzLmxpZ2ERbGVzc191bmkwMDdFLmxpZ2EMbGVzc191bmkwMDNFFWxlc3NfdW5pMDA3RTAwN0UubGlnYQ9sZXNzX3NsYXNoLmxpZ2EXbGVzc19zbGFzaF91bmkwMDNFLmxpZ2EQdW5pMDA3RTAwMkQubGlnYQ91bmkwMDdFX2F0LmxpZ2EQdW5pMDA3RTAwM0UubGlnYQt1bmkwMDdFMDA3RRR1bmkwMDdFMDA3RTAwM0UubGlnYRJ1bmkwMDVFX2VxdWFsLmxpZ2ELdW5pMDAyNTAwMjUJcGx1cy5udW1yCm1pbnVzLm51bXIKZXF1YWwubnVtcghiYXIuY2FsdApiYXIuY2FsdC4xCmJhci5jYWx0LjIKYmFyLmNhbHQuMwpiYXIuY2FsdC40CmJhci5jYWx0LjUKYmFyLmNhbHQuNgpiYXIuY2FsdC43CmJhci5jYWx0LjgKYmFyLmNhbHQuOQtiYXIuY2FsdC4xMAtiYXIuY2FsdC4xMQtiYXIuY2FsdC4xMgplcXVhbC5jYWx0DGVxdWFsLmNhbHQuMQxlcXVhbC5jYWx0LjIMdW5pMDAzRS5jYWx0DnVuaTAwM0UuY2FsdC4xDnVuaTAwM0UuY2FsdC4yDnVuaTAwM0UuY2FsdC4zDnVuaTAwM0UuY2FsdC40DnVuaTAwM0UuY2FsdC41DnVuaTAwM0UuY2FsdC42DnVuaTAwM0UuY2FsdC43DnVuaTAwM0UuY2FsdC44DnVuaTAwM0UuY2FsdC45D3VuaTAwM0UuY2FsdC4xMA91bmkwMDNFLmNhbHQuMTEJbGVzcy5jYWx0C2xlc3MuY2FsdC4xC2xlc3MuY2FsdC4yC2xlc3MuY2FsdC4zC2xlc3MuY2FsdC40C2xlc3MuY2FsdC41C2xlc3MuY2FsdC42C2xlc3MuY2FsdC43C2xlc3MuY2FsdC44C2xlc3MuY2FsdC45DGxlc3MuY2FsdC4xMAxsZXNzLmNhbHQuMTESdW5pMDAzRV9lcXVhbC5zczAyD2xlc3NfZXF1YWwuc3MwMhV1bmkwMDI0MDAzRS5saWdhLnNzMDQWbGVzc191bmkwMDI0LmxpZ2Euc3MwNBpsZXNzX3VuaTAwMjQwMDNFLmxpZ2Euc3MwNBJlcXVhbF91bmkwMDdFLnNzMDcQZXF1YWxfZXF1YWwuc3MwOBZlcXVhbF9lcXVhbF9lcXVhbC5zczA4B3VuaTAzRjYHdW5pMDM3NAd1bmkwMzc1B3VuaTAyQkMHdW5pMDJCQQd1bmkwMkM5B3VuaTAyQjkHdW5pMDMwOAd1bmkwMzA3CWdyYXZlY29tYglhY3V0ZWNvbWIHdW5pMDMwQgd1bmkwMzAyB3VuaTAzMEMHdW5pMDMwNgd1bmkwMzBBCXRpbGRlY29tYgd1bmkwMzA0B3VuaTAzMDUHdW5pMDMwRgd1bmkwMzEzB3VuaTAzMTQHdW5pMDMyNgd1bmkwMzI3B3VuaTAzMzUHdW5pMDMzNgljYXJvbi5hbHQJdW5pMDMyNi4xCXVuaTAwQTguMQl1bmkwMkQ5LjEJdW5pMDMwMC4xCXVuaTAzMDEuMQl1bmkwMkRELjEJdW5pMDMwMi4xCmNhcm9uLmNhc2UKYnJldmUuY2FzZQZyaW5nLjEHdGlsZGUuMQl1bmkwMEFGLjEJdW5pMDBCOC4xDWFjdXRlLmxvY2xQTEsSYWN1dGUuY2FzZS5sb2NsUExLB3VuaTAzNDIHdW5pMDM0NQV0b25vcwp0b25vcy5jYXNlDWRpZXJlc2lzdG9ub3MMdW5pMUZGRC5jYXNlB3VuaUUwMDAHdW5pRTAwMQl1bmkwMzA2LjEOdW5pMDA3RS5zcGFjZXIGci5zczAxDnVuaTAwNUUuc3BhY2VyAAAAAQAB//8ADwABAAIAAAAAAAAAAAAOAAEAAgAAAAwAAAAWAAEAAwSSBJMEtAACAAIEgwSRAAAEswSzAA8AAQAAAAoAQABoAAZERkxUACZjeXJsACZncmVrACZsYXRuACZ6aW5oACZ6eXl5ACYABAAAAAD//wADAAAAAQACAANjcHNwABRtYXJrABpta21rACAAAAABAAAAAAABAAEAAAACAAIAAwAEAAoAEgAaACQAAQAAAAEAJAAEAAAAAQAmAAYAEAABBjAAAAAGABAAAQY2AAEAAQbeAAUABQAKAAEG5Ab0AAIGNgAMAYEIAAgGCAwIEggYCB4IJAgqCDAINgg8CEIISAhOCFQIWghgCGYIbAhyCHgIfgiECIoIkAiWCJwIogioCK4ItAi6CMAIxgjMCNII2AjeCOQI6gjwCPYI/AkCCQgJDgkUCRoJIAkmCSwJMgk4CT4JRAlKCVAJVglcCWIJaAluCXQJegmACYYJjAmSCZgJngmkCaoJsAm2CbwJwgnICc4J1AnaCeAJ5gnsCfIJ+An+CgQKCgoQChYKHAoiCigKLgo0CjoKQApGCkwKUgpYCl4KZApqCnAKdgp8CoIKiAqOCpQKmgqgCqYKrAqyCrgKvgrECsoK0ArWCtwK4groCu4K9Ar6CwALBgsMCxILGAseCyQLKgswCzYLPAtCC0gLTgtUC1oLYAtmC2wLcgt4C34LhAuKC5ALlgucC6ILqAuuC7QLugvAC8YLzAvSC9gL3gvkC+oL8Av2C/wMAgwIDA4MFAwaDCAMJgwsDDIMOAw+DEQMSgxQDFYMXAxiDGgMbgx0DHoMgAyGDIwMkgyYDJ4MpAyqDLAMtgy8DMIMyAzODNQM2gzgDOYM7AzyDPgM/g0EDQoNEA0WDRwNIgAAAAANKA0uDTQNOg1ADUYNTA1SDVgNXg1kDWoNcA12DXwNgg2IDY4NlA2aDaANpg2sDbINuA2+DcQNyg3QDdYN3A3iDegN7g30DfoOAA4GDgwOEg4YDh4OJA4qDjAONg48DkIOSA5ODlQOWg5gDmYObA5yDngOfg6EAAAOigAADpAOlg6cDqIOqA6uDrQOug7ADsYOzA7SDtgO3g7kDuoO8A72DvwPAg8IDw4PFA8aDyAPJg8sDzIPOA8+D0QPSg9QD1YPXA9iD2gPbg90D3oPgA+GD4wAAA+SAAAPmAAAD54AAA+kAAAPqg+wD7YPvA/CD8gAAA/OD9QAAA/aAAAP4AAAD+YAAA/sAAAP8gAAD/gAAA/+AAAQBAAAEAoAABAQAAAQFgAAEBwAABAiECgQLhA0EDoQQBBGEEwQUhBYEF4QZBBqEHAQdhB8EIIQiBCOEJQQmhCgEKYQrBCyELgQvhDEEMoQ0BDWENwQ4hDoEO4Q9BD6EQARBhEMERIRGBEeESQRKhEwETYRPBFCAAARSAAAEU4RVBFaEWARZhFsEXIReBF+EYQRihGQEZYRnBGiEagRrhG0EboRwBHGEcwR0hHYEd4R5BHqEfAR9hH8EgISCBIOEhQSGhIgEiYSLBIyAAASOAAAEj4AABJEAAASSgAAElAAABJWAAASXAAAEmIAABJoAAASbgAAEnQSehKAEoYSjBKSEpgSnhKkEqoSsBK2ErwSwhLIAAASzgAAEtQAABLaAAAS4AAAEuYS7BLyEvgS/hMEEwoTEBMWExwTIhMoEy4TNBM6E0ATRhNMAAATUhNYAAATXhNkE2oTcBN2E3wTghOIE44TlBOaE6ATphOsE7ITuBO+E8QTyhPQE9YT3BPiE+gT7hP0E/oUABQGFAwUEhQYFB4UJBQqFDAUNhQ8FEIUSBROFFQUWhRgFGYUbBRyFHgUfhSEFIoUkBSWFJwUohSoFK4UtBS6FMAUxhTMFNIU2BTeFOQU6hTwFPYU/BUCFQgVDhUUFRoVIBUmAAAVLBUyFTgVPhVEFUoAABVQFVYAABVcAAAVYgAAFWgVbhV0FXoVgBWGFYwVkhWYFZ4VpBWqFbAVthW8FcIVyBXOFdQV2hXgFeYV7BXyFfgV/hYEFgoWEBYWFhwWIhYoFi4WNBY6FkAWRhZMFlIWWBZeFmQWahZwFnYWfBaCFogWjhaUFpoWoBamFqwWsha4Fr4WxBbKFtAW1hbcFuIW6BbuFvQW+hcAFwYXDBcSFxgXHhckFyoXMBc2FzwXQhdIF04XVBdaF2AXZhdsF3IXeBd+F4QXiheQF5YXnBeiF6gXrhe0F7oXwBfGF8wX0hfYF94X5BfqF/AX9hf8GAIYCBgOGBQYGhggAAAYJhgsGDIYOBg+GEQYShhQGFYYXBhiGGgYbhh0GHoYgBiGGIwYkhiYGJ4YpBiqGLAYthi8GMIYyBjOAAAY1BjaAAES2hLkAAEAcgAMAAES8AABEvITAgABAHAADAADE2ATZhNsABMAAAFkAAABagAAAXAAAAF2AAABfAAAAYIAAAGIAAABjgAAAZQAAAGaAAABoAAAAaYAAAGsAAABsgAAAbgAAQG+AAEBxAAAAcoAAQHQAAMAABJ4AAASfgAAEoQAEAAAEpwAABKiAAASqAAAEq4AABK0AAASugAAEsAAABLGAAASzAAAEtIAABLYAAAS3gAAEuQAABLqAAAS8AAAEvYAAgACAAEAhQAAARkBTQCFAAIAAgSDBJMAAASzBLQAEQACABsAAQAoAAAAKgArACgALQBfACoAYQCZAF0AmwC3AJYAuQDNALMAzwDaAMgA3ADoANQA6gEOAOEBEAESAQYBGQEjAQkBJQF0ARQBdgF2AWQBeAF9AWUBfwF/AWsBgQGJAWwBjQGOAXUBkgGSAXcCqwKrAXgCrQKtAXkC2ALYAXoC+gL6AXsC/gL+AXwD8APwAX0EfAR8AX4ElgSWAX8EvQS9AYAAAQJYBB0AAQJYBB0AAQWkBB0AAQJYBB0AAQIFBB0AAQJYBB0AAQJYBB0AAQJYBB0AAQJYBB0AAQJYBB0AAQJYBB0AAQJYBB0AAQK7BB0AAQIpBB0AAQJVBB0AAQJYAAAAAQJYAAAAAQJYBB0AAQHWAAAAAQJYBWEAAQJUAAAAAQJYBWEAAQJUAAAAAQJYBWEAAQJUAAAAAQJYBWEAAQJUAAAAAQJYBWEAAQJUAAAAAQJYBWEAAQJUAAAAAQJYBWEAAQJUAAAAAQJYBWEAAQJUAAAAAQJYBWEAAQJUAAAAAQJYBWEAAQJUAAAAAQLTBWEAAQJYAAAAAQLTBWEAAQJYAAAAAQJYBWEAAQJYAAAAAQLbBWEAAQK7AAAAAQLbBWEAAQK7AAAAAQLbBWEAAQK7AAAAAQLbBWEAAQK7AAAAAQLbBWEAAQK7AAAAAQLbBWEAAQK7AAAAAQI3BWEAAQJYAAAAAQJKBWEAAQJrAAAAAQI3BWEAAQJYAAAAAQJKBWEAAQJrAAAAAQKCBWEAAQKLAAAAAQKCBWEAAQKLAAAAAQKCBWEAAQKLAAAAAQKCBWEAAQKLAAAAAQKCBWEAAQKLAAAAAQKCBWEAAQKLAAAAAQKCBWEAAQKLAAAAAQKCBWEAAQKLAAAAAQKCBWEAAQKLAAAAAQKCBWEAAQKLAAAAAQJYBWEAAQJYAAAAAQKUBWEAAQKVAAAAAQKUBWEAAQKVAAAAAQKUBWEAAQKVAAAAAQKUBWEAAQKVAAAAAQKUBWEAAQKVAAAAAQJYBWEAAQJYAAAAAQJYBWEAAQJYAAAAAQJYBWEAAQJYAAAAAQJYBWEAAQJYAAAAAQJYBWEAAQJYAAAAAQJYBWEAAQJYAAAAAQJYBWEAAQJYAAAAAQJYBWEAAQJYAAAAAQJYBWEAAQJYAAAAAQJYBWEAAQJYAAAAAQJYBWEAAQJYAAAAAQJYBWEAAQJYAAAAAQK7BWEAAQJYAAAAAQK7BWEAAQJYAAAAAQKNBWEAAQKFAAAAAQKNBWEAAQKFAAAAAQFnBWEAAQKXAAAAAQFnBWEAAQKXAAAAAQFnBWEAAQKXAAAAAQFnBWEAAQKXAAAAAQFnBWEAAQKXAAAAAQFkBWEAAQKTAAAAAQJYBWEAAQJYAAAAAQJVBWEAAQJYAAAAAQJVBWEAAQJYAAAAAQJVBWEAAQJYAAAAAQJVBWEAAQJYAAAAAQJVBWEAAQJYAAAAAQJVBWEAAQJYAAAAAQJYBWEAAQJYAAAAAQJYBWEAAQJYAAAAAQJYBWEAAQJYAAAAAQJYBWEAAQJYAAAAAQJYBWEAAQJYAAAAAQJYBWEAAQJYAAAAAQJYBWEAAQJYAAAAAQJYBWEAAQJYAAAAAQJYBWEAAQJYAAAAAQJYBWEAAQJYAAAAAQJYBWEAAQJYAAAAAQJYBWEAAQJYAAAAAQJYBWEAAQJYAAAAAQJYBWEAAQJYAAAAAQJYBWEAAQJYAAAAAQJYBWEAAQJVAAAAAQJYBWEAAQJVAAAAAQJYBWEAAQJVAAAAAQJYBWEAAQJVAAAAAQJjBWEAAQJRAAAAAQJjBWEAAQJRAAAAAQJjBWEAAQJRAAAAAQJjBWEAAQJRAAAAAQJjBWEAAQJRAAAAAQJjBWEAAQJRAAAAAQJWBWEAAQJWAAAAAQJWBWEAAQJWAAAAAQJWBWEAAQJWAAAAAQJWBWEAAQJWAAAAAQJWBWEAAQJWAAAAAQJYBWEAAQJYAAAAAQJYBWEAAQJYAAAAAQJYBWEAAQJYAAAAAQJYBWEAAQJYAAAAAQJYBWEAAQJYAAAAAQJYBWEAAQJYAAAAAQJYBWEAAQJYAAAAAQJYBWEAAQJYAAAAAQJYBWEAAQJYAAAAAQJYBWEAAQJYAAAAAQJYBWEAAQJYAAAAAQJYBWEAAQJYAAAAAQJYBWEAAQJYAAAAAQJYBWEAAQJYAAAAAQJYBWEAAQJYAAAAAQJYBWEAAQJYAAAAAQJYBWEAAQJYAAAAAQJfBWEAAQJYAAAAAQJfBWEAAQJYAAAAAQJfBWEAAQJYAAAAAQJfBWEAAQJYAAAAAQJfBWEAAQJYAAAAAQJ9BWEAAQJYAAAAAQJ9BWEAAQJYAAAAAQJ9BWEAAQJYAAAAAQJ9BWEAAQJYAAAAAQLbBWEAAQK7AAAAAQJVBWEAAQJYAAAAAQJYBWEAAQJYAAAAAQJjBWEAAQJRAAAAAQJ9BWEAAQJYAAAAAQJIBB0AAQJYAAAAAQJIBB0AAQJYAAAAAQJIBB0AAQJYAAAAAQJIBB0AAQJYAAAAAQJIBXgAAQJYAAAAAQJIBB0AAQJYAAAAAQJIBB0AAQJYAAAAAQJIBB0AAQJYAAAAAQJIBB0AAQJYAAAAAQJIBB0AAQJYAAAAAQJpBB0AAQJpBB0AAQJYBcUAAQJYAAAAAQKwBAwAAQKmAAAAAQKwBAwAAQKmAAAAAQKwBAwAAQKmAAAAAQKwBAwAAQKmAAAAAQKwBAwAAQKmAAAAAQKwBAwAAQKmAAAAAQJYBcUAAQJYAAAAAQIeBcUAAQIeAAAAAQJdBcUAAQJdAAAAAQJtBB0AAQJYAAAAAQJtBB0AAQJYAAAAAQJtBB0AAQJYAAAAAQJtBB0AAQJYAAAAAQJtBB0AAQJYAAAAAQJtBXgAAQJYAAAAAQJtBB0AAQJYAAAAAQJtBB0AAQJYAAAAAQJtBB0AAQJYAAAAAQJtBB0AAQJYAAAAAQLkBcUAAQILAAAAAQJLBB0AAQJLBB0AAQJLBB0AAQJLBB0AAQJLBB0AAQJYBcUAAQJYAAAAAQJYBcUAAQJYAAAAAQJYBcUAAQJYAAAAAQJYAAAAAQJbBB0AAQJbBB0AAQJbBB0AAQJbBB0AAQJbBXgAAQJbBB0AAQJbBB0AAQJbBB0AAQJbBB0AAQJbBB0AAQLfBB0AAQLfBB0AAQLfBB0AAQJYBcUAAQJjAAAAAQJYBcUAAQJjAAAAAQJYBB0AAQJYAAAAAQISBcUAAQLRAAAAAQISBcUAAQLRAAAAAQISBcUAAQLRAAAAAQISBcUAAQLRAAAAAQISBcUAAQLRAAAAAQISBcUAAQLRAAAAAQJYBB0AAQJYAAAAAQJYBB0AAQJaAAAAAQJYBB0AAQJaAAAAAQJpBB0AAQJrAAAAAQJYBB0AAQJaAAAAAQJYBB0AAQJaAAAAAQJYBB0AAQJaAAAAAQJYBB0AAQJYAAAAAQJYBB0AAQJYAAAAAQJYBB0AAQJYAAAAAQJYBB0AAQJYAAAAAQJYBXgAAQJYAAAAAQJYBB0AAQJYAAAAAQJYBB0AAQJYAAAAAQJYBB0AAQJYAAAAAQJYBB0AAQJYBB0AAQJYBB0AAQJYAAAAAQJYBB0AAQJYAAAAAQJYBcUAAQJY/nEAAQJYBB0AAQJYAAAAAQKVBB0AAQHLAAAAAQKVBB0AAQHLAAAAAQKVBB0AAQHLAAAAAQKVBB0AAQHLAAAAAQJnBB0AAQJRAAAAAQJnBB0AAQJRAAAAAQJnBB0AAQJRAAAAAQJnBB0AAQJRAAAAAQJnBB0AAQJRAAAAAQJnBB0AAQJRAAAAAQHlBRgAAQLnAAAAAQHlBRgAAQLnAAAAAQHlBRgAAQLnAAAAAQHlBRgAAQLnAAAAAQHlBRgAAQLnAAAAAQJYBB0AAQJYBB0AAQJYBB0AAQJYBB0AAQJYBXgAAQJYBB0AAQJYBB0AAQJYBB0AAQJYBB0AAQJYBB0AAQJYBB0AAQJYBB0AAQJYAAAAAQJYBB0AAQJYAAAAAQJYBB0AAQJYAAAAAQJYBB0AAQJYAAAAAQJYBXgAAQJYAAAAAQJYBB0AAQJYAAAAAQJYBB0AAQJYAAAAAQJYBB0AAQJYBB0AAQJYBB0AAQJYBXgAAQJYBB0AAQJtBB0AAQJYAAAAAQJtBB0AAQJYAAAAAQJtBB0AAQJYAAAAAQJtBB0AAQJYAAAAAQKwBAwAAQKmAAAAAQJYBB0AAQJaAAAAAQJYBB0AAQJYAAAAAQJnBB0AAQJRAAAAAQJtBB0AAQJYAAAAAQJYAAAAAQLfBB0AAQISBWEAAQLRAAAAAQK7BWEAAQJYAAAAAQJYBWEAAQJUAAAAAQJYBWEAAQJYAAAAAQK5BWEAAQFnAAAAAQJYBWEAAQJYAAAAAQKCBWEAAQKLAAAAAQJ9BWEAAQJYAAAAAQJYBWEAAQJYAAAAAQJYBWEAAQJYAAAAAQJYBWEAAQJYAAAAAQKNBWEAAQKFAAAAAQJYBWEAAQJYAAAAAQJVBWEAAQJYAAAAAQJYBWEAAQJYAAAAAQJYBWEAAQJYAAAAAQJYBWEAAQJYAAAAAQJYBWEAAQJYAAAAAQJYBWEAAQJYAAAAAQJWBWEAAQJWAAAAAQJfBWEAAQJYAAAAAQJYBWEAAQJYAAAAAQJYBWEAAQJYAAAAAQJYBWEAAQJYAAAAAQJYBWEAAQJaAAAAAQJYBWEAAQJUAAAAAQKCBWEAAQKLAAAAAQJYBWEAAQJYAAAAAQJYBWEAAQJYAAAAAQJYBWEAAQJYAAAAAQJfBWEAAQJYAAAAAQJYBWEAAQJaAAAAAQJYBWEAAQJYAAAAAQJfBWEAAQJYAAAAAQJYBWEAAQJYAAAAAQJYBWEAAQJYAAAAAQJYBWEAAQJYAAAAAQJYBWEAAQJY/nEAAQJYBWEAAQKnBWEAAQFVAAAAAQJYBWEAAQJYAAAAAQJYBWEAAQJYAAAAAQJY/nEAAQJeBWEAAQJeBWEAAQJeBWEAAQJYBWEAAQJYAAAAAQJYBWEAAQJYAAAAAQJYBWEAAQJYAAAAAQJYBWEAAQJYAAAAAQJYBWEAAQJYAAAAAQJYBWEAAQJYAAAAAQJYBWEAAQJYAAAAAQIpBB0AAQJRAAAAAQJYBcUAAQJY/nEAAQJYBB0AAQJY/nEAAQJYBcUAAQJYAAAAAQJ4BB0AAQJsAAAAAQJYBcUAAQJY/nEAAQJVBB0AAQETAAAAAQJYBcUAAQJYAAAAAQI5BB0AAQJYAAAAAQJYBB0AAQJYAAAAAQJYBcUAAQJYAAAAAQJYBB0AAQJY/nEAAQJYBB0AAQJYAAAAAQJYBcUAAQJY/nEAAQJYBB0AAQJYAAAAAQJYBB0AAQJYAAAAAQJlBB0AAQJY/nEAAQJYBB0AAQJY/nEAAQJYBB0AAQJYAAAAAQJYBB0AAQJYAAAAAQJYBB0AAQJYAAAAAQJYBB0AAQJY/nEAAQJYBB0AAQJY/nEAAQJYBB0AAQJY/nEAAQJYBB0AAQJWAAAAAQI5BB0AAQJYAAAAAQI5BXgAAQJYAAAAAQI5BB0AAQJYAAAAAQJYBB0AAQJYAAAAAQJYBXgAAQJYAAAAAQJYBB0AAQJYAAAAAQJYBB0AAQJYAAAAAQJYBB0AAQJWAAAAAQIpBB0AAQJRAAAAAQJ4BB0AAQJsAAAAAQJVBB0AAQETAAAAAQJYBB0AAQJYAAAAAQJYBB0AAQJY/nEAAQJYBB0AAQJYAAAAAQJYBB0AAQJYAAAAAQJYBB0AAQJY/nEAAQJYBB0AAQJY/nEAAQJYBB0AAQJY/nEAAQJYBcUAAQJYAAAAAQJYBcUAAQJY/nEAAQJYBB0AAQJY/nEAAQJYBcUAAQJYAAAAAQJYBB0AAQJYAAAAAQJYBB0AAQJYAAAAAQJYBB0AAQJY/nEAAQJYBB0AAQJYAAAAAQLfBB0AAQJYBB0AAQJYAAAAAQJYBcUAAQJY/nEAAQJYBB0AAQJY/nEAAQKkBB0AAQKY/nEAAQJYBWEAAQJYAAAAAQLbBWEAAQK7AAAAAQJYBWEAAQJYAAAAAQIuBWEAAQIlAAAAAQJYAAAAAQJYBWEAAQJYBWEAAQJYAAAAAQIuBWEAAQIlAAAAAQJYAAAAAQJUBWEAAQJYBWoAAQJYAAAAAQJNBB0AAQJYAAAAAQJYBXgAAQKVBB0AAQHLAAAAAQADBJIEkwS0AAEAAQS0AAECWAAAAAECWAAAAAEB1gAAAAECa/6HAAIAAgSDBJEAAASzBLMADwABAAMEgwSPBLMAAQJYBB0AAQJYBB0AAQWkBB0AAQJYBB0AAQIFBB0AAQJYBB0AAQJYBB0AAQJYBB0AAQJYBB0AAQJYBB0AAQJYBB0AAQJYBB0AAQK7BB0AAQIpBB0AAQJVBB0AAQJYBB0AAQJYBXgAAQJjBoEAAQJbBa8AAQAAAAoCrgUMAAZERkxUACZjeXJsACZncmVrACZsYXRuACp6aW5oACZ6eXl5ACYARAAAAEAACkFGSyAAckFaRSAApkNBVCAA2kNSVCABDktBWiABQk1PTCABdlBMSyABqlJPTSAB3lRBVCACElRSSyACRgAA//8AFgAAABwAHQAPAAMABAARAB4AEAACAB8AAQASABQAFQAWABcAGAAZABoAEwAbAAD//wAXAAAAHAAdAA8AAwAEABEAHgAQAAIABwAfAAEAEgAUABUAFgAXABgAGQAaABMAGwAA//8AFwAAABwAHQAPAAMABAARAB4AEAACAAYAHwABABIAFAAVABYAFwAYABkAGgATABsAAP//ABcAAAAcAB0ADwADAAQAEQAeABAAAgAIAB8AAQASABQAFQAWABcAGAAZABoAEwAbAAD//wAXAAAAHAAdAA8AAwAEABEAHgAQAAIACQAfAAEAEgAUABUAFgAXABgAGQAaABMAGwAA//8AFwAAABwAHQAPAAMABAARAB4AEAACAAoAHwABABIAFAAVABYAFwAYABkAGgATABsAAP//ABcAAAAcAB0ADwADAAQAEQAeABAAAgAFAB8AAQASABQAFQAWABcAGAAZABoAEwAbAAD//wAXAAAAHAAdAA8AAwAEABEAHgAQAAIADgAfAAEAEgAUABUAFgAXABgAGQAaABMAGwAA//8AFwAAABwAHQAPAAMABAARAB4AEAACAAsAHwABABIAFAAVABYAFwAYABkAGgATABsAAP//ABcAAAAcAB0ADwADAAQAEQAeABAAAgAMAB8AAQASABQAFQAWABcAGAAZABoAEwAbAAD//wAXAAAAHAAdAA8AAwAEABEAHgAQAAIADQAfAAEAEgAUABUAFgAXABgAGQAaABMAGwAgYWFsdADCY2FsdADKY2FzZQGcZG5vbQGiZnJhYwGobG9jbAGybG9jbAG4bG9jbAG+bG9jbAHEbG9jbAHKbG9jbAHQbG9jbAHWbG9jbAHcbG9jbAHibG9jbAHobnVtcgHub251bQH0b3JkbgH6c2FsdAICc2luZgIIc3MwMQIOc3MwMgIUc3MwMwIac3MwNAIic3MwNQIoc3MwNgIwc3MwNwI4c3MwOAJAc3VicwJGc3VwcwJMdG51bQJSemVybwJYAAAAAgAAAAEAAABnABkAGgAbABwAHQAeAB8AIAAhACIAIwAkACUAJgAnACgAKQAqACsALAAtAC4ALwAwADEAMgAzADQANQA2ADcAOAA5ADoAOwA8AD0APgA/AEAAQQBCAEMARABFAEYARwBIAEkASgBLAEwATQBOAE8AUABRAFIAUwBUAFUAVgBXAFgAWQBaAFsAXABdAF4AXwBgAGEAYgBjAGQAZQBmAGcAaABpAGoAawBsAG0AbgBvAHAAcQByAHMAdAB1AHYAdwB4AHkAegB7AHwAfQB+AH8AAAABAA0AAAABAAUAAAADAAYABwAIAAAAAQATAAAAAQAPAAAAAQAOAAAAAQAQAAAAAQARAAAAAQASAAAAAQAVAAAAAQAWAAAAAQAXAAAAAQAUAAAAAQAEAAAAAQAMAAAAAgAJAAoAAAABAIAAAAABAIwAAAABAIEAAAABAIIAAAACAIMAhAAAAAEAhQAAAAIAhgCHAAAAAgCIAIkAAAACAIoAiwAAAAEAjQAAAAEAAgAAAAEAAwAAAAEACwAAAAEAGAFVAqwCtAK8AsQCzALUAtwC5ALsAvQC/AMEAwwDFAMcAyQDLAMkAyQDNAM8AzQDJAMkA0QDTANUA1wDZANsA3QDfAOEA4wDlAOcA6QDrAO0A7wDxAPMA9QD3APmA+4D9gP+BAYEDgQWBB4EJgQuBDYEPgRGBE4EVgReBGYEbgR2BH4EhgSOBJYEngSmBK4EtgS+BMYEzgTWBN4E5gTuBPgFAAUIBRAFGAUgBSgFMAU4BUAFSAVQBVgFYAVoBXAFeAWABYgFkAWYBaAFqAWwBbgFwAXIBdAF2AXgBegF8AX4BgAGCAYSBh4GKgY2Bj4GVgZeBmgGcAZ+BoYGjgaWBp4GpgawBrAGuAbABsgG0gbaBuIG6gbyBvoHAgK8BwoHEgcaByIHKgciByoHMgc6B0IHSgdSB1oHYgdqB3IHegeCB4oHkgeSB5IHkgeaB6IHqgeyB7oHwgfKB7oH0gfaB9oH4gfiB+oH6gfyB/IH+ggCCAoIEggaCCIIKggqCDIIOghCCEoIUghaCGIIYghqCHIIegiCCIoIkgiSCJoIkgiSCKIIkgiqCJIIsgi6CMIIkgiSCMoI0gjSCNoI4gjiCOoIkgjyCNII+gjiCQIJCgkSCRoJIgkqCSoJMgk6CToJQgk6CUoJUglSCVoJUgliCWoJcgkKCQoJegkaCYIJigmSCZoJogmqCbIJugnCCboJygm6CboJ0gnaCdoJ4gnqCeoJ8gn6CfoKAgoKChIKGgkaCiIKKgoyCjoJKgpCCkoKUgpaCmIKagpyCnoJOgqCCooKkglSCpoKoglqCqoKsgq6CQoKwgrKCtIK2griCuoK8gr6CwILCgsSCxoLIgsqCzILOgtCC0oLUgtaCboLYgtqC3IJ2gt6C4ILiguSC5oLoguqC7ILugnqC8ILwgABAAAAAQkeAAMAAAABCboAAQAAAAEKDAABAAAAAQomAAEAAAABCkIAAQAAAAEKXgABAAAAAQp6AAEAAAABCngABgAAAAEKdgAGAAAAAQp+AAQAAAABCogAAQAAAAEKiAABAAAAAQqGAAEAAAABCpwABAAAAAEK2AABAAAAAQraAAYAAAABCtgAAQAAAAEK2gABAAAAAQrgAAEAAAABCvQABgAAAAEK9gAGAAAAAQr6AAYAAAABCvwABgAAAAEK/gAGAAAAAQsAAAYAAAABCwIABgAAAAELBAAGAAAAAQsGAAYAAAABCwYABgAAAAELDgAGAAAAAQsWAAYAAAABCx4ABgAAAAELJgAGAAAAAQsuAAYAAAABCzIABgAAAAELNAAGAAAAAQs0AAYAAAABCzwABgAAAAILPgtOAAYAAAABC1QABgAAAAELVgAGAAAAAQtYAAYAAAABC2AABgAAAAELYgAGAAAAAQtmAAYAAAABC2oABgAAAAELbgAGAAAAAQtyAAYAAAABC3YABgAAAAELegAGAAAAAQt8AAYAAAABC34ABgAAAAELfgAGAAAAAQt+AAYAAAABC34ABgAAAAELfgAGAAAAAQt+AAYAAAABC4AABgAAAAELgAAGAAAAAQuCAAYAAAABC4QABgAAAAELhgAGAAAAAQuGAAYAAAABC4gABgAAAAELigAGAAAAAQuMAAYAAAABC44ABgAAAAELkAAGAAAAAQuSAAYAAAABC5QABgAAAAELnAAGAAAAAQueAAYAAAACC6ALsAAGAAAAAQu2AAYAAAABC7gABgAAAAELuAAGAAAAAQvCAAYAAAABC8QABgAAAAELzAAGAAAAAQvOAAYAAAABC9AABgAAAAEL0gAGAAAAAQvcAAYAAAABC94ABgAAAAEL4AAGAAAAAQviAAYAAAABC+QABgAAAAEL5gAGAAAAAQvoAAYAAAABC+oABgAAAAEL7AAGAAAAAQvuAAYAAAABC/AABgAAAAEL8gAGAAAAAQvyAAYAAAABC/QABgAAAAEL9gAGAAAAAQv2AAYAAAABC/gABgAAAAEL+gAGAAAAAQv6AAYAAAABC/wABgAAAAEL/gAGAAAAAQv+AAYAAAABC/4ABgAAAAEMAAAGAAAAAQwCAAYAAAACDAIMEgAGAAAAAwwaDCoMOgAGAAAAAww4DEgMWAAGAAAAAwxWDGoMegACAAAAAQyCAAYAAAAJDIQMlAykDL4M1AzkDPgNDA0aAAYAAAABDRQABgAAAAINHg0wAAYAAAABDTgABgAAAAQNQA1QDWANdAAGAAAAAQ14AAYAAAABDYAABgAAAAENiAAGAAAAAQ2QAAYAAAABDZgABgAAAAINoA20AAEAAAABDboAAQAAAAENuAABAAAAAQ26AAYAAAACDbwNzgABAAAAAQ3WAAEAAAABDdwABgAAAAEN2gAGAAAAAQ3cAAYAAAABDeQABgAAAAEN7gAGAAAAAQ3wAAEAAAABDfIAAQAAAAEN+AABAAAAAQ36AAEAAAABDfwAAQAAAAEN+gABAAAAAQ34AAEAAAABDgQAAQAAAAEODAABAAAAAQ4UAAEAAAABDhwAAQAAAAEOJAABAAAAAQ4qAAEAAAABDjAAAQAAAAEONgABAAAAAQ48AAEAAAABDjoAAQAAAAEOPgABAAAAAQ5AAAEAAAABDkwAAQAAAAEOUgABAAAAAQ5YAAEAAAABDl4AAQAAAAEOYgABAAAAAQ5mAAEAAAABDmoAAQAAAAEObgABAAAAAQ5yAAEAAAABDnAAAQAAAAEObgABAAAAAQ5sAAEAAAABDmoAAQAAAAEOaAABAAAAAQ5mAAEAAAABDmQAAQAAAAEOZgABAAAAAQ5kAAEAAAABDmIAAQAAAAEOYAABAAAAAQ5kAAEAAAABDmYAAQAAAAEOZAABAAAAAQ5iAAEAAAABDmQAAQAAAAEOZgABAAAAAQ5kAAQAAAABDmoABAAAAAEOagABAAAAAQ5qAAEAAAABDm4AAQAAAAEOcAABAAAAAQ5uAAEAAAABDnAAAQAAAAEOcgABAAAAAQ50AAEAAAABDnYAAQAAAAEOeAABAAAAAQ52AAEAAAABDnQAAQAAAAEOcgABAAAAAQ5wAAEAAAABDm4AAQAAAAEObAABAAAAAQ5qAAEAAAABDmgAAQAAAAEObAABAAAAAQ5qAAEAAAABDmwAAQAAAAEOagABAAAAAQ5oAAEAAAABDmYAAQAAAAEOZAABAAAAAQ5iAAEAAAABDmQAAQAAAAEOYgABAAAAAQ5gAAEAAAABDmIAAQAAAAEOZAABAAAAAQ5iAAEAAAABDmAAAQAAAAEOYgABAAAAAQ5mAAEAAAABDmoAAQAAAAEObgABAAAAAQ5yAAEAAAABDnYAAQAAAAEOegABAAAAAQ58AAEAAAABDnoAAQAAAAEOfAABAAAAAQ56AAEAAAABDngAAQAAAAEOdgABAAAAAQ50AAEAAAABDnIAAQAAAAEOcAABAAAAAQ5uAAEAAAABDmwAAQAAAAEOagABAAAAAQ5sAAEAAAABDmoAAQAAAAEObAABAAAAAQ5uAAEAAAABDnAAAQAAAAEObgABAAAAAQ5wAAEAAAABDnIAAQAAAAEOdAABAAAAAQ52AAEAAAABDngAAQAAAAEOegABAAAAAQ58AAEAAAABDnoAAQAAAAEOfAABAAAAAQ5+AAEAAAABDnwAAQAAAAEOfgABAAAAAQ58AAEAAAABDn4AAQAAAAEOgAABAAAAAQ5+AAEAAAABDoAAAQAAAAEOggABAAAAAQ6EAAEAAAABDoYAAQAAAAEOiAABAAAAAQ6KAAEAAAABDowAAQAAAAEOjgABAAAAAQ6QAAEAAAABDpIAAQAAAAEOlAABAAAAAQ6WAAEAAAABDpgAAQAAAAEOmgABAAAAAQ6cAAEAAAABDpoAAQAAAAEOmAABAAAAAQ6aAAEAAAABDpwAAQAAAAEOmgABAAAAAQ6cAAEAAAABDp4AAQAAAAEOnAABAAAAAQ6eAAEAAAABDqAAAQAAAAEOngABAAAAAQ6cAAEAAAABDpoAAQAAAAEOmAABAAAAAQ6aAAEAAAABDpwAAQAAAAEOmgACFLYATwEWAIEAggEXAIMAhABfAGUAhQEWAQoBEQESAQsBFwEMBL0BDQDoAO4BDgEUATkBOgEaAR4BIAEiASgBLQExAaEBqwG2AbcBuAG5AboBuwG8Ab0BvgG/AfYB9wIEAioCKwIsAjwCPQI+Aj8CjQS+AwAEGAQYBBcEdgR0BHcEeAR1BBkEpASlBKYEpwSpBKoEqwSsBK0ErgSvBLAEtgLOAAEUtAAqFQwVEhUYFR4VLBU4FUQVUBVcFWgVdBWAFYwVmBWkFbQVuhXEFc4V3BXoFgQWDBYcFigWMBY2Fj4WRhZeFmoWchaGFpAWuhb8FyAXMBc2FzwXRhdyAAIXHgAOAawBrQGuAa8BsAGxAbIBswG0AbUCBgIHAuYCtgACFxIADwHKAcsBzAHNAc4BzwHQAdEB0gHTAhICEwLnArcCqQACFwoADwHAAcEBwgHDAcQBxQHGAccByAHJAm4CbwRJBEoESwACFwIADwG2AbcBuAG5AboBuwG8Ab0BvgG/AkACQQQaBBsEHAABFvr/4QABFvoAKwACFv4XCBcYFyIAAgAADQYAAhcyFz4XSBdkAAMAAAz8DPwAARdkAAEM7gABF2oABQACF2oADAEUAaABogGjAaQBpQGmAacBqAGpAaoBoQACF1wAHwH2AfcCFAIVAhYCFwIYAhkCKQIqAisCLAI8Aj0CPgI/AwAEpASlBKYEpwSoBKkEqgSrBKwErQSuBK8EsAS2AAEXUgACDIIMggABF1YABgABF1YAAgx2DHoAAhd0AAQAXwBlAOgA7gACF3IACwCBAIIAgwCEAIUBCgELAQwBDQEOBLEAAhdwAAIBnwGrAAEXbgADDEAMRAxMAAEXuAACDEQMSAABGB4AAgxKDFIAARiEAAIMUAxUAAEY3AACDFYMYAABGTQAAgxcDGAAARlmAAIMXgxmAAEZmAABDGAAAhniGegaChoSAAIAAAxkAAIaZBpqGnoaggACAAAMYgACGuga7hsKGxIAAgAADGAAAhtkG2obmBugAAIAAAxeAAIb/hwEHCAcKAACAAAMXgABHJgAAwxeDGIMaAABHRAAAgxmDGoAAR1aAAEMagACHcAdxh3oHfAAAgAADHIAAR5oAAIMdAyAAAIewh7IHvYe/gACAAAMegACH3gffh+aH6IAAgAADHwAASAWAAIMegyIAAEgkAACDIQMiAACIPwhAiEeISYAAgAADIwAASGUAAIMjAyUAAEh3gADDJAMlAycAAEiKAADDJQMmAycAAEiVgADDJQMmAycAAEihAADDJQMmAycAAEisgADDJQMmAycAAEi/AADDJgMoAykAAEjRgACDJwMpgABI5AAAgygDKoAASPaAAEMpAABJCQAAQyoAAEkbgABDKwAASS4AAEMsAABJQIAAQy0AAElNAACDLYMugABJWYAAQy4AAElmAACDLoMwgABJcoAAgy8DMAAASX8AAIMvgzCAAEmLgABDMAAASZ4AAIMxgzOAAEmqgACDMgM1AABJvQAAgzODNIAAScyAAIM0gzWAAEncAACDNYM4AABJ64AAgzaDOQAASfsAAIM3gziAAIoHigkKEYoTgACAAAM4AABKKgAAgzgDOwAASj0AAIM5gzuAAIpJiksKVopYgACAAAM6AACKcwp0inuKfYAAgAADOoAASpQAAIM5gz0AAEqrAABDO4AAir8KwQrGismAAMAAAz0DPgAASuIAAIM8gz6AAIruivAK9wr5AACAAAM9AABLDYAAgzyDPoAASxoAAIM9Az4AAEsmgACDPYM+gACLMws1Cz2LQQAAwAA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AAAAAQAEAAEAAgABAAEAAAACAAUABQABAAAAAQAAAOsAAQAFAAEAAQABAAEAAADsAAAAAQACAAEAAQABAAAA7QABAAIB5wLGAAEB5wABAAIB5wLGAAAAAAABAAMB5wLGAsYAAAACAewCCAABAAIB5wLGAAAAAQH7AAEAAQLGAAEAAADuAAAAAQACAecCxgABAAAA7wACAfsB+wABAAAAAQAAAO4AAQABAsYAAgAHAecB5wAGAeoB6gAGAewB7AACAggCCAADAgwCDAAFAsYCxgABAskCyQAEAAECxgABAAEAAgACAg0CDQACAsYCxgABAAEAAQABAAIAAQABAAAAAAABAAMAAQABAAEAAAACAAIAAwABAAIAAQABAAAAAwAEAAIAAwABAAIAAQABAAAAAgACAAQAAQACAAEAAQAAAAEABQABAAIAAQABAAAAAAABAAMAAQABAAIAAAACAAYAAQABAAIAAQABAAAAAQABAsYAAgAEAfMB8wABAsgCyQABAwUDBQACA/sD+wABAAECxgABAAEAAgAGAecB5wADAeoB6gADAfMB8wACAsYCxgABAsgCyQACA/sD+wACAAEAAQABAAIAAQABAAAAAAABAAMAAQABAAIAAAAAAAEABAABAAEAAwABAAAAAgACAAIAAQAAAAEAAADwAAEAAgABAAEAAQABAAAA8QAAAAEAAgABAAEAAQAAAPIAAQACAeoCxgABAeoAAQACAsYCxgAAAAAAAQADAsYCxgLGAAAAAgHsAggAAQACAsYCxgAAAAMCyQHsAggAAQACAsYCxgAAAAECxgABAAICxgLGAAAAAAABAAICxgLGAAEAAADzAAIDBQH9AAEAAAABAAAA8wABAf0AAQABAsYAAQAAAPQAAQACAeUB6gACAf0B/QABAAAAAQAAAPUAAQHqAAEAAgHqAeUAAAAAAAEAAwHqAeUB5QAAAAIB7AIIAAEAAgHqAeUAAAADAskB7AIIAAEAAgHqAeUAAAABAf0AAQABAeUAAQAAAPUAAAABAAIB6gHlAAEAAAD2AAEAAQIfAAIABAIfAh8AAQIuAi4AAwLIAskAAgP7A/sAAgABAh8AAQABAAIAAwIfAh8AAQLIAskAAgP7A/sAAgABAAEAAQACAAEAAQAAAAAAAQADAAEAAQABAAAAAQACAAEAAgABAAEAAAAAAAEAAwABAAEAAgAAAAIAAwADAAEAAAABAAAA9wABAAMAAQABAAEAAQAAAPgAAAABAAIAAQABAAEAAAD5AAEAAgLJAs4AAQLJAAEAAgLOAs4AAAAAAAEAAwLOAs4CzgAAAAAAAQACAs4CzgABAAAA+gACBLwDBwABAAAAAQAAAPoAAQMHAAEAAQLOAAEAAAD7AAEAAwLIAskCzgACBLwDBwABAAAAAQAAAPwAAQLJAAEAAgLOAsgAAAAAAAEAAwLOAsgCyAAAAAAAAQACAs4CyAABAAAA/AABAwcAAQABAsgAAQAAAPwAAQADAfACyALJAAEDBwABAAECyAABAAAA/QACAf8DBwABAAAAAQAAAP0AAAABAAIB8ALIAAEAAAD9AAEAAwKSAsgCyQABAwcAAQABAsgAAQAAAP4AAgKbAwcAAQAAAAEAAAD+AAAAAQACApICyAABAAAA/gABAAMCwgLIAskAAQMHAAEAAQLIAAEAAAD/AAIDBAMHAAEAAAABAAAA/wAAAAEAAgLCAsgAAQAAAP8AAQADAfMCyALJAAEDBwABAAECyAABAAABAAACAgEDBwABAAAAAQAAAQAAAQLJAAEAAgHzAsgAAAAAAAEAAwHzAsgCyAAAAAAAAQACAfMCyAABAAABAAABAAMB8gIIAicAAQHyAAEAAgInAggAAAAAAAEAAwInAggCCAAAAAAAAQACAicCCAABAAABAQACAi8CAAABAAAAAQAAAQEAAQIAAAEAAQIIAAEAAAEBAAEAAgHlAsYAAQHlAAEAAgHlAsYAAAAAAAEAAwHlAsYCxgAAAAEB+gABAAECxgABAAABAgAAAAEAAgHlAsYAAQAAAQMAAgH6AfoAAQAAAAEAAAECAAEAAgHlAskAAQHlAAEAAgHlAskAAAAAAAEAAwHlAskCyQAAAAEB+gABAAECyQABAAABBAAAAAEAAgHlAskAAQAAAQUAAgH6AfoAAQAAAAEAAAEEAAEAAQHlAAEB5QABAAIB5QHlAAAAAAABAAMB5QHlAeUAAAACAfoB+gABAAAAAQAAAQYAAQH6AAEAAQHlAAEAAAEHAAAAAQACAeUB5QABAAABCAABAAECwgABAsIAAQACAsICwgAAAAAAAQADAsICwgLCAAAAAgMEAwQAAQAAAAEAAAEJAAEDBAABAAECwgABAAABCgAAAAEAAgLCAsIAAQAAAQsAAQABAfMAAQHzAAEAAgHzAfMAAAAAAAEAAwHzAfMB8wAAAAICAQIBAAEAAAABAAABDAABAgEAAQABAfMAAQAAAQ0AAAABAAIB8wHzAAEAAAEOAAEAAQD7AAEA+wABAAIA+wD7AAAAAAABAAMA+wD7APsAAAACARMBEwABAAAAAQAAAQ8AAQETAAEAAQD7AAEAAAEQAAAAAQACAPsA+wABAAABEQABAAED8wABA/MAAQABA/MAAAAAAAEAAgPzA/MAAAABBBUAAQAAAAEAAAESAAAAAQABA/MAAQAAARMAAQACAsYC0AABBL4AAQAAAAEAAAEUAAEC0AABAAECxgAAAAAAAQACAsYCxgAAAAAAAQABAsYAAQAAARQAAQABAs4AAQLOAAEAAQLOAAAAAAABAAICzgLOAAAAAQS8AAEAAAABAAABFQAAAAEAAQLOAAEAAAEWAAEAAgLOA/IAAQLOAAEAAQPyAAAAAAABAAID8gPyAAAAAAABAAED8gABAAABFwABBLwAAQAAAAEAAAEXAAEAAgLIAs4AAQS8AAEAAAABAAABGAABAs4AAQABAsgAAAAAAAEAAgLIAsgAAAAAAAEAAQLIAAEAAAEYAAEAAgIfAs4AAQS8AAEAAAABAAABGQABAs4AAQABAh8AAAAAAAEAAgIfAh8AAAAAAAEAAQIfAAEAAAEZAAEAAQHwAAEB8AABAAEB8AAAAAAAAQACAfAB8AAAAAEB8wABAAEB8AAAAAAAAQACAfAB8wAAAAEB/wABAAAAAQAAARoAAAABAAEB8AABAAABGwABAAIB8ALIAAEB8AABAAECyAAAAAAAAQACAsgCyAAAAAAAAQABAsgAAQAAARwAAQH/AAEAAAABAAABHAABAAIB8AHzAAEB8AABAAEB8wAAAAAAAQACAfMB8wAAAAEB8wABAAEB8wAAAAAAAQACAfMB8AAAAAAAAQABAfMAAQAAAR0AAQH/AAEAAAABAAABHQABAAICCwP7AAEEFgABAAAAAQAAAR4AAQP7AAEAAQILAAAAAAABAAICCwILAAAAAQIKAAEAAQILAAAAAAABAAECCwABAAABHgABAAICDQP7AAEEFgABAAAAAQAAAR8AAQP7AAEAAQINAAAAAAABAAICDQINAAAAAQIMAAEAAQINAAAAAAABAAECDQABAAABHwABAAICCgP7AAECCgABAAED+wAAAAAAAQACA/sD+wAAAAAAAQACA/sCCwAAAAAAAQABA/sAAQAAASAAAQIcAAEAAAABAAABIAABAAICDAP7AAECDAABAAED+wAAAAAAAQACA/sD+wAAAAAAAQACA/sCDQAAAAAAAQABA/sAAQAAASEAAQIdAAEAAAABAAABIQABAAIB8gINAAECHgABAAAAAQAAASIAAQINAAEAAQHyAAAAAAABAAIB8gHyAAAAAAABAAEB8gABAAABIgABAAEB5wACAAUB5wHnAAEB7AHsAAIB+wH7AAUCCAIIAAMCyALJAAQAAQHnAAEAAQACAAIB5wHnAAECyALJAAIAAQABAAEAAQABAAAAAAABAAIAAQABAAAAAgACAAMAAQABAAEAAAAAAAEAAgABAAIAAAABAAQAAQABAAEAAAABAAUAAQAAAAEAAAEjAAAAAQABAAEAAQAAASQAAQACAecCxgABAecAAQABAsYAAAAAAAEAAgLGAsYAAAACAewCCAABAAECxgAAAAECxgABAAECxgAAAAAAAQABAsYAAQAAASUAAQH7AAEAAAABAAABJQABAAICkgLIAAECkgABAAECyAAAAAAAAQACAsgCyAAAAAAAAQABAsgAAQAAASYAAQKbAAEAAAABAAABJgABAAECxgACAAcB5wHnAAYB6gHqAAYB7AHsAAICCAIIAAMCDAIMAAUCxgLGAAECyQLJAAQAAQLGAAEAAQACAAICDQINAAICxgLGAAEAAQABAAEAAQABAAAAAAABAAIAAQABAAAAAgACAAMAAQABAAEAAAADAAQAAgADAAEAAQABAAAAAgACAAQAAQABAAEAAAABAAUAAQABAAEAAAAAAAEAAgABAAIAAAACAAYAAQABAAEAAQAAAAEAAQLGAAIABAHzAfMAAQLIAskAAQMFAwUAAgP7A/sAAQABAsYAAQABAAIABgHnAecAAwHqAeoAAwHzAfMAAgLGAsYAAQLIAskAAgP7A/sAAgABAAEAAQABAAEAAAAAAAEAAgABAAIAAAAAAAEAAwABAAMAAQAAAAEAAgABAAAAAQAAAScAAAABAAEAAQABAAABKAABAAIB6gLGAAEB6gABAAECxgAAAAAAAQACAsYCxgAAAAIB7AIIAAEAAQLGAAAAAwLJAewCCAABAAECxgAAAAECxgABAAECxgAAAAAAAQABAsYAAQAAASkAAQH9AAEAAAABAAABKQABAAEB6gABAeoAAQABAeoAAAAAAAEAAgHqAeoAAAACAewCCAABAAEB6gAAAAMCyQHsAggAAQABAeoAAAABAf0AAQAAAAEAAAEqAAAAAQABAeoAAQAAASsAAQACAsYCyAACAAMCxgLGAAMCyALIAAIDBgMGAAEAAQLGAAMAAQAAAAIAAgAGAecB5wACAeoB6gACAfMB8wACAsYCxgABAsgCyQACA/sD+wACAAEAAQABAAAAAQAAASwAAQACAAEAAQABAAAAAAABAAIAAQABAAAAAQADAAEAAQABAAAAAAABAAIAAQACAAAAAAABAAEAAQABAAABLAABAAICHwLOAAECHwABAAECzgAAAAAAAQACAs4CzgAAAAAAAQABAs4AAQAAAS0AAQIuAAEAAAABAAABLQABAAECHwACAAQCHwIfAAECLgIuAAMCyALJAAID+wP7AAIAAQIfAAEAAQACAAMCHwIfAAECyALJAAID+wP7AAIAAQABAAEAAQABAAAAAAABAAIAAQABAAAAAQACAAEAAQABAAAAAAABAAIAAQACAAAAAQADAAEAAAABAAABLgAAAAEAAQABAAEAAAEvAAEAAgLJAs4AAQLJAAEAAQLOAAAAAAABAAICzgLOAAAAAAABAAECzgABAAABMAABAwcAAQAAAAEAAAEwAAEAAgHwAskAAQMHAAEAAAABAAABMQABAskAAQABAfAAAAAAAAEAAgHwAfAAAAAAAAEAAQHwAAEAAAExAAEAAgKSAskAAQMHAAEAAAABAAABMgABAskAAQABApIAAAAAAAEAAgKSApIAAAAAAAEAAQKSAAEAAAEyAAEAAgLGAskAAgAFAewB7AADAggCCAAEAsYCxgAFAskCyQACAwcDBwABAAECxgAEAAEAAAAAAAIAAgAGAecB5wACAeoB6gACAfMB8wACAsYCxgABAsgCyQACA/sD+wACAAEAAQABAAAAAQAAATMAAQACAAEAAQABAAAAAAABAAIAAQABAAAAAgADAAQAAQABAAEAAAABAAUAAQABAAEAAAAAAAEAAgABAAIAAAAAAAEAAQABAAEAAAEzAAEAAgLIAskAAQMHAAEAAAABAAABNAABAskAAQABAsgAAAAAAAEAAgLIAsgAAAAAAAEAAQLIAAEAAAE0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AAUAAQKHAAACjgSiAocEpASxBJwEswS6BKoEvAS+BLIAAQABAfQAAQABAfMAAQABAfQAAQABAfMAAgAFAAEChwAAAo4EogKHBKQEsQScBLMEugSqBLwEvgSyAAEAAgHzAfQAAQICAAEAAAABAAAAjwAAAAEAAQHzAAEAAACPAAEAAgGVAZ8AAQABAQAAAQAZAAEADQAOABQAGAAiAIYAkgCTAJkAnQCnAZUBlgGXAZgBmQGaAZsBnAGdAZ4BnwQTBBQAAQABAQAAAgAEAZUBnwACAaABoQABAasBqwABBBMEFAACAAEBAAABAAEAAgANAAEAAQABAA0ADgABABQAFAABABgAGAABACIAIgABAIYAhgABAJIAkwABAJkAmQABAJ0AnQABAKcApwABAZUBnwACAaABqwABBBMEFAACAAEAAQABAAEAAQABAAAAkQABAAIAAQABAAIAAQAAAJIAAgABAaABqwAAAAEAAQEAAAIAAQGgAasAAAABAAICJQImAAMCcQJwAnIAAgJxAnIAAQABA/sAAgADA/sD+wABBFkEWQACBFsEWwACAAED+wABAAEAAgACAsYCxgACA/sD+wABAAEAAQABAAIAAQACAAAAAQABAAEAAQACAAAAAQACAAEAAgABAAEAAAABAAECxgACAAwCcwJ0AAECeQJ6AAECfAJ9AAEETARNAAEETwRPAAEEVQRVAAEEWQRZAAEEWwRdAAEEXwRgAAEEaARpAAEEawRrAAEEbQRtAAEAAQLGAAEAAQACAAYB5wHnAAEB6gHqAAEB8wHzAAECxgLGAAECyALJAAED+wP7AAEAAQABAAEAAQABAAEAAACUAAEAAQABAAAAAQAAAJUAAQAGAecB6gHzAsgCyQP7AAIABgIBAgEAAgMGAwYAAwMHAwcABAQWBBYABQRZBFkAAQRbBFsAAQACAAYB5wHnAAEB6gHqAAIB8wHzAAMCyALIAAQCyQLJAAUD+wP7AAYAAgAFAfMB8wACAsYCxgABAsgCyAADAskCyQAEA/sD+wAFAAEAAQABAAEAAQABAAAAlAACAAIAAQABAAEAAQABAAAAlAABAAEAAQACAAIAAQABAAAAlQABAAEAAQABAAEAAQAAAJYAAgACAAEAAQAAAAEAAACXAAEAAQABAAEAAgABAAAAmAABAAEAAQAAAAEAAACZAAEAAgABAAEAAQABAAAAmgAAAAEAAgACAAEAAQAAAJsAAgADAAEAAQABAAEAAQAAAJQAAQABAAEAAgADAAEAAQAAAJUAAQABAAEAAQABAAEAAACWAAIAAwABAAEAAAABAAAAlwABAAEAAQABAAMAAQAAAJgAAQABAAEAAAABAAAAmQABAAMAAQABAAEAAQAAAJoAAAABAAIAAwABAAEAAACbAAIABAABAAEAAQABAAEAAACUAAEAAQABAAIABAABAAEAAACVAAEAAQABAAEAAQABAAAAlgACAAQAAQABAAAAAQAAAJcAAQABAAEAAQAEAAEAAACYAAEAAQABAAAAAQAAAJkAAQAEAAEAAQABAAEAAACaAAAAAQACAAQAAQABAAAAmwACAAUAAQABAAEAAQABAAAAlAABAAEAAQACAAUAAQABAAAAlQABAAEAAQABAAEAAQAAAJYAAgAFAAEAAQAAAAEAAACXAAEAAQABAAEABQABAAAAmAABAAEAAQAAAAEAAACZAAEABQABAAEAAQABAAAAmgAAAAEAAgAFAAEAAQAAAJsAAQABAsgAAQABAsYAAQABAskAAQACAsYCyQABAAECyAABAAECxgABAAECyQABAAECxgABAAECyQABAAICxgLJAAEAAQLGAAEAAQHzAAEAAgHzAsYAAQAEAfMCyALJA/sAAAABAAECxgABAAAAnAAAAAEAAQLGAAEAAACdAAEAAQLGAAEABQHnAeoCxgLIA/sAAQADALAAvADCAAIABgAiACIAAgArACsAAgBhAGEAAgCnAKcAAQEQAREAAQESARIAAgACAAMAsACwAAEAvAC8AAEAwgDCAAIAAgAAAAEAAQABAAAAAQAAAJ4AAQACAAEAAAABAAAAngABAAQBMgEzATYBNwABAAEBIgABAAMBMgEzATYAAQABAS0AAgABATIBOAAAAAIAAgEaAToAAQKKAooAAgACAAEBMgE4AAEAAgACARoBOgABAooCigACAAAAAQABAAEAAQAAAKAAAQABAAEAAAABAAAAoQAAAAEAAgACAAEAAQAAAKIAAgACAAEAAQAAAAEAAACjAAEAAQP7AAIAAgJwAnEAAgP7A/sAAQABA/sAAQABAAIAAgIfAh8AAgP7A/sAAQABAAECHwACAAkCcAJxAAEEUARRAAEEUwRTAAEEVwRXAAEEYgRjAAEEZQRmAAEEbgRvAAEEcQRxAAEEcwRzAAEAAQIfAAEAAQACAAMCHwIfAAECyALJAAED+wP7AAEAAQABAAEAAQABAAEAAACkAAEAAQABAAAAAQAAAKUAAQADAsgCyQP7AAIABAJwAnEAAgMGAwYAAQMHAwcAAwQWBBYABAACAAMCyALIAAECyQLJAAID+wP7AAMAAgAEAh8CHwABAsgCyAACAskCyQADA/sD+wAEAAIAAQACAAEAAQABAAEAAACkAAEAAgABAAIAAgABAAEAAAClAAEAAgABAAEAAQABAAAApgACAAEAAgABAAAAAQAAAKcAAQACAAEAAQACAAEAAACoAAEAAgABAAAAAQAAAKkAAQABAAEAAQABAAEAAACqAAAAAQACAAIAAQABAAAAqwAAAAEAAQABAAEAAACsAAIAAwACAAEAAQABAAEAAACkAAEAAgABAAIAAwABAAEAAAClAAEAAgABAAEAAQABAAAApgACAAMAAgABAAAAAQAAAKcAAQACAAEAAQADAAEAAACoAAEAAgABAAAAAQAAAKkAAQADAAEAAQABAAEAAACqAAAAAQACAAMAAQABAAAAqwAAAAEAAQABAAEAAACsAAIABAACAAEAAQABAAEAAACkAAEAAgABAAIABAABAAEAAAClAAEAAgABAAEAAQABAAAApgACAAQAAgABAAAAAQAAAKcAAQACAAEAAQAEAAEAAACoAAEAAgABAAAAAQAAAKkAAQAEAAEAAQABAAEAAACqAAAAAQACAAQAAQABAAAAqwAAAAEAAQABAAEAAACsAAEAAQIfAAEABAIfAsgCyQP7AAEAAQIfAAIACQABAIUAAQCGAQ8AAgEVARgAAgEZAU0AAQFOAYoAAgGVAZ4AAQIIAg0AAQP7A/sAAQQTBBQAAQABAh8AAQABAAIACQABAIUAAgCGAQ8AAQEVARgAAQEZAU0AAgFOAYoAAQGVAZ4AAgIIAg0AAgP7A/sAAgQTBBQAAgABAAEAAQABAAEAAAABAAIAAQABAAIAAAAAAAEAAQABAAEAAACtAAEAAgABAAAAAQAAAK4AAQABAsIAAgAJAAEAhQABAIYBDwACARUBGAACARkBTQABAU4BigACAZUBngABAggCDQABA/sD+wABBBMEFAABAAECwgABAAEAAgAJAAEAhQACAIYBDwABARUBGAABARkBTQACAU4BigABAZUBngACAggCDQACA/sD+wACBBMEFAACAAEAAQABAAEAAQAAAAEAAgABAAEAAgAAAAAAAQABAAEAAQAAAK8AAQACAAEAAAABAAAAsAABAAEB8AACAAkAAQCFAAEAhgEPAAIBFQEYAAIBGQFNAAEBTgGKAAIBlQGeAAECCAINAAED+wP7AAEEEwQUAAEAAQHwAAEAAQACAAkAAQCFAAIAhgEPAAEBFQEYAAEBGQFNAAIBTgGKAAEBlQGeAAICCAINAAID+wP7AAIEEwQUAAIAAQABAAEAAQABAAAAAQACAAEAAQACAAAAAAABAAEAAQABAAAAsQABAAIAAQAAAAEAAACyAAEAAQHnAAIACQABAIUAAQCGAQ8AAgEVARgAAgEZAU0AAQFOAYoAAgGVAZ4AAQIIAg0AAQP7A/sAAQQTBBQAAQABAecAAQABAAIACQABAIUAAgCGAQ8AAQEVARgAAQEZAU0AAgFOAYoAAQGVAZ4AAgIIAg0AAgP7A/sAAgQTBBQAAgABAAEAAQABAAEAAAABAAIAAQABAAIAAAABAAEAAQAAAAEAAACzAAAAAQABAAIAAQAAALQAAQABAfIAAgABAnYCdwABAAEB8gABAAEAAQHyAAEAAQABAAEAAQABAAEAAQAAALUAAQABAAEAAAABAAAAtgAAAAEAAQABAAEAAAC3AAEAAgJ/AoAAAQABA/sAAQABAicAAQABAicAAgACAn8CgAABBFgEWAABAAECJwABAAEAAgACAicCJwACA/sD+wABAAEAAQABAAIAAQACAAEAAAC4AAEAAQABAAEAAgABAAAAuQABAAEAAQAAAAEAAAC6AAAAAQACAAEAAgABAAAAuwAAAAEAAQACAAEAAAC8AAEAAQDfAAEAAgQrBDkAAQACA/MEHQABAAEEFQABAAEEFwABAAID8wQXAAEAAgPzBBcAAQAEApIEJQQ1BDYAAQABA/IAAQACBEMEvAABAs4AAQAAAAEAAAC+AAAAAQABBEMAAQAAAL4AAQABAfQAAQABAgMAAQABAgMAAQACAsYCzgABAsYAAQABAs4AAAAAAAEAAgLOAs4AAAAAAAEAAQLOAAEAAADBAAEDBQABAAAAAQAAAMEAAQACAeoCzgABAeoAAQABAs4AAAAAAAEAAgLOAs4AAAAAAAEAAQLOAAEAAADCAAEB/QABAAAAAQAAAMIAAQAEAlYCVwQpBCoAAQACAfMB9AABAAIB8wH0AAEAAQEAAAEAAQEAAAEABwHnAeoB8wLGAsgCyQP7AAEABQHzAsYCyALJA/sAAQAFAfMCxgLIAskD+wABAAUB8wLGAsgCyQP7AAEABQHzAsYCyALJA/sAAQAEAfMCyALJA/sAAQAEAfMCyALJA/sAAQAEAfMCyALJA/sAAQAEAfMCyALJA/sAAQABAsgAAQADALAAvADCAAEAAgEiAS0AAgABATIBOAAAAAEABAIfAsgCyQP7AAEABAIfAsgCyQP7AAEABAIfAsgCyQP7AAEAAwLIAskD+wABAAMCyALJA/sAAQADAsgCyQP7AAEAAwLIAskD+wABAAMCyALJA/sAAQABAh8AAQABAsIAAQABAfAAAQABAecAAQABAfIAAQABAfIAAQABAfIAAQACAicD+wABAAECJwABAAECJwABAAECJwABAAMD8wQVBBcAAQACBEMEvAABAAEB9AABAAECAwABAAICxgLOAAEAAgHqAs4AAgABAcAByQAAAAEABAABAEcAhgDQAAEAAQDCAMYAAgHuAAEAAQA6AD4AAgHuAAEAAwLIAskD+wABAAICyAP7AAEAAQP7AAEAAgLJA/sAAQACAsgD+wABAAICyQP7AAEAAgLIA/sAAQACAskD+wABAAED+wABAAECyAABAAECyAABAAECyQABAAECyQABAAED+wABAAECyAABAAECyQABAAMB6gIfAskAAQABAh8AAQACAsgCzgABAAECzgABAAEB8AABAAEB8AABAAEB5wABAAEB5wABAAIB5wLGAAEAAQLGAAEAAQLGAAEAAgHqAsYAAQACAeUB6gABAAEB6gABAAECHwABAAICyQLOAAEAAwLIAskCzgABAAMB8ALIAskAAQADApICyALJAAEAAwLCAsgCyQABAAMB8wLIAskAAQADAfICCAInAAEAAgHlAsYAAQABAeUAAQACAeUCyQABAAEB5QABAAECwgABAAECwgABAAEB8wABAAEB8wABAAEA+wABAAEA+wABAAED8wABAAED8wABAAICxgLQAAEAAQLOAAEAAgLOA/IAAQACAsgCzgABAAICHwLOAAEAAQHwAAEAAgHwAsgAAQACAfAB8wABAAICCwP7AAEAAgINA/sAAQACAgoD+wABAAICDAP7AAEAAgHyAg0AAQABAecAAQACAecCxgABAAICkgLIAAEAAQLGAAEAAgHqAsYAAQABAeoAAQACAsYCyAABAAICHwLOAAEAAQIfAAEAAgLJAs4AAQACAfACyQABAAICkgLJAAEAAgLGAskAAQACAsgCyQABAAICwgLJAAEAAgHzAskAAQACAfICCgABAAIB8gIMAAEAAgHnAfIAAQACAfICxgABAAIB6gHyAAEAAgHyAggAAQACAewB8gABAAIB8gInAAEAAQLkAAEAAQLkAAEAAgHlAsYAAQACAeUCHwABAAEB5QABAAIB5QHsAAEAAgLCAsgAAQABAsIAAQACAewCxgABAAIB5QHsAAEAAQHsAAEAAQHsAAEAAQHoAAEAAQHoAAEAAgHwAfMAAQACAfMCyAABAAEB8wABAAMB5wLIAskAAQACAAgAAQAAABQAAQAAABwAAndnaHQBAAAAAAIAAwAAAAIAAgGQAAACvAAAAAA=); + + font-weight: normal; + font-style: normal italic; +} + @font-face { + font-family: "Space Wham"; + src: url(data:application/octet-stream;base64,AAEAAAALAIAAAwAwT1MvMo8DPuMAAAE4AAAAYGNtYXD4xvseAAAEyAAABJhnbHlml1GywwAADJQAAJSkaGVhZB64MR4AAAC8AAAANmhoZWEhdhJBAAAA9AAAACRobXR4/3X+jAAAAZgAAAMwa2Vybvzp9VcAAKE4AAAAKmxvY2EANVWQAAAJYAAAAzRtYXhwANIAWAAAARgAAAAgbmFtZTK1OpYAAKFkAAANjHBvc3QBnADMAACu8AAAACAAAQAAAAEAABgqD91fDzz1AAAQAAAAAADX0eptAAAAANfR6m3+jP0YEXQSLgAAAAgAAgABAAAAAAABAAARdP0YAAAS6P6MAXQRdAABAAAAAAAAAAAAAAAAAAAAzAABAAAAzABWAAUAAAAAAAIAAAAAAAAAAAAAAAAAAAAAAAIMjAGQAAUABAgACAAAAP6MCAAIAAAACAAAzAMzAAAAAAQAAAAAAAAAoAAABwAAAAoAAAAAAAAAAEZTVFIAQAAgISINF/0YAAARdALoAAAB8wAAAAAHRQ0XAAAAIAAAC4YAAAF0AAABdAAAB0UAAARdAAAIugAADosAAA6LAAARdAAADosAAARdAAAF0QAABdEAAAi6AAAOiwAABF0AAAuiAAAEXQAAEXQAAA6LAAAOiwAADosAAA6LAAAOiwAADosAAA6LAAAOiwAADosAAA6LAAAEXQAABF0AAAaLAAAOiwAABosAAA6LAAAOiwAADosAAA6LAAAOiwAADosAAA6LAAAOiwAADosAAA6LAAAOiwAADosAAA6LAAAOiwAADosAAA6LAAAOiwAADosAAA6LAAAOiwAADosAAA6LAAAOiwAADosAAA6LAAAOiwAADosAAA6LAAAF0QAAEXQAAAXRAAAOiwAADosAAAdFAAAOiwAADosAAA6LAAAOiwAADosAAA6LAAAOiwAADosAAARdAAAOiwAADosAAARdAAAOiwAADosAAA6LAAAOiwAADosAAA6LAAAOiwAADosAAA6LAAAOiwAADosAAA6LAAAOiwAADosAAAaLAAAEXQAABosAAAi6AAAEXQAADosAAA6LAAAEXQAAEXQAAAi6AAALogAACLoAABF0AAAOiwAAAugAAAi6AAAOiwAADosAAA6LAAAOiwAADosAAA6LAAAOiwAADosAAA6LAAAOiwAADosAAA6LAAAOiwAA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ZWUgaXQgZXNwZWNpYWxseSB3ZWxsIG9uICJCIiwgIjMiLCAiOCIsIGFuZCAiJmFtcDsiLjwvcD48cD48c3Ryb25nPlJlY2VudCB1cGRhdGVzPC9zdHJvbmc+OiAiSiIgaW1wcm92ZWQsIGxvd2VyZWQgIioiIHNvIGl0IHdvdWxkbid0IHRvdWNoIHRoZSBsaW5lIGFib3ZlIGl0LCBhZGRlZCAiwaO0qajA26oiLjwvcD5odHRwczovL2ZvbnRzdHJ1Y3QuY29tL2ZvbnRzdHJ1Y3Rpb25zL3Nob3cvMTU0OTQzMC9zcGFjZS13aGFtaHR0cHM6Ly9mb250c3RydWN0LmNvbS9mb250c3RydWN0b3JzL3Nob3cvMTUyMDU2MC96ZXBocmFtQ3JlYXRpdmUgQ29tbW9ucyBDQzAgUHVibGljIERvbWFpbiBEZWRpY2F0aW9uaHR0cDovL2NyZWF0aXZlY29tbW9ucy5vcmcvcHVibGljZG9tYWluL3plcm8vMS4wL0ZpdmUgYmlnIHF1YWNraW5nIHplcGh5cnMgam9sdCBteSB3YXggYmVkQXd3TWZGMW5YZz09AEMAbwBwAHkAcgBpAGcAaAB0ACAAegBlAHAAaAByAGEAbQAgADIAMAAxADgAUwBwAGEAYwBlACAAVwBoAGEAbQBSAGUAZwB1AGwAYQByAFMAcABhAGMAZQAgAFcAaABhAG0AUwBwAGEAYwBlACAAVwBoAGEAbQAgAFIAZQBnAHUAbABhAHIAVgBlAHIAcwBpAG8AbgAgADEALgAwAFMAcABhAGMAZQAtAFcAaABhAG0ARgBvAG4AdABTAHQAcgB1AGMAdAAgAGkAcwAgAGEAIAB0AHIAYQBkAGUAbQBhAHIAawAgAG8AZgAgAEYAbwBuAHQAUwB0AHIAdQBjAHQALgBjAG8AbQBoAHQAdABwAHMAOgAvAC8AZgBvAG4AdABzAHQAcgB1AGMAdAAuAGMAbwBtAHoAZQBwAGgAcgBhAG0gHABTAHAAYQBjAGUAIABXAGgAYQBtIB0AIAB3AGEAcwAgAGIAdQBpAGwAdAAgAHcAaQB0AGgAIABGAG8AbgB0AFMAdAByAHUAYwB0AAoARABlAHMAaQBnAG4AZQByACAAZABlAHMAYwByAGkAcAB0AGkAbwBuADoAIAA8AHAAPgBBACAAcwBsAGkAZwBoAHQAbAB5ACAAYwBoAGkAbQBlAHIAaQBjACAAcwBjAGkALQBmAGkAIABkAGUAcwBpAGcAbgAgAHcAaQB0AGgAIABuAG8AIAByAGUAbABhAHQAaQBvAG4AIAB0AG8AIABTAHAAYQBjAGUAIABCAGwAYQBtACwAIABTAHAAYQBjAGUAIABDAGwAYQBtACwAIABTAHAAYQBjAGUAIABDAHIAYQBtACwAIABTAHAAYQBjAGUAIABEAGEAbQAsACAAUwBwAGEAYwBlACAARgBhAG0ALAAgAFMAcABhAGMAZQAgAEYAbABhAG0ALAAgAFMAcABhAGMAZQAgAEcAcgBhAG0ALAAgAFMAcABhAGMAZQAgAEgAYQBtACwAIABTAHAAYQBjAGUAIABKAGEAbQAsACAAUwBwAGEAYwBlACAASwBhAHoAYQBhAG0ALAAgAFMAcABhAGMAZQAgAE0AYQAnAGEAbQAsACAAUwBwAGEAYwBlACAAUAByAGEAbQAsACAAUwBwAGEAYwBlACAAUgBhAG0ALAAgAFMAcABhAGMAZQAgAFMAYQBtACwAIABTAHAAYQBjAGUAIABTAGwAYQBtACwAIABTAHAAYQBjAGUAIABUAHIAYQBtACwAIABvAHIAIABTAHAAYQBjAGUAIABZAGEAbQAuADwALwBwAD4ACgAKADwAcAA+AEkAbgAgAG0AYQBrAGkAbgBnACAAdABoAGkAcwAgAEkAIABhAHQAdABlAG0AcAB0AGUAZAAgAHQAbwAgAGEAYwBoAGkAZQB2AGUAIABhACAAaABhAHIAbQBvAG4AeQAgAGIAZQB0AHcAZQBlAG4AIABhAG4AZwBsAGUAcwAgAGEAbgBkACAAYwB1AHIAdgBlAHMALgAgAFkAbwB1ACAAYwBhAG4AIABzAGUAZQAgAGkAdAAgAGUAcwBwAGUAYwBpAGEAbABsAHkAIAB3AGUAbABsACAAbwBuACAAIgBCACIALAAgACIAMwAiACwAIAAiADgAIgAsACAAYQBuAGQAIAAiACYAYQBtAHAAOwAiAC4APAAvAHAAPgAKAAoAPABwAD4APABzAHQAcgBvAG4AZwA+AFIAZQBjAGUAbgB0ACAAdQBwAGQAYQB0AGUAcwA8AC8AcwB0AHIAbwBuAGcAPgA6ACAAIgBKACIAIABpAG0AcAByAG8AdgBlAGQALAAgAGwAbwB3AGUAcgBlAGQAIAAiACoAIgAgAHMAbwAgAGkAdAAgAHcAbwB1AGwAZABuACcAdAAgAHQAbwB1AGMAaAAgAHQAaABlACAAbABpAG4AZQAgAGEAYgBvAHYAZQAgAGkAdAAsACAAYQBkAGQAZQBkACAAIgChAKMApQCpAK4AvyCsISIAIgAuADwALwBwAD4ACgBoAHQAdABwAHMAOgAvAC8AZgBvAG4AdABzAHQAcgB1AGMAdAAuAGMAbwBtAC8AZgBvAG4AdABzAHQAcgB1AGMAdABpAG8AbgBzAC8AcwBoAG8AdwAvADEANQA0ADkANAAzADAALwBzAHAAYQBjAGUALQB3AGgAYQBtAGgAdAB0AHAAcwA6AC8ALwBmAG8AbgB0AHMAdAByAHUAYwB0AC4AYwBvAG0ALwBmAG8AbgB0AHMAdAByAHUAYwB0AG8AcgBzAC8AcwBoAG8AdwAvADEANQAyADAANQA2ADAALwB6AGUAcABoAHIAYQBtAEMAcgBlAGEAdABpAHYAZQAgAEMAbwBtAG0AbwBuAHMAIABDAEMAMAAgAFAAdQBiAGwAaQBjACAARABvAG0AYQBpAG4AIABEAGUAZABpAGMAYQB0AGkAbwBuAGgAdAB0AHAAOgAvAC8AYwByAGUAYQB0AGkAdgBlAGMAbwBtAG0AbwBuAHMALgBvAHIAZwAvAHAAdQBiAGwAaQBjAGQAbwBtAGEAaQBuAC8AegBlAHIAbwAvADEALgAwAC8ARgBpAHYAZQAgAGIAaQBnACAAcQB1AGEAYwBrAGkAbgBnACAAegBlAHAAaAB5AHIAcwAgAGoAbwBsAHQAIABtAHkAIAB3AGEAeAAgAGIAZQBkAEEAdwB3AE0AZgBGADEAbgBYAGcAPQA9AAMAAAAAAAABmQDMAAAAAAAAAAAAAAAAAAAAAAAAAAA=); + font-weight: normal; + font-style: normal italic; + } + + @font-face { + font-family: "Edwardian Script ITC"; + src: url(data:application/octet-stream;base64,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); + font-weight: normal; + font-style: normal italic; + } + + @font-face { + font-family: "Quantico"; + src: url(data:application/octet-stream;base64,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GRAZIRkvGVwZhRmkGbEZ1xoAGiIaPRpXGnYamRqlGrYaxBscG1wbfRucG8ob9xwgHEQcZwABAAAAAgCDRZXAmF8PPPUACwPoAAAAAMsRoKkAAAAAyxGgqf/Y/rEFQgQJAAAACAACAAAAAAAAAQQAAAAAAAABTQAAAQQAAAFeAGQBrgBGAvQAPAKFAFAD3wBQAo8AWgD6AEYBawBaAWsAPAJ2AFACWAAyAV4AZAG2AEYBXgBkAYIAHgKZAFoCOgBaAnYAWgKLAFoCcAAoAoUAWgJ7AFoCZwA8AoUAWgJ7AFoBXgBkAV4AZAKKADwCqABaAooAWgJEAFoD8gBaApgAFAKPAFoCmQBaAsEAWgIbAFoCEQBaAqMAWgLLAFoBGABaAhcAFAKXAFoB3wBaA3UAWgLfAFoCwQBaAnEAWgLBAFoCjwBaAoUAUAIuAB4CwQBaApgAFAO8AB4CiwAeAmMAFAJJADIBawBaAYIAHgFrADwCWgAyAmT/7AH0ALkCFwA8AlMAUAIDAFACUwBQAisAUAGFACgCPwA8AlMAUAEBAEsBAf/YAhMAUAE9AFADQQBQAkkAUAJJAFACUwBQAlMAUAGFAFACGABQAZkAKAJJAFACDwAUAvUAHgH0ABQCBwAUAdIAKAGOACgBSgB4AY4APAKqAEYBBAAAAV4AZAIDAFACggAoAosAKAFKAHgCjQBaAiAAbgNIAFoCIQA8AqgAWgNIAFoCVwCQAfkAUAKoAFoB9AC5AmQAUAKtADwBXgBkAkIA0wJdAFoCqABaAkQAWgKYABQCmAAUApgAFAKYABQCmAAUApgAFAPI/+wCmQBaAhsAWgIbAFoCGwBaAhsAWgEY//cBGABBARj/8QEY/+oCwQAUAt8AWgLBAFoCwQBaAsEAWgLBAFoCwQBaAmIAPALBAFoCwQBaAsEAWgLBAFoCwQBaAmMAFAJ7AFoCmQAeAhcAPAIXADwCFwA8AhcAPAIXADwCFwA8A0EAPAIDAFACKwBQAisAUAIrAFACKwBQAQH/5QEBADwBAf/lAQH/3wJ7AFsCSQBQAkkAUAJJAFACSQBQAkkAUAJJAFACWAAyAkkAUAJJAFACSQBQAkkAUAJJAFACBwAUAlMAUAIHABQCUwAKARj/8wEB/+gBAQBQAy8AWgICAEsCFwAUAQH/2AITAFACEwBQAd8AWgGQAFAB3wAUAT0AFALfAFoCSQBQA8QAWgNzAFACjwBaAo8AWgGFAFACjwBaAYUAJwKFAFACGABQAmMAFAJJADIB0gAoAYUADAITAG4CEwBuAhEAegFeAGQCEQB6AggAtAH6AGQB9ABCArgARgPOAEYBSgBaAUoAWgFeAGQCOgBaAjoAWgJOAGQCRwA8AkcAPAJEAGQDygBkBXQAUAGuAFoBrgBaApcACgKiAB4DTQBGAnsAWgJYADIDegBaAtIAWgKoAFoCqABaAqgAWgI/AFACSQBQAQEAUAEB/9gBQABkA4AAUANaAFACfAAoAsIAKAQLACgERwAoA40AUAJ8ACgDeQBQAAEAAAQn/pEAAAV0/9j/3gVCAAEAAAAAAAAAAAAAAAAAAAEFAAIB1QGQAAUAAAK8AooAAACMArwCigAAAd0AMgD6AAACAAAAAAAAAAAAgAAAL1AAAEoAAAAAAAAAAE1BRFQAQAAg+wgEJ/6RAAAEJwFvIAABEQAAAAAB9AK8AAAAIAACAAAAAgAAAAMAAAAUAAMAAQAAABQABAFoAAAAVgBAAAUAFgB+AKMAqwCxALgAuwD/ASkBNQE4AUQBVAFZAWEBeAF+AZICxwLdIBQgGiAeICIgJiAwIDogRCCsISIiAiISIh4iSCJgImXgA/a+9sP4APj/+wT7CP//AAAAIACgAKUArgC0ALoAvwEnATEBNwE/AVIBVgFgAXgBfQGSAsYC2CATIBggHCAgICYgMCA5IEQgrCEiIgIiEiIeIkgiYCJk4AH2vvbD+AD4//sB+wb////j/8L/wf+//73/vP+5/5L/i/+K/4T/d/92/3D/Wv9W/0P+EP4A4MvgyODH4Mbgw+C64LLgqeBC383e7t7f3tTeq96U3pEg9go8CjgI/Af+Bf0F/AABAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAC4Af+FsASNAAAAAA4ArgADAAEECQAAAO4AAAADAAEECQABABAA7gADAAEECQACAA4A/gADAAEECQADAD4BDAADAAEECQAEABAA7gADAAEECQAFABoBSgADAAEECQAGACABZAADAAEECQAHAFABhAADAAEECQAIAA4B1AADAAEECQAJABgB4gADAAEECQALACwB+gADAAEECQAMACwB+gADAAEECQANASACJgADAAEECQAOADQDRgBDAG8AcAB5AHIAaQBnAGgAdAAgACgAYwApACAAMgAwADEAMQAgAE0AYQB0AHQAaABlAHcAIABEAGUAcwBtAG8AbgBkACAAKABoAHQAdABwADoALwAvAHcAdwB3AC4AbQBhAGQAdAB5AHAAZQAuAGMAbwBtACAAfAAgAG0AYQB0AHQAZABlAHMAbQBvAG4AZABAAGcAbQBhAGkAbAAuAGMAbwBtACkALAAgAHcAaQB0AGgAIABSAGUAcwBlAHIAdgBlAGQAIABGAG8AbgB0ACAATgBhAG0AZQAgACIAUQB1AGEAbgB0AGkAYwBvACIAUQB1AGEAbgB0AGkAYwBvAFIAZQBnAHUAbABhAHIATQBBAEQAdAB5AHAAZQA6ACAAUQB1AGEAbgB0AGkAYwBvACAAUgBlAGcAdQBsAGEAcgA6ACAAMgAwADEAMQBWAGUAcgBzAGkAbwBuACAAMgAuADAAMAAyAFEAdQBhAG4AdABpAGMAbwAtAFIAZQBnAHUAbABhAHIAUQB1AGEAbgB0AGkAYwBvACAAaQBzACAAYQAgAHQAcgBhAGQAZQBtAGEAcgBrACAAbwBmACAATQBhAHQAdAAgAEQAZQBzAG0AbwBuAGQALgBNAEEARAB0AHkAcABlAE0AYQB0AHQAIABEAGUAcwBtAG8AbgBkAGgAdAB0AHAAOgAvAC8AdwB3AHcALgBtAGEAZAB0AHkAcABlAC4AYwBvAG0AVABoAGkAcwAgAEYAbwBuAHQAIABTAG8AZgB0AHcAYQByAGUAIABpAHMAIABsAGkAYwBlAG4AcwBlAGQAIAB1AG4AZABlAHIAIAB0AGgAZQAgAFMASQBMACAATwBwAGUAbgAgAEYAbwBuAHQAIABMAGkAYwBlAG4AcwBlACwAIABWAGUAcgBzAGkAbwBuACAAMQAuADEALgAgAFQAaABpAHMAIABsAGkAYwBlAG4AcwBlACAAaQBzACAAYQB2AGEAaQBsAGEAYgBsAGUAIAB3AGkAdABoACAAYQAgAEYAQQBRACAAYQB0ADoAIABoAHQAdABwADoALwAvAHMAYwByAGkAcAB0AHMALgBzAGkAbAAuAG8AcgBnAC8ATwBGAEwAaAB0AHQAcAA6AC8ALwBzAGMAcgBpAHAAdABzAC4AcwBpAGwALgBvAHIAZwAvAE8ARgBMAAIAAAAAAAD/tQAyAAAAAAAAAAAAAAAAAAAAAAAAAAABBQAAAAEAAgADAAQABQAGAAcACAAJAAoACwAMAA0ADgAPABAAEQASABMAFAAVABYAFwAYABkAGgAbABwAHQAeAB8AIAAhACIAIwAkACUAJgAnACgAKQAqACsALAAtAC4ALwAwADEAMgAzADQANQA2ADcAOAA5ADoAOwA8AD0APgA/AEAAQQBCAEMARABFAEYARwBIAEkASgBLAEwATQBOAE8AUABRAFIAUwBUAFUAVgBXAFgAWQBaAFsAXABdAF4AXwBgAGEBAgCjAIQAhQCWAOgAhgCOAIsAnQCpAIoA2gCDAJMAjQCXAIgAwwDeAJ4AqgCiAK0AyQDHAK4AYgBjAJAAZADLAGUAyADKAM8AzADNAM4A6QBmANMA0ADRAK8AZwDwAJEA1gDUANUAaADrAO0AiQBqAGkAawBtAGwAbgCgAG8AcQBwAHIAcwB1AHQAdgB3AOoAeAB6AHkAewB9AHwAuAChAH8AfgCAAIEA7ADuALoBAwEEAQUA1wEGAQcBCAEJAQoBCwEMAQ0A4gDjAQ4BDwCwALEBEAERARIBEwEUAOQA5QC7AOYA5wCmANgA4QDbANwA3QDgANkA3wCyALMAtgC3AMQAtAC1AMUAggDCAIcAqwDGAL4AvwC8ARUAjACYAO8AkgCnAI8AlACVARYBFwEYARkBGgEbANIAwADBARwBHQEeAR8BIAd1bmkwMEEwBGhiYXIGSXRpbGRlBml0aWxkZQJJSgJpagtKY2lyY3VtZmxleAtqY2lyY3VtZmxleAxrY29tbWFhY2NlbnQMa2dyZWVubGFuZGljCkxkb3RhY2NlbnQEbGRvdAZOYWN1dGUGbmFjdXRlBlJhY3V0ZQxSY29tbWFhY2NlbnQMcmNvbW1hYWNjZW50BlJjYXJvbgZyY2Fyb24ERXVybwVhLmFsdAVnLmFsdAVsLmFsdAhkb3RsZXNzagtjb21tYWFjY2VudAdtYWRzbHVnA2ZmaQNmZmwCc3QCZmoCY3QAAAAAAQAB//8ADwABAAAADAAAAAAAAAACAAEAAQEEAAEAAAABAAAACgAeACwAAWxhdG4ACAAEAAAAAP//AAEAAAABa2VybgAIAAAAAQAAAAEABAACAAAAAQAIAAEAKgAEAAAAEACyAE4AzABUAHYAlADmALIAsgCyALIAsgCyAOYAzADmAAEAEAAkACkALwA3ADkAOgA8AHkAegB7AHwAfQB+AJYAwwDSAAEALf+wAAgAJP/OAC3/xAB5/84Aev/OAHv/zgB8/84Aff/OAH7/zgAHACT/zgB5/84Aev/OAHv/zgB8/84Aff/OAH7/zgAHACT/4gB5/+IAev/iAHv/4gB8/+IAff/iAH7/4gAGADf/zgA5/84AOv/iADz/xACW/8QA0v/EAAYAN//EADn/2AA6/+wAPP/YAJb/2ADS/9gACAAk/8QALf+wAHn/xAB6/8QAe//EAHz/xAB9/8QAfv/EAAEAAAAKABYAGAABbGF0bgAIAAAAAAAAAAAAAA==); + font-weight: normal; + font-style: normal italic; + } + +body { + /*metadata*/ + --metadata-label-width: 10em; + --metadata-gap: 5px; + --metadata-property-radius: 3px; + + /*Style Settings Custom Tabs Colors*/ + --activetab-color: var(--color-accent-hsl); --activetab-highlight: hsl(var(--activetab-color)); + --tab-background-active: hsla(var(--activetab-color), 0.15); + --tab-text-color-focused-active-current: var(--activetab-highlight); + --tab-text-color-focused:var(--activetab-highlight); + --activetab-faint: hsla(var(--activetab-color), 0.60); + --tab-background-clicked: hsla(var(--activetab-color), 0.25); + --tab-background-active-clicked: hsla(var(--activetab-color), 0.3); +/*Style Settings inactive tab Custom Colors*/ + --inactivetab-color: var(--activetab-color); + --inactivetab: hsla(var(--inactivetab-color), 0.60); + /*Style Settings inactive title Custom Colors*/ + --Inactive-title: var(--text-faint); + /*Style Settings active title Custom Colors*/ + --active-title: var(--color-accent-hsl); + --activetitle-highlight: hsl(var( --active-title)); + --title-background-clicked: hsla(var(--active-title), 0.25); + --title-background-active-clicked: hsla(var(--active-title), 0.3); + --custom-accent: var(--color-accent-hsl); + --custom-acc-text: hsl(var(--custom-accent)); + --custom-acc-faint: hsla(var(--custom-accent), 0.6); + --custom-acc-active: hsla(var(--custom-accent), 0.43); + --custom-acc-back: hsla(var(--custom-accent), 0.4); + --custom-acc-hover: hsla(var(--custom-accent), 0.3); + /*Fonts*/ + --default-font: 'OxaniumFira', 'Inter', 'Rubik', 'Segoe UI'; + --title-heading: 'Space Wham', 'Inter'; + /*--heading: 'Quantico', 'Inter';*/ + --h2-font: 'Quantico', 'Inter'; + --h3-font: 'Quantico', 'Inter'; + --h4-font: 'Quantico', 'Inter'; + --CG-cite-font: 'Edwardian Script ITC'; + + /*Logo*/ + --newoutlined-logo: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 512 512' width='18' height='18' fill='none' stroke='currentColor' stroke-width='32' stroke-linecap='round' stroke-linejoin='round' class='logo-wireframe'%3E%3Cpath d='M172.7 461.6c73.6-149.1 2.1-217-43.7-246.9m72 96.7c71.6-17.3 141-16.3 189.8 88.5m-114-96.3c-69.6-174 44.6-181 16.3-273.6m97.7 370c1.6-3 3.3-5.8 5.1-8.6 20-29.9 34.2-53.2 41.4-65.3a16 16 0 0 0-1.2-17.7 342.1 342.1 0 0 1-40.2-66.1c-10.9-26-12.5-66.5-12.6-86.2 0-7.4-2.4-14.7-7-20.6l-81.8-104a32 32 0 0 0-1.4-1.5m97.7 370a172.8 172.8 0 0 0-18 59c-2.9 21.5-24 38.4-45 32.6-30-8.3-64.5-21.1-95.7-23.5l-47.8-3.6c-7.7-.6-15-4-20.3-9.5l-82.3-84.8c-9-9.2-11.4-23-6.2-34.8 0 0 51-111.8 52.8-117.7l.7-3M293.1 30a31.5 31.5 0 0 0-44.4-2.3l-97.4 87.5c-5.4 5-9 11.5-10 18.8-3.7 24.5-9.7 68-12.3 80.7'%3E%3C/path%3E%3C/svg%3E"); + --outlined-logo: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='15 -3 69 106'%3E%3Cpath d='M 30.91 17.52 L 34.43 35.7 M 61.44 14.41 L 62.61 0 M 34.43 35.7 L 37.57 90.47 M 81 26.39 L 61.44 14.41 L 34.43 35.7 L 65.35 100 M 62.61 0 L 30.91 17.52 L 18 45.45 L 37.57 90.47 L 65.35 100 L 70.44 89.8 L 81 26.39 L 62.61 0 Z' stroke='%23000000' stroke-width='4' fill='none'/%3E%3C/svg%3E"); + --CG-line-width: 40rem; + --file-line-width: var(--CG-line-width); + /*max min icons*/ + --win-maximize: url("data:image/svg+xml,%3Csvg fill='none' height='16' viewBox='0 0 16 16' width='16' xmlns='http://www.w3.org/2000/svg'%3E%3Cpath d='m4.5 3c-.82843 0-1.5.67157-1.5 1.5v7c0 .8284.67157 1.5 1.5 1.5h7c.8284 0 1.5-.6716 1.5-1.5v-7c0-.82843-.6716-1.5-1.5-1.5zm0 1h7c.2761 0 .5.22386.5.5v7c0 .2761-.2239.5-.5.5h-7c-.27614 0-.5-.2239-.5-.5v-7c0-.27614.22386-.5.5-.5z' fill='%23212121'/%3E%3C/svg%3E"); + --win-minimize: url("data:image/svg+xml,%3Csvg fill='none' height='16' viewBox='0 0 16 16' width='16' xmlns='http://www.w3.org/2000/svg'%3E%3Cg fill='%23212121'%3E%3Cpath d='m5.08496 4c.20592-.5826.76154-1 1.41465-1h3.5c1.65689 0 2.99999 1.34315 2.99999 3v3.5c0 .6531-.4174 1.2087-1 1.4146v-4.9146c0-1.10457-.8954-2-1.99999-2z'/%3E%3Cpath d='m4.5 5h5c.8284 0 1.5.67157 1.5 1.5v5c0 .8284-.6716 1.5-1.5 1.5h-5c-.82843 0-1.5-.6716-1.5-1.5v-5c0-.82843.67157-1.5 1.5-1.5zm0 1c-.27614 0-.5.22386-.5.5v5c0 .2761.22386.5.5.5h5c.27614 0 .5-.2239.5-.5v-5c0-.27614-.22386-.5-.5-.5z'/%3E%3C/g%3E%3C/svg%3E"); + /*Background*/ + --background-primary: var(--color-base-00); + --background-secondary: var(--color-base-25); + --background-tertiary: var(--color-base-05); + --background-modifier-hover: var(--tab-background-active); + --background-modifier-message: var(--background-tertiary); + /*Titlebar*/ + --titlebar-background-focused: var(--background-secondary); + --titlebar-text-color-focused: var(--text-muted); + /*Tab*/ + --tab-divider-color: transparent; + --tab-max-width: 180px; + --tab-width: 225px; + --tab-radius-active: var(--radius-s); + /*Text*/ + --text-muted: var(--color-accent); + --text-faint: var(--color-accent-faint); + /*Scrollbar*/ + --scrollbar-thumb-bg: var(--text-selection); + --scrollbar-active-thumb-bg: var(--text-accent); + --scrollbar-bg: var(--color-accent-active); + /*Drag Ghost*/ + --drag-ghost-text-color: var(--text-accent); + --drag-ghost-background: var(--background-tertiary); + /*Link*/ + --link-external-color: var(--outlink-color); + --link-external-color-hover: var(--link-external-color); + --internal-link-hover: var(--inlink-color); + --inlink-color: #FFA500; + --outlink-color: #ffc400; + /*Vault Name*/ + --vault-name-font-size: var(--font-ui-medium); + --vault-name-color: var(--custom-acc-text); + /*Swatch*/ + --swatch-radius: 3px; + /*Nav Items*/ + --nav-item-color: var(--custom-acc-faint); + --nav-item-color-hover: var(--custom-acc-text); + --nav-item-color-selected: var(--text-accent); + --nav-item-white-space: wrap; + --nav-item-color-active: var(--custom-acc-text); + --nav-indentation-guide-color: var(--custom-acc-faint); + /*Bullet lists*/ + --bulletlist-color: var(--text-accent); + --indentation-guide-color: var(--bulletlist-color); + /*Icon*/ + --icon-color-hover: var(--activetab-highlight); + --icon-color: var(--activetab-faint); + --icon-color-active: var(--tab-background-clicked); + --icon-color-focused: var(--activetab-highlight); + /*Heading*/ + --h1-glow: var(--text-accent); + --h2-glow: #0cd0d0; + --h3-glow: #00d200; + --h4-glow: #ffc400; + --h5-glow: #FF0000; + --h6-glow: #FF00FF; + --h1-size: 34px; + --h2-size: 26px; + --h3-size: 22px; + --h4-size: 18px; + --h5-size: 18px; + --h6-size: 18px; + --heading-formatting: var(--text-faint); + /*Slider*/ + --slider-thumb-border-width: 7px; + --slider-thumb-border-color: var(--color-glow); + /*Toggle*/ + --toggle-border-width: 3px; + --toggle-width: 45px; + --toggle-thumb-width: 20px; + --toggle-thumb-color: rgb(186, 56, 56); + --toggle-thumb-radius: 10px; + --toggle-thumb-height: 8px; + --toggle-s-border-width: 3px; + --toggle-s-width: 40px; + --toggle-s-thumb-height: 8px; + --toggle-s-thumb-width: 16px; + /*Radius*/ + --radius-s: 3px; + --radius-m: 3px; + --radius-l: 10px; + --radius-xl: 3px; + /*Ribbon*/ + --ribbon-background: transparent; + --ribbon-background-collapsed: transparent; + /*List*/ + --list-marker-color: transparent; + --list-marker-color-collapsed: transparent; + /*Status bar*/ + --status-bar-text-color: var(--text-faint); + --status-bar-radius: var(--radius-s); + /*Callouts Color Fix*/ + --callout-bug: 200, 172, 100; + --callout-error: 255, 70, 0; + --callout-info: 0, 141, 142; + --callout-summary: 0, 151, 188; + --callout-tip: 255, 166, 11; + --callout-important: 255, 166, 11; + --callout-quote: 210, 102, 234; + --callout-default: 139, 127, 137; + --block-color: hsl(170, 49%, 32%); + + --bgimage: url("data:image/jpeg;base64,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"); + + + --scrollbutton:url("data:image/svg+xml,%3Csvg enable-background='new 0 0 100 100' height='100' viewBox='0 0 100 100' width='100' xmlns='http://www.w3.org/2000/svg'%3E%3Cpath d='m50 76h-26c-3.1 0-5-3.4-3.4-6l26-44c1.5-2.6 5.3-2.6 6.9 0l26 44c1.6 2.7-.4 6-3.4 6z' fill='%23fff'/%3E%3C/svg%3E"); +} +.is-mobile{ + --toggle-width: 45px; + --toggle-thumb-height: 8px; + --toggle-thumb-width: 20px; +} + + + + +/*================ Dark Theme =================*/ +.theme-dark { + --New-Obsidiantoggle: url("data:image/svg+xml,%3Csvg id='custom-logo' width='512' height='512' viewBox='0 0 512 512' fill='none' xmlns='http://www.w3.org/2000/svg' style='height:100%25;width:100%25;'%3E%3Cdefs%3E%3CradialGradient id='b' cx='0' cy='0' r='1' gradientUnits='userSpaceOnUse' gradientTransform='matrix(-48 -185 123 -32 179 429.7)'%3E%3Cstop stop-color='%23fff' stop-opacity='.4'/%3E%3Cstop offset='1' stop-opacity='.1'/%3E%3C/radialGradient%3E%3CradialGradient id='c' cx='0' cy='0' r='1' gradientUnits='userSpaceOnUse' gradientTransform='matrix(41 -310 229 30 341.6 351.3)'%3E%3Cstop stop-color='%23fff' stop-opacity='.6'/%3E%3Cstop offset='1' stop-color='%23fff' stop-opacity='.1'/%3E%3C/radialGradient%3E%3CradialGradient id='d' cx='0' cy='0' r='1' gradientUnits='userSpaceOnUse' gradientTransform='matrix(57 -261 178 39 190.5 296.3)'%3E%3Cstop stop-color='%23fff' stop-opacity='.8'/%3E%3Cstop offset='1' stop-color='%23fff' stop-opacity='.4'/%3E%3C/radialGradient%3E%3CradialGradient id='e' cx='0' cy='0' r='1' gradientUnits='userSpaceOnUse' gradientTransform='matrix(-79 -133 153 -90 321.4 464.2)'%3E%3Cstop stop-color='%23fff' stop-opacity='.3'/%3E%3Cstop offset='1' stop-opacity='.3'/%3E%3C/radialGradient%3E%3CradialGradient id='f' cx='0' cy='0' r='1' gradientUnits='userSpaceOnUse' gradientTransform='matrix(-29 136 -92 -20 300.7 149.9)'%3E%3Cstop stop-color='%23fff' stop-opacity='0'/%3E%3Cstop offset='1' stop-color='%23fff' stop-opacity='.2'/%3E%3C/radialGradient%3E%3CradialGradient id='g' cx='0' cy='0' r='1' gradientUnits='userSpaceOnUse' gradientTransform='matrix(72 73 -155 153 137.8 225.2)'%3E%3Cstop stop-color='%23fff' stop-opacity='.2'/%3E%3Cstop offset='1' stop-color='%23fff' stop-opacity='.4'/%3E%3C/radialGradient%3E%3CradialGradient id='h' cx='0' cy='0' r='1' gradientUnits='userSpaceOnUse' gradientTransform='matrix(20 118 -251 43 215.1 273.7)'%3E%3Cstop stop-color='%23fff' stop-opacity='.1'/%3E%3Cstop offset='1' stop-color='%23fff' stop-opacity='.3'/%3E%3C/radialGradient%3E%3CradialGradient id='i' cx='0' cy='0' r='1' gradientUnits='userSpaceOnUse' gradientTransform='matrix(-162 -85 268 -510 374.4 371.7)'%3E%3Cstop stop-color='%23fff' stop-opacity='.2'/%3E%3Cstop offset='.5' stop-color='%23fff' stop-opacity='.2'/%3E%3Cstop offset='1' stop-color='%23fff' stop-opacity='.3'/%3E%3C/radialGradient%3E%3Cfilter id='a' x='80.1' y='37' width='351.1' height='443.2' filterUnits='userSpaceOnUse' color-interpolation-filters='sRGB'%3E%3CfeFlood flood-opacity='0' result='BackgroundImageFix'/%3E%3CfeBlend in='SourceGraphic' in2='BackgroundImageFix' result='shape'/%3E%3CfeGaussianBlur stdDeviation='6.5' result='effect1_foregroundBlur_744_9191'/%3E%3C/filter%3E%3C/defs%3E%3Crect id='logo-bg' fill='%23000000' width='512' height='512' rx='100'/%3E%3Cg filter='url(%23a)'%3E%3Cpath d='M359.2 437.5c-2.6 19-21.3 33.9-40 28.7-26.5-7.2-57.2-18.6-84.8-20.7l-42.4-3.2a28 28 0 0 1-18-8.3l-73-74.8a27.7 27.7 0 0 1-5.4-30.7s45-98.6 46.8-103.7c1.6-5.1 7.8-49.9 11.4-73.9a28 28 0 0 1 9-16.5L249 57.2a28 28 0 0 1 40.6 3.4l72.6 91.6a29.5 29.5 0 0 1 6.2 18.3c0 17.3 1.5 53 11.2 76a301.3 301.3 0 0 0 35.6 58.2 14 14 0 0 1 1 15.6c-6.3 10.7-18.9 31.3-36.6 57.6a142.2 142.2 0 0 0-20.5 59.6Z' fill='%23000' fill-opacity='.3'/%3E%3C/g%3E%3Cpath id='arrow' d='M359.9 434.3c-2.6 19.1-21.3 34-40 28.9-26.4-7.3-57-18.7-84.7-20.8l-42.3-3.2a27.9 27.9 0 0 1-18-8.4l-73-75a27.9 27.9 0 0 1-5.4-31s45.1-99 46.8-104.2c1.7-5.1 7.8-50 11.4-74.2a28 28 0 0 1 9-16.6l86.2-77.5a28 28 0 0 1 40.6 3.5l72.5 92a29.7 29.7 0 0 1 6.2 18.3c0 17.4 1.5 53.2 11.1 76.3a303 303 0 0 0 35.6 58.5 14 14 0 0 1 1.1 15.7c-6.4 10.8-18.9 31.4-36.7 57.9a143.3 143.3 0 0 0-20.4 59.8Z' fill='%23616161'/%3E%3Cpath d='M182.7 436.4c33.9-68.7 33-118 18.5-153-13.2-32.4-37.9-52.8-57.3-65.5-.4 1.9-1 3.7-1.8 5.4L96.5 324.8a27.9 27.9 0 0 0 5.5 31l72.9 75c2.3 2.3 5 4.2 7.8 5.6Z' fill='url(%23b)'/%3E%3Cpath d='M274.9 297c9.1.9 18 2.9 26.8 6.1 27.8 10.4 53.1 33.8 74 78.9 1.5-2.6 3-5.1 4.6-7.5a1222 1222 0 0 0 36.7-57.9 14 14 0 0 0-1-15.7 303 303 0 0 1-35.7-58.5c-9.6-23-11-58.9-11.1-76.3 0-6.6-2.1-13.1-6.2-18.3l-72.5-92-1.2-1.5c5.3 17.5 5 31.5 1.7 44.2-3 11.8-8.6 22.5-14.5 33.8-2 3.8-4 7.7-5.9 11.7a140 140 0 0 0-15.8 58c-1 24.2 3.9 54.5 20 95Z' fill='url(%23c)'/%3E%3Cpath d='M274.8 297c-16.1-40.5-21-70.8-20-95 1-24 8-42 15.8-58l6-11.7c5.8-11.3 11.3-22 14.4-33.8a78.5 78.5 0 0 0-1.7-44.2 28 28 0 0 0-39.4-2l-86.2 77.5a28 28 0 0 0-9 16.6L144.2 216c0 .7-.2 1.3-.3 2 19.4 12.6 44 33 57.3 65.3 2.6 6.4 4.8 13.1 6.4 20.4a200 200 0 0 1 67.2-6.8Z' fill='url(%23d)'/%3E%3Cpath d='M320 463.2c18.6 5.1 37.3-9.8 39.9-29a153 153 0 0 1 15.9-52.2c-21-45.1-46.3-68.5-74-78.9-29.5-11-61.6-7.3-94.2.6 7.3 33.1 3 76.4-24.8 132.7 3.1 1.6 6.6 2.5 10.1 2.8l43.9 3.3c23.8 1.7 59.3 14 83.2 20.7Z' fill='url(%23e)'/%3E%3Cpath fill-rule='evenodd' clip-rule='evenodd' d='M255 200.5c-1.1 24 1.9 51.4 18 91.8l-5-.5c-14.5-42.1-17.7-63.7-16.6-88 1-24.3 8.9-43 16.7-59 2-4 6.6-11.5 8.6-15.3 5.8-11.3 9.7-17.2 13-27.5 4.8-14.4 3.8-21.2 3.2-28 3.7 24.5-10.4 45.8-21 67.5a145 145 0 0 0-17 59Z' fill='url(%23f)'/%3E%3Cpath fill-rule='evenodd' clip-rule='evenodd' d='M206 285.1c2 4.4 3.7 8 4.9 13.5l-4.3 1c-1.7-6.4-3-11-5.5-16.5-14.6-34.3-38-52-57-65 23 12.4 46.7 31.9 61.9 67Z' fill='url(%23g)'/%3E%3Cpath fill-rule='evenodd' clip-rule='evenodd' d='M211.1 303c8 37.5-1 85.2-27.5 131.6 22.2-46 33-90.1 24-131l3.5-.7Z' fill='url(%23h)'/%3E%3Cpath fill-rule='evenodd' clip-rule='evenodd' d='M302.7 299.5c43.5 16.3 60.3 52 72.8 81.9-15.5-31.2-37-65.7-74.4-78.5-28.4-9.8-52.4-8.6-93.5.7l-.9-4c43.6-10 66.4-11.2 96 0Z' fill='url(%23i)'/%3E%3C/svg%3E"); + --color-base-00: rgba(0, 0, 0); + --color-base-20: rgba(30, 30, 30); + --color-base-05: #171717b7; + --bg-primary: 0, 0, 0; + --bg-secondary: 30, 30, 30; + --background-settings: rgba(30, 30, 30, .9); + --background-settings-alt: rgba(30, 30, 30, .65); + --background-settings-2: rgba(78, 75, 75, .2); + --text-selection: hsla(var(--interactive-accent-hsl), 0.35); + /*Accent*/ + --accent-h: 170; + --accent-s: 69%; + --accent-l: 42%; + --color-accent-faint: hsl(var(--accent-h), calc(var(--accent-s) - 20%), calc(var(--accent-l) - 10%)); + --color-accent-active: hsla(var(--accent-h), calc(var(--accent-s) - 23%), calc(var(--accent-l) - 25%), 0.65); + --color-accent-2: hsl(var(--accent-h), var(--accent-s), calc(var(--accent-l) + 10%)); + --color-glow: hsl(calc(var(--accent-h) + 1), calc(var(--accent-s) - 36%), calc(var(--accent-l) - 25%)); + --color-accent-hsl: var(--accent-h), var(--accent-s), var(--accent-l); + --color-accent: hsl(var(--accent-h), var(--accent-s), var(--accent-l)); + --color-accent-1: hsl(var(--accent-h), var(--accent-s), calc(var(--accent-l) - 3.8%)); + /*Code*/ + --code-background: rgba(30, 30, 30, 0.75); + --text-close-color: #ff909b; + --background-close-hover: #e6647170; + --background-close-active: #f2394c8a; + --background-close: #b4000066; +} +/*================ Light Theme =================*/ +.theme-light { + --New-Obsidiantoggle: url("data:image/svg+xml,%3Csvg id='custom-logo' width='512' height='512' viewBox='0 0 512 512' fill='none' xmlns='http://www.w3.org/2000/svg' style='height:100%25;width:100%25;'%3E%3Cdefs%3E%3CradialGradient id='b' cx='0' cy='0' r='1' gradientUnits='userSpaceOnUse' gradientTransform='matrix(-48 -185 123 -32 179 429.7)'%3E%3Cstop stop-color='%23fff' stop-opacity='.4'/%3E%3Cstop offset='1' stop-opacity='.1'/%3E%3C/radialGradient%3E%3CradialGradient id='c' cx='0' cy='0' r='1' gradientUnits='userSpaceOnUse' gradientTransform='matrix(41 -310 229 30 341.6 351.3)'%3E%3Cstop stop-color='%23fff' stop-opacity='.6'/%3E%3Cstop offset='1' stop-color='%23fff' stop-opacity='.1'/%3E%3C/radialGradient%3E%3CradialGradient id='d' cx='0' cy='0' r='1' gradientUnits='userSpaceOnUse' gradientTransform='matrix(57 -261 178 39 190.5 296.3)'%3E%3Cstop stop-color='%23fff' stop-opacity='.8'/%3E%3Cstop offset='1' stop-color='%23fff' stop-opacity='.4'/%3E%3C/radialGradient%3E%3CradialGradient id='e' cx='0' cy='0' r='1' gradientUnits='userSpaceOnUse' gradientTransform='matrix(-79 -133 153 -90 321.4 464.2)'%3E%3Cstop stop-color='%23fff' stop-opacity='.3'/%3E%3Cstop offset='1' stop-opacity='.3'/%3E%3C/radialGradient%3E%3CradialGradient id='f' cx='0' cy='0' r='1' gradientUnits='userSpaceOnUse' gradientTransform='matrix(-29 136 -92 -20 300.7 149.9)'%3E%3Cstop stop-color='%23fff' stop-opacity='0'/%3E%3Cstop offset='1' stop-color='%23fff' stop-opacity='.2'/%3E%3C/radialGradient%3E%3CradialGradient id='g' cx='0' cy='0' r='1' gradientUnits='userSpaceOnUse' gradientTransform='matrix(72 73 -155 153 137.8 225.2)'%3E%3Cstop stop-color='%23fff' stop-opacity='.2'/%3E%3Cstop offset='1' stop-color='%23fff' stop-opacity='.4'/%3E%3C/radialGradient%3E%3CradialGradient id='h' cx='0' cy='0' r='1' gradientUnits='userSpaceOnUse' gradientTransform='matrix(20 118 -251 43 215.1 273.7)'%3E%3Cstop stop-color='%23fff' stop-opacity='.1'/%3E%3Cstop offset='1' stop-color='%23fff' stop-opacity='.3'/%3E%3C/radialGradient%3E%3CradialGradient id='i' cx='0' cy='0' r='1' gradientUnits='userSpaceOnUse' gradientTransform='matrix(-162 -85 268 -510 374.4 371.7)'%3E%3Cstop stop-color='%23fff' stop-opacity='.2'/%3E%3Cstop offset='.5' stop-color='%23fff' stop-opacity='.2'/%3E%3Cstop offset='1' stop-color='%23fff' stop-opacity='.3'/%3E%3C/radialGradient%3E%3Cfilter id='a' x='80.1' y='37' width='351.1' height='443.2' filterUnits='userSpaceOnUse' color-interpolation-filters='sRGB'%3E%3CfeFlood flood-opacity='0' result='BackgroundImageFix'/%3E%3CfeBlend in='SourceGraphic' in2='BackgroundImageFix' result='shape'/%3E%3CfeGaussianBlur stdDeviation='6.5' result='effect1_foregroundBlur_744_9191'/%3E%3C/filter%3E%3C/defs%3E%3Crect id='logo-bg' fill='%23ffffff' width='512' height='512' rx='100'/%3E%3Cg filter='url(%23a)'%3E%3Cpath d='M359.2 437.5c-2.6 19-21.3 33.9-40 28.7-26.5-7.2-57.2-18.6-84.8-20.7l-42.4-3.2a28 28 0 0 1-18-8.3l-73-74.8a27.7 27.7 0 0 1-5.4-30.7s45-98.6 46.8-103.7c1.6-5.1 7.8-49.9 11.4-73.9a28 28 0 0 1 9-16.5L249 57.2a28 28 0 0 1 40.6 3.4l72.6 91.6a29.5 29.5 0 0 1 6.2 18.3c0 17.3 1.5 53 11.2 76a301.3 301.3 0 0 0 35.6 58.2 14 14 0 0 1 1 15.6c-6.3 10.7-18.9 31.3-36.6 57.6a142.2 142.2 0 0 0-20.5 59.6Z' fill='%23000' fill-opacity='.3'/%3E%3C/g%3E%3Cpath id='arrow' d='M359.9 434.3c-2.6 19.1-21.3 34-40 28.9-26.4-7.3-57-18.7-84.7-20.8l-42.3-3.2a27.9 27.9 0 0 1-18-8.4l-73-75a27.9 27.9 0 0 1-5.4-31s45.1-99 46.8-104.2c1.7-5.1 7.8-50 11.4-74.2a28 28 0 0 1 9-16.6l86.2-77.5a28 28 0 0 1 40.6 3.5l72.5 92a29.7 29.7 0 0 1 6.2 18.3c0 17.4 1.5 53.2 11.1 76.3a303 303 0 0 0 35.6 58.5 14 14 0 0 1 1.1 15.7c-6.4 10.8-18.9 31.4-36.7 57.9a143.3 143.3 0 0 0-20.4 59.8Z' fill='%23000000'/%3E%3Cpath d='M182.7 436.4c33.9-68.7 33-118 18.5-153-13.2-32.4-37.9-52.8-57.3-65.5-.4 1.9-1 3.7-1.8 5.4L96.5 324.8a27.9 27.9 0 0 0 5.5 31l72.9 75c2.3 2.3 5 4.2 7.8 5.6Z' fill='url(%23b)'/%3E%3Cpath d='M274.9 297c9.1.9 18 2.9 26.8 6.1 27.8 10.4 53.1 33.8 74 78.9 1.5-2.6 3-5.1 4.6-7.5a1222 1222 0 0 0 36.7-57.9 14 14 0 0 0-1-15.7 303 303 0 0 1-35.7-58.5c-9.6-23-11-58.9-11.1-76.3 0-6.6-2.1-13.1-6.2-18.3l-72.5-92-1.2-1.5c5.3 17.5 5 31.5 1.7 44.2-3 11.8-8.6 22.5-14.5 33.8-2 3.8-4 7.7-5.9 11.7a140 140 0 0 0-15.8 58c-1 24.2 3.9 54.5 20 95Z' fill='url(%23c)'/%3E%3Cpath d='M274.8 297c-16.1-40.5-21-70.8-20-95 1-24 8-42 15.8-58l6-11.7c5.8-11.3 11.3-22 14.4-33.8a78.5 78.5 0 0 0-1.7-44.2 28 28 0 0 0-39.4-2l-86.2 77.5a28 28 0 0 0-9 16.6L144.2 216c0 .7-.2 1.3-.3 2 19.4 12.6 44 33 57.3 65.3 2.6 6.4 4.8 13.1 6.4 20.4a200 200 0 0 1 67.2-6.8Z' fill='url(%23d)'/%3E%3Cpath d='M320 463.2c18.6 5.1 37.3-9.8 39.9-29a153 153 0 0 1 15.9-52.2c-21-45.1-46.3-68.5-74-78.9-29.5-11-61.6-7.3-94.2.6 7.3 33.1 3 76.4-24.8 132.7 3.1 1.6 6.6 2.5 10.1 2.8l43.9 3.3c23.8 1.7 59.3 14 83.2 20.7Z' fill='url(%23e)'/%3E%3Cpath fill-rule='evenodd' clip-rule='evenodd' d='M255 200.5c-1.1 24 1.9 51.4 18 91.8l-5-.5c-14.5-42.1-17.7-63.7-16.6-88 1-24.3 8.9-43 16.7-59 2-4 6.6-11.5 8.6-15.3 5.8-11.3 9.7-17.2 13-27.5 4.8-14.4 3.8-21.2 3.2-28 3.7 24.5-10.4 45.8-21 67.5a145 145 0 0 0-17 59Z' fill='url(%23f)'/%3E%3Cpath fill-rule='evenodd' clip-rule='evenodd' d='M206 285.1c2 4.4 3.7 8 4.9 13.5l-4.3 1c-1.7-6.4-3-11-5.5-16.5-14.6-34.3-38-52-57-65 23 12.4 46.7 31.9 61.9 67Z' fill='url(%23g)'/%3E%3Cpath fill-rule='evenodd' clip-rule='evenodd' d='M211.1 303c8 37.5-1 85.2-27.5 131.6 22.2-46 33-90.1 24-131l3.5-.7Z' fill='url(%23h)'/%3E%3Cpath fill-rule='evenodd' clip-rule='evenodd' d='M302.7 299.5c43.5 16.3 60.3 52 72.8 81.9-15.5-31.2-37-65.7-74.4-78.5-28.4-9.8-52.4-8.6-93.5.7l-.9-4c43.6-10 66.4-11.2 96 0Z' fill='url(%23i)'/%3E%3C/svg%3E"); + --color-base-00: rgba(255, 255, 255); + --color-base-20: rgba(225, 225, 225); + --color-base-05: #f6f4f4b7; + --bg-primary: 255, 255, 255; + --bg-secondary: 225, 225, 225; + --background-settings: rgba(225, 225, 225, .9); + --background-settings-alt: rgba(225, 225, 225, .65); + --background-settings-2: rgba(78, 75, 75, .2); + --text-selection: hsla(var(--interactive-accent-hsl), 0.35); + --accent-h: 170; + --accent-s: 69%; + --accent-l: 42%; + --color-accent-faint: hsl(var(--accent-h), calc(var(--accent-s) + 10%), calc(var(--accent-l) - 4%)); + --color-accent-active: hsla(var(--accent-h), calc(var(--accent-s) - 13%), calc(var(--accent-l) + 10%), 0.65); + --color-accent-2: hsl(var(--accent-h), var(--accent-s), calc(var(--accent-l) + 10%)); + --color-glow: hsl(calc(var(--accent-h) + 1), calc(var(--accent-s) - 36%), calc(var(--accent-l) - 25%)); + --color-accent-hsl: var(--accent-h), var(--accent-s), var(--accent-l); + --color-accent:hsl(var(--accent-h), calc(var(--accent-s) - 20%), calc(var(--accent-l) - 10%)); + --color-accent-1: hsl(var(--accent-h), var(--accent-s), calc(var(--accent-l) - 3.8%)); + /*Code*/ + --code-background: rgba(225, 225, 225, 0.75); + --text-close-color: #791d26; + --background-close-hover: #99212d70; + --background-close-active: #88111c8a; + --background-close: #b4000066; +} +/*----------------------- General ------------------------*/ +.checkbox-container:not(.is-enabled):after{ + box-shadow: 0 0 0.6em red; +} +/*Note Animation*/ +.workspace-split.mod-vertical.mod-root .workspace-tabs:not(.mod-stacked) .view-content { + animation: 0.25s slide-down forwards; +} +/*left pane Animation*/ +.workspace-split.mod-left-split .workspace-leaf-content, .workspace-leaf-content:not(:has(.view-content)) { + animation: 0.15s slide-left forwards; +} +/*right pane Animation*/ +.workspace-split.mod-right-split .workspace-leaf-content { + animation: 0.15s slide-right forwards; +} +/*Keyframe for the above animations*/ +@keyframes slide-down { + 0% { transform: translateY(0%); opacity: 0; } + 15% { transform: translateY(-5px); opacity: 0; } + 25% { transform: translateY(-10px); } + 45% { opacity: 0.5; } + 65% { opacity: 0.7; } + 100% { transform: translateY(0%); opacity: 1; } +} +@keyframes slide-left { + 0% { transform: translateX(0%); opacity: 0;} + 15% { transform: translateX(-5px); opacity: 0; } + 25% { transform: translateX(-10px); } + 45% { opacity: 0.5; } + 65% { opacity: 0.7;} + 100% { transform: translateX(0%); opacity: 1;} +} +@keyframes slide-right { + 0% { transform: translateX(0%); opacity: 0; } + 15% { transform: translateX(5px); opacity: 0; } + 25% { transform: translateX(10px); } + 45% { opacity: 0.5; } + 65% { opacity: 0.7;} + 100% { transform: translateX(0%); opacity: 1;} +} +/*Tab, WCB Spacing for Styling*/ +.workspace-tab-header, +.titlebar-button { + border-right: 1px solid transparent; + border-left: 1px solid transparent; +} +/*----------------------- Title bar Tabs ------------------------*/ +/*Remove Curved Connectors for Classic Tabs*/ +.workspace-split.mod-root .workspace-tab-header.is-active::before, .workspace-split.mod-root .workspace-tab-header.is-active::after, .workspace-tab-header.is-active { + box-shadow: none; +} +/*Tab Spacing Between Each Other*/ +.mod-root .workspace-tab-header-container-inner { + padding: 2.5px 15px 0px 10px; + gap: 4px; +} +/*Centers Tab Text*/ +.workspace .mod-root .workspace-tab-header-inner-title { + text-align: center; + color: var(--inactivetab); +} +.workspace-tab-header.is-active.mod-active .workspace-tab-header-inner .workspace-tab-header-inner-title{ + color: var(--activetab-highlight); +} +/*Resolves jumping tab bug*/ +.workspace .mod-root .workspace-tab-header:not(.is-active, :hover) .workspace-tab-header-inner-close-button{ + visibility: hidden; +} +.workspace .mod-root .workspace-tabs:not(.mod-stacked) .workspace-tab-header:not(.is-active) .workspace-tab-header-inner-close-button { + display: flex; +} +.workspace-tab-header-inner .workspace-tab-header-inner-icon{ + color: var(--activetab-faint); +} + +/*Styles Hover Tab*/ +.workspace-tab-header:hover { + background: var(--tab-background-active); + color: var(--activetab-faint); + opacity: 0.85; + border-image-slice: 1; + border-right: 1px solid; + border-image-source: linear-gradient(to top, transparent, var(--activetab-highlight), transparent); + border-left: 1px solid; +} +/*Styles Active Tab*/ +.workspace-tab-header.is-active, .workspace-tab-header:active { + border-image-slice: 1; + border-right: 2px solid; + border-image-source: linear-gradient(to top, transparent, var(--activetab-highlight), transparent); + border-left: 2px solid; +} +.workspace-tab-header:active{ + background: var(--tab-background-clicked); +} +.workspace-tab-header.is-active.mod-active{ + background: var(--tab-background-active-clicked); +} +.workspace-tab-header.is-active.mod-active .workspace-tab-header-inner .workspace-tab-header-inner-icon{ + color: var(--activetab-highlight); +} +/*Active Tab Growth Ani*/ +.workspace .mod-root .workspace-tabs:not(.mod-stacked) .workspace-tab-header.is-active:not(.mod-stacked) { + flex-grow: 1.25; + max-width: var(--tab-width); + transition: max-width 100ms ease-in-out; + color:var(--activetab-highlight); +} +.mod-left-split .workspace-tab-header.has-active-menu, .mod-right-split .workspace-tab-header.has-active-menu, +.mod-left-split .workspace-tab-header.is-active, .mod-right-split .workspace-tab-header.is-active{ + background-color: var(--tab-background-active-clicked); +} + +.mod-root .workspace-tab-header:not(.mod-stacked) { + max-width: var(--tab-max-width); + transition: max-width 200ms ease-in-out; +} + + /*Active Tab Animation unstacked*/ + @keyframes float { + 0% { transform: translateY(-5%); transition: ease 0.5s; } + 50% { transform: translateY(3%); transition: ease 0.5s; } + 100% { transform: translateY(-5%); transition: ease 0.5s;} + } + .workspace-tabs:not(.mod-stacked) .workspace-tab-header.is-active.mod-active{ + animation: float 4.9s ease-in-out infinite; + } + +/*Height of Note Tabs*/ +.workspace-tab-header-container-inner { + margin-bottom: 5px; + margin-top: 5px; +} +/*Secondary Headers in Sidepanels*/ +.workspace-split.mod-horizontal .workspace-tab-header-container{ + background-color: var(--background-tertiary); +} +/*Removes Old Note Tab Hover*/ +.workspace-tab-header:not(.is-active):hover .workspace-tab-header-inner { + background: transparent; +} +/*Resolve Incorrect Background Tabs Font Color and on hover*/ +.is-focused .workspace-tab-header { + color: var(--text-faint); +} +.is-focused .workspace-tab-header:hover{ + color: var(--text-accent); +} +/*Remove Bottom Header Seperator*/ +.workspace-tab-header-container { + border-bottom: none; +} +/*Corrects preview*/ +body:not(.is-mobile) .workspace-leaf-content[data-type="markdown"] .markdown-preview-view{ + padding-top: 50px; +} +/*Corrects preview scroll*/ +body:not(.is-mobile) .workspace-leaf-content[data-type="markdown"] .markdown-preview-view::-webkit-scrollbar-track{ + margin-top: 40px; +} +/*Corrects editor*/ +body:not(.is-mobile) .workspace-leaf-content[data-type='markdown'] .cm-editor{ + margin-top:40px; +} +/*Styles text search on mobile*/ +body:not(.is-mobile) .workspace-leaf-content[data-type="markdown"] .document-search-container { + width: 100%; + position:absolute; + background: var(--background-tertiary); + --webkit-backdrop-filter: blur 120px; + backdrop-filter: blur(8px); + margin-top:40px; +} +/*Bumps down content for text search in preview*/ +body:not(.is-mobile) .document-search-container ~ .markdown-preview-view { + margin-top:50px; +} +/*Bumps down content for text search in editor*/ +body:not(.is-mobile) .document-search-container ~ .cm-editor{ + padding-top:46px; +} +/*Bumps down content for text search and replace in editor*/ +body:not(.is-mobile).document-search-container.mod-replace-mode ~ .cm-editor{ + margin-top:50px; +} +.nav-file-tag{ + color:var(--custom-acc-text); + background-color: var(--custom-acc-back); +} +.nav-folder-title[data-count]::after, .tree-item-flair{ + padding: 0 var(--size-4-1); + background-color: var(--custom-acc-back); + color:var(--custom-acc-text); + border-radius: var(--radius-s); + margin-right: -1px; + align-self: center; +} +.tree-item-self:hover .tree-item-flair{ + color: var(--custom-acc-text); +} +/*----------------------- Window Control Buttons ------------------------*/ +/*Readjusts the Sizing of WCB*/ +.titlebar-button { + height: 30px; + align-self: center; + margin-right: 3px; +} +.mod-linux .titlebar-button, .mod-windows .titlebar-button { + padding: 0px 13px 0px 13px; +} +/*WCB Styling Hover*/ +.titlebar-button:not(.mod-logo):hover, .mod-windows .titlebar-button.mod-close:hover { + border-radius: var(--radius-s); + opacity: 0.85; + border-image-slice: 1; + border-right: 1px solid; + border-left: 1px solid; +} +.mod-windows .titlebar-button.mod-close:active, .titlebar-button:active { + border-image-slice: 1; + opacity: 1; + border-right: 1px solid; + border-left: 1px solid; + border-radius: var(--radius-s); +} +.titlebar-button:not(.mod-logo):hover { + background: var(--text-selection); + color: var(--text-muted); + border-image-source: linear-gradient(to top, transparent, var(--text-accent), transparent); +} +.titlebar-button.mod-logo:hover{ +background:transparent; +} +.titlebar-button:not(.mod-logo):active, .titlebar-button:active { + background-color: var(--color-accent-active); + opacity: 1; + border-image-source: linear-gradient(to top, transparent, var(--text-accent), transparent); +} +.mod-linux .titlebar-button.mod-close:hover { + background-color: var(--background-close-hover); + color: var(--text-close-color); + border-image-source: linear-gradient(to top, transparent, var(--text-close-color), transparent); +} +/*WCB Styling Active*/ +.titlebar-button.mod-close:active { + background-color: var(--background-close-active); + color: var(--text-close-color); + opacity: 1; + border-image-source: linear-gradient(to top, transparent, var(--text-close-color), transparent); +} +/*Removes Redundant background coloring of WCB*/ +.is-hidden-frameless:not(.is-fullscreen) .titlebar-button-container.mod-right, +.is-hidden-frameless:not(.is-fullscreen).is-focused .titlebar-button-container.mod-right { + background-color: transparent; +} +/*Obsidian Frame hide default*/ +.mod-windows .titlebar-button.mod-close:hover { + background-color: var(--background-close-active); + color: var(--text-close-color); + border-image-source: linear-gradient(to top, transparent, var(--text-close-color), transparent); +} +/*Win11 Max Min window icon*/ +:is(.mod-linux, .mod-windows) .titlebar-button.mod-maximize svg { + -webkit-mask-image: var(--win-maximize); + } + .is-maximized:is(.mod-linux, .mod-windows) .titlebar-button.mod-maximize svg { + -webkit-mask-image: var(--win-minimize); + } + :is(.mod-linux, .mod-windows) .titlebar-button.mod-maximize svg { + -webkit-mask-size: cover; + background-color: var(--text-faint); + width: var(--icon-s); + height: var(--icon-s); + } + :is(.mod-linux, .mod-windows) .titlebar-button.mod-maximize{ + padding: 0px 10px 0px 12px; + } + :is(.mod-linux, .mod-windows) .titlebar-button.mod-maximize:hover svg, :is(.mod-linux, .mod-windows) .titlebar-button.mod-maximize:active svg{ + background-color: var(--text-accent); + } +/*======================= Status-bar ==========================*/ +/*General*/ +.status-bar{ +border-image-slice: 1; +border-image-source: linear-gradient(to right, transparent, var(--text-accent), transparent); +border-bottom: 2px solid; +height: 2.2%; +border-top: 0px solid; +} + +/*Status Bar Hover*/ +.CG-Fullstatus-off .status-bar { +margin: 0px 20px 12px 0px; +border-top: 1px solid; +} + +/*Full Status Bar*/ +body:not(.CG-Fullstatus-off) .status-bar { + position: sticky; + border-radius: 0px; + background: var(--background-secondary); +} + +/*Status Bar Clickable Icons Hover/Active*/ +.status-bar-item.mod-clickable:hover { + color: var(--text-accent); + box-shadow: 0 0 0.5em var(--text-accent); +} + +.status-bar-item.mod-clickable:active, .status-bar-item.plugin-obsidian-languagetool-plugin:active { + color: var(--text-accent); + background-color: var(--color-accent-active); + box-shadow: 0 0 0.3em var(--color-accent-active); +} + +.status-bar-item.plugin-obsidian-languagetool-plugin:hover { + color: var(--text-accent); + background: var(--text-selection); + box-shadow: 0 0 0.3em var(--text-accent); +} + +/*======================== Scrollbar ========================*/ +/*Scrollbar Hover*/ +body:not(.native-scrollbars) ::-webkit-scrollbar-thumb:hover { + background: var(--color-accent-active); + background-clip: padding-box; +} +/*Scrollbar Active*/ +body:not(.native-scrollbars) ::-webkit-scrollbar-thumb:active { + background: var(--text-accent); + background-clip: padding-box; +} + +/*======================== Note Editor ========================*/ +.cm-lineNumbers .cm-gutterElement { + text-align: center !important; +} +.markdown-source-view.mod-cm6 .cm-gutters .cm-lineNumbers .cm-gutterElement.cm-active { + color: var(--text-accent); + background: var(--text-selection); + border-radius: var(--radius-s); + padding-left: 3px; + border-image-slice: 1; + border-left: 2px solid; + border-image-source: linear-gradient(to top, transparent, var(--text-accent), transparent); + border-right: 2px solid; +} +body:not(.line-active-disable) .markdown-source-view .cm-scroller .cm-line { + padding-left: 5px; + padding-right: 5px; +} +/*Active Line Highlight*/ +body:not(.line-active-disable) .markdown-source-view .cm-scroller .cm-line.cm-active:not(:has(.mk-note-footer, .mk-floweditor-container)) { + background: var(--text-selection); + border-radius: var(--radius-s); + border-image-slice: 1; + border-top: 2px solid; + border-image-source: linear-gradient(to right, transparent, var(--text-accent), transparent); + border-bottom: 2px solid; +} +/*Hover Line Highlight*/ +.markdown-source-view.mod-cm6 .cm-line:hover { + background: var(--text-selection); + border-radius: var(--radius-s); + opacity: 0.85; +} +/*================ Dragging Ghost ===================*/ +.drag-ghost, .drag-ghost-action { + backdrop-filter: blur(5px) saturate(120%) !important; + border-image-slice: 1; + border-image-source: linear-gradient(to left, transparent, var(--text-accent), transparent); + border-top: 2px solid; + border-bottom: 2px solid; +} +.drag-ghost-self { + background-color: transparent; +} +/*================ SidePanel =================*/ +body:not(.is-grabbing) .tree-item-self.is-clickable:hover{ + background-color: var(--custom-acc-hover); + border-image-source: linear-gradient(to right, transparent, var(--custom-acc-text), transparent); +} +/*Removes bottom resize seperation */ +.workspace-split.mod-horizontal>*>.workspace-leaf-resize-handle { + border-bottom: 0px; +} +/*Edits and Styles Visible Seperation Resize left and right*/ +.workspace-split.mod-left-split>.workspace-leaf-resize-handle, .workspace-split.mod-vertical>*>.workspace-leaf-resize-handle { + border-right: 2px solid; + border-image-slice: 1; + border-image-source: linear-gradient(to bottom, transparent, var(--text-accent), transparent); + height: 95%; +} +.workspace-split.mod-right-split>.workspace-leaf-resize-handle { + border-left: 2px solid; + border-image-slice: 1; + border-image-source: linear-gradient(to bottom, transparent, var(--text-accent), transparent); + height: 95%; +} +/*Add Styling to Resize Handle*/ +.workspace-leaf-resize-handle:hover, .pdf-sidebar-resizer:hover, .surfing_root_3FoL3a { + background: var(--text-accent); + box-shadow: 0 0 5px var(--text-accent), 0 0 10px var(--text-accent), 0 0 20px var(--text-accent), 0 0 35px var(--text-accent); +} +/*Minor Spacing*/ +body:not(.is-mobile) .workspace-split.mod-left-split, body:not(.is-mobile) .workspace-split.mod-right-split { + padding-right: 2px; + padding-left: 1px; +} +/*Navigation Bottom Style*/ +.nav-header { + border-image-slice: 1; + border-image-source: linear-gradient(to right, transparent, var(--text-accent), transparent); + border-bottom: 3px solid; +} +/*Unifies the right side pane background*/ +.workspace-split.mod-right-split .workspace-tabs .node-insert-event{ + background-color: var(--background-primary); +} +/*------------ SidePanel: Files --------------*/ +/*Drop line Styled with spaces*/ +.nav-folder.mod-root .nav-folder>.nav-folder-children { + padding-left: 3px; + border-left: 2px outset var(--custom-acc-faint); +} +/*Nav File Active Stying*/ +.nav-file-title.is-active { + color: var(--custom-acc-text); + border-image-slice: 1; + border-top: 2px solid; + border-image-source: linear-gradient(to right, transparent, var(--custom-acc-text), transparent); + border-bottom: 2px solid; + background-color: var(--custom-acc-back); +} +/*Add Bottom Styling for Navigator*/ +body:not(.is-mobile) .workspace-leaf-content>.nav-header+*, .search-result-container.mod-global-search { + border-bottom: 2px solid; + border-image-slice: 1; + border-image-source: linear-gradient(to right, transparent, var(--text-accent), transparent); +} +/*Sets correct background to r/l sidepanels*/ +.node-insert-event, iframe, .surfing_app_zUmbJa { + background-color: var(--background-primary); +} +/*SidePanel Tree Tags to the right*/ +.nav-file-title-content, .nav-folder-title-content { + flex: 1 1 auto; +} +/*Adds spacing to pane items for style */ +.tree-item-self.is-clickable { + border-top: 1px solid transparent; + border-bottom: 1px solid transparent; +} +/*Styles Hover for Pane Items */ +.tree-item-self.is-clickable:hover,.suggestion-item.is-selected:not(.mod-group):hover { + color: var(--text-accent); + border-image-slice: 1; + border-top: 1px solid; + border-image-source: linear-gradient(to right, transparent, var(--text-accent), transparent); + border-bottom: 1px solid; +} +body:not(.is-grabbing) .tree-item-self.is-being-dragged:hover .tree-item-icon, .tree-item-self.is-being-dragged .tree-item-icon { + color: var(--text-accent); +} +/*Styles Active and Dragged for Pane Items */ +.tree-item-self.is-clickable:active, body:not(.is-grabbing) .tree-item-self.is-being-dragged:hover, .tree-item-self.is-being-dragged { + background-color: var(--color-accent-active); + color: var(--text-accent); + border-image-slice: 1; + border-top: 1px solid; + border-image-source: linear-gradient(to right, transparent, var(--text-accent), transparent); + border-bottom: 1px solid; +} +/*Fixes Incorrect text coloring*/ +.backlink-pane>.tree-item-self, .outgoing-link-pane>.tree-item-self, .backlink-pane>.tree-item-self.is-collapsed, .outgoing-link-pane>.tree-item-self.is-collapsed, +.search-empty-state { + color: var(--custom-acc-faint); +} +/*------------ SidePanel: Search --------------*/ +/*Style Loading bar*/ +.search-result-container.is-loading:before { + border-radius: 10px; + box-shadow: 0 0 0.5em var(--text-accent); +} +/*Styles Result File Dropdown matches*/ +.search-result-file-matches { + color: var(--text-accent); + background: var(--text-selection); + box-shadow: 0 0 0 transparent; + border-image-slice: 1; + border-top: 1px solid; + border-image-source: linear-gradient(to right, transparent, var(--text-accent), transparent); + border-bottom: 1px solid; +} +/*Style Bottom Seperation for Search*/ +.search-results-info { + border-image-slice: 1; + border-image-source: linear-gradient(to right, transparent, var(--text-accent), transparent); + border-bottom: 1px solid; +} +/*Styles seperation line*/ +.search-result-file-match { + border-image-slice: 1; + border-image-source: linear-gradient(to right, transparent, var(--text-accent), transparent); + border-bottom: 1px solid; +} +/*Fixes hover text of search results*/ +.search-result-file-match:hover { + color: var(--text-accent); +} +/*Fixes coloring of clear*/ +.search-input-clear-button { + color: var(--text-faint); + height: 20px; +} +/*Style Hovering/Active of clear*/ +.search-input-clear-button:hover { + color: var(--text-accent); + background: var(--text-selection); + border-radius: var(--radius-s); +} +.search-input-clear-button:active { + color: var(--text-accent); + background-color: var(--color-accent-active); + border-radius: var(--radius-s); +} +/*corrects active coloring for icons*/ +.input-right-decorator.clickable-icon.is-active{ + background: var(--color-accent-active); +} +.input-right-decorator.clickable-icon.is-active:hover{ + background: var(--text-selection); +} +/*Dropdown highlight when hovered*/ +.tree-item .tree-item-self .tree-item-icon:hover { + background-color: var(--text-selection); + border-radius: var(--radius-s); +} +.tree-item .tree-item-self .tree-item-icon:active { + border-radius: var(--radius-s); + background-color: var(--color-accent-active); +} +/*Changes Tags height and background*/ +body:not(.is-mobile) .tag-container { + background: var(--background-primary); + height: 100%; + padding-top: 2%; +} +/*Search row Header*/ +.search-row { + margin: 0px; + padding: var(--size-4-2); + border-image-slice: 1; + border-image-source: linear-gradient(to right, transparent, var(--text-accent), transparent); + border-bottom: 1px solid; +} +/*Search info header*/ +.search-results-info { + margin: 0px; + padding: var(--size-4-1) var(--size-4-2) var(--size-4-1); +} +/*Search parameter Headers*/ +.search-params { + padding: var(--size-4-1) var(--size-4-4); + margin: 0px; + background: var(--background-tertiary); + border-image-slice: 1; + border-image-source: linear-gradient(to right, transparent, var(--text-accent), transparent); + border-bottom: 1px solid; +} +/*Sidepanel Search Suggestion Style*/ +.suggestion-container.mod-search-suggestion .suggestion{ + border-image-slice: 1; + border-left: 2px solid; + border-right: 2px solid; + border-image-source: linear-gradient(to top, transparent, var(--text-accent), transparent); + background-color: var(--background-settings); +} +.suggestion-container.mod-search-suggestion{ +border-color:transparent; +} +/*Sidepanel Search Suggestion items Style*/ +.search-suggest-item.suggestion-item{ + border-top: 1px solid transparent; + border-bottom: 1px solid transparent; +} +/*Sidepanel Search Suggestion items Style on hover*/ +.search-suggest-item.suggestion-item:hover:not(.mod-group){ + border-image-slice: 1; + border-top: 1px solid; + border-bottom: 1px solid; + border-image-source: linear-gradient(to right, transparent, var(--text-accent), transparent); + background-color: var(--text-selection); +} +/*Sidepanel Search Suggestion items Style on active*/ +.search-suggest-item.suggestion-item:active{ + border-image-slice: 1; + border-top: 2px solid; + border-bottom: 2px solid; + border-image-source: linear-gradient(to right, transparent, var(--text-accent), transparent); + background-color: var(--color-accent-active); +} +.list-item-part.clickable-icon:active{ + background-color: var(--color-accent-active); +} +/*Fixes bad padding from Vanilla*/ +.search-suggest-item.mod-group:not(:first-child){ + border-bottom: transparent ; + padding: 3px 6px 3px 14px; + border-image-slice: 1; + border-image-source: linear-gradient(to right, transparent, var(--text-accent), transparent); +} +/*------------------- Title bar: Tabs Stacked --------------*/ +/*Stacked Tabs text Readable*/ +.workspace .mod-root .workspace-tabs.mod-stacked .workspace-tab-container .workspace-tab-header-inner-title { + text-orientation: upright; + letter-spacing: -3px; + text-transform: uppercase; +} +/*Stacked active tab highlight*/ +.workspace .mod-root .workspace-tabs.mod-stacked .workspace-tab-container .workspace-tab-header.is-active { + background-color: var(--tab-background-active); +} +/*Stacked Tab Style*/ +.workspace .mod-root .workspace-tabs.mod-stacked .workspace-tab-container .workspace-tab-header { + --webkit-backdrop-filter: blur 120px; + backdrop-filter: blur(18px); + border-radius: 0px; + width: var(--GC-stacked-width); + box-shadow: none; +} +.workspace .mod-root .workspace-tabs.mod-stacked .workspace-tab-container .workspace-tab-header:hover { + background-color: var(--tab-background-active); + --webkit-backdrop-filter: blur 120px; +} +/*=============== Side Dock ================*/ +/*Centers and adds Styles for Tab Headers*/ +.mod-left-split .workspace-tab-header-container-inner, .mod-right-split .workspace-tab-header-container-inner { + width: 100%; + justify-content: center; + border-image-slice: 1; + border-image-source: linear-gradient(to right, transparent, var(--text-accent), transparent); + border-bottom: 2px solid; +} +/*Corrects Position of Custom Sidebar toggle*/ +.workspace-ribbon .sidebar-toggle-button { + margin: 5px 2px 0px 3px; +} +/*Displays Full Custom Toggle*/ +.sidebar-toggle-button { + align-items: center; + padding: 0 0 0 0; +} +/*Hover Highlight for Custom Toggle*/ +body.is-hidden-frameless .sidebar-toggle-button.mod-left:hover { + background: var(--text-selection); + border-radius: 5px; + border-image-slice: 1; + border-image-source: linear-gradient(to top, transparent, var(--text-accent), transparent); + border-left: 2px solid; + border-right: 2px solid; +} +/*Active Highlight for Custom Toggle*/ +body.is-hidden-frameless .sidebar-toggle-button.mod-left:active { + background: var(--color-accent-active); + border-radius: 5px; + border-image-slice: 1; + border-image-source: linear-gradient(to top, transparent, var(--text-accent), transparent); + border-left: 2px solid; + border-right: 2px solid; +} +body:not(.is-hidden-frameless) .sidebar-toggle-button { + margin-top: 1px; +} +/*Sidebar Stylings*/ +.workspace-ribbon.side-dock-ribbon { + flex: 0 0 50px; + border-image-slice: 1; + border-image-source: linear-gradient(to top, transparent, var(--text-accent), transparent); + border-left: 2px solid; + border-right: 2px solid; + margin-top: 45px; +} +/*Removed L-Side toggle seperator and background*/ +.workspace-ribbon.mod-left:before { + border-bottom: var(--tab-outline-width) solid transparent; + background-color: transparent; +} +/*Sidepanel Nav Button Spacing*/ +.clickable-icon.nav-action-button{ + border-right: 1px solid transparent; + border-left: 1px solid transparent; +} +/*Sidepanel Nav Button Spacing*/ +.clickable-icon.nav-action-button:hover{ + background: var(--tab-background-active); + box-shadow: 0 0 0 transparent; + border-image-slice: 1; + border-right: 1px solid; + border-left: 1px solid; + border-image-source: linear-gradient(to top, transparent, var(--activetab-highlight), transparent); +} +/*Clickable Menu Button Style*/ +.clickable-icon.has-active-menu{ + box-shadow: 0 0 0 transparent; + border-image-slice: 1; + border-right: 1px solid; + border-left: 1px solid; + border-image-source: linear-gradient(to top, transparent, var(--text-accent), transparent); +} +/*Clickable button when active*/ +.clickable-icon.nav-action-button:active{ + background-color: var(--tab-background-clicked); + box-shadow: 0 0 0 transparent; + border-image-slice: 1; + border-right: 2px solid; + border-left: 2px solid; + border-image-source: linear-gradient(to top, transparent, var(--activetab-highlight), transparent); +} + +/*Animation for clickables like buttons, tabs, files etc*/ +@keyframes hover { + from { transform: scale(100%); } + to { transform: scale(105%); } + } + + .clickable-icon:not(.input-right-decorator):hover, .markdown-rendered button.copy-code-button:hover, .mod-left-split .workspace-tab-header:hover, + .mod-right-split .workspace-tab-header:hover, .mod-windows .titlebar-button:hover, .modal-close-button { + animation: hover 0.2s forwards; + } + + @keyframes pressed { + 0%{ transform: scale(1.05);} + 50% { transform: scale(0.95);} + 100% { transform: scale(1);} + } + + .clickable-icon:not(.input-right-decorator):active, .markdown-rendered button.copy-code-button:active, .mod-left-split .workspace-tab-header:active, + .mod-right-split .workspace-tab-header:active, .mod-windows .titlebar-button:active,.modal-close-button:active{ + animation: pressed 0.3s forwards; + } + + @keyframes bighover { + from {transform: scale(1); } + to { transform: scale(1.025); } + } + + .setting-item.setting-item-heading.style-settings-heading:hover,.mod-root .workspace-tabs:not(.mod-stacked) .workspace-tab-header:hover, + .tree-item-self.is-clickable:hover, .menu-item:hover, .vertical-tab-nav-item:hover, .community-item:hover, .callout:hover{ + animation: bighover 0.2s forwards; + } + + @keyframes bigpressed { + 0%{ transform: scale(1.025);} + 50% { transform: scale(0.975);} + 100% { transform: scale(1); } + } + .setting-item.setting-item-heading.style-settings-heading:active, .mod-root .workspace-tab-header:not(.mod-stacked):active, + .tree-item-self.is-clickable:active, .menu-item:active, .suggestion-item.mod-complex:not(.mod-group):active, .vertical-tab-nav-item:active, + .community-item:active, .callout:active{ + animation: bigpressed 0.3s forwards; + } + +/*Custom Styled L-Sidebar Toggle*/ +.is-hidden-frameless .sidebar-toggle-button.mod-left>.clickable-icon, body:not(.is-tablet) .is-mobile .view-header-nav-buttons, +.is-mobile .mod-left-split-toggle, body.is-tablet .sidebar-toggle-button.mod-left>.clickable-icon { + color: transparent; + background-repeat: no-repeat; + background-position: center; + background-size: 100%; + border-radius: 8px; + background-color: var(--text-accent); + background-blend-mode: luminosity; + padding: 0px 0px 18px 18px; +} +/*Displays Custom Sidebar Toggle*/ +.CG-MObsidian-sbt.is-hidden-frameless .sidebar-toggle-button.mod-left>.clickable-icon, .is-hidden-frameless .sidebar-toggle-button.mod-left>.clickable-icon, +body:not(.is-tablet) .CG-MObsidian-sbt.is-mobile .view-header-nav-buttons, body:not(.is-tablet) .is-mobile .view-header-nav-buttons, .is-mobile .mod-left-split-toggle, +.CG-MObsidian-sbt.is-mobile .mod-left-split-toggle, body.is-tablet .CG-MObsidian-sbt.sidebar-toggle-button.mod-left>.clickable-icon, +body.is-tablet .sidebar-toggle-button.mod-left>.clickable-icon, .CG-MObsidian-sbt .titlebar-button-container.mod-left { + background-image: var(--New-Obsidiantoggle); +} +body.is-frameless:not(.is-hidden-frameless) .titlebar-button-container.mod-left{ + color: transparent; + border-radius: 5px; + background-repeat: no-repeat; + background-position: center; + background-size: 100%; + background-color: var(--text-selection); + background-blend-mode:overlay; + width: 32px; + margin-left: 9px; +} +body.is-frameless:not(.is-hidden-frameless) .titlebar-button.mod-logo{ + margin-right:0px; +} +body.is-frameless:not(.is-hidden-frameless) .titlebar-button-container.mod-left:hover { + color: transparent; + background-repeat: no-repeat; + border-radius: 6px; + background-position: center; + background-size: 100%; + background-color: var(--text-accent); + background-blend-mode: luminosity; + width: 32px; +} +/*Removes default logo*/ +body:not(.is-hidden-frameless) svg.logo-full { + display: none; +} +/*Classic Obsidian header*/ +.CG-Obsidian-sbt.is-hidden-frameless .sidebar-toggle-button.mod-left>.clickable-icon, +body:not(.is-tablet) .CG-Obsidian-sbt .is-mobile .view-header-nav-buttons, +.CG-Obsidian-sbt.is-mobile .mod-left-split-toggle,body.is-tablet .CG-Obsidian-sbt.sidebar-toggle-button.mod-left>.clickable-icon, +.CG-Obsidian-sbt.is-frameless:not(.is-hidden-frameless) .titlebar-button-container.mod-left{ + background-size: 90%; + background-image: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 100 100' width='150%' height='150%' class='logo-full'%3E%3Cdefs%3E%3ClinearGradient id='a' x1='82.85' y1='30.41' x2='51.26' y2='105.9' gradientTransform='matrix(1, 0, 0, -1, -22.41, 110.97)' gradientUnits='userSpaceOnUse'%3E%3Cstop offset='0' stop-color='%236c56cc'%3E%3C/stop%3E%3Cstop offset='1' stop-color='%239785e5'%3E%3C/stop%3E%3C/linearGradient%3E%3C/defs%3E%3Cpolygon points='62.61,0 30.91,17.52 18,45.45 37.57,90.47 65.35,100 70.44,89.8 81,26.39 62.61,0' fill='%2334208c'%3E%3C/polygon%3E%3Cpolygon points='81,26.39 61.44,14.41 34.43,35.7 65.35,100 70.44,89.8 81,26.39' fill='url(%23a)'%3E%3C/polygon%3E%3Cpolygon points='81,26.39 81,26.39 62.61,0 61.44,14.41 81,26.39' fill='%23af9ff4'%3E%3C/polygon%3E%3Cpolygon points='61.44,14.41 62.61,0 30.91,17.52 34.43,35.7 61.44,14.41' fill='%234a37a0'%3E%3C/polygon%3E%3Cpolygon points='34.43,35.7 37.57,90.47 65.35,100 34.43,35.7' fill='%234a37a0'%3E%3C/polygon%3E%3C/svg%3E"); + background-color: transparent; + background-blend-mode: normal; +} +.CG-Obsidian-sbt.is-frameless:not(.is-hidden-frameless) .titlebar-button-container.mod-left, .CG-Obsidian-sbt.is-frameless:not(.is-hidden-frameless) .titlebar-button-container.mod-left:hover { + background-size: 80%; + background-color: transparent; +} +.CG-Obsidian-sbt.is-frameless:not(.is-hidden-frameless) .titlebar-button-container.mod-left:hover { + background-color: var(--text-accent); + background-blend-mode: luminosity; +} + +/*Custom header*/ +.CG-Custom-sbt.is-hidden-frameless .sidebar-toggle-button.mod-left>.clickable-icon, +body:not(.is-tablet) .CG-Custom-sbt.is-mobile .view-header-nav-buttons, .CG-Custom-sbt.is-mobile .mod-left-split-toggle, +body.is-tablet .CG-Custom-sbt.sidebar-toggle-button.mod-left>.clickable-icon, +.CG-Custom-sbt.is-frameless:not(.is-hidden-frameless) .titlebar-button-container.mod-left { + background-size: 115%; + background-image: var(--CG-workspace-custom-sbt); +} +.CG-Custom-sbt.is-frameless:not(.is-hidden-frameless) .titlebar-button-container.mod-left:hover { + background-size: 115%; + background-color: var(--text-accent); + background-blend-mode: luminosity; +} +/*================ Popover ==============*/ +/*Style Tooltip and Notice*/ +.tooltip, .notice, .suggestion-container { + color: var(--text-accent); + backdrop-filter: blur(5px) saturate(120%); + border-image-slice: 1; + border-image-source: linear-gradient(to right, transparent, var(--text-accent), transparent); + border-top: 2px solid; + border-bottom: 2px solid; +} + +/*Removes Tooltip Arrow*/ +.tooltip .tooltip-arrow { + display: none; +} +/*============ Prompt =================*/ +/*Prompt Style*/ +.prompt { + background: var(--background-settings); + backdrop-filter: blur(5px) saturate(120%) !important; + border-image-slice: 1; + border-image-source: linear-gradient(to top, transparent, var(--text-accent), transparent); + border-right: 3px solid; + border-left: 3px solid; +} +/*Prompt Item Style*/ +.suggestion-item { + color: var(--text-faint); + border-top: 1px solid transparent; + border-bottom: 1px solid transparent; +} +/*Prompt Tag Color Fixed*/ +.suggestion-item.mod-complex .suggestion-hotkey { + background-color: var(--background-modifier-hover); +} +/*Prompt Input*/ +input.prompt-input { + border-radius: 5px; + margin: 5px; + background: var(--background-settings-2); + padding: 10px; +} +/*=============== Callouts ================*/ +.markdown-rendered cite { + font-family: var(--CG-cite-font); + font-size: 2.75em; + display: block; + text-align: right; + font-style: normal; +} +/*Callout Style*/ +.callout { + background: var(--background-settings-2); + border-radius: 5px; + opacity: 0.85; + border-image-slice: 1; + border-top: 2px solid; + border-image-source: linear-gradient(to right, transparent, rgb(var(--callout-color)), transparent); + border-bottom: 2px solid; + background-color: rgba(var(--callout-color), 0.3); +} +/*Callout Cursor Change*/ +.callout.is-collapsible .callout-title { + cursor: var(--cursor-link); +} +/*Callout Hover Style*/ +.callout:hover { + background-color: rgba(var(--callout-color), 0.4); +} +.callout:active { + background-color: rgba(var(--callout-color), 0.5); +} + +/*Heading Fix in callouts*/ +.callout-content h3, .callout-content h2, .callout-content h4, .callout-content h5, .callout-content h6 { + padding-left: 15px; +} +.callout-content blockquote{ + margin:10px; +} + +/*--------------Code Blocks Copy Button-------------------*/ +/*Styles code copy button*/ +.markdown-rendered button.copy-code-button { + background: var(--interactive-normal); + border-radius: 3px; + display: inline !important; + padding: 2px 6px; + background-color: transparent; +} +/*Styles code copy button active*/ +.markdown-rendered button.copy-code-button:active { + background: var(--color-accent-active); +} +/*Moves up code flair*/ +.markdown-source-view.mod-cm6 .code-block-flair { + top: 5px; + height:26px; +} +.code-block-flair{ + display:flex; +} +/* set up to replace copy button text */ +.markdown-rendered button.copy-code-button { + font-size: 0px; +} +.copy-code-button::after { + font-size: var(--font-ui-smaller); +} +/* list of text replacements */ +.language-java>.copy-code-button::after { + content: "Java"; +} +.language-javascript>.copy-code-button::after, .language-js>.copy-code-button::after { + content: "JavaScript"; +} +.language-html>.copy-code-button::after { + content: "HTML"; +} +.language-typescript>.copy-code-button::after, .language-ts>.copy-code-button::after { + content: "TypeScript"; +} +.language-css>.copy-code-button::after { + content: "CSS"; +} +.language-cpp>.copy-code-button::after { + content: "C++"; +} +.language-c>.copy-code-button::after { + content: "C"; +} +.language-sql>.copy-code-button::after { + content: "SQL"; +} +.language-shell>.copy-code-button::after { + content: "Shell"; +} +.language-terminal>.copy-code-button::after { + content: "Terminal"; +} +.language-python>.copy-code-button::after { + content: "Python"; +} +.language-react>.copy-code-button::after { + content: "React"; +} +.language-json>.copy-code-button::after { + content: "JSON"; +} +.language-rman>.copy-code-button::after { + content: "RMAN"; +} +.copy-code-button::after { + content: "Copy"; +} +/*================ Graph ===================*/ +/*Graph Pane Style*/ +.workspace-split.mod-left-split .view-content, .workspace-split.mod-right-split .view-content { + border-image-slice: 1; + border-image-source: linear-gradient(to right, var(--background-tertiary), var(--text-accent), var(--background-tertiary)); + border-bottom: 2px solid; +} +/*Styles Graph Controls*/ +.graph-controls, .graph-controls.is-close, .graph-controls:not(.is-close), .workspace-split:not(.mod-root) .graph-controls.is-close { + background: var(--background-settings-alt); + backdrop-filter: blur(5px) saturate(120%); + padding: 2px; + border-image-slice: 1; + border-image-source: linear-gradient(to top, transparent, var(--text-accent), transparent); + border-right: 1px solid; + border-left: 1px solid; +} +/*Buttons Spacing*/ +.graph-controls-button { + padding: 5px; + border-radius: 5px; +} +.graph-controls .setting-item { + padding: 7px; +} +/*Hover Graph Control Items*/ +.tree-item-self:hover { + background: var(--text-selection); +} +/*Active Graph Control Items*/ +.tree-item-self:active { + background: var(--color-accent-active); +} +body:not(.is-grabbing) .tree-item-self.is-clickable:active { + background-color: var(--custom-acc-active); +} +/*Spacing for Graph Control Items*/ +.graph-control-section>.tree-item-self { + padding-left: 10px; +} +/*Readjusts item width*/ +.graph-control-section.mod-filter>.tree-item-self { + margin-right: 25%; +} +/*Removes border*/ +.graph-control-section { + border-bottom: none; +} +.graph-control-section-header { + color: var(--text-accent); +} +/*============== Tables ================*/ +/*Add Glow Effect to Table and centers table*/ +.markdown-rendered table, .markdown-source-view.mod-cm6 .cm-table-widget table { + box-shadow: 0em 0em 0.75em 0.01em var(--text-accent), inset 0em 0em 0.35em var(--text-accent); + margin-inline: auto; + margin-top:16px; + margin-bottom:20px; +} +/*Accent's Table*/ +.markdown-rendered td, .markdown-rendered th, .markdown-rendered thead tr>* { + border: 1px solid var(--text-accent) !important; + box-shadow: inset 0em 0em 0.35em var(--text-accent); + max-width: var(--table-column-max-width); +} +/*=============== Heading Styling ==========================*/ +/* Heading Line Reader */ +.markdown-preview-view hr { + margin-block-start: 3em; + border: solid 0px transparent; + height: 0; + border-bottom: 2.25px solid; + border-image-slice: 1; + border-image: linear-gradient(to left, transparent, var(--text-accent) 45%, transparent 45%, transparent 55%, var(--text-accent) 5%, transparent) 3; + text-align: -webkit-center; + margin-block-end: 2.5em; +} +/* Heading Line Preview */ +.hr.cm-line hr { + margin-block-start: 2em; + margin-block-end: 0.8em; + border-top: 2.25px solid !important; + border-image-slice: 1; + border-width: 1px; + text-align: -webkit-center; + border-image: linear-gradient(to left, transparent, var(--text-accent) 45%, transparent 45%, transparent 55%, var(--text-accent) 5%, transparent) 3; +} +/*New Default CyberGlow Heading*/ +.CG-NewObsidian-hr .markdown-preview-view hr::after, body:not(.CG-OG-hr, .CG-Hyrule-hr, .CG-Apple-hr, .CG-Windows-hr, .CG-Lorule-hr, +.CG-ClassicObsidian-hr) .markdown-preview-view hr::after { + content: ' '; + -webkit-mask-image: var(--newoutlined-logo); + -webkit-mask-size: 100%; + -webkit-mask-repeat: no-repeat; + display: inline-block; + background-color: var(--text-accent); + position: absolute; + transform: translate(-45%, -50%); + padding: 1rem; +} +.CG-NewObsidian-hr .hr.cm-line hr::after, body:not(.CG-OG-hr, .CG-Hyrule-hr, .CG-Apple-hr, .CG-Windows-hr, .CG-Lorule-hr, +.CG-ClassicObsidian-hr) .hr.cm-line hr::after { + content: ' '; + -webkit-mask-image: var(--newoutlined-logo); + -webkit-mask-size: 80%; + -webkit-mask-repeat: no-repeat; + display: inline-block; + background-color: var(--text-accent); + position: absolute; + transform: translate(-40%, -33%); + padding: 1rem; +} +/*Classic Obsidian Logo Heading*/ +.CG-ClassicObsidian-hr .markdown-preview-view hr::after { + content: ' '; + -webkit-mask-image: var(--outlined-logo); + -webkit-mask-size: 65%; + -webkit-mask-repeat: no-repeat; + display: inline-block; + background-color: var(--text-accent); + position: absolute; + transform: translate(-35%, -50%); + padding: 1rem; +} +.CG-ClassicObsidian-hr .hr.cm-line hr::after{ + content: ' '; + -webkit-mask-image: var(--outlined-logo); + -webkit-mask-size: 60%; + -webkit-mask-repeat: no-repeat; + display: inline-block; + background-color: var(--text-accent); + position: absolute; + transform: translate(-30%, -35%); + padding: 1rem; +} +/*Custom Heading Shiekal*/ +.CG-OG-hr .markdown-preview-view hr::after { + content: '₪'; + display: inline-block; + font-size: 1.65rem; + position: absolute; + left: 50%; + transform: translate(-50%, -50%); + transform-origin: 5% 50%; + padding: 0.5rem; + color: #E69900; + text-shadow: 0 0 5px #ffaa00, 0 0 10px #ffaa00, 0 0 20px #ffaa00, 0 0 40px #ffaa00, 0 0 80px #ffaa00; +} +.CG-OG-hr .hr.cm-line hr::after { + content: '₪'; + display: inline-block; + font-size: 1.65rem; + position: absolute; + transform: translate(-50%, -50%); + transform-origin: 5% 50%; + margin-top: -0.2rem; + color: #E69900; + text-shadow: 0 0 5px #ffaa00, 0 0 10px #ffaa00, 0 0 20px #ffaa00, 0 0 40px #ffaa00, 0 0 80px #ffaa00; +} +/*Custom Heading Apple*/ +.CG-Apple-hr .markdown-preview-view hr::after { + content: ' '; + -webkit-mask-image: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='1em' height='1em' viewBox='0 0 24 24'%3E%3Cpath fill='currentColor' d='M18.71 19.5c-.83 1.24-1.71 2.45-3.05 2.47c-1.34.03-1.77-.79-3.29-.79c-1.53 0-2 .77-3.27.82c-1.31.05-2.3-1.32-3.14-2.53C4.25 17 2.94 12.45 4.7 9.39c.87-1.52 2.43-2.48 4.12-2.51c1.28-.02 2.5.87 3.29.87c.78 0 2.26-1.07 3.81-.91c.65.03 2.47.26 3.64 1.98c-.09.06-2.17 1.28-2.15 3.81c.03 3.02 2.65 4.03 2.68 4.04c-.03.07-.42 1.44-1.38 2.83M13 3.5c.73-.83 1.94-1.46 2.94-1.5c.13 1.17-.34 2.35-1.04 3.19c-.69.85-1.83 1.51-2.95 1.42c-.15-1.15.41-2.35 1.05-3.11Z'/%3E%3C/svg%3E"); + -webkit-mask-size: 109%; + -webkit-mask-repeat: no-repeat; + display: inline-block; + background-color: var(--text-accent); + position: absolute; + transform: translate(-50%, -55%); + padding: 1rem; +} +.CG-Apple-hr .hr.cm-line hr::after { + content: ' '; + -webkit-mask-image: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='1em' height='1em' viewBox='0 0 24 24'%3E%3Cpath fill='currentColor' d='M18.71 19.5c-.83 1.24-1.71 2.45-3.05 2.47c-1.34.03-1.77-.79-3.29-.79c-1.53 0-2 .77-3.27.82c-1.31.05-2.3-1.32-3.14-2.53C4.25 17 2.94 12.45 4.7 9.39c.87-1.52 2.43-2.48 4.12-2.51c1.28-.02 2.5.87 3.29.87c.78 0 2.26-1.07 3.81-.91c.65.03 2.47.26 3.64 1.98c-.09.06-2.17 1.28-2.15 3.81c.03 3.02 2.65 4.03 2.68 4.04c-.03.07-.42 1.44-1.38 2.83M13 3.5c.73-.83 1.94-1.46 2.94-1.5c.13 1.17-.34 2.35-1.04 3.19c-.69.85-1.83 1.51-2.95 1.42c-.15-1.15.41-2.35 1.05-3.11Z'/%3E%3C/svg%3E"); + -webkit-mask-size: 120%; + -webkit-mask-repeat: no-repeat; + display: inline-block; + background-color: var(--text-accent); + position: absolute; + transform: translate(-58%, -45%); + padding: 1rem; +} +/*Custom Heading Microsoft*/ +.CG-Windows-hr .markdown-preview-view hr::after { + content: ' '; + -webkit-mask-image: url('data:image/svg+xml,%3Csvg xmlns="http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg" width="1em" height="1em" viewBox="0 0 24 24"%3E%3Cpath fill="currentColor" d="M0 0v11.408h11.408V0zm12.594 0v11.408H24V0zM0 12.594V24h11.408V12.594zm12.594 0V24H24V12.594z"%2F%3E%3C%2Fsvg%3E'); + -webkit-mask-size: 65%; + -webkit-mask-repeat: no-repeat; + display: inline-block; + background-color: var(--text-accent); + position: absolute; + transform: translate(-35%, -50%); + padding: 1rem; +} +.CG-Windows-hr .hr.cm-line hr::after { + content: ' '; + -webkit-mask-image: url('data:image/svg+xml,%3Csvg xmlns="http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg" width="1em" height="1em" viewBox="0 0 24 24"%3E%3Cpath fill="currentColor" d="M0 0v11.408h11.408V0zm12.594 0v11.408H24V0zM0 12.594V24h11.408V12.594zm12.594 0V24H24V12.594z"%2F%3E%3C%2Fsvg%3E'); + -webkit-mask-size: 80%; + -webkit-mask-repeat: no-repeat; + display: inline-block; + background-color: var(--text-accent); + position: absolute; + transform: translate(-35%, -30%); + padding: 1rem; +} + +/*----------------- Menu --------------------*/ +/*Removes Unneeded Menu Seperator*/ +.menu-separator { + display: none; +} +/*Removes disabled (greyed out) items until they are enabled*/ +.menu-item.is-disabled { + display: none; +} +/*Adds Styling to Menu Dropdown*/ +.menu { + background: var(--background-settings); + backdrop-filter: blur(5px) saturate(120%) !important; + border-image-slice: 1; + border-image-source: linear-gradient(to right, transparent, var(--text-accent), transparent); + border-top: 2px solid; + border-bottom: 2px solid; +} +/*Colors Menu Text*/ +.menu-item, .menu-item-icon { + color: var(--text-faint); +} +/*Adds some spacing for the items*/ +.menu-item { + border-top: 1px solid transparent; + border-bottom: 1px solid transparent; +} +/*Colors Menu Text on hover*/ +.menu-item:hover, .menu-item-icon:hover, .menu-item.selected { + color: var(--text-accent); + border-image-slice: 1; + border-image-source: linear-gradient(to right, transparent, var(--text-accent), transparent); + border-top: 1px solid; + border-bottom: 1px solid; +} +/*Fixes Highlight Issue for Icons in Menu*/ +.menu-item:hover .menu-item-icon, .menu-item.selected .menu-item-icon { + border: none; + background: transparent; + color: var(--text-accent); +} +/*Colors Menu Text on active*/ +.menu-item:active, .menu-item:active:not(.is-disabled):not(.is-label) { + color: var(--text-accent); + background-color: var(--color-accent-active); +} +/*Displays Red for Permanent Deletion */ +.menu-item.is-warning { + background-color: var(--background-close); + color: var(--text-close-color); + margin-top: 5px; +} +.menu-item.is-warning .menu-item-icon { + color: var(--text-close-color); +} +/*Styling on Warning active*/ +.menu-item.is-warning:active { + background: var(--background-close-active) !important; + color: var(--text-accent); +} +/*Resolves Styling on Warning Hover*/ +.menu-item.is-warning:hover, .menu-item.is-warning.selected, .menu-item:hover.is-warning:not(.is-disabled):not(.is-label), +.menu-item.selected.is-warning:not(.is-disabled):not(.is-label) { + color: var(--text-close-color); + background: var(--background-close-hover); + border-image-slice: 1; + border-image-source: linear-gradient(to right, transparent, var(--text-close-color), transparent); + border-top: 1px solid; + border-bottom: 1px solid; +} +.menu-item.is-warning.selected .menu-item-icon { + color: var(--text-close-color); +} +.clickable-icon:active { + background-color: var(--tab-background-clicked); +} +/*================== Headers ======================*/ +/*Centered Header 1*/ +.markdown-preview-section h1, .cm-header-1, .markdown-rendered h1 { + font-family: var(--title-heading); + text-align: center; +} +/*Headers Styling Preview/Source*/ +.cm-s-obsidian .HyperMD-header-2, .cm-s-obsidian .HyperMD-header-3, .cm-s-obsidian .HyperMD-header-4, .cm-s-obsidian .HyperMD-header-5, +.cm-s-obsidian .HyperMD-header-6, .metadata-properties-heading { + padding: 15px 0px 0px 0px !important; + position: relative; + border-bottom: 2px solid; + border-image-slice: 1; +} +/*Headers Styling Read*/ +.markdown-preview-view h2, h2, .markdown-preview-view h3, h3, .markdown-preview-view h4, h4, .markdown-preview-view h5, h5, .markdown-preview-view h6, h6 { + padding-bottom: 5px; border-bottom: 2px solid; border-image-slice: 1; +} + +/*Glow for Heading 1*/ +.cm-header-1:not(.cm-formatting), h1, .metadata-properties-heading, .cm-formatting-header:is(.cm-header-1) { + text-shadow: + 0 0 5px var(--h1-glow), 0 0 10px var(--h1-glow), + 0 0 20px var(--h1-glow), 0 0 40px var(--h1-glow), 0 0 45px var(--h1-glow); + color: var(--text-normal); +} + +/*Glow and Colors for Heading 2*/ +.cm-s-obsidian .HyperMD-header-2, .markdown-preview-view h2, h2, .cm-formatting-header:is(.cm-header-2) { + border-image-source: linear-gradient(to right, var(--h2-glow), transparent); + text-shadow: 0 0 5px var(--h2-glow), 0 0 10px var(--h2-glow), 0 0 20px var(--h2-glow), 0 0 10px var(--h2-glow); + color: var(--text-normal); +} +/*Glow and Colors for Heading 3*/ +.cm-s-obsidian .HyperMD-header-3, .markdown-preview-view h3, h3, .cm-formatting-header:is(.cm-header-3) { + border-image-source: linear-gradient(to right, var(--h3-glow), transparent); + text-shadow: 0 0 5px var(--h3-glow), 0 0 10px var(--h3-glow), 0 0 20px var(--h3-glow), 0 0 10px var(--h3-glow); + color: var(--text-normal); +} +/*Glow and Colors for Heading 4*/ +.cm-s-obsidian .HyperMD-header-4, .markdown-preview-view h4, h4, .cm-formatting-header:is(.cm-header-4) { + border-image-source: linear-gradient(to right, var(--h4-glow), transparent); + text-shadow: 0 0 5px var(--h4-glow), 0 0 10px var(--h4-glow), 0 0 20px var(--h4-glow), 0 0 10px var(--h4-glow); + color: var(--text-normal); +} +/*Glow and Colors for Heading 5*/ +.cm-s-obsidian .HyperMD-header-5, .markdown-preview-view h5, h5, .cm-formatting-header:is(.cm-header-5) { + border-image-source: linear-gradient(to right, var(--h5-glow), transparent); + text-shadow: 0 0 5px var(--h5-glow), 0 0 10px var(--h5-glow), 0 0 20px var(--h5-glow), 0 0 10px var(--h5-glow); + color: var(--text-normal); +} +/*Glow and Colors for Heading 6*/ +.cm-s-obsidian .HyperMD-header-6, .markdown-preview-view h6, h6, .cm-formatting-header:is(.cm-header-6) { + border-image-source: linear-gradient(to right, var(--h6-glow), transparent); + text-shadow: 0 0 5px var(--h6-glow), 0 0 10px var(--h6-glow), 0 0 20px var(--h6-glow), 0 0 35px var(--h6-glow); + color: var(--text-normal); +} +/*Return of Heading numbers Styled*/ +:not(.cm-active).cm-line span:not(.cm-formatting-header):not(.cm-hashtag):not(.cm-inline-code):not(.cm-highlight).cm-header::before { + font-size: 0.7rem; + margin-right: 5px; + font-weight: bold; +} +/*Removes redundant heading number for links and tags*/ +.mod-cm6.is-live-preview div:not(.cm-active).cm-line .cm-header~span.cm-header::before, +.mod-cm6.is-live-preview div:not(.cm-active).cm-line .cm-header.cm-hmd-internal-link::before { + display: none; +} +/*Sets content for heading numbers h1-h6*/ +body:not(.mini-header-hide) :not(.cm-active).cm-line span:not(.cm-formatting-header).cm-header-1::before { + content: 'H1'; + margin-top: calc(var(--h1-size) - 0.1em); +} +body:not(.mini-header-hide) :not(.cm-active).cm-line span:not(.cm-formatting-header).cm-header-2::before { + content: 'H2'; + margin-top: calc(var(--h2-size) - 0.2em); +} +body:not(.mini-header-hide) :not(.cm-active).cm-line span:not(.cm-formatting-header).cm-header-3::before { + content: 'H3'; + margin-top: calc(var(--h3-size) - 0.2em); +} +body:not(.mini-header-hide) :not(.cm-active).cm-line span:not(.cm-formatting-header).cm-header-4::before { + content: 'H4'; + margin-top: calc(var(--h4-size) - 0.3em); +} +body:not(.mini-header-hide) :not(.cm-active).cm-line span:not(.cm-formatting-header).cm-header-5::before { + content: 'H5'; + margin-top: calc(var(--h5-size) - 0.4em); +} +body:not(.mini-header-hide) :not(.cm-active).cm-line span:not(.cm-formatting-header).cm-header-6::before { + content: 'H6'; + margin-top: calc(var(--h6-size) - 0.4em); +} +/*------------------- Buttons and dropdowns ---------------------*/ +/*Button and Dropdown Styling*/ +button:not(.clickable-icon):not(.markdown-rendered button.copy-code-button), .dropdown, .search-results-info .dropdown, .style-settings-export, +.style-settings-import, .metadata-container .metadata-add-button { + color: var(--text-accent); + box-shadow: 0 0 0.2em var(--text-accent); + background-color: var(--interactive-normal); + border-image-slice: 1; + border-top: 3px solid; + border-bottom: 3px solid; + border-image-source: linear-gradient(to right, transparent, var(--text-accent), transparent); +} + +@keyframes fadeHoverGlow { + 0% { box-shadow: 0 0 0.2em var(--text-accent);} + 100% { box-shadow: 0 0 0.5em var(--text-accent);} +} +@keyframes fadeHoverBackground { + 0% {background-color: var(--interactive-normal);} + 100% {background-color: var(--text-selection);} +} + +/*Button and Dropdown hover Styling*/ +button:not(.clickable-icon):not(.markdown-rendered button.copy-code-button):hover, .dropdown:hover, .style-settings-export:hover, + .style-settings-import:hover, .metadata-container .metadata-add-button:hover { + animation: 0.4s fadeHoverGlow forwards, 0.2s fadeHoverBackground forwards, 0.2s bighover forwards; +} + +/*Button and Dropdown active Styling*/ +button:not(.clickable-icon):not(.markdown-rendered button.copy-code-button):active, .dropdown:focus, .style-settings-export:active, +.style-settings-import:active, .metadata-container .metadata-add-button:active { + animation: 0.3s bigpressed forwards; + box-shadow: 0 0 0.9em var(--text-accent); + background-color: var(--color-accent-active); +} +/*Search dropdown*/ +.search-results-info .dropdown { + text-align-last: center; + max-width: 50%; +} +/*Adds padding and reduces size for Style Settings Ex/Import*/ +.style-settings-export, .style-settings-import { + font-size: small; + padding: 3px; +} +/*Hides Disabled buttons*/ +.clickable-icon[aria-disabled='true'] { + visibility: hidden; +} +/*Adds hover Settings small buttons*/ +.setting-editor-extra-setting-button:hover { + color: var(--activetab-highlight); +} +/*------------ Settings: Close Buttons --------------------*/ +/*Close Button on Hover*/ +.modal-close-button:hover, .document-search-close-button:hover, a.kanban-plugin__search-cancel-button.clickable-icon:hover, +a.kanban-plugin__item-postfix-button.is-enabled.clickable-icon:hover, .graph-controls:not(.is-close) .graph-controls-button.mod-close:hover, +.workspace .mod-root .workspace-tab-header .workspace-tab-header-inner-close-button:hover, .multi-select-pill-remove-button:hover{ + color: var(--text-close-color); + background-color: var(--background-close-hover); +} +/*Close Button on active*/ +.modal-close-button:active, .document-search-close-button:active, a.kanban-plugin__search-cancel-button.clickable-icon:active, +a.kanban-plugin__item-postfix-button.is-enabled.clickable-icon:active, .multi-select-pill-remove-button:active, +.workspace .mod-root .workspace-tab-header .workspace-tab-header-inner-close-button:active, +.graph-controls:not(.is-close) .graph-controls-button.mod-close:active { + color: var(--text-close-color); + background-color: var(--background-close-active); +} +/*Pinned Tab*/ +.mod-root .mod-pinned:hover { + background-color: var(--background-modifier-hover); +} +/*================= Settings ====================*/ +/*Style Left Panel Settings Headings*/ +.vertical-tab-header-group-title { + color: var(--text-accent); + border-bottom: 2px solid; + border-image-slice: 1; + border-image-source: linear-gradient(to right, var(--text-accent), transparent); + padding-bottom: 0px; + margin-bottom: 5px; +} +/*Settings*/ +body:not(.is-phone) .vertical-tab-header-group .vertical-tab-header-group-title { + display: flex; + align-items: center; + padding-left: 0px; +} +/*Options Icon*/ +body:not(.is-phone) .vertical-tab-header-group:nth-last-of-type(3) .vertical-tab-header-group-title::before { + content: " "; + width: 16px; + height: 16px; + background-color: currentColor; + margin-right: 4px; + -webkit-mask-image: url('data:image/svg+xml,%3Csvg xmlns="http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg" width="16" height="16" viewBox="0 0 16 16"%3E%3Cpath fill="currentColor" d="M6 9a2 2 0 0 1 1.937 1.5H13.5a.5.5 0 0 1 .09.992l-.09.008l-5.563.001a2 2 0 0 1-3.874 0L2.5 11.5a.5.5 0 0 1-.09-.992l.09-.008h1.563A2 2 0 0 1 6 9Zm0 1a1 1 0 1 0 0 2a1 1 0 0 0 0-2Zm4-7a2 2 0 0 1 1.937 1.5H13.5a.5.5 0 0 1 .09.992l-.09.008l-1.563.001a2 2 0 0 1-3.874 0L2.5 5.5a.5.5 0 0 1-.09-.992L2.5 4.5h5.563A2 2 0 0 1 10 3Zm0 1a1 1 0 1 0 0 2a1 1 0 0 0 0-2Z"%2F%3E%3C%2Fsvg%3E'); +} +/*Core Plugins Icon*/ +body:not(.is-phone) .vertical-tab-header-group:nth-last-of-type(2) .vertical-tab-header-group-title::before { + content: " "; + width: 16px; + height: 16px; + background-color: currentColor; + margin-right: 4px; + -webkit-mask-image: url('data:image/svg+xml,%3Csvg xmlns="http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg" width="1em" height="1em" viewBox="0 0 16 16"%3E%3Cpath fill="currentColor" d="M7 3a2 2 0 0 1 4 0h1.5A1.5 1.5 0 0 1 14 4.5V7h-1a1 1 0 0 0 0 2h1v2.5a1.5 1.5 0 0 1-1.5 1.5H11a2 2 0 0 1-4 0H5.5A1.5 1.5 0 0 1 4 11.5V10a2 2 0 0 1 0-4V4.5A1.5 1.5 0 0 1 5.5 3H7Zm2-1a1 1 0 0 0-1 1v1H5.5a.5.5 0 0 0-.5.5V7H4a1 1 0 0 0 0 2h1v2.5a.5.5 0 0 0 .5.5H8v1a1 1 0 0 0 2 0v-1h2.5a.5.5 0 0 0 .5-.5V10a2 2 0 0 1 0-4V4.5a.5.5 0 0 0-.5-.5H10V3a1 1 0 0 0-1-1Z"%2F%3E%3C%2Fsvg%3E'); +} +/*Community Plugins Icon*/ +body:not(.is-phone) .vertical-tab-header-group:nth-last-of-type(1) .vertical-tab-header-group-title::before { + content: " "; + width: 16px; + height: 16px; + background-color: currentColor; + margin-right: 4px; + -webkit-mask-image: url('data:image/svg+xml,%3Csvg xmlns="http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg" width="16" height="16" viewBox="0 0 16 16"%3E%3Cpath fill="currentColor" d="M13.25 1.75a.75.75 0 0 0-1.5 0v1h-1a.75.75 0 0 0 0 1.5h1v1a.75.75 0 0 0 1.5 0v-1h1a.75.75 0 0 0 0-1.5h-1v-1ZM4 2a2 2 0 0 0-2 2v7.75a2 2 0 0 0 2 2h8a2 2 0 0 0 2-2v-2.5a2 2 0 0 0-2-2H8.75V4a2 2 0 0 0-2-2H4Zm3.25 6.75v3.5H4a.5.5 0 0 1-.5-.5v-3h3.75Zm0-4.75v3.25H3.5V4a.5.5 0 0 1 .5-.5h2.75a.5.5 0 0 1 .5.5ZM12 12.25H8.75v-3.5H12a.5.5 0 0 1 .5.5v2.5a.5.5 0 0 1-.5.5Z"%2F%3E%3C%2Fsvg%3E'); +} +/*------------------ Settings: Toggles --------------------*/ +/*Add Glow to Toggle and adds fluid animations*/ +.checkbox-container, .checkbox-container:hover{ + box-shadow: 0 0 0.1em transparent; + transition: background 0.3s ease-in, box-shadow 0.4s ease-in; +} +.checkbox-container.is-enabled { + box-shadow: 0 0 0.7em var(--text-accent); + transition: background 0.3s ease-in, box-shadow 0.4s ease-in; +} + +.checkbox-container:not(.is-enabled):after{ + transition: background 0.6s ease-in, box-shadow 0.6s ease-in; +} + +.checkbox-container:after{ +transition: background 0.3s ease-in, box-shadow 0.3s ease-in; +} +/*Colors Toggle*/ +.checkbox-container.is-enabled:after { + background: var(--color-glow); + transition: transform 0.15s ease-in-out, width 0.1s ease-in-out, left 0.1s ease-in-out, background 0.3s ease-in, box-shadow 0.3s ease-in; + +} +/*Style Slider*/ +input[type='range'], +body:not(.is-mobile) input[type=range]:focus { + background-color: var(--text-accent); + box-shadow: 0 0 0.5em var(--text-accent); +} +/*------------------- Settings: Background -------------------------*/ + +/*Corrects coloring for headings in settings items*/ +.setting-item-name { + color: var(--text-accent); +} +/*Styles Settings Modal*/ +.modal { + border-radius: 3px; + background: var(--background-settings); + backdrop-filter: blur(5px) saturate(120%) !important; + border-image-slice: 1; + border-image-source: linear-gradient(to right, transparent, var(--text-accent), transparent); + border-bottom: 3px solid; + border-top: 3px solid; +} +body.is-frameless:not(.mod-macos):not(.is-mobile) .modal { + height: 95%; +} +/*Removes Line Seperator*/ +.modal.mod-settings .vertical-tab-header { + border-right: transparent; +} +/*Adds Header to Setting*/ +.modal.mod-settings .vertical-tab-content-container { + padding: 35px 0px 0px 0; +} +/*Styles Content of Setting*/ +.modal .setting-item { + background: var(--background-settings-2); + border-radius: 3px; + margin: 0px 0px 5px 0px; + border-color: transparent; + padding: 18px; +} +/*Adds Styled Seperation line*/ +.community-modal-search-results-wrapper { + border-image-slice: 1; + border-image-source: linear-gradient(to right, transparent, var(--text-accent), transparent); + border-top: 2px solid; + background-color: var(--background-primary); + border-radius: 3px; +} +/*Removes double background for settings (huh)*/ +.horizontal-tab-content, .vertical-tab-content, .vertical-tab-header, .modal-sidebar { + background: transparent; +} + +/*Textbox Styling*/ +textarea, input[type='text'], input[type='search'], input[type='email'], input[type='password'], input[type='number'], input.metadata-property-key-input[type='text'], +.metadata-property-value .multi-select-input, .metadata-property input[type='number'], .metadata-input-longtext{ + background: var(--background-settings-2); + text-align: center; + border-top: 0px solid transparent; + border-bottom: 1px solid; + border-image-slice: 1; + border-image-source: linear-gradient(to right, transparent, var(--text-accent), transparent); +} +/*Textbox hover Styling*/ +textarea:hover, input[type='text']:hover, input[type='search']:hover, input[type='email']:hover, input[type='password']:hover, +.metadata-property-value .multi-select-input:hover{ + background: var(--text-selection); +} +/*Stylizes meta prop input text*/ +.metadata-property input[type='text']:hover, .metadata-property input[type='number']:hover, .metadata-input-longtext:hover{ + background: var(--text-selection); + border-top: 0px solid transparent; + border-bottom: 1px solid; + border-image-slice: 1; + border-image-source: linear-gradient(to right, transparent, var(--text-accent), transparent); +} +/*Textbox active Styling*/ +textarea:active, textarea:focus, input[type='text']:active, input[type='search']:active, input[type='email']:active, input[type='password']:active, +input[type='number']:active, input[type='text']:focus, input[type='search']:focus, input[type='email']:focus, input[type='password']:focus, +input[type='number']:focus, textarea:focus-visible, input[type='text']:focus-visible, input[type='search']:focus-visible, select:focus, +input[type='email']:focus-visible, input[type='password']:focus-visible, input[type='number']:focus-visible, +.workspace-leaf.mod-active .view-header-title:focus, .metadata-property input[type='text']:focus, .metadata-property-value .multi-select-input:focus, +.metadata-property input[type='number']:focus, .metadata-input-longtext:focus { + border-top: 0px solid transparent; + box-shadow: none; + border-bottom: 2px solid; + border-image-slice: 1; + border-image-source: linear-gradient(to right, transparent, var(--text-accent), transparent); + background-color: var(--color-accent-active); +} +/*Styles metadata prop icon*/ +.metadata-property-icon{ + background-color: var(--color-accent-active); + color: var(--text-accent); + opacity: 1; + padding:var(--size-2-2); +} +.metadata-property-icon:before{ + width: 0; +} +/*Styles metadata prop icon on hover*/ +.metadata-property-icon:hover{ + background: var(--text-selection); +} +/*Removes unnecessary padding*/ +.metadata-property .multi-select-container{ + padding: 0; +} +/*Adds a small gap*/ +.metadata-property{ + gap: 3px; +} +/*Styles textbox and remove scrollbar from longtextbox*/ +.metadata-input-longtext, .metadata-input-text{ + height: var(--metadata-input-height); + -webkit-box-pack: center; + -webkit-box-orient: horizontal; +} +.metadata-input-longtext::-webkit-scrollbar{ + display: none; +} +/*Styles metadata frame highlight*/ +.metadata-property:hover, .metadata-property:focus-within { +box-shadow: 0 0 3px 0.2px var(--text-accent); +} +/*Remove Unnecessary highlighting*/ +.metadata-property-value:focus-within{ + background-color: transparent; +} +/**/ +.metadata-property ::-webkit-calendar-picker-indicator{ + padding:3px; + margin-left:-2px; +} +.metadata-property ::-webkit-calendar-picker-indicator:hover{ +background-color: var(--text-faint); +border-radius: 3px; +cursor: var(--cursor-link); +} +.metadata-property ::-webkit-calendar-picker-indicator:active{ +background-color: var(--text-accent); +} + +/*-------------------- Settings: Sidebar -----------------------*/ +/*Adds spacing for style and colors text*/ +.vertical-tab-nav-item { + color: var(--text-faint); + border-top: 1px solid transparent; + border-bottom: 1px solid transparent; +} +/*Items hover styling*/ +body:not(.is-mobile) .vertical-tab-nav-item:not(.is-active):hover { + color: var(--text-accent); + border-image-slice: 1; + border-top: 1px solid; + border-bottom: 1px solid; + border-image-source: linear-gradient(to right, transparent, var(--text-accent), transparent); +} +/*Items active styling*/ +.vertical-tab-nav-item.is-active, .horizontal-tab-nav-item.is-active:active, .vertical-tab-nav-item.is-active:active, +.horizontal-tab-nav-item.is-active:hover, .vertical-tab-nav-item.is-active:hover, .vertical-tab-nav-item:active { + color: var(--text-accent); + background: var(--color-accent-active); + border-image-slice: 1; + border-top: 2px solid; + border-bottom: 2px solid; + border-image-source: linear-gradient(to right, transparent, var(--text-accent), transparent); +} +/*-------------- Text Finder --------------------*/ +/*Centers Finder Modal*/ +.document-search-container { + margin-left: 0px; +} +/*Adds styling for Finder*/ +.document-search-container { + border-bottom: 2px solid; + border-image-slice: 1; + border-image-source: linear-gradient(to right, transparent, var(--text-accent), transparent); + width: 100%; +} +/*Corrects Background color*/ +body:not(.is-mobile) .document-search-container { + background-color: var(--background-settings); +} +/*----------- Settings: Community ---------------------*/ +/*Removes seperator*/ +.community-modal-details { + border-left: transparent; +} +.modal-setting-nav-bar { + border-bottom: transparent; +} +/*Corrects spacing for options*/ +.mod-community-modal .modal-sidebar .setting-item { + padding: 7px; + margin-left: 5px; +} +/*Corrects icon color*/ +.mod-community-modal .modal-sidebar button.clickable-icon { + color: var(--text-faint); +} +/*Spacing for Style*/ +.community-item { + border: transparent; + border-bottom: 1px solid transparent; + border-top: 1px solid transparent; + color: var(--text-faint); +} +/*Style on Hover*/ +.community-item:hover, .suggestion-item.is-selected:not(.mod-group) { + background-color: var(--text-selection); + border-bottom: 1px solid; + border-top: 1px solid; + border-image-slice: 1; + border-image-source: linear-gradient(to right, transparent, var(--text-accent), transparent); + color: var(--text-accent); +} +/*Style on active*/ +body:not(.is-mobile) .community-item.is-selected, +.community-item.is-selected:hover { + background-color: var(--text-selection); + border-bottom: 2px solid; + border-top: 2px solid; + border-image-slice: 1; + border-image-source: linear-gradient(to right, transparent, var(--text-accent), transparent); + color: var(--text-accent); +} +.community-item:active { + background-color: var(--color-accent-active); + border-bottom: 2px solid; + border-top: 2px solid; + border-image-slice: 1; + border-image-source: linear-gradient(to right, transparent, var(--text-accent), transparent); + color: var(--text-accent); +} +/*Needed to correct the really not well implemented Font Coloring for Community items*/ +body:not(.is-mobile) .community-item.is-selected .community-item-author, .community-item.is-selected:hover .community-item-author, +.community-item.is-selected .community-item-repo, .community-item.is-selected:hover .community-item-repo, +.community-item.is-selected .community-item-downloads, .community-item.is-selected:hover .community-item-downloads, +.community-item.is-selected .community-item-updated, .community-item.is-selected:hover .community-item-updated, +.community-item:hover .community-item-downloads, .community-item:hover .community-item-author, .community-item:hover .community-item-name, +.community-item:hover .community-item-updated, .community-item:active .community-item-downloads, .community-item:active .community-item-author, +.community-item:active .community-item-name, .community-item:active .community-item-updated, .community-item.is-selected .community-item-downloads, +.community-item.is-selected .community-item-author, .community-item.is-selected .community-item-name, .community-item.is-selected .community-item-updated { + color: var(--text-accent); +} +.community-item-downloads, .community-item-author, .community-item-name, .community-item-updated { + color: var(--text-faint); +} +/*Flair Style*/ +.community-item.is-selected .flair, .community-item.is-selected:hover .flair, .flair.mod-pop { + color: var(--text-accent); + background-color: var(--text-selection); +} +/*Corrects Setting Header 1 Style*/ +.vertical-tab-content h1, .community-modal-info .markdown-rendered h1 { + text-align: center; + border-bottom: 2px solid !important; + border-image-slice: 1; + border-width: 1px; + border-image-source: linear-gradient(to right, transparent, var(--text-accent), transparent); +} +/*Sets Sizing for Community Modal Controls*/ +.community-modal-controls { + max-width: var(--modal-community-sidebar-width); +} +/*================ Progress Bar ====================*/ +.progress-bar-subline { + border-radius: 10px; +} +/*========= Plugins =========*/ +/*--------- Calendar Plugin ----------*/ +.year.svelte-1vwr9dd.svelte-1vwr9dd{ + --interactive-accent: var(--text-normal); + } +/*---------------- Surfing Plugin ---------------*/ +/*Changes addressbar width*/ +.wb-search-bar { + width: 95%; +} +/*New Page changed radius*/ +.wb-page-search-bar-input-container, .wb-page-search-bar-input { + border-radius: 3px !important; +} +/*New page buttons more visible*/ +.wb-create-btn, .wb-search-btn, .wb-close-btn { + opacity: 0.8; +} +/*Colors settings icon on new page*/ +.surfing-settings-icon { + color: var(--text-accent); + cursor: help; +} +/*Colors refresh button*/ +.wb-refresh-button, .wb-refresh-button .lucide-refresh-cw { + color: var(--text-faint); +} +/*Colors refresh button on hover*/ +.wb-refresh-button .lucide-refresh-cw:hover { + color: var(--text-accent); +} +/*Removes unnecessary margins for Surfing Tabs*/ +.surfing_app_zUmbJa { + margin: 0px; + border-radius: 0px; + border-bottom: 2px solid; + border-image-slice: 1; + border-image-source: linear-gradient(to right, transparent, var(--text-accent), transparent); +} +/*Colors Font on active and selected texts for Surfing Tab*/ +.surfing_root_px3YjW.surfing_isSelected_px3YjW :where(.css-dev-only-do-not-override-1i536d8).ant-typography { + color: var(--text-accent); +} +/*Color font for Surfing Tab*/ +:where(.css-dev-only-do-not-override-1i536d8).ant-typography { + color: var(--text-faint); +} +/*Readjusts borders for Surfing Tabs*/ +.surfing_root_px3YjW { + border-left: 2px solid transparent; + border-right: 2.5px solid transparent; + border-bottom: 0px; +} +/*Styles Surfing Active and Selected Tabs*/ +.surfing_root_px3YjW:active, .surfing_root_px3YjW.surfing_isSelected_px3YjW { + background-color: var(--color-accent-active); + border-radius: 3px; + border-image-slice: 1; + opacity: 1; + border-right: 3.5px solid; + border-image-source: linear-gradient(to top, transparent, var(--text-accent), transparent); + border-left: 3px solid; +} +/*Styles Surfing hover Tabs*/ +.surfing_root_px3YjW:hover, .surfing_root_px3YjW.surfing_isSelected_px3YjW { + background-color: var(--text-selection); + border-radius: 3px; + border-image-slice: 1; + opacity: 1; + border-right: 2.5px solid; + border-image-source: linear-gradient(to top, transparent, var(--text-accent), transparent); + border-left: 2px solid; +} +/*Web Frame Slight Transparency*/ +.wb-frame { + opacity: 0.8; +} +/*Setting's Surfing Nav spaces and colored*/ +.wb-navigation-item { + color: var(--text-faint); + border-right: 1px solid transparent; + border-left: 1px solid transparent; +} +/*Setting's Surfing Nav on Hover*/ +.wb-navigation-item:hover { + background-color: var(--text-selection); + border-radius: 3px; + border-image-slice: 1; + opacity: 1; + border-right: 1px solid; + border-left: 1px solid; + border-image-source: linear-gradient(to bottom, transparent, var(--text-accent), transparent); +} +/*Setting's Surfing Nav on active*/ +.wb-navigation-item-selected, .wb-navigation-item:active, .wb-navigation-item-selected:hover { + background-color: var(--color-accent-active); + border-radius: 3px; + border-image-slice: 1; + opacity: 1; + border-right: 2px solid; + border-image-source: linear-gradient(to bottom, transparent, var(--text-accent), transparent); + border-left: 2px solid; +} +/*---------------- LanguageTool Plugin ------------*/ +/*LanguageTool popup styled*/ +.lt-predictions-container-glass.cm-tooltip, .lt-predictions-container.cm-tooltip, .lt-predictions-container-glass, .lt-predictions-container { + background: var(--background-settings-alt); + backdrop-filter: blur(5px) saturate(120%); + border-image-slice: 1; + border-image-source: linear-gradient(to top, transparent, var(--text-accent), transparent); +} +/*Bottom Button resized*/ +button:not(.clickable-icon).lt-ignore-btn { + margin: 0px 10px 10px 10px; +} +/*------------------- Style Settings ------------------------*/ +/*Adds Styling to the Modal Title*/ +.modal-title { + text-align: center; + border-bottom: 2px solid; + border-image-slice: 1; + border-image-source: linear-gradient(to right, transparent, var(--text-accent), transparent); + text-shadow: 0 0 5px var(--text-accent), + 0 0 10px var(--text-accent), + 0 0 20px var(--text-accent); +} +/*Colors text*/ +body:not(.is-mobile) .workspace-leaf-content .view-content .setting-item .setting-item-name, +body:not(.is-mobile) .workspace-leaf-content .view-content .setting-item .setting-item-description, .setting-item-description { + color: var(--text-faint); +} +/*Fixes weird reset button with Theme in Style Settings*/ +.themed-color-wrapper .pickr-reset>button { + padding: 5px; +} +/*Gives some and corrects height of group container*/ +.themed-color-wrapper>div+div { + margin-top: auto; + margin-left: 5px; +} +/*Adds Style to Setting Item in Style Settings*/ +body:not(.is-mobile) .workspace-leaf-content .view-content .setting-item { + background: var(--background-settings-alt); + border-radius: 5px; + padding: 10px; + border-bottom: 1px solid transparent; + border-top: 1px solid transparent; + margin-bottom: 10px; +} +/*Adds Style to Setting Item on hover in Style Settings*/ +.setting-item.setting-item-heading.style-settings-heading.is-collapsed:hover { + border-bottom: 1px solid; + border-top: 1px solid; + border-image-slice: 1; + border-image-source: linear-gradient(to right, transparent, var(--text-accent), transparent); + background: var(--text-selection); +} +/*Colors text when hover*/ +.setting-item.setting-item-heading.style-settings-heading.is-collapsed:hover .setting-item-name, +.setting-item.setting-item-heading.style-settings-heading.is-collapsed:hover .setting-item-description, +body:not(.is-mobile) .workspace-leaf-content .view-content .setting-item.setting-item-heading.style-settings-heading:not(.is-collapsed) .setting-item-description { + color: var(--text-accent); +} +/*Adds Style to Setting Item on active in Style Settings*/ +body:not(.is-mobile) .workspace-leaf-content .view-content .setting-item.setting-item-heading.style-settings-heading.is-collapsed:active, +body:not(.is-mobile) .workspace-leaf-content .view-content .setting-item.setting-item-heading.style-settings-heading:not(.is-collapsed) { + border-bottom: 1px solid; + border-top: 1px solid; + border-image-slice: 1; + border-image-source: linear-gradient(to right, transparent, var(--text-accent), transparent); + background: var(--color-accent-active); +} +/*Style Settings corrected background color*/ +.workspace-split.mod-horizontal .workspace-leaf-content[data-type="style-settings"]{ + background-color: var(--background-primary); + } +/*Colors text when active*/ +body:not(.is-mobile) .workspace-leaf-content .view-content .setting-item.setting-item-heading.style-settings-heading.is-collapsed:active, +body:not(.is-mobile) .workspace-leaf-content .view-content .setting-item.setting-item-heading.style-settings-heading:not(.is-collapsed) .setting-item-name { + color: var(--text-accent); +} +/*Fits Style Options within box*/ +.style-settings-container [data-level='1'].setting-item-heading.style-settings-heading.is-collapsed, +.style-settings-container [data-level='2'].setting-item-heading.style-settings-heading.is-collapsed, +.style-settings-container [data-level='3'].setting-item-heading.style-settings-heading.is-collapsed, +.style-settings-container [data-level='4'].setting-item-heading.style-settings-heading.is-collapsed, +.style-settings-container [data-level='5'].setting-item-heading.style-settings-heading.is-collapsed { + padding-left: 30px; +} +.style-settings-container [data-level='1'].setting-item-heading.style-settings-heading:not(.is-collapsed), +.style-settings-container [data-level='2'].setting-item-heading.style-settings-heading:not(.is-collapsed), +.style-settings-container [data-level='3'].setting-item-heading.style-settings-heading:not(.is-collapsed), +.style-settings-container [data-level='4'].setting-item-heading.style-settings-heading:not(.is-collapsed), +.style-settings-container [data-level='5'].setting-item-heading.style-settings-heading:not(.is-collapsed) { + padding-left: 30px; +} +/*=============== Mermaid Entity Box Color fix ================*/ +.attributeBoxOdd, .attributeBoxEven { + fill: var(--background-primary) !important; +} +/*================= Text Stylings ===================*/ +/*Styles Bold Text*/ +.cm-strong, strong { + color: var(--text-normal); + text-shadow: 0 0 5px var(--text-accent), 0 0 10px var(--text-accent), 0 0 20px var(--text-accent), 0 0 40px var(--text-accent); +} +/*Styles Italic Text*/ +.cm-em, em { + color: var(--text-normal); + text-shadow: 0 0 5px var(--text-accent), 0 0 10px var(--text-accent), 0 0 20px var(--text-accent), 0 0 40px var(--text-accent); +} +/*Styles Strikeout*/ +.cm-strikethrough, del, ul > li.task-list-item[data-task="x"], ul > li.task-list-item[data-task="X"] { + text-decoration-color: var(--text-close-color); + color: var(--text-close-color); + text-shadow: 0 0 5px var(--text-close-color), 0 0 10px var(--text-close-color), 0 0 20px var(--text-close-color), 0 0 40px var(--text-close-color); +} +/*Styles Underline*/ +span.cm-html-embed, u { + text-shadow: 0 0 5px var(--text-accent), 0 0 10px var(--text-accent), 0 0 20px var(--text-accent), 0 0 40px var(--text-accent); +} +/*================== Code Fence Style =====================*/ +/*Styles Code Blocks*/ +.markdown-preview-view pre, .markdown-rendered pre { + border-image-slice: 1; + border-top: 3px solid; + border-bottom: 3px solid; + border-image-source: linear-gradient(to right, transparent, var(--text-accent), transparent); +} +.markdown-rendered pre code, .markdown-source-view.mod-cm6 .cm-line.HyperMD-codeblock{ +color:var(--text-normal); +} +/*Removes indent lines in code*/ +.markdown-source-view.mod-cm6 .cm-line.HyperMD-codeblock .cm-indent::before { + display: none; +} +/*Edit mode Adds styling at start of codeblock*/ +body:not(.no-codeblock-line-numbers) .cm-s-obsidian div.HyperMD-codeblock-begin-bg { + border-image-slice: 1; + border-image-source: linear-gradient(to right, transparent, var(--text-accent), transparent); + border-top: 2px solid; + padding-bottom: 15px; +} +/*Edit mode Adds styling at end of codeblock*/ +body:not(.no-codeblock-line-numbers) .cm-s-obsidian div.HyperMD-codeblock-end-bg { + border-image-slice: 1; + border-image-source: linear-gradient(to right, transparent, var(--text-accent), transparent); + border-bottom: 2px solid; +} +/*Sets reset for code gutter*/ +body:not(.no-codeblock-line-numbers) .HyperMD-codeblock-begin { + counter-reset: codeblock-line-numbers; +} +/*Sets custom code gutterline*/ +body:not(.no-codeblock-line-numbers) .HyperMD-codeblock:not(.HyperMD-codeblock-begin, + .HyperMD-codeblock-end)::before { + counter-increment: codeblock-line-numbers; + content: counter(codeblock-line-numbers); + text-align: center; + width: 1.7em; + color: var(--text-faint); + position: absolute; + left: 0; +} +/*Spacing for gutterline*/ +body:not(.no-codeblock-line-numbers) .HyperMD-codeblock.cm-line:not(.HyperMD-codeblock-begin, + .HyperMD-codeblock-end) { + padding-left: 2em; +} + +/*Changes Code Font*/ +.cm-gutterElement, body:not(.no-codeblock-line-numbers) .HyperMD-codeblock:not(.HyperMD-codeblock-begin, .HyperMD-codeblock-end)::before, .markdown-rendered pre code, .markdown-source-view.mod-cm6 .cm-line.HyperMD-codeblock, .cm-s-obsidian span.cm-inline-code, .markdown-rendered code{ + font-family: 'OxaniumFira'; +} +/*================ Blockquotes Style ================*/ +/*Sets style for Blockquotes*/ +.markdown-preview-view blockquote { + padding: 2rem 2rem 1rem 3rem; + border-left: transparent; + background: linear-gradient(95deg, var(--text-selection), var(--block-color)); + border-radius: 3px; +} +/*Quote Styling for blockquotes*/ +.markdown-preview-view blockquote p:first-of-type::before { + content: '❝'; + font-family: arial; + opacity: .45; + font-size: 100px; + color: var(--text-accent); + position: absolute; + top: -3.75rem; + left: -0.3rem; + margin-left: -0.3em; + z-index: -1; +} +.markdown-preview-view blockquote p { + position: relative; +} +/*Corrects spacing of quote sign and text for blockquotes*/ +.markdown-preview-view blockquote> :first-child { + z-index: 1; + margin-left: -0.5em; +} +/*Code Segment Style*/ +.cm-s-obsidian span.cm-inline-code:not(.cm-formatting):not(.cm-hmd-indented-code):not(.obsidian-search-match-highlight), .markdown-rendered code { + background: var(--background-modifier-hover); + border-radius: 5px; + padding-left: 5px; + padding-right: 5px; +} +/* blockquotes, embeds, tables inner/outer glow */ +.markdown-preview-view blockquote, .markdown-preview-view .markdown-embed, .markdown-preview-view .file-embed, .markdown-preview-view th { + box-shadow: 0em 0em 0.5em 0.1em var(--text-accent) , inset 0em 0em 2em var(--text-accent); +} +/*============== Empty Tab ==================*/ +/*Sets Style for Empty Title*/ +.empty-state-title { + border-image-slice: 1; + border-image-source: linear-gradient(to right, transparent, var(--text-accent), transparent); + border-bottom: 3px solid; + text-shadow: 0 0 5px var(--text-accent), 0 0 10px var(--text-accent), 0 0 20px var(--text-accent), 0 0 40px var(--text-accent), 0 0 80px var(--text-accent); +} +/*Sets Spacing for Empty Items*/ +body:not(.is-mobile) .empty-state-action { + border-bottom: 1px solid transparent; + border-top: 1px solid transparent; + padding: 0 5px 0 5px; +} +/*Sets Spacing for Empty Items hover*/ +body:not(.is-mobile) .empty-state-action:hover { + background: var(--text-selection); + border-radius: 3px; + border-image-slice: 1; + border-image-source: linear-gradient(to right, transparent, var(--text-accent), transparent); + border-bottom: 1px solid; + border-top: 1px solid; +} +/*Sets Spacing for Empty Items active*/ +body:not(.is-mobile) .empty-state-action:active { + background-color: var(--color-accent-active); + border-radius: 3px; + box-shadow: 0 0 0.3em var(--text-accent); + border-image-slice: 1; + border-image-source: linear-gradient(to right, transparent, var(--text-accent), transparent); + border-bottom: 2px solid; + border-top: 2px solid; +} +/*================ Canvas ================*/ +/*---------------- Canvas right hand controls --------------------*/ +/*Sets Style for Right controls*/ +.canvas-controls { + gap: 0px; + backdrop-filter: blur(5px) saturate(120%) !important; + border-left: 1px solid; + border-right: 1px solid; + border-image-slice: 1; + background-color: var(--background-settings); + border-image-source: linear-gradient(to top, transparent, var(--text-accent), transparent); + border-radius: 5px; +} +/*Sets color for right control items*/ +.canvas-control-item { + border-bottom: none; + border-radius: 3px; + background-color: transparent; + color: var(--text-faint); +} +/*Sets color for right control items hover*/ +.canvas-control-item:hover { + background-color: var(--background-modifier-hover); + color: var(--text-accent); +} +/*Sets color for right control items active*/ +.canvas-control-item:active { + background-color: var(--color-accent-active); +} +/*Hides disabled items until they can be used*/ +.canvas-control-item.is-disabled { + display: none; +} +/*Removes Group Default Style*/ +.canvas-control-group { + border: none; + background: transparent; + box-shadow: none; + border-radius: 0px; +} +/*----------------- Canvas Menu Card ----------------------*/ +/*Card Menu styling*/ +.canvas-card-menu, .theme-dark .canvas-card-menu { + box-shadow: none; + backdrop-filter: blur(5px) saturate(120%) !important; + border-image-slice: 1; + border-image-source: linear-gradient(to right, transparent, var(--text-accent), transparent); + border-bottom: 1px solid; + border-top: 1px solid; + background-color: var(--background-settings); +} +/*Resize Card Menu*/ +.canvas-card-menu .canvas-card-menu-button { + color: var(--text-faint); + margin: 2px; + padding: var(--size-2-2); + border-radius: 3px; +} +/*Removes unnecessary Bounce Animation*/ +.canvas-card-menu .canvas-card-menu-button.mod-draggable:hover svg { + transform: none; + filter: none; +} +/*Card Menu styling hover*/ +.canvas-card-menu .canvas-card-menu-button:hover, .canvas-card-menu .canvas-card-menu-button.mod-draggable:active { + color: var(--text-accent); + background-color: var(--background-modifier-hover); +} +/*Removes default Fill Coloring*/ +.theme-dark .canvas-card-menu .canvas-card-menu-button svg, .canvas-card-menu .canvas-card-menu-button svg { + fill: transparent; +} +/*--------------- Internal Canvas ----------------------*/ +/*Right Click Menu Stlying*/ +.canvas-menu { + background-color: var(--background-settings-alt); + backdrop-filter: blur(4px) saturate(120%) !important; + border: 0px solid var(--background-modifier-border); + border-image-slice: 1; + border-image-source: linear-gradient(to right, transparent, var(--text-accent), transparent); + border-bottom: 1px solid; + border-top: 1px solid; +} +/*Canvas Container Styled*/ +.canvas-node.is-themed .canvas-node-container, .canvas-node-group .canvas-node-container, .canvas-node.is-selected .canvas-node-container { + border-color: var(--text-normal); + box-shadow: 0 0 10px 5px rgba(var(--canvas-color), 0.7), inset 0 0 20px 5px rgba(var(--canvas-color), 0.7), var(--shadow-stationary); +} +/*Canvas Container Styled selected*/ +.canvas-node.is-selected.is-themed .canvas-node-container, .canvas-node.is-focused.is-themed .canvas-node-container, +.canvas-node.is-focused .canvas-node-container { + box-shadow: 0 0 10px 5px rgba(var(--canvas-color), 0.9), inset 0 0 30px 10px rgba(var(--canvas-color), 0.7), var(--shadow-stationary); +} +/*Styles Group Label*/ +.canvas-wrapper:not(.mod-readonly) .canvas-group-label, .canvas-node-group.is-themed .canvas-group-label:not([contenteditable="true"]) { + background: rgba(var(--canvas-color), 0.6); + border-image-slice: 1; + border-image-source: linear-gradient(to right, transparent, rgba(var(--canvas-color)), transparent); + border-bottom: 2px solid; + border-top: 2px solid; + margin-top: -10px; +} +/*Styles Node Labels*/ +.canvas-node-label { + color: var(--text-accent); + padding: 5px; + background: rgba(var(--canvas-color), 0.6); + border-image-slice: 1; + border-image-source: linear-gradient(to right, transparent, rgba(var(--canvas-color)), transparent); + border-bottom: 2px solid; + border-top: 2px solid; + margin-top: -5px; + border-radius: 3px; + cursor: pointer; +} +/*=============== File Explorer Icon for files/folders ========================*/ +/*Removes Collapse Chevron in Nav File Tree Only*/ +.tree-item.nav-folder .tree-item-icon.collapse-icon.nav-folder-collapse-indicator{ + display: none; +} +/*Shifts Content to the left*/ +.nav-file-title-content, .nav-folder-title-content { + margin-left: -20px; +} +/*Opened Folder svg not Collapsed and sets style for folder icons*/ +.workspace-leaf-content[data-type="file-explorer"] .nav-folder-title-content::before { + margin-right: 4px; + position: relative; + content: " "; + display: inline-block; + width: 20px; + height: 20px; + vertical-align: -5px; + background-color: var(--custom-acc-faint); + -webkit-mask-image: url('data:image/svg+xml,%3Csvg xmlns="http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg" width="1em" height="1em" viewBox="0 0 16 16"%3E%3Cpath fill="currentColor" d="M3 3a2 2 0 0 0-2 2v6c0 .413.125.797.34 1.116L2.81 7.08A1.5 1.5 0 0 1 4.25 6h8.753v-.004a2 2 0 0 0-2-2H6.175l-1.11-.887A.5.5 0 0 0 4.753 3H3Zm11.941 4.64a.5.5 0 0 0-.48-.64H4.25a.5.5 0 0 0-.48.36l-1.46 5a.5.5 0 0 0 .48.64h9.46a1.5 1.5 0 0 0 1.44-1.08l1.251-4.28Z"%2F%3E%3C%2Fsvg%3E'); + -webkit-mask-repeat: no-repeat; + -webkit-mask-size: 100%; +} +/*Closed Folder svg Colapsed */ +.workspace-leaf-content[data-type="file-explorer"] .is-collapsed .nav-folder-title-content::before { + -webkit-mask-image: url('data:image/svg+xml,%3Csvg xmlns="http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg" width="1em" height="1em" viewBox="0 0 28 28"%3E%3Cpath fill="currentColor" d="M15.821 6.5h7.929a2.25 2.25 0 0 1 2.229 1.938l.016.158l.005.154v13a2.25 2.25 0 0 1-2.096 2.245L23.75 24H4.25a2.25 2.25 0 0 1-2.245-2.096L2 21.75V10.499l8.207.001l.196-.009a2.25 2.25 0 0 0 1.088-.393l.156-.12L15.821 6.5ZM10.207 4c.46 0 .908.141 1.284.402l.156.12l2.103 1.751l-3.063 2.553l-.085.061a.75.75 0 0 1-.29.106L10.206 9L2 8.999V6.25a2.25 2.25 0 0 1 2.096-2.245L4.25 4h5.957Z"%2F%3E%3C%2Fsvg%3E'); +} +/* File svg and sets style for file icons*/ +.workspace-leaf-content[data-type="file-explorer"] .nav-file-title .nav-file-title-content::before { + margin-right: 4px; + position: relative; + content: " "; + display: inline-block; + width: 20px; + height: 20px; + vertical-align: -5px; + -webkit-mask-repeat: no-repeat; + background-color: var(--custom-acc-faint); + -webkit-mask-size: 100%; + -webkit-mask-image: url('data:image/svg+xml,%3Csvg xmlns="http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg" width="1em" height="1em" viewBox="0 0 16 16"%3E%3Cpath fill="currentColor" d="M8 4.5V1H4.5A1.5 1.5 0 0 0 3 2.5v11A1.5 1.5 0 0 0 4.5 15h7a1.5 1.5 0 0 0 1.5-1.5V6H9.5A1.5 1.5 0 0 1 8 4.5Zm1 0V1.25L12.75 5H9.5a.5.5 0 0 1-.5-.5ZM5.5 8h5a.5.5 0 0 1 0 1h-5a.5.5 0 0 1 0-1ZM5 10.5a.5.5 0 0 1 .5-.5h5a.5.5 0 0 1 0 1h-5a.5.5 0 0 1-.5-.5Zm.5 1.5h5a.5.5 0 0 1 0 1h-5a.5.5 0 0 1 0-1Z"%2F%3E%3C%2Fsvg%3E'); +} +.workspace-leaf-content[data-type="file-explorer"] .nav-file-title:hover .nav-file-title-content::before, +.workspace-leaf-content[data-type="file-explorer"] .nav-folder-title:hover .nav-folder-title-content::before { + background-color: var(--custom-acc-text); +} +/*Vault svg*/ +.workspace-leaf-content[data-type="file-explorer"] .nav-folder.mod-root>.nav-folder-title .nav-folder-title-content::before { + -webkit-mask-image: url('data:image/svg+xml,%3Csvg xmlns="http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg" width="1em" height="1em" viewBox="0 0 24 24"%3E%3Cpath fill="currentColor" d="M14 13.5a1.5 1.5 0 1 0 0-3a1.5 1.5 0 0 0 0 3ZM2 7.75A3.75 3.75 0 0 1 5.75 4h12.5A3.75 3.75 0 0 1 22 7.75v8.5A3.75 3.75 0 0 1 18.25 20H5.75A3.75 3.75 0 0 1 2 16.25v-8.5ZM5.75 7a.75.75 0 0 0-.75.75v8.5a.75.75 0 0 0 1.5 0v-8.5A.75.75 0 0 0 5.75 7Zm5.53 1.22a.75.75 0 1 0-1.06 1.06l1.195 1.196A2.985 2.985 0 0 0 11 12c0 .556.151 1.077.415 1.524L10.22 14.72a.75.75 0 1 0 1.06 1.06l1.196-1.195c.447.264.968.415 1.524.415s1.077-.151 1.524-.415l1.196 1.195a.75.75 0 1 0 1.06-1.06l-1.195-1.196c.264-.447.415-.968.415-1.524s-.151-1.077-.415-1.524L17.78 9.28a.75.75 0 0 0-1.06-1.06l-1.196 1.195A2.986 2.986 0 0 0 14 9c-.556 0-1.077.151-1.524.415L11.28 8.22Z"%2F%3E%3C%2Fsvg%3E'); + background-color: var(--custom-acc-text); +} +/*Applies Pen svg for active file*/ +.workspace-leaf-content[data-type="file-explorer"] .nav-file-title.is-active .nav-file-title-content::before { + -webkit-mask-image: url('data:image/svg+xml,%3Csvg xmlns="http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg" width="1em" height="1em" viewBox="0 0 16 16"%3E%3Cpath fill="currentColor" d="M10.733 2.56a1.914 1.914 0 0 1 2.707 2.708L12.707 6l.263.263a1.75 1.75 0 0 1 0 2.474l-1.116 1.117a.5.5 0 0 1-.708-.708l1.117-1.116a.75.75 0 0 0 0-1.06L12 6.707l-5.955 5.955a1.65 1.65 0 0 1-.644.398l-2.743.914a.5.5 0 0 1-.632-.632l.914-2.743a1.65 1.65 0 0 1 .398-.644l7.395-7.395Z"%2F%3E%3C%2Fsvg%3E'); + background-color: var(--custom-acc-text); +} +/*Styles when item has focus*/ +.workspace-leaf.mod-active .tree-item-self.has-focus{ + box-shadow: 0 0 4px 2px var(--text-accent); +} +.workspace-leaf-content[data-type="file-explorer"] .is-unsupported>.nav-file-title-content::before { + -webkit-mask-image: url('data:image/svg+xml,%3Csvg xmlns="http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg" width="1em" height="1em" viewBox="0 0 16 16"%3E%3Cpath fill="currentColor" d="M6 1.002h3v3.5a1.5 1.5 0 0 0 1.5 1.5H14v6.996a2 2 0 0 1-2 2H8.666A5.5 5.5 0 0 0 4 5.207V3.002a2 2 0 0 1 2-2Zm4.5 4h3.497l-3.989-4H10v3.5a.5.5 0 0 0 .5.5ZM10 10.5a4.5 4.5 0 1 1-9 0a4.5 4.5 0 0 1 9 0Zm-4.5 1.88a.625.625 0 1 0 0 1.25a.625.625 0 0 0 0-1.25Zm0-4.877c-1.048 0-1.864.818-1.853 1.955a.5.5 0 0 0 1-.01c-.006-.579.36-.945.853-.945c.472 0 .853.392.853.95c0 .202-.07.315-.36.544l-.277.215C5.21 10.616 5 10.929 5 11.5a.5.5 0 0 0 .992.09l.011-.156c.017-.148.1-.254.346-.448l.277-.215c.513-.41.727-.732.727-1.318c0-1.104-.822-1.95-1.853-1.95Z"%2F%3E%3C%2Fsvg%3E'); +} +/*Sets Archive svg for zipped files*/ +.workspace-leaf-content[data-type="file-explorer"] .is-unsupported[data-path$=".zip"]>.nav-file-title-content::before, +.workspace-leaf-content[data-type="file-explorer"] .is-unsupported[data-path$=".7z"]>.nav-file-title-content::before, +.workspace-leaf-content[data-type="file-explorer"] .is-unsupported[data-path$=".rar"]>.nav-file-title-content::before, +.workspace-leaf-content[data-type="file-explorer"] .is-unsupported[data-path$=".zipx"]>.nav-file-title-content::before, +.workspace-leaf-content[data-type="file-explorer"] .is-unsupported[data-path$=".arc"]>.nav-file-title-content::before, +.workspace-leaf-content[data-type="file-explorer"] .is-unsupported[data-path$=".pea"]>.nav-file-title-content::before, +.workspace-leaf-content[data-type="file-explorer"] .is-unsupported[data-path$=".gzip"]>.nav-file-title-content::before, +.workspace-leaf-content[data-type="file-explorer"] .is-unsupported[data-path$=".b1"]>.nav-file-title-content::before { + -webkit-mask-image: url('data:image/svg+xml,%3Csvg xmlns="http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg" width="1em" height="1em" viewBox="0 0 20 20"%3E%3Cpath fill="currentColor" d="M12.005 4.5h-1.44L8.158 7.033l-.111.106a1.5 1.5 0 0 1-.823.353L7.07 7.5H2v7l.005.164A2.5 2.5 0 0 0 4.5 17h8.504v-1.941a.515.515 0 0 1 0-.117L13.002 14h-.498a.5.5 0 0 1 0-1h.497v-2H12.5a.5.5 0 0 1 0-1h.5V9h-.495a.5.5 0 0 1-.5-.5v-4Zm2 0h-1V8h1V4.5Zm1 0h.495a2.5 2.5 0 0 1 2.479 2.174l.016.162L18 7v7.5a2.5 2.5 0 0 1-2.336 2.495L15.5 17h-1.496v-1.5h.496a.5.5 0 0 0 0-1h-.497v-.955a.478.478 0 0 0 0-.09V12.5h.502a.5.5 0 1 0 0-1h-.503L14 9h.505a.5.5 0 0 0 .5-.5v-4ZM7.932 3.21A1.5 1.5 0 0 0 7.167 3H4.5l-.164.005A2.5 2.5 0 0 0 2 5.5v1h5.07l.082-.007a.5.5 0 0 0 .22-.094l.061-.055L9.385 4.29L8.067 3.3l-.135-.09Z"%2F%3E%3C%2Fsvg%3E'); +} +/*Video svg for supported video files*/ +.workspace-leaf-content[data-type="file-explorer"] .nav-file-title[data-path$=".webm"]>.nav-file-title-content::before, +.workspace-leaf-content[data-type="file-explorer"] .nav-file-title[data-path$=".mp4"]>.nav-file-title-content::before, +.workspace-leaf-content[data-type="file-explorer"] .nav-file-title[data-path$=".mkv"]>.nav-file-title-content::before, +.workspace-leaf-content[data-type="file-explorer"] .nav-file-title[data-path$=".mov"]>.nav-file-title-content::before, +.workspace-leaf-content[data-type="file-explorer"] .nav-file-title[data-path$=".m4a"]>.nav-file-title-content::before { + -webkit-mask-image: url('data:image/svg+xml,%3Csvg xmlns="http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg" width="1em" height="1em" viewBox="0 0 16 16"%3E%3Cpath fill="currentColor" d="M2 5.5A2.5 2.5 0 0 1 4.5 3h7A2.5 2.5 0 0 1 14 5.5v5a2.5 2.5 0 0 1-2.5 2.5h-7A2.5 2.5 0 0 1 2 10.5v-5Zm4.5.32v4.36c0 .25.274.403.487.273l3.259-1.992a.54.54 0 0 0 0-.922l-3.26-1.991a.32.32 0 0 0-.486.273Z"%2F%3E%3C%2Fsvg%3E'); +} +/*Audio svg for supported audio files*/ +.workspace-leaf-content[data-type="file-explorer"] .nav-file-title[data-path$=".3gp"]>.nav-file-title-content::before, +.workspace-leaf-content[data-type="file-explorer"] .nav-file-title[data-path$=".flac"]>.nav-file-title-content::before, +.workspace-leaf-content[data-type="file-explorer"] .nav-file-title[data-path$=".mp3"]>.nav-file-title-content::before, +.workspace-leaf-content[data-type="file-explorer"] .nav-file-title[data-path$=".ogg"]>.nav-file-title-content::before, +.workspace-leaf-content[data-type="file-explorer"] .nav-file-title[data-path$=".wav"]>.nav-file-title-content::before { + -webkit-mask-image: url('data:image/svg+xml,%3Csvg xmlns="http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg" width="1em" height="1em" viewBox="0 0 20 20"%3E%3Cpath fill="currentColor" d="M15.987 3.016a1 1 0 0 0-1.285-.79l-7 2.187A1 1 0 0 0 7 5.368V13.5a2.5 2.5 0 1 0 1 2V8.368l7-2.188v2.843c.343.03.678.093 1 .184V3.18c0-.056-.005-.11-.013-.164ZM19 14.5a4.5 4.5 0 1 1-9 0a4.5 4.5 0 0 1 9 0Zm-2.263-.435l-2.994-1.65a.5.5 0 0 0-.742.437v3.3a.5.5 0 0 0 .742.438l2.994-1.65a.5.5 0 0 0 0-.875Z"%2F%3E%3C%2Fsvg%3E') +} +/*Picture svg for supported Picture files*/ +.workspace-leaf-content[data-type="file-explorer"] .nav-file-title[data-path$=".svg"]>.nav-file-title-content::before, +.workspace-leaf-content[data-type="file-explorer"] .nav-file-title[data-path$=".bmp"]>.nav-file-title-content::before, +.workspace-leaf-content[data-type="file-explorer"] .nav-file-title[data-path$=".jpeg"]>.nav-file-title-content::before, +.workspace-leaf-content[data-type="file-explorer"] .nav-file-title[data-path$=".jpg"]>.nav-file-title-content::before, +.workspace-leaf-content[data-type="file-explorer"] .nav-file-title[data-path$=".png"]>.nav-file-title-content::before, +.workspace-leaf-content[data-type="file-explorer"] .nav-file-title[data-path$=".gif"]>.nav-file-title-content::before { + -webkit-mask-image: url('data:image/svg+xml,%3Csvg xmlns="http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg" width="1em" height="1em" viewBox="0 0 16 16"%3E%3Cpath fill="currentColor" d="M4.5 2A2.5 2.5 0 0 0 2 4.5v7c0 .51.152.983.414 1.379l4.384-4.384a1.7 1.7 0 0 1 2.404 0l4.384 4.384A2.49 2.49 0 0 0 14 11.5v-7A2.5 2.5 0 0 0 11.5 2h-7Zm7 3.502a1.002 1.002 0 1 1-2.004 0a1.002 1.002 0 0 1 2.004 0Zm1.379 8.084L8.495 9.202a.7.7 0 0 0-.99 0l-4.384 4.384c.396.262.87.414 1.379.414h7c.51 0 .983-.152 1.379-.414Z"%2F%3E%3C%2Fsvg%3E'); +} +/*PDF svg*/ +.workspace-leaf-content[data-type="file-explorer"] .nav-file-title[data-path$=".pdf"]>.nav-file-title-content::before { + -webkit-mask-image: url('data:image/svg+xml,%3Csvg xmlns="http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg" width="1em" height="1em" viewBox="0 0 32 32"%3E%3Cpath fill="currentColor" d="M9 16a1 1 0 0 0-1 1v5a1 1 0 1 0 2 0v-1h.5a2.5 2.5 0 0 0 0-5H9Zm1.5 3H10v-1h.5a.5.5 0 0 1 0 1Zm3.5-2a1 1 0 0 1 1-1h.5a3.5 3.5 0 1 1 0 7H15a1 1 0 0 1-1-1v-5Zm2 3.915a1.5 1.5 0 0 0 0-2.83v2.83ZM20 22v-5a1 1 0 0 1 1-1h3a1 1 0 1 1 0 2h-2v1h2a1 1 0 1 1 0 2h-2v1a1 1 0 1 1-2 0ZM17 9V2H8a3 3 0 0 0-3 3v8a2 2 0 0 0-2 2v9a2 2 0 0 0 2 2v1a3 3 0 0 0 3 3h16a3 3 0 0 0 3-3v-1a2 2 0 0 0 2-2v-9a2 2 0 0 0-2-2v-1h-7a3 3 0 0 1-3-3Zm10 6v9H5v-9h22Zm-8-6V2.117a3 3 0 0 1 1.293.762l5.828 5.828A3 3 0 0 1 26.883 10H20a1 1 0 0 1-1-1Z"%2F%3E%3C%2Fsvg%3E'); +} +/*HTML svg*/ +.workspace-leaf-content[data-type="file-explorer"] .nav-file-title[data-path$=".html"]>.nav-file-title-content::before { + -webkit-mask-image: url('data:image/svg+xml,%3Csvg xmlns="http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg" width="24" height="24" viewBox="0 0 24 24"%3E%3Cpath fill="currentColor" d="M9 7a1 1 0 0 1 .117 1.993L9 9H7a3 3 0 0 0-.176 5.995L7 15h2a1 1 0 0 1 .117 1.993L9 17H7a5 5 0 0 1-.217-9.995L7 7h2Zm8 0a5 5 0 0 1 .217 9.995L17 17h-2a1 1 0 0 1-.117-1.993L15 15h2a3 3 0 0 0 .176-5.995L17 9h-2a1 1 0 0 1-.117-1.993L15 7h2ZM7 11h10a1 1 0 0 1 .117 1.993L17 13H7a1 1 0 0 1-.117-1.993L7 11h10H7Z"%2F%3E%3C%2Fsvg%3E'); +} +/*Draw svg for Excalidraw*/ +.workspace-leaf-content[data-type="file-explorer"] .nav-file-title[data-path$=".excalidraw.md"]>.nav-file-title-content::before { + -webkit-mask-image: url('data:image/svg+xml,%3Csvg xmlns="http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg" width="1em" height="1em" viewBox="0 0 20 20"%3E%3Cpath fill="currentColor" d="M3 6a3 3 0 0 1 3-3h8a3 3 0 0 1 3 3v3.003c-.341.016-.68.092-1 .229V6a2 2 0 0 0-2-2H6a2 2 0 0 0-2 2v9.5a.5.5 0 0 1-1 0V6Zm.4 11.035c.369.184.83.335 1.217.25c.251-.056.577-.193.943-.347c.885-.373 2.003-.843 2.862-.497c.637.256.584.981.405 1.33c-.035.066-.008.16.065.177a4.6 4.6 0 0 0 1.112.088a.917.917 0 0 1 .023-.14l.375-1.498a2.18 2.18 0 0 1 .578-1.02l4.83-4.83a1.87 1.87 0 1 1 2.644 2.645l-4.83 4.829a2.197 2.197 0 0 1-1.02.578l-1.222.305c-1.121.328-2.794.222-3.313-.183c-.449-.35-.467-.887-.316-1.244c.034-.08-.026-.183-.111-.17c-.495.07-.9.25-1.3.427c-.585.26-1.156.513-1.976.411c-.711-.088-1.107-.459-1.325-.825c-.122-.204.147-.392.36-.286Z"%2F%3E%3C%2Fsvg%3E'); +} +/*Canvas svg*/ +.workspace-leaf-content[data-type="file-explorer"] .nav-file-title[data-path$=".canvas"]>.nav-file-title-content::before { + -webkit-mask-image: url('data:image/svg+xml,%3Csvg xmlns="http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg" width="1em" height="1em" viewBox="0 0 16 16"%3E%3Cpath fill="currentColor" d="M7.5 2v3H2v-.5A2.5 2.5 0 0 1 4.5 2h3Zm1 0v8H14V4.5A2.5 2.5 0 0 0 11.5 2h-3Zm5.5 9H8.5v3h3a2.5 2.5 0 0 0 2.5-2.5V11Zm-6.5 3V6H2v5.5A2.5 2.5 0 0 0 4.5 14h3Z"%2F%3E%3C%2Fsvg%3E'); +} +/*CSS svg*/ +.workspace-leaf-content[data-type="file-explorer"] .nav-file-title[data-path$=".css"]>.nav-file-title-content::before { + -webkit-mask-image: url('data:image/svg+xml,%3Csvg xmlns="http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg" width="1em" height="1em" viewBox="0 0 20 20"%3E%3Cpath fill="currentColor" d="M10 6.5V2H5.5A1.5 1.5 0 0 0 4 3.5v7.67c.552.196 1.03.548 1.38 1.004A2.498 2.498 0 0 1 9.5 12a2.5 2.5 0 0 1 4.5 1.5c0 .444-.193.843-.5 1.118c.319.425.5.949.5 1.5v.382a2.49 2.49 0 0 1-.5 1.5h1a1.5 1.5 0 0 0 1.5-1.5V8h-4.5A1.5 1.5 0 0 1 10 6.5Zm1 0V2.25L15.75 7H11.5a.5.5 0 0 1-.5-.5ZM3 12a2 2 0 0 0-2 2v2a2 2 0 1 0 4 0a.5.5 0 0 0-1 0a1 1 0 1 1-2 0v-2a1 1 0 1 1 2 0a.5.5 0 0 0 1 0a2 2 0 0 0-2-2Zm8.5 0a1.5 1.5 0 0 0-1.5 1.5v.382a1.5 1.5 0 0 0 .83 1.342l.894.447a.5.5 0 0 1 .276.447v.382a.5.5 0 0 1-1 0a.5.5 0 0 0-1 0a1.5 1.5 0 0 0 3 0v-.382a1.5 1.5 0 0 0-.83-1.342l-.894-.447a.5.5 0 0 1-.276-.447V13.5a.5.5 0 0 1 1 0a.5.5 0 0 0 1 0a1.5 1.5 0 0 0-1.5-1.5ZM6 13.5a1.5 1.5 0 0 1 3 0a.5.5 0 0 1-1 0a.5.5 0 0 0-1 0v.382a.5.5 0 0 0 .276.447l.895.447A1.5 1.5 0 0 1 9 16.118v.382a1.5 1.5 0 0 1-3 0a.5.5 0 0 1 1 0a.5.5 0 0 0 1 0v-.382a.5.5 0 0 0-.276-.447l-.895-.447A1.5 1.5 0 0 1 6 13.882V13.5Z"%2F%3E%3C%2Fsvg%3E'); +} +/*Text File svg*/ +.workspace-leaf-content[data-type="file-explorer"] .nav-file-title[data-path$=".txt"]>.nav-file-title-content::before { + -webkit-mask-image: url('data:image/svg+xml,%3Csvg xmlns="http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg" width="1em" height="1em" viewBox="0 0 28 28"%3E%3Cpath fill="currentColor" d="M14 2a.75.75 0 0 1 .75.75V4h3.75V2.75a.75.75 0 0 1 1.5 0V4h.75A2.25 2.25 0 0 1 23 6.25v12.246h-4.754a2.25 2.25 0 0 0-2.25 2.25V25.5H6.75a2.25 2.25 0 0 1-2.25-2.25v-17A2.25 2.25 0 0 1 6.75 4H8V2.75a.75.75 0 0 1 1.5 0V4h3.75V2.75A.75.75 0 0 1 14 2Zm-6 8.25c0 .414.336.75.75.75h10a.75.75 0 0 0 0-1.5h-10a.75.75 0 0 0-.75.75Zm0 4.5c0 .414.336.75.75.75h10a.75.75 0 0 0 0-1.5h-10a.75.75 0 0 0-.75.75Zm0 4.5c0 .414.336.75.75.75h4.5a.75.75 0 0 0 0-1.5h-4.5a.75.75 0 0 0-.75.75Zm9.496 5.81l5.065-5.064h-4.315a.75.75 0 0 0-.75.75v4.315Z"%2F%3E%3C%2Fsvg%3E'); +} +/*Document svg*/ +.workspace-leaf-content[data-type="file-explorer"] .nav-file-title[data-path$=".docx"]>.nav-file-title-content::before, +.workspace-leaf-content[data-type="file-explorer"] .nav-file-title[data-path$=".doc"]>.nav-file-title-content::before, +.workspace-leaf-content[data-type="file-explorer"] .nav-file-title[data-path$=".odt"]>.nav-file-title-content::before, +.workspace-leaf-content[data-type="file-explorer"] .nav-file-title[data-path$=".wps"]>.nav-file-title-content::before, +.workspace-leaf-content[data-type="file-explorer"] .nav-file-title[data-path$=".wpd"]>.nav-file-title-content::before { + -webkit-mask-image: url('data:image/svg+xml,%3Csvg xmlns="http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg" width="1em" height="1em" viewBox="0 0 24 24"%3E%3Cpath fill="currentColor" d="M21.17 3.25q.33 0 .59.25q.24.24.24.58v15.84q0 .34-.24.58q-.26.25-.59.25H7.83q-.33 0-.59-.25q-.24-.24-.24-.58V17H2.83q-.33 0-.59-.24Q2 16.5 2 16.17V7.83q0-.33.24-.59Q2.5 7 2.83 7H7V4.08q0-.34.24-.58q.26-.25.59-.25m-.8 8.09l1.2 3.94H9.6l1.31-6.56H9.53l-.78 3.88l-1.11-3.75H6.5l-1.19 3.77l-.78-3.9H3.09l1.31 6.56h1.37m14.98 4.22V17H8.25v2.5m12.5-3.75v-3.12H12v3.12m8.75-4.37V8.25H12v3.13M20.75 7V4.5H8.25V7Z"%2F%3E%3C%2Fsvg%3E'); +} +/*Presentation svg*/ +.workspace-leaf-content[data-type="file-explorer"] .nav-file-title[data-path$=".key"]>.nav-file-title-content::before, +.workspace-leaf-content[data-type="file-explorer"] .nav-file-title[data-path$=".pptx"]>.nav-file-title-content::before, +.workspace-leaf-content[data-type="file-explorer"] .nav-file-title[data-path$=".ppt"]>.nav-file-title-content::before, +.workspace-leaf-content[data-type="file-explorer"] .nav-file-title[data-path$=".odp"]>.nav-file-title-content::before, +.workspace-leaf-content[data-type="file-explorer"] .nav-file-title[data-path$=".dps"]>.nav-file-title-content::before { + -webkit-mask-image: url('data:image/svg+xml,%3Csvg xmlns="http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg" width="1em" height="1em" viewBox="0 0 24 24"%3E%3Cpath fill="currentColor" d="M13.25 3.25q1.21 0 2.33.31q1.12.32 2.09.89q.97.55 1.77 1.36q.79.8 1.36 1.77q.58.97.89 2.09Q22 10.79 22 12t-.31 2.33q-.31 1.12-.89 2.09q-.57.97-1.36 1.77q-.8.81-1.77 1.36q-.97.58-2.09.89q-1.12.31-2.33.31q-1.07 0-2.1-.25q-1.03-.26-1.95-.74q-.92-.49-1.7-1.18q-.81-.7-1.43-1.58H2.83q-.33 0-.59-.24Q2 16.5 2 16.17V7.83q0-.33.24-.58Q2.5 7 2.83 7h3.24q.62-.88 1.43-1.58q.78-.7 1.7-1.18q.93-.48 1.95-.74q1.03-.25 2.1-.25m.63 1.28v6.84h6.84q-.12-1.37-.69-2.56T18.55 6.7q-.91-.91-2.12-1.48q-1.2-.57-2.55-.69M9.5 10.84q0-.57-.2-.97q-.19-.41-.52-.66q-.33-.26-.78-.37q-.45-.12-1-.12H4.37v6.55h1.54V13h1.03q.48 0 .93-.16q.46-.14.82-.41q.36-.26.58-.67q.23-.4.23-.92m3.75 8.66q.98 0 1.89-.24q.9-.26 1.71-.68q.81-.45 1.48-1.08q.67-.61 1.17-1.37q.5-.77.83-1.66q.31-.89.39-1.85h-8.08V4.53q-1.45.12-2.73.76T7.67 7h3.5q.33 0 .59.25q.24.25.24.58v8.34q0 .33-.24.59q-.26.24-.59.24h-3.5q.53.6 1.17 1.06q.66.44 1.35.78q.72.33 1.49.49q.77.17 1.57.17M6.85 10q.47 0 .76.19q.28.19.28.7q0 .22-.1.36q-.1.14-.26.25q-.16.07-.35.1q-.18.04-.38.04h-.89V10h.94Z"%2F%3E%3C%2Fsvg%3E'); +} +/*Spreadsheet svg*/ +.workspace-leaf-content[data-type="file-explorer"] .nav-file-title[data-path$=".xlsx"]>.nav-file-title-content::before, +.workspace-leaf-content[data-type="file-explorer"] .nav-file-title[data-path$=".xls"]>.nav-file-title-content::before, +.workspace-leaf-content[data-type="file-explorer"] .nav-file-title[data-path$=".et"]>.nav-file-title-content::before, +.workspace-leaf-content[data-type="file-explorer"] .nav-file-title[data-path$=".ods"]>.nav-file-title-content::before, +.workspace-leaf-content[data-type="file-explorer"] .nav-file-title[data-path$=".csv"]>.nav-file-title-content::before, +.workspace-leaf-content[data-type="file-explorer"] .nav-file-title[data-path$=".xml"]>.nav-file-title-content::before { + -webkit-mask-image: url('data:image/svg+xml,%3Csvg xmlns="http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg" width="1em" height="1em" viewBox="0 0 24 24"%3E%3Cpath fill="currentColor" d="M21.17 3.25q.33 0 .59.25q.24.24.24.58v15.84q0 .34-.24.58q-.26.25-.59.25H7.83q-.33 0-.59-.25q-.24-.24-.24-.58V17H2.83q-.33 0-.59-.24Q2 16.5 2 16.17V7.83q0-.33.24-.59Q2.5 7 2.83 7H7V4.08q0-.34.24-.58q.26-.25.59-.25M7 13.06l1.18 2.22h1.79L8 12.06l1.93-3.17H8.22L7.13 10.9l-.04.06l-.03.07q-.26-.53-.56-1.07q-.25-.53-.53-1.07H4.16l1.89 3.19L4 15.28h1.78m8.1 4.22V17H8.25v2.5m5.63-3.75v-3.12H12v3.12m1.88-4.37V8.25H12v3.13M13.88 7V4.5H8.25V7m12.5 12.5V17h-5.62v2.5m5.62-3.75v-3.12h-5.62v3.12m5.62-4.37V8.25h-5.62v3.13M20.75 7V4.5h-5.62V7Z"%2F%3E%3C%2Fsvg%3E'); +} +/*================= Kanban Update ============*/ +/*Removes Unneccessary background*/ +.workspace-split:not(.mod-left-split) .node-insert-event{ + background-color: transparent; +} +/*Sets the style for lists and spacing for hover list style*/ +.kanban-plugin__item { + border: transparent; + background: var(--background-settings-2); + color: var(--text-faint); + border-top: 1px solid transparent; + border-bottom: 1px solid transparent; + border-radius: 3px; +} +/*removes redundant default title wrapper styling*/ +.kanban-plugin__item-title-wrapper { + border: transparent; + background-color: transparent; +} +/*Styles internal Kanban Lane*/ +.kanban-plugin__lane-items { + border-top: 1px solid; + border-bottom: 1px solid; + border-image-slice: 1; + border-image-source: linear-gradient(to right, transparent, var(--text-accent), transparent); + background-color: var(--background-primary); + border-radius: 5px; +} +/*Styles List on hover/active*/ +.kanban-plugin__item:hover, .kanban-plugin__item:active { + background-color: var(--text-selection); + color: var(--text-accent); + border-top: 1px solid; + border-bottom: 1px solid; + border-image-slice: 1; + border-image-source: linear-gradient(to right, transparent, var(--text-accent), transparent); +} +.kanban-plugin__item:active { + color: var(--text-accent); + border-top: 1px solid; + border-bottom: 1px solid; + border-image-slice: 1; + border-image-source: linear-gradient(to right, transparent, var(--text-accent), transparent); + background-color: var(--color-accent-active); +} +/*Adds some padding and style for kanban textbox of lists*/ +.kanban-plugin__grow-wrap>textarea, .kanban-plugin__grow-wrap:after { + border-radius: 3px; + padding: 2px; + width: 98%; + border-bottom: 1px solid; + border-image-slice: 1; + border-image-source: linear-gradient(to right, transparent, var(--text-accent), transparent); +} +/*Style Kanban textbox when in focus*/ +.kanban-plugin__grow-wrap>textarea:focus { + border-bottom: 2px solid; + border-image-slice: 1; + border-image-source: linear-gradient(to right, transparent, var(--text-accent), transparent); +} +/*Styles Kanban Containers*/ +.kanban-plugin__lane { + border-left: 2px solid; + border-right: 2px solid; + border-image-slice: 1; + border-image-source: linear-gradient(to top, transparent, var(--text-accent), transparent); + background-color: var(--background-secondary); +} +/*Removes line seperator*/ +.kanban-plugin__lane-header-wrapper, .kanban-plugin__item-button-wrapper, .kanban-plugin__item-form { + border: none; +} +/*Removes Default Plugin Hue Change*/ +.kanban-plugin__item-prefix-button-wrapper input[type=checkbox] { + filter: hue-rotate(0deg); +} +/*Removes Item Content overcolor*/ +.kanban-plugin__item-content-wrapper { + background-color: transparent; +} +/*Styled to match with finder search*/ +.kanban-plugin__search-wrapper { + border-bottom: 2px solid; + border-image-slice: 1; + border-image-source: linear-gradient(to right, transparent, var(--text-accent), transparent); + justify-content: center; +} +/*Expand searchbox*/ +input.kanban-plugin__filter-input { + width: 50%; + margin-right: 5px; +} +/*Try to center icon*/ +.kanban-plugin__icon { + margin-top: 2px; +} +/*========== NEW PDF ==============*/ +/*Styles PDF Sidebar*/ +.pdf-sidebar-container { + border-right: 2px solid; + border-image-slice: 1; + border-image-source: linear-gradient(to top, transparent, var(--text-accent), transparent); + background-color: var(--background-tertiary); +} +.pdf-sidebar-container .thumbnail::before { + box-shadow: none; +} +/*Styles page thumbnail*/ +.pdf-sidebar-container .thumbnail { + border: none; + padding: var(--size-4-2); + border-bottom: 2px solid transparent; + border-top: 2px solid transparent; +} +/*Styles page thumbnail on Hover*/ +.pdf-sidebar-container .thumbnail.selected, .pdf-sidebar-container .thumbnail:hover { + background: var(--text-selection); + border-bottom: 2px solid; + border-top: 2px solid; + border-image-slice: 1; + border-image-source: linear-gradient(to right, transparent, var(--text-accent), transparent); +} +/*Styles page thumbnail page number flair*/ +.pdf-sidebar-container .thumbnail::after { + font-weight: var(--font-semibold); + background-color: var(--background-tertiary); + right: 115px; +} +/*Styles page thumbnail page number flair selected*/ +.pdf-sidebar-container .thumbnail.selected::after { + background-color: var(--text-selection); +} +/*Styles PDF Toolbar*/ +.pdf-toolbar { + background-color: var(--background-tertiary); + border-bottom: none; + border-bottom: 3px solid; + border-image-slice: 1; + border-image-source: linear-gradient(to right, transparent, var(--text-accent), transparent); +} +/*Removes redundant 2nd background on Container*/ +.workspace-leaf-content[data-type="pdf"] .view-content { + background-color: transparent; +} +/*Shifts slightly the PDF thumnails*/ +.pdf-sidebar-content-wrapper{ + width:160px + } +/*============== Links Styling ===============*/ +/*Colors Internal Link text*/ +.cm-s-obsidian span.cm-hmd-internal-link, a.internal-link { + color: var(--internal-link-hover); +} +/*Adds Hover Effect on Internal Links*/ +.cm-s-obsidian span.cm-hmd-internal-link:hover, .markdown-rendered .internal-link:hover { + color: var(--text-normal); + text-shadow: 0 0 5px var(--internal-link-hover), 0 0 10px var(--internal-link-hover), 0 0 20px var(--internal-link-hover), 0 0 35px var(--internal-link-hover); +} +/*Adds Hover Effect on External Links*/ +.cm-s-obsidian span.cm-link:hover, .external-link:hover { + color: var(--text-normal); + text-shadow: 0 0 5px var(--link-external-color), 0 0 10px var(--link-external-color), 0 0 20px var(--link-external-color), 0 0 35px var(--link-external-color); +} +/*================== Lists =======================*/ +/*Sets uncollapsed bullet point with animations*/ +li:not(.is-collapsed) .list-bullet:after, .cm-formatting-list .list-bullet:after { + content: '▻'; + color: var(--bulletlist-color); + font-weight: bold; + transform: translate(10.5px, 5px) rotate(90deg); + text-shadow: 0 0 5px var(--bulletlist-color), 0 0 10px var(--bulletlist-color), 0 0 20px var(--bulletlist-color), 0 0 35px var(--bulletlist-color); +} +/*Realigns Custom bullet point*/ +.list-bullet { + align-items: baseline; + margin-right: 10px; +} +/*Sets collapsed bullet point with animations*/ +li.is-collapsed .list-bullet:after, .is-collapsed~.cm-formatting-list .list-bullet:after { + content: '▻'; + color: var(--bulletlist-color); + font-weight: bold; + text-shadow: 0 0 5px var(--bulletlist-color), 0 0 10px var(--bulletlist-color), 0 0 20px var(--bulletlist-color), 0 0 35px var(--bulletlist-color); + background-color: transparent; + box-shadow: none; + transform: translate(0px, 0px) rotate(0deg); + margin-left: -0.4em; +} +/*Removes hover dot */ +.cm-fold-indicator:hover~.cm-formatting-list .list-bullet:after, .cm-fold-indicator:hover.is-collapsed~.cm-formatting-list .list-bullet:after { + background-color: transparent; + box-shadow: none; +} +/*----------------------* Number list ----------------------------*/ +/*Styles Default Number List*/ +ol>li::marker, ul>li::marker, .cm-s-obsidian .cm-formatting-list { + color: var(--text-normal); + font-weight: bold; + border-image-source: linear-gradient(to right, var(--bulletlist-color), transparent); + text-shadow: 0 0 5px var(--bulletlist-color), 0 0 10px var(--bulletlist-color), + 0 0 20px var(--bulletlist-color), 0 0 35px var(--bulletlist-color); +} +/*Adds style to the Identation guide */ +.markdown-rendered.show-indentation-guide li>ul::before, .markdown-rendered.show-indentation-guide li>ol::before, .markdown-source-view.mod-cm6 .cm-indent::before { + box-shadow: 0 0 5px var(--bulletlist-color), 0 0 10px var(--bulletlist-color), + 0 0 20px var(--bulletlist-color), 0 0 35px var(--bulletlist-color); + width: 0px; +} +/*Aligns Number List with identation guide*/ +.markdown-rendered ol { + margin-left: 3px; +} +/*Recheck Position*/ +/*================ General UI =======================*/ +/*Removes double background on Note Content*/ +.workspace-split.mod-root .view-content .node-insert-event { + background-color: transparent; +} +/*Changes App's background*/ +.workspace { + background-color: var(--background-secondary); +} +/*Sets style for active view header*/ +.workspace-leaf.mod-active .view-header { + border-top: 3px solid; + border-bottom: 2px solid; + border-image-slice: 1; + border-image-source: linear-gradient(to right, transparent, var(--text-accent), transparent); +} +/*Sets spacing for view header and colors*/ +.view-header { + margin: 0px; + background: var(--background-primary-alt); + border-top: 3px solid transparent; + border-bottom: 2px solid transparent; +} +/*Colors the fade in header title*/ +.view-header-title-container:not(.mod-at-end):after { + background: linear-gradient(to right, transparent, var(--transparent-primary-alt)); +} +/*Header bar background changed*/ +:is(.is-focused .workspace-leaf.mod-active .view-header, .view-header), .workspace-split.mod-right-split .workspace-tabs .nav-header, .workspace-split.mod-left-split .workspace-tabs .nav-header, .search-row, .search-results-info { + background: var(--background-tertiary); + backdrop-filter: blur(18px) saturate(120%); +} +:is(.is-focused .workspace-leaf.mod-active .view-header, .view-header), + .workspace-split.mod-right-split .workspace-tabs.mod-top .nav-header, + .workspace-split.mod-left-split .workspace-tabs.mod-top .nav-header, + .search-row, .search-results-info { +border-radius: 5px 5px 0 0; +} +/*Header Title Colored*/ +.is-focused .workspace-leaf.mod-active .view-header-title, .workspace-leaf.mod-active .view-header-title, .workspace-leaf.mod-active .view-header-icon { + color: var(--activetitle-highlight); +} +.view-header-title{ + color: var(--Inactive-title); +} +/*Breadcrumb File Path*/ +.view-header-title-parent .view-header-breadcrumb { + color: var(--text-faint); +} +/*Breadcrumb File Path on Hover*/ +.view-header-title-parent .view-header-breadcrumb:hover { + color: var(--text-accent); + background: var(--text-selection); +} +/*Breadcrumb File Path on Active*/ +.view-header-title-parent .view-header-breadcrumb:active { + color: var(--text-accent); + background: var(--color-accent-active); +} +/*Breadcrumb Active Page*/ +.workspace-leaf.mod-active .view-header-title, .workspace-leaf.mod-active .view-header-icon { + background: var(--title-background-active-clicked); + padding: 5px; + border-radius: var(--radius-s); + margin-left: 5px; + border-image-slice: 1; + border-right: 2px solid; + border-image-source: linear-gradient(to top, transparent, var(--activetitle-highlight), transparent); + border-left: 2px solid; +} +/*Breadcrumb Active Page on hover*/ +.workspace-leaf.mod-active .view-header-title:hover{ + background: var(--title-background-clicked); +} +/*Removes Redundant and unnecessary background coloring*/ +body:not(.is-fullscreen).is-hidden-frameless .mod-top .workspace-tab-header-container, body.is-focused .workspace-ribbon.mod-left, +body.is-focused .titlebar, body.is-focused .workspace-ribbon.mod-left, .workspace-tab-header-container, +body:not(.is-mobile) .workspace-split.mod-root, .workspace-tabs .workspace-leaf, .mod-root .workspace-tabs .workspace-leaf { +background: transparent; +} +/*Right Window Spacing*/ +body:not(.is-mobile) .workspace-split.mod-vertical>* { + margin-right: 5px; +} +/*Right of Left Sidepanel Window Spacing*/ +body:not(.is-mobile) .workspace-split.mod-left-split { + margin-right: 5px; +} +/*Main Pane View Content Style*/ +.workspace-leaf-content .view-content { + border-image-slice: 1; + border-image-source: linear-gradient(to right, transparent, var(--text-accent), transparent); + border-bottom: 3px solid; +} +/*======================= Style Setting's Workspace ===============================*/ +/*-------------------- Style Setting's Workspace: Background Color ------------------*/ +.CG-workspace-background { + --background-primary: rgba(var(--bg-primary), + var(--CG-workspace-background-workspace-slider, 0.45)); + --background-secondary: rgba(var(--bg-secondary), + var(--CG-workspace-background-workspace-slider, 0.45)); +} +/*--------------- Style Setting's Workspace: Background Images ------------------------*/ +/*Applies the theme's Community Background*/ +.CG-workspace-background .app-container { + --Obsidianbg: var(--bgimage); + --CGworkspace-background-image: var(--Obsidianbg); +} +/*Applies the custom image to the background*/ +.CG-workspace-background.CG-workspace-background-image-custom .app-container { + --CGworkspace-background-image: var(--CG-workspace-background-image-custom-option); +} +/*Applies the background colors as overlay for superior transparency to background image*/ +.CG-workspace-background .horizontal-main-container, .app-container { + background: var(--CGworkspace-background-image); + background-color: var(--background-primary); + background-blend-mode: overlay; + background-size: cover; +} + +/*Applies background image customizations*/ +body:not(.is-phone).CG-workspace-background .workspace, body:not(.is-phone).CG-workspace-background .status-bar { + background-color: var(--background-secondary); + backdrop-filter: brightness(var(--CG-workspace-background-brightness, 1.15)) blur(var(--CG-workspace-background-blur, 15px)) saturate(var(--CG-workspace-background-saturation, 2)) contrast(var(--CG-workspace-background-contrast, 100%)); +} +/*Removes sidebar coloring when custom image enabled*/ +.CG-workspace-background .workspace-ribbon.mod-left.is-collapsed { + background-color: transparent; +} +.workspace-split.mod-root .view-content, .workspace-leaf.mod-active .view-header{ + backdrop-filter: brightness(var(--CG-workspace-background-brightness, 1.15)) blur(var(--CG-workspace-background-blur, 15px)) saturate(var(--CG-workspace-background-saturation, 2)) contrast(var(--CG-workspace-background-contrast, 100%)); +} +/*=========== CheckBox =================*/ +.markdown-preview-view .task-list-item-checkbox { + border: 1px solid var(--text-accent); + box-shadow: 0 0 0.5em var(--text-accent); +} +.markdown-source-view.mod-cm6 .cm-indent::before { + border-right: var(--indentation-guide-width) solid var(--text-accent); + transform: translateX(0.24em); +} +/*------------------------- Style Settings: Custom Checkbox -------------------------------*/ +.CG-custom-checkbox .view-content .task-list-item-checkbox { + appearance: none; + scale: 1.22; +} +.CG-custom-checkbox input[type='checkbox']:checked:after { + background-color: black; +} +.CG-custom-checkbox .task-list-item-checkbox[data-task='x'], .CG-custom-checkbox li.task-list-item[data-task='x'] .task-list-item-checkbox { + background-color: green; + border: 1px solid green; + box-shadow: 0 0 5px green, 0 0 10px green, 0 0 15px green; +} +.CG-custom-checkbox .task-list-item-checkbox[data-task='x']:hover, .CG-custom-checkbox ul>li.task-list-item[data-task='x'] .task-list-item-checkbox:hover { + background-color: rgb(2, 169, 2); + border: 1px solid rgb(2, 169, 2); +} +.CG-custom-checkbox [data-task='x'] input[type='checkbox']:checked:after, .CG-custom-checkbox [data-task='x'][type='checkbox']:checked:after { + -webkit-mask-image: url('data:image/svg+xml,%3Csvg xmlns="http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg" width="1em" height="1em" viewBox="0 0 24 24"%3E%3Cpath fill="currentColor" d="m8.5 16.586l-3.793-3.793a1 1 0 0 0-1.414 1.414l4.5 4.5a1 1 0 0 0 1.414 0l11-11a1 1 0 0 0-1.414-1.414L8.5 16.586Z"%2F%3E%3C%2Fsvg%3E'); + -webkit-mask-size: 100%; +} +.CG-custom-checkbox .task-list-item-checkbox[data-task='?'], .CG-custom-checkbox ul>li.task-list-item[data-task='?'] .task-list-item-checkbox { + background-color: gold; + border: 1px solid gold; + box-shadow: 0 0 5px gold, 0 0 10px gold, 0 0 15px gold; +} +.CG-custom-checkbox .task-list-item-checkbox[data-task='?']:hover, .CG-custom-checkbox ul>li.task-list-item[data-task='?'] .task-list-item-checkbox:hover { + background-color: rgb(209, 178, 2); + border: 1px solid rgb(209, 178, 2); +} +.CG-custom-checkbox [data-task='?'] input[type='checkbox']:checked:after, .CG-custom-checkbox [data-task='?'][type='checkbox']:checked:after { + -webkit-mask-image: url('data:image/svg+xml,%3Csvg xmlns="http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg" width="1em" height="1em" viewBox="0 0 24 24"%3E%3Cpath fill="currentColor" d="M12 4a5 5 0 0 0-5 5a1 1 0 0 0 2 0c0-1.658 1.342-3 3-3s3 1.342 3 3c0 .816-.199 1.294-.438 1.629c-.262.365-.625.638-1.128.985l-.116.078c-.447.306-1.023.699-1.469 1.247c-.527.648-.849 1.467-.849 2.561v.5a1 1 0 1 0 2 0v-.5c0-.656.178-1.024.4-1.299c.257-.314.603-.552 1.114-.903l.053-.037c.496-.34 1.133-.786 1.62-1.468C16.7 11.081 17 10.183 17 9a5 5 0 0 0-5-5Zm0 17.25a1.25 1.25 0 1 0 0-2.5a1.25 1.25 0 0 0 0 2.5Z"%2F%3E%3C%2Fsvg%3E'); + -webkit-mask-size: 100%; +} +.CG-custom-checkbox .task-list-item-checkbox[data-task='-'], .CG-custom-checkbox ul>li.task-list-item[data-task='-'] .task-list-item-checkbox { + background-color: red; + border: 1px solid red; + box-shadow: 0 0 5px red, 0 0 10px red, 0 0 15px red; +} +.CG-custom-checkbox .task-list-item-checkbox[data-task='-']:hover, .CG-custom-checkbox ul>li.task-list-item[data-task='-'] .task-list-item-checkbox:hover { + background-color: rgb(215, 4, 4); + border: 1px solid rgb(215, 4, 4); +} +.CG-custom-checkbox [data-task='-'] input[type='checkbox']:checked:after, .CG-custom-checkbox [data-task='-'][type='checkbox']:checked:after { + -webkit-mask-image: url('data:image/svg+xml,%3Csvg xmlns="http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg" width="1em" height="1em" viewBox="0 0 16 16"%3E%3Cpath fill="currentColor" d="m2.397 2.554l.073-.084a.75.75 0 0 1 .976-.073l.084.073L8 6.939l4.47-4.47a.75.75 0 1 1 1.06 1.061L9.061 8l4.47 4.47a.75.75 0 0 1 .072.976l-.073.084a.75.75 0 0 1-.976.073l-.084-.073L8 9.061l-4.47 4.47a.75.75 0 0 1-1.06-1.061L6.939 8l-4.47-4.47a.75.75 0 0 1-.072-.976l.073-.084l-.073.084Z"%2F%3E%3C%2Fsvg%3E'); + -webkit-mask-size: 100%; +} +.CG-custom-checkbox .task-list-item-checkbox[data-task='!'], .CG-custom-checkbox ul>li.task-list-item[data-task='!'] .task-list-item-checkbox { + background-color: darkorange; + border: 1px solid darkorange; + box-shadow: 0 0 5px darkorange, 0 0 10px darkorange, 0 0 15px darkorange; +} +.CG-custom-checkbox .task-list-item-checkbox[data-task='!']:hover, .CG-custom-checkbox ul>li.task-list-item[data-task='!'] .task-list-item-checkbox:hover { + background-color: rgb(217, 119, 0); + border: 1px solid rgb(217, 119, 0); +} +.CG-custom-checkbox [data-task='!'] input[type='checkbox']:checked:after, .CG-custom-checkbox [data-task='!'][type='checkbox']:checked:after { + -webkit-mask-image: url('data:image/svg+xml,%3Csvg xmlns="http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg" width="1em" height="1em" viewBox="0 0 16 16"%3E%3Cpath fill="currentColor" d="M5.96 4.457a2.075 2.075 0 1 1 4.08 0l-.856 4.56a1.205 1.205 0 0 1-2.368 0l-.855-4.56ZM9.5 12.5a1.5 1.5 0 1 1-3 0a1.5 1.5 0 0 1 3 0Z"%2F%3E%3C%2Fsvg%3E'); + -webkit-mask-size: 100%; +} +.CG-custom-checkbox .task-list-item-checkbox[data-task='>'], .CG-custom-checkbox ul>li.task-list-item[data-task='>'] .task-list-item-checkbox { + background-color: skyblue; + border: 1px solid skyblue; + box-shadow: 0 0 5px skyblue, 0 0 10px skyblue, 0 0 15px skyblue; +} +.CG-custom-checkbox .task-list-item-checkbox[data-task='>']:hover, .CG-custom-checkbox ul>li.task-list-item[data-task='>'] .task-list-item-checkbox:hover { + background-color: rgb(112, 174, 198); + border: 1px solid rgb(112, 174, 198); +} +.CG-custom-checkbox [data-task='>'] input[type='checkbox']:checked:after, .CG-custom-checkbox [data-task='>'][type='checkbox']:checked:after { + -webkit-mask-image: url('data:image/svg+xml,%3Csvg xmlns="http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg" width="1em" height="1em" viewBox="0 0 16 16"%3E%3Cpath fill="currentColor" d="M5.74 3.2a.75.75 0 0 0-.04 1.06L9.227 8L5.7 11.74a.75.75 0 1 0 1.1 1.02l4-4.25a.75.75 0 0 0 0-1.02l-4-4.25a.75.75 0 0 0-1.06-.04Z"%2F%3E%3C%2Fsvg%3E'); + -webkit-mask-size: 100%; +} +.CG-custom-checkbox .task-list-item-checkbox[data-task='/'], .CG-custom-checkbox ul>li.task-list-item[data-task='/'] .task-list-item-checkbox { + background-color: palevioletred; + border: 1px solid palevioletred; + box-shadow: 0 0 5px palevioletred, 0 0 10px palevioletred, 0 0 15px palevioletred; +} +.CG-custom-checkbox .task-list-item-checkbox[data-task='/']:hover, .CG-custom-checkbox ul>li.task-list-item[data-task='/'] .task-list-item-checkbox:hover { + background-color: rgb(190, 100, 130); + border: 1px solid rgb(190, 100, 130); +} +.CG-custom-checkbox [data-task='/'] input[type='checkbox']:checked:after, .CG-custom-checkbox [data-task='/'][type='checkbox']:checked:after { + -webkit-mask-image: url('data:image/svg+xml,%3Csvg xmlns="http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg" width="1em" height="1em" viewBox="0 0 20 20"%3E%3Cpath fill="currentColor" d="M10 2a8 8 0 1 0 0 16a8 8 0 0 0 0-16Zm0 1a7 7 0 0 1 6.982 6.5H3.018A7 7 0 0 1 10 3Z"%2F%3E%3C%2Fsvg%3E'); + -webkit-mask-size: 100%; +} +.CG-custom-checkbox .task-list-item-checkbox[data-task='R'], .CG-custom-checkbox ul>li.task-list-item[data-task='R'] .task-list-item-checkbox { + background-color: rosybrown; + border: 1px solid rosybrown; + box-shadow: 0 0 5px rosybrown, 0 0 10px rosybrown, 0 0 15px rosybrown; +} +.CG-custom-checkbox .task-list-item-checkbox[data-task='R']:hover, .CG-custom-checkbox ul>li.task-list-item[data-task='R'] .task-list-item-checkbox:hover { + background-color: rgb(156, 119, 119); + border: 1px solid rgb(156, 119, 119); +} +.CG-custom-checkbox [data-task='R'] input[type='checkbox']:checked:after, .CG-custom-checkbox [data-task='R'][type='checkbox']:checked:after { + -webkit-mask-image: url('data:image/svg+xml,%3Csvg xmlns="http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg" width="1em" height="1em" viewBox="0 0 16 16"%3E%3Cpath fill="currentColor" d="M2.984 8.625v.003a.5.5 0 0 1-.612.355c-.431-.114-.355-.611-.355-.611l.018-.062s.026-.084.047-.145a6.7 6.7 0 0 1 1.117-1.982C4.096 5.089 5.605 4 8 4s3.904 1.089 4.802 2.183a6.7 6.7 0 0 1 1.117 1.982a4.077 4.077 0 0 1 .06.187l.003.013v.004l.001.002a.5.5 0 0 1-.966.258l-.001-.004l-.008-.025a4.872 4.872 0 0 0-.2-.52a5.696 5.696 0 0 0-.78-1.263C11.286 5.912 10.044 5 8 5c-2.044 0-3.285.912-4.028 1.817a5.7 5.7 0 0 0-.945 1.674a3.018 3.018 0 0 0-.035.109l-.008.025ZM8 7a2.5 2.5 0 1 0 0 5a2.5 2.5 0 0 0 0-5ZM6.5 9.5a1.5 1.5 0 1 1 3 0a1.5 1.5 0 0 1-3 0Z"%2F%3E%3C%2Fsvg%3E'); + -webkit-mask-size: 100%; +} +.CG-custom-checkbox .task-list-item-checkbox[data-task='+'], .CG-custom-checkbox ul>li.task-list-item[data-task='+'] .task-list-item-checkbox { + background-color: silver; + border: 1px solid silver; + box-shadow: 0 0 5px silver, 0 0 10px silver, 0 0 15px silver; +} +.CG-custom-checkbox .task-list-item-checkbox[data-task='+']:hover, .CG-custom-checkbox ul>li.task-list-item[data-task='+'] .task-list-item-checkbox:hover { + background-color: rgb(162, 162, 162); + border: 1px solid rgb(162, 162, 162); +} +.CG-custom-checkbox [data-task='+'] input[type='checkbox']:checked:after, .CG-custom-checkbox [data-task='+'][type='checkbox']:checked:after { + -webkit-mask-image: url('data:image/svg+xml,%3Csvg xmlns="http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg" width="1em" height="1em" viewBox="0 0 16 16"%3E%3Cpath fill="currentColor" d="M15 5.5a4.5 4.5 0 1 1-9 0a4.5 4.5 0 0 1 9 0Zm-4-2a.5.5 0 0 0-1 0V5H8.5a.5.5 0 0 0 0 1H10v1.5a.5.5 0 0 0 1 0V6h1.5a.5.5 0 0 0 0-1H11V3.5Zm-.5 7.5c1.33 0 2.55-.472 3.5-1.257V12.5a2.5 2.5 0 0 1-2.5 2.5h-7A2.5 2.5 0 0 1 2 12.5v-7A2.5 2.5 0 0 1 4.5 3h1.1a5.463 5.463 0 0 0-.393 1H4.5A1.5 1.5 0 0 0 3 5.5V9h2.5a.5.5 0 0 1 .5.5c0 .052.008.162.032.308c.041.247.115.494.228.718c.308.618.843.974 1.74.974c.692 0 1.168-.212 1.492-.592c.326.06.663.092 1.008.092Z"%2F%3E%3C%2Fsvg%3E'); + -webkit-mask-size: 100%; +} +.CG-custom-checkbox .task-list-item-checkbox[data-task='b'], .CG-custom-checkbox ul>li.task-list-item[data-task='b'] .task-list-item-checkbox { + background-color: steelblue; + border: 1px solid steelblue; + box-shadow: 0 0 5px steelblue, 0 0 10px steelblue, 0 0 15px steelblue; +} +.CG-custom-checkbox .task-list-item-checkbox[data-task='b']:hover, .CG-custom-checkbox ul>li.task-list-item[data-task='b'] .task-list-item-checkbox:hover { + background-color: rgb(82, 152, 209); + border: 1px solid rgb(82, 152, 209); +} +.CG-custom-checkbox [data-task='b'] input[type='checkbox']:checked:after, .CG-custom-checkbox [data-task='b'][type='checkbox']:checked:after { + -webkit-mask-image: + url('data:image/svg+xml,%3Csvg xmlns="http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg" width="1em" height="1em" viewBox="0 0 20 20"%3E%3Cpath fill="currentColor" d="M4 4.5A2.5 2.5 0 0 1 6.5 2h7A2.5 2.5 0 0 1 16 4.5v13a.5.5 0 0 1-.794.404L10 14.118l-5.206 3.786A.5.5 0 0 1 4 17.5v-13Z"%2F%3E%3C%2Fsvg%3E'); + -webkit-mask-size: 100%; +} +.CG-custom-checkbox .task-list-item-checkbox[data-task='B'], .CG-custom-checkbox ul>li.task-list-item[data-task='B'] .task-list-item-checkbox { + background-color: hotpink; + border: 1px solid hotpink; + box-shadow: 0 0 5px hotpink, 0 0 10px hotpink, 0 0 15px hotpink; +} +.CG-custom-checkbox .task-list-item-checkbox[data-task='B']:hover, .CG-custom-checkbox ul>li.task-list-item[data-task='B'] .task-list-item-checkbox:hover { + background-color: rgb(220, 90, 155); + border: 1px solid rgb(220, 90, 155); +} +.CG-custom-checkbox [data-task='B'] input[type='checkbox']:checked:after, .CG-custom-checkbox [data-task='B'][type='checkbox']:checked:after { + -webkit-mask-image: url('data:image/svg+xml,%3Csvg xmlns="http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg" width="1em" height="1em" viewBox="0 0 20 20"%3E%3Cpath fill="currentColor" d="M6.13 2.793A3.91 3.91 0 0 1 8.5 2c.24 0 .431.125.542.211c.124.098.24.223.344.348a.5.5 0 0 1 .114.318V6.5H8.415a1.5 1.5 0 1 0 0 1H9.5v9.415a.5.5 0 0 1-.183.387C8.855 17.68 8.237 18 7.5 18c-1.186 0-2.069-.598-2.64-1.313a4.057 4.057 0 0 1-.819-1.752a2.68 2.68 0 0 1-1.054-.555C2.435 13.907 2 13.14 2 12c0-.557.037-1.06.12-1.5h3.13c.636 0 1.16.475 1.24 1.089a1.5 1.5 0 1 0 1.004-.006A2.25 2.25 0 0 0 5.25 9.5H2.441c.153-.298.358-.55.625-.729a1.58 1.58 0 0 1 .212-.118c-.284-.832-.21-1.806.064-2.571c.175-.492.453-.957.835-1.267c.252-.205.552-.34.88-.366c.144-.683.549-1.248 1.074-1.656ZM10.5 14.5h.75a2.25 2.25 0 0 0 2.25-2.25v-1.835a1.5 1.5 0 1 0-1 0v1.835c0 .69-.56 1.25-1.25 1.25h-.75V2.877a.5.5 0 0 1 .114-.318c.103-.125.22-.25.344-.348c.11-.086.301-.211.542-.211a3.91 3.91 0 0 1 2.37.793c.525.408.93.973 1.073 1.656c.328.025.628.161.88.366c.382.31.66.775.835 1.267c.274.765.348 1.74.064 2.57c.072.034.143.074.212.12c.275.183.484.445.638.754c.303.605.428 1.449.428 2.474c0 1.141-.435 1.907-.987 2.38a2.68 2.68 0 0 1-1.054.555c-.1.558-.38 1.204-.819 1.752c-.57.715-1.454 1.313-2.64 1.313c-.736 0-1.355-.32-1.816-.698a.5.5 0 0 1-.184-.387V14.5ZM7 6.5a.5.5 0 1 0 0 1a.5.5 0 0 0 0-1Zm0 6a.5.5 0 1 0 0 1a.5.5 0 0 0 0-1Zm6-3a.5.5 0 1 0 0-1a.5.5 0 0 0 0 1Z"%2F%3E%3C%2Fsvg%3E'); + -webkit-mask-size: 100%; +} +.CG-custom-checkbox .task-list-item-checkbox[data-task='D'], .CG-custom-checkbox ul>li.task-list-item[data-task='D'] .task-list-item-checkbox { + background-color: olivedrab; + border: 1px solid olivedrab; + box-shadow: 0 0 5px olivedrab, 0 0 10px olivedrab, 0 0 15px olivedrab; +} +.CG-custom-checkbox .task-list-item-checkbox[data-task='D']:hover, .CG-custom-checkbox ul>li.task-list-item[data-task='D'] .task-list-item-checkbox:hover { + background-color: rgb(123, 163, 41); + border: 1px solid rgb(123, 163, 41); +} +.CG-custom-checkbox [data-task='D'] input[type='checkbox']:checked:after, .CG-custom-checkbox [data-task='D'][type='checkbox']:checked:after { + -webkit-mask-image: url('data:image/svg+xml,%3Csvg xmlns="http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg" width="1em" height="1em" viewBox="0 0 16 16"%3E%3Cpath fill="currentColor" d="M10.752 8.997a.748.748 0 1 1 0-1.497a.748.748 0 0 1 0 1.497Zm-.749 1.752a.748.748 0 1 0 1.497 0a.748.748 0 0 0-1.497 0ZM8 8.996A.748.748 0 1 1 8 7.5a.748.748 0 0 1 0 1.497Zm-.749 1.752a.748.748 0 1 0 1.497 0a.748.748 0 0 0-1.497 0Zm-2-1.752a.748.748 0 1 1 0-1.497a.748.748 0 0 1 0 1.497ZM2 4.5A2.5 2.5 0 0 1 4.5 2h7A2.5 2.5 0 0 1 14 4.5v7a2.5 2.5 0 0 1-2.5 2.5h-7A2.5 2.5 0 0 1 2 11.5v-7ZM13 6H3v5.5A1.5 1.5 0 0 0 4.5 13h7a1.5 1.5 0 0 0 1.5-1.5V6Zm-1.5-3h-7A1.5 1.5 0 0 0 3 4.5V5h10v-.5A1.5 1.5 0 0 0 11.5 3Z"%2F%3E%3C%2Fsvg%3E'); + -webkit-mask-size: 100%; +} +.CG-custom-checkbox .task-list-item-checkbox[data-task='I'], .CG-custom-checkbox ul>li.task-list-item[data-task='I'] .task-list-item-checkbox { + background-color: dodgerblue; + border: 1px solid dodgerblue; + box-shadow: 0 0 5px dodgerblue, 0 0 10px dodgerblue, 0 0 15px dodgerblue; +} +.CG-custom-checkbox .task-list-item-checkbox[data-task='I']:hover, .CG-custom-checkbox ul>li.task-list-item[data-task='I'] .task-list-item-checkbox:hover { + background-color: rgb(28, 132, 235); + border: 1px solid rgb(28, 132, 235); +} +.CG-custom-checkbox [data-task='I'] input[type='checkbox']:checked:after, +.CG-custom-checkbox [data-task='I'][type='checkbox']:checked:after { + -webkit-mask-image: url('data:image/svg+xml,%3Csvg xmlns="http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg" width="1em" height="1em" viewBox="0 0 16 16"%3E%3Cpath fill="currentColor" d="M8 7a.5.5 0 0 1 .5.5v3a.5.5 0 0 1-1 0v-3A.5.5 0 0 1 8 7Zm0-.75a.749.749 0 1 0 0-1.5a.749.749 0 0 0 0 1.498ZM2 8a6 6 0 1 1 12 0A6 6 0 0 1 2 8Zm6-5a5 5 0 1 0 0 10A5 5 0 0 0 8 3Z"%2F%3E%3C%2Fsvg%3E'); + -webkit-mask-size: 100%; +} +.CG-custom-checkbox .task-list-item-checkbox[data-task='i'], .CG-custom-checkbox ul>li.task-list-item[data-task='i'] .task-list-item-checkbox { + background-color: goldenrod; + border: 1px solid goldenrod; + box-shadow: 0 0 5px goldenrod, 0 0 10px goldenrod, 0 0 15px goldenrod; +} +.CG-custom-checkbox .task-list-item-checkbox[data-task='i']:hover, .CG-custom-checkbox ul>li.task-list-item[data-task='i'] .task-list-item-checkbox:hover { + background-color: rgb(199, 151, 28); + border: 1px solid rgb(199, 151, 28); +} +.CG-custom-checkbox [data-task='i'] input[type='checkbox']:checked:after, .CG-custom-checkbox [data-task='i'][type='checkbox']:checked:after { + -webkit-mask-image: url('data:image/svg+xml,%3Csvg xmlns="http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg" width="1em" height="1em" viewBox="0 0 20 20"%3E%3Cpath fill="currentColor" d="M9.5 6.502a.5.5 0 0 1 1 0v1.002a.5.5 0 0 1-1 0V6.502Zm3.35.941a.5.5 0 0 0-.707 0l-.708.709a.5.5 0 0 0 .707.707l.709-.709a.5.5 0 0 0 0-.707Zm-4.998 0a.5.5 0 1 0-.707.707l.708.709a.5.5 0 1 0 .707-.707l-.708-.709ZM10 2c3.314 0 6 2.597 6 5.8c0 1.677-.745 3.216-2.204 4.594a.599.599 0 0 0-.145.213l-.026.081l-.936 3.917c-.184.771-.865 1.33-1.67 1.39l-.144.005h-1.75c-.818 0-1.535-.516-1.776-1.262l-.038-.133l-.935-3.916a.595.595 0 0 0-.17-.295c-1.39-1.312-2.133-2.77-2.2-4.355L4 7.8l.003-.191C4.108 4.494 6.753 2 10 2ZM7.955 15l.319 1.334l.026.096c.097.3.376.522.712.563l.113.007h1.713l.106-.003a.856.856 0 0 0 .741-.525l.031-.1l.329-1.372h-4.09ZM10 3C7.368 3 5.212 4.953 5.015 7.414l-.012.212L5 7.779l.004.217c.056 1.304.674 2.525 1.888 3.671c.188.178.33.398.414.64l.043.15L7.716 14H9.5V9.497a.5.5 0 1 1 1 0V14h1.785l.387-1.615l.051-.15c.086-.215.218-.409.386-.568C14.383 10.465 15 9.181 15 7.8C15 5.157 12.769 3 10 3Z"%2F%3E%3C%2Fsvg%3E'); + -webkit-mask-size: 100%; +} +.CG-custom-checkbox .task-list-item-checkbox[data-task='N'], .CG-custom-checkbox ul>li.task-list-item[data-task='N'] .task-list-item-checkbox { + background-color: plum; + border: 1px solid plum; + box-shadow: 0 0 5px plum, 0 0 10px plum, 0 0 15px plum; +} +.CG-custom-checkbox .task-list-item-checkbox[data-task='N']:hover, .CG-custom-checkbox ul>li.task-list-item[data-task='N'] .task-list-item-checkbox:hover { + background-color: rgb(193, 137, 193); + border: 1px solid rgb(193, 137, 193); +} +.CG-custom-checkbox [data-task='N'] input[type='checkbox']:checked:after, .CG-custom-checkbox [data-task='N'][type='checkbox']:checked:after { + -webkit-mask-image: url('data:image/svg+xml,%3Csvg xmlns="http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg" width="1em" height="1em" viewBox="0 0 16 16"%3E%3Cpath fill="currentColor" d="M4.5 2A2.5 2.5 0 0 0 2 4.5v7A2.5 2.5 0 0 0 4.5 14h3.672a2.5 2.5 0 0 0 1.767-.732l3.329-3.329A2.5 2.5 0 0 0 14 8.172V4.5A2.5 2.5 0 0 0 11.5 2h-7ZM3 4.5A1.5 1.5 0 0 1 4.5 3h7A1.5 1.5 0 0 1 13 4.5V8h-2.5A2.5 2.5 0 0 0 8 10.5V13H4.5A1.5 1.5 0 0 1 3 11.5v-7Zm6 8.25V10.5A1.5 1.5 0 0 1 10.5 9h2.25c-.055.083-.118.16-.19.232l-3.328 3.329a1.564 1.564 0 0 1-.232.19Z"%2F%3E%3C%2Fsvg%3E'); + -webkit-mask-size: 100%; +} +.CG-custom-checkbox .task-list-item-checkbox[data-task='Q'], .CG-custom-checkbox ul>li.task-list-item[data-task='Q'] .task-list-item-checkbox, +.CG-custom-checkbox .task-list-item-checkbox[data-task='"'], .CG-custom-checkbox ul>li.task-list-item[data-task='"'] .task-list-item-checkbox { + background-color: tan; + border: 1px solid tan; + box-shadow: 0 0 5px tan, 0 0 10px tan, 0 0 15px tan; +} +.CG-custom-checkbox .task-list-item-checkbox[data-task='Q']:hover, .CG-custom-checkbox ul>li.task-list-item[data-task='Q'] .task-list-item-checkbox:hover, +.CG-custom-checkbox .task-list-item-checkbox[data-task='"']:hover, .CG-custom-checkbox ul>li.task-list-item[data-task='"'] .task-list-item-checkbox:hover { + background-color: rgb(183, 156, 122); + border: 1px solid rgb(183, 156, 122); +} +.CG-custom-checkbox [data-task='Q'] input[type='checkbox']:checked:after, .CG-custom-checkbox [data-task='Q'][type='checkbox']:checked:after, +.CG-custom-checkbox [data-task='"'] input[type='checkbox']:checked:after, .CG-custom-checkbox [data-task='"'][type='checkbox']:checked:after { + -webkit-mask-image: url('data:image/svg+xml,%3Csvg xmlns="http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg" width="1em" height="1em" viewBox="0 0 16 16"%3E%3Cpath fill="currentColor" d="M9.646 11.146c1.387-1.386 2.008-2.76 2.24-4.352A2 2 0 1 1 13 5c-.001 2.592-.528 4.734-2.647 6.854a.5.5 0 0 1-.708-.708Zm-6 0c1.387-1.386 2.009-2.76 2.24-4.352A2 2 0 1 1 7 5c-.001 2.592-.528 4.734-2.647 6.854a.5.5 0 0 1-.708-.708Z"%2F%3E%3C%2Fsvg%3E'); + -webkit-mask-size: 100%; +} +.CG-custom-checkbox .task-list-item-checkbox[data-task='P'], .CG-custom-checkbox ul>li.task-list-item[data-task='P'] .task-list-item-checkbox, +.CG-custom-checkbox .task-list-item-checkbox[data-task='p'], .CG-custom-checkbox ul>li.task-list-item[data-task='p'] .task-list-item-checkbox { + background-color: limegreen; + border: 1px solid limegreen; + box-shadow: 0 0 5px limegreen, 0 0 10px limegreen, 0 0 15px limegreen; +} +.CG-custom-checkbox .task-list-item-checkbox[data-task='P']:hover, .CG-custom-checkbox ul>li.task-list-item[data-task='P'] .task-list-item-checkbox:hover, +.CG-custom-checkbox .task-list-item-checkbox[data-task='p']:hover, .CG-custom-checkbox ul>li.task-list-item[data-task='p'] .task-list-item-checkbox:hover { + background-color: rgb(45, 184, 45); + border: 1px solid rgb(45, 184, 45); +} +.CG-custom-checkbox [data-task='P'] input[type='checkbox']:checked:after, .CG-custom-checkbox [data-task='P'][type='checkbox']:checked:after, +.CG-custom-checkbox [data-task='p'] input[type='checkbox']:checked:after, .CG-custom-checkbox [data-task='p'][type='checkbox']:checked:after { + -webkit-mask-image: url('data:image/svg+xml,%3Csvg xmlns="http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg" width="1em" height="1em" viewBox="0 0 24 24"%3E%3Cpath fill="currentColor" d="M15.056 9.004c.46-1.427.693-2.677.693-3.754c0-2.398-.939-4.247-2.5-4.247c-.847 0-1.109.504-1.437 1.747c.018-.065-.163.634-.215.821c-.101.359-.277.97-.527 1.831a.247.247 0 0 1-.03.065L8.174 9.953a5.885 5.885 0 0 1-2.855 2.326l-1.257.482a1.75 1.75 0 0 0-1.092 1.967l.686 3.539a2.25 2.25 0 0 0 1.673 1.757l8.25 2.022a4.75 4.75 0 0 0 5.733-3.44l1.574-6.173a2.75 2.75 0 0 0-2.665-3.43h-3.165Z"%2F%3E%3C%2Fsvg%3E'); + -webkit-mask-size: 100%; +} +.CG-custom-checkbox .task-list-item-checkbox[data-task='C'], .CG-custom-checkbox ul>li.task-list-item[data-task='C'] .task-list-item-checkbox, +.CG-custom-checkbox .task-list-item-checkbox[data-task='c'], .CG-custom-checkbox ul>li.task-list-item[data-task='c'] .task-list-item-checkbox { + background-color: crimson; + border: 1px solid crimson; + box-shadow: 0 0 5px crimson, 0 0 10px crimson, 0 0 15px crimson; +} +.CG-custom-checkbox .task-list-item-checkbox[data-task='C']:hover, .CG-custom-checkbox ul>li.task-list-item[data-task='C'] .task-list-item-checkbox:hover, +.CG-custom-checkbox .task-list-item-checkbox[data-task='c']:hover, .CG-custom-checkbox ul>li.task-list-item[data-task='c'] .task-list-item-checkbox:hover { + background-color: rgb(194, 19, 54); + border: 1px solid rgb(194, 19, 54); +} +.CG-custom-checkbox [data-task='C'] input[type='checkbox']:checked:after, .CG-custom-checkbox [data-task='C'][type='checkbox']:checked:after, +.CG-custom-checkbox [data-task='c'] input[type='checkbox']:checked:after, .CG-custom-checkbox [data-task='c'][type='checkbox']:checked:after { + -webkit-mask-image: url('data:image/svg+xml,%3Csvg xmlns="http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg" width="1em" height="1em" viewBox="0 0 24 24"%3E%3Cpath fill="currentColor" d="M15.056 14.183c.46 1.427.693 2.676.693 3.753c0 2.398-.939 4.247-2.5 4.247c-.8 0-1.078-.45-1.383-1.546l-.27-1.022c-.1-.358-.276-.97-.526-1.83a.247.247 0 0 0-.03-.066l-2.866-4.485a5.885 5.885 0 0 0-2.855-2.327l-1.257-.481A1.75 1.75 0 0 1 2.97 8.458l.686-3.538a2.25 2.25 0 0 1 1.673-1.758l8.25-2.021a4.75 4.75 0 0 1 5.733 3.44l1.574 6.172a2.75 2.75 0 0 1-2.665 3.43h-3.165Z"%2F%3E%3C%2Fsvg%3E'); + -webkit-mask-size: 100%; +} +.CG-custom-checkbox .task-list-item-checkbox[data-task='u'], .CG-custom-checkbox ul>li.task-list-item[data-task='u'] .task-list-item-checkbox { + background-color: lawngreen; + border: 1px solid lawngreen; + box-shadow: 0 0 5px lawngreen, 0 0 10px lawngreen, 0 0 15px lawngreen; +} +.CG-custom-checkbox .task-list-item-checkbox[data-task='u']:hover, .CG-custom-checkbox ul>li.task-list-item[data-task='u'] .task-list-item-checkbox:hover { + background-color: rgb(112, 222, 3); + border: 1px solid rgb(112, 222, 3); +} +.CG-custom-checkbox [data-task='u'] input[type='checkbox']:checked:after, .CG-custom-checkbox [data-task='u'][type='checkbox']:checked:after { + -webkit-mask-image: url('data:image/svg+xml,%3Csvg xmlns="http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg" width="1em" height="1em" viewBox="0 0 16 16"%3E%3Cpath fill="currentColor" d="m8.75 4l4.548.001l.108.015l.113.033l.102.048l.038.023l.049.035l.076.067l.084.101l.059.1l.041.105l.023.097l.01.125v4.504a.75.75 0 0 1-1.493.102l-.006-.102L12.5 6.56l-4.22 4.223a.75.75 0 0 1-.978.073l-.084-.073L5.75 9.31l-2.469 2.47a.75.75 0 0 1-1.133-.977l.073-.084l2.998-3a.75.75 0 0 1 .977-.073l.084.073l1.47 1.474L11.441 5.5H8.75a.75.75 0 0 1-.743-.648L8 4.75A.75.75 0 0 1 8.75 4Z"%2F%3E%3C%2Fsvg%3E'); + -webkit-mask-size: 100%; +} +.CG-custom-checkbox .task-list-item-checkbox[data-task='d'], .CG-custom-checkbox ul>li.task-list-item[data-task='d'] .task-list-item-checkbox { + background-color: firebrick; + border: 1px solid firebrick; + box-shadow: 0 0 5px firebrick, 0 0 10px firebrick, 0 0 15px firebrick; +} +.CG-custom-checkbox .task-list-item-checkbox[data-task='d']:hover, .CG-custom-checkbox ul>li.task-list-item[data-task='d'] .task-list-item-checkbox:hover { + background-color: rgb(197, 38, 38); + border: 1px solid rgb(197, 38, 38); +} +.CG-custom-checkbox [data-task='d'] input[type='checkbox']:checked:after, .CG-custom-checkbox [data-task='d'][type='checkbox']:checked:after { + -webkit-mask-image: url('data:image/svg+xml,%3Csvg xmlns="http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg" width="1em" height="1em" viewBox="0 0 16 16"%3E%3Cpath fill="currentColor" d="m8.75 12l4.548-.001l.108-.015l.113-.033l.102-.048l.038-.023l.049-.035l.076-.067l.084-.101l.059-.1l.041-.105l.023-.098l.01-.124V6.746a.75.75 0 0 0-1.493-.102l-.006.102L12.5 9.44L8.28 5.217a.75.75 0 0 0-.978-.073l-.084.073L5.75 6.69L3.28 4.219a.75.75 0 0 0-1.133.977l.073.084l2.998 3a.75.75 0 0 0 .977.073l.084-.073L7.75 6.807l3.691 3.693H8.75a.75.75 0 0 0-.743.648L8 11.25c0 .414.336.75.75.75Z"%2F%3E%3C%2Fsvg%3E'); + -webkit-mask-size: 100%; +} +.CG-custom-checkbox .task-list-item-checkbox[data-task='<'], .CG-custom-checkbox ul>li.task-list-item[data-task='<'] .task-list-item-checkbox { + background-color: cornflowerblue; + border: 1px solid cornflowerblue; + box-shadow: 0 0 5px cornflowerblue, 0 0 10px cornflowerblue, 0 0 15px cornflowerblue; +} +.CG-custom-checkbox .task-list-item-checkbox[data-task='<']:hover, .CG-custom-checkbox ul>li.task-list-item[data-task='<'] .task-list-item-checkbox:hover { + background-color: rgb(91, 132, 208); + border: 1px solid rgb(91, 132, 208); +} +.CG-custom-checkbox [data-task='<'] input[type='checkbox']:checked:after, .CG-custom-checkbox [data-task='<'][type='checkbox']:checked:after { + -webkit-mask-image: url('data:image/svg+xml,%3Csvg xmlns="http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg" width="1em" height="1em" viewBox="0 0 24 24"%3E%3Cpath fill="currentColor" d="m12.815 12.197l-7.532 1.255a.5.5 0 0 0-.386.318L2.3 20.728c-.248.64.421 1.25 1.035.942l7.674-3.837a6.5 6.5 0 0 1 10.589-5.38a.752.752 0 0 0-.263-1.124l-18-9c-.614-.307-1.283.303-1.035.942l2.598 6.958a.5.5 0 0 0 .386.318l7.532 1.255a.2.2 0 0 1 0 .395ZM17.5 12a5.5 5.5 0 1 1 0 11a5.5 5.5 0 0 1 0-11Zm2 5.5h-2V15a.5.5 0 0 0-1 0v3a.5.5 0 0 0 .5.5h2.5a.5.5 0 0 0 0-1Z"%2F%3E%3C%2Fsvg%3E'); + -webkit-mask-size: 100%; +} +.CG-custom-checkbox .task-list-item-checkbox[data-task='*'], .CG-custom-checkbox ul>li.task-list-item[data-task='*'] .task-list-item-checkbox { + background-color: yellow; + border: 1px solid yellow; + box-shadow: 0 0 5px yellow, 0 0 10px yellow, 0 0 15px yellow; +} +.CG-custom-checkbox .task-list-item-checkbox[data-task='*']:hover, .CG-custom-checkbox ul>li.task-list-item[data-task='*'] .task-list-item-checkbox:hover { + background-color: rgb(224, 224, 3); + border: 1px solid rgb(224, 224, 3); +} +.CG-custom-checkbox [data-task='*'] input[type='checkbox']:checked:after, .CG-custom-checkbox [data-task='*'][type='checkbox']:checked:after { + -webkit-mask-image: url('data:image/svg+xml,%3Csvg xmlns="http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg" width="1em" height="1em" viewBox="0 0 20 20"%3E%3Cpath fill="currentColor" d="M9.104 2.9a1 1 0 0 1 1.794 0l1.93 3.91l4.317.628a1 1 0 0 1 .554 1.706l-3.124 3.044l.738 4.3a1 1 0 0 1-1.451 1.054l-3.86-2.03l-3.862 2.03a1 1 0 0 1-1.45-1.055l.737-4.299l-3.124-3.044a1 1 0 0 1 .554-1.706l4.317-.627l1.93-3.912ZM4.39 12.687a.5.5 0 0 1-.078.703l-2.5 2a.5.5 0 1 1-.624-.781l2.5-2a.5.5 0 0 1 .702.078ZM4.312 5.11a.5.5 0 1 1-.624.78l-2.5-2a.5.5 0 1 1 .624-.78l2.5 2Zm11.297 7.578a.5.5 0 0 0 .079.703l2.5 2a.5.5 0 1 0 .624-.781l-2.5-2a.5.5 0 0 0-.703.078Zm.079-7.578a.5.5 0 0 0 .624.78l2.5-2a.5.5 0 1 0-.624-.78l-2.5 2Z"%2F%3E%3C%2Fsvg%3E'); + -webkit-mask-size: 100%; +} +.CG-custom-checkbox .task-list-item-checkbox[data-task='l'], .CG-custom-checkbox ul>li.task-list-item[data-task='l'] .task-list-item-checkbox { + background-color: palegreen; + border: 1px solid palegreen; + box-shadow: 0 0 5px palegreen, 0 0 10px palegreen, 0 0 15px palegreen; +} +.CG-custom-checkbox .task-list-item-checkbox[data-task='l']:hover, .CG-custom-checkbox ul>li.task-list-item[data-task='l'] .task-list-item-checkbox:hover { + background-color: rgb(129, 213, 129); + border: 1px solid rgb(129, 213, 129); +} +.CG-custom-checkbox [data-task='l'] input[type='checkbox']:checked:after, .CG-custom-checkbox [data-task='l'][type='checkbox']:checked:after { + -webkit-mask-image: url('data:image/svg+xml,%3Csvg xmlns="http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg" width="1em" height="1em" viewBox="0 0 20 20"%3E%3Cpath fill="currentColor" d="M7.318 6.5c.168-.873.397-1.657.67-2.32c.301-.733.648-1.294 1.008-1.663C9.354 2.149 9.693 2 10 2c.307 0 .646.149 1.004.517c.36.37.707.93 1.008 1.663c.273.663.502 1.447.67 2.32H7.318Zm-.255-2.7a7.188 7.188 0 0 1 .827-1.52A8.02 8.02 0 0 0 2.804 6.5h3.497c.182-1.007.441-1.922.762-2.7Zm5.874 0a7.19 7.19 0 0 0-.827-1.519A8.02 8.02 0 0 1 17.196 6.5h-3.497c-.182-1.007-.441-1.922-.762-2.7Zm.913 3.7h3.752c.234.712.37 1.468.394 2.253a4.39 4.39 0 0 0-2.495-.752c-.54 0-1.048.09-1.514.255A20.147 20.147 0 0 0 13.85 7.5Zm-.851 2.258a19.325 19.325 0 0 0-.157-2.258H7.158A19.438 19.438 0 0 0 7 10c0 .875.056 1.714.158 2.5h3.982c.272-1.128.93-2.109 1.859-2.742ZM11.003 13.5H7.318c.168.873.397 1.657.67 2.32c.301.733.648 1.294 1.008 1.663c.358.368.697.517 1.004.517c.307 0 .646-.149 1.004-.517c.254-.26.502-.617.732-1.063c-.491-.934-.736-1.87-.736-2.738l.003-.182Zm-8.199 0a8.02 8.02 0 0 0 5.087 4.219a7.187 7.187 0 0 1-.828-1.518c-.32-.78-.58-1.694-.762-2.701H2.804Zm3.346-1H2.398A7.992 7.992 0 0 1 2 10c0-.873.14-1.713.398-2.5H6.15C6.052 8.295 6 9.134 6 10c0 .866.052 1.705.15 2.5ZM19 13.682c0-2.033-1.465-3.681-3.499-3.681c-2.033 0-3.501 1.648-3.501 3.681c0 1.524.982 3.53 3.256 5.236c.145.11.345.11.49 0C18.022 17.212 19 15.206 19 13.682Zm-2-.182a1.5 1.5 0 1 1-3 0a1.5 1.5 0 0 1 3 0Z"%2F%3E%3C%2Fsvg%3E'); + -webkit-mask-size: 100%; +} +.CG-custom-checkbox .task-list-item-checkbox[data-task='S'], .CG-custom-checkbox ul>li.task-list-item[data-task='S'] .task-list-item-checkbox { + background-color: lightcoral; + border: 1px solid lightcoral; + box-shadow: 0 0 5px lightcoral, 0 0 10px lightcoral, 0 0 15px lightcoral; +} +.CG-custom-checkbox .task-list-item-checkbox[data-task='S']:hover, .CG-custom-checkbox ul>li.task-list-item[data-task='S'] .task-list-item-checkbox:hover { + background-color: rgb(200, 107, 107); + border: 1px solid rgb(200, 107, 107); +} +.CG-custom-checkbox [data-task='S'] input[type='checkbox']:checked:after, .CG-custom-checkbox [data-task='S'][type='checkbox']:checked:after { + -webkit-mask-image: url('data:image/svg+xml,%3Csvg xmlns="http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg" width="1em" height="1em" viewBox="0 0 16 16"%3E%3Cpath fill="currentColor" d="M13.973 7.722c.018.173.027.354.027.545c0 1.297-.452 2.169-.89 2.715a3.603 3.603 0 0 1-.603.596a2.61 2.61 0 0 1-.236.162l-.009.005a.5.5 0 0 0-.262.44V13.5a.5.5 0 0 1-.5.5H11a1 1 0 0 0-1-1H8a1 1 0 0 0-1 1h-.5a.5.5 0 0 1-.5-.5v-.603a.5.5 0 0 0-.45-.498a2.855 2.855 0 0 1-.464-.143a3.16 3.16 0 0 1-1.063-.707c-.443-.45-.714-1.042-.86-1.453c-.143-.409-.471-.779-.94-.911A.307.307 0 0 1 2 8.89v-.794a.29.29 0 0 1 .21-.279c.485-.139.809-.531.946-.945c.112-.34.31-.776.632-1.103a4.818 4.818 0 0 1 1.262-.906c.039-.02.07-.034.09-.043l.02-.01l.004-.001a.5.5 0 0 0 .303-.46V2.675a7.2 7.2 0 0 0 .7.527c.317.208.687.405 1.074.51c.114-.328.27-.64.464-.928h-.006c-.279-.029-.62-.18-.985-.419a7.02 7.02 0 0 1-.94-.757a.774.774 0 0 0-.827-.15a.76.76 0 0 0-.48.704v1.877a6.09 6.09 0 0 0-1.39 1.028c-.477.482-.736 1.084-.87 1.491c-.056.167-.168.268-.272.297A1.29 1.29 0 0 0 1 8.095v.795c0 .585.389 1.098.951 1.257a.43.43 0 0 1 .27.281c.166.472.498 1.223 1.09 1.823A4.158 4.158 0 0 0 5 13.287v.213A1.5 1.5 0 0 0 6.5 15H7a1 1 0 0 0 1-1h2a1 1 0 0 0 1 1h.5a1.5 1.5 0 0 0 1.5-1.5v-1.043a4.61 4.61 0 0 0 .89-.85c.562-.7 1.11-1.788 1.11-3.34c0-.65-.092-1.232-.27-1.752a4.01 4.01 0 0 1-.757 1.207Zm-.182-3.847a3.001 3.001 0 0 1-.91 3.502c-.417.329-.988.304-1.478.1l-2.39-.989c-.49-.203-.912-.589-.974-1.116a3.001 3.001 0 0 1 5.752-1.497Zm-1.53 2.717a2.001 2.001 0 1 0-3.228-1.337c.002.02.01.057.066.116a.87.87 0 0 0 .297.193l2.39.99a.84.84 0 0 0 .347.073c.08-.002.113-.023.128-.035ZM5.75 7.5a.75.75 0 1 0 0-1.5a.75.75 0 0 0 0 1.5Z"%2F%3E%3C%2Fsvg%3E'); + -webkit-mask-size: 100%; +} +.CG-custom-checkbox .task-list-item-checkbox[data-task='k'], .CG-custom-checkbox ul>li.task-list-item[data-task='k'] .task-list-item-checkbox { + background-color: steelblue; + border: 1px solid steelblue; + box-shadow: 0 0 5px steelblue, 0 0 10px steelblue, 0 0 15px steelblue; +} +.CG-custom-checkbox .task-list-item-checkbox[data-task='k']:hover, .CG-custom-checkbox ul>li.task-list-item[data-task='k'] .task-list-item-checkbox:hover { + background-color: rgb(80, 149, 206); + border: 1px solid rgb(80, 149, 206); +} +.CG-custom-checkbox [data-task='k'] input[type='checkbox']:checked:after, .CG-custom-checkbox [data-task='k'][type='checkbox']:checked:after { + -webkit-mask-image: url('data:image/svg+xml,%3Csvg xmlns="http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg" width="1em" height="1em" viewBox="0 0 16 16"%3E%3Cg fill="currentColor"%3E%3Cpath d="M11 6a1 1 0 1 0 0-2a1 1 0 0 0 0 2Z"%2F%3E%3Cpath d="M7.5 12v-.5h1A.5.5 0 0 0 9 11v-1h1a4 4 0 1 0-3.838-2.87L2.292 11a1 1 0 0 0-.292.707V13a1 1 0 0 0 1 1h2a1 1 0 0 0 1-1v-.5h1a.5.5 0 0 0 .5-.5ZM7 6a3 3 0 1 1 3 3H8.5a.5.5 0 0 0-.5.5v1H7a.5.5 0 0 0-.5.5v.5h-1a.5.5 0 0 0-.5.5v1H3v-1.293l4.089-4.089a.5.5 0 0 0 .113-.534C7.072 6.748 7 6.384 7 6Z"%2F%3E%3C%2Fg%3E%3C%2Fsvg%3E'); + -webkit-mask-size: 100%; +} +.CG-custom-checkbox .task-list-item-checkbox[data-task='w'], .CG-custom-checkbox ul>li.task-list-item[data-task='w'] .task-list-item-checkbox { + background-color: darkorange; + border: 1px solid darkorange; + box-shadow: 0 0 5px darkorange, 0 0 10px darkorange, 0 0 15px darkorange; +} +.CG-custom-checkbox .task-list-item-checkbox[data-task='w']:hover, .CG-custom-checkbox ul>li.task-list-item[data-task='w'] .task-list-item-checkbox:hover { + background-color: rgb(216, 120, 1); + border: 1px solid rgb(216, 120, 1); +} +.CG-custom-checkbox [data-task='w'] input[type='checkbox']:checked:after, .CG-custom-checkbox [data-task='w'][type='checkbox']:checked:after { + -webkit-mask-image: url('data:image/svg+xml,%3Csvg xmlns="http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg" width="1em" height="1em" viewBox="0 0 16 16"%3E%3Cpath fill="currentColor" d="M3.999 3h-.503a1.5 1.5 0 0 0-1.5 1.5v1c0 1.252.922 2.288 2.122 2.471a4.004 4.004 0 0 0 3.381 2.998V12h-1.5a2 2 0 0 0-2 2v.504a.5.5 0 0 0 .5.5h7a.5.5 0 0 0 .5-.5V14a2 2 0 0 0-2-2h-1.5v-1.03a4.004 4.004 0 0 0 3.381-3A2.501 2.501 0 0 0 14 5.5v-1A1.5 1.5 0 0 0 12.5 3H12a2 2 0 0 0-2-2H6a2 2 0 0 0-2 2Zm8 1h.5a.5.5 0 0 1 .5.5v1a1.5 1.5 0 0 1-1 1.414V4Zm-8 0v2.915A1.502 1.502 0 0 1 2.996 5.5v-1a.5.5 0 0 1 .5-.5H4Z"%2F%3E%3C%2Fsvg%3E'); + -webkit-mask-size: 100%; +} +.CG-custom-checkbox .task-list-item-checkbox[data-task='f'], .CG-custom-checkbox ul>li.task-list-item[data-task='f'] .task-list-item-checkbox { + background-color: orangered; + border: 1px solid orangered; + box-shadow: 0 0 5px orangered, 0 0 10px orangered, 0 0 15px orangered; +} +.CG-custom-checkbox .task-list-item-checkbox[data-task='f']:hover, .CG-custom-checkbox ul>li.task-list-item[data-task='f'] .task-list-item-checkbox:hover { + background-color: rgb(214, 57, 0); + border: 1px solid rgb(214, 57, 0); +} +.CG-custom-checkbox [data-task='f'] input[type='checkbox']:checked:after, .CG-custom-checkbox [data-task='f'][type='checkbox']:checked:after { + -webkit-mask-image: url('data:image/svg+xml,%3Csvg xmlns="http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg" width="1em" height="1em" viewBox="0 0 24 24"%3E%3Cpath fill="currentColor" d="M4 14q0-2.625 1.25-4.675T8 5.875q1.5-1.4 2.75-2.138L12 3v3.3q0 .925.625 1.462q.625.538 1.4.538q.425 0 .813-.175q.387-.175.712-.575L16 7q1.8 1.05 2.9 2.912Q20 11.775 20 14q0 2.2-1.075 4.012q-1.075 1.813-2.825 2.863q.425-.6.663-1.313Q17 18.85 17 18.05q0-1-.375-1.887q-.375-.888-1.075-1.588L12 11.1l-3.525 3.475q-.725.725-1.1 1.6Q7 17.05 7 18.05q0 .8.238 1.512q.237.713.662 1.313q-1.75-1.05-2.825-2.863Q4 16.2 4 14Zm8-.1l2.125 2.075q.425.425.65.95q.225.525.225 1.125q0 1.225-.875 2.087Q13.25 21 12 21t-2.125-.863Q9 19.275 9 18.05q0-.575.225-1.112q.225-.538.65-.963Z"%2F%3E%3C%2Fsvg%3E'); + -webkit-mask-size: 100%; +} +/*========== Mobile UI =============*/ +/*Fixes strange tiny next/prev buttons on finder for PDF*/ +.is-phone .pdf-findbar .pdf-toolbar-button{ + padding:3px; +} +/*Readapts scroller editor*/ +body.is-phone .markdown-source-view.mod-cm6 .cm-scroller::-webkit-scrollbar-track { + margin-bottom: 48px; +} +/*Fixes the offset for header title for note*/ +.is-mobile .view-header-title-container { + padding-left: 0px; +} +/*Corrects Scrollbar height for edit/preview new view*/ +.is-mobile .workspace-leaf-content[data-type='markdown'] .view-content ::-webkit-scrollbar-track { + margin-bottom: 34px; + margin-top:50px; +} +/*Shifts body for new style in markdown only for Mobile*/ +.is-mobile .workspace-leaf-content[data-type="markdown"] .markdown-preview-view.is-readable-line-width .markdown-preview-sizer{ + margin-top:50px; +} +.is-mobile .view-content > .markdown-source-view.mod-cm6 > .cm-editor > .cm-scroller{ + padding-top:60px; +} +/*Sets style for header in markdown only*/ +.workspace-leaf-content[data-type="markdown"] .view-header { + position: absolute; + width: 100%; + background: var(--background-tertiary); + --webkit-backdrop-filter: blur 120px; + backdrop-filter: blur(18px); + z-index: 90 !important; + border-radius: 5px 5px 0 0; +} +/*On phone brighter text color*/ +.is-phone .suggestion-item, .is-phone .menu-item, .is-phone .menu-item-icon, .is-mobile .tree-item .tree-item-self, +.mobile-toolbar-option{ + color: var(--text-accent); +} +/*On phone icon in file tree text color*/ +body.is-phone .workspace-leaf-content[data-type="file-explorer"] .nav-file-title .nav-file-title-content::before, +body.is-phone .workspace-leaf-content[data-type="file-explorer"] .nav-folder-title .nav-folder-title-content::before{ +background-color: var(--text-accent); +} +/*Sets Spacing of items on nav bar*/ +.mobile-navbar-actions { + justify-content: space-around; +} +/*Bottom Nav Styled*/ +.mobile-navbar-actions, +.is-phone .workspace-drawer .nav-header { + border-bottom: 2px solid; + border-top: 2px solid; + border-image-slice: 1; + border-image-source: linear-gradient(to right, transparent, var(--text-accent), transparent); +} +/*Unique Menu Style*/ +.is-mobile .menu, .theme-dark.is-mobile .prompt, .is-mobile .prompt { + background: var(--background-settings); + border-radius: 3px; + border-image-slice: 1; + border-top: 2px solid; + border-image-source: linear-gradient(to right, transparent, var(--text-accent), transparent); + border-bottom: 2px solid; +} +/*Styles text search on mobile*/ +.is-mobile .workspace-leaf-content[data-type="markdown"] .document-search-container { + width: 100%; + position:absolute; + background: var(--background-tertiary); + --webkit-backdrop-filter: blur 120px; + backdrop-filter: blur(18px); + margin-top:50px; +} +/*Bumps down content for text search.is-mobile .document-sear in preview*/ +.is-mobile .document-search-container ~ .markdown-preview-view { + margin-top:60px; +} +/*Bumps down content for text search in editor*/ +.is-mobile .document-search-container ~ .cm-editor{ + padding-top:60px !important; +} +/*Bumps down content for text search and replace in editor*/ +.is-mobile .document-search-container.mod-replace-mode ~ .cm-editor{ + margin-top:60px; +} +/*Sets appropriate spacings between header, Finder and replacer*/ +.is-mobile .document-search, .is-mobile .document-replace{ + margin-top: 10px; +} +/*Adds a blur effect to PDF thumbnail container on mobile*/ +.is-mobile .pdf-content-container.sidebarOpen .pdf-sidebar-container { + backdrop-filter: blur(8px); +} +/*"Float Phone Menu "*/ +.is-phone .menu{ + top: 20%!important; +} +/*Sets the color for toolbar style*/ +.mobile-toolbar-option:active { + background: var(--text-selection); + border-image-slice: 1; + border-right: 1px solid; + border-image-source: linear-gradient(to top, transparent, var(--text-accent), transparent); + border-left: 1px solid; + border-radius: var(--radius-s); + padding-top:3px; + padding-bottom:3px; +} +/*Mobile Navigation Bar (bottom)*/ +.mobile-navbar { + backdrop-filter: blur(18px); + background: var(--background-tertiary); + background-attachment: fixed !important; +} +/*Edit Mode Toolbar*/ +.mobile-toolbar-options-container { + padding: 26px 10px; + align-items: center; + z-index: 90; + backdrop-filter: blur(18px); + background: var(--background-settings); + background-attachment: fixed !important; + position: absolute; + bottom: 0px; + border-image-slice: 1; + border-image-source: linear-gradient(to right, transparent, var(--text-accent), transparent); + border-top: 2px solid; +} +/*Fixes misaligned bullet points in mobile preview*/ +.is-mobile .markdown-rendered .list-collapse-indicator{ + margin-left:-2.5em; +} +/*Mobile and Notice Style*/ +.pull-action.mod-activated, .pull-action, .is-phone .notice { + background: var(--background-tertiary); + --webkit-backdrop-filter: blur 120px; + backdrop-filter: blur(18px); + z-index: 90 !important; + border-radius: 5px 5px 0 0; + border-image-slice: 1; + border-image-source: linear-gradient(to right, transparent, var(--text-accent), transparent); + border-bottom: 1px solid; + border-top: 1px solid; + border-radius: var(--radius-s); + color: var(--text-normal); +} +/*--------------- Mobile UI: Sidepanel -----------------*/ +/*On Phone side panels are full screen*/ +.is-phone .workspace-drawer.mod-left, .is-phone .workspace-drawer.mod-right { + border-radius: 0px; + min-width: -webkit-fill-available; + backdrop-filter: blur(16px); +} +/*Corrects the file Search location */ +.is-mobile .search-row{ + margin-top: 57px; + border-radius: 0px; +} +/*Change background for parameter, search row and search info*/ +.is-phone .search-params, .is-phone .search-row, .search-results-info { + background: var(--background-settings); +} +/*Background for sidepanels*/ +.is-phone .theme-dark .workspace-drawer-inner, .is-phone .workspace-drawer-inner { + background: var(--background-primary); +} +/*Colors uncolored text*/ +.workspace-drawer-header-info, .workspace-drawer-header-name-text, .workspace-drawer-tab-option-item-title, .workspace-drawer-active-tab-title, +.workspace-drawer-active-tab-icon, .workspace-drawer-tab-option-item-icon { + color: var(--text-accent); +} +/*Styles active tab header in side panel*/ +.is-mobile .workspace-drawer-active-tab-header { + z-index: 90; + backdrop-filter: blur(18px); + background: var(--background-settings); + background-attachment: fixed; + position: absolute; + width: -webkit-fill-available; + border-image-slice: 1; + border-image-source: linear-gradient(to right, transparent, var(--text-accent), transparent); + border-bottom: 2px solid; +} +/*Corrects the view from the style above*/ +.is-mobile .workspace-drawer-active-tab-container .workspace-drawer-active-tab-content .nav-files-container, .is-mobile .tag-container { + padding-top: 60px; + margin-bottom: -50px; + padding-bottom: 60px; + backdrop-filter: blur(18px); +} +/*Sidepanel Scrollbar re-positioning*/ +body.is-mobile .nav-files-container::-webkit-scrollbar-track, .is-mobile .tag-container::-webkit-scrollbar-track { + margin-top: 55px; + margin-bottom: 40px; +} +/*Sidepanel top header*/ +.is-mobile .workspace-drawer-header { + border-top: 2px solid; + border-bottom: 2px solid; + border-image-slice: 1; + border-image-source: linear-gradient(to right, transparent, var(--text-accent), transparent); + background: var(--background-settings); +} +/*Corrects view for outline*/ +.is-mobile .workspace-drawer-active-tab-content .outline { + padding-top: 60px; +} +/*Colors Right Hand Icons in Header for sidepanel*/ +.is-mobile .workspace-drawer-active-tab-back-icon, .is-mobile .workspace-drawer-active-tab-icon:last-child, .is-mobile .workspace-drawer-header-icon { + color: var(--text-faint); +} +/*Sidepanel Tabs and Vault Name spacing, */ +.is-mobile .workspace-drawer-tab-option-item, .is-mobile .workspace-drawer-header-switcher { + padding: 3px; + border-top: 1px solid transparent; + border-bottom: 1px solid transparent; +} +/*Sidepanel Tabs, Vault Name, Settings Button and Sub header panels style on Active*/ +.is-mobile .workspace-drawer-tab-option-item:active, .is-mobile .workspace-drawer-header-switcher:active, .is-mobile .workspace-drawer-header-icon:active, +.workspace-drawer-header-icon:active, .workspace-drawer-active-tab-icon:active, .workspace-drawer-active-tab-back-icon:active, +.workspace-drawer-active-tab-title:active { + background: var(--text-selection); + color: var(--text-accent); + box-shadow: 0 0 0 transparent; + border-image-slice: 1; + border-top: 1px solid; + border-image-source: linear-gradient(to right, transparent, var(--text-accent), transparent); + border-bottom: 1px solid; + border-radius: var(--radius-s); +} +/*Sub header side panel spacing*/ +.workspace-drawer-active-tab-icon, .workspace-drawer-active-tab-back-icon, .workspace-drawer-active-tab-title { + border-top: 1px solid transparent; + border-bottom: 1px solid transparent; + padding: 1px; +} +/*Spacing for Settings Button*/ +.is-mobile .workspace-drawer-header-icon{ + padding-top: var(--size-2-2); + padding-left: 5px; + padding-right: 5px; + border-top: 1px solid transparent; + border-bottom: 1px solid transparent; +} +/*Bottom nav Style*/ +.is-mobile .workspace-drawer .nav-header { + background: var(--background-tertiary); + background-attachment: fixed !important; + z-index: 1; +} +/*Fixed Kanban Board View*/ +.is-mobile .kanban-plugin__board{ + margin-bottom: 50px; +} +/*Removes unnecessary background color*/ +.is-phone .workspace-split.mod-root .view-content{ +background-color: transparent; +} +.is-mobile .tree-item-self.nav-file-title.is-active{ + background: var(--text-selection); +} +/*Fixes Backlinks view for styled header*/ +.is-mobile .workspace-leaf-content[data-type='backlink'] .view-content,.is-mobile .workspace-leaf-content[data-type='outgoing-link'] .view-content { + margin-top:60px +} +/*Fix missing active style*/ +.is-phone .clickable-icon.has-active-menu{ + background-color: var(--text-selection); +} +/*---------------- Mobile: Settings -----------------------*/ +/*Colors group title in Settings*/ +.is-phone .vertical-tab-header-group-title, .is-phone .setting-item-heading .setting-item-name { + color: var(--text-accent); + padding-bottom: 5px; +} +/*Styled back button in settings similar to close button*/ +.is-phone .modal-setting-back-button { + color: var(--text-accent); + height:24px; + top: calc(var(--safe-area-inset-top) + 9px); + left: var(--size-4-5); + padding: 2px 0px 5px 5px; + border-radius: var(--radius-s); +} +/*Styled back button on hover*/ +.is-phone .modal-setting-back-button:active { + background: var(--text-selection); +} +/*Settings header style*/ +.is-phone .modal.mod-sidebar-layout .modal-title { + z-index: 90; + backdrop-filter: blur(18px); + background: var(--background-tertiary); + background-attachment: fixed !important; + position: absolute; + width: -webkit-fill-available; + border-image-slice: 1; + border-image-source: linear-gradient(to right, transparent, var(--text-accent), transparent); + border-bottom: 2px solid; + border-top: 2px solid; +} +/*Resets scroll bar for Settings header style*/ +.is-phone .modal.mod-settings .vertical-tab-header::-webkit-scrollbar-track { + margin-top: 50px; +} +/*Resets scroll bar for Settings header style in settings pages*/ +.is-phone .modal.mod-settings .vertical-tab-content::-webkit-scrollbar-track { + margin-top: 5px; +} +/*Spacing for styled Settings header*/ +.is-phone .modal.mod-settings .vertical-tab-header { + padding-top: 50px; +} +/*Colors settings nav item list on phone*/ +.is-phone .modal.mod-settings .vertical-tab-nav-item, +.is-phone.theme-dark .modal.mod-settings .vertical-tab-nav-item { + background-color: var(--background-settings-alt); + border-bottom: 1px solid transparent; + color: var(--text-accent); +} +/*Styles settings list when active settings nav item list on phone*/ +.is-phone .modal.mod-settings .vertical-tab-nav-item:active, +.is-phone .modal.mod-settings .vertical-tab-nav-item.is-active{ + background: var(--text-selection); + border-top: 1px solid; +} +/*Colors settings items background*/ +.is-phone .modal .setting-item { + background-color: var(--background-settings-alt); +} +/*Spacing for styled Settings pages*/ +.is-phone .modal.mod-settings .vertical-tab-content { + margin-top: 40px; +} +/*brings close button to the front for styled headers*/ +.is-phone .modal.mod-lg .modal-close-button, +.is-phone .modal.mod-sidebar-layout .modal-close-button { + z-index: 100; +} +/*Removes breadcrumps if enabled*/ +.CG-header-crumbs.is-phone .view-header-title-parent { + display: none; +} +/*Bumps down community controls for full view*/ +.is-phone .community-modal-controls { + margin-top: 50px; +} +/*Corrects full view for community info due to styled headers*/ +.is-phone .community-modal-info { + padding-top: 50px; +} +/*Removes unnecessary padding from prompt input (quick switcher etc)*/ +.is-phone .prompt-input-cta { + padding: 0; +} +/*Colors input field for prompt*/ +.theme-dark.is-mobile .prompt input.prompt-input, .prompt input.prompt-input { + background-color: var(--background-settings-2); + padding: 1%; + border: 1px solid var(--background-settings-2); +} +/*Sets spacing for buttons on empty*/ +.is-mobile .empty-state-action{ + border-bottom: 2px solid transparent; + border-top: 2px solid transparent; +} +/*Sets spacing for active buttons on empty*/ +.is-mobile .empty-state-action:active { + background: var(--text-selection); + border-image-slice: 1; + border-image-source: linear-gradient(to right, transparent, var(--text-accent), transparent); + border-bottom: 2px solid; + border-top: 2px solid; +} +/*Corrects coloring on Bookmark icon*/ +.view-action.mod-bookmark{ + color:var(--activetab-faint); + } +/*------------- Tablet -------------------*/ +/*Adds some nice blur in the sidepanel panes*/ +.is-tablet .workspace-drawer-tab-container > *, .is-tablet .workspace-drawer-ribbon{ + backdrop-filter: blur(18px); +} +/*Minor Spacings in tablet tab header*/ +.is-tablet .sidebar-toggle-button.mod-left { + padding-right: 5px; + border-left: 2px solid transparent; + border-right: 2px solid transparent; +} +/*Style Tablet Settings*/ +.is-tablet .modal.mod-settings .modal-content { + border-image-slice: 1; + border-image-source: linear-gradient(to right, transparent, var(--text-accent), transparent); + border-bottom: 3px solid; + border-top: 3px solid; +} +/*Sets hover on tablet*/ +.is-tablet .clickable-icon:hover{ + background-color: var(--text-selection); +} +/*Sets hover and active background color on tablet*/ +body:not(.is-grabbing).is-tablet .tree-item-self.is-clickable:hover{ +background-color: var(--text-selection); +} +body:not(.is-grabbing).is-tablet .tree-item-self.is-clickable:active{ + background-color: var(--color-accent-active); +} + +/*Removes the useless color overlay when translucency is enabled */ +body.is-frameless.is-hidden-frameless .titlebar{ + background:transparent; +} + +.workspace-tabs:not( .mod-top) .workspace-leaf-content, .workspace-tabs:not(.mod-top) .workspace-leaf-content, .workspace-split.mod-vertical.mod-root .workspace-tabs:not(.mod-stacked) .view-content{ + border-radius: 0 0 5px 5px; +} + +.workspace-split:not(.mod-horizontal.mod-left-split, .mod-horizontal.mod-right-split ) .workspace-tabs:not(.mod-top) .workspace-tab-header-container{ + background: transparent; +} + +.workspace-split:not(.mod-horizontal.mod-left-split, .mod-horizontal.mod-right-split ) .workspace-tabs .workspace-leaf{ + border-radius: 5px; +} + +/*Embedded HTML height fix*/ +span.internal-embed.is-loaded.node-insert-event.wb-view-content-embeded{ +height:600px} diff --git a/Perlite/perlite/Demo/.obsidian/themes/Everforest/manifest.json b/Perlite/perlite/Demo/.obsidian/themes/Everforest/manifest.json new file mode 100644 index 0000000..44c1482 --- /dev/null +++ b/Perlite/perlite/Demo/.obsidian/themes/Everforest/manifest.json @@ -0,0 +1,6 @@ +{ + "name": "Everforest", + "version": "0.0.0", + "minAppVersion": "0.16.0", + "author": "MrGlitchByte" +} \ No newline at end of file diff --git a/Perlite/perlite/Demo/.obsidian/themes/Everforest/theme.css b/Perlite/perlite/Demo/.obsidian/themes/Everforest/theme.css new file mode 100644 index 0000000..d897bba --- /dev/null +++ b/Perlite/perlite/Demo/.obsidian/themes/Everforest/theme.css @@ -0,0 +1,675 @@ +/***** TABLE OF CONTENTS *****/ +/* TODO: Reformat entire CSS file as below. +/* 1. Font +/* 2. Colours +/* 2.1. Dark theme color variables +/* 2.2. Light theme color variables +/* 2.3. Dark theme implementation +/* 2.4. Light theme implementation +/* 3. General UI +/* 3.1. Title Bar +/* 4. Markdown (editor / preview) +/* 4.1. Headings +/* 4.1.1. Fix font weights +/* 4.2. Links +/* 4.2.1. Nifty arrow before internal links (also applies to embeds) +/* 4.3. Embeds +/* 4.4. Tables +/* 4.5. Popovers +/* 4.6. Task Lists +/* 4.7. Blockquotes +/* 4.8. Code +/* 4.9. Bulleted lists +/* 4.10. Misc Fixes +/* 5. Graph view colours +/* 6. Notion Colour Blocks +/* 7. In-document header (scrolls with the document) [remove for compatibility with Andy's mode] +/* 7.1. Adjustments for non-in-document headers (graphs, etc)\ +/* 7.2. Active pane border +/* 7.3. Misc fixes +/* 8. Tags +/* 8.1. Tag custom colours +/***** *****/ + +/* 1. Font */ +body { + /* font stacks taken directly from Notion */ + --font-monospace: "Hack Nerd Font", "Source Code Pro", monospace; + -webkit-font-smoothing: auto; + --h1-color: var(--text-title-h1); + --h2-color: var(--text-title-h2); + --h3-color: var(--text-title-h3); + --h4-color: var(--text-title-h4); + --h5-color: var(--text-title-h5); + --h6-color: var(--text-title-h6); +} + +/* 2. Colours */ +:root +{ + /* 2.1 Dark theme color variables */ + --bg0-dark: #22282c; + --bg1-dark: #272f34; + --bg-dark: #2f383e; + --bg2-dark: #374247; + --bg3-dark: #404c51; + --bg4-dark: #4a555b; + --bg5-dark: #525c62; + --bg_visual: #503946; + --bg_red: #4e3e43; + --bg_green: #404d44; + --bg_blue: #394f5a; + --bg_yellow: #4a4940; + --shadow: #00000070; + + --fg-dark: #d3c6aa; + --grey0-dark: #7f897d; + --grey1-dark: #859289; + --grey2-dark: #9aa79d; + + --faded-red: #e67e80; + --faded-orange: #e69875; + --faded-yellow: #dbbc7f; + --faded-green: #a7c080; + --faded-aqua: #83c092; + --faded-blue: #7fbbb3; + --faded-purple: #d699b6; + + --dim-red: #da6362; + --dim-orange: #d77f48; + --dim-yellow: #bf983d; + --dim-green: #899c40; + --dim-aqua: #569d79; + --dim-blue: #5a93a2; + --dim-purple: #b87b9d; + + + /* 2.2 Light theme color variables */ + --bg0-light: #f0edd8; + --bg1-light: #f6f1dd; + --bg-light: #fdf6e3; + --bg2-light: #f3efda; + --bg3-light: #edead5; + --bg4-light: #e4e1cd; + --bg5-light: #dfdbc8; + --grey0-light: #a4ad9e; + --grey1-light: #939f91; + --grey2-light: #879686; + --shadow-light: #3c474d20; + + + --bg_visual_light: #eaedc8; + --bg_red_light: #fbe3da; + --bg_green_light: #f0f1d2; + --bg_blue_light: #e9f0e9; + --bg_yellow_light: #faedcd; + + --fg-light: #5c6a72; + + --light-red: #f85552; + --light-orange: #f57d26; + --light-yellow: #bf983d; + --light-green: #899c40; + --light-aqua: #569d79; + --light-blue: #5a93a2; + --light-purple: #b87b9d; + + --light-dim-red: #f1706f; + --light-dim-orange: #f39459; + --light-dim-yellow: #e4b649; + --light-dim-green: #a4bb4a; + --light-dim-aqua: #6ec398; + --light-dim-blue: #6cb3c6; + --light-dim-purple: #e092be; + + +} + +/* 2.3 Dark theme implementation */ +.theme-dark +{ + --background-primary: var(--bg-dark); + --background-primary-alt: var(--bg-dark); + --background-secondary: var(--bg-dark); + --background-secondary-alt: var(--bg-dark); + --text-normal: var(--fg-dark); + --text-faint: var(--grey1-dark); + --text-title-h1: var(--dim-red); + --text-title-h2: var(--dim-orange); + --text-title-h3: var(--dim-yellow); + --text-title-h4: var(--dim-green); + --text-title-h5: var(--dim-aqua); + --text-title-h6: var(--dim-purple); + --text-link: var(--faded-blue); + --text-a: var(--dim-aqua); + --text-a-hover: var(--faded-aqua); + --text-mark: rgba(215, 153, 33, 0.4); /* light-yellow */ + --pre-code: var(--bg1-dark); + --text-highlight-bg: var(--bg_green); + --interactive-accent: var(--dim-aqua); + --interactive-before: var(--bg5-dark); + --background-modifier-border: var(--bg5-dark); + --text-accent: var(--dim-blue); + --interactive-accent-rgb: var(--dim-blue); + --inline-code: var(--dim-blue); + --code-block: var(--fg-dark); + --vim-cursor: var(--faded-blue); + --text-selection: var(--bg5-dark); +} + +/* 2.4 Light theme implementation */ +.theme-light +{ + --background-primary: var(--bg-light); + --background-primary-alt: var(--bg-light); + --background-secondary: var(--bg-light); + --background-secondary-alt: var(--bg-light); + --text-normal: var(--fg-light); + --text-faint: var(--grey1-light); + --text-title-h1: var(--light-red); + --text-title-h2: var(--light-orange); + --text-title-h3: var(--light-yellow); + --text-title-h4: var(--light-green); + --text-title-h5: var(--light-aqua); + --text-title-h6: var(--light-purple); + --text-link: var(--light-blue); + --text-a: var(--light-dim-blue); + --text-a-hover: var(--light-blue); + --text-mark: rgba(215, 153, 33, 0.4); /* light-yellow */ + --pre-code: var(--bg1-light); + --text-highlight-bg: var(--light-dim-green); + --interactive-accent: var(--bg5-light); + --interactive-before: var(--bg5-light); + --background-modifier-border: var(--bg5-light); + --text-accent: var(--light-dim-green); + --interactive-accent-rgb: var(--light-dim-green); + --inline-code: var(--light-blue); + --code-block: var(--fg-light); + --vim-cursor: var(--light-blue); + --text-selection: rgba(189, 174, 147, 0.5); /* light3 */ +} + +.theme-dark code[class*="language-"], +.theme-dark pre[class*="language-"], +.theme-light code[class*="language-"], +.theme-light pre[class*="language-"] +{ + text-shadow: none ; + background-color: var(--pre-code) ; +} + +/* 3. General UI */ +.view-header-title { + font-weight: 700; + } + + /* 3.1. Title bar */ + .titlebar { + background-color: var(--background-secondary-alt); + } + + .titlebar-inner { + color: var(--text-normal); + } + +.graph-view.color-circle, +.graph-view.color-fill-highlight, +.graph-view.color-line-highlight +{ + color: var(--interactive-accent-rgb) ; +} +.graph-view.color-text +{ + color: var(--text-a-hover) ; +} +/* +.graph-view.color-fill +{ + color: var(--background-secondary); +} +.graph-view.color-line +{ + color: var(--background-modifier-border); +} +*/ + +html, +body +{ + font-size: 16px ; +} + +strong +{ + font-weight: 600 ; +} + +a, +.cm-hmd-internal-link +{ + color: var(--text-a) ; + text-decoration: none ; +} + +a:hover, +.cm-hmd-internal-link:hover, +.cm-url +{ + color: var(--text-a-hover) ; + text-decoration: none ; +} + + +/*---------------------------------------------------------------- +TAGS +----------------------------------------------------------------*/ + +.token.tag { + padding: 0px 0px; + background-color: transparent; + border: none; + } + + .token.tag:hover { + background: transparent; + color: var(--text-a-hover) !important; + } + + /*---------------------------------------------------------------- + TAG PILLS + ----------------------------------------------------------------*/ + .markdown-preview-section h1 a.tag, + .markdown-preview-section h2 a.tag, + .markdown-preview-section h3 a.tag, + .markdown-preview-section h4 a.tag, + .markdown-preview-section h5 a.tag, + .markdown-preview-section h4 a.tag { + font-weight: inherit; + } + + .tag { + background-color: var(--tag-base); + border: 1px solid var(--interactive-accent); + color: var(--text-a); + font-weight: 500; + padding: 1.5px 6px; + padding-left: 6px; + padding-right: 6px; + text-align: center; + text-decoration: none !important; + display: inline-block; + cursor: pointer; + border-radius: 8px; + transition: 0.2s ease-in-out; + } + + .tag:hover { + color: var(--interactive-accent); + } + + /*---------------------------------------------------------------- + TAG REF STYLING + ----------------------------------------------------------------*/ + + .tag[href^="#❗️"], + .tag[href^="#important❗️"] { + background-color: var(--tag-base); + border: 1px solid var(--boldred); + } + + .tag[href^="#📓"], + .tag[href^="#journal📓"] { + background-color: var(--tag-base); + border: 1px solid var(--purple); + } + + .tag[href^="#🌱"], + .tag[href^="#seedling🌱"], + .tag[href^="#🌿"], + .tag[href^="#budding🌿"], + .tag[href^="#🌳"], + .tag[href^="#evergreen🌳"] { + background-color: var(--tag-base); + border: 1px solid var(--boldgreen); + } + +mark +{ + background-color: var(--text-mark) ; +} + +.view-actions a +{ + color: var(--text-normal) ; +} + +.view-actions a:hover +{ + color: var(--text-a) ; +} + +.HyperMD-codeblock-bg +{ + background-color: var(--pre-code) ; +} + +.HyperMD-codeblock +{ + line-height: 1.4em ; + color: var(--code-block) ; +} + +.HyperMD-codeblock-begin +{ + border-top-left-radius: 4px ; + border-top-right-radius: 4px ; +} + +.HyperMD-codeblock-end +{ + border-bottom-left-radius: 4px ; + border-bottom-right-radius: 4px ; +} + +th +{ + font-weight: 600 ; +} + +thead +{ + border-bottom: 2px solid var(--background-modifier-border) ; +} + +.HyperMD-table-row +{ + line-height: normal ; + padding-left: 4px ; + padding-right: 4px ; + /* background-color: var(--pre-code) ; */ +} + +.HyperMD-table-row-0 +{ + padding-top: 4px ; +} + +.CodeMirror-foldgutter-folded, +.is-collapsed .nav-folder-collapse-indicator +{ + color: var(--text-a) ; +} + +.nav-file-tag +{ + color: var(--text-a) ; +} + +.is-active .nav-file-title +{ + color: var(--text-a) ; + background-color: var(--background-primary-alt) ; +} + +.nav-file-title +{ + border-bottom-left-radius: 0 ; + border-bottom-right-radius: 0 ; + border-top-left-radius: 0 ; + border-top-right-radius: 0 ; +} + +img +{ + display: block ; + margin-left: auto ; + margin-right: auto ; +} + +.HyperMD-list-line +{ + padding-top: 0 ; +} + +.CodeMirror-code, +.CodeMirror-linenumber, +.cm-formatting +{ + font-family: var(--font-monospace) ; + font-size: 0.9em; +} + +.markdown-preview-section pre code, +.markdown-preview-section code +{ + font-size: 0.9em ; + background-color: var(--pre-code) ; +} + +.markdown-preview-section pre code +{ + padding: 4px ; + line-height: 1.4em ; + display: block ; + color: var(--code-block) ; +} + +.markdown-preview-section code +{ + color: var(--inline-code) ; +} + +.cm-s-obsidian, +.cm-inline-code +{ + -webkit-font-smoothing: auto ; +} + +.cm-inline-code +{ + color: var(--inline-code) ; + background-color: var(--pre-code) ; + padding: 1px ; +} + +.workspace-leaf-header-title +{ + font-weight: 600 ; +} + +.side-dock-title +{ + padding-top: 15px ; + font-size: 20px ; +} + +.side-dock-ribbon-tab:hover, +.side-dock-ribbon-action:hover, +.side-dock-ribbon-action.is-active:hover, +.nav-action-button:hover, +.side-dock-collapse-btn:hover +{ + color: var(--text-a); +} + +.side-dock +{ + border-right: 0 ; +} + +.cm-s-obsidian, +.markdown-preview-view +{ + /* padding-left: 10px ; */ + padding-right: 10px ; +} + +/* vertical resize-handle */ +.workspace-split.mod-vertical > * > .workspace-leaf-resize-handle, +.workspace-split.mod-left-split > .workspace-leaf-resize-handle, +.workspace-split.mod-right-split > .workspace-leaf-resize-handle +{ + width: 1px ; + background-color: var(--dim-aqua); +} + +/* horizontal resize-handle */ +.workspace-split.mod-horizontal > * > .workspace-leaf-resize-handle +{ + height: 1px ; + background-color: var(--dim-aqua); +} + +/* Remove vertical split padding */ +.workspace-split.mod-root .workspace-split.mod-vertical .workspace-leaf-content, +.workspace-split.mod-vertical > .workspace-split, +.workspace-split.mod-vertical > .workspace-leaf, +.workspace-tabs +{ + padding-right: 0px; +} + +.markdown-embed-title +{ + font-weight: 600 ; +} + +.markdown-embed +{ + padding-left: 10px ; + padding-right: 10px ; + margin-left: 10px ; + margin-right: 10px ; +} + +.cm-header-1, +.markdown-preview-section h1 +{ + font-weight: 500 ; + font-size: 34px ; + color: var(--text-title-h1) ; +} + +.cm-header-2, +.markdown-preview-section h2 +{ + font-weight: 500 ; + font-size: 26px ; + color: var(--text-title-h2) ; +} + +.cm-header-3, +.markdown-preview-section h3 +{ + font-weight: 500 ; + font-size: 22px ; + color: var(--text-title-h3) ; +} + +.cm-header-4, +.markdown-preview-section h4 +{ + font-weight: 500 ; + font-size: 20px ; + color: var(--text-title-h4) ; +} + +.cm-header-5, +.markdown-preview-section h5 +{ + font-weight: 500 ; + font-size: 18px ; + color: var(--text-title-h5) ; +} + +.cm-header-6, +.markdown-preview-section h6 +{ + font-weight: 500 ; + font-size: 18px ; + color: var(--text-title-h6) ; +} + +.suggestion-item.is-selected +{ + background-color: var(--text-selection); +} + +.empty-state-container:hover +{ + background-color: var(--background-secondary-alt); + border: 5px solid var(--interactive-accent) ; +} + +.checkbox-container +{ + background-color: var(--interactive-before); +} + +.checkbox-container:after +{ + background-color: var(--interactive-accent); +} + +.checkbox-container.is-enabled:after +{ + background-color: var(--bg5-dark); +} + +.mod-cta +{ + color: var(--background-secondary-alt) ; + font-weight: 600 ; +} + +.mod-cta a +{ + color: var(--background-secondary-alt) ; + font-weight: 600 ; +} + +.mod-cta:hover +{ + background-color: var(--interactive-before) ; + font-weight: 600 ; +} + +.CodeMirror-cursor +{ + background-color: var(--vim-cursor) ; + opacity: 60% ; +} + +input.task-list-item-checkbox { + border: 1px solid var(--faded-blue); + appearance: none; + -webkit-appearance: none; +} + +input.task-list-item-checkbox:checked +{ + background-color: var(--faded-blue); + box-shadow: inset 0 0 0 2px var(--background-primary); +} + +::selection +{ + background-color: var(--text-selection) ; +} + +.mermaid .note +{ + fill: var(--dark3) ; +} + +.frontmatter-container { + display: none; +} + +/* Bullet point relationship lines */ +.markdown-source-view.mod-cm6 .cm-indent::before, +.markdown-rendered.show-indentation-guide li > ul::before, +.markdown-rendered.show-indentation-guide li > ol::before { + position: absolute; + border-right: 1px solid var(--dim-blue); +} diff --git a/Perlite/perlite/Demo/.obsidian/themes/ITS Theme/manifest.json b/Perlite/perlite/Demo/.obsidian/themes/ITS Theme/manifest.json new file mode 100644 index 0000000..a05266f --- /dev/null +++ b/Perlite/perlite/Demo/.obsidian/themes/ITS Theme/manifest.json @@ -0,0 +1,7 @@ +{ + "name": "ITS Theme", + "version": "1.2.11", + "minAppVersion": "0.16.0", + "author": "SlRvb", + "authorUrl": "https://github.com/SlRvb" +} \ No newline at end of file diff --git a/Perlite/perlite/Demo/.obsidian/themes/ITS Theme/theme.css b/Perlite/perlite/Demo/.obsidian/themes/ITS Theme/theme.css new file mode 100644 index 0000000..f1166a4 --- /dev/null +++ b/Perlite/perlite/Demo/.obsidian/themes/ITS Theme/theme.css @@ -0,0 +1,13514 @@ +@charset "UTF-8"; +/* @settings +name: ITS Theme Settings +id: ITS +settings: + - + id: info-text-SlRvb-ITS-Theme + type: info-text + title: "ITS Theme by SlRvb" + description: "ℹ [Guide / Docs](https://publish.obsidian.md/slrvb-docs/ITS+Theme/ITS+Theme) | ⚙ [Github](https://github.com/SlRvb/Obsidian--ITS-Theme) | ☕ [Support](https://ko-fi.com/slrvb)" + markdown: true + #- + # title: Class Test toggle + # id: minimalist-workspace + # type: class-toggle + - + title: Workspace + id: ITS-Workspace + type: heading + level: 1 + collapsed: true + - + title: Sizes + id: ITS-Sizes + type: class-select + allowEmpty: true + default: sizing-readable + options: + - + label: Readable + value: sizing-readable + - + label: Minimized + value: sizing-mini + - + label: Large + value: sizing-large + - + title: Roundness + id: radius-s + type: variable-number-slider + default: 0 + format: px + min: 0 + max: 12 + step: 1 + - + title: Resize Scrollbars + id: scrollbar-width + type: variable-number-slider + default: 12 + format: px + min: 4 + max: 15 + step: 1 + - + title: Sizing + id: ITS-Sizing + type: heading + level: 2 + collapsed: true + - + title: Note Width + id: file-line-width + type: variable-number-slider + default: 700 + format: px + min: 400 + max: 1800 + step: 100 + #- + # title: Titlebar Sizing + # id: titlebar-height + # type: variable-number-slider + # default: 40 + # format: px + # min: 20 + # max: 50 + # step: 10 + - + title: Tab Outline Height + id: tab-outline-width + type: variable-number-slider + default: 2 + format: px + min: 0 + max: 4 + step: 1 + - + title: Sidebar + id: ITS-Sizing-Sidebar + type: heading + level: 3 + collapsed: true + - + title: Sidebar Text Sizing + id: nav-item-size + type: variable-number-slider + default: 14 + format: px + min: 10 + max: 20 + step: 1 + - + title: Sidebar Tab Icon Sizing + id: sidebar-tab-icon-size + type: variable-number-slider + default: 18 + format: px + min: 10 + max: 20 + step: 1 + - + title: Sidebar Ribbon Width Sizing + id: ribbon-width + type: variable-number-slider + default: 40 + format: px + min: 20 + max: 50 + step: 5 + - + title: Notes + id: ITS-Note-Sizing + type: heading + level: 3 + collapsed: true + - + title: Note Title Size + id: file-header-font-size + type: variable-number-slider + default: 15 + format: px + min: 10 + max: 20 + step: 1 + - + title: Note Breadcrumb Title Size + id: file-header-breadcrumb-font-size + type: variable-number-slider + default: 13.5 + format: px + min: 10 + max: 20 + step: 1 + - + title: Inline Title Size + id: inline-title-font-size + type: variable-number-slider + default: 34 + format: px + min: 10 + max: 50 + step: 1 + - + title: Popover + id: ITS-Sizing-Popover + type: heading + level: 3 + collapsed: true + - + title: Popover Width + id: popover-width + type: variable-number-slider + default: 450 + format: px + min: 300 + max: 1000 + step: 100 + - + title: Popover Height + id: popover-height + type: variable-number-slider + default: 400 + format: px + min: 300 + max: 1000 + step: 100 + - + title: Settings + id: ITS-Settings + type: heading + level: 3 + collapsed: true + - + title: Settings Menu Width + id: modal-width + type: variable-number-slider + default: 90 + format: vw + min: 40 + max: 100 + step: 5 + - + title: Settings Menu Height + id: modal-height + type: variable-number-slider + default: 85 + format: vh + min: 40 + max: 100 + step: 5 + - + title: Titlebar + id: ITS-Titlebar + type: heading + level: 2 + collapsed: true + - + title: Titlebar Colors + id: titlebar-colors + type: class-toggle + - + title: Titlebar Bubbles + id: titlebar-bubbles + type: class-toggle + - + title: Tabs + id: ITS-tabs + type: heading + level: 2 + collapsed: true + - + title: Tab Widths + id: tab-widths + type: class-select + allowEmpty: true + default: none + options: + - + label: Auto + value: tab-auto + - + label: Wide + value: tab-wide + - + title: Sidebar + id: ITS-Sidebar + type: heading + level: 2 + collapsed: true + - + title: Sidebar Tabs Styling + id: ITS-Sidebar-Styling + type: class-select + allowEmpty: true + default: none + options: + - + label: Wide + value: sidebar-tabs-wide + - + label: Underline + value: sidebar-tabs-underline + - + label: Overline + value: sidebar-tabs-overline + - + label: Tabular + value: sidebar-tabs-tabular + - + title: Bottom Navbar Buttons + id: navbar-bottom + type: class-toggle + - + title: Sidebar Ribbon + id: ITS-Sidebar-Ribbon + type: heading + level: 3 + - + title: Floating Sidebar Ribbon + id: ITS-Sidebar-Ribbon-Float + type: class-select + allowEmpty: true + default: none + options: + - + label: Plain + value: sidebar-ribbon-float + - + label: Minimized + value: sidebar-ribbon-mini-float + - + title: Floating Sidebar Ribbon + id: ITS-Sidebar-Ribbon-Float-Position + type: class-select + default: sidebar-float-bottom + options: + - + label: Bottom + value: sidebar-float-bottom + - + label: Center + value: sidebar-float-center + - + label: Top + value: sidebar-float-top + + - + title: File Explorer + id: ITS-File-Explorer + type: heading + level: 2 + collapsed: true + - + title: File Explorer Styling + id: file-explorer-flat + type: class-toggle + - + title: Folder Icon + id: folder-icon + type: variable-text + default: '"\e801"' + - + title: Folder Font Family + id: folder-f + type: variable-text + default: 'its' + - + title: File Icon + id: file-icon + type: variable-text + default: '"\e800"' + - + title: Display Folder Arrow On Hover + id: folder-arrow + type: class-toggle + default: true + - + title: File Font Family + id: file-f + type: variable-text + default: 'its' + - + title: Vault Title + description: Desktop only + id: ITS-Vault-Title + type: heading + level: 2 + collapsed: true + - + title: Vault Font + description: Vault Title fonts. + id: vault-font + type: variable-text + default: "'Calisto MT', 'Palatino Black', 'Book Antiqua', 'Georgia', 'Suez One', serif" + - + title: Vault Title Size + id: vault-name-font-size + type: variable-number-slider + default: 20 + format: px + min: 10 + max: 25 + step: 1 + - + title: Vault Title Font Weight + id: vault-name-font-weight + type: variable-number-slider + format: px + default: 900 + min: 100 + max: 900 + step: 100 + - + title: Vault Title Color + id: vault-name-color + type: variable-themed-color + format: hex + default-dark: '#c14343' + default-light: '#c14343' + - + title: Hide Vault Title + id: vault-title-none + type: class-toggle + - + title: Add Vault Title Icon + id: vault-icon + type: class-toggle + - + title: Vault Image + id: vault-icon-image + type: variable-text + default: "url()" + - + title: Background Image + id: ITS-Background-Image + type: heading + level: 2 + collapsed: true + - + title: Background Image + description: Toggle to apply background image to vault + id: background-image + type: class-toggle + - + title: Background Image + id: background-image-url + type: variable-text + default: "url()" + - + title: Background Position Height + id: background-image-height + type: variable-number-slider + format: "%" + default: 50 + min: 0 + max: 100 + step: 1 + - + title: Background Position Width + id: background-image-width + type: variable-number-slider + format: "%" + default: 50 + min: 0 + max: 100 + step: 1 + - + title: Image Blur + id: background-image-blur + type: variable-number-slider + format: px + default: 11 + min: 0 + max: 20 + step: 1 + - + title: Note Opacity + id: background-image-opacity + type: variable-number-slider + format: "%" + default: 90 + min: 20 + max: 100 + step: 1 + - + title: Side Panel Opacity + id: background-image-sidebar-opacity + type: variable-number-slider + format: "%" + default: 90 + min: 20 + max: 100 + step: 1 + - + title: Minimalist Workspace + description: Hide UI elements unless hovered over. + id: ITS-Minimalist-Workspace + type: heading + level: 2 + collapsed: true + - + title: Minimalist Workspace + description: Hide everything listed below with just 1 toggle + id: minimalist-workspace + type: class-toggle + - + title: Hide Resize Handles + id: hide-resize-handle + type: class-toggle + - + title: Hide Scrollbars + id: hide-scrollbar + type: class-toggle + - + title: Hide Sidebar Ribbon + id: hide-sidebar-ribbon + type: class-toggle + - + title: Hide Sidebar Ribbon Icons + id: hide-sidebar-ribbon-icons + type: class-toggle + - + title: Hide Vault Name + id: hide-vault-name + type: class-toggle + - + title: Hide Search/File Explorer Nav Icons + id: hide-nav-header + type: class-toggle + - + title: Hide File Explorer Icons + id: hide-file-explorer-icons + type: class-toggle + - + title: Hide App Title Bar + id: hide-titlebar + type: class-toggle + - + title: Hide Status Bar + id: hide-status-bar + type: class-toggle + - + title: Hide Outline Plugin Heading Icons + id: hide-outline-heading + type: class-toggle + - + title: Hide Tabs + id: hide-titlebar-tab + type: class-toggle + - + title: Hide Tab Outline + id: hide-tab-outline + type: class-toggle + - + title: Hide Note Title Bar + id: hide-note-title + type: class-toggle + - + title: Hide Note Title Bar Icons + id: hide-note-title-icons + type: class-toggle + #- + # title: Hide Frontmatter + # id: hide-frontmatter + # type: class-toggle + - + title: Note + id: ITS-Note + type: heading + level: 1 + collapsed: true + - + title: Document + description: Emulation of microsoft document look. + id: writing-document + type: class-toggle + - + title: Paper Shadow + description: Vignette / paper burn option + id: paper + type: class-toggle + - + title: Writing + description: Minimalistic/distraction free layout design for notes. + id: writing + type: class-toggle + - + title: Text + id: ITS-Text + type: heading + level: 2 + collapsed: true +# - +# title: Note Text Size +# description: Adjust size for text in notes. +# id: font-text-size +# type: variable-number-slider +# default: 16 +# format: px +# min: 10 +# max: 20 +# step: 1 + - + title: Justify Text + description: Justify preview and editor text + id: justified + type: class-toggle + - + title: Font Ligatures + description: (Depends On Font) Text combines into symbols ie. - - > becomes -->. + id: lig + type: class-toggle + - + title: Paragraph Spacing + description: Adjust spacing size for "paragraphs". Search "spacing" for more fine tuned adjustments. + id: p-spacing + type: variable-number-slider + default: 1 + format: rem + min: 0 + max: 2 + step: 0.1 + - + title: Fonts + id: ITS-Fonts + type: heading + level: 3 + collapsed: true + - + title: Text Font + description: Changes text font for preview and edit mode. + id: default-font + type: variable-text + default: "Inter, -apple-system, BlinkMacSystemFont, 'Segoe UI', Roboto, Helvetica, Arial, sans-serif, 'Apple Color Emoji', 'Segoe UI Emoji', 'Segoe UI Symbol', 'Microsoft YaHei Light', sans-serif" + - + title: Monospace Font + id: font-monospace + type: variable-text + default: "'Fira Code Medium', 'Source Code Pro', monospace" + - + title: Comments Font + id: comment-font + type: variable-text + default: "'Fira Code Medium'" + - + title: Advanced Text Decoration + id: ITS-Text-Decoration + type: heading + level: 3 + collapsed: true + - + title: Bold Weight + id: bold-weight + type: variable-number-slider + default: 600 + min: 100 + max: 900 + step: 100 + - + title: Bold Color + id: bold-color + type: variable-themed-color + format: hex + default-dark: '#bccad8' + default-light: '#697580' + - + title: Italic Color + id: italic-color + type: variable-themed-color + format: hex + default-dark: '#bccad8' + default-light: '#697580' + - + title: Strikethrough Text Color + id: strikethrough-color + type: variable-themed-color + format: hex + default-dark: '#bccad8' + default-light: '#697580' + - + title: Strikethrough Line + id: strikethrough-line-thickness + type: variable-number-slider + default: 1 + format: px + min: 1 + max: 5 + step: 1 + - + title: Strikethrough Line Color + id: strikethrough-line-color + type: variable-themed-color + format: hex + default-dark: '#bccad8' + default-light: '#697580' + - + title: Images + id: ITS-Image + type: heading + level: 2 + collapsed: true + - + title: Live Preview Image Float + id: lp-img-float + type: class-toggle + - + title: Center Images + description: Center ALL images, excluding those with |left or |right in them. + id: img-adj-center + type: class-toggle + - + title: Clear Images + description: Push image under/over headings or horizontal lines + id: img-adj-clears + type: heading + level: 3 + collapsed: false + - + title: Image Captions with Alt Text + description: Make any alt text in image display as an image caption + id: image-caption + type: class-toggle + - + title: Horizontal Lines + description: Push image under/over any horizontal lines + id: clear-hr + type: class-toggle + - + title: Headings + description: Push image under/over all headings 1-6 + id: clear-headings + type: class-toggle + - + title: Heading Specific + description: Push image under/over some headings and not others + id: img-adj-clears-headings + type: heading + level: 4 + collapsed: true + - + title: Header 1 + id: clear-heading-1 + type: class-toggle + - + title: Header 2 + id: clear-heading-2 + type: class-toggle + - + title: Header 3 + id: clear-heading-3 + type: class-toggle + - + title: Header 4 + id: clear-heading-4 + type: class-toggle + - + title: Header 5 + id: clear-heading-5 + type: class-toggle + - + title: Header 6 + id: clear-heading-6 + type: class-toggle + - + title: Note Title + id: ITS-Note-Title + type: heading + level: 2 + collapsed: true + - + title: Note Title Styling + id: ITS-Note-Title-Styling + type: class-select + allowEmpty: true + default: none + options: + - + label: Note Title Gradient + value: file-header-gradient + - + label: Note Title Underline + value: note-title-underline + - + label: Note Title Overline + value: note-title-overline + - + title: Inline Title Styling + id: Inline-Title-Styling + type: class-select + allowEmpty: true + default: Heading + options: + - + label: Heading + value: inline-title-style-heading + - + label: Text + value: inline-title-style-text + - + title: Inline Title Specifics + id: ITS-Inline-Title + type: heading + level: 3 + collapsed: true + - + title: Inline Title Sizes + id: Inline-Title-Sizes + type: class-select + allowEmpty: true + default: none + options: + - + label: Small + value: inline-title-small + - + label: Medium + value: inline-title-medium + - + label: Large + value: inline-title-large + - + title: Inline Title Fonts + id: inline-title-font + type: variable-text + default: 'Calisto MT' + - + title: Inline Title Font Weights + id: inline-title-weight + type: variable-number-slider + default: 700 + min: 100 + max: 900 + step: 100 + - + title: Inline Title Positions + id: Inline-Title-Positions + type: class-select + allowEmpty: true + default: none + options: + - + label: Left + value: inline-title-position-left + - + label: Center + value: inline-title-position-center + - + label: Right + value: inline-title-position-right + - + title: Headers + id: ITS-Headers + type: heading + level: 2 + collapsed: true + - + title: Headings + description: Heading and Vault Title fonts. + id: font + type: variable-text + default: "'Calisto MT', 'Palatino Black', 'Book Antiqua', 'Georgia', 'Suez One', serif" + - + title: Header Font Weights + id: header-weight + type: variable-number-slider + default: 700 + min: 100 + max: 900 + step: 100 + - + title: Header Underline Height + id: header-border-line-height + type: variable-number-slider + default: 4 + format: px + min: 0 + max: 8 + step: 1 + - + title: Heading Spacing + description: Adjust header spacing + id: heading-spacing + type: variable-number-slider + default: 10 + format: px + min: 0 + max: 50 + step: 10 + - + title: Header Positions + id: ITS-Header-positions + type: class-select + allowEmpty: true + default: none + options: + - + label: Left + value: headings-left + - + label: Center + value: headings-center + - + label: Right + value: headings-right + - + title: Hide Header Underline + description: Hide ALL header underlines. + id: hide-header-underline + type: class-toggle + - + title: Heading Indicators + id: heading-indicator + type: class-toggle + - + title: Heading Styles + description: Heading styling. + id: ITS-Header-Styles + type: heading + level: 3 + collapsed: false + - + title: Center Header With Lines + description: Center ALL headings with lines on either side + id: hcl + type: class-toggle + - + title: Header Color Override + description: Header color always applied over other markdown in the header + id: heading-color-override + type: class-toggle + - + title: Illusion Theme Inspired Headings + id: illusion + type: class-toggle + - + title: Advanced Heading Options + id: ITS-Advanced-Header + type: heading + level: 3 + collapsed: true + - + title: Heading Top Spacing + description: Adjust header spacing above the header + id: heading-spacing-top + type: variable-number-slider + default: 10 + format: px + min: 0 + max: 50 + step: 10 + - + title: Heading Bottom Spacing + description: Adjust header spacing below the header + id: heading-spacing-bottom + type: variable-number-slider + default: 10 + format: px + min: 0 + max: 50 + step: 10 + - + title: Header Font + id: ITS-Header-Fonts + type: heading + level: 4 + collapsed: true + - + title: Heading 1 + id: h1-font + type: variable-text + default: '"Calisto MT"' + - + title: Heading 2 + id: h2-font + type: variable-text + default: '"Calisto MT"' + - + title: Heading 3 + id: h3-font + type: variable-text + default: '"Calisto MT"' + - + title: Heading 4 + id: h4-font + type: variable-text + default: '"Calisto MT"' + - + title: Heading 5 + id: h5-font + type: variable-text + default: '"Calisto MT"' + - + title: Heading 6 + id: h6-font + type: variable-text + default: '"Calisto MT"' + - + title: Header Font Size + id: ITS-Header-Font-Size + type: heading + level: 4 + collapsed: true + - + title: Heading 1 + id: h1-size + type: variable-number-slider + default: 34 + format: px + min: 12 + max: 40 + step: 2 + - + title: Heading 2 + id: h2-size + type: variable-number-slider + default: 30 + format: px + min: 12 + max: 40 + step: 2 + - + title: Heading 3 + id: h3-size + type: variable-number-slider + default: 26 + format: px + min: 12 + max: 40 + step: 2 + - + title: Heading 4 + id: h4-size + type: variable-number-slider + default: 24 + format: px + min: 12 + max: 40 + step: 2 + - + title: Heading 5 + id: h5-size + type: variable-number-slider + default: 20 + format: px + min: 12 + max: 40 + step: 2 + - + title: Heading 6 + id: h6-size + type: variable-number-slider + default: 18 + format: px + min: 12 + max: 40 + step: 2 + - + title: Header Colors + id: ITS-Header-Colors + type: heading + level: 4 + collapsed: true + - + title: Heading 1 Color + id: h1-color + type: variable-themed-color + format: hex + default-dark: '#c14343' + default-light: '#c14343' + - + title: Heading 2 Color + id: h2-color + type: variable-themed-color + format: hex + default-dark: '#c14343' + default-light: '#c14343' + - + title: Heading 3 Color + id: h3-color + type: variable-themed-color + format: hex + default-dark: '#c14343' + default-light: '#c14343' + - + title: Heading 4 Color + id: h4-color + type: variable-themed-color + format: hex + default-dark: '#c14343' + default-light: '#c14343' + - + title: Heading 5 Color + id: h5-color + type: variable-themed-color + format: hex + default-dark: '#c14343' + default-light: '#c14343' + - + title: Heading 6 Color + id: h6-color + type: variable-themed-color + format: hex + default-dark: '#c14343' + default-light: '#c14343' + - + title: Header Alignment + id: ITS-Header-Alignment + type: heading + level: 4 + collapsed: true + - + title: Heading 1 + id: h1-text-align + type: variable-select + allowEmpty: true + default: left + options: + - left + - center + - right + - + title: Heading 2 + id: h2-text-align + type: variable-select + allowEmpty: true + default: left + options: + - left + - center + - right + - + title: Heading 3 + id: h3-text-align + type: variable-select + allowEmpty: true + default: left + options: + - left + - center + - right + - + title: Heading 4 + id: h4-text-align + type: variable-select + allowEmpty: true + default: left + options: + - left + - center + - right + - + title: Heading 5 + id: h5-text-align + type: variable-select + allowEmpty: true + default: left + options: + - left + - center + - right + - + title: Heading 6 + id: h6-text-align + type: variable-select + allowEmpty: true + default: left + options: + - left + - center + - right + - + title: Illusion Headings Specifics + id: ITS-illusion-headers + type: heading + level: 4 + collapsed: true + - + title: Illusion Heading 1 + id: illusion-h1 + type: class-toggle + - + title: Illusion Heading 2 + id: illusion-h2 + type: class-toggle + - + title: Illusion Heading 3 + id: illusion-h3 + type: class-toggle + - + title: Illusion Heading 4 + id: illusion-h4 + type: class-toggle + - + title: Illusion Heading 5 + id: illusion-h5 + type: class-toggle + - + title: Illusion Heading 6 + id: illusion-h6 + type: class-toggle + - + title: Advanced Heading Underlines + description: Specific adjustments to heading underlines. + id: ITS-Advanced-Header-Underlines + type: heading + level: 3 + collapsed: true + - + title: Underline Height + description: Resize specific heading underlines heights. + id: ITS-Header-Underlines-Height-Specific + type: heading + level: 5 + collapsed: true + - + title: H1 Underline Height + id: h1-border-line-height + type: variable-number-slider + default: 4 + format: px + min: 0 + max: 6 + step: 1 + - + title: H2 Underline Height + id: h2-border-line-height + type: variable-number-slider + default: 4 + format: px + min: 0 + max: 6 + step: 1 + - + title: H3 Underline Height + id: h3-border-line-height + type: variable-number-slider + default: 4 + format: px + min: 0 + max: 6 + step: 1 + - + title: H4 Underline Height + id: h4-border-line-height + type: variable-number-slider + default: 4 + format: px + min: 0 + max: 6 + step: 1 + - + title: H5 Underline Height + id: h5-border-line-height + type: variable-number-slider + default: 4 + format: px + min: 0 + max: 6 + step: 1 + - + title: H6 Underline Height + id: h6-border-line-height + type: variable-number-slider + default: 4 + format: px + min: 0 + max: 6 + step: 1 + - + title: Underline Width + description: Resize specific heading underlines widths. + id: ITS-Header-Underlines-Width-Specific + type: heading + level: 5 + collapsed: true + - + title: H1 Underline Width + id: h1-border-line-width + type: variable-number-slider + default: 100 + format: "%" + min: 0 + max: 100 + step: 10 + - + title: H2 Underline Width + id: h2-border-line-width + type: variable-number-slider + default: 85 + format: "%" + min: 0 + max: 100 + step: 10 + - + title: H3 Underline Width + id: h3-border-line-width + type: variable-number-slider + default: 65 + format: "%" + min: 0 + max: 100 + step: 10 + - + title: H4 Underline Width + id: h4-border-line-width + type: variable-number-slider + default: 44 + format: "%" + min: 0 + max: 100 + step: 10 + - + title: H5 Underline Width + id: h5-border-line-width + type: variable-number-slider + default: 25 + format: "%" + min: 0 + max: 100 + step: 10 + - + title: H6 Underline Width + id: h6-border-line-width + type: variable-number-slider + default: 0 + format: "%" + min: 0 + max: 100 + step: 10 + - + title: Hide Underlines + description: Remove specific heading underlines. + id: ITS-Header-Underlines-Hide-Specific + type: heading + level: 5 + collapsed: true + - + title: Hide H1 Underline + id: hide-header-underline-1 + type: class-toggle + default: false + - + title: Hide H2 Underline + id: hide-header-underline-2 + type: class-toggle + default: false + - + title: Hide H3 Underline + id: hide-header-underline-3 + type: class-toggle + default: false + - + title: Hide H4 Underline + id: hide-header-underline-4 + type: class-toggle + default: false + - + title: Hide H5 Underline + id: hide-header-underline-5 + type: class-toggle + default: false + - + title: Hide H6 Underline + id: hide-header-underline-6 + type: class-toggle + default: false + - + title: Underline Colors + description: Change colors for specific heading underlines. + id: ITS-Header-Underlines-Colors-Specific + type: heading + level: 5 + collapsed: true + - + title: Heading 1 Line Color + id: h1-border-line-color + type: variable-themed-color + format: hex + default-dark: '#912e2e' + default-light: '#bb5555' + - + title: Heading 2 Line Color + id: h2-border-line-color + type: variable-themed-color + format: hex + default-dark: '#c14343' + default-light: '#c14343' + - + title: Heading 3 Line Color + id: h3-border-line-color + type: variable-themed-color + format: hex + default-dark: '#bf5e5e' + default-light: '#ce6d6d' + - + title: Heading 4 Line Color + id: h4-border-line-color + type: variable-themed-color + format: hex + default-dark: '#61afef' + default-light: '#5599d0' + - + title: Heading 5 Line Color + id: h5-border-line-color + type: variable-themed-color + format: hex + default-dark: '#2f3b4d' + default-light: '#b5c2d8' + - + title: Heading 6 Line Color + id: h6-border-line-color + type: variable-themed-color + format: hex + default-dark: '#2a2e35' + default-light: '#ccd6eb' + - + title: Links + id: ITS-Links + type: heading + level: 2 + collapsed: true + - + title: Link Style + id: link-style + type: class-select + allowEmpty: true + default: none + options: + - + label: Underline + value: link-underline + - + label: Notion Style + value: link-notion + - + label: All Caps + value: link-caps + - + title: Link Font + id: link-font + type: variable-text + default: '"Inter"' + - + title: Exernal Links Font + id: link-external-font + type: variable-text + default: '"Inter"' + - + title: Link Font Weights + id: link-weight + type: variable-number-slider + default: 500 + min: 100 + max: 900 + step: 100 + - + title: Lists + id: ITS-Lists + type: heading + level: 2 + collapsed: true + - + title: Default Bullet Disc Shape + id: list-default-bullet + type: class-toggle + - + title: Colorful Bullet Color + description: Toggle on to use colorful bullets + id: list-bullet-color + type: class-toggle + - + title: Colorful Bullet Lines + description: Toggle on to use colorful bullet lines + id: list-lines-color + type: class-toggle + - + title: Neon Lines + description: Toggle on for lines to have a neon glow effect + id: list-neon + type: class-toggle + - + title: Lists / Bullet Adjustments + id: ITS-Lists-Lines + type: heading + level: 3 + collapsed: true + - + title: Bullet Shape + description: Add quotes around your new bullet. For example "~" + id: bullet + type: variable-text + default: '⬥' + - + title: Bullet Shape Font + id: bullet-font + type: variable-text + default: '"ITS"' + - + title: List Line Width + id: indentation-guide-width + type: variable-number-slider + default: 2 + format: px + min: 0 + max: 3 + step: 1 + - + title: List Root Spacing + id: root-list-spacing + description: Adjust list margins (ul, ol) + type: variable-number-slider + default: 10 + format: px + min: 1 + max: 16 + step: 1 + - + title: List Spacing + description: Adjust list item spacing (li) + id: list-spacing + type: variable-number-slider + default: 1 + format: px + min: 1 + max: 16 + step: 1 + - + title: Original Bullet Lines + description: Lines appear beside bullet + id: list-bullet-side-lines + type: class-toggle + - + title: Alternate Indentation Style + id: alternate-indent + type: class-toggle + - + title: Checkboxes + id: Checkboxes + type: heading + level: 2 + collapsed: true + - + title: Disable Alternate Checkboxes + id: alt-chkbx-off + type: class-toggle + - + title: Colorful Task Text + description: Add color to the text of the task. + id: check-color + type: class-toggle + default: true + - + title: Colorful Task Backgrounds + description: Add color to the background of the task. + id: check-bg + type: class-toggle + default: true + - + title: Normal Task Text + description: Reapply regular text color and font weight to the text of the task. + id: check-text + type: class-toggle + - + title: Restore Checkbox Strike + id: chkbx-strike + type: class-toggle + - + title: Advanced Checkbox Strike + description: Strike for specific checkbox types. + id: Checkbox-Strike-Specific + type: heading + level: 5 + collapsed: true + - + title: "[x] Regular" + id: checkbox-strike-regular + type: class-toggle + - + title: "[X] Checked" + id: checkbox-strike-checked + type: class-toggle + - + title: "[-] Dropped" + id: checkbox-strike-dropped + type: class-toggle + - + title: "[>] Forward" + id: checkbox-strike-frwd + type: class-toggle + - + title: "[D] Defer / Date" + id: checkbox-strike-date + type: class-toggle + - + title: "[?] Question" + id: checkbox-strike-q + type: class-toggle + - + title: "[/] Half" + id: checkbox-strike-half + type: class-toggle + - + title: "[+] Add" + id: checkbox-strike-add + type: class-toggle + - + title: "[R] Research" + id: checkbox-strike-rsrch + type: class-toggle + - + title: "[!] Important" + id: checkbox-strike-imp + type: class-toggle + - + title: "[i] Idea" + id: checkbox-strike-idea + type: class-toggle + - + title: "[B] Brainstorm" + id: checkbox-strike-brn + type: class-toggle + - + title: "[P] Pro" + id: checkbox-strike-pro + type: class-toggle + - + title: "[C] Con" + id: checkbox-strike-con + type: class-toggle + - + title: "[Q] Quote" + id: checkbox-strike-quot + type: class-toggle + - + title: "[N] Note" + id: checkbox-strike-brn + type: class-toggle + - + title: "[b] Bookmark" + id: checkbox-strike-book + type: class-toggle + - + title: "[I] Info" + id: checkbox-strike-info + type: class-toggle + - + title: "[p] Paraphrase" + id: checkbox-strike-para + type: class-toggle + - + title: Callouts + id: ITS-Callouts + type: heading + level: 2 + collapsed: true + - + title: Original Callout Styling + description: Pre Obsidian v1 Callout Styling + id: callout-original + type: class-toggle + - + title: Block Callout Styling + id: callout-block + type: class-toggle + - + title: Outline Callout Styling + id: callout-outline + type: class-toggle + - + title: Disable ITS Quote Callout Styling + id: default-callout-quote + type: class-toggle + - + title: Tags + id: Tags + type: heading + level: 2 + collapsed: true + - + title: Colored Text Tags + description: Tags appear as just colored text, no background color. + id: tag-text + type: class-toggle + - + title: Tag Radius Style + id: ITS-Tag-Style + type: class-select + allowEmpty: true + default: none + options: + - + label: Bubble Tags + value: tag-bubble + - + label: Notion Tags + value: tag-notion + - + title: Outline Tags + id: tag-outline + type: class-toggle + - + title: Tag Outline Border Size + id: tag-border-width + type: variable-number-slider + default: 2 + format: px + min: 1 + max: 4 + step: 1 + - + title: Tag Font + id: tag-font + type: variable-text + default: '"Inter"' + - + title: Tables + id: ITS-Tables + type: heading + level: 2 + collapsed: true + - + title: Alternating Background Colors + id: ITS-Table-Alt-Colors + type: class-select + allowEmpty: true + default: none + options: + - + label: Original Alternating Background + value: tables-alt-original + - + label: No Alternating Backgrounds + value: tables-no-alt-background + - + label: No Alt Column Background + value: tables-no-alt-column-background + - + label: No Alt Row Background + value: tables-no-alt-row-background + - + title: Table Styling + id: ITS-Table-Styling + type: class-select + allowEmpty: true + default: none + options: + - + label: Add Table Borders + value: tables-borders + - + label: Dark and Bold First Column + value: table + - + label: Wikipedia + value: tables-style-wikipedia + - + title: Center Tables + description: Center tables to middle of page + id: tables-center + type: class-toggle + - + title: Wide Table + description: Tables widened to touch ends of the page + id: tables-wide + type: class-toggle + - + title: Disable Row Hover Highlight + id: tables-no-hover + type: class-toggle + - + title: Table Header Adjustments + id: ITS-Table-Header-Adj + type: heading + level: 3 + collapsed: true + - + title: Table Header Height Padding + id: table-header-padding-y + type: variable-number-slider + format: px + default: 4 + min: 0 + max: 20 + step: 1 + - + title: Table Header Width Padding + id: table-header-padding-x + type: variable-number-slider + format: px + default: 10 + min: 0 + max: 20 + step: 1 + - + title: Table Header Font Size + id: table-header-size + type: variable-number-slider + format: px + default: 16 + min: 12 + max: 30 + step: 1 + - + title: Table Header Font Weight + id: table-header-weight + type: variable-number-slider + default: 800 + min: 100 + max: 900 + step: 100 + - + title: Table Cell Adjustments + id: ITS-Table-Cell-Adj + type: heading + level: 3 + collapsed: true + - + title: Table Cell Height Padding + id: table-cell-padding-y + type: variable-number-slider + format: px + default: 4 + min: 0 + max: 20 + step: 1 + - + title: Table Cell Width Padding + id: table-cell-padding-x + type: variable-number-slider + format: px + default: 10 + min: 0 + max: 20 + step: 1 + - + title: Table Cell Font Size + id: table-text-size + type: variable-number-slider + format: px + default: 16 + min: 12 + max: 30 + step: 1 + #- + # title: Table Cell Font Weight + # id: table-text-weight + # type: variable-number-slider + # default: 500 + # min: 100 + # max: 900 + # step: 100 + - + title: Horizontal Line + id: ITS-HR-Line + type: heading + level: 2 + collapsed: true + - + title: Horizontal Line Centered Vertically + id: hr-center-vertically + type: class-toggle + - + title: Horizontal Line Height + id: hr-thickness + type: variable-number-slider + default: 2 + format: px + min: 0 + max: 5 + step: 1 + - + title: Horizontal Line Width + id: hr-width + type: variable-number-slider + default: 100 + format: "%" + min: 0 + max: 100 + step: 10 + - + title: No Horizontal Line Symbol + description: Hide the horizontal Line Symbol entirely + id: hr-no-icon + type: class-toggle + - + title: Horizontal Line Symbol + id: ITS-HR-Line-Symbol + type: heading + level: 3 + collapsed: true + - + title: Horizontal Line Symbol + description: Add quotations around symbol ("⚡"). Use the codepoint for symbols from supported font icons ("\e800"). + id: hr-icon-symbol + type: variable-text + default: '"⚡"' + - + title: Horizontal Line Symbol Fonts + description: Font Icons. Default font aligns emojis. + id: hr-icon-font + type: variable-select + default: its + options: + - its + - Material Icons Sharp + - remixicon + - fa5 + - default-font + - + title: Horizontal Line Symbol Padding + id: hr-icon-padding-x + type: variable-number-slider + default: 4 + format: px + min: 0 + max: 10 + step: 1 + - + title: Embeds + id: ITS-Embeds + type: heading + level: 2 + collapsed: true + - + title: Clean Embeds + description: Embeds that look like they're part of the note. + id: embed-clean + type: class-toggle + - + title: Dark Background Embeds + id: embed-dark-background + type: class-toggle + - + title: Embed Heading Minified + description: Shrink embed headers + id: embed-mini-headers + type: class-toggle + - + title: Canvas + id: ITS-Canvas + type: heading + level: 2 + collapsed: true + - + title: Canvas Cards Styling + id: canvas-cards + type: class-toggle + - + title: Canvas Arrow Coloful Text + id: canvas-arrow-text-color + description: Make text on canvas arrows match the color of the arrows + type: class-toggle + - + title: Canvas Card Background Color Brightness + id: canvas-color-opacity + type: variable-number-slider + default: 0.07 + format: '' + min: 0.04 + max: 0.18 + step: .02 + - + title: Properties / Metadata + id: ITS-Metadata + type: heading + level: 2 + collapsed: true + - + title: Metadata Key Font Size + id: metadata-label-font-size + type: variable-number-slider + default: .9 + format: em + min: .4 + max: 1.5 + step: .1 + - + title: Metadata Value Font Size + id: metadata-input-font-size + type: variable-number-slider + default: .9 + format: em + min: .4 + max: 1.5 + step: .1 + - + title: Metadata Key Width + id: metadata-label-width + type: variable-number-slider + default: 9 + format: em + min: 8 + max: 15 + step: 1 + - + title: Metadata Colorful Label Styling + id: select + type: class-select + allowEmpty: true + default: none + options: + - + label: Text Color + value: metadata-label-text-color + - + label: Label Background + value: metadata-label-background + - + title: Metadata Value Background + id: metadata-value-background + type: class-toggle + - + title: Metadata Title Positions + id: metadata-title-align + type: variable-select + allowEmpty: true + default: center + options: + - left + - center + - right + - + title: Metadata Title No Icon + id: metadata-title-no-icon + type: class-toggle + - + title: Colors + id: ITS-Colors + type: heading + level: 1 + collapsed: true + - + title: Text + id: ITS-Colors-Text + type: heading + level: 2 + collapsed: true + - + title: Text + id: text + type: variable-themed-color + format: hex + default-dark: '#bccad8' + default-light: '#697580' + - + title: Soft Text + id: soft-text + type: variable-themed-color + format: hex + default-dark: '#aab3ca' + default-light: '#d04e4e' + - + title: Faint Text + id: text-faint + type: variable-themed-color + format: hex + default-dark: '#4e5b6f' + default-light: '#4e5b6f' + - + title: File Explorer Titles + description: File/Folder text color. + id: nav-item-color + type: variable-themed-color + format: hex + default-dark: '#aab3ca' + default-light: '#7e8ea3' + - + title: "`` Text" + description: "Html `` text color." + id: i-at + type: variable-themed-color + format: hex + default-dark: '#bf5e5e' + default-light: '#c14343' + - + title: Workspace + description: Recolor some UI colors + id: Workspace-Colors + type: heading + level: 2 + collapsed: true + - + title: Note + description: Note and sidebar colors. + id: note + type: variable-themed-color + format: hex + default-dark: '#1a1e24' + default-light: '#f8fbff' + - + title: Outer Sidebar + id: outer-bar + type: variable-themed-color + format: hex + default-dark: '#0e0f15' + default-light: '#dfe7ef' + - + title: Sidebar + description: Change only sidebar, right settings pane colors. + id: side-bar + type: variable-themed-color + format: hex + default-dark: '#1a1e24' + default-light: '#f8fbff' + - + title: Dark Sidebar + description: Left settings bar, background, graph background, and pane separator colors. + id: dark-sidebar + type: variable-themed-color + format: hex + default-dark: '#10161d' + default-light: '#7e8ea3' + - + title: UI Elements + id: Workspace-Colors-Elements + type: heading + level: 3 + - + title: Button + id: bttn + type: variable-themed-color + format: hex + default-dark: '#7c2929' + default-light: '#c24747' + - + title: Sidebar Active Icon Color + id: sidebar-icon-color-active + type: variable-themed-color + format: hex + default-dark: '#e5ebee' + default-light: '#e5ebee' + - + title: Sidebar Hover Background Color + id: nav-item-background-hover + type: variable-themed-color + format: hex + default-dark: '#7c2929' + default-light: '#c24747' + - + title: File Icon + description: File icon color. + id: file-icon-color + type: variable-themed-color + format: hex + default-dark: '#586477' + default-light: '#a6bbde' + - + title: Folder Icon + description: Folder icon color. + id: folder + type: variable-themed-color + format: hex + default-dark: '#883737' + default-light: '#c14343' + - + title: Folder Icon Open + description: Open folder icon color. + id: folder-open + type: variable-themed-color + format: hex + default-dark: '#e05858' + default-light: '#ce6d6d' + - + title: Scrollbar FG Color + description: Scrollbar thumb/foreground color + id: scrollbar-thumb-bg + type: variable-themed-color + format: hex + opacity: true + default-dark: '#863737' + default-light: 'rgba(134, 173, 218, 0.157)' + - + title: Tab Stack Shadow + id: tab-stacked-shadow-color + type: variable-themed-color + format: rgba + opacity: true + default-dark: '#001c4a15' + default-light: '#001c4a15' + - + title: Popover Background Color + id: popover-background + type: variable-themed-color + format: rgb + default-dark: '#1a1e24' + default-light: '#f8fbff' + - + title: Note Elements + id: Note-Element-Colors + type: heading + level: 2 + collapsed: true + - + title: Headers / Headings + id: ITS-Colors-Headings + type: heading + level: 3 + - + title: Headings + description: Heading (Vault, etc) Color + id: headers + type: variable-themed-color + format: hex + default-dark: '#c14343' + default-light: '#d04e4e' + - + title: Tags + id: ITS-Colors-Tags + type: heading + level: 3 + - + title: Tag Background + id: tag + type: variable-themed-color + format: hex + default-dark: '#571a1a' + default-light: '#c65656' + - + title: Tag Text Color + id: tag-color + type: variable-themed-color + format: hex + default-dark: '#e5ebee' + default-light: '#e5ebee' + - + title: Lists + id: ITS-Colors-Lists + type: heading + level: 3 + - + title: Bullet Color + id: list-marker-color + type: variable-themed-color + format: hex + default-dark: '#883737' + default-light: '#c14343' + - + title: Number Color + id: list-numbered-color + type: variable-themed-color + format: hex + default-dark: '#883737' + default-light: '#c14343' + - + title: List Line Color + id: indentation-guide-color + type: variable-themed-color + format: hex + default-dark: '#283846' + default-light: '#ccd6eb' + - + title: Blockquote + id: ITS-Colors-Blockquotes + type: heading + level: 3 + - + title: Embed/Blockquote + description: Embed/Blockquote color. + id: embed-bg + type: variable-themed-color + format: hex + default-dark: '#10161d' + default-light: '#f1f5ff' + - + title: Blockquote Border + description: Blockquote Border color. + id: blockquote-border-color + type: variable-themed-color + format: hex + default-dark: '#252c36' + default-light: '#dde4ef' + - + title: Code + id: ITS-Colors-Code + type: heading + level: 3 + - + title: Code Background + id: code-bg + type: variable-themed-color + format: hex + default-dark: '#232831' + default-light: '#eef6ff' + - + title: Code Text + id: code-text + type: variable-themed-color + format: hex + default-dark: '#fa4545' + default-light: '#ea4262' + - + title: Horizontal Line + id: ITS-Colors-HR + type: heading + level: 3 + - + title: HR Border Line + id: hr + type: variable-themed-color + format: hex + default-dark: '#3c5274' + default-light: '#d6deea' + - + title: HR Icon + id: hr-icon-color + type: variable-themed-color + format: hex + default-dark: '#883737' + default-light: '#c14343' + - + title: Progress Bar + id: ITS-Colors-Progress-Bar + type: heading + level: 3 + - + title: Progress Bar Value Color + description: HTML value color + id: progress + type: variable-themed-color + format: hex + default-dark: '#863737' + default-light: '#912e2e' + - + title: Progress Bar Background Color + description: HTML value color + id: progress + type: variable-themed-color + format: hex + default-dark: '#252c36' + default-light: '#e1e9f6' + - + title: Tables + id: ITS-Colors-Tables + type: heading + level: 3 + - + title: Table Header BG Color + id: th + type: variable-themed-color + format: hex + default-dark: '#652121' + default-light: '#c14343' + - + title: Table Header Text Color + id: th-text + type: variable-themed-color + format: hex + default-dark: '#e5ebee' + default-light: '#e5ebee' + - + title: Table Header Text Edit Color + id: table-header-text-color + type: variable-themed-color + format: hex + default-dark: '#e06c75' + default-light: '#a35158' + - + title: Table Alt Row Colors + description: Alternating row/column color for table. + id: td + type: variable-themed-color + format: rgb + opacity: true + default-dark: '#06080c60' + default-light: '#d0ddef62' + - + title: Table Border Line Colors + id: table-border-color + type: variable-themed-color + format: hex + default-dark: '#3c5274' + default-light: '#d6deea' + - + title: Other Elements + id: ITS-Colors-Others + type: heading + level: 3 + - + title: Comments + id: code-comment + type: variable-themed-color + format: hex + default-dark: '#4e5b6f' + default-light: '#4e5b6f' + - + title: Footnotes + id: footnote + type: variable-themed-color + format: hex + default-dark: '#6e7e89' + default-light: '#8996a0' + - + title: Aside Background Color + id: aside-bg + description: Aside background color and dark theme setting alternating setting item color. + type: variable-themed-color + format: hex + default-dark: '#11151d' + default-light: '#f1f5ff' + - + title: Other + id: Other-Colors + type: heading + level: 2 + collapsed: true + - + title: Accent + id: accent + type: variable-themed-color + format: hex + default-dark: '#883737' + default-light: '#c14343' + - + title: Lite Accent + id: lite-accent + type: variable-themed-color + format: hex + default-dark: '#e06c75' + default-light: '#a35158' + - + title: Accent 2 + id: accent2 + type: variable-themed-color + format: hex + default-dark: '#3c5274' + default-light: '#d6deea' + - + title: Lite Accent 2 + description: Link color. + id: accent2-lite + type: variable-themed-color + format: hex + default-dark: '#61afef' + default-light: '#5599d0' + - + title: Dark Accent + id: dark-accent + type: variable-themed-color + format: hex + default-dark: '#652121' + default-light: '#c35c5c' + - + title: Deep Dark Accent + id: deep-dark-accent + type: variable-themed-color + format: hex + default-dark: '#3f1010' + default-light: '#2f1010' + - + title: Inactive + description: Inactive note; file text; unresolved and external link, editor and external link hover; and mermaid text color. + id: inactive + type: variable-themed-color + format: hex + default-dark: '#586477' + default-light: '#a6bbde' + - + title: Background + description: Scrollbar background color + id: bg + type: variable-themed-color + format: hex + default-dark: '#252c36' + default-light: '#dde4ef' + - + title: Lines + description: Explorer, heading, input box, settings, frontmatter, and mermaidjs lines + id: lines + type: variable-themed-color + format: hex + default-dark: '#283846' + default-light: '#ccd6eb' + - + title: Outline + id: outline + type: variable-themed-color + format: hex + default-dark: '#cfd7dd' + default-light: '#912e2e' + - + title: Foreground + description: Active file selected title color, Graph Node Color, Kanban Plugin Button color. + id: fg + type: variable-themed-color + format: hex + default-dark: '#cfd7dd' + default-light: '#912e2e' + - + title: Rainbows + id: ITS-Rainbows + type: heading + level: 2 + collapsed: true + - + title: Theme Rainbows + description: Illusion Header BG, Style Settings Colors, List Lines + id: ITS-Rainbows-Theme + type: heading + level: 3 + collapsed: true + - + title: Theme Rainbow 1 + id: theme-rainbow-1 + type: variable-themed-color + format: hex + default-dark: '#7c2929' + default-light: '#bb5555' + - + title: Theme Rainbow 2 + id: theme-rainbow-2 + type: variable-themed-color + format: hex + default-dark: '#652121' + default-light: '#a53f3f' + - + title: Theme Rainbow 3 + id: theme-rainbow-3 + type: variable-themed-color + format: hex + default-dark: '#471d1d' + default-light: '#862c2c' + - + title: Theme Rainbow 4 + id: theme-rainbow-4 + type: variable-themed-color + format: hex + default-dark: '#381919' + default-light: '#662828' + - + title: Theme Rainbow 5 + id: theme-rainbow-5 + type: variable-themed-color + format: hex + default-dark: '#424c61' + default-light: '#697795' + - + title: Theme Rainbow 6 + id: theme-rainbow-6 + type: variable-themed-color + format: hex + default-dark: '#2e333d' + default-light: '#a4aec2' + - + title: Rainbow + id: ITS-Rainbows-Rainbow + type: heading + level: 3 + - + title: Rainbow 1 + id: theme-rainbow-1 + type: variable-themed-color + format: hex + default-dark: '#b03a3a' + default-light: '#dd3c3c' + - + title: Rainbow 2 + id: theme-rainbow-2 + type: variable-themed-color + format: hex + default-dark: '#d59929' + default-light: '#f1ab27' + - + title: Rainbow 3 + id: theme-rainbow-3 + type: variable-themed-color + format: hex + default-dark: '#207a20' + default-light: '#118811' + - + title: Rainbow 4 + id: theme-rainbow-4 + type: variable-themed-color + format: hex + default-dark: '#3232c5' + default-light: '#3333cc' + - + title: Rainbow 5 + id: theme-rainbow-5 + type: variable-themed-color + format: hex + default-dark: '#7f307f' + default-light: '#a824a8' + - + title: Rainbow 6 + id: theme-rainbow-6 + type: variable-themed-color + format: hex + default-dark: '#dd4794' + default-light: '#e83b94' + - + title: Highlights + id: RGBA + type: heading + level: 2 + collapsed: true + - + title: Text Highlight + description: Markdown mark highlight color. + id: text-highlight-bg + type: variable-themed-color + format: rgb + opacity: true + default-dark: '#7a141466' + default-light: 'rgba(229, 149, 149, 0.37)' + - + title: Text Selection + description: Cursor selection highlight color. + id: highlight + type: variable-themed-color + format: rgb + opacity: true + default-dark: '#7a141466' + default-light: 'rgba(229, 149, 149, 0.37)' + - + title: Search Highlight + id: text-highlight-bg-active + type: variable-themed-color + format: rgb + opacity: true + default-dark: '#fd737340' + default-light: '#fd737340' + - + title: Hover Color + id: hvr + type: variable-themed-color + format: rgb + opacity: true + default-dark: 'rgba(168, 60, 60, 0.4)' + default-light: 'rgba(255, 0, 0, 0.212)' + - + title: Hover Active color + id: hvr-active + type: variable-themed-color + format: rgb + opacity: true + default-dark: 'rgba(212, 47, 47, 0.4)' + default-light: 'rgba(253, 115, 115, 0.4)' + #- + # title: Search 2 + # description: Search match highlight and background transparent color for settings. + # id: background-modifier-form-field-highlighted + # type: variable-themed-color + # format: rgb + # opacity: true + # default-dark: '#347bed22' + # default-light: '#f0838322' + #- + # title: Text Selection + # description: Cursor dragged highlights + # id: text-selection + # type: variable-themed-color + # format: rgb + # opacity: true + # default-dark: '#4d171746' + # default-light: '#e5959537' + - + title: Graph Colors + id: Graph + type: heading + level: 2 + collapsed: true + - + title: Graph Background + id: graph-bg + type: variable-themed-color + format: hex + default-dark: '#0b0f13' + default-light: '#eef3fd' + - + title: Graph Lines + id: graph-lines + type: variable-themed-color + format: hex + default-dark: '#571a1a' + default-light: '#e4e7f8' + - + title: Graph Node + id: graph-node + type: variable-themed-color + format: hex + default-dark: '#cfd7dd' + default-light: '#c14343' + - + title: Graph Current Node + id: graph-focused + type: variable-themed-color + format: hex + opacity: true + default-dark: '#fd737366' + default-light: '#fd737366' + - + title: Graph Attachment + id: graph-img + type: variable-themed-color + format: hex + default-dark: '#4c78cc' + default-light: '#4c78cc' + - + title: Graph Tags + id: graph-tag + type: variable-themed-color + format: hex + default-dark: '#c14343' + default-light: '#000000' + - + title: Plugins + id: ITS-Plugins + type: heading + level: 1 + collapsed: true + - + title: Disable ITS Styled Statblocks + id: default-statblock + type: class-toggle + - + title: Breadcrumbs Box Style + id: breadcrumbs-block + type: class-toggle + - + title: Dataview + id: ITS-Plugins-Dataview + type: heading + level: 2 + collapsed: true + - + title: Dataview Regular Styled Tables + id: dataview-regular-table + type: class-toggle + - + title: Auto Sized Dataview Tables + id: dataview-table-auto + type: class-toggle + - + title: Kanban Adjustments + id: ITS-Plugins-Kanban + type: heading + level: 2 + collapsed: true + - + title: Boxed Style + id: kanban-boxed + type: class-toggle + - + title: Minimal Style + id: kanban-minimal + type: class-toggle + - + title: Kanban Center Titles + id: kanban-title-center + type: class-toggle + - + title: Alternate Color Schemes + id: ITS-Alt-Color-Scheme + type: heading + level: 1 + collapsed: true + - + title: Accent Color + description: Use the Obsidian accent color picker in the Appearance tab as theme color + id: accent-color + type: class-toggle + - + title: SlRvb Blue + id: slrvb-b + type: class-toggle + - + title: SlRvb Gray + id: slrvb-g + type: class-toggle + - + title: School Days + id: s-d + type: class-toggle + - + title: TTRPG + id: select + type: class-select + allowEmpty: true + default: none + options: + - + label: SlRvb D&D + value: dnd + - + label: WOTC/Beyond + value: wotc-beyond + - + label: Pathfinder + value: pathfinder + - + title: Tangerine Dunes + id: t-d + type: class-toggle + - + title: Drowned + id: drwn + type: class-toggle + - + title: Nord + id: nord + type: class-toggle + - + title: Minimalist + id: mini + type: class-toggle + - + title: Notion + id: notion + type: class-toggle +# - +# title: Nebula +# id: nebula +# type: class-toggle +# - +# title: Adventure +# id: advt +# type: class-toggle + - + title: ITS Dark + id: its-d + type: class-toggle +*/ +/*Fonts*/ +@font-face { + font-family: "Fira Code"; + src: url("data:font/woff2;charset=utf-8;base64,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") format("woff2"), url("data:font/woff;charset=utf-8;base64,d09GRgABAAAAAhvIABIAAAAE1TwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABGRlRNAAIbrAAAABsAAAAci7aCAUdERUYAAducAAAAwAAAAPa1prrDR1BPUwACB1gAABRRAAA/HMItKshHU1VCAAHcXAAAKvsAANdszTrpUk9TLzIAAAIQAAAAWgAAAGCnPQfMY21hcAAAC5QAAAhtAAANtpppPvRjdnQgAAAbsAAAAFgAAACoSDAaxmZwZ20AABQEAAAG8gAADhWeNhXSZ2FzcAAB25QAAAAIAAAACAAAABBnbHlmAAAt2AABhp4AAwvAwXcRmGhlYWQAAAGUAAAANgAAADYQpKWPaGhlYQAAAcwAAAAhAAAAJAJmBOhobXR4AAACbAAACSUAABzibvQUpGxvY2EAABwIAAARzwAAHQwKI6uwbWF4cAAAAfAAAAAgAAAAIAx4CZBuYW1lAAG0eAAABRAAAAtYg8RGMHBvc3QAAbmIAAAiCwAATTc+WJJpcHJlcAAAGvgAAAC4AAAA1orNnB4AAQAAAAUAg6fphqxfDzz1AB8HngAAAADbCS14AAAAANsJLYDyC/wYCVAJYAAAAAgAAgABAAAAAHjaY2BkYGDn+LuCgYEz4RP3tw2cAQxAEWTArg8Af0oFUgAAAAABAAAHQgHLAGAAeAAKAAIBgAJYAI0AAAK7BPAAAwADeNpjYGHZzfiFgZWBgeUzyyQGBoZJEJppFYMRUyWQ5ubgBEoyMbA4MDC1MzFYMjIxQIBziIsTwwEG3v//2Tn+rmBgYOdgikhgYJgPkmNRYE0BUgoMbAAn5w+qAAB42s2ZeWxVRRTG79Si1hUCUkAqoFJRBBFUUIpVS1ALIhZwAdFCER+4oCimUsGtihqlUVECRmXRuiYCKpGKosa4S9wiLnErLrgggkgL7947fufON33Ty3vlof5hm1/Onbmznjkz58x9uUu9ER7+cpda1CugF57HgemgE7gQeV9D/gR5OuRZYAqe74J8EfJ+yHPATWAxuBgMB1VgJrgNPA2mgatRfgmYw7J1lAvAXqAN0wlQA+pBCEqZXgkqwTNgI+jH/KFgNcf2JCgGJWAGOAjkgsNBPrgG/Y81Y1bHQF4LJuK5HPIKsBzUgqtANfuazPy1nIuMowKMZH6VI1eBG8Ac5o0HHcDZYAJYYealNgMZ25CU7qM5XAdOAf2Rt4l5AegJXma7a/CuI+QwyEGQs5nXy7QZzWWh0YGsj7oIzEL6WVNfo2/9m5HeMuo9DXo916I+xsoYXZ11iPMD5YwY+dTPo9R7GvQWrkV1jLUxrnT0H2eNsz4uExzZhn3GZYL9Z5Iy576cv9VTdRaylDaVSdZwbLm035Wc585kO+7FStrpM3wnbV1Cm92YQR5PafuOSe07eUOp07jcHeUauAdXpZHF3BuZZAntOy5nsN9sZS73XD7Xl/s+2ntx+YKx88jW7Dzi44Eu1VzIPyDf4n4Eqgh0Bq9zj0ld6EnleJ7/NMDO9oeDM8Acz0v+Dnmp5wXtmbcCjGSZMvAN+BLve/BdEerkQw4D73GN3+VadTVjisYl6/I4nuXseJi2CakWGFtQr0FuMXat5mGuOAv0kWA0wJhDzElfZ871pjN4A5/rqSu7v1fSrjo65+9svqvheVVN3YneW/Ps7ejUz6etzWPZKTyHJG8+ONn4iuj9hyxTxXL3ghE83/rxTJN3exsdRO1XsQ1pcwDLi+860umrilLy4JO8O7jWKB9+x3o4m7WGvNyxjZn0deITv6PNyZgPAb3BVI6jlntwKJ9rnbMnwbF3oq/sw7w+qTM2sscN9B/FzllbyT12Oss8SL0XULZh/1xDvY1tSv7RLFPDenkxH2rXL8H1kzbbcv3kXRkYZdCh8VGRvRXzXU+em9eDN2Br3ZhX7ZxNVgd1rDc45kOt/53GvdubvvNhrs+ZpB918w3Lj+M6Wx9xEPuv5V5em/Lf0div4tlaF/MHBbSJdiYuiHzxLOpP9t1R1JXosgs4kHOcSzvoSFuz9nIEGO1InE06SX2K7yviXFdzrBs47qm0H7HLl9h/N/Z7DtevzpHHghPAfoylbgd3g8vY1zGsO4g+xvqwEvYve3KMIw+n3m18WEZbL+M6SJvPYS4BYwXKyEbbUH81HFtrjq3GOaeXOW0dxtitYkcf3HQ2W985hHq10vZl9XKNEz8uz8JnFVMPBbSBuLRjtOvSn3Y30+n/FEdfw2lbbXkm9eT8bwUSK++G+WznPhpKny/nSWf6rUk89/LM2HQj2xrFtZL8PaivKsfX3U9f9guo5/6w+30x5RN4BxvWGKdGXKYR03vnmTlGe2IA7bHIaTcur3b8asVOYBwZIrYNYSvhnwDzCT8CH3KeadA44zXsP8RYw+MAdBqOTBMHxtAnAegx+BGsA9hnIWw3QNwcvMSzvwW0gLM+xP0ghL7D7gDrGqw3baaNL4GGbnVJqt/wYFBIG28BnYPyH4DHwAU8d1pAYz/rE1EW6xvA/4SHgh5gf7Cvo/d5jm+tduZY5fi9ZU7b/3Yd/+26/FfzbmHs+nPuG4mBPjOxkkgTr2UY9yWMlTqYeEn2kCo0RPFUJluir9YVJsZSiA0UbMLbnsYOHic2nW8ItzAuG8Z60Jk6P4N+cL7oMkqeK3IHVJ/Y85v3/ME8/z0jVQ/efSV2fMzgvQPepnzIoEbzPMEc1HgBMeqbSC/Cc1fGwL3M+agGgvYAvlFJ2xeYcauF/L5QwjqznPvqLtSP5iBx0VM85ydRHsHYsIaxWIJnZMLcSyK/gDIa9qMxT417oUZ8rNGmXkqfKb4Z8YT+infkTVyPyeY7iPh6/X1K6sFMHx+jP/3dxY6cT7oYnxD16aVkhNjqfeAW0su5jxeSd+lnMBe1D/3+Ct5zu/B7jNj7H/RT4+nfp9FnzTLId5go7q1zeJkUso9C6tVNu/IeytMMaowhyq+kX27HtJs3kLFatxhrjE9S68xY9fOmrC4n2FvheubB/vRW843EEtm9I5vyF8Xk+877fSkRN+nXGRNKjHcAcb9liB0dx29SiMGV2MZHxn49+F3vK3JUBmx7so/aptJR/W8hPXPHtG3IHKMYtIH28YKZs5CzJ8onqMcRTppjtWmR9lmw9d12duV9nHj5/xtx/UQ2k8g8513Nzwap2+wZdq3rKB0d23Lu+GzaSvd77T8h51zalJOX28l5l6mOTRdlR3Smd86cbpErsysXjStNXrr8/4Q+Dh6/bbdEXCfteQbeSWQdEP95X7BN8VFvGcQvKPgvhRhevyPklXs35JWrXyEHZuD6dPkxH2PXVHzkpQgLRnme2up5rSQ2+8LczaK4IMcpL2Pa38QQpp65y+oJjCsSzjeEYs7D1l3rfPuo4l1c/NXzzvf0itj4Vpn3DfZ3hbHkOaYn0p/Npp4fSf2+IOWyji+yLfeqic0in3lWlnvtdv7GsMT57aSe/Yzlbw/p6r3Ib/uDUummd3MMJgZLxUT+A9AV7nM+6vhnYB1x//SrTX7wae7SbVi/RvisbViDAPGJjzgkQLvbENM1In4IJBavNTF5I3ygj1ioAX48gE/3UcfH/Sv5MfIQ0ybhQ5M/I6+7w3SC5+QyIxskfSrAPc7HPbhhNeQnZHpq7PI7RPSd6rcdkW86Tc+IQ5JFBn+Mkw9bCApTY26my2LGQZW00Sm7cFaWGqS+G4f68NsBbDC4EfrqC30hrvkL9rwdsWOAO74PG/exxg2IC5J1ji5hz0nE9A2ItTdDHz7ipka8C0rN2myBnhtRx+8NOcR5f7N59rHfGvOMTiV/60a0t9k8+4hJkoj7fMSz/hXoA/GfDztOLm8+dtGd6ExkOHnHtDyrzc1lk543NC/vl5p7iU3vNL8f21mXOV90FDyLvHGpublrq36Sb+MSJ6k3VYUqV628wAtUgUp4Wp2kLlIL8L9KrQAFqrPn/Q3r98P4AAAAeNrtl4tzFdUdx7979+wNBkICSTC8cnb3ZvfSpoQoL3nYQgoUUZCXPIoUJMRWsG2gyKu8y6sEKVLbanlIQFEqGBSKJQ0OrUwYhg62A8hDyN579zLyGIUhgFMk9/Z778kw0+mMf0Hv8OH75cJmz/me3++3CwADgE6+QwR/HYVGh5Z7+K2W/l5HZvp7IV4DNJtfZsBGFpZoS7RNWjLQMdA7UBuoCxwLHA9c0lvorfRsPU8P6730Mn2wPk9fqq/T1+vVelQsMLrlGXmZhasKtxU2ynzZWQ6Ww+V4OVFOkpPlYnlAHpWn5GfyhrwtE2YLs6XZwSw0bdM1S82+5iBzmFlpbjD3mDVmrXnYClhZVq7VzupgdbZsq8gqsaZYVdbr1m5rv+VZ12zYWXa23dbOtzvYhXax3cseak+zK+wquyaEUDCUEyoIWaEuoeLQ2lBVaG/okyLXqXE+cA46tU6dc8Q56hxzTjinnLPOZee685Xb1jXd3m5/d4Bb5k51y93n3Znh3PCscHX4ajhZnFHSrzQrokd2RPYnksnyZJLZZcHEdmZ0P1DAjA4xo3pmdE6HnsmMcnVX75nOqFJfqK9kRhv0nfpNsS6d0TJmdEtCFkhTDpUjmzOaIpfJg7JefiovyVvyrpnBjNqanUwznVGf5ozmpDM69CCjfKv9g4zGWOusjcxon9VgxZlRgBm1YUbtmVHY7sGMptrT7RX2DmYUSGdkhoqY0RpmtDl0sggO/iujeue4c9I545x3PnduuDnMqNTt8yCjCncGM6pkRlfCN4uNkr6lrSKIbI/sY0bTksnknaSf/HuyJjkkWZLMTWxKvJJYm1iTWJAYnxiXGJsYlRiQ6J7oknCb7jfda7rbdKfpdlNj0+WmMzfw5f34mvjP453iOfHW8VbxzHiLeEY8GDfiIh6Ia3H4Cb/J/9q/59/yb/rX/Kv+Ff+yf9E/7Z/w6/1qf5u/3F/qz/Xn+KW+61u+6Rf6nfwC/2G/dexa7EisLrY39nZscWxBbHqsPDYt9lxsSuzZ2MTYqNgTscdiVsyMieiX0W3RrdFXoy9HV0dXRldEw1En2i5yN1LvfeFd9654l724F/UavEveRe+Cd9475531Tnt1Xo233XvD2+Jt9pZ4i7xfevMb/tXwUsOQBly6d+HO2Y/PNLqaU+FMyMgKvqt68f+fb/y0Sv0WvNL8p03pvlMEiEmWNM+47ZxfKT+NuqmZgeQ+Yb9qZbykgHSkH0LtrdCGUQ+RWvonqXUKbTi1nhyjH0E9rtBGUs+RS/Sj1K31FvTjqZylOlesTaVmK7Ryai7Jo59OdUmY/nlqT9KL/ifUMoU2gzpYoc2kVpJ59C9SF5Kl9HOoK8k6+tR36xXacuoGUk2/grqTROl/T73JOb+A/gyV1xnduIcpQJ6h0FOaqdCDQOEysoo+g7pNoTP3wlukkb41ILl3mU+fQ2W2srPan+S5yNQe+NyRQwmz1EdTmZ1M5TSBOlGhMys5SaE/R52s0HmOkuuTi+mZoeR65AF67kseJEfpP6TyjOQp+pR+Sj6jP03l+cgb9BeoXLO8Tf8F9S5JqDxM7s3k2en/prZU6F9T25IO9KwdsxMpZGbMx+S+TJue15iuQqSuK1UInr3Zh/SlZ1bmIIVgHZjDFIJZmZUK0YbKszR5ZiJ1zz0K0ZVaoxAlVNanyfoUPDPzsEI8AlgBhXiUmqUQ3am5CtGDyvOx2tGz1qz2hPsSrHurs0JwvZatEFy3VaQQ/aglCtGfOobwPMTjVNaPVUXP/Vgbyev0T1F3K8Q46j6yn57nbTUQj55nbMXJNXqeMW+ZRrAvbO7DTq2/gpqtELOozMhmNmI2NV8hmJnNvdipvbxELVQI9onN3rKL6edTuX+b/SVYQ/ZQhWAd2aw5m/Ul2C926t68p2A/2awtO7Wv1dQdJJU/9xeCQrAHQlxniP0h3qDmKMSb1AKFeIvKOglZ9LuozDLUhf4darFC7KWuIWvp36NWKQQzC20m/HvxPvUk+ST9fgb+GBSl6o117tA7qbWxnp0PFMZW6kGFwXU6tQqD63TqFAZnpHNEYXBGOEcVBvfqpH4uZ53BmeFwzjkn6LkXh2tw2F8G1+9wdjhn6blm5zy5TM91Op+T6/QfUdlzzlf0HwMus3F5dsY/qKbC4H5c9orLGjT+SWX9uawvgzPVHaAwLlLLFAb72J2qMFhHbrnCYD25PDeXc9SIUDk3Xc5LIwaEcxUGay3MPguzjgyuNVytMLjeMJ8p4av0KeUsCPMZYbAui9nnxZwLxj2ghP1Qwj4wmoBS9nYp69Pgv+PtEOHgD/IJHmGmEeYX5HURnl+ENR/kfEgkFUFel2StJbnmYBbHb580CGZDa8xJg2AOgoHM1ANOw/+8FWjpJx2an3jf9FFX6nzTNxDke3wLPMS3+5Z8hmahNbKRgzZoi1zkIR/t8DAK0B4d0BGd0BmFHOYmLLZjCKnXQBdhdMG38G0U838JXVGCbijFI3gU3dEDPdELvfEY+qAv+qE/Hsd38T0MwECU4fsYhMEYgh9gKJ7AMDyJpzAcI/A0RmIURmMMxuIZjMN4TMBE/BCT8Cwm40eYgqng/MdqrMGvUYXf4jVsw07swJvYhbfwNnbjXfwJe7AXNXgP+/A+9uPPOICD+As+RB3+isP4iLN5NqajAi+ITMxHNSoxk3NtLmaw29fij5wRvxArxSr8GPNEhZgtZmn7xSK8iEXaFryDWixHOX4m5moDxTLxAn6KxZzw07ACq/AHLU/L15v0hDBEUASEjkPGLvxN6yuyRVeRJVqn4hcPYYEQIoPPgpVYj1/hZazDb7ARr2ADfgc+ifEqtmArNqNRG6E9g1naKG20NgYLtXHaWO3p/wBnkKYCAAAAeNqtV2tbG8cVntUNjAEDkrCbdd1RxqIuO5JJ6zjEVhyyy6I4SlKBcbvrNO0uEu79kvRGr+n9ovyZs6J96nzLT8t7ZlYKOOA+fZ7yQeedmXfmXOfMQkJLEg+jMJay90Qs7vao8uBRRLdcuhEnj+XoYUSFZvrRrJgVg4E6cBsNEjGJQG2PhSOCxG+Ro0kmj1tU0KqhGi0qajk8Ltbqwg+oGsgk8bNCLfCzZjGgQrB/JGleAQTpkEr9o3GhUMAx1Di82uDZ8WLd8a9KQOWPq04Va4pEPzqMx6tOwSgsaSp6VA8i1kerQZATXDmU9HGfSmuPxjechSAchFQJowYVm/HeOxHI7iiS1O9jagts2mS0Gccys2xYdANT+UjSBq9vMPPjfiQRjVEqaa4fJZiRvDbH6Daj24mbxHHsIlo0HwxI7EUkekxuYOz26Bqja730yZIYMONJWRzE8TCNyfHiOPcglkP4o/y4RWUtYUGpmcKnmaAf0YzyaVb5yAC2JC2qmHAjEnKYzRz4khfZXdeaz79UTsIBldcbWAzkSI6gK9soNxGh3Sjpu+leHKm4EUvaehBhzeW45Ka0aEbThcAbi4JN8yyGylcoF+WnVDh4TM4AhtDMeosuaMnWLsKtkjiQfAJtJTFTkm1j7ZweX1gUQeivN6aFc1GfLqR5e4rjwYQAricyHKmUk2qCLVxOCEkXRk6sRGpVum1VLJyzna5jl3A/de3kpkVtHDpemBfFEFpc1YjXUcSXdFYohDRMt1u0pEGVki4Fb/ABAMgQLfFoD6Mlk69lHLRkgiIRgwE003KQyFEiaRlha9GK7u1HWWm4HV+nhUN11KKq7u1GvQd20m1gvmrmazoTK8HDKFtZCchJfVr2+MqhtPzsEv8s4YecVeSi2OxHGYcP/vojZBhql9YbCtsm2LXrvAU3mWdieNKF/V3Mnk7WOSnMhKgqxCsgcW/sOI7JVl2LTBTC/YhWlC9DWkT5LSiUHEqxhpkENvznyhVHLIuq8H2fI1GDIVjLarMefei5zyNuq3C27rXoss4cllcQeJaf01mR5XM6K7F0dVZmeVVnFZaf19kMy2s6m2X5BZ1dYOlpNUkEVRKEXMk2Oe/ytWmRPrG4Ol18zy62TiyuTRfft4tSC7rknecw+/pv6ys7etK/BvyTsOt5+MdSwT+W1+Efyyb8Y7kG/1h+Ef6xvAH/WH4J/rFch38s21p2TOXe1FB7JZHofk4SmNziNra5eDc03fToJi7mC7gTXXlOWlW6qbjDP5PhsvdfnuQ6W6yEXHr0wnpWduphhO7IXn7lRHjO49zS8kVj+Ys4zXLCz+rE/T3TFp4Xq/8S/Ld9T21mt5w6+3ob8YADZ9uPW5Nutugl3b7cadHmf6Oiwgegv4wUidWmbMsu9waE9v5o1FVdNJMILyDaL56mTcep1xDhO2hiq3QZtBL6atPQsnnh08XAOxy1lZSdEc68e5om2/Y8quA25GxJCTeXrd3ouCTL0j0urZWfi31uuXPo3srsUDsJVYKn723Cbc8+T6UgGaIo8bpiuRSkLnDCLe/pPSlMw0OgdpBjBQ07/HTNBUYLzjtDibLNtYJLjGSUUXDlz5yKE9mIJhtRxG/eUj/VhULoTGIhMVtey2OhOgjTK9MlmjPrO6rLSjmL96YhZGdspEnsR23ZwcvO1ueTku3KU0GVJkb3T37E2CSeVe15thSX/KsnLAkm6Ur4S+dplycp3kL/aHMUd+hyEPVdPK6yE7ezDaeGe/vaqdU9t39q1T9z77N2BJrueM9SuK3prjeCbVxjcOpcKhLapg3sCI3LXJ9rNvIpvtR86zoXqML1aePm2fN3dDaHR2ey5X8s6e7/q4rZJ+5jHYVWdaJeGnFuZxcN+I43icrrGN31GiqPS+7NNAT3EYK6vfb4LMENr7bpNm75G+fM93CcU6vSS8BvanoZ4i2OYohwyx28wJNova25oOktwK/qsRA7AH0Ah8GuHjtmZg/AzDxgThdgnzkMHjKHwdeYw+Dr+hi9MACKgByDYn3s2LlHQHbuHeY5jL7BPIPeZZ5B32SeQd9inSFAwjoZpKyTwQHrZDBgzusAQ+YwOGQOg8fMYfBtY9c20HeMXYy+a+xi9D1jF6PvG7sY/cDYxeiHxi5GPzJ2MfoxYtyZJvAnZkRbgO9Z+Brg+xx0M/Ix+ine2pzzMwuZ83PDcXLOL7D5lempvzQjs+PIQt7xKwuZ/muckxN+YyETfmshE34H7r3peb83I0P/wEKm/8FCpv8RO3PCnyxkwp8tZMJfwH11et5fzcjQ/2Yh0/9uIdP/gZ054Z8WMmFkIRM+1OOL5hOXKu64VCiG+O8JbTD2PZo9pOL1/tHksW59AjNFBAAAAHjaY/DewXAiKGIjI2Nf5AbGnRwMHAzJBRsZ2J22MTA4GiqyMmiBOA48fixuLGYcahwS7KxcUKEgJi8mOzY9NnlWsBCP0z7hA4IHeA9wHmBzYGBl4AaKCTrtY3CAQ5DYTgZmBgaXjSqMHYERGxw6IkD8FJeNGiD+Dg4GiACDS6T0RnWQ0C6OBgZGFoeO5BCYBAg48AQweTBZsGmwSbGy8mntYPzfuoGldyMTg8tm1hQ2BhcXAEvAMfF42mNgIAG8BsK1DGtZUxgYWBQYGP4Fsjb8f8pi8//pv0CE3P+nrI9YFEBiIFkgG02egYH1IUI3mypUfisQtjG0MTL8q2Pk+VcE47P8YCpjZWHKAgCHSDEveNqN1wuUzvW6B/Df+47kVlSSJFTYM8wNg7mJcRnDuI6ZCBWRTKlxmQqp5K4oSihk3GoYSqhtl5gumMopDu3U1k3aaW87Kk4qdD7O2Wud01nrrLVnrWf93///93u+z/f7fZ7ff943hP/6O/37iAwXb4cQnRRCTJ8QKg0O4YJMMU0cCKFyY+Fz5UMhXNhBFItycTSEKovFyRCqTg6hWo7YEkL1ASHUqC/gXpQsvgjhYp9rKlczRahTc30ItcaHcInPl8C91OfLaojzVzVrq1l7bwiXNxLqXW5PHbXrWK+D8xX54mAIdTuLYyFcOSqEevbWU6ceLVfVEvKuglU/XswS8OrLvVrO1XNEhZDbAOeGdDSS3+hICNfMC+Ha1BCuKwmhMZzGtDaB22RbCE1x+EMVYS0Wx1j5cVtDaMaD5qtDiIcRT1v8iRAS+JggJ5EXiXgn8TRpZAjJseLt/44WdLTgY0s1W/EiBXaKHrTmZWv82tDdVv1UPFI9T9WHNNzTaEnHKZ2ejLoC3wz1MvDJtC9ztMChnbx2+LQ7E8L1G0Nor0aH0hCyrGfxJIuOLPyz4GXh0VGPOsLvtFTwpdMewZNO8jvXFrzszL/OanX2rItnXTzr4lkXz7rwvIv8Lrhnw86GnQ07G3ZX2F1x7crrHH3JwbVbJcGfbuaiWw9BU3e8cmnI5VWuucq1Pxf3XJi5ZimX5h509dD/HjT25FlPvvfkQU95PeX1UqcX3r1w7I1jbxx749gbx97y+8jvow999LOPee3Dj75DQsiznkdDnpp5aubhmYdnP/v72d8Px3449sOxnz359OXTl09fAX0F6haY+QL9u0G9/rD686O/2ehvFvrD6w9vAN0D6B5A9wCYA90PdD/QjAzU70F0D4I/CIdBdA+iexDeg/EYTNPNeN4M+2Z7b1FvCO1DaB9C+xC5Q+QOUWco3KF4D6VzKJ1DzeFQvR0qbyh/bsXx1vNXmMP4NIxPwzwbBn8Y/OFwbpN/G4230TiCxhE0jlBzBI0jeHa7Po+UXyi/UH6h/EL5hfILaS+kvZD2QtoLcboDzp3m+k5nZpQzP8r6XWbyLpzuwuVuftxtT5FaRWoVqVWkVpFaRfgXOStF9hfZX2QGRvNoDJ5jzl95NYZXY3g1lldjcR9L+1jax+rxWH0bi+84WONgjYM1DtY4WONgjTNPxeap2DwV21+MW7G1e5z1e/T9HnvvoeFeePc6V/fp133wxuvjeO+g8fDGOzfj1Z9A2wR+TPB8Au0T6J0IeyJOE+mZyJuJ3gETab7f/f3w7nfeJsmbxINJPJyk1gPeEQ/w/0F7HlT/QTP3oJwH4T3kPD+k5mSzMxn/h/nwsD0P2/Mwj6fQOMX6FByneDYFzhTeTuXtVN5O5e1UuFPpmWp2pto/9fw6/tNwnWbPNHnT+DoN/nQ6p+vvdJymw5+O33S9n4HzDHVmqDNDH2Z6T81cEMIsvs3CdZY9s83HbH7Mlj+bttnmYzYPHuHzo+b3UZ/nmOG5as7F8zHrj8t/HO48ns0zt/N4NF9f5+vxfL16Qs6T1p7k4wIaFnj+FIyF/FgIdyEti+Qv4skifVxEwyJ5i2lbTNPTnj9j3xL1l8hbwgNlwlL1lzlHz+rvs/Yt59FyvSnBuwTGCntX0LmSfyvN9iocVtG5Wq9X68kavNfwag2ta3i1xuys4elz6j7Ho+dxfZ53pWZlrf1rebWWtnX6vs7eMn6W0VDGrzIYZTDK9Hs9ThtgbDCfG3DegMcGGjbo0Qu4viD/BTP+Ig9fxOlFHDfSt5Gejbx4yf6X+PCS+5d49RIvNtGwyRnZZG2Tc7GJl5tx2UzXFjhb9HKL+X0Z/svWXrHvFZ78Ee5WOrbSvRW3P9HyKv2vyn0N5mswX1NrGz7baH3du+h12l7n43YY2/mwHb/tOOzg+Q593UHnDnvK9aHcLJar+wbv3zDXb9rzJv1v0f+W69s82OnZTvg7Ye3kwS6fd/m8m2e7Ye2GtZu/u81JBb8q1K4wtxX4vsPjd/TpHevv4vouTu/i8h4/99D5b2q/r4fv680HZvcD1716stc7YR/8ffz8dzX3y98Pf7/B2U/7fr4dMCcHeHxAnQ/V+bP46Hzw7SDNH+vTx/I/gfmX8+HzId4fUvdTnD41Y5/R8jmNn6vxBczDtB7m72FrX8H/yvWI6xG5X+vD17T9lca/4vcNj77h4VH5R+n9Fpe/4fZ3+cfgH+PfMc+P6cs/aPwHf7+D/50z951+HufdcVxO0HnC9XvPv3eGf3D9Qc6P+Jyk+RR9P9n7E59/4sNPtJw2d6et/4zLz2biF9df3P9qln/l0RkennE96/4sbWd5ctYsnnU+zpmBc/LPyTmn7+d4cs4c/EbHb/b9djRE0IyEuiJZ5IhRIRKpJbaIPeKIOBMi0doiXnQW8mJmiRKxVRwSJ0OkUg3RWGSKfAGr0jSxVMC7oIoYLIrFnBCprGblvSFy4egQqaJmlQUhUlWdqvME7Gryq+NUA2YN+y4aINS6WO2aseJYiNTaKMpD5JLhwv2lsC5LCREjFqmtxuXwLl8dInVwr/N2iFwBp+74EKlXSVirB7ue/fXo8l03cpVr/foC1tWwG0wSB0OkoT0NaWiUKraFyDV4XYvDtby5jk+NcW9CQxPcmvCkCY+a4tCUt03pbGp/0yFC7Vg6YvGMtTeWzlj7Y/GKlRMnJ05OnJw4OXE8iONHnNpxeMSp16yRwLPZSDFZLBa4NqsQX4jTIdKchuYdBF+aq9N8vVCjuRpGJRKvRrwa8WrE4xWPV7w68erEqxOvToI6CeokqJPAywQ1EtRIUCNBjUR6E3mQqE4iTYk0JfIhkZ5EfUpSJ4m/SWok0ZEEP6lU6FeSGkknQiTZTCSrk6xOsjrJ6iSrk3xAqNFCjRZqtFCjhRot1GhBTwu+tVCnhTot1WmpTkt1WtLSkha/ASIt1WqpVku1WqrVSq1W5qBVH2EGW/GtlV62oifFPKSok6JOijop6qSok6JOijopvEvhXWu1WvOuNe/8roi0Vq+1eq1htbavtVqt8W5jTxuz0gZWG+tt8GmDTxt82tjTBp+2+LSlva19be1ra19bOG3htLWnLZxUOKnW/V6JpPInVb9T7UnlUapepOKeal+afWn2pcFJg5NmTxqcNDhp1tP5mE5fOn3p9qTTl05fOn3p9qXTl05fBk4ZOGXYl2FfBqwM3DNwz8A9A14G7pnwMnmeqW+Z9mXCyrQn055MnDLVbIdTOz6141M7PrWD1Q7W9d4T19vfnqb2NLWnqYNrVg9hXrNwz6Ivi74sWFmwOupXR3U76Vcns9HJ+eys934bRbrY08WebJyy8cn2jsm2P9ssZTv72fZ0hZ+jxzk45fApR+0cHuTgkYN3Dt45tOWo0Y0H3Xjgd1Sk2+L/E856dzPQ3Vp3GN3NdXeccp23XNpy8erhndeT7p7eJ728C3vh11vN3t6lfb0X+1rvy/O+nufpSR5/8vDLwyUPlzx88/SiHx5+J0X6We9n3e+kSD/r+e7z3ee7zz9/b7/fTJEC+wvs93spUmC9wHqB9QLrBdZvsH6D9Ruc7f6eDdCPG/XiRl4P5P1Afg5yfgd7dhN9N+F3s/xb9PcW/g7h11C6bnWGhsH3eyYygu6R9hb6fAe/R6l9l7hbjdHeOX5HRMbCG2vd74TIOHWL5RTzoJjffgdE7jF798K+z/v4Pu+f8fo3Ht8JejnBfE6ANRGHiZ7db1bu56Pv85FJrg/If8D1Qf1+iMcP2T+Zx5P5+7C1KeZ4ij5NgTtVL6bhMk2fppsD37cjM9SdoU8z6Zpp/0waZvp/NdMczMJ1tv2z1Z7t8yPwH7H3UR7NoWWO3Ll8mAvnMf49xqPH1X6c7nnw59E4n1fz+foE7CfwfxKPBZ4/hctT7hfybqH7heZqEV8WwVvk82J8FuOyGObTnj0N4xnal/BoCS5L+bnU/9xlzuAyNZfx+Vmfn4VVYnZL9L4E/gp1V/B3Jb4rYfkuHVmDw3POyvO8ed6eUhxLaSylu1TP16qx1v1aNdbq/1p71uHju3RkHW3r4JTRXsbjMlzW278e1/X6ucH1BXgbzcBmtV52/l6B9aozsw3fcmflDT3aJX+Xvu3Wm90wKnB5T+09zuFefPfR+qFZPWj/p+b2S7UP8/+I+l/z/1v+fYvHcTNyyrn+Gd4v/lefVdN3n2iYFaKR1BCNVhGjxZEQjckPUd9PopUGiDliqzgaohdkigUhWtneytPEmRC9cFKIVqktNooTIVo1WcCp6r6q+2ruq7mv5r6a++ruq7uv7r66+xrua7iv4b4GvItyxFJh7WL1Lp4ncKppX021alaEaK36Qk6tbSF6SS0xXMi/hJ5Le4gSge9lci7D87JDIVqbntqjRHmI+q4TvXywWC3k1JFTZ7E4GaJX0H7FlhCtC7eu/XXVu1LulXy40no9eb7/RK9qJPC56osQrd9ZwPJdKHp1ihgv1GnApwb0NKCnAT4NfW7oc0OfG8lppGYjn31Hil7j+TXyr8Xl2vUhep3c6+Bfh3tj/WlMX5MaYojYG6K+K0Wb6l1T/P9QLOT6nhSNxSeOb3H6FMfDZnWF+2Z8aKaPzXjZ3LPm6jfHs3mpUCMedjzt8fLi3SfwOAGvBBwS7Ek4EKKJQcQLc5EILxEn31+iSbgm0Z2EWxKfktRJUieZzy1xb6M/qfqVyqNU3FP1OQ2O/8HRNP1Ng52ufjpO6bSk62s6XRl89381mmktE492ru3gX49je/nt1ekgN6uSgJWFU9bBEO2IT0d96mhvR752hNeRzx1hdqK9UwcBrzOvO+PUBcfs88G/rrC6wslRK0edbuagGx+6TQ5R/8ui3c1Grmuu/Fxz0IPGHnT38LlnrMCjJ5ye9vXkTS996gWvF1696ekNs499fdTta4b6mtU8XvtfFu2nRj7sfD0scC3YE6I3wBsgZ4DZu3GkgDmQnwPhDVJ3EF2D4d/Ei5vNwC1iiL4Pdb2VN8P4MFzd4bwYjtNtZuE2z0d4NgLOCDxu19fb8bwd3u3WRtI7Un4hHXeofQff7oRzp1qjnIlR1u7C+2687zbDRbgWyRutd6P1dwyPx+j3GHrG6O8YOvxvi06wf5K6D+jzDB7McEZm9gnRWfJmqTNL7izcZ8f/M3CdrUePwJtT/M+gYw7Oc/R0jppzjv1PzNW7uXDn6u9cvs3FYS4Nc+E+ZrYf493jnX8f8+DP4+t8/Z9P5xOwn3T/pH4usPaU/j9Fx0L+LNSDRbAX07IY96f5/rScZ+Q+g88S/Jboy1Lndxkvl7k+y6/l9i+nZzm85efvaVhubTlfluNdYr3Eeon1Ejgr4K7g74pt/2I4aythrOThSmdyJdyVerWKH6vM2KrM/yd4tArnVXq0Cp9VFf8rYPpJH12tZ6vpW82D1Z6v4ccaGvxfjD5nTp+3Vqqnpeag1HyV0r8W/7X4r+NlmRplapRZX299A283WN9g/QU+vKi3L8LdKDbhuvl8wNxs32azsMX5epm2V9z/EdZWffwTn17l+zZz+rr17Thu15ftOG5XZztPduC+w2yVO6fl3gH+n0bL4b2B6xt686aZfdP9W3S/Tc9Oc7OTf7vU34XXbvp2y6ngU4U5qqClgrZ3zMC7+L83/PexB94e9fbgsEcP9uz51+N92j4wB/tw2Od9tw+nffTtd+YO8OKA2gfM2wF+f2j9Q2t/VvMjOj7C6SB/P8b7Yzo+hvcJTz6x/onz8Rc+HzJbh+z71Lx/6ix8BuMzGJ/T/6UZ+VJfDtN0WO5XdH+Fz1dqfa321zh8493yjf1HeX/U9W/8+Ltnx3j9HYzj7o87Z8f9nziuj8fN3gm+n/Ce/x63793/IPcHun6E/yP8H9U66Uyd5NdJOafMwSmcT/HulLz/gP8Tfaf18bR+nOb7z7B+8W7/Rc6vrr+ev9J1Ru/Puj8L/5zP58zub+r9djDEhGJxLMREhouTISbaQ2wLMTF1hbVKnl/QJ8RUdr1wtPgixFQZL5aK9aJCHAkxVauIeJEjponyEFOtkcgUAwSsap5Xk1PtgDgdYqrXF3Kqrxbl5+M/AcJpuSUAeNqsvQd8E0f2OD6zTZK7JNtyt2VZcq+yJXfLFINxtwFjmjEYjE3vzQETCL2HnkYvgYROCoH0hLskJJdLr5B2JEcI5JJcgq31/83sSpYcuLvv7/O/nIw0Ozs78+bN6+8t4lB1905uDP8aYpECxSIzGm0bEYs5HpcjhcALCr4DIcQqEduClEhQKIVWxCNOxXOtSIU8GJVHK2IwZuoRw+BGT/iGqxBKT02Mj44KC9EF+Pl6ecA4HAzPqr0EXaJOrVcb9Wo99hcM0aYCXMhkZZoM0YKC/MzKtJgzAgP84Zf8hTRWc35do1lL11/xkUitf8TAyqjMkojkcF/PwJC5/eZPGDFuflxERBz5TBRS/nh3Ij+661BAaEjgES6qyNpnoIeXEOJvjO+Y0DbL9wZ0i0pIiII5v9D9LfMT3wwT0yKjLRphjBphqdkVHGZZpgnWU8RUchyn5TSxaj9eFZyIzawhggnw98GG6BSclVmIzfjTX0IurSmJiytJSOgfF9c/gW/umvd6fP/4+BL6//7xMCSDk9lT7DL+MoVxZtlJXfUwmzeDEcKNLMY4F1WG2rTwDRrqSQNqhIsYVTWcV6vVfpwqJBEbWDP5MOhU9C/Ydir6V/YUo7N/z+jI+GgUQtxgWEsoikSlthIfBYMFjmFYzLR4YQ+P7Ao/XyWLkKrR25NRqfIqeFhiDlsZFhYWGRYZER4aEhykA2hrNWr5f35qVSR9aICBNWjpJ8tMP2aWfnj4hxt8KHvr4/HPJdgTnkvYeCB369H4i0liwnOJm+17s+057Gqxfo/4AraRzx58dC/OFV8jn71iPT5KsArNEV/n+gqHkAElonSUZktOT0qM0YcEBwb4KgSORb6ATuUAP+YBAA1aAXtUhCsN0TBPP1YVmIgjsE5hilVLm6JQG9QpONYKjWppe6xqM+uDA/yhRWsBNItlzs98YcDCGRvan2gecXbx5pWfVs7vt2vES88OOz5/8+byoaEDbJufqBjDL/IcUrRkvK/YFD95/+yWJ2epxU9wlGpi+cricgX+tfi5NSMfGu+FE8U474b+STZrmD3PcLaiLQGWBGcjpPtv3A5+PcWrSJSK8tBgWw2DYV9hJdCBQa0emPfEcCoUrSrYCNykhD0vrECCwDUhjsvhKtPSoqL8/TkuLS8t15IZlRqVEmfyj/SPCAki6JjgpdIlWrEOayKwGzaStQaaM8hSDeg/XJvIVizrOvXksv79lw0fvqykZHlDdkGhNSc/L5fZAo3LGxqWuzbq+Lkld9bwJwZvGj588+DBm4c3bB68YvTwYeNGjW5ssM+rg4YtgwdvaYDmB0aNHDZu9KjG4YjiZWP3t9xifjHsbxoqsw0ErOYImofCtqaqGYHhyhFW8gwjAKLCDVyTAnMchQTbhFi2iK00xiCUnBiTZkyDQaINaqNRBccBBeoUKbA2geytWR9gUDtWarFmyQvWRktbD2u2qpndR6qWmMf2GTEmd0IRE7nX9vdHt7/Tsmf7otljz8wKHb4wzzpjcMkMA7+475AZ2enjh+Q05Txmv17eOvP5mY+8qFdE7Jo6YkeDPbNu2cDSOSUp8fgNsj6Mv4BT+C4918nSqfYkzY1IPtN+iB5pmbSQA31W7ceogujJYk6e0v9CTjFc+If4KdsiPILUSDjjxeGMRKSBFZo8YCUh2KrzwUwAvjL4xPb2Y9fmz792rH3riaFYFL+8s2n+BhyOR37yCR6JwzfM33BH/PwSmVcpjPcXt/EYU6w1MAQA4oEVsYVYk8V8NfTEVsd4208MZhdiwx0YQvxaPPDJJ+IB8esN8zfdwXoyHqpBZ7lGbhPyQaG2IB9vL08PlZJQdZbxRqWw5Ll+GFASG7RGBc/qQrGVNcbyzGufBYub++LFnSfef/9EJ17cV9zMbRLnbLoyTryyGJeLZxfjjHFXNsH4bWgZV8KNRJ7IZDPAA1lUz2PMYUrBCKVoJPyjSiJNgioMSLFaH6CHA6/P0uNfXsXrxVmvinPxGm6kOOWsOBVvOUv3Z724kvXFE5EfofAqoKm4nKFktoHBzk2Bnn7IV8fCCuihERRA7mQkYtbVpYVEPvTk2Ji4tFoznphWl5HU0F98FG8PrkpNr0uD+y8wgeyvzBWYYJAtoPeGy9sNs2R/7XqNzWUCnybz2t79LRsM8/JFWkASaGmSSJspmnSPgQdnuBxfvN08zGJpMGcOs2Q1mD8blpk5LCurITOzIYs8o747kWsQhsHzhTNwuDISVRj4d0PXydNsrcD/YaoWPqe09n44iynAzb1RINClXCBboVoN7CAu5zHw7iaOEiEBCBJqghuKUKVO5+ODkC5SF+ET6BMAN3qZFARIgZoAfwY4M6P205gFRu2vw3AYQ7A6MxYospm5/e6kSe/u+sdPP/1j4X3BeGV4be6i9gBxSXhlJt9xWHz+m2/FS0fwbDwCN+BZx8RO8Zv35rGhiabOC7DjUa9M6bppiIJ17QN6EAM8zQPF20yAboAAuJzw5uwKyjrHAMhycCVM1QN5AF5QDk2wIkuv5mMx64f9uy7iGvGdMfgI39xZfvIke+XCI5gjMAOcYv8NsAgmPCcwgEEMSC6IAQLNsE3kGUCD5IMsPSIYBcWqdeQREoowCr1CnxWDLLLwEktw5ehrE2d0fcfMCuk6BCtBE+e2jlhcuKXuvS18R8upqQu+E3/429nH7+CQ11ta5/WtmNY2iTwDVcK+YJhLMupjK0oEySsBs5wCUF+rAcYHFJIFBsgyrcAZ+CYB8zzMDSYr7xH8TUZJJn2MMUWhCk2Uqb7CIaaYCDuUqH4itpozCgGtKeFUxFrMzN7Lkwe0Vw3fOKT9m60rvq9enfvw0KXb1i2eFzK479Tiwsn9Bq/oN+/ML3zH6MfG1K0YrlFVPzhx7gvTxjbO79tvxZyOGQfTxw4obkwvKFryOKxjEewXbDDQiCRbPHA0hMs9VAw/CCABaMkg3IJ4nmkEEOcwlWr/npMM1NvA6rOAn+lBsth04MCH2P4yXn9R3IMHhz6HbzwpvoQLH2YPlXU9hWdQuovuA5hpATciUF+bjQVgwzljedg/IEkcz3ZAF5BgQURFSGhUYEHIrkA9Qh20RqAITYzBZFAryRQUerXrkQNKKTNKgJNBzX4dbr+ZPTV/2hNNi649aH98xewDSzYtmGgennOQbz4idoQHt762as37884tXrp77aalgUHMq4T3rYI5plEcM6GBtv5+wPPUsI86zLHRmOe4cjhqMEsWZkmOHyKnTwHb69jZkBCEQkwhxqgIgn0Go0npwD4yR0adqQERGZiEAficwmLWOCYcwZhZ3amJc99e9vv1Zb8dfXRx/fC20Wur+EUvps6eMr56TQabObmeXT/+8obNV9vxBGz9Dg+/NHhT7twvduyzM0c273xgaNnO50dTOB/vvs4pAM4CirCFIpl+MpTk08ORjSrVWkKyCM2Bg8cp7F/+nVHbV7EjuJc7jcXc2pOU9swEWBQCLEJRHMpCcTZjUqQfQ2lPz9pRD+FJSEqKI1Iv6BuuUozFKlNlslMcCHUEm8maAxDIfQKVb6CJU8yYs+bBOV/u2PHxjHUd08cvem3a7Ffm2hflTRkzrHz6+Akz8Idly9qfXtZeNyePfXZzccHFhdPPtbWemTrvVG7elhlzDg+p3TuzanB2lGVy5ehpk8fZzzUXJzZemrwov6UY9nV299tcFMg0OhSDsm1ZIbCnXoDiTLlSAZAByZoseDxyklSmMigIoaCYIENkONwUmCLIjAYgwMcWMlYXIU0DS2SoWBNoZr56r22veEq8nn7hl7Xq4h2jZpyesOi9B3La83Bq67DZi+ZM5Bev7jwm3hIP/63kgHnVa+tLyidffmDz+9PtQSUlD19s2LFt/QNAOvYDr/HktMBrIlGkLcxBO/IqKLGTpCyTyRRNAd6L8/j15kT702ozMmrT5L916fA3tY58ZzfVwe+09Lp0+L+9jXSRfxD9Z4O4Vp5DFEq1JQUTxl5OQMWwzDjK/wio8lClH3BDvyi/yCAd9PUxOUDlKshq/sSjVzsnVJthrk0Nidh1fIwhDubFaZ1Tgi/26rTa9IQRfcR9eHNQVUp6TRrF8X0oi/PlTgOOC2d4wj+1WKfCCryPFVrsg5njU+2Y+Tv+cp84Thy3F39B5dpncQX7G7uR6nPRtkgyDiVwDBAZogkTeYWh8grV3rTAlch/z7L5Xa/Qz8an3nuq17M5+mwrDoCjtG8iy9vxVOYJzvugGP2iGP0o3kOeuxv28nc4R0SvyLflhIcx5EjC04HIckD1MNNEmDlh4xzn2NyoKIQkFQLui0gMU8B5dfAJHyYcG6iq5NTDYy16phfImfefb7ZUFuf0Sf4gt7Y4zWqcNbJ0fc72J7C3QNTchIR+cXH9EvgOUAOqpg9Mjc8fmpvXv769Ki0mvThuYG2//jPf6tzqrhQzyKN7IPcIrCURgaxsK4uLZRguCCsYq8WThe0FygC7AIy2FaCDkYBbkXyyCB9UEj7IVSYlIZSUm5RjTodhEkzGGJPJg3BBTgOnSyDzjzVQNpgFkkpGoE4tk4hMRl5qjJmRFSOiLQJnZOOwT0vG8vnlrVms0rCybe+2t1+r2FyTn2NO9ez71OHpn82avBzrtl2qjykYZC2J9g41R/Adn4lbfxN/EZ85XH9/cd2Uf/8ddWNvY6L9yRWtq77/6hMcfbBu/H2zJ9vHVO59YOfOzL6J+LqPF8UjNfDMPUBfFSDDEMmXCCccmggYlF3BA3mUpA8PFXRQADIJwAH0rJ41YD0ojnr28TGidswN/BSOwk/bz76O1xGhmm++8zB30l5FgEVkqCoY3wcITyQ5eZ7AfTARKQjjaaE2G0LGK4A1U+tHDqrUx+gT9HrCmmM4g16tz+DIcQOMQCBCqAlj1NAvUVlclfjO9+JkvOAzHLZ56sqz4seLFx46O2dO1qbFr17AQc88wzfvu7BwZ4hu98PMG6PEGePaxPA2MedTiYdPBJ7QQXlCpi0dJDrWFxaMCJuEvYfJO+QwgtROvh2KQozGGCqHBcq8L4BsrYUoSYboGEBiTYyZrXupfsGivVOOj3/nyeZN/aeXf7jhtPjDY/uw7hjf0X/gpgmTb14Aumkvyt5Y1nAY9/vmGu53mOzHRoDXWICXCmkoreyBDzAnB3xMej051Eocjwl0NOoUhsJDzY0Vt4r/FJ/EeZew4alfWvdPXtKB52Gz+BbfPE18V/z5ypflnSKjktb/FTwrEZ7lSeRb+O3QdfhG2Az6RK5Rsga4qD16qvbQDyfYX8G/iF5MU9dTbCF3Vmw6KZadhAFhLFHedxUy2KJcxqYj0rFzWDqsHw/HRR4VlCkuy36KUdj/uM7WwIClJ+1npPEGwV6Vw15FoWJboQdwEMAjHARUPBzzRETlgNxxbIuDtxQS3iIJq0U82bYoFKnWmIwmIqJyJmmTMmQd3qGlW9WGWD3R4/EbXQ/sx5qDKy7V329bVt1yYGzp5ukLJv0QjL+Z/PnK0H24zz+/wX0PVlWvzLVOunXx+R+n5OL2U/ZxBX0oXMke6ilc9bYImBlQRtzCO/UG2MEeeOphzbBuUCbVZk5/XSy8fh2/dJ2ZZV/PN9uvMBlkvGeorkDGA1jy2MVMKNF5ByilEbXy/oASon+GLRQ/wAldL+EE8QO++VRn9+nTHFFd0Pzu74CON8P5h71XAIYLIFtJ6gcZMdtVwldrYwzUBCjLppI8TxRf9vfWr45/cqKxcu3AZdvFJmYF/njttZVLtprjj+xi3jsN+HwCYHGI2jhVKNEWp+Qpv2A4huA0EBgKDg6oDqfiVAqBGmkJz8UAFBUDRAbvuM5cE9X4KuoWwxkVoS3kw1xjltnX233JWn6Cu4vhGTwKtgVKh4Vh0Bgkg9qPhcMKJwVgzMV1vX6daQNlbDTcZ4b77oP7/FGKLVHroWAxoUyYqHmog+cYlw2DsfyRvzowECYHgNAaWFNWppU1sIEB/kQQ0IdiLrXyPb3Av/HXT1Rs6DuVOPDV5+hE9zzYsWRC1wj24OrTjWPscLa7xrGPuOGJDwq3hSgdtgGYPitjib/an8Id1F1yNjCTRRaB8739r+Bk/LT+ivgut321+OtGgi2drTjtZ2bOnYcpXS+D8zIezosvschKdORPQm6MUZa5CKOiZ4KYvDUBHljWrDM0am78/BtHH78xT/p7a+X27StXb92xAn8qXjxzAhd/+iHuf/akePFT0CyU4m/iT+Jt8Q8QXdRkDs/D+lqp/qyhVEDiLS1ED2qkDEZSbvWExvOUadJt10dxAQycC4JkXKv45Z3D1/ES7IH1v4gfHTq6bhfzxpeiP9/88UeYtf+jY6tk56sRD3EvwHp1oOsk2GIJNcflwLxBU7jb0o0mU4K0dNBWgAowbgAgP2WyTqT5cSt2T9w4zvBhSsvDs/denTn3h6NHf5h7O3vR+PGLsh94EP7gt8WXarVly1qrZqwd+AQu+uQj3I9C5fyNufN+PA+E/s7cG+fpPB8HmGwBmBAbCJwH2G/i5+ABG3iQ3kBkkk6fjHbACdVqLTnVoIhgPTbI4EnBMiPk+j+xHq8UfxYP7riOl2JP7PuvNZsOHVu9ju37QoL9MJNtv8w3X3593mQxYfYSgnNFgBelAKck8vRw0BwiFALgPZx8WTt10+2NKUYJQ1w0eUmBj01hJEXI1Q6qA6WfK73v5v794ogl5RfmVC+tyFg4bdeL4xZ9tHLz18MXDjjUMG1t3qqO+09OwJ4XW5uGbSgZZG4eWDi4jz5l8o62qY+PGly7pjB/5FDrIJspdtzBdolP9QWYzaAySqgtiECmh0QB+jgdFLIxjmsQp18Xx3Ip3NHOeu7oBWmMhbBuC4yhJWOw2EEk5HVqDf4uFA5kTjhnkq0aqLJl5kfbdnw47frcJUvmfY9fXf/xwvkfb2Qf61r7+OHDj7NzpPEj5H0VCM3H1PbAwvjIMUtiB0CCWsMRVZUxw17iQDwAD/qnWAbHpgyO73xuFSFthFvAWMfhmxfRU71UHDEvlMt8pIPQBoIfdFSNWiMzUDOr98R61hyKzVr287efF2+vWi/+8+TVKVt+WkPIEGvvYuEh7ew3XWFkviAAcyspTwHqoBJg82HGmI4NnJoYSDQaOP0AExUR9cz0LzBGcSk82RP7/Fu8Hx8Ru8Ur4lu/M18yD4i++LZ9hT2QKbOfI+PrYPxdML6SnHwFCFKEugFEKOAdJFWJlBoJIuTckydwu8TMH8RMEF8H4FIglcfstxlvtt4+k9kgwXkujJtD5QoqszAs7zSbyUjRYzUD4DhWoNBnUetApr2MeTakq565ZF/DzuWe7NK8cJb95TnJlj6i259tF5pljcohsxCZv16Wvljk1Kh4WQhi2+1fMnrxNK68oag+c8e/lz0UwJqRyGMrZg93nTzF1rwvfFL3h0F6XiY8b4jzeTA6Q3ycPb5MRFyZLuhNWTrOZPT2L3GleFpo/v3kKf6GBJcFXARnFbYQ/DslNPezBXIUB8mlBwiyzNVIfPCUgPphMzZ4wmb+66944Xed//5O2GJfhy+KfUnnZnELV95dBnOPouPcw55MhyEALe8KYq+LW54h6xnDfcbWCIN67MBYYbSyNX3F2ha+du6FM4T+TYdzGM/lgzyWSCxnIbCDwbBgA+Y5BQdA5olDRjadydaB4grBxSil1+sT9aBoGYzxRJbD/pQAxTp0xZg87GIQzQgMQBZrlmzPYD82JmbUTA3LOTmx7ZHBmL+9Y/4s69ZK65hLg//2nrhoaVz7rvUjGjBbkOuzU1XSd2BZ7daxh8/2bx4ZFvpoTMzTj9tPltq+Hz9myDBYx2lYRwF/DfmhcNRRdlJdPczmT0SHkGAQQ70wKDnlfr4MGhTq1sw4mhukW3QOllRcASvmcBPZqiJcGWoL7blC7JXyZclG32DzBqwIV4fFaozRVB4hS9WoJfFMYVBbnVZhNVBsvCV769C/vNB06YFT471evYr7Lpo6qWRWknFSEbtvULX4ufjH/q4Nyybyl4PvnLj08mtP1/UTNbk22IVDsMZQ2Ktgoh9R6yHsCBwKmJrTalZMndUutmBiKTQZiX4UI6tEDpMZ1ZYkw9KvS4omDni1Zc/1he3/fOy93S0dy5bt2rnskbSkTfkDV/1xcJ+4ecn6YZeev3iK8sxZ3d+yIoV1KBpn8/fDHBOkY1iOozOBc8oMksFJoES5WLHE7LHERgGcrlegjVx2B2eoGvQ6g4aCUweKgGzipBPnhAA/oh4Q7Tzi6qt+lh0jX73cfLFj30Tx4qJPl42Jm1jEXwu+k31/eQ2oZMzero2zci69JC7djn/JyZfkk+UAy2SAZRBowTZbAUjbrEKiXBy1wrItxPLaM0PH5IKDAaSRwRFhoXBrkMkYTWywWPIpukGXGEwUICXoYZJ4suqRhWXLS5rKLk/d+93cOZ88uPatabz97ys88Pfswmn48kO7U1JWFJasvXPwMfvmJTf3W5PxlYd2b9sj0RIis08DeAeiUTaiagkMnankXwx1c4sJTcS2nSvrc6G2YPgJQwio1aUbvdZgA1kdhgwgiorWQKzeSMKIcEKegf4bssx0KezX6/qMXzyxGTcFiU99eetW89ML+GsFDyVUD75wsOtvbOrBi+N2DSYwbRVruBbuECpAA9FDNs8MLwYrcXkBVgA6pMFUsxFSqBRI1QEw5gUOpB4lkFQlbvXAKpWiCSkU9HAJjUgQcogBgpKbArIOy71uhccKHCO0uA7Rc2ODTVNYWDiwcEBcUqZBa7KYNJ4kigH2yWnZp8aePOxq0zT793hIepmZC7EVCQ63uYFryXtw/JjG8c8tGZoXEJI76OlpJ8Yt/PHo6Sv1f0meO2XP+mmN58bcX1SQ01g//fLS+ccWlNnPTJveNq71bfaGv2/istET941Q+6QFGxMqVtS1bqss3TAtryS6stxWYh2ZbWk2pm9smfr46JAko9g5t3nCvNmTPpLw4TTgA+K/ANkJJGtiZ/QFis2UazVAyBxCVHEFK4kkWoOWioxYIr+wrzIlArKEtxQdG/Xg1qsDakqWpl69yj5WUb1/R5fIfNlYN7yf3Zt/LYielQ/heRrBCLJJABorYZ2eHgk4MdhGfPNUf5CCSBwmilBbJDlQwD5R6917NAApRjTExM/Xx9sLhveIUVJvohzlk2kxY6fqzOysrS221dbaxDWMBkd2vYrzxSuCsTq/oKamIL/a3tm1/MAB5iMy3+NiDbuRzjcYlRP/OlMqzTrQaVi2VTgklDwGpupPuDNRM1tdmhtsPnDWg3SBdGZ8r5lp/RkOeBoj6d16mFxxTa3txF7xzR9ijlxbKDYyS3tmd+eZF8XORxKOR016ZgPzxAGYIzBobimcaaKHg4SqEqgeDscaD4IveQ6FAwRKIiVorWpq4dPjZ65eZbZjXhyCPxJvirmESURyUWKc/WmmD8GNcUDXGP4y0OaBNg8exhNcaEWAY3W5riQt1KYlHkUQd1pcWhvOq/0NEuYQdLfqBEkQh9Uy9w8pq67Pmbu7dWeV+CITiaNKbIaH82t2tLA/HYQ51MHaRgFtjUYjbV6RIQzmAzwZYs2QuEIgwUy+SQmKDs/nVXAMIzOFEER+k6sCXGUEodh5sYE6xaMRqKHaGE2MVqUKJ7tBsJloOwrHF4rXZh3lEoR0/Tj9dVVk5JAB5+BvQrnp8lHfjNYB6+PSpg/k8lce6PqJ+bmgKHJi16f033Rr16dc1MySgSuLS5znDNbhj2psHqCUIS0QUMcqtE6GBlgN0yQieqhNJ/lRZGZW7LwCPE0yWcRoDdRkYZZn2bMGmPrpF9XFZ8ds2XZVV1w0cEkaF7W6aig9kA+ObcsY1tfuIfGuRbDHWTAvYktIssXzNGKIYHWxqw5FHSehfiGB/vd0nLhGADG3P5g6/YMdOz+YNv3DHQsXzF+4cP78BVz+qj+OHulcs+LOsYNda5+88PLLFy68+tKzRN4CWu+YwySbvxcwF6A/xE1NZACVEhR9CU5BApWUeKJq5Lmq/KHU85RHHROSk6LY9XKDTeu+Av8Y6qaQpSq1QgIgCfJyLIHLGvXUskMTrr7sk/dow/JZSVX3z5o9cRKXb//gQOeGOaJfMP/2qpq6J4g8NfeZVy6fp7AEWiHSdYSRdQCThCMP64BjA+uA7cOu60BkHa47TI9PGN30XuvokWakdYT5hUrriNHQdeisZnWsWnAINY6toEIN82qbz4tXJ5/5y4UxzyzNndM2acDMBFOrjctf1nInPZjx2AgihXJf14bjF19+7Xx1X/xLdgHBV1CbuEIuD5j6j9KcfbSgcyiBQTDlDBZA9vV1a8BlIPZ6Qb8o4q3CaCbfc/Ty3KyZodJ4eqkf0/GfOoZBx0TXjoomJSZ8md5EeHuvW2zxjt5w/uUOqOc2174NDRIhcIgtapkQ6FhDFsEEM/AKMwguenr43xgUb9ozbV/a+/aTDz2ES+ILTq3g8ny8xUUfckcfEefv2cNce+zX1SspT+2AM8UBHsRLsjVGJjUIS0Y48CBbywaYYrdAUGiIR3FJMcmSbO1mhJFsMA4TjEvcBfPwIuPkKTO317U83/HPQ6P7Plh/OWXa9Jlbajr+vmTtR1XzbHuHby7rk5JrDgsvm9cwfHX5wvVJ6XPizMmRUeXtTVO2DqjuvyorH+a7AeYbw8eCXp9iS9RhgG25txcI3oQMMI3EZJBHXTjyaQKyqfaPJoYro8OiQsQ7q5qIepS+czF5+4cuODL0n/+8ipuDxXNDx7QNzzYlD324lSnYfyMUlBL7q0Nrqf37NJH/uSiQP0ptHsRO7UkxSsIRDfXbEv7CjJUtF6FU+8V5kuZEFOuxkh+y4SmghtpoXtIbKfabZVHflKUGRam0smRl3NUXfXLPjNmx6youHFk72MZ0dV5dWTHk0A5GRHRfuCqYi0DsSALVsRlKkx3GKKplY2LgMWO27VtxnXhHXHcLe3FRnVe5qK7dMAZIOdxOGMOLwNJTydK4IqL9Myy1OxNYYqfd2Qt5ETMPVUx6jDyhmNt5XLw+r0O8eeajqQ9eXT2VPIC5adfAQyaxvl232W0EdkPhWcPhWU47j8PKnOewMvfYeQzA8EOpqYepFsXf8SLxBGY++ug38TxuF//AJ8QaJhn/S1yHZ4uB9r9KsuFYsZqrhPF9UJQt3IvasDlYSSnj2BUqVAQRoPA+JPCPsRrII8zMV8W3/x7euqQsslx8+Cb2wD7fcS9+rDniVzy+FpbQzi6n4wPRZH+H8e9h78n7z/Ye9rb9XSYrqOsDJsPeyfqw7fbssweYy2dl/5d4k90irEFJqMiWbwJKrMIs50sJMeIBbjyIZxzsDce2IhKg1iB7AjFTk5QYrY+KJAHLftRbES3otIGyl9JfwVKRPYAIblYa9mvIIhwjlqWSHLtlxgKlkV0we/4c1ojnT3r3K9bIrH7kkdWMkf36b/y3favFzcFB02b5+0+dHhQubha8SvIOLtutC8YNgZ7D687WjvAIxA0hQbvvh/n8bD/CXFIoQaBSE/ERowegca4c9AfIjX9+802F8rc9xD4TAeu9QtebZ8uOBZlITyOCOIa6O0F441uJ1QsIIKwb5OYGJLnwORbWqw5WB8Na4eRkBLosEf6RVk6WKC2QKi/yunEEXd2GnTs20tXRlbcvWdIOK1/QJqxZtjswRDzkrxox5OzQESp/8Uhw8O77D/apwdNCg2ZM0/rPnK4LxdMIBGBmJfgC18ZmA+fMp7apdA8VoEGQjtByEpdHZcpWslLUIEuWCNfAtzAUajRSmwSxWyFCJV0V6Fg5Hq2QMeO3hhYlphbG5IxI2FD48IK0uqLEjGJj7rCkDfHDFg9ms/WppoS4IVX9OrbpU4yJ8YNr+tbOqyRKxwvidOYn9icST0kkkShiD+Kc+oiMrVS1DHZpdg/WoAoAUU+oAMXfRYBizVoDs7QkLr6/HOw/6hn9H+xP8SUJcf3j4/vFJ5TEix5d82Ddz4uX2dv8KMnnHs4Qvxr1bgdo/Fjq3yaiP418keymqDIkMMYoeZucFn1KInVUxpU4DdBL5o9V0yfmteQtWr58Uc6EgtbJ687ed2L4iJP3nebS1SM2JMc89+ILT8ambG/wFz/GCdoN32zd/P22AJwCD2yX4/OiUaEtj9iCUQCcLaZcIE4Qh0VBYsOFrt5nSRJXB6r91VqjzIClKYZjEtUCx44c+EKmADttCObn+m9Kbe0/djxeK87JGsg8FNq1oGyA9pFHmp5ZwncMHz0pP2va1C9XvjeiI+7sMd3AkVUfrPzn9BPNVN7tgzZzU7lXUTgw3FZbVJhADJOhgV4KOCkBWl9vYtcoD+dB+/X3ofKagcrnROXA453msGK62bBkTOy6Uo5Kg2w2Y3ANSOgRERHxEXEx0cl6npxWEkxn1UkURKeIFYgtL9ZKT1SsixUADlVL65p1zccWHNEbBz6+4InmNetbji043i866vEFOHn+/Jkz5s2bwQXZbMcWHDXf13/1tCMLjhYWQo+JG0raM44vEH9c037fmjX3ta+BPbHCBBfwzcDXc2yWQMrPVJiIbLAdExWYBSmTxGl4UM8AMPgcvtItS4PaN8zYLIUXSR4Y+M9M2tiNP4irvxR/wIHiD9+KN7FGvPmxuOZXnKrkm+2DVz66UvwFe8E/zHH7Y+RE3O7OYC4K1f9rTBMhb4R/49tvwv+EartZbLebid+xu429BXhmRsXIasuERbHFuclhWgaU3lBMNk/eq54gD8ppzSgjKiIkSFK9e7m1AMcCA9z83w75y0K2iIQoSX1l9xhb9Ogo26Ky6lHG8S2Tl/cZNnBOyzPz/7ZjhK2jvLbF2DIR2oZD2/mZL8Wb5203JZgXbOU7pqxPiOuXnWDJiDZUz6iuuj952AMjVpdN25SY2Je2xlRPr6lcmjR82fC15fb1taasgsysmDpTRp7FQvDWzivZ04IAvF6HMiiFJH5QQg1puHITbCRLKKKXF0gVOq9AjR+1NBAGRuliT/KTIcrlOx5YVpZtKSuz4AXwJxt+8MpSi3VgqcVSSj4DrZZSGmOZiK5yD/Bf0Di/XDSOzmBYNOYUqQaG59KwwLPlSoyBywJitXpgBbBYBUeyuQSGF4hpDdETQo4Pg2qioogiE5UblWNOT06MNfpF+kUEBVLa6OmYsiMQXHbe+jBSJIccZEySc9xJWQ8lFTqXL+88/qR9+Qr78XUvjB79wrq1z48efWndkLasGkM/Y/mIhsrU8uhBravGba+r3z6K/+Ko+PnZM+IXR4/i6DNnseHozDU3t2+9sWbNja3bb65ZF5fUFhayYMmi+frIqWOGP7Fw/pPDKUwuwZ9b/DWASAJKQXW26nDAvzBAwnjMcyqACPF4KLEjwhqAI/k+BKQQFOMcEnUdqtSD0pSSnARwiErQJ5A4OoMp0cMzOBEF9/aBFOIeJ4jFrHUuP4tQS/ZApD6ldHhQ+vpKwKKWl1fNGN6Y1NEv69DD+e0zy0oszQb7TVbf9SV/TfxS3JCY5LlSmW3JKey3sLphcZ/UCluQbn2+aCoZUNw/J/1o19GTsFMbUA2nBz1QQN5Iec5LBToryQFQ4Cys00r/4Cmoe5l4EI9Ydh51Lxf341HLmRKxcTA+ugM/PlhsdH4lIswV9Bv7FfM24AWN+WXwCkSwop4Q50Z4HlMli9laSnCusP4v208wb4uxOIb61YKZQHbH/5APscN+P7OY5kNwqBz/hRsr424SykSTKfY2GbGgxOUKzAuMwDMdHsT3yQLFaPXCnDdWKTlVK0lK5JVCS2/0TU7WUwROzkw2p6UkJsTHxZqikvRJLmjs40Dj3nYSdzRWZBDyozPEGgIMal2AZAtmvr+5ds1PmzbfWrfu1uYZT7W2PjVj+vmWlvPTo8X+uQc3r89qb8/JyZvHf7Hu1qZNP62BrpturZs87dKsmRenTLk4c9alaYuO5dVobrz/PpPV+FhcUpnkkyzgc9mZ/OcAu1gKgTApW6XePVuFROmw8uQx6MDsTPsb/Of790v2opXsCDYecN4XOKiVjpLEERZPBI8/nXJqrAj3C5NBIvwXkEi2o9SHGhsfqq/fPWbMQ0OTy5KSypJLRo0q4a9VPDh23IOVlVvHjd1SsTG+OienNqFxyJDR8JwrMOmvuL5A8HzREMloEOnmoqAxVXnEuKxoRApFjgK4d7h7CpBA3LM91xtsng4uqFRFuCcEwTf8y2VsEj+5LH5C/mH9u25wfcV3Tos/Yu1p+75z3d04mZnLLuU5tULIBlDMRapTCD/NzD2ZlQhPg+sRTBu7kV7P+fN16m/9FztMqHfxtxp1PB6Dd48WB/Ett86ehN3aI9ZwoBLCTiTbEkjWm5fAMhyAvxwOAiplHXqyMxIiJihOMsI6SYopFvaC2L/Ujlw2M/td0tteOj5lfVlJXby/9pOr/sV9Bi1IuoobDz4bHDImobwhMbvPhCxRDObftj8xbXH/ShvzbymWA+YzGeQNXxJtCkcK4FtKxPQV9HATBT6b8mLABa2WhAZgNRE/FbIAauYmv/LGKzvfa5v97T6++Q82UJj0x7FA9gt+0tnZ8y5MkuC2Hf/ABrNT1AoS3crwMtx4J9zGi2q2FEWhAJRNsTMZVB/sh2myJzW/yKZ5EFHZBjkuhmVqjLGSeknQkzMZrOYAB47KkTFZzK6hIwLWNDX1X1BWOCuhMLxEP/Mn/c21qrEDi0dnRATN8tWUkfkthn1P536HfbXeZV9ZdAb+dNHzQ7Jps2wZICAr5NPDAb/gxzk2rE4yu0ZGhIe5mF6Vnv/Z9Eqwk/no0oSWS0s6np/Q8vyS8dOmjR8/dep4cbpE+af9dfnyN2ZMe2PF0r/O3L3pwW2bNm17cFNn659pvbcHYFNGohWzJGrcqMLknw2wxmV4BFD7VIy60XI8Stx/EO/FeweLQ3eI9YN7viK2+2cgvs/TuBkPFIyq6H708+AIjmKtRgVnTgnEV40ZKTAACSR1CtimUA9EmZxNniFnkoiGAhEN/dXqAH96HiltAsyJNZpJbogWiGcWyfFhzbBzZnzg+Jk6bNjI/LPzvQFcypzxj4u7Mbvt4yPa7eOZr/Bfxsw+KPIiamdQ19rp06fgp63i1sOH6f5034A5vyLPOQaV0zkXy3MOUynhXw3sFqgIgNxlZNI8mTSPOIbkrPeSZgGrgvxp4GavCWt8sKzWuAY0wLbiR+Wpf0+nPjVvZTuu1drfPrQtz5qeVhs7J393w9BFNvdV2HeOGpG3ZsHYcSXxcalxqfX9SixjCmT4X+KnIyPoOtnoPrqWmQYQQqKBzxGtLN4P9ERfOCAZ6XGsB4rFKg+Q5FTKci8MK2LJipzCC0Ie5Nx4qBQe9Z7AHbGgUAFj9PAgJNNDAZwj2woYaE4lgkwCPDMmWh8Tk+itCpWlOYcFRT5UgS55Y8DyJHnmbpv59Ma+gxpqyjeOHb43t61hVp8+BcVN2oGTWy2jM0bcd5YdRwE1fvxRcRfZ46PabeP56U012X18fPr1zx+RYc1rKE2MjY+d0K9MH9PYYv/jbhvPoFNiFedLdfxUZLGZIyMYRgrMYmBriemZKHuStj9W0vYRSk0hVQju6RHRSikQTvlUL1+wEmXWzBx3SW6YISc+jCpdl7PjSfHnpRebLRW2nL7JH7gbAOyXhvbkPfSb8eawLYMrZ5SmJBQ05OVR+ijF/Cvy/aIBe5Efo0izu7Zbne3pyLXd4mw3u7V7ONutruMIfzjbU9zGX+pst9ipvNB9HdqfozxBQ3JKCI1Tcjyp9oAEpVu8qCDgRpXCkZWgUcMtvjIP9lCFOzITFHoSAw0fzOqZ123iztpv8RKWCxZrhuHR4ksjcIk97iEcQWKo+OZjYsNxseQ495y9mOYEiGqaE5CK2m2hkZhjk6Lg1CaD7gKCqECqSwCKY6G87KQ3iBAG4u8UmJlUyKSJITQSoJBoykITTLdIADEiRuqFO/5Ttwabh78xJk5LQtTDE/nerAVIgDUF98StuyUeCArmhhvXGTpCve2rJSTbYKV7HsJjv05y5UbJ+ueCz+DUN0j2gXtWwkNKac9ojgDFlTgJV0yu7VZne3q8a7vF2W52bac4IbWnyOPQ2HY6fpIbLkrtVme7Axeldouz3ezaTsdP6sE5OJigNXHzaLxtCLHyCkT3JHl/LTTfREnNGiriMZRtyL4+mPrgA7Q+Ib4hNM0cWB329iDFHkiqhR+Kx8SXocZRxI8qJfyq8dVL2HBe3EaSLx54AE/E81oPTFqCI8VrcuKFuFB8i5n1KFPXWc6ornxZLjY+KhbAvGkMOD1D6dIZYqT10PhtCpcMN7hI7VZnuwMuUrvF2W52a/dwtltdx6HwynCBF0bfon+xb7CfgJws56Jhq45YoxSx1lgrM+zWstu3l92if5nrPy+/Jf9eTuWWsm4jjFmCdAD1eNTf1icA5E1TOMhOXiqGuGl1gQwe5OkBcieHnVHZvEv8mF4fFKSP18cFRQVFJgDBDKKx71TDp7YwOURbZ9UhRg1aLzbRpG9TLA40s3PmLJp/42hxVuGp0jnt8K1PVuFpEa9OSsWhMem7ViWmiN8YU/nYevG5Tz4UL57xfiv9H0Nx309IBLv339PFp8TfxJuHPylg3/bsfAvkLc2Rzwq7Uj0AVjR2mO5FttteSO1WZ7tjL6R2i7Pd7NpOYZ7tRhdprCwdJ18ah5Nwl8QDtNA44ADiJUSIiDwICCPIGcB5WgSaUiKlM3t7I+Qd4O3v50McRuoYPY0TCzBHcQH+HHwhDjmH+Lf7IPbAEeLXneeuX7+wduuudXzzt5998cPXv/PN4hT7hx2710q+l4Mw30kgh+aiLZKvzYOEagbRRJFQxw8Q2cud0YzAEJtIpF2uFEROPEzE8y5HjrleZtkc10DzUFswXAA5ggM5ote1hgYbcA6YRY4lKyMtPFQXIMBhdOYPYje3Z2/rHGGljhxdEvlgMTPPHR4RnR6blBhjzSgbUzLhxOQtU6sN1caho1JLcgtKzZGJManJldXjmq5+9iZ/rXzlkPQKqyEu2xiVlRhtHrxy1Mz9Q/rs1AYOH5Zdlx+bUDSqMKU0Kyalb0r+kPbVnW9w8e99Q/aUxrkKg2BP+5E9RX1vS3sttdc72+e6tRc62nGlW7vO2T7ErV1wjtPm1r7B2b/utiSz/gLtT3P5KBFlIhtqtjUZQKyOi2Y4vlDtwZJ0KoA9yDI+2ANxHsSogTDwXm8VQ1iUlxQd40mcvU1ESStiKi1ZJPcxPzfLZrElZSaZ01JJBmRMtDHGGK31JVZ6tb9C7+JoMTkNVBZin5LFOWBmVL1X6FMYA3baqkxZMF17p8+EpsyhmaNs64e27bAWLh03ctWg996pP5c+pI91x+LJSwzRy0YVlMQqcCkT0S9PrFnQ2i8vuz5Rw+Xbb+UZDz0UY1qemT1iZHNd7faxh08OuKKL2Nx/cFXF0H35a+ZMWd1fHNfcWN9YXTd+BsX3Q8D7SbxrCuEUEcD7EyKB96ckgpzOOzg/T1yDDOYlcdeFmRdzlTEGwr6JKH939s30joOVIKNg3u/FvP2WXRjrGhhbsqRoYtGxkb1Y97P+m/6xtSdUNi1pk6W/guAAjTWluDdQwj2NhBtSe72zfa5be6GjHVe6tQvO/m1yuxSfR8b/lzQ+dm2vd7bPdWsvdLTjSrd2wdm/DUt0bwY8N08IB903BZltaSGAmnpQMJhy0HNJ0ReWUZGoNRqf3+qa1JNoSqG2C6I6EFdKoBwT7YimDNQBVVDEolhH1h9VMPBL9UtSz83a0D7nqePzru5Y8dHiOa/MbNycG9E+bN12xsSlrKnrP9W2YmbHGp4xhuwxWLZNXrBQnCt+e7h7w9yruzddu6+wcPZTtk2lgHO2/iUb2/Y9/tJzZH00noue3Rrp7MrrpvFUFH61EvyQa3u9s32uW3uho50mk/S065ztQ9zaBec4bUiyK1xBA9ivuH3UR2kgkrbQ44lEoEjTGGSO4xtIKDIpBMVzNf7+CPkb/KPDQpyOSeVd9BhiUuB652zf3z+eVCWj7kpxLrGA4bMuTdw+kpBN3JgkIVtMPncAviVQjQdaYb6LxN+4LN4gyxM2W4EkS9BSB3cRJYr/myjhjMEFUcIZlA6iBDmLOq3JQAtYxLIgStRPmjX9gx3J8YNODJ46e/qHO5JjK54ULQuMcZ8FRC2aZzR9pgtn/+jbSULVhF8zO/t0PXGwa63wo1ncc+HVRY8kMs9zdnzhtfkPJ9r7cdKe0BgWuufD3PZcaq93ts91ay90tDv3XGoXnP3b5HYah0HHGdkzjiNuTrYlFdrySC6CVgMKqif1g/n6MGiQtxeDS3vclhWO0P4iXOnnR8xKQNRpaRuAV1RPOJxVI/SEwuEtlu31uEOKh7v6mCMWjj08sMIZDaeYF2x/0hkM55yz4Jxzm6teKbzj1BOz7S68jf/cyfNm3HbVK72c/bO6XXmhyckLa25LMFGLBprzHgQwWWPzIDVRFBSpyk56gJwShgQgLQIzkTIFPJ4mLCvgeMgBZwHEduzs03PRGeNaIAXp/YdRpLCy0BAS069W6wwxSlVoop5QJHOGVSE4io30JNpz6WsnzMgu9C/Kr5rfd9XqIb2y7nPaisb47Pa1jLWN32TBJtcUfJJzI6pozk0GKkCDbAPiMEeqE3EFWCFkBGhh8SqgpTzJyRcUrNDaM2G+CbQkQAiFwhGEFhNrNBgTDCZiYOMN6X+aseneiThUXu9hfOy/scuSNm7MuXtajjFRfI+m5fRfGhfSs8yJWywxf07QEeMLcn3wYpKiU2qTcIDm+FPZ2iTJ1kukdprbIvSF9hKE1AKaO+wGUp3C+OnuGw77u3yvRb6XBTm+w+XeBMe9uPKe9wY5n5va7vpctfPe2nvem+Z8buY9nlt1l3tp/QB6byx9buZXUntG97e8gv8a2gc8j9QKRRITgSYg5SkGn5xAb4Y+sq4MJ2sLxRsyjy1AO4KAW5yw+auxgjUEM0oF6IVKqszxct6NgeSU840qgaF1AxQKOW8LKZVSShMo1nKkZuy9ukIn0t+BaKE2I+lDUnx41HLvfnCStAhFR4XT/Bi1xmggpqAwqvG4J/HQuARdACs5hEk+D7flsdf8LNuduTxv4/SrV+MmFs0mOT188a7OYS4JPV/u2hO80v5JTj5N7HGxabzjtGlkm1zkJkqnJLlphsbVNuLl7J8V5ypnmZzyV41b/yBn/1TX8QWjs3+txhHPZqD1HMLRw+c8QGjCMkEzIgXI8wplCw2QYscjQXCUeCDBc5xzgwhli3N2vksvZ8UeGsn0v40LO+RFDHSBhhi1n0oVmWjUBxj+RDj0NDKUuM3+yjQtd6EMjaNFPVsYIlWaOHmyhwQMWZLON58Um05K+VWwdpJfFQsy4x6bF6n+FapRsQx2UHUDERhBc+1wZCjJs56AJFmHK+YdIDD9uaujT4WLcTf0fxoTlu8bFxeXEpdiSjLER9NyX8ipFwmKXpBwagkgrMhxaYBL9n5yQtewmWt6QHN8w19apNyuj9mF06as8MC/JtPMrtKoHjBtG+a9+afdUppX1rY9D+12xa00J25lxt9dF6iScZHW36C0MEGyaeRL7TQHi/YfJMkpv7v293L2z8pz7W9y9q9x6x/k7J+a49rf6Oxf6+hvP0rqgcj9WTyB+4HKuFL/ecgHlaN69KLNl2BCOVbh4lCG9WDLpcywYsSoPFWMZwcSlAqloAD66oWxCuFW5IFYzoNt9caenqompFLBlnOcshFITg4hV5QlFgCq2Ir+6xgg/SsFTtniOlbPCA226Ao4KBX1FUPrakoH5GVnZqSmJMYbokKCNGqYv3cgCQ+gQTlF2EzdIoKB//8rlYwJLNVox7XnBIUNsjCh/49pZdzRAZbwgvgr1/2zorIGXvx/zjFz2kEJfiW62cyoDqXYBe1lhOdB+zjgWhifHEe4FuPMldeClmCxmZUCgzx5BnuQuDHYBsaDbVFhhUIqlpLDVPYqMuxFw9cCaF0FOQWRxvTT3OaIDRuui/2uw1/83HX7SPyc2I9bu7PLm5lrX8P+a+fHH39sf/NlOfef5MeFolabbxDGCk9qIgM5mxskcb0IgeahEdtXtmuuAePITw2DS8Q2LZWw6XVZykEIRSFqLUmddE1GcqTW0eB6GoFHYpsmO1Lstm69ivPFV4qOjeLyXTPtuCO7Hgh6ZJf474pqp03dw2k7d9iIJf1c59TbHfqrZGt/x9k/27U/5XuSPj/DtT+lBUlu8rk0vsk5fg2W+NgzooHWuwlHa855Eb+3TMIjSdUolhsPwjqiJzK7QqDpB7wc9y+R7+i7X6cRpYQoF9Bkwf8ylsy1CNOSuJaUGfhnvpVF8/LZf5M6O+L77ozr76TsDlvInensPu3GuE5z+JSki3wIfEvKdYxF350LpMWxpNXGS77+8R5YNoXaiNyjakSkfLaCJqkI2FUnSfpvPSscIn0B77DJ/h8eYosl7l2JwEk33aMnSZoJQSjWZIwxROuBnAVonfmWng6SJscWav8DTBkdSXKEz0PEj+IO2b+SbExGw3uSbEeS9di564AbhA8wHx3owb0gJ+6lyn4Oins0r4DWaOLk8B+W4oBcIdRRnUrrTAq91pMKykXJCaAY+YtvcXm0jlCsLcYfM6WSjEslod4DqgOofZDmcfakD6n9EI8XXXqnUqxda7969iwXK74trtsYtOSvu9nazuuHDnFBh7oU4g/igSTA23rgcSGAM14oGKWihWcjIxhBzjg1SpGensDqSNKpEgiOc4vkZKcc4pI00B7QGVS/1nv0arBFEK+C5Kwn0WvGGO9g7yB/DTzY0+jlLFYsJ6hGuf6gfu3YXqvEu/qZBttITi1T7Pi2fMXN4wMWH54gHn/U/uWRR9mjgtFoi5WyWJ1f7iza982DlqNJTTtnMD/ZjQD2T/fC3s7v/o7TUZ6RLPGM8RJdOQ7wySMyCR5EZYNKtJq2nwCZ4RDoN9EgIxK9Kpl7U6JP0L6UvwbtlbIscd7pf1kIOEJyZiNsoaCP9KT7sI4CLHJ9RbMjYfa0nDBbiz8lCbNS2o8YaX+RSSPPmkRqVVF9NJXOIb3bk86B5tEqRGgHnV2tQHO7z+DDknaHDxNWB31+gnkW0/mnyvP/RroX2hn+snQvmT8fQ9ululhLpP7AO5PGMxLvZGBAxzOpTkifqUhCv1GdELvohHJtLXkMBa7Fg+1N0rzsTfK8yDh3HM8nfRg/e7Pcp5kOhIGNIW4Q9cOabAZvL09ixwXlQaq/KikMcjnlALWalQopg0KgiCUpWkYdvsq0BXe93jbk+es4oZ5ZK1pfwp19Vs1lnrB//cwKlzzkIFRu8wkiKd6kQLiKpUqQlIssH8Rc96RQGrcPPKbFNRf0fKw6iJbYM8pZyGQehAJYdQo5fY2h6chz6t8kGcl7638nKcp6kpOMPQesWMQkHLRfaF65UxxWAlqCU76xOv286byLfEPtdjVuNvONsKd6Cvd0ea9PSv2hHXH5cn+Cq6dc5Kc05/iZguv4hU4bdJVkY+/ugvZg/jrsRzQ6L2dvkhJkaswzehLzXx5KGliXBtnLF+FMxc8l8QuSPyivAiQvKQ9fAne0ay85OVBW4Z09bVGOjP2We3QBThJEKoD7RPtER4YHAyfx8yVVwANVQH00hIP4YoNVojh3S3A+NTAgvHZBVlZZVtVLfn3O0FRnm20AaI7XS7LCbXlHPk7KyxxwJ8g987m+H8l8xmijWE7rs4WiDFtqsJoBOoAZVkktpzx2vKiDKsV4rGT3UwdojAZHfXhKDSUHUAE2uFRxY+uunHikfE5GfWxu4uwSsdRRz41vvpN36IlE43qd/6aZvSq7kTxIsZbmh4ehMptvIKieapoL55I0TPykjg2RTlMoTcKnaXIuFhSSbm9Qa5MpijtJde+M9sAADlU/uLimcmhKYHExkSdfVBefa3xwa82uSzMtBwwli1qZ6nGtGVSilCDoElvwjjO2wCEfUr8ElQ8lv8QMtxgFL2d/h3wo+TFMTv9GjVv/tc7+GUNd++909h9aJ8lYArS/zHcAbYhDF2SLFVHUOYZtAQ2OSD4eClqri3BCqWpkDhWRtNDV4tZV0eRB05Ok+6Q6jESsItyeGqZ6wn7MzhtprRDpPvSf7yIIT0u+xAXH6iNhxrpoNcn+1HhJaU9AEwOJzMQoqOAk1+nrFS+OPy1LYiaEiAPHeONQ8TuPKfg7+6qkkriP333vw9IRCckjBpSNTEwYUcF3+PgcWy1+dVz8+MHj3j64FY/FjXjGk1NvvvbyT1Om3nz19R8nE9/xvwF+r9OaTfFAx4+UnUwEsPhGYEGh8YTD60ULpobSFpVLS4PUMQbJthEvlSerUHBNHjxDLClKV2dyqC3V0c0Tu3TyAtDd/Q6QThIS9HqEEnISsjPSiKvHGEPKfMbEGKP9SUgh0tzVAS1VNgzUWRxOZ85R/1MGHxe7hxMV3mPHZNRkjeqzsm7SjqS4JRNPPfHEqSkdpiEXC/rHKXAhE2rLtl/oHxnZPye3T0REv2wuX/xZFOOyD+82xC7PzB4zfEQjyZoHSCSMHf0CcThPXdXfs/rIyrWHKgYd2rTyUDXFWVoPkPKFLLcYEppbT/nCEIkvyPaQx4H+b6F8IUvmC+el/tBeyOXJ/QlfiHAZP805fqbb+IWO8XGVPD6tD0jnY5Hm4yO103x1Op+h0ny0rv0tzv5mt/6Fjv64UivJ3UWimtYftBEfezrmuYzQEJYl7/FgWFJWxkfysbuElBIfu2xOK+QrjSkmrTGBVkQEshVwNz97zP9Yp3DSWxt6+93F24f+W91C/zNTPevcHfHn/Pf/D4UMMeqAtZOc/0Ky9jRYe3oYw/KhHMv+D2sv5itjkmPltcfca+3S24fcA2B6lwfguAlPTum98jnP9ifFANruUS7gzbWVHoN7rVpVUbAqK//e1QNc8CPNiR+Z98CPKhk/+gKMZlDdv8CWC3BA3sBtvaSkPSnBt0NO3nOqKoQNO6vqao2xNPpbb7grfGh2hkLP/CWxFwA0aaRkZJA4vVeQxRXu6IULpP4BzIvUP0hE99tCY7GCjcNKBSkJ1RMYEh5G7T3e1OLOKLHSGRfaY/3JIxZAZRNQ/CIlED2T1M8ZGXqPjg02L38SwBWgNZqILeIe0aF/qrFAgktY796RoUtWutZcqLFuruq15kuhp5a7FWHYakjkYM9oHU66l1ZpL0VpL2ltCCEO2utlPeJtdEzSI45JjqmeGp6+JB+5J61GgHUrGpXUQieV3KC5H46gXmLpIu/GkCx0JOpSn8XNgF2y26/fuSOO5ZsviJt32RuZvbvwtAvIpU5FJMGfSKwC+V/tB/uiINW7MDDtFjcYq1QOmT8ijBb4UKv9oz2Ik0IyqEoZxU6w0ixXt/IV773nACapfN5TxOLGQ+clAJ5/6AdaxsIZF+jhjP9z2Nkkn77O6esf4hYv+I6zf7ZrfypHDXOTo6TxvZz9HXKUNL7JOX6NW/+lzv4Wt/lscPavc+u/1tnfIXeRWoiYyl3DXOQujBaKBlpz1YAmnQ/0Iqk+smkr0FHMVMpCn0BrmiKHHSvYvdQp0dvGggxbQAt73P3OhoanDKGGOLkUKgjeij8ZlVKYnqKubMX3h3fe3+Q0KFWUL3qigdZ35Zu7mo7/kmidWCCbksrnpGqW/KXDUe5VqocmGmg9EgNqt/mCbsRqSGSjggQkyQsMkn3oJCAlj0h6dAVFThNlaK8L7qED97wbpEOV1qCNN8TQ0uF/WqOzkonaUd2EFV3sZtOne0mFTaQyJz32spErMudKFU7sEVLJE7qv1LZOeXuum02e1i+htHu4W2yKFMdqccaxmjnX2JRCR5yHe38aDyv1T5F1X1rjlcogBZIMEiW101ogVAYZ5Ra/JvUPcvZPDXftb3T0l/ykzv5pzv6Zetf+hc7+VbJf9Wmxlv2N5vCOsPmCeMuzVO/SqJ2F3siOSXpDLi2fKzk/aam3QGiFQXjU6naB1nogWbzqULU2hr44KbCnHKJB7VTKnBUNspb06TdsZF1/jEK+q9x6X1XlkOTDh2sem8FfC494KK6kavHBru/2vDo3c59xwMJWNvtgx6gttXRdUn4FhecqCZ4zpXYaE0rheUSCp5dDvzLKMea73WRSGo9F+z/rFqtUBLJnKfXFWWSZ9LjE46Gdo7aKobJMKrX3hfYZVIa1yv2flPgItAPtlvgItWNZpHcAkfp6cN68ST4vaLs9b//JA6YfQvJ5jW7V8Ta6VsX7wr0UHty1la1kw2hN+mCa7+RDTtsD5CVyLsVtDVozk7nnyFW2kgmEud2Ce56HORtwWfdIOrsyRNNdYbzLXAJzGfDDGyXT8aKV937PGzFesM7sdVcDBrN4kC6iaqE5q8zCXxuQGdancM/fkgoySyUctHOfs6eFQlCSQugzfGnupPTqOy12pOKS3DFewTSIo7H/Jqwezm99qtlub773/YPc7zfqeIPRyjSg7uHiT5vEG6P5FU/TAeg68/lKdiZ/6/+eG/xX/ta+fdIYYdwX7IOCCXi8DCtPD46l83BWbSGjUh5Fgg2dsHJKtiDVMAb8+6py5ZqA+r79RgSsUVauGc19Ub+mPLSioaEitHxNvfSsV3hP5gfJt+I6X2lHmqS3CiLqlnDbEdmETQtAEvdDT1lFROp7/IUtEzbQeLr/LbfZvSTeXXObXcviPTqtsHDagAFTCwqmDkixWFLSLJY0YUPBxMLCloKClsLCiQXzcszmHPIha1wEvCgCVSA1MtLZhKgVjBs0aQ0cQ4wDr+8SZBbhwiJeermHK8zfkyvhXhevBdzRoWBH3Z3AAKBkKiXD0kpMIJM3IJdylqSiBsPWSLWAY6R3pUj1JZyFdqg+1qOZM/sL4iNMAdEpIYtNc8oSbcZwU0BEWtjiuLmlvDYs1F+bmFZUPyk8xF8bn1I4opmYDBnuR/ZJYSetFaI8JwBRYDIScaxWp4UPXn7/sSenLHnmOHcrD0+pFQ/b8CQJJ7qOc/8SD7jlTFt5Rdfx0Xh3Mb//7K3ZpM9J6HOkd15110nXvOquSu5AN8v/TOqAUZj40XdR8i7vopQqbfMKIx9rb9qENQ1it9g9nP/5+/EHDown9K6rgtd2syD3sXhIpyyTdW3gPhVf5herFWhGZ033Xik3uHuvI3e58yb3afc4fvH/4QyycAYf6VrLL96/H+Y9mdsufsM/i3wc589Ddc/z54O8jW7nL9Bx/OyVq2pUaxKXlwyH01e3toHb3nd+ZWhHn8LQigV9yTrsgdxxMZ9/jXgDOmt7r4OuXdnNCIIfi9o6q+W1n+faxIeFVLinzrF2xvWeOm6D2C3kwPWhf75O92QT7MkX/xONsx/FuEG8uUn8cTife2DC9esTqK2wq5b7URT/hFdaBWuET5f4zJLvGHzs/g+FneI2Gx5cLz6Yh4eSuX3JFdq/FrxgbhO6nxK2SesVtjnn9ilc/1Lw7oE7f28eQWI/3CgSqf1AD6vZvmlQWFBO+zitptQieJdmRVq031+JLwi3DETYHmc/KiZ1z+t5hvJ/ewbn4EPyM77uCQ1Z7RrgQfdIZMXdSAP4uRD24Gd5X392rjOfSenWMpf/j/j5oz2eubx7N+C3jklBuf+n+7Vwf+6dz8n9ML9yOFMMnCkGD+8m83lTbBdXdJ+E9Q6n43lI7w6S4sL8aNISwfzpPQXeSBVBzNQSXUMqp9brQgN9xS7AL5rWJ5AoWwE2E7IqkTN76X1naqPSwgcmjO0jti+YMKS6zlczKSpW9juzn9B3WfSR6kb5k8JlJCyb+EDiiLYTj6UKwY5m2W8VR2p7EglNehMXryT5XdK7g9hP7N/84x9s+kX7Or7Z/hZ5zhsg84VzuSBv9D8LlJpUSCdP84U10LJKLY4H6Wj1BdrM1BMRlUCZQVXSMr2Rt1rNKYPkR2VSg0M45sLtz18N0b0VFcMseEosZD4eu3tgeJ9zu9KRw9e3gL5bQn5qCE8MOMAhOzj5ASiOqPvxrJT4JV+EluU9HYiMrJJfa6QMk2q9yP/lcLYLt6/fvgCL/RhP6hzGHRG3wnOjxBpuBpUTY20xHkRBLFeR0l2l1MtEi0sk0uISIIQZnKtSqB08iZshDr36fU51mjF9dBUXdfLOnWA+QuV9ROMt1ZWQ5UbArTIqX2wVf2PDsNefa++Rkc2sgbnvscPXsJf9B4d/jt5rpzA6QuLdYK7+KMfmpfGQ6jJyGMnVxLwIvidW0JqfACMvKvDSNlB2zwWoQ1my/VLdn6xMjRUTNABCAY/9OdY8oH1WhFYccedjtR/e8zNOLy3RHYrcvqIS52/teomLEismv1XDFtA1tYvtrKX7JPCgScTDSOf2GMzNi8uX3ovmB7vjy1KTG5y6csfL0NIrnMWz4lnHe9FijAQrOZdXvrrWLSAiD37kVMX4/lMHrNz1wMqqhX1bhp+Y/ui1OYuvPxJalL8xMfbkpVefNsWtsWWvFp84/O8HAA973kFg7HmHKSnuS2tZsRypzSOXIZDTFtJ73iAcL7/D1BgSI7/D1GRUKv/Tmwk0rgLg3d9SMKy6urCwqqrwLm8rwN0VuXmVlXm03DXjAsdYae6kkAKIihhxBJjy3BGZuztUBQmqYWEIhcWGmaKjZOgq/wt0XWd/T0gHy/O/K8SZpxwrANzYLa5ldZwWNL0ILyTFW5B3hsHvZIr/L3F7mVvCFBc5Satj8UtlX2/jLuDTSeIYuPIL9y57QdEHvhGJuYjS4EzW8R5XPEiqSQbsiX4BsZzEWBDJmeMkyZnz5XziBKXMvOEBJpdFRrlul3fuu0tvDBpksZaVWfEf5eVWC/zg38az4sXHggdZsgYNyiIt0r/OvBF+s5w3wiryxVn0TOzAP7Ah7BRY5wJM9OTF9D15m+VYWehnf4nqz0n0TG+WYxZJ+3TaPoS+r22zHHNE2nfR9kX0nVybZb8laX+etIuX6btyNst2ENLuRfuTeom0P35Ybn+B6sltME60og+0H6d2ikXfuuTB0P2R4j/kdy/CbyP9/SP8Lqc06He3dz/C/qGiczwptlcukR81pdDUYDHGwSh8CI+ALSPKYBwJSvQE5V7gBLUfpaR6rDeqQBcmOSmdM9hm8UvxC5KFcon9qUvtEnNM5xPXY4ehvwt6Yhjo70Q5n9zlHWbEbizIZ73FcdZTnLEccNTDwsIiwyL9yVvNFMrQ//hWs1iQGdzfbHZj7fbta9dv3bm6Tdz055ebgUAv/lu8Kf4s/k5ebjbq0UedsWV0vklSfJH0rjv4nULpKCn+uJ3Wick4J72ORybuFLqEmlPAelGBe4UM1nPkRT2EuOtJPV4DBeiTv4nnxNM3aVLPgc6R5Fnyu+vgWWm9YJdOYbcSfsfTvVUAH66UHhzu8Eg7vNBxTi90PE8L4juuy2WGHN1wb14sldhg4bOS3RbetWoSc9HedxK7r2s03/yquPhFcdobLr56vgPmleE+T4ajv+V3xMF1M4XZcvidRHPeB9m8lQryMizW8UoBAw3jkauBxDkr/1IgaiSb6TjnZZa+UUCt4ZQhwOZJfmKWCmeRSVvEwcy+rmH4c1Cdj9hHM7fvE/ucP4f/YND5s5J9SvJVwJysPXZK+jufwtZPPjdqFIIMaLg0sUiOBNMJCiS0KbGCvG9cgVsBsHEkPCSeoSGnQPFW3KsbCQj3MUSrA2kNI38/D+X/R9p3wEVxvH/v7O4VOncHHNwd5bg7uqigoIh62KmKHVGxIIixIaBgRVTsvfeuWGIvURNjojFGTTSmmESjaBqmmJimBm5855ndK6Am/n9v/CjhWHaeeWbmmad+n0AAPyDahMzb0DwEdm5881hOCPWrYwEViJhk7Bt///7013OPHv/69NzJIWUJ8WXDDgwri0+YOJi/6IItzxhswX/Kt26VI+iXySDeeRO+xqbvnD1jVy+e772rYs7OdJBx1n5gZI6tbHt3NZmjH9FPnNRuzuTc2favG3TgdtDg3Ch8mvAhsN3bh4htYLvYSI3QS760ERzwkF+Cfvqx5maTwqGXBxU2vfngh9uoTF13mXW3/D1oWqorZ6571zVt6kDW2fL7pX/88CxKTyqVheWMnsk8oRWaSArE+EqtfXOiaVIekwPRQKo1eXOITpoZan9GInpe9UyQwidE4UMlhVThpVRDlqKDuPBiZZC4GKds7hliQO8vGF2IO/88ffrUX7Zt+2XqjOkPcXLhyIVL+Mu/48ff46etdh9sj9yvfYLid+/GH3zyEf6r88HdrZDseyT/4+X4JP/iAx/67Fu+l3QUkfE7qIyfGCB8vpqcpyz6eZXw+QixboPovhz9fK/weTfGflfQz4W7YmJj4fPD5PNoeoe8IdwhYr0oHZf2KTIxw8zuencnCUuuZpRG7KYXdCaItLUeCLd2Joh06EzQ1PHHWWYVTW0x+RkD/SG1JVIlIzcH46NWxXIqAauzMWIFtQzAPK0tCqJZAztjs7bZ1fLmLo0i03oO9lT1+3XigQE5J6Z1HJbTP6Mi3LdDViKfuGonCrTU4GexTd2OuPXtOxp/PuWvwzuZZ0v2v//OOyf33F68uyOd41qcxveSfMv4kLVoZ27rAyhXRKeUg2c/zdkJ/MscQ2YNMNhC060IewsysrPUanWUOtKojwo10e1jBYYlpoStFZNUxlLcCYpdJehq3tCMiyv8dvzVyasr7xWcKy97Z9S6SlVJh+0r+3t1GzBu1MAPYsancurDVysujRqMIw2SP2acze2/e9TCXb6WgtYT+y5duausdNTov+o2hlFbMgl358cQG09J9C8Z9JlDagR43DLAHXcGf41SxS26h3vG+h5tHpH67cTqIfua8gnN6gwl0/uNVY8sLyxCMaxyRrfpuCP+XVj/YrIvOkruEbnWBLLeAFq7iY7jqKcPcsvAPotwXFWGiQgjTwc3Irq/rx2ZuR4oR71CFNZWhALyq2Zv8ujEcR27ZYX2zV52uM+Er1esulOyb+nIPkOOl53Im1E6sSJm/FjJvTatyqNNbVuExzUxJc6/vHLJz3NnPVi267fEFhP79q3oZOl1dtGOYwf3Fs4b3ITwhZ4R2lshxdyZGKtcAJLwKrK6UAvkRFQYAHGAPgJQWSjCNzS1tXkmshoxYUTp1vq5ucgkTDgKl8l9Iq3QFHbLwV5a44CYTc48W1A6cs6kS+tH93m8fMFXkyrnFRUVvT+5+E6PgtZru4+eMGrI+37o05SMbtl5c9umpK0cPn6Kl+/ErH7l7eLiK0yGLl3apQu+cuZjbObbSi4RbS7R7BJIdWZoHkeOoYkcQxfr/RcBss6zIc5p1gmjITiIBcqljCOMcahDYoySiZeGo3g93/Yb/MvcFpOKplV23L63z4BsQ0qPzScGzkXBP7fBGP+tZX+StDyJf/6rLGtUl7Co9gNTSo6mLm/St21gmN6/5dh9lfMgU3Sz9nXhDgdZRGVIhlnhrVSQzeNKr3Ces8Fl2zMVm9p8HgobEKTwA6pkkm+JqFCF8XR3AQ6lPU2xGZhCtPXG2OXVYopi0+seOkmH44Og4KV2uB/fTkxQZL/cUOWvyY3o3pfe4UIuItTF+5K7oLU5ATIxJDwryZfR9jZQDBIB2pH10Pv5gTffT++nD9B5+nqqvVTUp+8khzZNDVGIaV4ZF8DSqiv2j89Gjbm5eu3no8fcXNNjVEsePeFbvtbDIkl4rXv3ES0lknuH8b7ff8M7Tx1H/f74FfU+/nrevVOn7uVZ8t78bvjw794EnlI5zgcJ/ZrJHmacKSKGdQ9E2iozyY1sNIBODi0j4+2JIHTPovN4tw9r6JXatW+LRisy8tZ05woP1j3raDZs8DOkLxsqyIDl5A4Yx7cieqMXYza7uUjBi4oABveV3BNmF1dXVy9XL9Bjye5TOyFBtociDoBEYdm4qafxKOQc16tFeva0DnhHG52mugnfqgAX4FsJ8W7HXHv2RmvQw643RllGswfePSSch26ErhIit1XQawLigClEPXJzlQgOHsG1o2JUdM9Hs2RvsGoNGTmE5cjYrK9/1xkjAw98Or1R321j7r+2vjW+dQtN4IP6j23vudO35MtTeAnuXZa+BJ1A3eoKYnhnek+K+KlEL5pAaQC9O5vsbWcm4qSTXEasEdHJdQKJascx+J/xRF8mzzszzkCNXhTGRD6jc8k3xt3M35WAom8TFnRl4wrSSnEo/pCrjKn9W5jnUXLuc8jebAbYn4BeDgZCI5pTGeDPsskO2P3UARNBZ96MidUbjeCAYeqJI2t/8xccf7I5rXDYJ6vy26xMKZ4xqfCe782sGZ06LVtfOjNpx97efXJ07Tqc/XTS0BWZxbMn35giuTdhWlhETr9BOQfM45JzRic3C+uUm1FMxEHk4HZBoXp1+9FHFo5a09MjbMbIvHXdbXm5fCLhYXc6Pxfy/Qiyl32IfPZQEhVfAboE9AFgxf2lpP5Iiv8fadOflQD9XOnwE7LXTpoUCj9PCbmFkUEhusNoJR8Nn6NYPT9iQ0Tz5Kkl+J1bLVpHRTYePpAbwRVZziZ3VLyuWzibHVi3kCtCLh7bvKlEYqrIeseQ9XVndNAlQ0UTvgEul+oF9tZXTW2guWTNPTwYxkPnoVV705gJeCsYpR0pg2bo+iOb14brdn/g6ZlVedX37/QaHGEamVRUOrqIT8Tf4982WFaMxx5+3DUkR177so7Mf5SQeO6tD06KdXFplDYTYzIHU2T3NB9v8G9awzaoKd0JJsZo4qhccuxv/8L1j+WaHOhZ0Looo8fMjNgp08ZWdN68P7v/AFPfYbOqsmb+vIpPbNlmYURI163Fg8d2i47oPDx93O6UFaHdW5uiI0KaTnhj/tY/Ztp6hI3ko4kuEgg9wiAXRqjtEMUT7+CTU6lUgaoAn7hQ6sMObRANjZHQ7qWhIYL+x4/8tmv22M9Wrvq8sPTHnd8jHueOb9dq/NqeZWXcREXz83OrnsyqfLp351+VbnWFp8+vPhmDzHvWvnsa9CPqfwsiNkwTcyNvss+8ZIRrcnqQwOlk3V/2i99kNBqE3dRAcNp8xHreFVf0TOkmys/M7HavtTO0mpvFHuDGWV4XBenSXDbVTbnTR8wfobo2oUMNtWZwBwri2soO8q+aURu8Qig74C6p34QaFozjnmh08+7PLj6SWz2wb5eS5OZ80Hxct+zY78Xdt49nr1uSCvKS986rQ95kLVqQPVxK9omGCWWSzU6BPlBsI2VF9d2dutgH03MUyYqmc2S6AKMDFlRT8Lx7arUMow3VhpC3+AVIhB1N7BNAYqYe51ipYIkCpBoxShWCQWrgPtv+292zdz9NbHIlvlnEsL7LdiXEug0c09Q3gUgA/Aj/jP/Cf6jxFB+01hvf34k0FTufMeMmbh7gjupuVW9KnTgK+7rlVE1fsjtDkPm4Cz+E6LieRMd1YRHFlQcEWJDvPko1UrN30Mzb+Ev8xR00t+OUaZlf5azojNCXaKRF0ZydZymLYn/b/UNV14wR+K/rbHto/cUkE/5AXZeW0ZjVftAMkpFCxyKWXiLe/j7gfzHBhLhYwRIUZk3Xg5iy7KncgpCYKxrtzR/fvnf9asHkt5e791k1pRo1n4f/Wf4QP9XgyX5oo+rOXna1pXjCJA9uIZ1LFNkHM8m4IRSLWyPn4IhIiexjxfMxRLxDyNMhTEiYyctgBAMDEVkCDeqhJQjb3FNFWQ8qdGsUr7AWfLOhvH/+hlUFU73jzq9ZO+xMdHDL5M5xp71bxKTEhZDdhz/Bv/yJn44eV43YpygYBazFT9bu3bt9/UN//GT0/C5V+5chl40ONqPUajMyI75zsBnp52/Uw+sR6i5G2eouJqY4Pj/KZmNaP6d8oJ+/af+c7NvtOIOvoD4rXybf7OELWQZuRPVwBWe/aO6DEwXiV+WgoIWlQxlOeLpViW/EiW4W+gT8DOUIzzk8kWV2VlKYEE+Z3D9Sb1DEPleq44RiEZpfU8OOngt1Ok37hCZElJhxAjqOcbIkt7YXrrGW6Yxl77EzLAupTjmPzCuU9s3VM42ZzuYOGi+WZyNBrYS7jeElLF8gqJfUppQ72JTBwWo1wwQ3Do4OC1Hr1XA5eptMToLS62WtW4izGpdxsSy54URoQ6UYC/BAROPkyg6MvbHo91sr/148Yl7b0xviI5aU9XZteXhjfNOosn5jmmS3iWObDsng8q7fmH5rBhqDBhBuFb6dNrHTjEsx7uhmQfV+ded9E1u2rO21de7qDRp/vwvf5QrrA7m1iWR+eqF3NzgLiZgvd5Y7cVIeWn9SoBZaYVzPRAwOJjOLDI4IMZJf1YfEGrwMChc5xWjx9mQdRV2csrXDRaB06N7BJ3Z+8GTwlkG3Uzt0zWt2cdH5IUMPjbrxq//Pygl5GTkT8rgPd7E4Bw/uvmM8eg2vGzpkGgp+xPVZN2zI9kG4pg6dOTCsa3Y/QR63IKJ/r6Sc6IqTBJHo6uokhZhEGrnuU4g6C7e+8JEN29Jur9hitFaHpOiLpPsr2mbMeAvGTL0fQqLqCZPSS0+1cxq+ERrfI1UbFvpMl2u0plgtfvgj7k9+O+AtU3puSscY/n1ZdCvLXssj1o3rYxmL3us7NMrn2TN8j84D4gPv0fhAG4vg56fzA58S/ZyVRXMC/lsnIvdGSO4w3kTy6aGiVeHpwTEpep2fL2SvyKkiQSSgPwJxD/0NZSpr36d4BVQOEOknVaA4iAPzI8a8PfEzNO1t8rXsM/Kl7nDhqDto/Z1xI1Hx91Oc8BA/dNJ52jfrt3w/WY5e98UJztPurTt0yoX9xhtvxUt9Uf/9bzjRWsRnZF+tInJRwzQBS0xNburwMB8XXgrFbRxV96AwKzIdek0Lig51PERHmQwB/nBBeRlNCifq6DX4WDPj6Zlp3ixe1ASZkFCJ1aNE5Kbog+BXTe3XqTInp9RbM6HPkrW99TGhoc0rlrP9vdSWCz6KuHbm2JMx7To044O2XL696d74MYWjxyH0Z/V55OSyyssdx14Yjoa9W7hn3451F7V3dm7Ys48s+2iczidR/0Oo2ehC9bTwsFB9kFbjp3LlXWjHXXruGzEZplAaLYab1NtBCBESxcBuKNi78CHcQ0jN/UBk18E1GZOju0e1jW7dIbZxI0/c7rwyJLjzpKJGnujsedQ03hzq+WDbvijDXLVXxy6HDaN6dkcj0+sutmUvxLQJ9dwZsHpGN7w6k0toK5zrVJxPfatKJoBJPSGFdlXgXY2imdq2SAu9oXIEqrVmFc1P4JihtgdAa3Alql2Ayj8szIvaIazQOgzZvapUiRDjMPywAacqq2efGihEYPC8ytmrVs2euwL9iT9/yx9PQHO1p1H4u9YgjKUGQi/kjxz/jX8lqsRTsZ8q7QurYPyFjhI8x7PJNFOj0srmpgiaHPordWFR1ItAd7YixA60w4gClAqa5r12lNw5/NbYm6vXfD4abywtLYPutKj8u+W+eKIf2mRA/vd21s2f83QPLofmtNCkVpArU8i6A14v0fTMXkEIGlvY4if6aLrOjr4XY6xepq/XYYqd3q9/k5GFy84MWoZivkfmQFzzzd02y2dPXpq2fh/+OrJn65C4+OjEzT/vPYOijpyt/apyz4S4mD7juo3ZDn0GKsj4DD+XCSO6UpgK/IFWdPnntP8QsXUVUXJ4ptfSSUWTk1rOmTV2duqm/VkD+zbuke3sNb0q990zS4sa86VjZ3QM9E8o6N9vZFqkqePwjNHbU5ZEdUsIbRLsz0sj8g/Pf+Ny0/BGSW2BB3fIaW1N6zwyoVcnSxtXWIM3viJoJ3RTocq3PYbgC7hJlc/9HEw8hcKktyrletHXRvus8CGWLUibPLRpQni3VvjvGi6H34FzfTRbPdwtgAkD9NzDXflQHnp9NDVHyykoloe7E2czoiFYQDvgEbmHGC+lm4uUZ7yRt0Rw+fkj+4gyUHX1MnZQZgZqnTI4Oi48MwF/Wn3mCPpSwxVm9vrVR7PG3cPSJogv2X38INQ/kFm0IHQ4M+1PyulwbKq1WRwte2aHk4HtOT8qsdeR/UcQTVEqVKI3R21ABqQPJcrJBHZ1BMIdMHrLUhCOzmBO/baliu37NpsOc15L5Kmv5HuiQkiPekpgHxg4QQq2RZJQFRHnxKzxQCbeF51PMbtfdOrad7rl9VZnU9u6XZR37TuZzeQ8cPGqw30iCq6te7C/ClWsOtQ3ouCj9Xf3UZ4ayLwW0vyeJLOTs0zK8YLAMAjWBUyJKtPUN+RO/5csDXzOiClMLoyLSklTmJyQwYWo86FkZqHsbFb61entRxHXBe+4i6rbQcCTVVsecJz0el0of2GLcM6icQ8+kM4v0uzm46XwcJUwKXIZK3qnGnpijnn5w9lT8WCTs7JQJTigDCgExgwxnSRjl7/TxHi0jfr9A6hZeCzucwU93oIfSL6fg1djFX5jJd4zXUOebbK1HAey1wZ3qyvntbtXCLSMIbxOojke0qMqymsvwdv1EuEdEtxpUnGUJ+5wXhFKRHYxEdlvEpEtyuWKTDSiGxXUsa0FQd0dr0znEpJE34Rg/wcwUbCbDURLAQxuNg16KSY37D/YlMsIDAyMCoxsFBJN03JgH7Nw7mkQ3IYiRaUD0SYdHRQB83wvu0f0HVy2Ov3e1ys+GjHkTPn+wY1GFU7OjTSNTBozeexrH/btag4IVHsoe6ybhB4jZ6Sc9O36xX+uqFyZ2jVcwSdnHZiztX3Hs3v37Bb4ZM/joTlFLFKwLDnxtHu3PXPH0Usg5A8bQmhO0cszdl6SpfOC7BwrNgi3WGoi1kt6gxwDH6HmkBH0dAc3cHQ9RV2tBj+w2l+t0/h5+nh6q5Qv9wMjmZ5IDmVcPFQhc6w114D8O3e+C9vGZf7cRfPklnPyBQsk5XDF3XTIOzh+u/rerdprNb8+fGDDfgQfGtuSqf99jA3nIZ/Gb7cI3wu4r+T7c5T/FFOSzJPmdBH5InQD9aS+EJsjMdrRFyLmdJkEl2LDlhOwGEbhFuN61O8xkXZz0RH842boPiEpr99VIjVrN+rwLXSbeC6HgdCoITS/RnPiupidVZ5uck5iDzp7Wcs/qa/X5hT0sleFskwO/RlRRE6oFUoFCE0tdDTWqwzQmDa+OWfgyB3IaWYij60nkUef64Fy9tLlQ7ysPc6UXLMEsPdrq9GRNVNDh6stLuyv604OqztG3p5B6UokO8QIdo8aEbUdOsKlyaTk3IGVgGjqAdStk0urKfQpkQyGTRMuIWzUB2r9wJyDCk6lE7nH+FBaRyiDukIxIYXmxtnTugif2dA81ARfr16+/P6dGvAX4t9FT2Hm4Ajt+E/XzfDbsI5dC35C0XGITIKvMOvIfOHMNSFr3oWsuQbWXE2khY8LKxSr0jPnsOYOZ45o00YTdUUxPGxn3qaTEtWNkEaVafYgcl68Gf94ZNHNtLGdFuceuH7q+M51eUOvzpKU78Rnv/sWv7k7K3UhsU855Im0/wxb3KUjY8MUFfYhzYmDncghCeOBEO9JIehpThyCnDhrJly9XdkgJ85klP/H7nTMifuXnZqRmWlu261b25fvWMu7Ga0Aa6oV9Pt14G0IzINyF0lYFzIPYLDjPIDT0oacpu61EK1JHyhyXP7vHK+XmPhS7mtss3jZKjjOol5/F/TP8/1dGvZrYdCzP/FNvpTc/YHQLxbmo6a51C7OEJcQGrYWSJDYu1cDx1TLZkB/MmL8+Hqr9FKZmna6BTzg53FHhOJs6cQVR47021bWqnff4JDuHTsOi6zGH3HZvvgaFzryk2v44yVni8P3GTLH9UdNeg5rHBNumcYfOXLEnuMGtWuQ4wa1a72EszCYrFcZWa8AorO0sdbwQZsuFSIWQ5qD4inU8QXa4OKCaAPiAMbfZFAojTKZvVIP6oEhxtdAHKa8m1U4d/XmGwo20fKOPK/qtWHLk8amf7n4OP553Tbks19S3qlz5eCPb5/a8OGQNs3nJmftQh2+s8pEWi9P86XimBflmL0sj6R+bib77PGzb/hDZJ28CeVkpeB8oTR3sEkYKe0iYmtKrQHnGPXSa1GGj49PgI9/sFZh9ISZ0l7f0kikIAokS5u3q/R+ti6MHz76/fH9T7aEejbvlp4bHGVwa8YaAyaWTJjEjf/0ds0d/i3Lvh//GNtikSHnw1PsT5ZCy42K9YtmCHKA0EHpU5BjTHQZCWIgS13GsAWQPaKB6nc0CLzRWmq8aZWaYJp/ZvR0lgUIUO6ULpr/Tv4QqmijtFD2+sPf/6y59ujKlUdXfHuNaD5+KpeKLl6/f4PdacmW5Fp+YP0s7TGHoovyZo1Bwp4mtJTSHsjxkJvKISUkpMOeoFVd4EeU5oDvQUO95FpWdNkrVEZVsEIu09Ea9bgG2EOwm7muZNMWrztypNq2jyW5R3AJ7GIP9Kd989I13Aj5g3TvPhP2boQjNiacUUu9/jP+ZK9shHpvVi7Ue4sYCovxexS3yIUxmIOsSWeMBvCVbDwVk/lkFKhITy5GvQK+tqzBO333++KdNehd0L7xe6iVJLe29/P5paCPku+7if1p4syxDKIt+SS0VyYFA6Rbi6bjaRt2qDHqCeP8hOJ+2qOGGFi2DjXcdR/L51uRFPnh6sd4TM3exavXE4PjDXzgo8/ufkEWsQuWj1tcPqFhjiuZu5jjykgYP7OP1f62yiFoGyvzo+mLCsMvXI6vZWuNJPdcbX8BE+sp4ds4aruqYU+ChEA9rKDGmnSI9godaOFdnp6eak+10pvy0UnmH2mKJafExJH92AYpidLBKfQyZ6Iq8K55x4Itsfrj3Zu1ijY0Zm9U4898/Zt2aXOCbIEERDj8qNkGsiThaF1td672O/wTvlMV/1y+LJkb8H8zPdOE254S6qYhshaqfDgmX8qzLKtJd3aCrEItLbL2ZrwVFOuU/OMiC4wks+YMKi5WRY8MZF2R74kiPvTNGw+uf7R30P5B+z68/uDzM4PYOZZS9lu23HKa7UT/llt08Jmwv5qSfZdCZGk4ZE+FIl4Sgjie2PqcUgGFeVYEk3zGCqYUaLv5gqiOEc6EGfVGYyMqTAWHtjVVyFi/658tyz1Oz75/p3Tr7MHr+s18UrXuGZNdse3ash3b5v+qvTJh7YpJ+XvTyq4iX0l5/x2vTVqnduqxYtiUC6PzcibNn11SVnosf1jO8Latyw8I50PIQWXcGaNZ7yZlIe8Z0RMCMDTi+XZn3BXeCgnZLrFiaQX4HDxVaPHXKi90CXl9HYoTyVbcdKx2Nr+G2KmDkAapa8fYzquL7byaxbqKjUJ+MNn+jcwRLgiWjxGLfECuaNKhXk1cOmjiBP8Bi/RIFHMo1glxG/CkZTU1y9HEh7gfusqWWWYTKi6zcbBGwjhORPbr6T4ON4c4U/+jE2KSaSERRweiur0NaoOX+VJRqudgv4bS7cvra/D7Icbe5RMGmVPbB5pp7vEefACfxce3dtoWOw6pkJwNZP49Fzny+RxgB/7LGPD7ICReQwCsqKUoLp68TAORGcHLQyhpU8Mt43fXZpFfapgzbMXLp+8PeT5/l4xH5STlR5DZ343yQ6wiR0wleJM1AOToB6IBidecAVgdyylbzbyyRT+iopepB27/CA1FST+hZUv35yj2ucVkZXAP6zZzgwXfuurZ22SMHWJO8MgTWg1L5FeaEDwIIeKIkYwl51LKknMCtspMIpKlUiYLJLN0COCHS7sDorqEkcz6r+eyzC6BYpawHC7DV8kS/vXxw3O//v3w8bmTOSUtmpcMOTCkpHmLkhyJUYE/xF/gz/AFt1mzXFAiaoTCyI1Qjn+RDL5SteNqvpNT/tUdVVcGi3iFDfOE4a5ZRu+acIqbjnpKoceFhmLysIMY63FyYVxs+xkpQFTSC0fB6wuP6etu0OumtjuRiPS64ffCu7uL+0QF7yZ6GtGnWZ6lDTehTxgnXGr0xEBIyVMio+gfkPzhGFSKJ7daTbe1Q6aeGlZTWrb9NepV8kmIyz9fybpbnlVOziNj9SRj9afzCDTreEht1dB2MrT+4bn7UtA5FLHciku1Ty5Vv1EN7ySEp/LHa2ltGNOT8OUq3XPkrFO+yGUSDhgDNaWOnHFAuyG3iJ03wh++/1jCnwHCGDYG0XH44+TOwoTuxQ53sK1HnBWQt55693yXONjz9hvY0Jx8AwkHnnr01n5iWwbgO7V4xB309uHBlan4c0kuVn5268HX/L5TljzLD03KRgDwPez/eLHmz5kITrVAiRyaZkoLOBm9l6jywQvKB82XUXv4KD3d3VxdIEvKqHeiQojCAgMlegBUtXWsc+r9GGPLQ/wpN/bGDcuQvJmzKqYTWry+/uybb+hy3rB8NX317NmCbrkZemBQWpSQ+QEaL7m5+XyJIPvsi+riQjam0kXh7irQIBNoqK+PEFbMPkZYEYjv1OHsmncXrsFfCHz44S6RvLmWHyetJnsTsM2InOlktTGICJVoyL1oxYd6hWuR2BjBCqUpRLAx6puCFBXZXj7Pnq+bvRg/OVr5XfdJXVb133XM2fIe28p176ahy1NKBtyeLynfhC/+8Ct+Y+eAHtNbJ1Y/PPrdlaSW07tlA3+6EzoXEjq9ic40WpBQesDVkfKIgqVzg+XCGQbJAwVZQJ+WYkXTZ6i0hgcFJ0cg1a6Eh4W5ZJmJHcEwPiYfY4CODOMF0EohzrZpURdZqHipaZ7rd89tqEpO3zNv3q5UfvzFi6WuR88mJev1yUltUoKDk4ltuxlf/OtXfGHbehT4Ga14fQs1Rk325v70yac/D8t9+PGNh7l0H0SK8sON8WFamJuD0wZB+zZi/aF8GTEzrCdEvHk83InKpHL38fCBClFCs3A6CJ3IQMNxZIeIWXVEbtU8w789Q63Hl8FN6LJ4YWXFBUGyWH5kOzV/u/LDm/snTauYiP629yKiOXAdKG3TyPeNJd8w/kwEnJYQDc2XUilZlAKlQrS1ma2dFWFpQADZHxEB4cZg8iu6EDCjbTASgrsxXvDry8gNBv4Cq+YEPlJOc2TohM/nL/mkpOOBTRMXd8/qsKao34gk1xY78gPLR+V3nddk8jju7vi7a3b/PHEGUl7/DoWebRbWttnGqE6hgd2WTe6ZXXdk3bsH1mZ3n3HsbeG8XyS8TeQTGU9633UwJ0lFu8kTSQCrjWVoMq3Umu2gTweGU22ccFqnVSiCg7QGnUGhUfiFGwzAaUY4dfYMekZmFQAqUSNU8InPmKu494jTgyo/GDN8LL7U/fSQ/NGFQeOLp+VfYoNrtqzjvVTe5ql9+xTpUH8X/EPHrqkdLbKumVlpGPDBkJ7QbeSDyC4gcl5A5AFUErtGRC5gB41IxqJqDooB65bzQUdhTxG5nkp+H2yESHNYfRtBly6jwl00EbwVgnUAlzS1DvTUOgAjWqaHddJzf/Y5rLfM0B9KbdQyxM2Pvfol/szZLax9InpwAKtRK2IcPAgvun4E9azacvpaSZRDjw66l7rQu8aLzGmDNcalkFKgLSLynBAgZeXTnlO6dDncaWSK3l5Wi4BY0oGgZb3AJmAPHsh698af3904nH0g++TV7/785HwfdB8HsPHoAe6N9tK/assH6D6M34fQ42fNt3cm8o5om8gLScgG5SX+0Ec8DXDehHtJdOXpbSk5QZyYb6/TuLuK+fYyaLb7XIWrrTd4kL0EllgJbNTg0UUjM3d1GNbz/vip7xeVjZy+sfybpfinU8MyD7xWPqtswi13dnxGUpcujSKntu7QbsaA3sUB7lPGjFybsWROXFx2t7S0bQKuF9nYmK4tsQvcpSwUkFOLQJeOkKPGLNgFiPYTtZdec/hLpQfO++dLpSdaDbjf6Mjoa5l156DgetQnKVxr0U/PYakHsdn9qW3Q9pmgs58maziNjO0KOQNEqtLkSWg1KckHi11H9SnQjpVWPURvMwlAPK2rrj6DvB7g46jUgj86QcYciLbRJfpKwN0kNoETnVuEOdRZKKCqZxToXmYUyKyeH96pGp9QerYuHjOwZVITj0CYIjfuzm+Wua0Wh/S/fhGtIuMQ6caPpLm90eZIbxcZuFPSwMQh2lo5EQmwFVkbM30YH4VarZASdR+JTnqy+zhI4pCRXakHOyT1WqCMl596+4pcIvW9koycLx6jzP2gfHCfVMsQdlPSkG7LcEs+yJLCnqi3ji4Ctj8FjMsHYapzsDHsXBQwFPQAllaNi6ur0YJqdAEnEhZ2RwdelL9sfX89+0X3MvuFw3fxuLtcGjeubhH5JWtshr6vR/1YDvT1Iu8fB1jp1vdzIvAFo7M5MYT3C14MhX4c94UGr6nG8/igg3WLuUIHzDWat96fyutoMmaF5B6jI7diSybTnKFjWQnTODoslGgjnm5EZnBp0MwoxcOdRclOMjkHIS9QsfW0nktIuwlCGVFR/v5RLaNaxDb1j/SPCDeGmAxwsSO1QkhOg/QOSHp2hNq13u9x8QpyvQdJZQobRqkB4WOZ44aPb7xs0bDUY6YBMQuWTF8dnxW2N87PLz7KEBtqjA1BSxON+jhjuzY+MZGSe2rsPHzWo+O4Dn9RgDVqVBfbnJgsPHJDAU2amTP2LVq0r2toEza/kTE00rIuOvzEjSV7MihPehO+9qM8yRZwDogsr6T7pJ7tontV24X7af1hfd1PdxFZ17pFIK/JV7oCiFlEmP6QvFsFdcvgZybrCD5FDryKaISEZ+sdORWjMqgMwkEQDRhHHD/uYXWr3Tnrd1R379FhfhTd/vuatdq9Cu3Gxf0z46PRpyIyCj+Yzsdqw+hexYZZ80Htw0vfnv5GaFUAE6hbTPnTlfCnmsqM+jaM7v9qwwyedkhfZxbGcGQUZRa14vneVPbVs2EKbDaM7lVsGKGhiNWGEewGPPK3urr7eNdP6MqU4skTy8iZPnXg1DuHuYm7sB8elV00fABDVSy+K+0FApric7aLrp7tQuHofdy9FR7EdHEmv+NksNouQQpKQH3TJaIZuvTgBv6bM16+bNnZrrBwVCmh4jDefOokMJxtjXMGjR9JMVfuUp0qiNbdNLRbdI52i6srw7h6uao83GBvmqx2S4yQ++bgSEVv7/vj7vj3J+P+1WeGjykgFww+fepw+U6iwWANHjlg9PDBDrF5HdgtGnJn+/273aJvYLfoGG2wQiHaLfWhaYNUdrMlLpa9crdwwg/bRr6dMrxNeSqS+uE49L77gtKUGW2GbfyaT5z7pGp37YJ25lnRkajVxpVLI6MqJxO+DCD0TSX0KZngf7NXdP9ir+gc7BX9i+wVlYocwmBy4/iRYaiCZKT2ipivZjVW2jxvrFw6ceztg0ecS69cKXU7ui+xvVbTvnXbjhr/jkQ9JqL/MX6CbyF0D24onHHrj53dqxbOrurTp2ruvCoRn74bkRUPKG6Ng50C8UNqqDBWO8V2w9i3YEM7hRPsFOiGIKZHcA+qf/7iL+ZZ9sAfvzp4dFRB3hgqPebh8ejNiEWDN72OpSi7e5/+vR37RrOaF/SNbtAHGvpeQT8CyR2i/+eavQACT0f2K5sG2PopALqbLDS/0knoFSYV3DUcZ9f/tNAEQiOFaULgML/hD7PMzsRwbGwA0esPYD1Cf6v6wUPHFlhoGbS7Mu/rv3xFxvJyaFyQkiH0wZLc2bgW/5OcuX21JXvzu8XQvaAsnz3YK8PaDuvZM8E2AHxL1lfAt+xaP3fFH84HmQp4aRnoGqt8cexQ3yB2SAw2U7A1dijmNNPYoR2aXix55irW5rYr7zhhvRJdxs1dN07pMjVpaPJ7Q7Y9mDj5x0184qTKRuErl27cui6i0ZzEpDlPdm1lni2142lTHaK3Q28tyHNJe3mv7efyYdhnmOiJu6n+FgQdlxU0buhJ44b/KpUhe10dpA7U+FKlrr5Uhs1pUyNFDxMEEL/1/fTm1xd+OOzi1Gp0flrjlpFO3mxzfad+0YMLyWE5uP/Y8dPcVMu3T2cnLDX2//gs2oi1OCd0YOaogfTcFJE5vU5oVRIJRM6NBDHOYgzRCfqH6OoFEekB16m0Pl7keWoCGfUucBU60CgGE1V2Cn/0vfHl3at3aj74oOaiJiU7ZugoQtjkrfsObGMlllr4fzTT8gNepeuanEtr3cRecISfDyh/qV5P91SgsKfCbH1ZhH7Qgh1g6wctYOV6WLFybfbBEfyeqNM6xvR0rxLTC7yLL0FM7xJVVGqrIaYH96/oG/+GXyHJZaIhR8QZQaU/Q7R0lufKZVLquJPYKlMEaR/NRBtUIWpjCA18BiAlVfmEfGvRExHrjsQKFccaJjYklOciWkUdWzd4jH/QmH4D1/YniuTVyLjgbsmNWlxsHRPV1mRoHinJHXcJVx/Gb+EPhw3LzZuONLcOo8B3Js78Aj/e+uiTXv3RDdwku2/6+we2IOfP51jrSUCvg3oSsi/AHp5G+3FpwTNBJgDVF+QGc4JmbzJGXkBzE6Ahh/VG9fFGjMbXW+ujhTbn0K7MxdlJxnghLxdqi4q3Gu1LBh0CyR9VkKIZ0fHZks0/Tq98uAkfwX8hlx+QDn87EvnhmlFc7sAz81Z/MJjXrT14cO0blgzk8tRSB/TlEvq6SKJorGDIMQWIy9RD4URSBkERMmG7rICnIlMiLLFUSi0MLeTJBkjAmhGkpfVhhweyzJ5KpVKj9CMyk1ArqGPeepnB26qdgJi06wd3kbP6jyno56fVeMn69dULQUmSRP259iO84c3D3Oa1tyz+eHzfwrxs2CvtCJ8PSsoZI7PD7O6FpJw34qVG5IQ4Mc6hlyEeUNbhziU0DZYI/mcAWbfeykJPFdOLH6TXsgjJLlzhDs+JDklaXhL43LNZWWb34CCh/69CGQyuDQrhznDiqY6jGejPSV/+YOKc7Pv4mfuk+/enuM+4tbxnaUK/iIwm05Z6oOV4hNPiGS37RLeObIRSUEvLGkme5cx55LnAGLrE1/v6t0cffaPTCOdzKuHNXFqbuV7ghdKXMMiPMIgFBiHGiU/TNvyQJR+K9SXBL+CIjmxRR96ZI+qxQ2djh6jRCE9bVRqlUAkqskRlggCwPY3SptCwz3GF29EjLC9hVcaUNwqciz76aLz7ayendJ/bdlhkr9jc0R5oKN4gmZC7wGQsSkwq+XKFoNfMu17cMqEkWL9q1cZdGyi21LNnFCPHhXGnEksKnjIpyqeRdF70RQl9OD3hctcb6EKBBqOXcXp+y4+bhryTu+k+NDlfsQQFsXrLHTbYcleSuw17kvcDxmAplYf13j+ceuFe4f2ltxYOOzBk/k20FnksnE4uuTm4FP5CWeVy8v7GhP53aezJB6wfZySXcLR4dDgokjSKw9ExfLwd2onSILttJJXIY2Kpc7H8u5fHJ+xOKDlffvKDD75ajQJXjLrFNrV8xMZYrsFXyTDLCHbVfMtfYk0Gmd8paj++aHzd/zD+qTdHdNrQZsQbhUcvXLi3AjEVw66gSjzR+pesIocsc/B8YfymogxVECkab26mcGflMpTmRQyCVClIIEhRz2fkclkOA+wA4oRUHZESJxk0VlXZaYnlmuu9ZXoV577my0ub+l8asOX96kVPuWHXcOtvOGndP+woy3L4S2T1J/PnO+E4gQ5ya/JLKe7BK9Ch+7/QITvx6YVF0y+XL3r/5p4fucRbePJ5to9lDzqNO8Fftg/qW1gYjC8LdGjJfrhNc4Q0TBtzK7UX6yJHaZBzQQjow7i4yHPIGskhLgJVh2AnU0I0fvUWyLUhOcIS6YEopNJzuxbvfqco/Vx68bkF71y+jPI/5hCe8Rae4cgh8ncZ2S3b0Kfz5uEo9KEt1nGT1hhraI6qQJ+G8qkhkbqGRPr5vjKRwLndk46fLer4RueSs3M/uHAB5X/IPriMD+9h+1l2oTO4o/Uv2VEJqFdhoT8A3AGNK3Aar5M1YaRMBGjS4UTbMNLsQVq1w6R4e9EkQp6ZJUEixIE1kZDLkMugA6VBL4uQRyhoFiHA+EpMnOAZBqtMRMNsg+JF6J3m0MbXG3GLKZh5NpSF3r57/9czAweZOqdlrlzWYXHJpg0z59xHyywXuHZ4iPTKA0Bnrr2Errx5/EqQp79Ba0oKXdB6ZXbHQWZv7YSiCSNXoLMnj+BOIo5QKq+lmOoRsDe1NAcUQbGngDscQdVmjpkFhiiPhloz7nRsBjEHGqtovFqAI1YJgDI0hc2gF+kWFFNxamySDZR95NyF20+Nr2idnooPormWTwnpuaU7T39+eeRrYa3bipDtT9ziF2XnjdepwpLiOrRZhToc3IFPr1y8Yl2QIsCo0yeKPRVEnC+iO62n34u10eT7M/VzN9i3mHq+UPYsvfciaE7LdMYTcNDgIqMAu2AyQCWli+0blPpcIaU1di+0qNPYyiQDxc+zThgVKj24OsVSST2KRSqa/c8Xk6sq1B1/in/DU58g1e2AaaMyWvMfuEQ0qa2U5NaWcsfKC/2Bvl6Evk38VCI/os2R4M9w4VgKnCLG2KhjFfKgtRTFVMEoDCbq3SeDaRGtyhRyPRHZ0uv++OdDddLATp3TmmsDA0zuuIbo0RvYT/vkN9GvcwmJrqukPKI8kd0mun0W7Yc5lE9AHaAfJvsG6iD2zKR0Qc8Uth/tJjCUb0/9tDzR/3cSHcuFyPZwZpzZ2YA4CUoLt6FvBViRAwIpJpUuXS5gUshY6p7VmoMbPgC2tPiUTPDhZpl9wYVkMgbrgwJdta4aLyWFwXcix8rHipFItHqxpl8EkIhF5GQZOMKWWCgn2rh23badK1fujGnp69syJralr6ZlU9R3QJ5X9417Xhu+Z6tub6UWjUXZqC8qxUvwNvJn6aaiR1euPioq/v3qpT/G4Z5BsysIAydzM2tvn74KCcbcs1oy/3NEj3Il849kRpudvZGUzF9rm7+G3PBMDs9R76ZcKAi1z50X7FKxXEPUi4Sn7HOnOeSRughjsNoHmoHTfrbi3IXCY5g8gjQg22xZ0d1j5cW6zZ0WF2xdt2ELcsouTlb13H96XPGxA/rbxx4n+PklNI1ppfFrFaNFRiSrejoff42f4lr8Bf5N3akoW5xyzZXPfNnQXkdWLD/Ss9fR5eRfkCmQT/OZDLQaPdgugWqWlaI0G0g70f6k0IAZzBluqJCTCq2MtOBooBWmvl7UggEgkhCYk61xgtA3IZaKc08V0luz2hCe210+X9W70xIjYLn3RVeP7TuTXByKE3GNmOom+TWpJFXbJqFUm1qS9M9XljrUypruZsuAIyTtJLTPlMLQwcxYs3uQryPtQjPAQJFyubXfdCAt6tVZJ6E1+79okrafZwEqd7AesslfZZ6O4blY9O3cTPk8h4lu3L/xZEqZwhVPe/K5tyea8w//h8M8az/ATqgVOlJ+u33dQYjhTfimC9cL1ihRzHV5qX2Z/7/bl0IH+lhvg82+HLP5p3KwL8dv3VpjsexGGvxDlc22DFx+5MjyMw62JcSOEqhPRPNy21dXjzYvFWL81CqNl8ZGmVwmYZRIKdDmY80NAsqgCRaNxkciBTv+dg1+9gM+QyxH5O+Dn5YUTvpiLrvv9S1H9nP65SNHLh9vqe2Rvw+vF+5/MW+P4rkmmzt5K1leAlDOkNMlkfJECyiHCgIimctlSAjbDbfatrYUXk8N2eGeWoVWrwhWycnlwFB4fMF/ow/ivVFMPBerhrwdg4IvyM1etaloeNnuGjQNOSO95ZeOzfZsKo/HX+znWpxK+OvNIOwlyf3qK/yLK/L+uN00JLf8QGndRe7BcCKHVMTarTRr3cUuuMG+3pyUd5KQu0PKQ9UDI4olI8NLyASk5TSp0NYXVyfUrEN3WCqgwuo/JgYX6LWnr/doltnDy8vL6GUI8TJ4wUR11okK4TXaoTVIwcBcBV8VeEF9Yvnw7L6LNg2PbbE7r/q8e6vNWWga7uN3cNNMf23BmM5FUV3noDFPO9Xscy/Bnn6Sa3Mye1g+xxU8CvgyckXJB8d7dMDK8bY8auliRg7xYgjipgqaDEQ7eWRfD8IsOSNXKMWIeKyCBiW5sbeF3GoUiT87VwuJddbcC0lL8gtpx+grheZJPoyYxye82RrnpAD8jkNafyCUkL5o1LQvNJbH1XwQ8sM/HIWMDbFGk4w7k+YBEUvK3nuOsaf1M9b7n+LdK6hLXcjq11PceyjU4meqLVtQU3zth5MnJbnn8NmNllbsexvB1IQeRWSMgdSH/+IxdP8yhr27HT9QY/n7zz+rDxzgg47ivzcSBfriRvQWef88nMH3IXMIBlyRIMRK/RAH1UactdpISvQZKQtQstbSGzKeLVATQF13wYweErFM1HUHkZr6uCexdme6nhY0cEknBlEAlN4hiRHFaGxR9uyEH7hG/pabcy9xy0dcWmj5kOKg+HgvGYeuz6xIamPZDWn6Q2dSnrxFaGYIT4KAZn9Csw+hmWiEnNOLada9iOYgJpDQbDTWp1nse1ifYICzipqTdmDdnNcAsaUsuVNyUYtq9lggTm25eQD7RurSPBy580C32T6qJejLrK6pHfEMPmgvPtJOwBpSkPvrfYp528rcwgMS69PA7kYcI+fyRXxhFydWNP/pXvTzVRPxqLDaTtRygl7wnN14ckitOXFo8O6AlmcG7XdMuGe/tdyAtE6ac98g717Yv3pC11mKY/UfdOn+R7qqtoxfpU890edA1vEbP3xxY0f2gey9V9l4PAFCtZD30zD3R6wDwApaB9CG6WZOb4qksiZIIk0gUlKnZTm+XktXGeTdCdDdDdqbSqWywcR0D5RmGI16IzR3hXQp5t8anL6kQCDGVknAp4z9dGnDDqez7ma+sGRghVhWgPSnitwadnZ1zu3VoILAXl9AedCH8AByn1ozq8yGJkgmb0z4kED4YI2jQv4QUSARC4nn8jShP2gkGB8cO46YjuQygKwogRliy896yVFac5TwNCp/lceJdDRBcYVCZQoH54dR+mJGhtTLoYp9SbYV73f7VENG/l1lz6s6+3zqVdV+Za/6XDzmOsOaZ/V8FhbURZD9DXURnnDXkDlyjNS2r6HLq63syuqhgB3ihOh2tpdGsF+h7MJj+ua28gjbwbKVSECeFRlrEzlLLxtL90pjceTRZYf0qfijE0Lele2wfIVDhNwrsd5jO9UToV4H1U/Lg5IAVsLQOnMNMVHooF42LwxNzkMGe4GbLdWLbTWqz1df9RkVhaJr8Ho0vxa/E40iUC/LdDLJCygDH2ETab3ONMe8MkqDK7FjoMsI60Q2KiuDsyhnOHm+hGaYSYXospdKIcoNa4IgGRt0UpUwvrehuQGtvHWr++CmT6vxl6jnr/hB08Hdyaz7fv89qsJ+lvfRvT/+IGM3F+uVvEBukSHkdP5kwnKe8FzOgDsz39mJhRW254R50XRh+p8S/JlOrFD/YteMYxFfhivQDvw33r6sZu7cmg8/XIZ6kNnDrMli84Z1u3ev+4uudwKhYbzkHnlrG3MrQoMMpbm5skRsIV4qEiIjj8kgkwA8Yw3oUFEyoOTQiTXYyIinkWhCRjI+hsow/mhR9aZN1cgH/7gceRFG0LQ7shFGrX3X79ZarEBCfqE7oeUorTuKNTdxg10AtQzkKmSEdH0hCgJF5WIRENQg2TQFKxf0Yh3Qfryt4t7X6GwF6vUTnoKq2EmWWZCXf4ltQUuBEOMM9Xpk7el4qF72M3WsyYQoqX3K1vGUMJ59wnSqxfg0GmfBn2yt/gld2Y3c7dOEZJqBSMQsnkvO11Kq40MGS/3zJZexDof5JWlD9nw8XjPhuH4ubvPDD/biELbIspAs9EdsDHnjUjJWKc1PeslYulcei/t6/aHgPUL2nzVHySEJEDGjCC8vWHVIyMskBoEAU0O5qEkXY7Av0u8cpnRBAwbT8poaNEqSe7q2NzvOsojM5xrbVKyLOmXtXwTzYaViqwYhEFhPMtGoBm0Vans9ew491Vmq8UEyi0w+6EDdIusUhLVpRvSx9bQfL7G+9IiV+ZJbxZXoYy5UH5MjGbloZBT1nDbWFmK/DRUyAwOVuCqjKRQYKWhkjpeLQ0YGJY2okV9Pbtd1QXZ6SdOepjaRJa1bhHQIvvHbDXZF9zHcwrQF/S2J+SvSIk0z1T5L2I86dPQPsOTwh2u7Er7cTRH0jAyeWODEEns1unUvpNvIGF6RbmHFQJv8e3z7jMU5acVNe4YlRJW2jIvopP8U133C7ovINbNvdJ7ZB0teW5UWZZzu47WAdSNKrj8O4ybUzYWQmMkEdmRrXMcvkExnGhNJlGRu40vMWz9i8MYgTuLCQreNNApcA0kDHC+xNTEKtDU2CWIyIkJMppAoiOszLLmU1T5qWSgFg7S1K7DhvHoqWyErRgpc3z7UOIRcIH7B9BJvo3tk40pzXPuOHassC5b/s3ryoayi9tO69FnQc99Kn8Q23ZYMGLS0G24XG9uxc0lrM5qFn6X7N1HFJw3t1TnbE4AQ7qOOVZ1SFjSPGfnoLfwjrht6rP/Q9b27rc7L2tAzaueE1wf0IHMuIHMeRHSiECYGckhUZM5eZM7hZM4s7dkkVN81mLLeccqRISpDSJhUsHqh3D5UakuSsYK/eOpjQxrOlP6AH1T2WpsxZSX9kjquvVc6/usVi0ZlpvWcOA95uvbpNLNf74pkXKwPad+heePYeNTmI3PP8kEVJe4zH1ftZp4tarMx9OzbeNGaqT1mpnWc0a9FcQdjeQ9zx1SzcIaGYy+KXxHJJJjjtWQfhulYnosMl3Nws9F0OZ6DNAqxpXueNacpkMswGaMMRnD68yL0jlWTDRUg0ox0JesBWUhl3LF2E3uMzWpm7tgioUvaup9nAVrF7Po4Fos+K1nacXjLmEnBCTGtipt6H0ax1wFQoD6UxXyAJNxF6IdcpgigX0PoD9ES+iNC/5N+PeCKv5R+tiEsj5DYJOM22qnvlDrv/eGOGD2dprUdHr+8W/EyG+3jmnos/nmNHbKnSdSSxklutH88kfWFNJ4Mepsdu0uSI6Uaos26rpesC8a1IOeFtvFEP5xJu8bXucFtwu+hPePHkXen0Fjyi96te4V3p2jwmnWH9HtoEralNdweXOHB53vHIKYfzqS5rnLAiJPDeRDhy3VMhlLFQiKnTEGLTxH73ld4zG9IhVTf4zF4hB96n5fXnePMtU/Ie8T3kis73BziTqMsNq/DcFuqHSHb8bYgioPV1YD0iNv1Bx528fGPj9/Decwz1JnIW+la3Bh9vJb9xzLOgVZ34IswBuQEJVtvI2LUDOKsd5LKlnpEB5HRQWIRN/Z7vGnj1a+ubMCbyFzI3Tp2NS70Q1WruSV154QzFU74v4jq/2Fmk7uLnKOakXCPS5BwudJRlErQx2AUUSNv7gRgrXryHXsXJY0+pm+Gr+EPn6BteDqhzgW5P2Z/tFyFpUZsiuU4e5edRb55RN7cm4w5huoOZEw3Z1nDMXX2MZX1xxSG1JIh7yDZPDACLBg/QZPwQcR+8cXfbBwupdrDQZzJNkJ/4AWoGI4SGU/wfTY1R9NcagElhUh/mKAUvUI+NdHEZHAz8dKhe/SWjt+yu32voRFW1Yh/s6qqFvOibQ7jDaTze8F4uv/beNz3pfv1lrSv2XUBF1Efq3rETd+82RJN6w2gVlesA1ZD1xBvJAHtWgJ+XaKVSbgCkbMitofAWKjZFTamSThIDcp2FbG0OHimQ+luzQmqBNYr3mU3wrsnkvGLafz7ReOPcBjf6kakCffPje+YdR/LfbXuUHCVQ+Z9Na3KelHuvbVW2Y8ZYHb2U3tJeQnE7VIPBdCYHQdddNhyEYeDZcVyMWsAVGd9wKpZ8g61zVlmJ28vvZctsw/KBMAIC3aApFbE0SrnnL6T/IBXefmTCjKEasRO6otHRWZNmuKE7uIwrxSH+gQN6M4atZeTlJdygoEgqLYA9immGFIqvFXBz5EgtfGLNnhC8Zx7dXWHwYU6D8Kwjh0Lm/YOEGoVEv23L2YFlvXsLkURuNq1caANC2AAtREbm6Mg29QVovRElgn+/wJHZABqlKkUKoMX1EkwYjMJq9YWSzW2zicG1Ywp6l+ZUFPTfmcBdVLiKHRjZoW5LfgmLfuS2tNxj5H5WyR3yAujzZFkXE4Y19OD5VIA2hSqNArqjUuGBW9zw2Hj6bBh81Oq05LTiptVV7fckMNdSl+eZ5nKjhjUo2uKZbLkoq+le5duNL/W8uw7voTm0EUCeobah+Wl4BFwpkhscDoBiJhnChxS3cSSuSCW6JSmSPLHqFWagulRZWR6IRedqAqGYJYTUD3VEKRshWjKm1Ihdt3mS2SWidzCktgebSNyVr9580+3vpPbmvSzlYqhUpeiCxWXb16TvDZ0xHgXdm3Sz7d9jf5TZqO2KA61K+qSOLhpQnir4PwPUNAavB4fbG65Vf1EiOkoID+A6nqNbPOxttl54Xz0jvMJDQ1tFNooxKhV1Z+PPU1NyIugE/JpRePxhP/WGQ3jLav5eWM75CUMSaoaMv/iWJdZi03BFUplbFM3t5EnS6efyLnGDh6aM9YZ4biN60NCpsa1L/1yOTt9THx284SIhODo2Hk3J077ZUfzDRvWbxTWBxvo+jQn9/XrZkVYKCuRwfr4q5wBDIgcaGfIXwQtgeyXcic5K+FpJyExXJnHyGTSwWSygTJIdvQmD4e96GHrU7RvyxCyywPA0/dq783KMivi4uIS4xLJTvAzRAQrwEHhuBVkz3V5D3n1vdFz6JxhtobwXbvtfdvlvzZKWnCLEW3ErvHppY0NqAXy/K99Q/gM+0bkc4iJ8Bn2jU7p9H/js/6V+Kz/P/NZ78jnEOBzeD0+x72Qzf+HHZuWM9eBzRnb3vD4r81rDmxpY3PahCYB/5x/yU5+AW4YxQ6imDS1dkwa8jmtHab1qNp6+eaLic3di8hlf+hBY40z0fuUJVdVvniRW63sIYKVTbPqoQ7InyJ0OUaXwLymIVrBV/tkzzY7sv6Eed/W1OxDXX7i3P2uv4GbWbH10VflEyybidA+AkoK+G4zeDm5s/6FJt3/B00PK+YdWCcGu0q751yrrp6BnO+x/RTbF+N5Ow9EmmZ7E5pm5BADmdj37dBZoMmT6B1baJ5olDncDbGMK0VktXejrAeEpwVVHCwok5CfYHBA3NFzPx/bfzp5msUBdYc9+AEkW7wQeAcxCaLOo4I7XE5uLOv4XMPxdS8Z317cq+cu7d94Mnk6/l2paF0kVviyJ96EHIgGRb62/QH6jg+sBRH2kJcM85YS+17K5UsE/QUyj8C+h6B2AC1QUJoMoi1SfyVEFxZRYmBfxJB9EVmM29QIMGStrTuC/UZw/1lrIjJoTcS/0KD7X2gIqLbvA6tLsHa6dQewLRx9ahNFvfd/83cKi2D1Qd6BxJup+DUy65VEqx9G82zsDkKhlwwZb+L/7POsP971vRtPppTjrWSGOZDIRvNd7E5Pm16vt+r1aiRl5JC9DjzmOSlfQDtAsEMlDaB4bAYn1atjXwDIs1t/fGUDTB5AQkODGuDyLMLvUT31xeOPcBjfqqhStf4F4zto9kRN3aI/tNSm2C+IFOtiHiBdLKj2s/EKoto3IuOHijg+vhA/8XFz5qiSzEmIUcGU0wgOO5XCdksdA1VKhY+PzbYAptPSds7A2Qvb9byxav+B5EF6qXTf5RMyXns9A/nsWI/U9MSzW+ZOKiutG8htK9s9YZBliCS3bii3ETpjE3reoPwgdp23qxOxbiiKmICBa7VyHLYBIcW7ISkNKVHt3LQruSDQGa04u4uTqS8lI+c1lUhFDz/6YPfWHlBan5E8folDmT3tUfodz0oukTumqx0fEO4Y2k/bfsdQ7BNa09RBuGN+dehXTbEsjfWwLIXnpdbnmRGP6OfPasjzb9I7bQ79/k/y3Bu05q3KAcvUxYZlag53rF/0sNY1ytoqBB2kE/l8CNH11AJGJlHzoAcootKblzC8DaxCyKS0Rlh9fX0DfP19TERlBUeQMt4BlyeIUVgRoBkB9rmTnIuQb1mZPTtjbP/rFUiKVNMe7tj940R2+XJXy+vylUvZa61++bJly+kZPfAGvPN7fPL1LSj+rqX29k+/f8bYems1o/jDAeBP9SICXiVIOmIiEUsp3wYxCzlEYu5jECPU5AWo/TUUfjjY20RRVsTGZKCmxNtLcwGk2huKP8x/Ft1as/iTQin7kfOsqd0rk4Zs/mb6NCnm2IpSPhF/iS27a+dPfbgjvtHWVY2aza+o67Fou/uC1cBnyk/pP4TPrzMMsRCjHyJGfphlD6FDzSPF3OFmsK7sAWFd5fZ9sJn2K6mttw8E3URq1U1s/YYo/iB9vk54/nfhc4pDIuXJ8zoYnxnxEAtZt88wZN3S0zH+2Td8AjnPOqaTuT1gNPkQY8+FcBRwS3iKUwL9L/KtfbHpzU3900EoAzEaP1+1t8rDTS5ldEgns+bHOcQR4hwzz9kJ9+5P+2njqssDCnssGTZ7+YLKu2iL5S2uIx7K6S+fnH55XGa3WQlxc6ZNGLkMrTl5BI8RfMyZfCDVc9qbzTpCo5rQ6OpCFpl7nkCdjcAAIBAyQH28PN2dZIw/8pc5Jhe+mMLu864XTftuxdobPcs6LcsrX7Zy8Ztoo+UU1x73QFuzjlTM+LAoq++kpMSFs6YXrUE3Dm3DBhvGn/S6DeOwhcWhrlHyta2usZBxwDCla2apt8ZCHaTU9rx1jWneOTwPZS4Ozwu9puB5g/3553DcoYZfxHG3IRAFNjgbnp52EHefkGB6Nhq0jGekjgDu9RvGW0bMc2UTXebMWzJHZnlHumDRc13jWb/b9+/frr1W88tPP9p7jpJz7MF4k/334p6jelvPUUKkjw9gzfvofHQaX09vTy+lQsCadwR/EqM9Ug4o5QTLhH30+eixn69e8/mYsTdX31ehGueJY/52LS0cU+bKJ855uqeqdl7lP/t21s3fjz9dtQon7li9Zns9nr/1Ep6fFXjOCp9TvDPpY/K5UjjvdxucNyu2Cf3dGOF3/3HAroX9I2LXtlA41L/C/hHqX237R3j+qe35aMfn6fvD6u0fARt3vu35mBGOz6+xPo969xA+727dn6yr8H6x5xn1k9H3Rwnv/16QI7+QexhwZp3Af2xvyMnnSGyWEQ0ZODFOCuo/1jhEDPg0X8vWKcf0SyS55+qUAqYfRMDIO40Uh+IF79T91zuNGstjiEHwQUctSQLGBqGf4vLReXnWW1OKeUHn1cThHEEPmwyKy6yDnD0PJJG6E/kDuCWslOWk5XLIoLBmNjrlME5OtChTC1mstOI9gKfgXkLRoZDEIiRRNuyxRvMd9fxayxaAua8Q0gzDEiKKK06epI1czm60PMI/2fusiamWhMZJhEbwbb8yjbpXoBGCFi+hsQPkZE6y2wSTDhzgeG4U5GfW4D+sdkGxkKpJ8wgz+HWEhxo44xq1l4JnJE60kahgmkmI+siVWxVGaq/aRbhSqbTaJ6bn+9KJ0Q7Ey5fZEzM74I/qBz1wxQmRcz7ehHOp9siHBVrstCP05VHf73/Rp/tf6NNC2OfjlcAvaseVdq4fIcEnDohc81ERrjnESbCPEA8SMEaJXtDYHOVG1pYi4qXJkOhLHC6wjhWr3pUUzkyAQtUDewxwtQl80vOFeCsqwc8EFpXgbSgbH7ayaT8azi6xCAxasoVtRjl0ldIgYgX9Ow26l9HAWWnQUhrC8bcoHT+tw4+foEx8Fzo2IPT57b/IFy36DXui87g1+m0RWcEJaC4eCDofOee8QsT1JJYP+KPJUuTTQilwdDCDJIJz2s0NiXA4tKLAFbnCpa8X74VWEMsJtYKBsAM2/jJr5p+73qqpObN87br5OeeXzn+/AP39z4YjrPusOXPKBNlQ9Ow7codD75DOVP9UPbtPc3oCmQg4ccEIXLwMz6YBTpmUlUjLyUNSnpUK3nonCDHZEAOCgsiXiKBwk4H8fqBBEWKkwCrIxwE2wIFWsTV8KNGerVTzlS4ntvSYampS2q3X4t75787udblpdOsuzpaf0o09xpRltmf/mFSJ/8K1aZ2Tkwe9PWfFJ2NZrvZi18yqNyfNs6xun4z2rdlUOUnQpV3IXHZKqhk9E82km1OgZ4OJrK5RzkKPSV81y6aQNSYngOfKaRY/hSORE8FiB0Gg/QyjgxuFh0I/w1AyIycQxc/PCOL5CnW9OdkbGq5zeXNH3wWhTcZ2Gr4ivdeawa36GW7EN2nXydnyeVpoULvIlO6dYWaT8a/4ce/eWd1m/1O1BS9pEsUyvrWvde9TdbFwnmVN+1RW2yTmnfeuQL/bSHLnzSLrZGQKjmvJWYbwEzhGA2UU41rCinlfgkOK6EJDrHX2ITIk5SAXG1by5Q9mmT1oIo0xTG/Uq4w0v8k6a47ISqtqSRFUpTKVqG2G8hNdLh6ec7Dd6k3L5i5YtO7YceSMPJcuXBzSuXlypjP7eNIU/BA/mbkQtasqKS8due+Di4uON8YXM9vtPD92riDzPcm6AVaXCfL4dHRyL6XZXgAWJPZDNlGCTSLBgjLcGDlSLJRaqm0UT3IZcrBk1sm0zIuH8grGjv3t0Z0HI0dkhfeJ79rHGVbl5KNxUxat2NWzX+/u2/dsGbUoYnNKYtX5wnm0rgNir9RnQE6ur4ipAbV9Nk8NoU/MsBL8coQ6Rb1YJEgPISWX/I/ATe7qsuP6nngn/gE1mrtg/hK8GfUiYszj9YVCULTF3mJiRuy/9P6ycxECz1YROhoTnv03HbqX0cHZ6YjXCzzi5u84pO/3EH+M3AlnxoA0zbhbM2y4EBot3y2ypGBJFIzBkXXbRHviEQvbG/FI4QmuCgjwIQ7BIQMAQkYE5rVuNPpvkEHrZZTaTxZtw+zoMLUdLH45SIhZaRsDlK369RoR3TxSFcYaqJCwyYa1o7lZOB1/iz9d2Xl5VCnyQi5spFVKCL1N/iG0Qr6kHvyJSoWIr9+ATp1jmhLUGDJ6QqdJpNPWutmhYYadzJUu2Vvye83rtttbkZDdMycixuSuZ+NiotulWPdU2urRbBKuu/fHtITZxiGXjqOjdY9ap+y9QDYWYnoS+jZS3Wx46iFPcrANciTjIW+n3Ap1JQJpSKXMEBtqROjLnrKiYNlOtycF89KBWqTwMlKfoQPrbZnIdrY7n9zeszLjybVrT66J3K6YJnIbtaaOy3Os2YHJiNgYRP5S29ZhDkT0yvh61DXE8gp92VPPIXl5UsAlf2EOJnEO4rK0Ri+YxHrn/rAomX9//PHfH8c0bpfuQmZRcuJREVmLZbgVpPKhI7AK+86XVdD7MYXI2TSKNx9B51Tx7HvuH9qXzdZbhoOORqwX2TwO+GkO+FAI1e8tA7jPJmtvGWuZKU2CMITqFVLbhcL+vq/HOPO4zt2mJk+dmN97lx9adfaLVV8Uz3swl09s3252k8jMveWXToYiZpvln9FTnhzfUzeb0qgjNJdSnbSJuREhAkFvonJIWrWePrvZSbtAQb8VH0pSvW0ttOhReInMG+08/p2ioZv7I/w696YvXl3et8CZ/bti0pFfi3q/PgX5sZFnztQduLDnzWLhjDE8Wf90a0/25+nQNaDDjwEkG6/n6BCpsK5hB6eSC+OHb+uPr3I5Wnw9NSmryIm9M27Jrm/H9tw+jg17/XXL1b79th2cR2vb8ggvptEcvnbmttZeQIBE4OcLyEf/3QwokokwmvTGegsm4ELLDEJDTyhDlfLWZYsXV4/zrCkoS9udP2n1mtLvNZ/N35Yyb9BHe6YOwP9s2PHHjH7rBs/eOu3eYkl5777lrdsWDMrNO1Y6KX1s6/mTcvJGvjMlb0UvF5/lE0bvzSEEriZzyCJ7LhIwd/WEh8FIKnEh83ClXbQYTspIOaYcaqzIeWHyrbZPvfC7MBVTiI8J8LogWble9l5D8mMcphrLdXe7PqFsVvmIg93yev64fOm9aV1npI0qLf5gyoS7PYd13JE5snj0YHb8trS0btlxcXPaZaSvGZk+OlGiLezTr7Jzh9ZTIxt16ZJE43pOYixJA4jKPt5OnGCKgEXH2fu32AwQYn1QUAB9g+iN7WpQoTj2J4cwkkMfC8dgksSvQVSN4uQSWpyobRRlDvfxVjjxDYnRvRIx1sAaUrO/U8sRIp2ljvi5tpgSsYK47+0RNuEuevLsG/5tGnchPPFWuks5SMxJcwPIXqgVEGowRVhipVYJpZBaoZumAXH1rkmoYN+KAj6+dukyUp0Y7U/uyN4jouMiVOHo2JGDH7DfWzRsmuUYW40+xT0aXJDYBf1Fz62K0HOUxh0izKHe7tDzsyE5un8hx3YZAjG7kevnJ49dRS6blnor4SIMiwlz16PPVq+9yMZZLosWYQb+696fUxNmG3KunEBHaRodUfSgT8MeahtqQKNQuBPzgxhhEtYGmCjAYfGOwO4qpZ9aqVFpvPQKA7HRtJF6A3JHQsVwTABSq2KRxIYwvudn/F2L9QOSP0M+M87moXMf4fOYK5hUPLwjW2TuDOXC+edmof2WEc1mLp8503JPsCva48z/x9qXAEZVJA2/7nfMlWsySSZ3MpkkkxtCSCYhBwMEyAUhARIS5I6EIOLFpQIikCAop8J6oKKg4gkqIF54rOvBKnivAqus7iq66rouKpK8l7+q35vJzGRA4f/QJDPd/bqrq+pVV3VXVQt74H20gra5SQ0JtmLQcIrNGgEggn0N76MaMBx3jhpSraXIiEHDY5qWeRqDR7kZGmbjXDaB+AYNYwpZ7WJsT+RwdHR0WnSqw2KPTA1joSNIAOROd+AwvMmWAp5TM/CmqPl4hT2fvWpq6ho37JKsI0+G5F9Vu2ZD0P4PvldGjo8dkp8/ISO9Oosc3PDhVYOLlBireHTB6OofPyNPyb3K1Qff3PxQ9dBS+cvCQoYLA9DoMe3usREul55QHcETOx2VdO1GYsAmtB1TcbpNDMxGowVQaDeQweqd7s5olMaCcHm7JZ2lZ7CpYbkeq5aPIbfKm+e/97PyryXHt9A7Y5UtJEf58ETlVcsXzHriCTUh/9VEXPHSnMeVKY+3kO6Vy5Yvh1VZBzJ0N9AshcvkBnOnVOSHRGBcJQtSRT+UOO8CYCp3vq5ME8oLXg+S1QB6ooFvN7IEo5rHMMpYpBQI2bjavcnwgDPgA5pzCntW281n59V9MjrOVdjvSS+vFqPxHM+1tLgi7fZBA3Oz7Zn2zHRAF/pYBfk4sLhTgQFqNRFvK/J2V0lFBxbiZD71u0VZEedMGjpl6LShD87ouP9S87gn33tn8pSZzy4jYa7RV20f9xpfW1PXZFSqZk7JpLmZC2Z1kJ9z77srNXexs6bj0HJlEdmXdcvsGXc0xS///oFBO+65a2d8y7znRk2bijpVg/Kg8DLTqQare85KA6+ws70J7Lug8hR8H8K+R8P321ku51bV1vHEmuW78iIs4ZjIQCcgT6k3xnhygHuEAsvNH84cGjELhqYZOh1Oq7OAt+r4KevI28ovytJbT5269e4TY/615oc33h3DH3hfjTHDgMLvlnetPqy8v7gTej+IdyCxODsYXx1eEvgIQv3Hjw84vt13fB2MP36smsr95MnnJz9Y9UTHN4/dX0UfuUYLLUtWpq6btqxtR++UpWy9+BbWLbyTmekDmemUSimozNiCqDtMpi/cuu9oq3+UDOgDcSxIpi/c+hzBPT6WWFEB//nVZWPXTRpzzcAGDPIpLLBX2P56T4JliHuxofb6Dn597eomOZeF+6zEcJ93K0fGJ8hThOfANPtS+chr5VFjf3q/0GJ/sjD2J4NQyWaFaSWbaP/I974Dsf7TyuIycVqpftMKMKs+sw3m9Oui4WM3TlvTMd5Rln1tSVH2SNtHByPChkzRlixaM/76vjCgcT5RQAuUnpOnb/AsX2NrVP23QNsbTufqXXWpRGewAoP0xTIx6SgYYDY6Ds2ddj05VxxWOpemBusBsVBKnoNY7kAs1erBYKzrh9ff0toXjFU14igz4MZfHigYa4g8VXNBAUtOPlntHY+VgXHf0V7w83VpwMu1AScROCgrg3OwSVjOPwlPWJaat/wcoVnvKb++9x4xvHee4CzyF7dFxwK0vO+vwtgPj9eUO6ykz5emfxJ4FSLVR12pOOXxw1fvKYOe7oe+13riSvz6jv8DffM/3LU3ZbdyzUmPz716h4AG9z63X46Z8FIQ3lZZp3kEdfTt73jmkGL293f3cp1Wxb4wav5+24orFzUsKzh1auWzK/ZPY1tL5P3OG11l8i70xFvW8dZ67PthGP8W8TOQw3jnCOFFdfywUCrW+Dn9a+OnseFR3vkP73Tf+cL/hAdYdTW1mh/19Jtr2K6SnyP1mFtnM5lXotT1+aAFw+ocRHiB4YASibb3OSWx+HjN+VM99vG4B5n9FHfVB+2UUrF3Ox6vpJVlL9CuwqTXyDmor2+IitwkfqT5oPU2KXXMBy0WYQgFGEL6wRDfH4aItDRfGOyRfpk4VD+0k8oC0neOQlRPNHY7xQy36bDI7YvG9/4LaHKY7Q+lwovV6Ko3En0IIZKerTwSP54LCtJN0zJYmEPDggVQLae5k2WmpSUkpGWkZTjSE1ITUpMS2Y29VvUKGxQzLIWEO32ETbvnEuWklkUCL4mVQMNjL0Xk/n0bC5bfHK9MSVw7NCErLTSR3DHt3sE37JRN08zG1KJs0juN/kNOoqvlpZiPGH4+qnyAJH5B/iEfpFX4010kFCmP/F35/pFR5FslCub3NczvTXbuh/Mb46o59/zix4SFBvO+01Mnl2rXLiPum5o5wNSo18xElry6gE2MvPH0jrwbNsUqC+M3DU5MiwuKIQ9O25W/8aGeH6cGGePzMr8m4jTqhFX6pJKszezvjjmvP0mWKC3kIfzZduTgG/MGkArlVXhNWmBOi1ncSBJYDmNdtZFEpw8iBh3wkA70PZ2hnd0xNAGUQL1bKgUZ2U2kWvxOcnJsbHJaclqKLTYpNinCamUBX8G+lw6hEe9QQzWKYGqiTtIVxFBHCNEJ6Q37UuR7bfvGVrSn37mJvO8cYdJl0lHK9VaT/u/dKTNrmBBA77yaf+xN+9tLJFr5/vIV8SNryPo9X7eXkDU9hLxBHnq/Hn0c0F9wLttzTuDsf2w+8X7zSUyMiUm0J9qTk2ISYhIsUeecD7wnmBkRpxNKYDZ2DDg8vehRm/xg8qPji8dGb1z7WkEhjaeTlJnBwpdnourLdisJbCpf5t1yc+zB2955e+KU8GiyZPubpYSXU0nZdRsGq++1AvNouRi/XlV4+/j1nrpqX8oq5Wdvv94XD6jxhwH9eov/f/x61fG9/HqPscDEz7zdeg8/oS4mPm69GKE4QlggprB7h/T70S+eDsp2mkE5NpcJxcpd8skRwufyraRYvoXj+rUHe5VAewsx82YC7Z+WT9L99PJuGymiC5Q33To83mOMOrzXPcZMl8dc6KjLe+VCV9s7Pe3zOe/2zZ72i7zbM3/CIT6+Dmp7ydPe7euwoPcnsBnWc2mkXTXqIkGrFKOtAkhwT8oWTNvcvxz3dcESDFJT2mnZWWBpZ/ZfharkYPRUCUt5HfZ7zYayZuY/1hsm0LYHaiYIJR71Sm0a+0eaqoPH/9Fe/1CHLeyfK0TNQW1JjUjN1BnYZmkkETwKnjt8uJCo24oYV4Wb3IfP3qg8SR5e8Paq2uW5Iysnzl9+6E1SVbe5ftGSf3b8dYu4vnr4IuWWIuXRG5+bHme9K37JwhtvDFpHFiWlLF3Zk8u/t+aV2Z7YW8ZvZSq/EW8foBqPj5Gb32b1/lOYKLWFpZBdWM6/HBm4/EyXd3mrp/ydo4HLj+0KXH7E4V0+2VN+/Cfv8m5P+dGz3uWyp/zEcS9/WrELyjsx7yj/sjKvN4UzPEnJwd4ULe+of5szyij/NsrLrM18T5t35Dt7I7ANPdgbobXZ59fmmLy5X5v/+bU5Ir/Tr80Z1uYKT5vj8sf92rzP2lzraXNU/kxZrrZRlmtt3mNtrve0OSH/zb+NumfO6Lhbpe8MFW/+5Wfe9y5v9ZS/Exe4/NiPgcuPXONdPtlTfrxc9We+ld3vjbRYq9JLfp7RgvTRovcKvzZn5Lv82yglrM18T5t3ZAvDIfHCYZFfm2MB2oz1a3NEzujXZjxrc4WnzXE5378Nt1ppEHiGz0dUPI/W/LD9ys8c9C5v9ZS/QwKXH/s4cPmRFu/yyZ7y46ne5d2e8qM53uWyp/xEsEoXF4vlRZzfrNFlTj+6xPu1OSNX+beRv2Jt5nvavNPzsj+u5C/92hwL0Kbbr82Rno/60YVjba7wtDne81m/fg6xNtd52hztOazcoLZRbtDavMjaLPW0OdHzZ/823Fzg5xRGx8dU+qar+PQvP3O7d3mrp/ydfwQuP3YgcPmREu/yyZ7y47x3eben/KjJu1z2lJ/4XqXvXBYbh7Rbr9F3Sz/6zvdrcwZkoP97N5m1me9p845c2I8uE/zaHOv/vihpfm2O9PT2a5PJ2lzhaXNc1vWj7ynW5jpPm6M9p/vR9yvWZqmnzYme7/rRV/X3RTo+pdJ3mLcfcF/5mae9y1s95e/0BC4/9m7g8iMTvMsne8qPJ6r02sh8u5EWt2r0esZ/zeod4dfmjHyFfxv5Ky2XubuN+32k3u+jX5tj/dsoKX5tjvT09GuT7tfmuCz4t+GehDZ5DJ8HffDsX+7Gs1re6il349m/3I1n/3I3ntXyyZ5yDc9aeben/Gi6d7nsKT+hU+lCWQ4SxPntGs7z+snAd1mb+Z42x3oe78e3D7E2V3jaHO/p7NdmKmtzvafNiZ42tr4Tr/Wd3QPE8PaCDz79y934VMtbPeVufPqXu/HpX+7Gp1o+2VPuxqda3u0pd+NTLZc95W58boY5qjy8XePzZ/vJpQpo06a26VVxPrcfzr9g/azw9PNOzwv98PmZX5tjPc/3kzmpfm2O9Cj92mT4tTkuS/3ahPq1OSrH+cscJdivzQnZ0k8uqXpvjVvv5UZ86K0PN3vKF33orXfVuPUubkSSd3mzp3xRkrc+UOPWB7gRknd5s6d8keS9vtS41xduxL+8y5s95Yv+5S3fatzyzWN3qOXNnnK3Pau+dzXu987TXi1v9pS726t8VePmK097tbzZU+5uP0tZ6mXXpKC9E8aTy8TB56gHuydAfaunHuyf89aDHXTeerCHAtRP9tSDXRSgvttTD/ZRgHrZUw92kk+9GeqZLcRHc2rNAL/yGO9y5WVWDrKMj/Up3+cpj/Mp/5+nPN6n/AwrB3nHJ/iUv8/Kwc7hE33K32PlIPv4JB84ffXpFNSzsZb/huMC1oO+HaC+1VMPevd560H/Pm896OEB6id76kEfD1Df7akHvTxAveypB/3cu77XBXhhOjg/WMPLIFYe7ykv9C6Xv2LlSI8in/IvPeVOn/JuT3mxd7nCsXKkX4lP+0OsHPQvfohP+YusHHQuvtS7nMuB8r51KQXXK1Y70P3e+tXDuhWgvtVTD+vXeethHTtvPaxnAeone+phXQtQ3+2ph/UtQL3sqYd1zru+dzPUs/WOn6fhpYCVV0A5W+P4y33w+AVrD2sEP9+7vfyZp/wK73Il1VN+pU95hqf8Kp/yUE/51T7lwZ7ya7zLtXUn3b3ukAbv9Qhj2LT16KoPveVRs0ceffdhAHkllGn1Wk2A5371f47BYfXsB73iM5673E7mCqt9+lXjtYPUPZMwqivs9Y7LftdTrsV29n7K9lg2a/HavK5csbP2Or/yCqXWS462af145Bb5RNhKT0izzDoyW9grfQerPEcOSt+5YwbJUmUpX9S7F58Q9qpzhGe2wTNt2jPfa89874kz7BEt/FMwV560Cnu0Z6jwOn9QFxfmINOEA72H4NlWYT8RuPAnOdBODsGzaB4QgXXSb50H+kgB5BGjzyOcpybAc78Geo7RQd1neEUKVI70OeDdb+9lbK8F8Zqh4lvez8qX+5VXyK+y8mhmu2N5ttZ+JivP8SuvkK9UY3KZXGpTbX33e8ZRki6s5JdLrVwIF84VPCm1VboyzGF6niOkLpxw1Xj7LUdaqHYxPbt3HK9hieL11uwnJa6SwziBUGJ3qncRW50WHTlZHW6ZdX1JdEJN0f7XJq+VWquKEioyjnxjKUoqrC4tUBpsnGfshf93Y8cRK+899uOtr23zHVupJnsKlFl4nnFaWM0/InVzMYDXKjZ2eVQkpcSgpzzHou05nmCiIAnPePkOThBFoUXzOxFEACXDYUuCx6NT01J1+hgVoHRHX3qAQVHWPtcrnQriIA1ield5RlJ6ZEpe7PL0hXVZZZnxjqjEgXHLMxZVP5Zqr3E6q6JTsheLv8bHRlqyB7qa58bFRVgy84ZObvs1sii1sGp0UeKI8jF9+me6W/8kDd56KZNLql56FZZzglqui+d4LpRL4AZw413jMMjNQSQhg+gkvo4SSmrQbYnMMPB6npCsMW5vm+wx7gz+mbqxYWGCkJOVnmpLTkoMSwiLj4oQQoWQDCPQhgATpEepp9w462T1s+Z2RmxO1Zvb43ZMUlaebtldU1PkrK11kh/gl73UDv8rjyoPRVH7xNr6ScW5t42dfXujdM9y5WiDs6aosKamsKgG/6YMgaYp8o49Pb0jXfbtMfYxW2b5zTOOy3XPMw3mmX7B88zKSE1JSkyID4sLi/Wep8VKAsyTfQ4wy69Or1S+fLi2tm+aOAPlMf9Jiv8m+cuVHp9Z4l/fOXpob/Xseb3iTXuQhWo5SsS7NIl4J5OIxC0ReU0iunNIsfVhvc/6wMrZ+rDeZ32YxfaWUM7kaPLncVY+0a+8Qr6Dvev2QHJGvMB3He/E8ZIzn9TER5csnWUJry56kcmZ6sKkIss3RzPKE4qqvORMCpMzk/+vxmZy5m/VMPb1bOwDKGcme4+tVHnkzFmhi98ryUzO1LGxh/XJmQyMPvSVNSLKGhEYsUW7KUUUABy7LS72D8sa3g2oGsNF76twJDJZcwPImmxXWmJapCZr4hZnp0RXOZ01Kanib/EgYpisSYiNCGeyRllfVz4iqWh0VWGqM8Jji6a7bVHS4G2jMllzsC+OH95BVu6RNYVcnasa30ES6N0zYj4j9uKx0IVMYWxiIr56iYWJhQPzskHQeAkZ0+8KGUtUeF8ASd+11DwpCyxqXo+NX/fFmgVPtZ2cOqlqYXXhOQWNUn+z0rNl308LGncuou/KwzpmVz+yrodE+s83jiu4wPnGx+N84wviC/JyMkHgeAkb0+8Im3PNlpKAIsd/sucSOOecK9B8N+gzg5i9sk/df2tQecG//MyfvfcxrJ59xVe8eYfJqoOarPLV3gLJKvWsN0jdH0RZpZ0NsHImq9TyYvVsSTnN9hM3a2fDKKsqWPmbfuUVchCTYXXs7jLcd9uq7XUu8d1fBgqfFd7n93t4eyh7swd7UVvkMXgcxAr7QFh4G+EakMRejCxpEuZ3VszywEx7TiYFqLoBvgMeXrww+PoYzwPfeZiP8gGZ7FxMBbr6JcL/+AmgQ/Ok2a3za/Zjs8d+/I4LYF8KyVq9VhPguV/9n2P7YVbP/usrPuO5y1Ef3+vdb28Y29NH3hik8UwrK2/0K6+Qt6nt2Z7mZnVP06v9BL/yCvl2NeeN285Uy912JpkOuJnEcDNJxQ1Q7EOwhz6RMP93LqNjiqjR8cLWLbq2b72U2qoKkwtxvaqILxoNz1bSWGEefQ/4JdoVydLBN3Oefs1h1BCdjXHKwrzuT4QMGvsMlpfTKOEaeuR3n7mm+7BQRKMOslzV8MzeP/DM3u5x0A6eAVyV09nCNXyiWeJlbhynB2tw7zjNjiMZ8m7+Jp0+zM5N62U7PdAVu8YZ1t42pVGoY9l4dFwWwxzLQ0w50s5RnqfN2iW9lK9HnyrBEMvQVmCLZP+18ad6ovHn3ivvZXTYze/kdVIWF8YluuKCGQ36ZjADZ9BgTcEZcO54uiKnpQAvLaY/5dTl5dbmRMRu3zo+wSZEVWdlVeekVBeR0cq2yGEZKp0f8vQ/eH8wS8GuXppncjvbuDB/dBg25VpYHA06iNW37NNG7bvNSQ3yIC/k1uXm1uVExLFRxWfYqPZRxcqzZC4bFcZUbuP1JM49JxzUv3+199SAvedh73dvnZCQslvtfGSJu3PKHYb5fMXmY+NSXbbEYIoo4xnbNvOkT+pYHdYUxH4/vAn9EBmRMyY3rzbbEnvXtvEJKeRFnKGKV4ChH15zAuCZcm/xuwGuAQyusgMAVh+qgz1gqci2YB1ggy3e05g3Y33LATe84f446Yekz1QKRMbfubUxIRlQNiYnz02QFPEFFbyRQwBnl0W6NHDtle7viEOgzz8Zfdw4RGADQOWGSUtCe26QPu9jCkAZeR5Bqs2OiGEg7fZjERWi1KpCD8sAve4BmRYu1nImbmTtXgdGv0FxMfM9J9PwfqlSDMsoweS7Vp9CeBWnqTUtLoN6V4FkYEnG1asXMY3KDx+SccreD5W9ZJxYq7x3sGc733aQ8xnXwk1Vx7Xp8MpT0KGFdgaBng1mUAcTxRIRg+j62vhU45UPapsWV4jXhehGQ5IbIA9QXoB5gNMAfOOgctuzyl9J4bNk3kEgykTyMD+ZfxxWXXif+t6kGSismcKMSb14A7vD1nOhCepuNHRRZeWi6mr2mzyMHxeOUH+jBCvo/VJYRoLh8SSw2uNc0czXmcwQQckjQ8nYdPyXgth0M4D26qR6jRHoe4GjMjNzpMMxMjOz0kE2ZVTiXyyrzCCbvevuq8zIqMzIHJmRMTIz4xyfkU46LqX3W2Ezy88Wx6AdytVyzdx812UJhPJJRMT9FQBepFxHqC6EF82mMN6gFw0dwSw1WhAQqGIMXl4vzMD0N0OFsXV1LtfAgcnJmCKtrrmuqXGcq9ZVM6py4NCBFcVFyQOS8zLSVbWF4Tfc0D9pmhZkz/JbGIiVCH71yX7fBamvfbLXZ/LI4uHDF40Ze+2IymvHlGfnlJVlZZUprwklA7rfJJOgbvGYsUtGjFgyli5dNHz4Qu2LfGtOLmtJ/pebW16anV0qrqhcNn7isuHDl01sXDbyuobq6qYJtdUN8lqy/nplgQCVE6ByKVZ6f76usaqqGRs2VlU3TaypagQWm8E18PVCKSdx0tMiJYOyDUQH8tlKq4juJuVOMvsmOkqZNYk8/CfyyCS/9hIP7dMMxEkioYJIytk1pF2542FyN7l7ktL0J6WZvXvyG6SDlvD/woiTp0Hg4BgOQku6Pxwl5PEdCrdUy9d1n1LNnxaSoW/kf7e+yVVrywkp5caaLbie4PPwWvGnFe5d8m95Cz+eX3b27RHCP55m63oynctvEAWzToJVnS7CPWB6kC7y7BvH00X8FtEE9UPc9cS7PheeXyWcgfrSgPU2qN/I+i8L2H8pvZRfxJ4vD/h8FDx/J3u+wl3Pe9cn0dn8bax+aMD+2+j7fJ2wD+oPB+x/Kn8d3yjwUP/XgPWX8ATqV0P92wH730Eepj+If4P6KwM+/zLIqRBWf1X/eqDTCHqany8+yEVwk1zGvjsT1DsurKJAtWsT8BPoXHjXE1cf54rFnQy+2ftKB3dliyvYfalDqkUywWofxZyAtahkuxqtzBvb9gQlJdkr4/berXPMKhQfnNumxJMdhUPiB6YpWfT+MQNzGX8oV/MbSJDKH8w7hHN7h7D5LVeW8/kErDfJ6a4n3vW5UH8je744YH0i9L+R1ZcErI+H57cQi8p/Afu/ml/Fxi8NWG/z9F8WEP5S5XJ+EXu+PODzUfD8nez5Cnc9712fpMznb2P1QwP236Yc4+u4F1T+C9D/1N6VfCNnUvkvQP0lvQaov0XlvwD975CfpD+Qz1X+C/D8y/KTfAirv6p/PdojYGc1wxri4Ca6GoGBTKjlRBFRsBJJxNhJYlDz/ukJr/OoACZYPEymClz8WdD0UAlD7hxcuj3FlmwOT01hGcGDYYn3pPLQ4S3nNneYdCRYtZzD7ixwwg+spPziP1XPcM6pWHpnPHnHplSS21OU26I3d47f6Fx9/9+Us47nUm4ij9i2J976yWpxxcCB21KT/7Rrze61D99VlPPXakJPr929ZvvfF6j7Yd8r0/lXxDaUoVwkl8I1uMaKIBuTYUahGNNUB/YPX61DA0WgZI4eXiJREsQOA5E4qMZLaIsxUahOJwhRKVG2+FhdpC4iJEiQBAkVl2i8kMmWZiKClj0FcwAMxny/7LK0EJJAogqIvI+EyTnUcP8uMmRz6TWNU0vv2LimvMJVMaAwKm+U2Nbz8w3UKn/z5tMPzrz7kiHKcTOdvvNx+c3Lr17SMai96a4ilT6PwoRyYS6JGKsbT/ScUc3LyG76vJrjBb4LcwPoDXjrKZEIFTHJCm5sNvdtbCZiLhybOcJsCTNKmJkxkVgLIjG0B4O0MWOXE5aIPJJNHHawCXOVw0PGhm/fqNu4nixQflae+98/V91qkrtJT/Sty+4WCviVwom4SyrWrH54oPwiTbj3smvXNNUbN6h3uTFfqjbQSAa4cuIAP6DyhYUGmYwGvU4SzZTZcqQYY2y46Wr0Q2ZMCm+IySaASZtZ53AWwo+5wJxmFSPhx4zQCW1VZ15WdnU4d1xauuMUGVSi3EbyhyhbV67YUUaKt28nK/Ovrdk0YGkNzVSGb7jukU0brtutfDTrKtUOmQ0wzWExjYmYnQbIbNJTkZPEDgFlKzNUg4jRqJvG6XQMtBLal+g5GhM92zS1NdiQmE2Y2WovxFtLWTJLzCUm2HmEtDDMRo6RSuWFr9fDP1JLjCBBP/9twaJb7lA+IWfWrfn66zXrdtC3P/nkH8fpy/LJG+8ENQ1hnAPvId6BFwMw5rvyQgglibExEZZQiVeTUuNLiKnhOb5FS5bFcw321PQUQYrNTkMuTPW57w4vrgfMEeBYq7Ci7m8bnlK+vbfvnrvY6OjYtk0j5deXLVtb24LXELovt+O7P+OHFvOj1iqfKyfW4DBZgL8uFs8bCjbBUFeZgHfR6EQOM0+AlimJKB4kYL9mjEpmlpJE6jmO0T4kOMgTjGuSMBjXpt0GaTNjpCb+0LfJc8qoU8oo+PPj7Nn0/tmz+UF00NntdIF8C15OIK8QSHcvxusArm7t/Rf/mfgPLp5LR2iSo4OBv4iOgorOMWSJGErDA3VBWaItaBohvijXkJDAcQnpCWnwaFxWqiSBue0+NyonyHaD1aDdCKrD3V0qRZrVGxD5QZOKB69t7Ng2dvPwD/Y+OunGyiPvTKy9tHRhe17+nfbtcbaGP7XfP7NtG3n13X9UXt/4qHJ8m3JglEt4cuENyluXv7F4eAUMv1G7zwrxCG+HQc9TeE/RUqccS1nMoq2aMVvTNLzQmKvHK+AsYZIUn51JYBEEpBEe79UgdsGmOJT/pRwhb5M4+xFl32pl8VL6mlKu9AK6ssi7ROquFXSqPLTDr7vE62DcBC6Xy+duchlDiaSLBmlCNXscr0bl9BLXEUR0OjLNJApGgZDYMZxeT6cZePUC9DiwlLVmJpFdscZaz4BFAi/X9G7a4kpJTAwK4rj8gQPyEnMTc9JTgxKCEvAC9ZBgAMSYGowJl722N0UMsosKR1WlwFKQTgvNApoS6vU7LKcKD6+dkL5wyboNi5bcovzt20/1xriHfvxAb4ohj6eGhqampMDvNNtp8o1iFa/7+pMP//3Vpx98F3V2u7CgXHlpo3yH2NZ9k4sM2EE7lrpunHf5jUOH3nj5ZStd3a88rOIJZdcylh80gsVaDnNVJMRQTPGnIxxYSDzHrlonIuhjYFVRJmIxxZZI6wmn3g4fGuxOGaqX+vKEZxMLMLt1kNOcnk0Y02OKLdr42NnOri/WVxMlg7yzJNJosFyvfH3llXRCe7vYNvsvN2/76wzMjSMPARllJd3dAq9ED793ayXAquX24KycDd6CbK7YVZjtSE+xJcRH6ylvZS+CwKNBgDHk8DJw7F3gPK+CPSPdgaIjFdYCXR71ydEN7J/GEqWBHAFOiYywpiG8/KMbZ9n/lte+fcF9J69e9O3DD3+7qOtO5bHcCrAZXRW5K3JzyfGMjJzaVR31V91c9TgZeuwTUsnSdn+pvNp4VVS0wEVH3b3i6y+XB11/4sT1Hpz/hd31YYU1IxlvtU5MoAIs1CzJB14KLvDszWAZ6pD/pGZMTofaroRvyCAHSJIwvZSI7whDtPvW+jQvhAsOc1Gh8BflJ+UDyvD9LeD+1uXKW15of769nXyHCAfU33N0wC0erF9dqYwazvYmOYk2ClvE2SBAKlylcSYdmAe4ovGoj69gewWr9Toq8TzIQvgrsRuoJb5ezQKIMtBqNRukBBYcjRdYYEJIu3ZxhHY1dBwRFiZsg9VZ17qxQ6cnQVtin7v3IP3nzCZxds93pCu+sKFG/omGjGwaHK9cSzfIV9MNXfK3NIpjfqhCCcuhHYy5nHiWZ4ey+xcEiaLRgDeTU0qaRS0/HKEAHEpQlgM7HDTFmGwLprEHZa2QiA5ScIhfpAwm78X2NJN3SNkapbBL2P3CgZ7wl/fxP1NQCpCfsnpPCRtAxuAaO941Li7aAkSUwlGyqUG2lCXfXgE6pB41S6nDfVk7h5sRLaAUYPIlwjf43bAQnmIxAJvqiRXWC7akFWgpdsxFXAEYNDbM/8q3ErO9Z8dVf77p9cEzh/74zIPfr4uxE7Py6jzaNHB7q3idoryrnJZ/mXrplGWbF/y1k/S8S+jYCUo4+c4xAOP8P+s9LXwAeJM4I0jIKa5WI7w9wHR5IChzDVSUwvQwoTjCC7EwHYldkCyJOjYNYFChw214F49x3+4KSoTJZMo3DczOdKSlpiTG4yUCBtQe7aDmpBUwy54dHXhdJhDlTp/qLBjELhlm585k8+NPTSCpG+lXbCPAtGF4bUtD3cYZrfcNmdu8YPiI8mEzLVWXzy2aUjB5+O2T6BfkrekLHlBEtl2gPDyjoXh4SEjlyLLJg5ylLdXZjkzH7Mra5LRpRfksx8FDvadFg3gl6B4JXCXbPzJTjoI6yQ0jeoMrnur09jgqgR4vSrmgfurqgK6kFmdsANUJU5PodQY9piZRUYJXZwAWij3ZwUvwmDmxMnFERdmQYmdh/oDszDSH2WJS96LRNCisoOpNw+o5O2DkQtDzVemapWR8hPzug1tLnfkDGx0Ly+5oabreRd9i+ApW8bVhpje+qufNLZzK8CVMmzK5dN21M2eNyswYkDGguXJU0fRy5e3zYs+Witjje48A33yh8U0695gacByrMY+B6HU24Bt9GPBNKPCNWBcXsFJUK7U8WOmY10sv6do5PRj4vP4czBXnygW1gQebbEXfA6Dvn6t9iysoBVPb2NORDZO82TBc8rp5GLGK4e62SObaQG58/OnxyHvvdn84Wsj7+IF1B+e3N8wZ6ioeHOeKW0Z+DlP+7Kqcc6Mv1/WsWXJ564iCvJzcsGBy+eor4ue3MV67E3gtSuO1Eu6IOmGbh+HiidEwGHjNaAdeSwFek1ReiztHG51XGw17eTh5PZ496TmDUW9o54w6kDjGc/BlnKuQA8tE0okr+j/ISbpzPdfiCnOC5YT41Hg56fy8fF4cf+rLwOMdCzQGfpIx8LsPrHvmyvbGdl+kj2xfeT7WDUwCoMHLwLP/ARqkg2Y/ioxU0ZZhB0ymAJ+CAclnhcGyEEo4kkmCTMMyqD5oINHpB4AsNAAH/35Tg9pUo0gJnt4Z0fPGyJmCjKZ2LgiZP0jP8kvNCCaiyKwuhuRhY9yZ2Eokd7i9iwPrUW/QrejfEVi+f6QfV4WnCzVzbMcf6aqvg5YWVzzHVYL1WFFeVlriLMjPy8FsUSm21NTsEBaF/4ck1e8yQtf5RRXf6s0Pcyp8+WHOjeKV5xFX8m/n54u98G5y4mLmv5XHvasSLzkcCC2B3mAG+maGAX2jgRWsQF+JXUVaExe4icGrifvNZHYZKktMnzOiPtePI7yJVugm2vke1MjmRStXRE5WhiM9LdUOss5sjsBMJ0zegdEOKo2VL3AWRBaIv0MKmnbpI8qdhN/66cOWrZfSVib9XndLv6FORPxy8otZeQ2lH9945ZWXk4NO5baHHrrMC82DBnijWeCM8O495FkvBqKupK0H6YSKBpinWU91fAYgT3Tfwghmvx59KXXecl1zaAJJ5HA4BjoGpKWnpzpQsCd4C3Ze3XvzO4tS75XndFpmdjt5UVMvDjPusiUOz2ycKGXPrBh++bAxNzV1bK4ed8+Vyycr74wJHTq0eGi7n4JhCAmZ0JLmyJ08fNRlQybcOn36nS1FyucjhowoysEQQ06AOT/G9oSSuFJuFPeVxllRhEpJIogPvC20lOiMicAD6Qk0SF9BTEE6kDSeJvw5mmic5eQkMKKJ5PNa6/RGwJg+GJhSH9Sh7YYJgDqTyTCDMxhKDEwuYIoVnuASqqa8u6AOWlzRZWVlo8pGDncNKR40MDVTXWFtIbganIe5xN+jjeQhDm0918tO8xi5EoBcDU1i1syhw3zJ9fOYjLAKoNdsfmy/N77RQ7qJk/qRzpZSOpzRTuz9HGj3ocavqcCvZWihaRxb4IgJMuhBmUdDjcO9YW8G1S56AMUjKzs7J0I9gfZSOXTek3Z6ndIKUVZ10wVTZOLVD9qhINmCioh9E/2MvYpr1jZNHHtr26Uba+4ZWl61cmLLypHKFeV1g7LKip1DCNc8M39w1agRY3x5Vb4tOm5MeenkQfktQ65Jj6osGTgmN7cuLyUlLDwp1pqcaFXSLGG58fb0DHRhgfn/Heb/kbZWVnLjuEu4Xa7kgOvf+NElOZkZEiCkTl21BiIr6ZCVdCCjdNrSYvRfpQyGPoGX5706nevRvgdaXFEc1zppbN2woYMHeZYj0wUuRxdOiJ0bRwRapDqKtEVqHOPLG9c1MwJtqrl3aPnoVR4CZZYCgbjeJiDQ6NHDx/yRJcubbFc7zkm21DQgm9j7E9DsFU3elHAjuQbuBVVMRPtInKoykHQJktGA6YiifSSNV5VHq/SWMHokjaolessFo5F5s5fo2NoVQLD87nOgVdaPGTEsO0+TI6Y/IEcunIC05pwiJZaR7oY/RrpzypULo9d/gV4v+8iYClcpnmkbgRw85xEz/O+LGbMFxYx25n1x3E3vVF56iOQoN9JS8pYfNu6pQGxMWuWDjeYZKjaEn+UTI8nrNwUQNb+HA8pZSQfLYYo4sLkSNQlL6gx6r0P9Ym5shOq61ydHyWFNKqrmma+4U8+QOnq/4H8TZ6r3A2BOUfSM59TEa9PcpzH8DEzvPZRXbwiIdpitoiEmW2BOYeFOm9MWKXDeeezJM6/PuarnK3l9LN+q9PRycxZ1TF5esWX8h1sS25+cf+1XJOq9fY+cVb56o71j8YgxV8y9TIVlWu8XQri4TL3Z3hJOKdGBvMsCMzebiIKA+0RqHJDmisfSYKkZsYaKCFsul5NuS03Lw9RXgjuXPu2XS59dG+DeQMZ7xe3kpTfnjV5a37px4tJ/3tb1zbi1Q7Y33bj1luWLYyeMmD+sYl7lhK7KxU+fTpx67/TxXa3hhnG3zln08hUzpy0ZUdm1cMVVD+TPHD1sWn750BsewXnEcTHCVtEEurLDlRrC/PngV01wECXVzB2puc+xzxxJJaCZVYfmYaQtkSThZWqN2792Vg7gi3veyh6X9/V2+S3R1CmXDU04FF8zSO6k16o58/4JCtTbYhWME+EyhwQbJJBBHOa9XQT6tRU9UBy4FWY3h5BQ4qCT6IJVSn557MfRFYOUVWKV/NrGf+dVDez+SQjJqxrw3UauH+yE+Y7ADGp4qm4X+7qKWhF2A3U4Ac/skHAAoVMxGeP2r/PGZfe8xRcPqHR+LZrkNfKaTnlQTfyhhKFlsgp770sAux7GiXSFB+H5nwDrGXLzogQEPq2CDCVWA3FaE4nVXED/HFuer6ySb5FvWaUMqoj++Lf8qtzvNsmv0bJN3w2oyhNCoM9KbrQ4T/iUs2IOQROD3RoVHCSQGqOBEqH/BOIY8uFNcRY5bVGAeYNGCJyJU5wn/7r92ZZxPVPrphzaLv9ETXe/UDJiAP/ggBElz95Nt8j7O4/OLCq49GgnraWjO/9aUZ6QUF7x1051fsrlwtvSx/C6SE8Hc6o/EKOGz7x8CRNbNshrioxK0sfya5u+AyqdNQ0cPcBrwuJp+PX9JkazEm6FsFg4AJZZY+3ePHRWDSN4mIpX6lTHwTc8Taph31rUBpG4LdvFsb1ezrPVG+fCVPEUJ7CoZf8wcxQvxbBL3CN0vMOSZhVZylTgT12QiUQezeFbgpR78kIdw/Pol5v5aYMmDkgIVbYH8ZfmvBpO9QbZtoXzg69VHT4EDTbc/6XwYlAAMQy/kDogE8/VYJEHTmjT1Y9sACdUdIJkAjjN5kqE0+kg7Lg9zSladLh7XuQ8vJl+mTfcEZqn3BPEt+QcjQSzYMUW+jnIzfBXc3ruCiJtoQkDJg5SYRwOMC72wSFeeoVYAzPWxP4yRPrgEGCAZujEjO8zJX6wuXHI1heLlRcdabg0W4mTf1jFYc9DQWRmZGrGyDw5YTO5A3AYH0ZmBfVsz3nFQvQGenKzG4du+Nw4DMdzHHZJHkBQw3CIV0TgF4ZHHxx2+ssdX1prOCRWwiwMUZfGOy3q7VNfbZYT8kZmpEaSmUE9D6lIFBZvlpMNemJ5JYdvC1LuDotnWEQ4nb2vCF2Ck4vGE4YgUHJMLI+nkZBqwXOVrh/OCGeNDA026LhoEi36nIyZDcTsPuPLJoX0hyuenz//+Sv2yGeofk/prCFDZpVuEpzzX7jiihfmKy+QnWSn8kJpW+mQWUP+DLAMAflYLd4JShXIAz1wmM59i3MNu0KcwxMvxAnyP0fRAZ1hgR1Bi2ZCh1Pd18pJ+Yx4p/JC9yP87UR5kexU59kOfS9y9008pIB+axC/XexIDeeIPEvZaS32baDmNDyqpfOpXj6jnPya6qDzKcoUMoL0zBGaWN9Del8DuKeqfUvaMQmtEwguHwF4LsIcxuDGZN2AMJGf+bX8G6KIJItTux/REPMiYXBD34vcfePTDHZ0Zq7Gb53nhhvT86apcMu/fU2SeSODu1Jo6plDGNx3KP8VrOKnXBSevEcBljFjPIArCmKXgRC96iwEa7og8M14Ba8wDU9OhXrmCeJ2/jVJ7jtMIz3Ov/ifOY0IVmUnSVVO4M9r6h/42Ule4j9V9jzx5RPKbjIJ/pAGQnoZPEcAnv0AT6VrGI8zlESpEyfMdemIqCd4ONOO+yqUb4Y/PJ1mMsJnPPSCh/DIVsvFbA5CoMygNaZ5wCnQQKTPkSnKMGUY/NYgek39Q5OUPQosBYQ0PPHFHtKsPLzniycQqUncdUKnMBcUViOX58pG/yN4PzCbOKMu4ZF9/GIjLOYwPJG1FJjtFmJBxCT95S+nsPPlykphbk8YOUNeUnYcUnaofi3ZMMZmbQyXq1wkPAecxOu0rLY81ymgfOsS1dmLbPYczl1ARwOjYDTooRVvlnAxhskSC7CWrZB/+y9yNKBX4ZSV1/E/9oTRZjKdTX/6IRi3dy8XK3LCYS6Is6AECA2C3kGF4FB6mpj+A6pkICEQHBxsCbZY02yi+gqCAYOZwm1mklZoIIBvKtDbc53OXHmO/Bg5q3SR66giHFZ2OHOVT3Kdyg46acdnykpl5WfEhUzce0rYK61gcIBmG0L4GklkXiAC2ykkhDlT4OCCe3CzBdCrk/AeHZal3JaSXmi2pRnYiwWr9CTlCRjsBRjsCf5jHOpjMk5aIT/Wk4xw8SdbyXVKV/dzwig/PAxyDUDyMjSQGoumSqlXXqHTTrN21REPr5slzY50xvcNRx9cVGATCfODp4/RCfJj8hwci95OPlS6ZIoYkHfLu8l0Zy7JyHWeIcs/U17+jM2/UtgrnmDjl7lKwiUqVEtqkCvfDqiHqTfjyy9M04lg8Qr17F5TREJYaIheB9pYEDGpbgpACBtiBCOqUTQaCD2b6ySNbOBGGLhG2fsxWU6WiyecuT3JMsDJn8x1ds8URnU/h3TCfT43PSQumJ3mN7smoDyoMQFR4J3TqMLhzXnt2sZGexAxSJKhGf4Y8NZEg1QfHa3TcVx0XHRcbIw1yhKmC9bh6bQB3ajN4cGgzJkRUpAVKtEsKhXLiU1XCBhkJJRP09Ua8aaq5KRBU5W9Qg5D7/s0j5FRfpsO7n4dcf3tL/ffr75Tai7XNgDPiNLTiFsFLJQGxaYAegp65zSzG6RxZ7OeiTMR3ZpslgJiQ8dAC5lCvp/+i1KlnFSqv6PxyoI3hGhSd3a72KYQuV4dZ2vvv0BubQERlIY3q1tAIKQArmhdFGjiyK8BnTasVmuaNTUn3cFeoCASbo7wvRk1nXNwfVZPIVhDpASUuWHbLj9yy9LDC9uemNe6qSBaOfUboZcUFc4YfuXVtPiq0eKWYZ8r9yk9d/dsnv/uzavevrp+5GES5JI/rFjW2rJy1PNPlIwdxaQ8xx9h/kvq7bmwZnHtYJmxA3BgcxQynEfGeN/BoLp9OWxakAf9Sn4tlq/oeYbOUIL4SHLv3rPb95L9e1Fk9YbyR6TbgKOjuFj0eYwgokTqwFLkakQBhIsOxpVETsK7jowe6Q7vHpPuZBowPE/qMRe9Ktkt2moDrKJzOO2FBRb8AVgsVhNSy2znC++Qj498vrDllmXbjy5Wro4lx5uf3Tp5svIzMa3HWwr+W/wsQgdgkoFDYEX/s3wX2Q+w5iq/CKtEO+j/djBLR7qGZ9mSYfrB7NaGmGiQA0EmJgcEtip2oIDm+BaUw5r/XmpqbGxqbmpOrD02JduB/mgkkWo+pQBtnubRZ3VaGVWjrJZ0ezjbtXDwUQV8a0tXzdbeP2U6xu1paL2pdivX+6fcjDFPKI1bxzdUfZkY3bJ10rjRJyPjeTlv20sdt/dulX4efCbvTy/P/RMHn78vUHa07+noeKKAvibKpH1vx5zHC+QywSvvcVsYJTf5vBfoU5uPJzmohzILg1fdSdTrBgX0NVGXF0mQ2OIiMjPVRkQDEXaoLwV8SyE2RK3YdqjHzP9H1bfSua1CqzAG9EqnazAHZOcI8w9xi1FUKbQs7aBQqBplkJGZlaBV6lCQpWgmNsXgQvd7AVIhqPLaJjPe9BHetKSSjpWf6vx85crPO+lY/pHyucN2Duso37n82OrVx5bvBJjTe3OFLvEZ4D/0rRrrqk0HPjMT3OeOBY0H7+NAOatTPUeNekoNLHlJO0te0tyXvCQuzp4SZ4uz2bNsmvtjYjbhCyLtqis0QOgAo8t9U7MFb4UC+K12MBuFrgevO76WtCmlaxHcnIHHH/2g7RoAufsTpWzdHTid998PHuIAmfLNzlM7v96pVzZNJDNd7y2FSZC5sukUziu/KRnQ91fuN34X/w28UX8Mr5GWYJORbbhxUSRKxauk7lz4oXXssEujaLj8g7VtGGlSHpn35OzZT84jTfyo6tKdpVU7Zzw6b96jM3aqd39vFda5aYuLFBCNuXXxVAhsLTC/YaNqMei8LAa8vXeQthlB4QvdpdJSfoqOrVzSFN6zgb/a3HRtpfyUMEajaXkHkHhuOdI2C2i7DmiLvmYOvO8imaALZlwsldCkQv0RQJNEUGEF1BoBOCQwKsz4lzLPTNCZU2zpaTZHiiPChqS1pDPSuk0aICoIGYTQyaC1WqykII84eAa3jn+qbQEA/NvHj+5acmydsp38ZR1B6AcM+PtDypVA1Yz9OBHlnbV8r+t9JKhy+0RiASKf2mkg14yXpw5qSpaPwKy+ZjEkQUDff7np+wdwG8kUAIZbN329cas5gyNqZ6oUVR4hTcParPIPNDzq0mHKI/w3GmWrgMzVjL6FSoNwPVsb7C4wG0XQPbz3wWBtQIvU4lZxbZF2M7pu6cz2QmHUnR8r9x67S2x76reDMdIM9gv7PAAyspv5Y8J6EwR9mUS8EMEIZFFvbQgYYdw3hI1EEvgNquUBfqT8LLlGWU9H9zxPHlfGi237lMobFNf+p0gv3uPNHaEW/gt6VIuX9t/AC8M9JOzxCB/R8x09+gKTV0mkQ9jsH6slbPaN1ertJdvIt3wMf3kY5a5lz4EsFVdLh8E+S3fZ9TqJZ17xIDi7+g2sWX04FztxWvgraKRyizJGUZ56S5YO7/vtW/62YTIQuvdH7hvhJUEEvcvODeCqXCMdSRF65l2sB9wbdQYePYw7wBYD0dzCbrufwXyMYQ2Kjua41AGpeTlZ0fbolPhY6CQqNTXVBCO7PXTZBezparITDB8SIiPQZocVyi6AyAJ5i6dKQtbWbffN2VLsXD9359at983ZVFp881x54Kr8qvzEpLzqfGrUPnSuFsQTT+/7dOHiK5fi3wVLrly689tvKzsmjBxXQUZ2jB/ZUPHvbxFXM7hCoZ7FucW4ogR33DTXiXrtonC3UUxAYbWTT3rI9a8oh5XDrwjJPZF8bc9+dV3p6yPJFa/G9Kv8yHZG4Ac1S7PAtgnteCgm1CudPcraV0gRKWJd/btnP8/83biruSKhQriHi8S9UxZV3SUw9aNFYEGVaNlh+GkkFxGRGoFqGrt+S4u/CiGe+xhOfL7qmcabG+H/Z1Z9vlq4Z9XJ1fIN9Ea1CD+tPrmKjWeA8a6C/oBXqGpr9zlM4tC873CpWm4SzXEaP+Ju/Yc+wxngh66Ul6sl+Gn156vY/JbBe1wgPQE6DcgSDCgLw23hUGZSCqi/UB4z6MD3Fu3KVjU/TQwXnZaWyuarxh9Ikb6XQAHr8IuuHz78kolVpY9tq7tq2PCBY7KWPXSP9ER84l0ZNWPO2rfviE/cHmVeK3624yGWTWA51yMUCK1aLG65a4hEtBQ+elHHo7rZwj7w7F5InjaogatamGpSWGJ0FAtTNUj9w1S53wlLpStHZWSMysrCcNss5WuvL3Sv1xehNXNkZuYo9v/ITPk972/en9X5wFtXIMzU5jPE5QT86niJxyA+r8RnM0CzFcTzTSbcL6Y52e+7f8zzvxmsWQxueonXF+VWry98wbmg950Xk2k7uU7eJDwNgrGF6Yc7SaoQzL+Ed5dxk12T8NiKj4wAmZZio4IuL5eKklCnJ+7jbWA1HZs0aBktBo8vLc4eNaeGmBhgqfyYgdmZafakBOjVCgLJqHKX50QnxTs1U/i5Kog8xZk2IGZAafzatmdcU4rS89jn7HWzh3oqLj0AFdpnqOBfSkuxRhYWVB9Os1kjBhdUNS9UVmPRYLUIq5oXsvflOS6T/0V4CuyVUldxuBm0CL2O0mr0/UZJI3HtgqofC0w/5onqbw3tLcw4MavO4Ko6yKOBYsPl12LV8b8oPywjGxXh8cVd95PQ5co15Ozji7r4jc98+IxyovIk/CH2YV8AXz3HrQMYmln+DRPb8/OsjVxAvVRLCSDFszXN/d9zfFnPa+4fofmZDw5+cFCdY281/4t4L+hMta6q2BhqRLtGqIZfRgOe0nJgi+GJFmqTkrrzJ7GdP5Ht/OFtulwchkdoMzabg9Eii7S51WCmL7F5q3PnYe5nSsgwZUMJeVRJbVo55iOiK1ZeIVeWKM3k2KSV9Rp4yks2kgx/P3iGVNmUT2G+h+BF+1HYws5RU1xJEtMYAC81/ZZWdrBlIVYi6thm2yH6xTi5k14/Tk6kvKXne76WjN6tnD6zl5QpI5/h/Pq2uRLVvqVzdo2h3o40XLsPNeC9bA30evl+1B/4rx5Tnv1Uee2xHvnTZ7zsnkiE+Fx6jS3dxkK9witUJVyz8jV9PJ0ZM/JTmkBXDRz6M+i+TZsbGzc3oXXDeevh6ljq69juf/jiHovzaNssAAc/4sH5Ok3b1tYq+ASDke/9BqMeOyoK/TBcRUnA+8G4FVmH+8bAPTweF4gk4HRTmMmELMoMJtLfWFKPd6NUSwk0O38r6fU7ALhhxcxAkjf420f/A1CrV+VyauyCahNYwSaocJUmISfXWaOooFkEmiItiaodgH89dkBMdHRyTDIYAZZ0tsvhawIQj/o/SLXaiY/uTxb26f2JAO3wYuVpX5WfXs00/u4PEdzVOXhDIuAVVLhW4S2gYQzbiTn32y7hSlIfFRUVExUTiVRFGANzEIZ8BOSigQLPX31sGaPtpqZdQFvZct99CEcTwLFOgwOljhc3CXh64i91IhACJGlgvkIaB+at7ncEvlumHceW72raxDhs2bFOed99jMfChFYpm0sAa67GNdoBVAlj8S5g0elqTEaQU3o888X1psNt8gYQUsmJlgxVOGkhsrwmm3SqTFZdDIDvrHyB6PYssAqtysm95F2FJtF4+cCI50tOkxT7ZQ/PgEnceemBlp+UxHkwi/J5I4R0eeOuK+/70fHWfUujO1+9qvPYMjIzTfkzYnXUitYwxodNMJd1MJdEmMs415govO6OiBKtw4As3NoGk0pdKdsNRARzFMw8oYMlG+OaWZaxaSz9CUhcWxL0kqBtgKn7Dl6TQSELPwUwGW27yVGgMSi9JIkmyPthKv8jtmTlELnyKfkzOpZeemDWpJvqYF6xsTCjlhpiVmdz5S561U6cyg77qj1tq1UKNW/NVN//8UKrmAv8YcOdPLyVl9QlxFOxGh1aVXdeoIjADowYs8AfD9cSDlOe4q2SEeHMVo0kkQZtj8ebcdWtCGLV5gfzokE+DMyYWsl+sIi0KeWzHy0Eg/t1YV0fOwMtdva81jj5vsebmlW+BrjXaXCXuUqsqJ+54fZl8QBgA76jkM8xIO0cfO4FamB+l7t9gKXv+DK+7IGVcFu4qSALbgC+SHXZcL+t8xyGpGoVE/W4rYCM4409vxw6RA8/o9QKNk5bG6YKiayvbFcGOz9iR6iCenwkEO+tXR2ngz7Vcxx23WohP+PFF3t+pofJ/u7PyX5c16q4ucIcIR/aJrsS/MFSsym54bJox4BVQrJSf0ipF/IP9PyHN6twVXHN0E8i9AM2FxohfKeamKlZTczEqTzvAxPa/TYzfYY82X2SPCkk9vznwAGtP9LKTeW3XDjOaDQeGvjizNOXiRvsysdg+05cvrpwV1zbZfP1v/DfFdeUL+g+kt+CByk4Ar/hwIfP/Eew/Vedv5vG/wdjCK09v6iU9xmDcku0MXh4NMOVhqsy6cTweK4rQA43TXtMQ05yc1Thiy+SGXiN7qFDUwWbUutGEs9FQN+HWN86MGFgpdCB3iSQToniLZddAbVTGAHfICf27DXKezDI6EOHyCgyXdnBBur+3Gsw6jVWKMbESqiYdoq40dGFIXuU1/Xf8RQEIVQIVQ+Bw1Adx1FFL6zBqPz38gJ6i7yAjflfN+qANr3VIOPuhdEKXANDQ0BnwEwtqDMglQjfJaqcKnqJZ/VUguk2mvKr3sJtsdIzZKZy+UurnvkO5pjw55XAanKRjT6Ms1Nq6Uc2Riv3mBbQWECugtUhotUhVHOiJHZyAhW6jGB/GFT7Q6/aH3of+wNjlb1sEJO3DWKxs0mjHk4KnDZY47aUkIeUjHUrb3wIwBq+YWWnUvBpsfIfxkJyj418icigZpsSprB7YgD7SwDG5QBjMGcGmqCvH3NXIoSv0QHdqyX2GosITpegokhgKIKJII7Cw8MjwiPU9SucmUhW1APRQsILhBlPmC1896rntr3x8sphzx3aKfcgA14t3muT6xBrpxFl8m2CTb5NmUR2Ix8CTIc0vMXhXfF9mIP1FFCnJ4i7IMCdScWdUcWd0Qd37KJjX/wFnwt/CGaB0y4cUn4pISOUWwCH6wGHGYDDnu8Q3peKfw2Axp53AezODwHmUm6LsFB4GzQszDQP2mk0QJGWGh8XQiSeBptA5+PrYgipCSKeE+d+aSIcjmwW6028PMLxeMlzbOjkrIRlLolMdRA1q62w8MG8/OWfrKjfXPbAJQ/m5i/7ZMXYzWUPyrG55LaqCeO66mlNrjJvVFP9mnrhygfLNo9d8cny/FxoWrapfsXfbsjPe1BeP4rclgv1E6qUebn1XeOQd+GXMF0ogvfDgDaUDrUaTsIjT18TJMLCbCj0R8Bz8nFUosbuH3k81e2iZ+gcckQZJN9Os/DYQZmkykkbfUrYJFaBTNH2Y+FxUP1s1EmLVyt1Sh0/nEry2U1klbJMbT9B2CR829feQJ0GImyS35TfWkX2kX1Cq3yWSpuUZWQVwm4jd0D/IAQB9nSXnWU0EX22ud3qFzv44iUrC6Q2UAAiV2jqvscDiLB3zx55CdXJv21kwGDfw7W+Q9i5M+ucMs9fAXV7gVImIxkbCrTeHKWdO7N9bhvOk/k84ziPCE1KHXmFjbSKvAzDNYnT9ijPK7PZaBvJnXsYvo5wv7A9b5GrqN1rGDfJFcU29q7q70cWGXCBRJ8ytgGrrt5H+Ah5z5/p0f3KCaSH1Ps11yC8BXoUxvw0cBO56dxl3BLXQj2RgolRJxk7giJNvC4q1MCLnE7sCBEieC48jFIzRzusFmomxNyCf81kBpDHTBpmzGhsLCsj3IzLZsxtv3TqJZOaGic2Tpwwvn5M9WgMwhk2FINwcrIdaUkJ8bER4SHocFZKSqO9jzhYrg+792ZfKSnsO0NPJAmkwHv3DF5st5t4RFSBzeOGD+poQaHmbYyFghpfgd/4V0dfO1r9/3XPpyVLAhUq8aMG5Y8enU8vWTJoFH5UHn1deXQJFg0aRTdA0RKonBaol5cDFpJ6rSPsYNQg5beXX1aeVL8vwSLoGun4ZU802+cNwUwklMkN1beNI128mjeF78uboia8taTiHnnf/q7dZ1P3WN9e7i9PGOrZHi7bT6Yv6t6Fx0GrwBNTieU3Q37qZO98S19S1/C0FOQm0WffuIC+2LddfOwa9yaxfrQas7if/kXoFoewPZkQ3INDrx+Ws1cgXSJPmbsG/uWEaXpJx6PPhsmk05lCTCHBQTqjzhjOFv1YdopgIna+kKmOkeR/h8l1X3X/+tVr5FaaTG4Vh8g3k0PKcPLSHvjH1uFS6HQh8xUx4eoP65dOlHjmfeOvkun1HKc36dGNRdVS9WqWBXayI8JwpWQvmUJylXplJ7mZrBIOPNFdu0c4IO3bx/Sz3ulcsfimOBxmGYWYdCdWgjmQIHeSYs95hpEzpKD0MVC3gxFxMFGITsmET6a75Uk9u5hDU1eXclo53UWC2C8SBF/F4fJyeYkzVxie61Q2rFN+IiHrlF/6GnngGQfwYO5JgMe9JgJQJnfiVDQfyCLCGSQulITwbj8jt9OVH1TCdwjP2U/wt5AeCCpnbvchVntuuAy9c7k6caXwk7bHPhRsmtmAki5uG7fb9cD4yrLBOanxEXrKr7r+mstmTa7VGYJuvZmaw/k6C+GsxihdpBihY75rekngaWxYTEi0GGSgQe2hwSbeEEfCzYbwORyKpmYOBNN0DuTSuDVrFi9ub29udifPJNyabWu2bly/uGtx5w3L2he1L7zi8ubZzZdOm+Jqck2sH1M1yiehJtvcV7EUHwBL1hQpgWBEw6CicgKip+CPfS9g3bBi6CbdTi6wG619gU37LiYyAu3F32WYxeQ2/PVaWHR0mN+nj/GT2RodNg+/dV8XoEnfJzkDP/Jz8LPwkzO3J4Xx5We5zm0whKfZOT5ZzUoPfienzFblsfM/oBzo+4w8rJzSeBjfqUxXutc7ZQjyZ2I9CBhi9GFiA+3Hvj275El0Nz17bvalN9GVgZnXV56ApYv7eYSyfC2oG4ks/zjqypyXCZZJNCGCqXP/rYwjOSBGnlQ+AFECWsseYf8T3TX7OF3vG71vCd+Id3NpXBa8F4UwlosbifJyZOUw19CSYmfBoPwBedlZmZjBLyEW32XEhFGHe9ypWgpuVcDEx0VTPFHTWXWOEKKLtBfmEVQnMZuNw2mtIM7CgshEYnVadVGRPNSZCDQTBWsukUC/DCZFhQSq4wi0TBM2Deisv2nEc/Puvuy5ypvGdQ0YeFPD2spnL7v7sudHrG24acAP+atqg26uXZlPTMqaRJKofJnEXwG/SUJiT2/+ytrgdbWr8pWfadm8xtUN4+eG7T8QOrdx3OrGeQsXX9bQ2dA4N/S5Z8Pmjm+EkkXEVlwbrIAFE1xT/PQrY+69b8yExvr7dtQ3KJ8X1wSTSuX54Nrip1V5+wv3kDBdDIZ1JRntyAgLaNvsKhPVh5f51oJ518kEPa5hGIVGaINOp0vWJQ9IY2exGEZhtul4PB5X94BgVaNu1cNBn75F2fEezXu/3jh9a/OUe6aMXTPeuOKD6275z/rOLzcG0+PryPT3ad57yqgJa+uheuJt04P2hmz+YtWG/9x8/ccr2f7Df+XdwqXS3cAxYa5gsKzU2KAwDK8B42NwLMFgLRpJXzpyzYmHl27bd4m8W4w4Ti4hCeuXbPpN+fuLah/0Jf0pmJTZFcK5eV51emDJqv575Ij+1OmX2XjKceFSaMvGA1NXDeeJZeNFhKNqYMRDZ/pSy/7blz584poj9IUXlZNntyxZD3rVJcelHOi+Fsdzw4x91PT1MZhisGosnpOT/16yb5u7D2L/bdOS9cqXyq7jZ7/zgdnqiujzCPBSvXFfCiCXd5tcCDqOqxxnz3hwVd2HqwJzhJHgeWF4ITyEuLp9f4v+1G8fHld2KV+uX7LlLEnWcCWESm2gM7O80wEibNw+G3bcgwK800Rlr7xb/4Kab1eDO4wKT6n0640QQgEmtb/A3vmsP5F5owuh8hdHyLjvDB/+8nc1DzDDJcKT5krBAtTe0OGHJx6PHwxk5kTVw4GwvToAS9krtf1aqTc8zbn56ILxeV9vBHtGxH00Zh13+ptxvkOzLbmX5C/IOP2pX3KeNNg9Y/M7pXUgh7Vcxl3+fq8RFhWnmtaJ+Wt3XrHwyKwXt4j/Gt5wpkl32/ItFQymd7R5RHFZLgdzf6/DTatOhhp/v4UIc0QMs4sjmA+L202jUHWcoC/lX9rY1JZ3pOCGq6++oeAI/+W0JcNDQlyLZvVY+O9qWrL3ZU2qFUVtDsoP/P0wrjoHTzSOmpQc5wSDheMc0mBJjVQvkKEvLbhiy4szj6Q3DnugYssy/eMB+COY0deDG3dECzt0n4HjNFgiVNwM0vxMYOUO3vLirCMLr5DWVWxZfmae7pGG4R48f+nGTTjbj1HfdtxN9BdkgBt191P1JYns813BsxBgBA0reZc2jb80X3/qbHftpKx92S01PRH897MWuUJChi+ZpuImRPmB0cTofmc6/QlhjnBHt6BsLMQY8/8emfnilisW6E/9On7ZlooHhjWqcvk1LlH4TjzBmblY9My0mijlo40UfTNjDJSo/u9q7AEniFRo1xFYOMVm+CPi6yDi1hLhwmPDY3G9Dw6Chd1MwvTeCzuLSHK7wqP7WKFwE4tK2IR+70ecuWSUsldZjru1zB1+Nuiju+gE2gS/g3Kd3b/wT8kb1DgFluMusfczYYvwLYe7nZhBc7SrEv1ka1jCVvRnadfimtGnGdMKwh93XsGwMJ7nuDBLGKgmoSEmPS+CsQxkx5MQi4GkGagniAEtl0Q6hA5R/qb8R/kPXzwst2dD7jBh7Jaej+kgelCuWk3qlH3yttxhw3LJCOXkli3qXt0A8oqwht/MBYPOnEZ27dcRI8GLGnBLINXAYgeM+FZLnCC1cEY9WlVGbo6WgkQSGuJq9xqhrd2rrRH0pWaWra+FZevTCzy6DtdD06AL6Db4j3cbdgHdmv94t5YL6Dbij3b7x3ps0f65wtJS7SlmCyYIjDBb0J3dEpWAe4uW9HJcoNPULJralVSg7qNfe4G5YI6psm0z/JDuCTW148c4srIcY8jNyo91b/Nj28ceJW8oy2Y1HFVKto6a1FRFBiknip3OYpKqlEDNtWpOzEjgjWX8XZyNy8VcCtTqCo0kvCEKdGF0x9fxGp8MEAkNIrwRQ7eNHHCQrj0Y2BvsexMx6OGDQcICMPWZButmmTyo5TlDc8CncXdAfQaNMe2poIsbLPiiBgu7uMHMFzWY5eIGi7iIwS54HA8rRo0YVl4K5kJR4WCz2ZKaZc+y20IkvyQV7nvxtI2iCHTNihQkjwdppGgvVDfJCwoLhPS+PTQyd0rDnKFZBTUZRY6iutEtlZPLMwaUp+blVAwfSe5omTChpXX8hBZy3ZjbxsD/ijM3Pz83N39QDg2uKx8w0GFPtIdZywc7K515mUnxcUnhEeVlxhXL519+4w3z/3kU+P3ZZ9c2T2ptbWpuRbmHvH0P4+1MrpB8zjhbVzAwN0oUJMw+qnJ2tjslAZQRndCMR26kxaCnOhOsO5xObO/bwdK4Ot39CLZSH2vv2+yaZjKiJeGRhRc4QPAFDRB24QOYL2gAy4UPEHEBA1xQ3x4uDS8cjOYsBpzGIIcG/SEOJVr+VaujwOoswAu9dPbzcuTW1XVryYy9yydOamlcfvOES2c3nIcRiUFZRNaVf/TRrl3v/fLqq8B/teQw8N9msEcssPLWu+qsMJNY0AwSmIe7yWjgRT2YKeeI1ggO0vF4fJmUGB8XEx0V6RVfi28ksUcWROIP6DBioJlNePGBB95S/k3MZGe/efDNa4dsGkLeKPeFWQCYXxH+BO+MibMCzNm8XX1JMNdRECVBHSaiwzgJ9ZhVVWqCMfRH4kSUKKAuz0CTwCP/OaKjKHR0QbgA+j0GLVvYM9MMEipPyG8mlJLnfSrgYEEXCWTwRQEZenFAhl0kkOaLAjL84oC0XCSQERcFZNTFAWm9KCAveKQW73+uqEyH3Yb3F8fFqu+hJdWzNrpXvrQAb6X3Csjz7lVOaXC/n3wBez+VBM9yN0xb1B72fkv7ljb2nk4SnoT31MwlcNmck451haYREQMoRFrH9m00vc2NJKOBetwjAlDEpJd4rzdQIyQ+hAkgdOzM+bxPBV3cYKEXNVjYxQ0WflGDWS5usKiLGsx6MYNd6DheLF1YMCA3OyszI9WuhdOmOhhL61jaeBKYsa0+1gnnxd7CrdMKSsyjrWXF4ya0jJ8wqecVN5Nvd9sqz2XnD8rO+X/sfQl8lNW1+L33W2fN7JM9mcwkk0z2TCaTBZIBAgQIECIQIsi+BVCUrSqI7G4U1ypV1FS70BYVcanVVmsXtdbtr9T6+qza1/XXxbavVkEyH/977vfNlkxCEtv3/v/3e5DJTL65955zzz333HPPPfec2tpyYq/X1wSzG4PXXJrE61OSNy64tadncW/PwsXMziTStenrlOezqEZXTLm+iguoTO4AH4OAn+OMyIwxn4EFzHdqK9CQ74j6nXGEeqYR6llGqGcdoZ59hHqOYeulrxIbPrX3tSa4t2OEeztGxGMjv55qFMANGTpOtBhksyQIRGR6lGb70UhTw0ogIvakaSFmLVqmtiCy4EIq2cYF0DROgJbxArSOE6B9vAAd4wI4Dljx2RsoKSkqys5GqKqypLykvKy0qLio2OfN9mSDay1dp1iuc5/PmnxtSwvxlpQW2e+VvPagHUzHdj+oj1gKkuOT8koD9Y3T2ps91e7ixp6WJfUNSxqVbxc8WDDn1mW3koLOvz943/z7TwzkTt7P3ePOrPYsWHzxAqetuiG8cdbMjY1K9aWX0nncFHv9/fTrZ/DhX8E8bqB6MdijzCgbFdK9WS1k+DZgnsOdOirGDOpterp9NbGEVH1m2AggoQfeBbRcZspDV01VZTnE3YeeqstxlseTwZZjsGXXxSJkJuvJqtkEgRsHSCuX+iGEN63pPLhrxiU1vsoWfGVcbb4dLCkDBwKl4Ra/31odmNS6hEgT8Yuh1tI6nRSsx3pVZKn2FFyTf8Djvb/oToiPghT8PPd9tvesQU1oEm/TPHDoFlRwYYmrxLIk0K04XbF1Qqe26tpTvuUJluOiaviKGcNXtIxY0TZ8RfuIFV3DV3SPUDFtnd5UWVaNiMCRXrjEzkkCl4iPCl5SvUgHfmV835ANeSBNNUyr6VTriC7VomJQt7TD1qCg+D61Dkq2So0dN9OYccsYO26W8eFmHTNutrHjZh8fbo4x4+YaO27u8eA2JiCp2wdzpNXnCXiYSU0/SpNaiiSD+Gkpcov7/vDGC2VLQqatSBFhw5sw2pOE258T0gyOdD7BL3Ova7aMuki1TiCcjEWeE1nEH7purYNHHFomEQJBkJIzATNjRcIgGNsWkWLVzIcfYNsf/LJqwVM3OxQmdlOYP6Qw4VSlJlIJuSE4HsMFKLrJ4YV1iZPU5SJc1upK9ixXRb0m/CFamx+kOT78gxMnOnEmfpmJ7Nm3Nn8fvwj9e1Prn0hXpaZIA/gBYIjWxuFDokQ48LXtYR8Qy/iDIOOP2aTmvVMjF8lwBJqDg5yXi/UQ+zZtmnPLolvIP1gPuVuVvfhaWC0SfczV+qijdK2P1MpgGTqkg5gVwILrRNVBWWQOyhJzUB5C2VgPhURfy7VeXqe+cz2sn81ab8E2+ge6Pv2c6dIlqJqLrU7swjLWoVy6GabqppCBeSzENOk03xL1W+OIdU0j1rWMWNc6Yl37iHUdI9QdrtogzRpsklQPJ3v0dLKDy7UkY6SDm2Y6RFc2UMr4lFPV2Ho0fPm4EijyJFmnHg8o05hBWcYLyjpmUPbxgnKMEdQ4oMRlciZCdPtbWgxeUVSP1PRlw4j6Mi+CgZWJs7qETMYfpFWYiampem/vlrrZ156aV1nT0FhZlU5Z/m7E/MIzz+AX9/t9x/wBmJ+/oPPzJ/FzuXCknupOxCVQHZkjnQK42YLvWJ+kLoZS0mJI8WdLDLugNqZTm6okb2dSN5qTmrljOKC5OGG+ovIW+vc1tX/cIXW2wfEM74K9DpW7IhdTio3qY7Xn2mxJUzQjTVFL+qK2NEXt6Yu60hR1pyuaWmqQVhuAMw4BzuJ4uIgCSxeER+iFgzi6ekhDT5iKEeFBy+BhVaU7o3V008Ncb+CdlpWSddmStIUpAGmdVjxZjR0bMqaxIJMxJmQsY0bGOhZkbGNCxj5mZBxjQcY1JmTcY0RmtE0P0kcrK6yxA7TR6aN29bqcJwQpXUcQEKuwbdUq5cNVq0Y6LpvWrDzc0oK7VT+Eavwyv4fqQTKzChRBvFM9B7YAqmcLfZD/jIrddUa4E434Hnjn0XIdBJ1EXZ6C/FzwT9eM8h6PKdkKICQrgswKwJewr0J4y5WLL1+/6kp8DVMNr4lt/Ae+2t4YCOwi1Wvwi8v3/lbVFNWt/rVTlYdOqPg+z+9m+lMRldAhjldnus2CCV9RHrDCJoHDAsfFtKdB3yD1G+OwdUzD1rEMW8c6bB37sHUcw9RJV3zwXp2tqmadiePBZsOTvgy9LBoFSOpJeXeD9heHVsKK1p04EhymGlxqS9SRBKLVMo4PmGlcwCzjA2YdFzD7+IA5xgFszHDicqK0usrrzclGqL6uKlQd8lZ6K8tY+i1PQXZRThHTmUp8FtCZUvSkuiQNCrNNLAvLrcoPyR/GdexClZV8KUlfqohrUYp71ZV0fnIfLVb+dPmawsMDP9pFpyU+n9CaYnoUvm353r10ripbm5vxpIn1C5StJ1bSiRqbp5vZPK1DLWgKeV2bp1Q86qqrfGaObrTAqJ6Yp6nfEJyYp2nrmIatYxm2jnXYOvZh6ziGqZOu+CDtwyQZOU4HerFOD+4GOtRnAOsbmJkF9nHQ9qVsmBqgemvFZYFoFYxjBmEaKwjLmEFYxwrCPmYQjrGBGEvr8alXCMb9yZG2iU3hhvrsuuzaigDsVLRtinnEbUoh5OLGUnBwvsr4wghbF1gGhzH147vnFF/U+bpO+c3CBUV0CS9z1uRMq4ner66ZXWyJTLeXmRku7VwytaWxe+mkIq/fleXzeZU72Eq6ki2e6pzcwubkJDQTdXOrVD7NbqPLuaGVIxIqwKIUKDNzWMzA+oQFYpgSSVaIkdswXbANywXbsF6wDfsF23BcoI2RqqfO7boMnZnjDMBUBqoUIcnAcoqJWBL7THD1Wk+wnn3CLIheYo7XXqAmsLBWT88nz/XxgTSNF6Rl3CCt4wVpHzdIx/hAjgdaXEb4QEbMmzuns2Pa1CnZk7IjE5ob6iF/qb9YkxOWC8qJlFRyWmJClkoulpLM3zB6uXG0K1ha1VI2q7ZidnalPZgXqFvkl3OLqiq8ORVuf1N3tP9CImRKTVmzTmgM+tuKCwv9LleFf2642FtY7HSWN6aRJfuZLClFtaiJe0SdFzk+CyF6K9aRIojrjDmBTiBO6PRiPFObAOmKoEQR44VbMV24FcuFW7FeuBX7hVtxXKiVERtIFSpNLDNbL5U3Jkx0etKHdLyo65ExTzVFju5ELUbgVroR5cQ+9jkWiEIjbWOaBtCQBkBPjdU2iESrb/ysCJg+IwKWz4qA9TMiYP+sCDg+EwKfAXZiyxCsC5Qh1NhQ1xRsqqkqqw3Uwo5B80rI1rYM1hG3DMXsMMPvDdlZQt/i2A7CPvK2Ab/a0DAdf2d/67bLda0DM9ke4nPD7RwuberrC+JQlvKHq78Z20NoWwckMJvE19m9GYiAV0B3+r2Rhfk5xIgljHjSqTfrRCLA/fwecN1ARn699gijZRkG2STRvRV4OWdnu1xmc5EnuyC7IC8XgvVlus1OsxMCEjmsdouYN+jCh0d1ychJccmI3/Z4RfPBuFlzwYiemLw/9cLHMK4Xmk+8et8jgBrxSxELnMnXlZV4XQIPmfo0p/gS7XKydhCqkw0iL+glFpEujbVS/Z5DQk+iXtzXG+4YJ7nDj75p01iatoypaetYmraPqWnH6JsebavxeeUuKoKrGbU11VVFgaKALUd1fs8djfM75/SGuKA7nOq8N6L/+zeOdh6dv2nTDzXGG9Gap/zu4Ydw9jvvpPjvsRy7zA/+sHZ2DFGOgnCzr4DdTzToiGAEr0TwgTdhbFZ9fzJYAEcqgsAPHujB8XPraqory/wlvuxMd7IrvGUYV3h0gbPzIe7x+OAwB+apvvLKjmEOyXlUpM0t8E+sRnWcpM4lO7jwcVRMlJnJIOfEwV8l+SYOU8s0fC3L8LWsw9eyD1/LMVyttBUGGQeH82rTERF82vj0LolV8P2F3Oc0n7jE4ek4gJnGBcwyPmDWcQGzjw+YYxzAxgwnLpGY+yHcxamsgBV+iOthxmhcD3NwqkySgjgz/d7i37Sl7wpNJCkTLuB9eCDFnRgWQYLt+GXuLSaPCuFWjgu4uQBLkFZQInTPze1hV3NQ/GKOlHoxRxaZQDIajYXGwvw8l0uVRhZjqigqw3avH4JmcF6OiqEMzHpKcuNy5wvZ0wyETJnSwWFde/biSa0xSaM0vTchyx9QXsH1xW2Vrl/QJ6/jWiZLYf0+zNbvIJqMZqGL+OUpnoUGrg0bDQKGlKnYNNizUPuWav/GwZ6FaSpmDF/RMmJF2/AV7SNWdA1f0T1CxbR1Bp3B1qt+WzqJCHrMGcBzy4CMJoOxT8RYhqXZhGRkkuHPwbdYq9PWxbSuST3v6zWpp2wyT5LOZWtGrkaByn1axTg442dA1TQ+VDPGiarlM6BqHR+qtnGiav8MqDrGh6prnKi6x43q2MENut7U3QWB9qjIbSyye+3lo7/6O/R++gW1r5HUzhuTbrMfHbsXo2PQbfdhFDaO3XU8xmRpC5rO/1WToz4n4UzFLqKTa8CbQ1+LjQmFLfEtF/sWqd8a0n9rTGh0w7dsGrHljBFbtozYsnXElm0jtmwfsWXHiC27RmzZPULLw1VL4VXN+G2mazaPORk2UHRG6EzyOqRDeqzTrzOA1ZTuzI3sE+V4MVmg10BNE3hMmOiM5XQmri+lItyTV6sZxWSJXnuBemkBGseNqmmcqGaMF1XLuFG1jhNV23hRtY8bVcc4UXWNF1X3OFEdB7RUiZ5bVDR92tT2KZMnRdpaJ04oailq9vkqQa5niHmjkOvDK+5C0o6bfDqCLG9Nq8dHO2JK8Eg2ha6hen27qiAzH0KcG79jU879IeFDKLsgUD9VAhM+hLHHXOKxMX3pjPSlLelL29KXtqcv7Upf2p2u9JCCg2RfDZJYzos9sfAJdHnnBZlfx+5JCqLmLTbEVFeKiAwMJVNeFGRaLV48Hqs1xbewOgFnmHpDwBjHiZ5pjOhljA89yzjRs44RPdv40LOPEz3HGNFzjQ8997jQGzOkVDlmjPsp6kYZ6CN2E2LEGzJ96u2IkUSQUb0yQdAHmqzJQ21oQaQ7qKPit15PJbq3yMkRLhsLBPKfIR3Wsr2pOYUkTASB9NI3IqwQ9UQgwjyEwqG6mhKfp4C2lmu1+YqLDWJOOSqJH4EkHLHDIa8/6DRjr+/CnZ68smFxQ0VbXrmzPCc0JdTo983W9XtnVJLSEeTz81dtm7UxnJ1TYbctWLL0Ivs1Lb9wuDqHJQhi+fnicrcKhQnPdt+SC+s4HxZ0IK4EXjtGqAHPfLBt03GXYNwlGXM6iUt2zE8npcqGLR43ootspxWzAI4HkGmsgCzjBGQdKyD7OAE5xgZo7DASvsOhoNdjteaO3nfYl/bWxIjzc/PgqxMjzNTbB92ggDsGf43zaRAyKzAbkeagL9H5CgFf98QOYET1IkXyhjq2Bx7dRYqhe+AR+7Yhsccd/VZWuxfyCutTBarH/2BqgujCMlMT+Hi0NkjdjgUYVxHGVZSoMiGqghrLcKFRGEY5GKZ4fP0QcMqN2DGDMY0RjGV8YKxjBGMfHxjHmMCMGUJiAfTQ2RYY/QLoE+n88jIDTOyu+4gXeu5e1h2efW3Psq4V4XB13QgMuXHmA/jF6dMXPBqoTfjtX8f89h0xv/2kO/yxKCRG7Qa/MeUG/8h++8Vp7+2n+O1vGXRV/55kv/2vpVzOl5m/EDn/4vnf8BOFX6JMVAzruNNo4DiWw5STMcyfWIhwmcwE4UclwR4BJ0UoiydXhs6raUyLs3xqClNbsQT5E2wsyGmRX/KCl7M17Ay7BSdkMI05U1nzcZC75nsrnj346Brjj74y7Y8f/LBdOdN4x0LPzss2TttaUbyxjZ+g/EI5++DAkf3reffcXZdjR9b3l+669oOZXQPzn/3BC09d1K7YmiOUR1Yrt/Gd57+JJDRp1slMyo5ujl0ZvTzpcizLy5ITcXE4Nf6w+kXvk4lEWKpzNt85kPk6mfm6chvOWr8+cf/3OeYLYUeVkYCEqaTsBNdWUQ1xicQeCIG5nOcI/YvdxHVY7RLkzUk52ynD7DZGTcyX4eOh0Sq14JQcY7CTwupE3lODTNiCRQGzE/SDHMQwpqOB9Dpe4iVRgGjGougq1+EQhpTadvriagbeIAcJNzD3BHfqrei1J7hKYfW53k+5hz49JqxW2gcW8V9mfXyK8oZL2MMyC1A+JpiwdNTqvW7GBpCIEdiA41Q24FZQzuDmFRbGEvnSuvk5PsYGcTUuH7vzCaUBiw+u5hkM2galI+b6Hrqz6fMzlmwtDtdM6m5+u3Jy06Q5Dauf23txe2lpeyAAuXkDwp5Xt0xt7+4onVTrq5m7q2dqS/PCCWXVHZfPnX9b77k7BuUjxuc/Jpv4pznjSDnPIQuinv/huQmcsV+tg1+hdU6MXMeq1TmhFAJJ5IFMclx6Y9j44kTu75fe+KgDmls/kMl1DFcWZvp6/IFSqJYGHuiifVjO+gA8UBQp4CGdO2STgmSdeJnAES3lVizjLRUaxdqr669/xbeoL9o/+Ke2Sfu4nPVx1G1avVh7JbdJ+w/YwguiEsvRM+S4fFRrd2KkmfVP1GYdRw5Scc9zB1mGNwgBvEOWgXfVvCEJ/rXqtGjcnPYC+tF/wpVc4cAHA5HEb6q6rI+e4Tr+aTA91vhrfaxn+IM0gNUYZHRs1sTHJgMc1alqyTFSsg+UlgZJL+g4GXZ/c41GFbgxwwgSdjAKRpZPiYUIiL9m3an+I5v6tX8s9tkrFO6JfypckEpJ/2Nw8SsJMmgDzWvj3BGH3xWZzaguJ6iuS1Bdz1KP0bVePGjAkrRjFNgkD34SA/T3ixUkN/rraPvg32w8NF74l+KVxCCDmARew6LHZASTRWoc/PTpGNUY4SzXFJHJqeiH/XTWnj2BULz+idHUtybVpzP0005N7owBPhVDXLdyRCnUEIjVHy38RH0VASpXQUbG4cfjvEN9iASO4nkFOJYnU09O9Uc/5IxnjeJ8VS6z+ifGWP/EmU3C47H6XMco4YN8p+gXKkdiCMTqnxhrfQ0BOn6wFlG5r+VVYHI/fV6FIMurIPcTW3SO9Ma5Cf3q+MO6NNr61qT677I1Cq8fNXwPwAfOxlsGHtYQoPVHDV8b/3h9QICtxWyNFFJj5IMepmVxSMI/BPhH5xCb9Manx+Lr8ujrWxP1zw7gDzRdgK27F64PIfEZ/gMP4y0aAgz+6Otbk+ozBLT5S+urOVlTsxKkENEay0qgyQEYxw/72TgwUTC+tqypbb2rioXYvKZtsYx/adti1y2YMsDy8an8AT6G6hjTBmPYsama0iZk+Ym3yauxXHicjKHWqNpdqn8zJEFyxBv9KKXN0fZZxVLjQ2gvTsFx9tk6tM+Miqp8GWefrUP7zBqV7hhnn62D+/xusvxNtBXLfYxY6mMUz3ycxDNebR5SOQoT6aMOcX4/SsjisbZlTWlLeBymZUyuJsaCR1quYkhzB/kgWSJlHqeMhVfFDfoJLaqzFNgvgZ/WZnwsKD4wFhynjgVk+sVcyliw0VA7DJIb0Dw3AaR/f0qbo+2zxxqXI9Ac4KhR8DP02ZrS57MDwH1D6DjWPltT+/wurFiazBxPn62D+swaY20x/WMUubI5LVc23WPRiQZaQEK2aO2coP0sjRTD5vMQyyDaE0u0DorgMshOnOgoxxIda1oBk4CgGfTTRhO6QVKbKm484MYjFkwiJWV2kkTQZgjTtICxVWUHBjnR5qj6a03t74mEXBkz3dS9KUx+0F5ihPssdFO1GVWggEYTI9z46abNDFVDBD5JEC4F19HSLqXPceJp+3/Gv55IPtLsJSA7OTzMghtSFadzE9Tp359kE2BzC/rJ5itP9xE98Zj1PA+Ti+cGL2jOuCb2oaqNQJPa3Eptk+lTPIh17eAMDbdghGJIRueowhREfH9/cpuj7W9cUdT6+y7sYcZKN49KN3XROTcBJr1KuPHRzROjW2wVU7UojXDjo5snRreYVqrKJo1wY6RbyiKr9VclXIJ3aVsGyLiYWLMFtUEBp2oXWpZ0Tdmzxof2Q22h1NSq/sFtV0XKwRn6oDqRBcwLiYksCDCRBT4tAGs6AEnyPrn9hL4hAIEFuvNXb+UkETjRvjV9B96Nz+zx08aaHnVN/RqM+xja9iToHlfs1LU1ifCfaUw9cZKo4mnQoH4mvD0JvGOCNLnxRNsmiB6JkAjzj+MPIRFzYmISiiKL6Ciqs5CCYEZrdR4maR0ApD9Bnf5U3SMZToJvRMJs4/G7E8k9ScBRNetQ8iD0J2YowOnvHwSnNlKlwqF8fgiMfQLu0eJFQchILCyjk0JIARQE277Tk9B4YlRTeak/zTxIggP9oQ0nTwQxVadPwIkvcaFg0sjjLf1J06H/s4x9bD4M5tnEhPhMcy2xLiQTKG3bY5VDcca1pmdcjaU+kyzyWJN0jEEw3h2qZ4yP/um7kCSR2NFSku0+L5INRnWqxTDvykFqDCSYL6avLvyU0kEWwW9msNfaSbLXX6gddlaY0o5mpEckxT5P24lZcTTTKFXodyRv2ZzayUV/v3z0HOo/p/ocrleO0j3BmdG0kbIdYKcaZwYiSuFAhOWfjZ+zSHACwewaCK+jrXDMqAKKAeFSdFtn7KxGPXsB8pCk8xQJOVksoNixWHJf2Gs9nfMR9STG8JR6vpKwq6r6BBOPw6MS0yec2o5C1f3ZmsTwSbap0HHXsbMVPJwCm2iN7e68qkZMm9H09rMn1P5pdlcDZLUUMOEJQ5EDFBN3sgD1FDaFVrXftN3oHNp3mNCAKNvVqrjG7apq/1W7Jm0L0ck1dJsX2xeoS2ZIs7JC/1VDZ39/iq2V9Z8duiYbSylB0ODW2DpDdxn9IPlVoyvbuZAku6tBy3gqMBQJh+BOmiAwFEHec0JS/1UctV0fbRfU737VHit+pG5gEjbVZF1ySBaqOGFT9PqYhfbDmJVVnawJO6sOeSOFHOPGC9u96NpEjveDZqrZ0oTV5yZo8y1ud2X957CqRjNZuy6NJShF/dB+r+8np6gaHemHxYJZNEWeYpxiV03W0TVNeoh9MwnpUGwfAoRV9bGzA/2x8ddsrTEaEKABa43HwzWn0QC0faABxRFmuZarOm57jdEAlpzYGpAGzQQNQh7NngxNk1PK9+K2E0bj/hR7atJaI/DCoZGYIZnKzmRLbdzCGhMHsTnMZJQBqExlFIcOCmDiOTRi296Y3q6JLqaCqeJLs2VySW3rUAZEJldbZ6lXD8XcT5AginRlFgRxGRIFcW5KnPA4HGcqLOhLAl6iPwn7X9L6z+Y4HRFOSC84En1K4h1NdsQsgrH1LsnuxOjFx+iV3vY0qO2YqIclOSbuqbjjfwgSn4u3LcTopfKniHmJh7TMoF9QekkSo5e0DEmCNJheMShMulBYwFIAShMybAbzPgCrmZjUPmnrHePh4VYaAceWmpgccyasV+raF7df9cftHNp6YwA73ZD1ZshpPhdfcTS7iSZ1tUUHDEZcEr5Ap+pIBTtHj6MM6xBPIB8n4ZdBMkk+hUgJk1sxe2eoM+KABU5dhZgU1piKJO3BVfpoy7imS/JUmQTLKMh5XhgyA+l4xCQygIl+CODUSUhnPEq2BRnA5sr8Gw8CYZiix5FhJWgoIZxhr6+J57hs4uJ4C+zEmc6HuLyjDCsCL4mSxHyDgJfEYXiJQhJUSa3xEky/6BytG8BN6gqT0FntqDESSsgqHcYyczlbJ7HQET0SCx0Brjr8kIj5SbM9aTbGpVdiVmqzXp2aybCDkRpZpaEar19SKQnvicDkacHGGC+JsBoDxqkbY0ONynwcLtDYitzgy6pS2YAlWTqUoLUOi7Is9tA3UV6mx7Ioz3VDFuwEIkYNkQTVE0w6mPrJ/Jo0Cklsm3Sub2L56SG3O4eZgxnkp9cy3NOCJmR0eFiSeKc3kWk8yD9959pH1vXfeuZ2Ov3WPbL2XCn/zu1nbk06Lzcxez6IPugy1aHoW+zEGSOjXhSQCZt4yJYdS5AOzsWhw7QZaPFOzkhbh3YBEIrNBXJct5y2DXZ9ivPBJPWMY+pZMspcKKgmjGd+ffoYxmQTtM+/c64UMI6fcbN24Vwj1dduGRuxQShjNU88JGBvwU7eF8OZbKLtQ8sJnJ+IHuQ/liqpPBIfo3Khjs4zN57FP3rLua7oq7rl0z++Xy33NC13LqVcGEvTbuEfvVX87fSP+ztibUEZAy0jE1pGhyUd9utwWIfddMBn3EqH/8NbyYzod24hZmK+hSw9t7kDRr+Dv5W/fvq53/A502N0HIV/Gd0kzNH8y4BGo/AV+/RYnJ4jt6/KvTgAzReN1Rm+fVCw47rfKHzdWPMn4n4Eo/Jfgx7E/RZGhoGZuSEORPORG64PcRhqL5J99rSdJAcw6PaAiqbUI4j4tjQUO7eZEzu2AfkW30tKKCviituBgYtJ8m4yqJ3Z9muH1HS38lE6POgWLWFlg7wp4Ec0dEernklB5+N7iNHgEd80woFgf+wEFOrTKbeIPynJaekHO3L+5LkuST7XxcpGj/MnldMjjU+sinKalovXYZ6EQ9uv1QpHj6NEWVwxIi64YmBXvCxZNGJZsigJb+7AiGW5A5/64mUpxiOV5U+eORMvK7w7Ylnh3U9eiZe9IJ0/7o+VzR6pbPa53yaV5Q6MUJY7MLArqSz5cISy5MOoLbnsopHKLooeTyqLvz9CWfx9pTW5bMVIZSuU00ll0Z3DlaXy6c471ZIgOxaNQF8mNBYlMEaoBq2G8uKWuP+fneoKOagAeZEflaNqFERh1ILa0BQ0Hc2iy/JFlNcX0zV6FVqHNqLNaCv6HNqJrkX70XXoJnQzuh3dhe5B96MH0dfQN9Ej6DH0LfQMeg4h8LENp3kJ/588X7169UupPwOZ/w88Erfc+a/9Bx7/cZ761/LID9CL6CfodfQW+hn6d/Q++hX6Hfoj+gv6O/oEnUPnMYclbMAZ2E7VmBxcgL3YT9W2ahzEYaoLteEpeDqehefii3APXoyX4VV4Hd6IN+Ot+HN4J74WIeswY+v53+f/Jc+HMvSuIY/OPf6/pdQfSb7z/7N/yBeXFSHUhCaiSWgqmoFmo3loAepFl6AVaA3qQ5eiK9B2dBW6Bu2ly9MN6PPoVvQF9EV0L/oS+gr6OnoIPYqeQN9G30XP0znrccYudaV/sSyBg192+ssz6IX/m57xJ1cP+++l1bgi8RNt/1f9ORIvyfWJz8rpf85nVY8V3tXWjQvqyZKs6sl89kj6C9V1+OyYtqPpZiPovqDpaLqvqhcNUzahF6mltf3AKPS+JL2alhWQO+JIPt2DrQdzcNbOhxdB+1ArtV7yqSCH2YFqyr4lfr7McGRwu8/Nge3E6GHzJ7WaXWlxVn2zidrJdPU+7mfwAIVR6ZcqHUmK7nDhs08hqZdaO92ENjUafHESjWHoVIwBIBjEtvGNaXGG098JfOO5l+BFm02UldQTbvXUjKcDg7keHjxDl8EozeV5uOhig/OYLNZKMQXPWuKORmV47ydnojJKajMDbglGKth5HEe32n3M1NMLpp4VUG6exYKQpcCSn+miZc0louguR4Mu/ZkJXA5kxqX6Kuzlpv+iq+sXf/nru/D76/c0Nt7z9eP3NDXdc5xvpA/+Qr9896/0dz99Ev+W7UKT+2lAoUgd9JSH80EesYDdotpjMbnHkLlU67WU1Os4DaHn/XCAHu8+WaR0sHtfqfAy0LzInBhtdVg7ctFjwYAlUZDWIRFjZgDGy2Q4lRnNdSwwMXAhDxXBnjziCVGE+il8wOEMww0dPaq8cRT+pcOnNdKCkMQThpGoEzi19/CBY0hQAsh0NCl0owqewuYZcL0GHG6sMtMoFVMUepQCxDXwczRGGxUb2m/9EPjJOvW+CNVVJRek0AJkeCfHGd0GTidzunUmPZGz7BbOnCGb19kyrVwGxhk97EMGXuagf+C5Pl9hocOhEszn9/lLigu9hd4ijxpIPSvT4Xa4XU7t0rJxCDGzY/2ha1exMxhyB0NeTF8e+tlD11yI4+TRvlP7CX08ejTaH+9w4mOM9Oyf0ng08U+N85xMBz0yIyuaHmm3mE2UvCJPcCclBEcYY8oCYc7e8M7jZSJz987IYINizbAaDbJe1mtDoosPCQ5x7hDdITjtficg+423yeH33lOeezu69f33tXHZ/jZ+4r336NB8/mfKzA8+GISXqOE1IdKUQYFIvIYXhxlaAmZY0bc4UlRpoT3Q6zR6SjFkwl6rEzDCwWIpSJEZWP/+++Tzb+NJ0W1v4yffew/QId9+X5lJcVS++7PotvffZzblZFx09G9LnFuKUDEqpXuw9ZE1AX+xT8tISsc4aXwNspCrYixzlJaAM1xzZFizD3G8y8pKSiQJuKasvKy8pLSkVNJJOtpfkfXDEOuHO+xxhwWJvsJ+ISThsF8qpn9JfsldTJ9IbsEvefwS9PB0cxNuaWpW/rpp00Yls7mZnGmK/nbTxk0ka+OmjT/buGmTsp89bIr+rqmZeJqb1CFpov+aN27c2NzcvHVLk/LsRvXfz2grdc3NuKnpUvoNXFvFuXQgFpLc4e2euaQ5+kLsviNJKj8W+Q4tFYN6x1rDd38KDfa/+27S+jIMDnHZyFAgSWXHvL5Q2RaXssnw1T4Ns74laMAWuAQNxrzGMRpQ8RanQdIal1hjCXgUUU1vJsRG2cFUAEJEV3lQhyeQXJLLsDh/PlbeQoT7UWp98TGqHtZRTsO0t3TG/nrQ9xkRI8EIoqfvsGC4huuBgtFfa/1LafuBIW0TON+wY1ipAR1aJVk/0M4/7DrCkI3+Wv3NcEjVDeQnJIFKACgramVxo/KS8gJujtUhueqTlPU2IxYpgE45CXNUEeiTseqWMUQdKCwEhUANEpCkFugurBbkk5RvyR/P3Hrrmdvv+AR+r3tk7dpH1tEf+qFlzYQJa1roD/3AN9Ivb6cFP7lDO1OKl+yPF6I/ql53Be1Pm7CanS/mRDLpcigQgYU+iPGfTdPZdVTkFXNejgrh986CL9xZ5Xbyh/PyeXReFlZH50Znk0cxEaOfRj/91+pKw1JhhJ6n6C7q2LWA7kIVAp06enGlBRKO8kQcOow1NepA1rTUNDfUDxlO45iH04y1hMv1Jd5RDW2W15uV6fNljnaI+32ZapVU/TkDdG8IHAmHn2xyA/5cGvxTsEqFmjLGmZp/Gko7xAhluq0WBkRIA8SadmDTDenAem00E7AtKCsGOxZ1BjJpxdPSIJSVabPSYhkNSbClOHAnnEjDGAHwGz884koeAQb9lo9uE1MIjdCgvtdHakHycgTtod8dUO+d9bJ7Zysoa2FOZfJMi9thH4nJPem4m5xJy9kqT6fiURupAthY9Uw4mHamZVoyncMjgWPcmoKFckAleyoW0V/H0UjBwwnzHYhBSRKjB+QdYD6AagYBhJyOERiCjYlnMCHwrqFUiPM13c02IpmtmzG2djG55Ymz8iK1JY172R5Yw1lOWW/VerhOQ4osuv1MMven7LnsVM+nawDLjcQJ/B4qODie7EZwzYAqjX3MQa834aDncPC8w+soys3m7bzND54wqlKANC4cRlIwfQHf/9auXW9dQ3+ueWvXvBvn0Z/uG+A3UyZ+Tx9eEyvQr34974Zu+lsdH7pkA85GOj6UX0XwoaULXx/kf0VCL30T0DKIgSKguSYT1VadJhgiIzLavVbAElu9gBgMjdfKU+J4mBPHti4Vbhe59MZ50eMMm+ivVRxJ7l9VPJL0JYAfjNRIgshBQCWCk+Ws6jKigXfaGHivVQPvsQZjFPLGaMNvO/dSV6LLlBzqYq8SQqWAxiN0NQce0akxDBA+NHh62O2q+YH1UOUYymHMP+Uo/cCYBuwmKh11qbEQeoHIK0BJircDDMRIxjioPzaL2YzReI/SQwd+KBxWbSAoJQIYbVKHdFY7c52BHoeg7/w2tRGSC61q80+bA0ntIdoeNAWI4RXQ4ZT27EBKJ5DwXdoEnRkkl3X2kztUWrE+WsH/hnmVH1J1yl6mU64AnRJao2LV7rWDTolifU0Q749xedkfmz2qSGc+PnF+sDKfNPBGwweHrhv0a6vX7mVqa2zM41zAKEFR71elEyMI7UBMKo1Cl2XqY0yfHkV5TZUdWj69LqsZoy5YNoHFP8lupRxIa7f6DG2S3GHbFFF5pBQCZIHOSMBfg3klcwl3Z9os3XuCdTBTaxWnMbCltsm8OTFsd9PFG7GppkJoLIzVfRlrRPswxC7WEAnC9VzWbRA9rOPsQ6zrYGVJWFBsCclcrFltVRH8inKanFFOJ+xijBz/T+q7yTQAa8OESBOV9BhyA62TIYEfL0KMWmY/kJjVA4HxQK/neb1JbzIaeB2vs1JK6LTLNSolcBKbnVbqwb9Bo4ZSr5zGr8CDIbCZVS52bwEJdK1cJ4uSartgH0YL3ZtsnMWv9CeAa7gM7TeLi6XaRGk3VaOoLBLGAvAe44DhQePBHaegK4AV2MzYhCsAlRj4IfBbIo3JdKc4cCI4igN8NGrooXQsSKn9CuDSr4FO2Z86UBH4yRZZCCRbE2Lx/yCaIRiHEd+L4rEMEcrJAmfRYVlSojqzx+3JJzGu9KdwZdel92diX78ywb7x2MWU/ebeMD+VOY9n9m/qX3j9HPrdons32gbjmkdxnRxp8zgJnaWdgBLcRBNjMwjcrRF4W0vM2zo/HyZRflF+kSXPkqthLaedSJLHCgmw6SzC+dhtTUG6996NdvzDBdfPpbNGOZx5/6WD5tPc6xdAh+7tpUgr9Zf1u7BvGLwL3OPAOytzBLxZ5ECrp4p47dZWHB4sAuZcvxB/37bx3kVdm+5Lsxu8+Bj0bP4Nc+mUfNfVf9kQnFW+4FW+4HHSvZfBKzDYmrPcI/BFXFaFPWHPEL5YcAMMee+xjTaltR/7KBekYvsN28ZjvdChGxb0066oe4ma8x/xe/j2ca5XNXzXuZPcjdEJfPu5k6fIn6KOeJtCKW3RhjoiUy0wETvhxELg4DahjAUJCesg7zIvieuSwpEg1RJsszIbrF4Hx3yS1WrVg04isVujYXBI5Dxc0G338K5pJ8+dJC9NiT5Dflj4I+Xjx381/3NKrVD663Mn+a5fn9tNEdqFf3cW36nyUnJf7agp0hA39+p1Bo6Ze8fUexx2S27JL/nD/nCcEnjlG7vfoD+nd58+vTtOFnwm9uj0G3TLAutYFX+Sb6CSowy1oploIVqOtqMb0aORh5urfJkmURSlpsZsjuhvvGTJ4ot7s4ySzkRu2L6SM6I9G/s4g1HotLINqF2wcZzEHXTqHJwkSgddWC8SUU/20DXYJBLTbgs2GA2HzNiEjKZeWI2QUUTr6N8m44oMbDQZ5/X0zJrV1hYIOJ0IHTpw7e6rr9xyxaWb1q3pWd6zbNbCWQvmzW2b2TZj6pRAa2BiQ72zzFman0sxt2e5Y2wqSs4M7KnGIY1XkasAO/0s0XWovqENw2+WAVtys+KQAFsKhWFXIyYMM4VJn6kQdIbdtD2v4Ja0hsJ+1hzEbvewEO7QkuRS26umU/eJ2+fn5tYvVJSFdfm58+9Yokzy6BvXFgVcrkJffrbF7eR+5rZk5/oKHa5y79pGfZEvuqmquqCoqtKL+aqqosKamsIHyg3T2g1lFuU/6w9LBfnuPH12bqAgy1bs55pLSm1ZeaW5ucYCd36BdGM939B1U09wY9V63513+tZXbqzvOTxXOd4WKrws4LS6nVmFQoM9x56XR381CIVZTrfVWbS2MNSmryry1NYUeSsrvUU1tXTf/OXmwmazudnT9M78hS1TPW5TTo0ny5lnstvMua4sT02mxe2Z2rJwPuPj69GNfCnfk4jXmrjgE1tyhrvHYte8geH/9Vz/wPLYi+/51ltPvfUUs92ltp8Bt+3htheLuM/OOkW4EzjCfZPYNWMhBglvUu4g9fA7+koSxG+NCDPWK3bvghOhXxeA6UyCy3o3GC7rJUBl51WDYdrhTDfRU5ElYpahr7JOJ/cgWdYtQzpZN/jGSXJ34+CTQadBA5B4inV+aN9ZNIDUEaW4wJBCLFyBrnDxQR3U+RgB4kObgKwN8FNPoWH6TvX2oaMMShQlOX2jNNdhIPoInY+DH9zhFDS+lUBkGDyGjvzo8HAOGoghPDCIHOogIAhZMRQPN2jx6bhBjxk70DfKDwYMDJHm9k86pigeiTGG0EjDLnau2sD2O+UojKaivshai4HoZCLryB4jxibVrp4hmTmBIqqHgxE95Vq9PGRP1NhYUaHa1hunNk6dHJk4oaWpIlzRUFdTWF4YKPEl7ZesF94viZrwjYn32Gd7ibdI8rZSFZbqVklqyid3bP/+5s3P79j2/BVXPL/t6oaGQIC+8AbtQ6Di7i9WLtLN3jmb/uj4hls+iakvn9yyfseL2z/30vbtP96x/cUd36svKQuFykrqY+8KOXVq5tUdHVfPTD4jT0MzXs/r9GloptNoRi5Is/bJkyITW/4FNDMTqOIPQj6S0dNsX4xciyq/eHfFmGj2pkqxU6dQ0pkN0CwH+SnNFkUWUIkrS6K8R4+xUYAQ7pRioFfoiCQSaR0oMnIvFYxAKBnNK6VrI5CpNFwarq+rrqoI5PpzS4oKLTmWbJeDEcic7uhjGB3AztZ9v1fdCqXS5J0YHQIx3nFs6O7e4Fio69oze/aerkHco/zHkN4/2718efeMq6dPv3pGsl09P9b3Ym+RB8Ksy5JQKBAkZRmJiDPdLoeVxa0X+U4kyJiqslIfz8SECIJTJETspUsUWE9EMre0lNKiwZ9pzcy0unUsTLubqo0ud9DpFUF7pJqTN1QCSiTtaCjYQHVJd0M4FCSDrNTk+umTHuh4oM743nvGqvs67mubvXxeC32vNtAHNf0d/ZNmLN+8qrFxVVvb6qam1W1ch67yyx39rd1Lu5qPdfQHjO++awz0dxybMn1pV6S/48tV8tvKm83r2trWNjWtbWtb16yec7uognGU8kA2CqBrn7RJBIm4M5YsRpSoqNzCIqVRJV6nHuHxapgQHiyqy1nQia6cSADKSiJkYLhQ4d6IKyeHbooDOWVeD4WbBSI0Uw+ZerQDpJjLaigY0sK6D7baPHzHwum7Zn/ve8u/970510xfcPuitiRK8A3zb+2Ze2C+4atdb77Z9WXDgoNze26dv2RI39GVdPwbudeQB9WimZHpORLh+GwscjqwL3UiLFI5IexJxK2A4Pyc2IcEQoReJAhglBbIvKKiotqiGn97SQUszrnlWLBL1Zgqr3gQ29e5sZ9O/mo8ZKx34BOuRXos8co7Xv/COxYtun0B7dTii3ANseQV2F76R/JAv+ZS5vMvZOUFiPJm+fqmniPz5h3poT2sw3BEJSvHUnuK0WHaAx8d41y49W7VEzSTx+mjkXmtVnsJC54AhyRMa7d73HTzadc08lbchsmmb3x9zYaLOy8LFOLGroH1XbixMHBZ58Ub1nz9Gw7ed+9Dx+cv39I2VfnPffuweWrbluXzjz90ry0JjwqwWZVk2QSWcwCmlHRQxAjMKAiDuIFr6xDSQYuQQkegApUXA3LFfphTiOU/1XYEqsxIQlNL3OFyqx/Ii3ubgqV1FctWNSxr6VhfmoT0uuktyxpWLauoKw027d3MNyxfOqM3YDXs3DxxeSjRgdDyiZt3GqyB3hlLlzN782raj07aDyf47MKUmUHgbi5Ys53IURU/7KUSs4TEs09BNoJv9jVe88Kjj/3wmsa+6auuqqm5ahXfMOWK9svOKdE3T2N0bnP7FVNWr1+/WrVrv3H+99wHFE6yz8Ub+Hp8vXIlcZCi6HtR9d7cz2m5L1M5lgsZJIySyGGSTSlLOlG6o4/cnCy3zcLBNVkYZMlPObAaq7k1NGTd1iBHJk4r8DU7a6uqJm2ZumrzlC1T22qXcx+UTZ8X6urMnLdySn5+lC+bH+5or72oJpuz0KZrzv+er+H30RU4GKmhyy3Og0PrzoL8DDOPZ8LVSa6XuQ1j1AehFlaAf+u8Yn+xl/m2pmIgDMKomK9JIKIEEp/JnRjF8SCX7YjWJf56CeLywsDwlwirqdbnjRRi1fIds6ar7rFMJRStNnYcZMdB7MG49208/+dKr/Kx8jK3KnoTv+PTY9wqRu+XqMz8PfPrcEccTKgleXRY4YRThz30h3wHVyhG5TSuwB+RU+xa6JzU+pR/INdHGpcQqI/JdxQjmB/xR7hCWA3VySmEz59E2QLiX0ZGON8B8GDJxzPZyQcMdg/LRgUtzi32MnSI1QM5lOhs8JATZH70RHR9ZThcSY7yL4MbMV4ersSllWFab57yJ+5a8fNAjscE7Q4zDlGdLow77lDW4rvvIN8dWFHHHTjKHQzS8rW0/DKtPA8+Sey+M3biH92BO5Sn7sB3K3+q4+7n7g0O7DxKcX+ZjsUvhQ46UTyRfKpEWzKMBj1lWYJNaCaoG3Qe2R12B3AEBe23eq3sJdFf7OUni8gNV7V/dcmxYNmxJV9t3y10RJ++ZWJ0Hjf1ooH1vK+q5Nxp7t75A98iJ1tvUe/xvnz+Nv6X/M8pzKJIgd2WofodwsEYMqMZCaBuxoZhN+0AnQFW9grTX/TF+9qvin4uumU3AC4LUsCkfOIt0afJtFtaycmBb83n7j13uqSK9w2sv4ibSim/5/wfpe3CdlQIJ8LgUEq3DBJwHo/VK8R9aY4kC1FBidXFDv14m9NBePVYUjv8y9NQC9XbfEHhCjz1ueeUZ54//Kcbb/zT4Zv+dNPf9imlSvjQb57DU58XtsNXzyvPPPeDG/9Mv6RFbrr6nZuVBfjEkXeuep5WhQPMP57/o/wBw5HKjUJGEJHxIscuGfexMECAoeZaQHErYyTS0NDOJNXjTh9heNXxtjwsX3xICSul+/5G0VLxA1QAMQDNZRxR5uNv3vzO1Spih/984w9i3wHaV4E+33L+Y10x/yGVJT5UhqpQEM2PzCstLOA45gpTXckRUMI6IeDJQXbmrAdnY/BQ6VE/cWiZziATcHadGwgUFwfrAlWBquKy4rJMu9dq97qMdCXREX+4IewxY95b5GMKWSuGTrjcHpCKAtVGyjDV0a0C2IztYIkVPyTh6I+P/e7iuUrQfUr52733Kn875f7rX92ncMa99+KMU278WvWUxt8N/HHX47m4k9hyH98V/ZD+eoH+rTzO/zF6XfS6g9HV9Uc/OXLkk6PPqm95rROj03KfvOaaJ3OVR5+lv/Fc5VH6N7BGy/mzlBZ/VGM2mJi8gRNUo4HgGUOujDiZ+HCzQwWnx1VApy/Zcux3jVOqpeNneude/Ltj0R/zfzwYndia92z96uhBchUaAkOVKRQSnZFkqFCxulShwkgXYoRKEOVMr3Qcup/o57PQt2QYbrBhGWGxx51us4nDMw16cLodAignGRB0Rad1LBXk2WNqt0iY9VNcmwpf7SW5ivV5MC4s5ohRlcFmE+EoKoTM0GbAkEBYuVabdg9DclPq5uMknHTFZ/auWCFde9biq8vaoKKzIavWS/F8d8OGbzkr87eqaGzNr3CiVBzqItUGWIxwpx1zGtFjkQYGE99mZXIKqALsGPKE/amDsCGrznfWIl27YsWZveKH3tqsDRottuZXOr+1YcNTzor8rbAAXnv+rPwfFH4WnWXhSH2eGVybcGeWJYMOickYGxIQkOuSIm4wRxKbKzcFjRRSADLYDYiJ32Qo9eXU+s7dUpxMFx+/yVuT03fu6hXC4ZUrP90Ww7GgwplKKmd5wVbFuGHDhhSaWUGu6iE0TSedB2imTmaTYbhY4jkpMeOTWUle/qMfnc1PZaBf8UsHSvHnUxgnBTblGZBCuNOKCQwXBc2u6jDfFyaDwEtuGeADdjtXjFKUjSn8oHUwA+f/6Efir1K5VtnKvaNsVdmVEjwG20ZnT1tkgttAeIFOUSPtul43qOvqITDiCWFGYSABDyGIcpNCWoVSRwxTFpIYKX46iHvLzk4Tnz47bQW/fCDwYurIKNtObxiMW3tkkgsz3GzpSEM3VCpuVA0A3IBGPJprt9vddreLksot0d1HjKkg1Z5T5SYn5aZk/v4ppVgZ8PanD4tPr1iRxOEvcm+/Ahyu7DidxDNTKX65YGt0OWxGPd2607mW67RzZKbJoOOIQPWA5Pg6mEWVcVldKUwOZz8SnW3FdEtP/zPMJLM6io3TKpTAQ6+9+tqrDyn34UeX0g+vLSXe8mnh+KBOmJTz0Kv030PP4mXwvixnUkt0sD5nxFpytJkGPFS8F3uYeLd66M7HSjdoHisEbjwKylx0ffQE/7LSH65U3qkMK/3gBkVlB9XJT4p7aNv2iEWNYglapj1oBScPqmSyVkA5ZNfClIdp9e/Q6g+Le6InBgqhYe4D1k47i19hRAWRXJFipsYgJBARE4PJhEdGbGDBdwA1UF9B3SSfVoZxN9Mxu8OVwrvhyoHCKNVAuQ+otgl+6Ii4+JPkNQvhlKF/U36GPAbt4upEfpRDw+SH8bC4jOTjt4hHOSWufoxit+m8g3xeeHS0uWHw029F38dzhEfPrnqU2RTnn8/XdQkfoivwTLwMX4X3kRcmXYYn05ZNyIwb6LsFmXAXbqVNG5AFb6ClltCyNdiLs9E28H1EBnwZXkO/NyIr3odX4Vx0Fl1O27YjB96Gjegf6C/oANqHrkaQrVKPbJhqveg/0S/RT9Eb6MdoE1qDVqKl6BLUS/U0M6SpR2+BUKaffoAuRhfBOkFfX0QL0QLm3QOBoSCSoYieQ99GT6FTqB/dj+5DnbR9uBv4CHoIfQM9QKedRP82o04gJqS8R7NUu881yGIyWC1bkNHqsBode5DDbnXYdyO7zWC/HOltOptetwfpOJuO203lrI0juxERbUTcjUTBJgq7kSDbBHk35QpJvhw8oM0oA9Rdswmb+yjtDFaToY/Sxqa32jYgieelXiRJ/ErES3y3lgJ197BIWO223f96LCJ7AAGTxbDnn4GBTZZ2jxWF3t5J5XgPvhZfg3fiK+ksW4/X4bl4Np6Op+IW3AR3pOjOkm64cAnV23n0GnoVPYmeQF9FX0FH0Z1oDpqNpqOpKIxCqBZVo2L630nZIrPc3hAGU73L7Qo2BJkzrkTVW5c7n9Bf9fTFzCoSs/+wlJslfkiwmYHNBFYLWoF+5fNTvThcUo2pZBQlP/0t+RvC7EO99rf6JhQ3hN2wT3BLVcTvpc34JZZQ1aWeDUvsO1YmA4OxNJ8EQ9C2iz6Ed7q/aAiF60tCFLa/viEcgmyPtK6bNk5/s0Lqj1dNCylpCSHDwQIM+yc4K3a7eApQTRVKwXnBBE+FOgCCXK9+yS0xy1EbVvO9ur0g3cPM+BBkGScp3hSgX931SG72DSUJZmVJSH1GkQs3BEOANFtZnSx/rFTMaBkuwAe23bf9yfeuKLt6Xk/GJTNmrwiIuZe0NFwxb1FED5fmDEJV2GrMzsjhy7YXemYUlF4Wym8qdnRMK7CLOTrJ1DitTzm7Z8EX6tbX2vmMQGX7IllflXmn7N/8BzF3deTrM8TAbTU9y1eIwReWKT/Hv20LkubJZtmZaSK8LOodPF/kkgq9JWaT2SSuLpEt22dnGk+Ie2a/8MxkWzBD9i20G0p7DHLBlixzEXFc5DbOCs/RR+odtXct8f7dVvMDr685u8Rfe3HHwjVukfj8ArG1uf1NkVy9vkSXk2XYIK6+C/ds2HSbzWK08MZWi9lszlhymRRYfHOrvIi/eO+URTyfG+gszSyoMNzNb39pUl223lzmnXjb8jwjl2MhVfsn9j2y2XnavnJrVZF+rWQXje68TGel7eqc5bWtZGlpAyldWEicDUKD2DNx/kzybJanZEa5b0MX98q2XZfsvNiTm5fbsbQoy5kfyXYH8koqcwzzxMa8uix9xo4NEqWxZ4pZNBS4HYaSmRcvL+o1WesluWl23fWRRkLMtsJ8V4XFNy9nvfnKtVda2vY24zleS8f+nMKiEvPkr06becou6AM3doUr5YyaEiG3jhSSXGNwbbGxvKrVbfe4sgpsWQIR5cyI16Av0XdGeit5+7xCOSdUkJV/qUfMbPZX14OuX+IgwWkefaE4e0Wp2LjSiFvk7OkS73NadMbs7ILJflHOrfIIMjYKDt/SaVMXXxYxTnRnBAxXioFrfpGdawlUFbSUiKUdRSa3OcNpdPhLSUZBd4hs0Bc1FjW4ZD5QX1lpn+zN1le1WzKLyrx64ig2yda89btLxcmb9OZ68+RAVo41u8YrFdofphstsUi28e2yub5IpnDllaLNWKH3ekmpyPIgfnx+k/yxsA+9g/5Md5UWujwzKVKAgfXDqpXTqwoKmJ3BEi2BMpuUwTCbEzDn3bE5DyWYDVeiAsZHdSlNIFRjbSLTn7A6kdU/6I8Ik5sChNnpAB3WSZuCiedwOSWHBH4mrJT6Dm7Y/jCctsDUpU+1WV9f4lczPLdRCA20eeIOs+9oGdZYDP82wlILu6EjYX8I7N9MWDiLaCcpaKkY4ATr2jBZ79z8SN/E/VXEksMZ85bfNtFbZtZn1016aTt/t6GiILO0M5DL84um7L2YXyS33rw4IF22JINOD0urkaeTxXbbpg3K1+9aLW4wZOXoSvT63EiT391mI0JNDhHdaxZ2XFzrL8lu9nl/UGP7u3fJXbWO+oh+TniW0X2RgxSZs7YUyIaeUoN9oU/OCNomP/PC7D3iCWPm7O0WuWS1SCe8ucRbKLmKeN6hF2WeWLItsnlyMwm2vWOrdGbmuY2iXVqrL6rautJ+ZOb8iT0inWNOUriwlDSULiWttctzyIENvvIZJZ4sPb+tdPf6PKtsKnYQvbesKNPSXqXP9k62V1bWB3jZ1UB5UL+BhLoLMkip32F0ZpjdpqKOUrGkpaAqYMnN/sU1AfFKQyDDPdEYuWzx1GlLfQ7BiGWhrMIli/7JBdnZRp3F6eOl6dlyCzaubBRLV8wWC/WeaUHiKIG9cn21vzlT9Fyan1UQypEL59n5yt5IJ51zBm8kUxaJkGUryHJ57O7WqnJj8dqgMZfO1bpcoTpglCvDXTcG9IJdthdK3ppsa05WYDKdD/pNk79jtIkrKfMLclG9WW7nbXKRqCvPnFBKvF69Bfz8hd/ix+XX+Nuo9mRD2VQrK0VVdImN0MW2MRKyGGWqGodqAqX+4sL8bIeeoto5LRLkyIxEYAfYZOyYNGnS9EnTi1xgdEaw4pT469wuutq24onY5baF6XSiDNtAf9eHXQ21LsrVfhddJaUw+13idzUE1dlUEgqzaeQXnVa+gCtxTZONDqPZ5ZhgNBcIE8iaXK6Gnya7Mwwesi7HlGckm7NInpXnuyVBzpJ8enGLKJeK/HVusyhnFYvzecFhMtoLlGlmq1SRYSJGuSqYUSzxxgxPjVl0FHCRTFH2m5y12TIWiK6Ey3QQScio7UTIHP35+Xzx7WS9GR/GX8D34gfxN/Gj+Cn8A/wy9/1J142gSS8BHZrdATLgA1QBAs16JtOpJaou2Wl7NzK9mmd69ReS9GoHcg6jVz9FYT9CMTiOv4q/jPvx/RSjo/iuuL4d07UvoSPqov/1+Gn8GD7B9PClVPuWqMbt+qfq3pahuvdNMbXXbrAa7KD9Oq1G5x640+V07EYOm8EBKrjLpnftQS6dzaXb/Zl0YPuFNfHDF0LJ6mDq8H8VTkUUpyNx5fyfjtRwqvqIWEVuTkXIuue/GaNeunuoxi/jH+Pb8W34FnyE7iGu/qftItxsF4H/dxfxX7yL8HldbgbR5Yceg9+QO7axsFFNCdQmlxPeaXdK/DUiU4zoOpF4A0wpYqwL5VjRj2E7UjjzX7gdMZn/h2xHJpdwBbzVNMdlpiuwnMvHdidVZIJQYDbOr+FyTR0eQ4Zb7jTmmXKy5vPWPJJV0C3qfVKWLEiLSmWxcLxbGUvon7mVobrT/6StzAfFWbJodgu1dqPJIfD8UnVro1yaUSFZzdmmYJVsXOrJMPKSbiZX4BD5qU6TXxb5+kyuREcELIszazMESfUdujp6XPgii9lVBBZRCCojChyRU87y7XCY7y63B60S3SiAQ0MGMRMtSHu4uJVMxFbBjw+dPi3YFyn/x3/FtheKZsypfTdyw15sqwjolf/Tg/8hyecyV5Ls659XHrnunq0tq62+hsUdSgD/ftvtl06+0dW+cHYB9n3vevxV5s9Vev4Yt0/sorqGE25PmzHHawgJmCdwEWUPhKs6kGRFlVgqKrg3brfB3QhaV4CLwWBnDlo9kqDGfw/a/SUQVN2LS6kaZVVmyfpjH71GLPd9zNVwhdHd9/1p6efnKXfQj4ty7z2INwx8AKZ9cv4O/mExgvx06WijiwnFqWMqkUWKlCxKoiztocQUMBH62Hm8KGMRboogqYcuZnA6IKG5WaH6OruvvrxRJxaA74+VSXuwWsMWzsokcAsGmrawm8FWWJSKg9b6clzkxFRUe6jEszpcQU9dQ0j1HXJ62c2FhjB/k9dbUNBdGbVVdhUUwOeuyqWRrbMaZ22NLKnsLoheNrDVtZXU1Hmj7d6aGi/5jrdOubnH77nPW9Y7ibN3VUbfTdQkPvYZv0Zr00aUOm/BZPza1q3RKd7aWm9Ugd/47PzWsqnOn77lnBaYuEDU4jL/XpITcV2yMOZ+Hz2uW56IQ/clFtdtWH8RKwsh8jb3k4HQ29yLagg7/iT4mmgx4ZLjurzE/R4i1H3cT7/PSI4Zl9aXxc7Ck2RwP3l7oIl78W2oCa2fPx+zzVuIcJ7Z7jV7O0VI9cldQL//grCaeVfnsn3StMiUDCxyzAtCh0WJE/v0tEPMHI8bZxtkog46akJzijwOh7/YU1pUCvGaHLmOnCKry1Ns1OUw/y9gAKunjofRhKhidqvmRMpCjBWy5c3K/eeDR351ffTbpOI1rL92hZJ9+eWvTdm+bffVinL55TgTZ96yez554Z57bz01S1j9wDM773bjf1euwDcrV6zasOaS6I+Upn/ft0FpQtbzK8//hzBHeJv2xYXykA+VoyBqQZOoajSX9nMxWoU2oq10t7EXfSXyQEuwvLTEV1SYl+WwGAmePilUy0tkaW/3bN5i2Hvtrquv3H7Fpo1rl88yIgvfaVOvD9LtAOR4kLHEE6lPR6UJ78pwmh1Gu6Q38Pp1JmywWAy99M1gWWHFFoNl3pIlCxd2dXV0ILR1y5rVS1YtWbVw8cLFi3q6FnQtmH9Rx9yOuVPbp0yOtLVObAxXV4ELCnPJZbd4NAeTmN+GVET1LJc7CHpDiZeHz3RyqFoREiUPPOcl5hZB3z0h+MvpKQEfR6ZrBF3Mi9UJb0GoTQUchvc6F52UDUG1Pi0Mb0wb4UrwJT/5ifLga68pD/7kJ/iS1wIW8eYZuy/v2ru544jeorz+WPvkle078Pdb109of3TdwCeTeMyLFRu6eOOGSg6L/OTGgd0irtt9CL+0DddzZQOl/KTwopUV4kyxdPehrl2Hy7iZXOWKnqZJfLRiy67pt/JGsUs0yrdM27VNyZ/W/vja7VPJzqvWPjo1slp4+1XlgddfVx549VW89PXX8dJXu8jRk4WiVPDw3aR80+wK34PXXndPSWD2pizl+LdXHb6+uLam5KYbVn17zu/3vSmWlHFvXnut8vTqp7pC3gO3HLrSJ54+zfl37v/8dd5Q11Orld9z3m/cR0j/cS+3uHrOpsydX7l3f+amOZUeNm/Wn/8Nv0eaZylCJZQLOKkFvcie30znj4c9r6XPidQyW43dNIuWX8Oe16nPO9TnbfT5DPa8QX2+UH0O/m9N7PlE9fl69fnP6HObWEyf/x2e426sPv8qbSdHzKHPpyFklaRm1H/+T0j3KMZPnf/TyVA5lDkFwl2spmXmsTabNRx20roh9rw75fke+pxnzxeqzxerz59EiDvDnl+iPr9Y9X18Av2OO8MHWC4NATM/NHc8nQZZhHMPKL/CeQeUXyu/PIALlQ8OcGZ49hv6CXuU9+kznHOASj3WR+E3tB0Wm0PCMf9DKhA5Iq4TsJoji8/h56hLoHpFkFbQ+2TJrfqaah77saTEVg852t09KdLdHVFuJDZcMPAjPEF5TfhN14TWed0TJ3RF/zLwxpe/TG5SdYUTyjzuZoZDFtxft1oImQFeTJBRom+wpwIE1XG7GHhhEHg7nbB0L0RCcFrJeTQMHvmS8soffMd/ebWyjOwFFCZ2Awqfnn1eOXdv4EThxm8fIcu/AjRdRceAUHlsgZufAqb7TTjm7tRSEXLZs7V4FpR2c6wObxEvgVdmbJcBSy3kt9i3YFZXT9OOu/uOzlWeJwW4cFrEe2zCvLvWcdufUcfuO5TmrXwL3SZ+d9ZJK92uGx1miVNdishMuoUvpM9MSc/wrBztb177u7dXrZmlRrYBe1nubIoyEqm6Ioo54hytGa8aCoii75kdy4Q3pChko4l9A8mh1eIpZXp7IxkUeTdy28HR2CpLueXBEHOUcKuWbYlt3yRr0Pmde+7B08omPnqoYmbZlKKwZ8vXan/aT355/z9uuM5s+p5e/ka/cmU/5e0n0O3cGe5tqygWoBN0/iA6f07A/EH4kx46+gN8IV1JpkQiRQW5WS6r2SALeiyDQ4tex8sIbs7ukSiSubOZtyKdBjl4js/rKYTwhTarDf5ZrSapoLzYHuQ8Buw1YPU3fOCCOTjlhzyz+c2HlD/suvPc7t3n0f4bBvZfd37fPuXDUz/bfNsvj3zxVzcd+8UXbvrVTQ/+8ibuC+c+gAQPg1984cBGLmPgb6kvdkdxH+WtKmEPMlEeL4a4APGIbRKLawJZbQtma1dsqC4wJzvbbEYouzjbV5hvzjJnOmyQGahEx3ge1ibKcsRqsQVF9ruOzkvitSXNBvK3NzdufPOLv/vLX3535a5dV161c+dVjbNmNYVnzQoLe76mPPfr3yjPHsfb8GLci7d+UzlHRcUHygDmKXfnY05ZNivc2NnZ2NCp3hVeTPFfwO+F+F0Uu8ZIKD/P6QCVtJOFm2Dxr0BxjqGfmQn3XjILMwssbot6FUhKRr0EltUGFobMjUu8NjAg+LErSP7+2107f3vsHvr7N/fu+1IrXlU/c/6+2dOVe8Ld/N6blU8e+5byj5tvxcbHn8S6w9/48TtvriU/dA48tfC7d/xiVbQ+JxVXuOvUEmlMGycvTmktRN7gm0u6dOim3rNIIfc/frOTIn7stzsp4t17Z3fu6+7e1zl7b3f9jBnhho6OBn7vYeWTJwH7m7HhWwz7+U/ffsd3F1LUb396vvLvM0INM2c2hGYwGfE4lRGV/KVID7JIJ9Opr2qFiDvIEtAuR4zbWRxYPZ2PgsTiFDHpS7dMXB62DLyAO5XTy/CD/KUDkx5+mPzsiWMgVDHaR9sWKX2yIG+ay0kQMTBBx1xvEbjeqv40GoAslOm3ugFA7AKKhyo4FVi18jDrU5A898LGzr/9g3RkDTyJ7eh8946VPTdMuXH+O0f4vUsfXLPu/lfufOwbz75xaN6ivukXbb7sMvWewHkbd5biEUBTI5P9mBdK6G5MpLxEWRkTvlPEambDPjS8S3AAlfk8vuIKScqJ3byO3SopYTatOtWSE9a03xi+J55bdeuVh49v/8UXrvu3OftbP7/wmsPX792aPW/TwSvXd++fvHXRqzv5vUvuXrK9P89y/Ivbn9647JIr2yMHtn5u2wOXrelZ3dS6e3434LDlvJ/von0wwy1Vme0P9HQzPJOq90ToUe9BsYurggACViBzrQ52+ZjKz+IgJPrmPCHsxh4qoe597LGf4ug38eFnlC/hzTnf/vs3lPdw0V3cl2YPPIeXq2vHdedtfB7lCw/sFTg6W+kmhBPoIkUlIC9wVB7SzQV9gV8kL0CEK1g/exPXCWgrHuSxFReXeJkQxxCmAgfrBlGNGfSAWl4r9+e86J+DGydseXTVrl/eduj17oPNNyzs3jl596b63tqv8JceV76Q417//f0H39xxyaJdkbb2PYtu2O3KJI/D2n49nYs1VO5lUd2NxT4g2EqH0o15rggLPAyyGrkZZiRbXAtms4BgcTFIhWBJdnFhPvCht7hETvAhCECYlXXM+kf5siFoiw1yPgly7kfX73h9/5nf7//46/ft7rl4w9Kb5go7n6/edumarhvruPpNPdzn17x05NYPduG1OPxbfPGz829p3vHeXQ9EyfFbjx5cOOvoc0sZzb98Xk/XokvV+xEsdmEnSL4hzmcOqp9BlCEn9mPPl7lFiv5V/H70MH/pl861tvObmRzdQunRSumRQ3d7IbhvVFFgIUyOJvqPEmI0UFFRCmoGSrC1ui+PXZmiT3lmo1X77UR0/6HeGIQoVdIV22+8ffv7d931b1cc3rN57c4XNm/74Y7ozpZLly/qvHzN2ivwz2bt3/XU/l0XbW/hnrq1beJ3r778iQ19j132uUebW2+5fPvXFnQ/cMXc+Y2FDZvmLN28aVX0idWTypc9u2nnhHWT6NhuO6/jCynvO1ER+Fxm0nE1sBstMtz5iYdFFDCLiyjgeGBElwshV5HLk5cDF4IqREm7EER4wV+Bw2L8RpiNdpQwQzFdGX55euOXlIeUP9XiDOzL2vn05Y+v3fn2/ok7w7hqfe+Waz63nt976JOv/l158nT7g9P//N2bLvvBzgOvXRFtamu/49T8O/fvOfA/Y20guPD8R9wRcoTdS4V4+PHwkyrb5KA5vuISpp36km/XUQozFU27T8odmXF4+YojM2ceWbHiphlPtE2aNJmqWpEP7lqw4K4VK+5aMP+ulRsXL1+76v9W9yXgURXZwreq7tLdWTudjSQk6STdnZVsJB2y0QkQSEhCQoAkgIawRVQUBBEdQRRxEBUBcUNU1FFAdERAYUZEcd9wHJ3nvDdPn8oMOsw46lNEoLtv/nPq3u50dxJk3j/v+78f7fRS9946derUOadOnWVBD/BdshqQV0xvgjWQ7EoUMau4FlXDrRHQo0b7VgxAsZWy4qf3TSNZd5K35yx/XMsvXAD33wgwj0DfdjNArHCRE4PKrDBY7NgcZgune13aYCIdP/PGkbDLq355PemI9X7wxN1VzuKiqY6rq+/vnvELF1l10ayqDdfOndeQk12YXdg5vqF8To0GQyrg7U6AwY46ZSbImwyQN6i7RAOPjoIVLA0lcogPqfDXLtgyrFlZeVzaxIcIm/gAWVM22i9p/rKxfnJ3e/PGuTMfqby0c3n9uJq6uZbGyy8tu7h0Vv19XXRjb3tFfWTk+AnVs0qcVd2NeY4cx8Lxk61ZPeXFA7mZt9C7QcYA7mTuVw0rTGziWb40P3wtWwxizozyRRMvGCSKwoWVOkvjStmWhbvV+4m49T92W+5euGTJksXkkFPdunOnNj+Am7Uwv8nCam1nERlPqIwhhxiEyJqT/T8w7Qd9A5IykP8Cw8XkIIwluzLROx6oc83AZUCswVd1u0wZZnMMKO6KMjIvCxaNH5eaAAICiMOAxTi29vENB5f0Tb2k1lUxOtmVvIr8GK2+6ppwyY2Xr1w8c1zpqPyC6Aiy+OYrU66YD9Nn1ec7GeYNVnoy4f7VoN2CvAkI4kGfayItQk9wEJE0mbampKTYU2x2uz0rA2eaaDubQCnpj1jljJkDm8lMqfU5U6dLuXPH1i2ua1k/Y9HmxraHlqyepf7Ykh1dO7Zi7ELyTWTktG6bo2BWfcNlldPumjNnW3e5+pk1o6q+PP9inIeq/m/ZCr7OQNYIPM4EgycHx5hYcL0ZUdLAXneF+tJOkq/eSKuoxfvJBPLGetw8x8P4t/E1ZxOK0Xc6OyWSaLJmMMvIzctz8BUXJGiC5Ez8gJgR8cjSx0hWbuic3nrX/AWbmh6qrZm4dnrX2gnqlTXNJTlVFc5Kob+zt3j0xIn1LeTaxOSWmqpZJcXdlVc54sePKWopKGgelZERHZOWlJCemqDaLNEFKVm27DQt9jqt/zu2FeDHHYfTNXoE0WKaaHOCFsnHhyBq0kUckC6JibjtyLXbUWW11VJnCBNEDVZwauePpWTB4jt7RlZ3V4xbXDftzhnz72xc9ue9xDCR3VI1/uqrIhzjytNG5nfXNVziHPeLjmsfvSiOXOZYX5g/TejvJ+n0T2yjtNysyOUA7pe4g6WH6Jd8B4vtq+lxVizNh3YntB/Xdrj0uL+9ANpvlJZAe8WQ7an0Y3Ynbx8zZHsK3L9FugbaK4d5/sdsLe+/ash2q//51b52GtheRX/PVvD7a4a8Px7u38bvr/W1s8D2NPoh28rbxw5+PszvUfjzHehCaP/GartoXRF9+2BucklmwHXR5KTl61UGp0pgpZZMetOEnJwJuTkN2dkNORf9Nv2MtCZnIvySnQ2/T8xRZc913M70bP+fxSjeXyHuYNNSKcXDHxGaRLqGdy/5u58L3adj94WjMtJTkrQsZEMAYEFyQtmPa8GZIPuS/jrx9Ar2GQ05OQ25ueOzs8fnLq2cWlfktC2b3bhxzD2/Vr+/8cX55S2uyvqCjwMAzm3I8b4yY9WUwqziupxJUyeMv+q9rs3TpyyZVJhX01VVhXh9TJjKwsQ1ZlkYKSwWDIDVvYs5Uvv7YU80X+wRXdAWIezVbSp7NZuKcGt/jWiXJ/J4aYrnKBJxEnbMc7iLTXhV/jz37Ehtj9HZnyd2y10h1+307H2Wtf+b/KeOs5na/D0mrAM49nNdilde5VlqFvGy6pgtBO1IlLUDH+XKiBDCQKNDvpPHiqaWlEwt0v92FMPfwg78LBZ1wPei4o5i+N97KV6if+Fj/kp9k/XJt8KYw4Sv9THrdljSCG1v87bw0DbhuPontkVeAW0XD7ovFdre521zBrXN6hfY9XIbtNUOahsNbdN5m2tQfy/QhexHlgpt0UIbzhvZ26bPGxkBbffytitD24QaulBchm3MO6hNgLa9vE0d1PYCeYP9SFfz/oJoAdo2CntEq3g3tC0WZmo0NNN330DbqtA22KHsYVOwTYzQ2shQbZHBbSC2dvSX0m+AIMxAU+Ei0FQW9yDh6SucCbB+aGtGXU3flF6ns3dKX01dxl833TBr8uy7D1y17MDW2U2zV23mseXk5f5SFhn4HIH7rvCU1dz2S+cEP4c8vXkV3L/1wLKrDtw9e/KsGzbNBaR5HqDxbAF931dTinHLCE/1IPTwMCCtYLCCBYPLrBK8OjzfsBh2CP/SeD1vFPvpBDznMv05YbgKsKo9PopXt9fSWmsP07Uyoj8OX+5Zng1shWgY+MufrD2beGrIC+wdViFkYvxjpnZSLQqorWCODUHq1hVnNC6g7JOEdhsaQzJ4P9qqcmi6C54GlllLyp3amkvgOouTvVO7/dqijrF5JXW2bGdW7iSn5xo2t2R8QWFr5egZY/MKa7PGzMqlH6y52zrKlpczYsTI1EMjkpJTrIX23OzpUxCPLeoZulpeI+QKozAbZRiHUjZQSYBdPSqmoIeIbNEQx+mjCvLz0HyDrgGJ8XEWK26qLHFWDJlmkRR28HFYoLzUGsdZKtZX5+HeTkstLcX6SCfUEZPasggpXtAxY0GhrX0i+UodsWlPe+kNy666oRR6adu9ie4/dkxe8+SI2jHqgz0rQc12XTNXfbhybNLumk1ryJSm7rwDeV1NpO3GTdVnVsJ4vMv6Y+kN8nw+m3ZuPdcLSQ9ELUpED1vUZzSBn3qYrRaA6UvPHWyZdw7dcey9975W2vafi5UfPrNXYJ6b+2PZJ/BcrTrTHNdFgkkwhpuMfTHRoDVjzSjsxCAoBmVeJAkPT2qxmKkghPXERkWwsDC02Ovi0GHXivTAo3zFmHi6LV+2LXOckobl7lkpvDIt+OKlt7WXBSVmKSNWixVkVyb75ImKrU/mHM715h7OVYsxvkvdR620NOfFfDX3cJ57JvlLpfc43eEdo4q5j6idO9SXiQtf3j88K3293/sGqVT5y/s82a12kt24tsg17FX2Cy7Xc10Ofo7THVgZHKU8TwoeLNqDdbRMGwDsnb5i/PgVjY38r2xznxQTyDX4w9XjtL8PH+K6hvfj/hM0h1wSnSmYPS48JRTM/eiNDG1n3+o/QW7T2tx46gbv6lXaNWewZhmQ6hm1/wQbxe7k6zgBa9K6sgNzzklazjlR6kXjVLrUCkItk2ebU1L9JcXFEIGWFfK9ll3u2Yqvs9WlXeXl3aWju8rLukvZzUHf7jz4h4NLu0aP7ior6x49urusLOCzNp59MNYbxH0wjjR1CY5DvtbNy/gIzDsG2t4DHSeN+5NMdI0fmcLjyLEuIhHENTxbASxBmtZilA0MD3uQskDTwRIjglA0tqi2olwrMAIPSc1LMcE+w2f4jaQjYRFq2o1vQ15uDVWJ0kMrO+x+aX55a90YUHT8GtAdY+55mkR4PkSdLTcXNZ9cNjVAV5LWdG+ZhlpPTvWMyqoJnddPKQKFKHvS1PETrjrm3poDml0D/39CTuBnxIHnftLCTvO5xKx1PZP3xsFGFTZTIu6gcHePWVd9VRL8SSHxFEwQ9Gx/eBGe/+HEB1zT7YoWRVxtegkFBXYYOPuDSTfOeo242H2X950A+iX/wJ9ggtXtgSS86SDQ7wswb+NEC8zpyP4KTpsjPYk6/ZZCW7LW9tMmTr8j0fEFr9FoXJDPlAnj2O3iUq6LZfKMXRORH2v5+iTUyvQNuIkYFKOhGzaYilFW+njWvl6eta99fH115egSJOtY1NnCgY8IP0PS0gWS/pky1Oo6CjXdjqUHfqP9UsW5t/B19otArQ+uCvz2Lap9oPMVFcPfgM+FsF5s/CdNJSwK+MzXtlcQXmWnxUTOjxA3mEuTYu01zKApKBKgAbEjSgt8VokUPOCFBR5rz8AFHooFnN6hfvMKgRos3SBe7t7qXaF9w1F0FGq/sa0IHaq48DfvoPpBgEZ7+0HOz55Qb9PpIRXpAOY6FekC21QB+Fm/NB/aRJ3XiTodSGdeA1q5XZrv52NOtMz61RohqSXcGKaYJEkSew0yFcV0sTU7OzHRYMC0bEWjEh2J9vRUQ4Ih3oHcLQKtH6UsE1/iz6zy0O9nPjuVdEQsgj+e2oBVLq4I/HJNwBdpPmgft3queXO4xR280InH1F/ATksHYVarXBXojNVkUChthD8ylpGShT6t/EundvDNdMUDrkdhiS+jMhJEJdqXrJolBfNFkATCTnueW83edr+jvriHxHjtbOINnkqxlDTtVE9yBu39fDp5F95pdofKz6tn6rAkC5Ndk5JGUBOmHxEb4Y/JCLCYhD4DGpq5mAe2AnyXl8UUQZsQmTiF22CSUZDrkGnn1jps+GIOiw4fviwJjJ0+94fV0pNnT66St55Rf7fnIXe9lL/63Aw5YfXZyxT24c4deopT9bHpxADvHx0kczrUHzQ5MQnoZOO/XE7Q88oJ+jMUs2o4MSEHCAbWGkgy/0MpwTwgQxmeS1ULzcJsrMZVSYhYNppiWjDU/xUiKGtw3Yi9JiwWmYYLhymK3Is5V9Pl1paWmhpBaJndMmt6R01zzeQJ4+BZVVl5SXkpEUry+STmsPgpiU8oL/05YUojXppf1jq2ctyojyvb6osRSx1v9Y2YUj8E3ta/XrTL7flTIPaaQmVs65UTC3Kqu6urJsz4RWuRrbgud9LUKx8pmzwkSue27z+v7BU9rYDXLZyuNCk0zdUOlMU4ZUmyJMBWQa/UimFABknu45Rm5JSGwkjpFRQlXQGuxNNmAk8KUHiBzMJ+Vh0h+oqRQzCn3jocfdFcNsf951XiNvfC0xeqg6hRsPzHBI+/v9/9kXBALBA3AW+OcN+EHltCxPvw+0+/EQ6we6XD0Q74vY3kY/tPlwiCmQkRnK/z3TnJ99nG3I/0f8f2iN+DfIoTbK4MzGc04HwVpmVwosDJeC2XRIJbpzISR8qIjZUyW4KEh1oOYnPWssWeu+jT5z5M/jiJ/GetmkJcT6t/c+8lDjVunBhxwnv8qPfTP5Mdq4lXFfe+dZN681ryqHrZKnL1zW/ieE7257H9cheH+z6hCOCN6UcXNL67L0Jwmcem/idoxw8KdtjOFQutrskZVmpo4kekkeFU4ltg2Avi7Ca1REVQzFkcZqSKktKCKyyZtBYX5efl5mQ7tP2MbyOTEI0aSAxG+VGHVd/LZJaV8pe2j7GWx2BEC42T4FdixZzoVvL+tGfuuf6Zv4xRjfrG5s5fVW7dre9oyKaKE/uv3/rMDPdB2NOQG8lvzVHqGqKqn53btHIzsf/at8HZQXY/4tvc7Cd5d6/ceE799MgnuMu5bOniOXzc37At8gahAlZ+g7Da9QsjibFEoYW9GXQNISxKWAQzFGOwxCyKj4tmBgWUSdHA8GgeJNEC9FRNaok1U6PR1AOIMplSWnCPkSy21tTUNNQ08My6Y6urKsdUOEuKiwpxx4xYsvurtKYk484vOgGmn2TICRb/kZTC+DFfHM8SbxkGd0xz2kPM8b11udPK2Jal1xps7NrlK69mNrLysg+PsxRv3hB4pMtGsj///uwPuDGcGHXrhpvWx3pXVEgnxrWpm0ckXrksNvaKJYkj1c1yeEPV42u3JYwg0lCYJTFJidtucs9AtI4be8BZrXZyHd4G++Xr/fvlBa65sURDKW6YQzA5T8NknMXMBqMyK8tXwPi8m+Z4TdpqO/mh0WVGTFnhnV2v7iOt3s+8x4airw88uUhYv6mgI+X5+8/FPkvzhxo4rXRfr++YkW9eDYO+EvQ2X/3my1yXCJEw5pjIqL5oRTMRWNBEEBNPLCzG0hdOTCYYs9nAgHn0RIQBFfmNBFi8OSUlsGxzSlqKVtQ3MSQ1dwKM2xJoKwgedCkB4gGWYsH3ywNsBYFD3kweKCbO4nO/q/COoU/hR3ZrgKUgcNTqx2Sm+sStOGyvEz/qY6ffBoy9zzU/cMghYxQiI009sVHhDMcPyLCwnhggh3/1uOEnguNmVsuw46ZrV5xY6SEwbNZnV0/Zhx02qfSsYmtVGx/3WvUUCddo/AQ7w3UQl9AmHNYOVEGpYJhPd43ZSBmq6LEoKwkJ74mLjmRoGIoxUUrDeoCRol0onsTGSj0WhUpSstSa7Jow1P2aRQmeEt0bR6Kj00KegTaNZP4kS69gsaRbWrtd+XV1glDXVjelcSI6yKNyU+Esx3wEOifSEGnJS0FUDiuR8fx+eCzXUs5+BuW//rdBOk7VL2+yqTuGnod3s3e/O9ddjJxo84WoN6PvXD3MPK28f4JnDkzRbaF6jftZQOtrATT6nmZVyI2MCGPGWHOUQRSIUbgkJlphxCKjgwRQrrZG9UWZPHnvCLijEMk4UjB2wvLWbotEnjb8ba5yvCMWF0EU9CBECpwpCDGChQIf8K2UQTd2d7vs6ekoLIIrt4csBLQWskwlaIqcAVOEefxsSqkTd/pXPpG+dU/B4UJv4eHCTY9nbN1d/eJYteZw7ebt7F7PIq9k9WaQd/EjdZ99WH2QzMPXw2cfIW+pFfhKeCj27NkTD6Pd2KZuEZsBnyMFqzDD1QGEKJkjcfySZiIUyDxNX4iJDmcBCoN2KJiaKgip1lSQgfCAodi5BUYVhorgUFTHbaO4uP/dJc0/+1b3oHUN6937d1jVQCBhv6G/DqUSNIPSRp11C/Snq9XNbB/oP4VCqdDpmlZIhEjS7LBTpSkqnIoR6AEhkj6YOPh/npEoSlJLdBisV7nHZABlKKVF8zrAlRU4Sb6xFJlRNjkSbMOOJZNZ7dQ8OolwXUiRk2ALi8bdcYyczhxyeE+6DIXPv3Pt53uu3/L0DFFc+scdP2bC+lE3w3Z56AGrYQfIPhL3R9JFku9Yecc59b9efkvdq564lX7O8dDf75kIuuJJ0BUzhRj3d6DbykLEhiLQFImuKeKe/cr+PDFK7hJMgrzfZMB4KwXUVoeROsjSWeysl1xBn/Zc5Z2zj02VpRe9tx9VMx4iO6j93JY2+VPoIwz6+FHv4wDXr2O2o379Evy+Wfud28/gHfXraNBX0VbG+8YCbfk8zzH6MOmxXEJSC9WUUCzsx+15JNNIMjcRK33gtPcd79s/SvPPbRc3uZcEP8PqSpW4fwYm8SM8OEBzEsJMyWaRe2dYMTaM5XsXqJ955/9InbQcnyXNdy8Ree5dTe6v4Xwlj+/EF7rmwSqONGEdXQu7Zailv0iIIZaY7mCtIAY5d4ylPT8fbXj5hfnAo7Pt6alDrXj5/KIv1JYnwc+h1q7hVYGnCtG0V1SERrtC94+oErxR1FFcOrWwsKOkuKNoWBk5KuCMdxwuLnXkVJ+tr6MEzxd30BH0G3miWZGX+PwtSKC/xcs0kUXKDdC+FNpP6O0n9D0V6f+aWsTX6O9hA5roihvkUMMd2NAGJL7mzhb/nVqO4O//uNB7PDnsj9o92A97ld+T5kqh2skiJf67uB8oMzNU2uOsZexVTw79/ZEj3I7b/7Xwqviabqvk5xBYLdxVIeG5Gj8/CSNGzYTLbZeyEmiz1HYIsXbNhDukAVeCicbXcL+Tx7m5srCQGy3Vb3buFIt37vR8MfBrR6HvV27GnMr/7yhaf+jQITU2wJCZrZ9jwpj6T4iv6TbJMN0KO87l0sakwJiAJxqIHKZwYwD3KExqCQed3tQrmEzpptbYWK1wcQARc+sYWiZ9cOvvoVZK8p+nko6o9z76qFj+6KPud7R374shZkdCAFjvYfhzKkjyU5gPQZymy/1GV0PkIGkbHTWUBp6SMqzmybl50OlcmZW/9OWHy02cFrC++gUSV6k+S+b71pj3EdQ4h1tHj+iCSYP9tX897FY88RgSdiuH/TX1bxWkVd0+DPiEeIsvCH6MePvfhj9kizcU/EGbuwuEHXhAf4F4i3QQ6L3EVYgukGgPQafoYdIWw01hQpjZHIdOa0aQ3z5zNL2PTNzpmbKHxKq/Ji+v9r7CttLMjrNvTyfvH/rDIX9fr/2v2MEBF3WraY13hvrCAAD0KYBI/Zpthf69n2pwAEhqEQ4kV4eFj9sEWxANFu6lN1TGaN+4tQAWPwjBXbPnAvqTy3hXAnVX9xewJ3hfUVipLDKCEpE1RWFq8/8BovGz+hYiu/VJEut9n+5Y7TkuRkLfnilBOHd/AyCcfVvwwaCPNwHjG+LjOAyxFpGJQqNRMTAf35Y0OSBxOSBzD5Nw2AWGJ4QnaFY9HSxTCFjWAJwMAs+43tu7mo30rBhAUgCgIfjyzNRhZUH4CscyRsNPkCiKUWKUji8Jg0wDAPLMRPS0Ki+HgLGaY0jsC4QA6BR1/v7JPytLm907xDnqlt8I+j2vXcA9XGZr9wjzL/gefz9eu3qC/kkWYJvb67q4pDg/BybQmWFNEmWpYgT6ndJwooDaZQQhJjXn5VIRM6ELjWjFppKM8bIE+NMirNYCYm4B7FPEXkEUU9BlAzfPNjs3S+BKE3gWHvQZZw6Ltkd2YKYgnqHG/y0+wZLANKdCnh0IQ1rI5s25G2s+3tZ2e+uOF54tzKn/5WUjNmZtfOWKugmucbNH+b/WX1e3/fk9zdUXaZd3X1ztGj/FQa6d39p63Z7yIu+bdro0JrepqK1xdWvCZ9kO/WOOjTps3gcd/LKcPzrsKdwW5ztn02T3aFdxGBGaZIkva6xKwwTSpxAep4vBjLQHY7gw8bA5BrkLnqAaiZ+1wEfMp+200lHq1/QTz0HvB8BbvFmsiZaeW8t2Lfe8p3zt6VrORkvz1aJDnnYkZvaM99ND6nJeI89/1oYakrYfn+nqRC9pPHNjjSZjtCIK5jCDLHL/jagIifGSOfwDZT2R4cAiKJuSmCgIPkNqYnIiyAsUFxpb5JwxBiYL12Kpn+Qz+ZpU0H8LVqbPl8v7V84R31XfWk2e937KmeW7ZMxqtXGHx8nelkzs7Z8K8JPhI/zLFykMbYB98n8wPNSYiDBWfVNslJ8QitHrOSN9JBNZpsmIuUlgVTKefwKzmIs0IGoqnbQ6bGmpNnMsD9QDIjJnWvS0Tr6yybq3nbnU7IvW1ZJI0jixsXvPypfIXSen3dD8wtVtN7aUXHfl/UfnLXhu+Utvb7lu4hPdV95WtX7NTXsXkrRdS+LVj0ma0jN1Y0NT6fxJtdPqraMuv/fS+Q/BxiVX/Sj55g211bNnOJtcdse8x68Hvbz/OzJGfEmcbpbFazQfRab7KMJAVgojxUniG1p9FJ5/QzvGWMk+8BTRU+z0B2r4S6rpQ3Kz5pt6CVxfoV8vafk64oAlkUvYB95wegru+ZCc+kBdpV7/ITnd3y9cKpSKDWI47EUjQ/xhmdDU/71EpTsEqzBKGCN85Yofkz0iKtxkVGRAdgT3NI8kQqOW5i1BQsbo808e8JtPnrw3erjmdN5sOf/dSee/O+V8dw97Yzf+c1kyMgTBWZYxKqMABpluMctKvC9KkqCzMhZcC4gp04uJ8ZIluq8/85XiKnfSpb/qXr+eTGiw73NdcnL389PfX7v6jSvX/nLCFMf0X13VNHNElXPu7JmNVZ3TXFc1df2ySrqj7Y6u5XtmqK/dv7/i+K5P5+7vmnXxk0uuP9jV0HdpfdfmGff0NOY1tFZUXd3U0uX9ZeUNU8YtrBhbq8Ub++YG4+RKheOumNIMC+b8oIoWYfb/9bzEpABjLS5MyU5xwOVJeX6/cpiWf3pC6K8ufCq8Sy98Emj/d+oE8WVpiVAuNKDHYhQxknH1jBmMNiIqdh69KRB0HSJG4EMmLTELDFbuFWQ5qUUvgygkY04BqVeQpFSp1ekEimxwThhbA48ts2XZbbZMezjwWRETy8HQ081acTLMRxQfUzaa55elcbExun99Zrpgjo7JKoU3jL4TBkrFOc3A09i69hRRGblitup56smxy5vSs+329t8+9OAL7R0vPFC+1D5t8QH1dfWjm4jlI1JFChyXXazOnZhiHlVQVJEQEZ+etqBraf2ki8kdX3ydke11L1hASNidPxHXYzvVl3/8UX3l0cTER5vJF2QfiSfbv1RHqi1rVPVFVjx23dKLl1TmFOWS3WEYgEvmC7NZM63VvEi5ZtXJy51rfp5A4T1oBAj0Cy4dKOtHTQ8+/viDTzxBa5++7cknb8PnXQyq2lRyh67ThBa10XUaEFEXk1NqOLnjVvTPny3cxqbSSL7vHvDP7+P++Z2Cv3ycz9GZ6L5cZDY5rZrwRSNvv+x2vh49FtjDJ0mrhXHAwS9CeVuRSSVxTBZsMRKJIF/UFsnEMEFsjjRSOdxEmQBo6DMQ9DNSCLpP4Bkd6cXz3nSMKp/V3dHe2twwHh5Yb4N/BTB0c5TmuWr2Rx8NfCx3+kpplwQKr1KrfYgfJX/dJSAZEvhFTHrE9dFD93zQd/2X2vuOe36xfO7+ZZfvmnJD6dz6WXMqF46lm3pDfvG8/ebM66qcS6c1LM1kfw343P6w96/Ni6566apXLtE/PHjUqqTef8Wse7vHTV9aUbxg+pjeMW1bgr4+3LF2UuPVDaNyyLu+T3wv4b1JPcP2cweJUeiRkwlTTpqNlIJCCVOILsiijCJfJoRXfSY9kgFLUk2RREEoyEsekRiP3gHiKGkUtzCZ0MIE0h6TfiVYQH2MQ0zwunHoDF6LTtWwbEZRB0PnamuZ96ZjdP+m3W2wYym94aplN5S279mkjiBfTWy3FS6Y0bGgmJCstknqCPWMsv7MSmV99aYb1b1NXXkH8rqb1GfXbKrZnTS2kvTOvcYVGVm/sofMG1M74kltbDdi7isZbUBhuPdQJOovG4ml5QWsLE9lqtWWh6YwEevdK7LER4KJZiQcie7I7L3xPdHluYPu8M75Wmk7sxdf6I6s+ceVeHeR9xVDdKbQo/vH9fh8gc9s8e6iR7Q27kMJ76d3cDsymp3EH5/vbyPfSJofcIQQDXs6E2zOwky4kW6evDcBuH5UgGu/kESA28dzFwes44k/wbTwuMwp3S6jJWB9mzO1F2grmRYz+fH5w4fZffBaclhc7r4dPuyX7jx7VB6LL++Eo94aaZZ7PXXx9XdO7G+jUzlcRiFccLlMmhPIAFQRAU5+CJOFaqVFeTRCD89cNqX7eYtvrQdCck584QWWGgJFEATUewv0/zz0LwkGYYzLZMCSdAG9h/kNd9h3dCiD6j5g0ViUr0vvLQHdBQ+WeX4B+m8U6L/ZQpHgxIx4o0uLcuyZKQkGBTYcEZTFRyEbpc3IvtZp6jAWLunWlWFK2m1ZyWgthLHGA0chFiPJcpjjRa18amYZkHxZKkWBMaARS7qYFewOM8bOR3n+UU/N3g712CNHhf4r3rtl80W3rJ3dt+36Ca/8tvupazZ7/t37QFNX8kQXWXptX8+N9A9H1VgSRWrIthfNaqfrq8eu+/j26OeeJnGjS76sGRtP6MS6wxsu2rU0nJjV70bclhzeOzHf5UxR69YVeE/F/nKJdkaRKqxlx8XZsAkpchXIyAHETvR2MCCFwfYcvRpIjxFFSVDFb27YwtpNsD5KzfwVB9/JJs+nr6sryIbXWebr5A512es0Tr2CbDlA7lIX4+uAynNx/PQh9Lsa+k3G3DR4LCUBjwkzKkwKFzHYG/138LCK9ETwMnhThrCuRfqBCAbED0w+ABMATzBIQWANgCZQ92/9vlAxoIckUoG7b1OC2zrYD6FvlEhYo5bwKG6QmNVOUZOGF8KwTjV/I1yn2v7DSHSYcRw+H6oXXyf/rUa9rsaQbwI8p2iLajyA8hLzXXhMft/zf0rmekzK12di8cXdS7XYopnCBnbaX4M935UTGJEgoveyKEm8TJTunh4YZRTn/++nmeHbf5jve+lOobimn+sfSVdJGwGvJsHwnMkAOivmEcMMYkaaQGiLe/9kttPTPVlscd8nNje799O/qwlPkQfItj1qgieT/OVxNR7m55QwCebnAQFjDg3PhRlEfA4vcukgFu3NfWo6u86zbhr94UffB3b6cdX5klq2k9xM1vo/4rh3wfMm6s+LFUwHY6LwmSz0mfrbT7sGPfpn+gjqThC/D+s/wV7l5xMxQrxgR795QIUQQxgFzUpWWLOEJ7iaw7j/gMJA0BtU4M6gCQkJ9gSbw5xgjjdHc2MqHk34igzySmIEDQWhjg6nM/F0gm3/yjm+kCZ4/5bXNgrrrJkPnSoM+/0PcqhzdPQ6b/XYkUdSmkqw8FrPEXVciJ8C9czo/07sEf/7n/AbNGob6BC/Qc8Mttg7jT7luUuaMpTrIP2Ipn6hzlPnfUkz/2so30GBnTHBup3I122EkIL0a0AbTaATAofJqAM1QgMqDYFiujPjkLDZtfX449rzgxiwRuf8DLDU2wTy7TpdvlW4QPOQBPGfEG9msxaOj2LVSczeJnH54cPu24+y/fQP9IWzR+mrc7wviyv5uj6jgo7RzPtCWT7RZQwPC+oN/SCCZHlskCwXfdpFuCzLRhl1DM2WDZ0bUd+DP2dUDQDlrhfOLBsAwluD6gXL9MEintrX3yb8TYcF9Z0ZLmN0VBA0ZkWSeVHRAIUnMUTh0S7hQMWaTLJsijDBzOrAGYKAs2oAntqnA/iXw/STw6duDYUxGE525sP+EnqD9CSsUZNgxugsH0VzJVGM1BOzDrUt4j3H8f81qvLWv/eeexPb6i2gH3kul+O5x8ofpSfPrmePUOdxdbLa/CWtpDEnvO8c9b7+Z3IIdJJR6pvsFb9OUu0agzpJNigl8UDHQLygkZjI+XWSESnmZM7zQ1URAEkxkp/RR9grwYqI5y42Ms/7O/rUsBqJGDFIEaGZL5NvPerT6rwL00jYmQYY90QYd4FQJlQjZxxTUTYqL9sKmw1NHYumLAqdRs438tyc9LTza2MXhoKJQ6pkP4+J8+lm/yxKdB7bwHnsgD7Ck5+Ifn1E+pfpIz7SDdBHAnhz5YBKEsiR6dMDOkkwHx4h9LnSjArFFW6SYYYiwiSGflfNnDmjsvd/D3gqAh7EwoPgH8y/K4fUrOYMOSDqXQt6y2S/3mJURAH1jQReiRuLa1Nhsqeb7Zzs3i+OdO9vFpuljXvUheqCp8jJ37pXkr89rqbo8/gO2yMlct7Hn8P1HxrH9R9A8pNsj2e6Z8ZRepL+3RsH+J3gPXzUe5A2zlFrySvkFXzGdGGSGO7XfcJ9OhQHxqa9eUAbme6NoD9M86xjfx34TD8kbz+Oluqd5N2XBj5q/M4IOtCuAB3IEoXPZqHP1t/OGIfu4gK6C+qZeCb2n2ULxb/DWt82ea8DyCDZYQdtM52IQrLIMJa7OcNKWVNaKiWNyVqrNHRrt/4AGbYvsEJETLYDckTsxmxFvRhn1J7sShcwDLNbJhJeIg2+pBvFLR6glY8uLLDZ7IqW/82XbjSSBkW5KwGla+O4F2pAuDt8oZPuWpb4TPq8kqzyHHv9vHr4355TnpVZYnOML86t8RW5LWvMH5GdbK+cXVc/ry7b4czSL2flzdeO7Rg/KyvbXpKVVWLPzkq1ZhZEZI73FcKtHJdsMyYlpGYl2Ufn5jj4ddzuYBKAfWkxu9wvLVOwanGe8o/eXZp/2ulv+8+KYwH3y0mYVsYlaXkdJYZqmODyMiqAHlpbQw1NVZVUaEzWkOu7gg1xxfCNtBHzx2IPtnATNaC5QjGQRVjpFU8vu/kHRehFhgZ7j3a9s1w86zOQbrxHYIqBnecOV97QF4uY+kvQPiu0F7ZxCm3v7nYlXrXkskXz5140a8a0KS2TGmz8X2YkqtLBU/zzXxxx/tK9GAwxMPklF/BFHJu47K4GnSyynI7sOiQSlz27wpbltNvr5o8fN9eVkz3QdlGlLcZhyW+o8NHOpMz8WnvW6Ey4IMc1d5zvUWUOuHkCPCpngJz0tpJ5aXTf2GubOUE5cnJH2zOL7Q5bRlZWoTWrKFv/LSkrNTLFmJpcV+0jtpaREbkZ1jSbI7tII8YshwPIstjhsA0Q6KzxSFvu79XX0D+S+10yPDdzoo+Bk2DuSZF+utezel+Hp57Jfd5pV0onO8681L6HdrxMPntU5Xk3zpjg/olwP+bdMKPfJvP5bfJnGGlngPfmKP+zWDv9NNiPM2/gwV6PdBJ5Tjl5ir3Kcnx5LtDqiee8RJAWCegj1u3f72I4HjAIMTDPRVBGi1otXwRPeDFAGp7y0DwX7FbPQ4PyXMQOn+fCfU//JPFBaY0wRbgYz0ISiUlpI7JpTAWVDBeH0TBJbAYoQaKaFgH9y6CUYl0tKcwAY4DdgxBGFvEUEsICYG3G3nBiNKaJ3A4+bSo8tNVmt2XbbVl2Ozq2YfL5aMrTIPIzkQx7Gab41Q5F+GkuxVJ1WDwoeKCOIFpGdDjLs0rZKN0Gzm92smwS2Vdy88rmRWXMkPnLSx+5+3dvtGxurx5TWhg27uBO9Y1flDQ5EsMGUFbZlb8xp2v1tAFURacUtjkXkLItcnJpanNnVk2TsyEjQlrzibr1tHpK/c3OzpvqOhb/9JHQTyJsed5f37Jo/cnjfyIZj6+vuHt+ZaKO52nt46Ze06ojObVh2aPVSxu8DZHhrY+su+++0eMwrtazDeTRb7g8ukPneGMyrJj3FLgapplkrLmaiFpJ+OSQRhrY6JNGmEEFaCo4KyUqcMi0UgJbeU7CgKyVoN2A/LHZRnG1TCt5XcZjHgZzIedQfIZgHSdyk1YPG0RMYnZKVnWoiGk4v4Dy1coGQWM3JieMtAUImuFkE+JxCXmBbWIVQgXW+K6AdZSSDIKbNnMTI08poxAJFl23lnyVEp5Nho/XxmPgQ/LJ0GGpLugL2zRARjZXQXZ1e9HQRJVVlZ9dPW30EFlncnNto6yh9JKday+0+penQH4yg+zs5bLTqMvOpbU1QAUYdI10AtJvOTHodKJTku8KNviKkEYa2Pj/THaCsBQUush3PYhSuBpkZ/zlly6Yd/HszultrXy+4N8otMX+DI0O/8X5T4lMja5prr/Ou8URY6u8qD6YrsfPr7PbnVm2imyHa279YJrfmxZK81yAzqufADc6ynyX6tI3c3SWvTY/c1Jg7fhUY0pkkOJlLczKyrA57MWZw68Rm8NRDJ8cjiztt6Jshy3NmpEbMbLFi/p9AWlhW6TvgZeHYyYFiWfflHkebnT5gq0fTxwn8RTPoih1CpKE9RIkjOlH8wRWNowxmxVuBMHTVZZpRL8hdSm5ku1zf6Du+ulLcp30d/cHYpH0vffBg3SeOo4ud8/ieSDc+/p/L06R7gB90eC+j59TGQ6hr/t8VsuapXSzIr8zZG6+i9mXbKp4JbS/O2T7bLYY2r+D9veGys3nru4vEV+TnuR+jXWuWhPmQSKd4WFUwHSZgtSnENGACRlZn4l7lRq5V2l4ODo0aqE4MQGe2mj14Xu/MqtNs0pjxSSzu5oVHDvm+YgVeD4yrvf8G8vz/NuxY2wrjT+7nqbqLozH5ZXev2l+rhpMFqHS5RQMCjN0moxUQWdKRegL2JAaDLghNbABJ1ftX5gW5Bnn34mWaacU4mvec1T2nntPe6Pye5qz6XEOA43H7jWckHs5TqLQM0vWcIKqCiIEU10hOmSODmQaGj6iwqN0THDDcAAmiIaBPMAAH7m0MWDonhnyyrPrsV91kT5u5u9XEUgnehpSpvDUVNC1yDvm2amI4PfaxFng/SqAbhKA+XeOHZM2+hD+PmI4ANUB869An3mubEUbK/f3YyAYYfpxlDKfdN/5DxcT+vhseke+GZYv0rqiv6f/AQP84sgRb5q8Uo/L8NMa+koMnzg96HTDd8REj/hn7j36e3gqPJv+R9B84elJgStX9M8XH4HmDI1ujDAEg8EQZgjDeYrmGV/1UQTOEMyOD3gEfdDchGEOS4kD3cnLnoLCqnn7iiQ4BRyfCx0/MA903sAsODS0cJzQIxwnoBNzZbjTl5u4LzCVlmbp9HtRI6NJ5of+Pvom37+nk3XAstLyCn/vxzv2gUkZeB/8sE/w5T0TRVxLIhvURwAx+dePb93oZBQwDgVznfNMYJ0DrtmB8CuC4i9joEGvQ+4jmGCYtdM1RHKn/1TMXyMm8HQNAdRpRKMPpDrdr5g/B2bNX1fBb2Sfg2C1hYClVVegL1LFnU0l6cmzj/zmN3KPoMVakDbxNbbVf+6nVa/pC61eMwCZlpBN81vm8UafYACK71mwH/qnn4WBROyPPA7J/yzhH/9TuAY9i8F6Oiu+BjqWRRghpAm1rqowXP6keYSFm3yA+3G/e0lzeJc1h3eNKynaEogxx8MrgXsEa8oJOrk74A+WAbXhfOmewuoiVCceWDSiOMtzLzvb2+tR2KKs4hGL6BeklB73HFTvI5ewRm+qemy7rgMsS82PO3TppYfi8lOXrVN3HyIbvI8eUnev0+lQgz0ZbdhmfoLSnDSCyk1Gw4WESiQLyTrweqhEguYQHDoEJ8YtnO7pISa1HSC7FMD3vk9f6e311tISAP/S7aQU1ghACYCFAKzzrLPsmI5jzHkcH4ZSjTTHIY4TEziOhWFCGxC1PGOlcTBgVifmin7Gj1T3M+IXvb3uNLGdI3X8dq69kbeHwiX/hZzivhlNOh4lYAZm9OTh5elIcxhaj4GGgFM0DnvorcNHEBYjHZhsT5Ove3S2FvvcJTi74vvu+3F2F/oAoNcGzioVzgXAAjIKJhB98s/bvxn7NwbQGbmHlBK39yHskM5VJU5OQcTDaUefE+CTOs1bCNN2Az83GUPQObmHjxaJQ02iK4A4NpAvkTiGQL5OE3yckaCLFbtGxRGeqSkhPpKRplgLJ4mgKEOmLba4UAB433zURuJULf59qGc0ey+/sewrKZ0WeD9SU2EeVOf2gJ3mkeRxlV71siPeL2EWyKl1AevJjDVkoqMo1eObECcC7cR3KvSgxOUhN2bBDKtHj/EhgQDxFXMAOsWdg7eXPsxNaeQ48uovuV5/hJu8vF8GrY9IIRZPlGPNhFciiI6kpAkP4sQhUqUn8LPZIDRoy0E95ceBu0N8GnFAHw1ZCf7xBywD2BcMrINI1C3CJYpYb46MAHiACmEdDK4PYo7n55G8a5tvHgZon3WymZ4n/Oj3k31PAN79NG9AeSrzGGbcvDZJ4hAFSQL8QrErtpI0c1TzDjQEB8ynjleQh4THNUcSopP4BSBUp+nASQzYmvEpDJIhEpchE13jYwzoXtQca4HdE2lKSQYeIjaiGkW4oILB8WRp+M7EHplnS0tKSkpLSotNMcdYfFo1D1ezKgk+dwv9DMCKpyPWMnWd5yA9Tkq3i3/0KL297KznXmR7D6DFlrNDtujsUXLJdvWYNxUEHulcp67wcT9ua8UlqS5XV6wjnYdC5Em1a0y0VnM0Pg7kCXAg2qiQ84iTeE2S6OryAMg4CIcWeMdBB62qtreXvuJ9nwsO9ZjaTkw9Pepp8gyMBLkHLaGf+MAEwOAjQI6gCj5cs+f9vLrGVRmm4VqRROAckREmo0gbfRqBqAXwiMSvE8DexRxuTjFH47K1cLhs/LRJ4bCa3CViHwBCdm1XneTt7d63/4Nj0H2/hsF169RwNRzQd6kfbbBuSgPmv8JVFmOQeIEJmH/oWBMgtFEYJhYNJjyeCxDt7GuI6VYv9QFj2OxO6+0Vv3A/EzzTYrv4dz9kg+ZY078C8FbqKsKlpUUxDo8rWZbD5LB4DVcaNWqUR1u9DxE3oAkFDM6hpGHH+6gPK0T4s1+vgt7CNVqKjAB5z2npPMjQVbbBaADS2QCks0JN4qTDDyaQYMiXAwQTNGb/ujSAjIF5MXP/jmZLDAFKiY7i0Yyintl6wDsFeIHRaEwwJsRo4YFMH3QOCYbnOW1S1FTvR7RAmeUZjZx24KjNPyFJRzRO6z9LE4LWGpc1EYCgJkW+UFnjX1kaJICYXi5g1FT1AGkmxznHAlaoHaskHaFJnGH5Zc3zHCe88kpkmFb1xgSruCkinONkEGuM4yWgdDzoVLDSN3zPE2ymeLOPQgOGDb3qJBm8RmIx2i5S0vqNjsLJ0DsenFYASDBWjk3gaQW09RE8CUFLo2OYGbi2Z9AMEP96MKBs4LukZuhWE/hDI8BH/VaW5Bs7ojtgxIF0H4lVPw38uSYj4JbP7pB5EyKFSF/ehMCh+WdVG1DgjPJx8AlFf8fZtEVK5X4DVlcq9zojMmkaWr75nA0xvu85dIHcP5nt+s69RlwjLtujJvxWTdhDHvDc/Lzm374fnj35wp+tOSsghtBZoYvtQmeFNfhwKXWPukBdsIec/K3H8Tz3Cb5I94fmuVzLiCBlZqDPnCySFAL6djMWJF+HbOgWXy6INH8Zz3TW6izPMqflRcu4aY8PJ1JCHLHY8mlA+F8sDxc0o+U3fnC0oPr3x0gMqSJtf/FmusinAN1K9YdtV/CIwGcWdu+55qW7/jrthgc+b7uppeS6Jfe9Mm/hc8tfklYZZz/z/m1H1UXE+M3pj6YORAT2BUQQbhoUQKidVb7JboTxlgtjXOUOWwaMMTsyPAzzcJ4/AjI/NyszNygC0p4loGsRCSfxFxAGyW7kYZDb1P9UrWoj9SR7P4f9wcvuKy4gIjJVnAkUHP4y2XFCPXHi89bzhEZOHquFRmrnqpp/1Vi0stbA3ObwIGFZMohYhvPnZ3dsba45rSBkdu2OIeb3/MhQRz5DcshoUvK1N7OOfDJ1s/qN+rn61X3LNmnjDMQMkxK9fxgCM9KqsAVPH9lyVO0jUX8r6nxsW+fMLt9o+0LQ9Nhx9bOh0ARryS4con8SHcJIoUqY7poK23SB4MaOVjipKOVkU0XG01aDnp1bEkQZK3bJRsLzoehFelMELU1UVWplWemofFsmPC/F5rBhgH2MfuLhi7X2n2VgqDU9X+O3S2e7WnpL/ZHWVVd017cuHK0HWteet5Vuyih2FBbowdYZo7KLRvFIazV76N8xP5CJtLHTuv0mTLPFajm9MU85aMPoAM4T0/coxO8C7rfFxnE7rKS/e0xsl6dLHI9/3YcHPrOthw7xIGRB/mlmSH8YY+10jUY/TzzqkqFXjANQFLmTxwNoiblkZUpILEA4t/pr/QbCYOMO6extj1NcxN7xlIuX4uefCkJ/4TAd0kOjYTa/Yv9OT0qreE0a7r9ALAmMfFX15ir2D7IpUV3W3+/N9u5W8/uviaZkIT/jECQ3e04+a1aES+G+H7RKJj/sLcuDtjcllf5DSTQrZKqvjfA26Gue9BfWoVQH9OWUFDKvj9xaI9+6/y/LcZs1B66ZoTgDrkEH5Tlk22x1nNz12b5HoA9J+pw9q9wGfcwI7h/Yl1f6K9unlIO8sLiitfLFmvtzNLo/k1JJsUkOat5EzF2q2i/MUspPLvjVrzhxw73H4d4i9D90RckSBVpowlst/FaAI9OGJcBpl/rtJvXrWfLtv1pw8uQCzX46EvrdqoSDJLW5MmADwPi9BAs04LqhemEGaI+wMa0og1aNDYu0ZJL+9e3GDXnrJnTHbTB0bOiS/jpuZWvymvra5JZrx3GcXyIdZq3KjTDmjlCcC/2yzJ5TTNA2PRjncJ9LLmBXyx/AXC0d1LZANbNGIT2aCtfxMWwTb2YJcmEQLcCv7z+jfie+TRYuUV/XxrpNOsQSlfbQ6z74tfqt5CHTl6h/1K47zN6gp6TNIbR1uOmbB9jn5NkCdS5c8zxc803QNU6LQp7/pulBaX6BOiUJx64/Bzbd1RquxR/YVjkKcFnzvI7qyXvzsN4312o4K0dvavOgCeh2mbQ5sPvnAFmQPge3ths2WGZMvDOLz4H4Q93Vk5NrK1cmT766TqsLJn3L7lLCzIoyFrDu0XDpAVz+H70kd6AAAHja1VbPbxtFFH7rOGuHtqEBQaWqqkYcoKBk7URpVTUnN6lDJadpSVSJ49ie2FOvd7Yz67jtFalcOSJxAqk3xIUbRzhz4w/gT0CIGxLim9nn/KIUqTcS2fvtzHtvvvdzTETNSpsiKv8e0neMI7oYfcC4QrXoY8ZzdDl6zrgKmZ8Yz9OF6DfGMb1Zucq4RuuVLxnX6cbcBuMF4F8Zn6Ol6mz9PPBjxhfoi/kXjBfpcpwyvkgL8VeMlyiOvy8xvt6t/8k4oo/q3zCu0Dv1G4zn6FLtd8ZVervG/kbztFibMo4h02JcoyvxH/A6qi7g9dsQAY8jEtApcYUWo5uM52g9us+4CpmvGc8jbr8wjulq9BfjGg0rCeM6pZWfGS9QOmcZn6P3qpcYnwfeYXwhEtXPGC/SenyD8UV6K/6c8RKdj1+UGA4t19k+4rNf7zCuIFZvMJ6jpPYj4yq9X3vOeJ6u1D5lHENmiXGNbsY/0CYZyukpWdI0oCEVJGiNmrRK67QSkP8I2seewrMNOUsSyGv2w9p9rBh6BNwL+i2a4DnEmiWH92vBboFzHN2iBv4HsOIlJtSlBFqGxlgt8MwgMwKfxtFJs3M+JNo0+VOrB8NCrDVX11fWmmtNsT9Uoq2tFJumr8R9ax6pXiFak2JorBPXhkWRu1uNxkAXw0k36ZlxozCZGz1teCWvA7svc2oH332sT0CNjg/YUX09wcon2B5gM4WaxasaTFIJcB3+NEPUNmBsn7boNtBZX1ZOm7+eNJtrG5v7W7c3ZqxWZge9BreH2PaR1yGe4gQneqis0yYT4UT6L16vILMTbBsgHXLs14qw5+2MQ1RGWDN0cKJ6vNYzaKQhbqVLFnVhgmbBjBN2asdkRmgnpCis7KuxtCNhDkLGd8wznabeb5sbKwv4BK3NcKwvxpLUWfOKlrF6J1D0hZZDToGmD5ennIVwtWg7yN3D7igUqjwq8lFoF0OHOExaa8BuRkEtizt9lblcq5GyY5llorW9LO7pkS6kL8yRyc3h/4Tk2YY92ZoJaCiIcGeV7ZSM1etq+eIoQ9EO8n6E7IXCKWgagqWOyizFs8eB8YUqUKhZCJUNBViW2R7dpQ6eu+CiQriOLXdOWfAhPNsuq+DqP+IEs9PnHhf9IT46FHMX335nyqOtbIk2EvUg4AIxEUcRKuPjYNMP3hxrDie6YCsJpTDA/i70OwjQEBlsm6wQe+agmEqrfFekuodEqr6YZH1lRYGu2LvbEbu5ykrhTimwLGZNv5qsJiIYY93QXIdSp7KbKjHFiESvtVsPhCxuCZ8pJMr1rM4LlzidJsYOGrvtDr2eG68y+M8pdzzX6PRQms2ibYjnIQ06pK0PxQmnYSXMIs+oTIqix9iTeHNQlLkTOhN9M4HbKwXowHv1eCJTNxvsip5AbRzy1gtVkGFVhMZS3KiGB796Isay6A11NhAmV+gyY2dV7Yl1Id1DD7hQJw7rPqOZ6MreyKXS+XeenPpoBnquvst9ybpwN2cQwxjUftbJVLQK4fQAi52jm3sKase3+BbspHw/+ZZgGx1/f05VuEW3DGaoFXvBzr9zGLPTLkyf/hkeY7jsZNb3TBRkHDeOl20gS759y7lmT+ycbJTyl4LGzVA2aXlut7xZO8o5FK3MGttWYYDZ8FIWK654/QylDhpdf/nuBdMuhEwFkwehd00IjUUWJPevF5aZE05ZfSBSM1W2J9EQlv4GYok+H3jadZsFfBvHEoeXL4Y4zGlT5rrWgaAsTNOkSRpo2hRc2ZZtNbLkCEJlZmZmZmZmZmZmhlfuO939JZ0cp+/3PLuzu/Pt7u3tzI1jwojz338HE50M8p8WsX9QwggngkiiiEaGkAbSSJpIMxlKWsgwMpyMICPJKDKajCFjyTgynkwgE8kkMpmsRlYnU8gaZE2yFlmbrEPWJeuR9ckGZEOyEdmYbEI2Ja1kM9JGfDbbICaxiJ8ESJCEyOZkC7Il2YpsTbYh25IwiZAoiZE4SZCpZDsyjWxPppMZZAcyk8wis8mOZA6ZS+aR+WQnsoDsTHYhC8muZDeyO9mDtJM9SZIycjE5hBxK7iWnkS/IYeQ4cjQ5l1xJLqGcHEXeIgeTk6mgkhxLFTmCPEzeoxo5j1xFfiW/kN/IReRa8iR5nFxHOkgnOYF0kadJijxBniLPk2fIs+Q58iXpJi+TF8iL5HrSQ34gJ5LXyCvkVdJLvibfkiPJXiRNFpE+kiFZcgHJkcWkn+RJgZRIkSwhS8lXZBlZQZaTvcm+ZB9yB7mQ7E/2IweQA8k35DtyFx1CG2gjbaLNdCj5h/xLW+gwOpyOIP9RQkfSUXQ0pXQMHUvH0fF0Ap1IJ9HJdDW6Op1C1yC/kz/omnQtujZdh65L16Pr0w3ohnQjujHdhG5KW+lmtI38SV6nPqpTg5rUon4aoEEaopvTLeiWdCu6Nd2GfEQ+ptvSMI3QKI3ROE3QqXQ7Oo1uT6fTGXQHOpPcQG6ks+hsuiOdQ+fSeXQ+3YkuoDuTv8jf5BPyKd2FLqS70t3o7nQP2k73pEnaQTtpF03RbtpDe2ma7kUX0Qzto1lyN83RfrqY5sln5HNyGS3QIi3RJXQpXUaX0xV0b7oP3ZfuR94gH9L9ydvkHfIu+YC8Sd6nB9AD6UH0YHoIPZQeRg+nR9Aj6VH0aHoMPZYeR4+nJ9AT6Un0ZHoKPZWeRk+nZ9Az6Vn0bHoOPZeeR8+nF9AL6UX0YnoJvZReRi+nV9Ar6VX0anoNvZZeR6+nN9Ab6U30ZnoLvZXeRm+nd9A76V30bnoPvZfeR++nD9AH6UP0YfoIfZQ+Rh+nT9An6VP0afoMfZY+R5+nL9AX6Uv0ZfoKfZW+Rl+nb9A36Vv0bXI2fYe+S9+j79MP6If0I/ox/YR+Sj+jn9Mv6Jf0K/o1/YZ+S7+j39Mf6I/0J/oz/YX+Sn+j/6O/0z/on/Qv+jf9h/5L/2OEUcYYZ4JJppjGhrAG1siaWDMbylrYMDacjWAj2Sg2mo1hY9k4Np5NYBPZJDaZrcZWZ1PYGmxNthZbm63D1mXrsfXZBmxDthHbmG3CNmWtbDPWxnxMZwYzmcX8LMCCLMQ2Z1uwLdlWbGu2DduWhVmERVmMxVmCTWXbsWlsezadzWA7sJlsFpvNdmRz2Fw2j81nO7EFbGe2C1vIdmW7sd3ZHqyd7cmSrIN1si6WYt2sh/WyNNuLLWIZ1seyLMf62WKWZwVWZCW2hC1ly9hytoLtzfZh+7L92P7sAHYgO4gdzA5hh7LD2OHsCHYkO4odzY5hx7Lj2PHsBHYiO4mdzE5hp7LT2OnsDHYmO4udzc5h57Lz2PnsAnYhu4hdzC5hl7LL2OXsCnYlu4pdza5h17Lr2PXsBnYju4ndzG5ht7Lb2O3sDnYnu4vdze5h97L72P3sAfYge4g9zB5hj7LH2OPsCfYke4o9zZ5hz7Ln2PPsBfYie4m9zF5hr7LX2OvsDfYme4u9zd5h77L32PvsA/Yh+4h9zD5hn7LP2OfsC/Yl+4p9zb5h37Lv2PfsB/Yj+4n9zH5hv7Lf2P/Y7+wP9if7i/3N/mH/sv844ZQzzrngkiuu8SG8gTfyJt7Mh/IWPowP5yP4SD6Kj+Zj+Fg+jo/nE/hEPolP5qvx1fkUvgZfk6/F1+br8HX5enx9vgHfkG/EN+ab8E15K9+Mt3Ef17nBTW5xPw/wIA/xzfkWfEu+Fd+ab8O35WEe4VEe43Ge4FP5dnwa355P5zP4Dnwmn8Vn8x35HD6Xz+Pz+U58Ad+Z78IX8l35bnx3vgdv53vyJO/gnbyLp3g37+G9PM334ot4hvfxLM/xfr6Y53mBF3mJL+FL+TK+nK/ge/N9+L58P74/P4AfyA/iB/ND+KH8MH44P4IfyY/iR/Nj+LH8OH48P4GfyE/iJ/NT+Kn8NH46P4Ofyc/iZ/Nz+Ln8PH4+v4BfyC/iF/NL+KX8Mn45v4Jfya/iV/Nr+LX8On49v4HfyG/iN/Nb+K38Nn47v4Pfye/id/N7+L38Pn4/f4A/yB/iD/NH+KP8Mf44f4I/yZ/iT/Nn+LP8Of48f4G/yF/iL/NX+Kv8Nf46f4O/yd/ib/N3+Lv8Pf4+/4B/yD/iH/NP+Kf8M/45/4J/yb/iX/Nv+Lf8O/49/4H/yH/iP/Nf+K/8N/4//jv/g//J/+J/83/4v/w/QQQVTHAhhBRKaGKIaBCNokk0i6GiRQwTw8UIMVKMEqPFGDFWjBPjxQQxUUwSk8VqYnUxRawh1hRribXFOuQmcrNYV6wn1ie3kdvJI+QWcit5lBxEHiKHk6vJY+Q+cj+5R2wgNhQbiY3FJmJT0So2E23CJ3RhCFNYwi8CIihCYnOxhdhSbCW2FtuIbUVYRERUxERcJMRUsZ2YJrYX08UMsYOYKWaJ2WJHcoyYI+aKeWK+2EksEDuLXcRCsavYTewu9hDtYk+RFB2iU3SJlOgWPaJXpMVeYpHIiD6RFTnRLxaLvCiIoiiJJWKpWCaWixVib3KG2EfsK/YT+4sDxIHiIHGwOEQcKg4jZ5EzyfficHEEuZScJI4UR4mjxTHkHHGsOE4cTy4nx4sTxInkFHKqOEmcLE4Rp4rTxOniDHGmOEucLc4R54rzxPniAnGhuEhcLC4Rl4rLxOXiCnGluEpcLa4R14rrxPXiBnGjuEncLG4Rt4rbxO3iDnGnuEvcLe4R94r7xP3iAfGgeEg8LB4Rj4rHxOPiCfGkeEo8LZ4Rz4rnxPPiBfGieEm8LF4Rr4rXxOviDfGmeEu8Ld4R74r3xPviA/Gh+Eh8LD4Rn4rPxOfiC/Gl+Ep8Lb4R34rvxPfiB/Gj+En8LH4Rv4rfxP/E7+IP8af4S/wt/hH/iv8kkVQyyaWQUiqpySGyQTbKJtksh8oWOUwOlyPkSDlKjpZj5Fg5To6XE+REOUlOlqvJ1eUUuYZcU64l15bryHXlenJ9uYHcUG4kN5abyE1lq9xMtkmf1KUhTWlJvwzIoAzJzeUWcku5ldxabiO3lWEZkVEZk3GZkFPldnKa3F5OlzPkDnKmnCVnyx3lHDlXzpPz5U5ygdxZ7iIXyl3lbnJ3uYdsl3vKpOyQnbJLpmS37JG9Mi33kotkRvbJrMzJfrlY5mVBFmVJLpFL5TK5XK6Qe8t95L5yP7m/PEAeKA+SB8tD5KHyMHm4PEIeKY+SR8tj5LHyOHm8PEGeKE+SJ8tT5KnyNHm6PEOeKc+SZ8tz5LnyPHm+vEBeKC+SF8tL5KXyMnm5vEJeKa+SV8tr5LXyOnm9vEHeSO6UN8mb5S3yVnmbvF3eIe+Ud8m75T3yXnmfvF8+IB+UD8mH5SPyUfmYfFw+IZ+UT8mn5TPyWfmcfF6+IF+UL8mX5SvyVfmafF2+Id+Ub8m35TvyXfmefF9+ID+UH8mP5SfyU/mZ/Fx+Ib+UX8mv5TfyW/md/F7+IH+UP8mf5S/yV/mb/J/8Xf4h/5R/yb/lP/Jf+Z8iiiqmuBJKKqU0NUQ1qEbVpJrVUNWihqnhaoQaqUap0WqMGqvGqfFqgpqoJqnJajW1upqi1lBrqrXU2modta5aT62vNlAbqo3UxmoTtalqVZupNuVTujKUqSzlVwEVVCG1udpCbam2UlurbdS2KqwiKqpiKq4SaqraTk1T26vpaobaQc1Us9RstaOao+aqeWq+2kktUDurXdRCtavaTe2u9lDtak+VVB2qU3WplOpWPapXpdVeapHKqD6VVTnVrxarvCqooiqpJWqpWqaWqxVqb7WP2lftp/ZXB6gD1UHqYHWIOlQdpg5XR6gj1VHqaHWMOlYdp45XJ6gT1UnqZHWKOlWdpk5XZ6gz1VnqbHWOOledp85XF6gL1UXqYnWJulRdpi5XV6gr1VXqanWNulZdp65XN6gb1U3qZnWLulXdpm5Xd6g71V3qbnWPulfdp+5XD6gH1UPqYfWIelQ9ph5XT6gn1VPqafWMelY9p55XL6gX1UvqZfWKelW9pl5Xb6g31VvqbfWOele9p95XH6gP1UfqY/WJ+lR9pj5XX6gv1Vfqa/WN+lZ9p75XP6gf1U/qZ/WL+lX9pv6nfld/qD/VX+pv9Y/6V/2nEY1qTOOa0KSmNE0bojVojVqT1qwN1Vq0YdpwbYQ2UhuljdbGaGO1cdp4bYI2UZukTdZW01bXpmhraGtqa2lra+to62rraetrG2gbahtpG2ubaJtqrdpmWpvm03TN0EzN0vxaQAtqIW1zbQttS20rbWttG21bLaxFtKgW0+JaQpuqbadN07bXpmsztFI23dYWboOMuTKiQxqQFmRIC/clO/O5rJZ0pQp35FNLUirpCC2c68llU4u0pCubop3pfGeprzuTWtbUWSs3RrtyxWRnZypbbOysFlWsM1k22eWKmG0/WdTiAKYAjLvAlCMa4zVDqWpRi2MaKVequGsx5YimqZ5J9XgmNbVmq6dmq7xwn65DGk3beUb31spiu45kXvTaP9S0YjrTlVJpR2jTMP805j/NnX/a3bBpmGnalWza9iy9V9P2HsZetbI7B8MPGWhe1JNPpbKZZLYr3almJDtLxZTKOAJdIpBRNcPdgowjxAx7fSJj/1Az3VFZzyjTgvSrme6orLtx2WR/rlDM5/p7Uzye7eGpbI82C8vLYXmz3OXlHDF0Vm8p25PMl/oyyVJxaM5bU3Ncct5DtrA0K6DmuOS8K+a6fQuOaJrr2Z7CwO3x41H5DTXPHVx01zyv/ICK5Qc0331AJfcBzccKSljBfHcFJUfI+fl0tkeWyj+Hzq9bTclb0+bjQZZw8hd45rjUU97FU15eK6uF7gpXOKJxYe0orqgdxXDc3atkyt2HWYVMstDrlnO1srN+3ReEDEGGId0zoRsBV0bQHkF7JOrKaKihJ59ckurM9XU0OHbLJafNaNMbnL3zaExIC9IPGYAMQoYhI5BRyIQrfQYk7Omwo8OOAft4CQxTh4Q+0Abpg0R7AHYDsBuo9IedAOwHML8A5hfA/AIxyDhkQhZz2VxhaFc6lU8V0gWn1hjO9PcmnWJDMpsrpjKpdLI53l9IZ3JZRz0kXkT7tBxKzbP60uWD51bmezo3zupL9bidRqTt7nUs6bBEJFVMyqnJvr6kO7GQqYEnFtpN3ObJeb12SZSBcnqyvz9pXxV9HV1JtkOJzSyxndMaZsBmp/mc3pycm+7pS/J5yZKG2fDZvWketf8/u5B2MeFQ8zTPjIahY6XemKxuRHPKu/xUZfnpyvJHl+qHuotzxouO8uJ6youTXalMManBllhRXlq5segsrWxMLnKWlnGW5k4yEmXZEluWti8nZ30835tzW6K6LDiLLNqLxAR4v73ATvv/dlXmyjvf7N30YQPm2ZzzPraS97Hlqo8NNBzuGA5nDIczhsMZw+GM4XDGcDhjOJwxHM4YXqJYCBKHNYbDGsNhjeGwxnBYY+DHwY+Dn0A9UaljPgnMJ4H5JDCfBOaTwHwSmE8C80lgPgnMJ4H5JDCfBOaTcOdjtrVB+iB1SAPShLQg/ZAByCBkCDIMGYGMQsYg45Dg+8D3ge8DH5eQiUvI9IHvA98HPq5YE1esiSvWxBVr+sD3ge8D3we+Dr4OPqIMUwdfB18HH5ehicvQ1MHXwdfB18HXwdfB18HXwTfAN8A3wDfAN8DHpWvi0jXhOkwDfAN8A3yEHaYBvgG+Ab4Bvgm+CT4uc9ME3wQfl7tpgm+Cb4Jvgm+Cb4Jvgm+Cb4Jvgm+Bb4FvgW+Bb4FvgY/wxLTAt8C3wLfAt8C3wLfAt8C3wPeD7wcfoYvpB98Pvh98P/h+8P3g+8H3g+8H3w++H3w/+H7w4SxNOEsTztKEszThLE04SxPO0oSzNAPgB8APgh8EPwh+EPwg+EHwQ+CHwA+BHwI/BH4I/BD4IfBD4IfAD4EfAj8Efgj8EPgh8PHZY4bBD4MfBj8Mfhj8MPhh8MPgh8EPgx8GPww+PqvMMPhh8CPgR8DHZ5eJzy4zAj4+v8wI+BHwI+AjhDMRwpkR8BHKmRHwI+BHwI+CHwU/Cn4U/Cj4UfCj4EfBj4IfBT8KfhT8KPhR8KPgwx+a8Icm/KEJf2jCH5rwhyb8oQl/aMIfmvCHJvyhCX9owh+a8Icm/KEJf2jCH5rwhyb8oRkHPw5+HPw4+HHw4+DHwY+DHwc/Dn4c/Dj4cfDj4MP/mvC/JvyvCf9rwv+a8L8m/K8J/2vC/5rwvyb8rwn/a8L/mvC/JvyvCf9rwf9a8L8W/K8F/2vB/1rwvxb8rwX/a8H/WvC/FvyvBf9rwf9a8L8W/K8F/2vB/1rwvxb8rwX/a8H/WvC/FvyvBf9rwf9a8L8W/K8F/2vB/1rwvxb8rwX/a8H/WvC/FvyvBf9rwf9a8L8W/K8F/2vB/1rwvxb8rwX/a8H/WvC/Fvyv5fpfH+IaW4bVAudbSy11xQL3Y3CpIxoWVELOhqWVkjMuHoqrXdwByx3haBPuU7WlD1KHNCBNSAvSDxmADEKGIMOQEcgoZAwyDumuKuED3we+D3wf+D7wfeD7wPOB5wPPB54PPB94OuzrsK/Dvg77OuzrsK9jfTrWp4Ong6eDp4Ong6dXeFgfnlrCAN8A3wDfAN8A3wDfAN8A3wDfAN8A3wDfAN8A3wDfAN8E3wTfBN8E3wTfBN8EzwTPBM8EzwTPBM+CfQv2Ldi3YN+CfQv2LazPwvoscCzYtyp2MX8/7Pth3w/7ftj3w74f9v2w74d9P9bjB8eP9fjB82M9fnD92D8/+AHwA+AHwA+AHwA/AH4A/AD4AfAD4AfAD4AfAD8AfhC8IHhB8ILgBcELghcELwheELwgeEHwguAFwQtWeFhvEOsNgR8CPwR+CPwQ+CHwQ+CHwA+BHwI/BH4I/BD4IfBD4IfAD4MfBj8Mfhj8MPhh8MPgh8EPgx8GPwx+GPww+GHww+CHwY+AHwE/An4E/Aj4EXAj4EbAjYAbATcCbgTcCLgRcCPgRsGNghsFNwpuFNwouFFwo+BGwY2CGwU3Cm4U3Ci4UXBj4MbAjYEbAzcGXgy8GHgx8GLgxcCLgRMDJwZOHJw4OHFw4uDEsb44nmsc3Di4cXDj4MbBjYMbxzrj4MfBj4OfAC8BXgK8BDgJcBLgJMBJgJMAJwFOAhw3StLbXH9oyyBkpLE73VPKp7qShV5X5bowW/qHlrJdqXyhM2c3d2RcrXvR6m3uhWNLExKj3IvFlgAFAHIvFltWxkcgo5AxSEw0kHBlEBz3orGlDmlAgh8EPwh+EPwg+EHwg+AHwQ+CHwQ/GBfxUj7nVsKYRASDIxjsvh26z41CbIm6Gw3Y0oL0Q4Ygw5Dor5sNqUIx3ZcsprpcjQULrj+yJSxZsOT6I1sGIWHZCjfksqlUuqe32Ntc7M2nUC40daeXVMrNhdSSVBYVjHNX6MO2+IKRhmQ+n1uaSXUXNadU6m90ZL48zG3syi3NuqWOXLG3Ad26sq6JEKYawlRDmGoIUw1DuleYLX2Q2MwItsB9NW2JKcaxJXFsSRycODhxcOKwHw832HKJfYCTmabUsnShmMoW00n3HNsHeUiqr7+4vJAqQuEfYsebdiyaLWqpTKqv/GsKN9vdh9+Y2X3CQwqlTnv3khVFFNJ9oDoevL3YxkyuJ92ZLP8aqwHFXL45nS3a80l1FtO5rLR75rINxV47+u22XzF3pAELhr8ptbiUXpLMpLKdaPPrzf35XL9todRhz7ulUin/SBUb7Nm6DW7voNVsG86klqF3peL2Rp8gZAgyDOm+Hbrr1mxpQJqQmKXr1mwZgIQ9PGM9DHvhij3sVxj75bo1W7rP2Ghrk725UiGFmgFpQlqQ/qH51BLsqr1qV+sLNpa3136ImWJ/tdiBVh02dNhwA2gdv4OxZRDSnamB+8PADhnYESNUkVHIGGQcEitxAwRb+iB1SKwJO2lgJw3spIGdNLCTBnbSwE4a2EkDO2lgJ40o+K7D1JGG1pGG1pGG1pGG1pGG1vG5piMNrSMNrSMNrSMNrSMNrSMNrSMNrSMNrSMNrSMNrSMNrSMNrSMNrSMNrSMNrSMNrSMNrSMNrSMNrSMNrSMNrSMNrSMNrSMNrSMNrSMNrSMNrSMNrSMNrSMNrSMNrSMNrSMNrSN9oCN9oCN9oCN9oCN9oCN9oCN9oCN9oCN9oCN9oCN9oCN9oCN9oCN9oCN9oCN9oCN9oCN9oCN9oCN9oCN9oCN9oCN9oCN9oCN9oCN9oCN9oCN9oCN9oCN9oCN9oCN9oCN9oCN9oCN9oCN9oCN9oCN9oFuVfcN7hPSBjvSBjvSBjvSBjvSBjvSBjvSBjvSBbhngG+Ab4BvgG+DjnrQM8A3wDfAN8A3wDfAN8A3wDfAN8E3wTfBN8E3wTfBN8E3wTfBN8E3wES9ZJvgm+Cb4Jvgm+Bb4FvgW+AgMLAQGFgIDC4GBhcDAQmBgITCwLPAt8C3wLfAt8BEIWH7w/eD7wfeD7wffD74ffD/4fvD94PvB94PvB98Pvh98P/iIK60A+AHwA+Aj3rQQb1qINy3EmxbiTQvxpoV400K8aSHetBBvWog3rXK82d+RyXUucuuINy3Em5Ydb3Zlve3gI960ggHpbQUd/tSyvUem29sOehB0+7M2X3TbM8VCb7IrJZ2fWtciVzq9Qlh7CGxEWhYiLQuRloVIywqBDp9lwWdZ8FkWfJYVSjR0pzMZO8jPLXM18FoWvJYFr2XBa1nwWha8lgWvZcFrWfBaFryWFS5/ZpQJeTv2gQqTQAhg2SFAMZ9O9pT63br95erU80VXIry07C9Qp57pRh1TiGIK0ZAq/wuUDPYMftGCX7RiOF8xrDCGFcawwhhWFoPZWKAhnV3itRjDmmLY1Rh2NYYFIW61ELdacRDjIMZBjIOIuNZCXGshnrUQz1qIZ604uHFw47CfgP0E7CdgPwH7CdhPwH4CK3M/JXU/PI4fHscPj+OHJ/AbFYl23Mh+3Mh+3Mh+3Mh+3Mh+3Mh+I9RQ6EvbHxTJzpQdAC+pVnihlFXdqT47xBXlH7LQbx910ZkpdcjeVNJ+8F3pZF8u29XUVyog1Eu1eMqVj9IAnGMAl0cAl0cAxziArQxgKwPYsgC2LIAtC2DLAtiyALYsgC0LYMsCCdhLVOyFISOQUcgYZBzSfWQRBA8RBA8RBA9xOKu466zsaDgK6diJt7nBiS19kDqk4cow2sNoD6M9An0E+khF74xLxN15JZC1tKWhSr6Y7UNtkTB8bSJbymRaok7mvtW+pTKzZ0xvmVlfnVVfnVtfXVhXHZJotZ91Zyo/ZB4KDWmnbd6c6S2d9SOz9dVcfbVQX11RV21c1tpXyhTT/ZnljelW+zOw2J7JLW3cq1bMVItDuitTylQKS1FQ+dZCoc03rGattZgrdDcubbf/15pJ9yQbVqTyudbyD7dUbm6p6pzqEPvz3C0Ul7qaRucz3Sk2dOdKeZTsL1a3XyG9zO3nfLW7Refb3e2YTcNgS5XhmUFXNtfnIJ1CGVkuAFkuuki3VEY6/cpIp5+LdIou0unoIJ2Sw8iW+vIOwymUGeUCGOWiy3BLZYbTr8xw+rkMp+gynI4Oo1wallrWmUn2lXMNrZ3JQmrE4lI5V2JfBxVNc2cuk7OLqfJHdVPS/r7PpwuLWjOdQ+1P3HSuC48P3dzK8EKqL+1VDHUxqA2rQCr1qlW3PsKeWYf9/ZzuqfRodv6JYsV6R7JzkVfR4lEU2vyja9Vib7pzkaMc4k6n1NnSn8ynsuXMi7O8YU7VSbs49ZaOvG2y1uxUa83Dy/VFqWK1wwgoPF1qgMp8qyaxPo9RVzPSa9ZVjaoz7Oqaepf396bwXPDPrp1KUypbTi2i3FctN2CA/bRQwgxqOcfKDHpK5dChL1db2qiqqrY4p1shne3J1HdzVJ5drO1B+SR7N7lcH+lOpr0yO/vlnlCn8raMhSpZ6Ey7/zDaUY+s7mp7RzLvqEZ7drGqnOzdx3bPyXKMuGfYi6uocLqdudWpvC3j61tSi0vJjNMwrr4hkyoU3ClCUX0DysoRKw0f7pzWdvfMOpvgUaxKvdLwmmJ89YVsr72azmrdF7Md76ez2jqVd7UjKi21ZXo1Hv3oyvq8w8dWlXWrH1VV18aPrdwI7bULx1ZPWUld3z6mqu7Jp5J20QVUte6l4CyydhDaa2d1YEvtxS23TBrQUnlfHbKnzfN4PFrPDo/3qOu2wmulthkTPVrPe1tuWmfQpgErGuUsu36nRro67zYNd1W1PRrrUXjUo11F7ZJ1X71KdRWbXNuU9nyqz3M/OF7Icz+U6yPwyvelu7oy9g2VWjwcmkLRjljLihYo7IuvXB3rOfGeYfXns6Yf6d1o14J372sdR3u0VTY2FIceE/DqauPHeNVVAxO8O1tnZvLKLTVjk1ZurJoc6Xn8lRV5VJ4VebTV0WOxT5471naagfoX3tYEB3vhy/pGx4u0dtuvRSN+BdZa7B7alctk7HsY3qtSK7SZQ9PZ7nQ2XVzuuovKOUSU4VyXblnrz5Tsq7OzyZGIBsB1nX9lLCDOWHg573JcL+do3L+dqIy3b6gyqhIiJ6tuO9lXTuIns5UQp7GjupQWT1uhzRhTq3Y4v2VwtFrZVKHNanCm7oR5felspeiuoVwcXx3dXrPjvLg2sN0TKzhXREVXDQ3K2mZHC483HJWqYrxHUffKjx5MOXygYpT73Op0LeU1tbvPptylWq3pRjjVOssD3cRYj8KjHolBXodSUXntTR6grGtcvXwQKk5s5ahipNNcdydOrFPVGRvqNFX2c0SlVtWM8WoG0dbtgqPFu+A8Ho+ifpOdhuqGjq1W63oNcxda3Sp3divbqcYgo6pVT1yCtdeFWJMHKOuMThnYOGCwO62aMxhXq9fZGesx4X0+XsvuIR+3iplMXPUk1hq0aRC+eyV4DxyuhfbK9eB8gTrPwvmYct9k97vKGVQuVl+0gTf36MGUY+p749YeV6+t+YyKfiXfOGZQ7dgB/WF+/AB11f6IlWYyapBZjFzZ4ujBrDmzHdT/DB+4DUProMMGANcY+I4PHD5+VQ2rDT4SnCmDt1a541ahHzOotTUHWlvpcUxYZcvqqxgL02usork6o/Grahg7uMGJtdd/pRM5qHbcwAEwNGGgvnZKVu48erB+k2oWVj6/g6vHrzRk5WUN3IhRg3QfM2jPAZ7H9t6693ot18cPclE7Ic2Ygfe6o11tVZe7O8bdkAFh1/CB0dUgfrKsbnD+OrU1mSk24y8enWiq+oeFbmxV/SNQp9ro/HNft+im8ZwshvcPUt3ER+0PTN3OLsspOn/e6uYXyn/c6ird6TsJCPevYZE9SnWl7bW7E6vLG46s4aupROcv36rpjfI/2PJUEm6uQ3PwncubIR0lnzFt6v8BYl+0QQAAAQAB//8AD3jaHc87ToJhEIXhM//5MqOBbRgw8tMBtZuANQA2uiAovEQaiQZqubQQaSG4AtFSIFp4YiZv8nSTAwNQVF8qw5lqw9DREV1rwqxlXdCu+ArjhBOQU07lGWfynAt5yTd5xbW84VZ+54e8407+5Le850E+phos1VMdWWp4CeZlLyPzc7+Wb7wn9/1WvvN7+cEf5YE/yUN/ll98JI9df33pB/noP/JvnCCL0yjAohgXciUqch45GNW41K70vxJ/neMsr3ja7X1/fI7V///5ce11bbvvre02M+zHvZkZhmFmhm3m1zDD/BoJQyUJIUkqlUpCkiSpJElISMiPWQhJpZIkSSpJkkqSt/Q917nO7vu6r+vcP/LH+/3p+7gf92Pn3Ne5Xuf1fL1e53V+3zsHYYRQON0M2Qg6dCrug9KG3zV+NBp08/gbb0XzRpdPHIP2TbllzEhaOOWuu+6ik5HC6NHff6NYFmFEEGUp16EoFI0cqBqKQdXZmxooDtVEtVBtFI8SUCJK+q/mKkDh7Tp1c6Lx7QZ2dKLl7dv1caKj7Uv7OHFkt3YDnbiwe49iJ57Us7ibE68s7dHdiY/3YTTE0ae0m5N0ugZELUcNQ46Qa8gD15BHvYY8odeQJ+wa8oRfQx7bNeSxX0OeiGvIE/l/zMud5eWjJ6Kdw7Vw//DyCTfixSPGjL0NL71pfPlwvGL02OGj8XoebuZhBQ9383A/Dw/y8DAPj/HwJA9Pj7njtvH43FgW4Qtjx48Ygy9PYCiETLhlzE0kdMKEzKYkkoXNSAwLm5NaLMwiKSxsQdJZmE0yWdiS5LAwhxRMuGPYBNJpwh3jJpDiiYwnKZ1y4/ixpIxpS7jGCN1s1g0loxRUB6WiuigN1UPpqD5qgBqiDNQINUZNUCZqipqh5igLtUDZqCXKQa1QLmqN2qC2KA/lsxagHSpE7VEH1BF1Qp1REeqCuqJuqBh1RyWoB+qJeqFS1Bv1QX1RP9QflaEBaCC6Hg1CN6DBaAgaisrRMDQcjUA3opuYdCPRLWgUuhWNRrehMWgsGoduR+PRBDQR3YEmoTvRZHQXmoLuRlPRPehedB/XKoKHISykrG6rrN5pz7pHxfCwOg/1UnfwMIqH1XgYzcNIHl7HQ4WHdm63MFa/tKdpPJzFNMLofqYbRg8wLQl6EE1nWmP0ENOfoIfRI8weBM1AjzL7EDQTPcbshdFs4XFaSHlo42GcXiyYBZi9xewdZuiYaYOB/anod3wWX8BXiELsJIbEk1SSQbJJASkiPUkZGUpGknFkMplGZpC5ZCFZSlaS9WQL2U+OkXMUUQd10sY0j/akw+hEOoMupmtpJT1Ez9ArSqKSpRQpg5TRylRlhjJfWaKsVSqVg8oJ5XwICokKcYY0DmkT0jWkLOSmkIkhD4fMD1kesjFkT8jhkFMhFyAUakE6FMEgGAPTYA4sgTWwDfbDcTgLl9VQNVZNVZupBWqJOkgdpU5WH1bnq0vVtWqFekA9qp5VL4eGhsaGpodmhxaFloXeFDox9IHQmaHnQy+HKWGOsIFhI8MmhU0Pmxf2fNjasM1hlWH7wg6GHQ07GXYm7ELYlXAl3BHuDE8PzwzPCS8ILwrvGV4WPjR8ZPi48Mnh08JnhM8NXxi+JHxF+NrwzeGV4fvCD4YfCT8Rfjr8fPglG7KF2qJscTanLd2WacuxFdiKbD1tZbahtpG2cbbJtmm2Gba5toW2JbYVtrW2zbZK2z7bQdsR2wnbadt52yU7sofao+xxdqc93Z5pz7EX2IvsPe1l9qH2kfZx9sn2afYZ9rn2hfYl9hX2tfbN9kr7PvtB+xH7Cftp+3n7pQgUERoRFREX4YxIj8iMyIkoiCiK6BlRFjFUdwXbVN1DIgv15+hSEc8Q8R49digiFnSOTsz7mcc6ShzjxLdZjrW6Lzv2C5pjIj6hx9XsIl4g4kUifl7Ea0W8U8QCu9oFHaHapZhEPSUmV0eKyRPPgzhFSMxNMXNjtsScqA78GarHVy+pPq36murHYsP1lNi02LLYmbGbY0/ViNFTamTWGFhjeo01NQ7VuKynxEXG5cQNi5sVtz7uCE9R4s7WjKyZWbNEf6o5uOa0mktrVuqYNQ/WvFwrtVbXWrodoNbDtdbWOlo7tHbj2n30lNoja8+rva32mfio+Gw9Jb5r/Oj4OfHr4w/H67qpCSghJaFDwqiEOQnrEw6KtKMJVxITEzskjkyclbhST0vckHgqKS6pNGla0pqkY7oESRedTmdX5zjnAp3Gudp5OBklN0jukzwleQlPC01en3wsBVJyUkakzE3ZmKLnhJSzdWLrFNQZX2dhnQqeElnn4zpXUtNSy1Lnpe5OPVc3rm5x3al1V9c9kQZpGTqntMy0gWnT0zamna9Xq15BvZt0zHqT6i2pt7/elfTs9EHpD+hp6fPTK9JP14+t36H+qPpzdVnrL61/oP7FBvENCvXnBmUNHmiwusHHDS7xZ9owsmFWw4Hi+8SGixpWiu9HM1BGmp4noyBjVMb8jC0ZJ8TzxUbORl0bjWuk6x/SaHWjw41R47TGxfpz42GNZzXe2PhYE6I/N4lrUthkdJN5TTaL5w+aXMpMySzKHKM/Z07PXJN5JPNq01T9uWlu0xFN5zTd0PSoXv5NzzdzNMtqVqo/NRvWbHqz5c12i6dDzS42j2uul7PSvFPzkc1nNl8hnjY3P9r8SlYt/SmrQVZx1pisWXpJZC3Oqsg60YK0SG2hW0ZpUdJiXIt5Ldbq71tUtjiZrWSnZRdl6xYPyR6fPT97Y/aR7Iv6c0ulZVrLopajWs4Qzwtabm55tOWVHB0vJCc9p2vO6Jw5Oat1/jlbco7lXG0Vr5dVq4xWJa3GtVrUqqLVyVykY+aG52bkluROzl2Uq1tKyd2de6p1aGu9HCJaZ7cuaz2l9bLWh9ugNiltOrQZ12Zhm8o2Z9vqdU1tG9q2QdvitpParmi7v+1pnWfbX/Ni8rLzhubNyxOa5W3LO56P8lPyS/JH6yj5k/MX5W/L160N+WcK7AWNC/oUTClYqL8vWFawp+B0O72OK+1i2+W0G9husnia0W5luwPtzugStLtcGF+YVziycGbhxsJDOkXh8faofUr7Av2pfc/249vPb79ePO1s/20H6KCXu9Ihq0O/DpM7LBBPyzvs63CmY6j+1DGuY27HQR2niKeZHVd3/KDjWfF0pVNip4JOg/WnTmM6ze20vtNB8XSiM+mc2lmUcefSzhM7L+i8QTzt7nyqKLRIt65SlF1UVjSlSOhctKJof9HZLrpllS61urTpMrjLVPE0q8uaLge7nBNPV7s6uxZ2Hao/dR3XdV7XDV0/1m3Z9WQ3pVtat6Juo7rpXqJ0m99tY7cj3XQfUoqhOL24a/FI8TS5eFHxtmJRDsVnutu7N+7es/v47npdVrov7l7R/UT3q/r7ksiSzJLSkoklC0p0fUJKKktO9Qjtkd6jSKfvUdZjQY9DPX7Vn3qSngU97+25WDyt7nm+V4Ne4/RRSy8dIbPXil4f97pQ6iydXLqt9Gzv+N7Fvaf2Xt37WB97nzZ9RvSZ1WdDn2N9lb4Zffv0ndp3Wd8DfS/0i+/Xod/ofrP6re53oN/Z/o7+Of0H95/ef2X/g/0vlsWXFZeNKVtQVlF2rOzygLgBei0lZRcH6HWEDMgaIOw94NTAj6+vGKT7RfINC2/YecO3g6MG9xs8Z3DF4HNDEoeUDLl3yJohh4dcHZo2tGTopKHPD90z9Fx5bHl2eb/ySeWLy3eWnx4WOSxr2MBhk4ctGCZKeNjcWw7fHj/xpP40edF9Jx5Jmym8Zs6yp848l7lElMSyNasuvJG7UfdZumXolhlb9FYEtmzZcnJrzNa8rUO3Pqz3flvniVj0q1tFv7p1ma7V1jVbD4iUb0V8Uby5vC2Of8PbMkScq+Nv67lt/Lb520S92LZz27fbYXuqnnt7lohHiXiqiKfrvfJ2Icf2DSIW/fl2IcX2gyI+LuKTIj4v4ssivqrHFaEidog4XsRpIs4Uca6I+4h4sIhHini0iMeJeKKIhR0r5opYjEcqVot4i4j3ifiMiC+I+JIe7yAiFuOcHbEidoq4mYiLRDxMxEKuHQ+IeL6IF4p4sYiXi3iliCtFvFvEwm6VcSJuIOLGIi4QcQcR9xPxQBGPEPEkEU8RsbBLpbBL5VIRC3kqxbitUtipUshT+YGIj4hY2K3yih6/DSKOEnEtEWeIOFvEQu63u4pYlO/bwv92HhWx8O6d50QsymWXwNklcHYJnF3Cn3eJctnVRsSdRNxTxMKPdgk/2nWviEV57RL22SXKbZcot13CPruEfXYJ++zajQgeidaxeedU2KlmotGQDCnsexp0VRvDaLhJzVFbwW3QDWIgHhxs7lMNakN1SMCdcGdchLtALCSqzdUstYXaRM1WW7K5TyO1DX4IP4ofw7Pxk3ghXoyfw8+zFM/Po4bPY6bPbNPnScNnofgsNn3M/M08vdO7JajCq8J4Sm3LMXkONQ82ws0wks37xsJbUA8aQgvIhpaQA60gF1pDG2gLeZAPZbCPffaqaWwmWE9NV+vCu6rmN+tQKmqG2vFVg+6oBypFfdFwNuu/jc33b2ez+3vY/Pop9Cbah97FIRhwPE7ATpyMU3Fd3Bq3wSW4B+6FS3Fv3Bf3wzfhKXgqvhffh6fh+/ED+EFNbhpHa9JatDaNpwk0kSbRNFqPptP6tAFtSLNoC5pNW9Ic2orm0ta0A+1IO9HOtIh2oV1pN1pKe9M+tC/tR/vTobSczZyH09H0NjqGjqXj6O10PJ1AZ9LH6Cw6m86hj9O59Am6iD7L5tbP0efpC3QJfZGupKvoavoaXUNfZzPudfQtuoVupdvodrqPvkv30/foAXqYfkaP0M/pd/QU/Z6epj/Qs/RX+hu9QH+nF+kf9E/6F72qRCiRyp2QBPWhARRAOyiE9tABOkIn6Mxm312gP7wDe+F9+BS+gO/gFPwAv6n5CJMDqCEahG5C45lFp6GZaBFajjYwm55AZ3EojsUpuDHOZd5bigfjUXgSs9w8VtLb8CmSTpqRHLHCMIgMIyPJGDKJLCUryGZSQfYhBXrBdHgSXkYh0AfuhFdgOaxAFDYx/M2IwCXYxWje53LtQ6rSUKkNL8A4GAhPw+MoRMlQ4mEJ3A7XI4BZ0Bseg69gIXRHYUq6Egd/wn7YDp/B93AYtiEb3AjHYRRMgF9hPEyGF+ElWAq3MOSHoASmwF0wA0Uo10FfeBbmwHlYBM/Ba7ASVsOrsAZWIVASlWhmt2xmvfoMOwndzWzYEjLYdyeayKyZA43Y92R0B7NrK2jMvqcoDmbhXGjCvtdRqjFbt4ZM9j1ViWFWbwNN2fe6SnVm/7bQjH1PU2JZSeRBc/a9nlKDlUk+ZCEVpkEPuA/mQTEsgwHMLg9CTxQNlXAWfoSpsFWNU2uqtdR4tbaaoCaqSapTTVGT1TooRqkF/4EDcD8chQp4BO6GP+AB+BweZiX8AzwF98JMNUwNV23ICd/Cx/AJHIIvYQccg4twDk4wHzgNv8AFmM184gwcgWdgi2pXI9RINVq9To1SHWo1NUatoVZXY1k5zYd7oBQeZfL9Bu+yUhwMw+EJFi+GftCfxUPgQxjB7H0rLIC18DqsY5Q1wcnCdKjLwiSox6gGQTnMRdVhD3wDJ+Fr+AgOwh0wCa7AX3BVVeBvNURFKlaJCipVVTWU5bwBPmBWeht+ht9hIvyk1of1iKhN1VykKPWVmnAZ3mOtRTkbf9rZKEYbxwAK4ytnkSgERaE67CkPFaAEVMg+TlTMPsl8dTEFDWb5UtEk9klXJigTUH2G8zZqwHiloEjmkRnM1xKVJMWpJLPyrsPKti4rx3pKfUahrY5ra3+R7ENQNRSPKOcRwZ5S0XVKbSVeiVOi0d3aqqTiUKopMUp1JVapodRSavI1RC1/pHRF2cn4cC6sRixhvi6r0f+BywFzGcfq0X5p63uAW88fF4yA/sVCbV2UfWd1gfB10Xi+mopRvGvFFKE52jsmcRf+jJXrfFJo37IhX/CpZaB6nK+EprLW3xPLStOM9Q1uGm01FyNt5Kko2SxHKYrmkjfVJCfbte/0T0afiOystmdAI2gMTSATmkIzaA5ZWk/F1/w5N+a3SSictar1mYUI6opSWPt0PWttBsMQNZP58w2Gnr+p3vdb+3e1LesNXX0h791SuMWjuGe2Z3441NC3TdJ7N2sPxlr+P9ytvdZ+Iwh5n2tX7PGdsLJUqsYcmiWqekYfbzzzxyObmmsexWijF16zJll6XtbjenCgvGxjeGnpo+i5/E0PHt4lvnujamKgamLSMpHlCOdlrGCtTHp5fGPvFMopCCu1FjylGjTgnhPHPUcr+VTdN1GSIRzCw2Sx7u5gcZyFsoqmipIwyZ2u/QOEnnC/hz08rHT5bIxLxyfcvKDSAzXGxbGKyixbFS/KqNJQhpBuiJfQzVfhfH3lcGtFWemnoHTXXghC8yx6VYWU+0oKp8U8TxX1EDO1kD+e0xKBIKE2yR5rkMeD2qKp3DbWMq4KvdkmyatNZbZ5Uq4tL3mrbeZbqCtdvK22mW/xFE/ZPW0z34emMu/37i9m75f7iXeeZq8115P5En+y1hOLraT1ZL4XXwiktg8JoLb/U0qZvk9JSt2q7wJJaVv1XSDVQvexKO5DyGu5RjE+sSYKa3kiA06yq3SQ6P3jzLKKvGZ8T2vL8JO8+KiO/7SHNcz4T5u4B+bfQwLwbzeluRQXSmq6tRSfkbRn1lJ8JuBamiwJ5VrIKd08tXbCTUmRysaqkX56tGcMXrBDhFadF5mppDV1kR/55DW1KvRV/66Fskp/q86L3JR6PZTW1mfNVC5ko87PSuXzXVuH+KitshqfaKAgLMUZEBed0lzrnvXwXnOtW+y31ZH5qacE1vKv4uH06p0ybZM9tPWHJdd2sYffmrV9zquk8VKf8t7GBUbh9kirtkke2vrjJNf2OQ+PNWv7vMVH/Y2mFB5GidD3aMqTtiqHe3xEWdvUGGV55EnhoU2KZR2HPe+mgFE87OVjHPaCgbqXoQ5HScdhL7hlcNEZtfYch73gw0ay1q7cEnpr4T1pvLXZLxi8+m0RWtuvF9y8dCppm/2CVDaZFhGSUK6FnNI7T8c18XR4tQx/D71FaLXMEjOVC9VomSUBa5EgCeVayCndWhBDvUqw1JF/xpswD/UsS63WItN7b5Iggw34e+ghQqs9XzRTuWQ02vNFqe6B2dMZgM5OF+U/s6dToveLbo7/SG9nQHo7vejtlIRyveWUcr2dFr3dOYytLDG0z04vrfQ/wUoy5fCucd41aVwgpEgRUmj9i5tWW79NkFrJLUcqamDIobA0rUYMuQZp3HnNvWRjLzmM8ln9b6nB/ypEaPW/l8xUUv97yY8V3FophtC3/so/8D/lGvxP8et/3uX3LpVu22UW2/aS2PZlA1Uvr7Z9WWoxf7bVw2iftq2iqaIM1LZu3v/UtooECxm0jDaMpbxbTDFYLNqPxdyIMotFSUeUMovJKWXz4ig+CnfX8n/Gl7rquNxCxrHpKImFlpupDKNqt4WW+9FGPuOtGsH5mhuXmyjNWiw3jxil8+JXDFSVHqhGLV6RyhaYFskBaOF9dPyKZXQcmBbJAWkhQ1xhQOztFXGFYdTpHXGFATHCK+KrBsRNXhF1KtUP4qsGRNUr4koD4naviDpVpB/ElQbEyIDXiRwB+IbDj2+sMmjR16sWq9y8fGixSiqbTAswhIWixZVr4UlTRSnXgr+HW3nYx6sWheK9EdWqhVk2mRbRltDb6MCTxls/vMrQw5aI0JsW0W4qaT+8SipbYFokBaCFe9XErMVqw5qLdy1WW7SQrSWulsoWmBbRAWgR7bWHf80sn1SLNRYtZD38GimiTItISSjXQk5p1mKNofXZLkKrFq+bqVyoRi1elyLKtHBIQrkWckqzFq8bWp++IrRqsdZM5UI1arFWiijTYqAklGshpzRrsdb9HuqK0KrFOjOVC9WoxToponW1NswjlK2gmik810/Xud/CO5b10/WWvGb8dobQKcVv52WmgAwIeou40wt+O0NeM365ZCToiV/uZTxmxC93rSh64r9hyesLv44P/DouCk/8N9xv/eDX8Yuf7APf247oGx4jR1/4yX7xo3zgW0f1RvyoAPCjpPiytVlPfOtqppyHI0AeDi86RLjWXj112BAgfoSPMozwWYYbPMbivvCT/eI7fOAbW1NfNvTPI8KLDo4AdHD43Wsc6mOXcKiLwhuPwQYKq4RDvewibjDh+5awwIeEBS4KbzzyDBRWCQsCkFDOfbAhlO+0Dva7ozvYYgejhG8admLLLRK+acK3SphnCOX4eX4lzLPYwSjhRoOEwy0SbjThWyUsMIQgxS/wmB/J8flbGOEFv8CQ14wv25HxxLfuxGgjHR0l1ce+gW9e7p0X8y6ved9FrnGCa8fBU+NNlr0TXxo7fUhpnJUForHTB5q30cwmjz0UX7rIuaumFQmrLqrPnmCTxxqJHF/10RPI9mE88Z0B2NIptSUVuwP6WDjD766Lf95JPizpucviT5MCgeYUaGk+d1WMeCk+dlN8o5r3T6rmHGkWSs99E88S3+yxsm8u8be8yh0v3f+QSawEUOLKPyhxxUeJe5PPW33b4rFjYdZ+i0k339orPrR3UwSmvfKPtVcsum312Fsw67bNJJfvXy05ffySyJd3JPttD9wUwD06weXTntpsM5TUDi/aJPuQxLg3IJ/nRfmc520zzPNGecGP8jHPk+3JyPCjJHMVp9edGN98qBdbbvfYUzHrUuFVjnjp7oP3X115s2WFxz6CHD/Jhy2TPNb7veNHeJkrVHjsKvjCj/CLr/rAV10UMnw1AHzVL77TB77vNjfQFjTJbx1OCrAOVxjqsG+9nX71TvYhibfRTYVhdOMb3/8vGyN94FvXPo34kQHgR/rFd/jAd3hZZ6jw2KPxhS+fIxv3ZAZL8cFjHijHH+zafZHhgyGvL/w8H/h5LgoZfl4A+Hl+8RN84Cd4malUGGYqvvET/OI7feB7G+3sMNQ/K/4OE3ff+IoPfMXLiGSHYUTiG1/xi2/zgW+z7MkZ8W0B4Nv84qf4wE9xUcjwUwLAT/GLX+gDv9BFIcMvDAC/UIof6hHK8M0UMnz+FnZZ8Cstec34sn1UT/xon/5f6bF7KseP9uH/RvwoH/je1qoNv5L2gx/lFz/aB751B1HHf9tjL9KMv9OS1xd+ig98b/6/0+D/vvHl/h9p+vWDFT/SZ/+/0+P3GHL8SB/9v2zXVYbvrf/f5bGLasbfbclrxk8xhHL/T/E7I/M/3rOujRh12G2oQ6VedEjxyz3Fhw+n+PTh3QYf9o0f7Rc/xQe+Nx9+x+DDVvw9lrxm/ESPUIZvpvDE3+N+Cz0t+Hstec34Dr97VQ6/O2IOv7spDp/zr72G+VdfLzo4fMy/HJLfNskk9NYO7PX4RZMv/GS/+A4f+A6/FnIGyMNaD/d5/JbBrMO7XiWUrarL/zPqXRcdhWLYAlstJ028a1yZh2KDFLWs7w3/g+EppXz1P8dlBYJC2J92kp7C1wyG00toCL0CG+jvsEltB/ovWPJ92DA/AB5y7fMDsG++VO78AOWWl31+wLqb5d5v8It+Frn3e3A3/rYkxfD+enFCRH2Or58gkorqo3DUAXVBUUpXpRuK5ed/xHnw0E8ge8/Fg0ID7YQrfnKIlh/x/MBSWyC7R079zLsDIqfrpBGOpJ80YveSasV/38UFcyRk+KbZQTsHg1kblsJLTMKl2rlImr4hf4VcDfh/pp1+d2idXv6LiP+XqRqm2iz/NVqlRSeDFvzXQbAMXoaVsApegzX8VCDtRCDGgZ9MpJ1KpJ2GVFtN4OtFVesvTukKzAfXwNXzPwUbGPi4/8/XrZHT438FUwX9h+7/wnRRJhlWp8z8PzT977Q//gfd/9Pqokz2wf+g6f/R/fH/yGvZyfl/ZPqlmT/+H7vo3ZTGlt+zln4ssaZ3uuQA6Yb4pftEIqV3uoQA6RQLnfl3cZ9Ivc3K75DUy6z8Dkm9y8rvU6lXWfl9KvUmK7/DUi+y8jss9R4rv8+kXmOu85+ZrCJ/n+zn/RCv74+YpLD+YvGI5VQA2e+RP5eubZt5fW45VUHG66h0B8vM66jlVAoZry+8tO2evL6w/LZUxuuYdGRn/W/pY5bdsyQxSvK/E5fkFVfOyRsdL1EWOi2jiGOS/Qfz22Sfb4d4efulxDLmt5p0IXxH293HGUelX3K5tVs0tB2wLuAE6wxA59SDtz71UQZqCSlyGjxbO0MPT8VTWeK9+F6Wcj9+ABEaR5OQQtNoQ2SnpbQ/ctChdDiKozPpEyievkW3o1TtvEpUn35HT6OG2umUqIkXjIXamMSEcb/AoBzDxjGiOfcanHsS557K+aYZLDVV8CUo2sXxQYQ5L5Xzuo5m0daoOu1Au6EEzrcul70hHU0noCYcoyVdRF9E+XQlXYc6c7weDO8A6kMP08/RAKbTD+gGhn0RDdN8xIiEH8LPMyQNL5nj1ed4TTheS46Xz/E6crwuHK8XxxvA8co53i0cbwzHm8Dx7uR4U7kNp3rY8P9nXatq6L1o+n9dW8xr0H9f5yptY/4HJfy/0jmweUeU33lHlK95B5vrLPU678g1tIwa90iNmp88qp06qp18Wl2N5aetaietai1nlJd93uMB8pCNnI+bx3oumaOkI+ev3H2aizJJcpYK9qA3jP388D/hHh25KJN98D9hHgv64f+119KJkoz4vpZo650u2S/dSQl6lGREelJaKlZ+30hLw8rvG2kpWPl9K7W+ld+3Uqtb+X0ntbbZf78zaSF/n+z1/SkTinW0eMoyIpb9V/P3lhFxlITX95YRsYzXacuIWMbrtGVELOP1g7TV8Ryr/WCSWvY22cvbMz45n3G1Lp4tkGgV6UL376DwDn6irOwE32u7ta1A3Lz2AL+77CF+Z5l2X5l2V9ksNBvNQY+juegJNA89ieajp9AC9DRaiBahZ9Fi9Bx6Hr2AlqCdaDfag/ah/egA+gAdZLPvQ2zGd4TNRo6x1u8Eq2vfMv84zfQ8i86h8+hXdAFdRJfQf9Bf6G+MMcUhWMVh2I4jcRR24Bgci+NwLRyPE7ETp+BUnIbTcQOcgRvjTNwMZ+FsnINzcWvcFufjQtwBd8JFeDQeg8fju0znvz+EH8aP4Bn4UTwTP4Zn4dl4Dn4cz8VP4Hn4STwfP4UX4KfxQvwMXoSfFafy78Tv4D14L34Pv48/xB/hT/Dn+Bg+jr/CJ/E3+Fv8HT6Fv8en8Q/4DP4Rn8U/4XP4Z3we/4J/xb/hC/h3fBH/gS/hP/Fl/B98Bf+Fr+K/CSKYEEKJQkIIEJWEkjASTmzETiJIJLmORJFo4iDVSAzpSDqTLqQb6U56kF6kN+lL+pMB5HpyAxlCyslwciO5mdxCbiW3kbHkdjKB3EHuJHeRu8k95D5yP3mQPEQeIY+Sx8hs8jh5gjxJniILyEKyiCwmz5MlZCl5mbxCXiWryGvkdbKOvEHeJJvIW2Qr2U52kLfJLvIO2UveJe+R98mH5CPyCfmUfEY+J1+QL8lX5GvyDfmOfE9+ID+Sn8jP5BfyG/md/EH+JP8hf5G/KaaUqjSM2mgEjfyXnrzvOndfW5cFB1SDGKgOsVADWH3Fn17T/Yaj2ZjoRbQUvYSWoZfRcvQKWoFeRSvRKrQavYbWoNfRWrQOrUdvoA3oTbQRbUKb0Ra0FW1D21EF2oEq0dtoF3oH7UXvovfQ++hD9BH6BH2KPkOfs5n6l2wU8DXrg75jbecP6Ef0E/oZ/YJ+Q7+jP9Cf6DK6gq6yBoRgBQMOxeHYhiPwdTgaV8PVcQ1cE9fGCTgJJ+M6uC6uh+vjhrgRboKb4ua4BW6JW+E2OA8X4Pa4I+6Mu+Cu+DY8Fk/AE/EdeBK+E0/HL+Al+EW8FL+El+GX8XL8Cl6BX8Ur8Sq8Gr+G1+DX8Vq8Dq/Hb+AN+E28EW/Cm/FbeAveirfh7bgC78CV+G28C+/G+/C7eD8+gD/AB/HH+BD+FB/Gn+Ej+Cj+Ep/AX5PqJJbUIHGkJqlFapN4kkASSRJxkmSSQuqQVFKXpJF6JJ3UJw1IQ5JBGpHGpAnJJE1JM9KcZJEWJJu0JDmkFcklrUkb0pbkkXxSQNqRQtKedCCdSBHpSopJCelJSkkf0o+UkYFkEBlMhpJhZAS5iYwko8hoMoaMI+PJRDKJTCZTyFRyL5lGHiDTycNkBplJZpE5ZC6ZR+aTp8kz5FnyHHmBvEheIsvIcrKCrCSryRqylqwnG8hGsplsIdtIBakkO8lusofsI/vJAfIBOUg+JofIYXKEHCXHyHFygpwk35JT5DQ5Q86Sc+Q8+ZVcIBfJJXKZXCFXKaKEKjSUhlM7vY5G0WjqoNVoDK1OY2kN6qTJNIXWoam0Ls2gjWhj2oRm0qa0GW1O29C2NI/m0wLajhbS9rSYdqcltAftSXvRMjqADqTX00H0BjqYDqEj6I30JnozHUlvoaPorXQivYNOonfSyfQuOoXeTafSe+i99D46jd5PH6AP0un0IfowfYTOoI/SefRJOp8+RRfQp+lC+gxdSl+iy+jLdDl9ha6gr9L19A26gb5JN9JNdDPdQXfR3fQduofupQfpR/Rj+gk9RD+lX9Lj9Ct6gn5NT9Jv6Lf0J3qO/kzP01+UBKgJtaA2xEMCJEISpHv0orsNvWiwDgfrcLAO/zvqcHDMGxzzBse8/8sxr3m++mOwHw32o8F+9F84Fjau6QVrcbAWB2vxv3lGu9D9G/3gGDk4Rg6OkYPrwsFeNNiLBnvRa1oXjgzW4WAdDtbh4LpwcMwbHPMGx7zXvC4c7EeD/WiwH/23rwsHa3GwFgdr8b97XTgiOEYOjpGDY+TgunCwFw32osFe9BrXhSOCdThYh4N1OLguHBzzBse8wTHvNa8LB/vRYD8a7Ef/7evCwVocrMXBWvzvXhdOCI6Rg2Pk4Bg5uC4c7EWDvWiwF73GdeGEYB0O1uFgHQ6uCwfHvMExb3DMG9C6sGxFKTgbDdbMYM38v7hjE6yZwZoZrJn/+z7T88TnH123mhJ4BVaIJ3PfetZEZa7hP3ncv2pF+clw4vNaWGe4Q7XqvO80VuPdlIX8dixGqYYazjoulNxmJae33u16zkJnPbf5Z8PtsEM8bpF1a/qzxw2yTNsQ/S6jvh7ftTu0iJqq1uUafwE/6CmwF/by2zfC4H0L5/P8VGl+fyKjMt8Vd17k2+uKCYpECmxW09R6ajo/7VmFT+E70M7OBljOJaljQfmF8+c3ncJvFiv9ItI9b67X3/1quM3NmIenQ38Rys7fdxrCcun9LE73jffiTnsjwm/ut1Bh0eg3E3crvmII5fiKT/wLBvxeFvwLHhwI8/hIpaGSoaQriUqS4lSSlRSljpKq1FXSlHqKdmecwntBxMovUrtHjklBlQnKBBQhyvQN2KA2UBtqXOFheAQ+B+0mHvj7Ir+prQC68DvbGCVf+xnNb/tQWH1ohjqgUn6zpeZtWh1RsOYtd/FvRHwjrFftod3awmpCJXzLzzGn4pxw3Us/1s+I5ymaL00XNaIqzyceeTSKB00UhyRcK+FrcbOOnme8K4/29ksDpp5yVj/5nvOo4nDQxUFPOWbJ9aMl13H9RH5+Frp2Xw9AL5gFoxi3i7weALNdhDgpvVzk6Q3TeJ4INmrRU3rA/TwlgXsawBaX1wE8b/h+s/iul2QvmAAPQQUvH+009mj+RuM3Cn4WUpW7rHaOy0NdkmipvVn6CZ4aIXTSUjex1FM8VTWkbmepp3lqpEiNRaHQB56GEujL3t0Nv8Ct/PZoYB4YzWyh34NXKGQqgalcpmh+Lj3ALeKeWP3tZ1DC30a6UrbDsyLFIVL6aisj3MoDRcr7UFdvsXiKZpN34A/YCb9zm4Qx/HZc1ygUAo/Br3ABfuNWCOFlksxasHJRar1hDsyGD2EPfMBLLYKlJrMRoDb+07HK4Q6ONZh7g8bxTrgPhsMImMQ5Aiu9PJ5Dl2QTK9UH4FO97RT3JWl6vyUpWx2hFzzMERTxdpqo+zpaL1aqX8AOmChuYIriHMs55TBxPpp250gEK5Pv4Cv4ntGfh3msZH6AM/AEzIWf+G8igEkTwSSMMtxVmMe00iwRw1r5J1n+S/A4PAXzYYG41RBYqdoYZQovTU27XTCZlei9XL5Q4XuaJCNdpapRbWc0R+AeTqWVbDLvsQH2if/bq6KaATOh1EXlFFQ3i5t8des8yCm0G1pSRL6FzCN6wjM8n1ZeicLCM1z3d2p26wvFsBW2wGJuN13nZH5DqObVz0E/SOJe7WBp1/N+9oDrDk0I2e26z1Lrc8OgHpfB6UqJU8NdN3qJdkS1m9qIHXDF1I68JloWh8tb+qo11Qj4i+vicLVs2hvtnshlai1Ry3X5q5AiLUhXTUirJUjxarSqmJA02lfV2oLWjXCdBeFvE8IaDwRucTVBtalRaoiweNV9mITNdcbCi7BKtWn3gkEKm4E8ymYes9lsY6GYXzxk+jxq+Dxm+sw2fZ40fBaKz2LTx8zfzNM7vVuCKrwqjKc4IqdnOsYxG2ijGgfvxZ3cL7SdFsr6xR4ohN9sBPxmI1XjgiI0HiiS3290Hb/fqAa/3yiB329Ul99v1Ijfb9Sc32/Ukt9vlM/vN+rM7zfqwe836s/vNxrE7zcq5/cb3cjvNxolyuklNdHQU+ml6zCXrooMpcvqh5qkVrP2tqpTxaa+slKNsfAiJl4pag0Jr2QVLLyqW3hRE686aqxkFLBUVYWOVb74CnSHbXALDBBttN7yJfB2YomYUegtwQpYy8f3lKUUilHEbe6ROIwV33XqfdqHU4exPmevjo/Kgd+6DG+zUa4uUX8o4xLls9GrnlKh1hdtSLmr3V8v2v3y/weezs82AHja3VsPUNXJfd/dt7u//3/e770jhHIMNZYSQgil1GGIx3CEUMNxHqGEcJRyhHAcQSSGUE4J41DqGcdhHM8zDiXEEmMpcYwx1lLGQc8SxlLHs9ZxrCXWoiHEY4hnjCXGIHbf/tC3+HjPx+llJjfM7n7e531/+/vud7/73d/v+xYAAQAqOAkmAc0vKCoFSV/e1NwIMl9rfnUdyGv8UksTKG77SlM96GnbtGkTGACYyYP79wFiDYz4KReozxe8kAhyn6/4LKs/83xpoC4J1C88X8HqF18qYnVxUUCm5KUXWV3KZUpLAkyUd0Hrv9S8Dpjr161fB+IYg10WeFjrYZ8IoEACNogFiSAZpIMs1rMrk+W2OMdtn8Fum9LNrmDtpxfa1c0L7TCAnjR0AyBPPtBBGjjGrHYKnAHnwSVwhdlvGtwEs2AOIihDE/phHEyESTAVZsAsmAPzYSEshmWwEtbAetgEW2Ab7IBbYRfcBbvhXrgfHoCH4SAchiNwDJ6FF+A4nIBTcAbegnfgPMJIRTaKQfFoBUpGaSgTZaNcVICKUAkqR1WoFjWgDagVtaNOtA3tQLtRD+pD/eggOoKG0Ak0ik6jc+giugwgOh4YD7pEalldznG5gL/A8cc5/lQIDpXn2PNreJrV3/K8yeopjqci4p9x/LMQ/j2Of8mx2OezHH9MwM9ynMBxQkQ+UcAJYfD/cXw7gNHrAYw6osWLdHbHcj3M2K+H3FeQwVIAYzvMeCNjoU/0KtetluMHczTGvv0U599Z0N8M1HSjINOwaE4RUHEGzmBLKgtnMb1qMeNwHX4NePBXcAMg+BS+DiQ8jadBCnmHvAM+QSbJJEilFrXAJwNrEH4Rvsa6a4DrgFf6pPRJ4AN+tvJKWClnpYoV5juA3RdsYKWVlXZWOlnZxsoOVnaz0sNKHyv9TLeDrBxheIi1J1gZBfDeAE58WH9fwKH190NwVRDPWxwn8/p7Lh+wxr0Bt+ZMUpCxblh1ANmYRYN7nlnPHEZYxib24ziciJNwKrNeFs7B+bgQF+MyXIlrcD1uwi24DXfgrbgL78LdeC+z7358AB/Gg3gYj+AxfBZfwON4Ak/hGXwL38HzBBOV2CSGxJMVJJmkkUySTXJJASkiJaScVJFa0kA2kFbSTjrJNrKD7CY9pI/0E2YrcoQMkRNklJwm58hFcplcI9fJDXKb3KWAUqpTh8bSBLqSptB0uoqupnl0DV1LS2kFraZ1tJE20410M91Ct9OddA/tpfvoAD1Ej9Jj9CQ9Rc/Q8/QSAPQKnaTT9CadpXMASEiSJVPyS3FSopQkpUoZUpaUI+VLhVKxVCZVSjVSvdQktUhtUoe0VeqSdknd0l5pv3QgENmlw6wMSsPSiDQmnZUuSOPShDQlzUi3GH9HmgdAxrIq23KMHC+vkJPlNDlTzpZz5QK5SC6Ry+UquVZukDfIrXK73Clvk3fIu+UedlUfK/3yQfmIPCSfkEfl0+zzOfmifFm+Jl+Xb8i35bsKUKiiK44SqyQoK5UUJV1ZpaxW8pQ1ylqlVKlQqpU6pVFpVjYqm5UtynZlp7JH6VX2KQPKIeWockw5qZxSzijnlUvKFWVSmVZuKrPKnIpUWTVVvxqnJqpJaqqaoWapOWq+WqgWq2VqpVqj1qtNaovapnaoW9UudZfare5V96sH1MPqoDqsjqhj6ln1gjquTqhT6ox6S72jzmtYUzVbi9HitRVaspamZWrZWq5WoBVpJVq5VqXVag3aBq1Va9c6tW3aDm231qP1af0a8wrtiDakndBGtdPaOe0i+3xZu6ZdZ+0N7bZ2Vwc61XXd0WP1BH2lnqKn66v01XqevkZfq5fqFXq1Xqc36s0A6Bv1zfoW1m7Xd+p79F59nz6gH2Kfj+rH9JOsPaWf0c+z9pJ+RZ/Up/Wb+qw+ZyBDNkzDb8QZiUaSkWpkGFlGjpFvFBrFRplRadQY9UaT0WK0GR3GVqPL2GV0G3uN/cYB47AxaAwbI8aYcda4YIwbE8aUMWPcMu4Y8yY2VdM2Y8x4c4WZbKaZmWa2mWsWmEVmiVluVpm1ZoO5wWw1281Oc5u5w9xt9ph9Zr950DxiDpknzFHztHnOvGheNq+Z180b5m3zrgVYKNMtx4q1EqyVVoqVbq2yVlt51hprrVXK4uQ3ebT8G74birh8vvrBzghrOP+DkN2zlOO6SLvqAj4ehUxnGL5R3Nkj9rCEtsFRLB6dcG0Bxy8+gYbvD4vPMGUcl4UZddh+eJ37BJpkk5rHynwusGuIuzB8k+N/dHnXwoJMgyjPsTtrBTjhET4Ud4Tho8f9HB/G+qMyoraBUSz69rOCPXOeQIeSKGRE+zSQNxZrtdi2wrXuWlsn8C/za69Go6Ew3iUsLDBlS1z70BPgV0ns0t6ytPxT5v+MM7mhMiEe6PIVAvM5oTdhjuBF6b8e4v+lbz1+7US6uxh5xHmEPRxPcf40x1cXeWOkUYjRKXQdiRGpI6L1Ps/x50Oi4qL7huHFSCWur9CoJepfGWZclRHHu6ifiPZx414+xykh/BJredGcjr3/6B313C3SR5B5h/Ma1+ELYeLtErwbKzg+zflaLhm6rzUs8vxXWV0dygi9LR7pG0t7Hfnb5a3ZiP2HW6cLjCAj7lAlAr+wPwrXLjARZRb5RkAy3JoNpzk8FcAeb8ic5oaZ6+VYbGx5/DL9MDK/i+Pd0ce95fJPoFvkmNYevU2isNUajtdw/sWFVTC29Fii7B+BGPgz+B67/JfIBFogBwY+jmLRH4J09DGUBrJROotiBagAVYK/RK+gV0Az+hJaB76O1qNmsBm9jl4HW9A30JvgDfQWegv0om+hvwPfQb2oF+xDfei74HtoPzoK/gH9C7oKBtFP0SS4in6O7oKfojl0D/wa3fcg8JsPfzbDP+yvAsh/HuhwTfg8AwBLZxp+F3kGMcvw/nMM0uGlswuB3ML7ySzIfQ+yCgAE8gqs5pkFVkJyCwBEn11gsr+n+YXF2QU3t7C8zIKbV1icVXBzCm5G4cOZT7AqrGqrzmq0mq2N1mZri7Xd2mntsXqtfdaAdcg6ah2zTlqnrDPWeeuSdcWatKatm9asNWcjW7ZN22/H2Yl2kp1qZ9hZdo6dbxfaxXaZXWnX2PV2k91it9kd9la7y95ld9t77f32AfuwPWgP2yP2mH3WvmCP2xP2lD1j37Lv2PNe7FW9tjfGG+9d4U32pnkzvdneXG+Bt8hb4i33VnlrvQ3eDd5Wb7u307vNu8O729vj7fP2ew96j3iHvCe8o97T3nPei97L3mve694b3tveuw5wqKM7jhPrJDgrnRQn3VnlrHbyHLZvOGudUqfCqXbqnEan2dnobHa2ONudnc4ep9fZ5ww4h5yjzjHnpHPKOeOcdy45V5xJZ9q56cw6cz7kk32mz++L8yX6knypvgxfli/Hl+8r9BX7ynyVvhpfva/J1+Jr83X4tvq6fLt83b69vv2+A77DvkHfsG/EN+Y767vgG/dN+KZ8M75bvju+eT/2q37bH+OP96/wJ/vT/Jn+bH+uv8Bf9BR37fXz7Uv2cFx4eoycgYmM3feFl0P458I8J0fOWYXqsClqfVo4bgsjU/XEGaHQ96nKqK99OQobVnCcyu32dY5f5++nlqu/MHfPhWQJxGsXZVGW8JCxxf0vym+E3kt8vn0ucgYj9F4RszqhMvVhclaPwaHPeCE4NHPy3KI3nTci9F8Wei9h1K5fifVjdAtduSGZir/gPeyNZo2Hffodi6SJwF+N4tm+JFzkifyeLtzxTY6/G3YUj2LXn79GX36A4XUBbwlilE4rH+JPBzH8oSBTQX8ryN97EJfAGPnGQzxA2h/g+y+R9Q/5Z8mGh/yEgN8SZHJI20P8Cd6nu76Ocx1cnBnE8JzAt3OdXfzNIIZ3uQyPh+AjvE+O798L4vkxroPL/z3XzcWrg3j+RkBmYV1/L9DnAo4LYjgo8DUBHRbw+iCGVwWZroA9H8rfezB390e5bi4+EMTzf831dPkirpvLvyvgbwsyKdyeLo4lwf2rk9ukXLCPi/cEMcrjNnTxi0EMTwoy67g/PJAP6n9D0H8ueN/5aUG340Gd7/sE/UcFmVJB/+cF/b8j6PCMoP+PBL5S0L9e0P8nQRngE/T8T0HP1qXtfN8S9PzXoMzT0gdtFexZKdhzZ1C3+1mCDnlBHeaH+FjKBH3KBH3KBH3KBH3KBH3KBH3KBH3KBH34/gueEex2huvG+fmvcX04vv/nXE8Xe4N4/seCzDf4/Lq4nvcj7r9h9vFwe/pj9vfn3tfvHWVh8C/506AbVzleiKsu3hLEC3HVxZ8O4oW46vJuXH0gH7DzTAAvxFUXu3GV44W46vJuXHX5CQG/Jci4cdXFPK7Cfn4vN465OC6IF+KYy7txzMXrg3ghjrm8G8ceyAf0f4/r4MYxFx8I4oU45vLu+nL5dwX8bUHGjWMuduPYL/i9XD938TNBvODnLu/6uYvrg3jBz13e9fMH8gH9b3JbPSPo7/o55xf8nOMFP3exN4gX/NzlXT93cWQ/d30gg37xIRb5j3I+VP5PyduPvCNEg2fcNxqO+dvNwgzWBu6ygN2V5eIXOC+uOJd/ld897C/sYZ5M3hPuHnm1RoM/Q/Kf9JeOqJ+Qf+BGbI7/SIjeonyVoE9lmDedMPj+OPc61xur+Iy72O3fxZ/lvBiRXP4VPhfRvD2J+ObDuUDAgo3wq+yrZtgCMGyFrUCCm+AmIMN22A4UuBnuACrcCUfAH8BR+G9gLfx3OAlKPLbnOGjyvO15G8Z7fuw5A5/1nPP8N/xjz/943oV/4vmFZxbmfPhzs3ayNQSQnQN0qOIUnI5X4dU4D6/Ba3EprsDVuA434ma8EW/GW/B2vBPvwb14Hx7Ah/BRfAyfxKfwGXweX8JX8CSexjfxLJ4jiMjEJH4SRxJJEkklGSSL5JB8UkiKSRmpJDWknjSRFtJGOshW0kV2kW6yl+wHgBwgh8kgGQ6c1iIjZIycJRfIOJkgU2SG3CJ3yDzFVKU2jaHxdAVNpmk0k2YDQHNpAS2iJbScVtFa9rmBbqCttJ120m10B91Ne2gf7acH6RE6RE/QUXqanqMX6WV6jV6nN+htelcCEpV0yZFipQRppZQipUurpNVSnrRGWiuVShVStVQnNUrN0kZps7RF2i7tlPZIvdI+aUA6JB2VjkknpVPSGem8dEm6Ik1K09JNaVaak5Esy6bsl+PkRJlZXU6VM+QsOUfOlwvlYrlMrpRr5HrGN7HSwkobKx3yVrlL3iV3y3vl/fIB+bA8KA/LI/IY++4sKxdYGWdlgpUpVmbkW/Id1s4rWFEVW4lR4pUVSrKSpmQq2UquUqAUKSVKuVKl1CoNygalVWlXOpVtyg5lt9Kj9Cn9ykHliDKknFBGldPKOeWiclm5plxXbii3lbsqUKmqq44aqyaoK9UUNV1dpa5W89Q16lq1VGWRXa1W69RG1jarG9XNrN2ibld3snaP2qvuUwfUQ+pR9Zh6Uj3FuDPqefUSa6+ok+o0a2+qs+ocABrSZM1krV+L0xJZm6Slahlalpaj5WuFWrFWplVqNVq91qS1aG1ah7ZV69J2ad3aXm2/dkA7rA1qw9qINqad1S5o49qENqXNaLe0O9q8jnVVt/UYPV5foSfraXqmnq3n6gV6kV6il+tVeq3eoG/QW/V2vVPfpu/Qd+s9ep/erx/Uj+hD+gl9VD+tn9Mv6pf1a/p1/YZ+W79rAIMauuEYsUaCsdJIMdKNVcZqI89YY6w1So0Ko9qoMxqNZgCMjcZmYwtrtxs7jT2s7TX2GWzdGYeMo8Yx1p40ThlnWHveuGRcMSaNaeOmMcs+z5nIlE3T9JtxZqKZZKaaGWaWmWPmm4VmsVlmVgJg1pj1JvMbs8VsMzvMrWaXucvsNveabB2ZB8zD5qA5bI6YY+ZZ84I5bk6YU+aMecu8Y84DYGFLtWwrxoq3VljJVpqVaWVbuYwvsIqsEqvcqrJqrQZrg9VqtVud1rbAerR2WLutHqvP6o9w3iv0/Hd2xP31Mb9uhpxUEzN9Xfzpv/aJs35VYU7OLXGK4n1lSEOzmSEnt5Y6HSVkWNxzA+5zzCTni8Pk6dyczisCL55pCM0bvhztkwTbNwP4zZAzT1f4LLzrnkCK/rkk5NzVcp8Fw2HxHIbojeGe9pb7FBgON3H80lPNOz85rozi7GBUWMiTunxtmFN9DeFO1IWcrnN9b1HN+WV65pJZ6Tce9TSxFr8Vs5mcX8a5n4h8uLNZT4sXo+tHOP4IH4Xoh+I5iXCnkT5oXozwxU/APC4D/mg++uWQq56ccfcgN8aKO9EroTpwGXGHEuPw0+K/xfn1IbwYf0JXU/S8O8bmEJkP4hySsAsv2muWy4s7uLhPPS1efCoQ977l8otsEmqlD44Jdx40lAl5bhFj+HJ58WRkqIbLtfbVp3VeTdjXRDuEPsdWRfFfFpuEiCHG6nA7WujZcdFiVxedSV3s5wg4YCV4jn3OB38F4kAn6AaZoAf0gRfAPvAjUAL+CQyBGnAM/BzUg3fBr8AeMAt18N3A/4+CIRgDc8HbMA8WgmmP5NHBrzymxwK/oQ6NAb+lH6UJENBEugJSmkSToPLhz4OAdJDE/7NYBx4gAzMwNtc77g3wujdwCp191wBfgV9m9kDMHq9yezQAC9isjzxWAqcU17ISmNnArFezUscKez8G7H0QbGSFvSMD9k4ItrPC3pPZzADQ+4GOnEuCeBDD6mQ2wsB/OsN7x3nGGLL5ZJ9hHXwNrmOzGvhPZYeVWFYSWFn5iOVEm20HTXxGdfYXBxKZBVNBBsgCOcwrC0ExKAOVTPaHPMNXyfOOPMsI/5ljP89tV/NMdhfP07u/mn6B57PdPKKbNawJ8ECHDZ6TnhHPO56znv/wjHt+4rnsmfH82nPn9282/h9H0WwbAAAAeNpjYGBgZACCq0vUOUD0bU7dCijdAAA1TQTEAA==") format("woff"); + font-weight: 500; + font-style: normal; + font-display: swap; +} +/*Icon: ITS Icons*/ +@font-face { + font-family: "its"; + src: url("data:application/octet-stream;base64,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") format("woff"), url("data:application/octet-stream;base64,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AREBEgETARQBFQEWARcBGAEZARoBGwEcAR0BHgEfASABIQEiASMBJAElASYBJwEoASkBKgErASwBLQEuAS8BMAExATIBMwE0ATUBNgE3ATgBOQE6ATsBPAE9AT4BPwFAAARmaWxlBmZvbGRlcgZidWxsZXQOZC1hbmQtZC1icmFuZHMGbm90ZS0yBmxheWVycwdwcmludGVyCGJhY2tsaW5rB291dGxpbmsEbGluawVjbG9zZRBmb3JtYXQtbGlzdC10ZXh0CHBlbmNpbC0xBmJvb2stMwxwbGFuZXQtc2hhcnAJbGlnaHRuaW5nDWxpbmstZXh0ZXJuYWwNbGluay1pbnRlcm5hbBBmb290bm90ZS13cml0aW5nC2xlLWJlYW4tZG5kB3NlYXJjaDIIZm9vdG5vdGUPYW5nbGUtZG91YmxlLXVwCWNoYXItbWFpbg9jaGFyLWFudGFnb25pc3QJY2hhci1zaWRlCmNoYXItZXh0cmEJY2hhcmFjdGVyJGljX2ZsdWVudF9wZW9wbGVfY29tbXVuaXR5XzE2X2ZpbGxlZA5mYS1jaGVjay1zb2xpZAVtaW51cxdmZWF0aGVyLWljb24tcGFwZXItcGxhbg1jYWxlbmRhci1maWxsEWZvbnRpc3RvLXF1ZXN0aW9uFWJveGljb25zLXBsdXMtbWVkaWNhbBRlbHVzaXZlLWljb25zLXNlYXJjaBlmb250LWF3ZXNvbWU0LWV4Y2xhbWF0aW9uCWxpZ2h0YnVsYhFidWJibGUtY2hhcnQtZmlsbA10aHVtYi11cC1maWxsD3RodW1iLWRvd24tZmlsbA1mb250aXNvLXF1b3RlEWZpbGUtcGFwZXItMi1maWxsDWJvb2ttYXJrLWZpbGwLZW50eXBvLWluZm8EaGFsZgdleGFtcGxlEmFuZ2xlLWRvdWJsZS1yaWdodApvay1jaXJjbGVkCm1hcC1tYXJrZXIFYXdhcmQLc3RyZWV0LXZpZXcNYnVsbGV0LXNlbGVjdAVzcGluMgR0aW1lBGNoYXQEY3JvdwpzaWducy1wb3N0BWhlYXJ0BGxvY2sIeWluLXlhbmcOc3dvcmQtZmlsbC1maXgAAAAAAAEAAf//AA8AAAAAAAAAAAAAAAAAAAAAsAAsILAAVVhFWSAgS7gADlFLsAZTWliwNBuwKFlgZiCKVViw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") format("truetype"); +} +body, +.theme-dark, +.theme-light { + --accent-h: 0; + --accent-s: 49%; + --accent-l: 49%; + --background-primary: var(--note); + --background-primary-alt: var(--outer-bar); + --background-secondary: var(--side-bar); + --background-secondary-alt: var(--outer-bar); + --background-modifier-form-field: var(--input-bg); + --background-modifier-message: var(--dark-accent); + --toggle-thumb-color: transparent; + --popover-background: var(--background-primary); + --background-modifier-border: var(--lines); + --background-modifier-border-hover: var(--bg); + --background-modifier-border-focus: var(--accent); + --divider-color: var(--outer-bar); + --divider-color-hover: var(--accent); + --prompt-border-color: var(--outline); + --text-on-accent: var(--text-dl); + --text-normal: var(--text); + --text-accent: var(--accent2-lite); + --text-accent-hover: var(--lite-accent); + --text-muted: var(--soft-text); + --text-faint: var(--faint-text); + --text-highlight-bg: var(--hvr); + --text-highlight-bg-active: var(--hvr-active); + --text-selection: var(--highlight); + --interactive-normal: var(--code-bg); + --interactive-hover: var(--embed-bg); + --interactive-accent: var(--bttn); + --interactive-accent-hover: var(--bg); + --interactive-accent-hsl: var(--selected-rgb); + --background-modifier-hover: var(--hvr-active); + --background-modifier-success: var(--success-bg); + --background-modifier-error: var(--failure-bg); + --background-modifier-active-hover: var(--dark-accent); + --background-modifier-cover: var(--td); + --icon-opacity: 1; + --icon-color: var(--soft-text); + --icon-color-active: var(--text-dl); + --icon-color-hover: var(--text); + --icon-color-focused: var(--text); + --drag-ghost-background: var(--dark-accent); + --drag-ghost-text-color: var(--text-dl); + --tooltip-color: var(--text-dl); + --italic-color: inherit; + --bold-color: inherit; + --text-dl: #e5ebee; + --accent-text: #dcddde; + --list-color-1: var(--rainbow-1); + --list-color-2: var(--rainbow-2); + --list-color-3: var(--rainbow-3); + --list-color-4: var(--rainbow-4); + --list-color-5: var(--rainbow-5); + --list-color-6: var(--rainbow-6); +} + +.theme-dark { + --deep-dark-accent: #3f1010; + --dark-accent: #652121; + --lite-accent: #c94d4d; + --accent: #863737; + --accent2: #42536e; + --accent2-lite: #61afef; + --accent-color: 134, 55, 55; + --side-bar: var(--note); + --side-bar-bg: var(--outer-bar); + --outer-bar: #0b0f13; + --dark-sidebar: #0d1014; + --bttn: var(--dark-accent); + --input-bg: rgba(0, 0, 0, 0.3); + --selected-rgb: 168, 60, 60; + --hvr: rgba(168, 60, 60, 0.4); + --hvr2: var(--highlight); + --hvr-active: rgba(212, 47, 47, 0.4); + --highlight: #7a141466; + --bg: #252c36; + --fg: #cfd7dd; + --success-bg: #32603e; + --failure-bg: #772d2d; + --inactive: #586477; + --outline: var(--outer-bar); + --folder: var(--accent); + --folder-open: #e05858; + --file-icon-color: #586477; + --file-icon-color: var(--inactive); + --lines: var(--hr); + --note: #1a1e24; + --note-rgb: 26, 30, 36; + --text: #bccad8; + --headers: #c14343; + --soft-text: #97a1b9; + --faint-text: #4e5b6f; + --code-text: #fa4545; + --footnote: #63778f; + --code-bg: #232831; + --embed-bg: var(--dark-sidebar); + --aside-bg: #11151d; + --th: var(--dark-accent); + --th-text: var(--text-dl); + --td: #06080c60; + --drop-shadow: #06080c60; + --tag: var(--dark-accent); + --tag-text: #d04e4e; + --table: #283345; + --hr: #2f3b4d; + --i-at: #bf5e5e; + --progress: var(--accent); + --progress-bg: var(--bg); + --graph-bg: var(--outer-bar); + --graph-lines: var(--dark-accent); + --graph-node: var(--text); + --graph-fill: var(--headers); + --graph-404: #727e93; + --graph-img: #4c78cc; + --graph-tag: var(--headers); + --graph-focused: var(--accent2-lite); + --theme-rainbow-1: #7c2929; + --theme-rainbow-2: #652121; + --theme-rainbow-3: #471d1d; + --theme-rainbow-4: #381919; + --theme-rainbow-5: #424c61; + --theme-rainbow-6: #2e333d; + --rainbow-1: #b03a3a; + --rainbow-2: #d59929; + --rainbow-3: #207a20; + --rainbow-4: #3232c5; + --rainbow-5: #7f307f; + --rainbow-6: #dd4794; +} + +.theme-light { + --deep-dark-accent: #2f1010; + --dark-accent: #c35c5c; + --lite-accent: #cd2626; + --accent: #912e2e; + --accent2: #aac1d3; + --accent2-lite: #5599d0; + --side-bar: var(--note); + --side-bar-bg: var(--outer-bar); + --outer-bar: #eef3fd; + --dark-sidebar: #f1f5ff; + --bttn: var(--headers); + --input-bg: var(--td); + --selected-rgb: 52, 123, 237; + --hvr: rgba(255, 0, 0, 0.212); + --hvr2: var(--highlight); + --hvr-active:rgba(253, 115, 115, 0.4); + --highlight: rgba(229, 149, 149, 0.37); + --bg: #e1e9f6; + --fg: var(--accent); + --success-bg: #599049; + --failure-bg: #772d2d; + --inactive: #a6bbde; + --outline: var(--bg); + --folder: var(--accent); + --file-icon-color: #7e8ea3; + --file-icon-color: var(--inactive); + --folder-open: #ce6d6d; + --lines: #b5c2d8; + --icons: #d04e4e; + --note: #f8fbff; + --note-rgb: 248, 251, 255; + --text: #30353a; + --headers: #c14343; + --faint-text: #4e5b6f; + --soft-text: #697580; + --code-text: #ea4262; + --footnote: #8996a0; + --code-bg: var(--embed-bg); + --embed-bg: var(--dark-sidebar); + --aside-bg: var(--dark-sidebar); + --th: var(--headers); + --th-text: var(--text-dl); + --td: #d0ddef62; + --drop-shadow: #d0ddef62; + --tag: #c65656; + --tag-text: var(--lite-accent); + --table: #ccd6eb; + --hr: #d6deea; + --i-at: var(--folder); + --progress: var(--accent); + --progress-bg: var(--bg); + --graph-bg: var(--note); + --graph-lines: #e4e7f8; + --graph-node: var(--headers); + --graph-fill: var(--folder); + --graph-404: #727e93; + --graph-img: #4c78cc; + --graph-tag: #000000; + --graph-focused: var(--text-highlight-bg-active); + --theme-rainbow-1: #bb5555; + --theme-rainbow-2: #a53f3f; + --theme-rainbow-3: #862c2c; + --theme-rainbow-4: #662828; + --theme-rainbow-5: #697795; + --theme-rainbow-6: #a4aec2; + --rainbow-1: #dd3c3c; + --rainbow-2: #f1ab27; + --rainbow-3: #118811; + --rainbow-4: #3333cc; + --rainbow-5: #a824a8; + --rainbow-6: #e83b94; +} + +body.theme-dark, +body.theme-light { + --font-default: "Inter", -apple-system, BlinkMacSystemFont, "Segoe UI", Roboto, Helvetica, Arial, sans-serif, "Apple Color Emoji", "Segoe UI Emoji", "Segoe UI Symbol", "Microsoft YaHei Light", sans-serif; + --font-monospace: "Fira Code", "Fira Code Medium", "Source Code Pro", monospace; + --font-text: var(--font-text-override), var(--font-default); + --font-monospace-default: var(--font-monospace-default-override), var(--font-monospace); + --font-interface: var(--font-interface-override), var(--font-default); + --rmx: "remixicon"; + --mdi: "Material Icons Sharp"; + --its: "its"; + --fa5: "Font Awesome 5 Free Solid"; + --fa6: "Font Awesome 6 Free Solid"; + --rpg: "rpg-awesome"; + --radius-s: 0; + --radius-m: calc(var(--radius-s) * 1.1); + --radius-l: calc(var(--radius-s) * 1.2); + --radius-xl: calc(var(--radius-s) * 1.5); + --radius-h: calc(var(--radius-s) / .50); + --slider-track-radius: var(--radius-h); + --input-radius: var(--radius-s); + --icon-btn-radius: var(--radius-s); + --tag-radius: var(--radius-l); + --slider-thumb-radius: var(--radius-h); + --status-bar-radius: var(--radius-m) 0 0 0; + --checkbox-radius: var(--radius-m); + --toggle-radius: var(--radius-h); + --toggle-thumb-radius: var(--radius-h); + --clickable-icon-radius: var(--radius-s); + --pill-radius: var(--radius-m); + --bold-weight: 900; + --font-ui-smaller: 13.5px; + --font-ui-small: 14px; + --font-ui-medium: 15px; + --font-ui-large: 20px; + --font-smallest: .85em; + --font-smaller:.90em; + --font-small: .95em; + --icon-xs: 14px; + --icon-s: 16px; + --icon-m: 17px; + --icon-l: 18px; + --line-height-tight: 1.3em; + --scroll-size: 7px; + --divider-width: 2px; + --divider-width-hover: 5px; + --tag-padding-x: 7px; + --tag-padding-y: 3px; + --prompt-border-width: 3px; + --tab-outline-width: 2px; + --shadow-s: 2px 2px 0 var(--outline); + --shadow-m: 3px 3px 0 var(--outline); + --shadow-ml: 4px 4px 0 var(--outline); + --shadow-l: 5px 5px 0 var(--outline); + --input-shadow: var(--shadow-s); + --input-shadow-hover: var(--shadow-m); + --embed-block-shadow-hover: var(--input-shadow); + --message-color: var(--text-dl); + --message-box-shadow: var(--shadow-s); + --message-border-width: 0px; + --message-border-color: var(--outline); + --toggle-shadow: none; + --box-border-s: 1px solid var(--outline); + --box-border: 2px solid var(--outline); + --box-border-m: 3px solid var(--outline); +} + +.backlink-pane > .tree-item-self.is-collapsed:hover, +.outgoing-link-pane > .tree-item-self.is-collapsed:hover, +.tree-item-self:hover :is(.tree-item-inner-subtext, .tree-item-icon, .tree-item-flair) { + color: var(--nav-item-color-hover); +} + +.tree-item-self:hover .collapse-icon svg.svg-icon { + color: unset; +} + +.nav-file-tag { + background-color: var(--tag); + color: var(--text-on-accent); +} + +.search-result-hover-button, +.nav-folder-title:hover svg.svg-icon, +.search-result-file-title:hover .collapse-icon svg.svg-icon { + color: var(--nav-item-color-hover); +} + +input[type=range] { + border-radius: var(--slider-track-radius); +} + +.notice, +.tooltip { + color: var(--message-color); + box-shadow: var(--message-box-shadow); + border: var(--message-border-width) solid var(--message-border-color); +} + +.tree-item-self { + align-items: center; +} + +.theme-dark, +.theme-light { + --modal-border-color: var(--outline); + --modal-border-width: 3px; + --modal-community-sidebar-width: 310px; + --modal-sidebar-background: var(--dark-sidebar); + --modal-nav-item-background: transparent; + --modal-nav-item-background-hover: var(--td); + --setting-item-padding: 10px 15px; + --setting-item-background: transparent; + --setting-item-alt-background: var(--setting-item-background); + --setting-item-alt-background-hover: var(--td); + --setting-item-heading-background: transparent; + --setting-item-background-hover: var(--hvr); + --setting-item-heading-border: 2px solid var(--headers); + --setting-item-border-color: var(--table); + --toggle-width: 20px; + --toggle-s-width: 20px; + --toggle-border-width: 1px; +} + +.vertical-tab-content { + padding: 35px; +} +.vertical-tab-content .setting-item { + padding-left: 18px; + padding-right: 18px; +} +.vertical-tab-content .installed-plugins-container { + padding: 0; +} +.vertical-tab-content .setting-item { + border: 0; + border-bottom: 1px solid; + padding: var(--setting-item-padding); + background: var(--setting-item-background); + border-color: var(--setting-item-border-color); +} +.vertical-tab-content .setting-item-heading { + background: var(--setting-item-heading-background); + border-bottom: var(--setting-item-heading-border); +} +.vertical-tab-content .setting-item-heading:hover { + background: var(--setting-item-background-hover); +} +.vertical-tab-content .setting-item:nth-child(even):not(.setting-item-heading) { + background-color: var(--setting-item-alt-background); +} +.vertical-tab-content .setting-item:nth-child(even):not(.setting-item-heading):hover { + background-color: var(--setting-item-alt-background-hover); +} + +.setting-item.setting-item:hover { + background-color: var(--modal-nav-item-background-hover); +} + +.vertical-tab-header { + background-color: var(--modal-sidebar-background); +} + +.horizontal-tab-nav-item, +.vertical-tab-nav-item { + background-color: var(--modal-nav-item-background); +} + +.vertical-tab-header-group-title { + color: var(--headers); + font-size: var(--font-ui); +} + +:is(.mod-linux, .mod-windows) .titlebar-button.mod-close:hover { + color: var(--text-dl); +} + +.u-pop { + color: var(--text); +} + +button.mod-cta:hover { + color: var(--text); +} + +.checkbox-container, +.checkbox-container:after { + box-shadow: var(--toggle-shadow); +} + +.checkbox-container.mod-small { + width: var(--toggle-s-width); + height: var(--toggle-s-width); +} + +.checkbox-container.is-enabled { + background-color: var(--accent); +} + +.setting-item:hover .checkbox-container { + box-shadow: 0 0 0 1px var(--background-modifier-border); +} + +.community-item { + border: var(--box-border); + box-shadow: var(--shadow-s); +} + +.community-item:hover { + background-color: var(--modal-nav-item-background-hover); + border-color: var(--outline); +} + +.community-modal-info-name { + font-family: var(--h2-font); + font-weight: var(--h2-weight); +} + +.mod-community-modal .modal-sidebar button.clickable-icon:hover { + color: var(--text-dl); +} + +.menu { + border-width: var(--modal-border-width); + border-color: var(--modal-border-color); +} +.menu .menu-item.selected .menu-item-icon { + color: var(--text-normal); +} + +.setting-hotkey, +.suggestion-hotkey { + border-radius: var(--radius-s); + background-color: var(--code-bg); + color: var(--soft-text); + font-size: 12px; + box-shadow: var(--code-shadow); +} + +.theme-dark, +.theme-light { + --status-bar-text-color: var(--text-muted); + --status-bar-background: var(--outer-bar); + --status-bar-border-color: var(--accent); +} + +.theme-dark, +.theme-light { + --sidebar-markdown-font-size: var(--font-text-size); + --sidebar-tab-text-display: none; + --sidebar-tab-background-color: var(--bttn); + --ribbon-background: var(--outer-bar); + --ribbon-background-collapsed: var(--note); + --ribbon-width: 40px; + --ribbon-border-width: 0; + --ribbon-border-color: var(--outer-bar); + --ribbon-icon-size: var(--icon-l); + --ribbon-icon-stroke: var(--icon-l-stroke-width); + --sidebar-icon-color: var(--text); + --sidebar-icon-color-active: var(--text-dl); + --sidebar-tab-icon-size: var(--icon-l); + --sidebar-tab-icon-stroke: var(--icon-l-stroke-width); + --sidebar-tab-background-color-hover: var(--accent); + --sidebar-tab-color-hover: var(--text-on-accent); + --sidebar-tab-border-color: transparent; + --sidebar-tab-border-color-active: var(--bttn); + --sidebar-tab-border-width: 0; + --sidebar-tab-padding: 0 var(--size-4-3); +} + +:is(.mod-right-split, .mod-left-split) .workspace-tab-header-container-inner { + padding: 0; + margin: 0; +} + +.mod-right-split .workspace-tab-header-container-inner { + margin-left: 2px; +} + +:is(.mod-left-split, .mod-right-split) .workspace-tab-header-inner { + padding: var(--sidebar-tab-padding); +} + +.workspace-ribbon.mod-left { + margin-top: 0; + gap: 0; +} + +.sidebar-toggle-button { + padding: 0; + position: relative; + height: var(--header-height); +} +.sidebar-toggle-button .clickable-icon { + padding: 10px; +} + +:is(.mod-left-split, .mod-right-split) .workspace-tab-header-inner-icon .svg-icon { + --icon-size: var(--sidebar-tab-icon-size); + --icon-stroke: var(--sidebar-tab-icon-stroke); +} + +:is(.mod-left-split, .mod-right-split) .workspace-tab-header-inner { + background-color: transparent; + border-bottom: var(--sidebar-tab-border-width) solid var(--sidebar-tab-border-color); +} + +:is(.mod-left-split, .mod-right-split) .is-active .workspace-tab-header-inner { + border-color: var(--sidebar-tab-border-color-active); +} + +.clickable-icon.side-dock-ribbon-action { + padding: 10px; +} + +.workspace-ribbon { + padding: 0; + border-right: var(--ribbon-border-width) solid var(--ribbon-border-color); +} + +.workspace-ribbon .side-dock-ribbon-action .svg-icon { + --icon-size: var(--ribbon-icon-size); + --icon-stroke: var(--ribbon-icon-stroke); +} + +:is(.mod-left-split, .mod-right-split) .workspace-tab-header.is-active, +:is(.mod-left-split, .mod-right-split) .workspace-tab-header { + --background-modifier-hover: var(--sidebar-tab-background-color); + --tab-text-color: var(--text); + --tab-text-color-active: var(--text-dl); + --tab-text-color-focused: var(--text); + --tab-text-color-focused-active: var(--text-dl); + --tab-text-color-focused-active-current: var(--sidebar-icon-color-active); +} +:is(.mod-left-split, .mod-right-split) .workspace-tab-header.is-active .workspace-tab-header-inner-icon, +:is(.mod-left-split, .mod-right-split) .workspace-tab-header .workspace-tab-header-inner-icon { + --icon-color-focused: var(--sidebar-icon-color-active); +} + +:is(.mod-left-split, .mod-right-split) .is-active:hover .workspace-tab-header-inner, +:is(.clickable-icon, .workspace-tab-header-inner-icon):hover, +.workspace-tab-header-container .clickable-icon:hover, +.workspace-tab-header:not(.is-active):hover .workspace-tab-header-inner, +.side-dock-ribbon .clickable-icon:hover, +.workspace-tab-header:hover .workspace-tab-header-inner .workspace-tab-header-inner-icon { + color: var(--sidebar-tab-color-hover); +} + +.side-dock-actions { + margin-top: var(--header-height); +} + +.workspace-tab-header-inner .workspace-tab-header-inner-icon { + color: var(--sidebar-icon-color); +} + +.tree-item-self .tree-item-icon { + position: relative; + margin-left: -3px; +} + +body { + --search-border: var(--box-border); + --search-box-shadow: var(--shadow-s); +} + +/*Search Styling*/ +.search-results-children .search-result { + margin-right: 0px; + margin-bottom: 10px; + background: var(--note); + border: var(--search-border); + box-shadow: var(--search-box-shadow); +} + +.search-result-container { + padding-left: var(--size-4-3); + padding-right: var(--size-4-2); +} + +.search-result-file-title { + background: var(--code-bg); + box-shadow: 0 2px 0 var(--td); + padding: 5px 10px; + line-height: var(--lh); + margin-bottom: 0; +} + +.search-result:not(.is-collapsed) .search-result-file-title:not(:hover) { + color: var(--text); +} + +.search-result-file-matches { + margin: 0; + padding: 0; + border: 0; + box-shadow: unset; +} + +.search-result-file-match { + margin: auto; + width: auto; + z-index: 0; + padding: 8px 10px; + color: var(--text); + left: 0; +} + +.search-result-file-match:hover { + padding-right: var(--size-4-5); +} + +.search-result-file-title:hover .search-result-file-matched-text { + color: var(--text-on-accent); + border-bottom: 2px solid var(--text-on-accent); +} + +.search-result-hover-button:not(:hover) { + color: var(--text); +} +.search-result-hover-button:hover { + background-color: var(--bttn); +} + +.cm-s-obsidian span.obsidian-search-match-highlight { + box-shadow: 0 0 0 2px var(--accent); + border-radius: var(--radius-s); + background-color: var(--text-highlight-bg-active); +} + +.search-results-info .dropdown:hover { + color: var(--lite-accent); + font-weight: 900; +} + +.search-results-result-count:hover { + color: var(--text-dl); +} +.search-results-result-count:hover .more-options-icon { + background-color: var(--text-dl); +} +.search-results-result-count:hover .more-options-icon svg { + fill: var var(--sidebar-tab-background-color-hover); +} + +.document-search-container.document-search-container { + padding: var(--size-4-2); + background-color: transparent; +} +.document-search-container.document-search-container .document-search, .document-search-container.document-search-container .document-replace { + flex-wrap: wrap; + justify-content: center; +} + +body { + --tab-curve: var(--radius-s); + --tab-radius: var(--radius-s); + --tab-radius-active: var(--radius-s); + --tab-font-size: var(--font-size); + --tab-font-weight: 500; + --tab-font-weight-active: 900; + --tab-width: 200px; + --tab-max-width: 320px; + --tab-outline-width: 0; + --tab-outline-color: var(--accent); + --tab-divider-color: var(--hr); + --tab-background: var(--outer-bar); + --tab-background-active: var(--note); + --tab-container-background: var(--tab-background); + --tab-text-color: var(--inactive); + --tab-text-color-active: var(--text); + --tab-text-color-focused: var(--inactive); + --tab-text-color-focused-active: var(--text); + --tab-text-color-focused-active-current: var(--text); + --tab-text-color-hover: var(--text); + --tab-stacked-font-weight: 700; + --tab-stacked-font-size: 15px; + --tab-stacked-shadow: -10px 0 10px var(--tab-stacked-shadow-color); + --tab-stacked-shadow-color: var(--drop-shadow); +} + +.view-header-title-container:not(.mod-at-end):after { + display: none; +} + +.workspace-tab-header.workspace-tab-header:hover { + color: var(--tab-text-color-hover); +} + +.workspace-tab-header:not(.is-active):hover .workspace-tab-header-inner-close-button, +body.is-focused :is(.mod-left-split, .mod-right-split) .workspace-tab-header:not(.is-active):hover .workspace-tab-header-inner-title { + color: var(--text-dl); +} + +.is-active .workspace-tab-header-inner-title { + font-weight: var(--tab-font-weight-active); +} + +.workspace .mod-root .workspace-tab-header-inner-title { + padding-right: 10px; +} + +.mod-root .workspace-tab-header-container-inner { + padding-top: 2px; +} + +.mod-root .mod-stacked .workspace-tab-header:hover .workspace-tab-header-inner { + color: var(--tab-text-color-hover); +} + +body { + --vault-name-font-size: 20px; + --vault-name-font-weight: var(--font-bold); + --vault-name-color: var(--headers); + --vault-font: var(--font); + --nav-item-color: var(--text); + --nav-item-color-hover: var(--text-dl); + --nav-item-color-active: var(--text-dl); + --nav-item-color-highlighted: var(--text-dl); + --folder-open-text-color: var(--text); + --nav-item-background-hover: var(--dark-accent); + --nav-item-background-active: var(--dark-accent); + --nav-item-background-selected: var(--hvr); + --nav-item-border-width: 0px; + --nav-item-border-color: var(--lite-accent); + --nav-item-background-border-color-hover: var(--dark-accent); + --nav-item-padding: 4px 8px; + --explorer-padding: 4px 4px 4px 3px; + --explorer-item-padding: 2px 8px; + --nav-item-children-padding-left: 8px; + --nav-item-children-margin-left: 15px; + --folder-text-color: var(--nav-item-color); + --file-text-color: var(--nav-item-color); + --nav-item-size: var(--font-ui-small); + --nav-item-weight: 500; + --nav-item-weight-hover: 700; + --nav-item-weight-active: 700; + --nav-item-white-space: wrap; + --nav-indentation-guide-width: 2px; + --nav-indentation-guide-color: var(--lines); + --folder-weight: 700; +} + +.nav-folder-collapse-indicator, +.tree-item-icon.nav-folder-collapse-indicator { + display: none; +} + +.nav-folder-title { + --nav-item-weight: var(--folder-weight); +} + +.nav-folder.mod-root > .nav-folder-title:hover { + color: var(--dark-accent); +} + +.nav-files-container { + padding: var(--explorer-padding); +} + +.nav-folder.is-collapsed .nav-folder-title:not(.is-being-dragged) { + color: var(--folder-text-color); +} + +.nav-folder:not(.mod-root) > .nav-folder-title:not(.is-being-dragged) { + color: var(--folder-open-text-color); +} + +.nav-folder-title.nav-folder-title.is-active.is-active { + color: var(--text-dl); +} +.nav-folder-title.nav-folder-title.is-active.is-active .nav-folder-title-content::before { + color: var(--text-dl); +} + +.nav-file-title { + color: var(--file-text-color); +} + +.nav-file-tag { + margin-left: auto; +} + +.nav-folder.mod-root > .nav-folder-title { + font-family: var(--vault-font); +} + +.nav-folder.mod-root > .nav-folder-children .nav-folder > .nav-folder-title, .nav-folder.mod-root > .nav-folder-children .nav-file > .nav-file-title { + border: 2px solid transparent; + margin-bottom: 0; + padding: var(--explorer-item-padding); +} +.nav-folder.mod-root > .nav-folder-children .nav-folder > .nav-folder-title:hover, .nav-folder.mod-root > .nav-folder-children .nav-file > .nav-file-title:hover { + border-color: var(--nav-item-background-border-color-hover); +} + +body { + --titlebar-background: var(--note); + --titlebar-background-focused: var(--outer-bar); + --titlebar-text-color: var(--text-normal); +} + +.is-hidden-frameless:not(.is-fullscreen).is-focused .titlebar-button-container.mod-right, .is-hidden-frameless:not(.is-fullscreen) .titlebar-button-container.mod-right { + background: transparent; +} + +.workspace-tab-header.is-active .workspace-tab-header-inner-close-button { + color: var(--tab-text-color-focused-active-current); +} + +body { + --file-header-font-size: var(--font-ui-medium); + --file-header-font-weight: 600; + --file-header-parent-font-weight: 600; + --file-header-breadcrumb-font-size: var(--font-ui-smaller); + --file-header-breadcrumb-color: var(--inactive); + --file-header-color: var(--inactive); + --file-header-color-active: var(--text); + --file-header-background: var(--note); + --file-header-left-color: var(--dark-accent); + --file-header-right-color: var(--outer-bar); +} + +.is-focused .workspace-leaf.mod-active .view-header, +.workspace-leaf .view-header { + gap: 0; + margin: 0; + padding: 0 var(--size-4-3); + background: var(--file-header-background); +} + +.view-header-title-parent { + font-weight: var(--file-header-parent-font-weight); +} + +.view-header-title { + color: var(--file-header-color); +} + +.mod-active { + color: var(--file-header-color-active); +} + +.view-header-title-container, +.view-header-title-parent { + align-content: center; + align-items: center; +} + +.view-header-breadcrumb { + font-size: var(--file-header-breadcrumb-font-size); + color: var(--file-header-breadcrumb-color); +} + +.clickable-icon[aria-disabled=true]:hover { + color: var(--inactive); +} + +.popover.hover-popover { + min-height: auto; + background-color: var(--popover-background); +} +.popover.hover-popover > .markdown-embed > .markdown-embed-content { + padding: 0; +} +.popover.hover-popover .markdown-preview-view { + background-color: var(--popover-background); +} + +@media (max-width: 500px) { + .theme-dark, .theme-light { + /*Mobile Sizes*/ + --radius: 0px; + --micro: 70px; + --tiny: 100px; + --small: 150px; + --small-med: 200px; + --med-small: 250px; + --medium: 300px; + --med-tall: 450px; + --tall: 500px; + } +} +.is-mobile.is-mobile { + --interactive-accent: var(--lite-accent); + --caret-color: var(--text-normal); + --tag-background: var(--tag); + --modal-background: var(--background-primary); + --settings-home-background: var(--background-primary); + --search-result-background: var(--background-secondary); + --background-modifier-form-field: var(--td); + --background-modifier-cover: var(--outer-bar); + --background-modifier-hover: var(--hvr-active); + --toggle-width: 22px; +} +.is-mobile.is-mobile .prompt { + border: var(--prompt-border-width) solid var(--prompt-border-color); +} +.is-mobile.is-mobile .menu { + border: var(--prompt-border-width) solid var(--modal-border-color); +} +.is-mobile.is-mobile .vertical-tab-nav-item.is-active, .is-mobile.is-mobile button.mod-cta:not(:hover) { + background-color: var(--dark-accent); +} +.is-mobile.is-mobile .checkbox-container { + height: var(--toggle-width); +} +.is-mobile.is-mobile .side-dock-ribbon { + background-color: var(--ribbon-background); +} +.is-mobile.is-mobile.is-tablet .sidebar-toggle-button { + padding-left: unset; +} +.is-mobile.is-mobile .pull-down-action, .is-mobile.is-mobile .pull-out-action { + border-radius: var(--radius-h); +} +.is-mobile.is-mobile .notice { + border-radius: var(--radius-s); +} +.is-mobile.is-mobile.is-phone .vertical-tab-header-group-title, .is-mobile.is-mobile.is-phone .setting-item-heading .setting-item-name { + font-size: var(--font-ui-medium); +} +.is-mobile.is-mobile.is-phone .setting-item { + gap: unset; + padding: var(--setting-item-padding); +} +.is-mobile.is-mobile.is-phone .setting-item-heading { + margin: 0; +} +.is-mobile.is-mobile.is-phone .mod-sync-log { + --modal-top: 0; +} +.is-mobile.is-mobile .view-header-title { + padding: 0 var(--size-4-1); +} + +.is-mobile { + --mobile-toolbar-background: var(--deep-dark-accent); +} +.is-mobile .workspace-drawer-backdrop { + opacity: 0.9 !important; +} +.is-mobile .workspace-drawer:is(.mod-left, .mod-right) { + border: none; + box-shadow: 0 0 5px var(--outline), 0 0 5px var(--outline), 0 0 5px var(--outline); +} +.is-mobile .workspace-drawer-active-tab-container.is-fullscreen .workspace-drawer-active-tab-title { + text-align: center; +} +.is-mobile .modal.mod-settings .vertical-tab-content { + padding: var(--size-4-2) max(var(--size-4-2), var(--safe-area-inset-right)) 100px max(var(--size-4-2), var(--safe-area-inset-left)); +} +.is-mobile .mobile-toolbar { + background-color: var(--mobile-toolbar-background); +} +.is-mobile .mobile-toolbar-option { + color: var(--text-dl); +} +.is-mobile .view-header-title-container { + padding-left: 0; +} + +.is-mobile .markdown-rendered .list-collapse-indicator { + margin-left: -2.3em; + padding-right: 0em; +} + +body { + --scrollbar-thumb-bg: var(--accent); + --scrollbar-active-thumb-bg: var(--lite-accent); + --scrollbar-border-width: 0; + --scrollbar-width: 12px; +} + +body:not(.native-scrollbars) ::-webkit-scrollbar { + background-color: inherit; + width: var(--scrollbar-width); + height: calc(var(--scrollbar-width) + 1px); +} + +body { + --latex-color: var(--lite-accent); + --latex-format-color: var(--inactive); + --latex-syntax-color: var(--soft-text); +} + +.mjx-math { + font-style: normal; +} + +.MJX-TEX { + font-size: 130%; + color: var(--latex-color); +} + +/*Math Block Margin Reduction*/ +.mjx-container[jax=CHTML][display=true] { + margin: 3% 0 !important; +} + +/*Math Editor*/ +.cm-s-obsidian span.cm-math:not(.cm-formatting-math-begin):not(.cm-formatting-math-end) { + color: var(--latex-syntax-color); +} + +.cm-s-obsidian span.cm-math, +.cm-s-obsidian span.hmd-fold-math-placeholder { + color: var(--latex-format-color); + font-style: normal; +} + +body { + --inline-title-position: left; +} + +.inline-title { + text-align: var(--inline-title-position); + padding-bottom: 0; + z-index: 2; +} + +body { + --font-frontmatter: var(--font-small); +} + +.cm-hmd-frontmatter { + font-size: var(--font-frontmatter); +} + +.frontmatter-container:not(.is-collapsed) { + border-bottom: 2px solid var(--hr); +} +.frontmatter-container:not(.is-collapsed) .frontmatter-container-header { + border-bottom: 0; + margin-bottom: 0; + border-top: 2px solid var(--hr); + padding-top: var(--size-4-2); +} + +.frontmatter-container .frontmatter-container-header { + justify-content: center; + font-weight: 600; + content: "/ec10"; +} +.frontmatter-container .frontmatter-section-data-item { + color: var(--text); +} +.frontmatter-container .frontmatter-section-label { + text-transform: unset; +} + +body { + --h1-size: 34px; + --h2-size: calc(var(--h1-size) - 4px); + --h3-size: calc(var(--h1-size) - 8px); + --h4-size: calc(var(--h1-size) - 12px); + --h5-size: calc(var(--h1-size) - 14px); + --h6-size: calc(var(--h1-size) - 16px); + --header-weight: 700; + --h1-weight: var(--header-weight); + --h2-weight: var(--header-weight); + --h3-weight: var(--header-weight); + --h4-weight: var(--header-weight); + --h5-weight: var(--header-weight); + --h6-weight: var(--header-weight); + --font: "Calisto MT", "Palatino Black", "Book Antiqua", "Georgia", "Suez One", serif; + --h1-font: var(--font); + --h2-font: var(--font); + --h3-font: var(--font); + --h4-font: var(--font); + --h5-font: var(--font); + --h6-font: var(--font); + --heading-formatting: var(--inactive); + --h1-color: var(--headers); + --h2-color: var(--headers); + --h3-color: var(--headers); + --h4-color: var(--headers); + --h5-color: var(--headers); + --h6-color: var(--headers); + --header-text-align: left; + --h1-text-align: var(--header-text-align); + --h2-text-align: var(--header-text-align); + --h3-text-align: var(--header-text-align); + --h4-text-align: var(--header-text-align); + --h5-text-align: var(--header-text-align); + --h6-text-align: var(--header-text-align); + --header-padding: 0; + --h1-padding: var(--header-padding); + --h2-padding: var(--header-padding); + --h3-padding: var(--header-padding); + --h4-padding: var(--header-padding); + --h5-padding: var(--header-padding); + --h6-padding: var(--header-padding); + --heading-spacing: 10px; + --heading-spacing-top: var(--heading-spacing); + --heading-spacing-bottom: var(--heading-spacing); + --header-background: transparent; + --h1-background: var(--header-background); + --h2-background: var(--header-background); + --h3-background: var(--header-background); + --h4-background: var(--header-background); + --h5-background: var(--header-background); + --h6-background: var(--header-background); + --h1-border-color: var(--theme-rainbow-1); + --h2-border-color: var(--theme-rainbow-2); + --h3-border-color: var(--theme-rainbow-3); + --h4-border-color: var(--theme-rainbow-4); + --h5-border-color: var(--theme-rainbow-5); + --h6-border-color: var(--theme-rainbow-6); + --h1-border-width: 0; + --h2-border-width: 0; + --h3-border-width: 0; + --h4-border-width: 0; + --h5-border-width: 0; + --h6-border-width: 0; + --header-border-line-color: var(--table); + --h1-border-line-color: var(--header-border-line-color); + --h2-border-line-color: var(--header-border-line-color); + --h3-border-line-color: var(--header-border-line-color); + --h4-border-line-color: var(--header-border-line-color); + --h5-border-line-color: var(--header-border-line-color); + --h6-border-line-color: var(--header-border-line-color); + --h1-border-left-color: var(--h1-border-line-color); + --h2-border-left-color: var(--h2-border-line-color); + --h3-border-left-color: var(--h3-border-line-color); + --h4-border-left-color: var(--h4-border-line-color); + --h5-border-left-color: var(--h5-border-line-color); + --h6-border-left-color: var(--h6-border-line-color); + --h1-border-right-color: var(--h1-border-line-color); + --h2-border-right-color: var(--h2-border-line-color); + --h3-border-right-color: var(--h3-border-line-color); + --h4-border-right-color: var(--h4-border-line-color); + --h5-border-right-color: var(--h5-border-line-color); + --h6-border-right-color: var(--h6-border-line-color); + --header-shadow: transparent; + --h1-shadow: var(--header-shadow); + --h2-shadow: var(--header-shadow); + --h3-shadow: var(--header-shadow); + --h4-shadow: var(--header-shadow); + --h5-shadow: var(--header-shadow); + --h6-shadow: var(--header-shadow); + --header-border-line-width: 100%; + --h1-border-line-width: 100%; + --h2-border-line-width: 85%; + --h3-border-line-width: 65%; + --h4-border-line-width: 44%; + --h5-border-line-width: 25%; + --h6-border-line-width: 0; + --header-border-line-left: none; + --header-border-line-height: 4px; + --h1-border-line-height: var(--header-border-line-height); + --h2-border-line-height: var(--header-border-line-height); + --h3-border-line-height: var(--header-border-line-height); + --h4-border-line-height: var(--header-border-line-height); + --h5-border-line-height: var(--header-border-line-height); + --h6-border-line-height: var(--header-border-line-height); + --header-border-line-align: none; + --header-arrow-icon-size: 10px; + --header-arrow-icon-color: var(--collapse-icon-color); +} + +h1, .is-live-preview .HyperMD-header-1 { + box-shadow: var(--h1-shadow); +} +h1::before, h1::after, .is-live-preview .HyperMD-header-1::before, .is-live-preview .HyperMD-header-1::after { + content: ""; + display: block; + background: var(--h1-border-right-color); + width: var(--h1-border-line-width); + height: var(--h1-border-line-height); + margin: var(--header-border-line-align); +} +h1::before, .is-live-preview .HyperMD-header-1::before { + display: var(--header-border-line-left); + background: var(--h1-border-left-color); +} +h1 .heading-collapse-indicator, h1 .cm-fold-indicator.cm-fold-indicator, .is-live-preview .HyperMD-header-1 .heading-collapse-indicator, .is-live-preview .HyperMD-header-1 .cm-fold-indicator.cm-fold-indicator { + position: absolute; +} + +h2, .is-live-preview .HyperMD-header-2 { + box-shadow: var(--h2-shadow); +} +h2::before, h2::after, .is-live-preview .HyperMD-header-2::before, .is-live-preview .HyperMD-header-2::after { + content: ""; + display: block; + background: var(--h2-border-right-color); + width: var(--h2-border-line-width); + height: var(--h2-border-line-height); + margin: var(--header-border-line-align); +} +h2::before, .is-live-preview .HyperMD-header-2::before { + display: var(--header-border-line-left); + background: var(--h2-border-left-color); +} +h2 .heading-collapse-indicator, h2 .cm-fold-indicator.cm-fold-indicator, .is-live-preview .HyperMD-header-2 .heading-collapse-indicator, .is-live-preview .HyperMD-header-2 .cm-fold-indicator.cm-fold-indicator { + position: absolute; +} + +h3, .is-live-preview .HyperMD-header-3 { + box-shadow: var(--h3-shadow); +} +h3::before, h3::after, .is-live-preview .HyperMD-header-3::before, .is-live-preview .HyperMD-header-3::after { + content: ""; + display: block; + background: var(--h3-border-right-color); + width: var(--h3-border-line-width); + height: var(--h3-border-line-height); + margin: var(--header-border-line-align); +} +h3::before, .is-live-preview .HyperMD-header-3::before { + display: var(--header-border-line-left); + background: var(--h3-border-left-color); +} +h3 .heading-collapse-indicator, h3 .cm-fold-indicator.cm-fold-indicator, .is-live-preview .HyperMD-header-3 .heading-collapse-indicator, .is-live-preview .HyperMD-header-3 .cm-fold-indicator.cm-fold-indicator { + position: absolute; +} + +h4, .is-live-preview .HyperMD-header-4 { + box-shadow: var(--h4-shadow); +} +h4::before, h4::after, .is-live-preview .HyperMD-header-4::before, .is-live-preview .HyperMD-header-4::after { + content: ""; + display: block; + background: var(--h4-border-right-color); + width: var(--h4-border-line-width); + height: var(--h4-border-line-height); + margin: var(--header-border-line-align); +} +h4::before, .is-live-preview .HyperMD-header-4::before { + display: var(--header-border-line-left); + background: var(--h4-border-left-color); +} +h4 .heading-collapse-indicator, h4 .cm-fold-indicator.cm-fold-indicator, .is-live-preview .HyperMD-header-4 .heading-collapse-indicator, .is-live-preview .HyperMD-header-4 .cm-fold-indicator.cm-fold-indicator { + position: absolute; +} + +h5, .is-live-preview .HyperMD-header-5 { + box-shadow: var(--h5-shadow); +} +h5::before, h5::after, .is-live-preview .HyperMD-header-5::before, .is-live-preview .HyperMD-header-5::after { + content: ""; + display: block; + background: var(--h5-border-right-color); + width: var(--h5-border-line-width); + height: var(--h5-border-line-height); + margin: var(--header-border-line-align); +} +h5::before, .is-live-preview .HyperMD-header-5::before { + display: var(--header-border-line-left); + background: var(--h5-border-left-color); +} +h5 .heading-collapse-indicator, h5 .cm-fold-indicator.cm-fold-indicator, .is-live-preview .HyperMD-header-5 .heading-collapse-indicator, .is-live-preview .HyperMD-header-5 .cm-fold-indicator.cm-fold-indicator { + position: absolute; +} + +h6, .is-live-preview .HyperMD-header-6 { + box-shadow: var(--h6-shadow); +} +h6::before, h6::after, .is-live-preview .HyperMD-header-6::before, .is-live-preview .HyperMD-header-6::after { + content: ""; + display: block; + background: var(--h6-border-right-color); + width: var(--h6-border-line-width); + height: var(--h6-border-line-height); + margin: var(--header-border-line-align); +} +h6::before, .is-live-preview .HyperMD-header-6::before { + display: var(--header-border-line-left); + background: var(--h6-border-left-color); +} +h6 .heading-collapse-indicator, h6 .cm-fold-indicator.cm-fold-indicator, .is-live-preview .HyperMD-header-6 .heading-collapse-indicator, .is-live-preview .HyperMD-header-6 .cm-fold-indicator.cm-fold-indicator { + position: absolute; +} + +.HyperMD-header.HyperMD-header .cm-fold-indicator .collapse-indicator { + padding-right: 5px; +} + +.HyperMD-header.HyperMD-header .collapse-indicator.collapse-indicator svg, +.view-content :is(h1, h2, h3, h4, h5, h6) .collapse-indicator.collapse-indicator svg { + width: var(--header-arrow-icon-size); + height: var(--header-arrow-icon-size); + color: var(--header-arrow-icon-color); +} + +h1, +.markdown-rendered h1, +.is-live-preview .HyperMD-header-1.cm-line { + display: block; + background: var(--h1-background); + text-align: var(--h1-text-align); + padding: var(--h1-padding); + border: var(--h1-border-width) solid; + border-radius: var(--radius-m); + margin-block-start: var(--heading-spacing-top); + margin-block-end: var(--heading-spacing-bottom); + word-wrap: normal; + word-break: keep-all; +} + +h2, +.markdown-rendered h2, +.is-live-preview .HyperMD-header-2.cm-line { + display: block; + background: var(--h2-background); + text-align: var(--h2-text-align); + padding: var(--h2-padding); + border: var(--h2-border-width) solid; + border-radius: var(--radius-m); + margin-block-start: var(--heading-spacing-top); + margin-block-end: var(--heading-spacing-bottom); + word-wrap: normal; + word-break: keep-all; +} + +h3, +.markdown-rendered h3, +.is-live-preview .HyperMD-header-3.cm-line { + display: block; + background: var(--h3-background); + text-align: var(--h3-text-align); + padding: var(--h3-padding); + border: var(--h3-border-width) solid; + border-radius: var(--radius-m); + margin-block-start: var(--heading-spacing-top); + margin-block-end: var(--heading-spacing-bottom); + word-wrap: normal; + word-break: keep-all; +} + +h4, +.markdown-rendered h4, +.is-live-preview .HyperMD-header-4.cm-line { + display: block; + background: var(--h4-background); + text-align: var(--h4-text-align); + padding: var(--h4-padding); + border: var(--h4-border-width) solid; + border-radius: var(--radius-m); + margin-block-start: var(--heading-spacing-top); + margin-block-end: var(--heading-spacing-bottom); + word-wrap: normal; + word-break: keep-all; +} + +h5, +.markdown-rendered h5, +.is-live-preview .HyperMD-header-5.cm-line { + display: block; + background: var(--h5-background); + text-align: var(--h5-text-align); + padding: var(--h5-padding); + border: var(--h5-border-width) solid; + border-radius: var(--radius-m); + margin-block-start: var(--heading-spacing-top); + margin-block-end: var(--heading-spacing-bottom); + word-wrap: normal; + word-break: keep-all; +} + +h6, +.markdown-rendered h6, +.is-live-preview .HyperMD-header-6.cm-line { + display: block; + background: var(--h6-background); + text-align: var(--h6-text-align); + padding: var(--h6-padding); + border: var(--h6-border-width) solid; + border-radius: var(--radius-m); + margin-block-start: var(--heading-spacing-top); + margin-block-end: var(--heading-spacing-bottom); + word-wrap: normal; + word-break: keep-all; +} + +body { + --pane-background: var(--note); + --font-ligatures: none; +} + +.cm-s-obsidian .CodeMirror-line, +.cm-s-obsidian .cm-line, +.markdown-preview-section { + text-rendering: optimizeLegibility; + font-variant-ligatures: var(--font-ligatures); +} + +.workspace-split.mod-root .view-content { + background-color: var(--pane-background); +} + +body .cm-s-obsidian.markdown-source-view:not(.is-live-preview) { + --tag-background: transparent; + --tag-color: var(--tag-text); + --tag-padding-x: 0; + --tag-size: var(--font-size); + --h1-font: var(--font-default); + --h2-font: var(--font-default); + --h3-font: var(--font-default); + --h4-font: var(--font-default); + --h5-font: var(--font-default); + --h6-font: var(--font-default); + --header-weight: 900; + --h1-weight: var(--header-weight); + --h2-weight: var(--header-weight); + --h3-weight: var(--header-weight); + --h4-weight: var(--header-weight); + --h5-weight: var(--header-weight); + --h6-weight: var(--header-weight); + --h1-size: var(--font-text); + --h2-size: var(--font-text); + --h3-size: var(--font-text); + --h4-size: var(--font-text); + --h5-size: var(--font-text); + --h6-size: var(--font-text); + --p-spacing: 0.25em; + --list-marker-color-collapsed: var(--list-marker-color); + --tag-radius: 0; + --tag-border-radius: 0; + --tag-border-width: 0; +} +body .cm-s-obsidian.markdown-source-view:not(.is-live-preview) .cm-line.HyperMD-codeblock { + padding-left: 5px; +} + +body { + --link-decoration: none; + --link-decoration-hover: none; + --link-external-decoration: none; + --link-unresolved-opacity: 1; + --link-unresolved-color: var(--inactive); + --link-color-hover: var(--lite-accent); + --link-external-color-hover: var(--text-accent-hover); + --link-font: inherit; + --link-external-font: var(--link-font); + --link-weight: inherit; + --link-border: none; + --link-transform: none; + --link-background: transparent; + --link-background-hover: var(--link-background); +} + +.is-live-preview .cm-hmd-internal-link, +.internal-link { + font-family: var(--link-font); +} + +.is-live-preview .cm-underline, +.external-link { + font-family: var(--link-external-font); +} + +a[href^=https], +.internal-link, +.external-link, +.cm-underline { + font-weight: var(--link-weight); + border-bottom: var(--link-border); + text-transform: var(--link-transform); + background-color: var(--link-background); +} +a[href^=https]:hover, +.internal-link:hover, +.external-link:hover, +.cm-underline:hover { + background-color: var(--link-background-hover); +} + +.cm-s-obsidian:not(.is-live-preview) .cm-link, .cm-s-obsidian .cm-line.cm-active .cm-formatting-link + .cm-link.cm-link, .cm-s-obsidian .cm-image-alt-text.cm-link:not(.cm-formatting), .cm-s-obsidian .cm-formatting-link-string.cm-string { + color: var(--text-muted); +} + +/*-External Links-*/ +.external-link { + background-image: url(); + padding-right: unset; +} + +/*Change External Link Symbol*/ +.external-link:after { + content: "\e809"; + font-family: var(--its); + padding-left: 2px; + display: inline-block; + font-size: inherit; + opacity: 0.5; + font-weight: 100 !important; + font-style: normal !important; +} + +.theme-dark, +.theme-light { + --checkbox-size: var(--font-text-size); + --checkbox-color: var(--accent); + --checkbox-color-hover: var(--dark-accent); + --checkbox-border-color: var(--accent); + --checkbox-border-color-hover: var(--dark-accent); + --checklist-done-color: var(--inactive); + --checklist-done-decoration: none; + --checklist-done-weight: 900; + --bullet: ""; + --bullet-font: var(--its); + --list-indent: 25px; + --list-spacing: 1px; + --root-list-spacing: 10px; + --root-list-bullet-spacing: 0; + --list-marker-min-width: 0; + --list-marker-color: var(--accent); + --list-marker-color-other: var(--accent2); + --list-marker-color-collapsed: var(--inactive); + --list-numbered-color: var(--headers); + --list-bullet-size: calc(var(--font-text-size) / 2.5); + --list-bullet-transform: rotate(45deg); + --list-bullet-radius: var(--radius-h); + --list-bullet-box-shadow-color: var(--table); + --collapse-icon-color-collapsed: var(--inactive); + --indentation-guide-color: var(--lines); + --indentation-guide-width: 2px; + --indentation-guide-color-active: var(--accent); + --indentation-guide-editing-indent: 1px; + --list-color-1: var(--indentation-guide-color); + --list-color-2: var(--indentation-guide-color); + --list-color-3: var(--indentation-guide-color); + --list-color-4: var(--indentation-guide-color); + --list-color-5: var(--indentation-guide-color); + --list-color-6: var(--indentation-guide-color); +} + +ul, ol { + display: flow-root; +} + +.markdown-rendered ul, .markdown-rendered ol { + margin-block-start: var(--root-list-spacing); + margin-block-end: var(--root-list-spacing); +} +.markdown-rendered ul ul, .markdown-rendered ul ol, .markdown-rendered ol ul, .markdown-rendered ol ol { + margin-block-start: 0; + margin-block-end: 0; +} + +body:not(.list-default-bullet) .list-bullet::after, body:not(.list-default-bullet) .list-bullet::before { + display: none; +} +body:not(.list-default-bullet) ul > li:not(.task-list-item)::marker { + margin-right: -10px; +} +body:not(.list-default-bullet) .is-live-preview .cm-formatting-list-ul::before, body:not(.list-default-bullet) ul > li:not(.task-list-item)::before { + content: var(--bullet); + font-family: var(--bullet-font); + font-size: var(--font-text-size); + font-weight: 100; + color: var(--list-marker-color); + background-color: transparent; + transform: unset; + position: unset; + height: unset; +} +body:not(.list-default-bullet) ul > li:not(.task-list-item)::marker, body:not(.list-default-bullet) .is-live-preview .cm-formatting-list-ul { + color: transparent; +} + +ul > li:not(.task-list-item)::before { + float: left; + margin-left: -21px; + margin-right: 7px; +} + +.cm-formatting-list-ol, .cm-formatting-list-ul { + padding-inline-start: var(--root-list-bullet-spacing); +} + +.is-live-preview .cm-formatting-list-ul { + font-family: var(--font-monospace); +} +.is-live-preview .cm-formatting-list-ul::before { + margin-right: -15px; + margin-left: -5px; +} + +.markdown-source-view.mod-cm6 .task-list-label .task-list-item-checkbox { + margin: 0; +} + +.markdown-preview-view .task-list-item-checkbox { + margin-right: 8px; +} + +ul > li.task-list-item.task-list-item .task-list-item-checkbox { + margin-inline-start: calc(var(--checkbox-size) * -1.4); +} + +ol > li::marker, +.cm-line .cm-formatting-list-ol { + color: var(--list-numbered-color); +} + +:is(ul, ol) > li, +.cm-hmd-list-indent .cm-indent:nth-child(1)::before { + --indentation-guide-color: var(--list-color-1); +} + +:is(ul ul, ol ol) > li, +.cm-hmd-list-indent .cm-indent:nth-child(2)::before { + --indentation-guide-color: var(--list-color-2); +} + +:is(ul ul ul, ol ol ol) > li, +.cm-hmd-list-indent .cm-indent:nth-child(3)::before { + --indentation-guide-color: var(--list-color-3); +} + +:is(ul ul ul ul, ol ol ol ol) > li, +.cm-hmd-list-indent .cm-indent:nth-child(4)::before { + --indentation-guide-color: var(--list-color-4); +} + +:is(ul ul ul ul ul, ol ol ol ol ol) > li, +.cm-hmd-list-indent .cm-indent:nth-child(5)::before { + --indentation-guide-color: var(--list-color-5); +} + +:is(ul ul ul ul ul ul, ol ol ol ol ol ol) > li, +.cm-hmd-list-indent .cm-indent:nth-child(6)::before { + --indentation-guide-color: var(--list-color-6); +} + +:is(ul, ol) li:not(:first-of-type) p:first-of-type { + margin-block-start: var(--p-spacing); +} + +:is(.markdown-source-view, .markdown-rendered) :is(ul, ol) li { + padding-top: unset; + padding-bottom: var(--list-spacing); + margin-block-start: var(--list-spacing); +} + +li.is-collapsed .list-bullet:after, +.is-collapsed ~ .cm-formatting-list .list-bullet:after { + box-shadow: 0 0 0 4px var(--list-bullet-box-shadow-color); +} + +/*List Arrows*/ +.markdown-rendered .list-collapse-indicator { + margin-inline-start: -2.2em; + padding-inline-end: 0; +} + +.markdown-source-view.mod-cm6 .cm-line.cm-line:not(.HyperMD-header):not(.HyperMD-task-line) .cm-fold-indicator .collapse-indicator { + right: 0.5rem; + padding-right: 0; +} + +.theme-dark, +.theme-light { + --table-header-weight: var(--font-bold); + --table-header-size: var(--font-text); + --table-header-color: var(--th-text); + --table-header-text-color: var(--lite-accent); + --table-header-background: var(--th); + --table-header-background-hover: var(--accent); + --table-border-color: var(--note); + --table-column-alt-background: var(--td); + --table-row-alt-background: var(--td); + --table-row-background-hover: var(--highlight); + --table-row-alt-background-hover: var(--highlight); + --table-row-edit-font-size: var(--font-small); + --table-add-button-background: var(--bttn); + --table-add-button-color: var(--text-dl); + --table-add-button-size: var(--size-4-6); + --table-add-button-col-width: var(--table-add-button-size); + --table-add-button-row-height: var(--table-add-button-size); + --table-add-button-border-color: var(--note); + --table-cell-padding-x: var(--size-4-2); + --table-cell-padding-y: var(--size-2-2); + --table-header-padding-x: var(--size-4-2); + --table-header-padding-y: var(--size-2-2); + --table-column-min-width: 3ch; + --table-selection-border-radius: var(--radius-s); +} + +.cm-s-obsidian .HyperMD-table-row-0 { + color: var(--table-header-text-color); +} + +body:not(.table-unwrap) .cm-s-obsidian .HyperMD-table-row.HyperMD-table-row { + min-width: min-content; + white-space: pre-wrap; +} + +.markdown-rendered table td { + word-break: normal; +} + +.is-live-preview .cm-table-widget table { + margin-block-start: 0; + margin-block-end: 0; +} + +.cm-s-obsidian .HyperMD-table-row { + font-size: var(--table-row-edit-font-size); +} + +.markdown-rendered th { + padding: var(--table-header-padding-y) var(--table-header-padding-x); +} +.markdown-rendered td { + padding: var(--table-cell-padding-y) var(--table-cell-padding-x); +} +.markdown-rendered table th { + --latex-color: var(--table-header-color); +} + +.markdown-source-view.mod-cm6 .cm-table-widget { + padding: var(--table-add-button-size); + padding-top: var(--size-4-4); +} +.markdown-source-view.mod-cm6 .cm-table-widget .table-col-btn, .markdown-source-view.mod-cm6 .cm-table-widget .table-row-btn { + color: var(--table-add-button-color); +} +.markdown-source-view.mod-cm6 .cm-table-widget .table-col-btn { + width: var(--table-add-button-col-width); +} +.markdown-source-view.mod-cm6 .cm-table-widget .table-row-btn { + height: var(--table-add-button-row-height); +} + +.markdown-rendered table thead tr > th:first-child { + border-top-left-radius: var(--radius-s); +} +.markdown-rendered table thead tr > th:last-child { + border-top-right-radius: var(--radius-s); +} +.markdown-rendered table tbody tr:last-child > td:last-child { + border-bottom-right-radius: var(--radius-s); +} +.markdown-rendered table tbody tr:last-child > td:first-child { + border-bottom-left-radius: var(--radius-s); +} + +.theme-dark, +.theme-light { + --tag-color: var(--text-dl); + --tag-color-hover: var(--text-dl); + --tag-background: var(--tag); + --tag-background-hover: var(--accent); + --tag-border-color: var(--tag); + --tag-border-color-hover: var(--accent); + --tag-decoration-hover: underline; + --tag-font: var(--font-default); + --tag-font-weight: inherit; +} + +a.tag, +.cm-hashtag { + font-family: var(--tag-font); + font-weight: var(--tag-font-weight); +} + +body { + --embed-block-shadow-hover: inset 0 0 0 2px var(--outline); + --embed-padding: 0 10px 0 24px; + --embed-header-size: 18px; + --embed-title-padding: 5px 24px; + --embed-title-align: center; + --embed-title-white-space: wrap; + --embed-title-overflow: unset; + --embed-thickness: 2px; + --embed-border-type: solid; + --embed-border: var(--embed-thickness) var(--embed-border-type) var(--embed-border-color); + --embed-border-color: transparent; + --embed-border-left-color: var(--headers); + --embed-border-right-color: var(--embed-border-color); + --embed-border-top-color: var(--embed-border-color); + --embed-border-bottom-color: var(--embed-border-color); + --embed-border-left: 2px solid var(--embed-border-left-color); + --embed-border-right: 2px solid var(--embed-border-right-color); + --embed-border-top: 2px solid var(--embed-border-top-color); + --embed-border-bottom: 2px solid var(--embed-border-bottom-color); + --embed-border-color-hover: var(--outline); + --embed-border-left-color-hover: var(--embed-border-left-color); + --embed-border-right-color-hover: var(--embed-border-color-hover); + --embed-border-top-color-hover: var(--embed-border-color-hover); + --embed-border-bottom-color-hover: var(--embed-border-color-hover); +} + +.markdown-embed, +.internal-embed:not(.image-embed) { + display: flow-root; +} + +.markdown-embed.markdown-embed:hover { + --embed-border-left: var(--embed-thickness) var(--embed-border-type) var(--embed-border-left-color-hover); + --embed-border-right: var(--embed-thickness) var(--embed-border-type) var(--embed-border-right-color-hover); + --embed-border-top: var(--embed-thickness) var(--embed-border-type) var(--embed-border-top-color-hover); + --embed-border-bottom: var(--embed-thickness) var(--embed-border-type) var(--embed-border-bottom-color-hover); +} + +.markdown-embed-title { + padding: var(--embed-title-padding); + text-align: var(--embed-title-align); + white-space: var(--embed-title-white-space); + text-overflow: var(--embed-title-overflow); +} + +.markdown-embed:not(.canvas-node-content) { + padding: 0; +} +.markdown-embed:not(.canvas-node-content) .markdown-embed-content { + padding: var(--embed-padding); +} + +.markdown-embed-content > .markdown-preview-view > .markdown-preview-sizer { + min-height: unset !important; +} + +.markdown-embed.markdown-embed hr { + margin: 1.5em 0; +} + +.markdown-embed-link { + top: 8px; + right: var(--scrollbar-width); +} + +.markdown-embed .markdown-rendered ol:has(li:nth-child(10)) { + --list-indent: 30px; +} +.markdown-embed .markdown-rendered ol:has(li:nth-child(100)) { + --list-indent: 40px; +} + +.file-embed { + background-color: var(--outer-bar); +} + +body { + --code-background: var(--code-bg); + --code-normal: var(--code-text); + --code-shadow: 0 2px 0 var(--outline); +} + +.cm-s-obsidian div.HyperMD-codeblock.HyperMD-codeblock-begin-bg { + padding-top: 6px; +} + +.cm-s-obsidian span.cm-inline-code, +.markdown-rendered pre { + box-shadow: var(--code-shadow); +} + +.cm-s-obsidian div.HyperMD-codeblock-begin-bg { + border-top-left-radius: var(--radius-s); + border-top-right-radius: var(--radius-s); +} + +.cm-s-obsidian div.HyperMD-codeblock-end-bg { + border-bottom-left-radius: var(--radius-s); + border-bottom-right-radius: var(--radius-s); +} + +body { + --comment-font: var(--font-monospace); + --code-comment: var(--text-faint); +} + +.cm-s-obsidian span.cm-comment { + font-family: var(--comment-font); +} + +body { + --hr-icon-symbol: ""; + --hr-icon-font: var(--its); + --hr-icon-background: transparent; + --hr-icon-padding-x: 4px; + --hr-icon-color: var(--headers); + --hr-color: var(--hr); + --hr-thickness: 2px; + --hr-width: auto; + --hr-alignment: -50%, -50%; + --hr-text-offset: 12px; +} + +/*Stylized HR/Horizontal Line*/ +.hr.cm-line:not(.cm-active), +.markdown-rendered hr { + margin-left: auto; + margin-right: auto; + width: var(--hr-width); +} +.hr.cm-line:not(.cm-active)::after, +.markdown-rendered hr::after { + content: var(--hr-icon-symbol); + font-family: var(--hr-icon-font); + font-size: var(--font-text-size); + display: inline-block; + position: absolute; + left: 50%; + transform: translate(var(--hr-alignment)) rotate(0deg); + transform-origin: 50% 50%; + color: transparent; + text-shadow: 0 0 0 var(--hr-icon-color); + padding: 0 var(--hr-icon-padding-x); + background-color: var(--hr-icon-background); +} + +.hr.cm-line { + border-top: var(--hr-thickness) solid var(--hr); + --hr-color: transparent; +} + +.markdown-source-view.mod-cm6 .cm-content :is(.hr, .HyperMD-hr) { + contain: style !important; +} + +:is(.mod-left-split, .mod-right-split) { + --hr-icon-background: var(--side-bar); +} + +body { + --blockquote-border-thickness: 7px; + --blockquote-border-color: var(--bg); + --blockquote-style: normal; + --blockquote-padding: var(--size-4-3) var(--size-4-6); + --blockquote-padding-lp: 7px 20px; + --blockquote-background-color: var(--embed-bg); +} + +.markdown-rendered blockquote { + background: var(--blockquote-background-color); + display: flow-root; +} + +.is-live-preview .HyperMD-quote.HyperMD-quote.HyperMD-quote { + border-left: var(--blockquote-border-thickness) solid var(--blockquote-border-color); + padding: var(--blockquote-padding-lp); +} +.is-live-preview .HyperMD-quote.HyperMD-quote.HyperMD-quote::before { + display: none; +} +.is-live-preview .HyperMD-quote.HyperMD-quote.HyperMD-quote + .HyperMD-quote { + padding-top: 0; +} + +.markdown-rendered blockquote, +.markdown-rendered div div > blockquote { + padding: var(--blockquote-padding); +} + +.markdown-rendered blockquote blockquote { + padding: 0 0 0 var(--size-4-3); +} + +.markdown-rendered blockquote blockquote, +.cm-blockquote-border.cm-transparent::before { + --blockquote-border-thickness: 2px; + --blockquote-border-color: var(--accent); +} + +.markdown-rendered blockquote { + border-top-right-radius: var(--radius-s); + border-bottom-right-radius: var(--radius-s); +} + +body { + --callout-margin: 5px 0; + --callout-padding: var(--size-4-3) var(--size-4-4); +} + +.callout.callout.callout { + --callout-blend-mode: normal; + margin: var(--callout-margin); +} + +.callout .callout { + --callout-margin: 0; +} + +.callout-icon { + align-self: center; +} + +body { + --strikethrough-color: inherit; + --strikethrough-line-color: inherit; + --strikethrough-line-thickness: 1px; +} + +del, +.cm-strikethrough { + color: var(--strikethrough-color); + text-decoration-thickness: var(--strikethrough-line-thickness); + text-decoration-color: var(--strikethrough-line-color); +} + +.cm-s-obsidian .cm-tag { + font-family: var(--font-monospace); +} + +:is(.markdown-preview-view, +.markdown-rendered, +.markdown-source-view.is-live-preview.is-live-preview) progress::-webkit-progress-bar { + background-color: var(--progress-bg); + box-shadow: none; + border-radius: var(--radius-s); +} +:is(.markdown-preview-view, +.markdown-rendered, +.markdown-source-view.is-live-preview.is-live-preview) progress::-webkit-progress-value { + background-color: var(--progress); +} + +/* Tag Pane */ +.tag-container { + padding: 0; + --nav-item-children-margin-left: 12px; +} +.tag-container .tree-item-self { + align-items: center; +} +.tag-container .tree-item-children { + padding: 0; +} + +.tag-pane-tag .tree-item-inner > .tree-item-inner-text::before, +.tag-pane-tag-text:before { + content: "#"; + padding-right: 5px; + margin-left: 1px; + position: relative; + color: var(--tag-text); + width: var(--size-4-4); +} + +.tag-pane-tag.tag-pane-tag:hover .tree-item-inner-text::before, +.tag-container .tree-item-self:hover .tag-pane-tag-text:before { + color: var(--text-dl); +} + +.tag-pane-tag .collapse-icon + .tree-item-inner > .tree-item-inner-text:before { + content: none; + padding-left: 2px; + color: var(--tag-text); +} + +body { + --outline-symbol: "H"; + --outline-symbol-padding-right: 4px; + --outline-arrow-visibility: hidden; + --outline-arrow-display: none; + --outline-arrow-margin: -16px; +} + +body .outline, +body [data-type=outline] { + --nav-item-children-margin-left: 12px; +} +body .outline .tree-item-children, +body [data-type=outline] .tree-item-children { + transition: all 0.3s ease-in-out; +} +body .outline .collapse-icon svg, +body [data-type=outline] .collapse-icon svg { + visibility: var(--outline-arrow-visibility); +} +body .outline .tree-item:not(.is-collapsed) > .mod-collapsible .tree-item-icon.collapse-icon, +body [data-type=outline] .tree-item:not(.is-collapsed) > .mod-collapsible .tree-item-icon.collapse-icon { + margin-left: var(--outline-arrow-margin); +} +body .outline .tree-item-self::before, +body [data-type=outline] .tree-item-self::before { + content: var(--outline-symbol); + font-family: var(--font-default); + font-weight: 900; + color: var(--headers); + padding-right: var(--outline-symbol-padding-right); +} +body .outline .tree-item-self:hover::before, +body [data-type=outline] .tree-item-self:hover::before { + color: var(--text-dl); +} +body .outline .tree-item.is-collapsed .collapse-icon svg, +body [data-type=outline] .tree-item.is-collapsed .collapse-icon svg { + visibility: visible; +} +body .outline .tree-item.is-collapsed .tree-item-self::before, +body [data-type=outline] .tree-item.is-collapsed .tree-item-self::before { + display: none; +} + +.is-mobile .outline, +.is-mobile [data-type=outline] { + --nav-item-children-margin-left: 28px; + --nav-item-children-padding-left: 0; +} + +.hide-outline-heading [data-type=outline] { + --outline-symbol: ""; + --outline-arrow-visibility: visible; + --outline-arrow-margin: -3px; + --outline-symbol-padding-right: 0; +} + +body { + --popover-width: 650px; + --popover-font-size: var(--font-size); + --popover-max-height: 600px; + --popover-border: 3px solid var(--outline); +} + +.popover.hover-popover { + border: var(--popover-border); + box-shadow: var(--shadow-l); +} + +.backlink-pane, +.outgoing-link-pane { + padding: var(--size-4-3); +} +.backlink-pane > .tree-item-self, +.outgoing-link-pane > .tree-item-self { + text-align: center; + background-color: var(--code-bg); + margin-bottom: 10px; + padding: 4px 6px; + box-shadow: 0 4px 0 var(--outline); +} + +.embedded-backlinks { + clear: both; +} + +.outgoing-link-item { + align-items: center; +} +.outgoing-link-item .tree-item-inner { + font-size: var(--font-ui-medium); +} +.outgoing-link-item .tree-item-inner-subtext { + font-size: var(--font-ui-smaller); +} +.outgoing-link-item:nth-child(odd):not(:hover) { + background-color: var(--td); +} + +body { + --graph-controls-section-header-padding: var(--nav-item-parent-padding); + --graph-background: var(--graph-bg); + --graph-text: var(--text-normal); + --graph-arrow: var(--soft-text); + --graph-line: var(--graph-lines); + --graph-line-hover: var(--accent); + --graph-node: var(--headers); + --graph-node-focused: var(--graph-focused); + --graph-node-hover-outline: var(--text-dl); + --graph-node-hover-fill: var(--graph-fill); + --graph-node-tag: var(--graph-tag); + --graph-node-attachment: var(--graph-img); + --graph-node-unresolved: var(--graph-404); +} + +.workspace-leaf-content[data-type=graph] .view-content { + background-color: var(--graph-background); +} + +.graph-view.color-circle { + color: var(--graph-node-hover-outline); +} +.graph-view.color-line-highlight { + color: var(--graph-line-hover); +} +.graph-view.color-fill-highlight { + color: var(--graph-node-hover-fill); +} +.graph-view.color-arrow { + color: var(--graph-arrow); +} + +.graph-controls { + --nav-item-color-hover: var(--text); +} + +.graph-control-section { + padding: 0; + border-bottom-color: var(--table); +} +.graph-control-section > .tree-item-self { + padding: var(--size-4-2) var(--size-4-2); +} +.graph-control-section:not(.is-collapsed) > .tree-item-self { + font-weight: 900; + border-bottom: 2px solid var(--accent); +} +.graph-control-section .graph-control-section-header { + font-size: var(--font-ui-medium); +} +.graph-control-section .setting-item:not(.setting-item-heading) { + padding: 0.5em 0.8em; +} +.graph-control-section .graph-color-groups-container { + padding: 8px 12px; +} +.graph-control-section .graph-color-button-container { + padding: 0 12px; +} +.graph-control-section .graph-color-button-container button { + margin-top: 0; +} + +.mermaid rect:not([style]) { + fill: var(--embed-bg) !important; + stroke: var(--inactive) !important; + stroke-width: 1px; +} +.mermaid .classLabel .label { + fill: var(--inactive) !important; +} +.mermaid g.classGroup line { + stroke: var(--table) !important; +} +.mermaid .active0 { + fill: var(--accent2) !important; +} +.mermaid .done0 { + fill: var(--accent2-lite) !important; + stroke: var(--inactive) !important; +} +.mermaid .doneText, .mermaid .taskTextOutside0 { + fill: var(--text) !important; +} +.mermaid .exclude-range { + fill: var(--inactive) !important; +} +.mermaid line { + stroke: var(--text-faint) !important; +} +.mermaid .noteText > tspan { + fill: var(--footnote) !important; +} +.mermaid .entityBox { + fill: var(--bg) !important; + stroke: var(--table) !important; +} +.mermaid .attributeBoxEven { + fill: var(--note) !important; +} +.mermaid .attributeBoxOdd { + fill: var(--dark-accent) !important; +} +.mermaid .node-label { + stroke: white !important; +} +.mermaid .face { + stroke: var(--text) !important; +} + +/*-- Publish Settings --*/ +.publish-upload-item .flair { + background-color: var(--interactive-normal); + color: var(--text); +} + +.publish-upload-item-title { + color: var(--text); + font-weight: 600; +} + +.publish-change-list .tree-item-children { + --nav-item-children-margin-left: 12px; +} +.publish-change-list .file-tree-item-checkbox { + --checkbox-border-color-hover: var(--text); +} +.publish-change-list .tree-item-self.mod-file { + margin-left: 16px; +} + +.internal-query { + background: var(--note); + border: 3px solid var(--outline); +} +.internal-query .internal-query-header { + background-color: var(--code-bg); + box-shadow: 0 2px 0 var(--td); + padding: 5px; +} +.internal-query .internal-query-header-title { + font-size: var(--font-smallest); + font-weight: 600; + line-height: 18px; + color: var(--soft-text); +} +.internal-query .search-result-container { + padding: 0 7px; + border: 0; +} +.internal-query .search-results-children .tree-item { + background: var(--note); + margin: 10px 0; +} +.internal-query .search-result-file-match { + width: 100%; +} +.internal-query .search-empty-state { + color: var(--text-error); + font-family: var(--font-monospace); + text-align: center; + margin: 10px; +} + +body { + --slide-background: var(--note); + --r-heading-color: var(--headers); + --r-heading-font: var(--font); + --r-heading-text-transform: capitalize; + --r-heading-font-weight: var(--header-weight); + --r-main-font: var(--font-default); + --r-progress-color: var(--lite-accent); +} + +.reveal { + --h1-border-line-width: 100%; + --h2-border-line-width: 100%; + --h3-border-line-width: 100%; + --h4-border-line-width: 100%; + --h5-border-line-width: 100%; + --h6-border-line-width: 100%; +} + +.slides-container, +.reveal-viewport { + background-color: var(--slide-background); +} + +.reveal { + color: var(--text); + font-size: calc(var(--font-text-size) + 0.7em); +} +.reveal code { + color: var(--code-text); + background: var(--code-bg); + padding: 4px; + font-family: var(--font-monospace); + box-shadow: var(--code-shadow); +} +.reveal button { + --input-shadow: none; + --input-shadow-hover: none; +} +.reveal .progress { + color: var(--r-progress-color); +} +.reveal img { + margin: 5px; +} +.reveal table :is(td, th) { + border-color: var(--table); +} +.reveal li::marker { + --list-marker-color: transparent; +} + +.bookmark + .tree-item-children { + --nav-item-children-margin-left: 12px; + --nav-item-children-padding-left: 4px; +} +.bookmark.tree-item-self.mod-collapsible { + --nav-item-weight: 900; +} +.bookmark.tree-item-self { + gap: 4px; + padding: var(--explorer-item-padding); +} +.bookmark.tree-item-self > .tree-item-icon { + margin-left: -7px; +} + +.workspace-leaf-content[data-type=bookmarks] .view-content { + padding: 0 var(--size-4-2); +} + +/* .bookmark.tree-item-self { padding: var(--explorer-item-padding); } */ +body { + --canvas-node-padding: 0 7px; + --canvas-color-opacity: 0.07; +} + +body.theme-dark { + --canvas-color: 88, 100, 159; +} + +body.theme-light { + --canvas-color: 166, 180, 204; +} + +.canvas-control-group, +.canvas-control-item { + border-width: 2px; + border-color: var(--outline); +} + +.canvas-control-item { + background-color: var(--note); +} + +.canvas-card-menu { + border: var(--box-border); +} + +.canvas-node.is-themed .canvas-node-content { + background-color: rgba(var(--canvas-color), var(--canvas-color-opacity)); +} + +.theme-dark .canvas-minimap rect.is-themed, .theme-dark .canvas-minimap rect { + fill-opacity: var(--canvas-color-opacity); +} +.theme-dark .canvas-minimap path, .theme-dark .canvas-minimap path.is-themed { + stroke: rgba(var(--canvas-color), calc(var(--canvas-color-opacity) + 0.5)); +} + +.canvas-node-placeholder { + line-height: var(--line-height-tight); +} + +.canvas-node-connection-point::after { + border-color: rgb(var(--canvas-color)); +} + +body { + --metadata-property-radius: var(--radius-s); + --metadata-title-align: center; + --metadata-title-size: var(--font-text-size); + --metadata-title-color: var(--text-muted); + --metadata-title-weight: 900; + --metadata-title-icon: ""; + --metadata-title-icon-font: var(--its); + --metadata-title-icon-padding: 5px; + --metadata-remove-color: var(--accent-text); + --metadata-remove-color-hover: var(--text-dl); + --metadata-icon-color: var(--icon-color); + --metadata-button-text-color: var(--inactive); + --metadata-input-background: transparent; + --metadata-label-background-active: var(--td); + --metadata-input-background-active: var(--td); +} + +.metadata-properties-heading { + display: block; +} + +.metadata-properties-title { + font-size: var(--metadata-title-size); + color: var(--metadata-title-color); + text-align: var(--metadata-title-align); + font-weight: var(--metadata-title-weight); + margin-bottom: 5px; +} +.metadata-properties-title::before { + content: var(--metadata-title-icon); + font-family: var(--metadata-title-icon-font); + margin-right: var(--metadata-title-icon-padding); + font-weight: 100; +} + +.metadata-property-icon { + color: var(--metadata-icon-color); +} + +.metadata-add-button:not(:hover) { + color: var(--metadata-button-text-color); +} +.metadata-add-button.metadata-add-button { + margin-top: 0; +} + +.metadata-property:focus-within { + --metadata-property-background-hover: var(--td); +} + +.metadata-property[data-property-key=tags] .multi-select-pill { + padding: var(--tag-padding-y) var(--tag-padding-x); + gap: 0; +} + +.metadata-property[data-property-key=tags] .multi-select-pill-remove-button { + color: var(--metadata-remove-color); + margin-right: 0; +} +.metadata-property[data-property-key=tags] .multi-select-pill-remove-button:hover { + color: var(--metadata-remove-color-hover); +} + +.multi-select-pill-content { + margin-left: 0; +} + +.metadata-property:not([data-property-key=tags]) .multi-select-container .multi-select-pill:not(:nth-last-child(2))::after { + content: ","; +} + +.multi-select-container { + vertical-align: unset; +} + +@container (width < 380px) { + .metadata-property[data-property-type=multitext] { + flex-wrap: unset; + } +} +@container (width < 280px) { + .metadata-property[data-property-type] { + flex-wrap: wrap; + } + + .metadata-property { + border-bottom: var(--metadata-divider-width) solid var(--metadata-divider-color); + } + .metadata-property > * { + --metadata-divider-width: 0; + } +} +.workspace-split:not(.mod-root) .metadata-container { + --metadata-divider-width: 0; +} + +body { + --style-settings-heading-border-top-color: transparent; + --style-settings-heading-border-bottom-color: transparent; + --style-settings-border-top-color: transparent; + --style-settings-border-bottom-color: transparent; + --style-settings-background-color: transparent; + --style-settings-heading-background-hover: var(--dark-accent); + --style-settings-heading-color: var(--text-dl); + --style-settings-heading-color-hover: var(--text-dl); +} + +.style-settings-heading .setting-item-name { + font-weight: 900; + font-size: var(--font-ui-medium); +} + +.style-settings-container, +[data-type=style-settings] { + --setting-item-heading-border: transparent; +} +.style-settings-container .setting-item.setting-item, +[data-type=style-settings] .setting-item.setting-item { + padding: 8px 15px; + margin-top: 0; +} +.style-settings-container .setting-item-heading.setting-item-heading:not(.is-collapsed), +[data-type=style-settings] .setting-item-heading.setting-item-heading:not(.is-collapsed) { + --icon-color: var(--text-dl); +} +.style-settings-container .setting-item-heading.setting-item-heading:not(.is-collapsed):not(:hover) .setting-item-name, .style-settings-container .setting-item-heading.setting-item-heading:not(.is-collapsed):not(:hover) .style-settings-collapse-indicator, +[data-type=style-settings] .setting-item-heading.setting-item-heading:not(.is-collapsed):not(:hover) .setting-item-name, +[data-type=style-settings] .setting-item-heading.setting-item-heading:not(.is-collapsed):not(:hover) .style-settings-collapse-indicator { + color: var(--text-dl); +} +.style-settings-container .setting-item-heading.setting-item-heading:not(.is-collapsed):hover, +[data-type=style-settings] .setting-item-heading.setting-item-heading:not(.is-collapsed):hover { + background-color: var(--style-settings-heading-background-hover); + --style-settings-heading-border-bottom-color: var(--style-settings-heading-border-top-color); +} +.style-settings-container .setting-item-heading.setting-item-heading:not(.is-collapsed):hover .setting-item-description, .style-settings-container .setting-item-heading.setting-item-heading:not(.is-collapsed):hover .setting-item-name, .style-settings-container .setting-item-heading.setting-item-heading:not(.is-collapsed):hover .style-settings-collapse-indicator, .style-settings-container .setting-item-heading.setting-item-heading:not(.is-collapsed):hover .clickable-icon, +[data-type=style-settings] .setting-item-heading.setting-item-heading:not(.is-collapsed):hover .setting-item-description, +[data-type=style-settings] .setting-item-heading.setting-item-heading:not(.is-collapsed):hover .setting-item-name, +[data-type=style-settings] .setting-item-heading.setting-item-heading:not(.is-collapsed):hover .style-settings-collapse-indicator, +[data-type=style-settings] .setting-item-heading.setting-item-heading:not(.is-collapsed):hover .clickable-icon { + color: var(--text-dl); +} + +.view-content .style-settings-container .setting-item:not(.setting-item-heading) { + flex-direction: row; + align-items: center; +} +.view-content .style-settings-container .setting-item:not(.setting-item-heading) .setting-item-control { + padding-top: 0; +} + +.workspace-leaf-content[data-type=style-settings] .view-content { + padding: 20px; +} + +.themed-color-wrapper > div { + border-radius: var(--radius-s); +} + +.style-settings-filter-result-count { + color: var(--text); + opacity: 0.7; + font-weight: 500; +} + +.style-settings-container .style-settings-heading { + background-color: var(--style-settings-background-color); + border-top: 2px solid var(--style-settings-heading-border-top-color); + border-bottom: 2px solid var(--style-settings-heading-border-bottom-color); + margin-bottom: 0; +} +.style-settings-container .style-settings-heading:not(.is-collapsed) .setting-item-description { + color: var(--text-dl); +} + +.style-settings-container { + border: 2px solid var(--style-settings-border-bottom-color); + border-top: 0; + padding: 0; + padding-bottom: 10px; +} + +.style-settings-heading.style-settings-heading[data-level="0"] { + --setting-item-heading-border: 2px solid var(--table); + margin-bottom: 0; + padding: 12px 15px; + margin-top: 0; +} + +.style-settings-heading[data-level="0"]:not(.is-collapsed) { + --setting-item-heading-border: 2px solid var(--accent); + background-color: var(--deep-dark-accent); +} +.style-settings-heading[data-level="0"]:not(.is-collapsed) .setting-item-name, .style-settings-heading[data-level="0"]:not(.is-collapsed) .style-settings-collapse-indicator { + color: var(--text-dl); +} + +.style-settings-heading[data-level="0"] + .style-settings-container { + border: 2px solid var(--outline); + border-top: 0; +} + +.style-settings-heading[data-level="0"] + .style-settings-container { + padding-left: 0; +} +.style-settings-heading[data-level="0"] + .style-settings-container .style-settings-collapse-indicator { + margin: 0; +} + +.setting-item-heading[data-level="1"]:not(.is-collapsed) { + --style-settings-heading-border-top-color: var(--theme-rainbow-1); + --style-settings-background-color: var(--theme-rainbow-1); + --setting-item-heading-background: var(--theme-rainbow-1); +} + +.style-settings-heading[data-level="1"] + .style-settings-container { + --style-settings-border-bottom-color: var(--theme-rainbow-1); +} + +.setting-item-heading[data-level="2"]:not(.is-collapsed) { + --style-settings-heading-border-top-color: var(--theme-rainbow-2); + --style-settings-background-color: var(--theme-rainbow-2); + --setting-item-heading-background: var(--theme-rainbow-2); +} + +.style-settings-heading[data-level="2"] + .style-settings-container { + --style-settings-border-bottom-color: var(--theme-rainbow-2); +} + +.setting-item-heading[data-level="3"]:not(.is-collapsed) { + --style-settings-heading-border-top-color: var(--theme-rainbow-3); + --style-settings-background-color: var(--theme-rainbow-3); + --setting-item-heading-background: var(--theme-rainbow-3); +} + +.style-settings-heading[data-level="3"] + .style-settings-container { + --style-settings-border-bottom-color: var(--theme-rainbow-3); +} + +.setting-item-heading[data-level="4"]:not(.is-collapsed) { + --style-settings-heading-border-top-color: var(--theme-rainbow-4); + --style-settings-background-color: var(--theme-rainbow-4); + --setting-item-heading-background: var(--theme-rainbow-4); +} + +.style-settings-heading[data-level="4"] + .style-settings-container { + --style-settings-border-bottom-color: var(--theme-rainbow-4); +} + +.setting-item-heading[data-level="5"]:not(.is-collapsed) { + --style-settings-heading-border-top-color: var(--theme-rainbow-5); + --style-settings-background-color: var(--theme-rainbow-5); + --setting-item-heading-background: var(--theme-rainbow-5); +} + +.style-settings-heading[data-level="5"] + .style-settings-container { + --style-settings-border-bottom-color: var(--theme-rainbow-5); +} + +.setting-item-heading[data-level="6"]:not(.is-collapsed) { + --style-settings-heading-border-top-color: var(--theme-rainbow-6); + --style-settings-background-color: var(--theme-rainbow-6); + --setting-item-heading-background: var(--theme-rainbow-6); +} + +.style-settings-heading[data-level="6"] + .style-settings-container { + --style-settings-border-bottom-color: var(--theme-rainbow-6); +} + +.style-settings-heading .style-settings-collapse-indicator::after { + font-family: var(--its); + padding-left: 10px; + font-weight: 100; +} + +.style-settings-heading:not([data-level="0"]) .style-settings-collapse-indicator { + padding-right: 7px; +} + +.style-settings-heading[data-id=ITS] .style-settings-collapse-indicator::after { + content: "\e817"; +} + +.style-settings-heading[data-id=Text-CSS] .style-settings-collapse-indicator::after { + content: "\e80d"; +} + +.style-settings-heading[data-id=ITS-Workspace] .style-settings-collapse-indicator::after { + content: "\e805"; +} + +.style-settings-heading[data-id=ITS-Note] .style-settings-collapse-indicator::after { + content: "\e804"; +} + +.style-settings-heading[data-id=ITS-Colors] .style-settings-collapse-indicator::after { + content: "\ec10"; +} + +.style-settings-heading[data-id=ITS-Plugins] .style-settings-collapse-indicator::after { + content: "\ec06"; +} + +.style-settings-heading[data-id=ITS-Alt-Color-Scheme] .style-settings-collapse-indicator::after { + content: "\ec24"; +} + +.style-settings-info-text[data-id^=info-text-SlRvb] { + text-align: center; + justify-content: center; +} +.style-settings-info-text[data-id^=info-text-SlRvb] .setting-item-control { + display: none; +} +.style-settings-info-text[data-id^=info-text-SlRvb] .link-favicon { + display: none !important; + vertical-align: unset; +} + +body { + --dataview-th-border-bottom: 2px solid var(--headers); + --dataview-th-background: var(--outer-bar); + --dataview-th-alt-color: rgba(var(--accent-color), 10%); + --dataview-th-color: var(--headers); + --dataview-th-font: var(--font); + --dataview-th-font-size: larger; + --dataview-th-font-weight: var(--header-weight); + --dataview-th-count-font-size: var(--font-text-size); + --dataview-th-count-color: var(--dataview-th-color); + --dataview-table-width: 100%; +} + +.table-view-table { + width: var(--dataview-table-width); +} +.table-view-table > thead > tr { + --table-header-background: var(--dataview-th-background); +} +.table-view-table > thead > tr > th { + --table-header-color: var(--dataview-th-color); + --table-header-font: var(--dataview-th-font); + font-size: var(--dataview-th-font-size); + font-weight: var(--dataview-th-font-weight); + border-bottom: var(--dataview-th-border-bottom); +} +.table-view-table > thead > tr > th:nth-child(2n+2) { + --table-column-alt-background: var(--dataview-th-alt-color); +} +.table-view-table > thead > tr:hover { + --dataview-th-count-color: var(--text-dl); +} +.table-view-table > thead > tr:hover > th { + --table-header-color: var(--text-dl); +} + +.dataview.small-text { + font-size: var(--dataview-th-count-font-size); + color: var(--dataview-th-count-color); +} + +.dataview.result-group { + padding-left: 0; +} + +.dataview.result-group > .contains-task-list { + padding-inline-start: 0; +} +.dataview.result-group > .contains-task-list .task-list-item.is-checked .task-list-item-checkbox { + margin-left: 0; +} + +.is-live-preview .block-language-dataviewjs > :is(p, span) { + line-height: var(--lh); +} + +.dataview.dataview.inline-field-standalone-value { + padding-left: 0; + padding-right: 0; + display: inline; + border-radius: 0; + font-family: inherit; + background-color: transparent; +} +.dataview.dataview.inline-field-standalone-value span > a.tag:nth-of-type(odd) { + display: none; +} +.dataview.dataview.inline-field-key, .dataview.dataview.inline-field-value { + border-radius: var(--radius); + font-family: inherit; + font-weight: bold; + padding: 0 10px; +} +.dataview.dataview.inline-field-key { + background-color: var(--bttn); + color: var(--text-dl); +} +.dataview.dataview.inline-field-value { + background-color: var(--td); +} +.dataview.dataview.inline-field-value a.tag:first-child { + display: none; +} + +body:not(.list-default-bullet) .dataview.dataview ul > li:not(.task-list-item)::before, body:not(.list-default-bullet) .dataview.dataview ul > li .task-list-item-checkbox { + margin-left: 0; +} +body:not(.list-default-bullet) .dataview.dataview ul > li ul::before { + left: 0.4em; +} +body:not(.list-default-bullet) .dataview.dataview div div > ul { + padding-inline-start: 0; +} +body:not(.list-default-bullet) .dataview.dataview.table-view-table ul { + padding-inline-start: 0; +} + +/* Hover Editor */ +body:is(.theme-dark, .theme-light) { + --he-title-bar-active-fg: var(--text); + --he-title-bar-active-pinned-bg: var(--note); + --he-title-bar-active-action: var(--lite-accent); + --he-title-bar-active-bg: var(--embed-bg); + --he-title-bar-inactive-fg: var(--inactive); + --he-title-bar-inactive-bg: var(--note); + --he-title-bar-inactive-pinned-bg: var(--note); + --he-title-bar-inactive-action: var(--soft-text); + --he-popover-border-radius: var(--radius-s); + --he-text-on-accent-inactive: var(--text); + --he-text-on-accent-active: var(--headers); +} + +.popover.hover-editor:not(.show-navbar) .view-header { + padding: 0; +} + +.popover.hover-editor .markdown-source-view { + --file-margins: var(--size-4-3); +} + +.obsidian-icon-folder-icon, +.iconize-icon.iconize-icon.iconize-icon { + margin-right: var(--file-icon-margin) !important; + border: 0; + padding: 0 !important; + width: var(--nav-item-size); +} +.obsidian-icon-folder-icon svg, +.iconize-icon.iconize-icon.iconize-icon svg { + width: var(--nav-item-size); + color: var(--folder-open); +} +.obsidian-icon-folder-icon + .nav-folder-title-content, .obsidian-icon-folder-icon + .nav-file-title-content, +.iconize-icon.iconize-icon.iconize-icon + .nav-folder-title-content, +.iconize-icon.iconize-icon.iconize-icon + .nav-file-title-content { + --folder-icon: ; + --file-icon: ; +} +.obsidian-icon-folder-icon + .nav-folder-title-content::before, .obsidian-icon-folder-icon + .nav-file-title-content::before, +.iconize-icon.iconize-icon.iconize-icon + .nav-folder-title-content::before, +.iconize-icon.iconize-icon.iconize-icon + .nav-file-title-content::before { + content: ""; + width: unset; + margin-right: unset; +} + +body { + --kanban-lane-background: var(--code-bg); + --kanban-lane-border: var(--box-border-m); + --kanban-lane-box-shadow: var(--shadow-s); + --kanban-lane-padding: 0 4px; + --kanban-card-title-background: var(--note); + --kanban-card-title-border: 0px 2px 0 var(--outline); + --kanban-card-metadata-background: var(--note); + --kanban-card-border: var(--box-border); + --kanban-card-margin: 2px 0; + --kanban-link-color: var(--accent2-lite); + --kanban-link-font-weight: inherit; + --kanban-link-symbol: ; + --kanban-tag-background: var(--tag-background); + --tag-background-color: var(--tag-background); + --kanban-button-background: var(--code-bg); + --kanban-button-shadow: var(--input-shadow); +} + +.kanban-plugin__lane.kanban-plugin__lane { + background-color: var(--kanban-lane-background); + border-radius: var(--radius-m); + border: var(--kanban-lane-border); + box-shadow: var(--kanban-lane-box-shadow); +} +.kanban-plugin__lane.kanban-plugin__lane .kanban-plugin__lane-items { + margin: 0; + padding: var(--kanban-lane-padding); +} + +.kanban-plugin__lane-header-wrapper { + border: none; + padding: 5px 10px; + padding-bottom: 0; +} + +.kanban-plugin__item-content-wrapper.kanban-plugin__item-content-wrapper { + border-radius: var(--radius-m); +} + +.kanban-plugin__item.kanban-plugin__item { + border: var(--kanban-card-border); + margin: var(--kanban-card-margin); +} + +.kanban-plugin__item-title-wrapper { + padding: 2px 8px; + background: var(--kanban-card-title-background); + align-self: center; + align-items: center; +} +.kanban-plugin__item-title-wrapper:not(:only-child) { + border: none; + box-shadow: var(--kanban-card-title-border); +} + +.kanban-plugin__item.kanban-plugin__item .markdown-preview-view a.internal-link, +.kanban-plugin__item-title .markdown-preview-view a.internal-link { + color: var(--kanban-link-color); + font-weight: var(--kanban-link-font-weight); +} +.kanban-plugin__item.kanban-plugin__item .markdown-preview-view a.internal-link.is-unresolved, +.kanban-plugin__item-title .markdown-preview-view a.internal-link.is-unresolved { + color: var(--link-unresolved-color); + opacity: var(--link-unresolved-opacity); + filter: var(--link-unresolved-filter); + text-decoration-style: var(--link-unresolved-decoration-style); + text-decoration-color: var(--link-unresolved-decoration-color); +} +.kanban-plugin__item.kanban-plugin__item .markdown-preview-view a.tag, +.kanban-plugin__item-title .markdown-preview-view a.tag { + background: var(--kanban-tag-background); +} + +.kanban-plugin__item-title .markdown-preview-view a.internal-link:after { + content: var(--kanban-link-symbol); + font-family: var(--its); + color: var(--accent); +} + +.kanban-plugin__item-content-wrapper { + background: var(--kanban-card-metadata-background); + background-color: var(--kanban-card-metadata-background); +} + +.kanban-plugin__item-metadata-wrapper:not(:empty) { + padding: 2px 6px; + z-index: 0; + background: transparent; +} + +.kanban-plugin__meta-table td { + padding: 0; +} +.kanban-plugin__meta-table td.kanban-plugin__meta-key { + color: var(--footnote); + font-weight: 600; +} +.kanban-plugin__meta-table td .kanban-plugin__meta-value { + display: block; +} + +.kanban-plugin__item-button-wrapper.kanban-plugin__item-button-wrapper { + border: 0; + background-color: var(--kanban-button-background); + padding: 0; +} +.kanban-plugin__item-button-wrapper.kanban-plugin__item-button-wrapper button { + box-shadow: var(--kanban-button-shadow); +} + +.kanban-plugin__item-postfix-button { + padding-left: 0; + padding-right: 0; + margin-right: -7px; +} + +.kanban-plugin__item-form .kanban-plugin__item-input-wrapper textarea { + background: transparent; +} + +.kanban-plugin__item-prefix-button-wrapper input[type=checkbox] { + filter: none; +} + +.kanban-plugin__item hr { + --hr-icon-background: var(--kanban-card-title-background); +} + +.internal-link.BC-Link, +button[class^=BC] { + cursor: pointer; +} + +.BC-trail { + border: 0; + z-index: 10; + margin-bottom: 0 !important; +} +.BC-trail .BC-trail-path-container.BC-trail-path-container { + font-weight: var(--bold-weight); + display: flex; + justify-content: center; + align-items: center; +} +.BC-trail .BC-trail-sep { + color: var(--inactive); + font-weight: 900; +} + +.BC-trail.is-readable-line-width { + width: auto !important; +} + +[data-type=BC-matrix] div.view-content.view-content { + padding: 0; +} +[data-type=BC-matrix] div.view-content.view-content .BC-matrix-buttons { + padding: var(--size-4-2) var(--size-4-4) var(--size-4-1); +} + +.BC-Matrix.BC-Matrix.BC-Matrix > .BC-matrix-hier { + border: 0; +} +.BC-Matrix.BC-Matrix.BC-Matrix > .BC-matrix-hier .BC-Matrix-square { + border: 2px solid var(--outline); + border-radius: var(--radius-s); + box-shadow: var(--shadow-m); +} +.BC-Matrix.BC-Matrix.BC-Matrix > .BC-matrix-hier .BC-Matrix-header { + --h4-border-line-height: 0; + --h6-border-line-height: 0; +} +.BC-Matrix.BC-Matrix.BC-Matrix > .BC-matrix-hier ol { + --list-numbered-color: transparent; + padding-left: 10px; +} + +/* .BC-Matrix .BC-Matrix-square li::before { + content: var(--bullet); + font-family: var(--its); + color: var(--bullet-icon-color); + visibility: visible; + margin-top: -2px; + margin-left: -5px; +} */ +.breadcrumbs-block .BC-trail { + background-color: var(--note); + padding: var(--size-4-1); + border: var(--box-border); + box-shadow: var(--shadow-m); + border-radius: var(--radius); + justify-content: center; + text-align: center; +} +.breadcrumbs-block .BC-trail .BC-trail-grid-item { + box-shadow: var(--shadow-s); + background-color: var(--outer-bar); +} + +.BC-grid-wrapper.BC-grid-wrapper { + display: flex; + flex-direction: row; + align-items: center; + justify-content: center; +} +.BC-grid-wrapper.BC-grid-wrapper .BC-grid-options.BC-grid-options { + position: relative; + width: unset; + height: unset; + border: 0; +} +.BC-grid-wrapper.BC-grid-wrapper .BC-grid-options.BC-grid-options:hover .BC-grid-options-options.BC-grid-options-options { + display: flex; + flex-direction: row; + flex-wrap: nowrap; + align-items: center; +} +.BC-grid-wrapper.BC-grid-wrapper .BC-grid-options.BC-grid-options:hover .BC-grid-options-options.BC-grid-options-options .tree-item-flair { + margin: 0 10px; +} +.BC-grid-wrapper.BC-grid-wrapper .BC-trail-grid.BC-trail-grid, .BC-grid-wrapper.BC-grid-wrapper .BC-trail-grid-item.BC-trail-grid-item { + border: 0; + font-size: var(--font-ui-small); + font-weight: bold; +} +.BC-grid-wrapper.BC-grid-wrapper .BC-trail-grid-item.BC-trail-grid-item { + padding: 5px 10px; + margin: 5px; + text-align: center; + border: var(--box-border); + border-radius: var(--radius); +} + +/*--Plugin: 5e Statblock--*/ +body:not(.default-statblock) { + --statblock-primary-color: var(--text); + --statblock-background-color: var(--note); + --statblock-bar-color: var(--accent); + --statblock-rule-color: var(--accent); + --statblock-alt: var(--td); + --statblock-alt-padding: 0.25em 0.3em; + --statblock-image-border-color: var(--hr); + --statblock-border-size: 0; + --statblock-border-color: var(--lines); + --statblock-bar-border-size: 0; + --statblock-bar-border-color: var(--statblock-bar-color); + --statblock-box-shadow-color: var(--outline); + --statblock-box-shadow-x-offset: 0; + --statblock-box-shadow-y-offset: 0; + --statblock-box-shadow-blur: 20px; + --statblock-heading-font: var(--font); + --statblock-heading-font-color: var(--headers); + --statblock-heading-font-variant: normal; + --statblock-heading-font-weight: var(--header-weight); + --statblock-heading-line-height: 28px; + --statblock-subheading-font-size: var(--font-small); + --statblock-subheading-font-style: italic; + --statblock-subheading-font-weight: normal; + --statblock-font-color: var(--text); + --statblock-content-font: var(--font-default); + --statblock-content-font-size: var(--font-text-size); + --statblock-property-name-font-color: var(--headers); + --statblock-property-font-color: var(--text); + --statblock-section-heading-border-size: 4px; + --statblock-section-heading-border-color: var(--table); + --statblock-section-heading-font-color: var(--footnote); + --statblock-section-heading-font-size: var(--h3-size); + --statblock-section-heading-font-variant: normal; + --statblock-section-heading-font-weight: var(--header-weight); + --statblock-traits-font-weight: bold; + --statblock-traits-font-style: normal; +} + +body:not(.default-statblock) .obsidian-statblock-plugin { + --header-border-line-width: 0; + --h1-border-line-width: var(--header-border-line-width); + --h2-border-line-width: var(--header-border-line-width); + --h3-border-line-width: var(--header-border-line-width); + --h4-border-line-width: var(--header-border-line-width); + --h5-border-line-width: var(--header-border-line-width); + --h6-border-line-width: var(--header-border-line-width); +} +body:not(.default-statblock) .obsidian-statblock-plugin .statblock-content { + padding: 0.45em; +} +body:not(.default-statblock) .obsidian-statblock-plugin .statblock-content .statblock-item-container { + margin-bottom: 0.2rem; +} +body:not(.default-statblock) .obsidian-statblock-plugin .statblock-content > div > .statblock-item-container:not(.group-container):not(.inline-container):not(.rule-container) { + padding: var(--statblock-alt-padding); +} +body:not(.default-statblock) .obsidian-statblock-plugin .statblock-inline-item { + padding: var(--statblock-alt-padding); +} +body:not(.default-statblock) .obsidian-statblock-plugin .column > .statblock-item-container:nth-child(odd):not(.rule-container, +.table-container, +.traits-container, +.heading-container) { + background: var(--statblock-alt); +} +body:not(.default-statblock) .obsidian-statblock-plugin .spell-list .spell-level .property-text, body:not(.default-statblock) .obsidian-statblock-plugin .property-name { + color: var(--statblock-property-name-font-color); +} +body:not(.default-statblock) .obsidian-statblock-plugin .spell-list .spell-level .property-text { + font-weight: 600; +} +body:not(.default-statblock) .obsidian-statblock-plugin .spell-list .spells .property-text { + font-style: normal; +} +body:not(.default-statblock) .obsidian-statblock-plugin li::marker { + --list-marker-color: transparent; +} + +.obsidian-statblock-plugin :is(.statblock-heading.heading, .section-header)::before, .obsidian-statblock-plugin :is(.statblock-heading.heading, .section-header)::after { + display: none; +} +.obsidian-statblock-plugin :is(.statblock-heading.heading, .section-header) > :not(.collapse-indicator) { + margin: 0; +} + +.excalidraw.excalidraw.excalidraw { + --default-bg-color: var(--note); + --input-bg-color: var(--note); + --input-border-color: var(--bg); + --island-bg-color: var(--note); + --button-gray-1: var(--bg); + --button-gray-2: var(--bttn); + --popup-bg-color: var(--code-bg); + --popup-secondary-bg-color: var(--dark-sidebar); + --overlay-bg-color: var(--embed-bg); + --keybinding-color: var(--soft-text); + --input-label-color: var(--text); + --icon-fill-color: var(--text); + --text-primary-color: var(--text); + --color-primary: var(--accent); + --color-primary-darker: var(--text-dl); + --color-primary-darkest: var(--deep-dark-accent); + --color-primary-light: var(--accent); + --color-selection: var(--lite-accent); + --color-promo: var(--accent2-lite); + --link-color: var(--accent2-lite); + --select-highlight-color: var(--accent); + --shadow-island: + 0 0 0 1px var(--outline), + 2px 2px 0 var(--outline); + --dialog-border-color: var(--hr); + --default-border-color: var(--hr); + --input-hover-bg-color: var(--td); + --button-hover: var(--dark-accent); + --sidebar-bg-color: var(--dark-sidebar); + --sidebar-border-color: var(--hr); + --border-radius-md: var(--radius-m); + --border-radius-lg: var(--radius-l); +} + +.excalidraw .menu-item.menu-item { + color: var(--text); +} + +.excalidraw .ToolIcon .ToolIcon__icon:hover, +.excalidraw .menu-item:hover { + color: var(--text-dl); + --icon-fill-color: var(--text-dl); +} + +/*Plugin: Fantasy Calendar*/ +.workspace-leaf-content[data-type=FANTASY_CALENDAR] .view-content { + padding: 0 10px; +} + +body .fantasy-calendar .weekdays.weekdays, body .fantasy-calendar .weeks { + font-weight: 900; + background-color: var(--th); + color: var(--th-text); + border-radius: var(--radius-s); +} + +body .fantasy-calendar .weekdays .weekday, body .fantasy-calendar .weeks .week-num { + padding: 0px; + border-radius: var(--radius-s); +} +body .fantasy-calendar .weeks .week-num-container { + padding: 0px 5px; + color: var(--text); + background-color: var(--outer-bar); +} + +textarea, +body .fantasy-calendar-element details[open], +body .fantasy-calendar-create-calendar details[open], +body .fantasy-day.day { + border-radius: var(--radius-s); +} + +.fantasy-day.day.active { + background-color: var(--bttn); + color: var(--text-dl); +} +.fantasy-day.day.viewing { + border: none; + background-color: var(--lite-accent); + color: var(--text-dl); +} +.fantasy-day.day.viewing .dots-container { + padding: 2px; +} + +:not(.dnd):not(.wotc) h3.fantasy-title::after { + display: none; +} + +.fantasy-calendar-create-calendar .modal { + padding: 20px; + min-width: 70vw; +} +.fantasy-calendar-create-calendar .modal-content { + padding: 0 30px; +} +.fantasy-calendar-create-calendar h3 { + font-size: var(--h3-size); + text-align: center; + margin: 10px 0; +} +.fantasy-calendar-create-calendar h3::after { + width: 100%; + margin-top: 10px; +} + +body .fantasy-calendar-date-fields { + flex-wrap: wrap; + flex-direction: column; + padding: 30px; +} + +body .fantasy-calendar-element details[open], +body .fantasy-calendar-create-calendar details[open] { + margin: 10px 0; + border: 2px solid var(--outline); + box-shadow: 4px 4px 0 var(--outline); +} + +.fantasy-calendar-container .event { + padding: 10px; +} +.fantasy-calendar-container .event:nth-child(even) { + box-shadow: 0 0 10px var(--outline); +} + +.fantasy-calendar.full-view .fantasy-day.day:nth-child(even):not(.viewing, .active) { + background-color: var(--td); +} + +.fantasy-calendar.full-view .flag.flag { + padding: 2px 10px; +} + +.dice-roller-view .dice-button .clickable-icon { + margin: 0 7px; + --sidebar-tab-background-color-hover: transparent; +} +.dice-roller-view .dice-button .clickable-icon .cls-1 { + fill: var(--interactive-accent); + stroke: var(--interactive-accent); +} +.dice-roller-view .dice-button:hover .cls-1 { + fill: var(--accent); + stroke: var(--accent); +} +.dice-roller-view .dice-button svg g { + color: var(--text-dl); + fill: var(--text-dl); +} +.dice-roller-view .advantage-disadvantage button { + background: var(--success-bg); + color: var(--text-dl); +} +.dice-roller-view .advantage-disadvantage button:hover { + background-color: var(--dark-accent); +} +.dice-roller-view .advantage-disadvantage button + button { + background: var(--failure-bg); +} + +.dice-roller.markdown-embed .dice-roller-result ul { + margin: 0; +} + +.dice-roller.has-embed .internal-embed *:last-child:not(svg):not(.dice-content-copy):not(.markdown-embed .dice-roller):not(.dice-roller-result > .embedded-table-result *) { + margin: unset; +} + +/*Button Plugin*/ +body { + --button-border-radius: var(--radius-m); + --button-background: var(--bttn); + --button-text: var(--text-dl); + --button-border: var(--bttn); + --button-background-hover: var(--interactive-accent-hover); +} + +body .button-default.button-default { + box-shadow: var(--shadow-s); +} + +body .button-default.button-default:hover { + --button-background: var(--button-background-hover); + --button-border: var(--button-background-hover); + box-shadow: var(--shadow-l); +} + +.modal-content.button-maker { + width: auto; +} + +body { + --initiative-xp: sandybrown; + --initiative-tracker-border: var(--lines); +} + +.obsidian-initiative-tracker.obsidian-initiative-tracker.obsidian-initiative-tracker { + margin: 0; +} +.obsidian-initiative-tracker.obsidian-initiative-tracker.obsidian-initiative-tracker .initiative-tracker-table { + width: auto; + border-spacing: 0; +} +.obsidian-initiative-tracker.obsidian-initiative-tracker.obsidian-initiative-tracker .initiative-tracker-creature:hover td { + border-top: 1px solid var(--initiative-tracker-border); + border-bottom: 1px solid var(--initiative-tracker-border); +} +.obsidian-initiative-tracker.obsidian-initiative-tracker.obsidian-initiative-tracker .initiative-tracker-creature:hover td:first-child { + border-left: 1px solid var(--initiative-tracker-border); +} +.obsidian-initiative-tracker.obsidian-initiative-tracker.obsidian-initiative-tracker .initiative-container { + border-top-left-radius: var(--radius-s); + border-bottom-left-radius: var(--radius-s); +} +.obsidian-initiative-tracker.obsidian-initiative-tracker.obsidian-initiative-tracker .initiative-container .tree-item-flair-outer { + margin: 0; + padding-left: 0; +} +.obsidian-initiative-tracker.obsidian-initiative-tracker.obsidian-initiative-tracker .controls-container { + border-top-right-radius: var(--radius-s); + border-bottom-right-radius: var(--radius-s); +} +.obsidian-initiative-tracker.obsidian-initiative-tracker.obsidian-initiative-tracker .editable.initiative.tree-item-flair { + background: var(--td); +} + +.encounter-container > .encounter-instance { + margin: 5px; + padding: 15px; + border: var(--box-border); + box-shadow: var(--shadow-s); + border-radius: var(--radius-m, 0.5em); +} + +.block-language-encounter { + --header-border-height: 0; + --h4-border-line-height: var(--header-border-height); +} +.block-language-encounter .encounter-container { + grid-template-columns: repeat(auto-fit, minmax(150px, 1fr)); +} +.block-language-encounter .encounter-name.encounter-name { + display: block; +} + +.encounter-instance.encounter-instance.encounter-instance .creature-li strong { + font-family: var(--font-monospace); + font-size: calc(var(--font-text-size) - 2px); +} +.encounter-instance.encounter-instance.encounter-instance .encounter-name.encounter-name h3 { + font-size: 20px; + font-weight: 900; + margin-top: -5px; +} +.encounter-instance.encounter-instance.encounter-instance .encounter-creatures.encounter-creatures.encounter-creatures.encounter-creatures h4 { + font-size: 16px; + margin-top: 6px; + margin-bottom: 2px; + color: var(--text); + font-family: var(--font-default); + font-weight: bold; +} +.encounter-instance.encounter-instance.encounter-instance .encounter-name { + justify-content: space-between; +} +.encounter-instance.encounter-instance.encounter-instance ul li.creature-li.creature-li { + width: unset; +} +.encounter-instance.encounter-instance.encounter-instance li::marker { + --list-marker-color: transparent; +} +.encounter-instance.encounter-instance.encounter-instance .dice-roller-result { + font-family: var(--font-monospace); + color: var(--lite-accent); +} +.encounter-instance.encounter-instance.encounter-instance .dice-roller-button { + color: var(--text-faint); + vertical-align: -2px; + margin-right: -5px; +} +.encounter-instance.encounter-instance.encounter-instance .encounter-xp, .encounter-instance.encounter-instance.encounter-instance .xp-parent { + color: var(--initiative-xp); + font-weight: bold; + margin: 0; +} +.encounter-instance.encounter-instance.encounter-instance .xp-parent:after { + content: "\f102"; + /*"\e4fb" f753*/ + font-family: var(--fa5); + color: var(--initiative-xp); + font-weight: 10 !important; + padding-left: 5px; +} +.encounter-instance.encounter-instance.encounter-instance .xp-parent .paren.left, .encounter-instance.encounter-instance.encounter-instance .xp-parent .paren.right, .encounter-instance.encounter-instance.encounter-instance .xp.text { + display: none; +} +.encounter-instance.encounter-instance.encounter-instance ul li:not(:hover) .xp-parent.xp-parent.xp-parent { + display: none; +} + +.block-language-leaflet .leaflet-distance-control, +.leaflet-container .leaflet-control-attribution { + background-color: var(--note) !important; + color: var(--text) !important; +} + +.leaflet-container.leaflet-container { + background-color: var(--outer-bar); +} + +.leaflet-touch .leaflet-control-layers, .leaflet-touch .leaflet-bar, .leaflet-touch .leaflet-bar a:first-child { + border: none; + border-radius: var(--radius-s); +} +.leaflet-touch .leaflet-control-expandable, .leaflet-touch .leaflet-bar.leaflet-bar a { + background-color: var(--note); + border-color: var(--table); + color: var(--text); +} + +.leaflet-container .leaflet-control-attribution a { + color: var(--accent2-lite) !important; +} + +.longform-explorer.longform-explorer ul li::before { + display: none; +} +.longform-explorer.longform-explorer button { + cursor: pointer; +} +.longform-explorer.longform-explorer .new-scene-container, .longform-explorer.longform-explorer .tab-list, .longform-explorer.longform-explorer .new-draft-container, .longform-explorer.longform-explorer .compile-container { + border-color: var(--hr); +} +.longform-explorer.longform-explorer #project-picker { + justify-content: space-between; +} +.longform-explorer.longform-explorer #project-picker select { + width: 100%; + text-overflow: ellipsis; +} +.longform-explorer.longform-explorer .tab-list button { + color: var(--headers); +} +.longform-explorer.longform-explorer .tab-list .selected { + border-color: var(--accent); + background-color: var(--outer-bar); + color: var(--text); +} +.longform-explorer.longform-explorer .draft-container.draft-container { + white-space: pre-wrap; +} +.longform-explorer.longform-explorer .drafts-title-container.drafts-title-container button { + color: var(--text); + background-color: var(--interactive-normal); +} +.longform-explorer.longform-explorer .drafts-title-container.drafts-title-container button:hover { + background-color: var(--interactive-accent-hover); +} +.longform-explorer.longform-explorer .longform-compile-container .longform-compile-step { + background: var(--note); + border: var(--box-border); + box-shadow: var(--shadow-s); + padding: 5px 10px; +} +.longform-explorer.longform-explorer .longform-compile-container .longform-step-kind-pill.longform-step-kind-pill { + background-color: var(--tag-background); +} +.longform-explorer.longform-explorer .longform-compile-container .longform-compile-step-options > div { + border-color: var(--lite-accent); +} + +.auto-class-settings__match-list li { + border-radius: var(--radius-s); + --list-marker-color: transparent; +} + +.auto-class-settings__match-group-header:hover, +li.auto-class-settings__match-list-item:hover { + background-color: var(--td); +} + +ul.auto-class-settings__match-group-list { + margin-left: 16px; + border-left: 2px solid var(--accent); +} + +.auto-class-manage-match__class-list-item { + justify-content: start; + flex-direction: row-reverse; + --list-marker-color: transparent; +} +.auto-class-manage-match__class-list-item span { + margin-right: 10px; +} +.auto-class-manage-match__class-list-item .auto-class-manage-match__class-list-control { + margin-bottom: -4px; +} + +.qe-popup-menu .menu-item { + --interactive-accent-hover: var(--dark-accent); +} + +.menu-item.is-qe-folder { + font-weight: var(--folder-weight); +} + +object.link-favicon { + height: inherit !important; + margin-right: 5px; +} + +/* Heatmap Calendar Fix */ +.heatmap-calendar-graph { + --list-indent: 0; +} +.heatmap-calendar-graph ul li { + border: 0; +} +.heatmap-calendar-graph ul li::before { + display: none; +} + +.theme-dark .heatmap-calendar-boxes .isEmpty { + background-color: var(--inactive); +} + +/*Emoji Toolbar*/ +img.emoji.emoji { + object-fit: cover; +} + +.folder-note-underline .has-folder-note .nav-folder-title-content, +.alx-folder-with-note.nav-folder > .nav-folder-title > .nav-folder-title-content { + text-decoration-color: var(--lite-accent); +} + +.folder-note-underline .has-folder-note .nav-folder-title-content.nav-folder-title.is-active, +.alx-folder-with-note.nav-folder .nav-folder-title.is-active { + color: var(--text-dl); +} + +.fn-whitespace-stop-collapsing .nav-folder-title-content { + padding-top: 0; + padding-bottom: 0; +} + +.settings-search-input { + padding: 8px 6px; + border: 0; +} + +/* MAKE.md */ +.mk-sidebar { + --nav-item-background-selected: var(--nav-item-background-active); + --file-header-color-active: var(--text-dl); + --nav-item-color-selected: var(--text-dl); +} +.mk-sidebar .mk-main-menu-button:hover { + color: var(--text-dl); +} +.mk-sidebar .mk-tree-text::before { + display: none; +} +.mk-sidebar .mk-tree-item { + --vertical-padding: unset; +} +.mk-sidebar .mk-tree-item.is-selected, .mk-sidebar .mk-tree-item.is-active, .mk-sidebar .mk-tree-item:hover { + --folder-open-text-color: var(--text-dl); +} +.mk-sidebar .mk-tree-item.is-selected svg, .mk-sidebar .mk-tree-item.is-active svg, .mk-sidebar .mk-tree-item:hover svg { + --icon-color: var(--text-dl); + color: var(--text-dl); +} +.mk-sidebar .mk-tree-item.tree-item-self { + gap: 1px; +} + +.cm-s-obsidian .templater-command-bg, .cm-s-obsidian .templater-inline .cm-templater-command { + background-color: var(--code-bg); + box-shadow: var(--code-shadow); +} + +.oit li::before { + --bullet: ""; + --list-marker-color: transparent; +} + +.oit .oit-img-toolbar li::before { + margin-left: 0; +} + +.oit-normal .oit-img-footer .oit-img-toolbar > li[class]::before { + margin-inline: revert; +} + +/* Vault Icon */ +body { + --vault-icon-image: ""; +} + +.nav-folder.mod-root > .nav-folder-title { + display: flex; + align-items: center; + justify-content: center; + margin-bottom: 0; +} + +.nav-folder.mod-root > .nav-folder-title::before { + content: ""; + background-image: var(--vault-icon-image); + background-size: contain; + background-repeat: no-repeat; +} + +.vault-icon .nav-folder.mod-root > .nav-folder-title::before { + width: 32px; + height: 28px; + margin-right: 5px; +} + +.vault-icon .workspace-drawer-header-name::before { + margin-right: 10px; +} + +.vault-icon .workspace-drawer-header { + padding-left: 10px; + padding-right: 10px; +} + +.vault-title-none .nav-folder.mod-root > .nav-folder-title { + display: none; +} + +body { + --folder-icon: ""; + --folder-font: var(--its); + --file-icon: ""; + --file-font: var(--its); + --file-icon-margin: 6px; + --nav-item-children-padding-left: 2px; +} + +/*Nav Folder/File Icons*/ +.nav-folder-children .nav-folder-title .nav-folder-title-content::before, +.nav-file-title .nav-file-title-content::before { + margin-right: var(--file-icon-margin); + font-size: var(--nav-item-size); + font-weight: 10; + width: var(--nav-item-size); +} + +.nav-folder-children .nav-folder-title-content::before { + content: var(--folder-icon); + font-family: var(--folder-font); + color: var(--folder); + text-align: center; +} + +.nav-folder-children .nav-folder:not(.is-collapsed) > .nav-folder-title .nav-folder-title-content::before { + color: var(--folder-open); +} +.nav-folder-children .nav-folder:not(.is-collapsed) > .nav-folder-title .nav-folder-title-content:hover::before { + color: var(--nav-item-color-active); +} + +.nav-file-title .nav-file-title-content::before { + content: var(--file-icon); + font-family: var(--file-font); + text-align: center; + color: var(--file-icon-color); +} + +.nav-folder-title:is(.is-active, :hover) .nav-folder-title-content::before, +.nav-file-title:is(.is-active, :hover) .nav-file-title-content::before, +.nav-file-title:is(.is-active, :hover) .nav-file-icon { + color: var(--nav-item-color-active); +} + +.file-explorer-flat { + --explorer-root-folder-margin: 0; + --explorer-root-folder-padding: 0; + --explorer-root-folder-indentation-width: 0; + --explorer-root-folder-background: rgb(var(--accent-color), 0.3); + --explorer-root-background: rgb(var(--accent-color), 0.1); + --explorer-root-border-color: rgb(var(--accent-color)); + --explorer-root-folder-color: var(--text); + --explorer-root-folder-open-color: var(--folder); + --explorer-root-collapsed-background: transparent; + --explorer-folder-open-background: var(--td); +} +.file-explorer-flat .nav-folder.mod-root > .nav-folder-children > .nav-folder > .nav-folder-children { + margin: var(--explorer-root-folder-margin); + padding-left: var(--explorer-root-folder-padding); + border-width: var(--explorer-root-folder-indentation-width); + border-color: var(--explorer-root-folder-indentation-color); + border-bottom: 2px solid var(--explorer-root-border-color); + background-color: var(--explorer-root-background); +} +.file-explorer-flat .nav-folder.mod-root > .nav-folder-children > .nav-folder > .nav-folder-title:not(:hover) { + background-color: var(--explorer-root-collapsed-background); + color: var(--explorer-root-folder-color); +} +.file-explorer-flat .nav-folder.mod-root > .nav-folder-children > .nav-folder:not(.is-collapsed) > .nav-folder-title:not(:hover) { + background-color: var(--explorer-root-folder-background); + border-bottom-color: var(--explorer-root-border-color); + color: var(--explorer-root-folder-open-color); +} +.file-explorer-flat .mod-root .nav-folder-children > .nav-folder:not(.is-collapsed) > .nav-folder-title > .nav-folder-title-content { + text-align: center; + transition: cubic-bezier(1, 0, 0, 1); + text-transform: uppercase; + letter-spacing: 0.25em; + padding: 3px 0; + width: 100%; +} +.file-explorer-flat .mod-root .nav-folder-children > .nav-folder:not(.is-collapsed) > .nav-folder-title > .nav-folder-title-content::before { + float: left; +} +.file-explorer-flat .mod-root .nav-folder-children > .nav-folder:not(.is-collapsed) > .nav-folder-children > .nav-folder:not(.is-collapsed) > .nav-folder-title:not(:hover) { + background-color: var(--explorer-folder-open-background); + border-bottom-color: var(--explorer-root-border-color); +} + +body.folder-arrow .nav-files-container .nav-folder-title:hover .nav-folder-collapse-indicator, body.folder-arrow .nav-files-container .nav-folder-title:hover .tree-item-icon.nav-folder-collapse-indicator { + display: flex; + margin-left: -2px; +} +body.folder-arrow .nav-files-container .tree-item-self.is-active .collapse-icon svg { + color: var(--text-dl); +} +body.folder-arrow .nav-files-container .nav-folder-children .nav-folder-title:hover .nav-folder-title-content::before { + margin-left: var(--file-icon-margin); +} + +body { + --image-border-color: var(--background-modifier-border); + --image-border-width: 1px; + --image-border-padding: 8px; + --image-border-background: var(--td); +} + +/*----Image Positions/Adjustments----*/ +body { + --micro: 70px; + --tiny: 100px; + --small: 200px; + --small-med: 300px; + --med-small: 400px; + --medium: 500px; + --med-tall: 600px; + --tall: 700px; +} + +.popover.hover-popover { + --micro: 70px; + --tiny: 100px; + --small: 150px; + --small-med: 200px; + --med-small: 250px; + --medium: 300px; + --med-tall: 450px; + --tall: 500px; +} + +/*----Mobile----*/ +@media (max-width: 500px) { + .theme-dark, .theme-light { + /*Mobile Sizes*/ + --radius: 0px; + --micro: 70px; + --tiny: 100px; + --small: 150px; + --small-med: 200px; + --med-small: 250px; + --medium: 300px; + --med-tall: 450px; + --tall: 500px; + } +} +/*-Image Sizing-*/ +/*Fit image within bounds WITHOUT stretching*/ +img:is([alt*=cover], [alt*=cvr]), +.image-embed:is([src*="#cover"], [src*="#cvr"]), +span.image-embed:is([src*="#cover"], [src*="#cvr"]) img { + object-fit: cover; +} + +img[alt][alt]:not([alt*=relative])[alt*=hmicro] { + height: var(--micro); +} +img[alt][alt]:not([alt*=relative])[alt*=htiny] { + height: var(--tiny); +} +img[alt][alt]:not([alt*=relative])[alt*=hsmall] { + height: var(--small); +} +img[alt][alt]:not([alt*=relative])[alt*=hs-med] { + height: var(--small-med); +} +img[alt][alt]:not([alt*=relative])[alt*=hm-sm] { + height: var(--med-small); +} +img[alt][alt]:not([alt*=relative])[alt*=hmed] { + height: var(--medium); +} +img[alt][alt]:not([alt*=relative])[alt*=hm-tl] { + height: var(--med-tall); +} +img[alt][alt]:not([alt*=relative])[alt*=htall] { + height: var(--tall); +} +img[alt][alt]:not([alt*=relative])[alt*=hfull] { + height: 100%; +} +img[alt][alt]:not([alt*=relative])[alt*=wmicro] { + width: var(--micro); +} +img[alt][alt]:not([alt*=relative])[alt*=wtiny] { + width: var(--tiny); +} +img[alt][alt]:not([alt*=relative])[alt*=wsmall] { + width: var(--small); +} +img[alt][alt]:not([alt*=relative])[alt*=ws-med] { + width: var(--small-med); +} +img[alt][alt]:not([alt*=relative])[alt*=wm-sm] { + width: var(--med-small); +} +img[alt][alt]:not([alt*=relative])[alt*=wmed] { + width: var(--medium); +} +img[alt][alt]:not([alt*=relative])[alt*=wm-tl] { + width: var(--med-tall); +} +img[alt][alt]:not([alt*=relative])[alt*=wtall] { + width: var(--tall); +} +img[alt][alt]:not([alt*=relative])[alt*=wfull] { + width: 100%; +} + +.image-embed[alt][alt*=relative], +div:not(.image-embed) > img[alt][alt*=relative] { + --micro: 10%; + --tiny: 20%; + --small: 30%; + --small-med: 40%; + --med-small: 50%; + --medium: 60%; + --med-tall: 70%; + --tall: 85%; +} +.image-embed[alt][alt*=relative][alt*=wmicro], +div:not(.image-embed) > img[alt][alt*=relative][alt*=wmicro] { + width: var(--micro); +} +.image-embed[alt][alt*=relative][alt*=wtiny], +div:not(.image-embed) > img[alt][alt*=relative][alt*=wtiny] { + width: var(--tiny); +} +.image-embed[alt][alt*=relative][alt*=wsmall], +div:not(.image-embed) > img[alt][alt*=relative][alt*=wsmall] { + width: var(--small); +} +.image-embed[alt][alt*=relative][alt*=ws-med], +div:not(.image-embed) > img[alt][alt*=relative][alt*=ws-med] { + width: var(--small-med); +} +.image-embed[alt][alt*=relative][alt*=wm-sm], +div:not(.image-embed) > img[alt][alt*=relative][alt*=wm-sm] { + width: var(--med-small); +} +.image-embed[alt][alt*=relative][alt*=wmed], +div:not(.image-embed) > img[alt][alt*=relative][alt*=wmed] { + width: var(--medium); +} +.image-embed[alt][alt*=relative][alt*=wm-tl], +div:not(.image-embed) > img[alt][alt*=relative][alt*=wm-tl] { + width: var(--med-tall); +} +.image-embed[alt][alt*=relative][alt*=wtall], +div:not(.image-embed) > img[alt][alt*=relative][alt*=wtall] { + width: var(--tall); +} +.image-embed[alt][alt*=relative][alt*=hmicro], +div:not(.image-embed) > img[alt][alt*=relative][alt*=hmicro] { + width: var(--micro); +} +.image-embed[alt][alt*=relative][alt*=htiny], +div:not(.image-embed) > img[alt][alt*=relative][alt*=htiny] { + width: var(--tiny); +} +.image-embed[alt][alt*=relative][alt*=hsmall], +div:not(.image-embed) > img[alt][alt*=relative][alt*=hsmall] { + width: var(--small); +} +.image-embed[alt][alt*=relative][alt*=hs-med], +div:not(.image-embed) > img[alt][alt*=relative][alt*=hs-med] { + width: var(--small-med); +} +.image-embed[alt][alt*=relative][alt*=hm-sm], +div:not(.image-embed) > img[alt][alt*=relative][alt*=hm-sm] { + width: var(--med-small); +} +.image-embed[alt][alt*=relative][alt*=hmed], +div:not(.image-embed) > img[alt][alt*=relative][alt*=hmed] { + width: var(--medium); +} +.image-embed[alt][alt*=relative][alt*=hm-tl], +div:not(.image-embed) > img[alt][alt*=relative][alt*=hm-tl] { + width: var(--med-tall); +} +.image-embed[alt][alt*=relative][alt*=htall], +div:not(.image-embed) > img[alt][alt*=relative][alt*=htall] { + width: var(--tall); +} +.image-embed[alt][alt*=relative][alt*=hfull], +div:not(.image-embed) > img[alt][alt*=relative][alt*=hfull] { + width: 100%; +} + +.image-embed[alt][alt*=relative], +div:not(.image-embed) > img[alt][alt*=relative] { + display: block; + margin: auto; + max-height: 100%; + object-fit: cover; +} + +/*Height*/ +/*Image Locations*/ +/*Center Image*/ +.img-adj-center.img-adj-center img, +img:is([alt*=ctr], [alt*=center]) { + display: block; + margin-left: auto; + margin-right: auto; +} + +.img-adj-center.img-adj-center .is-live-preview img { + margin-left: auto !important; + margin-right: auto !important; +} + +/*Left & Right*/ +:not(.is-live-preview) img:is([alt*=left], [alt*=locl]), :not(.is-live-preview) img[src*="#locl"] img, +:not(.is-live-preview) .image-embed:is([alt*=left], [alt*=locl]), +:not(.is-live-preview) .image-embed[src*="#locl"] img { + float: left; + margin-right: 2%; + margin-top: 0px; + margin-bottom: 0px; +} +:not(.is-live-preview) img:is([alt*=right], [alt*=locr]), :not(.is-live-preview) img[src*="#locr"] img, +:not(.is-live-preview) .image-embed:is([alt*=right], [alt*=locr]), +:not(.is-live-preview) .image-embed[src*="#locr"] img { + float: right; + margin-left: 2%; + margin-bottom: 0px; +} + +/*--Image Position--*/ +img[alt*="p+"], .image-embed[src*="#p+"] img { + object-fit: cover; +} + +/*Inner Image*/ +img[alt*="p+c"], .image-embed[src*="#p+c"] img { + object-position: center; +} + +img[alt*="p+t"], .image-embed[src*="#p+t"] img { + object-position: top; +} + +img[alt*="p+b"], .image-embed[src*="#p+b"] img { + object-position: bottom; +} + +img[alt*="p+l"], .image-embed[src*="#p+l"] img { + object-position: left; +} + +img[alt*="p+r"], .image-embed[src*="#p+r"] img { + object-position: right; +} + +img[alt*="p+cl"], .image-embed[src*="#p+cl"] img { + object-position: 15%; +} + +img[alt*="p+ccl"], .image-embed[src*="#p+ccl"] img { + object-position: 25%; +} + +img[alt*="p+cr"], .image-embed[src*="#p+cr"] img { + object-position: 60%; +} + +img[alt*="p+ccr"], .image-embed[src*="#p+ccr"] img { + object-position: 75%; +} + +img[alt*="p+tc"], .image-embed[src*="#p+tc"] img { + object-position: 50% 10%; +} + +img[alt*="p+tcc"], .image-embed[src*="#p+tcc"] img { + object-position: 50% 20%; +} + +img[alt*="p+cct"], .image-embed[src*="#p+cct"] img { + object-position: 50% 30%; +} + +img[alt*="p+ct"], .image-embed[src*="#p+ct"] img { + object-position: 50% 40%; +} + +img[alt*="p+cb"], .image-embed[src*="#p+cb"] img { + object-position: 50% 60%; +} + +img[alt*="p+ccb"], .image-embed[src*="#p+ccb"] img { + object-position: 50% 70%; +} + +img[alt*="p+bc"], .image-embed[src*="#p+bc"] img { + object-position: 50% 80%; +} + +img[alt*="p+bcc"], .image-embed[src*="#p+bcc"] img { + object-position: 50% 90%; +} + +/*Invert Colors*/ +.theme-dark img[alt*=invertb], .theme-dark .image-embed[src*="#invertb"] { + filter: invert(1) hue-rotate(180deg); +} +.theme-dark img[alt*=invertbc], +.theme-dark .image-embed[src*="#invertbc"] { + filter: invert(1) hue-rotate(180deg) contrast(1.5); +} + +.theme-light img[alt*=invertw], .theme-light .image-embed[src*="#invertw"] { + filter: invert(1) hue-rotate(180deg); +} +.theme-light img[alt*=invertwc], .theme-light .image-embed[src*="#invertwc"] { + filter: invert(1) hue-rotate(180deg) contrast(1.45); +} + +img:is([alt*=flip-x], +[alt*=flip-horizontal]) { + transform: scale(-1, 1); +} +img:is([alt*=flip-y], +[alt*=flip-vertical]) { + transform: scale(1, -1); +} +img:is([alt*=flip-xy], +[alt*=flip-vertical-horizontal]) { + transform: scale(-1, -1); +} + +/*Fit image within bounds WITHOUT stretching*/ +img[alt*=cover], +img:is([alt*=cover], [alt*=cvr]), +.image-embed:is([src*="#cover"], [src*="#cvr"]), +span.image-embed:is([src*="#cover"], [src*="#cvr"]) img { + object-fit: cover; +} + +/*Fix Float Issues*/ +:is(img, .image-embed)[alt*=clear], +.image-embed[src*="#clear"] { + clear: both; +} + +img[alt*=unclr], +.image-embed[src*="#unclr"] { + clear: none !important; +} + +:not(.lp-img-float) .is-live-preview img:is([alt*=right], [alt*=locr]), :not(.lp-img-float) .is-live-preview img:is([alt*=left], [alt*=locl]), :not(.lp-img-float) .is-live-preview .image-embed:is([alt*=right], [alt*=locr]), :not(.lp-img-float) .is-live-preview .image-embed:is([alt*=left], [alt*=locl]) { + float: unset; +} + +img:is([alt~=lp], [alt~=live-preview]):is([alt*=right], [alt*=locr]), +.image-embed:is([alt~=lp], [alt~=live-preview]):is([alt*=right], [alt*=locr]) { + float: right !important; +} +img:is([alt~=lp], [alt~=live-preview]):is([alt*=left], [alt*=locl]), +.image-embed:is([alt~=lp], [alt~=live-preview]):is([alt*=left], [alt*=locl]) { + float: left !important; +} + +.clear-hr { + --hr-width: 100%; +} + +.clear-headings :is(h1, h2, h3, h4, h5, h6), +.clear-heading-1 h1, +.clear-heading-2 h2, +.clear-heading-3 h3, +.clear-heading-4 h4, +.clear-heading-5 h5, +.clear-heading-6 h6 { + clear: both; +} + +/*Banners*/ +img[alt*=banner], +.image-embed[alt*=banner] img { + display: block; + object-fit: cover; + width: 100%; + margin-bottom: 0px; + clear: both; +} + +img[alt~=banner], +.image-embed[alt~=banner] img, +.image-embed[src*="#banner"] { + height: var(--small); +} + +img[alt~="banner+small"], +.image-embed[alt~="banner+small"] img, +.image-embed[src*="#banner+small"] { + height: var(--tiny); +} + +img[alt~="banner+tall"], +.image-embed[alt~="banner+tall"] img, +.image-embed[src*="#banner+tall"] { + height: var(--medium); +} + +:is(img, .internal-embed)[alt*=sban], +:is(img, .internal-embed)[alt~=sban], +.internal-embed[src*="#sban"] img { + object-fit: cover; + width: 100%; +} + +/*Portait*/ +img[alt*=portrait], +.image-embed[alt*=portrait] img { + object-fit: cover; +} + +img[alt~=portrait], +.image-embed[alt~=portrait] img, +.image-embed[src~="#portrait"] { + height: var(--small-med); + width: 40%; +} + +img[alt~="portrait+small"], +.image-embed[alt~="portrait+small"] img, +.image-embed[src~="#portrait+small"] { + height: var(--small); + width: 25%; +} + +img[alt~="portrait+tall"], +.image-embed[alt~="portrait+tall"] img, +.image-embed[src~="#portrait+tall"] { + height: 500px; + width: 50%; +} + +/*Profile*/ +img[alt*=profile], +.image-embed[alt*=profile] img { + object-fit: cover; + border-radius: 50%; +} + +img[alt~=profile], +.image-embed[alt~=profile] img, +.image-embed[src*="#profile"] { + height: var(--tiny); + width: var(--tiny); +} + +img[alt~="profile+medium"], +.image-embed[alt~="profile+medium"] img, +.image-embed[src*="#profile+medium"] { + height: var(--small); + width: var(--small); +} + +img[alt~="profile+tall"], +.image-embed[alt~="profile+tall"] img, +.image-embed[src*="#profile+tall"] { + height: var(--medium); + width: var(--medium); +} + +img[alt~=sprf] { + object-fit: cover; + border-radius: 100%; +} + +/*Image Shapes*/ +img[alt*=circle] { + border-radius: 50%; +} + +img[alt~=square], +.image-embed[alt~=square] img { + border-radius: 0; +} + +img[alt~=border], +.internal-embed[alt~=border] img { + border: var(--image-border-width) solid var(--image-border-color); + padding: var(--image-border-padding); + background: var(--image-border-background); +} + +.image-captions .image-embed::after, +.image-embed[src*="#cap"]::after { + content: attr(alt); + color: var(--inactive, var(--faint-text)); + display: block; + text-align: center; +} + +.mobile-image-viewer img[alt][alt][alt] { + height: 100%; + width: 100%; + object-fit: contain; +} + +.internal-embed:not(.image-embed)[alt*=htiny] .markdown-embed-content { + height: var(--tiny); +} +.internal-embed:not(.image-embed)[alt*=hsmall] .markdown-embed-content { + height: var(--small); +} +.internal-embed:not(.image-embed)[alt*=hs-med] .markdown-embed-content { + height: var(--small-med); +} +.internal-embed:not(.image-embed)[alt*=hm-sm] .markdown-embed-content { + height: var(--med-small); +} +.internal-embed:not(.image-embed)[alt*=hmed] .markdown-embed-content { + height: var(--medium); +} +.internal-embed:not(.image-embed)[alt*=hm-tl] .markdown-embed-content { + height: var(--med-tall); +} +.internal-embed:not(.image-embed)[alt*=htall] .markdown-embed-content { + height: var(--tall); +} +.internal-embed:not(.image-embed)[alt*=full] .markdown-embed-content, .internal-embed:not(.image-embed)[alt*=full] .markdown-embed-content > .markdown-preview-view { + max-height: unset; +} +.internal-embed:not(.image-embed)[alt*=wtiny] { + width: 20%; +} +.internal-embed:not(.image-embed)[alt*=wsmall] { + width: 30%; +} +.internal-embed:not(.image-embed)[alt*=ws-med] { + width: 40%; +} +.internal-embed:not(.image-embed)[alt*=wm-small] { + width: 50%; +} +.internal-embed:not(.image-embed)[alt*=wmed] { + width: 60%; +} +.internal-embed:not(.image-embed)[alt*=wm-tl] { + width: 80%; +} +.internal-embed:not(.image-embed)[alt*=wtall] { + width: 95%; +} + +.internal-embed[alt*=right] { + float: right; + margin-left: 0.5em; +} + +.internal-embed[alt*=left] { + float: left; + margin-right: 0.5em; +} + +.internal-embed[alt*=center] { + margin: auto; +} + +:not(.lp-embed-float) .is-live-preview .internal-embed:is([alt*=right], [alt*=left]) { + float: unset; +} + +/*Embed Link Hide/Move*/ +.internal-embed:is([alt~=lk-hvr], [alt~=link-hover]):not(:hover) .markdown-embed-link, +.internal-embed:is([alt~=nlk], [alt~=no-link]) .markdown-embed-link { + display: none; +} + +.internal-embed:is([alt*=lk-l], [alt~=link-left]) .markdown-embed-link { + left: 10px; + right: unset; +} + +.internal-embed:is([alt*=lk-clear], [alt~=link-clear]) .markdown-embed-link { + background-color: transparent; +} + +/*Title Hide/Show*/ +.internal-embed:is([alt~=no-t], +[alt~=no-title]) .markdown-embed-title, +.file-embed-title { + display: none; +} + +.internal-embed:is([alt~=no-inline-title], +[alt~=no-it]) .inline-title, +.file-embed-title { + display: none; +} + +.internal-embed:is([alt~=ttl], +[alt~=title]) .markdown-embed-title, +.file-embed-title { + display: block; +} + +/*Hide Headings*/ +.internal-embed[alt~=no-h] .markdown-embed :is(h1, +h2, +h3, +h4, +h5, +h6), +.internal-embed[alt~=no-h].markdown-embed :is(h1, +h2, +h3, +h4, +h5, +h6) { + display: none; +} + +/*Hide Specific Headings*/ +.internal-embed[alt~=no-h1] .markdown-embed h1, +.internal-embed[alt~=no-h2] .markdown-embed h2, +.internal-embed[alt~=no-h3] .markdown-embed h3, +.internal-embed[alt~=no-h4] .markdown-embed h4, +.internal-embed[alt~=no-h5] .markdown-embed h5, +.internal-embed[alt~=no-h6] .markdown-embed h6, +.internal-embed[alt~=no-h1].markdown-embed h1, +.internal-embed[alt~=no-h2].markdown-embed h2, +.internal-embed[alt~=no-h3].markdown-embed h3, +.internal-embed[alt~=no-h4].markdown-embed h4, +.internal-embed[alt~=no-h5].markdown-embed h5, +.internal-embed[alt~=no-h6].markdown-embed h6 { + display: none; +} + +.internal-embed:is([alt~=no-margin], [alt~=nmg]) { + --embed-padding: 0; + --embed-title-padding: 0; +} + +.internal-embed[alt~=collapse] { + --embed-padding:0; + --embed-title-padding: 0; + --p-spacing: 0; +} +.internal-embed[alt~=collapse] *:not(.tag, .callout) { + margin-block-start: 0; + margin-block-end: 0; +} + +body.embed-mini-headers .markdown-embed { + --h1-size: var(--embed-header-size); + --h2-size: var(--embed-header-size); + --h3-size: var(--embed-header-size); + --h4-size: var(--embed-header-size); + --h5-size: var(--embed-header-size); + --h6-size: var(--embed-header-size); +} + +/*Clean Embeds*/ +.embed-clean .internal-embed > .markdown-embed, .embed-clean .internal-embed.is-loaded:not(.image-embed), +.internal-embed[alt*=clean] > .markdown-embed, +.internal-embed[alt*=clean].is-loaded:not(.image-embed) { + --embed-padding: 0; + border: none; + box-shadow: none; +} +.embed-clean .internal-embed > .markdown-embed:not(:hover), .embed-clean .internal-embed.is-loaded:not(.image-embed):not(:hover), +.internal-embed[alt*=clean] > .markdown-embed:not(:hover), +.internal-embed[alt*=clean].is-loaded:not(.image-embed):not(:hover) { + --embed-border-color: transparent; + --embed-border-left-color: var(--embed-border-color); + --embed-border-right-color: var(--embed-border-color); + --embed-border-top-color: var(--embed-border-color); + --embed-border-bottom-color: var(--embed-border-color); + --embed-border-left: var(--embed-thickness) var(--embed-border-type) var(--embed-border-left-color); + --embed-border-right: var(--embed-thickness) var(--embed-border-type) var(--embed-border-right-color); + --embed-border-top: var(--embed-thickness) var(--embed-border-type) var(--embed-border-top-color); + --embed-border-bottom: var(--embed-thickness) var(--embed-border-type) var(--embed-border-bottom-color); +} +.embed-clean .internal-embed.inline-embed, +.internal-embed[alt*=clean].inline-embed { + --embed-title-padding: 0; +} + +.embed-dark-background { + --embed-background: var(--embed-bg); + --embed-border-left-color: transparent; + --embed-border-color-hover: var(--accent); + --embed-border-left-color-hover: var(--embed-border-color-hover); + --embed-border-right-color-hover: var(--embed-border-color-hover); + --embed-border-top-color-hover: var(--embed-border-color-hover); + --embed-border-bottom-color-hover: var(--embed-border-color-hover); + --hr-icon-background: var(--embed-bg); + --blockquote-background-color: linear-gradient(to right, var(--note), transparent); + --table-border-color: var(--embed-bg); +} + +.theme-dark { + --chbx-q: 253, 175, 0; + --chbx-h: 92, 118, 153; + --chbx-d: 62, 69, 82; + --chbx-i: 194, 42, 42; + --chbx-a: 248, 114, 181; + --chbx-R: 170, 179, 202; + --chbx-id:231, 231, 171; + --chbx-B: 136, 94, 233; + --chbx-P: 79, 165, 79; + --chbx-C: 207, 67, 67; + --chbx-N: 133, 91, 65; + --chbx-b: 230, 129, 63; + --chbx-I: 82, 139, 212; + --chbx-c: 149, 233, 238; + --chbx-r: 249, 190, 123; +} + +.theme-light { + --chbx-q: 253, 175, 0; + --chbx-h: 168, 177, 189; + --chbx-d: 203, 212, 235; + --chbx-i: 219, 1, 1; + --chbx-a: 248, 114, 181; + --chbx-R: 159, 186, 223; + --chbx-id:202, 199, 0; + --chbx-B: 182, 118, 255; + --chbx-P: 79, 165, 79; + --chbx-C: 214, 108, 108; + --chbx-N: 161, 106, 73; + --chbx-b: 251, 146, 76; + --chbx-I: 82, 139, 212; + --chbx-c: 149, 217, 238; + --chbx-r: 249, 190, 123; +} + +body:not(.alt-chkbx-off) .markdown-source-view.mod-cm6 .HyperMD-task-line[data-task]:is([data-task=X], +[data-task=">"], +[data-task="-"], +[data-task=">"], +[data-task=D], +[data-task="?"], +[data-task="/"], +[data-task="+"], +[data-task=R], +[data-task="!"], +[data-task=i], +[data-task=B], +[data-task=P], +[data-task=C], +[data-task=Q], +[data-task=N], +[data-task=b], +[data-task=I], +[data-task=p], +[data-task=L], +[data-task=E], +[data-task=A], +[data-task=r], +[data-task=c], +[data-task=o], +[data-task=d], +[data-task=T], +[data-task=t], +[data-task=O], +[data-task=F], +[data-task=W], +[data-task="~"], +[data-task="@"], +[data-task=f], +[data-task=a], +[data-task="&"], +[data-task=s], +[data-task=H]) :is(.task-list-label, p) > input:is([type=checkbox], [type=checkbox i]):checked, body:not(.alt-chkbx-off) .markdown-source-view.mod-cm6 .HyperMD-task-line[data-task]:is([data-task=X], +[data-task=">"], +[data-task="-"], +[data-task=">"], +[data-task=D], +[data-task="?"], +[data-task="/"], +[data-task="+"], +[data-task=R], +[data-task="!"], +[data-task=i], +[data-task=B], +[data-task=P], +[data-task=C], +[data-task=Q], +[data-task=N], +[data-task=b], +[data-task=I], +[data-task=p], +[data-task=L], +[data-task=E], +[data-task=A], +[data-task=r], +[data-task=c], +[data-task=o], +[data-task=d], +[data-task=T], +[data-task=t], +[data-task=O], +[data-task=F], +[data-task=W], +[data-task="~"], +[data-task="@"], +[data-task=f], +[data-task=a], +[data-task="&"], +[data-task=s], +[data-task=H]) > input:is([type=checkbox], [type=checkbox i]):checked, body:not(.alt-chkbx-off) .task-list-item.is-checked:is([data-task=X], +[data-task=">"], +[data-task="-"], +[data-task=">"], +[data-task=D], +[data-task="?"], +[data-task="/"], +[data-task="+"], +[data-task=R], +[data-task="!"], +[data-task=i], +[data-task=B], +[data-task=P], +[data-task=C], +[data-task=Q], +[data-task=N], +[data-task=b], +[data-task=I], +[data-task=p], +[data-task=L], +[data-task=E], +[data-task=A], +[data-task=r], +[data-task=c], +[data-task=o], +[data-task=d], +[data-task=T], +[data-task=t], +[data-task=O], +[data-task=F], +[data-task=W], +[data-task="~"], +[data-task="@"], +[data-task=f], +[data-task=a], +[data-task="&"], +[data-task=s], +[data-task=H]) :is(.task-list-label, p) > input:is([type=checkbox], [type=checkbox i]):checked, body:not(.alt-chkbx-off) .task-list-item.is-checked:is([data-task=X], +[data-task=">"], +[data-task="-"], +[data-task=">"], +[data-task=D], +[data-task="?"], +[data-task="/"], +[data-task="+"], +[data-task=R], +[data-task="!"], +[data-task=i], +[data-task=B], +[data-task=P], +[data-task=C], +[data-task=Q], +[data-task=N], +[data-task=b], +[data-task=I], +[data-task=p], +[data-task=L], +[data-task=E], +[data-task=A], +[data-task=r], +[data-task=c], +[data-task=o], +[data-task=d], +[data-task=T], +[data-task=t], +[data-task=O], +[data-task=F], +[data-task=W], +[data-task="~"], +[data-task="@"], +[data-task=f], +[data-task=a], +[data-task="&"], +[data-task=s], +[data-task=H]) > input:is([type=checkbox], [type=checkbox i]):checked { + background-color: transparent; + font: var(--its); + font-family: var(--its); + font-size: inherit; + font-weight: 10; + text-align: center; + border: 0; + cursor: pointer; +} +body:not(.alt-chkbx-off) .markdown-source-view.mod-cm6 .HyperMD-task-line[data-task]:is([data-task=X], +[data-task=">"], +[data-task="-"], +[data-task=">"], +[data-task=D], +[data-task="?"], +[data-task="/"], +[data-task="+"], +[data-task=R], +[data-task="!"], +[data-task=i], +[data-task=B], +[data-task=P], +[data-task=C], +[data-task=Q], +[data-task=N], +[data-task=b], +[data-task=I], +[data-task=p], +[data-task=L], +[data-task=E], +[data-task=A], +[data-task=r], +[data-task=c], +[data-task=o], +[data-task=d], +[data-task=T], +[data-task=t], +[data-task=O], +[data-task=F], +[data-task=W], +[data-task="~"], +[data-task="@"], +[data-task=f], +[data-task=a], +[data-task="&"], +[data-task=s], +[data-task=H]) :is(.task-list-label, p) > input:is([type=checkbox], [type=checkbox i]):checked::after, body:not(.alt-chkbx-off) .markdown-source-view.mod-cm6 .HyperMD-task-line[data-task]:is([data-task=X], +[data-task=">"], +[data-task="-"], +[data-task=">"], +[data-task=D], +[data-task="?"], +[data-task="/"], +[data-task="+"], +[data-task=R], +[data-task="!"], +[data-task=i], +[data-task=B], +[data-task=P], +[data-task=C], +[data-task=Q], +[data-task=N], +[data-task=b], +[data-task=I], +[data-task=p], +[data-task=L], +[data-task=E], +[data-task=A], +[data-task=r], +[data-task=c], +[data-task=o], +[data-task=d], +[data-task=T], +[data-task=t], +[data-task=O], +[data-task=F], +[data-task=W], +[data-task="~"], +[data-task="@"], +[data-task=f], +[data-task=a], +[data-task="&"], +[data-task=s], +[data-task=H]) > input:is([type=checkbox], [type=checkbox i]):checked::after, body:not(.alt-chkbx-off) .task-list-item.is-checked:is([data-task=X], +[data-task=">"], +[data-task="-"], +[data-task=">"], +[data-task=D], +[data-task="?"], +[data-task="/"], +[data-task="+"], +[data-task=R], +[data-task="!"], +[data-task=i], +[data-task=B], +[data-task=P], +[data-task=C], +[data-task=Q], +[data-task=N], +[data-task=b], +[data-task=I], +[data-task=p], +[data-task=L], +[data-task=E], +[data-task=A], +[data-task=r], +[data-task=c], +[data-task=o], +[data-task=d], +[data-task=T], +[data-task=t], +[data-task=O], +[data-task=F], +[data-task=W], +[data-task="~"], +[data-task="@"], +[data-task=f], +[data-task=a], +[data-task="&"], +[data-task=s], +[data-task=H]) :is(.task-list-label, p) > input:is([type=checkbox], [type=checkbox i]):checked::after, body:not(.alt-chkbx-off) .task-list-item.is-checked:is([data-task=X], +[data-task=">"], +[data-task="-"], +[data-task=">"], +[data-task=D], +[data-task="?"], +[data-task="/"], +[data-task="+"], +[data-task=R], +[data-task="!"], +[data-task=i], +[data-task=B], +[data-task=P], +[data-task=C], +[data-task=Q], +[data-task=N], +[data-task=b], +[data-task=I], +[data-task=p], +[data-task=L], +[data-task=E], +[data-task=A], +[data-task=r], +[data-task=c], +[data-task=o], +[data-task=d], +[data-task=T], +[data-task=t], +[data-task=O], +[data-task=F], +[data-task=W], +[data-task="~"], +[data-task="@"], +[data-task=f], +[data-task=a], +[data-task="&"], +[data-task=s], +[data-task=H]) > input:is([type=checkbox], [type=checkbox i]):checked::after { + background-color: transparent; + top: -4px; + left: 0px; + -webkit-mask-image: unset; +} + +ul > li.task-list-item[data-task=x] > ul li:not([data-task=x]) { + color: var(--text-normal); +} + +/*--Checkbox Type Icons--*/ +body:not(.alt-chkbx-off) .markdown-source-view.mod-cm6 .task-list-item-checkbox[data-task=X]::after, body:not(.alt-chkbx-off) .task-list-item.is-checked[data-task=X] > input[type=checkbox]:checked::after, body:not(.alt-chkbx-off) .task-list-item.is-checked[data-task=X] p > input[type=checkbox]:checked::after { + content: "\ec01"; + color: var(--accent2-lite, var(--text-accent)); +} +body:not(.alt-chkbx-off) .markdown-source-view.mod-cm6 .task-list-item-checkbox[data-task=">"]::after, body:not(.alt-chkbx-off) .task-list-item.is-checked[data-task=">"] > input[type=checkbox]:checked::after, body:not(.alt-chkbx-off) .task-list-item.is-checked[data-task=">"] p > input[type=checkbox]:checked::after { + content: "\ec03"; + color: var(--text-normal); +} +body:not(.alt-chkbx-off) .markdown-source-view.mod-cm6 .task-list-item-checkbox[data-task=D]::after, body:not(.alt-chkbx-off) .task-list-item.is-checked[data-task=D] > input[type=checkbox]:checked::after, body:not(.alt-chkbx-off) .task-list-item.is-checked[data-task=D] p > input[type=checkbox]:checked::after { + content: "\ec04"; + color: rgb(var(--chbx-h)); +} +body:not(.alt-chkbx-off) .markdown-source-view.mod-cm6 .task-list-item-checkbox[data-task="-"]::after, body:not(.alt-chkbx-off) .task-list-item.is-checked[data-task="-"] > input[type=checkbox]:checked::after, body:not(.alt-chkbx-off) .task-list-item.is-checked[data-task="-"] p > input[type=checkbox]:checked::after { + content: "\ec02"; + color: rgb(var(--chbx-d)); +} +body:not(.alt-chkbx-off) .markdown-source-view.mod-cm6 .task-list-item-checkbox[data-task="?"]::after, body:not(.alt-chkbx-off) .task-list-item.is-checked[data-task="?"] > input[type=checkbox]:checked::after, body:not(.alt-chkbx-off) .task-list-item.is-checked[data-task="?"] p > input[type=checkbox]:checked::after { + content: "\ec05"; + color: rgb(var(--chbx-q)); +} +body:not(.alt-chkbx-off) .markdown-source-view.mod-cm6 .task-list-item-checkbox[data-task="!"]::after, body:not(.alt-chkbx-off) .task-list-item.is-checked[data-task="!"] > input[type=checkbox]:checked::after, body:not(.alt-chkbx-off) .task-list-item.is-checked[data-task="!"] p > input[type=checkbox]:checked::after { + content: "\ec08"; + color: rgb(var(--chbx-i)); +} +body:not(.alt-chkbx-off) .markdown-source-view.mod-cm6 .task-list-item-checkbox[data-task="+"]::after, body:not(.alt-chkbx-off) .task-list-item.is-checked[data-task="+"] > input[type=checkbox]:checked::after, body:not(.alt-chkbx-off) .task-list-item.is-checked[data-task="+"] p > input[type=checkbox]:checked::after { + content: "\ec06"; + color: rgb(var(--chbx-a)); +} +body:not(.alt-chkbx-off) .markdown-source-view.mod-cm6 .task-list-item-checkbox[data-task="/"]::after, body:not(.alt-chkbx-off) .task-list-item.is-checked[data-task="/"] > input[type=checkbox]:checked::after, body:not(.alt-chkbx-off) .task-list-item.is-checked[data-task="/"] p > input[type=checkbox]:checked::after { + content: "\ec17"; + color: var(--accent, var(--interactive-accent)); +} +body:not(.alt-chkbx-off) .markdown-source-view.mod-cm6 .task-list-item-checkbox[data-task=R]::after, body:not(.alt-chkbx-off) .task-list-item.is-checked[data-task=R] > input[type=checkbox]:checked::after, body:not(.alt-chkbx-off) .task-list-item.is-checked[data-task=R] p > input[type=checkbox]:checked::after { + content: "\ec07"; + color: rgb(var(--chbx-R)); +} +body:not(.alt-chkbx-off) .markdown-source-view.mod-cm6 .task-list-item-checkbox[data-task=i]::after, body:not(.alt-chkbx-off) .task-list-item.is-checked[data-task=i] > input[type=checkbox]:checked::after, body:not(.alt-chkbx-off) .task-list-item.is-checked[data-task=i] p > input[type=checkbox]:checked::after { + content: "\ec09"; + color: rgb(var(--chbx-id)); +} +body:not(.alt-chkbx-off) .markdown-source-view.mod-cm6 .task-list-item-checkbox[data-task=B]::after, body:not(.alt-chkbx-off) .task-list-item.is-checked[data-task=B] > input[type=checkbox]:checked::after, body:not(.alt-chkbx-off) .task-list-item.is-checked[data-task=B] p > input[type=checkbox]:checked::after { + content: "\ec10"; + color: rgb(var(--chbx-B)); +} +body:not(.alt-chkbx-off) .markdown-source-view.mod-cm6 .task-list-item-checkbox[data-task=P]::after, body:not(.alt-chkbx-off) .task-list-item.is-checked[data-task=P] > input[type=checkbox]:checked::after, body:not(.alt-chkbx-off) .task-list-item.is-checked[data-task=P] p > input[type=checkbox]:checked::after { + content: "\ec11"; + color: rgb(var(--chbx-P)); +} +body:not(.alt-chkbx-off) .markdown-source-view.mod-cm6 .task-list-item-checkbox[data-task=C]::after, body:not(.alt-chkbx-off) .task-list-item.is-checked[data-task=C] > input[type=checkbox]:checked::after, body:not(.alt-chkbx-off) .task-list-item.is-checked[data-task=C] p > input[type=checkbox]:checked::after { + content: "\ec12"; + color: rgb(var(--chbx-C)); +} +body:not(.alt-chkbx-off) .markdown-source-view.mod-cm6 .task-list-item-checkbox[data-task=I]::after, body:not(.alt-chkbx-off) .task-list-item.is-checked[data-task=I] > input[type=checkbox]:checked::after, body:not(.alt-chkbx-off) .task-list-item.is-checked[data-task=I] p > input[type=checkbox]:checked::after { + content: "\ec16"; + color: rgb(var(--chbx-I)); +} +body:not(.alt-chkbx-off) .markdown-source-view.mod-cm6 .task-list-item-checkbox[data-task=Q]::after, body:not(.alt-chkbx-off) .task-list-item.is-checked[data-task=Q] > input[type=checkbox]:checked::after, body:not(.alt-chkbx-off) .task-list-item.is-checked[data-task=Q] p > input[type=checkbox]:checked::after { + content: "\ec13"; + color: rgb(var(--chbx-R)); +} +body:not(.alt-chkbx-off) .markdown-source-view.mod-cm6 .task-list-item-checkbox[data-task=N]::after, body:not(.alt-chkbx-off) .task-list-item.is-checked[data-task=N] > input[type=checkbox]:checked::after, body:not(.alt-chkbx-off) .task-list-item.is-checked[data-task=N] p > input[type=checkbox]:checked::after { + content: "\ec14"; + color: rgb(var(--chbx-N)); +} +body:not(.alt-chkbx-off) .markdown-source-view.mod-cm6 .task-list-item-checkbox[data-task=b]::after, body:not(.alt-chkbx-off) .task-list-item.is-checked[data-task=b] > input[type=checkbox]:checked::after, body:not(.alt-chkbx-off) .task-list-item.is-checked[data-task=b] p > input[type=checkbox]:checked::after { + content: "\ec15"; + color: rgb(var(--chbx-b)); +} +body:not(.alt-chkbx-off) .markdown-source-view.mod-cm6 .task-list-item-checkbox[data-task=p]::after, body:not(.alt-chkbx-off) .task-list-item.is-checked[data-task=p] > input[type=checkbox]:checked::after, body:not(.alt-chkbx-off) .task-list-item.is-checked[data-task=p] p > input[type=checkbox]:checked::after { + content: "\ec19"; + color: rgb(var(--chbx-R)); +} +body:not(.alt-chkbx-off) .markdown-source-view.mod-cm6 .task-list-item-checkbox[data-task=E]::after, body:not(.alt-chkbx-off) .task-list-item.is-checked[data-task=E] > input[type=checkbox]:checked::after, body:not(.alt-chkbx-off) .task-list-item.is-checked[data-task=E] p > input[type=checkbox]:checked::after { + content: "\ec18"; + color: rgb(var(--chbx-I)); +} +body:not(.alt-chkbx-off) .markdown-source-view.mod-cm6 .task-list-item-checkbox[data-task=L]::after, body:not(.alt-chkbx-off) .task-list-item.is-checked[data-task=L] > input[type=checkbox]:checked::after, body:not(.alt-chkbx-off) .task-list-item.is-checked[data-task=L] p > input[type=checkbox]:checked::after { + content: "\ec21"; + color: rgb(var(--chbx-N)); +} +body:not(.alt-chkbx-off) .markdown-source-view.mod-cm6 .task-list-item-checkbox[data-task=A]::after, body:not(.alt-chkbx-off) .task-list-item.is-checked[data-task=A] > input[type=checkbox]:checked::after, body:not(.alt-chkbx-off) .task-list-item.is-checked[data-task=A] p > input[type=checkbox]:checked::after { + content: "\ec20"; + color: rgb(var(--chbx-P)); +} +body:not(.alt-chkbx-off) .markdown-source-view.mod-cm6 .task-list-item-checkbox[data-task=r]::after, body:not(.alt-chkbx-off) .task-list-item.is-checked[data-task=r] > input[type=checkbox]:checked::after, body:not(.alt-chkbx-off) .task-list-item.is-checked[data-task=r] p > input[type=checkbox]:checked::after { + content: "\ec22"; + color: rgb(var(--chbx-r)); +} +body:not(.alt-chkbx-off) .markdown-source-view.mod-cm6 .task-list-item-checkbox[data-task=c]::after, body:not(.alt-chkbx-off) .task-list-item.is-checked[data-task=c] > input[type=checkbox]:checked::after, body:not(.alt-chkbx-off) .task-list-item.is-checked[data-task=c] p > input[type=checkbox]:checked::after { + content: "\ec29"; + color: rgb(var(--chbx-c)); +} +body:not(.alt-chkbx-off) .markdown-source-view.mod-cm6 .task-list-item-checkbox[data-task=o]::after, body:not(.alt-chkbx-off) .task-list-item.is-checked[data-task=o] > input[type=checkbox]:checked::after, body:not(.alt-chkbx-off) .task-list-item.is-checked[data-task=o] p > input[type=checkbox]:checked::after { + content: "\ec24"; + color: rgb(var(--chbx-b)); +} +body:not(.alt-chkbx-off) .markdown-source-view.mod-cm6 .task-list-item-checkbox[data-task=d]::after, body:not(.alt-chkbx-off) .task-list-item.is-checked[data-task=d] > input[type=checkbox]:checked::after, body:not(.alt-chkbx-off) .task-list-item.is-checked[data-task=d] p > input[type=checkbox]:checked::after { + content: "\ec25"; + color: rgb(var(--chbx-I)); +} +body:not(.alt-chkbx-off) .markdown-source-view.mod-cm6 .task-list-item-checkbox[data-task=T]::after, body:not(.alt-chkbx-off) .task-list-item.is-checked[data-task=T] > input[type=checkbox]:checked::after, body:not(.alt-chkbx-off) .task-list-item.is-checked[data-task=T] p > input[type=checkbox]:checked::after { + content: "\ec26"; + color: rgb(var(--chbx-R)); +} +body:not(.alt-chkbx-off) .markdown-source-view.mod-cm6 .task-list-item-checkbox[data-task=t]::after, body:not(.alt-chkbx-off) .task-list-item.is-checked[data-task=t] > input[type=checkbox]:checked::after, body:not(.alt-chkbx-off) .task-list-item.is-checked[data-task=t] p > input[type=checkbox]:checked::after { + content: "\ec27"; + color: rgb(var(--chbx-R)); +} +body:not(.alt-chkbx-off) .markdown-source-view.mod-cm6 .task-list-item-checkbox[data-task=O]::after, body:not(.alt-chkbx-off) .task-list-item.is-checked[data-task=O] > input[type=checkbox]:checked::after, body:not(.alt-chkbx-off) .task-list-item.is-checked[data-task=O] p > input[type=checkbox]:checked::after { + content: "\e805"; + color: rgb(var(--selected-rgb)); +} +body:not(.alt-chkbx-off) .markdown-source-view.mod-cm6 .task-list-item-checkbox[data-task=F]::after, body:not(.alt-chkbx-off) .task-list-item.is-checked[data-task=F] > input[type=checkbox]:checked::after, body:not(.alt-chkbx-off) .task-list-item.is-checked[data-task=F] p > input[type=checkbox]:checked::after { + content: "\ec28"; + color: rgb(var(--chbx-h)); +} +body:not(.alt-chkbx-off) .markdown-source-view.mod-cm6 .task-list-item-checkbox[data-task=W]::after, body:not(.alt-chkbx-off) .task-list-item.is-checked[data-task=W] > input[type=checkbox]:checked::after, body:not(.alt-chkbx-off) .task-list-item.is-checked[data-task=W] p > input[type=checkbox]:checked::after { + content: "\e813"; + color: rgb(var(--chbx-P)); +} +body:not(.alt-chkbx-off) .markdown-source-view.mod-cm6 .task-list-item-checkbox[data-task="~"]::after, body:not(.alt-chkbx-off) .task-list-item.is-checked[data-task="~"] > input[type=checkbox]:checked::after, body:not(.alt-chkbx-off) .task-list-item.is-checked[data-task="~"] p > input[type=checkbox]:checked::after { + content: "\ec33"; + color: rgb(var(--chbx-C)); +} +body:not(.alt-chkbx-off) .markdown-source-view.mod-cm6 .task-list-item-checkbox[data-task="@"]::after, body:not(.alt-chkbx-off) .task-list-item.is-checked[data-task="@"] > input[type=checkbox]:checked::after, body:not(.alt-chkbx-off) .task-list-item.is-checked[data-task="@"] p > input[type=checkbox]:checked::after { + content: "\e900"; + color: rgb(var(--chbx-b)); +} +body:not(.alt-chkbx-off) .markdown-source-view.mod-cm6 .task-list-item-checkbox[data-task=f]::after, body:not(.alt-chkbx-off) .task-list-item.is-checked[data-task=f] > input[type=checkbox]:checked::after, body:not(.alt-chkbx-off) .task-list-item.is-checked[data-task=f] p > input[type=checkbox]:checked::after { + content: "\e81e"; + color: rgb(var(--chbx-N)); +} +body:not(.alt-chkbx-off) .markdown-source-view.mod-cm6 .task-list-item-checkbox[data-task=H]::after, body:not(.alt-chkbx-off) .task-list-item.is-checked[data-task=H] > input[type=checkbox]:checked::after, body:not(.alt-chkbx-off) .task-list-item.is-checked[data-task=H] p > input[type=checkbox]:checked::after { + content: "\ec30"; + color: rgb(var(--chbx-a)); +} +body:not(.alt-chkbx-off) .markdown-source-view.mod-cm6 .task-list-item-checkbox[data-task="&"]::after, body:not(.alt-chkbx-off) .task-list-item.is-checked[data-task="&"] > input[type=checkbox]:checked::after, body:not(.alt-chkbx-off) .task-list-item.is-checked[data-task="&"] p > input[type=checkbox]:checked::after { + content: "\ec32"; + color: rgb(var(--chbx-B)); +} +body:not(.alt-chkbx-off) .markdown-source-view.mod-cm6 .task-list-item-checkbox[data-task=s]::after, body:not(.alt-chkbx-off) .task-list-item.is-checked[data-task=s] > input[type=checkbox]:checked::after, body:not(.alt-chkbx-off) .task-list-item.is-checked[data-task=s] p > input[type=checkbox]:checked::after { + content: "\ec31"; + color: rgb(var(--chbx-d)); +} + +/*Restore Strike Throughs*/ +.check-strike .markdown-source-view.mod-cm6 .HyperMD-task-line[data-task]:not([data-task=" "]), .check-strike .markdown-preview-view ul > li.task-list-item.is-checked, .check-strike .markdown-preview-view ol > li.task-list-item.is-checked { + text-decoration: line-through 2px; +} + +.checkbox-strike-regular .markdown-source-view.mod-cm6 .HyperMD-task-line[data-task=x], .checkbox-strike-regular ul li[data-task=x].task-list-item.is-checked { + text-decoration: line-through 2px; +} + +.checkbox-strike-checked .markdown-source-view.mod-cm6 .HyperMD-task-line[data-task=X], .checkbox-strike-checked ul li[data-task=X].task-list-item.is-checked { + text-decoration: line-through 2px; +} + +.checkbox-strike-frwd .markdown-source-view.mod-cm6 .HyperMD-task-line[data-task=">"], .checkbox-strike-frwd ul li[data-task=">"].task-list-item.is-checked { + text-decoration: line-through 2px; +} + +.checkbox-strike-date .markdown-source-view.mod-cm6 .HyperMD-task-line[data-task=D], .checkbox-strike-date ul li[data-task=D].task-list-item.is-checked { + text-decoration: line-through 2px; +} + +.checkbox-strike-dropped .markdown-source-view.mod-cm6 .HyperMD-task-line[data-task="-"], .checkbox-strike-dropped ul li[data-task="-"].task-list-item.is-checked { + text-decoration: line-through 2px; +} + +.checkbox-strike-q .markdown-source-view.mod-cm6 .HyperMD-task-line[data-task="?"], .checkbox-strike-q ul li[data-task="?"].task-list-item.is-checked { + text-decoration: line-through 2px; +} + +.checkbox-strike-imp .markdown-source-view.mod-cm6 .HyperMD-task-line[data-task="!"], .checkbox-strike-imp ul li[data-task="!"].task-list-item.is-checked { + text-decoration: line-through 2px; +} + +.checkbox-strike-add .markdown-source-view.mod-cm6 .HyperMD-task-line[data-task="+"], .checkbox-strike-add ul li[data-task="+"].task-list-item.is-checked { + text-decoration: line-through 2px; +} + +.checkbox-strike-half .markdown-source-view.mod-cm6 .HyperMD-task-line[data-task="/"], .checkbox-strike-half ul li[data-task="/"].task-list-item.is-checked { + text-decoration: line-through 2px; +} + +.checkbox-strike-rsrch .markdown-source-view.mod-cm6 .HyperMD-task-line[data-task=R], .checkbox-strike-rsrch ul li[data-task=R].task-list-item.is-checked { + text-decoration: line-through 2px; +} + +.checkbox-strike-idea .markdown-source-view.mod-cm6 .HyperMD-task-line[data-task=i], .checkbox-strike-idea ul li[data-task=i].task-list-item.is-checked { + text-decoration: line-through 2px; +} + +.checkbox-strike-brn .markdown-source-view.mod-cm6 .HyperMD-task-line[data-task=B], .checkbox-strike-brn ul li[data-task=B].task-list-item.is-checked { + text-decoration: line-through 2px; +} + +.checkbox-strike-pro .markdown-source-view.mod-cm6 .HyperMD-task-line[data-task=P], .checkbox-strike-pro ul li[data-task=P].task-list-item.is-checked { + text-decoration: line-through 2px; +} + +.checkbox-strike-con .markdown-source-view.mod-cm6 .HyperMD-task-line[data-task=C], .checkbox-strike-con ul li[data-task=C].task-list-item.is-checked { + text-decoration: line-through 2px; +} + +.checkbox-strike-info .markdown-source-view.mod-cm6 .HyperMD-task-line[data-task=I], .checkbox-strike-info ul li[data-task=I].task-list-item.is-checked { + text-decoration: line-through 2px; +} + +.checkbox-strike-quot .markdown-source-view.mod-cm6 .HyperMD-task-line[data-task=Q], .checkbox-strike-quot ul li[data-task=Q].task-list-item.is-checked { + text-decoration: line-through 2px; +} + +.checkbox-strike-note .markdown-source-view.mod-cm6 .HyperMD-task-line[data-task=N], .checkbox-strike-note ul li[data-task=N].task-list-item.is-checked { + text-decoration: line-through 2px; +} + +.checkbox-strike-book .markdown-source-view.mod-cm6 .HyperMD-task-line[data-task=b], .checkbox-strike-book ul li[data-task=b].task-list-item.is-checked { + text-decoration: line-through 2px; +} + +.checkbox-strike-para .markdown-source-view.mod-cm6 .HyperMD-task-line[data-task=p], .checkbox-strike-para ul li[data-task=p].task-list-item.is-checked { + text-decoration: line-through 2px; +} + +.checkbox-strike-ex .markdown-source-view.mod-cm6 .HyperMD-task-line[data-task=E], .checkbox-strike-ex ul li[data-task=E].task-list-item.is-checked { + text-decoration: line-through 2px; +} + +.checkbox-strike-loc .markdown-source-view.mod-cm6 .HyperMD-task-line[data-task=L], .checkbox-strike-loc ul li[data-task=L].task-list-item.is-checked { + text-decoration: line-through 2px; +} + +.checkbox-strike-ans .markdown-source-view.mod-cm6 .HyperMD-task-line[data-task=A], .checkbox-strike-ans ul li[data-task=A].task-list-item.is-checked { + text-decoration: line-through 2px; +} + +.checkbox-strike-rwd .markdown-source-view.mod-cm6 .HyperMD-task-line[data-task=r], .checkbox-strike-rwd ul li[data-task=r].task-list-item.is-checked { + text-decoration: line-through 2px; +} + +.checkbox-strike-choice .markdown-source-view.mod-cm6 .HyperMD-task-line[data-task=c], .checkbox-strike-choice ul li[data-task=c].task-list-item.is-checked { + text-decoration: line-through 2px; +} + +.checkbox-strike-option .markdown-source-view.mod-cm6 .HyperMD-task-line[data-task=o], .checkbox-strike-option ul li[data-task=o].task-list-item.is-checked { + text-decoration: line-through 2px; +} + +.checkbox-strike-do .markdown-source-view.mod-cm6 .HyperMD-task-line[data-task=d], .checkbox-strike-do ul li[data-task=d].task-list-item.is-checked { + text-decoration: line-through 2px; +} + +.checkbox-strike-time .markdown-source-view.mod-cm6 .HyperMD-task-line[data-task=T], .checkbox-strike-time ul li[data-task=T].task-list-item.is-checked { + text-decoration: line-through 2px; +} + +.checkbox-strike-talk .markdown-source-view.mod-cm6 .HyperMD-task-line[data-task=t], .checkbox-strike-talk ul li[data-task=t].task-list-item.is-checked { + text-decoration: line-through 2px; +} + +.checkbox-strike-plot .markdown-source-view.mod-cm6 .HyperMD-task-line[data-task=O], .checkbox-strike-plot ul li[data-task=O].task-list-item.is-checked { + text-decoration: line-through 2px; +} + +.checkbox-strike-fore .markdown-source-view.mod-cm6 .HyperMD-task-line[data-task=F], .checkbox-strike-fore ul li[data-task=F].task-list-item.is-checked { + text-decoration: line-through 2px; +} + +.checkbox-strike-world .markdown-source-view.mod-cm6 .HyperMD-task-line[data-task=W], .checkbox-strike-world ul li[data-task=W].task-list-item.is-checked { + text-decoration: line-through 2px; +} + +.checkbox-strike-conf .markdown-source-view.mod-cm6 .HyperMD-task-line[data-task="~"], .checkbox-strike-conf ul li[data-task="~"].task-list-item.is-checked { + text-decoration: line-through 2px; +} + +.checkbox-strike-char .markdown-source-view.mod-cm6 .HyperMD-task-line[data-task="@"], .checkbox-strike-char ul li[data-task="@"].task-list-item.is-checked { + text-decoration: line-through 2px; +} + +.checkbox-strike-clue .markdown-source-view.mod-cm6 .HyperMD-task-line[data-task=f], .checkbox-strike-clue ul li[data-task=f].task-list-item.is-checked { + text-decoration: line-through 2px; +} + +.checkbox-strike-heal .markdown-source-view.mod-cm6 .HyperMD-task-line[data-task=H], .checkbox-strike-heal ul li[data-task=H].task-list-item.is-checked { + text-decoration: line-through 2px; +} + +.checkbox-strike-symb .markdown-source-view.mod-cm6 .HyperMD-task-line[data-task="&"], .checkbox-strike-symb ul li[data-task="&"].task-list-item.is-checked { + text-decoration: line-through 2px; +} + +.checkbox-strike-lock .markdown-source-view.mod-cm6 .HyperMD-task-line[data-task=s], .checkbox-strike-lock ul li[data-task=s].task-list-item.is-checked { + text-decoration: line-through 2px; +} + +/*----Checked Bg----*/ +.check-bg .markdown-source-view.mod-cm6 .HyperMD-task-line[data-task][data-task=X], +.check-bg :is(ul, ol) > li[data-task=X].task-list-item.is-checked { + background: rgba(var(--chbx-R), 20%); +} +.check-bg .markdown-source-view.mod-cm6 .HyperMD-task-line[data-task][data-task=">"], +.check-bg :is(ul, ol) > li[data-task=">"].task-list-item.is-checked { + background: rgba(var(--chbx-h), 20%); +} +.check-bg .markdown-source-view.mod-cm6 .HyperMD-task-line[data-task][data-task=D], +.check-bg :is(ul, ol) > li[data-task=D].task-list-item.is-checked { + background: rgba(var(--chbx-h), 20%); +} +.check-bg .markdown-source-view.mod-cm6 .HyperMD-task-line[data-task][data-task="-"], +.check-bg :is(ul, ol) > li[data-task="-"].task-list-item.is-checked { + background: rgba(var(--chbx-d), 20%); +} +.check-bg .markdown-source-view.mod-cm6 .HyperMD-task-line[data-task][data-task="?"], +.check-bg :is(ul, ol) > li[data-task="?"].task-list-item.is-checked { + background: rgba(var(--chbx-q), 20%); +} +.check-bg .markdown-source-view.mod-cm6 .HyperMD-task-line[data-task][data-task="!"], +.check-bg :is(ul, ol) > li[data-task="!"].task-list-item.is-checked { + background: rgba(var(--chbx-i), 20%); +} +.check-bg .markdown-source-view.mod-cm6 .HyperMD-task-line[data-task][data-task="+"], +.check-bg :is(ul, ol) > li[data-task="+"].task-list-item.is-checked { + background: rgba(var(--chbx-a), 20%); +} +.check-bg .markdown-source-view.mod-cm6 .HyperMD-task-line[data-task][data-task="/"], +.check-bg :is(ul, ol) > li[data-task="/"].task-list-item.is-checked { + background: linear-gradient(to left, var(--accent, var(--interactive-accent)) 0%, transparent 1%); +} +.check-bg .markdown-source-view.mod-cm6 .HyperMD-task-line[data-task][data-task=R], +.check-bg :is(ul, ol) > li[data-task=R].task-list-item.is-checked { + background: rgba(var(--chbx-R), 20%); +} +.check-bg .markdown-source-view.mod-cm6 .HyperMD-task-line[data-task][data-task=i], +.check-bg :is(ul, ol) > li[data-task=i].task-list-item.is-checked { + background: rgba(var(--chbx-id), 20%); +} +.check-bg .markdown-source-view.mod-cm6 .HyperMD-task-line[data-task][data-task=B], +.check-bg :is(ul, ol) > li[data-task=B].task-list-item.is-checked { + background: rgba(var(--chbx-B), 20%); +} +.check-bg .markdown-source-view.mod-cm6 .HyperMD-task-line[data-task][data-task=P], +.check-bg :is(ul, ol) > li[data-task=P].task-list-item.is-checked { + background: rgba(var(--chbx-P), 20%); +} +.check-bg .markdown-source-view.mod-cm6 .HyperMD-task-line[data-task][data-task=C], +.check-bg :is(ul, ol) > li[data-task=C].task-list-item.is-checked { + background: rgba(var(--chbx-C), 20%); +} +.check-bg .markdown-source-view.mod-cm6 .HyperMD-task-line[data-task][data-task=I], +.check-bg :is(ul, ol) > li[data-task=I].task-list-item.is-checked { + background: rgba(var(--chbx-I), 20%); +} +.check-bg .markdown-source-view.mod-cm6 .HyperMD-task-line[data-task][data-task=Q], +.check-bg :is(ul, ol) > li[data-task=Q].task-list-item.is-checked { + background: rgba(var(--chbx-R), 20%); +} +.check-bg .markdown-source-view.mod-cm6 .HyperMD-task-line[data-task][data-task=N], +.check-bg :is(ul, ol) > li[data-task=N].task-list-item.is-checked { + background: rgba(var(--chbx-N), 20%); +} +.check-bg .markdown-source-view.mod-cm6 .HyperMD-task-line[data-task][data-task=b], +.check-bg :is(ul, ol) > li[data-task=b].task-list-item.is-checked { + background: rgba(var(--chbx-b), 20%); +} +.check-bg .markdown-source-view.mod-cm6 .HyperMD-task-line[data-task][data-task=p], +.check-bg :is(ul, ol) > li[data-task=p].task-list-item.is-checked { + background: rgba(var(--chbx-R), 20%); +} +.check-bg .markdown-source-view.mod-cm6 .HyperMD-task-line[data-task][data-task=E], +.check-bg :is(ul, ol) > li[data-task=E].task-list-item.is-checked { + background: rgba(var(--chbx-I), 20%); +} +.check-bg .markdown-source-view.mod-cm6 .HyperMD-task-line[data-task][data-task=L], +.check-bg :is(ul, ol) > li[data-task=L].task-list-item.is-checked { + background: rgba(var(--chbx-N), 20%); +} +.check-bg .markdown-source-view.mod-cm6 .HyperMD-task-line[data-task][data-task=A], +.check-bg :is(ul, ol) > li[data-task=A].task-list-item.is-checked { + background: rgba(var(--chbx-P), 20%); +} +.check-bg .markdown-source-view.mod-cm6 .HyperMD-task-line[data-task][data-task=r], +.check-bg :is(ul, ol) > li[data-task=r].task-list-item.is-checked { + background: rgba(var(--chbx-r), 20%); +} +.check-bg .markdown-source-view.mod-cm6 .HyperMD-task-line[data-task][data-task=c], +.check-bg :is(ul, ol) > li[data-task=c].task-list-item.is-checked { + background: rgba(var(--chbx-c), 20%); +} +.check-bg .markdown-source-view.mod-cm6 .HyperMD-task-line[data-task][data-task=o], +.check-bg :is(ul, ol) > li[data-task=o].task-list-item.is-checked { + background: rgba(var(--chbx-b), 20%); +} +.check-bg .markdown-source-view.mod-cm6 .HyperMD-task-line[data-task][data-task=d], +.check-bg :is(ul, ol) > li[data-task=d].task-list-item.is-checked { + background: rgba(var(--chbx-I), 20%); +} +.check-bg .markdown-source-view.mod-cm6 .HyperMD-task-line[data-task][data-task=T], +.check-bg :is(ul, ol) > li[data-task=T].task-list-item.is-checked { + background: rgba(var(--chbx-R), 20%); +} +.check-bg .markdown-source-view.mod-cm6 .HyperMD-task-line[data-task][data-task=t], +.check-bg :is(ul, ol) > li[data-task=t].task-list-item.is-checked { + background: rgba(var(--chbx-R), 20%); +} +.check-bg .markdown-source-view.mod-cm6 .HyperMD-task-line[data-task][data-task=O], +.check-bg :is(ul, ol) > li[data-task=O].task-list-item.is-checked { + background: rgba(var(--selected-rgb), 20%); +} +.check-bg .markdown-source-view.mod-cm6 .HyperMD-task-line[data-task][data-task=F], +.check-bg :is(ul, ol) > li[data-task=F].task-list-item.is-checked { + background: rgba(var(--chbx-h), 20%); +} +.check-bg .markdown-source-view.mod-cm6 .HyperMD-task-line[data-task][data-task=W], +.check-bg :is(ul, ol) > li[data-task=W].task-list-item.is-checked { + background: rgba(var(--chbx-P), 20%); +} +.check-bg .markdown-source-view.mod-cm6 .HyperMD-task-line[data-task][data-task="~"], +.check-bg :is(ul, ol) > li[data-task="~"].task-list-item.is-checked { + background: rgba(var(--chbx-C), 20%); +} +.check-bg .markdown-source-view.mod-cm6 .HyperMD-task-line[data-task][data-task="@"], +.check-bg :is(ul, ol) > li[data-task="@"].task-list-item.is-checked { + background: rgba(var(--chbx-b), 20%); +} +.check-bg .markdown-source-view.mod-cm6 .HyperMD-task-line[data-task][data-task=f], +.check-bg :is(ul, ol) > li[data-task=f].task-list-item.is-checked { + background: rgba(var(--chbx-N), 20%); +} +.check-bg .markdown-source-view.mod-cm6 .HyperMD-task-line[data-task][data-task=H], +.check-bg :is(ul, ol) > li[data-task=H].task-list-item.is-checked { + background: rgba(var(--chbx-a), 20%); +} +.check-bg .markdown-source-view.mod-cm6 .HyperMD-task-line[data-task][data-task="&"], +.check-bg :is(ul, ol) > li[data-task="&"].task-list-item.is-checked { + background: rgba(var(--chbx-B), 20%); +} +.check-bg .markdown-source-view.mod-cm6 .HyperMD-task-line[data-task][data-task=s], +.check-bg :is(ul, ol) > li[data-task=s].task-list-item.is-checked { + background: rgba(var(--chbx-d), 20%); +} + +/*----Checked Text----*/ +body ul > li.task-list-item[data-task][data-task=x] > span > *, body .markdown-source-view.mod-cm6 .HyperMD-task-line[data-task][data-task=x] span:not([class^=cm-list]) { + opacity: 70%; +} + +body:not(.check-color, .check-text) ul > li.task-list-item[data-task][data-task=x] > span > *, body:not(.check-color, .check-text) .markdown-source-view.mod-cm6 .HyperMD-task-line[data-task][data-task=x] span:not([class^=cm-list]) { + opacity: 70%; +} +body:not(.check-color, .check-text) ul > li.task-list-item[data-task][data-task=X] > span > *, body:not(.check-color, .check-text) .markdown-source-view.mod-cm6 .HyperMD-task-line[data-task][data-task=X] span:not([class^=cm-list]) { + opacity: 70%; +} +body:not(.check-color, .check-text) ul > li.task-list-item[data-task][data-task=">"] > span > *, body:not(.check-color, .check-text) .markdown-source-view.mod-cm6 .HyperMD-task-line[data-task][data-task=">"] span:not([class^=cm-list]) { + opacity: 70%; +} +body:not(.check-color, .check-text) ul > li.task-list-item[data-task][data-task=D] > span > *, body:not(.check-color, .check-text) .markdown-source-view.mod-cm6 .HyperMD-task-line[data-task][data-task=D] span:not([class^=cm-list]) { + opacity: 70%; +} +body:not(.check-color, .check-text) ul > li.task-list-item[data-task][data-task="-"] > span > *, body:not(.check-color, .check-text) .markdown-source-view.mod-cm6 .HyperMD-task-line[data-task][data-task="-"] span:not([class^=cm-list]) { + opacity: 70%; +} +body:not(.check-color, .check-text) ul > li.task-list-item[data-task][data-task="?"] > span > *, body:not(.check-color, .check-text) .markdown-source-view.mod-cm6 .HyperMD-task-line[data-task][data-task="?"] span:not([class^=cm-list]) { + opacity: 70%; +} +body:not(.check-color, .check-text) ul > li.task-list-item[data-task][data-task="!"] > span > *, body:not(.check-color, .check-text) .markdown-source-view.mod-cm6 .HyperMD-task-line[data-task][data-task="!"] span:not([class^=cm-list]) { + opacity: 70%; +} +body:not(.check-color, .check-text) ul > li.task-list-item[data-task][data-task="+"] > span > *, body:not(.check-color, .check-text) .markdown-source-view.mod-cm6 .HyperMD-task-line[data-task][data-task="+"] span:not([class^=cm-list]) { + opacity: 70%; +} +body:not(.check-color, .check-text) ul > li.task-list-item[data-task][data-task="/"] > span > *, body:not(.check-color, .check-text) .markdown-source-view.mod-cm6 .HyperMD-task-line[data-task][data-task="/"] span:not([class^=cm-list]) { + opacity: 70%; +} +body:not(.check-color, .check-text) ul > li.task-list-item[data-task][data-task=R] > span > *, body:not(.check-color, .check-text) .markdown-source-view.mod-cm6 .HyperMD-task-line[data-task][data-task=R] span:not([class^=cm-list]) { + opacity: 70%; +} +body:not(.check-color, .check-text) ul > li.task-list-item[data-task][data-task=i] > span > *, body:not(.check-color, .check-text) .markdown-source-view.mod-cm6 .HyperMD-task-line[data-task][data-task=i] span:not([class^=cm-list]) { + opacity: 70%; +} +body:not(.check-color, .check-text) ul > li.task-list-item[data-task][data-task=B] > span > *, body:not(.check-color, .check-text) .markdown-source-view.mod-cm6 .HyperMD-task-line[data-task][data-task=B] span:not([class^=cm-list]) { + opacity: 70%; +} +body:not(.check-color, .check-text) ul > li.task-list-item[data-task][data-task=P] > span > *, body:not(.check-color, .check-text) .markdown-source-view.mod-cm6 .HyperMD-task-line[data-task][data-task=P] span:not([class^=cm-list]) { + opacity: 70%; +} +body:not(.check-color, .check-text) ul > li.task-list-item[data-task][data-task=C] > span > *, body:not(.check-color, .check-text) .markdown-source-view.mod-cm6 .HyperMD-task-line[data-task][data-task=C] span:not([class^=cm-list]) { + opacity: 70%; +} +body:not(.check-color, .check-text) ul > li.task-list-item[data-task][data-task=I] > span > *, body:not(.check-color, .check-text) .markdown-source-view.mod-cm6 .HyperMD-task-line[data-task][data-task=I] span:not([class^=cm-list]) { + opacity: 70%; +} +body:not(.check-color, .check-text) ul > li.task-list-item[data-task][data-task=Q] > span > *, body:not(.check-color, .check-text) .markdown-source-view.mod-cm6 .HyperMD-task-line[data-task][data-task=Q] span:not([class^=cm-list]) { + opacity: 70%; +} +body:not(.check-color, .check-text) ul > li.task-list-item[data-task][data-task=N] > span > *, body:not(.check-color, .check-text) .markdown-source-view.mod-cm6 .HyperMD-task-line[data-task][data-task=N] span:not([class^=cm-list]) { + opacity: 70%; +} +body:not(.check-color, .check-text) ul > li.task-list-item[data-task][data-task=b] > span > *, body:not(.check-color, .check-text) .markdown-source-view.mod-cm6 .HyperMD-task-line[data-task][data-task=b] span:not([class^=cm-list]) { + opacity: 70%; +} +body:not(.check-color, .check-text) ul > li.task-list-item[data-task][data-task=p] > span > *, body:not(.check-color, .check-text) .markdown-source-view.mod-cm6 .HyperMD-task-line[data-task][data-task=p] span:not([class^=cm-list]) { + opacity: 70%; +} +body:not(.check-color, .check-text) ul > li.task-list-item[data-task][data-task=E] > span > *, body:not(.check-color, .check-text) .markdown-source-view.mod-cm6 .HyperMD-task-line[data-task][data-task=E] span:not([class^=cm-list]) { + opacity: 70%; +} +body:not(.check-color, .check-text) ul > li.task-list-item[data-task][data-task=L] > span > *, body:not(.check-color, .check-text) .markdown-source-view.mod-cm6 .HyperMD-task-line[data-task][data-task=L] span:not([class^=cm-list]) { + opacity: 70%; +} +body:not(.check-color, .check-text) ul > li.task-list-item[data-task][data-task=A] > span > *, body:not(.check-color, .check-text) .markdown-source-view.mod-cm6 .HyperMD-task-line[data-task][data-task=A] span:not([class^=cm-list]) { + opacity: 70%; +} +body:not(.check-color, .check-text) ul > li.task-list-item[data-task][data-task=r] > span > *, body:not(.check-color, .check-text) .markdown-source-view.mod-cm6 .HyperMD-task-line[data-task][data-task=r] span:not([class^=cm-list]) { + opacity: 70%; +} +body:not(.check-color, .check-text) ul > li.task-list-item[data-task][data-task=c] > span > *, body:not(.check-color, .check-text) .markdown-source-view.mod-cm6 .HyperMD-task-line[data-task][data-task=c] span:not([class^=cm-list]) { + opacity: 70%; +} +body:not(.check-color, .check-text) ul > li.task-list-item[data-task][data-task=o] > span > *, body:not(.check-color, .check-text) .markdown-source-view.mod-cm6 .HyperMD-task-line[data-task][data-task=o] span:not([class^=cm-list]) { + opacity: 70%; +} +body:not(.check-color, .check-text) ul > li.task-list-item[data-task][data-task=d] > span > *, body:not(.check-color, .check-text) .markdown-source-view.mod-cm6 .HyperMD-task-line[data-task][data-task=d] span:not([class^=cm-list]) { + opacity: 70%; +} +body:not(.check-color, .check-text) ul > li.task-list-item[data-task][data-task=T] > span > *, body:not(.check-color, .check-text) .markdown-source-view.mod-cm6 .HyperMD-task-line[data-task][data-task=T] span:not([class^=cm-list]) { + opacity: 70%; +} +body:not(.check-color, .check-text) ul > li.task-list-item[data-task][data-task=t] > span > *, body:not(.check-color, .check-text) .markdown-source-view.mod-cm6 .HyperMD-task-line[data-task][data-task=t] span:not([class^=cm-list]) { + opacity: 70%; +} +body:not(.check-color, .check-text) ul > li.task-list-item[data-task][data-task=O] > span > *, body:not(.check-color, .check-text) .markdown-source-view.mod-cm6 .HyperMD-task-line[data-task][data-task=O] span:not([class^=cm-list]) { + opacity: 70%; +} +body:not(.check-color, .check-text) ul > li.task-list-item[data-task][data-task=F] > span > *, body:not(.check-color, .check-text) .markdown-source-view.mod-cm6 .HyperMD-task-line[data-task][data-task=F] span:not([class^=cm-list]) { + opacity: 70%; +} +body:not(.check-color, .check-text) ul > li.task-list-item[data-task][data-task=W] > span > *, body:not(.check-color, .check-text) .markdown-source-view.mod-cm6 .HyperMD-task-line[data-task][data-task=W] span:not([class^=cm-list]) { + opacity: 70%; +} +body:not(.check-color, .check-text) ul > li.task-list-item[data-task][data-task="~"] > span > *, body:not(.check-color, .check-text) .markdown-source-view.mod-cm6 .HyperMD-task-line[data-task][data-task="~"] span:not([class^=cm-list]) { + opacity: 70%; +} +body:not(.check-color, .check-text) ul > li.task-list-item[data-task][data-task="@"] > span > *, body:not(.check-color, .check-text) .markdown-source-view.mod-cm6 .HyperMD-task-line[data-task][data-task="@"] span:not([class^=cm-list]) { + opacity: 70%; +} +body:not(.check-color, .check-text) ul > li.task-list-item[data-task][data-task=f] > span > *, body:not(.check-color, .check-text) .markdown-source-view.mod-cm6 .HyperMD-task-line[data-task][data-task=f] span:not([class^=cm-list]) { + opacity: 70%; +} +body:not(.check-color, .check-text) ul > li.task-list-item[data-task][data-task=H] > span > *, body:not(.check-color, .check-text) .markdown-source-view.mod-cm6 .HyperMD-task-line[data-task][data-task=H] span:not([class^=cm-list]) { + opacity: 70%; +} +body:not(.check-color, .check-text) ul > li.task-list-item[data-task][data-task="&"] > span > *, body:not(.check-color, .check-text) .markdown-source-view.mod-cm6 .HyperMD-task-line[data-task][data-task="&"] span:not([class^=cm-list]) { + opacity: 70%; +} +body:not(.check-color, .check-text) ul > li.task-list-item[data-task][data-task=s] > span > *, body:not(.check-color, .check-text) .markdown-source-view.mod-cm6 .HyperMD-task-line[data-task][data-task=s] span:not([class^=cm-list]) { + opacity: 70%; +} + +/* Checkbox Text Normal */ +/*--Checkbox Text Colors--*/ +.check-color.check-color .markdown-source-view.mod-cm6 .HyperMD-task-line[data-task=X] [class^=cm-list]:not(.cm-formatting-task), .check-color.check-color.check-color ul > li[data-task=X].task-list-item.is-checked { + color: var(--text-faint); +} +.check-color.check-color .markdown-source-view.mod-cm6 .HyperMD-task-line[data-task=">"] [class^=cm-list]:not(.cm-formatting-task), .check-color.check-color.check-color ul > li[data-task=">"].task-list-item.is-checked { + color: var(--text-normal); +} +.check-color.check-color .markdown-source-view.mod-cm6 .HyperMD-task-line[data-task=D] [class^=cm-list]:not(.cm-formatting-task), .check-color.check-color.check-color ul > li[data-task=D].task-list-item.is-checked { + color: rgb(var(--chbx-h)); +} +.check-color.check-color .markdown-source-view.mod-cm6 .HyperMD-task-line[data-task="-"] [class^=cm-list]:not(.cm-formatting-task), .check-color.check-color.check-color ul > li[data-task="-"].task-list-item.is-checked { + color: rgb(var(--chbx-d)); +} +.check-color.check-color .markdown-source-view.mod-cm6 .HyperMD-task-line[data-task="?"] [class^=cm-list]:not(.cm-formatting-task), .check-color.check-color.check-color ul > li[data-task="?"].task-list-item.is-checked { + color: rgb(var(--chbx-q)); +} +.check-color.check-color .markdown-source-view.mod-cm6 .HyperMD-task-line[data-task="!"] [class^=cm-list]:not(.cm-formatting-task), .check-color.check-color.check-color ul > li[data-task="!"].task-list-item.is-checked { + color: rgb(var(--chbx-i)); +} +.check-color.check-color .markdown-source-view.mod-cm6 .HyperMD-task-line[data-task="+"] [class^=cm-list]:not(.cm-formatting-task), .check-color.check-color.check-color ul > li[data-task="+"].task-list-item.is-checked { + color: rgb(var(--chbx-a)); +} +.check-color.check-color .markdown-source-view.mod-cm6 .HyperMD-task-line[data-task="/"] [class^=cm-list]:not(.cm-formatting-task), .check-color.check-color.check-color ul > li[data-task="/"].task-list-item.is-checked { + color: var(--text-muted); +} +.check-color.check-color .markdown-source-view.mod-cm6 .HyperMD-task-line[data-task=R] [class^=cm-list]:not(.cm-formatting-task), .check-color.check-color.check-color ul > li[data-task=R].task-list-item.is-checked { + color: rgb(var(--chbx-R)); +} +.check-color.check-color .markdown-source-view.mod-cm6 .HyperMD-task-line[data-task=i] [class^=cm-list]:not(.cm-formatting-task), .check-color.check-color.check-color ul > li[data-task=i].task-list-item.is-checked { + color: rgb(var(--chbx-id)); +} +.check-color.check-color .markdown-source-view.mod-cm6 .HyperMD-task-line[data-task=B] [class^=cm-list]:not(.cm-formatting-task), .check-color.check-color.check-color ul > li[data-task=B].task-list-item.is-checked { + color: rgb(var(--chbx-B)); +} +.check-color.check-color .markdown-source-view.mod-cm6 .HyperMD-task-line[data-task=P] [class^=cm-list]:not(.cm-formatting-task), .check-color.check-color.check-color ul > li[data-task=P].task-list-item.is-checked { + color: rgb(var(--chbx-P)); +} +.check-color.check-color .markdown-source-view.mod-cm6 .HyperMD-task-line[data-task=C] [class^=cm-list]:not(.cm-formatting-task), .check-color.check-color.check-color ul > li[data-task=C].task-list-item.is-checked { + color: rgb(var(--chbx-C)); +} +.check-color.check-color .markdown-source-view.mod-cm6 .HyperMD-task-line[data-task=I] [class^=cm-list]:not(.cm-formatting-task), .check-color.check-color.check-color ul > li[data-task=I].task-list-item.is-checked { + color: rgb(var(--chbx-I)); +} +.check-color.check-color .markdown-source-view.mod-cm6 .HyperMD-task-line[data-task=Q] [class^=cm-list]:not(.cm-formatting-task), .check-color.check-color.check-color ul > li[data-task=Q].task-list-item.is-checked { + color: rgb(var(--chbx-R)); +} +.check-color.check-color .markdown-source-view.mod-cm6 .HyperMD-task-line[data-task=N] [class^=cm-list]:not(.cm-formatting-task), .check-color.check-color.check-color ul > li[data-task=N].task-list-item.is-checked { + color: rgb(var(--chbx-N)); +} +.check-color.check-color .markdown-source-view.mod-cm6 .HyperMD-task-line[data-task=b] [class^=cm-list]:not(.cm-formatting-task), .check-color.check-color.check-color ul > li[data-task=b].task-list-item.is-checked { + color: rgb(var(--chbx-b)); +} +.check-color.check-color .markdown-source-view.mod-cm6 .HyperMD-task-line[data-task=p] [class^=cm-list]:not(.cm-formatting-task), .check-color.check-color.check-color ul > li[data-task=p].task-list-item.is-checked { + color: rgb(var(--chbx-R)); +} +.check-color.check-color .markdown-source-view.mod-cm6 .HyperMD-task-line[data-task=E] [class^=cm-list]:not(.cm-formatting-task), .check-color.check-color.check-color ul > li[data-task=E].task-list-item.is-checked { + color: rgb(var(--chbx-I)); +} +.check-color.check-color .markdown-source-view.mod-cm6 .HyperMD-task-line[data-task=L] [class^=cm-list]:not(.cm-formatting-task), .check-color.check-color.check-color ul > li[data-task=L].task-list-item.is-checked { + color: rgb(var(--chbx-N)); +} +.check-color.check-color .markdown-source-view.mod-cm6 .HyperMD-task-line[data-task=A] [class^=cm-list]:not(.cm-formatting-task), .check-color.check-color.check-color ul > li[data-task=A].task-list-item.is-checked { + color: rgb(var(--chbx-P)); +} +.check-color.check-color .markdown-source-view.mod-cm6 .HyperMD-task-line[data-task=r] [class^=cm-list]:not(.cm-formatting-task), .check-color.check-color.check-color ul > li[data-task=r].task-list-item.is-checked { + color: rgb(var(--chbx-r)); +} +.check-color.check-color .markdown-source-view.mod-cm6 .HyperMD-task-line[data-task=c] [class^=cm-list]:not(.cm-formatting-task), .check-color.check-color.check-color ul > li[data-task=c].task-list-item.is-checked { + color: rgb(var(--chbx-c)); +} +.check-color.check-color .markdown-source-view.mod-cm6 .HyperMD-task-line[data-task=o] [class^=cm-list]:not(.cm-formatting-task), .check-color.check-color.check-color ul > li[data-task=o].task-list-item.is-checked { + color: rgb(var(--chbx-b)); +} +.check-color.check-color .markdown-source-view.mod-cm6 .HyperMD-task-line[data-task=d] [class^=cm-list]:not(.cm-formatting-task), .check-color.check-color.check-color ul > li[data-task=d].task-list-item.is-checked { + color: rgb(var(--chbx-I)); +} +.check-color.check-color .markdown-source-view.mod-cm6 .HyperMD-task-line[data-task=T] [class^=cm-list]:not(.cm-formatting-task), .check-color.check-color.check-color ul > li[data-task=T].task-list-item.is-checked { + color: rgb(var(--chbx-R)); +} +.check-color.check-color .markdown-source-view.mod-cm6 .HyperMD-task-line[data-task=t] [class^=cm-list]:not(.cm-formatting-task), .check-color.check-color.check-color ul > li[data-task=t].task-list-item.is-checked { + color: rgb(var(--chbx-R)); +} +.check-color.check-color .markdown-source-view.mod-cm6 .HyperMD-task-line[data-task=O] [class^=cm-list]:not(.cm-formatting-task), .check-color.check-color.check-color ul > li[data-task=O].task-list-item.is-checked { + color: rgb(var(--selected-rgb)); +} +.check-color.check-color .markdown-source-view.mod-cm6 .HyperMD-task-line[data-task=F] [class^=cm-list]:not(.cm-formatting-task), .check-color.check-color.check-color ul > li[data-task=F].task-list-item.is-checked { + color: rgb(var(--chbx-h)); +} +.check-color.check-color .markdown-source-view.mod-cm6 .HyperMD-task-line[data-task=W] [class^=cm-list]:not(.cm-formatting-task), .check-color.check-color.check-color ul > li[data-task=W].task-list-item.is-checked { + color: rgb(var(--chbx-R)); +} +.check-color.check-color .markdown-source-view.mod-cm6 .HyperMD-task-line[data-task="~"] [class^=cm-list]:not(.cm-formatting-task), .check-color.check-color.check-color ul > li[data-task="~"].task-list-item.is-checked { + color: rgb(var(--chbx-C)); +} +.check-color.check-color .markdown-source-view.mod-cm6 .HyperMD-task-line[data-task="@"] [class^=cm-list]:not(.cm-formatting-task), .check-color.check-color.check-color ul > li[data-task="@"].task-list-item.is-checked { + color: rgb(var(--chbx-b)); +} +.check-color.check-color .markdown-source-view.mod-cm6 .HyperMD-task-line[data-task=f] [class^=cm-list]:not(.cm-formatting-task), .check-color.check-color.check-color ul > li[data-task=f].task-list-item.is-checked { + color: rgb(var(--chbx-N)); +} +.check-color.check-color .markdown-source-view.mod-cm6 .HyperMD-task-line[data-task=H] [class^=cm-list]:not(.cm-formatting-task), .check-color.check-color.check-color ul > li[data-task=H].task-list-item.is-checked { + color: rgb(var(--chbx-a)); +} +.check-color.check-color .markdown-source-view.mod-cm6 .HyperMD-task-line[data-task="&"] [class^=cm-list]:not(.cm-formatting-task), .check-color.check-color.check-color ul > li[data-task="&"].task-list-item.is-checked { + color: rgb(var(--chbx-B)); +} +.check-color.check-color .markdown-source-view.mod-cm6 .HyperMD-task-line[data-task=s] [class^=cm-list]:not(.cm-formatting-task), .check-color.check-color.check-color ul > li[data-task=s].task-list-item.is-checked { + color: rgb(var(--chbx-d)); +} + +/*Callout Positioning*/ +:not(.is-live-preview) .callout.callout.callout:is([data-callout-metadata~="p+l"], +[data-callout-metadata~=left]) { + float: left; + margin: unset; + margin-right: 8px; +} + +:not(.is-live-preview) .callout.callout:is([data-callout-metadata~="p+r"], +[data-callout-metadata~=right]) { + float: right; + margin: unset; + margin-left: 8px; +} + +.callout.callout.callout:is([data-callout-metadata~=ctr], +[data-callout-metadata~=center]) { + display: block; + margin: auto; + float: unset; +} + +.callout.callout.callout.callout:is([data-callout-metadata~=no-t], +[data-callout-metadata~=no-title]) > .callout-title { + display: none; +} + +.callout.callout.callout.callout:is([data-callout-metadata~=s-t], +[data-callout-metadata~=show-title]) > .callout-title { + display: flex; +} +.callout.callout.callout.callout:is([data-callout-metadata~=s-t], +[data-callout-metadata~=show-title]) > .callout-content > p { + margin-top: 0; +} + +.callout.callout.callout.callout:is([data-callout-metadata~=subtitle], +[data-callout-metadata~=subt]) .callout-title { + align-content: center; + align-items: center; +} +.callout.callout.callout.callout:is([data-callout-metadata~=subtitle], +[data-callout-metadata~=subt]) .callout-title em { + display: block; + font-style: normal; + font-size: var(--font-small); + line-height: 12px; + font-weight: normal; +} +.callout.callout.callout.callout:is([data-callout-metadata~=subtitle], +[data-callout-metadata~=subt]) .callout-title em em { + font-style: italic; + display: inline-block; +} + +.callout:is([data-callout-metadata~=no-i], +[data-callout-metadata~=no-icon]) > .callout-title .callout-icon { + width: 0; + height: 0; +} + +.callout:is([data-callout-metadata~=n-th], +[data-callout-metadata~=no-table-header]) .callout-content > table { + margin-bottom: 5px; +} +.callout:is([data-callout-metadata~=n-th], +[data-callout-metadata~=no-table-header]) .callout-content > table th { + display: none; +} + +.callout:is([data-callout-metadata~=t-w], +[data-callout-metadata~=table-wide]) table { + width: 100%; +} +.callout:is([data-callout-metadata~=t-w], +[data-callout-metadata~=table-wide]) table td { + width: calc(var(--tbl-w) / 2); +} + +.callout[data-callout-metadata~=table-cell-top] table td { + vertical-align: top; +} + +.callout[data-callout-metadata~=embed] .callout-content, .callout[data-callout-metadata~=embed] > .callout-content > p { + margin: 0; + padding: 0; +} + +.callout[data-callout-metadata~=collapse] * { + margin: 0 !important; + padding: 0 !important; + grid-gap: 0 !important; +} + +.callout.callout.callout:is([data-callout-metadata~=nbrd], +[data-callout-metadata~=no-border]) { + border: 0; +} + +.callout.callout.callout[data-callout-metadata~=clean], +.callout.callout.callout[data-callout-metadata~=clean] > .callout-content { + border: 0; + box-shadow: none; + --callout-color: transparent; + --callout-padding: 0; +} +.callout.callout.callout[data-callout-metadata~=clean] .callout-content, +.callout.callout.callout[data-callout-metadata~=clean] > .callout-content .callout-content { + padding: 0; +} + +.callout[data-callout-metadata~=clear] { + clear: both; +} + +.callout #vid { + text-align: left; +} + +/*--Callout Coloring--*/ +.callout.callout.callout { + --callout-blue: 82, 139, 212; + --callout-green: 86, 179, 117; + --callout-orange: 230, 129, 63; + --callout-red: 193, 67, 67; + --callout-purple: 153, 97, 218; + --callout-gray: 166, 189, 197; + --callout-yellow: 208, 181, 48; + --callout-pink: 227, 107, 167; + --callout-brown: 161, 106, 73; + --callout-black: 0, 0, 0; +} +.callout.callout.callout:is([data-callout-metadata~=color-blue], +[data-callout-metadata~=c-blue], +[data-callout-metadata~=background-color-blue], +[data-callout-metadata~=bg-c-blue]) .callout-title { + --callout-color: var(--callout-blue); +} +.callout.callout.callout:is([data-callout-metadata~=color-green], +[data-callout-metadata~=c-green], +[data-callout-metadata~=background-color-green], +[data-callout-metadata~=bg-c-green]) .callout-title { + --callout-color: var(--callout-green); +} +.callout.callout.callout:is([data-callout-metadata~=color-orange], +[data-callout-metadata~=c-orange], +[data-callout-metadata~=background-color-orange], +[data-callout-metadata~=bg-c-orange]) .callout-title { + --callout-color: var(--callout-orange); +} +.callout.callout.callout:is([data-callout-metadata~=color-red], +[data-callout-metadata~=c-red], +[data-callout-metadata~=background-color-red], +[data-callout-metadata~=bg-c-red]) .callout-title { + --callout-color: var(--callout-red); +} +.callout.callout.callout:is([data-callout-metadata~=color-purple], +[data-callout-metadata~=c-purple], +[data-callout-metadata~=background-color-purple], +[data-callout-metadata~=bg-c-purple]) .callout-title { + --callout-color: var(--callout-purple); +} +.callout.callout.callout:is([data-callout-metadata~=color-gray], +[data-callout-metadata~=c-gray], +[data-callout-metadata~=background-color-gray], +[data-callout-metadata~=bg-c-gray]) .callout-title { + --callout-color: var(--callout-gray); +} +.callout.callout.callout:is([data-callout-metadata~=color-yellow], +[data-callout-metadata~=c-yellow], +[data-callout-metadata~=background-color-yellow], +[data-callout-metadata~=bg-c-yellow]) .callout-title { + --callout-color: var(--callout-yellow); +} +.callout.callout.callout:is([data-callout-metadata~=color-pink], +[data-callout-metadata~=c-pink], +[data-callout-metadata~=background-color-pink], +[data-callout-metadata~=bg-c-pink]) .callout-title { + --callout-color: var(--callout-pink); +} +.callout.callout.callout:is([data-callout-metadata~=color-brown], +[data-callout-metadata~=c-brown], +[data-callout-metadata~=background-color-brown], +[data-callout-metadata~=bg-c-brown]) .callout-title { + --callout-color: var(--callout-brown); +} +.callout.callout.callout:is([data-callout-metadata~=color-black], +[data-callout-metadata~=bg-black], +[data-callout-metadata~=background-color-black], +[data-callout-metadata~=bg-c-black]) .callout-title { + --callout-color: var(--callout-black) ; +} +.callout.callout.callout:is([data-callout-metadata~=color-], [data-callout-metadata~=c-]) { + --callout-color: var(--callout); +} +.callout.callout.callout:is([data-callout-metadata~=background-blue], +[data-callout-metadata~=bg-blue], +[data-callout-metadata~=background-color-blue], +[data-callout-metadata~=bg-c-blue]) { + background-color: rgba(var(--callout-blue), 10%); +} +.callout.callout.callout:is([data-callout-metadata~=background-green], +[data-callout-metadata~=bg-green], +[data-callout-metadata~=background-color-green], +[data-callout-metadata~=bg-c-green]) { + background-color: rgba(var(--callout-green), 10%); +} +.callout.callout.callout:is([data-callout-metadata~=background-orange], +[data-callout-metadata~=bg-orange], +[data-callout-metadata~=background-color-orange], +[data-callout-metadata~=bg-c-orange]) { + background-color: rgba(var(--callout-orange), 10%); +} +.callout.callout.callout:is([data-callout-metadata~=background-red], +[data-callout-metadata~=bg-red], +[data-callout-metadata~=background-color-red], +[data-callout-metadata~=bg-c-red]) { + background-color: rgba(var(--callout-red), 10%); +} +.callout.callout.callout:is([data-callout-metadata~=background-purple], +[data-callout-metadata~=bg-purple], +[data-callout-metadata~=background-color-purple], +[data-callout-metadata~=bg-c-purple]) { + background-color: rgba(var(--callout-purple), 10%); +} +.callout.callout.callout:is([data-callout-metadata~=background-gray], +[data-callout-metadata~=bg-gray], +[data-callout-metadata~=background-color-gray], +[data-callout-metadata~=bg-c-gray]) { + background-color: rgba(var(--callout-gray), 10%); +} +.callout.callout.callout:is([data-callout-metadata~=background-yellow], +[data-callout-metadata~=bg-yellow], +[data-callout-metadata~=background-color-yellow], +[data-callout-metadata~=bg-c-yellow]) { + background-color: rgba(var(--callout-yellow), 10%); +} +.callout.callout.callout:is([data-callout-metadata~=background-pink], +[data-callout-metadata~=bg-pink], +[data-callout-metadata~=background-color-pink], +[data-callout-metadata~=bg-c-pink]) { + background-color: rgba(var(--callout-pink), 10%); +} +.callout.callout.callout:is([data-callout-metadata~=background-brown], +[data-callout-metadata~=bg-brown], +[data-callout-metadata~=background-color-brown], +[data-callout-metadata~=bg-c-brown]) { + background-color: rgba(var(--callout-brown), 10%); +} +.callout.callout.callout:is([data-callout-metadata~=background-black], +[data-callout-metadata~=bg-black], +[data-callout-metadata~=background-color-black], +[data-callout-metadata~=bg-c-black]) { + background-color: rgba(var(--callout-black), 10%); +} +.callout.callout.callout:is([data-callout-metadata~=background-color-blue], +[data-callout-metadata~=bg-c-blue]) { + --callout-color: var(--callout-blue); +} +.callout.callout.callout:is([data-callout-metadata~=background-color-green], +[data-callout-metadata~=bg-c-green]) { + --callout-color: var(--callout-green); +} +.callout.callout.callout:is([data-callout-metadata~=background-color-orange], +[data-callout-metadata~=bg-c-orange]) { + --callout-color: var(--callout-orange); +} +.callout.callout.callout:is([data-callout-metadata~=background-color-red], +[data-callout-metadata~=bg-c-red]) { + --callout-color: var(--callout-red); +} +.callout.callout.callout:is([data-callout-metadata~=background-color-purple], +[data-callout-metadata~=bg-c-purple]) { + --callout-color: var(--callout-purple); +} +.callout.callout.callout:is([data-callout-metadata~=background-color-gray], +[data-callout-metadata~=bg-c-gray]) { + --callout-color: var(--callout-gray); +} +.callout.callout.callout:is([data-callout-metadata~=background-color-yellow], +[data-callout-metadata~=bg-c-yellow]) { + --callout-color: var(--callout-yellow); +} +.callout.callout.callout:is([data-callout-metadata~=background-color-pink], +[data-callout-metadata~=bg-c-pink]) { + --callout-color: var(--callout-pink); +} +.callout.callout.callout:is([data-callout-metadata~=background-color-brown], +[data-callout-metadata~=bg-c-brown]) { + --callout-color: var(--callout-brown); +} +.callout.callout.callout:is([data-callout-metadata~=background-color-black], +[data-callout-metadata~=bg-c-black]) { + --callout-color: var(--callout-black); +} + +.callout.callout.callout { + --callout-micro: 10%; + --callout-tiny: 20%; + --callout-small: 30%; + --callout-small-med: 40%; + --callout-med-small: 50%; + --callout-medium: 60%; + --callout-med-tall: 80%; + --callout-tall: 95%; +} +.callout.callout.callout[data-callout-metadata~=wmicro] { + max-width: unset; + width: var(--callout-micro); +} +.callout.callout.callout[data-callout-metadata~=wtiny] { + max-width: unset; + width: var(--callout-tiny); +} +.callout.callout.callout[data-callout-metadata~=wsmall] { + max-width: unset; + width: var(--callout-small); +} +.callout.callout.callout[data-callout-metadata~=ws-med] { + max-width: unset; + width: var(--callout-small-med); +} +.callout.callout.callout[data-callout-metadata~=wm-sm] { + max-width: unset; + width: var(--callout-med-small); +} +.callout.callout.callout[data-callout-metadata~=wmed] { + max-width: unset; + width: var(--callout-medium); +} +.callout.callout.callout[data-callout-metadata~=wm-tl] { + max-width: unset; + width: var(--callout-med-tall); +} +.callout.callout.callout[data-callout-metadata~=wtall] { + max-width: unset; + width: var(--callout-tall); +} +.callout.callout.callout[data-callout-metadata~=sban], .callout.callout.callout[data-callout-metadata~=wfull] { + width: 100%; + float: unset; + max-width: 100%; +} +.callout.callout.callout[data-callout-metadata~=wtiny-c] { + width: 19%; +} +.callout.callout.callout[data-callout-metadata~=wsmall-c] { + width: 32.4%; +} +.callout.callout.callout[data-callout-metadata~=ws-med-c] { + width: 39%; +} +.callout.callout.callout[data-callout-metadata~=wm-sm-c] { + width: 49%; +} +.callout.callout.callout[data-callout-metadata~=wmed-c] { + width: 59%; +} +.callout.callout.callout[data-callout-metadata~=wm-tl-c] { + width: 79%; +} +.callout.callout.callout[data-callout-metadata~=wfit] { + width: fit-content; + max-width: min-content; +} + +.callout.callout[data-callout-metadata~=static] { + --callout-micro: 50px; + --callout-tiny: 100px; + --callout-small: 200px; + --callout-small-med: 300px; + --callout-med-small: 400px; + --callout-medium: 500px; + --callout-med-tall: 600px; + --callout-tall: 700px; +} + +.callout.callout:is([data-callout-metadata~=content-padding-small], +[data-callout-metadata~=c-p-sm]) { + --callout-content-padding: 6px; +} + +.callout.callout:is([data-callout-metadata~=content-padding-medium], +[data-callout-metadata~=c-p-med]) { + --callout-content-padding: 12px; +} + +.callout.callout:is([data-callout-metadata~=content-padding-large], +[data-callout-metadata~=c-p-lg]) { + --callout-content-padding: 24px; +} + +.callout.callout:is([data-callout-metadata~=txt-l], +[data-callout-metadata~=text-left]) > .callout-content > * { + text-align: left; +} + +.callout.callout:is([data-callout-metadata~=txt-r], +[data-callout-metadata~=text-right]) > .callout-content { + text-align: right; +} + +.callout.callout:is([data-callout-metadata~=txt-c], +[data-callout-metadata~=text-center]) > .callout-content { + text-align: center; +} + +.callout.callout:is([data-callout-metadata~=ttl-c], +[data-callout-metadata~=title-center]) .callout-title { + justify-content: center; +} +.callout.callout:is([data-callout-metadata~=ttl-c], +[data-callout-metadata~=title-center]) .callout-title-inner { + display: block; + flex: unset; +} + +.callout.callout:is([data-callout-metadata~=text-small], +[data-callout-metadata~=txt-s]) > .callout-content > * { + --font-text-size: var(--font-smallest); + --tag-size: var(--font-smallest); + --table-text-size: var(--font-smallest); + font-size: var(--font-text-size); +} + +/*Infobox*/ +:is(.is-mobile:not(.is-tablet), +.is-mobile:not(.is-tablet) .is-live-preview, +.is-live-preview) .callout[data-callout~=infobox]:not([data-callout-metadata~=mobile]) > .callout-content { + float: unset !important; + max-width: 100%; + margin: 0 !important; + width: auto; +} + +.callout.callout[data-callout~=infobox] { + --callout-color: var(--note, var(--background-primary)); + --callout-padding: 0; + --callout-content-padding: 5px; + --callout-margin: 0 0 0 5px; + background: var(--note, var(--background-primary)); + --h1-border-line-height: 0; + --h2-border-line-height: 0; + --h3-border-line-height: 0; + --h4-border-line-height: 0; + --h5-border-line-height: 0; + --h6-border-line-height: 0; + border: 0; + box-shadow: none; + width: auto; + max-width: 300px; + float: right; + border-radius: var(--radius-s); +} +.callout.callout[data-callout~=infobox] > .callout-title { + justify-content: center; + align-items: center; + align-self: center; +} +.callout.callout[data-callout~=infobox] > .callout-title > .callout-icon { + align-self: center; +} +.callout.callout[data-callout~=infobox]:not(.is-collapsed) > .callout-title { + padding: 0; +} +.callout.callout[data-callout~=infobox] .callout-fold { + padding-right: 0; +} +.callout.callout[data-callout~=infobox].is-collapsed .callout-fold { + border: 1px solid var(--hr, var(--background-modifier-border)); + border-radius: var(--radius-m); +} +.callout.callout[data-callout~=infobox] > .callout-title .callout-title-inner { + display: none; +} +.callout.callout[data-callout~=infobox] > .callout-title .callout-icon { + height: 0; +} +.callout.callout[data-callout~=infobox]:not([data-callout-metadata~=show-title], +[data-callout-metadata~=s-t], +[data-callout-metadata~=show-icon], +[data-callout-metadata~=s-i]) .callout-icon svg { + width: 0; + height: 0; +} +.callout.callout[data-callout~=infobox]:not(:hover):not(.is-collapsed) .callout-title { + background-color: transparent; +} +.callout.callout[data-callout~=infobox] .callout-content > .callout[data-callout~=infobox]:not(:hover):not(.is-collapsed) > .callout-title, .callout.callout[data-callout~=infobox]:is([data-callout-metadata~=show-title], [data-callout-metadata~=s-t]):not(:hover):not(.is-collapsed) > .callout-title { + display: flex; + gap: 0; +} +.callout.callout[data-callout~=infobox] .callout-content > .callout[data-callout~=infobox].is-collapsed .callout-title, .callout.callout[data-callout~=infobox]:is([data-callout-metadata~=show-title], [data-callout-metadata~=s-t]).is-collapsed .callout-title { + border: 1px solid var(--hr, var(--background-modifier-border)); + display: flex; + align-items: center; + align-content: center; +} +.callout.callout[data-callout~=infobox] .callout-content > .callout[data-callout~=infobox] .callout-title .callout-title-inner, .callout.callout[data-callout~=infobox]:is([data-callout-metadata~=show-title], [data-callout-metadata~=s-t]) .callout-title .callout-title-inner { + display: unset; + align-items: center; + align-content: center; + padding: 5px 10px; +} +.callout.callout[data-callout~=infobox] .callout-content > .callout[data-callout~=infobox] .callout-fold, .callout.callout[data-callout~=infobox]:is([data-callout-metadata~=show-title], [data-callout-metadata~=s-t]) .callout-fold { + margin-top: auto; + margin-bottom: auto; +} +.callout.callout[data-callout~=infobox] .callout-content > .callout[data-callout~=infobox].is-collapsed .callout-fold, .callout.callout[data-callout~=infobox]:is([data-callout-metadata~=show-title], [data-callout-metadata~=s-t]).is-collapsed .callout-fold { + border: 0; +} +.callout.callout[data-callout~=infobox] > .callout-content { + border: 1px solid var(--table, var(--background-modifier-border)); + margin: 0; + border-radius: var(--radius-s); +} +.callout.callout[data-callout~=infobox] table { + width: 100%; +} +.callout.callout[data-callout~=infobox] table td { + white-space: pre-wrap; + word-wrap: normal; + word-break: normal; +} +.callout.callout[data-callout~=infobox] :is(p, table) { + margin-block-start: 0; + margin-block-end: 0; + margin: 0; +} +.callout.callout[data-callout~=infobox] .callout-content > :is(h1, h2, h3, h4, h5, h6) { + font-size: 20px; + text-align: center; + margin: 0; + padding: 2px; + color: var(--text-normal); + background: var(--outer-bar, var(--background-secondary)); +} +.callout.callout[data-callout~=infobox] .internal-embed, .callout.callout[data-callout~=infobox] img { + display: block; + margin: auto; + padding: auto; + text-align: center; +} +.callout.callout[data-callout~=infobox][data-callout-metadata][data-callout-metadata][data-callout-metadata~=left] { + --callout-margin: 0 5px 0 0; +} +.callout.callout[data-callout~=infobox] .callout-content > .callout[data-callout~=infobox] { + max-width: unset; + float: unset; + --callout-margin: 5px 0 0 0; +} +.callout.callout[data-callout~=infobox] .callout-content > .callout[data-callout~=infobox] > .callout-title { + color: var(--text-normal); + background: var(--outer-bar, var(--background-secondary)); + border: 1px solid var(--table, var(--background-modifier-border)); + border-bottom: none; +} +.callout.callout[data-callout~=infobox] .callout-content > .callout[data-callout~=infobox] > .callout-content { + border-top: none; +} + +.callout.callout[data-callout~=infobox][data-callout-metadata~=wikipedia] table { + --table-header-color: var(--text, var(--text-normal)); + --table-header-background: transparent; + --table-header-background-hover: var(--td, var(--table-background)); + --table-row-background-hover: var(--td, var(--table-background)); + --table-row-alt-background: transparent; + --table-column-alt-background: transparent; + --table-border-color: transparent; + --table-header-border-color: transparent; +} +.callout.callout[data-callout~=infobox][data-callout-metadata~=wikipedia] table tr:last-child { + margin-bottom: 2px; +} + +@media print { + .callout[data-callout~=infobox] { + max-width: 400px; + } +} +.theme-light .callout[data-callout~=infobox][data-callout-metadata~=wikipedia] { + --th-text: var(--th); +} + +.illusion.illusion .callout[data-callout~=infobox].is-collapsed.is-collapsed[data-callout-metadata~=left] { + margin-left: -30px; +} +.illusion.illusion .callout[data-callout~=infobox].is-collapsed.is-collapsed[data-callout-metadata~=right] { + margin-right: -30px; +} +.illusion.illusion .callout[data-callout~=infobox] [data-heading] { + --illusion-box-shadow: none; + --header-shadow: var(--illusion-box-shadow); + --h1-shadow: var(--header-shadow); + --h2-shadow: var(--header-shadow); + --h3-shadow: var(--header-shadow); + --h4-shadow: var(--header-shadow); + --h5-shadow: var(--header-shadow); + --h6-shadow: var(--header-shadow); +} + +/*Image Grid*/ +.callout.callout[data-callout=grid] { + --callout-padding: 0; + --callout-content-padding: 0; + background: transparent; + border: 0; + margin: 0; + box-shadow: none; +} +.callout.callout[data-callout=grid] .callout-content { + display: block; + width: 100%; + border: 0; + box-shadow: unset; + padding: 0; +} +.callout.callout[data-callout=grid] .callout-title { + display: none; +} +.callout.callout[data-callout=grid] .callout-content p { + display: flex; + margin-block-start: 0; + margin-block-end: 0; + justify-content: center; +} +.callout.callout[data-callout=grid] .callout-content img { + display: table-cell; + vertical-align: middle; + padding: 3px; + max-height: 35vh; +} +.callout.callout[data-callout=grid] .callout-content img[alt=wfull] { + max-height: unset; +} +.callout.callout[data-callout=grid][data-callout-metadata~=masonry] .callout-content p { + display: grid; + grid-template-columns: repeat(auto-fit, minmax(0, auto)); + grid-gap: 0; + margin: 0; + margin-top: 1px; +} +.callout.callout[data-callout=grid][data-callout-metadata~=masonry] .callout-content img { + display: flex; + flex: 1; + align-self: stretch; + object-fit: cover; + max-height: unset; +} + +/* Cards */ +.callout[data-callout~=cards] { + --callout-color: transparent; + --callout-icon: layout-dashboard; + --callout-padding: 0; + --callout-content-padding: 0px; + --callout-blend-mode: normal; + box-shadow: none; + border: 0; + width: auto; +} +.callout[data-callout~=cards] > .callout-title { + display: none; +} +.callout[data-callout~=cards] > .callout-content { + display: grid; + grid-template-columns: repeat(3, 1fr); + grid-gap: 5px; + border-radius: 0; + padding-inline-start: 0px; + padding: 0; +} +.callout[data-callout~=cards] p { + margin-block-start: 0; + margin-block-end: 0; + padding: 0; +} +.callout[data-callout~=cards]:not([data-callout-metadata~=nstr], [data-callout-metadata~=no-strong]) strong { + display: block; + text-align: center; + margin: auto; + background-color: var(--outer-bar, var(--background-secondary)); +} +.callout[data-callout~=cards] br { + display: none; +} +.callout[data-callout~=cards][data-callout-metadata~=flex] > .callout-content { + gap: unset; + grid-template-columns: none; + display: flex; + flex-direction: row; + flex-wrap: wrap; +} +.callout[data-callout~=cards][data-callout-metadata~=flex] > .callout-content .callout { + flex: 1 1 250px; + margin: 5px; +} + +/* Dataview Cards */ +.callout[data-callout~=cards][data-callout-metadata~=dataview] { + --callout-content-padding: 0; +} +.callout[data-callout~=cards][data-callout-metadata~=dataview] .callout-content { + display: unset; + grid-template-columns: unset; +} +.callout[data-callout~=cards][data-callout-metadata~=dataview] br { + display: block; +} +.callout[data-callout~=cards][data-callout-metadata~=dataview] .block-language-dataview { + padding: 5px; +} +.callout[data-callout~=cards][data-callout-metadata~=dataview] .dataview.table-view-table { + display: grid; +} +.callout[data-callout~=cards][data-callout-metadata~=dataview] .dataview.table-view-table :is(td, tr) { + border: 0; + background: transparent; + padding: 0; +} +.callout[data-callout~=cards][data-callout-metadata~=dataview] .dataview.table-view-table strong { + background: transparent; +} +.callout[data-callout~=cards][data-callout-metadata~=dataview] .table-view-thead th { + border: 0; + background-color: transparent; +} +.callout[data-callout~=cards][data-callout-metadata~=dataview] .table-view-thead tr { + display: none; +} +.callout[data-callout~=cards][data-callout-metadata~=dataview] .dataview.table-view-table tbody { + display: grid; + grid-template-columns: repeat(3, 1fr); + grid-gap: 10px; +} +.callout[data-callout~=cards][data-callout-metadata~=dataview] .dataview.table-view-table tbody tr { + display: grid; + align-content: flex-start; + margin: 0; + padding: 10px; + border: 2px solid var(--outline, var(--background-modifier-box-shadow)); + box-shadow: var(--shadow-ml, var(--input-shadow)); +} + +.callout[data-callout~=cards][data-callout-metadata~=dvl] .callout-content { + display: block; +} +.callout[data-callout~=cards][data-callout-metadata~=dvl] br { + display: unset; +} +.callout[data-callout~=cards][data-callout-metadata~=dvl] .block-language-dataviewjs .dataview-result-list-li, .callout[data-callout~=cards][data-callout-metadata~=dvl] .list-view-ul li { + padding: 10px; + background-color: var(--outer-bar, var(--background-secondary)); + box-shadow: var(--shadow-s, var(--input-shadow)); + margin-bottom: 5px; +} +.callout[data-callout~=cards][data-callout-metadata~=dvl] .dataview.list-view-ul li::before { + margin-left: -27px; +} +.callout[data-callout~=cards][data-callout-metadata~=dvl] ul { + padding-inline-start: unset; +} + +.callout[data-callout~=cards][data-callout-metadata~="1"] :is(.dataview.table-view-table tbody, +.callout-content) { + grid-template-columns: repeat(1, 1fr); +} +.callout[data-callout~=cards][data-callout-metadata~="2"] :is(.dataview.table-view-table tbody, +.callout-content) { + grid-template-columns: repeat(2, 1fr); +} +.callout[data-callout~=cards][data-callout-metadata~="3"] :is(.dataview.table-view-table tbody, +.callout-content) { + grid-template-columns: repeat(3, 1fr); +} +.callout[data-callout~=cards][data-callout-metadata~="4"] :is(.dataview.table-view-table tbody, +.callout-content) { + grid-template-columns: repeat(4, 1fr); +} +.callout[data-callout~=cards][data-callout-metadata~="5"] :is(.dataview.table-view-table tbody, +.callout-content) { + grid-template-columns: repeat(5, 1fr); +} +.callout[data-callout~=cards][data-callout-metadata~="6"] :is(.dataview.table-view-table tbody, +.callout-content) { + grid-template-columns: repeat(6, 1fr); +} +.callout[data-callout~=cards][data-callout-metadata~="7"] :is(.dataview.table-view-table tbody, +.callout-content) { + grid-template-columns: repeat(7, 1fr); +} +.callout[data-callout~=cards][data-callout-metadata~="8"] :is(.dataview.table-view-table tbody, +.callout-content) { + grid-template-columns: repeat(8, 1fr); +} +.callout[data-callout~=cards][data-callout-metadata~="9"] :is(.dataview.table-view-table tbody, +.callout-content) { + grid-template-columns: repeat(9, 1fr); +} + +.callout[data-callout~=cards][data-callout-metadata~=dataview] img:not(.link-favicon) { + width: 100%; + object-fit: cover; +} +.callout[data-callout~=cards][data-callout-metadata~=dataview][data-callout-metadata~=img-micro] img { + height: var(--micro); +} +.callout[data-callout~=cards][data-callout-metadata~=dataview][data-callout-metadata~=img-tiny] img { + height: var(--tiny); +} +.callout[data-callout~=cards][data-callout-metadata~=dataview][data-callout-metadata~=img-small] img { + height: var(--small); +} +.callout[data-callout~=cards][data-callout-metadata~=dataview][data-callout-metadata~=img-small-med] img { + height: var(--small-med); +} +.callout[data-callout~=cards][data-callout-metadata~=dataview][data-callout-metadata~=img-med-small] img { + height: var(--med-small); +} +.callout[data-callout~=cards][data-callout-metadata~=dataview][data-callout-metadata~=img-medium] img { + height: var(--medium); +} +.callout[data-callout~=cards][data-callout-metadata~=dataview][data-callout-metadata~=img-med-tall] img { + height: var(--med-tall); +} +.callout[data-callout~=cards][data-callout-metadata~=dataview][data-callout-metadata~=img-tall] img { + height: var(--tall); +} + +/*Captions*/ +.callout.callout[data-callout~=caption] { + background: transparent; + text-align: center; + box-shadow: none; + border: 0; + padding: 0; + margin: 0; + --callout-content-padding: 0; + max-width: 30vh; +} +.callout.callout[data-callout~=caption] > .callout-content { + overflow: hidden; +} +.callout.callout[data-callout~=caption] > .callout-content > p :is(.image-embed, img) + br { + display: none; +} +.callout.callout[data-callout~=caption] > .callout-content img { + display: block; + margin: auto; +} +.callout.callout[data-callout~=caption] > .callout-title { + display: none; +} +.callout.callout[data-callout~=caption] p { + margin-block-start: 0; + margin-block-end: 0; + color: var(--text-faint); +} +.callout.callout[data-callout~=caption]:is([data-callout-metadata~=sban], [data-callout-metadata~=banner]) .image-embed img { + width: 100%; +} + +/* Recite */ +.callout.callout[data-callout=recite] { + --callout-color: 193, 67, 67; + --callout-icon: ''; + --callout-margin: 10px; + --callout-padding: 5px 10px 10px 10px; + border-style: solid; + border-width: 11px; + border-image: url("data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAFAAAAA8CAYAAADxJz2MAAAFWWlUWHRYTUw6Y29tLmFkb2JlLnhtcAAAAAAAPD94cGFja2V0IGJlZ2luPSLvu78iIGlkPSJXNU0wTXBDZWhpSHpyZVN6TlRjemtjOWQiPz4KPHg6eG1wbWV0YSB4bWxuczp4PSJhZG9iZTpuczptZXRhLyIgeDp4bXB0az0iWE1QIENvcmUgNS41LjAiPgogPHJkZjpSREYgeG1sbnM6cmRmPSJodHRwOi8vd3d3LnczLm9yZy8xOTk5LzAyLzIyLXJkZi1zeW50YXgtbnMjIj4KICA8cmRmOkRlc2NyaXB0aW9uIHJkZjphYm91dD0iIgogICAgeG1sbnM6ZGM9Imh0dHA6Ly9wdXJsLm9yZy9kYy9lbGVtZW50cy8xLjEvIgogICAgeG1sbnM6ZXhpZj0iaHR0cDovL25zLmFkb2JlLmNvbS9leGlmLzEuMC8iCiAgICB4bWxuczp0aWZmPSJodHRwOi8vbnMuYWRvYmUuY29tL3RpZmYvMS4wLyIKICAgIHhtbG5zOnBob3Rvc2hvcD0iaHR0cDovL25zLmFkb2JlLmNvbS9waG90b3Nob3AvMS4wLyIKICAgIHhtbG5zOnhtcD0iaHR0cDovL25zLmFkb2JlLmNvbS94YXAvMS4wLyIKICAgIHhtbG5zOnhtcE1NPSJodHRwOi8vbnMuYWRvYmUuY29tL3hhcC8xLjAvbW0vIgogICAgeG1sbnM6c3RFdnQ9Imh0dHA6Ly9ucy5hZG9iZS5jb20veGFwLzEuMC9zVHlwZS9SZXNvdXJjZUV2ZW50IyIKICAgZXhpZjpQaXhlbFhEaW1lbnNpb249IjgwIgogICBleGlmOlBpeGVsWURpbWVuc2lvbj0iNjAiCiAgIGV4aWY6Q29sb3JTcGFjZT0iMSIKICAgdGlmZjpJbWFnZVdpZHRoPSI4MCIKICAgdGlmZjpJbWFnZUxlbmd0aD0iNjAiCiAgIHRpZmY6UmVzb2x1dGlvblVuaXQ9IjIiCiAgIHRpZmY6WFJlc29sdXRpb249IjMwMC8xIgogICB0aWZmOllSZXNvbHV0aW9uPSIzMDAvMSIKICAgcGhvdG9zaG9wOkNvbG9yTW9kZT0iMyIKICAgcGhvdG9zaG9wOklDQ1Byb2ZpbGU9InNSR0IgSUVDNjE5NjYtMi4xIgogICB4bXA6TW9kaWZ5RGF0ZT0iMjAyMi0wMS0wMlQxNjowNTo0MS0wODowMCIKICAgeG1wOk1ldGFkYXRhRGF0ZT0iMjAyMi0wMS0wMlQxNjowNTo0MS0wODowMCI+CiAgIDxkYzp0aXRsZT4KICAgIDxyZGY6QWx0PgogICAgIDxyZGY6bGkgeG1sOmxhbmc9IngtZGVmYXVsdCI+RCZhbXA7RCBCb3JkZXI8L3JkZjpsaT4KICAgIDwvcmRmOkFsdD4KICAgPC9kYzp0aXRsZT4KICAgPHhtcE1NOkhpc3Rvcnk+CiAgICA8cmRmOlNlcT4KICAgICA8cmRmOmxpCiAgICAgIHN0RXZ0OmFjdGlvbj0icHJvZHVjZWQiCiAgICAgIHN0RXZ0OnNvZnR3YXJlQWdlbnQ9IkFmZmluaXR5IERlc2lnbmVyIDEuMTAuNCIKICAgICAgc3RFdnQ6d2hlbj0iMjAyMi0wMS0wMlQxNjowNTo0MS0wODowMCIvPgogICAgPC9yZGY6U2VxPgogICA8L3htcE1NOkhpc3Rvcnk+CiAgPC9yZGY6RGVzY3JpcHRpb24+CiA8L3JkZjpSREY+CjwveDp4bXBtZXRhPgo8P3hwYWNrZXQgZW5kPSJyIj8+SLcLyAAAAYFpQ0NQc1JHQiBJRUM2MTk2Ni0yLjEAACiRdZHPK0RRFMc/8xD50SiUhcVLWA35UWJjMZNfhcXMKIPNm2fejJo3Xu+NJFtlO0WJjV8L/gK2ylopIiVLWRMbpuc8o0Yy53bP/dzvPed077mgRNO66ZR3g5nJ2uHRoDoTm1Urn/Ch0EQdqqY71mRkJEpJe7+VaLHrTq9W6bh/rWYh4ejgqxIe0i07KzwmPLGStTzeEm7UU9qC8IlwwJYLCt94erzAzx4nC/zpsR0Nh0CpF1aTvzj+i/WUbQrLy2kz08v6z328l9QmMtMRWVtltuAQZpQgKuMME6KfHgbF99NJL12yo0R+93f+FEuSq4u3WMVmkSQpsgREXZbqCVkN0RMy0qx6/f/bV8fo6y1Urw1CxaPrvrZD5Sbkc677ceC6+UMoe4DzTDF/aR8G3kTPFbW2PfCvw+lFUYtvw9kGNN9bmq19S2UyFcOAl2Ooi0HDFVTPFXr2c87RHUTX5KsuYWcXOiTeP/8FK5Jny8RYHqYAAAAJcEhZcwAALiMAAC4jAXilP3YAAAG5SURBVHic7dyxSiNRFMbxv0OwEkvZfrEWleWAvbA+giB5ANtgcx/gFJK0+wAbwUdYV7bZRjiIirXYL1tbiajFXHV3Y5KBbIyTfL8yOQxfPu5kprkXKnCzRTfrVpmdBm7WdbPFKrNFhYt9As6BnVGD1cgOcJ5/+0CNfl+4WQG0AB80N8U+AiduloBOirh/bejVFehmH4AjYJ/ZLO9Jg7KDo9xJj54C3ewzcAlsjjdbrWwCl7mbvzyvLjebp7xdW28YrE6WgG9u1gFSiriFvALdbBk4QeVV0aL8b1wGKNysCVwA6xONVS/rwIWbNefc7GHSaeps6HugiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIyCzQTqURaafSiBpAE/gCLAwbThFzY0/0DlS8K2+A3SJFdIE14Gy8sabKGbCWIroFQIq4AjaA9kRj1UMb2MidvexYzzuw99zsB/CVcoe2vPgNNFPE9z8/7HmI5IEV4PiNgtXBMbDyb3nQ5ymcIn4BW8AecDfebO/aHWUHW7mTHn2PNMnnpLTd7CdwSHmOyiy5BrZTxOmgoaHvgfkCq8DBfwpWBwfA6rDyAB4BTjVxWZByO0gAAAAASUVORK5CYII=") 11; + border-image-outset: 9px 0px; + box-shadow: 0px 0px 10px var(--outline, var(--background-modifier-box-shadow)); + background: var(--note, var(--background-primary)); + text-align: justify; +} +.callout.callout[data-callout=recite] .callout-title { + padding: 0; + background: transparent; + color: rgba(var(--callout-color), 1); + justify-content: center; +} +.callout.callout[data-callout=recite][data-callout-metadata*=bg-]:not([data-callout-metadata*=bg-c]) .callout-title { + color: var(--text-normal); +} +.callout.callout[data-callout=recite] .callout-title-inner { + flex: unset; +} +.callout.callout[data-callout=recite] .callout-content { + padding: 0; + padding-top: 10px; +} + +/* Unwrapped Table */ +.callout.callout[data-callout-metadata~=table], +.callout.callout[data-callout~=table] { + border: 0; + background-color: transparent; + --callout-padding: 0; +} +.callout.callout[data-callout-metadata~=table] .callout-content, +.callout.callout[data-callout~=table] .callout-content { + padding: 0; + border: 0; + background-color: transparent; + box-shadow: none; +} +.callout.callout[data-callout-metadata~=table]:not([data-callout-metadata~=show-title], +[data-callout-metadata~=s-t]) .callout-title, +.callout.callout[data-callout~=table]:not([data-callout-metadata~=show-title], +[data-callout-metadata~=s-t]) .callout-title { + display: none; +} +.callout.callout[data-callout-metadata~=table] table, +.callout.callout[data-callout~=table] table { + white-space: nowrap; + margin: 0; + margin: auto; + overflow-x: scroll; +} +.callout.callout[data-callout-metadata~=table] table th, .callout.callout[data-callout-metadata~=table] table td, +.callout.callout[data-callout~=table] table th, +.callout.callout[data-callout~=table] table td { + white-space: nowrap; +} + +/* Metadata */ +.callout.callout[data-callout~=Metadata i] { + --callout-icon: layers; + --callout-color: 82, 139, 212; + --callout-border-width: 2px; + --callout-title-padding: 5px; + --callout-content-padding: 0px 10px 10px; + box-shadow: 0px 0px 0px 1px var(--outline); +} +.callout.callout[data-callout~=Metadata i] .callout-title { + background-color: transparent; + justify-content: center; +} +.callout.callout[data-callout~=Metadata i] .callout-title-inner { + flex: unset; + color: rgb(var(--callout-color)); +} +.callout.callout[data-callout~=Metadata i]:not([data-callout-metadata~=no-strong], [data-callout-metadata~=no-str]) .callout-content strong { + color: rgb(var(--callout-color)); +} +.callout.callout[data-callout~=Metadata i] .dataview.inline-field-key { + background: rgb(var(--callout-color)); + color: var(--text-on-accent); + font-weight: 900; +} +.callout.callout[data-callout~=Metadata i] .dataview.inline-field-value { + font-weight: unset; + background: transparent; +} +.callout.callout[data-callout~=Metadata i] table th { + background-color: var(--aside-bg, rgba(var(--callout-color), 0.5)); +} +.callout.callout[data-callout~=Metadata i] table { + --tbl-td-h: 0; + --tbl-td-w: 5px; + white-space: nowrap; + margin: 0; + width: 100%; +} +.callout.callout[data-callout~=Metadata i] .callout-content p:last-child { + margin-bottom: 0; +} +.callout.callout[data-callout~=Metadata i] .callout-content p:first-child { + margin-top: 0; +} +.callout.callout[data-callout~=Metadata i] .callout-content, .callout.callout[data-callout~=Metadata i] ul { + margin: 0; +} +.callout.callout[data-callout~=Metadata i][data-callout-metadata~=i-at] { + background: var(--outer-bar, var(--background-secondary-alt)); + border: 0; + text-align: center; + padding: 0; +} +.callout.callout[data-callout~=Metadata i][data-callout-metadata~=i-at].is-collapsible:not(.is-collapsed) { + display: flex; + flex-direction: row-reverse; +} +.callout.callout[data-callout~=Metadata i][data-callout-metadata~=i-at]:not(.is-collapsible) .callout-title, .callout.callout[data-callout~=Metadata i][data-callout-metadata~=i-at] .callout-title-inner, .callout.callout[data-callout~=Metadata i][data-callout-metadata~=i-at]:not(.is-collapsed) .callout-icon { + display: none; +} +.callout.callout[data-callout~=Metadata i][data-callout-metadata~=i-at] .callout-fold { + display: flex; + align-content: center; + align-items: center; +} +.callout.callout[data-callout~=Metadata i][data-callout-metadata~=i-at] .callout-fold svg { + margin-bottom: unset; +} +.callout.callout[data-callout~=Metadata i][data-callout-metadata~=i-at] .callout-content { + padding: 0px; + margin: auto; + overflow-y: hidden; +} +.callout.callout[data-callout~=Metadata i]:is([data-callout-metadata~=tbl-cln], [data-callout-metadata~=table-clean]) table :is(td, tr, th) { + background-color: transparent; + border-color: transparent; +} + +/* Columns */ +.callout[data-callout*=column] { + --callout-color: var(--text-normal); + --callout-icon: layout-dashboard; + --columns: 2; + background: transparent; + box-shadow: none; + border: 0; + width: auto; + padding: 0; +} +.callout[data-callout*=column] > .callout-content .callout-content { + border: 0; +} +.callout[data-callout*=column] > .callout-content { + display: grid; + grid-template-columns: repeat(var(--columns), 1fr); + gap: 10px; + background: transparent; + box-shadow: none; + border: 0; + padding: 0; +} +.callout[data-callout*=column][data-callout-metadata~="3"] .callout-content { + --columns: 3; +} +.callout[data-callout*=column][data-callout-metadata~="4"] .callout-content { + --columns: 4; +} +.callout[data-callout*=column][data-callout-metadata~="5"] .callout-content { + --columns: 5; +} +.callout[data-callout*=column][data-callout-metadata~="6"] .callout-content { + --columns: 6; +} +.callout[data-callout*=column][data-callout-metadata~="7"] .callout-content { + --columns: 7; +} +.callout[data-callout*=column][data-callout-metadata~="8"] .callout-content { + --columns: 8; +} +.callout[data-callout*=column][data-callout-metadata~="9"] .callout-content { + --columns: 9; +} +.callout[data-callout*=column][data-callout-metadata~=flex] > .callout-content { + gap: 5px; + grid-template-columns: none; + display: flex; + flex-direction: row; + flex-wrap: wrap; +} +.callout[data-callout*=column][data-callout-metadata~=flex] > .callout-content .callout { + flex: 1 1 calc(var(--file-line-width) / 2.5); +} +.callout[data-callout*=column][data-callout-metadata~=flex][data-callout-metadata~="3"] > .callout-content .callout { + flex: 1 1 calc(var(--file-line-width) / 3.5); +} +.callout[data-callout*=column][data-callout-metadata~=flex][data-callout-metadata~=resize] .callout { + flex: 1 1 auto; +} +.callout[data-callout*=column][data-callout-metadata~=flex][data-callout-metadata~=resize] .callout[data-callout-metadata~=wmicro] { + width: 5%; +} +.callout[data-callout*=column][data-callout-metadata~=flex][data-callout-metadata~=resize] .callout[data-callout-metadata~=wtiny] { + width: 10%; +} +.callout[data-callout*=column][data-callout-metadata~=flex][data-callout-metadata~=resize] .callout[data-callout-metadata~=wsmall] { + width: 20%; +} +.callout[data-callout*=column][data-callout-metadata~=flex][data-callout-metadata~=resize] .callout[data-callout-metadata~=ws-med] { + width: 30%; +} +.callout[data-callout*=column][data-callout-metadata~=flex][data-callout-metadata~=resize] .callout[data-callout-metadata~=wmed] { + width: 40%; +} +.callout[data-callout*=column][data-callout-metadata~=dataview] > .callout-content { + grid-template-columns: unset; + gap: unset; +} +.callout[data-callout*=column][data-callout-metadata~=dataview] > .callout-content .dataview.list-view-ul { + columns: var(--columns); +} +.callout[data-callout*=column][data-callout-metadata~=dataview] > .callout-content .dataview li { + break-inside: avoid; +} +.callout[data-callout*=column][data-callout-metadata~=list-global] .callout > .callout-content, .callout[data-callout*=column][data-callout-metadata~=list] > .callout-content { + grid-template-columns: unset; +} +.callout[data-callout*=column][data-callout-metadata~=list-global] .callout > .callout-content > ul, .callout[data-callout*=column][data-callout-metadata~=list] > .callout-content > ul { + columns: var(--columns); +} +.callout[data-callout*=column][data-callout-metadata~=list-global] .callout > .callout-content > ul > li, .callout[data-callout*=column][data-callout-metadata~=list] > .callout-content > ul > li { + break-inside: avoid; +} +.callout[data-callout*=column][data-callout-metadata~=list-global] .callout > .callout-content > ul .list-bullet::after, .callout[data-callout*=column][data-callout-metadata~=list] > .callout-content > ul .list-bullet::after { + position: relative; +} + +/*Kanban*/ +.callout.callout[data-callout~=kanban] { + --callout-color: unset; + --callout-icon: layout-dashboard; + --callout-padding: 0; + --item-outline: 0 0 0 1px var(--outline, var(--background-modifier-border)); + --lane-width: 250px; + background: transparent; + box-shadow: none; + border: 0; + width: auto; +} +.callout.callout[data-callout~=kanban] .callout-title { + justify-content: center; + background: var(--code-bg, var(--background-primary)); + padding: 5px; + border-radius: var(--radius-s); +} +.callout.callout[data-callout~=kanban] .callout-title-inner { + flex: unset; +} +.callout.callout[data-callout~=kanban] .callout-content { + padding: 0; +} +.callout.callout[data-callout~=kanban] ul li::marker, .callout.callout[data-callout~=kanban] ul li::before, .callout.callout[data-callout~=kanban] .list-bullet, .callout.callout[data-callout~=kanban] ul::before, .callout.callout[data-callout~=kanban] :is(ul, ul ul) .list-collapse-indicator { + list-style-type: none; + color: transparent; + display: none !important; +} +.callout.callout[data-callout~=kanban] ul { + display: flex; + margin-block-start: 5px; + padding-inline-start: 0; + text-align: center; + overflow: auto; +} +.callout.callout[data-callout~=kanban] ul.list-view-ul { + margin-inline-start: unset; +} +.callout.callout[data-callout~=kanban] ul li { + min-width: var(--lane-width); + border: 0; + padding: 5px; + margin: 5px 1px; + padding-top: 4px; + background: var(--note, var(--background-primary-alt)); + border-radius: var(--radius-s); + box-shadow: var(--item-outline), var(--shadow-s); +} +.callout.callout[data-callout~=kanban] ul ul { + flex-direction: column; + text-align: left; + overflow: unset; +} +.callout.callout[data-callout~=kanban] ul ul li { + min-width: calc(var(--lane-width) / 2); + padding: 5px; + box-shadow: var(--item-outline), var(--shadow-s); + background: var(--code-bg, var(--background-primary)); +} +.callout.callout[data-callout~=kanban] ul ul li :is(img, .internal-embed) { + margin-bottom: -6px; +} +.callout.callout[data-callout~=kanban] ul.contains-task-list .task-list-item-checkbox { + margin-inline-start: 0; +} +.callout.callout[data-callout~=kanban] .task-list-item-checkbox { + cursor: default; +} + +/* Timeline */ +.callout.callout[data-callout~=timeline] { + --callout-icon: "clock-12"; + --callout-padding: 0px; + --callout-title-padding: 10px; + --callout-content-padding: 10px; + --timeline-shadow: var(--outline, var(--background-modifier-box-shadow)); + --micro: 50px; + --tiny: 100px; + --small: 200px; + --small-med: 300px; + --med-small: 400px; + --medium: 500px; + --med-tall: 600px; + --tall: 700px; + --c-timeline: calc(50% - 2px); + background-color: transparent; + margin: 0; + border: 0; + clear: both; +} +.callout.callout[data-callout~=timeline] .callout-title { + background: rgba(var(--callout-color), 0.35); + align-content: center; + align-items: center; +} +.callout.callout[data-callout~=timeline] .callout-title em { + font-style: normal; + display: block; + font-size: 14px; + line-height: 12px; + color: rgb(var(--callout-color)); +} +.callout.callout[data-callout~=timeline] .callout-icon { + background-color: var(--note, var(--background-primary)); + transform: scale(1.2); + border-radius: 20px; + height: var(--icon-size); + width: var(--icon-size); +} +.callout.callout[data-callout~=timeline] .callout-content { + background-color: rgb(var(--callout-color), 0.1); +} +.callout.callout[data-callout~=timeline][data-callout-metadata~=t-l] { + border-right: 4px solid rgb(var(--callout-color)); + margin-right: var(--c-timeline); + z-index: 0; +} +.callout.callout[data-callout~=timeline][data-callout-metadata~=t-l] > .callout-title, .callout.callout[data-callout~=timeline][data-callout-metadata~=t-l] > .callout-content { + box-shadow: -4px 4px 0 var(--timeline-shadow); +} +.callout.callout[data-callout~=timeline][data-callout-metadata~=t-r] { + border-left: 4px solid rgb(var(--callout-color)); + margin-left: var(--c-timeline); +} +.callout.callout[data-callout~=timeline][data-callout-metadata~=t-r] > .callout-title, .callout.callout[data-callout~=timeline][data-callout-metadata~=t-r] > .callout-content { + box-shadow: 4px 4px 0 var(--timeline-shadow); +} +.callout.callout[data-callout~=timeline][data-callout-metadata~=t-l] > .callout-title { + flex-direction: row-reverse; + text-align: right; +} +.callout.callout[data-callout~=timeline][data-callout-metadata~=t-l] > .callout-title .callout-icon { + float: right; + position: absolute; + margin-right: -20px; +} +.callout.callout[data-callout~=timeline][data-callout-metadata~=t-r] > .callout-title .callout-icon { + float: left; + position: absolute; + margin-left: -20px; +} +.callout.callout[data-callout~=timeline][data-callout-metadata~=t-1] .callout-title { + margin-top: var(--micro); +} +.callout.callout[data-callout~=timeline][data-callout-metadata~=t-2] .callout-title { + margin-top: var(--tiny); +} +.callout.callout[data-callout~=timeline][data-callout-metadata~=t-3] .callout-title { + margin-top: var(--small); +} +.callout.callout[data-callout~=timeline][data-callout-metadata~=t-4] .callout-title { + margin-top: var(--small-med); +} +.callout.callout[data-callout~=timeline][data-callout-metadata~=t-5] .callout-title { + margin-top: var(--med-small); +} +.callout.callout[data-callout~=timeline][data-callout-metadata~=t-6] .callout-title { + margin-top: var(--medium); +} +.callout.callout[data-callout~=timeline][data-callout-metadata~=t-7] .callout-title { + margin-top: 350px; +} +.callout.callout[data-callout~=timeline][data-callout-metadata~=t-8] .callout-title { + margin-top: var(--med-tall); +} +.callout.callout[data-callout~=timeline][data-callout-metadata~=t-9] .callout-title { + margin-top: var(--tall); +} +.callout.callout[data-callout~=timeline][data-callout-metadata~=t-10] .callout-title { + margin-top: 750px; +} + +.callout[data-callout=kith] { + --callout-icon: user; + --callout-color: 115, 167, 202; + border-color: rgba(var(--callout-color), 0.7); +} +.callout[data-callout=kith] .callout-title-inner { + font-weight: unset; + color: rgb(var(--callout-color)); +} +.callout[data-callout=kith] .callout-title-inner em { + display: block; + font-style: normal; + font-size: var(--font-small); + line-height: 12px; + font-weight: normal; +} +.callout[data-callout=kith] .callout-title-inner em em { + font-style: italic; + display: inline-block; +} +.callout[data-callout=kith][data-callout-metadata=family] { + --callout-icon: users; +} +.callout[data-callout=kith][data-callout-metadata=friend] { + --callout-icon: user-check; + --callout-color: 115, 202, 144; +} +.callout[data-callout=kith][data-callout-metadata=romantic] { + --callout-icon: user-plus; + --callout-color: 202, 115, 180; +} +.callout[data-callout=kith][data-callout-metadata=antagonist] { + --callout-icon: user-x; + --callout-color: 241, 74, 74; +} + +/* Asides */ +.callout[data-callout~=aside] { + --callout-icon: message-square; + --callout-color: ""; + background-color: var(--aside-bg, var(--background-secondary)); + box-shadow: 0.3em 0.3em 0 var(--accent, var(--background-modifier-box-shadow)), 0 0 0 1px var(--accent, var(--background-modifier-box-shadow)); + float: right; + position: relative; + margin: 0; + margin-right: -1.2em; + margin-left: 5px; + max-width: 400px; +} +.callout[data-callout~=aside]:not([data-callout-metadata~=no-t]) .callout-content { + padding: 5px 10px; +} +.callout[data-callout~=aside]:not([data-callout-metadata~=no-t]) .callout-content p:first-child { + margin-top: 0; +} +.callout[data-callout~=aside]:not([data-callout-metadata~=show-title], [data-callout-metadata~=s-t]) .callout-title-inner { + display: none; +} +.callout[data-callout~=aside]:not([data-callout-metadata~=show-title], [data-callout-metadata~=s-t]) .callout-title { + justify-content: space-between; +} +.callout[data-callout~=aside].is-collapsed { + background-color: transparent; + box-shadow: none; + --callout-border-width: 0; + --callout-padding: 0px 4px; +} +.callout[data-callout~=aside].is-collapsed .callout-title-inner { + display: none; +} +.callout[data-callout~=aside].is-collapsed .callout-title { + justify-content: space-between; + --callout-title-padding: 0px; +} +.callout[data-callout~=aside].is-collapsed .callout-fold { + margin: 0; + padding: 0; + margin-left: -25px; + visibility: hidden; +} + +.callout[data-callout~=aside][data-callout-metadata~=clean] { + background: transparent; + box-shadow: none; +} + +.callout[data-callout~=aside][data-callout-metadata~=tufte] { + background: transparent; + box-shadow: none; + float: right; + position: relative; +} +.callout[data-callout~=aside][data-callout-metadata~=tufte]:not(.is-collapsed) { + width: 400px; + margin-right: -25.3em; +} +.callout[data-callout~=aside][data-callout-metadata~=tufte] .callout-title { + padding-top: 0; +} +.callout[data-callout~=aside][data-callout-metadata~=tufte].is-collapsed .callout-title { + justify-content: unset; +} +.callout[data-callout~=aside][data-callout-metadata~=tufte].is-collapsed .callout-content { + display: none; +} + +.callout.callout.callout[data-callout~=aside]:is([data-callout-metadata~=left], [data-callout-metadata~="p+l"]) { + margin-left: -1.6em; +} +.callout.callout.callout[data-callout~=aside]:is([data-callout-metadata~=left], [data-callout-metadata~="p+l"]):not(.is-collapsed) { + margin-right: 10px; +} +.callout.callout.callout[data-callout~=aside]:is([data-callout-metadata~=left], [data-callout-metadata~="p+l"])[data-callout-metadata~=tufte]:not(.is-collapsed) { + margin: unset; + margin-left: -25em !important; +} +.callout.callout.callout[data-callout~=aside]:is([data-callout-metadata~=left], [data-callout-metadata~="p+l"])[data-callout-metadata~=tufte]:not(.is-collapsed) .callout-title { + padding-top: 5px; + flex-direction: row-reverse; +} + +.is-mobile.is-mobile .callout[data-callout~=aside]:is([data-callout-metadata~=left], [data-callout-metadata~="p+l"]) { + margin-left: 0; +} + +.is-live-preview .callout[data-callout~=aside] { + float: unset; +} + +.is-live-preview.is-live-preview .callout.callout[data-callout~=aside] { + margin: 5px; +} + +body:not(.default-callout-quote) .callout.callout[data-callout=quote] { + --callout-icon: ""; + --callout-color: var(--color-accent); + --callout-padding: 20px 30px; + --callout-border-width: 0 0 0 4px; + --callout-border-opacity: .7; + display: flex; + flex-direction: column-reverse; + box-shadow: var(--shadow-l); +} +body:not(.default-callout-quote) .callout.callout[data-callout=quote] > .callout-content { + padding: 0; + overflow: hidden; +} +body:not(.default-callout-quote) .callout.callout[data-callout=quote] > .callout-content p:first-child { + margin-block-start: 0; +} +body:not(.default-callout-quote) .callout.callout[data-callout=quote] > .callout-content p:last-child { + margin-block-end: 0; +} +body:not(.default-callout-quote) .callout.callout[data-callout=quote] > .callout-icon { + height: 0; + width: 0; +} +body:not(.default-callout-quote) .callout.callout[data-callout=quote] > .callout-title { + background: transparent; + text-align: right; + padding-top: 5px; + padding-right: 0; + display: block; +} +body:not(.default-callout-quote) .callout.callout[data-callout=quote] > .callout-title-inner::before { + content: "~ "; +} + +.callout.callout[data-callout=quote][data-callout-metadata~=author] { + --callout-icon: ""; + --callout-color: var(--color-accent); + --callout-padding: 20px 30px; + --callout-border-width: 0 0 0 4px; + --callout-border-opacity: .7; + display: flex; + flex-direction: column-reverse; + box-shadow: var(--shadow-l); +} +.callout.callout[data-callout=quote][data-callout-metadata~=author] .callout-content { + padding: 0; + overflow: hidden; +} +.callout.callout[data-callout=quote][data-callout-metadata~=author] .callout-content p:first-child { + margin-block-start: 0; +} +.callout.callout[data-callout=quote][data-callout-metadata~=author] .callout-content p:last-child { + margin-block-end: 0; +} +.callout.callout[data-callout=quote][data-callout-metadata~=author] .callout-icon { + height: 0; + width: 0; +} +.callout.callout[data-callout=quote][data-callout-metadata~=author] .callout-title { + background: transparent; + text-align: right; + padding-top: 5px; + padding-right: 0; + display: block; +} +.callout.callout[data-callout=quote][data-callout-metadata~=author] .callout-title-inner::before { + content: "~ "; +} +.callout.callout[data-callout=quote][data-callout-metadata~=mark] { + --callout-padding: 20px 40px 20px 30px; +} +.callout.callout[data-callout=quote][data-callout-metadata~=mark] .callout-content::before { + display: block; + float: right; + content: "”"; + font-family: var(--font); + color: var(--headers); + transform: scale(4); + position: absolute; + right: 50px; + margin-top: 20px; +} + +.published-container .callout.callout[data-callout=quote][data-callout-metadata~=mark] .callout-content::before { + right: 65px; +} + +.callout-original .callout, +.callout:is([data-callout-metadata~=callout-original], +[data-callout-metadata~=co-o]) { + --callout-padding: 0; + --callout-title-padding: 10px 15px; + --callout-content-padding: 5px 15px; + --callout-border-opacity: 1; + --callout-margin: 5px 5px 5px 0; + --callout-border-width: 0 0 0 3px; + background-color: var(--note, var(--background-primary)); + box-shadow: var(--shadow-m); + margin: var(--callout-margin); +} +.callout-original .callout .callout-title, +.callout:is([data-callout-metadata~=callout-original], +[data-callout-metadata~=co-o]) .callout-title { + background: rgba(var(--callout-color), 0.1); +} + +.callout-block .callout, +.callout:is([data-callout-metadata~=callout-block], +[data-callout-metadata~=co-block]) { + --callout-padding: 0; + --callout-content-padding: 0 10px; + --callout-title-padding: 6px 10px; + --callout-title-background: var(--callout-color); + --callout-border-opacity: .5; +} +.callout-block .callout .callout-title, +.callout:is([data-callout-metadata~=callout-block], +[data-callout-metadata~=co-block]) .callout-title { + background-color: rgba(var(--callout-title-background, var(--callout-color)), 0.2); +} +.callout-block .callout.is-collapsible:not(.is-collapsed) > .callout-content, +.callout:is([data-callout-metadata~=callout-block], +[data-callout-metadata~=co-block]).is-collapsible:not(.is-collapsed) > .callout-content { + border-bottom: 1px solid rgba(var(--callout-color), var(--callout-border-opacity)); +} + +.callout-side-icon .callout, +.callout:is([data-callout-metadata~=callout-side-icon], +[data-callout-metadata~=co-si]) { + --callout-title-padding: 0 0 0 20px; + --callout-title-background: transparent; + --callout-border-width: 0; + display: flex; + flex-direction: row; + align-items: center; +} +.callout-side-icon .callout .callout-title-inner, +.callout:is([data-callout-metadata~=callout-side-icon], +[data-callout-metadata~=co-si]) .callout-title-inner { + display: none; +} + +.callout-alternate-line .callout, +.callout.callout[data-callout-metadata~=alt-line] { + border: 0; + background-color: transparent; + --callout-padding: 0; + --callout-title-padding: 5px 10px; + --callout-content-padding: 0px 10px 10px; +} +.callout-alternate-line .callout .callout-title, +.callout.callout[data-callout-metadata~=alt-line] .callout-title { + background: transparent; + border-bottom: 2px solid var(--table, var(--background-modifier-border)); +} +.callout-alternate-line .callout .callout-fold, +.callout.callout[data-callout-metadata~=alt-line] .callout-fold { + color: rgb(var(--callout-color)); +} +.callout-alternate-line .callout .callout-content.callout-content, +.callout.callout[data-callout-metadata~=alt-line] .callout-content.callout-content { + border: 0; + border-bottom: 1px solid rgba(var(--callout-color), 0.5); +} + +@media print { + .print.print .markdown-preview-view .callout:is([data-callout*=cards], +[data-callout*=column]) .callout-content { + display: grid !important; + } + .print.print .markdown-preview-view .callout:is([data-callout*=column][data-callout-metadata*=flex]) .callout-content { + display: flex !important; + } +} +.markdown-rendered table tr { + height: unset; +} + +.canvas-cards .canvas-node.is-themed { + --shadow-border-themed-inset: none; + --shadow-border-themed: none; +} +.canvas-cards .canvas-node.is-themed .canvas-node-container { + border-color: var(--outline); + box-shadow: inset 0 0 0 2px var(--outline), var(--shadow-m); +} +.canvas-cards .canvas-node.is-themed .canvas-node-container:hover .canvas-node-content { + background-color: rgba(var(--canvas-color), 0.2); +} + +.canvas-arrow-text-color .canvas-path-label { + color: rgb(var(--canvas-color)); +} + +.sizing-readable.sizing-readable { + --font-ui-smaller: 13.5px; + --font-ui-small: 14px; + --font-ui-medium: 15px; + --font-ui-large: 20px; + --font-smallest:.88em; + --font-smaller:.9em; + --font-small: .95em; + --icon-xs: 14px; + --icon-s: 16px; + --icon-m: 17px; + --icon-l: 18px; + --header-height: 40px; + --ribbon-width: 40px; +} + +.sizing-mini.sizing-mini { + --font-ui-smaller: 11px; + --font-ui-small: 12px; + --font-ui-medium: 14px; + --font-ui-large: 20px; + --font-smallest: .70em; + --font-smaller: .88em; + --font-small: .95em; + --icon-xs: 12px; + --icon-s: 13px; + --icon-m: 14px; + --icon-l: 15px; + --vault-name-font-size: 14px; + --header-height: 35px; + --ribbon-width: 30px; + --inline-title-size: 20px; + --scrollbar-width: 8px; + --scrollbar-height: 8px; +} + +.sizing-large.sizing-large, +.sizing-large.sizing-large div { + --font-ui-smaller: 16px; + --font-ui-small: 18px; + --font-ui-medium: 20px; + --font-ui-large: 24px; + --font-smallest: 1em; + --font-smaller: 1.2em; + --font-small: 1.5em; + --table-row-edit-font-size: var(--font-text-size); + --font-frontmatter: var(--font-text-size); + --code-size: var(--font-text-size); + --icon-xs: 16px; + --icon-s: 18px; + --icon-m: 20px; + --icon-l: 24px; + --header-height: 50px; + --ribbon-width: 50px; + --inline-title-size: 40px; + --scrollbar-width: 15px; +} + +iframe { + border-width: var(--radius-m); + border-style: none; + border-color: initial; + border-image: initial; +} + +/* Video w/ Aspect Ratio:
*/ +#vid { + position: relative; + padding-bottom: 56.25%; +} + +#vid iframe { + position: absolute; + width: 100%; + height: 100%; +} + +.textLayer ::selection, +.xfaLayer .highlight { + background-color: var(--highlight); +} + +.dataview-table-auto { + --dataview-table-width: auto; +} + +.dataview-regular-table .dataview { + --dataview-th-background: var(--th); + --dataview-th-color: var(--th-text); + --dataview-th-font: var(--table-header-font); + --dataview-th-font-size: var(--table-header-size); + --dataview-th-font-weight: var(--table-header-weight); + --dataview-th-border-bottom: var(--table-border-width) solid var(--table-border-color); + --dataview-th-alt-color: var(--table-column-alt-background); + --dataview-th-count-color: var(--dataview-th-color); +} + +.dataview-cards, +.dvl-c { + --dataview-th-color: var(--text); + --dataview-th-font: var(--font-default); + --dataview-th-font-size: var(--font-text-size); + --dataview-th-count-color: var(--text); + --dataview-th-background: var(--note); + --dataview-th-border-bottom: none; +} +.dataview-cards .table-view-table > thead::before, +.dvl-c .table-view-table > thead::before { + content: "\e805"; + font-family: var(--its); + float: left; + padding: 5px 10px 5px 10px; +} +.dataview-cards .table-view-table > thead > tr, +.dvl-c .table-view-table > thead > tr { + display: flex; + flex-direction: column; + border: var(--box-border-s); + box-shadow: var(--shadow-m); + margin: 0; + flex-wrap: wrap; + float: left; + position: absolute; + margin-top: 30px; +} +.dataview-cards .table-view-table > thead > tr:hover, +.dvl-c .table-view-table > thead > tr:hover { + --text-selection: var(--td); +} +.dataview-cards table .table-view-table > thead > tr, +.dvl-c table .table-view-table > thead > tr { + position: absolute; + right: 0; +} +.dataview-cards .table-view-table > thead:not(:hover) > *, +.dvl-c .table-view-table > thead:not(:hover) > * { + display: none; +} +.dataview-cards .dataview th:hover, +.dvl-c .dataview th:hover { + background: var(--td); +} +.dataview-cards .dataview strong, +.dvl-c .dataview strong { + display: block; + text-align: center; + margin: auto; + background-color: var(--outer-bar, var(--background-secondary)); +} +.dataview-cards .list-view-ul li, .dataview-cards .dataview.table-view-table > tbody > tr, +.dvl-c .list-view-ul li, +.dvl-c .dataview.table-view-table > tbody > tr { + display: flex; + flex-direction: column; + background-color: var(--note); + border: var(--box-border-m); + box-shadow: var(--shadow-m); + margin: 5px 0; + padding: 10px; +} +.dataview-cards .list-view-ul li:hover, .dataview-cards .dataview.table-view-table > tbody > tr:hover, +.dvl-c .list-view-ul li:hover, +.dvl-c .dataview.table-view-table > tbody > tr:hover { + --text-selection: var(--td); + background-color: var(--text-selection); +} +.dataview-cards .list-view-ul, .dataview-cards .dataview.table-view-table > tbody.table-view-tbody, +.dvl-c .list-view-ul, +.dvl-c .dataview.table-view-table > tbody.table-view-tbody { + display: flex; + flex-direction: row; + flex-wrap: wrap; + padding-inline-start: 0; +} +.dataview-cards .block-language-dataviewjs .dataview-result-list-li, .dataview-cards .list-view-ul li, .dataview-cards .dataview.table-view-table > tbody > tr, +.dvl-c .block-language-dataviewjs .dataview-result-list-li, +.dvl-c .list-view-ul li, +.dvl-c .dataview.table-view-table > tbody > tr { + flex: 1 0 200px; + margin: 5px; +} +.dataview-cards .dataview.table-view-table td, +.dvl-c .dataview.table-view-table td { + padding: 0; + background-color: transparent; + border: 0; +} +.dataview-cards .list-view-ul li::before, +.dvl-c .list-view-ul li::before { + display: none; +} +.dataview-cards .dataview.table-view-table li, +.dvl-c .dataview.table-view-table li { + box-shadow: none; + border: 0; + padding: 0; +} + +/*Dataview*/ +.dataview-list .block-language-dataviewjs .dataview-result-list-li, .dataview-list .list-view-ul li, +.dvl .block-language-dataviewjs .dataview-result-list-li, +.dvl .list-view-ul li { + background-color: var(--note); + border: var(--box-border-m); + box-shadow: var(--shadow-m); + margin-bottom: 8px; + padding: 10px; + margin-left: -25px; +} +.dataview-list .block-language-dataviewjs .dataview-result-list-li::before, .dataview-list .list-view-ul li::before, +.dvl .block-language-dataviewjs .dataview-result-list-li::before, +.dvl .list-view-ul li::before { + margin-left: -27px; + display: none; +} +.dataview-list .block-language-dataviewjs .dataview-result-list-li:nth-child(even), .dataview-list .list-view-ul li:nth-child(even), +.dvl .block-language-dataviewjs .dataview-result-list-li:nth-child(even), +.dvl .list-view-ul li:nth-child(even) { + border: var(--box-border-m); +} +.dataview-list.kanban .block-language-dataviewjs .dataview-result-list-li, .dataview-list.kanban .list-view-ul li, +.dvl.kanban .block-language-dataviewjs .dataview-result-list-li, +.dvl.kanban .list-view-ul li { + background-color: var(--aside-bg); +} +.dataview-list.kanban .block-language-dataviewjs .dataview-result-list-li, .dataview-list.kanban .list-view-ul li, +.dvl.kanban .block-language-dataviewjs .dataview-result-list-li, +.dvl.kanban .list-view-ul li { + flex: 1 1 200px; + box-shadow: 4px 4px 0 var(--outline); + border: 1px solid var(--outline); + margin-bottom: 10px; +} +.dataview-list.kanban table td > .dataview-ul, +.dvl.kanban table td > .dataview-ul { + display: block; + padding-inline-start: 1em; +} + +.kanban-title-center .kanban-plugin__item-title-wrapper { + text-align: center; +} + +.kanban-boxed .kanban-plugin__lane { + --kanban-lane-border: var(--box-border-m); + --kanban-lane-box-shadow: var(--shadow-m); +} + +.kanban-boxed .kanban-plugin__item.kanban-plugin__item { + border: 0; + border-left: 3px solid var(--accent); + border-radius: var(--radius); +} + +.kanban-minimal, +.kbn { + --kanban-lane-background: transparent; + --kanban-lane-border: none; + --kanban-lane-box-shadow: none; + --kanban-card-title-background: var(--code-bg); + --kanban-card-title-border: 0 1px 0 var(--outline); + --kanban-card-metadata-background: var(--code-bg); + --kanban-card-margin: 0; + --kanban-link-color: var(--text); + --kanban-link-font-weight: 600; + --kanban-link-symbol: ""; + --kanban-button-background: transparent; + --kanban-button-shadow: transparent; +} + +.metadata-label-text-color .metadata-property { + --metadata-label-background: transparent; + --metadata-label-text-color: var(--headers); + --metadata-icon-color: var(--headers); +} + +.metadata-label-background .metadata-property { + --metadata-label-background: var(--tag); + --metadata-label-text-color: var(--text-dl); + --metadata-icon-color: var(--text-dl); +} + +.metadata-value-background .metadata-property { + --metadata-input-background: var(--td); +} + +.metadata-title-no-icon { + --metadata-title-icon: ""; + --metadata-title-icon-padding: 0; +} + +/*Table Centered*/ +.tables-center .cm-table-widget.cm-table-widget .table-wrapper, .tables-center table, +.t-c .cm-table-widget.cm-table-widget .table-wrapper, +.t-c table { + margin-left: auto; + margin-right: auto; +} + +.tables-wide .cm-table-widget.markdown-rendered .table-wrapper, .tables-wide table, +.t-w .cm-table-widget.markdown-rendered .table-wrapper, +.t-w table { + width: 100%; +} + +.tables-no-alt-background.tables-no-alt-background, +.table-nalt.table-nalt { + --table-column-alt-background: transparent; + --table-row-alt-background: transparent; +} + +.tables-no-alt-column-background.tables-no-alt-column-background { + --table-column-alt-background: transparent; +} + +.tables-no-alt-row-background.tables-no-alt-row-background { + --table-row-alt-background: transparent; +} + +:is(.table-alto, .tables-alt-original) .markdown-rendered tbody tr > td:nth-child(2n+2), :is(.table-alto, .tables-alt-original) .markdown-rendered tbody tr:nth-child(odd) { + background-color: transparent; +} +:is(.table-alto, .tables-alt-original) .markdown-rendered tbody tr > td:nth-child(odd) { + background-color: var(--table-column-alt-background); +} +:is(.table-alto, .tables-alt-original) .markdown-rendered tbody tr:nth-child(even) { + background-color: var(--table-row-alt-background); +} + +.tables-no-hover { + --table-header-background-hover: var(--table-header-background); +} +.tables-no-hover tbody tr:nth-child(odd):hover { + --table-row-background-hover: var(--table-row-alt-background); +} +.tables-no-hover tbody tr:nth-child(even):hover { + --table-row-background-hover: var(--table-row-background); +} + +.tables-borders { + --table-border-color: var(--hr); +} + +/*Bolded Right Side Table*/ +.table.table td:nth-child(1) { + font-weight: 900; +} +.table.table tr:not(:hover) td:nth-child(1) { + background-color: var(--outer-bar); +} + +.table-column-header tr td:nth-child(1) { + background-color: var(--table-header-background); +} +.table-column-header tr td:nth-child(1):hover { + background-color: var(--table-header-background-hover); +} + +.tables-styling-wikipedia, +.table-wikipedia { + --table-header-color: var(--text); + --table-header-background: transparent; + --table-header-background-hover: var(--td); + --table-row-background-hover: var(--td); + --table-row-alt-background: transparent; + --table-column-alt-background: transparent; +} +.tables-styling-wikipedia tr:last-child, +.table-wikipedia tr:last-child { + margin-bottom: 2px; +} + +.lig, +.ligatures { + --font-ligatures: normal; +} + +/*Justify text*/ +.justify .markdown-preview-section, .justify .cm-s-obsidian, .justify.markdown-preview-view, .justify.cm-s-obsidian, +.justified .markdown-preview-section, +.justified .cm-s-obsidian, +.justified.markdown-preview-view, +.justified.cm-s-obsidian { + text-align: justify; +} + +.poem p, +.poem-lp .cm-line { + text-align: center; +} + +.writing.writing { + --file-line-width: 600px; + --link-color: var(--text); + --link-color-hover: var(--soft-text); + --link-background-hover: var(--highlight); + --link-external-color: var(--text); + --link-external-color-hover: var(--soft-text); + --highlight: var(--td) !important; + --text-highlight-bg: var(--highlight); + --hr-icon-symbol: !important; + --header-text-align: center; + --h1-text-align: var(--header-text-align); + --h2-text-align: var(--header-text-align); + --h3-text-align: var(--header-text-align); + --h4-text-align: var(--header-text-align); + --h5-text-align: var(--header-text-align); + --h6-text-align: var(--header-text-align); + --blockquote-background-color: transparent; + --blockquote-border-thickness: 3px; + --blockquote-border-color: var(--accent); + --code-normal: var(--text); + --code-background: var(--td); +} +.writing.writing.markdown-source-view.mod-cm6 .cm-sizer, .writing.writing .markdown-source-view.mod-cm6 .cm-scroller .cm-sizer, .writing.writing .markdown-preview-sizer { + max-width: var(--file-line-width); + margin: auto; +} +.writing.writing .internal-link::after, .writing.writing .cm-underline::after, .writing.writing .external-link::after { + font-family: var(--its); + font-size: calc(var(--font-text-size) - 2px); + font-style: normal !important; + font-weight: 100 !important; + vertical-align: 2px; + color: var(--accent); + opacity: unset; + margin-right: -8px; +} +.writing.writing .internal-link::after, .writing.writing span:not(.cm-link) .cm-underline::after { + content: "\e819"; +} +.writing.writing .external-link::after { + content: "\e818"; +} +.writing.writing, .writing.writing.hcl, .writing.writing .hcl { + --header-border-line-height: 0; + --h1-border-line-height: var(--header-border-line-height); + --h2-border-line-height: var(--header-border-line-height); + --h3-border-line-height: var(--header-border-line-height); + --h4-border-line-height: var(--header-border-line-height); + --h5-border-line-height: var(--header-border-line-height); + --h6-border-line-height: var(--header-border-line-height); +} +.writing.writing .markdown-preview-section, .writing.writing .cm-s-obsidian, .writing.writing.markdown-preview-view, .writing.writing.cm-s-obsidian { + text-align: justify; +} +.writing.writing .markdown-preview-view pre, .writing.writing.markdown-preview-view pre, .writing.writing .HyperMD-codeblock:not(.cm-formatting-code-block) { + border-left: 5px solid var(--code-bg); + border-right: 5px solid var(--code-text); + filter: saturate(70%); +} +.writing.writing .footnote-link, .writing.writing .cm-inline-footnote, .writing.writing .cm-inline-footnote-end, .writing.writing .cm-inline-footnote-end + .cm-link { + color: var(--inactive); +} +.writing.writing .footnote-link:hover, .writing.writing .cm-inline-footnote:hover, .writing.writing .cm-inline-footnote-end:hover, .writing.writing .cm-inline-footnote-end + .cm-link:hover { + background-color: var(--link-background-hover); +} + +.writing-document:not(.is-mobile), +.writing-document.is-tablet.is-tablet { + /* Fix embeds */ + /* Embed */ + /* .markdown-preview-section { min-height: 100% !important; } */ +} +.writing-document:not(.is-mobile) .markdown-source-view.mod-cm6 .cm-scroller, +.writing-document.is-tablet.is-tablet .markdown-source-view.mod-cm6 .cm-scroller { + padding: 0; +} +.writing-document:not(.is-mobile) .is-live-preview .HyperMD-header::before, +.writing-document.is-tablet.is-tablet .is-live-preview .HyperMD-header::before { + margin-left: -10px; + margin-right: 15px; +} +.writing-document:not(.is-mobile) div:not(.workspace-tabs):not(.markdown-embed-content) > :is(.markdown-preview-view, .cm-editor):not(.kanban-plugin__markdown-preview-view):not(.BC-Matrix):not(.community-plugin-readme), +.writing-document.is-tablet.is-tablet div:not(.workspace-tabs):not(.markdown-embed-content) > :is(.markdown-preview-view, .cm-editor):not(.kanban-plugin__markdown-preview-view):not(.BC-Matrix):not(.community-plugin-readme) { + background: var(--td); + padding: 0; +} +.writing-document:not(.is-mobile) :not(.markdown-embed-content) .markdown-preview-section:not(.kanban-plugin__markdown-preview-view), +.writing-document:not(.is-mobile) .view-content .cm-s-obsidian > .cm-editor .cm-contentContainer, +.writing-document.is-tablet.is-tablet :not(.markdown-embed-content) .markdown-preview-section:not(.kanban-plugin__markdown-preview-view), +.writing-document.is-tablet.is-tablet .view-content .cm-s-obsidian > .cm-editor .cm-contentContainer { + --padding: 10px; + background: var(--note, var(--background-primary)); + box-shadow: 0 0 20px var(--outline, var(--background-box-shadow)); + max-width: calc(var(--file-line-width) + var(--padding)); + height: auto; + padding: 0 var(--padding); + border-radius: var(--radius-l); +} +.writing-document:not(.is-mobile) .markdown-embed.markdown-embed.markdown-embed .markdown-preview-section, +.writing-document.is-tablet.is-tablet .markdown-embed.markdown-embed.markdown-embed .markdown-preview-section { + padding: unset; + box-shadow: unset; +} + +.paper { + --paper-edges-note: 0 0 60px var(--outline) inset; + --paper-edges-ui: 0 0 25px var(--outline) inset; + --file-header-background: transparent; + --pane-background: transparent; +} +.paper, .paper .modal.mod-settings .vertical-tab-content-container, .paper .workspace-split:not(.mod-left-split, .mod-right-split) .workspace-leaf-content[data-type=markdown], .paper .workspace-leaf-content[data-type=graph] > canvas, .paper .workspace-drawer-inner, .paper .modal, .paper .community-plugin-search, .paper .prompt, .paper .kanban-plugin__lane.kanban-plugin__lane { + box-shadow: var(--paper-edges-note); +} +.paper .workspace-tabs, .paper .modal.mod-settings .vertical-tab-header { + box-shadow: var(--paper-edges-ui); +} +.paper .CodeMirror-gutter.CodeMirror-linenumbers, .paper .CodeMirror-gutter.CodeMirror-foldgutter, .paper .markdown-source-view.mod-cm6 .cm-gutters, .paper .workspace-leaf:not(.mod-active) .workspace-tab-header-container, .paper .workspace-tabs .workspace-leaf, .paper .workspace-tab-header-container, .paper .horizontal-tab-content, .paper .vertical-tab-content, .paper .horizontal-tab-nav-item:not(.is-active), .paper .vertical-tab-nav-item:not(.is-active) { + background: transparent; +} + +.wide, +.note-width-wide { + --file-line-width: 100%; +} + +.readable, +.note-width-readable { + --file-line-width: 700px; + --page-width: 700px; +} +.readable.markdown-source-view.mod-cm6 .cm-sizer, .readable .markdown-source-view.mod-cm6 .cm-scroller .cm-sizer, .readable .markdown-preview-sizer, +.note-width-readable.markdown-source-view.mod-cm6 .cm-sizer, +.note-width-readable .markdown-source-view.mod-cm6 .cm-scroller .cm-sizer, +.note-width-readable .markdown-preview-sizer { + max-width: var(--file-line-width); + margin: auto; +} + +.hide-outline-symbol { + --outline-symbol: ""; + --outline-arrow-visibility: visible; + --outline-symbol-padding-right: 0; + --outline-arrow-margin: 0; +} + +.titlebar-colors.titlebar-colors.titlebar-colors { + --titlebar-text-color: var(--inactive); + --titlebar-text-color-focused: var(--text-dl); + --titlebar-background: var(--dark-accent); + --titlebar-background-focused: var(--dark-accent); + --titlebar-bubble-colors: var(--outline); + --sidebar-tab-background-color: var(--note); + --tab-text-color: var(--text-dl); + --tab-text-color-focused: var(--text-dl); + --tab-container-background: var(--dark-accent); + --tab-font-weight: 500; + --tab-font-weight-active: 900; + --tab-outline-width: 0; + --tab-divider-color: var(--td); +} +.titlebar-colors.titlebar-colors.titlebar-colors .workspace-tab-header.is-active { + --sidebar-tab-color-hover: var(--text); + --sidebar-icon-color: var(--text); +} +.titlebar-colors.titlebar-colors.titlebar-colors.theme-light { + --sidebar-icon-color-active: var(--text); +} +.titlebar-colors.titlebar-colors.titlebar-colors .sidebar-toggle-button, .titlebar-colors.titlebar-colors.titlebar-colors .workspace-tabs.mod-top .workspace-tab-header-container, .titlebar-colors.titlebar-colors.titlebar-colors .workspace-tab-header-container .workspace-tab-header-inner-icon { + --sidebar-icon-color: var(--text-on-accent); + --icon-color: var(--text-dl); +} +.titlebar-colors.titlebar-colors.titlebar-colors :is(.mod-left-split, .mod-right-split) .workspace-tab-header.is-active, .titlebar-colors.titlebar-colors.titlebar-colors :is(.mod-left-split, .mod-right-split) .workspace-tab-header .workspace-tab-header-inner-icon { + --tab-text-color-focused-active-current: var(--text); +} + +.titlebar-bubbles.titlebar-bubbles.titlebar-bubbles { + --tab-outline-width: 0; + --titlebar-bubble-colors: #0b0f13; + --titlebar-bubble-colors-inactive: #0b0f1350; + --tab-text-color-focused-active: var(--text); + --tab-divider-color: transparent; +} + +.titlebar-bubbles :is(.mod-left-split, .mod-right-split, .mod-root) { + --tab-radius: var(--radius-m); + --tab-radius-active: var(--radius-m); + --tab-text-padding: 3px 5px; + --tab-text-padding-inner: 1px 3px; + --tab-gap: 0 10px; + --tab-text-color-focused-active-current: var(--text); + --tab-curve: 0; +} +.titlebar-bubbles :is(.mod-left-split, .mod-right-split, .mod-root) .workspace-tab-header-container-inner, .titlebar-bubbles :is(.mod-left-split, .mod-right-split, .mod-root) .workspace-tab-header-container { + align-items: center; + align-content: center; + gap: var(--size-2-3); +} +.titlebar-bubbles :is(.mod-left-split, .mod-right-split, .mod-root) .workspace-tab-header:not(.is-active) .workspace-tab-header-inner, .titlebar-bubbles :is(.mod-left-split, .mod-right-split, .mod-root) .workspace-tab-header-container-inner, .titlebar-bubbles :is(.mod-left-split, .mod-right-split, .mod-root) .workspace-tab-header-inner { + margin: unset; + padding: var(--tab-text-padding); +} +.titlebar-bubbles :is(.mod-left-split, .mod-right-split, .mod-root) .workspace-tab-header { + box-shadow: 2px 2px 0 var(--titlebar-bubble-colors); + border: 2px solid var(--titlebar-bubble-colors); + padding: var(--tab-text-padding-inner); + --sidebar-tab-background-color-hover: transparent; +} +.titlebar-bubbles :is(.mod-left-split, .mod-right-split, .mod-root) .workspace-tab-header:not(.is-active) { + --titlebar-bubble-colors: var(--titlebar-bubble-colors-inactive); +} +.titlebar-bubbles :is(.mod-left-split, .mod-right-split, .mod-root) .mod-stacked .workspace-tab-header { + border: none; +} +.titlebar-bubbles :is(.mod-left-split, .mod-right-split, .mod-root) .workspace-tab-header:not(.is-active):hover { + background-color: var(--titlebar-bubble-colors-inactive); +} +.titlebar-bubbles :is(.mod-left-split, .mod-right-split, .mod-root) .workspace-tab-header:not(.is-active):hover .workspace-tab-header-inner { + background-color: unset; +} +.titlebar-bubbles :is(.mod-left-split, .mod-right-split, .mod-root) .workspace-tab-header-new-tab { + padding: 0; +} +.titlebar-bubbles :is(.mod-left-split, .mod-right-split, .mod-root) .workspace-tab:not(.mod-stacked) .workspace-tab-header:not(.is-active) .workspace-tab-header-inner { + color: var(--text-on-accent); +} + +.tab-auto { + --tab-width: auto; + --tab-max-width: 100%; +} +.tab-auto .workspace .mod-root .workspace-tab-header { + flex: unset; +} + +.tab-wide { + --tab-width: auto; + --tab-max-width: 100%; +} +.tab-wide .workspace .mod-root .workspace-tab-header, .tab-wide .workspace-tab-header-container-inner { + flex: auto; +} +.tab-wide .workspace-tab-header-spacer { + display: none; +} + +.tag-notion.tag-notion { + --tag-radius: 5px; + --tag-border-radius: 5px; +} + +.tag-bubble.tag-bubble { + --tag-radius: 25px; + --tag-border-radius: 25px; +} + +.tag-outline { + --tag-border-width: 2px; +} +.tag-outline.tag-outline { + --tag-background: transparent; + --tag-color: var(--tag-text); +} + +.tag-text.tag-text { + --tag-background: transparent; + --tag-color: var(--lite-accent); + --tag-padding: 0; + --tag-padding-x: 0; + --tag-padding-y: 0; + --font-size: var(--font-size); +} + +/*Spaced Lists*/ +.spaced-lists li, +.s-li li { + margin-top: 10px; +} + +/*Live Preview Indent Style*/ +.alternate-indent .is-live-preview { + --indentation-guide-color: transparent; + --indentation-guide-color-active: transparent; + --list-color-1: var(--indentation-guide-color); + --list-color-2: var(--indentation-guide-color); + --list-color-3: var(--indentation-guide-color); + --list-color-4: var(--indentation-guide-color); + --list-color-5: var(--indentation-guide-color); + --list-color-6: var(--indentation-guide-color); +} +.alternate-indent .is-live-preview .cm-hmd-list-indent { + margin-right: 5px; + margin-left: -2px; +} +.alternate-indent .is-live-preview .HyperMD-list-line-2 .cm-hmd-list-indent { + background-color: var(--theme-rainbow-1); +} +.alternate-indent .is-live-preview .HyperMD-list-line-3 .cm-hmd-list-indent { + background-color: var(--theme-rainbow-2); +} +.alternate-indent .is-live-preview .HyperMD-list-line-4 .cm-hmd-list-indent { + background-color: var(--theme-rainbow-3); +} +.alternate-indent .is-live-preview .HyperMD-list-line-5 .cm-hmd-list-indent { + background-color: var(--theme-rainbow-4); +} +.alternate-indent .is-live-preview .HyperMD-list-line-6 .cm-hmd-list-indent { + background-color: var(--theme-rainbow-5); +} +.alternate-indent .is-live-preview .HyperMD-list-line-7 .cm-hmd-list-indent { + background-color: var(--theme-rainbow-6); +} +.alternate-indent .is-live-preview .HyperMD-list-line-8 .cm-hmd-list-indent { + background-color: var(--rainbow-1); +} +.alternate-indent .is-live-preview .HyperMD-list-line-9 .cm-hmd-list-indent { + background-color: var(--rainbow-2); +} +.alternate-indent .is-live-preview .HyperMD-list-line-10 .cm-hmd-list-indent { + background-color: var(--rainbow-3); +} +.alternate-indent .is-live-preview .HyperMD-list-line-11 .cm-hmd-list-indent { + background-color: var(--rainbow-4); +} +.alternate-indent .is-live-preview .HyperMD-list-line-12 .cm-hmd-list-indent { + background-color: var(--rainbow-5); +} +.alternate-indent .is-live-preview .HyperMD-list-line-13 .cm-hmd-list-indent { + background-color: var(--rainbow-6); +} +.alternate-indent .is-live-preview .HyperMD-list-line-2, .alternate-indent .is-live-preview .HyperMD-list-line-3, .alternate-indent .is-live-preview .HyperMD-list-line-4, .alternate-indent .is-live-preview .HyperMD-list-line-5, .alternate-indent .is-live-preview .HyperMD-list-line-6, .alternate-indent .is-live-preview .HyperMD-list-line-7, .alternate-indent .is-live-preview .HyperMD-list-line-8, .alternate-indent .is-live-preview .HyperMD-list-line-9, .alternate-indent .is-live-preview .HyperMD-list-line-10, .alternate-indent .is-live-preview .HyperMD-list-line-11, .alternate-indent .is-live-preview .HyperMD-list-line-12, .alternate-indent .is-live-preview .HyperMD-list-line-13 { + --collapse-icon-color: var(--text-dl); + --collapse-icon-color-collapsed: var(--text-dl); +} + +.list-lines-color.list-lines-color { + --list-color-1: var(--rainbow-1); + --list-color-2: var(--rainbow-2); + --list-color-3: var(--rainbow-3); + --list-color-4: var(--rainbow-4); + --list-color-5: var(--rainbow-5); + --list-color-6: var(--rainbow-6); +} + +.list-bullet-color.list-bullet-color { + --list-bullet-color-1: var(--rainbow-1); + --list-bullet-color-2: var(--rainbow-2); + --list-bullet-color-3: var(--rainbow-3); + --list-bullet-color-4: var(--rainbow-4); + --list-bullet-color-5: var(--rainbow-5); + --list-bullet-color-6: var(--rainbow-6); +} +.list-bullet-color.list-bullet-color :is(ul, ol) li::before, .list-bullet-color.list-bullet-color .HyperMD-list-line-1 .cm-formatting-list::before { + color: var(--list-bullet-color-1); +} +.list-bullet-color.list-bullet-color :is(ul ul, ol ol) li::before, .list-bullet-color.list-bullet-color .HyperMD-list-line-2 .cm-formatting-list::before { + color: var(--list-bullet-color-2); +} +.list-bullet-color.list-bullet-color :is(ul ul ul, ol ol ol) li::before, .list-bullet-color.list-bullet-color .HyperMD-list-line-3 .cm-formatting-list::before { + color: var(--list-bullet-color-3); +} +.list-bullet-color.list-bullet-color :is(ul ul ul ul, ol ol ol ol) li::before, .list-bullet-color.list-bullet-color .HyperMD-list-line-4 .cm-formatting-list::before { + color: var(--list-bullet-color-4); +} +.list-bullet-color.list-bullet-color :is(ul ul ul ul ul, ol ol ol ol ol) li::before, .list-bullet-color.list-bullet-color .HyperMD-list-line-5 .cm-formatting-list::before { + color: var(--list-bullet-color-5); +} +.list-bullet-color.list-bullet-color :is(ul ul ul ul ul ul, ol ol ol ol ol ol) li::before, .list-bullet-color.list-bullet-color .HyperMD-list-line-6 .cm-formatting-list::before { + color: var(--list-bullet-color-6); +} +.list-bullet-color.list-bullet-color :is(ul, ol) li .task-list-item-checkbox, .list-bullet-color.list-bullet-color .HyperMD-list-line-1 .task-list-item-checkbox { + --checkbox-border-color: var(--rainbow-1); +} +.list-bullet-color.list-bullet-color :is(ul ul, ol ol) li .task-list-item-checkbox, .list-bullet-color.list-bullet-color .HyperMD-list-line-2 .task-list-item-checkbox { + --checkbox-border-color: var(--rainbow-2); +} +.list-bullet-color.list-bullet-color :is(ul ul ul, ol ol ol) li .task-list-item-checkbox, .list-bullet-color.list-bullet-color .HyperMD-list-line-3 .task-list-item-checkbox { + --checkbox-border-color: var(--rainbow-3); +} +.list-bullet-color.list-bullet-color :is(ul ul ul ul, ol ol ol ol) li .task-list-item-checkbox, .list-bullet-color.list-bullet-color .HyperMD-list-line-4 .task-list-item-checkbox { + --checkbox-border-color: var(--rainbow-4); +} +.list-bullet-color.list-bullet-color :is(ul ul ul ul ul, ol ol ol ol ol) li .task-list-item-checkbox, .list-bullet-color.list-bullet-color .HyperMD-list-line-5 .task-list-item-checkbox { + --checkbox-border-color: var(--rainbow-5); +} +.list-bullet-color.list-bullet-color :is(ul ul ul ul ul ul, ol ol ol ol ol ol) li .task-list-item-checkbox, .list-bullet-color.list-bullet-color .HyperMD-list-line-6 .task-list-item-checkbox { + --checkbox-border-color: var(--rainbow-6); +} +.list-bullet-color.list-bullet-color :is(ul ul ul ul ul ul ul, ol ol ol ol ol ol ol) li .task-list-item-checkbox, .list-bullet-color.list-bullet-color .HyperMD-list-line-7 .task-list-item-checkbox { + --checkbox-border-color: var(--accent); +} + +.list-default-bullet { + --list-marker-color: var(--text-faint); + --list-marker-color-hover: var(--text-muted); + --list-marker-color-collapsed: var(--inactive); + --list-bullet-border: none; + --list-bullet-radius: 50%; + --list-bullet-size: 0.4em; + --list-bullet-transform: none; +} + +.list-neon { + --neon: 0 0 5px; + --neon-wide: -2px 0 10px; + --indentation-guide-color-active: var(--text-dl); + --list-color-1: var(--rainbow-1); + --list-color-2: var(--rainbow-2); + --list-color-3: var(--rainbow-3); + --list-color-4: var(--rainbow-4); + --list-color-5: var(--rainbow-5); + --list-color-6: var(--rainbow-6); + --list-shadow-color-1: var(--neon) var(--rainbow-1), var(--neon-wide) var(--rainbow-1); + --list-shadow-color-2: var(--neon) var(--rainbow-2), var(--neon-wide) var(--rainbow-2); + --list-shadow-color-3: var(--neon) var(--rainbow-3), var(--neon-wide) var(--rainbow-3); + --list-shadow-color-4: var(--neon) var(--rainbow-4), var(--neon-wide) var(--rainbow-4); + --list-shadow-color-5: var(--neon) var(--rainbow-5), var(--neon-wide) var(--rainbow-5); + --list-shadow-color-6: var(--neon) var(--rainbow-6), var(--neon-wide) var(--rainbow-6); +} +.list-neon .cm-hmd-list-indent .cm-indent::before { + width: 0; +} +.list-neon :is(ul ul, ol ol)::before, .list-neon .cm-indent::before { + box-shadow: var(--list-shadow-color-1); +} +.list-neon :is(ul ul ul, ol ol ol)::before, .list-neon .cm-indent:nth-child(2)::before { + box-shadow: var(--list-shadow-color-2); +} +.list-neon :is(ul ul ul ul, ol ol ol ol)::before, .list-neon .cm-indent:nth-child(3)::before { + box-shadow: var(--list-shadow-color-3); +} +.list-neon :is(ul ul ul ul ul, ol ol ol ol ol)::before, .list-neon .cm-indent:nth-child(4)::before { + box-shadow: var(--list-shadow-color-4); +} +.list-neon :is(ul ul ul ul ul ul, ol ol ol ol ol ol)::before, .list-neon .cm-indent:nth-child(5)::before { + box-shadow: var(--list-shadow-color-5); +} +.list-neon :is(ul ul ul ul ul ul ul, ol ol ol ol ol ol ol)::before, .list-neon .cm-indent:nth-child(6)::before { + box-shadow: var(--list-shadow-color-6); +} + +.list-bullet-side-lines .markdown-rendered { + --indentation-guide-color: transparent; + --list-color-1: var(--indentation-guide-color); + --list-color-2: var(--indentation-guide-color); + --list-color-3: var(--indentation-guide-color); + --list-color-4: var(--indentation-guide-color); + --list-color-5: var(--indentation-guide-color); + --list-color-6: var(--indentation-guide-color); +} +.list-bullet-side-lines :is(ul, ol) li { + border-left: var(--indentation-guide-width) solid var(--accent); + padding-left: 3px; + --list-numbered-color: var(--headers); +} +.list-bullet-side-lines :is(ul, ol) > li:nth-child(even) { + border-left-color: var(--accent2); + --list-numbered-color: var(--accent2); +} +.list-bullet-side-lines :is(ul, ol) > li:nth-child(even)::before { + --list-marker-color: var(--accent2); +} + +/*--Kanban--*/ +/*Credit: https://github.com/Braweria/Spectrum*/ +.kanban { + --list-indent: -15px; +} + +/*Hide Bullet*/ +.kanban ul { + list-style: none; +} + +.kanban ul li::before { + content: ""; + margin: 0px; + padding: 0; + float: unset; +} + +.kanban.kanban li > ul::before { + left: 0; +} + +.kanban :is(ul, ol) { + display: flex; + flex-direction: row; + border-radius: 0; + flex-wrap: wrap; +} +.kanban :is(ul, ol) li { + flex: 1 1 25%; + margin-left: 0px; + margin-right: 10px; + border: 0; +} + +.kanban ol li { + margin-left: 15px; +} + +.kanban ul ul, +.kanban ol ol { + display: flex; + flex-direction: column; + justify-content: center; + margin-right: 20px; + background: var(--td); +} +.kanban ul ul > li, +.kanban ol ol > li { + margin-left: 20px; + margin-right: 0; + width: 100%; +} + +.kanban.markdown-rendered .list-collapse-indicator { + margin-left: -15px; + padding-right: 0px; +} + +.kanban.markdown-rendered ol .list-collapse-indicator { + margin-left: -30px; +} + +.kanban ul > li.task-list-item.task-list-item .task-list-item-checkbox { + margin-inline-start: calc(var(--checkbox-size) * -0.45); +} +.kanban ul > li.task-list-item.task-list-item .list-collapse-indicator { + margin-left: -18px; +} + +.kanban .markdown-rendered ul.has-list-bullet li p:first-of-type { + margin-block-start: 0; +} + +/*Remove Note Titlebar Gradient*/ +.file-header-gradient { + --file-header-background: linear-gradient(to right, var(--file-header-left-color), var(--file-header-right-color)); +} + +body { + --note-title-border-color: var(--headers); +} + +.note-title-underline.note-title-underline .workspace-split.mod-root > .workspace-leaf:first-of-type:last-of-type .view-header, .note-title-underline.note-title-underline .workspace-leaf-content .view-header { + border-bottom: 4px solid transparent; +} +.note-title-underline.note-title-underline .workspace-split.mod-root > .workspace-leaf:first-of-type:last-of-type .view-header, .note-title-underline.note-title-underline .workspace-leaf.mod-active .view-header { + border-bottom-color: var(--note-title-border-color); +} +.note-title-underline.note-title-underline .workspace .mod-root .workspace-tabs.mod-stacked .workspace-tab-container .workspace-tab-header { + border-right: 4px solid var(--note-title-border-color); +} + +.note-title-overline.note-title-overline .workspace-split.mod-root > .workspace-leaf:first-of-type:last-of-type .view-header, .note-title-overline.note-title-overline .workspace-leaf-content .view-header { + border-top: 4px solid transparent; +} +.note-title-overline.note-title-overline .workspace-split.mod-root > .workspace-leaf:first-of-type:last-of-type .view-header, .note-title-overline.note-title-overline .workspace-leaf.mod-active .view-header { + border-top-color: var(--note-title-border-color); +} +.note-title-overline.note-title-overline .workspace .mod-root .workspace-tabs.mod-stacked .workspace-tab-container .workspace-tab-header { + border-left: 4px solid var(--note-title-border-color); +} + +.sidebar-tabs-wide :is(.mod-left-split, .mod-right-split) .workspace-tab-header-container { + padding-right: 0; +} +.sidebar-tabs-wide :is(.mod-left-split, .mod-right-split) .workspace-tab-header-container-inner { + flex: 1 0 auto; +} +.sidebar-tabs-wide :is(.mod-left-split, .mod-right-split) .workspace-tab-header { + width: 100%; +} +.sidebar-tabs-wide :is(.mod-left-split, .mod-right-split) .workspace-tab-header-inner { + justify-content: center; +} +.sidebar-tabs-wide :is(.mod-left-split, .mod-right-split) .workspace-tab-header-spacer { + display: none; +} + +.sidebar-tabs-underline :is(.mod-left-split.mod-left-split, .mod-right-split.mod-right-split), +.sidebar-tabs-overline :is(.mod-left-split.mod-left-split, .mod-right-split.mod-right-split) { + --tab-outline-width: 0; + --sidebar-icon-color: var(--inactive); + --sidebar-icon-color-active: var(--headers); + --icon-color-focused: var(--text); + --sidebar-tab-border-color: var(--inactive); + --sidebar-tab-border-color-active: var(--headers); + --sidebar-tab-border-width: 4px; + --sidebar-tab-background-color: var(--note); +} +.sidebar-tabs-underline :is(.mod-left-split.mod-left-split, .mod-right-split.mod-right-split) .is-active.is-active, +.sidebar-tabs-overline :is(.mod-left-split.mod-left-split, .mod-right-split.mod-right-split) .is-active.is-active { + --sidebar-tab-border-color: var(--sidebar-icon-color-active); + --tab-text-color-focused-active: var(--text); + --tab-text-color-focused-active-current: var(--text); +} +.sidebar-tabs-underline :is(.mod-left-split.mod-left-split, .mod-right-split.mod-right-split) .is-active.is-active:hover, +.sidebar-tabs-overline :is(.mod-left-split.mod-left-split, .mod-right-split.mod-right-split) .is-active.is-active:hover { + --sidebar-icon-color-active: var(--text); + --sidebar-tab-border-color: var(--sidebar-tab-border-color-active); + --sidebar-tab-background-color-hover: var(--accent); +} + +.sidebar-tabs-overline :is(.mod-left-split, .mod-right-split) .workspace-tab-header-inner { + border-bottom: unset; + border-top: var(--sidebar-tab-border-width) solid var(--sidebar-tab-border-color); +} + +.sidebar-tabs-tabular :is(.mod-left-split, .mod-right-split, .workspace-ribbon.mod-left) { + --sidebar-tab-background-color: var(--note); + --sidebar-tab-border-width: 0; + --sidebar-tab-padding: 0 var(--size-4-4); + --sidebar-icon-color-active: var(--lite-accent); + --sidebar-icon-color: var(--soft-text); + --tab-outline-width: 0; + --tab-container-background: var(--outer-bar); + --titlebar-background: var(--outer-bar); +} + +.navbar-bottom .nav-header { + display: flex; + position: absolute; + bottom: 5px; + z-index: 2; + width: 100%; + justify-content: center; +} +.navbar-bottom .nav-header .nav-buttons-container { + padding: 2px 0; + align-items: center; + background: var(--note); + border: 2px solid var(--outline); + box-shadow: var(--shadow-s); + width: fit-content; +} +.navbar-bottom .workspace-tabs .backlink-pane, +.navbar-bottom .workspace-tabs .search-result-container.mod-global-search, .navbar-bottom .workspace-tabs .nav-header + div:is(.tag-container, .nav-files-container) { + margin-bottom: 60px; + background: var(--side-bar); + box-shadow: 4px 4px 5px var(--outline); + padding-bottom: 20px; + padding-top: 10px; +} +.navbar-bottom .nav-files-container { + background: var(--outer-bar); +} +.navbar-bottom .nav-header ~ .search-input-container { + margin: 15px auto; +} +.navbar-bottom .mod-global-search { + padding-top: 0; +} + +.headings-center, +.hc { + --header-text-align: center; + --h1-text-align: var(--header-text-align); + --h2-text-align: var(--header-text-align); + --h3-text-align: var(--header-text-align); + --h4-text-align: var(--header-text-align); + --h5-text-align: var(--header-text-align); + --h6-text-align: var(--header-text-align); + --header-border-line-align: auto; +} + +.headings-left { + --header-text-align: left; + --h1-text-align: var(--header-text-align); + --h2-text-align: var(--header-text-align); + --h3-text-align: var(--header-text-align); + --h4-text-align: var(--header-text-align); + --h5-text-align: var(--header-text-align); + --h6-text-align: var(--header-text-align); +} + +.headings-right { + --header-text-align: right; + --h1-text-align: var(--header-text-align); + --h2-text-align: var(--header-text-align); + --h3-text-align: var(--header-text-align); + --h4-text-align: var(--header-text-align); + --h5-text-align: var(--header-text-align); + --h6-text-align: var(--header-text-align); + --header-border-line-align: auto 0 auto auto; +} + +.hcl, +.headings-center-lines { + --header-text-align: center; + --h1-text-align: var(--header-text-align); + --h2-text-align: var(--header-text-align); + --h3-text-align: var(--header-text-align); + --h4-text-align: var(--header-text-align); + --h5-text-align: var(--header-text-align); + --h6-text-align: var(--header-text-align); + --h1-border-line-height: 6px; + --h2-border-line-height: 5px; + --h3-border-line-height: 4px; + --h4-border-line-height: 3px; + --h5-border-line-height: 3px; + --h6-border-line-height: 3px; + --header-border-line-left: block; +} +.hcl .HyperMD-header.cm-line, +.hcl :is(h1, +h2, +h3, +h4, +h5, +h6), +.headings-center-lines .HyperMD-header.cm-line, +.headings-center-lines :is(h1, +h2, +h3, +h4, +h5, +h6) { + display: flex; + width: 100%; + align-items: center; +} +.hcl .HyperMD-header.cm-line:not(.HyperMD-header) > :not(.collapse-indicator), .hcl .HyperMD-header.cm-line > :not(.collapse-indicator):nth-child(2):not(:last-child):not(:first-child), +.hcl :is(h1, +h2, +h3, +h4, +h5, +h6):not(.HyperMD-header) > :not(.collapse-indicator), +.hcl :is(h1, +h2, +h3, +h4, +h5, +h6) > :not(.collapse-indicator):nth-child(2):not(:last-child):not(:first-child), +.headings-center-lines .HyperMD-header.cm-line:not(.HyperMD-header) > :not(.collapse-indicator), +.headings-center-lines .HyperMD-header.cm-line > :not(.collapse-indicator):nth-child(2):not(:last-child):not(:first-child), +.headings-center-lines :is(h1, +h2, +h3, +h4, +h5, +h6):not(.HyperMD-header) > :not(.collapse-indicator), +.headings-center-lines :is(h1, +h2, +h3, +h4, +h5, +h6) > :not(.collapse-indicator):nth-child(2):not(:last-child):not(:first-child) { + margin-left: 10px; + margin-right: 10px; +} +.hcl .HyperMD-header.cm-line:before, .hcl .HyperMD-header.cm-line:after, +.hcl :is(h1, +h2, +h3, +h4, +h5, +h6):before, +.hcl :is(h1, +h2, +h3, +h4, +h5, +h6):after, +.headings-center-lines .HyperMD-header.cm-line:before, +.headings-center-lines .HyperMD-header.cm-line:after, +.headings-center-lines :is(h1, +h2, +h3, +h4, +h5, +h6):before, +.headings-center-lines :is(h1, +h2, +h3, +h4, +h5, +h6):after { + flex: 1; +} +.hcl .HyperMD-header.cm-line:before, +.hcl :is(h1, +h2, +h3, +h4, +h5, +h6):before, +.headings-center-lines .HyperMD-header.cm-line:before, +.headings-center-lines :is(h1, +h2, +h3, +h4, +h5, +h6):before { + margin-right: 0.3em; +} +.hcl .HyperMD-header.cm-line:after, +.hcl :is(h1, +h2, +h3, +h4, +h5, +h6):after, +.headings-center-lines .HyperMD-header.cm-line:after, +.headings-center-lines :is(h1, +h2, +h3, +h4, +h5, +h6):after { + margin-left: 0.3em; +} +.hcl .HyperMD-header.cm-line sup, +.hcl :is(h1, +h2, +h3, +h4, +h5, +h6) sup, +.headings-center-lines .HyperMD-header.cm-line sup, +.headings-center-lines :is(h1, +h2, +h3, +h4, +h5, +h6) sup { + margin-top: -10.5px; +} +.hcl .HyperMD-header.cm-line sub, +.hcl :is(h1, +h2, +h3, +h4, +h5, +h6) sub, +.headings-center-lines .HyperMD-header.cm-line sub, +.headings-center-lines :is(h1, +h2, +h3, +h4, +h5, +h6) sub { + margin-top: 10.5px; +} + +body { + --illusion-header-text: var(--text-dl); + --illusion-h1-background: var(--theme-rainbow-1); + --illusion-h2-background: var(--theme-rainbow-2); + --illusion-h3-background: var(--theme-rainbow-3); + --illusion-h4-background: var(--theme-rainbow-4); + --illusion-h5-background: var(--theme-rainbow-5); + --illusion-h6-background: var(--theme-rainbow-6); + --illusion-border-line-height: 0; + --illusion-box-shadow: var(--shadow-l); + --illusion-header-padding: 5px 25px; + --illusion-header-arrow-icon-size: 13px; + --illusion-header-arrow-color: var(--illusion-header-text); +} + +.illusion.illusion :is(.markdown-preview-view, .is-live-preview) :is(h1, h2, h3, h4, h5, h6)[data-heading], .illusion.illusion :is(.markdown-preview-view, .is-live-preview) :is(.is-live-preview .HyperMD-header), .illusion.illusion:is(.markdown-preview-view, .is-live-preview) :is(h1, h2, h3, h4, h5, h6)[data-heading], .illusion.illusion:is(.markdown-preview-view, .is-live-preview) :is(.is-live-preview .HyperMD-header) { + --h1-background: var(--illusion-h1-background); + --h2-background: var(--illusion-h2-background); + --h3-background: var(--illusion-h3-background); + --h4-background: var(--illusion-h4-background); + --h5-background: var(--illusion-h5-background); + --h6-background: var(--illusion-h6-background); + --header-border-line-height: var(--illusion-border-line-height); + --h1-border-line-height: var(--illusion-border-line-height); + --h2-border-line-height: var(--illusion-border-line-height); + --h3-border-line-height: var(--illusion-border-line-height); + --h4-border-line-height: var(--illusion-border-line-height); + --h5-border-line-height: var(--illusion-border-line-height); + --h6-border-line-height: var(--illusion-border-line-height); + --headers: var(--illusion-header-text); + --h1-color: var(--illusion-header-text); + --h2-color: var(--illusion-header-text); + --h3-color: var(--illusion-header-text); + --h4-color: var(--illusion-header-text); + --h5-color: var(--illusion-header-text); + --h6-color: var(--illusion-header-text); + --heading-formatting: var(--illusion-header-text); + --header-shadow: var(--illusion-box-shadow); + --h1-shadow: var(--illusion-box-shadow); + --h2-shadow: var(--illusion-box-shadow); + --h3-shadow: var(--illusion-box-shadow); + --h4-shadow: var(--illusion-box-shadow); + --h5-shadow: var(--illusion-box-shadow); + --h6-shadow: var(--illusion-box-shadow); + --header-padding: var(--illusion-header-padding); + --h1-padding: var(--illusion-header-padding); + --h2-padding: var(--illusion-header-padding); + --h3-padding: var(--illusion-header-padding); + --h4-padding: var(--illusion-header-padding); + --h5-padding: var(--illusion-header-padding); + --h6-padding: var(--illusion-header-padding); + --collapse-icon-color: var(--headers); + --collapse-icon-color-collapsed: var(--text-dl); + --header-arrow-icon-color: var(--text-dl); + --header-arrow-icon-size: var(--illusion-header-arrow-icon-size); + --header-arrow-color: var(--illusion-header-text); + display: flow-root; +} +.illusion.illusion :is(.markdown-preview-view, .is-live-preview) :is(h1, h2, h3, h4, h5, h6)[data-heading] [class*=cm-formatting], .illusion.illusion :is(.markdown-preview-view, .is-live-preview) :is(h1, h2, h3, h4, h5, h6)[data-heading] .cm-foldPlaceholder, .illusion.illusion :is(.markdown-preview-view, .is-live-preview) :is(.is-live-preview .HyperMD-header) [class*=cm-formatting], .illusion.illusion :is(.markdown-preview-view, .is-live-preview) :is(.is-live-preview .HyperMD-header) .cm-foldPlaceholder, .illusion.illusion:is(.markdown-preview-view, .is-live-preview) :is(h1, h2, h3, h4, h5, h6)[data-heading] [class*=cm-formatting], .illusion.illusion:is(.markdown-preview-view, .is-live-preview) :is(h1, h2, h3, h4, h5, h6)[data-heading] .cm-foldPlaceholder, .illusion.illusion:is(.markdown-preview-view, .is-live-preview) :is(.is-live-preview .HyperMD-header) [class*=cm-formatting], .illusion.illusion:is(.markdown-preview-view, .is-live-preview) :is(.is-live-preview .HyperMD-header) .cm-foldPlaceholder { + color: var(--illusion-header-text); +} + +.illusion-h1 :is(.markdown-preview-view, .is-live-preview) h1[data-heading], .illusion-h1 :is(.markdown-preview-view, .is-live-preview) .HyperMD-header-1, .illusion-h1:is(.markdown-preview-view, .is-live-preview) h1[data-heading], .illusion-h1:is(.markdown-preview-view, .is-live-preview) .HyperMD-header-1 { + --h1-background: var(--illusion-h1-background); + --h1-color: var(--illusion-header-text); + --h1-padding: var(--illusion-header-padding); + --h1-border-line-height: var(--illusion-border-line-height); + --h1-shadow: var(--illusion-box-shadow); + --header-arrow-icon-size: var(--illusion-header-arrow-icon-size); + --header-arrow-icon-color: var(--illusion-header-text); + --collapse-icon-color-collapsed: var(--accent-text); +} + +.illusion-h2 :is(.markdown-preview-view, .is-live-preview) h2[data-heading], .illusion-h2 :is(.markdown-preview-view, .is-live-preview) .HyperMD-header-2, .illusion-h2:is(.markdown-preview-view, .is-live-preview) h2[data-heading], .illusion-h2:is(.markdown-preview-view, .is-live-preview) .HyperMD-header-2 { + --h2-background: var(--illusion-h2-background); + --h2-color: var(--illusion-header-text); + --h2-padding: var(--illusion-header-padding); + --h2-border-line-height: var(--illusion-border-line-height); + --h2-shadow: var(--illusion-box-shadow); + --header-arrow-icon-size: var(--illusion-header-arrow-icon-size); + --header-arrow-icon-color: var(--illusion-header-text); + --collapse-icon-color-collapsed: var(--accent-text); +} + +.illusion-h3 :is(.markdown-preview-view, .is-live-preview) h3[data-heading], .illusion-h3 :is(.markdown-preview-view, .is-live-preview) .HyperMD-header-3, .illusion-h3:is(.markdown-preview-view, .is-live-preview) h3[data-heading], .illusion-h3:is(.markdown-preview-view, .is-live-preview) .HyperMD-header-3 { + --h3-background: var(--illusion-h3-background); + --h3-color: var(--illusion-header-text); + --h3-padding: var(--illusion-header-padding); + --h3-border-line-height: var(--illusion-border-line-height); + --h3-shadow: var(--illusion-box-shadow); + --header-arrow-icon-size: var(--illusion-header-arrow-icon-size); + --header-arrow-icon-color: var(--illusion-header-text); + --collapse-icon-color-collapsed: var(--accent-text); +} + +.illusion-h4 :is(.markdown-preview-view, .is-live-preview) h4[data-heading], .illusion-h4 :is(.markdown-preview-view, .is-live-preview) .HyperMD-header-4, .illusion-h4:is(.markdown-preview-view, .is-live-preview) h4[data-heading], .illusion-h4:is(.markdown-preview-view, .is-live-preview) .HyperMD-header-4 { + --h4-background: var(--illusion-h4-background); + --h4-color: var(--illusion-header-text); + --h4-padding: var(--illusion-header-padding); + --h4-border-line-height: var(--illusion-border-line-height); + --h4-shadow: var(--illusion-box-shadow); + --header-arrow-icon-size: var(--illusion-header-arrow-icon-size); + --header-arrow-icon-color: var(--illusion-header-text); + --collapse-icon-color-collapsed: var(--accent-text); +} + +.illusion-h5 :is(.markdown-preview-view, .is-live-preview) h5[data-heading], .illusion-h5 :is(.markdown-preview-view, .is-live-preview) .HyperMD-header-5, .illusion-h5:is(.markdown-preview-view, .is-live-preview) h5[data-heading], .illusion-h5:is(.markdown-preview-view, .is-live-preview) .HyperMD-header-5 { + --h5-background: var(--illusion-h5-background); + --h5-color: var(--illusion-header-text); + --h5-padding: var(--illusion-header-padding); + --h5-border-line-height: var(--illusion-border-line-height); + --h6-shadow: var(--illusion-box-shadow); + --header-arrow-icon-size: var(--illusion-header-arrow-icon-size); + --header-arrow-icon-color: var(--illusion-header-text); + --collapse-icon-color-collapsed: var(--accent-text); +} + +.illusion-h6 :is(.markdown-preview-view, .is-live-preview) h6[data-heading], .illusion-h6 :is(.markdown-preview-view, .is-live-preview) .HyperMD-header-6, .illusion-h6:is(.markdown-preview-view, .is-live-preview) h6[data-heading], .illusion-h6:is(.markdown-preview-view, .is-live-preview) .HyperMD-header-6 { + --h6-background: var(--illusion-h6-background); + --h6-color: var(--illusion-header-text); + --h6-padding: var(--illusion-header-padding); + --h6-border-line-height: var(--illusion-border-line-height); + --h6-shadow: var(--illusion-box-shadow); + --header-arrow-icon-size: var(--illusion-header-arrow-icon-size); + --header-arrow-icon-color: var(--illusion-header-text); + --collapse-icon-color-collapsed: var(--accent-text); +} + +.heading-indicator .is-live-preview .HyperMD-header.HyperMD-header.HyperMD-header:hover .cm-header.cm-header:not(.cm-header-6)::before { + margin-top: 0px; +} +.heading-indicator .is-live-preview .HyperMD-header.HyperMD-header-1 { + --indicator-heading-text: "H1"; + --indicator-heading-size: var(--h1-size); +} +.heading-indicator .is-live-preview .HyperMD-header.HyperMD-header-2 { + --indicator-heading-text: "H2"; + --indicator-heading-size: var(--h2-size); +} +.heading-indicator .is-live-preview .HyperMD-header.HyperMD-header-3 { + --indicator-heading-text: "H3"; + --indicator-heading-size: var(--h3-size); +} +.heading-indicator .is-live-preview .HyperMD-header.HyperMD-header-4 { + --indicator-heading-text: "H4"; + --indicator-heading-size: var(--h4-size); +} +.heading-indicator .is-live-preview .HyperMD-header.HyperMD-header-5 { + --indicator-heading-text: "H5"; + --indicator-heading-size: var(--h5-size); +} +.heading-indicator .is-live-preview .HyperMD-header.HyperMD-header-6 { + --indicator-heading-text: "H6"; + --indicator-heading-size: var(--h6-size); +} +.heading-indicator .is-live-preview .HyperMD-header .cm-fold-indicator::before { + float: left; + font-family: var(--font-monospace); + color: var(--footnote); + font-size: 12px; + content: var(--indicator-heading-text); + margin-left: -18px; + margin-top: calc(var(--indicator-heading-size) / 2.5); +} +.heading-indicator .is-live-preview .HyperMD-header:hover .cm-fold-indicator::before { + margin-top: -5px; +} + +.heading-color-override h1 > *, .heading-color-override h2 > *, .heading-color-override h3 > *, .heading-color-override h4 > *, .heading-color-override h5 > *, .heading-color-override h6 > *, .heading-color-override .cm-s-obsidian .cm-header > * { + color: var(--headers); +} + +.h-line.h-line, +.hide-header-underline.hide-header-underline, +:is(.h-line, .hide-header-underline) div { + --header-border-line-height: 0; + --h1-border-line-height: var(--header-border-line-height); + --h2-border-line-height: var(--header-border-line-height); + --h3-border-line-height: var(--header-border-line-height); + --h4-border-line-height: var(--header-border-line-height); + --h5-border-line-height: var(--header-border-line-height); + --h6-border-line-height: var(--header-border-line-height); +} + +.hide-header-underline-1 div { + --h1-border-line-height: 0; +} + +.hide-header-underline-2 div { + --h2-border-line-height: 0; +} + +.hide-header-underline-3 div { + --h3-border-line-height: 0; +} + +.hide-header-underline-4 div { + --h4-border-line-height: 0; +} + +.hide-header-underline-5 div { + --h5-border-line-height: 0; +} + +.hide-header-underline-6 div { + --h6-border-line-height: 0; +} + +.link-caps { + --link-transform: uppercase; +} + +.link-underline.link-underline { + --link-decoration-thickness: 2px; + --link-decoration-color: var(--text); + --link-decoration: underline; + --link-external-decoration: underline; +} + +.link-notion { + --link-border: 1px solid var(--hr); + --link-weight: 600; + --link-decoration: none; + --link-color: var(--text); + --link-external-color: var(--soft-text); +} + +.hr-no-icon.hr-no-icon div, +.hr-tog.hr-tog div { + --hr-icon-symbol: ; + --hr-image: ; +} + +.hr-center-vertically .hr { + --hr-thickness: 0; + --hr-alignment: -50%; +} +.hr-center-vertically .hr hr { + --hr-color: var(--hr); + --hr-thickness: 2px; +} + +.inline-title-style-heading { + --inline-title-size: var(--h1-size); + --inline-title-weight: var(--header-weight); + --inline-title-color: var(--h1-color); +} + +.inline-title-style-text.inline-title-style-text .inline-title { + --inline-title-font: var(--font-default); + --inline-title-size: var(--font-text-size); + --inline-title-weight: var(--font-bold); + --inline-title-color: var(--text-normal); +} + +.inline-title-small { + --inline-title-size: var(--font-ui-small); +} + +.inline-title-medium { + --inline-title-size: var(--font-ui-medium); +} + +.inline-title-font-normal { + --inline-title-size: var(--font-size); +} + +.inline-title-position-left { + --inline-title-position: left; +} + +.inline-title-position-center { + --inline-title-position: center; +} + +.inline-title-position-right { + --inline-title-position: right; +} + +.minimalist-workspace.minimalist-workspace { + --divider-color: transparent; + --scrollbar-thumb-bg: transparent; + --tab-outline-width: 0; + --tab-outline-color: transparent; +} + +.hide-resize-handle { + --divider-color: transparent; +} + +.hide-scrollbar { + --scrollbar-thumb-bg: transparent; +} + +.hide-tab-outline.hide-tab-outline { + --tab-outline-width: 0; + --tab-outline-color: transparent; +} + +.minimalist-workspace .nav-folder.mod-root > .nav-folder-title:not(:hover), +.hide-vault-name .nav-folder.mod-root > .nav-folder-title:not(:hover) { + height: 6px; + opacity: 0; +} + +.minimalist-workspace .view-header:not(:hover):not(:focus-within), +.hide-note-title .view-header:not(:hover):not(:focus-within) { + position: absolute; + width: 100%; + opacity: 0; + z-index: 5; +} + +.minimalist-workspace .view-header:not(:hover):not(:focus-within) .view-header-icon, .minimalist-workspace .view-header:not(:hover):not(:focus-within) .view-header-nav-buttons, .minimalist-workspace .view-header:not(:hover):not(:focus-within) .view-actions, +.hide-note-title-icons .view-header:not(:hover):not(:focus-within) .view-header-icon, +.hide-note-title-icons .view-header:not(:hover):not(:focus-within) .view-header-nav-buttons, +.hide-note-title-icons .view-header:not(:hover):not(:focus-within) .view-actions { + opacity: 0; + width: 0; + padding: 0 5px; +} + +.minimalist-workspace .side-dock-ribbon:is(.mod-left, .mod-right):not(:hover), +.hide-sidebar-ribbon .side-dock-ribbon:is(.mod-left, .mod-right):not(:hover) { + opacity: 0; + flex: 0 0 10px; + padding: 0; +} + +.minimalist-workspace .side-dock-ribbon:is(.mod-left, .mod-right):not(:hover) :is(.side-dock-actions, .side-dock-settings), +.hide-sidebar-ribbon-icons .side-dock-ribbon:is(.mod-left, .mod-right):not(:hover) :is(.side-dock-actions, .side-dock-settings) { + display: none; +} + +.minimalist-workspace .titlebar:not(:hover), +.hide-titlebar .titlebar:not(:hover) { + width: 100%; + opacity: 0; + --titlebar-background: transparent; + --titlebar-background-focused: transparent; +} + +.minimalist-workspace .status-bar:not(:hover), +.hide-status-bar .status-bar:not(:hover) { + min-width: 100px; + padding: 0; + opacity: 0; + --icon-s: 0; + --status-bar-font-size: 0; + --status-bar-background: transparent; + --status-bar-border-color: transparent; + --status-bar-text-color: transparent; +} + +.minimalist-workspace .workspace-tab-header-container:not(:hover), +.hide-titlebar-tab .workspace-tab-header-container:not(:hover) { + height: 12px; + opacity: 0; +} + +.minimalist-workspace .nav-header:not(:hover) .nav-buttons-container, +.hide-nav-header .nav-header:not(:hover) .nav-buttons-container { + display: none; +} + +.minimalist-workspace .frontmatter-container:not(:hover), +.hide-frontmatter .frontmatter-container:not(:hover) { + height: 10px; + opacity: 0; +} +.minimalist-workspace .frontmatter-container:not(:hover) > *, +.hide-frontmatter .frontmatter-container:not(:hover) > * { + display: none; +} + +.minimalist-workspace .nav-folder .nav-folder-title, +.hide-file-explorer-icons .nav-folder .nav-folder-title { + --folder-icon: ""; + --file-icon-margin: 0; +} +.minimalist-workspace .nav-folder .nav-folder-title .nav-folder-title-content::before, +.hide-file-explorer-icons .nav-folder .nav-folder-title .nav-folder-title-content::before { + content: ""; + width: 0; +} +.minimalist-workspace .nav-file .nav-file-title, +.hide-file-explorer-icons .nav-file .nav-file-title { + --file-icon: ""; + --file-icon-margin: 0; +} +.minimalist-workspace .nav-file .nav-file-title .nav-file-title-content::before, +.hide-file-explorer-icons .nav-file .nav-file-title .nav-file-title-content::before { + content: ""; + width: 0; +} + +.background-image { + --background-image-url: url(); + --background-image-height: 50%; + --background-image-width: 50%; + --background-image-blur: 11px; + --background-image-shadow: var(--outline); + --background-image-opacity: 90%; + --background-image-sidebar-opacity: var(--background-image-opacity); + --background-image-note-padding: 20px; + --background-image-note-width: calc(var(--file-line-width) + var(--background-image-note-padding)); + --file-margins: 0 0; + --scrollbar-bg: rgba(var(--note-rgb)); +} +.background-image.theme-light { + --background-image-shadow: #0E0F1530; +} + +body.background-image:is(.theme-dark, .theme-light) .workspace { + background: var(--background-image-url); + background-repeat: no-repeat; + background-position: var(--background-image-width) var(--background-image-height); + background-size: cover; +} +body.background-image .workspace-tab-header-container, body.background-image .workspace > .workspace-leaf, body.background-image .workspace-split.mod-root .view-content, body.background-image .workspace-tabs .workspace-leaf { + backdrop-filter: blur(var(--background-image-blur)); +} +body.background-image .workspace-leaf-content[data-type=style-settings], body.background-image .kanban-plugin.kanban-plugin, body.background-image .markdown-preview-section.markdown-preview-section:not(.kanban-plugin__markdown-preview-view), body.background-image .cm-editor .cm-contentContainer, body.background-image .cm-editor .inline-title { + background: rgba(var(--note-rgb), var(--background-image-opacity)); +} +body.background-image .markdown-preview-section.markdown-preview-section:not(.kanban-plugin__markdown-preview-view), body.background-image .cm-editor .cm-contentContainer { + height: auto; +} +body.background-image.is-focused .workspace-leaf.mod-active .view-header, body.background-image .view-header, body.background-image .view-header-title-parent, body.background-image .view-header-title, body.background-image :is(.view-header-nav-buttons, .view-actions) > .clickable-icon, body.background-image .workspace-split:is(.mod-left-split, .mod-right-split) .workspace-tab-container, body.background-image .workspace-tabs { + background: rgba(var(--note-rgb), var(--background-image-sidebar-opacity)); +} +body.background-image .kanban-plugin.kanban-plugin, body.background-image .workspace > .workspace-split, body.background-image .workspace-split.mod-root .view-content, body.background-image .workspace-tabs .workspace-leaf, body.background-image.is-focused .workspace-tabs.mod-top, body.background-image .workspace-tabs.mod-top, body.background-image :is(.markdown-preview-view, .markdown-source-view) { + background: transparent; +} +body.background-image :is(.markdown-preview-view, +.markdown-source-view.mod-cm6 .cm-scroller) { + padding-top: 0; + padding-bottom: 0; +} +body.background-image .cm-editor .inline-title, body.background-image .markdown-preview-section, body.background-image .view-content .cm-s-obsidian > .cm-editor .cm-contentContainer { + height: auto; + padding: 0 var(--background-image-note-padding); + box-shadow: 0 0 20px var(--background-image-shadow); +} +body.background-image .cm-contentContainer .cm-gutter { + margin-left: calc(var(--background-image-note-padding) * -1); +} +body.background-image .markdown-embed-content .markdown-preview-section:not(.kanban-plugin__markdown-preview-view), body.background-image .popover.popover .markdown-preview-section { + box-shadow: unset; +} + +.sidebar-ribbon-float:not(.is-mobile) .side-dock-ribbon.mod-right, .sidebar-ribbon-float:not(.is-mobile) .side-dock-ribbon.mod-left, +.sidebar-ribbon-mini-float:not(.is-mobile) .side-dock-ribbon.mod-right, +.sidebar-ribbon-mini-float:not(.is-mobile) .side-dock-ribbon.mod-left { + position: absolute; + border: 1px solid var(--lines); + box-shadow: 4px 4px 0 var(--outline); + width: var(--ribbon-width); + top: var(--ribbon-float-top); + bottom: var(--ribbon-float-bottom); + --ribbon-background-collapsed: var(--ribbon-background) ; +} +.sidebar-ribbon-float:not(.is-mobile) .side-dock-ribbon.mod-right, +.sidebar-ribbon-mini-float:not(.is-mobile) .side-dock-ribbon.mod-right { + right: 10px; +} +.sidebar-ribbon-float:not(.is-mobile) .side-dock-ribbon.mod-left, +.sidebar-ribbon-mini-float:not(.is-mobile) .side-dock-ribbon.mod-left { + left: 10px; +} +.sidebar-ribbon-float:not(.is-mobile).sidebar-float-top, +.sidebar-ribbon-mini-float:not(.is-mobile).sidebar-float-top { + --ribbon-float-top: 45px; +} +.sidebar-ribbon-float:not(.is-mobile).sidebar-float-bottom, +.sidebar-ribbon-mini-float:not(.is-mobile).sidebar-float-bottom { + --ribbon-float-bottom: 45px; +} +.sidebar-ribbon-float:not(.is-mobile).sidebar-float-center .side-dock-ribbon.mod-right, .sidebar-ribbon-float:not(.is-mobile).sidebar-float-center .side-dock-ribbon.mod-left, +.sidebar-ribbon-mini-float:not(.is-mobile).sidebar-float-center .side-dock-ribbon.mod-right, +.sidebar-ribbon-mini-float:not(.is-mobile).sidebar-float-center .side-dock-ribbon.mod-left { + --ribbon-float-top: 50%; + transform: translate(0, -50%); +} +.sidebar-ribbon-float:not(.is-mobile) .side-dock-settings, +.sidebar-ribbon-mini-float:not(.is-mobile) .side-dock-settings { + border-top: var(--tab-outline-width) solid var(--tab-outline-color); +} +.sidebar-ribbon-float:not(.is-mobile) .sidebar-toggle-button, +.sidebar-ribbon-mini-float:not(.is-mobile) .sidebar-toggle-button { + position: relative; +} +.sidebar-ribbon-float:not(.is-mobile) .side-dock-actions, +.sidebar-ribbon-mini-float:not(.is-mobile) .side-dock-actions { + margin-top: 0; +} + +.sidebar-ribbon-mini-float:not(.is-mobile) .side-dock-ribbon:not(:hover) .sidebar-toggle-button.mod-left { + height: 0; + position: relative; + padding: 0 7px; + align-items: center; +} +.sidebar-ribbon-mini-float:not(.is-mobile) .side-dock-ribbon:not(:hover) { + padding: calc(var(--icon-size) + 2px); + width: var(--ribbon-width); + animation-duration: 5s; + --tab-outline-width: 0; +} +.sidebar-ribbon-mini-float:not(.is-mobile) .side-dock-ribbon.mod-left:not(:hover) :is(.side-dock-actions, .side-dock-settings) { + display: none; +} + +.side-dock-ribbon { + text-align: center; + align-items: center; +} + +.slrvb-g { + --font: "Norwester", "Staatliches", "Racing Sans One", "Heavitas", "Playfair Display", serif; + --header-weight: 100; + --vault-name-font-size: 25px; + --vault-name-font-weight: 300; + --font-monospace: "Fira Code"; + --hr-icon-symbol: "🏴"; + --highlight: rgba(163, 188, 218, 0.3); + --hvr: rgba(129,155,199,0.25); + --hvr-active: rgba(163, 188, 218, 0.22); + --setting-item-heading-border: 2px solid var(--dark-accent); +} + +.theme-dark.slrvb-g, .theme-dark .slrvb-g { + --outer-bar: #0E0F15; + --dark-sidebar: #090C0E; + --side-bar: var(--note); + --note: #171B21; + --note-rgb: 23, 27, 33; + --accent-color: 81, 91, 113; + --accent: #515b71; + --lite-accent: #8e9ab4; + --dark-accent: #333A49; + --deep-dark-accent: #222731; + --accent2: #889FC3; + --accent2-lite: #cde2ff; + --headers: #9DB1CA; + --text: #AAB3CA; + --soft-text: #778495; + --code-text: #707a90; + --i-at: #5D7B98; + --footnote: #576571; + --inactive: #3c4a64; + --tag-text: #8690ab; + --folder-open: #F1F7FF; + --tag: #353d52; + --th: var(--dark-accent); + --table: #242b3d; + --highlight: rgba(101, 116, 135, 0.27); + --theme-rainbow-1: var(--lite-accent); + --theme-rainbow-2: var(--code-text); + --theme-rainbow-3: var(--accent); + --theme-rainbow-4: var(--inactive); + --theme-rainbow-5: var(--table); + --theme-rainbow-6: var(--aside-bg); +} + +.theme-light.slrvb-g, .theme-light .slrvb-g { + --outer-bar:#eef3fd; + --dark-sidebar: #F1F7FF; + --side-bar: var(--note); + --note: #f8fbff; + --note-rgb: 248, 251, 255; + --accent-color: 174, 189, 212; + --accent: #aebdd4; + --lite-accent: #a6aec7; + --dark-accent: #6e7a92; + --deep-dark-accent: #171C22; + --inactive: #C0C8D6; + --file-icon-color: #A6B4CC; + --folder: var(--headers); + --folder-open: var(--accent); + --headers: #6e7a92; + --text: #171C22; + --accent2: #404c62; + --accent2-lite: #000000; + --soft-text: #90a0c3; + --code-text: #8193b5; + --i-at: #8f9cbe; + --table: #ccd6eb; + --tag: #7485a3; + --tag-text: var(--tag); + --hr: #d6deea; + --theme-rainbow-1: var(--file-icon-color); + --theme-rainbow-2: var(--soft-text); + --theme-rainbow-3: var(--tag); + --theme-rainbow-4: var(--dark-accent); + --theme-rainbow-5: var(--accent2); + --theme-rainbow-6: var(--deep-dark-accent); +} + +/*----Theme: SlRvb Blue----*/ +.slrvb-b { + --font: "Recursive Sans Linear Static Black", "Oleo Script", "Calisto MT"; + /*Works, but if it doesn't, needs !important*/ + --font-monospace: "Fira Code"; + --highlight: rgba(46, 124, 214, 0.3); + --hvr: rgba(0, 137, 255, 0.4); + --hvr-active: rgba(60, 102, 168, 0.4); +} + +.theme-dark.slrvb-b, .theme-dark .slrvb-b { + --outer-bar: #0e0f15; + --dark-sidebar: #10161d; + --side-bar: var(--note); + --note: #1a1e24; + --note-rgb: 26, 30, 36; + --accent-color: 57, 77, 100; + --accent: #394d64; + --lite-accent: #6ca6e0; + --dark-accent: #293e64; + --deep-dark-accent: #1f283b; + --accent2: #4c78cc; + --accent2-lite: #4c87cc; + --headers: #2b71cd; + --text: #AAB3CA; + --soft-text: #6d7a9b; + --code-text: slategray; + --i-at: #5d7b98; + --footnote: #6e7e89; + --folder-open: #386ab6; + --file-icon-color: #63748d; + --code-bg: #232831; + --tag: var(--dark-accent); + --th: var(--dark-accent); + --td: #030a1495; + --hr: #3c5274; + --lines: #465164; + --theme-rainbow-1: var(--accent2); + --theme-rainbow-2: var(--headers); + --theme-rainbow-3: var(--dark-accent); + --theme-rainbow-4: var(--deep-dark-accent); + --theme-rainbow-5: var(--accent); + --theme-rainbow-6: var(--soft-text); +} + +.theme-light.slrvb-b, .theme-light .slrvb-b { + --outer-bar: #eef3fd; + --dark-sidebar: #f1f5ff; + --side-bar: var(--note); + --note: #f8fbff; + --note-rgb: 248, 251, 255; + --accent-color: 100, 160, 219; + --accent: #64a0db; + --lite-accent: #5174a3; + --dark-accent: #517cbf; + --deep-dark-accent: #101b2f; + --accent2: #4c78cc; + --accent2-lite: #5599d0; + --headers: #4378c1; + --text: #283a67; + --soft-text: #4e99d0; + --code-text: #4296ea; + --i-at: var(--headers); + --footnote: #8996a0; + --inactive: #a6bbde; + --folder-open: #6da5ce; + --file-icon-color: #8897b4; + --bg: #dde4ef; + --fg: #025d9f; + --code-bg: #f1f5ff; + --tag: #5885b2; + --th: #587aa8; + --td: #d0ddef62; + --table: #ccd6eb; + --hr: #d6deea; + --lines: #b5c2d8; + --highlight: rgba(46, 124, 214, 0.2); + --theme-rainbow-1: var(--accent); + --theme-rainbow-2: var(--headers); + --theme-rainbow-3: var(--th); + --theme-rainbow-4: var(--text); + --theme-rainbow-5: var(--file-icon-color); + --theme-rainbow-6: var(--inactive); +} + +.theme-dark.wotc-beyond, .theme-dark .wotc-beyond, +.theme-light.wotc-beyond, +.theme-light .wotc-beyond { + --header-weight: 500; + --font: "its-Draconis", "Draconis", Inter; + --font-monospace: "its-Fira Code", "Fira Code", Inter; + --font-default: "its-Bookerly", "Bookerly", Inter; + --font-text: var(--font-default); + --vault-name-font-size: 25px; + --hr-icon-symbol: ""; + --hr-icon-font: var(--its); + --hr-icon-symbol: ; + --hr-image-height: 5px; + --hr-image-width: 100%; + --hr-thickness: 0; + --embed-h: #c93c3c; + --h2-color: sandybrown; + --h3-color: #a11111; + --h1-border-line-color: var(--embed-h); + --h2-border-line-color: var(--h2-color); + --h3-border-line-color: var(--h3-color); + --h1-border-right-color: linear-gradient(to right, var(--h1-border-line-color), transparent); + --h2-border-right-color: linear-gradient(to right, var(--h2-border-line-color), transparent); + --h3-border-right-color: linear-gradient(to right, var(--h3-border-line-color), transparent); + --h4-border-right-color: linear-gradient(to right, var(--header-border-line-color), transparent); + --h5-border-right-color: linear-gradient(to right, var(--header-border-line-color), transparent); + --h6-border-right-color: linear-gradient(to right, var(--header-border-line-color), transparent); + --h1-border-left-color: linear-gradient(to left, var(--h1-border-line-color), transparent); + --h2-border-left-color: linear-gradient(to left, var(--h2-border-line-color), transparent); + --h3-border-left-color: linear-gradient(to left, var(--h3-border-line-color), transparent); + --h4-border-left-color: linear-gradient(to left, var(--header-border-line-color), transparent); + --h5-border-left-color: linear-gradient(to left, var(--header-border-line-color), transparent); + --h6-border-left-color: linear-gradient(to left, var(--header-border-line-color), transparent); + --icon-color: var(--text); + --drop-shadow: var(--td); + --paper-edges: 0 0 60px var(--outline) inset; + --paper-edges-m: 0 0 100px var(--outline) inset; + --tab-container-background: transparent; + --tab-titlebar-color: transparent; + --pane-background: transparent; + --file-header-background: transparent; + --kanban-card-title-background: var(--td); + --kanban-card-metadata-background: var(--note); +} + +.theme-dark.wotc-beyond, .theme-dark .wotc-beyond { + --outline: #0000008c; + --headers: #c14343; + --code-text: #fa4545; + --tag-text: #d04e4e; + --dark-accent: #652121; + --accent: #863737; + --i-at: #bf5e5e; + --folder: var(--accent); + --hr-image: url("data:image/svg+xml,%3Csvg width='100%25' height='100%25' viewBox='0 0 100 7' version='1.1' xmlns='http://www.w3.org/2000/svg' xmlns:xlink='http://www.w3.org/1999/xlink' xml:space='preserve' xmlns:serif='http://www.serif.com/' style='fill-rule:evenodd;clip-rule:evenodd;stroke-linejoin:round;stroke-miterlimit:2;'%3E%3Crect id='Artboard1' x='0' y='0' width='100' height='7' style='fill:none;'/%3E%3Cpath d='M50,2.5L100,3.5L50,4L0,3.5L50,2.5Z' style='fill:rgb(146, 47, 47);'/%3E%3C/svg%3E") no-repeat center center; + --hr: #772d2d; + --hvr-active: rgba(212, 47, 47, 0.4); + --highlight: #7a141466; +} + +.theme-light.wotc-beyond, .theme-light .wotc-beyond { + --outer-bar: #fbe2c5; + --dark-sidebar: #f6e3cd; + --side-bar: #fff6e4; + --note: #fffcf0; + --note-rgb: 255, 252, 240; + --accent-color: 199, 89, 89; + --accent: #c75959; + --lite-accent: #a35158; + --dark-accent: #cd645e; + --deep-dark-accent: #2e1010; + --accent2: #000000; + --accent2-lite: #df6262; + --headers: #c14343; + --text: #412f2f; + --code-text: #681010; + --inactive: #e2b7a3; + --file-icon-color: #ebbd92; + --folder-open: var(--text); + --bg: var(--dark-sidebar); + --code-bg: #f3e6d2; + --aside-bg: #faf2e9; + --embed-bg: var(--aside-bg); + --td: #fae0be60; + --table: var(--outline); + --hr: var(--table); + --lines: var(--inactive); + --outline: #fbb4577e; + --hr-image: url("data:image/svg+xml,%3Csvg width='100%25' height='100%25' viewBox='0 0 100 7' version='1.1' xmlns='http://www.w3.org/2000/svg' xmlns:xlink='http://www.w3.org/1999/xlink' xml:space='preserve' xmlns:serif='http://www.serif.com/' style='fill-rule:evenodd;clip-rule:evenodd;stroke-linejoin:round;stroke-miterlimit:2;'%3E%3Crect id='Artboard1' x='0' y='0' width='100' height='7' style='fill:none;'/%3E%3Cpath d='M50,2.5L100,3.5L50,4L0,3.5L50,2.5Z' style='fill:rgb(200, 57, 57);'/%3E%3C/svg%3E") no-repeat center center; +} + +body.wotc-beyond .workspace-leaf-content, body.wotc-beyond .workspace-tabs, body.wotc-beyond .vertical-tab-content, body.wotc-beyond .modal.modal, body.wotc-beyond .community-modal-sidebar, body.wotc-beyond .canvas-wrapper { + box-shadow: var(--paper-edges); +} + +body:not(.wotc-beyond) .wotc-beyond:is(.markdown-source-view, +.markdown-preview-view) { + box-shadow: var(--paper-edges); +} + +.wotc-beyond .cm-line.hr, +.pathfinder .cm-line.hr { + bottom: -10px; +} +.wotc-beyond.markdown-rendered hr::after, .wotc-beyond .markdown-rendered hr::after, .wotc-beyond .cm-line:not(.cm-active) hr, +.pathfinder.markdown-rendered hr::after, +.pathfinder .markdown-rendered hr::after, +.pathfinder .cm-line:not(.cm-active) hr { + content: ""; + display: block; + position: relative; + background: var(--hr-image); + background-size: var(--hr-image-width); + height: var(--hr-image-height); + background-repeat: no-repeat; + background-position: center; +} + +.wotc-beyond .internal-embed.markdown-embed { + border-style: solid; + border-width: 11px; + border-image: url("data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAFAAAAA8CAYAAADxJz2MAAAFWWlUWHRYTUw6Y29tLmFkb2JlLnhtcAAAAAAAPD94cGFja2V0IGJlZ2luPSLvu78iIGlkPSJXNU0wTXBDZWhpSHpyZVN6TlRjemtjOWQiPz4KPHg6eG1wbWV0YSB4bWxuczp4PSJhZG9iZTpuczptZXRhLyIgeDp4bXB0az0iWE1QIENvcmUgNS41LjAiPgogPHJkZjpSREYgeG1sbnM6cmRmPSJodHRwOi8vd3d3LnczLm9yZy8xOTk5LzAyLzIyLXJkZi1zeW50YXgtbnMjIj4KICA8cmRmOkRlc2NyaXB0aW9uIHJkZjphYm91dD0iIgogICAgeG1sbnM6ZGM9Imh0dHA6Ly9wdXJsLm9yZy9kYy9lbGVtZW50cy8xLjEvIgogICAgeG1sbnM6ZXhpZj0iaHR0cDovL25zLmFkb2JlLmNvbS9leGlmLzEuMC8iCiAgICB4bWxuczp0aWZmPSJodHRwOi8vbnMuYWRvYmUuY29tL3RpZmYvMS4wLyIKICAgIHhtbG5zOnBob3Rvc2hvcD0iaHR0cDovL25zLmFkb2JlLmNvbS9waG90b3Nob3AvMS4wLyIKICAgIHhtbG5zOnhtcD0iaHR0cDovL25zLmFkb2JlLmNvbS94YXAvMS4wLyIKICAgIHhtbG5zOnhtcE1NPSJodHRwOi8vbnMuYWRvYmUuY29tL3hhcC8xLjAvbW0vIgogICAgeG1sbnM6c3RFdnQ9Imh0dHA6Ly9ucy5hZG9iZS5jb20veGFwLzEuMC9zVHlwZS9SZXNvdXJjZUV2ZW50IyIKICAgZXhpZjpQaXhlbFhEaW1lbnNpb249IjgwIgogICBleGlmOlBpeGVsWURpbWVuc2lvbj0iNjAiCiAgIGV4aWY6Q29sb3JTcGFjZT0iMSIKICAgdGlmZjpJbWFnZVdpZHRoPSI4MCIKICAgdGlmZjpJbWFnZUxlbmd0aD0iNjAiCiAgIHRpZmY6UmVzb2x1dGlvblVuaXQ9IjIiCiAgIHRpZmY6WFJlc29sdXRpb249IjMwMC8xIgogICB0aWZmOllSZXNvbHV0aW9uPSIzMDAvMSIKICAgcGhvdG9zaG9wOkNvbG9yTW9kZT0iMyIKICAgcGhvdG9zaG9wOklDQ1Byb2ZpbGU9InNSR0IgSUVDNjE5NjYtMi4xIgogICB4bXA6TW9kaWZ5RGF0ZT0iMjAyMi0wMS0wMlQxNjowNTo0MS0wODowMCIKICAgeG1wOk1ldGFkYXRhRGF0ZT0iMjAyMi0wMS0wMlQxNjowNTo0MS0wODowMCI+CiAgIDxkYzp0aXRsZT4KICAgIDxyZGY6QWx0PgogICAgIDxyZGY6bGkgeG1sOmxhbmc9IngtZGVmYXVsdCI+RCZhbXA7RCBCb3JkZXI8L3JkZjpsaT4KICAgIDwvcmRmOkFsdD4KICAgPC9kYzp0aXRsZT4KICAgPHhtcE1NOkhpc3Rvcnk+CiAgICA8cmRmOlNlcT4KICAgICA8cmRmOmxpCiAgICAgIHN0RXZ0OmFjdGlvbj0icHJvZHVjZWQiCiAgICAgIHN0RXZ0OnNvZnR3YXJlQWdlbnQ9IkFmZmluaXR5IERlc2lnbmVyIDEuMTAuNCIKICAgICAgc3RFdnQ6d2hlbj0iMjAyMi0wMS0wMlQxNjowNTo0MS0wODowMCIvPgogICAgPC9yZGY6U2VxPgogICA8L3htcE1NOkhpc3Rvcnk+CiAgPC9yZGY6RGVzY3JpcHRpb24+CiA8L3JkZjpSREY+CjwveDp4bXBtZXRhPgo8P3hwYWNrZXQgZW5kPSJyIj8+SLcLyAAAAYFpQ0NQc1JHQiBJRUM2MTk2Ni0yLjEAACiRdZHPK0RRFMc/8xD50SiUhcVLWA35UWJjMZNfhcXMKIPNm2fejJo3Xu+NJFtlO0WJjV8L/gK2ylopIiVLWRMbpuc8o0Yy53bP/dzvPed077mgRNO66ZR3g5nJ2uHRoDoTm1Urn/Ch0EQdqqY71mRkJEpJe7+VaLHrTq9W6bh/rWYh4ejgqxIe0i07KzwmPLGStTzeEm7UU9qC8IlwwJYLCt94erzAzx4nC/zpsR0Nh0CpF1aTvzj+i/WUbQrLy2kz08v6z328l9QmMtMRWVtltuAQZpQgKuMME6KfHgbF99NJL12yo0R+93f+FEuSq4u3WMVmkSQpsgREXZbqCVkN0RMy0qx6/f/bV8fo6y1Urw1CxaPrvrZD5Sbkc677ceC6+UMoe4DzTDF/aR8G3kTPFbW2PfCvw+lFUYtvw9kGNN9bmq19S2UyFcOAl2Ooi0HDFVTPFXr2c87RHUTX5KsuYWcXOiTeP/8FK5Jny8RYHqYAAAAJcEhZcwAALiMAAC4jAXilP3YAAAG5SURBVHic7dyxSiNRFMbxv0OwEkvZfrEWleWAvbA+giB5ANtgcx/gFJK0+wAbwUdYV7bZRjiIirXYL1tbiajFXHV3Y5KBbIyTfL8yOQxfPu5kprkXKnCzRTfrVpmdBm7WdbPFKrNFhYt9As6BnVGD1cgOcJ5/+0CNfl+4WQG0AB80N8U+AiduloBOirh/bejVFehmH4AjYJ/ZLO9Jg7KDo9xJj54C3ewzcAlsjjdbrWwCl7mbvzyvLjebp7xdW28YrE6WgG9u1gFSiriFvALdbBk4QeVV0aL8b1wGKNysCVwA6xONVS/rwIWbNefc7GHSaeps6HugiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIyCzQTqURaafSiBpAE/gCLAwbThFzY0/0DlS8K2+A3SJFdIE14Gy8sabKGbCWIroFQIq4AjaA9kRj1UMb2MidvexYzzuw99zsB/CVcoe2vPgNNFPE9z8/7HmI5IEV4PiNgtXBMbDyb3nQ5ymcIn4BW8AecDfebO/aHWUHW7mTHn2PNMnnpLTd7CdwSHmOyiy5BrZTxOmgoaHvgfkCq8DBfwpWBwfA6rDyAB4BTjVxWZByO0gAAAAASUVORK5CYII=") 11; + border-image-outset: 9px 0px; + box-shadow: 0px 0px 10px var(--outline, var(--background-modifier-box-shadow)); +} + +.dnd.dnd { + --font: "Cinzel Decorative", "Amarante", "Oleo Script", "Lobster 1.3", Inter; + --font-monospace: "Fira Code Medium", "Recursive Mono Linear Static Medium", "Source Code Pro", Inter; + --hr-icon-symbol: ""; + --hr-icon-font: var(--mdi); + --embed-h: #c93c3c; + --h1-color: var(--headers); + --h2-color: sandybrown; + --h3-color: var(--embed-h); + --highlight: rgba(60, 168, 122, 0.4); + /*Text highlights*/ + --hvr-active: rgba(255, 128, 0, 0.4); + /*Search Highlight*/ + --hvr: rgba(66, 157, 104, 0.2); + /*Cursor dragged highlights*/ +} + +.theme-dark .dnd, .theme-dark.dnd { + --outer-bar: #0e0f15; + --dark-sidebar: #1c2f2b; + --side-bar: var(--note); + --note: #1a1e24; + --accent-color: 84, 139, 103; + --accent: #548b67; + --lite-accent: #45b480; + --dark-accent: #2e4d3c; + --deep-dark-accent: #1b2c25; + --accent2: #cc824c; + --accent2-lite: #61efc9; + --headers: #3eb281; + --text: #dcdedd; + --soft-text: #aacac9; + --code-text: #71dfac; + --i-at: #5ebfa9; + --inactive: #587770; + --folder: var(--accent); + --file-icon-color: var(--soft-text); + --folder-open: #9a5f3b; + --bg: #1e3831; + --fg: white; + --code-bg: #222e31; + --embed-bg: var(--outer-bar); + --tag: var(--dark-accent); + --th: var(--dark-accent); + --table: #2c3836; + --hr: #2b4e41; + --graph-bg: var(--note); + --graph-lines: #244047; + --graph-node: var(--headers); + --graph-fill: var(--headers); + --graph-404: #1f6f29; + --graph-img: var(--accent2); + --graph-tag: saddlebrown; + --theme-rainbow-1: var(--accent); + --theme-rainbow-2: var(--accent2); + --theme-rainbow-3: var(--h3-color); + --theme-rainbow-4: var(--hr); + --theme-rainbow-5: var(--dark-sidebar); + --theme-rainbow-6: var(--outer-bar); +} + +.theme-light.dnd, .theme-light .dnd { + --outer-bar: #dfefe6; + --dark-sidebar: var(--embed-bg); + --side-bar: var(--note); + --note: #f8fbff; + --accent-color: 121, 199, 142; + --accent: #79c78e; + --lite-accent: #ac7c10; + --dark-accent: #5a8d71; + --deep-dark-accent: #1b2c25; + --accent2: #cca04c; + --accent2-lite: #35be89; + --headers: #0e934c; + --text: #697580; + --soft-text: #52ad67; + --code-text: #35ad76; + --i-at: #48804e; + --folder: #64c9a3; + --folder-open: var(--accent2); + --fg: #029f08; + --bg: #cbe2d5; + --code-bg: #f1f5ff; + --embed-bg: var(--code-bg); + --aside-bg: #ecf6f1; + --inactive: #91c1ad; + --tag: #56c681; + --th: #549f54; + --table: #ccd6eb; + --hr: #d6deea; + --lines: var(--inactive); + --graph-bg: var(--note); + --graph-lines: #e4e7f8; + --graph-node: var(--headers); + --graph-fill: #2e5db2; + --graph-404: #727e93; + --graph-img: var(--accent2); + --graph-tag: #000000; + --theme-rainbow-1: var(--accent); + --theme-rainbow-2: var(--accent2); + --theme-rainbow-3: var(--h3-color); + --theme-rainbow-4: var(--headers); + --theme-rainbow-5: var(--code-text); + --theme-rainbow-6: var(--file-icon-color); + --hvr-active: rgba(255, 128, 0, 0.2); +} + +.pathfinder.pathfinder { + --font: "Taroca"; + --header-weight: 100; + --h1-font: "Taroca"; + --h2-font: var(--h1-font); + --h3-font: "Norwester"; + --h4-font: var(--h3-font); + --h5-font: var(--h3-font); + --h6-font: var(--h3-font); + --h1-border-line-height: 1.5px; + --h2-border-line-height: 1.5px; + --h3-border-line-height: 2px; + --h4-border-line-height: 0; + --h5-border-line-height: 0; + --h6-border-line-height: 0; + --h1-border-line-color: var(--header-border-line-color); + --h2-border-line-color: var(--header-border-line-color); + --h3-border-line-color: var(--header-border-line-color); + --h4-border-line-color: var(--header-border-line-color); + --h5-border-line-color: var(--header-border-line-color); + --h6-border-line-color: var(--header-border-line-color); + --h1-border-left-color: var(--h1-border-line-color); + --h2-border-left-color: var(--h2-border-line-color); + --h3-border-left-color: var(--h3-border-line-color); + --h4-border-left-color: var(--h4-border-line-color); + --h5-border-left-color: var(--h5-border-line-color); + --h6-border-left-color: var(--h6-border-line-color); + --h1-border-right-color: var(--h1-border-line-color); + --h2-border-right-color: var(--h2-border-line-color); + --h3-border-right-color: var(--h3-border-line-color); + --h4-border-right-color: var(--h4-border-line-color); + --h5-border-right-color: var(--h5-border-line-color); + --h6-border-right-color: var(--h6-border-line-color); + --vault-name-font-weight: 100; + --dataview-th-background: var(--th); + --dataview-th-alt-color: var(--hvr); + --dataview-th-color: var(--text-dl); + --dataview-th-border-bottom: var(--th); + --hr-image: url("data:image/svg+xml,%3C!DOCTYPE svg PUBLIC '-//W3C//DTD SVG 1.1//EN' 'http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd'%3E%3Csvg width='100%25' height='100%25' viewBox='0 0 1000 204' version='1.1' xmlns='http://www.w3.org/2000/svg' xmlns:xlink='http://www.w3.org/1999/xlink' xml:space='preserve' xmlns:serif='http://www.serif.com/' style='fill-rule:evenodd;clip-rule:evenodd;stroke-linejoin:round;stroke-miterlimit:2;'%3E%3Cg transform='matrix(1,0,0,1,1.7053e-13,-398.169)'%3E%3Crect id='Artboard1' x='-0' y='398.169' width='1000' height='203.661' style='fill:none;'/%3E%3CclipPath id='_clip1'%3E%3Crect id='Artboard11' serif:id='Artboard1' x='-0' y='398.169' width='1000' height='203.661'/%3E%3C/clipPath%3E%3Cg clip-path='url(%23_clip1)'%3E%3Cg transform='matrix(4.31034,0,0,4.31034,-267.917,-1094.41)'%3E%3Cpath d='M178.389,380.983C175.751,387.924 169.433,393.494 159,393.565C127.289,393.78 136.335,361.89 118,362C108.448,361.996 110.806,374.866 115,377C114.833,377.167 100.762,372.819 105,357C76.617,370.354 62.389,358 62.389,358C62.389,358 80.399,363.885 90.791,357.333C109.271,345.683 133.119,337.401 142,364C147.001,347.144 172.305,357.468 163,370.565C163.721,364.587 151.808,358.708 151,370.565C150.447,378.68 162.397,385.825 170.144,377.076C176.411,369.999 170.344,356.114 162,354C170.327,353.643 175.921,358.556 178.389,365.031C180.857,358.556 186.45,353.643 194.777,354C186.434,356.114 180.367,369.999 186.634,377.076C194.38,385.825 206.33,378.68 205.777,370.565C204.97,358.708 193.056,364.587 193.777,370.565C184.472,357.468 209.776,347.144 214.777,364C223.658,337.401 247.507,345.683 265.986,357.333C276.379,363.885 294.389,358 294.389,358C294.389,358 280.16,370.354 251.777,357C256.015,372.819 241.944,377.167 241.777,377C245.971,374.866 248.329,361.996 238.777,362C220.443,361.89 229.488,393.78 197.777,393.565C187.344,393.494 181.027,387.924 178.389,380.983Z' style='fill:rgb(139,38,45);'/%3E%3C/g%3E%3C/g%3E%3C/g%3E%3C/svg%3E%0A"); + --hr-image-height: 16px; + --hr-thickness: 2px; + --hr-icon-symbol: ; + --highlight: rgba(191, 0, 0, 0.2); + --hvr: rgba(191, 0, 0, 0.2); + --hvr-active: #e5800040; +} + +.theme-dark .pathfinder, .theme-dark.pathfinder { + --accent: #863737; + --lite-accent: #c94d4d; + --dark-accent: #652121; + --headers: #ddaf78; + --h1-color: var(--headers); + --h2-color: #2f4f87; + --h3-color: #a22b30; + --h4-color: #d0765b; + --h5-color: #694b3c; + --h6-color: var(--text); + --code-text: #c94d4d; + --i-at: #bf5e5e; + --folder: #a22b30; + --folder-open: #e58000; + --hr: #8b262d; + --header-border-line-color: var(--dark-accent); + --graph-bg: var(--embed-bg); + --graph-lines: #65212190; + --graph-node: var(--theme-rainbow-1); + --graph-tag: var(--theme-rainbow-3); + --graph-img: var(--theme-rainbow-2); + --graph-line-hover: var(--lines); + --graph-node-hover-fill: var(--theme-rainbow-4); + --theme-rainbow-1: var(--h1-color); + --theme-rainbow-2: var(--h2-color); + --theme-rainbow-3: var(--h3-color); + --theme-rainbow-4: var(--h4-color); + --theme-rainbow-5: var(--h5-color); +} + +.theme-light .pathfinder, .theme-light.pathfinder { + /*Colors*/ + --outer-bar: #e2ded8; + --dark-sidebar: #e2ded8; + --side-bar: #ECE9E4; + --note: #ECE9E4; + --note-rgb: 236, 233, 228; + --accent-color: 94, 0, 0; + --accent: #800008; + --lite-accent: #e58000; + --dark-accent: #800008; + --deep-dark-accent: #5e0000; + --accent2: #461413; + --accent2-lite: #0f5cbc; + --link-color-hover: #1B9AF0; + --headers: #ca9759; + --h1-color: var(--headers); + --h2-color: #002564; + --h3-color: #5d0000; + --h4-color: #a76652; + --h5-color: #393636; + --text: #393636; + --soft-text: #5C1C16; + --code-text: #5C1C16; + --i-at: #5C1C16; + --footnote: #676767; + --inactive: #cdab9a; + --folder: #a22b30; + --folder-open: var(--headers); + --file-icon-color: #676767; + --bg: #d2c4be; + --embed-bg: #E0DACB; + --aside-bg: #E0DACB; + --tag: #5e0000; + --th: #5e0000; + --td: #E0DACB99; + --header-border-line-color: black; + --table: #00000060; + --hr: #5c1c16; + --lines: #b6a697; + --outline: rgba(124, 49, 3, 0.4); + --hr-image-width: contain; + --graph-lines: var(--embed-bg); + --graph-node: var(--theme-rainbow-1); + --graph-tag: var(--theme-rainbow-4); + --graph-img: var(--theme-rainbow-2); + --graph-line-hover: var(--lines); + --graph-node-hover-fill: var(--theme-rainbow-4); + --theme-rainbow-1: #ca9759; + --theme-rainbow-2: #3276b5; + --theme-rainbow-3: #002564; + --theme-rainbow-4: #5d0000; + --theme-rainbow-5: #e58000; + --theme-rainbow-6: #393636; +} + +.pathfinder.markdown-rendered hr, .pathfinder .markdown-rendered hr { + overflow: visible; + display: flow-root; +} +.pathfinder .cm-line:not(.cm-active) hr { + margin-top: -25px; +} + +.mini { + --font: var(--font-default); + --background-modifier-hover: var(--td); + --tag-color: var(--accent2-lite); + --hr-icon-symbol: ; + --file-icon: ; + --folder-icon: ; + --header-border-line-height: 0; + --nav-item-border-width: 2px; + --nav-item-border-color: var(--text); + --setting-item-heading-border: 2px solid var(--accent); + --shadow-s: 1px 1px 0 var(--outline); + --shadow-l: 4px 4px 0 var(--outline); + --modal-border-width: 1px; + --modal-border-color: var(--table); + --tab-outline-color: transparent; + --drag-ghost-text-color: var(--text); + --message-color: var(--text); + --message-border-width: 1px; +} + +.theme-dark.mini, .theme-dark .mini { + --outer-bar: var(--note); + --dark-sidebar: var(--note); + --side-bar: var(--note); + --note: #1a1e24; + --note-rgb: 26, 30, 36; + --accent-color: ; + --accent: #546078; + --lite-accent: #aab3ca; + --dark-accent: #394151; + --deep-dark-accent: var(--note); + --accent2-lite: var(--text-dl); + --headers: var(--text); + --code-text: var(--text); + --i-at: var(--text-faint); + --inactive: #586477; + --tag-text: var(--accent2-lite); + --code-bg: #232831; + --aside-bg: var(--note); + --embed-bg: var(--note); + --tag: var(--note); + --folder: var(--text-dl); + --file-icon-color: #aab3ca; + --th: var(--note); + --td: #06080c50; + --table: var(--bg); + --outline: #0b0f13; + --highlight: rgba(81, 100, 122, 0.6); + --hvr: rgba(87, 113, 156, 0.4); + --hvr-active: rgba(101, 124, 156, 0.4); + --graph-bg: var(--outer-bar); + --graph-lines: #363c4950; + --graph-node: var(--fg); + --graph-fill: var(--headers); + --graph-404: #727e93; + --graph-img: #6b90ad; + --graph-tag: black; + --graph-focused: var(--text-highlight-bg-active); + --theme-rainbow-1: var(--graph-404); + --theme-rainbow-2: var(--accent); + --theme-rainbow-3: var(--dark-accent); + --theme-rainbow-4: var(--code-bg); + --theme-rainbow-5: var(--td); + --theme-rainbow-6: var(--graph-tag); +} + +.theme-light.mini, .theme-light .mini { + --background-modifier-form-field-highlighted: #99a4bb30; + --highlight: #99a4bb50; + --hvr: #99a4bb50; + --hvr-active: #99a4bb50; + --outer-bar: var(--note); + --dark-sidebar: var(--note); + --side-bar: var(--note); + --note: #f8fbff; + --text-dl: #000000; + --soft-text: #99a4bb; + --inactive: #d2daee; + --accent: #b5c2d8; + --lite-accent: #aab3ca; + --dark-accent: #d5ddeb; + --deep-dark-accent: var(--note); + --accent2: #d6def3; + --accent2-lite: var(--text-dl); + --bg: #eef3ff; + --aside-bg: var(--note); + --embed-bg: var(--note); + --bttn: var(--dark-accent); + --tag: var(--note); + --outline: #e1e9f6; + --th: var(--note); + --folder: var(--text-dl); + --headers: var(--text); + --i-at: var(--soft-text); + --code-text: var(--text); + --graph-bg: var(--outer-bar); + --graph-lines: #e5e9f3; + --graph-node: var(--text); + --graph-fill: var(--headers); + --graph-404: #727e939c; + --graph-img: #8ec1e9; + --graph-tag: var(--accent2-lite); + --graph-focused: #b6c9f1; + --theme-rainbow-1: var(--bg); + --theme-rainbow-2: var(--td); + --theme-rainbow-3: var(--outline); + --theme-rainbow-4: var(--inactive); + --theme-rainbow-5: var(--accent); + --theme-rainbow-6: var(--graph-img); +} + +/*----Theme: Drowned----*/ +.drwn { + --hr-icon-symbol: ""; + --hr-icon-font: var(--mdi); +} + +.theme-dark.drwn, .theme-dark .drwn { + --outer-bar: #0b0f13; + --note: #1a1e24; + --accent-color: 55, 136, 118; + --accent: #378876; + --lite-accent: #6CE0D3; + --dark-accent: #216565; + --deep-dark-accent: #103F3D; + --accent2: #5cb2d6; + --accent2-lite: #49d8e2; + --headers: #399F94; + --text: #bccad8; + --code-text: #72cdd0; + --i-at: #5EBFA9; + --inactive: #2b5b77; + --tag-text: var(--folder-open); + --folder-open: #58c8e0; + --folder-text-color: #71a6b7; + --file-icon-color: #204c5d; + --bg: #1e2f33; + --hr: #0f465d; + --tag: #1A5753; + --th: var(--dark-accent); + --td: rgba(6,12,12,0.38); + --table: #2b4448; + --lines: #1e4765; + --tab-stack-shadow: rgba(0,74,63,0.08); + --highlight: rgba(60,168,131,0.25); + --hvr: rgba(115,253,190,0.25); + --hvr-active: rgba(52,237,181,0.13); + --graph-lines: #04303d; + --theme-rainbow-1: var(--headers); + --theme-rainbow-2: var(--accent); + --theme-rainbow-3: var(--inactive); + --theme-rainbow-4: var(--file-icon-color); + --theme-rainbow-5: var(--table); + --theme-rainbow-6: var(--code-bg); +} + +.theme-light.drwn, .theme-light .drwn { + --outer-bar: #eef3fd; + --dark-sidebar: #e8f9f7; + --accent-color: 67, 193, 165; + --accent: #43C1A5; + --lite-accent: #51a38e; + --dark-accent: #25a99e; + --deep-dark-accent: #102F26; + --accent2: #D6EAE3; + --accent2-lite: #75c8b9; + --headers: #40B1A4; + --text: #697580; + --soft-text: #4ED0B8; + --code-text: #69cfd2; + --i-at: #43C1AE; + --footnote: #89A09E; + --inactive: #A6DED4; + --tag-text: var(--accent); + --folder: var(--headers); + --folder-open: #a1d9ff; + --folder-text-color: #7EA3A2; + --file-icon-color: #A6DED8; + --fg: #2E918A; + --bg: var(--table); + --embed-bg: #f1f5ff; + --tag: #49b99d; + --th: var(--headers); + --td: rgba(145, 212, 199, 0.27); + --table: #CCEBE2; + --hr: #D6EAE9; + --lines: #b8e5e7; + --drop-shadow: rgba(0,74,52,0.08); + --highlight: rgba(144, 237, 231, 0.5); + --hvr: rgba(131,240,207,0.3); + --hvr-active: rgba(119, 220, 193, 0.5); + --theme-rainbow-1: var(--code-text); + --theme-rainbow-2: var(--accent2-lite); + --theme-rainbow-3: var(--accent); + --theme-rainbow-4: var(--lite-accent); + --theme-rainbow-5: var(--fg); + --theme-rainbow-6: var(--deep-dark-accent); +} + +.theme-dark.its-d, .theme-dark .its-d { + --hvr: rgba(60, 8, 8, 0.46); + --highlight: rgba(139, 6, 6, 0.4); + --outer-bar: black; + --dark-sidebar: #000000; + --side-bar: var(--outer-bar); + --note: #070b11; + --accent: #803232; + --dark-accent: var(--aside-bg); + --deep-dark-accent: #270f0f; + --accent2: var(--text); + --accent2-lite: #c5575b; + --headers: #aa3333; + --text: #475569; + --soft-text: var(--accent); + --code-text: var(--accent); + --footnote: #577093; + --inactive: #1b262f; + --file-icon-color: var(--text); + --fg: var(--headers); + --bg: var(--inactive); + --code-bg: var(--aside-bg); + --embed-bg: black; + --aside-bg: #04070c; + --tag: var(--table); + --th: var(--hr); + --td: #03000054; + --table: #380b13; + --hr: #571a1a; + --graph-bg: rgba(13, 20, 29, 0.51); + --graph-lines: var(--hr); + --theme-rainbow-1: var(--headers); + --theme-rainbow-2: var(--accent); + --theme-rainbow-3: var(--hr); + --theme-rainbow-4: var(--table); + --theme-rainbow-5: var(--file-icon-color); + --theme-rainbow-6: var(--code-bg); +} + +.theme-light.its-d, .theme-light .its-d { + --outer-bar: #d5e1f3; + --dark-sidebar: #dce4f6; + --note: #e6edf8; + --bg:#d9e4f0; + --code-bg: #e6ebf8; +} + +.nebula { + --font: "Norwester", var(--font-default); + --header-weight: 500; + --vault-name-font-weight: 500; + --checklist-done-color: var(--inactive); +} + +.theme-dark.nebula, +.theme-dark .nebula { + --note: #070b11; + --hr: #1b1e2b; + --table: #241a4e; + --headers: #8065fa; + --embed-bg: #1b1e2b; + --soft-text: #7f66d8; + --code-text: #9278ff; + --tag: var(--accent); + --accent-color: 114, 53, 211; + --accent: #3a2791; + --accent2-lite:#7b6cff; + --lite-accent: #b19eff; + --inactive: #594c9a; + --dark-accent: #40327e; + --th: var(--dark-accent); + --code-bg: #141235; + --outer-bar: #19113a; + --lines: #30275a; + --folder-open: var(--text); + --theme-rainbow-1: var(--headers); + --theme-rainbow-2: var(--code-text); + --theme-rainbow-3: ; + --theme-rainbow-4: ; + --theme-rainbow-5: ; + --theme-rainbow-6: ; +} + +.notion.notion { + --font: var(--font-default); + --header-font-weight: 900; + --vault-name-font-weight: 900; + --header-border-line-height: 0; + --h1-border-line-height: var(--header-border-line-height); + --h2-border-line-height: var(--header-border-line-height); + --h3-border-line-height: var(--header-border-line-height); + --h4-border-line-height: var(--header-border-line-height); + --h5-border-line-height: var(--header-border-line-height); + --h6-border-line-height: var(--header-border-line-height); + --hr-icon-symbol: ""; + background: var(--note); + --text-dl: white; +} + +.theme-dark .notion, .theme-dark.notion { + --scrollbar-bg: #3b4044; + --scrollbar-thumb-bg: #474C50; + --outer-bar: var(--embed-bg); + --dark-sidebar: var(--side-bar); + --side-bar: #373C3F; + --note: #2F3437; + --note-rgb: 47, 52, 55; + --headers: var(--text); + --text: #EBEBEB; + --soft-text: #A8ABAC; + --code-text: var(--text); + --i-at: var(--bttn); + --footnote: #7A7D7F; + --inactive: #5D6265; + --accent-color: 66, 180, 224; + --accent: var(--tag); + /*#474C50*/ + --lite-accent: var(--bttn); + --dark-accent: #4B5053; + /*#26292B*/ + --deep-dark-accent: var(--outer-bar); + --accent2: var(--soft-text); + --accent2-lite: #2EA1CF; + --folder: var(--text); + --folder-open: var(--bttn); + --file-icon-color: var(--dark-accent); + --nav-item-color-active: var(--tag); + --bg: #3C4144; + --code-bg: var(--bg); + --embed-bg: #3F4447; + --aside-bg: var(--note); + --tag: #708dbb; + --bttn: #43B3E0; + /*#889FC3*/ + --th: #373c3f; + --td: #0f0f0f33; + --hr: #3C3F43; + --table: #4C5153; + --lines: var(--table); + /*#3E4245*/ + --outline: #0f0f0f40; + --highlight: rgb(255, 255, 255, 0.1); + --hvr: rgba(45, 170, 219, 0.3); + --hvr-active: rgba(45, 170, 219, 0.3); + --graph-bg: var(--note); + --graph-lines: #5D626555; + --graph-node: var(--headers); + --graph-fill: var(--folder); + --graph-404: var(--inactive); + --graph-img: var(--soft-text); + --graph-tag: var(--accent); + --graph-focused: var(--accent); + --theme-rainbow-1: var(--lite-accent); + --theme-rainbow-2: var(--tag); + --theme-rainbow-3: var(--text-faint); + --theme-rainbow-4: var(--inactive); + --theme-rainbow-5: var(--hr); + --theme-rainbow-6: var(--td); +} + +.theme-light.notion, .theme-light .notion { + --scrollbar-bg: #EDECE9; + --scrollbar-thumb-bg: #D3D1CB; + --text-on-accent: white; + --outer-bar: #F1F1EF; + --dark-sidebar: var(--side-bar); + --side-bar: #F7F6F3; + --note: #FFFFFF; + --note-rgb: 247, 246, 243; + --accent-color: 67, 179, 224; + --accent: #43B3E0; + --lite-accent: var(--bttn); + --dark-accent: var(--accent); + --accent2: var(--soft-text); + --accent2-lite: #2EA1CF; + --deep-dark-accent: var(--outer-bar); + --headers: var(--text); + --text: #37352f; + /*#8D8C89*/ + --inactive: #CFCECD; + --soft-text: #82817C; + --code-text: var(--text); + --i-at: var(--bttn); + --footnote: #A09E9A; + --file-icon-color: #69685f; + --folder: var(--text); + --folder-open: var(--bttn); + --th: var(--side-bar); + --table-header-color: var(--text); + --td: #37352F10; + --bg: #EDECE9; + --code-bg: #f7f6f3; + --embed-bg: #F1F1EF; + --aside-bg: var(--note); + --tag: var(--bttn); + --bttn: #43B3E0; + --table:#e9e9e7; + --hr: rgba(55, 53, 47, 0.1); + --lines: var(--hr); + --outline: #0f0f0f15; + --graph-bg: var(--note); + --graph-lines: #CFCECD55; + --graph-node: var(--soft-text); + --graph-fill: var(--folder); + --graph-404: var(--file-icon-color); + --graph-img: #000; + --graph-tag: var(--accent); + --graph-focused: var(--accent); + --highlight: rgba(55, 53, 47, 0.078); + --hvr: rgba(45, 170, 219, 0.2); + --hvr-active: rgba(45, 170, 219, 0.3); + --theme-rainbow-1: var(--lite-accent); + --theme-rainbow-2: var(--text-faint); + --theme-rainbow-3: var(--text); + --theme-rainbow-4: var(--soft-text); + --theme-rainbow-5: var(--footnote); + --theme-rainbow-6: var(--inactive); +} + +/*----Theme: School Days----*/ +.s-d.s-d { + /*FONTS*/ + --font: /*'Recursive Sans Casual Static',*/ "Recursive Sans Linear Static Black", "RocknRoll One Regular", var(--font-default); + --vault-font: "CollegiateBlackFLF", "Jersey M54", var(--font-default); + --vault-name-font-weight: 100; + --font-monospace: "Recursive Mono Linear Static Medium", var(--font-default); + --solve-font: "Recursive Sans Linear Static Regular", var(--font-default); + --inline-title-font: var(--vault-font); + --inline-title-color: var(--accent2); + --inline-title-weight: 500; + --hr-icon-symbol: "", "✏"; + --hr-icon-font: var(--mdi); + --bullet: ""; + --bullet-font: var(--mdi); + background: var(--note); +} + +.theme-dark.s-d, .theme-dark .s-d { + --outer-bar: #0e0f15; + --dark-sidebar: #10161d; + --side-bar: var(--note); + --accent: #485b76; + --lite-accent: #d0913d; + --dark-accent: #2b3550; + --deep-dark-accent: #212731; + --accent2: var(--lite-accent); + --headers: #4378c1; + --text: #dcddde; + --soft-text: #aab3ca; + --code-text: #e6a210; + --i-at: var(--lite-accent); + --inactive: #586477; + --folder: var(--headers); + --folder-open: var(--lite-accent); + --fg: white; + --bg: #232a34; + --code-bg: #232831; + --embed-bg: #12151a; + --tag: #273346; + --th: var(--dark-accent); + --table: #2f3440; + --hr: #414b5c; + --latex-color: #b2cfff; + --latex-format-color: #61afef; + --latex-syntax-color: #ebbd3e; + --header-solve: #c7c7c7; + --answer: darkseagreen; + --answer-bg: #293c33; + --highlight: rgba(86, 128, 226, 0.4); + --hvr-active: rgba(255, 183, 0, 0.4); + --hvr: rgba(65, 82, 119, 0.31); + --theme-rainbow-1: var(--accent2); + --theme-rainbow-2: var(--headers); + --theme-rainbow-3: var(--accent); + --theme-rainbow-4: var(--dark-accent); + --theme-rainbow-5: var(--tag); + --theme-rainbow-6: var(--deep-dark-accent); +} + +.theme-light.s-d, .theme-light .s-d.s-d { + /*--DEFAULT VARIABLES--*/ + --outer-bar: #e3f0fd; + --dark-sidebar: var(--embed-bg); + --side-bar: var(--note); + --accent-color: 109, 153, 212; + --accent: #6d99d4; + --lite-accent: #e6af66; + --dark-accent: #4382c1; + --deep-dark-accent: #6c8bb4; + --accent2: var(--lite-accent); + --headers: #4382c1; + --text: #697580; + --soft-text: #6f8fd8; + --code-text: #ebab16; + --i-at: var(--th); + --inactive: #91a3c1; + --folder-open: var(--lite-accent); + --folder: var(--headers); + --fg: #025d9f; + --bg: #e1e6ed; + --embed-bg: #f1f5ff; + --tag: #5685c6; + --th: #b48c55; + --table: #c9ced9; + --hr: #d6deea; + --latex-color: #5895fa; + --latex-format-color: #9ed3ff; + --latex-syntax-color: #fdaf00; + --header-solve: #a87643; + --answer: #4f904f; + --answer-bg: #dbe8e2; + --highlight: rgba(118, 186, 253, 0.4); + --hvr-active: rgba(255, 166, 0, 0.4); + --hvr: rgba(149, 192, 229, 0.37); + --graph-bg: var(--note); + --graph-lines: #ecedf8; + --graph-node: var(--headers); + --graph-fill: #2e5db2; + --graph-404: #727e93; + --graph-img: #4c78cc; + --graph-tag: #000000; + --graph-focused: var(--lite-accent); + --theme-rainbow-1: var(--accent2); + --theme-rainbow-2: var(--fg); + --theme-rainbow-3: var(--headers); + --theme-rainbow-4: var(--accent); + --theme-rainbow-5: var(--th); + --theme-rainbow-6: var(--graph-404); +} + +/*--Solve Page--*/ +/*Header*/ +.s-d.s-d.solve, .s-d.s-d .solve { + --headers: var(--header-solve); + --h3-font: var(--solve-font); + --h4-font: var(--solve-font); + --h5-font: var(--solve-font); + --h6-font: var(--solve-font); +} +.s-d.s-d.solve th, .s-d.s-d.solve td:nth-child(1), .s-d.s-d .solve th, .s-d.s-d .solve td:nth-child(1) { + background-color: var(--outer-bar); +} +.s-d.s-d.solve td mark, .s-d.s-d .solve td mark { + color: var(--answer); + background-color: var(--answer-bg); + font-weight: 600; + padding: 2px; +} +.s-d.s-d.solve tr, .s-d.s-d .solve tr { + width: 10% !important; +} + +/*----Theme: Tangerine Dunes----*/ +.t-d { + --hr-sym: ""; + --hr-f: var(--mdi); + --header-weight: 500; + background: var(--note); +} + +.theme-dark.t-d, .theme-dark .t-d { + --outer-bar: #0b0f13; + --side-bar: var(--note); + --note: #1a1e24; + --accent-color: 223, 123, 65; + --accent: #DF7B41; + --lite-accent: #C48A69; + --dark-accent: #c66c39; + --deep-dark-accent: #62250F; + --accent2: #8F3F2B; + --accent2-lite: #E57858; + --headers: #DF7B41; + --text: #bccad8; + --code-text: #FA8A45; + --i-at: #BF7F5E; + --folder-open: #D8AF97; + --file-icon-color: #8F3F2B; + --tag: var(--th); + --th: #a66038; + --td: rgba(12,9,6,0.38); + --table: #463228; + --hr: #744F3C; + --highlight: rgba(148, 87, 49, 0.575); + --hvr: rgba(253,162,115,0.25); + --hvr-active: rgba(236, 110, 52, 0.3); + --theme-rainbow-1: var(--i-at); + --theme-rainbow-2: var(--headers); + --theme-rainbow-3: var(--accent2); + --theme-rainbow-4: var(--tag); + --theme-rainbow-5: var(--table); + --theme-rainbow-6: var(--dark-sidebar); +} + +.theme-light.t-d, .theme-light .t-d { + --outer-bar: #eef3fd; + --side-bar: var(--note); + --note: #f8fbff; + --accent-color: 232, 175, 142; + --accent: #E8AF8E; + --lite-accent: #C48A69; + --accent2: #A9523C; + --accent2-lite: #E57858; + --dark-accent: #dc8a67; + --deep-dark-accent: #7B4430; + --headers: #E19363; + --text: #697580; + --soft-text: #CF9870; + --code-text: #EA7542; + --i-at: #C16E43; + --folder-open: #EDB595; + --folder: #BA5D4B; + --fg: #91542E; + --tag: #e48751; + --table: #CCD6EB; + --hr: #CFC2BB; + --th: var(--dark-accent); + --highlight: rgba(255, 158, 89, 0.4); + --hvr: rgba(253,157,115,0.25); + --hvr-active: rgba(255, 158, 89, 0.4); + --theme-rainbow-1: var(--headers); + --theme-rainbow-2: var(--soft-text); + --theme-rainbow-3: var(--i-at); + --theme-rainbow-4: var(--file-icon-color); + --theme-rainbow-5: var(--tag); + --theme-rainbow-6: var(--file-icon-color); +} + +.nord { + --hr-icon-symbol: ""; + --hr-icon-font: var(--mdi); + background: var(--note); +} + +.theme-dark.nord, .theme-dark .nord.nord { + --outer-bar: #242933; + --dark-sidebar: #3B4252; + --side-bar: var(--outer-bar); + --note: #2E3440; + --note-rgb: 46, 52, 64; + --accent-color: 94, 129, 172; + --accent: #5E81AC; + --lite-accent: #5E81AC; + --dark-accent: #4C566A; + --deep-dark-accent: var(--outer-bar); + --accent2: #81A1C1; + --accent2-lite: #88C0D0; + --headers: #88C0D0; + --text: #ECEFF4; + --code-text: #81A1C1; + --i-at: #81A1C1; + --tag-text: var(--folder); + --folder: #A3BE8C; + --folder-open: #3c9ba8; + --nav-item-color: var(--soft-text); + --bg: #3B4252; + --code-bg: var(--dark-sidebar); + --embed-bg: #1d2129; + --aside-bg: #242933; + --tag: var(--dark-accent); + --table: #434C5E; + --hr: var(--table); + --lines: #4C566A; + --graph-bg: var(--outer-bar); + --graph-lines: var(--lines); + --graph-node: var(--fg); + --graph-fill: var(--headers); + --graph-img: var(--folder); + --graph-tag: var(--headers); + --highlight: rgba(60, 159, 168, 0.4); + --hvr: rgba(81, 120, 138, 0.48); + --hvr-active: rgba(136, 192, 208, 0.565); + --theme-rainbow-1: #BF616A; + --theme-rainbow-2: #D08770; + --theme-rainbow-3: #A5916A; + --theme-rainbow-4: #88A073; + --theme-rainbow-5: #A48EAD; + --theme-rainbow-6: #29395a; + --rainbow-1: var(--theme-rainbow-1); + --rainbow-2: var(--theme-rainbow-2); + --rainbow-3: var(--theme-rainbow-3); + --rainbow-4: var(--theme-rainbow-4); + --rainbow-5: var(--theme-rainbow-5); + --rainbow-6: var(--theme-rainbow-6); +} + +.theme-light.nord, .theme-light .nord { + --outer-bar: #E5E9F0; + --dark-sidebar: #dde2ec; + --side-bar: var(--outer-bar); + --note: #FBFBFC; + --accent-color: 143, 188, 187; + --accent: #5E81AC; + --lite-accent: #3c66a8; + --dark-accent: #29395a; + --deep-dark-accent: #4C566A; + --accent2: #81A1C1; + --accent2-lite: #8FBCBB; + --headers: #88C0D0; + --text: #4C566A; + --soft-text: #7e8dac; + --code-text: #81A1C1; + --i-at: #81A1C1; + --inactive: var(--soft-text); + --tag-text: var(--accent2-lite); + --folder: var(--headers); + --nav-item-color: var(--soft-text); + --folder-open: #4C566A; + --bg: #bdcce6; + --code-bg: #ECEFF4; + --aside-bg: #D8DEE9; + --embed-bg: var(--code-bg); + --tag: var(--accent); + --table: var(--lines); + --hr: #D8DEE9; + --lines: #b5c1d4; + --graph-bg: var(--outer-bar); + --graph-lines: var(--lines); + --graph-node: var(--deep-dark-accent); + --graph-fill: var(--fg); + --graph-img: var(--sphd-ed-2); + --graph-tag: var(--headers); + --highlight: rgba(97, 148, 231, 0.3); + --hvr: rgba(119, 235, 210, 0.4); + --hvr-active: rgba(92, 207, 228, 0.25); + --theme-rainbow-1: #BF616A; + --theme-rainbow-2: #D08770; + --theme-rainbow-3: #A5916A; + --theme-rainbow-4: #88A073; + --theme-rainbow-5: #A48EAD; + --theme-rainbow-6: var(--soft-text); + --rainbow-1: var(--theme-rainbow-1); + --rainbow-2: var(--theme-rainbow-2); + --rainbow-3: var(--theme-rainbow-3); + --rainbow-4: var(--theme-rainbow-4); + --rainbow-5: var(--theme-rainbow-5); + --rainbow-6: var(--theme-rainbow-6); +} + +.advt { + --font: "Quicksand"; + --f-w-h: 900; + --link-f: var(--font); + --f-w-l: 700; + --f-w-tag: 600; +} + +.theme-dark.advt, +.theme-dark .advt { + background: var(--note); + color: var(--text); + --background-primary: var(--note); + --background-primary-alt: var(--deep-dark-accent); + --background-secondary: var(--side-bar); + --background-secondary-alt: var(--outer-bar); + --background-modifier-border: var(--table); + --background-modifier-form-field-highlighted: rgba(254, 160, 71, 0.427); + --text-selection: rgba(241, 173, 105, 0.25); + --text-highlight-bg-active: rgba(255, 187, 124, 0.4); + --text-normal: var(--text); + --text-muted: var(--soft-text); + --text-accent: var(--accent2-lite); + --text-accent-hover: var(--accent2); + --interactive-normal: var(--outer-bar); + --interactive-hover: var(--embed-bg); + --interactive-accent: var(--accent); + --interactive-accent-hover: var(--dark-accent); + --scrollbar-bg: var(--bg); + --scrollbar-thumb-bg: var(--tag); + --text-faint: #886b5e; + --adcs: #7bad88; + /*#6eca85*/ + --adcs-2: #614d3e; + /*#5c3e2a*/ + --adcs-3: #fc9c42; + /*#f54d4d*/ + --adcs-hr: #8f3434; + /*#c06714*/ + --note: #392f2b; + --outer-bar: #292321; + --side-bar: var(--note); + --code-bg: var(--aside-bg); + --dark-sidebar: #1d1714; + --headers: #7bad88; + --th: #63816d; + --accent: #ad4646; + --tag: #8f3434; + --accent2-lite: #e39b59; + --accent2: var(--hr); + --bttn: #964242; + --dark-accent: #0f0c0b; + --bg: var(--hr); + --table: var(--hr); + --hr: #614d3e; + --inactive: var(--hr); + --td: #29232170; + --outline: #100c0b; + --footnote: #886b5e; + --soft-text: #a78a7d; + --code-text: #fc9c42; + --embed-bg: var(--outer-bar); + --aside-bg: #312824; + --scrollbar-bg: #292321; + --scrollbar-thumb-bg: var(--hr); + --indentation-guide: var(--table); + --indentation-guide-active: var(--accent); +} + +.theme-light.advt, +.theme-light .advt { + --background-primary: var(--note); + --background-modifier-form-field-highlighted: rgba(249, 133, 25, 0.295); + --text-selection: rgba(241, 173, 105, 0.25); + --text-highlight-bg-active: rgba(255, 187, 124, 0.4); + --text-normal: var(--text); + --text-faint: var(--soft-text); + --text-muted: var(--soft-text); + --text-accent: var(--accent2-lite); + --text-accent-hover: var(--accent2); + --interactive-normal: var(--outer-bar); + --interactive-hover: var(--embed-bg); + --interactive-accent: var(--accent); + --interactive-accent-hover: var(--dark-accent); + background: var(--note); + color: var(--text); + --adcs: #6eca85; + --adcs-2: #83644f; + --adcs-3: #fc9637; + --adcs-hr: #f54d4d; + --note: #6e5849; + --outer-bar: #503d35; + --outline: #4e3a31; + --embed-bg: #58433a; + --bg: #796258; + --dark-sidebar: #46342e; + --aside-bg: #614d3f; + --code-bg: #624a40; + --accent: #6eca85; + --lite-accent: #f0db9e; + --accent2: #bf5e5e; + --dark-accent: #5d4738; + --bttn: #c5864b; + --table: #5e463d; + --lines: #a87d68; + --text: #eeeae8; + --soft-text: #c0a195; + --headers: #aadb7f; + --code-text: var(--headers); + --accent2-lite: #ffb765; + --footnote: #9c796b; + --inactive: var(--footnote); + --file-icon-color: #ad8271; + --file-icon-color: var(--text); + --i-at: #f7d26b; + --td: #49383170; + --th: #739258; + --hr: var(--table); + --scrollbar-bg: #9d755580; + --scrollbar-thumb-bg: var(--accent); + --indentation-guide: var(--lines); + --indentation-guide-active: var(--accent); + --ch-class: #fc9637; + --ch-delimiter: var(--lines); + --ch-num: var(--accent); + --ch-keyword: var(--lite-accent); + --ch-string: var(--headers); +} + +.theme-dark.accent-color, +.theme-dark .accent-color { + --accent: hsl(var(--accent-h), var(--accent-s), var(--accent-l)); + --lite-accent: hsl(var(--accent-h), var(--accent-s), 70%); + --dark-accent: hsl(var(--accent-h), var(--accent-s), 30%); + --deep-dark-accent: hsl(var(--accent-h), 20%, 10%); + --accent2: hsl(var(--accent-h), var(--accent-s), 50%); + --accent2-lite: hsl(var(--accent-h), 50%, 70%); + --headers: hsl(var(--accent-h), var(--accent-s), 50%); + --soft-text: hsl(var(--accent-h), 20%, 55%); + --faint-text: hsl(var(--accent-h), 20%, 45%); + --code-text: hsl(var(--accent-h), var(--accent-s), 60%); + --inactive: hsla(var(--accent-h), var(--accent-s), 75%, 40%); + --tag-text: var(--headers); + --folder: var(--accent); + --folder-open: var(--lite-accent); + --file-icon-color: hsl(var(--accent-h), 20%, 30%); + --bg: hsl(var(--accent-h), 0%, 17%); + --code-bg: hsl(var(--accent-h), 20%, 15%); + --dark-sidebar: hsl(var(--accent-h), 20%, 7%); + --outer-bar: hsl(var(--accent-h), 10%, 5%); + --note: hsl(var(--accent-h), 0%, 10%); + --table: hsl(var(--accent-h), 20%, 24%); + --hr: hsl(var(--accent-h), 20%, 25%); + --hr-icon-color: var(--accent2); + --lines: hsl(var(--accent-h), 20%, 25%); + --highlight: hsla(var(--accent-h), var(--accent-s), var(--accent-l), 30%); + --hvr: hsla(var(--accent-h), var(--accent-s), var(--accent-l), 40%); + --hvr-active: hsla(var(--accent-h), var(--accent-s), var(--accent-l), 30%); + --theme-rainbow-1: hsl(var(--accent-h), var(--accent-s), 60%); + --theme-rainbow-2: hsl(var(--accent-h), var(--accent-s), 50%); + --theme-rainbow-3: hsl(var(--accent-h), var(--accent-s), 30%); + --theme-rainbow-4: hsl(var(--accent-h), var(--accent-s), 20%); + --theme-rainbow-5: hsl(var(--accent-h), var(--accent-s), 10%); + --theme-rainbow-6: hsl(var(--accent-h), var(--accent-s), 5%); +} + +.theme-light.accent-color, +.theme-light .accent-color { + --accent: hsl(var(--accent-h), var(--accent-s), var(--accent-l)); + --lite-accent: hsl(var(--accent-h), var(--accent-s), 50%); + --dark-accent: hsl(var(--accent-h), var(--accent-s), 40%); + --deep-dark-accent: hsl(var(--accent-h), 20%, 10%); + --accent2: hsl(var(--accent-h), var(--accent-s), 50%); + --accent2-lite: hsl(var(--accent-h), var(--accent-s), 70%); + --headers: hsl(var(--accent-h), var(--accent-s), 50%); + --soft-text: hsl(var(--accent-h), 20%, 55%); + --faint-text: hsl(var(--accent-h), 20%, 45%); + --code-text: hsl(var(--accent-h), var(--accent-s), 50%); + --inactive: hsla(var(--accent-h), var(--accent-s), 80%); + --tag-text: var(--headers); + --folder: var(--accent); + --folder-open: var(--lite-accent); + --file-icon-color: hsl(var(--accent-h), 20%, 30%); + --bg: hsl(var(--accent-h), var(--accent-s), 85%); + --code-bg: hsl(var(--accent-h), var(--accent-s), 90%); + --dark-sidebar: hsl(var(--accent-h), 10%, 90%); + --outer-bar: hsl(var(--accent-h), 10%, 92%); + --note: hsl(var(--accent-h), 0%, 94%); + --td: hsla(var(--accent-h), var(--accent-s), 50%, 10%); + --table: hsl(var(--accent-h), 20%, 80%); + --hr: hsl(var(--accent-h), 20%, 85%); + --hr-icon-color: var(--accent2); + --lines: hsl(var(--accent-h), 20%, 80%); + --outline: hsla(var(--accent-h), var(--accent-s), 80%); + --highlight: hsla(var(--accent-h), var(--accent-s), var(--accent-l), 20%); + --hvr: hsla(var(--accent-h), var(--accent-s), var(--accent-l), 30%); + --hvr-active: hsla(var(--accent-h), var(--accent-s), var(--accent-l), 50%); + --theme-rainbow-1: hsl(var(--accent-h), var(--accent-s), 60%); + --theme-rainbow-2: hsl(var(--accent-h), var(--accent-s), 50%); + --theme-rainbow-3: hsl(var(--accent-h), var(--accent-s), 30%); + --theme-rainbow-4: hsl(var(--accent-h), var(--accent-s), 20%); + --theme-rainbow-5: hsl(var(--accent-h), var(--accent-s), 10%); + --theme-rainbow-6: hsl(var(--accent-h), var(--accent-s), 0%); +} + +.its.its { + --font-default: "Inter", -apple-system, BlinkMacSystemFont, "Segoe UI", Roboto, Helvetica, Arial, sans-serif, "Apple Color Emoji", "Segoe UI Emoji", "Segoe UI Symbol", "Microsoft YaHei Light", sans-serif; + --font-monospace: "Fira Code", "Fira Code Medium", "Source Code Pro", monospace; + --hr-icon-symbol: ""; + --hr-icon-font: var(--its); +} + +.theme-dark.its, .theme-dark .its { + --deep-dark-accent: #3f1010; + --dark-accent: #652121; + --lite-accent: #c94d4d; + --accent: #863737; + --accent2: #42536e; + --accent2-lite: #61afef; + --accent-color: 134, 55, 55; + --side-bar: var(--note); + --side-bar-bg: var(--outer-bar); + --outer-bar: #0b0f13; + --dark-sidebar: #0d1014; + --bttn: var(--dark-accent); + --input-bg: rgba(0, 0, 0, 0.3); + --selected-rgb: 168, 60, 60; + --hvr: rgba(168, 60, 60, 0.4); + --hvr2: var(--highlight); + --hvr-active: rgba(212, 47, 47, 0.4); + --highlight: #7a141466; + --bg: #252c36; + --fg: #cfd7dd; + --success-bg: #32603e; + --failure-bg: #772d2d; + --inactive: #586477; + --outline: var(--outer-bar); + --folder: var(--accent); + --folder-open: #e05858; + --file-icon-color: #586477; + --file-icon-color: var(--inactive); + --lines: var(--hr); + --note: #1a1e24; + --note-rgb: 26, 30, 36; + --text: #bccad8; + --headers: #c14343; + --soft-text: #97a1b9; + --faint-text: #4e5b6f; + --code-text: #fa4545; + --footnote: #63778f; + --code-bg: #232831; + --embed-bg: var(--dark-sidebar); + --aside-bg: #11151d; + --th: var(--dark-accent); + --th-text: var(--text-dl); + --td: #06080c60; + --drop-shadow: #06080c60; + --tag: var(--dark-accent); + --tag-text: #d04e4e; + --table: #283345; + --hr: #2f3b4d; + --i-at: #bf5e5e; + --progress: var(--accent); + --progress-bg: var(--bg); + --graph-bg: var(--outer-bar); + --graph-lines: rgba(var(--selected-rgb), .2); + --graph-node: var(--text); + --graph-fill: var(--headers); + --graph-404: #727e93; + --graph-img: #4c78cc; + --graph-tag: var(--headers); + --graph-focused: var(--text-highlight-bg-active); + --theme-rainbow-1: #7c2929; + --theme-rainbow-2: #652121; + --theme-rainbow-3: #471d1d; + --theme-rainbow-4: #381919; + --theme-rainbow-5: #424c61; + --theme-rainbow-6: #2e333d; +} + +.theme-light.its, .theme-light .its { + --deep-dark-accent: #2f1010; + --dark-accent: #c35c5c; + --lite-accent: #cd2626; + --accent: #912e2e; + --accent2: #aac1d3; + --accent2-lite: #5599d0; + --side-bar: var(--note); + --side-bar-bg: var(--outer-bar); + --outer-bar: #eef3fd; + --dark-sidebar: #f1f5ff; + --bttn: var(--headers); + --input-bg: var(--td); + --selected-rgb: 52, 123, 237; + --hvr: rgba(255, 0, 0, 0.212); + --hvr2: var(--highlight); + --hvr-active:rgba(253, 115, 115, 0.4); + --highlight: rgba(229, 149, 149, 0.37); + --bg: #e1e9f6; + --fg: var(--accent); + --success-bg: #599049; + --failure-bg: #772d2d; + --inactive: #a6bbde; + --outline: var(--bg); + --folder: var(--accent); + --file-icon-color: #7e8ea3; + --file-icon-color: var(--inactive); + --folder-open: #ce6d6d; + --lines: #b5c2d8; + --icons: #d04e4e; + --note: #f8fbff; + --note-rgb: 248, 251, 255; + --text: #30353a; + --headers: #c14343; + --faint-text: #4e5b6f; + --soft-text: #697580; + --code-text: #ea4262; + --footnote: #8996a0; + --code-bg: var(--embed-bg); + --embed-bg: var(--dark-sidebar); + --aside-bg: var(--dark-sidebar); + --th: var(--headers); + --th-text: var(--text-dl); + --td: #d0ddef62; + --drop-shadow: #d0ddef62; + --tag: #c65656; + --tag-text: var(--lite-accent); + --table: #ccd6eb; + --hr: #d6deea; + --i-at: var(--folder); + --progress: var(--accent); + --progress-bg: var(--bg); + --graph-bg: var(--note); + --graph-lines: #e4e7f8; + --graph-node: var(--headers); + --graph-fill: var(--folder); + --graph-404: #727e93; + --graph-img: #4c78cc; + --graph-tag: #000000; + --graph-focused: var(--text-highlight-bg-active); + --theme-rainbow-1: #bb5555; + --theme-rainbow-2: #a53f3f; + --theme-rainbow-3: #862c2c; + --theme-rainbow-4: #662828; + --theme-rainbow-5: #697795; + --theme-rainbow-6: #a4aec2; +} + +.slrvb-g, +.slrvb-b, +.wotc-beyond, +.dnd, +.pathfinder, +.notion, +.drwn, +.its-d, +.mini, +.nebula, +.s-d, +.t-d, +.nord, +.accent-color, +.its { + --h1-font: var(--font); + --h2-font: var(--font); + --h3-font: var(--font); + --h4-font: var(--font); + --h5-font: var(--font); + --h6-font: var(--font); + --h1-weight: var(--header-weight); + --h2-weight: var(--header-weight); + --h3-weight: var(--header-weight); + --h4-weight: var(--header-weight); + --h5-weight: var(--header-weight); + --h6-weight: var(--header-weight); + --h1-color: var(--headers); + --h2-color: var(--headers); + --h3-color: var(--headers); + --h4-color: var(--headers); + --h5-color: var(--headers); + --h6-color: var(--headers); + --illusion-h1-background: var(--theme-rainbow-1); + --illusion-h2-background: var(--theme-rainbow-2); + --illusion-h3-background: var(--theme-rainbow-3); + --illusion-h4-background: var(--theme-rainbow-4); + --illusion-h5-background: var(--theme-rainbow-5); + --illusion-h6-background: var(--theme-rainbow-6); + --h1-border-line-height: var(--header-border-line-height); + --h2-border-line-height: var(--header-border-line-height); + --h3-border-line-height: var(--header-border-line-height); + --h4-border-line-height: var(--header-border-line-height); + --h5-border-line-height: var(--header-border-line-height); + --h6-border-line-height: var(--header-border-line-height); + --header-border-line-color: var(--table); + --h1-border-line-color: var(--header-border-line-color); + --h2-border-line-color: var(--header-border-line-color); + --h3-border-line-color: var(--header-border-line-color); + --h4-border-line-color: var(--header-border-line-color); + --h5-border-line-color: var(--header-border-line-color); + --h6-border-line-color: var(--header-border-line-color); + --h1-border-left-color: var(--h1-border-line-color); + --h2-border-left-color: var(--h2-border-line-color); + --h3-border-left-color: var(--h3-border-line-color); + --h4-border-left-color: var(--h4-border-line-color); + --h5-border-left-color: var(--h5-border-line-color); + --h6-border-left-color: var(--h6-border-line-color); + --h1-border-right-color: var(--h1-border-line-color); + --h2-border-right-color: var(--h2-border-line-color); + --h3-border-right-color: var(--h3-border-line-color); + --h4-border-right-color: var(--h4-border-line-color); + --h5-border-right-color: var(--h5-border-line-color); + --h6-border-right-color: var(--h6-border-line-color); + --font-print-override: var(--font-default); + --icon-color: var(--soft-text); + --metadata-icon-color: var(--icon-color); + --metadata-button-text-color: var(--inactive); + --inline-title-color: var(--headers); + --inline-title-font: var(--h1-font); + --inline-title-weight: var(--h1-weight); + --link-color: var(--accent2-lite); + --link-color-hover: var(--lite-accent); + --link-external-color: var(--text-accent); + --link-external-color-hover: var(--text-accent-hover); + --link-unresolved-color: var(--inactive); + --embed-border-left-color: var(--headers); + --embed-border-color-hover: var(--outline); + --embed-border-left-color-hover: var(--embed-border-left-color); + --embed-border-right-color-hover: var(--embed-border-color-hover); + --embed-border-top-color-hover: var(--embed-border-color-hover); + --embed-border-bottom-color-hover: var(--embed-border-color-hover); + --code-normal: var(--code-text); + --code-background: var(--code-bg); + --checkbox-color: var(--accent); + --checkbox-border-color: var(--accent); + --checkbox-color-hover: var(--dark-accent); + --lines: var(--hr); + --indentation-guide-color: var(--lines); + --indentation-guide-color-active: var(--accent); + --list-color-1: var(--indentation-guide-color); + --list-color-2: var(--indentation-guide-color); + --list-color-3: var(--indentation-guide-color); + --list-color-4: var(--indentation-guide-color); + --list-color-5: var(--indentation-guide-color); + --list-color-6: var(--indentation-guide-color); + --list-marker-color: var(--accent); + --list-numbered-color: var(--lite-accent); + --th: var(--dark-accent); + --table-header-background: var(--th); + --table-header-background-hover: var(--accent); + --table-column-alt-background: var(--td); + --table-row-alt-background: var(--td); + --table-row-background-hover: var(--highlight); + --table-border-color: var(--note); + --dataview-th-count-color: var(--dataview-th-color); + --dataview-th-background: var(--outer-bar); + --dataview-th-alt-color: rgba(var(--accent-color), 10%); + --dataview-th-color: var(--headers); + --dataview-th-border-bottom: 2px solid var(--headers); + --tag: var(--dark-accent); + --tag-background: var(--tag); + --tag-background-hover: var(--accent); + --tag-border-color: var(--tag); + --tag-border-color-hover: var(--accent); + --embed-border-left: 2px solid var(--headers); + --hr-color: var(--hr); + --hr-icon-color: var(--headers); + --hr-icon-background: var(--note); + --blockquote-border-color: var(--bg); + --blockquote-background-color: var(--embed-bg); + --folder: var(--headers); + --nav-item-background-hover: var(--dark-accent); + --sidebar-tab-background-color-hover: var(--accent); + --latex-color: var(--lite-accent); + --latex-format-color: var(--inactive); + --latex-syntax-color: var(--soft-text); + --i-at: var(--soft-text); + background-color: var(--background-primary); + --background-primary: var(--note); + --background-primary-alt: var(--deep-dark-accent); + --background-secondary: var(--side-bar); + --background-secondary-alt: var(--outer-bar); + --background-modifier-border: var(--table); + --background-modifier-hover: var(--hvr-active); + --background-modifier-form-field: var(--td); + --text-highlight-bg: var(--hvr); + --text-highlight-bg-active: var(--hvr-active); + --text-selection: var(--highlight); + --text-normal: var(--text); + --text-muted: var(--soft-text); + --text-accent: var(--accent2-lite); + --text-accent-hover: var(--accent2); + --interactive-normal: var(--outer-bar); + --interactive-hover: var(--inactive); + --interactive-accent: var(--dark-accent); + --interactive-accent-hover: var(--inactive); + --scrollbar-bg: var(--bg); + --scrollbar-thumb-bg: var(--tag); + --graph-bg: var(--note); + --graph-lines: var(--highlight); + --graph-node: var(--text); + --graph-fill: var(--lite-accent); + --graph-404: var(--inactive); + --graph-img: var(--accent2); + --graph-tag: var(--dark-accent); + --graph-focused: var(--accent2-lite); +} diff --git a/Perlite/perlite/Demo/.obsidian/themes/Minimal/manifest.json b/Perlite/perlite/Demo/.obsidian/themes/Minimal/manifest.json new file mode 100644 index 0000000..247f8df --- /dev/null +++ b/Perlite/perlite/Demo/.obsidian/themes/Minimal/manifest.json @@ -0,0 +1,8 @@ +{ + "name": "Minimal", + "version": "7.4.7", + "minAppVersion": "1.5.0", + "author": "@kepano", + "authorUrl": "https://twitter.com/kepano", + "fundingUrl": "https://www.buymeacoffee.com/kepano" +} diff --git a/Perlite/perlite/Demo/.obsidian/themes/Minimal/theme.css b/Perlite/perlite/Demo/.obsidian/themes/Minimal/theme.css new file mode 100644 index 0000000..2edeb30 --- /dev/null +++ b/Perlite/perlite/Demo/.obsidian/themes/Minimal/theme.css @@ -0,0 +1,2158 @@ +/* --------------------------------------------------------------------------- + +Minimal Theme by @kepano + +User interface replacement for Obsidian. + +Designed to be used with the Minimal Theme Settings +plugin and the Hider plugin. + +Sponsor my work: +https://www.buymeacoffee.com/kepano + +Readme: +https://github.com/kepano/obsidian-minimal + +----------------------------------------------------------------------------- + +MIT License + +Copyright (c) 2020-2023 Stephan Ango (@kepano) + +Permission is hereby granted, free of charge, to any person obtaining a copy +of this software and associated documentation files (the "Software"), to deal +in the Software without restriction, including without limitation the rights +to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +copies of the Software, and to permit persons to whom the Software is +furnished to do so, subject to the following conditions: + +The above copyright notice and this permission notice shall be included in +all copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE +SOFTWARE. + +*/ +body{--font-editor-theme:-apple-system,BlinkMacSystemFont,"Segoe UI",Roboto,Inter,Ubuntu,sans-serif;--font-editor:var(--font-editor-override),var(--font-text-override),var(--font-editor-theme)}body{--blockquote-style:normal;--blockquote-color:var(--text-muted);--blockquote-border-thickness:1px;--blockquote-border-color:var(--quote-opening-modifier);--embed-block-shadow-hover:none;--font-ui-smaller:11px;--normal-weight:400;--bold-weight:600;--link-weight:inherit;--inline-title-margin-bottom:1rem;--h1-size:1.125em;--h2-size:1.05em;--h3-size:1em;--h4-size:0.90em;--h5-size:0.85em;--h6-size:0.85em;--h1-weight:600;--h2-weight:600;--h3-weight:500;--h4-weight:500;--h5-weight:500;--h6-weight:400;--h1-variant:normal;--h2-variant:normal;--h3-variant:normal;--h4-variant:normal;--h5-variant:small-caps;--h6-variant:small-caps;--h1-style:normal;--h2-style:normal;--h3-style:normal;--h4-style:normal;--h5-style:normal;--h6-style:normal;--line-width:40rem;--line-height:1.5;--line-height-normal:var(--line-height);--max-width:88%;--max-col-width:18em;--icon-muted:0.5;--nested-padding:1.1em;--folding-offset:32px;--list-edit-offset:0.5em;--list-indent:2em;--list-spacing:0.075em;--input-height:32px;--header-height:40px;--metadata-label-width:9rem;--metadata-label-font-size:var(--font-adaptive-small);--metadata-input-font-size:var(--font-adaptive-small);--mobile-left-sidebar-width:280pt;--mobile-right-sidebar-width:240pt;--top-left-padding-y:0px;--image-muted:0.7;--image-radius:4px;--heading-spacing:2em;--p-spacing:1.75rem;--border-width:1px;--table-border-width:var(--border-width);--table-selection:var(--text-selection);--table-selection-border-color:var(--text-accent);--table-selection-border-width:0px;--table-selection-border-radius:0px;--table-drag-handle-background-active:var(--text-selection);--table-drag-handle-color-active:var(--text-accent);--table-add-button-border-width:0px;--file-margins:var(--size-4-2) var(--size-4-12)}.mod-macos{--top-left-padding-y:24px}.is-phone{--metadata-label-font-size:var(--font-adaptive-smaller);--metadata-input-font-size:var(--font-adaptive-smaller)}@media only screen and (-webkit-min-device-pixel-ratio:2),only screen and (min-device-pixel-ratio:2){.is-phone{--border-width:0.75px}}body{--base-h:0;--base-s:0%;--base-l:96%;--accent-h:201;--accent-s:17%;--accent-l:50%}.theme-dark,.theme-light{--color-red-rgb:208,66,85;--color-orange-rgb:213,118,63;--color-yellow-rgb:229,181,103;--color-green-rgb:168,195,115;--color-cyan-rgb:115,187,178;--color-blue-rgb:108,153,187;--color-purple-rgb:158,134,200;--color-pink-rgb:176,82,121;--color-red:#d04255;--color-orange:#d5763f;--color-yellow:#e5b567;--color-green:#a8c373;--color-cyan:#73bbb2;--color-blue:#6c99bb;--color-purple:#9e86c8;--color-pink:#b05279}.theme-light,.theme-light.minimal-default-light,body .excalidraw{--bg1:white;--bg2:hsl( var(--base-h), var(--base-s), var(--base-l) );--bg3:hsla( var(--base-h), var(--base-s), calc(var(--base-l) - 50%), 0.12 );--ui1:hsl( var(--base-h), var(--base-s), calc(var(--base-l) - 6%) );--ui2:hsl( var(--base-h), var(--base-s), calc(var(--base-l) - 12%) );--ui3:hsl( var(--base-h), var(--base-s), calc(var(--base-l) - 20%) );--tx1:hsl( var(--base-h), var(--base-s), calc(var(--base-l) - 90%) );--tx2:hsl( var(--base-h), calc(var(--base-s) - 20%), calc(var(--base-l) - 45%) );--tx3:hsl( var(--base-h), calc(var(--base-s) - 10%), calc(var(--base-l) - 25%) );--tx4:hsl( var(--base-h), calc(var(--base-s) - 10%), calc(var(--base-l) - 60%) );--ax1:hsl( var(--accent-h), var(--accent-s), var(--accent-l) );--ax2:hsl( var(--accent-h), var(--accent-s), calc(var(--accent-l) - 8%) );--ax3:hsl( var(--accent-h), var(--accent-s), calc(var(--accent-l) + 6%) );--hl1:hsla( var(--accent-h), 50%, calc(var(--base-l) - 20%), 30% );--hl2:rgba(255, 225, 0, 0.5);--sp1:white}.excalidraw.theme--dark,.theme-dark,.theme-dark.minimal-default-dark,.theme-light.minimal-light-contrast .titlebar,.theme-light.minimal-light-contrast.minimal-status-off .status-bar{--accent-l:60%;--base-l:15%;--bg1:hsl( var(--base-h), var(--base-s), var(--base-l) );--bg2:hsl( var(--base-h), var(--base-s), calc(var(--base-l) - 2%) );--bg3:hsla( var(--base-h), var(--base-s), calc(var(--base-l) + 40%), 0.12 );--ui1:hsl( var(--base-h), var(--base-s), calc(var(--base-l) + 6%) );--ui2:hsl( var(--base-h), var(--base-s), calc(var(--base-l) + 12%) );--ui3:hsl( var(--base-h), var(--base-s), calc(var(--base-l) + 20%) );--tx1:hsl( var(--base-h), calc(var(--base-s) - 10%), calc(var(--base-l) + 67%) );--tx2:hsl( var(--base-h), calc(var(--base-s) - 20%), calc(var(--base-l) + 45%) );--tx3:hsl( var(--base-h), calc(var(--base-s) - 10%), calc(var(--base-l) + 20%) );--tx4:hsl( var(--base-h), calc(var(--base-s) - 10%), calc(var(--base-l) + 50%) );--ax1:hsl( var(--accent-h), var(--accent-s), var(--accent-l) );--ax2:hsl( var(--accent-h), var(--accent-s), calc(var(--accent-l) + 8%) );--ax3:hsl( var(--accent-h), var(--accent-s), calc(var(--accent-l) - 5%) );--hl1:hsla( var(--accent-h), 50%, 40%, 30% );--hl2:rgba(255, 177, 80, 0.3);--sp1:white}.theme-light.minimal-light-white{--background-primary:white;--background-secondary:white;--background-secondary-alt:white;--ribbon-background:white;--titlebar-background:white;--bg1:white}.theme-dark.minimal-dark-black{--base-d:0%;--titlebar-background:black;--background-primary:black;--background-secondary:black;--background-secondary-alt:black;--ribbon-background:black;--background-modifier-hover:hsl( var(--base-h), var(--base-s), calc(var(--base-d) + 10%));--tx1:hsl( var(--base-h), var(--base-s), calc(var(--base-d) + 75%) );--tx2:hsl( var(--base-h), var(--base-s), calc(var(--base-d) + 50%) );--tx3:hsl( var(--base-h), var(--base-s), calc(var(--base-d) + 25%) );--ui1:hsl( var(--base-h), var(--base-s), calc(var(--base-d) + 12%) );--ui2:hsl( var(--base-h), var(--base-s), calc(var(--base-d) + 20%) );--ui3:hsl( var(--base-h), var(--base-s), calc(var(--base-d) + 30%) )}.theme-light{--mono100:black;--mono0:white}.theme-dark{--mono100:white;--mono0:black}.theme-dark,.theme-light,.theme-light.minimal-light-contrast .titlebar,.theme-light.minimal-light-contrast.is-mobile .workspace-drawer.mod-left,.theme-light.minimal-light-contrast.minimal-status-off .status-bar{--background-modifier-accent:var(--ax3);--background-modifier-border-focus:var(--ui3);--background-modifier-border-hover:var(--ui2);--background-modifier-border:var(--ui1);--background-modifier-form-field-highlighted:var(--bg1);--background-modifier-form-field:var(--bg1);--background-modifier-success:var(--color-green);--background-modifier-hover:var(--bg3);--background-modifier-active-hover:var(--bg3);--background-primary:var(--bg1);--background-primary-alt:var(--bg2);--background-secondary:var(--bg2);--background-secondary-alt:var(--bg1);--background-table-rows:var(--bg2);--checkbox-color:var(--ax3);--code-normal:var(--tx1);--divider-color:var(--ui1);--frame-divider-color:var(--ui1);--icon-color-active:var(--tx1);--icon-color-focused:var(--tx1);--icon-color-hover:var(--tx2);--icon-color:var(--tx2);--icon-hex:var(--mono0);--interactive-accent-hover:var(--ax1);--interactive-accent:var(--ax3);--interactive-hover:var(--ui1);--list-marker-color:var(--tx3);--modal-border-color:var(--ui2);--nav-item-background-active:var(--bg3);--nav-item-background-hover:var(--bg3);--nav-item-color:var(--tx2);--nav-item-color-active:var(--tx1);--nav-item-color-hover:var(--tx1);--nav-collapse-icon-color:var(--tx2);--nav-collapse-icon-color-collapsed:var(--tx2);--nav-indentation-guide-color:var(--ui1);--prompt-border-color:var(--ui3);--quote-opening-modifier:var(--ui2);--ribbon-background:var(--bg2);--scrollbar-active-thumb-bg:var(--ui3);--scrollbar-bg:transparent;--scrollbar-thumb-bg:var(--ui1);--search-result-background:var(--bg1);--tab-text-color-focused-active:var(--tx1);--tab-outline-color:var(--ui1);--text-accent-hover:var(--ax2);--text-accent:var(--ax1);--text-blockquote:var(--tx2);--text-bold:var(--tx1);--text-code:var(--tx4);--text-error:var(--color-red);--text-faint:var(--tx3);--text-highlight-bg:var(--hl2);--text-italic:var(--tx1);--text-muted:var(--tx2);--text-normal:var(--tx1);--text-on-accent:var(--sp1);--text-selection:var(--hl1);--text-formatting:var(--tx3);--title-color-inactive:var(--tx2);--title-color:var(--tx1);--titlebar-background:var(--bg2);--titlebar-background-focused:var(--bg2);--titlebar-text-color-focused:var(--tx1);--workspace-background-translucent:hsla(var(--base-h),var(--base-s), var(--base-l), 0.7)}.theme-dark .view-actions,.theme-light .view-actions{--icon-color-active:var(--ax1)}.theme-light.minimal-light-contrast{--workspace-background-translucent:rgba(0,0,0,0.6)}.theme-light.minimal-light-contrast .theme-dark{--tab-container-background:var(--bg2);--ribbon-background-collapsed:var(--bg2)}.theme-light{--interactive-normal:var(--bg1);--interactive-accent-rgb:220,220,220;--active-line-bg:rgba(0,0,0,0.035);--background-modifier-cover:hsla(var(--base-h),calc(var(--base-s) - 70%),calc(var(--base-l) - 20%),0.5);--text-highlight-bg-active:rgba(0, 0, 0, 0.1);--background-modifier-error:rgba(255,0,0,0.14);--background-modifier-error-hover:rgba(255,0,0,0.08);--shadow-color:rgba(0, 0, 0, 0.1);--btn-shadow-color:rgba(0, 0, 0, 0.05)}.theme-dark{--interactive-normal:var(--bg3);--interactive-accent-rgb:66,66,66;--active-line-bg:rgba(255,255,255,0.04);--background-modifier-cover:hsla(var(--base-h),var(--base-s), calc(var(--base-l) - 12%), 0.5);--text-highlight-bg-active:rgba(255, 255, 255, 0.1);--background-modifier-error:rgba(255,20,20,0.12);--background-modifier-error-hover:rgba(255,20,20,0.18);--background-modifier-box-shadow:rgba(0, 0, 0, 0.3);--shadow-color:rgba(0, 0, 0, 0.3);--btn-shadow-color:rgba(0, 0, 0, 0.2)}.theme-light.minimal-light-white{--background-table-rows:var(--bg2)}.theme-light.minimal-light-tonal{--background-primary:var(--bg2);--background-primary-alt:var(--bg3);--background-table-rows:var(--bg3)}.theme-dark.minimal-dark-tonal{--ribbon-background:var(--bg1);--background-secondary:var(--bg1);--background-table-rows:var(--bg3)}.theme-dark.minimal-dark-black{--background-primary-alt:var(--bg3);--background-table-rows:var(--bg3);--modal-border:var(--ui2);--active-line-bg:rgba(255,255,255,0.085);--background-modifier-form-field:var(--bg3);--background-modifier-cover:hsla(var(--base-h),var(--base-s),calc(var(--base-d) + 8%),0.9);--background-modifier-box-shadow:rgba(0, 0, 0, 1)}body{--font-adaptive-normal:var(--font-text-size,var(--editor-font-size));--font-adaptive-small:calc(var(--font-ui-small) * 1.07);--font-adaptive-smaller:var(--font-ui-small);--font-adaptive-smallest:var(--font-ui-smaller);--line-width-wide:calc(var(--line-width) + 12.5%);--font-code:calc(var(--font-adaptive-normal) * 0.9);--table-text-size:calc(var(--font-adaptive-normal) * 0.875)}.minimal-dev-block-width .mod-root .workspace-leaf-content:after{display:flex;align-items:flex-end;content:"\00a0pane\00a0";font-size:12px;color:gray;font-family:var(--font-monospace);width:100%;max-width:100%;height:100vh;top:0;z-index:999;position:fixed;pointer-events:none}.minimal-dev-block-width.minimal-readable .mod-root .view-header:after{display:flex;align-items:flex-end;color:green;font-size:12px;font-family:var(--font-monospace);content:" ";width:var(--folding-offset);height:100vh;border-left:1px solid green;border-right:1px solid green;background-color:rgba(0,128,0,.1);top:0;left:max(calc(50% - var(--line-width)/ 2 - 1px),calc(50% - var(--max-width)/ 2 - 1px));z-index:999;position:fixed;pointer-events:none}.minimal-dev-block-width.minimal-readable-off .mod-root .view-header:after{display:flex;align-items:flex-end;color:green;font-size:12px;font-family:var(--font-monospace);content:" ";width:var(--folding-offset);height:100vh;border-left:1px solid green;border-right:1px solid green;background-color:rgba(0,128,0,.1);top:0;left:calc(50% - var(--max-width)/ 2 - 1px);z-index:999;position:fixed;pointer-events:none}.minimal-dev-block-width .mod-root .view-content:before{display:flex;align-items:flex-end;content:"\00a0max\00a0";font-size:12px;color:red;width:var(--max-width);height:100vh;border-left:1px solid red;border-right:1px solid red;top:0;left:50%;transform:translate(-50%,0);z-index:999;position:fixed;pointer-events:none}.minimal-dev-block-width.minimal-readable .mod-root .workspace-leaf-content:before{display:flex;align-items:flex-end;content:"\00a0wide\00a0";font-size:12px;color:orange;font-family:var(--font-monospace);width:var(--line-width-wide);max-width:var(--max-width);height:100vh;border-left:1px solid orange;border-right:1px solid orange;background-color:rgba(255,165,0,.05);top:0;left:50%;transform:translate(-50%,0);z-index:999;position:fixed;pointer-events:none}.minimal-dev-block-width.minimal-readable .mod-root .view-content:after{display:flex;align-items:flex-end;color:#00f;font-size:12px;font-family:var(--font-monospace);content:"\00a0normal";width:var(--line-width);max-width:var(--max-width);height:100vh;border-left:1px solid #00f;border-right:1px solid #00f;background-color:rgba(0,0,255,.08);top:0;left:50%;transform:translate(-50%,0);z-index:999;position:fixed;pointer-events:none}.CodeMirror-wrap>div>textarea{opacity:0}.markdown-source-view.mod-cm6 hr{border-width:2px}.mod-cm6 .cm-editor .cm-line{padding-left:0;padding-right:0}.cm-editor .cm-content{padding-top:.5em}.markdown-source-view{color:var(--text-normal)}.markdown-source-view.mod-cm6 .cm-sizer{display:block}.markdown-source-view.mod-cm6 .cm-scroller{padding-left:0;padding-right:0}.cm-s-obsidian .cm-line.HyperMD-header{padding-top:calc(var(--p-spacing)/ 2)}.markdown-rendered .mod-header+div>*{margin-block-start:0}body :not(.canvas-node) .markdown-source-view.mod-cm6 .cm-gutters{position:absolute!important;z-index:0;margin-inline-end:0}body :not(.canvas-node) .markdown-source-view.mod-cm6.is-rtl .cm-gutters{right:0}body{--line-number-color:var(--text-faint);--line-number-color-active:var(--text-muted)}.markdown-source-view.mod-cm6 .cm-gutters{color:var(--line-number-color)!important}.markdown-source-view.mod-cm6 .cm-editor .cm-gutterElement.cm-active .cm-heading-marker,.markdown-source-view.mod-cm6 .cm-editor .cm-lineNumbers .cm-gutterElement.cm-active{color:var(--line-number-color-active)}.cm-editor .cm-lineNumbers{background-color:var(--gutter-background)}.cm-editor .cm-lineNumbers .cm-gutterElement{min-width:var(--folding-offset);padding-inline-end:0.5em}.is-rtl .cm-editor .cm-lineNumbers .cm-gutterElement{text-align:left}@media (max-width:400pt){.cm-editor .cm-lineNumbers .cm-gutterElement{padding-inline-end:4px;padding-inline-start:8px}}.cm-editor .cm-lineNumbers .cm-gutterElement{font-variant-numeric:tabular-nums}.cm-editor .cm-gutterElement.cm-active .cm-heading-marker,.cm-editor .cm-lineNumbers .cm-gutterElement.cm-active{color:var(--text-muted)}.markdown-source-view.mod-cm6 .edit-block-button{cursor:var(--cursor);color:var(--text-faint);background-color:var(--background-primary);top:0;opacity:0;transition:opacity .2s;padding:4px 4px 4px 9px}.markdown-source-view.mod-cm6 .edit-block-button svg{margin:0!important}.markdown-source-view.mod-cm6.is-live-preview.is-readable-line-width .cm-embed-block>.edit-block-button{width:30px!important;padding-left:7px!important}.is-live-preview:not(.is-readable-line-width) .cm-embed-block>.edit-block-button{padding-left:0!important;margin-left:0!important;padding:4px}.markdown-source-view.mod-cm6 .edit-block-button:hover{background-color:var(--background-primary);color:var(--text-muted)}.markdown-source-view.mod-cm6 .edit-block-button svg{opacity:1}.markdown-source-view.mod-cm6 .edit-block-button:hover svg{opacity:1}.markdown-source-view.mod-cm6 .cm-embed-block{padding:0;border:0;border-radius:0}.markdown-source-view.mod-cm6 .cm-embed-block:hover{border:0}.metadata-container{--input-height:2rem}.markdown-source-view .metadata-container{transform:translateX(-4px)}body.metadata-heading-off .metadata-properties-heading{display:none}.metadata-add-property-off .mod-root .metadata-add-button{display:none}.metadata-dividers{--metadata-divider-width:1px;--metadata-gap:0px}.metadata-icons-off .workspace-leaf-content[data-type=all-properties] .tree-item-inner{margin-left:-16px}.metadata-icons-off .workspace-leaf-content[data-type=all-properties] .tree-item-icon{display:none}.metadata-icons-off .metadata-property-icon{display:none}figure{margin-inline-start:0;margin-inline-end:0}.markdown-preview-view .mod-highlighted{transition:background-color .3s ease;background-color:var(--text-selection);color:inherit}.inline-title{padding-top:16px}.minimal-status-off .status-bar{--status-bar-position:static;--status-bar-radius:0;--status-bar-border-width:1px 0 0 0;--status-bar-background:var(--background-secondary);--status-bar-border-color:var(--ui1)}body:not(.minimal-status-off) .status-bar{background-color:var(--background-primary);--status-bar-border-width:0}.status-bar{transition:color .2s linear;color:var(--text-faint);font-size:var(--font-adaptive-smallest)}.status-bar .sync-status-icon.mod-success,.status-bar .sync-status-icon.mod-working{color:var(--text-faint)}.status-bar:hover,.status-bar:hover .sync-status-icon.mod-success,.status-bar:hover .sync-status-icon.mod-working{color:var(--text-muted);transition:color .2s linear}.status-bar .plugin-sync:hover .sync-status-icon.mod-success,.status-bar .plugin-sync:hover .sync-status-icon.mod-working{color:var(--text-normal)}.status-bar .status-bar-item{cursor:var(--cursor)!important}.status-bar .status-bar-item.cMenu-statusbar-button:hover,.status-bar .status-bar-item.mod-clickable:hover,.status-bar .status-bar-item.plugin-editor-status:hover,.status-bar .status-bar-item.plugin-sync:hover{text-align:center;background-color:var(--background-modifier-hover)!important}.tab-stack-top-flipped{--tab-stacked-text-transform:rotate(180deg);--tab-stacked-text-align:right}.tab-stack-center{--tab-stacked-text-align:center}.tab-stack-center-flipped{--tab-stacked-text-transform:rotate(180deg);--tab-stacked-text-align:center}.tab-stack-bottom{--tab-stacked-text-transform:rotate(180deg)}.tab-stack-bottom-flipped{--tab-stacked-text-align:right}.view-header-title,.view-header-title-parent{text-overflow:ellipsis}.view-header-title-container:not(.mod-at-end):after{display:none}body:not(.is-mobile) .view-actions .view-action:last-child{margin-left:-1px}.minimal-focus-mode .workspace-ribbon:not(.is-collapsed)~.mod-root .view-header:hover .view-actions,.mod-right.is-collapsed~.mod-root .view-header:hover .view-actions,.view-action.is-active:hover,.workspace-ribbon.mod-left.is-collapsed~.mod-root .view-header:hover .view-actions,body:not(.minimal-focus-mode) .workspace-ribbon:not(.is-collapsed)~.mod-root .view-actions{opacity:1;transition:opacity .25s ease-in-out}.view-header-title-container{opacity:0;transition:opacity .1s ease-in-out}.view-header-title-container:focus-within{opacity:1;transition:opacity .1s ease-in-out}.view-header:hover .view-header-title-container,.workspace-tab-header-container:hover+.workspace-tab-container .view-header-title-container{opacity:1;transition:opacity .1s ease-in-out}.is-phone .view-header-title-container,.minimal-tab-title-visible .view-header-title-container{opacity:1}.minimal-tab-title-hidden .view-header-title-container{opacity:0}.minimal-tab-title-hidden .view-header-title-container:focus-within{opacity:1;transition:opacity .1s ease-in-out}.minimal-tab-title-hidden .view-header:hover .view-header-title-container,.minimal-tab-title-hidden .workspace-tab-header-container:hover+.workspace-tab-container .view-header-title-container{opacity:0}body.window-title-off .titlebar-text{display:none}.titlebar-button-container.mod-right{background-color:transparent!important}.is-hidden-frameless.theme-dark:not(.minimal-dark-black):not(.colorful-frame),.is-hidden-frameless.theme-light:not(.minimal-light-tonal):not(.colorful-frame):not(.minimal-light-white){--titlebar-background:var(--bg1)}.is-hidden-frameless.theme-dark:not(.minimal-dark-black):not(.colorful-frame).is-focused .sidebar-toggle-button.mod-right,.is-hidden-frameless.theme-dark:not(.minimal-dark-black):not(.colorful-frame).is-focused .workspace-ribbon.mod-left.is-collapsed,.is-hidden-frameless.theme-dark:not(.minimal-dark-black):not(.colorful-frame).is-focused .workspace-tabs.mod-top,.is-hidden-frameless.theme-light:not(.minimal-light-tonal):not(.colorful-frame):not(.minimal-light-white).is-focused .sidebar-toggle-button.mod-right,.is-hidden-frameless.theme-light:not(.minimal-light-tonal):not(.colorful-frame):not(.minimal-light-white).is-focused .workspace-ribbon.mod-left.is-collapsed,.is-hidden-frameless.theme-light:not(.minimal-light-tonal):not(.colorful-frame):not(.minimal-light-white).is-focused .workspace-tabs.mod-top{--titlebar-background-focused:var(--bg1)}.is-hidden-frameless.theme-dark:not(.minimal-dark-black):not(.colorful-frame):not(.minimal-dark-tonal):not(.minimal-light-white) .workspace-ribbon.mod-left:not(.is-collapsed),.is-hidden-frameless.theme-light:not(.minimal-light-tonal):not(.colorful-frame):not(.minimal-light-white):not(.minimal-dark-tonal):not(.minimal-light-white) .workspace-ribbon.mod-left:not(.is-collapsed){--titlebar-background:var(--bg2)}.mod-macos.is-hidden-frameless:not(.is-popout-window) .sidebar-toggle-button.mod-right{right:0;padding-right:var(--size-4-2)}body.is-focused{--titlebar-background-focused:var(--background-secondary)}.is-hidden-frameless:not(.colorful-frame) .mod-left-split .mod-top .workspace-tab-header-container{--tab-container-background:var(--background-secondary)}.mod-root .workspace-tab-header-status-icon{color:var(--text-muted)}.modal button:not(.mod-warning),.modal.mod-settings button:not(.mod-cta):not(.mod-warning),.modal.mod-settings button:not(.mod-warning){white-space:nowrap;transition:background-color .2s ease-out,border-color .2s ease-out}button.mod-warning{border:1px solid var(--background-modifier-error);color:var(--text-error);box-shadow:0 1px 1px 0 var(--btn-shadow-color);transition:background-color .2s ease-out}button.mod-warning:hover{border:1px solid var(--background-modifier-error);color:var(--text-error);box-shadow:0 2px 3px 0 var(--btn-shadow-color);transition:background-color .2s ease-out}.document-replace,.document-search{max-width:100%;padding:0}.document-search-container{margin:0 auto;max-width:var(--max-width);width:var(--line-width)}.is-mobile .CodeMirror-foldgutter-open:after,.is-mobile span[title="Fold line"]:after{transform:translateX(-2px)!important}body.is-mobile .CodeMirror-foldgutter-folded:after,body.is-mobile span[title="Unfold line"]:after{content:"›";font-family:sans-serif;transform:translateY(-2px);transform:rotate(-90deg) translateY(2px) translateX(-.45em)}body.is-mobile .CodeMirror-foldgutter-open:after,body.is-mobile span[title="Fold line"]:after{content:"›";font-family:sans-serif;transform:rotate(360deg)}.modal-button-container .mod-checkbox{--checkbox-radius:4px}.modal-container.mod-confirmation .modal{width:480px;min-width:0}body{--progress-outline:var(--background-modifier-border);--progress-complete:var(--text-accent)}.markdown-preview-view progress,.markdown-rendered progress,.markdown-source-view.is-live-preview progress{width:220px}.markdown-preview-view progress[value]::-webkit-progress-bar,.markdown-rendered progress[value]::-webkit-progress-bar,.markdown-source-view.is-live-preview progress[value]::-webkit-progress-bar{box-shadow:inset 0 0 0 var(--border-width) var(--progress-outline)}.markdown-preview-view progress[value^='1']::-webkit-progress-value,.markdown-preview-view progress[value^='2']::-webkit-progress-value,.markdown-preview-view progress[value^='3']::-webkit-progress-value,.markdown-rendered progress[value^='1']::-webkit-progress-value,.markdown-rendered progress[value^='2']::-webkit-progress-value,.markdown-rendered progress[value^='3']::-webkit-progress-value,.markdown-source-view.is-live-preview progress[value^='1']::-webkit-progress-value,.markdown-source-view.is-live-preview progress[value^='2']::-webkit-progress-value,.markdown-source-view.is-live-preview progress[value^='3']::-webkit-progress-value{background-color:var(--color-red)}.markdown-preview-view progress[value^='4']::-webkit-progress-value,.markdown-preview-view progress[value^='5']::-webkit-progress-value,.markdown-rendered progress[value^='4']::-webkit-progress-value,.markdown-rendered progress[value^='5']::-webkit-progress-value,.markdown-source-view.is-live-preview progress[value^='4']::-webkit-progress-value,.markdown-source-view.is-live-preview progress[value^='5']::-webkit-progress-value{background-color:var(--color-orange)}.markdown-preview-view progress[value^='6']::-webkit-progress-value,.markdown-preview-view progress[value^='7']::-webkit-progress-value,.markdown-rendered progress[value^='6']::-webkit-progress-value,.markdown-rendered progress[value^='7']::-webkit-progress-value,.markdown-source-view.is-live-preview progress[value^='6']::-webkit-progress-value,.markdown-source-view.is-live-preview progress[value^='7']::-webkit-progress-value{background-color:var(--color-yellow)}.markdown-preview-view progress[value^='8']::-webkit-progress-value,.markdown-preview-view progress[value^='9']::-webkit-progress-value,.markdown-rendered progress[value^='8']::-webkit-progress-value,.markdown-rendered progress[value^='9']::-webkit-progress-value,.markdown-source-view.is-live-preview progress[value^='8']::-webkit-progress-value,.markdown-source-view.is-live-preview progress[value^='9']::-webkit-progress-value{background-color:var(--color-green)}.markdown-preview-view progress[value='1']::-webkit-progress-value,.markdown-preview-view progress[value='100']::-webkit-progress-value,.markdown-rendered progress[value='1']::-webkit-progress-value,.markdown-rendered progress[value='100']::-webkit-progress-value,.markdown-source-view.is-live-preview progress[value='1']::-webkit-progress-value,.markdown-source-view.is-live-preview progress[value='100']::-webkit-progress-value{background-color:var(--progress-complete)}.markdown-preview-view progress[value='0']::-webkit-progress-value,.markdown-preview-view progress[value='2']::-webkit-progress-value,.markdown-preview-view progress[value='3']::-webkit-progress-value,.markdown-preview-view progress[value='4']::-webkit-progress-value,.markdown-preview-view progress[value='5']::-webkit-progress-value,.markdown-preview-view progress[value='6']::-webkit-progress-value,.markdown-preview-view progress[value='7']::-webkit-progress-value,.markdown-preview-view progress[value='8']::-webkit-progress-value,.markdown-preview-view progress[value='9']::-webkit-progress-value,.markdown-rendered progress[value='0']::-webkit-progress-value,.markdown-rendered progress[value='2']::-webkit-progress-value,.markdown-rendered progress[value='3']::-webkit-progress-value,.markdown-rendered progress[value='4']::-webkit-progress-value,.markdown-rendered progress[value='5']::-webkit-progress-value,.markdown-rendered progress[value='6']::-webkit-progress-value,.markdown-rendered progress[value='7']::-webkit-progress-value,.markdown-rendered progress[value='8']::-webkit-progress-value,.markdown-rendered progress[value='9']::-webkit-progress-value,.markdown-source-view.is-live-preview progress[value='0']::-webkit-progress-value,.markdown-source-view.is-live-preview progress[value='2']::-webkit-progress-value,.markdown-source-view.is-live-preview progress[value='3']::-webkit-progress-value,.markdown-source-view.is-live-preview progress[value='4']::-webkit-progress-value,.markdown-source-view.is-live-preview progress[value='5']::-webkit-progress-value,.markdown-source-view.is-live-preview progress[value='6']::-webkit-progress-value,.markdown-source-view.is-live-preview progress[value='7']::-webkit-progress-value,.markdown-source-view.is-live-preview progress[value='8']::-webkit-progress-value,.markdown-source-view.is-live-preview progress[value='9']::-webkit-progress-value{background-color:var(--color-red)}body:not(.hider-scrollbars).styled-scrollbars ::-webkit-scrollbar,body:not(.native-scrollbars) ::-webkit-scrollbar{width:11px;background-color:transparent}body:not(.hider-scrollbars).styled-scrollbars ::-webkit-scrollbar:horizontal,body:not(.native-scrollbars) ::-webkit-scrollbar:horizontal{height:11px}body:not(.hider-scrollbars).styled-scrollbars ::-webkit-scrollbar-corner,body:not(.native-scrollbars) ::-webkit-scrollbar-corner{background-color:transparent}body:not(.hider-scrollbars).styled-scrollbars ::-webkit-scrollbar-track,body:not(.native-scrollbars) ::-webkit-scrollbar-track{background-color:transparent}body:not(.hider-scrollbars).styled-scrollbars ::-webkit-scrollbar-thumb,body:not(.native-scrollbars) ::-webkit-scrollbar-thumb{background-clip:padding-box;border-radius:20px;border:3px solid transparent;background-color:var(--background-modifier-border);border-width:3px 3px 3px 3px;min-height:45px}body:not(.hider-scrollbars).styled-scrollbars .mod-left-split .workspace-tabs ::-webkit-scrollbar-thumb:hover,body:not(.hider-scrollbars).styled-scrollbars .modal .vertical-tab-header::-webkit-scrollbar-thumb:hover,body:not(.hider-scrollbars).styled-scrollbars ::-webkit-scrollbar-thumb:hover,body:not(.native-scrollbars) .mod-left-split .workspace-tabs ::-webkit-scrollbar-thumb:hover,body:not(.native-scrollbars) .modal .vertical-tab-header::-webkit-scrollbar-thumb:hover,body:not(.native-scrollbars) ::-webkit-scrollbar-thumb:hover{background-color:var(--background-modifier-border-hover)}body:not(.hider-scrollbars).styled-scrollbars .mod-left-split .workspace-tabs ::-webkit-scrollbar-thumb:active,body:not(.hider-scrollbars).styled-scrollbars .modal .vertical-tab-header::-webkit-scrollbar-thumb:active,body:not(.hider-scrollbars).styled-scrollbars ::-webkit-scrollbar-thumb:active,body:not(.native-scrollbars) .mod-left-split .workspace-tabs ::-webkit-scrollbar-thumb:active,body:not(.native-scrollbars) .modal .vertical-tab-header::-webkit-scrollbar-thumb:active,body:not(.native-scrollbars) ::-webkit-scrollbar-thumb:active{background-color:var(--background-modifier-border-focus)}.tooltip{transition:none;animation:none}.tooltip.mod-left,.tooltip.mod-right{animation:none}.tooltip.mod-error{color:var(--text-error)}.markdown-preview-view blockquote{padding:0 0 0 var(--nested-padding);font-size:var(--blockquote-size)}.markdown-source-view.mod-cm6 .HyperMD-quote,.markdown-source-view.mod-cm6.is-live-preview .HyperMD-quote{font-size:var(--blockquote-size)}.is-live-preview .cm-hmd-indent-in-quote{color:var(--text-faint)}.is-live-preview.is-readable-line-width>.cm-callout .callout{max-width:var(--max-width);margin:0 auto}.callouts-outlined .callout .callout-title{background-color:var(--background-primary);margin-top:-24px;z-index:200;width:fit-content;padding:0 .5em;margin-left:-.75em;letter-spacing:.05em;font-variant-caps:all-small-caps}.callouts-outlined .callout{overflow:visible;--callout-border-width:1px;--callout-border-opacity:0.5;--callout-title-size:0.8em;--callout-blend-mode:normal;background-color:transparent}.callouts-outlined .cm-embed-block.cm-callout{padding-top:12px}.callouts-outlined .callout-content .callout{margin-top:18px}body{--checkbox-radius:50%;--checkbox-top:2px;--checkbox-left:0px;--checkbox-margin:0px 6px 0px -2em}.checkbox-square{--checkbox-size:calc(var(--font-text-size) * 0.85);--checkbox-radius:4px;--checkbox-top:1px;--checkbox-left:0px;--checkbox-margin:0px 8px 0px -2em}body.minimal-strike-lists{--checklist-done-decoration:line-through}body:not(.minimal-strike-lists){--checklist-done-decoration:none;--checklist-done-color:var(--text-normal)}.markdown-preview-section>.contains-task-list{padding-bottom:.5em}.mod-cm6 .HyperMD-task-line[data-task] .cm-formatting-list-ol~.task-list-label .task-list-item-checkbox{margin:1px}.markdown-preview-view .task-list-item-checkbox{position:relative;top:var(--checkbox-top);left:var(--checkbox-left);line-height:0}.markdown-preview-view ul>li.task-list-item{text-indent:0}.is-mobile .mod-cm6 .HyperMD-task-line[data-task] .task-list-item-checkbox{margin-inline-start:-.4em}.is-mobile .markdown-preview-view input[type=checkbox].task-list-item-checkbox{top:.2em}.minimal-code-scroll{--code-white-space:pre}.minimal-code-scroll .HyperMD-codeblock.HyperMD-codeblock-bg{overflow-y:scroll;white-space:pre}.minimal-code-scroll .cm-hmd-codeblock{white-space:pre!important}@media print{.print{--code-background:#eee!important}}body{--embed-max-height:none;--embed-decoration-style:solid;--embed-decoration-color:var(--background-modifier-border-hover)}.embed-strict{--embed-background:transparent;--embed-border-left:0;--embed-padding:0}.embed-strict .markdown-embed-content{--folding-offset:0px}.embed-strict .el-embed-heading.el-p>p{margin-block-start:0;margin-block-end:0}.embed-strict .internal-embed .markdown-embed,.embed-strict .markdown-preview-view .markdown-embed,.embed-strict.markdown-preview-view .markdown-embed{padding:0}.embed-strict .internal-embed .markdown-embed .markdown-embed-title,.embed-strict .markdown-embed-title{display:none}.embed-strict .internal-embed:not([src*="#^"]) .markdown-embed-link{width:24px;opacity:0}.embed-underline .internal-embed:not(.pdf-embed){text-decoration-line:underline;text-decoration-style:var(--embed-decoration-style);text-decoration-color:var(--embed-decoration-color)}.embed-hide-title .markdown-embed-title{display:none}.contextual-typography .embed-strict .internal-embed .markdown-preview-view .markdown-preview-sizer>div,.embed-strict.contextual-typography .internal-embed .markdown-preview-view .markdown-preview-sizer>div{margin:0;width:100%}.markdown-embed .markdown-preview-view .markdown-preview-sizer{padding-bottom:0!important}.markdown-preview-view.is-readable-line-width .markdown-embed .markdown-preview-sizer,.markdown-preview-view.markdown-embed .markdown-preview-sizer{max-width:100%;width:100%;min-height:0!important;padding-bottom:0!important}.markdown-embed .markdown-preview-section div:last-child p,.markdown-embed .markdown-preview-section div:last-child ul{margin-block-end:2px}.markdown-preview-view .markdown-embed{margin-top:var(--nested-padding);padding:0 calc(var(--nested-padding)/ 2) 0 var(--nested-padding)}.internal-embed:not([src*="#^"]) .markdown-embed-link{right:0;width:100%}.file-embed-link,.markdown-embed-link{top:0;right:0;text-align:right;justify-content:flex-end}.file-embed-link svg,.markdown-embed-link svg{width:16px;height:16px}.markdown-embed .file-embed-link,.markdown-embed .markdown-embed-link{opacity:.6;transition:opacity .1s linear}.markdown-embed .file-embed-link:hover,.markdown-embed .markdown-embed-link:hover{opacity:1}.markdown-embed .file-embed-link:hover:hover,.markdown-embed .markdown-embed-link:hover:hover{background-color:transparent;--icon-color:var(--text-accent)}.file-embed-link:hover,.markdown-embed-link:hover{color:var(--text-muted)}.markdown-embed .markdown-preview-view{padding:0}.internal-embed .markdown-embed{border:0;border-left:1px solid var(--quote-opening-modifier);border-radius:0}a[href*="obsidian://search"]{background-image:url("data:image/svg+xml,")}.theme-dark a[href*="obsidian://search"]{background-image:url("data:image/svg+xml,")}body{--adaptive-list-edit-offset:var(--list-edit-offset)}.is-rtl{--adaptive-list-edit-offset:calc(var(--list-edit-offset)*-1)}.markdown-preview-view ol>li,.markdown-preview-view ul>li,.markdown-source-view ol>li,.markdown-source-view ul>li,.mod-cm6 .HyperMD-list-line.cm-line{padding-top:var(--list-spacing);padding-bottom:var(--list-spacing)}.is-mobile ul>li:not(.task-list-item)::marker{font-size:.8em}.is-mobile .workspace-leaf-content:not([data-type=search]) .workspace-leaf-content[data-type=markdown] .nav-buttons-container{border-bottom:none;padding-top:5px}.is-mobile .mod-root .workspace-leaf-content[data-type=markdown] .search-input-container{width:calc(100% - 160px)}.embedded-backlinks .nav-header~.search-input-container{width:calc(100% - 140px);margin-top:12px}.embedded-backlinks .nav-buttons-container{position:absolute;right:0;top:14px}.embedded-backlinks .backlink-pane>.tree-item-self,.embedded-backlinks .backlink-pane>.tree-item-self:hover{text-transform:none;color:var(--text-normal);font-size:var(--font-adaptive-normal);font-weight:500;letter-spacing:unset}body{--pdf-dark-opacity:1}.theme-dark:not(.pdf-shadows-on),.theme-light:not(.pdf-shadows-on){--pdf-shadow:none;--pdf-thumbnail-shadow:none}.theme-dark:not(.pdf-shadows-on) .pdf-viewer .page,.theme-light:not(.pdf-shadows-on) .pdf-viewer .page{border:0}.theme-dark:not(.pdf-shadows-on) .pdf-sidebar-container .thumbnailSelectionRing,.theme-light:not(.pdf-shadows-on) .pdf-sidebar-container .thumbnailSelectionRing{padding:0}.theme-dark:not(.pdf-shadows-on) .pdf-sidebar-container .thumbnail::after,.theme-light:not(.pdf-shadows-on) .pdf-sidebar-container .thumbnail::after{right:var(--size-4-2);bottom:var(--size-4-2)}.theme-dark{--pdf-thumbnail-shadow:0 0 1px 0 rgba(0,0,0,0.6);--pdf-shadow:0 0 1px 0 rgba(0,0,0,0.6)}.theme-dark .pdf-viewer .canvasWrapper{opacity:var(--pdf-dark-opacity)}.theme-dark.pdf-invert-dark .workspace-leaf-content[data-type=pdf] .pdf-thumbnail-view .thumbnailImage,.theme-dark.pdf-invert-dark .workspace-leaf-content[data-type=pdf] .pdf-viewer .canvasWrapper{filter:invert(1) hue-rotate(180deg);mix-blend-mode:screen}.theme-light.pdf-blend-light .workspace-leaf-content[data-type=pdf] .pdf-thumbnail-view .thumbnailImage,.theme-light.pdf-blend-light .workspace-leaf-content[data-type=pdf] .pdf-viewer .canvasWrapper{mix-blend-mode:multiply}body{--table-header-border-width:0;--table-column-first-border-width:0;--table-column-last-border-width:0;--table-row-last-border-width:0;--table-edge-cell-padding-first:0;--table-edge-cell-padding-last:0;--table-cell-padding:4px 10px;--table-header-size:var(--table-text-size)}.markdown-source-view.mod-cm6 table{border-collapse:collapse}.markdown-rendered th{--table-header-size:var(--table-text-size)}.markdown-preview-view table,.markdown-source-view.mod-cm6 table{border:var(--border-width) solid var(--border-color);border-collapse:collapse}.markdown-preview-view td,.markdown-preview-view th,.markdown-source-view.mod-cm6 td,.markdown-source-view.mod-cm6 th{padding:var(--table-cell-padding)}.markdown-preview-view td:first-child,.markdown-preview-view th:first-child,.markdown-source-view.mod-cm6 td:first-child,.markdown-source-view.mod-cm6 th:first-child{padding-left:var(--table-edge-cell-padding-first)}.markdown-preview-view td:first-child .table-cell-wrapper,.markdown-preview-view th:first-child .table-cell-wrapper,.markdown-source-view.mod-cm6 td:first-child .table-cell-wrapper,.markdown-source-view.mod-cm6 th:first-child .table-cell-wrapper{padding-left:0}.markdown-preview-view td:last-child,.markdown-preview-view th:last-child,.markdown-source-view.mod-cm6 td:last-child,.markdown-source-view.mod-cm6 th:last-child{padding-right:var(--table-edge-cell-padding-last)}.markdown-preview-view td:last-child .table-cell-wrapper,.markdown-preview-view th:last-child .table-cell-wrapper,.markdown-source-view.mod-cm6 td:last-child .table-cell-wrapper,.markdown-source-view.mod-cm6 th:last-child .table-cell-wrapper{padding-right:0}.cm-embed-block.cm-table-widget.markdown-rendered{margin-top:-8px!important;padding:var(--table-drag-padding)}.markdown-source-view.mod-cm6 .cm-table-widget .table-col-drag-handle{top:0;left:0!important}.markdown-source-view.mod-cm6 .cm-table-widget .table-row-drag-handle{top:0!important;left:0}.markdown-preview-view th,.markdown-source-view.mod-cm6 .dataview.table-view-table thead.table-view-thead tr th,.table-view-table>thead>tr>th{padding:var(--table-cell-padding)}.markdown-preview-view th:first-child,.markdown-source-view.mod-cm6 .dataview.table-view-table thead.table-view-thead tr th:first-child,.table-view-table>thead>tr>th:first-child{padding-left:var(--table-edge-cell-padding-first)}.markdown-preview-view th:last-child,.markdown-source-view.mod-cm6 .dataview.table-view-table thead.table-view-thead tr th:last-child,.table-view-table>thead>tr>th:last-child{padding-right:var(--table-edge-cell-padding-last)}.is-live-preview .el-table{width:100%;max-width:100%}.cm-hmd-table-sep-dummy,.cm-s-obsidian .HyperMD-table-row span.cm-hmd-table-sep{color:var(--text-faint);font-weight:400}body.minimal-unstyled-tags{--tag-background:transparent;--tag-background-hover:transparent;--tag-border-width:0px;--tag-padding-x:0;--tag-padding-y:0;--tag-size:inherit;--tag-color-hover:var(--text-accent-hover)}body.minimal-unstyled-tags.is-mobile.theme-dark{--tag-background:transparent}body:not(.minimal-unstyled-tags){--tag-size:0.8em;--tag-padding-y:0.2em;--tag-background:transparent;--tag-background-hover:transparent;--tag-color:var(--text-muted);--tag-border-width:1px;--tag-border-color:var(--background-modifier-border);--tag-border-color-hover:var(--background-modifier-border-hover);--tag-color-hover:var(--text-normal)}body.is-mobile.theme-dark{--tag-background:transparent}h1,h2,h3,h4{letter-spacing:-.02em}body,button,input{font-family:var(--font-interface)}.cm-s-obsidian span.cm-error{color:var(--color-red)}.markdown-preview-view,.popover,.workspace-leaf-content[data-type=markdown]{font-family:var(--font-text)}.markdown-preview-view,.view-content>.cm-s-obsidian,.view-content>.markdown-source-view.mod-cm6.is-live-preview>.cm-scroller,body{font-size:var(--font-adaptive-normal);font-weight:var(--normal-weight)}.view-content>.cm-s-obsidian,.view-content>.markdown-source-view,.view-content>.markdown-source-view.mod-cm6 .cm-scroller{font-family:var(--font-editor)}.cm-formatting:not(.cm-formatting-code-block):not(.cm-formatting-hashtag){color:var(--text-formatting)}.hide-markdown .is-live-preview .cm-formatting.cm-formatting-code.cm-inline-code,.hide-markdown .is-live-preview .cm-formatting.cm-formatting-em,.hide-markdown .is-live-preview .cm-formatting.cm-formatting-highlight,.hide-markdown .is-live-preview .cm-formatting.cm-formatting-link,.hide-markdown .is-live-preview .cm-formatting.cm-formatting-strikethrough,.hide-markdown .is-live-preview .cm-formatting.cm-formatting-strong{display:none}.hide-markdown .is-live-preview .cm-formatting-quote{opacity:0}.hide-markdown .is-live-preview .cm-formatting-link,.hide-markdown .is-live-preview .cm-formatting:has(+.cm-header),.hide-markdown .is-live-preview .cm-hmd-internal-link.cm-link-has-alias,.hide-markdown .is-live-preview .cm-link-alias-pipe{display:none}.active-line-on .cm-line.cm-active,.active-line-on .markdown-source-view.mod-cm6.is-live-preview .HyperMD-quote.cm-active{background-color:var(--active-line-bg);box-shadow:-25vw 0 var(--active-line-bg),25vw 0 var(--active-line-bg)}body{--content-margin:auto;--content-margin-start:max( calc(50% - var(--line-width)/2), calc(50% - var(--max-width)/2) );--content-line-width:min(var(--line-width), var(--max-width))}.markdown-preview-view .markdown-preview-sizer.markdown-preview-sizer{max-width:100%;margin-inline:auto;width:100%}.markdown-source-view.mod-cm6.is-readable-line-width .cm-content,.markdown-source-view.mod-cm6.is-readable-line-width .cm-sizer{max-width:100%;width:100%}.markdown-preview-view.is-readable-line-width .markdown-preview-sizer>div,.markdown-source-view.mod-cm6.is-readable-line-width .cm-contentContainer.cm-contentContainer>.cm-content>div,.markdown-source-view.mod-cm6.is-readable-line-width .cm-sizer>.embedded-backlinks,.markdown-source-view.mod-cm6.is-readable-line-width .cm-sizer>.inline-title,.markdown-source-view.mod-cm6.is-readable-line-width .cm-sizer>.metadata-container{max-width:var(--max-width);width:var(--line-width);margin-inline:var(--content-margin)!important}.markdown-source-view.mod-cm6.is-readable-line-width .cm-contentContainer.cm-contentContainer>.cm-content>:not(div){max-width:var(--content-line-width);margin-inline-start:var(--content-margin-start)!important}.is-readable-line-width{--file-margins:1rem 0 0 0}.is-mobile .markdown-preview-view{--folding-offset:0}.minimal-line-nums .workspace-leaf-content[data-type=markdown]{--file-margins:var(--size-4-8) var(--size-4-8) var(--size-4-8) 48px}.minimal-line-nums .workspace-leaf-content[data-type=markdown].is-rtl{--file-margins:var(--size-4-8) 48px var(--size-4-8) var(--size-4-8)}.minimal-line-nums .workspace-leaf-content[data-type=markdown] .is-readable-line-width{--file-margins:1rem 0 0 var(--folding-offset)}.minimal-line-nums .workspace-leaf-content[data-type=markdown] .is-readable-line-width.is-rtl{--file-margins:1rem var(--folding-offset) 0 0}.minimal-line-nums .mod-left-split .markdown-preview-view,.minimal-line-nums .mod-left-split .markdown-source-view.mod-cm6 .cm-scroller,.minimal-line-nums .mod-right-split .markdown-preview-view,.minimal-line-nums .mod-right-split .markdown-source-view.mod-cm6 .cm-scroller{--file-margins:var(--size-4-5) var(--size-4-5) var(--size-4-5) 48px}.view-content .reader-mode-content.is-readable-line-width .markdown-preview-sizer{max-width:var(--max-width);width:var(--line-width)}.markdown-preview-view .inline-embed{--max-width:100%}body{--container-table-max-width:var(--max-width);--table-max-width:none;--table-width:auto;--table-margin:inherit;--table-wrapper-width:fit-content;--container-dataview-table-width:var(--line-width);--container-img-width:var(--line-width);--container-img-max-width:var(--max-width);--img-max-width:100%;--img-width:auto;--img-margin-start:var(--content-margin-start);--img-line-width:var(--content-line-width);--container-chart-width:var(--line-width);--container-chart-max-width:var(--max-width);--chart-max-width:none;--chart-width:auto;--container-map-width:var(--line-width);--container-map-max-width:var(--max-width);--map-max-width:none;--map-width:auto;--container-iframe-width:var(--line-width);--container-iframe-max-width:var(--max-width);--iframe-max-width:none;--iframe-width:auto}body .wide{--line-width:var(--line-width-wide);--container-table-width:var(--line-width-wide);--container-dataview-table-width:var(--line-width-wide);--container-img-width:var(--line-width-wide);--container-iframe-width:var(--line-width-wide);--container-map-width:var(--line-width-wide);--container-chart-width:var(--line-width-wide)}body .max{--line-width:var(--max-width);--container-table-width:var(--max-width);--container-dataview-table-width:var(--max-width);--container-img-width:var(--max-width);--container-iframe-width:var(--max-width);--container-map-width:var(--max-width);--container-chart-width:var(--max-width)}table.dataview{--table-min-width:min(var(--line-width),var(--max-width))}.cards table.dataview{--table-width:100%;--table-min-width:none}body{--table-drag-space:16px;--container-table-margin:calc(var(--content-margin-start) - var(--table-drag-space));--container-table-width:calc(var(--line-width) + var(--table-drag-space)*2);--table-drag-padding:var(--table-drag-space)}body:not(.table-100):not(.table-max):not(.table-wide) .markdown-preview-view{--container-table-margin:var(--content-margin-start)}.maximize-tables-auto{--container-table-max-width:100%;--container-table-width:100%;--container-dataview-table-width:100%;--container-table-margin:0;--table-drag-padding:var(--table-drag-space) 0;--table-max-width:100%;--table-margin:var(--content-margin-start) auto;--table-width:auto}.maximize-tables-auto .cards{--container-table-max-width:var(--max-width)}.maximize-tables-auto .cards .block-language-dataview{--table-margin:auto}.maximize-tables{--container-table-max-width:100%;--container-table-width:100%;--container-table-margin:0;--table-drag-padding:var(--table-drag-space) 0;--table-min-width:min(var(--line-width), var(--max-width));--table-max-width:100%;--table-margin:auto;--table-width:auto;--table-edge-cell-padding-first:8px;--table-edge-cell-padding-last:8px;--table-wrapper-width:auto}.table-100,.table-max,.table-wide{--table-max-width:100%;--table-width:100%}.table-wide{--container-table-width:var(--line-width-wide);--container-dataview-table-width:var(--line-width-wide);--container-table-margin:auto;--table-edge-cell-padding-first:0px}.table-max{--container-table-width:var(--max-width);--container-table-max-width:calc(var(--max-width) + var(--table-drag-space)*2);--container-dataview-table-width:var(--max-width);--container-table-margin:auto;--table-edge-cell-padding-first:0px;--table-margin:0}.table-100{--container-table-width:100%;--container-dataview-table-width:100%;--container-table-max-width:100%;--container-table-margin:auto;--table-edge-cell-padding-first:16px;--table-edge-cell-padding-last:16px;--table-margin:0;--table-drag-padding:var(--table-drag-space) 0}.table-100 .dataview.list-view-ul{max-width:var(--max-width);width:var(--line-width);margin-inline:auto}.img-100,.img-max,.img-wide{--img-max-width:100%;--img-width:100%}.img-wide{--container-img-width:var(--line-width-wide);--img-line-width:var(--line-width-wide);--img-margin-start:calc(50% - var(--line-width-wide)/2)}.img-max{--container-img-width:var(--max-width);--img-line-width:var(--max-width);--img-margin-start:calc(50% - var(--max-width)/2)}.img-100{--container-img-width:100%;--container-img-max-width:100%;--img-line-width:100%;--img-margin-start:0}.map-100,.map-max,.map-wide{--map-max-width:100%;--map-width:100%}.map-wide{--container-map-width:var(--line-width-wide)}.map-max{--container-map-width:var(--max-width)}.map-100{--container-map-width:100%;--container-map-max-width:100%}.chart-100,.chart-max,.chart-wide{--chart-max-width:100%;--chart-width:100%}.chart-wide{--container-chart-width:var(--line-width-wide)}.chart-max{--container-chart-width:var(--max-width)}.chart-100{--container-chart-width:100%;--container-chart-max-width:100%}.iframe-100,.iframe-max,.iframe-wide{--iframe-max-width:100%;--iframe-width:100%}.iframe-wide{--container-iframe-width:var(--line-width-wide)}.iframe-max{--container-iframe-width:var(--max-width)}.iframe-100{--container-iframe-width:100%;--container-iframe-max-width:100%}.markdown-preview-view.is-readable-line-width .markdown-preview-sizer .cm-table-widget,.markdown-preview-view.is-readable-line-width .markdown-preview-sizer>div:has(>table),.markdown-source-view.mod-cm6.is-readable-line-width .cm-contentContainer.cm-contentContainer>.cm-content .cm-table-widget,.markdown-source-view.mod-cm6.is-readable-line-width .cm-contentContainer.cm-contentContainer>.cm-content>div:has(>table){width:var(--container-table-width);max-width:var(--container-table-max-width);margin-inline:var(--container-table-margin)!important}.markdown-preview-view.is-readable-line-width .markdown-preview-sizer .table-wrapper,.markdown-source-view.mod-cm6.is-readable-line-width .cm-contentContainer.cm-contentContainer>.cm-content .table-wrapper{width:var(--table-wrapper-width)}.markdown-preview-view.is-readable-line-width .markdown-preview-sizer>div:has(>.block-language-dataview>table),.markdown-preview-view.is-readable-line-width .markdown-preview-sizer>div:has(>.block-language-dataviewjs),.markdown-source-view.mod-cm6.is-readable-line-width .cm-contentContainer.cm-contentContainer>.cm-content>div:has(>.block-language-dataview>table),.markdown-source-view.mod-cm6.is-readable-line-width .cm-contentContainer.cm-contentContainer>.cm-content>div:has(>.block-language-dataviewjs){width:var(--container-dataview-table-width);max-width:var(--container-table-max-width)}.markdown-preview-view.is-readable-line-width .markdown-preview-sizer table,.markdown-source-view.mod-cm6.is-readable-line-width .cm-contentContainer.cm-contentContainer>.cm-content table{width:var(--table-width);max-width:var(--table-max-width);margin-inline:var(--table-margin);min-width:var(--table-min-width)}.markdown-preview-view.is-readable-line-width .markdown-preview-sizer .block-language-dataviewjs>:is(p,h1,h2,h3,h4,h5,h6),.markdown-source-view.mod-cm6.is-readable-line-width .cm-contentContainer.cm-contentContainer>.cm-content .block-language-dataviewjs>:is(p,h1,h2,h3,h4,h5,h6){width:var(--line-width)}.markdown-preview-view.is-readable-line-width .markdown-preview-sizer .block-language-dataviewjs>.dataview-error,.markdown-source-view.mod-cm6.is-readable-line-width .cm-contentContainer.cm-contentContainer>.cm-content .block-language-dataviewjs>.dataview-error{margin:0 auto;width:var(--content-line-width)}.markdown-preview-view.is-readable-line-width .markdown-preview-sizer .dataview.dataview-error-box,.markdown-source-view.mod-cm6.is-readable-line-width .cm-contentContainer.cm-contentContainer>.cm-content .dataview.dataview-error-box{margin-inline:var(--table-margin)}.markdown-preview-view.is-readable-line-width .markdown-preview-sizer>.image-embed,.markdown-source-view.mod-cm6.is-readable-line-width .cm-contentContainer.cm-contentContainer>.cm-content>.image-embed{padding-top:.25rem;padding-bottom:.25rem}.markdown-preview-view.is-readable-line-width .markdown-preview-sizer>.image-embed,.markdown-preview-view.is-readable-line-width .markdown-preview-sizer>div:has(.image-embed),.markdown-source-view.mod-cm6.is-readable-line-width .cm-contentContainer.cm-contentContainer>.cm-content>.image-embed,.markdown-source-view.mod-cm6.is-readable-line-width .cm-contentContainer.cm-contentContainer>.cm-content>div:has(.image-embed){width:var(--container-img-width);max-width:var(--container-img-max-width)}.markdown-preview-view.is-readable-line-width .markdown-preview-sizer>.image-embed img,.markdown-preview-view.is-readable-line-width .markdown-preview-sizer>div:has(.image-embed) img,.markdown-source-view.mod-cm6.is-readable-line-width .cm-contentContainer.cm-contentContainer>.cm-content>.image-embed img,.markdown-source-view.mod-cm6.is-readable-line-width .cm-contentContainer.cm-contentContainer>.cm-content>div:has(.image-embed) img{max-width:var(--img-max-width)}.markdown-preview-view.is-readable-line-width .markdown-preview-sizer>img,.markdown-source-view.mod-cm6.is-readable-line-width .cm-contentContainer.cm-contentContainer>.cm-content>img{max-width:var(--img-line-width);margin-inline-start:var(--img-margin-start)!important}.markdown-preview-view.is-readable-line-width .markdown-preview-sizer div:has(>.block-language-chart),.markdown-preview-view.is-readable-line-width .markdown-preview-sizer div:has(>.block-language-dataviewjs canvas),.markdown-source-view.mod-cm6.is-readable-line-width .cm-contentContainer.cm-contentContainer>.cm-content div:has(>.block-language-chart),.markdown-source-view.mod-cm6.is-readable-line-width .cm-contentContainer.cm-contentContainer>.cm-content div:has(>.block-language-dataviewjs canvas){width:var(--container-chart-width);max-width:var(--container-chart-max-width)}.markdown-preview-view.is-readable-line-width .markdown-preview-sizer div:has(>.block-language-chart) canvas,.markdown-preview-view.is-readable-line-width .markdown-preview-sizer div:has(>.block-language-dataviewjs canvas) canvas,.markdown-source-view.mod-cm6.is-readable-line-width .cm-contentContainer.cm-contentContainer>.cm-content div:has(>.block-language-chart) canvas,.markdown-source-view.mod-cm6.is-readable-line-width .cm-contentContainer.cm-contentContainer>.cm-content div:has(>.block-language-dataviewjs canvas) canvas{max-width:var(--map-chart-width)}.markdown-preview-view.is-readable-line-width .markdown-preview-sizer div:has(>.block-language-leaflet),.markdown-source-view.mod-cm6.is-readable-line-width .cm-contentContainer.cm-contentContainer>.cm-content div:has(>.block-language-leaflet){width:var(--container-map-width);max-width:var(--container-map-max-width)}.markdown-preview-view.is-readable-line-width .markdown-preview-sizer div:has(>.block-language-leaflet) iframe,.markdown-source-view.mod-cm6.is-readable-line-width .cm-contentContainer.cm-contentContainer>.cm-content div:has(>.block-language-leaflet) iframe{max-width:var(--map-max-width)}.markdown-preview-view.is-readable-line-width .markdown-preview-sizer div:has(>.cm-html-embed),.markdown-preview-view.is-readable-line-width .markdown-preview-sizer>div:has(>iframe),.markdown-source-view.mod-cm6.is-readable-line-width .cm-contentContainer.cm-contentContainer>.cm-content div:has(>.cm-html-embed),.markdown-source-view.mod-cm6.is-readable-line-width .cm-contentContainer.cm-contentContainer>.cm-content>div:has(>iframe){width:var(--container-iframe-width);max-width:var(--container-iframe-max-width)}.markdown-preview-view.is-readable-line-width .markdown-preview-sizer div:has(>.cm-html-embed) iframe,.markdown-preview-view.is-readable-line-width .markdown-preview-sizer>div:has(>iframe) iframe,.markdown-source-view.mod-cm6.is-readable-line-width .cm-contentContainer.cm-contentContainer>.cm-content div:has(>.cm-html-embed) iframe,.markdown-source-view.mod-cm6.is-readable-line-width .cm-contentContainer.cm-contentContainer>.cm-content>div:has(>iframe) iframe{max-width:var(--iframe-max-width);width:var(--iframe-width)}.borders-none{--divider-width:0px;--tab-outline-width:0px}body{--cards-min-width:180px;--cards-max-width:1fr;--cards-mobile-width:120px;--cards-image-height:400px;--cards-padding:1.2em;--cards-image-fit:contain;--cards-background:transparent;--cards-border-width:1px;--cards-aspect-ratio:auto;--cards-columns:repeat(auto-fit, minmax(var(--cards-min-width), var(--cards-max-width)))}@media (max-width:400pt){body{--cards-min-width:var(--cards-mobile-width)}}.cards.table-100 table.dataview tbody,.table-100 .cards table.dataview tbody{padding:.25rem .75rem}.cards table.dataview{--table-width:100%;--table-edge-cell-padding-first:calc(var(--cards-padding)/2);--table-edge-cell-padding-last:calc(var(--cards-padding)/2);--table-cell-padding:calc(var(--cards-padding)/3) calc(var(--cards-padding)/2);line-height:1.3}.cards table.dataview tbody{clear:both;padding:.5rem 0;display:grid;grid-template-columns:var(--cards-columns);grid-column-gap:0.75rem;grid-row-gap:0.75rem}.cards table.dataview>tbody>tr{background-color:var(--cards-background);border:var(--cards-border-width) solid var(--background-modifier-border);display:flex;flex-direction:column;margin:0;padding:0 0 calc(var(--cards-padding)/3) 0;border-radius:6px;overflow:hidden;transition:box-shadow .15s linear;max-width:var(--cards-max-width);height:auto}.cards table.dataview>tbody>tr:hover{border:var(--cards-border-width) solid var(--background-modifier-border-hover);box-shadow:0 4px 6px 0 rgba(0,0,0,.05),0 1px 3px 1px rgba(0,0,0,.025);transition:box-shadow .15s linear}.cards table.dataview tbody>tr>td:first-child{font-weight:var(--bold-weight);border:none}.cards table.dataview tbody>tr>td:first-child a{display:block}.cards table.dataview tbody>tr>td:last-child{border:none}.cards table.dataview tbody>tr>td:not(:first-child){font-size:calc(var(--table-text-size) * .9);color:var(--text-muted)}.cards table.dataview tbody>tr>td>*{padding:calc(var(--cards-padding)/3) 0}.cards table.dataview tbody>tr>td:not(:last-child):not(:first-child){padding:4px 0;border-bottom:1px solid var(--background-modifier-border);width:calc(100% - var(--cards-padding));margin:0 calc(var(--cards-padding)/2)}.cards table.dataview tbody>tr>td a{text-decoration:none}.cards table.dataview tbody>tr>td>button{width:100%;margin:calc(var(--cards-padding)/2) 0}.cards table.dataview tbody>tr>td:last-child>button{margin-bottom:calc(var(--cards-padding)/6)}.cards table.dataview tbody>tr>td>ul{width:100%;padding:.25em 0!important;margin:0 auto!important}.cards table.dataview tbody>tr>td:has(img){padding:0!important;background-color:var(--background-secondary);display:block;margin:0;width:100%}.cards table.dataview tbody>tr>td img{aspect-ratio:var(--cards-aspect-ratio);width:100%;object-fit:var(--cards-image-fit);max-height:var(--cards-image-height);background-color:var(--background-secondary);vertical-align:bottom}.markdown-source-view.mod-cm6.cards .dataview.table-view-table>tbody>tr>td,.trim-cols .cards table.dataview tbody>tr>td{white-space:normal}.links-int-on .cards table{--link-decoration:none}.markdown-source-view.mod-cm6.cards .edit-block-button{top:-1px;right:28px;opacity:1}.cards.table-100 table.dataview thead>tr,.table-100 .cards table.dataview thead>tr{right:.75rem}.cards.table-100 table.dataview thead:before,.table-100 .cards table.dataview thead:before{margin-right:.75rem}.cards table.dataview thead{user-select:none;width:180px;display:block;float:right;position:relative;text-align:right;height:24px;padding-bottom:0}.cards table.dataview thead:hover:after{background-color:var(--background-modifier-hover)}.cards table.dataview thead:hover:before{background-color:var(--text-muted)}.cards table.dataview thead:after,.cards table.dataview thead:before{content:'';position:absolute;right:0;top:0;width:10px;height:16px;cursor:var(--cursor);text-align:right;padding:var(--size-4-1) var(--size-4-2);margin-bottom:2px;border-radius:var(--radius-s);font-weight:500;font-size:var(--font-adaptive-small)}.cards table.dataview thead:before{background-color:var(--text-faint);-webkit-mask-repeat:no-repeat;-webkit-mask-size:16px;-webkit-mask-position:center center;-webkit-mask-image:url('data:image/svg+xml;utf8,')}.cards table.dataview thead>tr{top:-1px;position:absolute;display:none;z-index:9;border:1px solid var(--background-modifier-border-hover);background-color:var(--background-secondary);box-shadow:var(--shadow-s);padding:6px;border-radius:var(--radius-m);flex-direction:column;margin:24px 0 0 0;width:100%}.cards table.dataview thead:hover>tr{display:flex;height:auto}.cards table.dataview thead>tr>th{display:block;padding:3px 30px 3px 6px!important;border-radius:var(--radius-s);width:100%;font-weight:400;color:var(--text-normal);cursor:var(--cursor);border:none;font-size:var(--font-ui-small)}.cards table.dataview thead>tr>th[sortable-style=sortable-asc],.cards table.dataview thead>tr>th[sortable-style=sortable-desc]{color:var(--text-normal)}.cards table.dataview thead>tr>th:hover{color:var(--text-normal);background-color:var(--background-modifier-hover)}.list-cards.markdown-preview-view .list-bullet,.list-cards.markdown-preview-view .list-collapse-indicator,.list-cards.markdown-preview-view.markdown-rendered.show-indentation-guide li>ul::before{display:none}.list-cards.markdown-preview-view div>ul{display:grid;gap:.75rem;grid-template-columns:var(--cards-columns);padding:0;line-height:var(--line-height-tight)}.list-cards.markdown-preview-view div>ul>li{background-color:var(--cards-background);padding:calc(var(--cards-padding)/2);border-radius:var(--radius-s);border:var(--cards-border-width) solid var(--background-modifier-border);overflow:hidden}.list-cards.markdown-preview-view div>ul .image-embed{padding:0;display:block;background-color:var(--background-secondary);border-radius:var(--image-radius)}.list-cards.markdown-preview-view div>ul .image-embed img{aspect-ratio:var(--cards-aspect-ratio);object-fit:var(--cards-image-fit);max-height:var(--cards-image-height);background-color:var(--background-secondary);vertical-align:bottom}.list-cards.markdown-preview-view div>ul>li>a{--link-decoration:none;--link-external-decoration:none;font-weight:var(--bold-weight)}.list-cards.markdown-preview-view div ul>li:hover{border-color:var(--background-modifier-border-hover)}.list-cards.markdown-preview-view div ul ul{display:block;width:100%;color:var(--text-muted);font-size:var(--font-smallest);margin:calc(var(--cards-padding)/-4) 0;padding:calc(var(--cards-padding)/2) 0}.list-cards.markdown-preview-view div ul ul ul{padding-bottom:calc(var(--cards-padding)/4)}.list-cards.markdown-preview-view div ul ul>li{display:block}.cards.cards-16-9,.list-cards.cards-16-9{--cards-aspect-ratio:16/9}.cards.cards-1-1,.list-cards.cards-1-1{--cards-aspect-ratio:1/1}.cards.cards-2-1,.list-cards.cards-2-1{--cards-aspect-ratio:2/1}.cards.cards-2-3,.list-cards.cards-2-3{--cards-aspect-ratio:2/3}.cards.cards-cols-1,.list-cards.cards-cols-1{--cards-columns:repeat(1, minmax(0, 1fr))}.cards.cards-cols-2,.list-cards.cards-cols-2{--cards-columns:repeat(2, minmax(0, 1fr))}.cards.cards-cover,.list-cards.cards-cover{--cards-image-fit:cover}.cards.cards-align-bottom table.dataview tbody>tr>td:last-child,.list-cards.cards-align-bottom table.dataview tbody>tr>td:last-child{margin-top:auto}@media (max-width:400pt){.cards table.dataview tbody>tr>td:not(:first-child){font-size:80%}}@media (min-width:400pt){.cards-cols-3{--cards-columns:repeat(3, minmax(0, 1fr))}.cards-cols-4{--cards-columns:repeat(4, minmax(0, 1fr))}.cards-cols-5{--cards-columns:repeat(5, minmax(0, 1fr))}.cards-cols-6{--cards-columns:repeat(6, minmax(0, 1fr))}.cards-cols-7{--cards-columns:repeat(7, minmax(0, 1fr))}.cards-cols-8{--cards-columns:repeat(8, minmax(0, 1fr))}}.cm-formatting.cm-formatting-task.cm-property{font-family:var(--font-monospace);font-size:90%}input[data-task="!"]:checked,input[data-task="*"]:checked,input[data-task="-"]:checked,input[data-task="<"]:checked,input[data-task=">"]:checked,input[data-task="I"]:checked,input[data-task="b"]:checked,input[data-task="c"]:checked,input[data-task="d"]:checked,input[data-task="f"]:checked,input[data-task="k"]:checked,input[data-task="l"]:checked,input[data-task="p"]:checked,input[data-task="u"]:checked,input[data-task="w"]:checked,li[data-task="!"]>input:checked,li[data-task="!"]>p>input:checked,li[data-task="*"]>input:checked,li[data-task="*"]>p>input:checked,li[data-task="-"]>input:checked,li[data-task="-"]>p>input:checked,li[data-task="<"]>input:checked,li[data-task="<"]>p>input:checked,li[data-task=">"]>input:checked,li[data-task=">"]>p>input:checked,li[data-task="I"]>input:checked,li[data-task="I"]>p>input:checked,li[data-task="b"]>input:checked,li[data-task="b"]>p>input:checked,li[data-task="c"]>input:checked,li[data-task="c"]>p>input:checked,li[data-task="d"]>input:checked,li[data-task="d"]>p>input:checked,li[data-task="f"]>input:checked,li[data-task="f"]>p>input:checked,li[data-task="k"]>input:checked,li[data-task="k"]>p>input:checked,li[data-task="l"]>input:checked,li[data-task="l"]>p>input:checked,li[data-task="p"]>input:checked,li[data-task="p"]>p>input:checked,li[data-task="u"]>input:checked,li[data-task="u"]>p>input:checked,li[data-task="w"]>input:checked,li[data-task="w"]>p>input:checked{--checkbox-marker-color:transparent;border:none;border-radius:0;background-image:none;background-color:currentColor;-webkit-mask-size:var(--checkbox-icon);-webkit-mask-position:50% 50%}input[data-task=">"]:checked,li[data-task=">"]>input:checked,li[data-task=">"]>p>input:checked{color:var(--text-faint);transform:rotate(90deg);-webkit-mask-position:50% 100%;-webkit-mask-image:url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' class='h-5 w-5' viewBox='0 0 20 20' fill='currentColor'%3E%3Cpath d='M10.894 2.553a1 1 0 00-1.788 0l-7 14a1 1 0 001.169 1.409l5-1.429A1 1 0 009 15.571V11a1 1 0 112 0v4.571a1 1 0 00.725.962l5 1.428a1 1 0 001.17-1.408l-7-14z' /%3E%3C/svg%3E")}input[data-task="<"]:checked,li[data-task="<"]>input:checked,li[data-task="<"]>p>input:checked{color:var(--text-faint);-webkit-mask-image:url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' class='h-5 w-5' viewBox='0 0 20 20' fill='currentColor'%3E%3Cpath fill-rule='evenodd' d='M10 18a8 8 0 100-16 8 8 0 000 16zm1-12a1 1 0 10-2 0v4a1 1 0 00.293.707l2.828 2.829a1 1 0 101.415-1.415L11 9.586V6z' clip-rule='evenodd' /%3E%3C/svg%3E");-webkit-mask-image:url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' class='h-5 w-5' viewBox='0 0 20 20' fill='currentColor'%3E%3Cpath fill-rule='evenodd' d='M6 2a1 1 0 00-1 1v1H4a2 2 0 00-2 2v10a2 2 0 002 2h12a2 2 0 002-2V6a2 2 0 00-2-2h-1V3a1 1 0 10-2 0v1H7V3a1 1 0 00-1-1zm0 5a1 1 0 000 2h8a1 1 0 100-2H6z' clip-rule='evenodd' /%3E%3C/svg%3E")}input[data-task="?"]:checked,li[data-task="?"]>input:checked,li[data-task="?"]>p>input:checked{--checkbox-marker-color:transparent;background-color:var(--color-yellow);border-color:var(--color-yellow);background-position:50% 50%;background-size:200% 90%;background-image:url('data:image/svg+xml,%3Csvg xmlns="http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg" width="20" height="20" preserveAspectRatio="xMidYMid meet" viewBox="0 0 16 16"%3E%3Cpath fill="white" fill-rule="evenodd" d="M4.475 5.458c-.284 0-.514-.237-.47-.517C4.28 3.24 5.576 2 7.825 2c2.25 0 3.767 1.36 3.767 3.215c0 1.344-.665 2.288-1.79 2.973c-1.1.659-1.414 1.118-1.414 2.01v.03a.5.5 0 0 1-.5.5h-.77a.5.5 0 0 1-.5-.495l-.003-.2c-.043-1.221.477-2.001 1.645-2.712c1.03-.632 1.397-1.135 1.397-2.028c0-.979-.758-1.698-1.926-1.698c-1.009 0-1.71.529-1.938 1.402c-.066.254-.278.461-.54.461h-.777ZM7.496 14c.622 0 1.095-.474 1.095-1.09c0-.618-.473-1.092-1.095-1.092c-.606 0-1.087.474-1.087 1.091S6.89 14 7.496 14Z"%2F%3E%3C%2Fsvg%3E')}.theme-dark input[data-task="?"]:checked,.theme-dark li[data-task="?"]>input:checked,.theme-dark li[data-task="?"]>p>input:checked{background-image:url('data:image/svg+xml,%3Csvg xmlns="http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg" width="20" height="20" preserveAspectRatio="xMidYMid meet" viewBox="0 0 16 16"%3E%3Cpath fill="black" fill-opacity="0.8" fill-rule="evenodd" d="M4.475 5.458c-.284 0-.514-.237-.47-.517C4.28 3.24 5.576 2 7.825 2c2.25 0 3.767 1.36 3.767 3.215c0 1.344-.665 2.288-1.79 2.973c-1.1.659-1.414 1.118-1.414 2.01v.03a.5.5 0 0 1-.5.5h-.77a.5.5 0 0 1-.5-.495l-.003-.2c-.043-1.221.477-2.001 1.645-2.712c1.03-.632 1.397-1.135 1.397-2.028c0-.979-.758-1.698-1.926-1.698c-1.009 0-1.71.529-1.938 1.402c-.066.254-.278.461-.54.461h-.777ZM7.496 14c.622 0 1.095-.474 1.095-1.09c0-.618-.473-1.092-1.095-1.092c-.606 0-1.087.474-1.087 1.091S6.89 14 7.496 14Z"%2F%3E%3C%2Fsvg%3E')}input[data-task="/"]:checked,li[data-task="/"]>input:checked,li[data-task="/"]>p>input:checked{background-image:none;background-color:transparent;position:relative;overflow:hidden}input[data-task="/"]:checked:after,li[data-task="/"]>input:checked:after,li[data-task="/"]>p>input:checked:after{top:0;left:0;content:" ";display:block;position:absolute;background-color:var(--background-modifier-accent);width:calc(50% - .5px);height:100%;-webkit-mask-image:none}input[data-task="!"]:checked,li[data-task="!"]>input:checked,li[data-task="!"]>p>input:checked{color:var(--color-orange);-webkit-mask-image:url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' class='h-5 w-5' viewBox='0 0 20 20' fill='currentColor'%3E%3Cpath fill-rule='evenodd' d='M8.257 3.099c.765-1.36 2.722-1.36 3.486 0l5.58 9.92c.75 1.334-.213 2.98-1.742 2.98H4.42c-1.53 0-2.493-1.646-1.743-2.98l5.58-9.92zM11 13a1 1 0 11-2 0 1 1 0 012 0zm-1-8a1 1 0 00-1 1v3a1 1 0 002 0V6a1 1 0 00-1-1z' clip-rule='evenodd' /%3E%3C/svg%3E")}input[data-task="\""]:checked,input[data-task="“"]:checked,li[data-task="\""]>input:checked,li[data-task="\""]>p>input:checked,li[data-task="“"]>input:checked,li[data-task="“"]>p>input:checked{--checkbox-marker-color:transparent;background-position:50% 50%;background-color:var(--color-cyan);border-color:var(--color-cyan);background-size:75%;background-repeat:no-repeat;background-image:url('data:image/svg+xml,%3Csvg xmlns="http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg" width="20" height="20" preserveAspectRatio="xMidYMid meet" viewBox="0 0 24 24"%3E%3Cpath fill="white" d="M6.5 10c-.223 0-.437.034-.65.065c.069-.232.14-.468.254-.68c.114-.308.292-.575.469-.844c.148-.291.409-.488.601-.737c.201-.242.475-.403.692-.604c.213-.21.492-.315.714-.463c.232-.133.434-.28.65-.35l.539-.222l.474-.197l-.485-1.938l-.597.144c-.191.048-.424.104-.689.171c-.271.05-.56.187-.882.312c-.318.142-.686.238-1.028.466c-.344.218-.741.4-1.091.692c-.339.301-.748.562-1.05.945c-.33.358-.656.734-.909 1.162c-.293.408-.492.856-.702 1.299c-.19.443-.343.896-.468 1.336c-.237.882-.343 1.72-.384 2.437c-.034.718-.014 1.315.028 1.747c.015.204.043.402.063.539l.025.168l.026-.006A4.5 4.5 0 1 0 6.5 10zm11 0c-.223 0-.437.034-.65.065c.069-.232.14-.468.254-.68c.114-.308.292-.575.469-.844c.148-.291.409-.488.601-.737c.201-.242.475-.403.692-.604c.213-.21.492-.315.714-.463c.232-.133.434-.28.65-.35l.539-.222l.474-.197l-.485-1.938l-.597.144c-.191.048-.424.104-.689.171c-.271.05-.56.187-.882.312c-.317.143-.686.238-1.028.467c-.344.218-.741.4-1.091.692c-.339.301-.748.562-1.05.944c-.33.358-.656.734-.909 1.162c-.293.408-.492.856-.702 1.299c-.19.443-.343.896-.468 1.336c-.237.882-.343 1.72-.384 2.437c-.034.718-.014 1.315.028 1.747c.015.204.043.402.063.539l.025.168l.026-.006A4.5 4.5 0 1 0 17.5 10z"%2F%3E%3C%2Fsvg%3E')}.theme-dark input[data-task="\""]:checked,.theme-dark input[data-task="“"]:checked,.theme-dark li[data-task="\""]>input:checked,.theme-dark li[data-task="\""]>p>input:checked,.theme-dark li[data-task="“"]>input:checked,.theme-dark li[data-task="“"]>p>input:checked{background-image:url('data:image/svg+xml,%3Csvg xmlns="http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg" width="20" height="20" preserveAspectRatio="xMidYMid meet" viewBox="0 0 24 24"%3E%3Cpath fill="black" fill-opacity="0.7" d="M6.5 10c-.223 0-.437.034-.65.065c.069-.232.14-.468.254-.68c.114-.308.292-.575.469-.844c.148-.291.409-.488.601-.737c.201-.242.475-.403.692-.604c.213-.21.492-.315.714-.463c.232-.133.434-.28.65-.35l.539-.222l.474-.197l-.485-1.938l-.597.144c-.191.048-.424.104-.689.171c-.271.05-.56.187-.882.312c-.318.142-.686.238-1.028.466c-.344.218-.741.4-1.091.692c-.339.301-.748.562-1.05.945c-.33.358-.656.734-.909 1.162c-.293.408-.492.856-.702 1.299c-.19.443-.343.896-.468 1.336c-.237.882-.343 1.72-.384 2.437c-.034.718-.014 1.315.028 1.747c.015.204.043.402.063.539l.025.168l.026-.006A4.5 4.5 0 1 0 6.5 10zm11 0c-.223 0-.437.034-.65.065c.069-.232.14-.468.254-.68c.114-.308.292-.575.469-.844c.148-.291.409-.488.601-.737c.201-.242.475-.403.692-.604c.213-.21.492-.315.714-.463c.232-.133.434-.28.65-.35l.539-.222l.474-.197l-.485-1.938l-.597.144c-.191.048-.424.104-.689.171c-.271.05-.56.187-.882.312c-.317.143-.686.238-1.028.467c-.344.218-.741.4-1.091.692c-.339.301-.748.562-1.05.944c-.33.358-.656.734-.909 1.162c-.293.408-.492.856-.702 1.299c-.19.443-.343.896-.468 1.336c-.237.882-.343 1.72-.384 2.437c-.034.718-.014 1.315.028 1.747c.015.204.043.402.063.539l.025.168l.026-.006A4.5 4.5 0 1 0 17.5 10z"%2F%3E%3C%2Fsvg%3E')}input[data-task="-"]:checked,li[data-task="-"]>input:checked,li[data-task="-"]>p>input:checked{color:var(--text-faint);-webkit-mask-image:url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' class='h-5 w-5' viewBox='0 0 20 20' fill='currentColor'%3E%3Cpath fill-rule='evenodd' d='M3 10a1 1 0 011-1h12a1 1 0 110 2H4a1 1 0 01-1-1z' clip-rule='evenodd' /%3E%3C/svg%3E")}body:not(.tasks) .markdown-preview-view ul li[data-task="-"].task-list-item.is-checked,body:not(.tasks) .markdown-source-view.mod-cm6 .HyperMD-task-line[data-task]:is([data-task="-"]),body:not(.tasks) li[data-task="-"].task-list-item.is-checked{color:var(--text-faint);text-decoration:line-through solid var(--text-faint) 1px}input[data-task="*"]:checked,li[data-task="*"]>input:checked,li[data-task="*"]>p>input:checked{color:var(--color-yellow);-webkit-mask-image:url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' class='h-5 w-5' viewBox='0 0 20 20' fill='currentColor'%3E%3Cpath d='M9.049 2.927c.3-.921 1.603-.921 1.902 0l1.07 3.292a1 1 0 00.95.69h3.462c.969 0 1.371 1.24.588 1.81l-2.8 2.034a1 1 0 00-.364 1.118l1.07 3.292c.3.921-.755 1.688-1.54 1.118l-2.8-2.034a1 1 0 00-1.175 0l-2.8 2.034c-.784.57-1.838-.197-1.539-1.118l1.07-3.292a1 1 0 00-.364-1.118L2.98 8.72c-.783-.57-.38-1.81.588-1.81h3.461a1 1 0 00.951-.69l1.07-3.292z' /%3E%3C/svg%3E")}input[data-task="l"]:checked,li[data-task="l"]>input:checked,li[data-task="l"]>p>input:checked{color:var(--color-red);-webkit-mask-image:url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' class='h-5 w-5' viewBox='0 0 20 20' fill='currentColor'%3E%3Cpath fill-rule='evenodd' d='M5.05 4.05a7 7 0 119.9 9.9L10 18.9l-4.95-4.95a7 7 0 010-9.9zM10 11a2 2 0 100-4 2 2 0 000 4z' clip-rule='evenodd' /%3E%3C/svg%3E")}input[data-task="i"]:checked,li[data-task="i"]>input:checked,li[data-task="i"]>p>input:checked{--checkbox-marker-color:transparent;background-color:var(--color-blue);border-color:var(--color-blue);background-position:50%;background-size:100%;background-image:url('data:image/svg+xml,%3Csvg xmlns="http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg" width="20" height="20" preserveAspectRatio="xMidYMid meet" viewBox="0 0 512 512"%3E%3Cpath fill="none" stroke="white" stroke-linecap="round" stroke-linejoin="round" stroke-width="40" d="M196 220h64v172"%2F%3E%3Cpath fill="none" stroke="white" stroke-linecap="round" stroke-miterlimit="10" stroke-width="40" d="M187 396h138"%2F%3E%3Cpath fill="white" d="M256 160a32 32 0 1 1 32-32a32 32 0 0 1-32 32Z"%2F%3E%3C%2Fsvg%3E')}.theme-dark input[data-task="i"]:checked,.theme-dark li[data-task="i"]>input:checked,.theme-dark li[data-task="i"]>p>input:checked{background-image:url('data:image/svg+xml,%3Csvg xmlns="http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg" width="20" height="20" preserveAspectRatio="xMidYMid meet" viewBox="0 0 512 512"%3E%3Cpath fill="none" stroke="black" stroke-opacity="0.8" stroke-linecap="round" stroke-linejoin="round" stroke-width="40" d="M196 220h64v172"%2F%3E%3Cpath fill="none" stroke="black" stroke-opacity="0.8" stroke-linecap="round" stroke-miterlimit="10" stroke-width="40" d="M187 396h138"%2F%3E%3Cpath fill="black" fill-opacity="0.8" d="M256 160a32 32 0 1 1 32-32a32 32 0 0 1-32 32Z"%2F%3E%3C%2Fsvg%3E')}input[data-task="S"]:checked,li[data-task="S"]>input:checked,li[data-task="S"]>p>input:checked{--checkbox-marker-color:transparent;border-color:var(--color-green);background-color:var(--color-green);background-size:100%;background-image:url('data:image/svg+xml,%3Csvg xmlns="http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg" width="20" height="20" preserveAspectRatio="xMidYMid meet" viewBox="0 0 48 48"%3E%3Cpath fill="white" fill-rule="evenodd" d="M26 8a2 2 0 1 0-4 0v2a8 8 0 1 0 0 16v8a4.002 4.002 0 0 1-3.773-2.666a2 2 0 0 0-3.771 1.332A8.003 8.003 0 0 0 22 38v2a2 2 0 1 0 4 0v-2a8 8 0 1 0 0-16v-8a4.002 4.002 0 0 1 3.773 2.666a2 2 0 0 0 3.771-1.332A8.003 8.003 0 0 0 26 10V8Zm-4 6a4 4 0 0 0 0 8v-8Zm4 12v8a4 4 0 0 0 0-8Z" clip-rule="evenodd"%2F%3E%3C%2Fsvg%3E')}.theme-dark input[data-task="S"]:checked,.theme-dark li[data-task="S"]>input:checked,.theme-dark li[data-task="S"]>p>input:checked{background-image:url('data:image/svg+xml,%3Csvg xmlns="http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg" width="20" height="20" preserveAspectRatio="xMidYMid meet" viewBox="0 0 48 48"%3E%3Cpath fill-opacity="0.8" fill="black" fill-rule="evenodd" d="M26 8a2 2 0 1 0-4 0v2a8 8 0 1 0 0 16v8a4.002 4.002 0 0 1-3.773-2.666a2 2 0 0 0-3.771 1.332A8.003 8.003 0 0 0 22 38v2a2 2 0 1 0 4 0v-2a8 8 0 1 0 0-16v-8a4.002 4.002 0 0 1 3.773 2.666a2 2 0 0 0 3.771-1.332A8.003 8.003 0 0 0 26 10V8Zm-4 6a4 4 0 0 0 0 8v-8Zm4 12v8a4 4 0 0 0 0-8Z" clip-rule="evenodd"%2F%3E%3C%2Fsvg%3E')}input[data-task="I"]:checked,li[data-task="I"]>input:checked,li[data-task="I"]>p>input:checked{color:var(--color-yellow);-webkit-mask-image:url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' class='h-5 w-5' viewBox='0 0 20 20' fill='currentColor'%3E%3Cpath d='M11 3a1 1 0 10-2 0v1a1 1 0 102 0V3zM15.657 5.757a1 1 0 00-1.414-1.414l-.707.707a1 1 0 001.414 1.414l.707-.707zM18 10a1 1 0 01-1 1h-1a1 1 0 110-2h1a1 1 0 011 1zM5.05 6.464A1 1 0 106.464 5.05l-.707-.707a1 1 0 00-1.414 1.414l.707.707zM5 10a1 1 0 01-1 1H3a1 1 0 110-2h1a1 1 0 011 1zM8 16v-1h4v1a2 2 0 11-4 0zM12 14c.015-.34.208-.646.477-.859a4 4 0 10-4.954 0c.27.213.462.519.476.859h4.002z' /%3E%3C/svg%3E")}input[data-task="f"]:checked,li[data-task="f"]>input:checked,li[data-task="f"]>p>input:checked{color:var(--color-red);-webkit-mask-image:url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' class='h-5 w-5' viewBox='0 0 20 20' fill='currentColor'%3E%3Cpath fill-rule='evenodd' d='M12.395 2.553a1 1 0 00-1.45-.385c-.345.23-.614.558-.822.88-.214.33-.403.713-.57 1.116-.334.804-.614 1.768-.84 2.734a31.365 31.365 0 00-.613 3.58 2.64 2.64 0 01-.945-1.067c-.328-.68-.398-1.534-.398-2.654A1 1 0 005.05 6.05 6.981 6.981 0 003 11a7 7 0 1011.95-4.95c-.592-.591-.98-.985-1.348-1.467-.363-.476-.724-1.063-1.207-2.03zM12.12 15.12A3 3 0 017 13s.879.5 2.5.5c0-1 .5-4 1.25-4.5.5 1 .786 1.293 1.371 1.879A2.99 2.99 0 0113 13a2.99 2.99 0 01-.879 2.121z' clip-rule='evenodd' /%3E%3C/svg%3E")}input[data-task="k"]:checked,li[data-task="k"]>input:checked,li[data-task="k"]>p>input:checked{color:var(--color-yellow);-webkit-mask-image:url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' class='h-5 w-5' viewBox='0 0 20 20' fill='currentColor'%3E%3Cpath fill-rule='evenodd' d='M18 8a6 6 0 01-7.743 5.743L10 14l-1 1-1 1H6v2H2v-4l4.257-4.257A6 6 0 1118 8zm-6-4a1 1 0 100 2 2 2 0 012 2 1 1 0 102 0 4 4 0 00-4-4z' clip-rule='evenodd' /%3E%3C/svg%3E")}input[data-task="u"]:checked,li[data-task="u"]>input:checked,li[data-task="u"]>p>input:checked{color:var(--color-green);-webkit-mask-image:url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' class='h-5 w-5' viewBox='0 0 20 20' fill='currentColor'%3E%3Cpath fill-rule='evenodd' d='M12 7a1 1 0 110-2h5a1 1 0 011 1v5a1 1 0 11-2 0V8.414l-4.293 4.293a1 1 0 01-1.414 0L8 10.414l-4.293 4.293a1 1 0 01-1.414-1.414l5-5a1 1 0 011.414 0L11 10.586 14.586 7H12z' clip-rule='evenodd' /%3E%3C/svg%3E")}input[data-task="d"]:checked,li[data-task="d"]>input:checked,li[data-task="d"]>p>input:checked{color:var(--color-red);-webkit-mask-image:url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' class='h-5 w-5' viewBox='0 0 20 20' fill='currentColor'%3E%3Cpath fill-rule='evenodd' d='M12 13a1 1 0 100 2h5a1 1 0 001-1V9a1 1 0 10-2 0v2.586l-4.293-4.293a1 1 0 00-1.414 0L8 9.586 3.707 5.293a1 1 0 00-1.414 1.414l5 5a1 1 0 001.414 0L11 9.414 14.586 13H12z' clip-rule='evenodd' /%3E%3C/svg%3E")}input[data-task="w"]:checked,li[data-task="w"]>input:checked,li[data-task="w"]>p>input:checked{color:var(--color-purple);-webkit-mask-image:url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' class='h-5 w-5' viewBox='0 0 20 20' fill='currentColor'%3E%3Cpath fill-rule='evenodd' d='M6 3a1 1 0 011-1h.01a1 1 0 010 2H7a1 1 0 01-1-1zm2 3a1 1 0 00-2 0v1a2 2 0 00-2 2v1a2 2 0 00-2 2v.683a3.7 3.7 0 011.055.485 1.704 1.704 0 001.89 0 3.704 3.704 0 014.11 0 1.704 1.704 0 001.89 0 3.704 3.704 0 014.11 0 1.704 1.704 0 001.89 0A3.7 3.7 0 0118 12.683V12a2 2 0 00-2-2V9a2 2 0 00-2-2V6a1 1 0 10-2 0v1h-1V6a1 1 0 10-2 0v1H8V6zm10 8.868a3.704 3.704 0 01-4.055-.036 1.704 1.704 0 00-1.89 0 3.704 3.704 0 01-4.11 0 1.704 1.704 0 00-1.89 0A3.704 3.704 0 012 14.868V17a1 1 0 001 1h14a1 1 0 001-1v-2.132zM9 3a1 1 0 011-1h.01a1 1 0 110 2H10a1 1 0 01-1-1zm3 0a1 1 0 011-1h.01a1 1 0 110 2H13a1 1 0 01-1-1z' clip-rule='evenodd' /%3E%3C/svg%3E")}input[data-task="p"]:checked,li[data-task="p"]>input:checked,li[data-task="p"]>p>input:checked{color:var(--color-green);-webkit-mask-image:url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' class='h-5 w-5' viewBox='0 0 20 20' fill='currentColor'%3E%3Cpath d='M2 10.5a1.5 1.5 0 113 0v6a1.5 1.5 0 01-3 0v-6zM6 10.333v5.43a2 2 0 001.106 1.79l.05.025A4 4 0 008.943 18h5.416a2 2 0 001.962-1.608l1.2-6A2 2 0 0015.56 8H12V4a2 2 0 00-2-2 1 1 0 00-1 1v.667a4 4 0 01-.8 2.4L6.8 7.933a4 4 0 00-.8 2.4z' /%3E%3C/svg%3E")}input[data-task="c"]:checked,li[data-task="c"]>input:checked,li[data-task="c"]>p>input:checked{color:var(--color-orange);-webkit-mask-image:url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' class='h-5 w-5' viewBox='0 0 20 20' fill='currentColor'%3E%3Cpath d='M18 9.5a1.5 1.5 0 11-3 0v-6a1.5 1.5 0 013 0v6zM14 9.667v-5.43a2 2 0 00-1.105-1.79l-.05-.025A4 4 0 0011.055 2H5.64a2 2 0 00-1.962 1.608l-1.2 6A2 2 0 004.44 12H8v4a2 2 0 002 2 1 1 0 001-1v-.667a4 4 0 01.8-2.4l1.4-1.866a4 4 0 00.8-2.4z' /%3E%3C/svg%3E")}input[data-task="b"]:checked,li[data-task="b"]>input:checked,li[data-task="b"]>p>input:checked{color:var(--color-orange);-webkit-mask-image:url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' class='h-5 w-5' viewBox='0 0 20 20' fill='currentColor'%3E%3Cpath d='M5 4a2 2 0 012-2h6a2 2 0 012 2v14l-5-2.5L5 18V4z' /%3E%3C/svg%3E")}.colorful-active .nav-files-container{--nav-item-background-active:var(--interactive-accent);--nav-item-color-active:var(--text-on-accent)}.colorful-active #calendar-container .active,.colorful-active #calendar-container .active.today,.colorful-active #calendar-container .active:hover,.colorful-active #calendar-container .day:active{background-color:var(--interactive-accent);color:var(--text-on-accent)}.colorful-active #calendar-container .active .dot,.colorful-active #calendar-container .day:active .dot,.colorful-active #calendar-container .today.active .dot{fill:var(--text-on-accent)}body:not(.colorful-active) .horizontal-tab-nav-item.is-active,body:not(.colorful-active) .vertical-tab-nav-item.is-active{background-color:var(--background-modifier-hover);color:var(--text-normal)}body{--frame-background:hsl( var(--frame-background-h), var(--frame-background-s), var(--frame-background-l));--frame-icon-color:var(--frame-muted-color)}.theme-light{--frame-background-h:var(--accent-h);--frame-background-s:var(--accent-s);--frame-background-l:calc(var(--accent-l) + 30%);--frame-outline-color:hsla( var(--frame-background-h), var(--frame-background-s), calc(var(--frame-background-l) - 6.5%), 1 );--frame-muted-color:hsl( var(--frame-background-h), calc(var(--frame-background-s) - 10%), calc(var(--frame-background-l) - 35%))}.theme-dark{--frame-background-h:var(--accent-h);--frame-background-s:var(--accent-s);--frame-background-l:calc(var(--accent-l) - 25%);--frame-outline-color:hsla( var(--frame-background-h), calc(var(--frame-background-s) - 2%), calc(var(--frame-background-l) + 6.5%), 1 );--frame-muted-color:hsl( var(--frame-background-h), calc(var(--frame-background-s) - 10%), calc(var(--frame-background-l) + 25%))}.colorful-frame.theme-dark{--tab-outline-width:0px}.colorful-frame,.colorful-frame.is-focused{--frame-divider-color:var(--frame-outline-color);--titlebar-background:var(--frame-background);--titlebar-background-focused:var(--frame-background);--titlebar-text-color:var(--frame-muted-color);--minimal-tab-text-color:var(--frame-muted-color)}.colorful-frame .workspace-tabs:not(.mod-stacked),.colorful-frame.is-focused .workspace-tabs:not(.mod-stacked){--tab-text-color:var(--minimal-tab-text-color);--tab-text-color-focused:var(--minimal-tab-text-color)}.colorful-frame .mod-top .workspace-tab-header-container,.colorful-frame .titlebar,.colorful-frame .workspace-ribbon.mod-left:before,.colorful-frame.is-focused .mod-top .workspace-tab-header-container,.colorful-frame.is-focused .titlebar,.colorful-frame.is-focused .workspace-ribbon.mod-left:before{--tab-outline-color:var(--frame-outline-color);--tab-divider-color:var(--frame-outline-color)}.colorful-frame .mod-root .workspace-tab-header .workspace-tab-header-inner-icon,.colorful-frame.is-focused .mod-root .workspace-tab-header .workspace-tab-header-inner-icon{--icon-color:var(--minimal-tab-text-color-active);--icon-color-hover:var(--minimal-tab-text-color-active);--icon-color-active:var(--minimal-tab-text-color-active);--icon-color-focused:var(--minimal-tab-text-color-active)}.colorful-frame .mod-left-split .mod-top .workspace-tab-header,.colorful-frame .mod-right-split .mod-top .workspace-tab-header,.colorful-frame .sidebar-toggle-button,.colorful-frame .workspace-tab-header-new-tab,.colorful-frame .workspace-tab-header-tab-list,.colorful-frame .workspace-tab-header:not(.is-active),.colorful-frame.is-focused .mod-left-split .mod-top .workspace-tab-header,.colorful-frame.is-focused .mod-right-split .mod-top .workspace-tab-header,.colorful-frame.is-focused .sidebar-toggle-button,.colorful-frame.is-focused .workspace-tab-header-new-tab,.colorful-frame.is-focused .workspace-tab-header-tab-list,.colorful-frame.is-focused .workspace-tab-header:not(.is-active){--background-modifier-hover:var(--frame-outline-color);--icon-color:var(--frame-icon-color);--icon-color-hover:var(--frame-icon-color);--icon-color-active:var(--frame-icon-color);--icon-color-focused:var(--frame-icon-color);--icon-color-focus:var(--frame-icon-color)}.colorful-frame .mod-left-split .mod-top .workspace-tab-header.is-active .workspace-tab-header-inner-icon,.colorful-frame .mod-right-split .mod-top .workspace-tab-header.is-active .workspace-tab-header-inner-icon,.colorful-frame.is-focused .mod-left-split .mod-top .workspace-tab-header.is-active .workspace-tab-header-inner-icon,.colorful-frame.is-focused .mod-right-split .mod-top .workspace-tab-header.is-active .workspace-tab-header-inner-icon{color:var(--frame-icon-color)}.workspace-leaf-resize-handle{transition:none}.colorful-frame.is-hidden-frameless:not(.minimal-focus-mode) .workspace-split.mod-left-split>.workspace-leaf-resize-handle,.colorful-frame.is-hidden-frameless:not(.minimal-focus-mode) .workspace-split.mod-right-split>.workspace-leaf-resize-handle,.colorful-frame.is-hidden-frameless:not(.minimal-focus-mode) .workspace-split.mod-vertical>*>.workspace-leaf-resize-handle{-webkit-app-region:no-drag;border:0;z-index:15}.colorful-frame.is-hidden-frameless:not(.minimal-focus-mode) .workspace-split.mod-left-split>.workspace-leaf-resize-handle:after,.colorful-frame.is-hidden-frameless:not(.minimal-focus-mode) .workspace-split.mod-right-split>.workspace-leaf-resize-handle:after,.colorful-frame.is-hidden-frameless:not(.minimal-focus-mode) .workspace-split.mod-vertical>*>.workspace-leaf-resize-handle:after{content:"";height:100%;width:1px;background:linear-gradient(180deg,var(--frame-outline-color) var(--header-height),var(--divider-color) var(--header-height));top:0;position:absolute}.colorful-frame.is-hidden-frameless:not(.minimal-focus-mode) .workspace-split.mod-left-split>.workspace-leaf-resize-handle:hover:after,.colorful-frame.is-hidden-frameless:not(.minimal-focus-mode) .workspace-split.mod-right-split>.workspace-leaf-resize-handle:hover:after,.colorful-frame.is-hidden-frameless:not(.minimal-focus-mode) .workspace-split.mod-vertical>*>.workspace-leaf-resize-handle:hover:after{background:var(--divider-color-hover)}.colorful-frame.is-hidden-frameless:not(.minimal-focus-mode) .workspace-split.mod-right-split>.workspace-leaf-resize-handle:after{left:0}.colorful-frame.is-hidden-frameless:not(.minimal-focus-mode) .workspace-split.mod-left-split>.workspace-leaf-resize-handle:after,.colorful-frame.is-hidden-frameless:not(.minimal-focus-mode) .workspace-split.mod-vertical>*>.workspace-leaf-resize-handle:after{right:0}body.colorful-headings{--h1-color:var(--color-red);--h2-color:var(--color-orange);--h3-color:var(--color-yellow);--h4-color:var(--color-green);--h5-color:var(--color-blue);--h6-color:var(--color-purple)}body.colorful-headings .modal{--h1-color:var(--text-normal);--h2-color:var(--text-normal);--h3-color:var(--text-normal);--h4-color:var(--text-normal);--h5-color:var(--text-normal);--h6-color:var(--text-normal)}.is-mobile .tree-item-self .collapse-icon{width:20px}body:not(.minimal-icons-off) svg.calendar-day,body:not(.minimal-icons-off) svg.excalidraw-icon,body:not(.minimal-icons-off) svg.globe,body:not(.minimal-icons-off) svg.longform,body:not(.minimal-icons-off) svg.obsidian-leaflet-plugin-icon-map{background-color:currentColor}body:not(.minimal-icons-off) svg.excalidraw-icon path{display:none}body:not(.minimal-icons-off) svg.bar-graph{-webkit-mask-image:url('data:image/svg+xml;utf8,')}body:not(.minimal-icons-off) svg.excalidraw-icon{-webkit-mask-image:url('data:image/svg+xml;utf8,')}body:not(.minimal-icons-off) svg.longform{-webkit-mask-image:url('data:image/svg+xml;utf8,')}.workspace-ribbon.mod-left{border-left:0;transition:none}.minimal-focus-mode.is-translucent .workspace-ribbon.mod-left.is-collapsed,.minimal-focus-mode.is-translucent .workspace-ribbon.mod-left.is-collapsed:before{background-color:var(--background-primary)!important}.minimal-focus-mode .workspace-ribbon.mod-left{transition:background-color 0s linear 0s}.minimal-focus-mode .workspace-ribbon.mod-left.is-collapsed{border-color:transparent;background-color:var(--background-primary)}.minimal-focus-mode .workspace-ribbon.mod-left.is-collapsed:before{background-color:var(--background-primary);border-color:transparent}.minimal-focus-mode .workspace-ribbon.mod-left.is-collapsed .side-dock-actions,.minimal-focus-mode .workspace-ribbon.mod-left.is-collapsed .side-dock-settings{opacity:0;transition:opacity .1s ease-in-out .1s}.minimal-focus-mode .workspace-ribbon.mod-left.is-collapsed:hover .side-dock-actions,.minimal-focus-mode .workspace-ribbon.mod-left.is-collapsed:hover .side-dock-settings{opacity:1;transition:opacity .1s ease-in-out .1s}.minimal-focus-mode.borders-title .workspace-ribbon.mod-left.is-collapsed{border-right:none}.minimal-focus-mode .mod-top-right-space .sidebar-toggle-button.mod-right{opacity:0}.minimal-focus-mode:not(.minimal-status-off) .status-bar{opacity:0;transition:opacity .2s ease-in-out}.minimal-focus-mode .status-bar:hover{opacity:1;transition:opacity .2s ease-in-out}.minimal-focus-mode .mod-root .workspace-tabs{position:relative}.minimal-focus-mode .mod-root .workspace-tabs:before:hover{background-color:#00f}.minimal-focus-mode .mod-root .workspace-tab-header-container{height:0;transition:all .1s linear .6s;--tab-outline-width:0px}.minimal-focus-mode .mod-root .workspace-tab-header-container .workspace-tab-header-container-inner,.minimal-focus-mode .mod-root .workspace-tab-header-container .workspace-tab-header-new-tab,.minimal-focus-mode .mod-root .workspace-tab-header-container .workspace-tab-header-tab-list{opacity:0;transition:opacity .1s linear .6s}.minimal-focus-mode .mod-root .workspace-tab-header-container .workspace-tab-header-spacer:before{width:100%;content:" ";background-color:transparent;height:15px;position:absolute;z-index:100;top:0;left:0}.minimal-focus-mode .mod-root .workspace-tab-header-container:hover{height:var(--header-height);--tab-outline-width:1px;transition:all .1s linear 50ms}.minimal-focus-mode .mod-root .workspace-tab-header-container:hover .workspace-tab-header-container-inner,.minimal-focus-mode .mod-root .workspace-tab-header-container:hover .workspace-tab-header-new-tab,.minimal-focus-mode .mod-root .workspace-tab-header-container:hover .workspace-tab-header-tab-list{opacity:1;transition:opacity .1s linear 50ms}.minimal-focus-mode.mod-macos:not(.is-fullscreen) .workspace:not(.is-left-sidedock-open) .mod-root .workspace-tabs.mod-stacked .workspace-tab-container .workspace-tab-header-inner{padding-top:30px}body.show-view-header .app-container .workspace-split.mod-root>.workspace-leaf .view-header{transition:height .1s linear .1s}body.minimal-focus-mode.show-view-header .mod-root .workspace-leaf .view-header{height:0;transition:all .1s linear .5s}body.minimal-focus-mode.show-view-header .view-header::after{width:100%;content:" ";background-color:transparent;height:40px;position:absolute;z-index:-9;top:0}body.minimal-focus-mode.show-view-header .view-actions,body.minimal-focus-mode.show-view-header .view-header-nav-buttons,body.minimal-focus-mode.show-view-header .view-header-title-container{opacity:0;transition:all .1s linear .5s}body.minimal-focus-mode.show-view-header .mod-root .workspace-leaf .view-header:focus-within,body.minimal-focus-mode.show-view-header .mod-root .workspace-leaf .view-header:hover,body.minimal-focus-mode.show-view-header .mod-root .workspace-tab-header-container:hover~.workspace-tab-container .view-header{height:calc(var(--header-height) + 2px);transition:all .1s linear .1s}body.minimal-focus-mode.show-view-header .mod-root .workspace-tab-header-container:hover~.workspace-tab-container .view-header .view-actions,body.minimal-focus-mode.show-view-header .mod-root .workspace-tab-header-container:hover~.workspace-tab-container .view-header .view-header-nav-buttons,body.minimal-focus-mode.show-view-header .mod-root .workspace-tab-header-container:hover~.workspace-tab-container .view-header .view-header-title-container,body.minimal-focus-mode.show-view-header .view-header:focus-within .view-actions,body.minimal-focus-mode.show-view-header .view-header:focus-within .view-header-nav-buttons,body.minimal-focus-mode.show-view-header .view-header:focus-within .view-header-title-container,body.minimal-focus-mode.show-view-header .view-header:hover .view-actions,body.minimal-focus-mode.show-view-header .view-header:hover .view-header-nav-buttons,body.minimal-focus-mode.show-view-header .view-header:hover .view-header-title-container{opacity:1;transition:all .1s linear .1s}body.minimal-focus-mode.show-view-header .view-content{height:100%}.full-width-media{--iframe-width:100%}.full-width-media .markdown-preview-view .external-embed,.full-width-media .markdown-preview-view .image-embed img:not(.link-favicon):not(.emoji):not([width]),.full-width-media .markdown-preview-view audio,.full-width-media .markdown-preview-view img:not(.link-favicon):not(.emoji):not([width]),.full-width-media .markdown-preview-view p:has(.external-embed),.full-width-media .markdown-preview-view video,.full-width-media .markdown-source-view .external-embed,.full-width-media .markdown-source-view .image-embed img:not(.link-favicon):not(.emoji):not([width]),.full-width-media .markdown-source-view audio,.full-width-media .markdown-source-view img:not(.link-favicon):not(.emoji):not([width]),.full-width-media .markdown-source-view p:has(.external-embed),.full-width-media .markdown-source-view video{width:100%}.markdown-rendered img:not(.emoji),.markdown-rendered video,.markdown-source-view img:not(.emoji),.markdown-source-view video{border-radius:var(--image-radius)}.table-small table:not(.calendar){--table-text-size:85%}.table-tiny table:not(.calendar){--table-text-size:75%}.row-hover{--table-edge-cell-padding-first:8px;--table-edge-cell-padding-last:8px}.row-alt{--table-row-alt-background:var(--background-table-rows);--table-edge-cell-padding-first:8px;--table-edge-cell-padding-last:8px}.col-alt .markdown-rendered:not(.cards){--table-column-alt-background:var(--background-table-rows)}.table-tabular table:not(.calendar){font-variant-numeric:tabular-nums}.table-lines{--table-border-width:var(--border-width);--table-header-border-width:var(--border-width);--table-column-first-border-width:var(--border-width);--table-column-last-border-width:var(--border-width);--table-row-last-border-width:var(--border-width);--table-edge-cell-padding:8px;--table-edge-cell-padding-first:8px;--table-edge-cell-padding-last:8px;--table-add-button-border-width:1px}.table-nowrap{--table-white-space:nowrap}.table-nowrap .table-wrap,.trim-cols{--table-white-space:normal}.table-numbers{--table-numbers-padding-right:0.5em}.table-numbers table:not(.calendar){counter-reset:section}.table-numbers table:not(.calendar)>thead>tr>th:first-child{white-space:nowrap}.table-numbers table:not(.calendar)>thead>tr>th:first-child::before{content:" ";padding-right:var(--table-numbers-padding-right);display:inline-block;min-width:2em}.table-numbers table:not(.calendar)>thead>tr>th:first-child .cm-s-obsidian,.table-numbers table:not(.calendar)>thead>tr>th:first-child .table-cell-wrapper{display:inline-block;min-width:10px}.table-numbers table:not(.calendar).table-editor>tbody>tr>td:first-child .table-cell-wrapper,.table-numbers table:not(.calendar):not(.table-editor)>tbody>tr>td:first-child{white-space:nowrap}.table-numbers table:not(.calendar).table-editor>tbody>tr>td:first-child .table-cell-wrapper::before,.table-numbers table:not(.calendar):not(.table-editor)>tbody>tr>td:first-child::before{counter-increment:section;content:counter(section) " ";text-align:center;padding-right:var(--table-numbers-padding-right);display:inline-block;min-width:2em;color:var(--text-faint);font-variant-numeric:tabular-nums}.table-numbers table:not(.calendar).table-editor>tbody>tr>td:first-child .table-cell-wrapper .cm-s-obsidian,.table-numbers table:not(.calendar):not(.table-editor)>tbody>tr>td:first-child .cm-s-obsidian{display:inline-block;min-width:10px}.table-numbers .table-editor{--table-numbers-padding-right:0}.row-lines-off{--table-row-last-border-width:0}.row-lines-off .table-view-table>tbody>tr>td,.row-lines-off table:not(.calendar) tbody>tr:last-child>td,.row-lines-off table:not(.calendar) tbody>tr>td{border-bottom:none}.row-lines:not(.table-lines) .markdown-preview-view:not(.cards),.row-lines:not(.table-lines) .markdown-source-view:not(.cards){--table-row-last-border-width:0px}.row-lines:not(.table-lines) .markdown-preview-view:not(.cards) .table-view-table>tbody>tr:not(:last-child)>td,.row-lines:not(.table-lines) .markdown-preview-view:not(.cards) table:not(.calendar) tbody>tr:not(:last-child)>td,.row-lines:not(.table-lines) .markdown-source-view:not(.cards) .table-view-table>tbody>tr:not(:last-child)>td,.row-lines:not(.table-lines) .markdown-source-view:not(.cards) table:not(.calendar) tbody>tr:not(:last-child)>td{border-bottom:var(--table-border-width) solid var(--table-border-color)}.col-lines .table-view-table thead>tr>th:not(:last-child),.col-lines .table-view-table>tbody>tr>td:not(:last-child),.col-lines table:not(.calendar) tbody>tr>td:not(:last-child){border-right:var(--table-border-width) solid var(--background-modifier-border)}.row-hover{--table-row-background-hover:hsla( var(--accent-h), 50%, 80%, 20% )}.theme-dark .row-hover,.theme-dark.row-hover{--table-row-background-hover:hsla( var(--accent-h), 30%, 40%, 20% )}:root{--image-mix:normal}.image-blend-light{--image-mix:multiply}.theme-dark .markdown-preview-view img,.theme-dark .markdown-source-view img{opacity:var(--image-muted);transition:opacity .25s linear}@media print{body{--image-muted:1}}.theme-dark .markdown-preview-view img:hover,.theme-dark .markdown-source-view img:hover,.theme-dark .print-preview img{opacity:1;transition:opacity .25s linear}.theme-light img{mix-blend-mode:var(--image-mix)}div[src$="#invert"],div[src$="#multiply"]{background-color:var(--background-primary)}.theme-dark div[src$="#invert"] img,.theme-dark img[src$="#invert"],.theme-dark span[src$="#invert"] img{filter:invert(1) hue-rotate(180deg);mix-blend-mode:screen}.theme-dark div[src$="#multiply"] img,.theme-dark img[src$="#multiply"],.theme-dark span[src$="#multiply"] img{mix-blend-mode:screen}.theme-light div[src$="#multiply"] img,.theme-light img[src$="#multiply"],.theme-light span[src$="#multiply"] img{mix-blend-mode:multiply}.theme-light div[src$="#invertW"] img,.theme-light img[src$="#invertW"],.theme-light span[src$=invertW] img{filter:invert(1) hue-rotate(180deg)}img[src$="#circle"],span[src$="#circle"] img,span[src$="#round"] img{border-radius:50%;aspect-ratio:1/1}img[src$="#outline"],span[src$="#outline"] img{border:1px solid var(--ui1)}img[src$="#interface"],span[src$="#interface"] img{border:1px solid var(--ui1);box-shadow:0 .5px .9px rgba(0,0,0,.021),0 1.3px 2.5px rgba(0,0,0,.03),0 3px 6px rgba(0,0,0,.039),0 10px 20px rgba(0,0,0,.06);margin-top:10px;margin-bottom:15px;border-radius:var(--radius-m)}body{--image-grid-fit:cover;--image-grid-background:transparent;--img-grid-gap:0.5rem}@media (max-width:400pt){body{--img-grid-gap:0.25rem}}.img-grid-ratio{--image-grid-fit:contain}.img-grid .image-embed.is-loaded{line-height:0}.img-grid .image-embed.is-loaded img{background-color:var(--image-grid-background)}.img-grid .image-embed.is-loaded img:active{background-color:transparent}.img-grid .markdown-preview-section>div:has(.image-embed)>p{display:grid;margin-block-start:var(--img-grid-gap);margin-block-end:var(--img-grid-gap);grid-column-gap:var(--img-grid-gap);grid-row-gap:0;grid-template-columns:repeat(auto-fit,minmax(0,1fr))}.img-grid .markdown-preview-section>div:has(.image-embed)>p>br{display:none}.img-grid .markdown-preview-section>div:has(.image-embed)>p>img{object-fit:var(--image-grid-fit);align-self:stretch}.img-grid .markdown-preview-section>div:has(.image-embed)>p>.internal-embed img{object-fit:var(--image-grid-fit);height:100%;align-self:center}body:not(.zoom-off) .view-content div:not(.canvas-node-content) img{max-width:100%;cursor:zoom-in}body:not(.zoom-off) .view-content img:active{cursor:zoom-out}body:not(.zoom-off) .view-content .markdown-preview-view img[referrerpolicy=no-referrer]:active{background-color:var(--background-primary);padding:10px}body:not(.zoom-off) .view-content .image-embed:not(.canvas-node-content):active,body:not(.zoom-off) .view-content .markdown-preview-view img[referrerpolicy=no-referrer]:active{--container-img-width:100%;--container-img-max-width:100%;aspect-ratio:unset;cursor:zoom-out;display:block;z-index:200;position:fixed;max-height:calc(100% + 1px);max-width:100%;height:calc(100% + 1px);width:100%;object-fit:contain;margin:-.5px auto 0!important;text-align:center;padding:0;left:0;right:0;bottom:0}body:not(.zoom-off) .view-content .image-embed:not(.canvas-node-content):active:after{background-color:var(--background-primary);opacity:.9;content:" ";height:calc(100% + 1px);width:100%;position:fixed;left:0;right:1px;z-index:0}body:not(.zoom-off) .view-content .image-embed:not(.canvas-node-content):active img{aspect-ratio:unset;top:50%;z-index:99;transform:translateY(-50%);padding:0;margin:0 auto;width:calc(100% - 20px);max-height:95vh;object-fit:contain;left:0;right:0;bottom:0;position:absolute;opacity:1}body:not(.zoom-off) .view-content .markdown-source-view.mod-cm6 .cm-content>[contenteditable=false]:has(.image-embed:not(.canvas-node-content):active){contain:unset!important}.labeled-nav.is-fullscreen:not(.colorful-frame),.labeled-nav.mod-windows{--labeled-nav-top-margin:0}.labeled-nav{--labeled-nav-top-margin:var(--header-height)}.labeled-nav.is-translucent .mod-left-split .mod-top .workspace-tab-header-container .workspace-tab-header-container-inner{background-color:transparent}.labeled-nav.is-hidden-frameless:not(.is-fullscreen) .mod-left-split .workspace-tabs.mod-top-left-space .workspace-tab-header-container{padding-left:0}.labeled-nav.mod-macos .mod-left-split .mod-top .workspace-tab-header-container:before,.labeled-nav.mod-macos.is-hidden-frameless:not(.is-fullscreen) .mod-left-split .mod-top .workspace-tab-header-container:before{-webkit-app-region:drag;position:absolute;width:calc(100% - var(--divider-width));height:calc(var(--header-height) - var(--tab-outline-width));border-bottom:0 solid var(--tab-outline-color)}.labeled-nav.mod-macos.is-hidden-frameless:not(.is-fullscreen) .workspace-ribbon.mod-left:not(.is-collapsed){border:none;--tab-outline-width:0px}.labeled-nav.colorful-frame.is-hidden-frameless:not(.is-fullscreen) .mod-left-split .mod-top .workspace-tab-header-container:before,.labeled-nav.mod-macos:not(.hider-ribbon) .mod-left-split .mod-top .workspace-tab-header-container:before,.labeled-nav:not(.is-hidden-frameless) .mod-left-split .mod-top .workspace-tab-header-container:before{border-bottom:var(--tab-outline-width) solid var(--tab-outline-color)}.labeled-nav.colorful-frame.is-hidden-frameless:not(.is-fullscreen) .workspace-ribbon.mod-left:not(.is-collapsed),.labeled-nav.mod-macos:not(.hider-ribbon) .workspace-ribbon.mod-left:not(.is-collapsed),.labeled-nav:not(.is-hidden-frameless) .workspace-ribbon.mod-left:not(.is-collapsed){--tab-outline-width:1px}.labeled-nav:not(.is-hidden-frameless) .mod-left-split .mod-top .workspace-tab-header-container:before{position:absolute;top:0;content:" "}.labeled-nav.hider-ribbon.mod-macos.is-hidden-frameless:not(.is-fullscreen):not(.is-popout-window) .mod-left-split:not(.is-sidedock-collapsed) .workspace-tabs.mod-top-left-space .workspace-tab-header-container{padding-left:0}.labeled-nav .mod-left-split .mod-top .workspace-tab-header-spacer{display:none}.labeled-nav .mod-left-split .mod-top .workspace-tab-header-inner-title{display:inline-block;font-weight:500;font-size:var(--font-adaptive-smaller)}.labeled-nav .mod-left-split .mod-top .workspace-tab-header-container{position:relative;flex-direction:column-reverse!important;height:auto;width:100%}.labeled-nav .mod-left-split .mod-top .workspace-tab-header-container .sidebar-toggle-button.mod-left{position:absolute;justify-content:flex-end;padding-right:var(--size-4-2);top:0;right:0}.labeled-nav .mod-left-split .mod-top .workspace-tab-header-container .workspace-tab-header-container-inner{padding-top:var(--size-4-2);margin-top:var(--labeled-nav-top-margin);flex-direction:column!important;background-color:var(--background-secondary)}.labeled-nav .mod-left-split .mod-top .workspace-tab-header-container .workspace-tab-container-inner{flex-grow:1;gap:0;padding:var(--size-4-2) var(--size-4-3)}.labeled-nav .mod-left-split .mod-top .workspace-tab-header{--icon-color:var(--text-muted);--tab-text-color:var(--text-muted);--tab-text-color-focused:var(--text-muted);padding:0;margin-bottom:2px;border:none;height:auto}.labeled-nav .mod-left-split .mod-top .workspace-tab-header.is-active:not(:hover){background-color:transparent}.labeled-nav .mod-left-split .mod-top .workspace-tab-header.is-active,.labeled-nav .mod-left-split .mod-top .workspace-tab-header:hover{opacity:1;--tab-text-color-active:var(--text-normal);--tab-text-color-focused:var(--text-normal);--tab-text-color-focused-active:var(--text-normal);--tab-text-color-focused-active-current:var(--text-normal);--icon-color:var(--text-normal)}.labeled-nav .mod-left-split .mod-top .workspace-tab-header .workspace-tab-header-inner{gap:var(--size-2-3);padding:var(--size-4-1) var(--size-4-2);box-shadow:none;border:none}.labeled-nav .mod-left-split .mod-top .workspace-tab-header.has-active-menu:hover,.labeled-nav .mod-left-split .mod-top .workspace-tab-header.is-active:hover{background-color:transparent}.labeled-nav .mod-left-split .mod-top .workspace-tab-header.is-active:hover .workspace-tab-header-inner,.labeled-nav .mod-left-split .mod-top .workspace-tab-header:not(.is-active):hover .workspace-tab-header-inner{background-color:var(--nav-item-background-hover)}.labeled-nav .mod-left-split .mod-top .workspace-tab-header.is-active .workspace-tab-header-inner-icon,.labeled-nav .mod-left-split .mod-top .workspace-tab-header:hover .workspace-tab-header-inner-icon{color:var(--icon-color-active)}.labeled-nav .mod-left-split .mod-top .workspace-tab-header-container{border:none;padding:0}body:not(.links-int-on){--link-decoration:none}body:not(.links-ext-on){--link-external-decoration:none}body:not(.sidebar-color) .mod-right-split{--background-secondary:var(--background-primary)}body:not(.sidebar-color) .mod-right-split :not(.mod-top) .workspace-tab-header-container{--tab-container-background:var(--background-primary)}body{--minimal-tab-text-color:var(--text-muted);--minimal-tab-text-color-active:var(--text-normal)}.workspace-tabs:not(.mod-stacked){--tab-text-color:var(--minimal-tab-text-color);--tab-text-color-focused:var(--minimal-tab-text-color);--tab-text-color-active:var(--minimal-tab-text-color-active);--tab-text-color-focused-active:var(--minimal-tab-text-color-active);--tab-text-color-focused-active-current:var(--minimal-tab-text-color-active)}.tabs-plain-square .mod-root{--tab-curve:0;--tab-radius:0;--tab-radius-active:0}.tabs-plain-square .mod-root .workspace-tab-header-container{padding-right:0}.tabs-plain-square .mod-root .workspace-tab-header-container-inner{margin-top:-1px;margin-left:-15px}.tabs-plain-square .mod-root .workspace-tab-header{padding:0}.tabs-plain-square .mod-root .workspace-tab-header-inner{padding:0 8px}.tabs-square .mod-root{--tab-curve:0;--tab-radius:0;--tab-radius-active:0}.tabs-underline .mod-root{--tab-curve:0;--tab-radius:0;--tab-radius-active:0;--tab-outline-width:0px;--tab-background-active:transparent}.tabs-underline .mod-root .workspace-tab-header-container{border-bottom:1px solid var(--divider-color)}.tabs-underline .mod-root .workspace-tab-header{border-bottom:2px solid transparent}.tabs-underline .mod-root .workspace-tab-header:hover{border-bottom:2px solid var(--ui2)}.tabs-underline .mod-root .workspace-tab-header:hover .workspace-tab-header-inner{background-color:transparent}.tabs-underline .mod-root .workspace-tab-header.is-active{border-bottom:2px solid var(--ax3)}.tabs-underline .mod-root .workspace-tab-header-inner:hover{background-color:transparent}body:not(.sidebar-tabs-underline):not(.sidebar-tabs-index):not(.sidebar-tabs-square) .workspace>.workspace-split:not(.mod-root) .workspace-tabs:not(.mod-top) .workspace-tab-header-container{--tab-outline-width:0}.tabs-modern.colorful-frame .mod-root .mod-top.workspace-tabs:not(.mod-stacked){--tab-background:var(--frame-outline-color);--tab-outline-width:1px}.tabs-modern.colorful-frame .mod-root .mod-top.workspace-tabs:not(.mod-stacked) .workspace-tab-header.is-active .workspace-tab-header-inner-close-button,.tabs-modern.colorful-frame .mod-root .mod-top.workspace-tabs:not(.mod-stacked) .workspace-tab-header:hover .workspace-tab-header-inner-close-button{color:var(--minimal-tab-text-color-active)}.tabs-modern.minimal-focus-mode .mod-root .workspace-tab-header-container:hover{--tab-outline-width:0px}.tabs-modern .mod-root{--tab-container-background:var(--background-primary)}.tabs-modern .mod-root .workspace-tabs:not(.mod-stacked){--tab-background:var(--background-modifier-hover);--tab-height:calc(var(--header-height) - 14px);--tab-outline-width:0px}.tabs-modern .mod-root .workspace-tabs:not(.mod-stacked) .workspace-tab-header-inner::after,.tabs-modern .mod-root .workspace-tabs:not(.mod-stacked) .workspace-tab-header::after,.tabs-modern .mod-root .workspace-tabs:not(.mod-stacked) .workspace-tab-header::before{display:none}.tabs-modern .mod-root .workspace-tabs:not(.mod-stacked) .workspace-tab-header-container-inner{align-items:center;margin:0;padding:2px var(--size-4-2) 0 var(--size-4-1)}.tabs-modern .mod-root .workspace-tabs:not(.mod-stacked) .workspace-tab-header-inner-title{text-overflow:ellipsis;-webkit-mask-image:none}.tabs-modern .mod-root .workspace-tabs:not(.mod-stacked) .workspace-tab-header{background:0 0;border-radius:5px;border:none;box-shadow:none;height:var(--tab-height);margin-left:var(--size-4-1);padding:0}.tabs-modern .mod-root .workspace-tabs:not(.mod-stacked) .workspace-tab-header.is-active .workspace-tab-header-inner-title{color:var(--tab-text-color-active)}.tabs-modern .mod-root .workspace-tabs:not(.mod-stacked) .workspace-tab-header.is-active.mod-active,.tabs-modern .mod-root .workspace-tabs:not(.mod-stacked) .workspace-tab-header:hover{opacity:1;background-color:var(--tab-background)}.tabs-modern .mod-root .workspace-tabs:not(.mod-stacked) .workspace-tab-header-new-tab{margin-right:0}.tabs-modern .mod-root .workspace-tabs:not(.mod-stacked) .workspace-tab-header-inner{padding:0 var(--size-4-1) 0 var(--size-4-2);border:1px solid transparent}.tabs-modern .mod-root .workspace-tabs:not(.mod-stacked) .workspace-tab-header:not(.is-active):hover .workspace-tab-header-inner{background-color:transparent}.tabs-modern .mod-root .workspace-tabs:not(.mod-stacked) .workspace-tab-header.is-active:not(.mod-active) .workspace-tab-header-inner,.tabs-modern .mod-root .workspace-tabs:not(.mod-stacked) .workspace-tab-header:not(:hover):not(.mod-active) .workspace-tab-header-inner{border:1px solid var(--tab-outline-color)}.tabs-modern.sidebar-tabs-default .mod-right-split,.tabs-modern.sidebar-tabs-wide .mod-right-split{--tab-outline-width:0}.sidebar-tabs-underline .mod-right-split .workspace-tab-header-spacer,.sidebar-tabs-underline.labeled-nav .mod-left-split .workspace-tabs:not(.mod-top) .workspace-tab-header-spacer,.sidebar-tabs-underline:not(.labeled-nav) .mod-left-split .workspace-tab-header-spacer{display:none}.sidebar-tabs-underline .mod-right-split .workspace-tab-header-container,.sidebar-tabs-underline.labeled-nav .mod-left-split .workspace-tabs:not(.mod-top) .workspace-tab-header-container,.sidebar-tabs-underline:not(.labeled-nav) .mod-left-split .workspace-tab-header-container{padding-right:0}.sidebar-tabs-underline .mod-right-split .workspace-tab-header-container-inner,.sidebar-tabs-underline.labeled-nav .mod-left-split .workspace-tabs:not(.mod-top) .workspace-tab-header-container-inner,.sidebar-tabs-underline:not(.labeled-nav) .mod-left-split .workspace-tab-header-container-inner{padding:0;margin:0;flex-grow:1;gap:0}.sidebar-tabs-underline .mod-right-split .workspace-tab-header-container .workspace-tab-header,.sidebar-tabs-underline.labeled-nav .mod-left-split .workspace-tabs:not(.mod-top) .workspace-tab-header-container .workspace-tab-header,.sidebar-tabs-underline:not(.labeled-nav) .mod-left-split .workspace-tab-header-container .workspace-tab-header{flex-grow:1;border-radius:0;max-width:100px}.sidebar-tabs-underline .mod-right-split .workspace-tab-header-container .workspace-tab-header.is-active,.sidebar-tabs-underline .mod-right-split .workspace-tab-header-container .workspace-tab-header:hover,.sidebar-tabs-underline.labeled-nav .mod-left-split .workspace-tabs:not(.mod-top) .workspace-tab-header-container .workspace-tab-header.is-active,.sidebar-tabs-underline.labeled-nav .mod-left-split .workspace-tabs:not(.mod-top) .workspace-tab-header-container .workspace-tab-header:hover,.sidebar-tabs-underline:not(.labeled-nav) .mod-left-split .workspace-tab-header-container .workspace-tab-header.is-active,.sidebar-tabs-underline:not(.labeled-nav) .mod-left-split .workspace-tab-header-container .workspace-tab-header:hover{background-color:transparent}.sidebar-tabs-underline .mod-right-split .workspace-tab-header-container .workspace-tab-header.is-active .workspace-tab-header-inner,.sidebar-tabs-underline .mod-right-split .workspace-tab-header-container .workspace-tab-header:hover .workspace-tab-header-inner,.sidebar-tabs-underline.labeled-nav .mod-left-split .workspace-tabs:not(.mod-top) .workspace-tab-header-container .workspace-tab-header.is-active .workspace-tab-header-inner,.sidebar-tabs-underline.labeled-nav .mod-left-split .workspace-tabs:not(.mod-top) .workspace-tab-header-container .workspace-tab-header:hover .workspace-tab-header-inner,.sidebar-tabs-underline:not(.labeled-nav) .mod-left-split .workspace-tab-header-container .workspace-tab-header.is-active .workspace-tab-header-inner,.sidebar-tabs-underline:not(.labeled-nav) .mod-left-split .workspace-tab-header-container .workspace-tab-header:hover .workspace-tab-header-inner{background-color:transparent}.sidebar-tabs-underline .mod-right-split .workspace-tab-header-container .workspace-tab-header .workspace-tab-header-inner,.sidebar-tabs-underline.labeled-nav .mod-left-split .workspace-tabs:not(.mod-top) .workspace-tab-header-container .workspace-tab-header .workspace-tab-header-inner,.sidebar-tabs-underline:not(.labeled-nav) .mod-left-split .workspace-tab-header-container .workspace-tab-header .workspace-tab-header-inner{border-bottom:2px solid transparent;border-radius:0}.sidebar-tabs-underline .mod-right-split .workspace-tab-header-container .workspace-tab-header .workspace-tab-header-inner:hover,.sidebar-tabs-underline.labeled-nav .mod-left-split .workspace-tabs:not(.mod-top) .workspace-tab-header-container .workspace-tab-header .workspace-tab-header-inner:hover,.sidebar-tabs-underline:not(.labeled-nav) .mod-left-split .workspace-tab-header-container .workspace-tab-header .workspace-tab-header-inner:hover{border-color:var(--ui2)}.sidebar-tabs-underline .mod-right-split .workspace-tab-header-container .workspace-tab-header.is-active .workspace-tab-header-inner,.sidebar-tabs-underline.labeled-nav .mod-left-split .workspace-tabs:not(.mod-top) .workspace-tab-header-container .workspace-tab-header.is-active .workspace-tab-header-inner,.sidebar-tabs-underline:not(.labeled-nav) .mod-left-split .workspace-tab-header-container .workspace-tab-header.is-active .workspace-tab-header-inner{border-color:var(--ax3);padding-top:1px}.sidebar-tabs-square .mod-left-split,.sidebar-tabs-square .mod-right-split{--tab-radius:0px}.sidebar-tabs-index.labeled-nav .mod-left-split .workspace-tabs:not(.mod-top),.sidebar-tabs-index:not(.labeled-nav) .mod-left-split,.sidebar-tabs-square.labeled-nav .mod-left-split .workspace-tabs:not(.mod-top),.sidebar-tabs-square:not(.labeled-nav) .mod-left-split{--tab-background-active:var(--background-secondary)}.sidebar-tabs-index .mod-right-split .workspace-tab-header-container-inner,.sidebar-tabs-index.labeled-nav .mod-left-split .workspace-tabs:not(.mod-top) .workspace-tab-header-container-inner,.sidebar-tabs-index:not(.labeled-nav) .mod-left-split .workspace-tab-header-container-inner,.sidebar-tabs-square .mod-right-split .workspace-tab-header-container-inner,.sidebar-tabs-square.labeled-nav .mod-left-split .workspace-tabs:not(.mod-top) .workspace-tab-header-container-inner,.sidebar-tabs-square:not(.labeled-nav) .mod-left-split .workspace-tab-header-container-inner{padding:1px var(--size-4-2) 0;margin:6px 0 calc(var(--tab-outline-width) * -1);flex-grow:1}.sidebar-tabs-index .mod-right-split .workspace-tab-header,.sidebar-tabs-index.labeled-nav .mod-left-split .workspace-tabs:not(.mod-top) .workspace-tab-header,.sidebar-tabs-index:not(.labeled-nav) .mod-left-split .workspace-tab-header,.sidebar-tabs-square .mod-right-split .workspace-tab-header,.sidebar-tabs-square.labeled-nav .mod-left-split .workspace-tabs:not(.mod-top) .workspace-tab-header,.sidebar-tabs-square:not(.labeled-nav) .mod-left-split .workspace-tab-header{flex-grow:1;max-width:100px;border-radius:var(--tab-radius) var(--tab-radius) 0 0}.sidebar-tabs-index .mod-right-split .workspace-tab-header.is-active,.sidebar-tabs-index.labeled-nav .mod-left-split .workspace-tabs:not(.mod-top) .workspace-tab-header.is-active,.sidebar-tabs-index:not(.labeled-nav) .mod-left-split .workspace-tab-header.is-active,.sidebar-tabs-square .mod-right-split .workspace-tab-header.is-active,.sidebar-tabs-square.labeled-nav .mod-left-split .workspace-tabs:not(.mod-top) .workspace-tab-header.is-active,.sidebar-tabs-square:not(.labeled-nav) .mod-left-split .workspace-tab-header.is-active{box-shadow:0 0 0 var(--tab-outline-width) var(--tab-outline-color);color:var(--tab-text-color-active);background-color:var(--tab-background-active)}.sidebar-tabs-wide .mod-right-split .workspace-tab-header-container-inner,.sidebar-tabs-wide.labeled-nav .mod-left-split .workspace-tabs:not(.mod-top) .workspace-tab-header-container-inner,.sidebar-tabs-wide:not(.labeled-nav) .mod-left-split .workspace-tab-header-container-inner{flex-grow:1;border:1px solid var(--tab-outline-color);padding:3px;margin:6px 8px 6px;border-radius:4px}.sidebar-tabs-wide .mod-right-split .workspace-tab-header,.sidebar-tabs-wide.labeled-nav .mod-left-split .workspace-tabs:not(.mod-top) .workspace-tab-header,.sidebar-tabs-wide:not(.labeled-nav) .mod-left-split .workspace-tab-header{flex-grow:1}.sidebar-tabs-wide .mod-right-split .workspace-tab-header.is-active,.sidebar-tabs-wide.labeled-nav .mod-left-split .workspace-tabs:not(.mod-top) .workspace-tab-header.is-active,.sidebar-tabs-wide:not(.labeled-nav) .mod-left-split .workspace-tab-header.is-active{border-color:transparent}.sidebar-tabs-wide .mod-right-split .workspace-tab-header-container,.sidebar-tabs-wide.labeled-nav .mod-left-split .workspace-tabs:not(.mod-top) .workspace-tab-header-container,.sidebar-tabs-wide:not(.labeled-nav) .mod-left-split .workspace-tab-header-container{padding-right:0}.sidebar-tabs-wide .mod-right-split .workspace-tab-header-spacer,.sidebar-tabs-wide.labeled-nav .mod-left-split .workspace-tabs:not(.mod-top) .workspace-tab-header-spacer,.sidebar-tabs-wide:not(.labeled-nav) .mod-left-split .workspace-tab-header-spacer{display:none}.full-file-names{--nav-item-white-space:normal}body:not(.full-file-names){--nav-item-white-space:nowrap}body:not(.full-file-names) .tree-item-self{white-space:nowrap}body:not(.full-file-names) .tree-item-inner{text-overflow:ellipsis;overflow:hidden}.theme-dark,.theme-light{--h1l:var(--ui1);--h2l:var(--ui1);--h3l:var(--ui1);--h4l:var(--ui1);--h5l:var(--ui1);--h6l:var(--ui1)}.h1-l .markdown-reading-view h1:not(.embedded-note-title),.h1-l .mod-cm6 .cm-editor .HyperMD-header-1{border-bottom:1px solid var(--h1l);padding-bottom:.4em;margin-block-end:0.6em}.h2-l .markdown-reading-view h2,.h2-l .mod-cm6 .cm-editor .HyperMD-header-2{border-bottom:1px solid var(--h2l);padding-bottom:.4em;margin-block-end:0.6em}.h3-l .markdown-reading-view h3,.h3-l .mod-cm6 .cm-editor .HyperMD-header-3{border-bottom:1px solid var(--h3l);padding-bottom:.4em;margin-block-end:0.6em}.h4-l .markdown-reading-view h4,.h4-l .mod-cm6 .cm-editor .HyperMD-header-4{border-bottom:1px solid var(--h4l);padding-bottom:.4em;margin-block-end:0.6em}.h5-l .markdown-reading-view h5,.h5-l .mod-cm6 .cm-editor .HyperMD-header-5{border-bottom:1px solid var(--h5l);padding-bottom:.4em;margin-block-end:0.6em}.h6-l .markdown-reading-view h6,.h6-l .mod-cm6 .cm-editor .HyperMD-header-6{border-bottom:1px solid var(--h6l);padding-bottom:.4em;margin-block-end:0.6em}.is-tablet .workspace-drawer{padding-top:0}.is-tablet .workspace-drawer:not(.is-pinned){margin:30px 16px 0;height:calc(100vh - 48px);border-radius:15px;border:none}.is-tablet .workspace-drawer-ribbon{background-color:var(--background-primary);border-right:1px solid var(--background-modifier-border)}.is-tablet .workspace-drawer-header,.is-tablet .workspace-drawer.is-pinned .workspace-drawer-header{padding-top:var(--size-4-4)}.is-mobile{--font-bold:600;--font-ui-medium:var(--font-adaptive-small);--interactive-normal:var(--background-secondary);--background-modifier-form-field:var(--background-secondary);--background-modifier-form-field-highlighted:var(--background-secondary)}.is-mobile .markdown-source-view.mod-cm6 .cm-gutters{margin-left:0}.is-mobile .workspace-drawer.mod-left.is-pinned{max-width:var(--mobile-left-sidebar-width);min-width:150pt}.is-mobile .workspace-drawer.mod-right.is-pinned{max-width:var(--mobile-right-sidebar-width);min-width:150pt}.backlink-pane>.tree-item-self,.backlink-pane>.tree-item-self:hover,.outgoing-link-pane>.tree-item-self,.outgoing-link-pane>.tree-item-self:hover{color:var(--text-muted);text-transform:uppercase;letter-spacing:.05em;font-size:var(--font-adaptive-smallest);font-weight:500}body{--canvas-dot-pattern:var(--background-modifier-border-hover)}.canvas-node-label{font-size:var(--font-adaptive-small)}.canvas-edges :not(.is-themed) path.canvas-display-path{stroke:var(--background-modifier-border-focus)}.canvas-edges :not(.is-themed) polyline.canvas-path-end{stroke:var(--background-modifier-border-focus);fill:var(--background-modifier-border-focus)}.canvas-node-container{border:1.5px solid var(--background-modifier-border-focus)}.node-insert-event.mod-inside-iframe{--max-width:100%;--folding-offset:0px}.node-insert-event.mod-inside-iframe .cm-editor .cm-content{padding-top:0}.is-mobile .nav-folder.mod-root>.nav-folder-title .nav-folder-title-content{display:none}body:not(.is-mobile) .nav-folder.mod-root>.nav-folder-title .nav-folder-title-content{font-weight:500;text-transform:uppercase;letter-spacing:.05em;color:var(--text-muted);font-size:var(--font-adaptive-smallest)}.nav-buttons-container{justify-content:flex-start}.nav-file-tag{padding-top:.2em;background-color:transparent;color:var(--text-faint)}.nav-file .is-active .nav-file-tag,.nav-file:hover .nav-file-tag{color:var(--text-muted)}input.prompt-input,input.prompt-input:focus,input.prompt-input:focus-visible,input.prompt-input:hover{border-color:rgba(var(--mono-rgb-100),.05)}.is-mobile .mod-publish .modal-content{display:unset;padding:10px 10px 10px;margin-bottom:120px;overflow-x:hidden}.is-mobile .mod-publish .button-container,.is-mobile .modal.mod-publish .modal-button-container{padding:10px 15px 30px;margin-left:0;left:0}.is-mobile .modal.mod-publish .modal-title{padding:10px 20px;margin:0 -10px;border-bottom:1px solid var(--background-modifier-border)}.is-mobile .publish-site-settings-container{margin-right:0;padding:0}.is-mobile .modal.mod-publish .modal-content .publish-sections-container{margin-right:0;padding-right:0}@media (max-width:400pt){.is-mobile .publish-changes-info,.is-mobile .publish-section-header{flex-wrap:wrap;border:none}.is-mobile .publish-changes-info .publish-changes-add-linked-btn{flex-basis:100%;margin-top:10px}.is-mobile .publish-section-header-text{flex-basis:100%;margin-bottom:10px;margin-left:20px;margin-top:-8px}.is-mobile .publish-section{background:var(--background-secondary);border-radius:10px;padding:12px 12px 1px}.is-mobile .publish-changes-switch-site{flex-grow:0;margin-right:10px}}.release-notes-view .cm-scroller.is-readable-line-width{width:var(--line-width);max-width:var(--max-width);margin:0 auto}.search-results-info{border-bottom:none}@media (max-width:400pt){.is-mobile .modal.mod-sync-log{width:100vw;height:100vh;max-height:calc(100vh - 32px);box-shadow:0 -32px 0 32px var(--background-primary);bottom:0;padding-bottom:10px}}.obsidian-banner.solid{border-bottom:var(--divider-width) solid var(--divider-color)}.contextual-typography .markdown-preview-view div.has-banner-icon.obsidian-banner-wrapper{overflow:visible}.theme-dark .markdown-preview-view img.emoji{opacity:1}body.theme-dark .button-default,body.theme-light .button-default{border:none;box-shadow:none;height:var(--input-height);background:var(--background-modifier-hover);color:var(--text-normal);font-size:revert;font-weight:500;transform:none;transition:all .1s linear;padding:0 20px}body.theme-dark .button-default:hover,body.theme-light .button-default:hover{border:none;background:var(--background-modifier-border-hover);box-shadow:none;transform:none;transition:all .1s linear}body.theme-dark .button-default:active,body.theme-dark .button-default:focus,body.theme-light .button-default:active,body.theme-light .button-default:focus{box-shadow:none}body .button-default.blue{background-color:var(--color-blue)!important}.button-default.red{background-color:var(--color-red)!important}.button-default.green{background-color:var(--color-green)!important}.button-default.yellow{background-color:var(--color-yellow)!important}.button-default.purple{background-color:var(--color-purple)!important}.workspace-leaf-content[data-type=calendar] .view-content{padding:5px 0 0 0}.mod-root #calendar-container{width:var(--line-width);max-width:var(--max-width);margin:0 auto;padding:0}body{--calendar-dot-active:var(--text-faint);--calendar-dot-today:var(--text-accent)}#calendar-container{padding:0 var(--size-4-4) var(--size-4-1);--color-background-day-empty:var(--background-secondary-alt);--color-background-day-active:var(--background-modifier-hover);--color-background-day-hover:var(--background-modifier-hover);--color-dot:var(--text-faint);--calendar-text-active:inherit;--color-text-title:var(--text-normal);--color-text-heading:var(--text-muted);--color-text-day:var(--text-normal);--color-text-today:var(--text-normal);--color-arrow:var(--text-faint);--color-background-day-empty:transparent}#calendar-container .table{border-collapse:separate;table-layout:fixed}#calendar-container h2{font-weight:400;font-size:var(--h2)}#calendar-container .arrow{cursor:var(--cursor);width:22px;border-radius:4px;padding:3px 7px}#calendar-container .arrow svg{width:12px;height:12px;color:var(--text-faint);opacity:.7}#calendar-container .arrow:hover{fill:var(--text-muted);color:var(--text-muted);background-color:var(--background-modifier-hover)}#calendar-container .arrow:hover svg{color:var(--text-muted);opacity:1}#calendar-container tr th{padding:2px 0 4px;font-weight:500;letter-spacing:.1em;font-size:var(--font-adaptive-smallest)}#calendar-container tr th:first-child{padding-left:0!important}#calendar-container tr td{padding:2px 0 0 0;border-radius:var(--radius-m);cursor:var(--cursor);border:1px solid transparent;transition:none}#calendar-container tr td:first-child{padding-left:0!important}#calendar-container .nav{padding:0;margin:var(--size-4-2) var(--size-4-1)}#calendar-container .dot{margin:0}#calendar-container .month,#calendar-container .title,#calendar-container .year{font-size:calc(var(--font-adaptive-small) + 2px);font-weight:400;color:var(--text-normal)}#calendar-container .today,#calendar-container .today.active{color:var(--text-accent);font-weight:600}#calendar-container .today .dot,#calendar-container .today.active .dot{fill:var(--calendar-dot-today)}#calendar-container .active .task{stroke:var(--text-faint)}#calendar-container .active{color:var(--text-normal)}#calendar-container .reset-button{text-transform:none;letter-spacing:0;font-size:var(--font-adaptive-smaller);font-weight:500;color:var(--text-muted);border-radius:4px;margin:0;padding:2px 8px}#calendar-container .reset-button:hover{color:var(--text-normal);background-color:var(--background-modifier-hover)}#calendar-container .day,#calendar-container .reset-button,#calendar-container .week-num{cursor:var(--cursor)}#calendar-container .day.adjacent-month{color:var(--text-faint);opacity:1}#calendar-container .day{padding:2px 4px 4px}#calendar-container .day,#calendar-container .week-num{font-size:calc(var(--font-adaptive-smaller) + 5%)}#calendar-container .active,#calendar-container .active.today,#calendar-container .day:hover,#calendar-container .week-num:hover{background-color:var(--color-background-day-active);color:var(--calendar-text-active)}#calendar-container .active .dot{fill:var(--calendar-dot-active)}#calendar-container .active .task{stroke:var(--text-faint)}.block-language-chart canvas,.block-language-dataviewjs canvas{margin:1em 0}.theme-dark,.theme-light{--chart-color-1:var(--color-blue);--chart-color-2:var(--color-red);--chart-color-3:var(--color-yellow);--chart-color-4:var(--color-green);--chart-color-5:var(--color-orange);--chart-color-6:var(--color-purple);--chart-color-7:var(--color-cyan);--chart-color-8:var(--color-pink)}.checklist-plugin-main .group .classic,.checklist-plugin-main .group .compact,.checklist-plugin-main .group .page,.checklist-plugin-main .group svg{cursor:var(--cursor)}.workspace .view-content .checklist-plugin-main{padding:10px 10px 15px 15px;--todoList-togglePadding--compact:2px;--todoList-listItemMargin--compact:2px}.checklist-plugin-main .title{font-weight:400;color:var(--text-muted);font-size:var(--font-adaptive-small)}.checklist-plugin-main .group svg{fill:var(--text-faint)}.checklist-plugin-main .group svg:hover{fill:var(--text-normal)}.checklist-plugin-main .group .title:hover{color:var(--text-normal)}.checklist-plugin-main .group:not(:last-child){border-bottom:1px solid var(--background-modifier-border)}.checklist-plugin-main .group{padding:0 0 2px 0}.checklist-plugin-main .group .classic:last-child,.checklist-plugin-main .group .compact:last-child{margin-bottom:10px}.checklist-plugin-main .group .classic,.checklist-plugin-main .group .compact{font-size:var(--font-adaptive-small)}.checklist-plugin-main .group .classic,.checklist-plugin-main .group .compact{background:0 0;border-radius:0;margin:1px auto;padding:0}.checklist-plugin-main .group .classic .content{padding:0}.checklist-plugin-main .group .classic:hover,.checklist-plugin-main .group .compact:hover{background:0 0}.markdown-preview-view.checklist-plugin-main ul>li:not(.task-list-item)::before{display:none}.checklist-plugin-main .group .compact>.toggle .checked{background:var(--text-accent);top:-1px;left:-1px;height:18px;width:18px}.checklist-plugin-main .compact .toggle:hover{opacity:1!important}.checklist-plugin-main .group .count{font-size:var(--font-adaptive-smaller);padding:0;background:0 0;font-weight:400;color:var(--text-faint)}.checklist-plugin-main .group .group-header:hover .count{color:var(--text-muted)}.checklist-plugin-main .group .checkbox{border:1px solid var(--background-modifier-border-hover);min-height:18px;min-width:18px;height:18px;width:18px}.checklist-plugin-main .group .checkbox:hover{border:1px solid var(--background-modifier-border-focus)}.checklist-plugin-main button:active,.checklist-plugin-main button:focus,.checklist-plugin-main button:hover{box-shadow:none!important}.checklist-plugin-main button.collapse{padding:0}body:not(.is-mobile) .checklist-plugin-main button.collapse svg{width:18px;height:18px}.is-mobile .checklist-plugin-main .group-header .title{flex-grow:1;flex-shrink:0}.is-mobile .checklist-plugin-main button{width:auto}.is-mobile .checklist-plugin-main.markdown-preview-view ul{padding-inline-start:0}.is-mobile .workspace .view-content .checklist-plugin-main{padding-bottom:50px}body #cMenuModalBar{box-shadow:0 2px 20px var(--shadow-color)}body #cMenuModalBar .cMenuCommandItem{cursor:var(--cursor)}body #cMenuModalBar button.cMenuCommandItem:hover{background-color:var(--background-modifier-hover)}.MiniSettings-statusbar-button{padding-top:0;padding-bottom:0}.dataview-inline-lists .markdown-preview-view .dataview-ul,.dataview-inline-lists .markdown-source-view .dataview-ul{--list-spacing:0}.dataview-inline-lists .markdown-preview-view .dataview-ul li:not(:last-child):after,.dataview-inline-lists .markdown-source-view .dataview-ul li:not(:last-child):after{content:", "}.dataview-inline-lists .markdown-preview-view ul.dataview-ul>li::before,.dataview-inline-lists .markdown-source-view ul.dataview-ul>li::before{display:none}.dataview-inline-lists .markdown-preview-view .dataview-ul li,.dataview-inline-lists .markdown-source-view .dataview-ul li{display:inline-block;padding-right:.25em}.markdown-rendered table.dataview{margin-block-start:0;margin-block-end:0}.markdown-preview-view .table-view-table>thead>tr>th,body .table-view-table>thead>tr>th{font-weight:400;font-size:var(--table-text-size);color:var(--text-muted);border-bottom:var(--table-border-width) solid var(--table-border-color);cursor:var(--cursor)}table.dataview ul.dataview-ul{list-style:none;padding-inline-start:0;margin-block-start:0em!important;margin-block-end:0em!important}.markdown-preview-view:not(.cards) .table-view-table>tbody>tr>td,.markdown-source-view.mod-cm6:not(.cards) .table-view-table>tbody>tr>td{max-width:var(--max-col-width)}body .dataview.small-text{color:var(--text-faint)}body:not(.row-hover) .dataview.task-list-basic-item:hover,body:not(.row-hover) .dataview.task-list-item:hover,body:not(.row-hover) .table-view-table>tbody>tr:hover{background-color:transparent!important;box-shadow:none}body.row-hover .dataview.task-list-basic-item:hover,body.row-hover .dataview.task-list-item:hover,body.row-hover .table-view-table>tbody>tr:hover{background-color:var(--table-row-background-hover)!important}body .dataview-error{background-color:transparent}.dataview.dataview-error,.markdown-source-view.mod-cm6 .cm-content .dataview.dataview-error{color:var(--text-muted)}body div.dataview-error-box{min-height:0;border:none;background-color:transparent;font-size:var(--table-text-size);border-radius:var(--radius-m);padding:15px 0;justify-content:flex-start}body div.dataview-error-box p{margin-block-start:0;margin-block-end:0;color:var(--text-faint)}.block-language-dataviewjs:has(.dataview-error-box) table.dataview{display:none}.trim-cols .markdown-preview-view .table-view-table>tbody>tr>td,.trim-cols .markdown-source-view.mod-cm6 .table-view-table>tbody>tr>td,.trim-cols .markdown-source-view.mod-cm6 .table-view-table>thead>tr>th{white-space:nowrap;text-overflow:ellipsis;overflow:hidden}ul .dataview .task-list-basic-item:hover,ul .dataview .task-list-item:hover{background-color:transparent;box-shadow:none}body .dataview.result-group{padding-left:0}body .dataview .inline-field-standalone-value,body .dataview.inline-field-key,body .dataview.inline-field-value{font-family:var(--font-text);font-size:calc(var(--font-adaptive-normal) - 2px);background:0 0;color:var(--text-muted)}body .dataview.inline-field-key{padding:0}body .dataview .inline-field-standalone-value{padding:0}body .dataview.inline-field-key::after{margin-left:3px;content:"|";color:var(--background-modifier-border)}body .dataview.inline-field-value{padding:0 1px 0 3px}.markdown-preview-view .block-language-dataview table.calendar th{border:none;cursor:default;background-image:none}.markdown-preview-view .block-language-dataview table.calendar .day{font-size:var(--font-adaptive-small)}.database-plugin__navbar,.database-plugin__scroll-container,.database-plugin__table{width:100%}.dbfolder-table-container{--font-adaptive-normal:var(--table-text-size);--font-size-text:12px}.database-plugin__cell_size_wide .database-plugin__td{padding:.15rem}.database-plugin__table{border-spacing:0!important}.MuiAppBar-root{background-color:transparent!important}.workspace-leaf-content .view-content.dictionary-view-content{padding:0}div[data-type=dictionary-view] .contents{padding-bottom:2rem}div[data-type=dictionary-view] .results>.container{background-color:transparent;margin-top:0;max-width:none;padding:0 10px}div[data-type=dictionary-view] .error,div[data-type=dictionary-view] .errorDescription{text-align:left;font-size:var(--font-adaptive-small);padding:10px 12px 0;margin:0}div[data-type=dictionary-view] .results>.container h3{text-transform:uppercase;letter-spacing:.05em;color:var(--text-muted);font-size:var(--font-adaptive-smallest);font-weight:500;padding:5px 7px 0 2px;margin-bottom:6px}div[data-type=dictionary-view] .container .main{border-radius:0;background-color:transparent;font-size:var(--font-adaptive-smaller);line-height:1.3;color:var(--text-muted);padding:5px 0 0}div[data-type=dictionary-view] .main .definition{padding:10px;border:1px solid var(--background-modifier-border);border-radius:5px;margin:10px 0 5px;background-color:var(--background-primary)}div[data-type=dictionary-view] .main .definition:last-child{border:1px solid var(--background-modifier-border)}div[data-type=dictionary-view] .main .synonyms{padding:10px 0 0}div[data-type=dictionary-view] .main .synonyms p{margin:0}div[data-type=dictionary-view] .main .definition>blockquote{margin:0}div[data-type=dictionary-view] .main .label{color:var(--text-normal);margin-bottom:2px;font-size:var(--font-adaptive-smaller);font-weight:500}div[data-type=dictionary-view] .main .mark{color:var(--text-normal);background-color:var(--text-selection);box-shadow:none}div[data-type=dictionary-view] .main>.opener{font-size:var(--font-adaptive-small);color:var(--text-normal);padding-left:5px}body .excalidraw,body .excalidraw.theme--dark{--color-primary-light:var(--text-selection);--color-primary:var(--interactive-accent);--color-primary-darker:var(--interactive-accent-hover);--color-primary-darkest:var(--interactive-accent-hover);--ui-font:var(--font-interface);--island-bg-color:var(--background-secondary);--icon-fill-color:var(--text-normal);--button-hover:var(--background-modifier-hover);--button-gray-1:var(--background-modifier-hover);--button-gray-2:var(--background-modifier-hover);--focus-highlight-color:var(--background-modifier-border-focus);--default-bg-color:var(--background-primary);--default-border-color:var(--background-modifier-border);--input-border-color:var(--background-modifier-border);--link-color:var(--text-accent);--overlay-bg-color:rgba(255, 255, 255, 0.88);--text-primary-color:var(--text-normal)}.git-view-body .opener{text-transform:uppercase;letter-spacing:.05em;font-size:var(--font-adaptive-smallest);font-weight:500;padding:5px 7px 5px 10px;margin-bottom:6px}.git-view-body .file-view .opener{text-transform:none;letter-spacing:normal;font-size:var(--font-adaptive-smallest);font-weight:400;padding:initial;margin-bottom:0}.git-view-body .file-view .opener .collapse-icon{display:flex!important;margin-left:-7px}.git-view-body{margin-top:6px}.git-view-body .file-view{margin-left:4px}.git-view-body .file-view main:hover{color:var(--text-normal)}.git-view-body .file-view .tools .type{display:none!important}.git-view-body .file-view .tools{opacity:0;transition:opacity .1s}.git-view-body .file-view main:hover>.tools{opacity:1}.git-view-body .staged{margin-bottom:12px}.git-view-body .opener.open{color:var(--text-normal)}div[data-type=git-view] .search-input-container{margin-left:0;width:100%}.git-view-body .opener .collapse-icon{display:none!important}.git-view-body main{background-color:var(--background-primary)!important;width:initial!important}.git-view-body .file-view>main:not(.topLevel){margin-left:7px}div[data-type=git-view] .commit-msg{min-height:2.5em!important;height:2.5em!important;padding:6.5px 8px!important}div[data-type=git-view] .search-input-clear-button{bottom:5.5px}.mod-macos.hider-frameless .workspace-ribbon{border:none}.is-tablet.hider-ribbon{--ribbon-width:0px}.is-tablet.hider-ribbon .side-dock-ribbon{display:none}.hider-ribbon .workspace-ribbon{padding:0}:root{--hider-ribbon-display:none}.ribbon-bottom-left-hover:not(.is-mobile){--hider-ribbon-display:flex}.hider-vault .nav-folder.mod-root>.nav-folder-title{height:4px}.hider-ribbon .workspace-ribbon-collapse-btn{display:none}.hider-ribbon .workspace-ribbon.mod-right{pointer-events:none}.hider-ribbon .workspace-ribbon.mod-left{position:absolute;border-right:0px;margin:0;height:var(--header-height);overflow:visible;flex-basis:0;bottom:0;top:auto;display:var(--hider-ribbon-display)!important;flex-direction:row;z-index:17;opacity:0;transition:opacity .25s ease-in-out;filter:drop-shadow(2px 10px 30px rgba(0,0,0,.2));gap:0}.hider-ribbon .side-dock-actions,.hider-ribbon .side-dock-settings{flex-direction:row;display:var(--hider-ribbon-display);border-top:var(--border-width) solid var(--background-modifier-border);background:var(--background-secondary);margin:0;position:relative;gap:var(--size-2-2)}.hider-ribbon .side-dock-actions{padding-left:8px}.hider-ribbon .side-dock-settings{border-right:var(--border-width) solid var(--background-modifier-border);border-top-right-radius:var(--radius-m);padding:0 var(--size-2-2)}.hider-ribbon .workspace-ribbon.mod-left .side-dock-ribbon-action{display:var(--hider-ribbon-display);margin:7px 0 8px}.hider-ribbon .workspace-ribbon.mod-left:hover{opacity:1;transition:opacity .25s ease-in-out}.hider-ribbon .workspace-ribbon.mod-left .workspace-ribbon-collapse-btn{opacity:0}.hider-ribbon .workspace-split.mod-left-split{margin:0}.hider-ribbon .workspace-leaf-content .item-list{padding-bottom:40px}.popover.hover-editor{--folding-offset:10px}.theme-dark,.theme-light{--he-title-bar-inactive-bg:var(--background-secondary);--he-title-bar-inactive-pinned-bg:var(--background-secondary);--he-title-bar-active-pinned-bg:var(--background-secondary);--he-title-bar-active-bg:var(--background-secondary);--he-title-bar-inactive-fg:var(--text-muted);--he-title-bar-active-fg:var(--text-normal);--he-title-bar-font-size:14px}.theme-light{--popover-shadow:0px 2.7px 3.1px rgba(0, 0, 0, 0.032),0px 5.9px 8.7px rgba(0, 0, 0, 0.052),0px 10.4px 18.1px rgba(0, 0, 0, 0.071),0px 20px 40px rgba(0, 0, 0, 0.11)}.theme-dark{--popover-shadow:0px 2.7px 3.1px rgba(0, 0, 0, 0.081),0px 5.9px 8.7px rgba(0, 0, 0, 0.131),0px 10.4px 18.1px rgba(0, 0, 0, 0.18),0px 20px 40px rgba(0, 0, 0, 0.28)}.popover.hover-editor:not(.snap-to-viewport){--max-width:92%}.popover.hover-editor:not(.snap-to-viewport) .markdown-preview-view,.popover.hover-editor:not(.snap-to-viewport) .markdown-source-view .cm-content{font-size:90%}body .popover.hover-editor:not(.is-loaded){box-shadow:var(--popover-shadow)}body .popover.hover-editor:not(.is-loaded) .markdown-preview-view{padding:15px 0 0 0}body .popover.hover-editor:not(.is-loaded) .view-content{height:100%;background-color:var(--background-primary)}body .popover.hover-editor:not(.is-loaded) .view-actions{height:auto}body .popover.hover-editor:not(.is-loaded) .popover-content{border:1px solid var(--background-modifier-border-hover)}body .popover.hover-editor:not(.is-loaded) .popover-titlebar{padding:0 4px}body .popover.hover-editor:not(.is-loaded) .popover-titlebar .popover-title{padding-left:4px;letter-spacing:-.02em;font-weight:var(--title-weight)}body .popover.hover-editor:not(.is-loaded) .markdown-embed{height:auto;font-size:unset;line-height:unset}body .popover.hover-editor:not(.is-loaded) .markdown-embed .markdown-preview-view{padding:0}body .popover.hover-editor:not(.is-loaded).show-navbar .popover-titlebar{border-bottom:var(--border-width) solid var(--background-modifier-border)}body .popover.hover-editor:not(.is-loaded) .popover-action,body .popover.hover-editor:not(.is-loaded) .popover-header-icon{cursor:var(--cursor);margin:4px 0;padding:4px 3px;border-radius:var(--radius-m);color:var(--icon-color)}body .popover.hover-editor:not(.is-loaded) .popover-action.mod-pin-popover,body .popover.hover-editor:not(.is-loaded) .popover-header-icon.mod-pin-popover{padding:4px 2px}body .popover.hover-editor:not(.is-loaded) .popover-action svg,body .popover.hover-editor:not(.is-loaded) .popover-header-icon svg{opacity:var(--icon-muted)}body .popover.hover-editor:not(.is-loaded) .popover-action:hover,body .popover.hover-editor:not(.is-loaded) .popover-header-icon:hover{background-color:var(--background-modifier-hover);color:var(--icon-color-hover)}body .popover.hover-editor:not(.is-loaded) .popover-action:hover svg,body .popover.hover-editor:not(.is-loaded) .popover-header-icon:hover svg{opacity:1;transition:opacity .1s ease-in-out}body .popover.hover-editor:not(.is-loaded) .popover-action.is-active,body .popover.hover-editor:not(.is-loaded) .popover-header-icon.is-active{color:var(--icon-color)}body.minimal-dark-black.theme-dark,body.minimal-dark-tonal.theme-dark,body.minimal-light-tonal.theme-light,body.minimal-light-white.theme-light,body.theme-dark{--kanban-border:0px}body:not(.is-mobile) .kanban-plugin__grow-wrap>textarea:focus{box-shadow:none}body:not(.minimal-icons-off) .kanban-plugin svg.cross{height:14px;width:14px}body .kanban-plugin__icon>svg,body .kanban-plugin__lane-settings-button svg{width:18px;height:18px}body .kanban-plugin{--kanban-border:var(--border-width);--interactive-accent:var(--text-selection);--interactive-accent-hover:var(--background-modifier-hover);--text-on-accent:var(--text-normal);background-color:var(--background-primary)}body .kanban-plugin__markdown-preview-view{font-family:var(--font-text)}body .kanban-plugin__board>div{margin:0 auto}body .kanban-plugin__checkbox-label{color:var(--text-muted)}body .kanban-plugin__item-markdown ul{margin:0}body .kanban-plugin__item-content-wrapper{box-shadow:none}body .kanban-plugin__grow-wrap::after,body .kanban-plugin__grow-wrap>textarea{padding:0;border:0;border-radius:0}body .kanban-plugin__grow-wrap::after,body .kanban-plugin__grow-wrap>textarea,body .kanban-plugin__item-title p,body .kanban-plugin__markdown-preview-view{font-size:var(--font-ui-medium);line-height:1.3}body .kanban-plugin__item{background-color:var(--background-primary)}body .kanban-plugin__item-title-wrapper{align-items:center}body .kanban-plugin__lane-form-wrapper{border:1px solid var(--background-modifier-border)}body .kanban-plugin__lane-header-wrapper{border-bottom:0}body .kanban-plugin__lane-header-wrapper .kanban-plugin__grow-wrap>textarea,body .kanban-plugin__lane-input-wrapper .kanban-plugin__grow-wrap>textarea,body .kanban-plugin__lane-title p{background:0 0;color:var(--text-normal);font-size:var(--font-ui-medium);font-weight:500}body .kanban-plugin__item-input-wrapper .kanban-plugin__grow-wrap>textarea{padding:0;border-radius:0;height:auto}body .kanban-plugin__item-form .kanban-plugin__grow-wrap{background-color:var(--background-primary)}body .kanban-plugin__item-input-wrapper .kanban-plugin__grow-wrap>textarea::placeholder{color:var(--text-faint)}body .kanban-plugin__item .kanban-plugin__item-edit-archive-button,body .kanban-plugin__item button.kanban-plugin__item-edit-button,body .kanban-plugin__item-settings-actions>button,body .kanban-plugin__lane button.kanban-plugin__lane-settings-button,body .kanban-plugin__lane button.kanban-plugin__lane-settings-button.is-enabled,body .kanban-plugin__lane-action-wrapper>button{background:0 0;transition:color .1s ease-in-out}body .kanban-plugin__item .kanban-plugin__item-edit-archive-button:hover,body .kanban-plugin__item button.kanban-plugin__item-edit-button.is-enabled,body .kanban-plugin__item button.kanban-plugin__item-edit-button:hover,body .kanban-plugin__lane button.kanban-plugin__lane-settings-button.is-enabled,body .kanban-plugin__lane button.kanban-plugin__lane-settings-button:hover{color:var(--text-normal);transition:color .1s ease-in-out;background:0 0}body .kanban-plugin__new-lane-button-wrapper{position:fixed;bottom:30px}body .kanban-plugin__lane-items>.kanban-plugin__placeholder:only-child{border:1px dashed var(--background-modifier-border);height:2em}body .kanban-plugin__item-postfix-button-wrapper{align-self:flex-start}body .kanban-plugin__item button.kanban-plugin__item-postfix-button.is-enabled,body .kanban-plugin__item button.kanban-plugin__item-prefix-button.is-enabled,body .kanban-plugin__lane button.kanban-plugin__lane-settings-button.is-enabled{color:var(--text-muted)}body .kanban-plugin button{box-shadow:none;cursor:var(--cursor);height:auto}body .kanban-plugin__item button.kanban-plugin__item-postfix-button:hover,body .kanban-plugin__item button.kanban-plugin__item-prefix-button:hover,body .kanban-plugin__lane button.kanban-plugin__lane-settings-button:hover{background-color:var(--background-modifier-hover)}body .kanban-plugin__item-button-wrapper>button{color:var(--text-muted);font-weight:400;background:0 0;min-height:calc(var(--input-height) + 8px)}body .kanban-plugin__item-button-wrapper>button:hover{color:var(--text-normal);background:var(--background-modifier-hover)}body .kanban-plugin__item-button-wrapper>button:focus{box-shadow:none}body .kanban-plugin__item-button-wrapper{padding:1px 6px 5px;border-top:none}body .kanban-plugin__lane-setting-wrapper>div:last-child{border:none;margin:0}body .kanban-plugin.something-is-dragging{cursor:grabbing;cursor:-webkit-grabbing}body .kanban-plugin__item.is-dragging{box-shadow:0 5px 30px rgba(0,0,0,.15),0 0 0 2px var(--text-selection)}body .kanban-plugin__lane-items{border:var(--kanban-border) solid var(--background-modifier-border);padding:0 4px;margin:0;background-color:var(--background-secondary)}body .kanban-plugin__lane{background:0 0;padding:0;border:var(--border-width) solid transparent}body .kanban-plugin__lane.is-dragging{box-shadow:0 5px 30px rgba(0,0,0,.15);border:1px solid var(--background-modifier-border)}body .kanban-plugin__lane .kanban-plugin__item-button-wrapper{border-top-left-radius:8px;border-top-right-radius:8px;border-top:1px solid var(--background-modifier-border);border-bottom-width:0;padding:4px 4px 0 4px}body .kanban-plugin__lane.will-prepend .kanban-plugin__lane-items{border-radius:8px}body .kanban-plugin__lane.will-prepend .kanban-plugin__item-form{border-top:1px solid var(--background-modifier-border);border-radius:8px 8px 0 0;padding:4px 4px 0;border-bottom-width:0}body .kanban-plugin__lane.will-prepend .kanban-plugin__item-form+.kanban-plugin__lane-items{border-top-width:0;border-radius:0 0 8px 8px}body .kanban-plugin__lane.will-prepend .kanban-plugin__item-button-wrapper+.kanban-plugin__lane-items{border-top-width:0;border-radius:0 0 8px 8px}body .kanban-plugin__lane:not(.will-prepend) .kanban-plugin__item-button-wrapper,body .kanban-plugin__lane:not(.will-prepend) .kanban-plugin__item-form{border-top:none;border-radius:0 0 8px 8px}body .kanban-plugin__lane:not(.will-prepend) .kanban-plugin__item-button-wrapper{padding:0 4px 4px 4px;border-bottom-width:1px}body .kanban-plugin__lane:not(.will-prepend) .kanban-plugin__lane-items{border-bottom:none;border-top-width:1px;border-radius:8px 8px 0 0}body .kanban-plugin__item-form .kanban-plugin__item-input-wrapper{min-height:calc(var(--input-height) + 8px);display:flex;justify-content:center}body .kanban-plugin__item-button-wrapper,body .kanban-plugin__item-form{background-color:var(--background-secondary);border:var(--kanban-border) solid var(--background-modifier-border)}body .kanban-plugin__item-form{padding:0 4px 5px}body .kanban-plugin__markdown-preview-view ol,body .kanban-plugin__markdown-preview-view ol.contains-task-list .contains-task-list,body .kanban-plugin__markdown-preview-view ul,body .kanban-plugin__markdown-preview-view ul.contains-task-list .contains-task-list{padding-inline-start:1.8em!important}@media (max-width:400pt){.kanban-plugin__board{flex-direction:column!important}.kanban-plugin__lane{width:100%!important;margin-bottom:1rem!important}}body .cm-heading-marker{cursor:var(--cursor);padding-left:10px}.theme-light{--leaflet-buttons:var(--bg1);--leaflet-borders:rgba(0,0,0,0.1)}.theme-dark{--leaflet-buttons:var(--bg2);--leaflet-borders:rgba(255,255,255,0.1)}.leaflet-top{transition:top .1s linear}.mod-macos.minimal-focus-mode .mod-root .map-100 .markdown-preview-sizer.markdown-preview-section .el-lang-leaflet:nth-child(3) .leaflet-top{top:calc(18px + var(--ewt-traffic-light-y));transition:top .1s linear}body .leaflet-container{background-color:var(--background-secondary);font-family:var(--font-interface)}.map-100 .markdown-preview-sizer.markdown-preview-section .el-lang-leaflet:nth-child(3){margin-top:-16px}.leaflet-control-attribution{display:none}.leaflet-popup-content{margin:10px}.block-language-leaflet{border-radius:var(--radius-m);overflow:hidden;border:var(--border-width) solid var(--background-modifier-border)}.map-wide .block-language-leaflet{border-radius:var(--radius-l)}.map-max .block-language-leaflet{border-radius:var(--radius-xl)}.workspace-leaf-content[data-type=obsidian-leaflet-map-view] .block-language-leaflet{border-radius:0;border:none}.map-100 .block-language-leaflet{border-radius:0;border-left:none;border-right:none}.block-language-leaflet .leaflet-control-expandable-list .input-container .input-item>input{appearance:none}body .block-language-leaflet .leaflet-bar.disabled>a{background-color:transparent;opacity:.3}body .leaflet-touch .leaflet-bar a:first-child{border-top-left-radius:4px;border-top-right-radius:4px}body .leaflet-touch .leaflet-bar a:last-child{border-bottom-left-radius:4px;border-bottom-right-radius:4px}body .leaflet-control-layers-toggle{border-radius:4px}body .block-language-leaflet .leaflet-control-expandable,body .block-language-leaflet .leaflet-control-has-actions .control-actions.expanded,body .block-language-leaflet .leaflet-distance-control,body .leaflet-bar,body .leaflet-bar a,body .leaflet-control-layers-expanded,body .leaflet-control-layers-toggle{background-color:var(--leaflet-buttons);color:var(--text-muted);border:none;user-select:none}body .leaflet-bar a.leaflet-disabled,body .leaflet-bar a.leaflet-disabled:hover{background-color:var(--leaflet-buttons);color:var(--text-faint);opacity:.6;cursor:not-allowed}body .leaflet-control a{cursor:var(--cursor);color:var(--text-normal)}body .leaflet-bar a:hover{background-color:var(--background-modifier-hover);color:var(--text-normal);border:none}body .leaflet-touch .leaflet-control-layers{background-color:var(--leaflet-buttons)}body .leaflet-touch .leaflet-bar,body .leaflet-touch .leaflet-control-layers{border-radius:5px;box-shadow:2px 0 8px 0 rgba(0,0,0,.1);border:1px solid var(--ui1)}body .block-language-leaflet .leaflet-control-has-actions .control-actions{box-shadow:0;border:1px solid var(--ui1)}body .leaflet-control-expandable-list .leaflet-bar{box-shadow:none;border-radius:0}body .block-language-leaflet .leaflet-distance-control{padding:4px 10px;height:auto;cursor:var(--cursor)!important}body .block-language-leaflet .leaflet-marker-link-popup>.leaflet-popup-content-wrapper>*{font-size:var(--font-adaptive-small);font-family:var(--font-interface)}body .block-language-leaflet .leaflet-marker-link-popup>.leaflet-popup-content-wrapper{padding:4px 10px!important}.leaflet-marker-icon svg path{stroke:var(--background-primary);stroke-width:18px}.map-view-marker-name{font-weight:400}.workspace-leaf-content[data-type=map] .graph-controls{background-color:var(--background-primary)}body:not(.is-mobile):not(.plugin-sliding-panes-rotate-header) .workspace-split.mod-root .workspace-leaf-content[data-type=map] .view-header{position:fixed;background:0 0!important;width:100%;z-index:99}body:not(.plugin-sliding-panes-rotate-header) .workspace-leaf-content[data-type=map] .view-header-title{display:none}body:not(.is-mobile):not(.plugin-sliding-panes-rotate-header) .workspace-leaf-content[data-type=map] .view-actions{background:0 0}body:not(.is-mobile):not(.plugin-sliding-panes-rotate-header) .workspace-leaf-content[data-type=map] .view-content{height:100%}body:not(.is-mobile):not(.plugin-sliding-panes-rotate-header) .workspace-leaf-content[data-type=map] .leaflet-top.leaflet-right{top:var(--header-height)}.obsidian-metatable{--metatable-font-size:calc(var(--font-adaptive-normal) - 2px);--metatable-font-family:var(--font-interface);--metatable-background:transparent;--metatable-foreground:var(--text-faint);--metatable-key-background:transparent;--metatable-key-border-width:0;--metatable-key-border-color:transparent;--metatable-value-background:transparent;padding-bottom:.5rem}.obsidian-metatable::part(key),.obsidian-metatable::part(value){border-bottom:0 solid var(--background-modifier-border);padding:.1rem 0;text-overflow:ellipsis;overflow:hidden}.obsidian-metatable::part(key){font-weight:400;color:var(--tx3);font-size:calc(var(--font-adaptive-normal) - 2px)}.obsidian-metatable::part(value){font-size:calc(var(--font-adaptive-normal) - 2px);color:var(--tx1)}body .NLT__header-menu-header-container{font-size:85%}body .NLT__button{background:0 0;box-shadow:none;color:var(--text-muted)}body .NLT__button:active,body .NLT__button:focus,body .NLT__button:hover{background:0 0;color:var(--text-normal);box-shadow:none}.NLT__app .NLT__button{background:0 0;border:1px solid var(--background-modifier-border);box-shadow:0 .5px 1px 0 var(--btn-shadow-color);color:var(--text-muted);padding:2px 8px}.NLT__app .NLT__button:active,.NLT__app .NLT__button:focus,.NLT__app .NLT__button:hover{background:0 0;border-color:var(--background-modifier-border-hover);color:var(--text-normal);box-shadow:0 .5px 1px 0 var(--btn-shadow-color)}.NLT__td:nth-last-child(2),.NLT__th:nth-last-child(2){border-right:0}.NLT__app .NLT__td:last-child,.NLT__app .NLT__th:last-child{padding-right:0}.NLT__app .NLT__th{background-image:none!important}.NLT__app th.NLT__selectable:hover{background-color:transparent;cursor:var(--cursor)}.NLT__menu .NLT__menu-container{background-color:var(--background-secondary)}.NLT__menu .NLT__header-menu-item{font-size:var(--font-adaptive-small)}.NLT__menu .NLT__header-menu{padding:6px 4px}.NLT__menu .NLT__drag-menu{font-size:var(--font-adaptive-small);padding:6px 4px}.NLT__menu svg{color:var(--text-faint);margin-right:6px}.NLT__menu .NLT__selectable:hover,.NLT__menu .NLT__selected{background:0 0}.NLT__menu .NLT__selected>.NLT__selectable{background-color:var(--background-modifier-hover)}.NLT__menu .NLT__selectable{cursor:var(--cursor)}.NLT__menu div.NLT__selectable{min-width:110px;border-radius:var(--radius-m);padding:3px 8px 3px 4px;margin:1px 2px 1px;cursor:var(--cursor);height:auto;line-height:20px}.NLT__menu div.NLT__selectable:hover{background-color:var(--background-modifier-hover)}.NLT__menu .NLT__textarea{font-size:var(--table-text-size)}.NLT__tfoot tr:hover td{background-color:transparent}.modal .quickAddPrompt>h1,.modal .quickAddYesNoPrompt h1{margin-top:0;text-align:left!important;font-size:var(--h1);font-weight:600}.modal .quickAddYesNoPrompt p{text-align:left!important}.modal .quickAddYesNoPrompt button{font-size:var(--font-ui-small)}.modal .yesNoPromptButtonContainer{font-size:var(--font-ui-small);justify-content:flex-end}.quickAddModal .modal-content{padding:20px 2px 5px}div#quick-explorer{display:flex}div#quick-explorer span.explorable{align-items:center;color:var(--text-muted);display:flex;font-size:var(--font-adaptive-smaller);line-height:16px}div#quick-explorer span.explorable:last-of-type{font-size:var(--font-adaptive-smaller)}div#quick-explorer span.explorable.selected,div#quick-explorer span.explorable:hover{background-color:unset!important}div#quick-explorer span.explorable.selected .explorable-name,div#quick-explorer span.explorable:hover .explorable-name{color:var(--text-normal)}div#quick-explorer span.explorable.selected .explorable-separator,div#quick-explorer span.explorable:hover .explorable-separator{color:var(--text-normal)}div#quick-explorer .explorable-name{padding:0 4px;border-radius:4px}div#quick-explorer .explorable-separator::before{content:"\00a0›"!important;font-size:1.3em;font-weight:400;margin:0}body:not(.colorful-active) .qe-popup-menu .menu-item:not(.is-disabled):not(.is-label).selected,body:not(.colorful-active) .qe-popup-menu .menu-item:not(.is-disabled):not(.is-label):hover{background-color:var(--background-modifier-hover);color:var(--text-normal)}body:not(.colorful-active) .qe-popup-menu .menu-item:not(.is-disabled):not(.is-label).selected .menu-item-icon,body:not(.colorful-active) .qe-popup-menu .menu-item:not(.is-disabled):not(.is-label):hover .menu-item-icon{color:var(--text-normal)}.workspace-leaf-content[data-type=recent-files] .view-content{padding-top:10px}.mod-root .workspace-leaf-content[data-type=reminder-list] main{max-width:var(--max-width);margin:0 auto;padding:0}.modal .reminder-actions .later-select{font-size:var(--font-settings-small);vertical-align:bottom;margin-left:3px}.modal .reminder-actions .icon{line-height:1}:not(.mod-root) .workspace-leaf-content[data-type=reminder-list] main{margin:0 auto;padding:15px}:not(.mod-root) .workspace-leaf-content[data-type=reminder-list] main .group-name{font-weight:500;color:var(--text-muted);font-size:var(--font-adaptive-small);padding-bottom:.5em;border-bottom:1px solid var(--background-modifier-border)}:not(.mod-root) .workspace-leaf-content[data-type=reminder-list] main .reminder-group .reminder-list-item{line-height:1.3;font-size:var(--font-adaptive-small)}:not(.mod-root) .workspace-leaf-content[data-type=reminder-list] main .reminder-group .no-reminders{color:var(--text-faint)}:not(.mod-root) .workspace-leaf-content[data-type=reminder-list] main .reminder-group .reminder-time{font-family:var(--font-text);font-size:var(--font-adaptive-small)}:not(.mod-root) .workspace-leaf-content[data-type=reminder-list] main .reminder-group .reminder-file{color:var(--text-faint)}body .modal .dtchooser{background-color:transparent}body .modal .dtchooser .reminder-calendar .year-month{font-weight:400;font-size:var(--font-adaptive-normal);padding-bottom:10px}body .modal .dtchooser .reminder-calendar .year-month .month,body .modal .dtchooser .reminder-calendar .year-month .year{color:var(--text-normal)}body .modal .dtchooser .reminder-calendar .year-month .month-nav:first-child{background-color:currentColor;-webkit-mask-image:url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' class='h-5 w-5' viewBox='0 0 20 20' fill='currentColor'%3E%3Cpath fill-rule='evenodd' d='M12.707 5.293a1 1 0 010 1.414L9.414 10l3.293 3.293a1 1 0 01-1.414 1.414l-4-4a1 1 0 010-1.414l4-4a1 1 0 011.414 0z' clip-rule='evenodd' /%3E%3C/svg%3E")}body .modal .dtchooser .reminder-calendar .year-month .month-nav:last-child{background-color:currentColor;-webkit-mask-image:url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' class='h-5 w-5' viewBox='0 0 20 20' fill='currentColor'%3E%3Cpath fill-rule='evenodd' d='M7.293 14.707a1 1 0 010-1.414L10.586 10 7.293 6.707a1 1 0 011.414-1.414l4 4a1 1 0 010 1.414l-4 4a1 1 0 01-1.414 0z' clip-rule='evenodd' /%3E%3C/svg%3E")}body .modal .dtchooser .reminder-calendar .year-month .month-nav{-webkit-mask-size:20px 20px;-webkit-mask-repeat:no-repeat;-webkit-mask-position:50% 50%;color:var(--text-faint);cursor:var(--cursor);border-radius:var(--radius-m);padding:0;width:30px;display:inline-block}body .modal .dtchooser .reminder-calendar .year-month .month-nav:hover{color:var(--text-muted)}body .modal .dtchooser .reminder-calendar th{padding:.5em 0;font-size:var(--font-adaptive-smallest);font-weight:500;text-transform:uppercase;letter-spacing:.1em}body .modal .dtchooser .reminder-calendar .calendar-date{transition:background-color .1s ease-in;padding:.3em 0;border-radius:var(--radius-m)}body .modal .dtchooser .reminder-calendar .calendar-date.is-selected,body .modal .dtchooser .reminder-calendar .calendar-date:hover{transition:background-color .1s ease-in;background-color:var(--background-modifier-hover)!important}body .modal .dtchooser .reminder-calendar .calendar-date.is-selected{font-weight:var(--bold-weight);color:var(--text-accent)!important}body .markdown-preview-view th,body .markdown-source-view.mod-cm6 .dataview.table-view-table thead.table-view-thead tr th,body .table-view-table>thead>tr>th{cursor:var(--cursor);background-image:none}.markdown-source-view.mod-cm6 th{background-repeat:no-repeat;background-position:right}.style-settings-container[data-level="2"]{background:var(--background-secondary);border:1px solid var(--ui1);border-radius:5px;padding:10px 20px;margin:2px 0 2px -20px}.workspace-leaf-content[data-type=style-settings] div[data-id=instructions] .setting-item-name{display:none}.workspace-leaf-content[data-type=style-settings] div[data-id=instructions] .setting-item-description{color:var(--text-normal);font-size:var(--font-adaptive-smaller);padding-bottom:.5em}.workspace-leaf-content[data-type=style-settings] .view-content{padding:var(--size-4-4) 0}.workspace-leaf-content[data-type=style-settings] .view-content>div{width:var(--line-width);max-width:var(--max-width);margin:0 auto}.workspace-leaf-content[data-type=style-settings] .style-settings-heading[data-level="0"] .setting-item-name{padding-left:17px}.workspace-leaf-content[data-type=style-settings] .setting-item{max-width:100%;margin:0 auto}.workspace-leaf-content[data-type=style-settings] .setting-item-name{position:relative}.workspace-leaf-content[data-type=style-settings] .style-settings-collapse-indicator{position:absolute;left:0}.setting-item-heading.style-settings-heading,.style-settings-container .style-settings-heading{cursor:var(--cursor)}.modal.mod-settings .setting-item .pickr button.pcr-button{box-shadow:none;border-radius:40px;height:24px;width:24px}.setting-item .pickr .pcr-button:after,.setting-item .pickr .pcr-button:before{border-radius:40px;box-shadow:none;border:none}.setting-item.setting-item-heading.style-settings-heading.is-collapsed{border-bottom:1px solid var(--background-modifier-border)}.setting-item.setting-item-heading.style-settings-heading{border:0;padding:10px 0 5px;margin-bottom:0}.setting-item .style-settings-export,.setting-item .style-settings-import{text-decoration:none;font-size:var(--font-ui-small);font-weight:500;color:var(--text-muted);margin:0;padding:2px 8px;border-radius:5px;cursor:var(--cursor)}.setting-item .style-settings-export:hover,.setting-item .style-settings-import:hover{background-color:var(--background-modifier-hover);color:var(--text-normal);cursor:var(--cursor)}.mod-root .workspace-leaf-content[data-type=style-settings] .style-settings-container .setting-item:not(.setting-item-heading){flex-direction:row;align-items:center;padding:.5em 0}.workspace-split:not(.mod-root) .workspace-leaf-content[data-type=style-settings] .setting-item-name{font-size:var(--font-adaptive-smaller)}.themed-color-wrapper>div+div{margin-top:0;margin-left:6px}.theme-light .themed-color-wrapper>.theme-light{background-color:transparent}.theme-light .themed-color-wrapper>.theme-dark{background-color:rgba(0,0,0,.8)}.theme-dark .themed-color-wrapper>.theme-dark{background-color:transparent}@media (max-width:400pt){.workspace-leaf-content[data-type=style-settings] .setting-item-name{font-size:var(--font-adaptive-small)}.workspace-leaf-content[data-type=style-settings] .setting-item-info:has(.search-input-container){width:100%;margin-right:0}}body .todoist-query-title{display:inline;font-size:var(--h4);font-variant:var(--h4-variant);letter-spacing:.02em;color:var(--h4-color);font-weight:var(--h4-weight);font-style:var(--h4-style)}body .is-live-preview .block-language-todoist{padding-left:0}ul.todoist-task-list>li.task-list-item .task-list-item-checkbox{margin:0}body .todoist-refresh-button{display:inline;float:right;background:0 0;padding:5px 6px 0;margin-right:0}body .is-live-preview .todoist-refresh-button{margin-right:30px}body .todoist-refresh-button:hover{box-shadow:none;background-color:var(--background-modifier-hover)}.todoist-refresh-button svg{width:15px;height:15px;opacity:var(--icon-muted)}ul.todoist-task-list{margin-left:-.25em}.is-live-preview ul.todoist-task-list{padding-left:0;margin-left:.5em;margin-block-start:0;margin-block-end:0}.contains-task-list.todoist-task-list .task-metadata{font-size:var(--font-adaptive-small);display:flex;color:var(--text-muted);justify-content:space-between;margin-left:.1em;margin-bottom:.25rem}.is-live-preview .contains-task-list.todoist-task-list .task-metadata{padding-left:calc(var(--checkbox-size) + .6em)}.todoist-task-list .task-date.task-overdue{color:var(--color-orange)}body .todoist-p1>input[type=checkbox]{border:1px solid var(--color-red)}body .todoist-p1>input[type=checkbox]:hover{opacity:.8}body .todoist-p2>input[type=checkbox]{border:1px solid var(--color-yellow)}body .todoist-p2>input[type=checkbox]:hover{opacity:.8}body .todoist-p3>input[type=checkbox]{border:1px solid var(--color-blue)}body .todoist-p3>input[type=checkbox]:hover{opacity:.8}body.theme-light{--color-axis-label:var(--tx1);--color-tick-label:var(--tx2);--color-dot-fill:var(--ax1);--color-line:var(--ui1)}.tracker-axis-label{font-family:var(--font-interface)}.tracker-axis{color:var(--ui2)}.tabs-manager .chat-view{--assistant-message-color:var(--background-primary);--padding-md:var(--size-4-2) var(--size-4-3);--padding-lg:var(--size-4-3) var(--size-4-3);--chat-box-color:var(--background-primary)}.tabs-manager .chat-view .ow-dialogue-timeline{padding:var(--size-4-4) var(--size-4-3) var(--size-4-8)}.tabs-manager .chat-view .ow-dialogue-timeline .ow-message-bubble .ow-content-wrapper{box-shadow:none;border-color:var(--background-modifier-border);border-radius:var(--radius-m)}.tabs-manager .chat-view .ow-dialogue-timeline .ow-message-bubble.ow-user-bubble .ow-content-wrapper{border-width:0;background-color:var(--interactive-accent)}.tabs-manager .chat-view .input-area .input-form .chat-box{border-radius:0;box-shadow:none;grid-row:1;grid-column:1/3;height:100px;border:none;padding:var(--size-4-3) var(--size-4-4) var(--size-4-2)}.tabs-manager .chat-view .input-area .input-form .chat-box:hover{height:100px}.tabs-manager .chat-view .input-area{padding:0;gap:0}.tabs-manager .chat-view .header{border-bottom:1px solid var(--background-modifier-border)}.tabs-manager .chat-view .input-form{border-top:1px solid var(--background-modifier-border)}.tabs-manager .chat-view .input-area .input-form .chat-box .info-bar span{color:var(--text-faint)}.tabs-manager .chat-view .input-area .input-form .btn-new-chat{display:none}.zoom-plugin-header{--link-color:var(--text-normal);--link-decoration:none;font-size:var(--font-ui-small);padding:0;justify-content:center;margin:var(--size-4-2) auto;max-width:var(--max-width)}.zoom-plugin-header>.zoom-plugin-title{text-decoration:none;max-width:15em;overflow:hidden}.zoom-plugin-header>.zoom-plugin-delimiter{color:var(--text-faint);padding:0 var(--size-4-1)}.theme-dark.minimal-atom-dark{--color-red-rgb:225,109,118;--color-orange-rgb:209,154,102;--color-yellow-rgb:206,193,103;--color-green-rgb:152,195,121;--color-cyan-rgb:88,182,194;--color-blue-rgb:98,175,239;--color-purple-rgb:198,120,222;--color-pink-rgb:225,109,118;--color-red:#e16d76;--color-orange:#d19a66;--color-yellow:#cec167;--color-green:#98c379;--color-cyan:#58b6c2;--color-blue:#62afef;--color-purple:#c678de;--color-pink:#e16d76}.theme-light.minimal-atom-light{--color-red-rgb:228,87,73;--color-orange-rgb:183,107,2;--color-yellow-rgb:193,131,2;--color-green-rgb:80,161,80;--color-cyan-rgb:13,151,179;--color-blue-rgb:98,175,239;--color-purple-rgb:166,38,164;--color-pink-rgb:228,87,73;--color-red:#e45749;--color-orange:#b76b02;--color-yellow:#c18302;--color-green:#50a150;--color-cyan:#0d97b3;--color-blue:#62afef;--color-purple:#a626a4;--color-pink:#e45749}.theme-light.minimal-atom-light{--base-h:106;--base-s:0%;--base-l:98%;--accent-h:231;--accent-s:76%;--accent-l:62%;--bg1:#fafafa;--bg2:#eaeaeb;--bg3:rgba(0,0,0,.1);--ui1:#dbdbdc;--ui2:#d8d8d9;--tx1:#232324;--tx2:#8e8e90;--tx3:#a0a1a8;--hl1:rgba(180,180,183,0.3);--hl2:rgba(209,154,102,0.35)}.theme-light.minimal-atom-light.minimal-light-white{--bg3:#eaeaeb}.theme-dark.minimal-atom-dark,.theme-light.minimal-atom-light.minimal-light-contrast .mod-left-split,.theme-light.minimal-atom-light.minimal-light-contrast .titlebar,.theme-light.minimal-atom-light.minimal-light-contrast .workspace-drawer.mod-left,.theme-light.minimal-atom-light.minimal-light-contrast .workspace-ribbon.mod-left:not(.is-collapsed),.theme-light.minimal-atom-light.minimal-light-contrast.minimal-status-off .status-bar{--base-h:220;--base-s:12%;--base-l:18%;--accent-h:220;--accent-s:86%;--accent-l:65%;--bg1:#282c34;--bg2:#21252c;--bg3:#3a3f4b;--divider-color:#181a1f;--tab-outline-color:#181a1f;--tx1:#d8dae1;--tx2:#898f9d;--tx3:#5d6370;--hl1:rgba(114,123,141,0.3);--hl2:rgba(209,154,102,0.3);--sp1:#fff}.theme-dark.minimal-atom-dark.minimal-dark-black{--base-d:5%;--bg3:#282c34;--divider-color:#282c34;--tab-outline-color:#282c34}.theme-light.minimal-ayu-light{--color-red-rgb:230,80,80;--color-orange-rgb:250,141,62;--color-yellow-rgb:242,174,73;--color-green-rgb:108,191,67;--color-cyan-rgb:76,191,153;--color-blue-rgb:57,158,230;--color-purple-rgb:163,122,204;--color-pink-rgb:255,115,131;--color-red:#e65050;--color-orange:#fa8d3e;--color-yellow:#f2ae49;--color-green:#6CBF43;--color-cyan:#4cbf99;--color-blue:#399ee6;--color-purple:#a37acc;--color-pink:#ff7383}.theme-dark.minimal-ayu-dark{--color-red-rgb:255,102,102;--color-orange-rgb:250,173,102;--color-yellow-rgb:255,209,55;--color-green-rgb:135,217,108;--color-cyan-rgb:149,230,203;--color-blue-rgb:115,208,255;--color-purple-rgb:223,191,255;--color-pink-rgb:242,121,131;--color-red:#ff6666;--color-orange:#ffad66;--color-yellow:#ffd137;--color-green:#87D96C;--color-cyan:#95e6cb;--color-blue:#73d0ff;--color-purple:#dfbfff;--color-pink:#f27983}.theme-light.minimal-ayu-light{--base-h:210;--base-s:17%;--base-l:98%;--accent-h:36;--accent-s:100%;--accent-l:50%;--bg1:#fff;--bg2:#f8f9fa;--bg3:rgba(209,218,224,0.5);--ui1:#E6EAED;--tx1:#5C6165;--tx2:#8A9199;--tx3:#AAAEB0;--hl1:rgba(3,91,214,0.15)}.theme-dark.minimal-ayu-dark,.theme-light.minimal-ayu-light.minimal-light-contrast .mod-left-split,.theme-light.minimal-ayu-light.minimal-light-contrast .titlebar,.theme-light.minimal-ayu-light.minimal-light-contrast .workspace-drawer.mod-left,.theme-light.minimal-ayu-light.minimal-light-contrast .workspace-ribbon.mod-left:not(.is-collapsed),.theme-light.minimal-ayu-light.minimal-light-contrast.minimal-status-off .status-bar{--base-h:222;--base-s:22%;--base-l:15%;--accent-h:35;--accent-s:100%;--accent-l:60%;--bg1:#232937;--bg2:#1E2431;--bg3:rgba(51,61,80,0.5);--ui1:#333C4A;--ui2:#333C4A;--ui3:#333C4A;--tx1:#cccac2;--tx2:#707A8C;--tx3:#495063;--hl1:rgba(64,159,255,0.25)}.theme-dark.minimal-ayu-dark.minimal-dark-black{--accent-h:40;--accent-s:75%;--accent-l:61%;--bg3:#0E1017;--tx1:#BFBDB6;--divider-color:#11151C;--tab-outline-color:#11151C}.theme-light.minimal-catppuccin-light{--color-red-rgb:230,69,83;--color-orange-rgb:254,100,12;--color-yellow-rgb:223,142,29;--color-green-rgb:64,160,43;--color-cyan-rgb:23,146,154;--color-blue-rgb:33,102,246;--color-purple-rgb:137,56,239;--color-pink-rgb:234,119,203;--color-red:#E64553;--color-orange:#FE640C;--color-yellow:#DF8E1D;--color-green:#40A02B;--color-cyan:#17929A;--color-blue:#2166F6;--color-purple:#8938EF;--color-pink:#EA77CB}.theme-dark.minimal-catppuccin-dark{--color-red-rgb:235,153,156;--color-orange-rgb:239,160,118;--color-yellow-rgb:229,200,144;--color-green-rgb:166,209,138;--color-cyan-rgb:129,200,190;--color-blue-rgb:140,170,238;--color-purple-rgb:202,158,230;--color-pink-rgb:244,185,229;--color-red:#EB999C;--color-orange:#EFA076;--color-yellow:#E5C890;--color-green:#A6D18A;--color-cyan:#81C8BE;--color-blue:#8CAAEE;--color-purple:#CA9EE6;--color-pink:#F4B9E5}.theme-light.minimal-catppuccin-light{--base-h:228;--base-s:20%;--base-l:95%;--accent-h:11;--accent-s:59%;--accent-l:67%;--bg1:#F0F1F5;--bg2:#DCE0E8;--bg3:hsla(228,11%,65%,.25);--ui1:#CCD0DA;--ui2:#BCC0CC;--ui3:#ACB0BE;--tx1:#4D4F69;--tx2:#5D5F77;--tx3:#8D8FA2;--hl1:rgba(172,176,190,.3);--hl2:rgba(223,142,29,.3)}.theme-light.minimal-catppuccin-light.minimal-light-tonal{--bg2:#DCE0E8}.theme-light.minimal-catppuccin-light.minimal-light-white{--bg3:#F0F1F5;--ui1:#DCE0E8}.theme-dark.minimal-catppuccin-dark,.theme-light.minimal-catppuccin-light.minimal-light-contrast .mod-left-split,.theme-light.minimal-catppuccin-light.minimal-light-contrast .titlebar,.theme-light.minimal-catppuccin-light.minimal-light-contrast .workspace-drawer.mod-left,.theme-light.minimal-catppuccin-light.minimal-light-contrast .workspace-ribbon.mod-left:not(.is-collapsed),.theme-light.minimal-catppuccin-light.minimal-light-contrast.minimal-status-off .status-bar{--base-h:229;--base-s:19%;--base-l:23%;--accent-h:10;--accent-s:57%;--accent-l:88%;--bg1:#303446;--bg2:#242634;--bg3:hsla(229,13%,52%,0.25);--ui1:#41455A;--ui2:#51576D;--ui3:#626880;--tx1:#C6D0F5;--tx2:#A6ADCE;--tx3:#848BA7;--sp1:#242634;--hl1:rgba(98,104,128,.5);--hl2:rgba(223,142,29,.4)}.theme-dark.minimal-catppuccin-dark.minimal-dark-black{--ui1:#303446;--hl2:rgba(223,142,29,.5)}.theme-dark.minimal-dracula-dark{--color-red-rgb:255,85,85;--color-orange-rgb:255,184,108;--color-yellow-rgb:241,250,140;--color-green-rgb:80,250,123;--color-cyan-rgb:139,233,253;--color-blue-rgb:98,114,164;--color-purple-rgb:189,147,249;--color-pink-rgb:255,121,198;--color-red:#ff5555;--color-orange:#ffb86c;--color-yellow:#f1fa8c;--color-green:#50fa7b;--color-cyan:#8be9fd;--color-blue:#6272a4;--color-purple:#bd93f9;--color-pink:#ff79c6}.theme-dark.minimal-dracula-dark,.theme-light.minimal-dracula-light.minimal-light-contrast .titlebar,.theme-light.minimal-dracula-light.minimal-light-contrast .workspace-drawer.mod-left,.theme-light.minimal-dracula-light.minimal-light-contrast.minimal-status-off .status-bar{--base-h:232;--base-s:16%;--base-l:19%;--accent-h:265;--accent-s:89%;--accent-l:78%;--bg1:#282a37;--bg2:#21222c;--ui2:#44475a;--ui3:#6272a4;--tx1:#f8f8f2;--tx2:#949FBE;--tx3:#6272a4;--hl1:rgba(134, 140, 170, 0.3);--hl2:rgba(189, 147, 249, 0.35)}.theme-dark.minimal-dracula-dark.minimal-dark-black{--ui1:#282a36}.theme-dark.minimal-eink-dark,.theme-light.minimal-eink-light{--collapse-icon-color:var(--text-normal);--icon-color-active:var(--bg1);--icon-color-hover:var(--bg1);--icon-color-focused:var(--bg1);--icon-opacity:1;--indentation-guide-color:var(--tx1);--indentation-guide-color-active:var(--tx1);--indentation-guide-width-active:3px;--interactive-normal:var(--bg1);--input-shadow:0 0 0 1px var(--tx1);--link-unresolved-opacity:1;--link-unresolved-decoration-style:dashed;--link-unresolved-decoration-color:var(--tx1);--metadata-label-background-active:var(--bg1);--metadata-input-background-active:var(--bg1);--modal-border-color:var(--tx1);--modal-border-width:2px;--nav-item-color-hover:var(--bg1);--nav-item-color-active:var(--bg1);--prompt-border-color:var(--tx1);--prompt-border-width:2px;--calendar-dot-active:var(--bg1);--calendar-dot-today:var(--bg1);--calendar-text-active:var(--bg1);--tag-border-width:1.25px;--tag-background:transparent;--tag-background-hover:transparent;--tag-border-color:var(--tx1);--tag-border-color-hover:var(--tx1);--text-on-accent:var(--bg1);--text-on-accent-inverted:var(--bg1)}.theme-dark.minimal-eink-dark.tabs-modern,.theme-light.minimal-eink-light.tabs-modern{--minimal-tab-text-color-active:var(--bg1);--tab-text-color-focused-active-current:var(--bg1)}.theme-dark.minimal-eink-dark .suggestion-container,.theme-light.minimal-eink-light .suggestion-container{border-width:3px}.theme-dark.minimal-eink-dark .cm-s-obsidian span.cm-inline-code,.theme-dark.minimal-eink-dark .markdown-rendered code,.theme-light.minimal-eink-light .cm-s-obsidian span.cm-inline-code,.theme-light.minimal-eink-light .markdown-rendered code{font-weight:600}.theme-dark.minimal-eink-dark .metadata-property-icon,.theme-light.minimal-eink-light .metadata-property-icon{--icon-color-focused:var(--tx1)}.theme-dark.minimal-eink-dark .checkbox-container,.theme-light.minimal-eink-light .checkbox-container{background-color:var(--bg1);box-shadow:0 0 0 1px var(--tx1);--toggle-thumb-color:var(--tx1)}.theme-dark.minimal-eink-dark .checkbox-container.is-enabled,.theme-light.minimal-eink-light .checkbox-container.is-enabled{background-color:var(--tx1);--toggle-thumb-color:var(--bg1)}.theme-dark.minimal-eink-dark .cm-s-obsidian span.cm-formatting-highlight,.theme-dark.minimal-eink-dark .cm-s-obsidian span.cm-highlight,.theme-dark.minimal-eink-dark .community-item .suggestion-highlight,.theme-dark.minimal-eink-dark .dropdown:hover,.theme-dark.minimal-eink-dark .horizontal-tab-nav-item:hover,.theme-dark.minimal-eink-dark .markdown-rendered mark,.theme-dark.minimal-eink-dark .status-bar .plugin-sync:hover .sync-status-icon.mod-success,.theme-dark.minimal-eink-dark .status-bar .plugin-sync:hover .sync-status-icon.mod-working,.theme-dark.minimal-eink-dark .status-bar-item.mod-clickable:hover,.theme-dark.minimal-eink-dark .suggestion-item.is-selected,.theme-dark.minimal-eink-dark .text-icon-button:hover,.theme-dark.minimal-eink-dark .vertical-tab-nav-item:hover,.theme-dark.minimal-eink-dark button,.theme-dark.minimal-eink-dark select:hover,.theme-dark.minimal-eink-dark:not(.colorful-active) .horizontal-tab-nav-item.is-active,.theme-dark.minimal-eink-dark:not(.colorful-active) .vertical-tab-nav-item.is-active,.theme-light.minimal-eink-light .cm-s-obsidian span.cm-formatting-highlight,.theme-light.minimal-eink-light .cm-s-obsidian span.cm-highlight,.theme-light.minimal-eink-light .community-item .suggestion-highlight,.theme-light.minimal-eink-light .dropdown:hover,.theme-light.minimal-eink-light .horizontal-tab-nav-item:hover,.theme-light.minimal-eink-light .markdown-rendered mark,.theme-light.minimal-eink-light .status-bar .plugin-sync:hover .sync-status-icon.mod-success,.theme-light.minimal-eink-light .status-bar .plugin-sync:hover .sync-status-icon.mod-working,.theme-light.minimal-eink-light .status-bar-item.mod-clickable:hover,.theme-light.minimal-eink-light .suggestion-item.is-selected,.theme-light.minimal-eink-light .text-icon-button:hover,.theme-light.minimal-eink-light .vertical-tab-nav-item:hover,.theme-light.minimal-eink-light button,.theme-light.minimal-eink-light select:hover,.theme-light.minimal-eink-light:not(.colorful-active) .horizontal-tab-nav-item.is-active,.theme-light.minimal-eink-light:not(.colorful-active) .vertical-tab-nav-item.is-active{color:var(--bg1)}.theme-light.minimal-eink-light{--base-h:0;--base-s:0%;--base-l:100%;--accent-h:0;--accent-s:0%;--accent-l:0%;--ax3:#000;--bg1:#fff;--bg2:#fff;--bg3:#000;--ui1:#000;--ui2:#000;--ui3:#000;--tx1:#000;--tx2:#000;--tx3:#000;--hl1:#000;--hl2:#000;--sp1:#fff;--text-on-accent:#fff;--background-modifier-cover:rgba(235,235,235,1)}.theme-light.minimal-eink-light.minimal-light-white{--bg3:#fff}.theme-dark.minimal-eink-dark,.theme-light.minimal-eink-light.minimal-light-contrast .mod-left-split,.theme-light.minimal-eink-light.minimal-light-contrast .titlebar,.theme-light.minimal-eink-light.minimal-light-contrast .workspace-drawer.mod-left,.theme-light.minimal-eink-light.minimal-light-contrast .workspace-ribbon.mod-left:not(.is-collapsed),.theme-light.minimal-eink-light.minimal-light-contrast.minimal-status-off .status-bar{--base-h:0;--base-s:0%;--base-l:0%;--accent-h:0;--accent-s:0%;--accent-l:100%;--ax3:#fff;--bg1:#000;--bg2:#000;--bg3:#fff;--ui1:#fff;--ui2:#fff;--ui3:#fff;--tx1:#fff;--tx2:#fff;--tx3:#fff;--hl1:#fff;--hl2:#fff;--sp1:#000;--background-modifier-cover:rgba(20,20,20,1)}.theme-light.minimal-eink-light.minimal-light-tonal{--bg3:#bbb;--ui1:#bbb;--modal-border-color:var(--ui1);--prompt-border-color:var(--ui1)}.theme-dark.minimal-eink-dark.minimal-dark-tonal{--bg3:#444;--ui1:#444;--modal-border-color:var(--ui1);--prompt-border-color:var(--ui1)}.theme-light.minimal-everforest-light{--color-red-rgb:248,85,82;--color-orange-rgb:245,125,38;--color-yellow-rgb:223,160,0;--color-green-rgb:141,161,1;--color-cyan-rgb:53,167,124;--color-blue-rgb:56,148,196;--color-purple-rgb:223,105,186;--color-pink-rgb:223,105,186;--color-red:#f85552;--color-orange:#f57d26;--color-yellow:#dfa000;--color-green:#8da101;--color-cyan:#35a77c;--color-blue:#3795C5;--color-purple:#df69ba;--color-pink:#df69ba}.theme-dark.minimal-everforest-dark{--color-red-rgb:230,126,128;--color-orange-rgb:230,152,117;--color-yellow-rgb:219,188,127;--color-green-rgb:167,192,128;--color-cyan-rgb:131,192,146;--color-blue-rgb:127,187,179;--color-purple-rgb:223,105,186;--color-pink-rgb:223,105,186;--color-red:#e67e80;--color-orange:#e69875;--color-yellow:#dbbc7f;--color-green:#a7c080;--color-cyan:#83c092;--color-blue:#7fbbb3;--color-purple:#d699b6;--color-pink:#d699b6}.theme-light.minimal-everforest-light{--base-h:44;--base-s:87%;--base-l:94%;--accent-h:83;--accent-s:36%;--accent-l:53%;--bg1:#fdf6e3;--bg2:#efebd4;--bg3:rgba(226,222,198,.5);--ui1:#e0dcc7;--ui2:#bec5b2;--ui3:#bec5b2;--tx1:#5C6A72;--tx2:#829181;--tx3:#a6b0a0;--hl1:rgba(198,214,152,.4);--hl2:rgba(222,179,51,.3)}.theme-light.minimal-everforest-light.minimal-light-tonal{--bg2:#fdf6e3}.theme-light.minimal-everforest-light.minimal-light-white{--bg3:#f3efda;--ui1:#edead5}.theme-dark.minimal-everforest-dark,.theme-light.minimal-everforest-light.minimal-light-contrast .mod-left-split,.theme-light.minimal-everforest-light.minimal-light-contrast .titlebar,.theme-light.minimal-everforest-light.minimal-light-contrast .workspace-drawer.mod-left,.theme-light.minimal-everforest-light.minimal-light-contrast .workspace-ribbon.mod-left:not(.is-collapsed),.theme-light.minimal-everforest-light.minimal-light-contrast.minimal-status-off .status-bar{--base-h:203;--base-s:15%;--base-l:23%;--accent-h:81;--accent-s:34%;--accent-l:63%;--bg1:#2d353b;--bg2:#232a2e;--bg3:rgba(71,82,88,0.5);--ui1:#475258;--ui2:#4f585e;--ui3:#525c62;--tx1:#d3c6aa;--tx2:#9da9a0;--tx3:#7a8478;--hl1:rgba(134,70,93,.5);--hl2:rgba(147,185,96,.3)}.theme-dark.minimal-everforest-dark.minimal-dark-black{--hl1:rgba(134,70,93,.4);--ui1:#2b3339}.theme-light.minimal-flexoki-light{--color-red-rgb:175,48,41;--color-orange-rgb:188,82,21;--color-yellow-rgb:173,131,1;--color-green-rgb:102,128,11;--color-cyan-rgb:36,131,123;--color-blue-rgb:32,94,166;--color-purple-rgb:94,64,157;--color-pink-rgb:160,47,111;--color-red:#AF3029;--color-orange:#BC5215;--color-yellow:#AD8301;--color-green:#66800B;--color-cyan:#24837B;--color-blue:#205EA6;--color-purple:#5E409D;--color-pink:#A02F6F}.theme-dark.minimal-flexoki-dark{--color-red-rgb:209,77,65;--color-orange-rgb:218,112,44;--color-yellow-rgb:208,162,21;--color-green-rgb:135,154,57;--color-cyan-rgb:58,169,159;--color-blue-rgb:67,133,190;--color-purple-rgb:139,126,200;--color-pink-rgb:206,93,151;--color-red:#D14D41;--color-orange:#DA702C;--color-yellow:#D0A215;--color-green:#879A39;--color-cyan:#3AA99F;--color-blue:#4385BE;--color-purple:#8B7EC8;--color-pink:#CE5D97}.theme-light.minimal-flexoki-light{--base-h:48;--base-s:100%;--base-l:97%;--accent-h:175;--accent-s:57%;--accent-l:33%;--bg1:#FFFCF0;--bg2:#F2F0E5;--bg3:rgba(16,15,15,0.05);--ui1:#E6E4D9;--ui2:#DAD8CE;--ui3:#CECDC3;--tx1:#100F0F;--tx2:#6F6E69;--tx3:#B7B5AC;--hl1:rgba(187,220,206,0.3);--hl2:rgba(247,209,61,0.3)}.theme-light.minimal-flexoki-light.minimal-light-tonal{--bg2:#FFFCF0}.theme-dark.minimal-flexoki-dark,.theme-light.minimal-flexoki-light.minimal-light-contrast .mod-left-split,.theme-light.minimal-flexoki-light.minimal-light-contrast .titlebar,.theme-light.minimal-flexoki-light.minimal-light-contrast .workspace-drawer.mod-left,.theme-light.minimal-flexoki-light.minimal-light-contrast .workspace-ribbon.mod-left:not(.is-collapsed),.theme-light.minimal-flexoki-light.minimal-light-contrast.minimal-status-off .status-bar{--base-h:360;--base-s:3%;--base-l:6%;--accent-h:175;--accent-s:49%;--accent-l:45%;--bg1:#100F0F;--bg2:#1C1B1A;--bg3:rgba(254,252,240,0.05);--ui1:#282726;--ui2:#343331;--ui3:#403E3C;--tx1:#CECDC3;--tx2:#878580;--tx3:#575653;--hl1:rgba(30,95,91,0.3);--hl2:rgba(213,159,17,0.3)}.theme-dark.minimal-flexoki-dark.minimal-dark-black{--ui1:#1C1B1A}.theme-dark.minimal-gruvbox-dark,.theme-light.minimal-gruvbox-light{--color-red-rgb:204,36,29;--color-orange-rgb:214,93,14;--color-yellow-rgb:215,153,33;--color-green-rgb:152,151,26;--color-cyan-rgb:104,157,106;--color-blue-rgb:69,133,136;--color-purple-rgb:177,98,134;--color-pink-rgb:177,98,134;--color-red:#cc241d;--color-orange:#d65d0e;--color-yellow:#d79921;--color-green:#98971a;--color-cyan:#689d6a;--color-blue:#458588;--color-purple:#b16286;--color-pink:#b16286}.theme-light.minimal-gruvbox-light{--base-h:49;--base-s:92%;--base-l:89%;--accent-h:24;--accent-s:88%;--accent-l:45%;--bg1:#fcf2c7;--bg2:#f2e6bd;--bg3:#ebd9b3;--ui1:#ebdbb2;--ui2:#d5c4a1;--ui3:#bdae93;--tx1:#282828;--tx2:#7c7065;--tx3:#a89a85;--hl1:rgba(192,165,125,.3);--hl2:rgba(215,153,33,.4)}.theme-light.minimal-gruvbox-light.minimal-light-tonal{--bg2:#fcf2c7}.theme-light.minimal-gruvbox-light.minimal-light-white{--bg3:#faf5d7;--ui1:#f2e6bd}.theme-dark.minimal-gruvbox-dark,.theme-light.minimal-gruvbox-light.minimal-light-contrast .mod-left-split,.theme-light.minimal-gruvbox-light.minimal-light-contrast .titlebar,.theme-light.minimal-gruvbox-light.minimal-light-contrast .workspace-drawer.mod-left,.theme-light.minimal-gruvbox-light.minimal-light-contrast .workspace-ribbon.mod-left:not(.is-collapsed),.theme-light.minimal-gruvbox-light.minimal-light-contrast.minimal-status-off .status-bar{--accent-h:24;--accent-s:88%;--accent-l:45%;--bg1:#282828;--bg2:#1e2021;--bg3:#3d3836;--bg3:rgba(62,57,55,0.5);--ui1:#3c3836;--ui2:#504945;--ui3:#665c54;--tx1:#fbf1c7;--tx2:#bdae93;--tx3:#7c6f64;--hl1:rgba(173,149,139,0.3);--hl2:rgba(215,153,33,.4)}.theme-dark.minimal-gruvbox-dark.minimal-dark-black{--hl1:rgba(173,149,139,0.4);--ui1:#282828}.theme-dark.minimal-macos-dark,.theme-light.minimal-macos-light{--color-red-rgb:255,59,49;--color-orange-rgb:255,149,2;--color-yellow-rgb:255,204,0;--color-green-rgb:42,205,65;--color-cyan-rgb:2,199,190;--color-blue-rgb:2,122,255;--color-purple-rgb:176,81,222;--color-pink-rgb:255,46,85;--color-red:#ff3b31;--color-orange:#ff9502;--color-yellow:#ffcc00;--color-green:#2acd41;--color-cyan:#02c7be;--color-blue:#027aff;--color-purple:#b051de;--color-pink:#ff2e55}.theme-light.minimal-macos-light{--base-h:106;--base-s:0%;--base-l:94%;--accent-h:212;--accent-s:100%;--accent-l:50%;--bg1:#fff;--bg2:#f0f0f0;--bg3:rgba(0,0,0,.1);--ui1:#e7e7e7;--tx1:#454545;--tx2:#808080;--tx3:#b0b0b0;--hl1:#b3d7ff}.theme-light.minimal-macos-light.minimal-light-tonal{--bg1:#f0f0f0;--bg2:#f0f0f0}.theme-dark.minimal-macos-dark,.theme-light.minimal-macos-light.minimal-light-contrast .mod-left-split,.theme-light.minimal-macos-light.minimal-light-contrast .titlebar,.theme-light.minimal-macos-light.minimal-light-contrast .workspace-drawer.mod-left,.theme-light.minimal-macos-light.minimal-light-contrast .workspace-ribbon.mod-left:not(.is-collapsed),.theme-light.minimal-macos-light.minimal-light-contrast.minimal-status-off .status-bar{--base-h:106;--base-s:0%;--base-l:12%;--accent-h:212;--accent-s:100%;--accent-l:50%;--bg1:#1e1e1e;--bg2:#282828;--bg3:rgba(255,255,255,0.11);--divider-color:#000;--tab-outline-color:#000;--ui1:#373737;--ui2:#515151;--ui3:#595959;--tx1:#dcdcdc;--tx2:#8c8c8c;--tx3:#686868;--hl1:rgba(98,169,252,0.5);--sp1:#fff}.theme-dark.minimal-macos-dark.minimal-dark-black{--divider-color:#1e1e1e;--tab-outline-color:#1e1e1e}.theme-dark.minimal-nord-dark,.theme-light.minimal-nord-light{--color-red-rgb:191,97,106;--color-orange-rgb:208,138,112;--color-yellow-rgb:235,203,139;--color-green-rgb:163,190,140;--color-cyan-rgb:136,192,208;--color-blue-rgb:129,161,193;--color-purple-rgb:180,142,173;--color-pink-rgb:180,142,173;--color-red:#BF616A;--color-orange:#D08770;--color-yellow:#EBCB8B;--color-green:#A3BE8C;--color-cyan:#88C0D0;--color-blue:#81A1C1;--color-purple:#B48EAD;--color-pink:#B48EAD}.theme-light.minimal-nord-light{--base-h:221;--base-s:27%;--base-l:94%;--accent-h:213;--accent-s:32%;--accent-l:52%;--bg1:#fff;--bg2:#eceff4;--bg3:rgba(157,174,206,0.25);--ui1:#d8dee9;--ui2:#BBCADC;--ui3:#81a1c1;--tx1:#2e3440;--tx2:#7D8697;--tx3:#ADB1B8;--hl2:rgba(208, 135, 112, 0.35)}.theme-dark.minimal-nord-dark,.theme-light.minimal-nord-light.minimal-light-contrast .mod-left-split,.theme-light.minimal-nord-light.minimal-light-contrast .titlebar,.theme-light.minimal-nord-light.minimal-light-contrast .workspace-drawer.mod-left,.theme-light.minimal-nord-light.minimal-light-contrast .workspace-ribbon.mod-left:not(.is-collapsed),.theme-light.minimal-nord-light.minimal-light-contrast.minimal-status-off .status-bar{--base-h:220;--base-s:16%;--base-l:22%;--accent-h:213;--accent-s:32%;--accent-l:52%;--bg1:#2e3440;--bg2:#3b4252;--bg3:rgba(135,152,190,0.15);--ui1:#434c5e;--ui2:#58647b;--ui3:#58647b;--tx1:#d8dee9;--tx2:#9eafcc;--tx3:#4c566a;--hl1:rgba(129,142,180,0.3);--hl2:rgba(208, 135, 112, 0.35)}.theme-dark.minimal-nord-dark.minimal-dark-black{--ui1:#2e3440}.theme-light.minimal-notion-light{--base-h:39;--base-s:18%;--base-d:96%;--accent-h:197;--accent-s:71%;--accent-l:52%;--bg2:#f7f6f4;--bg3:#e8e7e4;--ui1:#ededec;--ui2:#dbdbda;--ui3:#aaa9a5;--tx1:#37352f;--tx2:#72706c;--tx3:#aaa9a5;--hl1:rgba(131,201,229,0.3);--link-weight:500}.theme-dark.minimal-notion-dark,.theme-light.minimal-notion-light.minimal-light-contrast .mod-left-split,.theme-light.minimal-notion-light.minimal-light-contrast .titlebar,.theme-light.minimal-notion-light.minimal-light-contrast .workspace-drawer.mod-left,.theme-light.minimal-notion-light.minimal-light-contrast .workspace-ribbon.mod-left:not(.is-collapsed),.theme-light.minimal-notion-light.minimal-light-contrast.minimal-status-off .status-bar{--base-h:203;--base-s:8%;--base-d:20%;--accent-h:197;--accent-s:71%;--accent-l:52%;--bg1:#2f3437;--bg2:#373c3f;--bg3:#4b5053;--ui1:#3e4245;--ui2:#585d5f;--ui3:#585d5f;--tx1:#ebebeb;--tx2:#909295;--tx3:#585d5f;--hl1:rgba(57,134,164,0.3);--link-weight:500}.theme-dark.minimal-notion-dark.minimal-dark-black{--base-d:5%;--bg3:#232729;--ui1:#2f3437}.theme-light.minimal-rose-pine-light{--color-red-rgb:180,99,122;--color-orange-rgb:215,130,125;--color-yellow-rgb:234,157,53;--color-green-rgb:40,105,131;--color-cyan-rgb:87,147,159;--color-blue-rgb:87,147,159;--color-purple-rgb:144,122,169;--color-pink-rgb:144,122,169;--color-red:#b4637a;--color-orange:#d7827e;--color-yellow:#ea9d34;--color-green:#286983;--color-cyan:#56949f;--color-blue:#56949f;--color-purple:#907aa9;--color-pink:#907aa9}.theme-dark.minimal-rose-pine-dark{--color-red-rgb:234,111,146;--color-orange-rgb:233,155,151;--color-yellow-rgb:246,193,119;--color-green-rgb:47,116,143;--color-cyan-rgb:157,207,215;--color-blue-rgb:157,207,215;--color-purple-rgb:196,167,231;--color-pink-rgb:196,167,231;--color-red:#eb6f92;--color-orange:#ea9a97;--color-yellow:#f6c177;--color-green:#31748f;--color-cyan:#9ccfd8;--color-blue:#9ccfd8;--color-purple:#c4a7e7;--color-pink:#c4a7e7}.theme-light.minimal-rose-pine-light{--base-h:32;--base-s:57%;--base-l:95%;--accent-h:3;--accent-s:53%;--accent-l:67%;--bg1:#fffaf3;--bg2:#faf4ed;--bg3:rgba(233,223,218,0.5);--ui1:#EAE3E1;--ui2:#dfdad9;--ui3:#cecacd;--tx1:#575279;--tx2:#797593;--tx3:#9893a5;--hl1:rgba(191,180,181,0.35)}.theme-dark.minimal-rose-pine-dark,.theme-light.minimal-rose-pine-light.minimal-light-contrast .mod-left-split,.theme-light.minimal-rose-pine-light.minimal-light-contrast .titlebar,.theme-light.minimal-rose-pine-light.minimal-light-contrast .workspace-drawer.mod-left,.theme-light.minimal-rose-pine-light.minimal-light-contrast .workspace-ribbon.mod-left:not(.is-collapsed),.theme-light.minimal-rose-pine-light.minimal-light-contrast.minimal-status-off .status-bar{--base-h:247;--base-s:23%;--base-l:15%;--accent-h:2;--accent-s:55%;--accent-l:83%;--bg1:#1f1d2e;--bg2:#191724;--bg3:rgba(68,66,86,0.5);--ui1:#312F41;--ui2:#403d52;--ui3:#524f67;--tx1:#e0def4;--tx2:#908caa;--tx3:#6e6a86;--hl1:rgba(126,121,155,0.35)}.theme-dark.minimal-rose-pine-dark.minimal-dark-black{--ui1:#21202e}.theme-dark.minimal-solarized-dark,.theme-light.minimal-solarized-light{--color-red-rgb:220,50,47;--color-orange-rgb:203,77,22;--color-yellow-rgb:181,137,0;--color-green-rgb:133,153,0;--color-cyan-rgb:42,161,152;--color-blue-rgb:38,139,210;--color-purple-rgb:108,113,196;--color-pink-rgb:211,54,130;--color-red:#dc322f;--color-orange:#cb4b16;--color-yellow:#b58900;--color-green:#859900;--color-cyan:#2aa198;--color-blue:#268bd2;--color-purple:#6c71c4;--color-pink:#d33682}.theme-light.minimal-solarized-light{--base-h:44;--base-s:87%;--base-l:94%;--accent-h:205;--accent-s:70%;--accent-l:48%;--bg1:#fdf6e3;--bg2:#eee8d5;--bg3:rgba(0,0,0,0.062);--ui1:#e9e1c8;--ui2:#d0cab8;--ui3:#d0cab8;--tx1:#073642;--tx2:#586e75;--tx3:#ABB2AC;--tx4:#586e75;--hl1:rgba(202,197,182,0.3);--hl2:rgba(203,75,22,0.3)}.theme-light.minimal-solarized-light.minimal-light-tonal{--bg2:#fdf6e3}.theme-dark.minimal-solarized-dark,.theme-light.minimal-solarized-light.minimal-light-contrast .mod-left-split,.theme-light.minimal-solarized-light.minimal-light-contrast .titlebar,.theme-light.minimal-solarized-light.minimal-light-contrast .workspace-drawer.mod-left,.theme-light.minimal-solarized-light.minimal-light-contrast .workspace-ribbon.mod-left:not(.is-collapsed),.theme-light.minimal-solarized-light.minimal-light-contrast.minimal-status-off .status-bar{--accent-h:205;--accent-s:70%;--accent-l:48%;--base-h:193;--base-s:98%;--base-l:11%;--bg1:#002b36;--bg2:#073642;--bg3:rgba(255,255,255,0.062);--ui1:#19414B;--ui2:#274850;--ui3:#31535B;--tx1:#93a1a1;--tx2:#657b83;--tx3:#31535B;--tx4:#657b83;--hl1:rgba(15,81,98,0.3);--hl2:rgba(203, 75, 22, 0.35)}.theme-dark.minimal-solarized-dark.minimal-dark-black{--hl1:rgba(15,81,98,0.55);--ui1:#002b36}.theme-dark.minimal-things-dark,.theme-light.minimal-things-light{--color-red-rgb:255,48,108;--color-orange-rgb:255,149,2;--color-yellow-rgb:255,213,0;--color-green-rgb:75,191,94;--color-cyan-rgb:73,174,164;--color-purple-rgb:176,81,222;--color-pink-rgb:255,46,85;--color-red:#FF306C;--color-orange:#ff9502;--color-yellow:#FFD500;--color-green:#4BBF5E;--color-cyan:#49AEA4;--color-purple:#b051de;--color-pink:#ff2e55}.theme-light.minimal-things-light{--color-blue-rgb:27,97,194;--color-blue:#1b61c2}.theme-dark.minimal-things-dark{--color-blue-rgb:77,149,247;--color-blue:#4d95f7}.theme-light.minimal-things-light{--accent-h:215;--accent-s:76%;--accent-l:43%;--bg1:white;--bg2:#f5f6f8;--bg3:rgba(162,177,187,0.25);--ui1:#eef0f4;--ui2:#D8DADD;--ui3:#c1c3c6;--tx1:#26272b;--tx2:#7D7F84;--tx3:#a9abb0;--hl1:#cae2ff}.theme-light.minimal-things-light.minimal-light-tonal{--ui1:#e6e8ec}.theme-light.minimal-things-light.minimal-light-white{--bg3:#f5f6f8}.theme-dark.minimal-things-dark,.theme-light.minimal-things-light.minimal-light-contrast .mod-left-split,.theme-light.minimal-things-light.minimal-light-contrast .titlebar,.theme-light.minimal-things-light.minimal-light-contrast .workspace-drawer.mod-left,.theme-light.minimal-things-light.minimal-light-contrast .workspace-ribbon.mod-left:not(.is-collapsed),.theme-light.minimal-things-light.minimal-light-contrast.minimal-status-off .status-bar{--base-h:218;--base-s:9%;--base-l:15%;--accent-h:215;--accent-s:91%;--accent-l:64%;--bg1:#24262a;--bg2:#202225;--bg3:#3d3f41;--divider-color:#17191c;--tab-outline-color:#17191c;--ui1:#3A3B3F;--ui2:#45464a;--ui3:#6c6e70;--tx1:#fbfbfb;--tx2:#CBCCCD;--tx3:#6c6e70;--hl1:rgba(40,119,236,0.35);--sp1:#fff}.theme-dark.minimal-things-dark.minimal-dark-black{--base-d:5%;--bg3:#24262a;--divider-color:#24262a;--tab-outline-color:#24262a} +/* Plugin compatibility */ + +/* @plugins +core: +- backlink +- command-palette +- daily-notes +- file-explorer +- file-recovery +- global-search +- graph +- outgoing-link +- outline +- page-preview +- publish +- random-note +- starred +- switcher +- sync +- tag-pane +- word-count +community: +- buttons +- dataview +- calendar +- obsidian-charts +- obsidian-checklist-plugin +- obsidian-codemirror-options +- obsidian-dictionary-plugin +- obsidian-embedded-note-titles +- obsidian-excalidraw-plugin +- obsidian-git +- obsidian-hider +- obsidian-hover-editor +- obsidian-kanban +- obsidian-metatable +- obsidian-minimal-settings +- obsidian-outliner +- obsidian-system-dark-mode +- obsidian-style-settings +- quickadd +- sliding-panes-obsidian +- todoist-sync-plugin +*/ +/* @settings + +name: Minimal +id: minimal-style +settings: + - + id: instructions + title: Documentation + type: heading + level: 2 + collapsed: true + description: Use the Minimal Theme Settings plugin to set hotkeys, adjust features, select fonts, and choose from preset color schemes. Use the settings below for more granular customization. Go to https://minimal.guide for documentation. + - + id: interface + title: Interface colors + type: heading + level: 2 + collapsed: true + - + id: base + title: Base color + description: Defines all background and border colors unless overridden in more granular settings + type: variable-themed-color + format: hsl-split + default-light: '#' + default-dark: '#' + - + id: bg1 + title: Primary background + description: Background color for the main window + type: variable-themed-color + format: hex + default-light: '#' + default-dark: '#' + - + id: bg2 + title: Secondary background + description: Background color for left sidebar and menus + type: variable-themed-color + format: hex + default-light: '#' + default-dark: '#' + - + id: bg3 + title: Active background + description: Background color for hovered buttons and currently selected file + type: variable-themed-color + opacity: true + format: hex + default-light: '#' + default-dark: '#' + - + id: ui1 + title: Border color + type: variable-themed-color + description: For buttons, divider lines, and outlined elements + opacity: true + format: hex + default-light: '#' + default-dark: '#' + - + id: ui2 + title: Highlighted border color + description: Used when hovering over buttons, dividers, and outlined elements + type: variable-themed-color + opacity: true + format: hex + default-light: '#' + default-dark: '#' + - + id: ui3 + title: Active border color + description: Used when clicking buttons and outlined elements + type: variable-themed-color + opacity: true + format: hex + default-light: '#' + default-dark: '#' + - + id: accent-color + title: Accent color + type: heading + level: 2 + collapsed: true + - + id: ax1 + title: Accent color + type: variable-themed-color + description: Used primarily for links + format: hex + default-light: '#' + default-dark: '#' + - + id: ax2 + title: Accent color (hover) + type: variable-themed-color + description: Used primarily for hovered links + format: hex + default-light: '#' + default-dark: '#' + - + id: ax3 + title: Accent color interactive + type: variable-themed-color + description: Used for buttons, checklists, toggles + format: hex + default-light: '#' + default-dark: '#' + - + id: sp1 + title: Text on accent + type: variable-themed-color + description: Used primarily for text on accented buttons + format: hex + default-light: '#' + default-dark: '#' + - + id: extended-palette + title: Extended colors + type: heading + level: 2 + collapsed: true + - + id: color-red + title: Red + description: Extended palette colors are defaults used for progress bar status, syntax highlighting, colorful headings, and graph nodes + type: variable-themed-color + opacity: true + format: hex + default-light: '#' + default-dark: '#' + - + id: color-orange + title: Orange + type: variable-themed-color + opacity: true + format: hex + default-light: '#' + default-dark: '#' + - + id: color-yellow + title: Yellow + type: variable-themed-color + opacity: true + format: hex + default-light: '#' + default-dark: '#' + - + id: color-green + title: Green + type: variable-themed-color + opacity: true + format: hex + default-light: '#' + default-dark: '#' + - + id: color-cyan + title: Cyan + type: variable-themed-color + opacity: true + format: hex + default-light: '#' + default-dark: '#' + - + id: color-blue + title: Blue + type: variable-themed-color + opacity: true + format: hex + default-light: '#' + default-dark: '#' + - + id: color-purple + title: Purple + type: variable-themed-color + opacity: true + format: hex + default-light: '#' + default-dark: '#' + - + id: color-pink + title: Pink + type: variable-themed-color + opacity: true + format: hex + default-light: '#' + default-dark: '#' + - + id: blockquotes + title: Blockquotes + type: heading + level: 2 + collapsed: true + - + id: blockquote-color + title: Blockquote text color + type: variable-themed-color + format: hex + default-light: '#' + default-dark: '#' + - + id: blockquote-background-color + title: Blockquote background color + type: variable-themed-color + format: hex + default-light: '#' + default-dark: '#' + - + id: blockquote-border-color + title: Blockquote border color + type: variable-themed-color + format: hex + default-light: '#' + default-dark: '#' + - + id: blockquote-border-thickness + title: Blockquote border thickness + type: variable-number-slider + format: px + default: 1 + min: 0 + max: 5 + step: 1 + - + id: blockquote-size + title: Blockquote font size + description: Accepts any CSS font-size value + type: variable-text + default: '' + - + id: blockquote-font-style + title: Blockquote font style + type: variable-select + allowEmpty: false + default: normal + options: + - + label: Normal + value: normal + - + label: Italic + value: italic + - + id: callouts + title: Callouts + type: heading + level: 2 + collapsed: true + - + id: callouts-style + title: Callout style + type: class-select + allowEmpty: false + default: callouts-default + options: + - + label: Filled + value: callouts-default + - + label: Outlined + value: callouts-outlined + - + id: callout-blend-mode + title: Color blending + description: Blend the color of nested callouts + type: variable-select + allowEmpty: false + default: var(--highlight-mix-blend-mode) + options: + - + label: On + value: var(--highlight-mix-blend-mode) + - + label: Off + value: normal + - + id: canvas + title: Canvas + type: heading + level: 2 + collapsed: true + - + id: canvas-dot-pattern + title: Canvas dot pattern + description: Color for background dot pattern + type: variable-themed-color + format: hex + default-light: '#' + default-dark: '#' + - + id: code-blocks + title: Code blocks + type: heading + level: 2 + collapsed: true + - + id: code-size + title: Code font size + description: Accepts any CSS font-size value + type: variable-text + default: 13px + - + id: minimal-code-scroll + title: Scroll long lines + description: Turns off line wrap for code + type: class-toggle + default: false + - + id: code-background + title: Code background color + description: Background for code blocks + type: variable-themed-color + format: hex + default-light: '#' + default-dark: '#' + - + id: code-normal + title: Code text color + description: Color of code when syntax highlighting is not present + type: variable-themed-color + format: hex + default-light: '#' + default-dark: '#' + - + id: syntax-highlighting + title: Syntax highlighting + type: heading + level: 3 + collapsed: false + - + id: code-comment + title: "Syntax: comments" + description: Syntax highlighting for comments + type: variable-themed-color + format: hex + default-light: '#' + default-dark: '#' + - + id: code-function + title: "Syntax: functions" + description: Syntax highlighting for functions + type: variable-themed-color + format: hex + default-light: '#' + default-dark: '#' + - + id: code-keyword + title: "Syntax: keywords" + description: Syntax highlighting for keywords + type: variable-themed-color + format: hex + default-light: '#' + default-dark: '#' + - + id: code-important + title: "Syntax: important" + description: Syntax highlighting for important text + type: variable-themed-color + format: hex + default-light: '#' + default-dark: '#' + - + id: code-operator + title: "Syntax: operators" + description: Syntax highlighting for operators + type: variable-themed-color + format: hex + default-light: '#' + default-dark: '#' + - + id: code-property + title: "Syntax: properties" + description: Syntax highlighting for properties + type: variable-themed-color + format: hex + default-light: '#' + default-dark: '#' + - + id: code-punctuation + title: "Syntax: punctuation" + description: Syntax highlighting for punctuation + type: variable-themed-color + format: hex + default-light: '#' + default-dark: '#' + - + id: code-string + title: "Syntax: strings" + description: Syntax highlighting for strings + type: variable-themed-color + format: hex + default-light: '#' + default-dark: '#' + - + id: code-tag + title: "Syntax: tags" + description: Syntax highlighting for tags + type: variable-themed-color + format: hex + default-light: '#' + default-dark: '#' + - + id: code-value + title: "Syntax: values" + description: Syntax highlighting for values + type: variable-themed-color + format: hex + default-light: '#' + default-dark: '#' + - + id: dataview + title: Dataview + type: heading + level: 2 + collapsed: true + - + id: trim-cols + title: Trim Dataview columns + description: Disables word wrapping in table cells, and trims long text + type: class-toggle + default: true + - + id: dataview-inline-lists + title: Force tables lists inline + description: Makes lists inside of table cells inline and comma separated + type: class-toggle + default: false + - + id: max-col-width + title: Dataview maximum column width + description: Maximum width for Dataview columns, accepts any CSS width value + type: variable-text + default: 18em + - + id: embed-blocks + title: Embeds and transclusions + type: heading + level: 2 + collapsed: true + - + id: embed-strict + title: Use strict embed style globally + description: Transclusions appear seamlessly in the flow of text. Can be enabled per file using the embed-strict helper class + type: class-toggle + default: false + - + id: embed-hide-title + title: Hide embed titles + description: Hide title of the transcluded file (if strict embed is off) + type: class-toggle + default: false + - + id: embed-underline + title: Underline embedded text + description: Transcluded text is underlined. Can be enabled per file using the embed-underline helper class + type: class-toggle + default: false + - + id: embed-max-height + title: Maximum height of embeds + type: variable-text + description: For transcluded text, accepts valid CSS units + default: '' + - + id: embed-decoration-style + title: Embedded text underline style + type: variable-select + description: Requires underlines to be enabled + allowEmpty: true + default: solid + options: + - + label: Solid + value: solid + - + label: Dashed + value: dashed + - + label: Dotted + value: dotted + - + label: Double + value: double + - + label: Wavy + value: wavy + - + id: embed-decoration-color + title: Embedded text underline color + type: variable-themed-color + description: Requires underlines to be enabled + format: hex + default-light: '#' + default-dark: '#' + - + id: embed-background + title: Embed background + type: variable-themed-color + opacity: true + format: hex + default-light: '#' + default-dark: '#' + - + id: graphs + title: Graphs + type: heading + level: 2 + collapsed: true + - + id: graph-line + title: Line color + description: Changing graph colors requires closing and reopening graph panes or restarting Obsidian + type: variable-themed-color + format: hex + default-light: '#' + default-dark: '#' + - + id: graph-node + title: Node color + type: variable-themed-color + format: hex + default-light: '#' + default-dark: '#' + - + id: graph-node-focused + title: Active node color + type: variable-themed-color + format: hex + default-light: '#' + default-dark: '#' + - + id: graph-node-tag + title: Tag node color + type: variable-themed-color + format: hex + default-light: '#' + default-dark: '#' + - + id: graph-node-attachment + title: Attachment node color + type: variable-themed-color + format: hex + default-light: '#' + default-dark: '#' + - + id: graph-node-unresolved + title: Unresolved node color + type: variable-themed-color + format: hex + default-light: '#' + default-dark: '#' + - + id: headings + title: Headings + type: heading + level: 2 + collapsed: true + - + id: level-1-headings + title: Level 1 Headings + type: heading + level: 3 + collapsed: true + - + id: h1-font + title: H1 font + description: Name of the font as it appears on your system + type: variable-text + default: '' + - + id: h1-size + title: H1 font size + description: Accepts any CSS font-size value + type: variable-text + default: 1.125em + - + id: h1-weight + title: H1 font weight + type: variable-number-slider + default: 600 + min: 100 + max: 900 + step: 100 + - + id: h1-color + title: H1 text color + type: variable-themed-color + format: hex + default-light: '#' + default-dark: '#' + - + id: h1-variant + title: H1 font variant + type: variable-select + allowEmpty: false + default: normal + options: + - + label: Normal + value: normal + - + label: Small caps + value: small-caps + - + label: All small caps + value: all-small-caps + - + id: h1-style + title: H1 font style + type: variable-select + allowEmpty: false + default: normal + options: + - + label: Normal + value: normal + - + label: Italic + value: italic + - + id: h1-l + title: H1 divider line + description: Adds a border below the heading + type: class-toggle + default: false + - + id: level-2-headings + title: Level 2 Headings + type: heading + level: 3 + collapsed: true + - + id: h2-font + title: H2 font + description: Name of the font as it appears on your system + type: variable-text + default: '' + - + id: h2-size + title: H2 font size + description: Accepts any CSS font-size value + type: variable-text + default: 1em + - + id: h2-weight + title: H2 font weight + type: variable-number-slider + default: 600 + min: 100 + max: 900 + step: 100 + - + id: h2-color + title: H2 text color + type: variable-themed-color + format: hex + default-light: '#' + default-dark: '#' + - + id: h2-variant + title: H2 font variant + type: variable-select + allowEmpty: false + default: normal + options: + - + label: Normal + value: normal + - + label: Small caps + value: small-caps + - + label: All small caps + value: all-small-caps + - + id: h2-style + title: H2 font style + type: variable-select + allowEmpty: false + default: normal + options: + - + label: Normal + value: normal + - + label: Italic + value: italic + - + id: h2-l + title: H2 divider line + description: Adds a border below the heading + type: class-toggle + default: false + - + id: level-3-headings + title: Level 3 Headings + type: heading + level: 3 + collapsed: true + - + id: h3-font + title: H3 font + description: Name of the font as it appears on your system + type: variable-text + default: '' + - + id: h3-size + title: H3 font size + description: Accepts any CSS font-size value + type: variable-text + default: 1em + - + id: h3-weight + title: H3 font weight + type: variable-number-slider + default: 600 + min: 100 + max: 900 + step: 100 + - + id: h3-color + title: H3 text color + type: variable-themed-color + format: hex + default-light: '#' + default-dark: '#' + - + id: h3-variant + title: H3 font variant + type: variable-select + allowEmpty: false + default: normal + options: + - + label: Normal + value: normal + - + label: Small caps + value: small-caps + - + label: All small caps + value: all-small-caps + - + id: h3-style + title: H3 font style + type: variable-select + allowEmpty: false + default: normal + options: + - + label: Normal + value: normal + - + label: Italic + value: italic + - + id: h3-l + title: H3 divider line + description: Adds a border below the heading + type: class-toggle + default: false + - + id: level-4-headings + title: Level 4 Headings + type: heading + level: 3 + collapsed: true + - + id: h4-font + title: H4 font + description: Name of the font as it appears on your system + type: variable-text + default: '' + - + id: h4-size + title: H4 font size + description: Accepts any CSS font-size value + type: variable-text + default: 0.9em + - + id: h4-weight + title: H4 font weight + type: variable-number-slider + default: 500 + min: 100 + max: 900 + step: 100 + - + id: h4-color + title: H4 text color + type: variable-themed-color + format: hex + default-light: '#' + default-dark: '#' + - + id: h4-variant + title: H4 font variant + type: variable-select + allowEmpty: false + default: small-caps + options: + - + label: Normal + value: normal + - + label: Small caps + value: small-caps + - + label: All small caps + value: all-small-caps + - + id: h4-style + title: H4 font style + type: variable-select + allowEmpty: false + default: normal + options: + - + label: Normal + value: normal + - + label: Italic + value: italic + - + id: h4-l + title: H4 divider line + description: Adds a border below the heading + type: class-toggle + default: false + - + id: level-5-headings + title: Level 5 Headings + type: heading + level: 3 + collapsed: true + - + id: h5-font + title: H5 font + description: Name of the font as it appears on your system + type: variable-text + default: '' + - + id: h5-size + title: H5 font size + description: Accepts any CSS font-size value + type: variable-text + default: 0.85em + - + id: h5-weight + title: H5 font weight + type: variable-number-slider + default: 500 + min: 100 + max: 900 + step: 100 + - + id: h5-color + title: H5 text color + type: variable-themed-color + format: hex + default-light: '#' + default-dark: '#' + - + id: h5-variant + title: H5 font variant + type: variable-select + allowEmpty: false + default: small-caps + options: + - + label: Normal + value: normal + - + label: Small caps + value: small-caps + - + label: All small caps + value: all-small-caps + - + id: h5-style + title: H5 font style + type: variable-select + allowEmpty: false + default: normal + options: + - + label: Normal + value: normal + - + label: Italic + value: italic + - + id: h5-l + title: H5 divider line + description: Adds a border below the heading + type: class-toggle + default: false + - + id: level-6-headings + title: Level 6 Headings + type: heading + level: 3 + collapsed: true + - + id: h6-font + title: H6 font + description: Name of the font as it appears on your system + type: variable-text + default: '' + - + id: h6-size + title: H6 font size + description: Accepts any CSS font-size value + type: variable-text + default: 0.85em + - + id: h6-weight + title: H6 font weight + type: variable-number-slider + default: 400 + min: 100 + max: 900 + step: 100 + - + id: h6-color + title: H6 text color + type: variable-themed-color + format: hex + default-light: '#' + default-dark: '#' + - + id: h6-variant + title: H6 font variant + type: variable-select + allowEmpty: false + default: small-caps + options: + - + label: Normal + value: normal + - + label: Small caps + value: small-caps + - + label: All small caps + value: all-small-caps + - + id: h6-style + title: H6 font style + type: variable-select + allowEmpty: false + default: normal + options: + - + label: Normal + value: normal + - + label: Italic + value: italic + - + id: h6-l + title: H6 divider line + type: class-toggle + description: Adds a border below the heading + default: false + - + id: icons + title: Icons + type: heading + level: 2 + collapsed: true + - + id: icon-muted + title: Icon opacity (inactive) + type: variable-number-slider + default: 0.5 + min: 0.25 + max: 1 + step: 0.05 + - + id: icon-color + title: Icon color + type: variable-themed-color + opacity: true + format: hex + default-light: '#' + default-dark: '#' + - + id: icon-color-hover + title: Icon color (hover) + type: variable-themed-color + opacity: true + format: hex + default-light: '#' + default-dark: '#' + - + id: icon-color-active + title: Icon color (active) + type: variable-themed-color + opacity: true + format: hex + default-light: '#' + default-dark: '#' + - + id: icon-color-focused + title: Icon color (focused) + type: variable-themed-color + opacity: true + format: hex + default-light: '#' + default-dark: '#' + - + id: images + title: Images + type: heading + level: 2 + collapsed: true + - + id: image-muted + title: Image opacity in dark mode + description: Level of fading for images in dark mode. Hover over images to display at full brightness. + type: variable-number-slider + default: 0.7 + min: 0.25 + max: 1 + step: 0.05 + - + id: image-radius + title: Image radius + description: Rounded corners for images + type: variable-number-slider + default: 4 + min: 0 + max: 16 + step: 1 + format: px + - + id: image-blend-light + title: Blend images in light mode + description: Allow images to blend into the color scheme background color + type: class-toggle + default: false + - + id: zoom-off + title: Disable image zoom + description: Turns off click + hold to zoom images + type: class-toggle + - + id: image-grid-fit + title: Image grid crop + description: Sets how images get cropped in a grid + type: variable-select + default: cover + options: + - + label: Crop to fit + value: cover + - + label: Show full image + value: contain + - + id: image-grid-background + title: Image grid background + description: Background of images in cells, useful when images are not cropped to fit + type: variable-themed-color + opacity: true + format: hex + default-light: '#' + default-dark: '#' + - + id: indentation-guides + title: Indentation guides + type: heading + level: 2 + collapsed: true + - + id: ig-adjust-reading + title: Horizontal adjustment in reading mode + type: variable-number-slider + default: -0.65 + min: -1.2 + max: 0 + step: 0.05 + format: em + - + id: ig-adjust-edit + title: Horizontal adjustment in edit mode + type: variable-number-slider + default: -1 + min: -10 + max: 10 + step: 1 + format: px + - + id: indentation-guide-color + title: Indentation guide color + type: variable-themed-color + format: hex + opacity: true + default-light: '#' + default-dark: '#' + - + id: indentation-guide-color-active + title: Indentation guide color (active) + type: variable-themed-color + format: hex + opacity: true + default-light: '#' + default-dark: '#' + - + id: links + title: Links + type: heading + level: 2 + collapsed: true + - + id: links-internal + title: Internal links + type: heading + level: 3 + collapsed: true + - + id: link-color + title: Internal link color + type: variable-themed-color + format: hex + default-light: '#' + default-dark: '#' + - + id: link-color-hover + title: Internal link color (hover) + type: variable-themed-color + format: hex + default-light: '#' + default-dark: '#' + - + id: link-unresolved-opacity + title: Unresolved link opacity + type: variable-number-slider + default: 0.7 + min: 0.25 + max: 1 + step: 0.05 + - + id: link-unresolved-color + title: Unresolved link color + type: variable-themed-color + format: hex + default-light: '#' + default-dark: '#' + - + id: link-unresolved-decoration-color + title: Unresolved link underline color + type: variable-themed-color + format: hex + opacity: true + default-light: '#' + default-dark: '#' + - + id: links-external + title: External links + type: heading + level: 3 + collapsed: true + - + id: link-external-color + title: External link color + type: variable-themed-color + format: hex + default-light: '#' + default-dark: '#' + - + id: link-external-color-hover + title: External link color (hover) + type: variable-themed-color + format: hex + default-light: '#' + default-dark: '#' + - + id: active-line + title: Line numbers + type: heading + level: 2 + collapsed: true + - + id: active-line-on + title: Highlight active line + description: Adds a background to current line in editor + type: class-toggle + default: false + - + id: folding-offset + title: Gutter offset + description: Width of the file margin used for gutter + type: variable-number-slider + default: 32 + min: 0 + max: 60 + step: 1 + format: px + - + id: gutter-background + title: Gutter background + type: variable-themed-color + format: hex + default-light: '#' + default-dark: '#' + - + id: line-number-color + title: Line number color + type: variable-themed-color + format: hex + default-light: '#' + default-dark: '#' + - + id: line-number-color-active + title: Active line number color + type: variable-themed-color + format: hex + default-light: '#' + default-dark: '#' + - + id: active-line-bg + title: Active line background + description: Using a low opacity color is recommended to avoid conflicting with highlights + type: variable-themed-color + opacity: true + format: hex + default-light: '#' + default-dark: '#' + - + id: lists + title: Lists and tasks + type: heading + level: 2 + collapsed: true + - + id: checkbox-color + title: Checkbox color + description: Background color for completed tasks + type: variable-themed-color + format: hex + default-light: '#' + default-dark: '#' + - + id: checkbox-shape + title: Checkbox shape + type: class-select + allowEmpty: false + default: checkbox-circle + options: + - + label: Circle + value: checkbox-circle + - + label: Square + value: checkbox-square + - + id: minimal-strike-lists + title: Strike completed tasks + description: Adds strikethrough line and greyed text for completed tasks + type: class-toggle + default: false + - + id: list-spacing + title: List item spacing + description: Vertical space between list items in em units + type: variable-number-slider + default: 0.075 + min: 0 + max: 0.3 + step: 0.005 + format: em + - + id: list-indent + title: Nested list indentation + description: Horizontal space from left in em units + type: variable-number-slider + default: 2 + min: 1 + max: 3.5 + step: 0.1 + format: em + - + id: pdf + title: PDFs + type: heading + level: 2 + collapsed: true + - + id: pdf-page-style + title: PDF page style + description: Borders and shadows around pages + type: class-select + allowEmpty: false + default: pdf-seamless-on + options: + - + label: Seamless + value: pdf-seamless-on + - + label: Shadows + value: pdf-shadows-on + - + id: pdf-invert-dark + title: Invert PDFs in dark mode + description: Best for working with black text on white pages + type: class-toggle + default: true + - + id: pdf-blend-light + title: Blend PDFs in light mode + description: Allow PDFs to blend into the color scheme background color + type: class-toggle + default: true + - + id: pdf-dark-opacity + title: PDF opacity in dark mode + description: Fade PDF pages in dark mode + type: variable-number-slider + default: 1 + min: 0.25 + max: 1 + step: 0.05 + - + id: progress + title: Progress bars + type: heading + level: 2 + collapsed: true + - + id: progress-complete + title: Completed progress bar color + description: Defaults to your accent color + type: variable-themed-color + format: hex + default-light: '#' + default-dark: '#' + - + id: properties + title: Properties + type: heading + level: 2 + collapsed: true + - + id: metadata-heading-off + title: Hide properties heading + description: Hide "Properties" heading above properties + type: class-toggle + default: false + - + id: metadata-add-property-off + title: Hide "Add property" button + description: Hide "Add property" button below properties + type: class-toggle + default: false + - + id: metadata-icons-off + title: Hide property icons + description: Hide icons next to property names + type: class-toggle + default: false + - + id: metadata-dividers + title: Property row lines + description: Display borders between properties + type: class-toggle + default: false + - + id: metadata-label-width + title: Property name width + description: Width for the name of the property + type: variable-number-slider + format: rem + default: 8 + min: 4 + max: 12 + step: 0.25 + - + id: sidebars + title: Sidebars + type: heading + level: 2 + collapsed: true + - + id: sidebar-lines-off + title: Hide sidebar relationship lines + description: Turns off lines in file navigation + type: class-toggle + - + id: sidebar-tabs-style + title: Sidebar tab style + type: class-select + allowEmpty: false + default: sidebar-tabs-default + options: + - + label: Index round + value: sidebar-tabs-index + - + label: Index square + value: sidebar-tabs-square + - + label: Modern compact + value: sidebar-tabs-default + - + label: Modern wide + value: sidebar-tabs-wide + - + label: Underline + value: sidebar-tabs-underline + + - + id: mobile-left-sidebar-width + title: Mobile left sidebar width + description: Maximum width for pinned left sidebar on mobile + type: variable-number + default: 280 + format: pt + - + id: mobile-right-sidebar-width + title: Mobile right sidebar width + description: Maximum width for pinned right sidebar on mobile + type: variable-number + default: 240 + format: pt + - + id: ribbon + title: Ribbon + type: heading + level: 2 + collapsed: true + - + id: ribbon-style + title: Ribbon style + description: Ribbon menu can be hidden using the Hider plugin + type: class-select + allowEmpty: false + default: ribbon-hidden + options: + - + label: Default + value: ribbon-hidden + - + label: Bottom left hover + value: ribbon-bottom-left-hover + - + id: tables + title: Tables + type: heading + level: 2 + collapsed: true + - + id: table-text-size + title: Table font size + description: All of the following settings apply to all tables globally. To turn on these features on a per-note basis use helper classes. See documentation. + type: variable-text + default: 1em + - + id: table-column-min-width + title: Minimum column width + type: variable-text + default: 6ch + - + id: table-column-max-width + title: Maximum column width + type: variable-text + default: none + - + id: maximize-tables-off + title: Maximize table width + description: Determines how wide tables should behave when they become wider than the line width + type: class-select + allowEmpty: false + default: maximize-tables-off + options: + - + label: Fit to line width + value: maximize-tables-off + - + label: Overflow line width + value: maximize-tables-auto + - + label: Always fill + value: maximize-tables + - + id: row-lines + title: Row lines + description: Display borders between table rows globally + type: class-toggle + default: false + - + id: col-lines + title: Column lines + description: Display borders between table columns globally + type: class-toggle + default: false + - + id: table-lines + title: Cell lines + description: Display borders around all table cells globally + type: class-toggle + default: false + - + id: row-alt + title: Striped rows + description: Display striped background in alternating table rows globally + type: class-toggle + default: false + - + id: col-alt + title: Striped columns + description: Display striped background in alternating table columns globally + type: class-toggle + default: false + - + id: table-tabular + title: Tabular figures + description: Use fixed width numbers in tables globally + type: class-toggle + default: false + - + id: table-numbers + title: Row numbers + description: Display row numbers in tables globally + type: class-toggle + default: false + - + id: table-nowrap + title: Disable line wrap + description: Turn off line wrapping in table cells globally + type: class-toggle + default: false + - + id: row-hover + title: Highlight active row + description: Highlight rows on hover + type: class-toggle + default: false + - + id: table-row-background-hover + title: Active row background + description: Background color for hovered tables rows + type: variable-themed-color + format: hex + opacity: true + default-light: '#' + default-dark: '#' + - + id: tabs + title: Tabs + type: heading + level: 2 + collapsed: true + - + id: header-height + title: Tab bar height + type: variable-text + default: 40px + - + id: tabs-style + title: Tab style + type: class-select + allowEmpty: false + default: tabs-default + options: + - + label: Index round + value: tabs-default + - + label: Index square + value: tabs-square + - + label: Modern + value: tabs-modern + - + label: Square + value: tabs-plain-square + - + label: Underline + value: tabs-underline + - + id: minimal-tab-text-color + title: Tab text color + type: variable-themed-color + format: hex + opacity: true + default-light: '#' + default-dark: '#' + - + id: minimal-tab-text-color-active + title: Tab text color (active) + type: variable-themed-color + format: hex + opacity: true + default-light: '#' + default-dark: '#' + - + id: tab-stacks + title: Tab stacks + type: heading + level: 2 + collapsed: true + - + id: tab-stacked-pane-width + title: Stacked width + type: variable-number + description: Width of a stacked tab in pixels + default: 700 + format: px + - + id: tab-stacked-header-width + title: Spine width + type: variable-number + description: Width of the spine in pixels + default: 40 + format: px + - + id: tab-stacked-spine-orientation + title: Spine text orientation + type: class-select + default: tab-stack-top + options: + - + label: Top + value: tab-stack-top + - + label: Top flipped + value: tab-stack-top-flipped + - + label: Bottom + value: tab-stack-bottom + - + label: Bottom flipped + value: tab-stack-bottom-flipped + - + label: Center + value: tab-stack-center + - + label: Center flipped + value: tab-stack-center-flipped + - + id: tags + title: Tags + type: heading + level: 2 + collapsed: true + - + id: minimal-unstyled-tags + title: Plain tags + description: Tags will render as normal text, overrides settings below + type: class-toggle + default: false + - + id: tag-radius + title: Tag shape + type: variable-select + default: 14px + options: + - + label: Pill + value: 14px + - + label: Rounded + value: 4px + - + label: Square + value: 0px + - + id: tag-border-width + title: Tag border width + type: variable-select + default: 1px + options: + - + label: None + value: 0 + - + label: Thin + value: 1px + - + label: Thick + value: 2px + - + id: tag-color + title: Tag text color + type: variable-themed-color + opacity: true + format: hex + default-light: '#' + default-dark: '#' + - + id: tag-background + title: Tag background color + type: variable-themed-color + opacity: true + format: hex + default-light: '#' + default-dark: '#' + - + id: tag-background-hover + title: Tag background color (hover) + type: variable-themed-color + opacity: true + format: hex + default-light: '#' + default-dark: '#' + - + id: text + title: Text + type: heading + level: 2 + collapsed: true + - + id: tx1 + title: Normal text color + type: variable-themed-color + description: Primary text color used by default across all elements + opacity: true + format: hex + default-light: '#' + default-dark: '#' + - + id: hl1 + title: Selected text background + type: variable-themed-color + opacity: true + format: hex + default-light: '#' + default-dark: '#' + - + id: hl2 + title: Highlighted text background + type: variable-themed-color + opacity: true + format: hex + default-light: '#' + default-dark: '#' + - + id: tx2 + title: Muted text color + description: Secondary text such as sidebar note titles and table headings + type: variable-themed-color + opacity: true + format: hex + default-light: '#' + default-dark: '#' + - + id: tx3 + title: Faint text color + description: tertiary text such as input placeholders, empty checkboxes, and disabled statuses + type: variable-themed-color + opacity: true + format: hex + default-light: '#' + default-dark: '#' + - + id: text-formatting + title: Markdown syntax color + description: Markdown formatting syntax text color + type: variable-themed-color + opacity: true + format: hex + default-light: '#' + default-dark: '#' + - + id: italic-color + title: Italic text color + type: variable-themed-color + format: hex + default-light: '#' + default-dark: '#' + - + id: bold-color + title: Bold text color + type: variable-themed-color + format: hex + default-light: '#' + default-dark: '#' + - + id: bold-weight + title: Bold text weight + type: variable-number-slider + default: 600 + min: 100 + max: 900 + step: 100 + - + id: p-spacing + title: Paragraph spacing + description: Space between paragraphs in reading mode (Obsidian 1.3.7+) + type: variable-text + default: 1.75rem + - + id: heading-spacing + title: Heading spacing + description: Space between paragraphs and headings in reading mode (Obsidian 1.3.7+) + type: variable-text + default: 2em + - + id: titles + title: Titles + type: heading + level: 2 + collapsed: true + - + id: tab-title-bar + title: Tab title bar + description: Tab title bar must be turned on in Appearance settings + type: heading + level: 3 + collapsed: true + - + id: file-header-visibility + title: Tab title visibility + description: Visibility of the tab title text + type: class-select + default: minimal-tab-title-hover + options: + - + label: Hover only + value: minimal-tab-title-hover + - + label: Hidden + value: minimal-tab-title-hidden + - + label: Visible + value: minimal-tab-title-visible + - + id: file-header-font-size + title: Tab title font size + description: Accepts any CSS font-size value + type: variable-text + default: 0.9em + - + id: file-header-font-weight + title: Tab title font weight + type: variable-number-slider + default: 400 + min: 100 + max: 900 + step: 100 + - + id: file-header-justify + title: Tab title alignment + type: variable-select + default: center + options: + - + label: Center + value: center + - + label: Left + value: left + - + id: title-color + title: Tab title text color (active) + type: variable-themed-color + format: hex + default-light: '#' + default-dark: '#' + - + id: title-color-inactive + title: Tab title text color (inactive) + type: variable-themed-color + format: hex + default-light: '#' + default-dark: '#' + - + id: inline-title + title: Inline title + description: Inline titles must be turned on in Appearance settings + type: heading + level: 3 + collapsed: true + - + id: inline-title-font + title: Inline title font + description: Name of the font as it appears on your system + type: variable-text + default: '' + - + id: inline-title-size + title: Inline title font size + description: Accepts any CSS font-size value + type: variable-text + default: 1.125em + - + id: inline-title-weight + title: Inline title font weight + type: variable-number-slider + default: 600 + min: 100 + max: 900 + step: 100 + - + id: inline-title-color + title: Inline title text color (active) + type: variable-themed-color + format: hex + default-light: '#' + default-dark: '#' + - + id: translucency + title: Translucency + type: heading + level: 2 + collapsed: true + - + id: workspace-background-translucent + title: Translucent background color + type: variable-themed-color + opacity: true + format: hex + default-light: '#' + default-dark: '#' + - + id: window-frame + title: Window frame + type: heading + level: 2 + collapsed: true + - + id: window-title-off + title: Hide window frame title + description: Hide title in the custom title bar + type: class-toggle + - + id: frame-background + title: Frame background + description: Requires colorful window frame + type: variable-themed-color + opacity: true + format: hsl-split + default-light: '#' + default-dark: '#' + - + id: frame-icon-color + title: Frame icon color + description: Requires colorful frame + type: variable-themed-color + format: hex + default-light: '#' + default-dark: '#' + - + id: titlebar-text-color-focused + title: Frame title color (focused) + description: Requires custom title bar + type: variable-themed-color + format: hex + default-light: '#' + default-dark: '#' + - + id: titlebar-text-color + title: Frame title color (inactive) + description: Requires custom title bar + type: variable-themed-color + format: hex + default-light: '#' + default-dark: '#' + - + id: titlebar-text-weight + title: Frame title font weight + description: Requires custom title bar + type: variable-number-slider + default: 600 + min: 100 + max: 900 + step: 100 +*/ + +/* @settings +name: Minimal Cards +id: minimal-cards-style +settings: + - + id: cards-min-width + title: Card minimum width + type: variable-text + default: 180px + - + id: cards-max-width + title: Card maximum width + description: Default fills the available width, accepts valid CSS units + type: variable-text + default: 1fr + - + id: cards-mobile-width + title: Card minimum width on mobile + type: variable-text + default: 120px + - + id: cards-padding + title: Card padding + type: variable-text + default: 1.2em + - + id: cards-image-height + title: Card maximum image height + type: variable-text + default: 400px + - + id: cards-border-width + title: Card border width + type: variable-text + default: 1px + - + id: cards-background + title: Card background color + type: variable-themed-color + format: hex + default-light: '#' + default-dark: '#' + +*/ + +/* @settings +name: Minimal Mobile +id: minimal-mobile +settings: + - + id: mobile-toolbar-off + title: Disable toolbar + description: Turns off mobile toolbar + type: class-toggle +*/ + +/* @settings +name: Minimal Advanced Settings +id: minimal-advanced +settings: + - + id: hide-markdown + title: Hide Markdown syntax + description: (EXPERIMENTAL) Warning, this can be confusing because the characters still exist they are just hidden. + type: class-toggle + - + id: styled-scrollbars + title: Styled scrollbars + description: Use styled scrollbars (replaces native scrollbars) + type: class-toggle + - + id: cursor + title: Cursor style + description: The cursor style for UI elements + type: variable-select + default: default + options: + - + label: Default + value: default + - + label: Pointer + value: pointer + - + label: Crosshair + value: crosshair + - + id: font-ui-small + title: Small font size + description: Font size in px of smaller text + type: variable-number + default: 13 + format: px + - + id: font-ui-smaller + title: Smaller font size + description: Font size in px of smallest text + type: variable-number + default: 11 + format: px + +*/ diff --git a/Perlite/perlite/Demo/.obsidian/themes/Obsidian Nord/manifest.json b/Perlite/perlite/Demo/.obsidian/themes/Obsidian Nord/manifest.json new file mode 100644 index 0000000..2f37ab3 --- /dev/null +++ b/Perlite/perlite/Demo/.obsidian/themes/Obsidian Nord/manifest.json @@ -0,0 +1,7 @@ +{ + "name": "Obsidian Nord", + "version": "0.2.0", + "minAppVersion": "0.16.0", + "author": "insanum", + "authorUrl": "https://insanum.com" +} diff --git a/Perlite/perlite/Demo/.obsidian/themes/Obsidian Nord/theme.css b/Perlite/perlite/Demo/.obsidian/themes/Obsidian Nord/theme.css new file mode 100644 index 0000000..cd2a348 --- /dev/null +++ b/Perlite/perlite/Demo/.obsidian/themes/Obsidian Nord/theme.css @@ -0,0 +1,525 @@ + +:root +{ + --dark0_x: 46,52,64; /* #2e3440 */ + --dark0: rgb(var(--dark0_x)); + --dark1_x: 59,66,82; /* #3b4252 */ + --dark1: rgb(var(--dark1_x)); + --dark2_x: 67,76,94; /* #434c5e */ + --dark2: rgb(var(--dark2_x)); + --dark3_x: 76,86,106; /* #4c566a */ + --dark3: rgb(var(--dark3_x)); + + --light0_x: 216,222,233; /* #d8dee9 */ + --light0: rgb(var(--light0_x)); + --light1_x: 229,233,240; /* #e5e9f0 */ + --light1: rgb(var(--light1_x)); + --light2_x: 236,239,244; /* #eceff4 */ + --light2: rgb(var(--light2_x)); + --light3_x: 255,255,255; /* #ffffff */ + --light3: rgb(var(--light3_x)); + + --frost0_x: 143,188,187; /* #8fbcbb */ + --frost0: rgb(var(--frost0_x)); + --frost1_x: 136,192,208; /* #88c0d0 */ + --frost1: rgb(var(--frost1_x)); + --frost2_x: 129,161,193; /* #81a1c1 */ + --frost2: rgb(var(--frost2_x)); + --frost3_x: 94,129,172; /* #5e81ac */ + --frost3: rgb(var(--frost3_x)); + + --red_x: 191,97,106; /* #bf616a */ + --red: rgb(var(--red_x)); + --orange_x: 208,135,112; /* #d08770 */ + --orange: rgb(var(--orange_x)); + --yellow_x: 235,203,139; /* #ebcb8b */ + --yellow: rgb(var(--yellow_x)); + --green_x: 163,190,140; /* #a3be8c */ + --green: rgb(var(--green_x)); + --purple_x: 180,142,173; /* #b48ead */ + --purple: rgb(var(--purple_x)); +} + +body +{ + --accent-h: 354; /* --red #bf616a */ + --accent-s: 42%; + --accent-l: 56%; + + --link-decoration: none; + --link-decoration-hover: none; + --link-external-decoration: none; + --link-external-decoration-hover: none; + + --tag-decoration: none; + --tag-decoration-hover: underline; + --tag-padding-x: .5em; + --tag-padding-y: .2em; + --tag-radius: .5em; + + --tab-font-weight: 600; + --bold-weight: 600; + + --checkbox-radius: 0; + + /* --list-indent: 2em; */ + + --embed-border-left: 6px double var(--interactive-accent); +} + +.theme-dark +{ + --color-red-rgb: var(--red_x); + --color-red: var(--red); + --color-purple-rgb: var(--purple_x); + --color-purple: var(--purple); + --color-green-rgb: var(--green_x); + --color-green: var(--green); + --color-cyan-rgb: var(--frost1_x); + --color-cyan: var(--frost1); + --color-blue-rgb: var(--frost3_x); + --color-blue: var(--frost3); + --color-yellow-rgb: var(--yellow_x); + --color-yellow: var(--yellow); + --color-orange-rgb: var(--orange_x); + --color-orange: var(--orange); + /* --color-pink: var(--purple); */ + + --background-primary: var(--dark0); + --background-primary-alt: var(--dark0); + --background-secondary: var(--dark1); + --background-secondary-alt: var(--dark2); + --background-modifier-border: var(--dark2); + + --cursor-line-background: rgba(var(--red_x), 0.2); + + --text-normal: var(--light2); + --text-faint: var(--light0); + --text-muted: var(--light1); + + --link-url: var(--purple); + + --h1-color: var(--red); + --h2-color: var(--yellow); + --h3-color: var(--green); + --h4-color: var(--purple); + --h5-color: var(--frost0); + --h6-color: var(--frost2); + + --text-highlight-bg: var(--frost1); + --text-highlight-fg: var(--dark0); + + --text-accent: var(--orange); + --text-accent-hover: var(--frost2); + + --tag-color: var(--frost0); + --tag-background: var(--dark2); + --tag-background-hover: var(--dark1); + + --titlebar-text-color-focused: var(--red); + + --inline-title-color: var(--yellow); + + --bold-color: var(--yellow); + --italic-color: var(--yellow); + + --checkbox-color: var(--frost0); + --checkbox-color-hover: var(--frost0); + --checkbox-border-color: var(--frost0); + --checkbox-border-color-hover: var(--frost0); + --checklist-done-color: rgba(var(--light2_x), 0.5); + + --table-header-background: hsl(220, 16%, 16%); + --table-header-background-hover: var(--dark3); + --table-row-even-background: hsl(220, 16%, 20%); + --table-row-odd-background: hsl(220, 16%, 24%); + --table-row-background-hover: var(--dark3); + + --text-selection: rgba(var(--red_x), 0.6); + --flashing-background: rgba(var(--red_x), 0.3); + + --code-normal: var(--frost1); + --code-background: var(--dark1); + + --mermaid-note: var(--frost3); + --mermaid-loopline: var(--frost1); + --mermaid-exclude: var(--dark3); + --mermaid-seqnum: var(--dark0); + + --icon-color-hover: var(--red); + --icon-color-focused: var(--frost2); + + --nav-item-color-hover: var(--red); + --nav-item-color-active: var(--frost2); + --nav-file-tag: rgba(var(--yellow_x), 0.9); + + --graph-line: var(--dark3); + --graph-node: var(--light3); + --graph-node-tag: var(--red); + --graph-node-attachment: var(--green); + + --calendar-hover: var(--red); + --calendar-background-hover: var(--dark3); + --calendar-week: var(--yellow); + --calendar-today: var(--yellow); + + --dataview-key: var(--text-faint); + --dataview-key-background: rgba(var(--frost2_x), 0.3); + --dataview-value: var(--text-faint); + --dataview-value-background: rgba(var(--red_x), 0.3); + + --tab-text-color-focused-active: var(--frost2); + --tab-text-color-focused-active-current: var(--red); +} + +.theme-light +{ + --color-red-rgb: var(--red_x); + --color-red: var(--red); + --color-purple-rgb: var(--purple_x); + --color-purple: var(--purple); + --color-green-rgb: var(--green_x); + --color-green: var(--green); + --color-cyan-rgb: var(--frost1_x); + --color-cyan: var(--frost1); + --color-blue-rgb: var(--frost3_x); + --color-blue: var(--frost3); + --color-yellow-rgb: var(--yellow_x); + --color-yellow: var(--yellow); + --color-orange-rgb: var(--orange_x); + --color-orange: var(--orange); + /* --color-pink: var(--purple); */ + + --background-primary: var(--light3); + --background-primary-alt: var(--light3); + --background-secondary: var(--light2); + --background-secondary-alt: var(--light1); + --background-modifier-border: var(--light1); + + --cursor-line-background: rgba(var(--red_x), 0.1); + + --text-normal: var(--dark2); + --text-faint: var(--dark0); + --text-muted: var(--dark1); + + --link-url: var(--purple); + + --h1-color: var(--red); + --h2-color: var(--yellow); + --h3-color: var(--green); + --h4-color: var(--purple); + --h5-color: var(--frost0); + --h6-color: var(--frost2); + + --text-highlight-bg: var(--yellow); + --text-highlight-fg: var(--dark0); + + --text-accent: var(--orange); + --text-accent-hover: var(--frost2); + + --tag-color: var(--dark3); + --tag-background: var(--light1); + --tag-background-hover: var(--light0); + + --titlebar-text-color-focused: var(--red); + + --inline-title-color: var(--yellow); + + --bold-color: var(--green); + --italic-color: var(--green); + + --checkbox-color: var(--frost2); + --checkbox-color-hover: var(--frost2); + --checkbox-border-color: var(--frost2); + --checkbox-border-color-hover: var(--frost2); + --checklist-done-color: rgba(var(--dark2_x), 0.4); + + --table-header-background: rgba(var(--light2_x), 0.2); + --table-header-background-hover: var(--frost2); + --table-row-even-background: rgba(var(--light2_x), 0.4); + --table-row-odd-background: rgba(var(--light2_x), 0.8); + --table-row-background-hover: var(--frost2); + + --text-selection: rgba(var(--red_x), 0.6); + --flashing-background: rgba(var(--red_x), 0.3); + + --code-normal: var(--frost1); + --code-background: var(--light2); + + --mermaid-note: var(--frost0); + --mermaid-loopline: var(--frost1); + --mermaid-exclude: var(--light0); + --mermaid-seqnum: var(--light0); + + --icon-color-hover: var(--red); + --icon-color-focused: var(--frost3); + + --nav-item-color-hover: var(--red); + --nav-item-color-active: var(--frost2); + --nav-file-tag: rgba(var(--orange_x), 0.9); + + --graph-line: var(--light0); + --graph-node: var(--dark3); + --graph-node-tag: var(--red); + --graph-node-attachment: var(--green); + + --calendar-hover: var(--red); + --calendar-background-hover: var(--light0); + --calendar-week: var(--orange); + --calendar-today: var(--orange); + + --dataview-key: var(--text-faint); + --dataview-key-background: rgba(var(--frost2_x), 0.3); + --dataview-value: var(--text-faint); + --dataview-value-background: rgba(var(--red_x), 0.3); + + --tab-text-color-focused-active: var(--frost2); + --tab-text-color-focused-active-current: var(--red); +} + +table +{ + border: 1px solid var(--background-secondary) !important; + border-collapse: collapse; +} + +thead +{ + border-bottom: 2px solid var(--background-modifier-border) !important; +} + +th +{ + font-weight: 600 !important; + border: 1px solid var(--background-secondary) !important; +} + +td +{ + border-left: 1px solid var(--background-secondary) !important; + border-right: 1px solid var(--background-secondary) !important; + border-bottom: 1px solid var(--background-secondary) !important; +} + +.markdown-rendered tbody tr:nth-child(even) +{ + background-color: var(--table-row-even-background) !important; +} + +.markdown-rendered tbody tr:nth-child(odd) +{ + background-color: var(--table-row-odd-background) !important; +} + +.markdown-rendered tbody tr:nth-child(even):hover, +.markdown-rendered tbody tr:nth-child(odd):hover +{ + background-color: var(--table-row-background-hover) !important; +} + +.markdown-rendered mark +{ + background-color: var(--text-highlight-bg); + color: var(--text-highlight-fg); +} + +.markdown-rendered mark a +{ + color: var(--red) !important; + font-weight: 600; +} + +.search-result-file-matched-text +{ + color: var(--text-highlight-fg) !important; +} + +.cm-hashtag-begin:hover, .cm-hashtag-end:hover +{ + color: var(--text-accent); + /* background-color: var(--tag-background-hover); */ + text-decoration: underline; +} + +input[type=checkbox] +{ + border: 1px solid var(--checkbox-color); +} + +input[type=checkbox]:checked +{ + background-color: var(--checkbox-color); + box-shadow: inset 0 0 0 2px var(--background-primary); +} + +input[type=checkbox]:checked:after +{ + display: none; +} + +code[class*="language-"], +pre[class*="language-"] +{ + line-height: var(--line-height-tight) !important; +} + +.cm-url +{ + color: var(--link-url) !important; +} + +.cm-url:hover +{ + color: var(--text-accent-hover) !important; +} + +/* Keep highlight/marks the same between viewer and editor. */ +.cm-highlight +{ + color: var(--text-highlight-fg) !important; +} + +/* Keep inline code the same between viewer and editor. */ +.cm-inline-code +{ + border-radius: var(--radius-s); + font-size: var(--code-size); + padding: 0.1em 0.25em; +} + +.cm-formatting-code + .cm-inline-code +{ + border-radius: 0; + padding: 0.1em 0; +} + +.cm-formatting-code +{ + border-radius: var(--radius-s) 0 0 var(--radius-s); + padding: 0.1em 0 0.1em 0.25em; +} + +.cm-inline-code + .cm-formatting-code +{ + border-radius: 0 var(--radius-s) var(--radius-s) 0; + padding: 0.1em 0.25em 0.1em 0; +} + +.cm-line .cm-strong +{ + color: var(--bold-color) !important; +} + +/* + * Keep list bullet padding the same between viewer and editor. + * This is annoying with the cursor in the editor as there is a gap. + */ +/* +.cm-formatting-list +{ + padding-right: 4px !important; +} +*/ + +/* + * Keep sub-list indenting the same between viewer and editor. + * This assumes --list-indent is default at 2em. + */ +/* +.cm-indent +{ + text-indent: 1em !important; +} +*/ + +.mermaid .note +{ + fill: var(--mermaid-note) !important; +} + +.mermaid .loopLine, +{ + stroke: var(--mermaid-loopline) !important; +} + +.mermaid .loopText>tspan, +.mermaid .entityLabel +{ + fill: var(--red) !important; +} + +.mermaid .exclude-range +{ + fill: var(--mermaid-exclude) !important; +} + +.mermaid .sequenceNumber +{ + fill: var(--mermaid-seqnum) !important; +} + +.calendar .week-num +{ + color: var(--calendar-week) !important; +} + +.calendar .today +{ + color: var(--calendar-today) !important; +} + +.calendar .week-num:hover, +.calendar .day:hover +{ + color: var(--calendar-hover) !important; + background-color: var(--calendar-background-hover) !important; +} + +.markdown-embed-title +{ + color: var(--yellow); + font-weight: 600 !important; +} + +.cm-active +{ + background-color: var(--cursor-line-background) !important; +} + +.nav-file-tag +{ + color: var(--nav-file-tag) !important; +} + +.is-flashing +{ + background-color: var(--flashing-background) !important; +} + +.dataview.inline-field-key +{ + border-top-left-radius: var(--radius-s); + border-bottom-left-radius: var(--radius-s); + padding-left: 4px; + font-family: var(--font-monospace); + font-size: var(--font-smaller); + color: var(--dataview-key) !important; + background-color: var(--dataview-key-background) !important; +} + +.dataview.inline-field-value +{ + border-top-right-radius: var(--radius-s); + border-bottom-right-radius: var(--radius-s); + padding-right: 4px; + font-family: var(--font-monospace); + font-size: var(--font-smaller); + color: var(--dataview-value) !important; + background-color: var(--dataview-value-background) !important; +} + +.suggestion-highlight +{ + color: var(--red); +} + diff --git a/Perlite/perlite/Demo/.obsidian/themes/Obsidian gruvbox/manifest.json b/Perlite/perlite/Demo/.obsidian/themes/Obsidian gruvbox/manifest.json new file mode 100644 index 0000000..85de82a --- /dev/null +++ b/Perlite/perlite/Demo/.obsidian/themes/Obsidian gruvbox/manifest.json @@ -0,0 +1,7 @@ +{ + "name": "Obsidian gruvbox", + "version": "0.2.0", + "minAppVersion": "0.16.0", + "author": "insanum", + "authorUrl": "https://insanum.com" +} diff --git a/Perlite/perlite/Demo/.obsidian/themes/Obsidian gruvbox/theme.css b/Perlite/perlite/Demo/.obsidian/themes/Obsidian gruvbox/theme.css new file mode 100644 index 0000000..7528e46 --- /dev/null +++ b/Perlite/perlite/Demo/.obsidian/themes/Obsidian gruvbox/theme.css @@ -0,0 +1,555 @@ + +:root +{ + --dark0-hard_x: 29,32,33; /* #1d2021 */ + --dark0-hard: rgb(var(--dark0-hard_x)); + --dark0_x: 40,40,40; /* #282828 */ + --dark0: rgb(var(--dark0_x)); + --dark0-soft_x: 50,48,47; /* #32302f */ + --dark0-soft: rgb(var(--dark0-soft_x)); + --dark1_x: 60,56,54; /* #3c3836 */ + --dark1: rgb(var(--dark1_x)); + --dark2_x: 80,73,69; /* #504945 */ + --dark2: rgb(var(--dark2_x)); + --dark3_x: 102,92,84; /* #665c54 */ + --dark3: rgb(var(--dark3_x)); + --dark4_x: 124,111,100; /* #7c6f64 */ + --dark4: rgb(var(--dark4_x)); + --gray_x: 146,131,116; /* #928374 */ + --gray: rgb(var(--gray_x)); + + --light0-hard_x: 249,245,215; /* #f9f5d7 */ + --light0-hard: rgb(var(--light0-hard_x)); + --light0_x: 251,241,199; /* #fbf1c7 */ + --light0: rgb(var(--light0_x)); + --light0-soft_x: 242,229,188; /* #f2e5bc */ + --light0-soft: rgb(var(--light0-soft_x)); + --light1_x: 235,219,178; /* #ebdbb2 */ + --light1: rgb(var(--light1_x)); + --light2_x: 213,196,161; /* #d5c4a1 */ + --light2: rgb(var(--light2_x)); + --light3_x: 189,174,147; /* #bdae93 */ + --light3: rgb(var(--light3_x)); + --light4_x: 168,153,132; /* #a89984 */ + --light4: rgb(var(--light4_x)); + + --bright-red_x: 251,73,52; /* #fb4934 */ + --bright-red: rgb(var(--bright-red_x)); + --bright-green_x: 184,187,38; /* #b8bb26 */ + --bright-green: rgb(var(--bright-green_x)); + --bright-yellow_x: 250,189,47; /* #fabd2f */ + --bright-yellow: rgb(var(--bright-yellow_x)); + --bright-blue_x: 131,165,152; /* #83a598 */ + --bright-blue: rgb(var(--bright-blue_x)); + --bright-purple_x: 211,134,155; /* #d3869b */ + --bright-purple: rgb(var(--bright-purple_x)); + --bright-aqua_x: 142,192,124; /* #8ec07c */ + --bright-aqua: rgb(var(--bright-aqua_x)); + --bright-orange_x: 254,128,25; /* #fe8019 */ + --bright-orange: rgb(var(--bright-orange_x)); + + --neutral-red_x: 204,36,29; /* #cc241d */ + --neutral-red: rgb(var(--neutral-red_x)); + --neutral-green_x: 152,151,26; /* #98971a */ + --neutral-green: rgb(var(--neutral-green_x)); + --neutral-yellow_x: 215,153,33; /* #d79921 */ + --neutral-yellow: rgb(var(--neutral-yellow_x)); + --neutral-blue_x: 69,133,136; /* #458588 */ + --neutral-blue: rgb(var(--neutral-blue_x)); + --neutral-purple_x: 177,98,134; /* #b16286 */ + --neutral-purple: rgb(var(--neutral-purple_x)); + --neutral-aqua_x: 104,157,106; /* #689d6a */ + --neutral-aqua: rgb(var(--neutral-aqua_x)); + --neutral-orange_x: 214,93,14; /* #d65d0e */ + --neutral-orange: rgb(var(--neutral-orange_x)); + + --faded-red_x: 157,0,6; /* #9d0006 */ + --faded-red: rgb(var(--faded-red_x)); + --faded-green_x: 121,116,14; /* #79740e */ + --faded-green: rgb(var(--faded-green_x)); + --faded-yellow_x: 181,118,20; /* #b57614 */ + --faded-yellow: rgb(var(--faded-yellow_x)); + --faded-blue_x: 7,102,120; /* #076678 */ + --faded-blue: rgb(var(--faded-blue_x)); + --faded-purple_x: 143,63,113; /* #8f3f71 */ + --faded-purple: rgb(var(--faded-purple_x)); + --faded-aqua_x: 66,123,88; /* #427b58 */ + --faded-aqua: rgb(var(--faded-aqua_x)); + --faded-orange_x: 175,58,3; /* #af3a03 */ + --faded-orange: rgb(var(--faded-orange_x)); +} + +body +{ + --accent-h: 12; /* --faded-red #9d0006 */ + --accent-s: 107%; + --accent-l: 32%; + + --link-decoration: none; + --link-decoration-hover: none; + --link-external-decoration: none; + --link-external-decoration-hover: none; + + --tag-decoration: none; + --tag-decoration-hover: underline; + --tag-padding-x: .5em; + --tag-padding-y: .2em; + --tag-radius: .5em; + + --tab-font-weight: 600; + --bold-weight: 600; + + --checkbox-radius: 0; + + /* --list-indent: 2em; */ + + --embed-border-left: 6px double var(--interactive-accent); +} + +.theme-dark +{ + --color-red-rgb: var(--neutral-red_x); + --color-red: var(--neutral-red); + --color-purple-rgb: var(--neutral-purple_x); + --color-purple: var(--neutral-purple); + --color-green-rgb: var(--neutral-green_x); + --color-green: var(--neutral-green); + --color-cyan-rgb: var(--neutral-blue_x); + --color-cyan: var(--neutral-blue); + --color-blue-rgb: var(--faded-blue_x); + --color-blue: var(--faded-blue); + --color-yellow-rgb: var(--neutral-yellow_x); + --color-yellow: var(--neutral-yellow); + --color-orange-rgb: var(--neutral-orange_x); + --color-orange: var(--neutral-orange); + --color-pink-rgb: var(--bright-purple_x); + --color-pink: var(--bright-purple); + + --background-primary: var(--dark0); + --background-primary-alt: var(--dark0); + --background-secondary: var(--dark0-hard); + --background-secondary-alt: var(--dark1); + --background-modifier-border: var(--dark1); + + --cursor-line-background: rgba(var(--dark1_x), 0.5); + + --text-normal: var(--light0); + --text-faint: var(--light1); + --text-muted: var(--light2); + + --link-url: var(--neutral-green); + + --h1-color: var(--neutral-red); + --h2-color: var(--neutral-yellow); + --h3-color: var(--neutral-green); + --h4-color: var(--neutral-aqua); + --h5-color: var(--neutral-blue); + --h6-color: var(--neutral-purple); + + --text-highlight-bg: var(--neutral-yellow); + --text-highlight-fg: var(--dark0-hard); + + --text-accent: var(--neutral-orange); + --text-accent-hover: var(--bright-aqua); + + --tag-color: var(--bright-aqua); + --tag-background: var(--dark2); + --tag-background-hover: var(--dark1); + + --titlebar-text-color-focused: var(--bright-red); + + --inline-title-color: var(--bright-yellow); + + --bold-color: var(--neutral-yellow); + --italic-color: var(--neutral-yellow); + + --checkbox-color: var(--light4); + --checkbox-color-hover: var(--light4); + --checkbox-border-color: var(--light4); + --checkbox-border-color-hover: var(--light4); + --checklist-done-color: rgba(var(--light2_x), 0.5); + + --table-header-background: rgba(var(--dark0_x), 0.2); + --table-header-background-hover: var(--dark2); + --table-row-even-background: rgba(var(--dark2_x), 0.2); + --table-row-odd-background: rgba(var(--dark2_x), 0.4); + --table-row-background-hover: var(--dark2); + + --text-selection: rgba(var(--neutral-red_x), 0.6); + --flashing-background: rgba(var(--neutral-red_x), 0.3); + + --code-normal: var(--bright-blue); + --code-background: var(--dark1); + + --mermaid-note: var(--neutral-blue); + --mermaid-actor: var(--dark2); + --mermaid-loopline: var(--neutral-blue); + --mermaid-exclude: var(--dark4); + --mermaid-seqnum: var(--dark0); + + --icon-color-hover: var(--bright-red); + --icon-color-focused: var(--bright-blue); + + --nav-item-color-hover: var(--bright-red); + --nav-item-color-active: var(--bright-aqua); + --nav-file-tag: rgba(var(--neutral-yellow_x), 0.9); + + --graph-line: var(--dark2); + --graph-node: var(--light3); + --graph-node-tag: var(--neutral-red); + --graph-node-attachment: var(--neutral-green); + + --calendar-hover: var(--bright-red); + --calendar-background-hover: var(--dark1); + --calendar-week: var(--neutral-orange); + --calendar-today: var(--neutral-orange); + + --dataview-key: var(--text-faint); + --dataview-key-background: rgba(var(--faded-red_x), 0.5); + --dataview-value: var(--text-faint); + --dataview-value-background: rgba(var(--neutral-green_x), 0.3); + + --tab-text-color-focused-active: var(--neutral-yellow); + --tab-text-color-focused-active-current: var(--bright-red); +} + +.theme-light +{ + --color-red-rgb: var(--neutral-red_x); + --color-red: var(--neutral-red); + --color-purple-rgb: var(--neutral-purple_x); + --color-purple: var(--neutral-purple); + --color-green-rgb: var(--neutral-green_x); + --color-green: var(--neutral-green); + --color-cyan-rgb: var(--neutral-blue_x); + --color-cyan: var(--neutral-blue); + --color-blue-rgb: var(--faded-blue_x); + --color-blue: var(--faded-blue); + --color-yellow-rgb: var(--neutral-yellow_x); + --color-yellow: var(--neutral-yellow); + --color-orange-rgb: var(--neutral-orange_x); + --color-orange: var(--neutral-orange); + --color-pink-rgb: var(--bright-purple_x); + --color-pink: var(--bright-purple); + + --background-primary: var(--light0-hard); + --background-primary-alt: var(--light0-hard); + --background-secondary: var(--light1); + --background-secondary-alt: var(--light1); + --background-modifier-border: var(--light2); + + --cursor-line-background: rgba(var(--light1_x), 0.5); + + --text-normal: var(--dark0); + --text-faint: var(--dark3); + --text-muted: var(--dark2); + + --link-url: var(--neutral-green); + + --h1-color: var(--neutral-red); + --h2-color: var(--neutral-yellow); + --h3-color: var(--neutral-green); + --h4-color: var(--neutral-aqua); + --h5-color: var(--neutral-blue); + --h6-color: var(--neutral-purple); + + --text-highlight-bg: var(--bright-yellow); + --text-highlight-fg: var(--dark0); + + --text-accent: var(--neutral-orange); + --text-accent-hover: var(--bright-aqua); + + --tag-color: var(--neutral-aqua); + --tag-background: var(--light1); + --tag-background-hover: rgba(var(--light1_x), 0.6); + + --titlebar-text-color-focused: var(--bright-red); + + --inline-title-color: var(--bright-yellow); + + --bold-color: var(--neutral-yellow); + --italic-color: var(--neutral-yellow); + + --checkbox-color: var(--light4); + --checkbox-color-hover: var(--light4); + --checkbox-border-color: var(--light4); + --checkbox-border-color-hover: var(--light4); + --checklist-done-color: rgba(var(--dark2_x), 0.4); + + --table-header-background: rgba(var(--light3_x), 0.4); + --table-header-background-hover: var(--light2); + --table-row-even-background: rgba(var(--light1_x), 0.2); + --table-row-odd-background: rgba(var(--light1_x), 0.7); + --table-row-background-hover: var(--light2); + + --text-selection: rgba(var(--neutral-red_x), 0.6); + --flashing-background: rgba(var(--neutral-red_x), 0.3); + + --code-normal: var(--bright-blue); + --code-background: var(--light1); + + --mermaid-note: var(--bright-blue); + --mermaid-actor: var(--light3); + --mermaid-loopline: var(--neutral-blue); + --mermaid-exclude: var(--light2); + --mermaid-seqnum: var(--light0); + + --icon-color-hover: var(--bright-red); + --icon-color-focused: var(--bright-blue); + + --nav-item-color-hover: var(--bright-red); + --nav-item-color-active: var(--neutral-blue); + --nav-file-tag: rgba(var(--neutral-blue_x), 0.9); + + --graph-line: var(--light1); + --graph-node: var(--gray); + --graph-node-tag: var(--neutral-red); + --graph-node-attachment: var(--bright-green); + + --calendar-hover: var(--bright-red); + --calendar-background-hover: var(--light1); + --calendar-week: var(--bright-red); + --calendar-today: var(--bright-red); + + --dataview-key: var(--text-faint); + --dataview-key-background: rgba(var(--faded-red_x), 0.3); + --dataview-value: var(--text-faint); + --dataview-value-background: rgba(var(--neutral-green_x), 0.2); + + --tab-text-color-focused-active: var(--neutral-yellow); + --tab-text-color-focused-active-current: var(--bright-red); +} + +table +{ + border: 1px solid var(--background-secondary) !important; + border-collapse: collapse; +} + +thead +{ + border-bottom: 2px solid var(--background-modifier-border) !important; +} + +th +{ + font-weight: 600 !important; + border: 1px solid var(--background-secondary) !important; +} + +td +{ + border-left: 1px solid var(--background-secondary) !important; + border-right: 1px solid var(--background-secondary) !important; + border-bottom: 1px solid var(--background-secondary) !important; +} + +.markdown-rendered tbody tr:nth-child(even) +{ + background-color: var(--table-row-even-background) !important; +} + +.markdown-rendered tbody tr:nth-child(odd) +{ + background-color: var(--table-row-odd-background) !important; +} + +.markdown-rendered tbody tr:nth-child(even):hover, +.markdown-rendered tbody tr:nth-child(odd):hover +{ + background-color: var(--table-row-background-hover) !important; +} + +.markdown-rendered mark +{ + background-color: var(--text-highlight-bg); + color: var(--text-highlight-fg); +} + +.markdown-rendered mark a +{ + color: var(--red) !important; + font-weight: 600; +} + +.search-result-file-matched-text +{ + color: var(--text-highlight-fg) !important; +} + +.cm-hashtag-begin:hover, .cm-hashtag-end:hover +{ + color: var(--text-accent); + /* background-color: var(--tag-background-hover); */ + text-decoration: underline; +} + +input[type=checkbox] +{ + border: 1px solid var(--checkbox-color); +} + +input[type=checkbox]:checked +{ + background-color: var(--checkbox-color); + box-shadow: inset 0 0 0 2px var(--background-primary); +} + +input[type=checkbox]:checked:after +{ + display: none; +} + +code[class*="language-"], +pre[class*="language-"] +{ + line-height: var(--line-height-tight) !important; +} + +.cm-url +{ + color: var(--link-url) !important; +} + +.cm-url:hover +{ + color: var(--text-accent-color) !important; +} + +/* Keep highlight/marks the same between viewer and editor. */ +.cm-highlight +{ + color: var(--text-highlight-fg) !important; +} + +/* Keep inline code the same between viewer and editor. */ +.cm-inline-code +{ + border-radius: var(--radius-s); + font-size: var(--code-size); + padding: 0.1em 0.25em; +} + +.cm-line .cm-strong +{ + color: var(--bold-color) !important; +} + +/* + * Keep list bullet padding the same between viewer and editor. + * This is annoying with the cursor in the editor as there is a gap. + */ +/* +.cm-formatting-list +{ + padding-right: 4px !important; +} +*/ + +/* + * Keep sub-list indenting the same between viewer and editor. + * This assumes --list-indent is default at 2em. + */ +/* +.cm-indent +{ + text-indent: 1em !important; +} +*/ + +.mermaid .note +{ + fill: var(--mermaid-note) !important; +} + +.mermaid .actor +{ + fill: var(--mermaid-actor) !important; +} + +.mermaid .loopLine +{ + stroke: var(--mermaid-loopline) !important; +} + +.mermaid .loopText>tspan, +.mermaid .entityLabel +{ + fill: var(--neutral-red) !important; +} + +.mermaid .exclude-range +{ + fill: var(--mermaid-exclude) !important; +} + +.mermaid .sequenceNumber +{ + fill: var(--mermaid-seqnum) !important; +} + +.calendar .week-num +{ + color: var(--calendar-week) !important; +} + +.calendar .today +{ + color: var(--calendar-today) !important; +} + +.calendar .week-num:hover, +.calendar .day:hover +{ + color: var(--calendar-hover) !important; + background-color: var(--calendar-background-hover) !important; +} + +.markdown-embed-title +{ + color: var(--yellow); + font-weight: 600 !important; +} + +.cm-active +{ + background-color: var(--cursor-line-background) !important; +} + +.nav-file-tag +{ + color: var(--nav-file-tag) !important; +} + +.is-flashing +{ + background-color: var(--flashing-background) !important; +} + +.dataview.inline-field-key +{ + border-top-left-radius: var(--radius-s); + border-bottom-left-radius: var(--radius-s); + padding-left: 4px; + font-family: var(--font-monospace); + font-size: var(--font-smaller); + color: var(--dataview-key) !important; + background-color: var(--dataview-key-background) !important; +} + +.dataview.inline-field-value +{ + border-top-right-radius: var(--radius-s); + border-bottom-right-radius: var(--radius-s); + padding-right: 4px; + font-family: var(--font-monospace); + font-size: var(--font-smaller); + color: var(--dataview-value) !important; + background-color: var(--dataview-value-background) !important; +} + +.suggestion-highlight +{ + color: var(--bright-red); +} + diff --git a/Perlite/perlite/Demo/.obsidian/themes/Obsidianite/manifest.json b/Perlite/perlite/Demo/.obsidian/themes/Obsidianite/manifest.json new file mode 100644 index 0000000..e090605 --- /dev/null +++ b/Perlite/perlite/Demo/.obsidian/themes/Obsidianite/manifest.json @@ -0,0 +1,7 @@ +{ + "name": "Obsidianite", + "version": "2.0.2", + "minAppVersion": "1.1.0", + "author": "@bennyxguo", + "authorUrl": "https://github.com/bennyxguo" +} diff --git a/Perlite/perlite/Demo/.obsidian/themes/Obsidianite/theme.css b/Perlite/perlite/Demo/.obsidian/themes/Obsidianite/theme.css new file mode 100644 index 0000000..867a5a9 --- /dev/null +++ b/Perlite/perlite/Demo/.obsidian/themes/Obsidianite/theme.css @@ -0,0 +1,1481 @@ +/** --------------------------------------------------------------- +** ██████╗ ██████╗ ███████╗██╗██████╗ ██╗ █████╗ ███╗ ██╗██╗████████╗███████╗ +** ██╔═══██╗██╔══██╗██╔════╝██║██╔══██╗██║██╔══██╗████╗ ██║██║╚══██╔══╝██╔════╝ +** ██║ ██║██████╔╝███████╗██║██║ ██║██║███████║██╔██╗ ██║██║ ██║ █████╗ +** ██║ ██║██╔══██╗╚════██║██║██║ ██║██║██╔══██║██║╚██╗██║██║ ██║ ██╔══╝ +** ╚██████╔╝██████╔╝███████║██║██████╔╝██║██║ ██║██║ ╚████║██║ ██║ ███████╗ +** ╚═════╝ ╚═════╝ ╚══════╝╚═╝╚═════╝ ╚═╝╚═╝ ╚═╝╚═╝ ╚═══╝╚═╝ ╚═╝ ╚══════╝ +** —— Version 2.1.0 +** —— Made with 💎 by Benny Guo +** Changes Log @see: https://github.com/bennyxguo/Obsidian-Obsidianite/blob/main/CHANGELOG.md +** --------------------------------------------------------------- */ + +/****************************************** + Currently only comes in dark theme, + Light theme is still working in progress, + but it wil come soon or later. +******************************************/ + +/* .theme-light { + --background-primary: #fbfbfb; + --background-primary-alt: #fbfbfb; + --background-secondary: #fbfbfb; + --background-secondary-alt: #2e3236; + --text-normal: #333; + --text-faint: #b2b2b2; + --text-title-h1: #333; + --text-title-h2: #333; + --text-title-h3: #333; + --text-title-h4: #333; + --text-title-h5: #333; + --text-link: #b4b4b4; + --text-a: #db4d52; + --text-a-hover: #db4d52; + --text-mark: #d3ffa4; + --pre-code: #ffffff; + --interactive-accent: #92a1a1; + --interactive-before: #5e6565; + --background-modifier-border: #92a1a17a; + --blockquote-border: #d6555f; + --tag-background: rgba(14, 210, 247, 0.15); + --interactive-accent-rgb: 61, 215, 251; + --font-family-editor: Avenir, 'Avenir Next'; + --font-family-preview: Avenir, 'Avenir Next'; +} */ + +.theme-dark { + --background-primary: #100e17; + --background-primary-alt: #0d0b12; + --background-secondary: #191621; + --background-secondary-alt: #0d0b12; + --text-normal: #bebebe; + --text-accent: #0fb6d6; + --text-sub-accent: #f4569d; + --text-dim: #45aaff; + --text-faint: #7aa2f7; + --text-title-h1: var(--text-accent); + --text-title-h2: #cbdbe5; + --text-title-h3: #cbdbe5; + --text-title-h4: #cbdbe5; + --text-title-h5: #cbdbe5; + --text-link: #b4b4b4; + --text-a: #6bcafb; + --text-a-hover: #6bcafb; + --text-mark: #263d92; + --code-background: var(--background-secondary); + --interactive-accent: rgba(14, 210, 247, 0.5); + --interactive-accent-hover: rgba(14, 210, 247, 0.8); + --interactive-before: #5e6565; + --blockquote-border: #4aa8fb; + --tag-background: rgba(14, 210, 247, 0.15); + --interactive-accent-rgb: #3dd7fb; + --font-family-editor: 'Rubik'; + --font-family-preview: 'Rubik'; + --bg-sub-accent-55: rgba(244, 86, 157, 0.55); + --bg-accent-55: rgba(14, 210, 247, 0.55); + --bg-accent-25: rgba(14, 210, 247, 0.25); + --text-highlight-bg: rgba(244, 86, 157, 0.25); + --background-modifier-border: rgba(14, 210, 247, 0.05); + --table-border-color: rgb(14, 210, 247, 0.15); + --test-color: rgb(122, 162, 247); + --editor-border-color: #101014; +} + +/****************************************** +** ██████╗██╗ ██╗███████╗████████╗ ██████╗ ███╗ ███╗██╗███████╗███████╗ +** ██╔════╝██║ ██║██╔════╝╚══██╔══╝██╔═══██╗████╗ ████║██║╚══███╔╝██╔════╝ +** ██║ ██║ ██║███████╗ ██║ ██║ ██║██╔████╔██║██║ ███╔╝ █████╗ +** ██║ ██║ ██║╚════██║ ██║ ██║ ██║██║╚██╔╝██║██║ ███╔╝ ██╔══╝ +** ╚██████╗╚██████╔╝███████║ ██║ ╚██████╔╝██║ ╚═╝ ██║██║███████╗███████╗ +** ╚═════╝ ╚═════╝ ╚══════╝ ╚═╝ ╚═════╝ ╚═╝ ╚═╝╚═╝╚══════╝╚══════╝ +** —— You can customized the theme using the variables below +******************************************/ + +:root { + /***************************************/ + /* FONTS RELATED */ + /***************************************/ + + /** Font Customization **/ + --default-font: 'Rubik', 'Glow Sans SC', -apple-system, BlinkMacSystemFont, 'Segoe UI', Roboto, + Helvetica, Arial, sans-serif, 'Apple Color Emoji', 'Segoe UI Emoji', sans-serif; + + --default-font-size: 18px; + + /** Main text font weight **/ + --body-font-weight: 450; + + /** Font family for hash-tags **/ + --tag-font-family: 'OperatorMonoSSmLig-Book', 'Glow Sans SC', '华文细黑', 'STXihei', 'PingFang TC', + '微软雅黑体', 'Microsoft YaHei New', '微软雅黑', 'Microsoft Yahei', '宋体', 'SimSun', + 'Helvetica Neue', 'Helvetica', Arial, sans-serif !important; + + /** Font specially for codes **/ + --code-mono-font: 'OperatorMonoSSmLig-Book'; +} + +/**-------------------** +| CUSTOMIZED TAG COLOURS +**--------------------**/ + +/* For preview mode */ +a.tag[href*='#todo'], +a.tag[href*='#待完成'] { + background-color: #be2e5e; + color: #fff; +} +/* For Editor Mode */ +.cm-s-obsidian .CodeMirror-line span.cm-tag-todo:not(.cm-formatting-hashtag) { + color: #ee6a96; +} + +a.tag[href*='#working-draft'], +a.tag[href*='#进行中'] { + background-color: #4d3ca6; + color: #fff; +} + +.cm-s-obsidian .CodeMirror-line span.cm-tag-working-draft:not(.cm-formatting-hashtag) { + color: #a897ff; +} + +a.tag[href*='#notes'], +a.tag[href*='#笔记'] { + background-color: #17b978; + color: #fff; +} + +.cm-s-obsidian .CodeMirror-line span.cm-tag-notes:not(.cm-formatting-hashtag) { + color: #45e0a2; +} + +a.tag[href*='#knowledge'], +a.tag[href*='#知识'] { + background-color: #005792; + color: #fff; +} + +.cm-s-obsidian .CodeMirror-line span.cm-tag-knowledge:not(.cm-formatting-hashtag) { + color: #6cbdf3; +} + +a.tag[href*='#writing'], +a.tag[href*='#文章'] { + background-color: #f95959; + color: #fff; +} + +.cm-s-obsidian .CodeMirror-line span.cm-tag-writing:not(.cm-formatting-hashtag) { + color: #ff7a7a; +} + +a.tag[href*='#ideas'], +a.tag[href*='#想法'] { + background-color: #ffc93c; + color: #000; +} + +.cm-s-obsidian .CodeMirror-line span.cm-tag-ideas:not(.cm-formatting-hashtag) { + color: #ffdc82; +} + +/************************************** +| GENERAL STYLES +| ------------------------------------- +| Obsidian main controls related. +/**************************************/ + +::-webkit-scrollbar { + opacity: 1; + width: 0.6rem; +} + +::-webkit-scrollbar-thumb { + background-color: var(--background-modifier-border); + border-radius: 999px; +} + +::-webkit-scrollbar-track, +::-webkit-scrollbar-track-piece { + background: var(--background-secondary); +} + +.markdown-preview-view .internal-link.is-unresolved { + opacity: 0.7; +} + +.titlebar { + background-color: var(--background-primary-alt); +} + +.status-bar { + background-color: var(--background-primary-alt); + border-color: #101014; + color: var(--text-faint); + position: absolute; + margin: auto; + right: 0; + bottom: 0; + display: flex; + align-items: center; + border-top-left-radius: 8px; + padding: 8px 6px 6px 10px; + max-height: unset; + + opacity: 0.4; + transition: 0.5s; +} + +.status-bar:hover { + opacity: 1; + transition: 0.2s; +} + +.titlebar-text { + color: var(--text-accent); +} + +.theme-dark .notice { + background-color: var(--background-primary-alt); + color: var(--text-accent); +} + +/** NAVIGATION / SIDE-DOCK **/ +.nav-file-title, +.nav-folder-title { + border: 1px solid transparent; +} + +.nav-folder-collapse-indicator { + color: var(--text-accent); +} +.nav-file.is-active > .nav-file-title, +.nav-file.is-active > .nav-folder-title, +.nav-file.is-active > .nav-folder-collapse-indicator, +.nav-folder.is-active > .nav-file-title, +.nav-folder.is-active > .nav-folder-title, +.nav-folder.is-active > .nav-folder-collapse-indicator { + color: var(--text-accent); +} + +/** Side-dock icons **/ +.side-dock-ribbon-tab, +.side-dock-ribbon-action, +.workspace-ribbon-collapse-btn, +.workspace-tab-header { + transition: all 350ms ease-in-out; + opacity: 0.5; + cursor: pointer; +} +.side-dock-ribbon-tab:hover, +.side-dock-ribbon-action:hover, +.workspace-ribbon-collapse-btn:hover, +.workspace-tab-header:hover { + opacity: 1; + color: var(--text-accent); +} + +/** Left side menu -- collapsed **/ +.workspace-ribbon.is-collapsed { + background-color: var(--background-primary-alt); +} +/** Left side menu border **/ +.workspace-ribbon.mod-left.is-collapsed, +.workspace-ribbon.mod-right.is-collapsed { + border-color: var(--editor-border-color); +} + +/** Navigation tabs **/ +.is-focused .workspace-tab-header.is-active { + opacity: 1; +} + +.is-focused .mod-active .workspace-tab-header.is-active .workspace-tab-header-inner-icon, +.is-focused .mod-active .workspace-tab-header.is-active .workspace-tab-header-inner-title { + background: var(--background-modifier-border); + color: var(--text-accent); +} + +.nav-file-title.is-active, +.nav-folder-title.is-active { + background: var(--background-secondary); + border: 1px solid var(--bg-accent-25); + color: var(--text-accent); +} + +body:not(.is-grabbing) .nav-file-title:hover, +body:not(.is-grabbing) .nav-folder-title:hover { + background: var(--background-modifier-border); + border: 1px solid var(--interactive-accent-hover); +} + +/** Folder Lists **/ +body:not(.is-grabbing) .nav-file-title:hover, +body:not(.is-grabbing) .nav-folder-title:hover { + color: var(--text-accent); +} +/** Folder list active arrow **/ +body:not(.is-grabbing) .nav-file-title:hover .nav-folder-collapse-indicator, +body:not(.is-grabbing) .nav-folder-title:hover .nav-folder-collapse-indicator { + color: var(--text-accent); +} +/** Folder List main title **/ +.nav-folder.mod-root > .nav-file-title, +.nav-folder.mod-root > .nav-folder-title { + color: var(--text-accent); +} + +/** View Header title **/ +.workspace-leaf.mod-active .view-header-title { + color: var(--text-accent); +} + +/** Little tag styles (at links) **/ +.pane-list-item:hover .pane-list-item-ending-flair { + background-color: var(--background-secondary); + color: var(--text-accent); +} + +/** SETTINGS STYLES **/ +.checkbox-container.is-enabled { + background-color: rgba(14, 210, 247, 0.7); +} + +.workspace-drop-overlay { + background-color: var(--background-primary-alt); +} + +/* except list markers */ +span.cm-formatting-list, +/*code block backticks */ span.cm-formatting-code-block.cm-hmd-codeblock, +/* optionally header hashes */ span.cm-formatting-header { + display: inline !important; +} + +/***************************************/ +/* EDITOR GENERAL STYLES */ +/***************************************/ + +.markdown-source-view.mod-cm6 .task-list-label { + position: relative; + top: -2px; + padding-top: 0; +} + +/* OBSIDIANITE CHECKBOXES */ + +.contains-task-list .task-list-item .contains-task-list { + padding-inline-start: 5px; +} + +.contains-task-list .task-list-item ul.contains-task-list::before { + left: -46px !important; + border-width: 2px; +} + +.contains-task-list .task-list-item { + position: relative; + vertical-align: middle; + box-sizing: border-box; + padding-left: 30px; +} + +.markdown-preview-view ul > li.task-list-item { + text-indent: -3em; +} + +.contains-task-list .task-list-item input[type='checkbox'] { + position: relative; + top: 2px; + left: -8px; + width: 20px; + height: 20px; + margin: 0; + opacity: 0; + z-index: 10; +} + +.markdown-preview-view .list-collapse-indicator { + margin-left: -80px !important; + box-sizing: border-box; +} + +.contains-task-list .task-list-item::before { + content: ''; + position: absolute; + top: 2px; + left: -25px; + width: 20px; + height: 20px; + display: inline-flex; + justify-content: center; + border: 2px solid #9e9e9e; + margin-right: 15px; + border-radius: 3px; + transition: all 0.3s; + box-sizing: border-box; + z-index: 1; +} + +.contains-task-list .is-checked.task-list-item::before { + border: 10px solid var(--text-accent); + animation: bounce 300ms; +} + +.contains-task-list .is-checked.task-list-item::after { + content: ''; + position: absolute; + top: 8px; + left: -21px; + border-right: 3px solid transparent; + border-bottom: 3px solid transparent; + transform: rotate(45deg); + transform-origin: 0% 100%; + animation: checked-box 125ms 250ms forwards; + z-index: 5; +} + +.markdown-preview-view ul > li.task-list-item.is-checked { + text-decoration: line-through !important; + color: var(--interactive-accent) !important; +} + +.markdown-preview-view ul > li.task-list-item.is-checked ul > li:not(.is-checked) { + text-decoration: none !important; + color: var(--text-normal) !important; +} + +@keyframes checked-box { + 0% { + width: 0; + height: 0; + border-color: #212121; + transform: translate(0, 0) rotate(45deg); + } + 33% { + width: 4px; + height: 0; + border-color: #212121; + transform: translate(0, 0) rotate(45deg); + } + 100% { + width: 4px; + height: 8px; + border-color: #212121; + transform: translate(0, -8px) rotate(45deg); + } +} + +@keyframes bounce { + 0% { + border-width: 2px; + /* transform: scale(1); */ + } + 33% { + border-width: 4px; + /* transform: scale(0.7); */ + } + 100% { + border-width: 10px; + /* transform: scale(1); */ + } +} + +/************************************** +| MAIN EDITOR / PREVIEW MODE +| ------------------------------------- +| Write in the same section to keep them +| relatively sync with css. +/**************************************/ + +/**-------------------** +| HEADING STYLES +**--------------------**/ +h1, +h2, +h3, +h4, +h5, +h6 { + font-family: var(--default-font); + font-weight: 600; +} + +.HyperMD-header.HyperMD-header-2, +.HyperMD-header.HyperMD-header-3, +.HyperMD-header.HyperMD-header-4, +.HyperMD-header.HyperMD-header-5, +.HyperMD-header.HyperMD-header-6 { + border-bottom: 1px solid; + border-width: 1px; + border-image-slice: 1; + border-image-source: linear-gradient(to right, var(--text-sub-accent), #100e17, #100e17, #100e17); +} + +.HyperMD-header { + padding: 20px; +} + +.markdown-preview-section h1, +.cm-header-1 { + font-size: 34px; + color: var(--text-title-h1); +} + +.markdown-preview-section h2, +.cm-header-2 { + font-size: 26px; + color: var(--text-title-h2); +} + +.markdown-preview-section h3, +.cm-header-3 { + font-size: 22px; + color: var(--text-title-h3); +} + +.markdown-preview-section h4, +.cm-header-4 { + font-size: 18px; + color: var(--text-title-h4); +} + +.markdown-preview-section h5, +.cm-header-5 { + font-size: 18px; + color: var(--text-title-h5); +} + +.markdown-preview-section h6, +.cm-header-6 { + font-size: 18px; + color: var(--text-title-h5); +} + +/** headings */ +.markdown-preview-view h2, +.markdown-preview-view h3, +.markdown-preview-view h4, +.markdown-preview-view h5, +.markdown-preview-view h6 { + /* padding-top: 1.25rem; */ + margin: 45px 0 20px 0; + position: relative; + padding-bottom: 10px; + border-bottom: 1px solid; + border-width: 35%; + border-image-slice: 1; + border-image-source: linear-gradient(to right, var(--text-sub-accent), #100e17, #100e17, #100e17); +} + +.view-header-icon { + color: var(--text-accent); +} + +/** Adding different # colors **/ + +.cm-formatting.cm-formatting-header.cm-header { + color: var(--text-accent); + opacity: 0.45; +} + +/**-------------------** +| HR STYLES +**--------------------**/ + +/** hr styles -- PREVIEW MODE */ +.cm-line hr, +.markdown-preview-view hr { + margin-block-start: 4em; + margin-block-end: 4em; + border: none; + height: 0; + border-bottom: 1px solid; + border-image-slice: 1; + border-width: 1px; + border-image-source: linear-gradient(to right, transparent, var(--text-accent), transparent); +} + +.cm-line hr::after, +.markdown-preview-view hr::after { + content: '§'; + display: inline-block; + position: absolute; + left: 50%; + transform: translate(-50%, -50%) rotate(60deg); + transform-origin: 50% 50%; + padding: 0.5rem; + color: var(--text-sub-accent); + background-color: var(--background-primary); +} + +/**-------------------** +| STRONG/BOLD STYLES +**--------------------**/ + +.cm-strong, +strong { + -webkit-background-clip: text; + -webkit-text-fill-color: transparent; + padding: 0; + color: #7aa2f7; + background-color: #7aa2f7; + background-image: linear-gradient(62deg, #87c2fd 0%, #dcb9fc 100%) !important; +} + +strong .math.math-inline .MathJax { + position: inherit !important; +} + +.cm-strong .cm-selection, +strong::selection { + -webkit-text-fill-color: var(--text-faint); +} + +/**-------------------** +| STYLING +**--------------------**/ + +.cm-strong kbd, +strong kbd { + -webkit-text-fill-color: initial; +} + +/**-------------------** +| ITALIC STYLES +**--------------------**/ + +.cm-em, +em { + color: #bb9af7 !important; + font-family: OperatorMonoSSmLig-Book, Rubik, var(--default-font) !important; +} + +.cm-em.cm-formatting-em { + display: inline-flex; + width: 0.45rem; + font-size: 0.6rem; + vertical-align: text-top; +} + +/**-------------------** +| LISTING STYLES (ul, li, ol) +**--------------------**/ + +.cm-s-obsidian span.cm-formatting-list { + color: var(--text-accent); +} + +.markdown-source-view.mod-cm6 .cm-indent::before { + border-width: 2px; + border-color: var(--text-accent); + margin-left: -1px; + opacity: 0.35; + transition: opacity 500ms linear ease-in-out; +} + +.markdown-source-view.mod-cm6 .cm-active-indent::before { + opacity: 0.8; +} + +/**-------------------** +| LINKS STYLING +**--------------------**/ + +/** editor mode **/ +.cm-s-obsidian span.cm-link:not(.cm-formatting-link) .cm-underline, +.cm-s-obsidian span.cm-hmd-internal-link .cm-underline { + color: var(--text-normal); + -webkit-text-fill-color: var(--text-normal); + background-position: 0 100%; + background-repeat: repeat-x; + background-size: 5px 5px; + text-decoration: none; +} + +cm-s-obsidian span.cm-link:not(.cm-formatting-link) .cm-underline { + background-image: linear-gradient( + to bottom, + var(--bg-sub-accent-55) 0%, + var(--bg-sub-accent-55) 100% + ); +} + +.cm-s-obsidian span.cm-formatting-link { + color: var(--text-faint) !important; + opacity: 0.25; +} + +/** preview mode **/ +.external-link { + padding: 0; +} + +.internal-link, +.external-link { + color: var(--text-normal); + background-position: 0 100%; + background-repeat: repeat-x; + background-size: 5px 5px; + text-decoration: none; + transition: background 350ms ease-in-out; +} + +.cm-s-obsidian span.cm-link:not(.cm-formatting-link) .cm-underline, +.external-link { + background-image: linear-gradient( + to bottom, + var(--bg-sub-accent-55) 0%, + var(--bg-sub-accent-55) 100% + ); + transition: background 350ms ease-in-out; +} + +.cm-s-obsidian span.cm-hmd-internal-link .cm-underline, +.internal-link { + background-image: linear-gradient(to bottom, var(--bg-accent-55) 0%, var(--bg-accent-55) 100%); + transition: background 350ms ease-in-out; +} + +.internal-link:hover, +.cm-s-obsidian span.cm-hmd-internal-link .cm-underline:hover { + -webkit-text-fill-color: #fff; + color: #fff; + background-size: 4px 50px; + text-decoration-line: none !important; +} + +.cm-s-obsidian span.cm-link:not(.cm-formatting-link) .cm-underline:hover, +.external-link:hover { + -webkit-text-fill-color: #fff; + color: #fff; + background-size: 4px 50px; + text-decoration-line: none !important; +} + +/* link */ +a, +.internal-link, +.cm-hmd-internal-link, +.cm-link { + text-decoration: none !important; + color: var(--text-normal); + position: relative; + z-index: 1; +} + +.cm-url { + color: var(--text-faint) !important; + opacity: 0.4; + font-weight: normal; +} + +.cm-formatting-image { + color: var(--text-accent) !important; + opacity: 0.7; +} + +/* link hover color */ +a:hover, +.internal-link:hover { + text-decoration: none !important; + color: var(--text-accent); +} + +/**-------------------** +| TAG STYLING +**--------------------**/ + +.cm-s-obsidian span.cm-hashtag { + position: relative; + color: var(--text-accent); + opacity: 1; + font-family: var(--tag-font-family); + font-style: italic; + text-decoration: none; + font-size: 0.86rem; + font-weight: 500; +} + +.cm-s-obsidian span.cm-hashtag:hover { + text-decoration-line: underline; + text-decoration-color: var(--text-accent); +} + +.cm-s-obsidian span.cm-formatting-hashtag { + color: var(--text-faint); +} + +/** tags */ +a.tag { + background-color: var(--tag-background); + color: var(--text-accent); + white-space: nowrap; + border-radius: var(--tag-radius); + padding: var(--tag-padding-y) var(--tag-padding-x); + font-family: var(--tag-font-family); + text-decoration: none; + font-style: italic; + font-size: 0.86rem; + font-weight: 500; +} + +a.tag:hover { + border-color: var(--text-accent); + opacity: 1; + background-color: var(--tag-background) !important; + text-decoration: underline !important; + text-decoration-color: var(--text-accent); +} + +h1 a.tag, +h2 a.tag, +h3 a.tag, +h4 a.tag, +h5 a.tag, +h6 a.tag { + font-size: inherit !important; +} + +/**-------------------** +| INLINE CODE STYLING +**--------------------**/ + +.CodeMirror-activeline + span.cm-inline-code:not(.cm-formatting):not(.cm-hmd-indented-code):not( + .obsidian-search-match-highlight + ) { + padding: 0 !important; + margin: 0 !important; +} + +.cm-s-obsidian span.cm-inline-code { + color: rgba(14, 210, 247, 0.9) !important; +} + +.cm-s-obsidian span.cm-inline-code.cm-formatting-code { + display: inline-flex; + min-width: 0.55rem; +} + +/**-------------------** +| HIGHLIGHTING STYLES +**--------------------**/ + +.cm-s-obsidian span.cm-formatting-highlight, +.cm-s-obsidian span.cm-highlight { + background-image: none !important; + background-color: var(--text-highlight-bg); + color: #fff; + -webkit-text-fill-color: #fff; + -webkit-background-clip: initial; +} + +/**-------------------** +| CODE FENCE STYLING +**--------------------**/ + +.cm-s-obsidian span.code-block-flair:not(:empty) { + color: var(--text-accent); + font-weight: 600; + text-transform: uppercase; + font-size: 0.6rem; + background: rgba(16, 14, 23, 0.86); + border-radius: 8px; + padding: 0.1em 0.8em; + margin-top: 0.3rem; + margin-right: 0.3rem; +} + +.cm-s-obsidian pre.HyperMD-codeblock { + color: var(--text-sub-accent); +} + +.cm-s-obsidian div.HyperMD-codeblock-bg { + background-color: #191621; +} + +.cm-s-obsidian div.HyperMD-codeblock-begin-bg { + border-top-left-radius: 0.3em; + border-top-right-radius: 0.3em; + border: none; +} + +.cm-s-obsidian div.HyperMD-codeblock-begin-bg:before { + position: absolute; + content: ''; + top: -5%; + left: 0; + width: 100%; + height: 60%; + margin-top: 1.5em; + border-top-left-radius: 0.3em; + border-top-right-radius: 0.3em; + background-color: #191621; +} + +.cm-s-obsidian div.HyperMD-codeblock-end-bg { + border-bottom-left-radius: 0.3em; + border-bottom-right-radius: 0.3em; + border: none; +} + +pre { + position: relative; +} + +pre[class*='language-']:before { + font-family: Rubik, Lato, Lucida Grande, Lucida Sans Unicode, Tahoma, Sans-Serif; + font-style: normal; + font-weight: 700; + font-size: 0.6rem; + color: #fff; + position: absolute; + top: 0.3rem; + right: 0.3rem; + padding: 0; + color: var(--text-accent) !important; + content: ''; + text-transform: uppercase; + background: rgba(16, 14, 23, 0.86); + border-radius: 8px; + padding: 0.1em 0.8em; + z-index: 10; +} + +pre[class$='javascript']:before, +pre[class$='js']:before { + content: 'JavaScript'; +} + +pre[class$='typescript']:before, +pre[class$='ts']:before { + content: 'typescript'; +} + +pre[class$='html']:before { + content: 'html'; +} + +pre[class$='css']:before { + content: 'css'; +} + +pre[class$='ejs']:before { + content: 'ejs'; +} + +pre[class$='vue']:before { + content: 'vue'; +} + +pre[class$='react']:before { + content: 'react'; +} + +pre[class$='shell']:before { + content: 'Shell'; +} + +pre[class$='powershell']:before { + content: 'PowerShell'; +} + +pre[class$='json']:before { + content: 'Json'; +} + +pre[class$='python']:before { + content: 'python'; +} + +/**-------------------** +| BLOCKQUOTE STYLING +**--------------------**/ + +/* Remove blockquote left margin */ +blockquote { + margin-inline-start: 0; +} + +/* blockquote style overwrite */ + +.markdown-source-view.mod-cm6.is-live-preview .HyperMD-quote, +.markdown-preview-view blockquote { + position: relative; + padding: 1rem 2rem 1rem 3rem; + color: #bdbdbd; + border-top-right-radius: 5px; + border-bottom-right-radius: 5px; + margin-bottom: 2em; + margin-right: 0 !important; + border-left: 3px rgba(14, 210, 247, 0.5) solid; + border-top: transparent; + border-bottom: transparent; + border-right: transparent; + background: linear-gradient(135deg, rgba(32, 28, 41, 0.45), #100e17); +} + +.markdown-source-view.mod-cm6.is-live-preview .HyperMD-quote::before, +.markdown-preview-view blockquote::before { + content: ''; + position: absolute; + top: 0; + left: 0px; + height: 2px; + width: 60%; + background: linear-gradient(90deg, rgba(13, 185, 215, 0.5), #13111a); +} + +.markdown-source-view.mod-cm6.is-live-preview .HyperMD-quote + .HyperMD-quote::before { + display: none; +} + +.HyperMD-quote::after, +.markdown-preview-view blockquote::after { + content: ''; + position: absolute; + bottom: 0; + left: 0px; + height: 2px; + width: 25%; + background: linear-gradient(90deg, rgba(13, 185, 215, 0.5), #15131c); +} + +.HyperMD-quote.HyperMD-quote-2::before, +.HyperMD-quote.HyperMD-quote-3::before, +.HyperMD-quote.HyperMD-quote-4::before, +.HyperMD-quote.HyperMD-quote-5::before { + height: 0; +} + +.markdown-preview-view blockquote p { + position: relative; +} + +.markdown-preview-view blockquote p:first-of-type::before { + content: '!!'; + font-style: italic; + font-weight: 700; + font-size: 18px; + color: var(--text-accent); + position: absolute; + top: 0.1rem; + left: -1.8rem; +} + +/**-------------------** +| FRONT-META STYLING +**--------------------**/ + +.cm-s-obsidian span.cm-def, +.cm-s-obsidian span.cm-atom { + color: var(--text-faint); +} +.cm-s-obsidian span.cm-meta { + color: var(--text-accent); +} + +.cm-s-obsidian span.cm-string { + color: var(--text-sub-accent); +} + +/**-------------------** +| CODE STYLING +**--------------------**/ + +/** inline code */ +.cm-s-obsidian + span.cm-inline-code:not(.cm-formatting):not(.cm-hmd-indented-code):not( + .obsidian-search-match-highlight + ), +.markdown-preview-view code { + overflow-wrap: break-word; + background-color: rgba(14, 210, 247, 0.05); + word-wrap: break-word; + padding: 0 5px; + border-radius: 0.3rem; + color: rgba(14, 210, 247, 0.9) !important; +} + +.theme-dark :not(pre) > code[class*='language-'], +.theme-dark pre[class*='language-'] { + background-color: var(--background-secondary); +} + +.markdown-preview-view img { + border-radius: 8px; +} + +/** code syntax theme **/ + +.theme-dark .cm-s-obsidian pre.HyperMD-codeblock span.cm-comment { + color: #6272a4; +} +.theme-dark .cm-s-obsidian pre.HyperMD-codeblock span.cm-string, +.theme-dark .cm-s-obsidian pre.HyperMD-codeblock span.cm-string-2 { + color: #f1fa8c; +} +.theme-dark .cm-s-obsidian pre.HyperMD-codeblock span.cm-number { + color: #bd93f9; +} +.theme-dark .cm-s-obsidian pre.HyperMD-codeblock span.cm-variable { + color: #50fa7b; +} +.theme-dark .cm-s-obsidian pre.HyperMD-codeblock span.cm-variable-2 { + color: white; +} +.theme-dark .cm-s-obsidian pre.HyperMD-codeblock span.cm-def { + color: #50fa7b; +} +.theme-dark .cm-s-obsidian pre.HyperMD-codeblock span.cm-operator { + color: #ff79c6; +} +.theme-dark .cm-s-obsidian pre.HyperMD-codeblock span.cm-keyword { + color: #ff79c6; +} +.theme-dark .cm-s-obsidian pre.HyperMD-codeblock span.cm-atom { + color: #bd93f9; +} +.theme-dark .cm-s-obsidian pre.HyperMD-codeblock span.cm-meta { + color: #f8f8f2; +} +.theme-dark .cm-s-obsidian pre.HyperMD-codeblock span.cm-tag { + color: #ff79c6; +} +.theme-dark .cm-s-obsidian pre.HyperMD-codeblock span.cm-attribute { + color: #50fa7b; +} +.theme-dark .cm-s-obsidian pre.HyperMD-codeblock span.cm-qualifier { + color: #50fa7b; +} +.theme-dark .cm-s-obsidian pre.HyperMD-codeblock span.cm-property { + color: #66d9ef; +} +.theme-dark .cm-s-obsidian pre.HyperMD-codeblock span.cm-builtin { + color: #50fa7b; +} +.theme-dark .cm-s-obsidian pre.HyperMD-codeblock span.cm-variable-3, +.theme-dark .cm-s-obsidian pre.HyperMD-codeblock span.cm-type { + color: #ffb86c; +} + +/** prism.js dracular theme **/ + +/* +* Dracula Theme for Prism.JS +* +* @author Gustavo Costa +* e-mail: gusbemacbe@gmail.com +* +* @contributor Jon Leopard +* e-mail: jonlprd@gmail.com +* +* @license MIT 2016-2018 +*/ + +pre::-webkit-scrollbar { + width: 14px; +} + +code[class*='language-'], +pre[class*='language-'] { + color: #ccc; + background: rgb(40, 41, 54); + text-shadow: none; + font-family: 'OperatorMonoSSmLig-Book', PT Mono, Consolas, Monaco, 'Andale Mono', 'Ubuntu Mono', + monospace !important; + text-align: left; + white-space: pre; + word-spacing: normal; + word-break: normal; + word-wrap: normal; + line-height: 1.5; + + -moz-tab-size: 4; + -o-tab-size: 4; + tab-size: 4; + + -webkit-hyphens: none; + -moz-hyphens: none; + -ms-hyphens: none; + hyphens: none; +} + +pre[class*='language-']::-moz-selection, +pre[class*='language-'] ::-moz-selection, +code[class*='language-']::-moz-selection, +code[class*='language-'] ::-moz-selection { + text-shadow: none; + background-color: #5a5f80; +} + +pre[class*='language-']::selection, +pre[class*='language-'] ::selection, +code[class*='language-']::selection, +code[class*='language-'] ::selection { + text-shadow: none; + background-color: #5a5f80; +} + +@media print { + code[class*='language-'], + pre[class*='language-'] { + text-shadow: none; + } +} + +/* Code blocks */ +:not(pre) > code[class*='language-'], +pre[class*='language-'] { + background: rgba(40, 41, 54, 1); +} + +/* Inline code */ +:not(pre) > code[class*='language-'] { + padding: 4px 7px; + border-radius: 0.3em; + white-space: normal; +} + +.limit-300 { + height: 300px !important; +} + +.limit-400 { + height: 400px !important; +} + +.limit-500 { + height: 500px !important; +} + +.limit-600 { + height: 600px !important; +} + +.limit-700 { + height: 700px !important; +} + +.limit-800 { + height: 800px !important; +} + +.theme-dark .token.comment { + color: rgba(98, 114, 164, 1); +} + +.theme-dark .token.prolog { + color: rgba(207, 207, 194, 1); +} + +.theme-dark .token.tag { + color: rgba(220, 104, 170, 1); +} + +.theme-dark .token.entity { + color: rgba(139, 233, 253, 1); +} + +.theme-dark .token.atrule { + color: rgba(98, 239, 117, 1); +} + +.theme-dark .token.url { + color: rgba(102, 217, 239, 1); +} + +.theme-dark .token.selector { + color: rgba(207, 207, 194, 1); +} + +.theme-dark .token.string { + color: rgba(241, 250, 140, 1); +} + +.theme-dark .token.property { + color: rgba(255, 184, 108, 1); +} + +.theme-dark .token.important { + color: rgba(255, 121, 198, 1); + font-weight: bold; +} + +.theme-dark .token.punctuation { + color: white; +} + +.theme-dark .token.number { + color: rgba(189, 147, 249, 1); +} + +.theme-dark .token.function { + color: rgba(80, 250, 123, 1); +} + +.theme-dark .token.class-name { + color: rgba(255, 184, 108, 1); +} + +.theme-dark .token.keyword { + color: rgba(255, 121, 198, 1); +} + +.theme-dark .token.boolean { + color: rgba(255, 184, 108, 1); +} + +.theme-dark .token.operator { + color: rgba(139, 233, 253, 1); +} + +.theme-dark .token.char { + color: rgba(255, 135, 157, 1); +} + +.theme-dark .token.regex { + color: rgba(80, 250, 123, 1); +} + +.theme-dark .token.variable { + color: rgba(80, 250, 123, 1); +} + +.theme-dark .token.constant { + color: rgba(255, 184, 108, 1); +} + +.theme-dark .token.symbol { + color: rgba(255, 184, 108, 1); +} + +.theme-dark .token.builtin { + color: rgba(255, 121, 198, 1); +} + +.theme-dark .token.attr-value { + color: #7ec699; +} + +.theme-dark .token.deleted { + color: #e2777a; +} + +.theme-dark .token.namespace { + color: #e2777a; +} + +.theme-dark .token.bold { + font-weight: bold; +} + +.theme-dark .token.italic { + font-style: italic; +} + +.theme-dark .token { + color: #ff79c6; +} + +.language-cpp .theme-dark .token.string { + color: #8be9fd; +} + +.language-c .theme-dark .token.string { + color: #8be9fd; +} + +.theme-dark .language-css .token.selector { + color: rgba(80, 250, 123, 1); +} + +.theme-dark .language-css .token.property { + color: rgba(255, 184, 108, 1); +} + +.language-java span.theme-dark .token.class-name { + color: #8be9fd; +} + +.language-java .theme-dark .token.class-name { + color: #8be9fd; +} + +.language-markup .theme-dark .token.attr-value { + color: rgba(102, 217, 239, 1); +} + +.language-markup .theme-dark .token.tag { + color: rgba(80, 250, 123, 1); +} + +.language-objectivec .theme-dark .token.property { + color: #66d9ef; +} + +.language-objectivec .theme-dark .token.string { + color: #50fa7b; +} + +.language-php .theme-dark .token.boolean { + color: #8be9fd; +} + +.language-php .theme-dark .token.function { + color: #ff79c6; +} + +.language-php .theme-dark .token.keyword { + color: #66d9ef; +} + +.language-ruby .theme-dark .token.symbol { + color: #8be9fd; +} + +.language-ruby .theme-dark .token.class-name { + color: #cfcfc2; +} + +pre.line-numbers { + position: relative; + padding-left: 3.8em; + counter-reset: linenumber; +} + +pre.line-numbers > code { + position: relative; + white-space: inherit; +} + +.line-numbers .line-numbers-rows { + position: absolute; + pointer-events: none; + top: 0; + font-size: 100%; + left: -3.8em; + width: 3em; /* works for line-numbers below 1000 lines */ + letter-spacing: -1px; + border-right: 1px solid #999; + + -webkit-user-select: none; + -moz-user-select: none; + -ms-user-select: none; + user-select: none; +} + +.line-numbers-rows > span { + pointer-events: none; + display: block; + counter-increment: linenumber; +} + +.line-numbers-rows > span:before { + content: counter(linenumber); + color: #999; + display: block; + padding-right: 0.8em; + text-align: right; +} diff --git a/Perlite/perlite/Demo/.obsidian/themes/Silence/manifest.json b/Perlite/perlite/Demo/.obsidian/themes/Silence/manifest.json new file mode 100644 index 0000000..8915157 --- /dev/null +++ b/Perlite/perlite/Demo/.obsidian/themes/Silence/manifest.json @@ -0,0 +1,7 @@ +{ + "name": "Silence", + "version": "2.0.0", + "minAppVersion": "0.16.0", + "author": "Luke Ruokaismaki", + "authorUrl": "https://rmaki.com.au" +} diff --git a/Perlite/perlite/Demo/.obsidian/themes/Silence/theme.css b/Perlite/perlite/Demo/.obsidian/themes/Silence/theme.css new file mode 100644 index 0000000..4e76c2c --- /dev/null +++ b/Perlite/perlite/Demo/.obsidian/themes/Silence/theme.css @@ -0,0 +1,197 @@ + +@import url("https://fonts.googleapis.com/css2?family=Fira+Code:wght@300;400;500;600;700&display=swap"); +/* + +░██████╗██╗██╗░░░░░███████╗███╗░░██╗░█████╗░███████╗░░░░░░░█████╗░██████╗░░██████╗██╗██████╗░██╗░█████╗░███╗░░██╗ +██╔════╝██║██║░░░░░██╔════╝████╗░██║██╔══██╗██╔════╝░░░░░░██╔══██╗██╔══██╗██╔════╝██║██╔══██╗██║██╔══██╗████╗░██║ +╚█████╗░██║██║░░░░░█████╗░░██╔██╗██║██║░░╚═╝█████╗░░█████╗██║░░██║██████╦╝╚█████╗░██║██║░░██║██║███████║██╔██╗██║ +░╚═══██╗██║██║░░░░░██╔══╝░░██║╚████║██║░░██╗██╔══╝░░╚════╝██║░░██║██╔══██╗░╚═══██╗██║██║░░██║██║██╔══██║██║╚████║ +██████╔╝██║███████╗███████╗██║░╚███║╚█████╔╝███████╗░░░░░░╚█████╔╝██████╦╝██████╔╝██║██████╔╝██║██║░░██║██║░╚███║ +╚═════╝░╚═╝╚══════╝╚══════╝╚═╝░░╚══╝░╚════╝░╚══════╝░░░░░░░╚════╝░╚═════╝░╚═════╝░╚═╝╚═════╝░╚═╝╚═╝░░╚═╝╚═╝░░╚══╝ + +Made by: Luke Ruokaismaki +Version: 1.0.0 +Repo: https://github.com/luke-rmaki/silence-obsidian +Built with PostCSS and Gulp + +To edit colors, use the vars.css file or edit the variables below if not building from source + + + +*/ +:root { + --gray-0: #c2cadc; + --gray-1: #b0bbd2; + --gray-2: #9dabc8; + --gray-3: #899bbd; + --gray-4: #7588a9; + --gray-5: #60708c; + --gray-6: #54627b; + --gray-7: #465268; + --gray-8: #343e4f; + --gray-9: #272f3c; + --gray-10: #1e2430; + --gray-11: #131821; + --gray-12: #0c1018; + --serenity-0: #c8fafd; + --serenity-1: #a3f0f3; + --serenity-2: #92e1e4; + --serenity-3: #7bced1; + --serenity-4: #6cb8bb; + --serenity-5: #60a3a6; + --serenity-6: #559193; + --serenity-7: #487a7c; + --serenity-8: #406769; + --serenity-9: #3b5b5c; + --serenity-10: #345051; + --serenity-11: #293f40; + --serenity-12: #1d2c2c; + --green-0: #cbfbdf; + --green-1: #90f8c0; + --green-2: #6ee8aa; + --green-3: #60cc95; + --green-4: #55b382; + --green-5: #4ca376; + --green-6: #418b65; + --green-7: #357453; + --green-8: #2b5b42; + --green-9: #234935; + --green-10: #193325; + --green-11: #142c1f; + --green-12: #0d2016; + --purple-0: #faf8fc; + --purple-1: #e3dcf0; + --purple-2: #cec1e5; + --purple-3: #b29bd5; + --purple-4: #9a7cc6; + --purple-5: #8862b9; + --purple-6: #6f4b9c; + --purple-7: #593b7f; + --purple-8: #473164; + --purple-9: #35244b; + --purple-10: #2a1b3c; + --purple-11: #1e132d; + --purple-12: #11091b; + --red-0: #fef7f8; + --red-1: #fad7d8; + --red-2: #f7b6b9; + --red-3: #f4858c; + --red-4: #f25060; + --red-5: #dc2d44; + --red-6: #b12232; + --red-7: #901927; + --red-8: #77131e; + --red-9: #540a12; + --red-10: #40060c; + --red-11: #310407; + --red-12: #210204; + --yellow-0: #fff8eb; + --yellow-1: #ffefd1; + --yellow-2: #ffe8b7; + --yellow-3: #ffe2a1; + --yellow-4: #ffdb7e; + --yellow-5: #ffd34b; + --yellow-6: #f3c600; + --yellow-7: #e3b800; + --yellow-8: #c5a000; + --yellow-9: #a68600; + --yellow-10: #876d00; + --yellow-11: #705a00; + --yellow-12: #5b4800; + --cerulean-0: #f7f9ff; + --cerulean-1: #d4deff; + --cerulean-2: #b1c5ff; + --cerulean-3: #7aa4ff; + --cerulean-4: #3587ff; + --cerulean-5: #0072e4; + --cerulean-6: #005ab7; + --cerulean-7: #004895; + --cerulean-8: #003a7a; + --cerulean-9: #002b5e; + --cerulean-10: #00214b; + --cerulean-11: #00183a; + --cerulean-12: #00112d; +} +body { + /*! EDITOR */ + --file-line-width: 70vw; + --background-primary: var(--gray-10); + --background-secondary: var(--gray-11); + --background-secondary-alt: var(--gray-12); + --divider-color: var(--gray-8); + + /** Ribbon */ + --ribbon-background-collapsed: var(--background-secondary); + + /** Scrollbar */ + --scrollbar-bg: var(--gray-9); + --scrollbar-thumb-bg: var(--gray-11); + + /** Titlebar */ + --titlebar-background-focused: var(--background-secondary); + + /*! TABS */ + + /*! ICONS */ + --icon-color: var(--serenity-1); + --icon-color-hover: var(--cerulean-5); + + /*! TEXT COLORS */ + --h1-color: var(--serenity-1); + --h2-color: var(--cerulean-5); + --h3-color: var(--green-1); + --h4-color: var(--purple-3); + --h5-color: var(--cerulean-3); + --h6-color: var(--purple-3); + --heading-formatting: var(--gray-1); + --text-normal: var(--serenity-0); + --text-accent: var(--yellow-5); + --text-muted: var(--gray-2); + --text-faint: var(--gray-3); + --list-marker-color: var(--purple-5); + --tag-background: var(--gray-9); + --hr-color: var(--cerulean-5); + --text-error: var(--red-4); + + /** Blockquote */ + --blockquote-border-thickness: 4px; + --blockquote-border-color: var(--interactive-accent); + --blockquote-font-style: normal; + --blockquote-color: inherit; + --blockquote-background-color: transparent; + + /** Checkboxes */ + --checkbox-radius: var(--radius-s); + --checkbox-size: 15px; + --checkbox-marker-color: var(--background-primary); + --checkbox-color: var(--interactive-accent); + --checkbox-color-hover: var(--interactive-accent-hover); + --checkbox-border-color: var(--text-faint); + --checkbox-border-color-hover: var(--text-muted); + --checklist-done-decoration: line-through; + --checklist-done-color: var(--gray-2); + + /*! MODAL */ + --modal-border-color: var(--cerulean-5); + --prompt-border-color: var(--cerulean-5); + + /*! INPUTS */ + --background-modifier-hover: var(--gray-9); + --interactive-accent: var(--cerulean-5); +} +.theme-dark { + --text-highlight-bg: var(--yellow-5); + --interactive-normal: var(--gray-9); +} +/*! OVERRIDES */ +.cm-s-obsidian span.cm-highlight { + color: #0c1018; + color: var(--gray-12); +} +.search-result-file-matched-text { + color: #0c1018; + color: var(--gray-12); +} +.nav-folder-title-content { + font-weight: bold; +} diff --git a/Perlite/perlite/Demo/Demo Documents/Callouts and Frontmatter.md b/Perlite/perlite/Demo/Demo Documents/Callouts and Frontmatter.md new file mode 100644 index 0000000..e9151c2 --- /dev/null +++ b/Perlite/perlite/Demo/Demo Documents/Callouts and Frontmatter.md @@ -0,0 +1,81 @@ +--- +tags: + - tag1 + - tag-test + - readme +aliases: + - Callouts + - Frontsmatter + - Sample +--- + +Im a YAML front matter document + + +# Blockquots + +> Lorem ipsum +> Lorem ipsum dolor sit amet, consectetur adipiscing elit. Curabitur et gravida diam, et varius magna. Proin `id felis quis nisl` gravida auctor a eu est. In viverra dui viverra placerat cursus. Curabitur non commodo mi. Mauris volutpat nisl vitae nulla efficitur condimentum. Nulla facilisi. Maecenas malesuada purus mi, eget fringilla quam ultrices sit amet. + +## Callouts + +> [!note] +> Lorem ipsum dolor sit amet +>> [!abstract] +>> Lorem ipsum dolor sit amet + +> [!abstract] +> Lorem ipsum dolor sit amet + +> [!info] +> Lorem ipsum dolor sit amet + +> [!todo] +> Lorem ipsum dolor sit amet + +> [!tip] +> Lorem ipsum dolor sit amet + +> [!success] +> Lorem ipsum dolor sit amet + +> [!question] +> Lorem ipsum dolor sit amet + +> [!warning] +> Lorem ipsum dolor sit amet + +> [!failure] +> Lorem ipsum dolor sit amet + +> [!danger] +> Lorem ipsum dolor sit amet + +> [!bug] +> Lorem ipsum dolor sit amet + +> [!example] +> Lorem ipsum dolor sit amet + +> [!quote] +> Lorem ipsum dolor sit amet + + +## Collapsible Callouts + +> [!note]+ Information the user should notice even if skimming. +> Test +> > [!note]+ Information the user should notice even if skimming. +>> Test + + +> [!note]+ ###code inline test. +> ```bash +> whoami +> ``` + + +> [!note]+ +> ```bash +> whoami +> ``` \ No newline at end of file diff --git a/Perlite/perlite/Demo/Demo Documents/Images.md b/Perlite/perlite/Demo/Demo Documents/Images.md new file mode 100644 index 0000000..0811fa5 --- /dev/null +++ b/Perlite/perlite/Demo/Demo Documents/Images.md @@ -0,0 +1,38 @@ + +# Internal Images + +Image with a custom size + +![[background.png|300x300]] + + +Image with a alternate text and size + +![[background.png|This is a description|100]] + +Centered image + +![[background.png|center]] + +Right aligned image with a custom size + +![[background.png|right|200]] + +webp Image + +![[docs/aufbau.webp]] + +internal image + link to external source + +[![[background.png]]](https://website.com) + + + +## External images + + +![Graph](https://raw.githubusercontent.com/secure-77/Perlite/main/screenshots/graph.png) + + + + diff --git a/Perlite/perlite/Demo/Demo Documents/Latex and Mermaid.md b/Perlite/perlite/Demo/Demo Documents/Latex and Mermaid.md new file mode 100644 index 0000000..58ab429 --- /dev/null +++ b/Perlite/perlite/Demo/Demo Documents/Latex and Mermaid.md @@ -0,0 +1,56 @@ + +## LaTeX + + +Inline math equations go in like so: $\omega = d\phi / dt$. +Display math should get its own line and be put in in double-dollarsigns: + +$$I = \int \rho R^{2} dV$$ + +And note that you can backslash-escape any punctuation characters which you wish to be displayed literally, ex.: \`foo\`, \*bar\*, etc. + + +Consider non-empty sets $A$, $B$ and $C$. Then a binary operation $f$ is a mapping from set $A\times C$ to set $A$ or $B$. +$$f\colon D\subseteq A \times C \to \left[ \begin{array}{lcl} A \\ B \end{array} \right.$$ + +## Mermaid + +Simple Flow Chart + +```mermaid +flowchart LR + id1[[This is the text in the box1]] +``` + + +Mermaid Graph + +```mermaid +graph TD; +A-->B; +A-->C; +B-->D; +C-->D; +``` + +Sequence Diagram + +```mermaid +sequenceDiagram + participant Alice + participant Bob + Alice->>John: Hello John, how are you? + loop Healthcheck + John->>John: Fight against hypochondria + end + Note right of John: Rational thoughts
prevail! + John-->>Alice: Great! + John->>Bob: How about you? + Bob-->>John: Jolly good! +``` + + + + + + diff --git a/Perlite/perlite/Demo/Demo Documents/Links and Embedded.md b/Perlite/perlite/Demo/Demo Documents/Links and Embedded.md new file mode 100644 index 0000000..2e8be1d --- /dev/null +++ b/Perlite/perlite/Demo/Demo Documents/Links and Embedded.md @@ -0,0 +1,45 @@ + +# External Links + +Just a link: https://github.com/secure-77/Perlite + +[Link with custom Name](https://github.com/secure-77/Perlite) + + +# Files + +Link to another markdown file: [[Markdown Samples]] + +Link to another markdown file with a custom linke name: [[Markdown Samples|Custom Link Name]] + +A strange cubic object that irradiates light. +Found by [[Triya]] on a beach in [[Synthea]]. LPH later discovered that the globe was probably from [[Phanes]] since it fits perfectly in an artifact stand that the party found in an underground [[Antediluvians]] ossuary underneath [[Sif]]. LPH got a confirmation of this theory when the [[Antediluvians]] ([[Stargazers]]) that [[Triya]] faced in the [[Temple of Bes]] performed the same type of magic that [[Triya]] does. + +## Links to Headings + +Link to the heading [[#PDF]] + +Link to same document heading with a custom Title [[#PDF|Scroll to PDF]] + + +## Video + +Link to internal stored Video: [[mov_bbb.mp4]] + +Video embedded: + +![[mov_bbb.mp4]] + +Youtube embedded: + +![Making a Minecraft Obsidian Block in Real Life Using Astro Tech Resin](https://www.youtube.com/watch?v=NnTvZWp5Q7o) + +## Audio + +![[docs/sample3.m4a]] + +## PDF + +Link to internal stored PDF: [[pdf-test.pdf]] + +PDF embedded: ![[pdf-test.pdf]] diff --git a/Perlite/perlite/Demo/Demo Documents/Markdown Samples.md b/Perlite/perlite/Demo/Demo Documents/Markdown Samples.md new file mode 100644 index 0000000..d234fd5 --- /dev/null +++ b/Perlite/perlite/Demo/Demo Documents/Markdown Samples.md @@ -0,0 +1,176 @@ +# h1 Heading +## h2 Heading +### h3 Heading +#### h4 Heading +##### h5 Heading +###### h6 Heading + + +## Horizontal Rules (--) +--- + +and `___` +__________ + +and `***` + +*** + +# Tasks + + +- [ ] Task 1 +- [x] Task 2 +- [ ] Task 3 +- [ ] Task 4 +- [ ] Task 5 + +## Tags + +#tag-test #readme + +## Emphasis + +**This is bold text** + +__This is bold text__ + +*This is italic text* + +_This is italic text_ + +~~Strikethrough~~ + + `This is monospace` + +Unicode is supported. ☺ + +## Lists + +Unordered + ++ Create a list by starting a line with `+`, `-`, or `*` ++ Sub-lists are made by indenting 2 spaces: + - Marker character change forces new list start: + * Ac tristique libero volutpat at + + Facilisis in pretium nisl aliquet + - Nulla volutpat aliquam velit ++ Very easy! + +Ordered + +1. Lorem ipsum dolor sit amet +2. Consectetur adipiscing elit +3. Integer molestie lorem at massa + + +1. You can use sequential numbers... +1. ...or keep all the numbers as `1.` + +Start numbering with offset: + +57. foo +1. bar + +Nested + + 1. First, get these ingredients: + + * carrots + * celery + * lentils + + 2. Boil some water. + + 3. Dump everything in the pot and follow + this algorithm: + + find wooden spoon + uncover pot + stir + cover pot + balance wooden spoon precariously on pot handle + wait 10 minutes + goto first step (or shut off burner when done) + + Do not bump wooden spoon or it will fall. + +Notice again how text always lines up on 4-space indents (including +that last line which continues item 3 above). + +Definition list + +apples + : Good for making applesauce. +oranges + : Citrus! +tomatoes + : There's no "e" in tomatoe. + +## Paragraphs and Blockquote +are separated by a blank line. + +2nd paragraph. Itemized lists look like: + + * this one + * that one + * the other one + +### Blockquote + +> Lorem ipsum dolor sit amet, consectetur adipiscing elit. Curabitur et gravida diam, et varius magna. Proin id felis quis nisl gravida auctor a eu est. In viverra dui viverra placerat cursus. Curabitur non commodo mi. Mauris volutpat nisl vitae nulla efficitur condimentum. Nulla facilisi. Maecenas malesuada purus mi, eget fringilla quam ultrices sit amet. + + +Another one + +> Block quotes are +> written like so. +> +> They can span multiple paragraphs, +> if you like. + +## Code + +Inline `code` + +Indented code + + // Some comments + line 1 of code + line 2 of code + line 3 of code + + +Block code "fences" + +``` +Sample text here... +``` + +Syntax highlighting + +``` js +var foo = function (bar) { + return bar++; +}; + +console.log(foo(5)); +``` + +## Tables + +| Option | Description | +| ------ | ----------- | +| data | path to data files to supply the data that will be passed into templates. | +| engine | engine to be used for processing templates. Handlebars is the default. | +| ext | extension to be used for dest files. | + +Right aligned columns + +| Option | Description | +| ------:| -----------:| +| data | path to data files to supply the data that will be passed into templates. | +| engine | engine to be used for processing templates. Handlebars is the default. | +| ext | extension to be used for dest files. | + + diff --git a/Perlite/perlite/Demo/Demo Documents/background.png b/Perlite/perlite/Demo/Demo Documents/background.png new file mode 100644 index 0000000..8028946 Binary files /dev/null and b/Perlite/perlite/Demo/Demo Documents/background.png differ diff --git a/Perlite/perlite/Demo/Demo Documents/docs/aufbau.webp b/Perlite/perlite/Demo/Demo Documents/docs/aufbau.webp new file mode 100644 index 0000000..e99297a Binary files /dev/null and b/Perlite/perlite/Demo/Demo Documents/docs/aufbau.webp differ diff --git a/Perlite/perlite/Demo/Demo Documents/docs/sample3.m4a b/Perlite/perlite/Demo/Demo Documents/docs/sample3.m4a new file mode 100644 index 0000000..b426ffb Binary files /dev/null and b/Perlite/perlite/Demo/Demo Documents/docs/sample3.m4a differ diff --git a/Perlite/perlite/Demo/Demo Documents/mov_bbb.mp4 b/Perlite/perlite/Demo/Demo Documents/mov_bbb.mp4 new file mode 100644 index 0000000..0a4dd5b Binary files /dev/null and b/Perlite/perlite/Demo/Demo Documents/mov_bbb.mp4 differ diff --git a/Perlite/perlite/Demo/Demo Documents/pdf-test.pdf b/Perlite/perlite/Demo/Demo Documents/pdf-test.pdf new file mode 100644 index 0000000..f46dbe5 Binary files /dev/null and b/Perlite/perlite/Demo/Demo Documents/pdf-test.pdf differ diff --git a/Perlite/perlite/Demo/README.md b/Perlite/perlite/Demo/README.md new file mode 100644 index 0000000..aa0afbb --- /dev/null +++ b/Perlite/perlite/Demo/README.md @@ -0,0 +1,48 @@ + +# Perlite + + +![GitHub release (latest by date)](https://img.shields.io/github/v/release/secure-77/perlite) ![GitHub](https://img.shields.io/github/license/secure-77/perlite) ![GitHub last commit](https://img.shields.io/github/last-commit/secure-77/Perlite) + +#tag-test + +A web based markdown viewer optimized for [Obsidian](https://obsidian.md/) Notes + +Just put your whole Obsidian vault or markdown folder/file structure in your web directory. The page builds itself. + +It's an open source alternative to [Obsidian publish](https://obsidian.md/publish). + +Read more about Perlite and staging tips on my blog post: [Perlite on Secure77](https://secure77.de/perlite). + +If you want to discuss Perlite you can join the thread in the [Obsidian Forum](https://forum.obsidian.md/t/perlite-publish-your-notes-to-your-own-web-server/21712) or join the [Perlite Discord Server](https://discord.gg/pkJ347ssWT) + + +## Documentation on Github + +[Perlite on Github](https://github.com/secure-77/Perlite/) + +## Features + +- Auto build up, based on your folder (vault) structure +- Support Obsidian Themes +- Full responsive +- No manual parsing or converting necessary +- Full interactive Graph +- LaTeX and Mermaid support +- Link to Obsidian Vault +- Search +- Support Obisdian tags, links, images and preview +- Dark and Light Mode + +## Changelog +[Changelog](https://github.com/secure-77/Perlite/blob/main/Changelog.md) + + +## Why Perlite? +[Wiki](https://en.wikipedia.org/wiki/Perlite): +*Perlite is an amorphous volcanic glass ... typically formed by the hydration of obsidian.* + +## Safe Mode Test +You should be very cautious about disabling safe mode. If safe mode is **OFF** the following text will be red, if safe mode is **ON** you should see unrendered HTML below. + +
Red if Unsafe
diff --git a/Perlite/perlite/Demo/metadata.json b/Perlite/perlite/Demo/metadata.json new file mode 100644 index 0000000..dd1daae --- /dev/null +++ b/Perlite/perlite/Demo/metadata.json @@ -0,0 +1,220 @@ +[ + { + "fileName": "README", + "relativePath": "README.md", + "tags": [ + "tag-test" + ], + "headings": [ + { + "heading": "Perlite", + "level": 1 + }, + { + "heading": "Documentation on Github", + "level": 2 + }, + { + "heading": "Features", + "level": 2 + }, + { + "heading": "Changelog", + "level": 2 + }, + { + "heading": "Why Perlite?", + "level": 2 + }, + { + "heading": "Safe Mode Test", + "level": 2 + } + ] + }, + { + "fileName": "Markdown Samples", + "relativePath": "Demo Documents/Markdown Samples.md", + "tags": [ + "tag-test", + "readme" + ], + "headings": [ + { + "heading": "h1 Heading", + "level": 1 + }, + { + "heading": "h2 Heading", + "level": 2 + }, + { + "heading": "h3 Heading", + "level": 3 + }, + { + "heading": "h4 Heading", + "level": 4 + }, + { + "heading": "h5 Heading", + "level": 5 + }, + { + "heading": "h6 Heading", + "level": 6 + }, + { + "heading": "Horizontal Rules (--)", + "level": 2 + }, + { + "heading": "Tags", + "level": 2 + }, + { + "heading": "Emphasis", + "level": 2 + }, + { + "heading": "Lists", + "level": 2 + }, + { + "heading": "Paragraphs and Blockquote", + "level": 2 + }, + { + "heading": "Blockquote", + "level": 3 + }, + { + "heading": "Code", + "level": 2 + }, + { + "heading": "Tables", + "level": 2 + } + ], + "backlinks": [ + { + "fileName": "Links and Embedded", + "link": "Markdown Samples", + "relativePath": "Demo Documents/Links and Embedded.md" + }, + { + "fileName": "Links and Embedded", + "link": "Markdown Samples", + "relativePath": "Demo Documents/Links and Embedded.md", + "displayText": "Custom Link Name" + } + ] + }, + { + "fileName": "Links and Embedded", + "relativePath": "Demo Documents/Links and Embedded.md", + "headings": [ + { + "heading": "External Links", + "level": 1 + }, + { + "heading": "Files", + "level": 1 + }, + { + "heading": "Links to Headings", + "level": 2 + }, + { + "heading": "Video", + "level": 2 + }, + { + "heading": "PDF", + "level": 2 + } + ], + "links": [ + { + "link": "Markdown Samples", + "relativePath": "Demo Documents/Markdown Samples.md" + }, + { + "link": "Markdown Samples", + "displayText": "Custom Link Name", + "relativePath": "Demo Documents/Markdown Samples.md" + }, + { + "link": "#PDF", + "relativePath": "Demo Documents/Links and Embedded.md", + "cleanLink": "Links and Embedded", + "displayText": "PDF" + }, + { + "link": "#PDF", + "relativePath": "Demo Documents/Links and Embedded.md", + "cleanLink": "Links and Embedded", + "displayText": "Scroll to PDF" + } + ] + }, + { + "fileName": "Latex and Mermaid", + "relativePath": "Demo Documents/Latex and Mermaid.md", + "headings": [ + { + "heading": "LaTeX", + "level": 2 + }, + { + "heading": "Mermaid", + "level": 2 + } + ] + }, + { + "fileName": "Images", + "relativePath": "Demo Documents/Images.md", + "headings": [ + { + "heading": "Internal Images", + "level": 1 + }, + { + "heading": "External images", + "level": 2 + } + ] + }, + { + "fileName": "Callouts and Frontmatter", + "relativePath": "Demo Documents/Callouts and Frontmatter.md", + "tags": [ + "tag1", + "tag-test", + "readme" + ], + "frontmatter": {}, + "aliases": [ + "Callouts", + "Frontsmatter", + "Sample" + ], + "headings": [ + { + "heading": "Blockquots", + "level": 1 + }, + { + "heading": "Callouts", + "level": 2 + }, + { + "heading": "Collapsible Callouts", + "level": 2 + } + ] + } +] \ No newline at end of file diff --git a/Perlite/perlite/Dockerfile b/Perlite/perlite/Dockerfile new file mode 100644 index 0000000..038bcf1 --- /dev/null +++ b/Perlite/perlite/Dockerfile @@ -0,0 +1,22 @@ +FROM php:fpm-alpine + +LABEL maintainer="sec77 https://github.com/secure-77/Perlite" + +RUN mv "$PHP_INI_DIR/php.ini-production" "$PHP_INI_DIR/php.ini" +ADD https://github.com/mlocati/docker-php-extension-installer/releases/latest/download/install-php-extensions /usr/local/bin/ +RUN chmod +x /usr/local/bin/install-php-extensions && install-php-extensions yaml + +WORKDIR /var/www/perlite/ +COPY ./index.php ./ +COPY ./helper.php ./ +COPY ./content.php ./ +COPY ./*.svg ./ +COPY ./*.ico ./ +COPY ./.styles/ ./.styles/ +COPY ./.js/ ./.js/ +COPY ./.src/ ./.src/ +COPY ./vendor/ ./vendor/ + +VOLUME /var/www/perlite/ + +EXPOSE 9000 diff --git a/Perlite/perlite/composer.json b/Perlite/perlite/composer.json new file mode 100644 index 0000000..30c6667 --- /dev/null +++ b/Perlite/perlite/composer.json @@ -0,0 +1,34 @@ +{ + "name": "secure-77/perlite", + "description": "A web based markdown viewer optimized for Obsidian Notes", + "version": "1.5.9", + "type": "project", + "keywords": ["markdown viewer","obsidian notes"], + "homepage": "https://github.com/secure-77/Perlite", + "license": "MIT", + "authors": [ + { + "name": "secure-77", + "email": "sec77@secure77.de", + "homepage": "https://secure77.de" + } + ], + "support": { + "issues": "https://github.com/secure-77/Perlite/issues", + "wiki": "https://github.com/secure-77/Perlite/wiki", + "chat": "https://discord.gg/pkJ347ssWT" + }, + "autoload": { + "psr-4" : { + "Perlite\\": ".src/" + } + }, + "config": { + "preferred-install": "dist" + }, + + "require": { + "erusev/parsedown": "^1.7.4" + } + +} diff --git a/Perlite/perlite/composer.lock b/Perlite/perlite/composer.lock new file mode 100644 index 0000000..4c9a35b --- /dev/null +++ b/Perlite/perlite/composer.lock @@ -0,0 +1,69 @@ +{ + "_readme": [ + "This file locks the dependencies of your project to a known state", + "Read more about it at https://getcomposer.org/doc/01-basic-usage.md#installing-dependencies", + "This file is @generated automatically" + ], + "content-hash": "2db62f4d2cd50562c79c08708a1ecdd7", + "packages": [ + { + "name": "erusev/parsedown", + "version": "1.7.4", + "source": { + "type": "git", + "url": "https://github.com/erusev/parsedown.git", + "reference": "cb17b6477dfff935958ba01325f2e8a2bfa6dab3" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/erusev/parsedown/zipball/cb17b6477dfff935958ba01325f2e8a2bfa6dab3", + "reference": "cb17b6477dfff935958ba01325f2e8a2bfa6dab3", + "shasum": "" + }, + "require": { + "ext-mbstring": "*", + "php": ">=5.3.0" + }, + "require-dev": { + "phpunit/phpunit": "^4.8.35" + }, + "type": "library", + "autoload": { + "psr-0": { + "Parsedown": "" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Emanuil Rusev", + "email": "hello@erusev.com", + "homepage": "http://erusev.com" + } + ], + "description": "Parser for Markdown.", + "homepage": "http://parsedown.org", + "keywords": [ + "markdown", + "parser" + ], + "support": { + "issues": "https://github.com/erusev/parsedown/issues", + "source": "https://github.com/erusev/parsedown/tree/1.7.x" + }, + "time": "2019-12-30T22:54:17+00:00" + } + ], + "packages-dev": [], + "aliases": [], + "minimum-stability": "stable", + "stability-flags": [], + "prefer-stable": false, + "prefer-lowest": false, + "platform": [], + "platform-dev": [], + "plugin-api-version": "2.6.0" +} diff --git a/Perlite/perlite/content.php b/Perlite/perlite/content.php new file mode 100644 index 0000000..6cb850e --- /dev/null +++ b/Perlite/perlite/content.php @@ -0,0 +1,391 @@ +setSafeMode($htmlSafeMode); + $Parsedown->setBreaksEnabled($lineBreaks); + $cleanFile = ''; + + // call menu again to refresh the array + menu($rootDir); + $path = ''; + + + // get and parse the content, return if no content is there + $content = getContent($requestFile); + if ($content === '') { + return; + } + + $wordCount = str_word_count($content); + $charCount = strlen($content); + $content = $Parsedown->text($content); + + + // Relative or absolute pathes + if ($relPathes) { + $path = $startDir; + $mdpath = ''; + } else { + $mdpath = $path; + $path = $startDir . $path; + } + + // fix links (not used) + // $oldPath = $startDir . $path; + + // // fix relativ links in parent folders + // $pattern = array('/(\[\[)(\.\.\/.*)(\]\])/'); + // $content = fixLinks($pattern, $content, $oldPath, false); + + // // // fix relativ links in same folders + // $pattern = array('/(\[\[)+([^\/]+?)(\]\])/'); + // $content = fixLinks($pattern, $content, $path, true); + + // // fix relativ links in subfolder and same folders + // $pattern = array('/(\[\[)(?!Demo Documents\/)(.+)(\]\])/'); + // $content = fixLinks($pattern, $content, $path, true); + + + $linkFileTypes = implode('|', $allowedFileLinkTypes); + + $allowedImageTypes = '(\.png|\.jpg|\.jpeg|\.svg|\.gif|\.bmp|\.tif|\.tiff|\.webp)'; + + $src_path = $uriPath . $path; + + // embedded pdf links + $replaces = ''; + $pattern = array('/(\!\[\[)(.*?.(?:pdf))(\]\])/'); + $content = preg_replace($pattern, $replaces, $content); + + // embedded mp4 links + $replaces = ' + '; + $pattern = array('/(\!\[\[)(.*?.(?:mp4))(\]\])/'); + $content = preg_replace($pattern, $replaces, $content); + + + // embedded m4a links + $replaces = ' + '; + $pattern = array('/(\!\[\[)(.*?.(?:m4a))(\]\])/'); + $content = preg_replace($pattern, $replaces, $content); + + + // links to other files with Alias + $replaces = '\\3'; + $pattern = array('/(\[\[)(.*?.(?:' . $linkFileTypes . '))\|(.*)(\]\])/'); + $content = preg_replace($pattern, $replaces, $content); + + // links to other files without Alias + $replaces = '\\2'; + $pattern = array('/(\[\[)(.*?.(?:' . $linkFileTypes . '))(\]\])/'); + $content = preg_replace($pattern, $replaces, $content); + + // img links with external target link + $replaces = 'noreferrer">image not found'; + $pattern = array('/noreferrer">(\!?\[\[)(.*?)' . $allowedImageTypes . '\|?(\d*)x?(\d*)(\]\])/'); + $content = preg_replace($pattern, $replaces, $content); + + // img links with size + $replaces = '

image not found

'; + $pattern = array('/(\!?\[\[)(.*?)' . $allowedImageTypes . '\|?(\d*)x?(\d*)(\]\])/'); + $content = preg_replace($pattern, $replaces, $content); + + // centerise or right align images with "center"/"right" directive + $pattern = '/(\!?\[\[)(.*?)' . $allowedImageTypes . '\|?(center|right)\|?(\d*)x?(\d*)(\]\])/'; + $replaces = function ($matches) use ($src_path) { + $class = "images"; // Default class for all images + if (strpos($matches[4], 'center') !== false) { + $class .= " center"; // Add 'center' class + } elseif (strpos($matches[4], 'right') !== false) { + $class .= " right"; // Add 'right' class + } + $width = $matches[5] ?? 'auto'; + $height = $matches[6] ?? 'auto'; + return '

'; + }; + $content = preg_replace_callback($pattern, $replaces, $content); + + // img links with captions and size + $replaces = '

\\4

'; + $pattern = array('/(\!?\[\[)(.*?)' . $allowedImageTypes . '\|?(.+\|)\|?(\d*)x?(\d*)(\]\])/'); + $content = preg_replace($pattern, $replaces, $content); + + // img links with captions + $replaces = '

\\4

'; + $pattern = array('/(\!?\[\[)(.*?)' . $allowedImageTypes . '\|?(.+|)(\]\])/'); + $content = preg_replace($pattern, $replaces, $content); + + + // handle internal site links + // search for links outside of the current folder + $pattern = array('/(\[\[)(?:\.\.\/)+(.*?)(\]\])/'); + $content = translateLink($pattern, $content, $path, false); + + // search for links in the same folder + $pattern = array('/(\[\[)(.*?)(\]\])/'); + $content = translateLink($pattern, $content, $mdpath, true); + + + // add some meta data + $content = ' +
+
' . $cleanFile . '
+
' . $wordCount . '
+
' . $charCount . '
+
' . $content; + + echo $content; + return; + +} + + +// translate relativ links (not used) +// function fixLinks($pattern, $content, $path, $sameFolder) { + +// return preg_replace_callback($pattern, +// function($matches) use ($path, $sameFolder) { + +// $newAbPath = $path; +// echo "path: " . $path; +// echo "
"; +// $pathSplit = explode("/",$path); +// $linkFilePart = $matches[2]; +// $esapeSequence = "#regex_run#"; +// echo '$matches[1]: ' . $matches[1]; +// echo '
'; +// echo '$matches[2]: ' . $linkFilePart; +// echo '
'; + +// $linkDesc = ""; + +// # handle custom link comments and sizes +// $splitLink = explode("|", $matches[2]); +// if (count($splitLink) > 1) { +// $linkFilePart = $splitLink[0]; +// array_shift($splitLink); +// $linkDesc = '|' .implode("|", $splitLink); +// } + + +// // do extra stuff to get the absolute path +// if ($sameFolder == false) { +// $countDirs = count(explode("../",$linkFilePart)); +// $countDirs = $countDirs -1; +// $newPath = array_splice($pathSplit, 1, -$countDirs); +// $newAbPath = implode('/', $newPath); +// echo "new file path: " . $newAbPath; +// echo "
"; +// echo "old file path: " . $linkFilePart; +// echo "
"; +// } + +// if (substr($newAbPath,0,1) == '/') { +// $newAbPath = substr($newAbPath,1); +// } + + +// $origPath = explode('/', $linkFilePart); +// array_pop($origPath); +// $origPath = implode('/', $origPath); +// //check if its already an absolut path +// echo "new file path: " . $newAbPath; +// echo "
"; +// echo "old file path: " . $origPath; +// echo "
"; + + +// if (count_chars($origPath) >= count_chars($newAbPath)) { + +// $urlPath = $linkFilePart; + +// } else { + +// $linkFile = str_replace("../","",$linkFilePart); +// $urlPath = $newAbPath. '/'. $linkFile; +// } + + +// return '[['.$urlPath.$linkDesc.']]'; +// } +// ,$content); +// } + + + +//internal links +// can be simplified (no need of path translation) +function translateLink($pattern, $content, $path, $sameFolder) +{ + + return preg_replace_callback( + $pattern, + function ($matches) use ($path, $sameFolder) { + + + global $uriPath; + $newAbPath = $path; + $pathSplit = explode("/", $path); + $linkName_full = $matches[2]; + $linkName = $linkName_full; + $linkFile = $matches[2]; + + # handle custom internal obsidian links + $splitLink = explode("|", $matches[2]); + if (count($splitLink) > 1) { + + $linkFile = $splitLink[0]; + $linkName = $splitLink[1]; + } + + # handle internal popups + $popupClass = ''; + $popUpIcon = ''; + + if (count($splitLink) > 2) { + + $popupClass = ' internal-popup'; + $popUpIcon = ''; + } + + + // do extra stuff to get the absolute path + if ($sameFolder == false) { + $countDirs = count(explode("../", $matches[0])); + $countDirs = $countDirs - 1; + $newPath = array_splice($pathSplit, 1, -$countDirs); + $newAbPath = implode('/', $newPath); + } + + + $urlPath = $newAbPath . '/' . $linkFile; + if (substr($urlPath, 0, 1) == '/') { + #$urlPath = '/' . $urlPath; + $urlPath = substr($urlPath, 1); + } + + $refName = ''; + + # if same document heading reference + if (substr($linkName_full, 0, 1) == '#') { + + $splitLink = explode("#", $urlPath); + $urlPath = ''; + $refName = $splitLink[1]; + $refName = '#' . $refName; + $href = 'href="'; + } else { + #$href = 'href="?link='; + $href = 'href="' . $uriPath; + } + + $urlPath = str_replace('&', '&', $urlPath); + + #$urlPath = rawurlencode($urlPath); + $urlPath = str_replace('%23', '#', $urlPath); + + $urlPath = str_replace('~', '%80', $urlPath); + $urlPath = str_replace('-', '~', $urlPath); + $urlPath = str_replace(' ', '-', $urlPath); + + + return '' . $linkName . '' . $popUpIcon; + } + , + $content + ); +} + + +// read content from file +function getContent($requestFile) +{ + global $avFiles; + global $path; + global $cleanFile; + global $rootDir; + $content = ''; + + // check if file is in array + if (in_array($requestFile, $avFiles, true)) { + $cleanFile = $requestFile; + $n = strrpos($requestFile, "/"); + $path = substr($requestFile, 0, $n); + $content .= file_get_contents($rootDir . $requestFile . '.md', true); + } + + return $content; +} + +?> \ No newline at end of file diff --git a/Perlite/perlite/favicon.ico b/Perlite/perlite/favicon.ico new file mode 100644 index 0000000..e2229c1 Binary files /dev/null and b/Perlite/perlite/favicon.ico differ diff --git a/Perlite/perlite/helper.php b/Perlite/perlite/helper.php new file mode 100644 index 0000000..170091d --- /dev/null +++ b/Perlite/perlite/helper.php @@ -0,0 +1,737 @@ +  +
+ +
 
'; + + $customSection = $customSection . ' +
' . $siteDescription . '
+
+ '; + + $customSection = $customSection . ' +
+
'; +} + + +$about = '.about'; + +// add about and index to allowed files +$aboutpath = getFileInfos($rootDir . '/' . $about)[0]; +$indexpath = getFileInfos($rootDir . '/' . $index)[0]; +$aboutpath = '/' . $aboutpath; +$indexpath = '/' . $indexpath; +array_push($avFiles, $aboutpath); +array_push($avFiles, $indexpath); + + + +// hide folders +if (strcmp($hideFolders, '')) { + + $hideFolders = explode(',', $hideFolders); +} else { + $hideFolders = array(); +} + +// path management +if (!strcmp($rootDir, "")) { + + $rootDir = getcwd(); + $vaultName = mb_basename($rootDir); + $startDir = ""; +} else { + $startDir = $rootDir; +} + +// custom sort function to prefer underscore +function cmp($a, $b) +{ + $aTemp = str_replace('_', '0', $a); + $bTemp = str_replace('_', '0', $b); + return strnatcasecmp($aTemp, $bTemp); +} + +function menu($dir, $folder = '') +{ + + global $hiddenFileAccess; + global $avFiles; + $html = ''; + // get all files from current dir + $files = glob($dir . '/*'); + + // sort array + usort($files, "cmp"); + + // iterate the folders + foreach ($files as $file) { + if (is_dir($file)) { + + // check if we want to hide the folder + if (isValidFolder($file)) { + + // split Folder Infos + $folder = getFolderInfos($file)[0]; + $folderClean = getFolderInfos($file)[1]; + $folderName = getFolderInfos($file)[2]; + $folderId = str_replace(' ', '_', $folderClean); + $folderId = preg_replace('/[^A-Za-z\-]/', '_', $folderId); + $folderId = '_' . $folderId; + + + $html .= ' + '; + } else if($hiddenFileAccess) { + // dont list the folder but add the file to the array + menu($file); + } + } + } + + // iterate the files + foreach ($files as $file) { + if (isMDFile($file)) { + + $path = getFileInfos($file)[0]; + $mdFile = getFileInfos($file)[1]; + + $path = '/' . $path; + // push the the path to the array + array_push($avFiles, $path); + + // URL Encode the Path for the JS call + $pathClean = rawurlencode($path); + $pathID = str_replace(' ', '_', $path); + $pathID = preg_replace('/[^A-Za-z0-9\-]/', '_', $path); + + + $html .= ' + + '; + } + } + + return $html; +} + +function doSearch($dir, $searchfor) +{ + + // $Parsedown = new Parsedown(); + // $Parsedown->setSafeMode(false); + + //$cleanSearch = htmlspecialchars($searchfor, ENT_QUOTES); + + $result = search($dir, $searchfor); + $content = $result; + //$content = $Parsedown->text($result); + + if ($content === '') { + $content = '
No matches found.
'; + } + + return $content; +} + +function search($dir, $searchfor, $folder = '') +{ + + $files = glob($dir . '/*'); + $result = ''; + $matches = []; + + foreach ($files as $file) { + + + // in case of folder + if (is_dir($file)) { + + if (isValidFolder($file)) { + $folder = getFolderInfos($file)[0]; + $result .= search($file, $searchfor, $folder . '/'); + } + } else { + + if (isMDFile($file)) { + + $pathClean = getFileInfos($file)[0]; + $urlPathClean = rawurlencode($pathClean); + + // get the file contents, assuming the file to be readable (and exist) + $contents = file_get_contents($file); + + $contents = $contents . $pathClean; + // escape special characters in the query + $pattern = preg_quote($searchfor, '/'); + + // check if we search for an tag, if yes first parse the document to get the front matter tags + if (substr($searchfor, 0, 1) === '#') { + $Parsedown = new PerliteParsedown(); + $Parsedown->setSafeMode(true); + $contents = $Parsedown->text($contents); + $contents = strip_tags($contents); + } + + // finalise the regular expression, matching the whole line + $pattern = "/^.*$pattern.*\$/mi"; + // search, and store all matching occurences in $matches + if (preg_match_all($pattern, $contents, $matches)) { + + $result .= ' +
+ '; + } + } + } + } + + + return $result; +} + +// check if file is a md file +function isMDFile($file) +{ + + $fileinfo = pathinfo($file); + + + if (isset($fileinfo['extension']) and strtolower($fileinfo['extension']) == 'md') { + return true; + } + + return false; +} + +function getFileInfos($file) +{ + + global $rootDir; + $mdFile = mb_basename($file); + if (strcmp(substr($mdFile, -3), ".md") === 0) { + $mdFile = substr($mdFile, 0, -3); + } + + $folderClean = str_replace('$' . $rootDir, '', '$' . pathinfo($file)["dirname"]); + + $folderClean = substr($folderClean, 1); + if (!strcmp($folderClean, '')) { + $pathClean = $mdFile; + } else { + $pathClean = $folderClean . '/' . $mdFile; + } + + return [$pathClean, $mdFile]; +} + +function mb_basename($path) +{ + if (preg_match('@^.*[\\\\/]([^\\\\/]+)$@s', $path, $matches)) { + return $matches[1]; + } else if (preg_match('@^([^\\\\/]+)$@s', $path, $matches)) { + return $matches[1]; + } + return ''; +} + +function getFolderInfos($file) +{ + + global $rootDir; + $folder = str_replace($rootDir . '/', '', $file); + $folderClean = str_replace('/', '-', $folder); + $folderClean = str_replace(' ', '-', $folderClean); + $folderName = mb_basename($file); + + return [$folder, $folderClean, $folderName]; +} + +function isValidFolder($file) +{ + + global $hideFolders; + $folderName = mb_basename($file); + + // check if folder is in array + if (in_array($folderName, $hideFolders, true)) { + return false; + } + + if (strcmp(substr($folderName, 0, 1), '.') !== 0) { + return true; + } + + return false; +} + +function isCached($jsonMetadaFile, $metadaTempFileSum) +{ + if (is_file($metadaTempFileSum)) { + $md5_envsum = file_get_contents($metadaTempFileSum); + $md5_filesum = md5_file($jsonMetadaFile); + + if ($md5_envsum === $md5_filesum) { + + return true; + } + } + + return false; +} + +function getfullGraph($rootDir) +{ + + global $tempPath; + global $vaultName; + + $jsonMetadaFile = $rootDir . '/metadata.json'; + $metadaTempFile = $tempPath . '/metadata_' . $vaultName . '.temp'; + $metadaTempFileSum = $tempPath . '/metadata_' . $vaultName . '.md5'; + + + + if (!is_file($jsonMetadaFile)) { + return; + } + + // check if metadata file has changed + if (is_file($metadaTempFile) and isCached($jsonMetadaFile, $metadaTempFileSum)) { + return file_get_contents($metadaTempFile); + } + + // metadata has changed / was not cached + $jsonData = file_get_contents($jsonMetadaFile); + + if ($jsonData === false) { + return; + } + + $json_obj = json_decode($jsonData, true); + if ($json_obj === null) { + return; + } + + $graphNodes = array(); + $graphEdges = array(); + + $currentNode = -1; + + + $nodeID = 0; + // create nodes + foreach ($json_obj as $id => $node) { + + $nodePath = removeExtension($node['relativePath']); + + // check if node from the json file really exists + if (checkArray($nodePath)) { + $thisNodeID = $nodeID; // does not get overwritten when a tag node gets created + + // add node to the graph + array_push($graphNodes, ['id' => $nodeID, 'label' => $node['fileName'], 'title' => $nodePath]); + $nodeID += 1; + + // create tag nodes if they don't already exist + if (isset($node["tags"])) { + foreach ($node["tags"] as $tag) { + $tag = "#" . $tag; + + $tagID = -1; + $tagExists = false; + foreach ($graphNodes as $graphNode) { + if ($graphNode["label"] == $tag) { + $tagID = $graphNode["id"]; + $tagExists = true; + } + } + + if (!$tagExists) { + $tagID = $nodeID; + + $tag = ["id" => $nodeID, "label" => $tag, "title" => $tag, "group" => "tag"]; + + array_push($graphNodes, $tag); + $nodeID += 1; + } + + array_push($graphEdges, ["from" => $thisNodeID, "to" => $tagID]); + } + } + } + } + $targetId = -1; + $sourceId = -1; + + // create links + foreach ($json_obj as $index => $node) { + + $nodePath = removeExtension($node['relativePath']); + + // check if node from the json file really exists + if (checkArray($nodePath)) { + + // create the linking between the nodes + if (isset($node['links'])) { + foreach ($node['links'] as $i => $links) { + + $source = ""; + $target = ""; + if (isset($node['relativePath'])) { + $tempPath = removeExtension($node['relativePath']); + if (checkArray($tempPath)) { + $source = $tempPath; + $tempPath = null; + } + } + + if (isset($links['relativePath'])) { + + $tempPath = removeExtension($links['relativePath']); + if (checkArray($tempPath)) { + $target = $tempPath; + $tempPath = null; + } + } + + if ($source !== '' && $target !== '') { + foreach ($graphNodes as $index => $element) { + $elementTitle = $element['title']; + + if (strcmp($elementTitle, $target) == 0) { + $targetId = $element['id']; + } + if (strcmp($elementTitle, $source) == 0) { + $sourceId = $element['id']; + } + $edgeExists = false; + + foreach ($graphEdges as $edge) { + if ($edge['from'] === $sourceId && $edge['to'] === $targetId) { + $edgeExists = true; + break; + } + if ($edge['to'] === $sourceId && $edge['from'] === $targetId) { + $edgeExists = true; + break; + } + } + if ($targetId !== -1 && $sourceId !== -1) { + if (!$edgeExists) { + array_push($graphEdges, ['from' => $sourceId, 'to' => $targetId]); + } + $targetId = -1; + $sourceId = -1; + } + } + } + } + } + } + } + + foreach ($graphEdges as $graphEdge) { + foreach ($graphNodes as &$graphNode) { + if ($graphEdge["from"] == $graphNode["id"] or $graphEdge["to"] == $graphNode["id"]) { + $nodeValue = 0; + + if (isset($graphNode["value"])) { + $nodeValue = $graphNode["value"]; + } + + $nodeValue += 1; + + $graphNode["value"] = $nodeValue; + } + } + } + + $myGraphNodes = json_encode($graphNodes, JSON_UNESCAPED_SLASHES); + $myGraphEdges = json_encode($graphEdges, JSON_UNESCAPED_SLASHES); + + // write tempfile and store sum + $metadaTempFile_handler = fopen($metadaTempFile, "w") or die("Unable to open file!"); + $graphHTML = ''; + fwrite($metadaTempFile_handler, $graphHTML); + fclose($metadaTempFile_handler); + + $metadaTempFile_handler = fopen($metadaTempFileSum, "w") or die("Unable to open file!"); + $md5_filesum = md5_file($jsonMetadaFile); + fwrite($metadaTempFile_handler, $md5_filesum); + fclose($metadaTempFile_handler); + + return $graphHTML; +} + +function removeExtension($path) +{ + + return substr($path, 0, -3); +} + +// check if node is in array +function checkArray($requestNode) +{ + global $avFiles; + $requestNode = '/' . $requestNode; + + if (in_array($requestNode, $avFiles, true)) { + + return true; + } + + return false; +} + + +function loadSettings($rootDir) +{ + + global $disablePopHovers; + global $showTOC; + global $showLocalGraph; + global $index; + global $siteTitle; + global $siteType; + global $siteImage; + global $siteURL; + global $siteDescription; + global $siteName; + global $siteTwitter; + global $uriPath; + + + // get themes + $themes = ""; + $folders = glob($rootDir . '/.obsidian/themes/*'); + $appearanceFile = $rootDir . '/.obsidian/appearance.json'; + $defaultTheme = ""; + + if (is_file($appearanceFile)) { + $jsonData = file_get_contents($appearanceFile); + if ($jsonData) { + $json_obj = json_decode($jsonData, true); + if ($json_obj) { + + // if theme is set, set it as default + if (array_key_exists('cssTheme', $json_obj)) { + $defaultTheme = $json_obj["cssTheme"]; + } + } + } + } + + // iterate the folders + foreach ($folders as $folder) { + if (is_dir($folder)) { + + $folderName = getFolderInfos($folder)[2]; + $folderClean = str_replace(' ', '_', $folderName); + $themePath = $uriPath . $rootDir . '/.obsidian/themes/' . $folderName . '/theme.css'; + + if ($defaultTheme === $folderName) { + + $themes .= ''; + } else { + + $themes .= ''; + } + } + } + + + // Meta Tags + $defaultSettings = + ' + + + + + + + + + + + + + '; + + // default settings + $defaultSettings .= ''; + $defaultSettings .= ''; + $defaultSettings .= ''; + $defaultSettings .= ''; + + + return $themes . $defaultSettings; +} diff --git a/Perlite/perlite/index.php b/Perlite/perlite/index.php new file mode 100644 index 0000000..8570cf1 --- /dev/null +++ b/Perlite/perlite/index.php @@ -0,0 +1,1063 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + <?php echo $title ?> + + +
+
+
+ +
+
+
+ +
+
+
+
+ + + +
+
+ + + + + +
+
+
+
+ + + + + + +
+
+
+
+ + + + + + + + +
+
+
+
+ + + + + +
+
+ + + +
+
+
+
+
+
+
+
+
+
+
+
+ + + +
+
Files
+
+
+ + +
+
+
+
+
+
+ + +
+
Search
+
+
+ + +
+
+
+
+
+ + +
+
+
+ +
+
+
+
+
+
+ + + + + + + + + + +
+
+ +
+
+
+
+
+
+
+
+
+
+
+
+ +
+ +
+ + + +
+
+
+
+ +
+ + + + + + + + + + + + + + +
+
+
+ +
+
+
+
+
+
+
+
+ + +
+
+ + + +
+
+ + +
+
+
+
+
Display +
+
+
+
+
+
+
Font size
+
+
+
+
+ +
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ +
+
+
+ + + +
+ + + + +
+
+
+
+
+
+ +
+
+
+ +
+ 0 words + 0 characters +
+
+
+ +
+
+ +
+

+

+

+

+

+

+

+

+

+
+ + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/Perlite/perlite/logo.svg b/Perlite/perlite/logo.svg new file mode 100644 index 0000000..399afa3 --- /dev/null +++ b/Perlite/perlite/logo.svg @@ -0,0 +1,44 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/Perlite/perlite/perlite.svg b/Perlite/perlite/perlite.svg new file mode 100644 index 0000000..399afa3 --- /dev/null +++ b/Perlite/perlite/perlite.svg @@ -0,0 +1,44 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/Perlite/perlite/settings.php b/Perlite/perlite/settings.php new file mode 100644 index 0000000..b1c8301 --- /dev/null +++ b/Perlite/perlite/settings.php @@ -0,0 +1,43 @@ + \ No newline at end of file diff --git a/Perlite/perlite/vendor/autoload.php b/Perlite/perlite/vendor/autoload.php new file mode 100644 index 0000000..178dcdd --- /dev/null +++ b/Perlite/perlite/vendor/autoload.php @@ -0,0 +1,25 @@ + + * Jordi Boggiano + * + * For the full copyright and license information, please view the LICENSE + * file that was distributed with this source code. + */ + +namespace Composer\Autoload; + +/** + * ClassLoader implements a PSR-0, PSR-4 and classmap class loader. + * + * $loader = new \Composer\Autoload\ClassLoader(); + * + * // register classes with namespaces + * $loader->add('Symfony\Component', __DIR__.'/component'); + * $loader->add('Symfony', __DIR__.'/framework'); + * + * // activate the autoloader + * $loader->register(); + * + * // to enable searching the include path (eg. for PEAR packages) + * $loader->setUseIncludePath(true); + * + * In this example, if you try to use a class in the Symfony\Component + * namespace or one of its children (Symfony\Component\Console for instance), + * the autoloader will first look for the class under the component/ + * directory, and it will then fallback to the framework/ directory if not + * found before giving up. + * + * This class is loosely based on the Symfony UniversalClassLoader. + * + * @author Fabien Potencier + * @author Jordi Boggiano + * @see https://www.php-fig.org/psr/psr-0/ + * @see https://www.php-fig.org/psr/psr-4/ + */ +class ClassLoader +{ + /** @var \Closure(string):void */ + private static $includeFile; + + /** @var string|null */ + private $vendorDir; + + // PSR-4 + /** + * @var array> + */ + private $prefixLengthsPsr4 = array(); + /** + * @var array> + */ + private $prefixDirsPsr4 = array(); + /** + * @var list + */ + private $fallbackDirsPsr4 = array(); + + // PSR-0 + /** + * List of PSR-0 prefixes + * + * Structured as array('F (first letter)' => array('Foo\Bar (full prefix)' => array('path', 'path2'))) + * + * @var array>> + */ + private $prefixesPsr0 = array(); + /** + * @var list + */ + private $fallbackDirsPsr0 = array(); + + /** @var bool */ + private $useIncludePath = false; + + /** + * @var array + */ + private $classMap = array(); + + /** @var bool */ + private $classMapAuthoritative = false; + + /** + * @var array + */ + private $missingClasses = array(); + + /** @var string|null */ + private $apcuPrefix; + + /** + * @var array + */ + private static $registeredLoaders = array(); + + /** + * @param string|null $vendorDir + */ + public function __construct($vendorDir = null) + { + $this->vendorDir = $vendorDir; + self::initializeIncludeClosure(); + } + + /** + * @return array> + */ + public function getPrefixes() + { + if (!empty($this->prefixesPsr0)) { + return call_user_func_array('array_merge', array_values($this->prefixesPsr0)); + } + + return array(); + } + + /** + * @return array> + */ + public function getPrefixesPsr4() + { + return $this->prefixDirsPsr4; + } + + /** + * @return list + */ + public function getFallbackDirs() + { + return $this->fallbackDirsPsr0; + } + + /** + * @return list + */ + public function getFallbackDirsPsr4() + { + return $this->fallbackDirsPsr4; + } + + /** + * @return array Array of classname => path + */ + public function getClassMap() + { + return $this->classMap; + } + + /** + * @param array $classMap Class to filename map + * + * @return void + */ + public function addClassMap(array $classMap) + { + if ($this->classMap) { + $this->classMap = array_merge($this->classMap, $classMap); + } else { + $this->classMap = $classMap; + } + } + + /** + * Registers a set of PSR-0 directories for a given prefix, either + * appending or prepending to the ones previously set for this prefix. + * + * @param string $prefix The prefix + * @param list|string $paths The PSR-0 root directories + * @param bool $prepend Whether to prepend the directories + * + * @return void + */ + public function add($prefix, $paths, $prepend = false) + { + $paths = (array) $paths; + if (!$prefix) { + if ($prepend) { + $this->fallbackDirsPsr0 = array_merge( + $paths, + $this->fallbackDirsPsr0 + ); + } else { + $this->fallbackDirsPsr0 = array_merge( + $this->fallbackDirsPsr0, + $paths + ); + } + + return; + } + + $first = $prefix[0]; + if (!isset($this->prefixesPsr0[$first][$prefix])) { + $this->prefixesPsr0[$first][$prefix] = $paths; + + return; + } + if ($prepend) { + $this->prefixesPsr0[$first][$prefix] = array_merge( + $paths, + $this->prefixesPsr0[$first][$prefix] + ); + } else { + $this->prefixesPsr0[$first][$prefix] = array_merge( + $this->prefixesPsr0[$first][$prefix], + $paths + ); + } + } + + /** + * Registers a set of PSR-4 directories for a given namespace, either + * appending or prepending to the ones previously set for this namespace. + * + * @param string $prefix The prefix/namespace, with trailing '\\' + * @param list|string $paths The PSR-4 base directories + * @param bool $prepend Whether to prepend the directories + * + * @throws \InvalidArgumentException + * + * @return void + */ + public function addPsr4($prefix, $paths, $prepend = false) + { + $paths = (array) $paths; + if (!$prefix) { + // Register directories for the root namespace. + if ($prepend) { + $this->fallbackDirsPsr4 = array_merge( + $paths, + $this->fallbackDirsPsr4 + ); + } else { + $this->fallbackDirsPsr4 = array_merge( + $this->fallbackDirsPsr4, + $paths + ); + } + } elseif (!isset($this->prefixDirsPsr4[$prefix])) { + // Register directories for a new namespace. + $length = strlen($prefix); + if ('\\' !== $prefix[$length - 1]) { + throw new \InvalidArgumentException("A non-empty PSR-4 prefix must end with a namespace separator."); + } + $this->prefixLengthsPsr4[$prefix[0]][$prefix] = $length; + $this->prefixDirsPsr4[$prefix] = $paths; + } elseif ($prepend) { + // Prepend directories for an already registered namespace. + $this->prefixDirsPsr4[$prefix] = array_merge( + $paths, + $this->prefixDirsPsr4[$prefix] + ); + } else { + // Append directories for an already registered namespace. + $this->prefixDirsPsr4[$prefix] = array_merge( + $this->prefixDirsPsr4[$prefix], + $paths + ); + } + } + + /** + * Registers a set of PSR-0 directories for a given prefix, + * replacing any others previously set for this prefix. + * + * @param string $prefix The prefix + * @param list|string $paths The PSR-0 base directories + * + * @return void + */ + public function set($prefix, $paths) + { + if (!$prefix) { + $this->fallbackDirsPsr0 = (array) $paths; + } else { + $this->prefixesPsr0[$prefix[0]][$prefix] = (array) $paths; + } + } + + /** + * Registers a set of PSR-4 directories for a given namespace, + * replacing any others previously set for this namespace. + * + * @param string $prefix The prefix/namespace, with trailing '\\' + * @param list|string $paths The PSR-4 base directories + * + * @throws \InvalidArgumentException + * + * @return void + */ + public function setPsr4($prefix, $paths) + { + if (!$prefix) { + $this->fallbackDirsPsr4 = (array) $paths; + } else { + $length = strlen($prefix); + if ('\\' !== $prefix[$length - 1]) { + throw new \InvalidArgumentException("A non-empty PSR-4 prefix must end with a namespace separator."); + } + $this->prefixLengthsPsr4[$prefix[0]][$prefix] = $length; + $this->prefixDirsPsr4[$prefix] = (array) $paths; + } + } + + /** + * Turns on searching the include path for class files. + * + * @param bool $useIncludePath + * + * @return void + */ + public function setUseIncludePath($useIncludePath) + { + $this->useIncludePath = $useIncludePath; + } + + /** + * Can be used to check if the autoloader uses the include path to check + * for classes. + * + * @return bool + */ + public function getUseIncludePath() + { + return $this->useIncludePath; + } + + /** + * Turns off searching the prefix and fallback directories for classes + * that have not been registered with the class map. + * + * @param bool $classMapAuthoritative + * + * @return void + */ + public function setClassMapAuthoritative($classMapAuthoritative) + { + $this->classMapAuthoritative = $classMapAuthoritative; + } + + /** + * Should class lookup fail if not found in the current class map? + * + * @return bool + */ + public function isClassMapAuthoritative() + { + return $this->classMapAuthoritative; + } + + /** + * APCu prefix to use to cache found/not-found classes, if the extension is enabled. + * + * @param string|null $apcuPrefix + * + * @return void + */ + public function setApcuPrefix($apcuPrefix) + { + $this->apcuPrefix = function_exists('apcu_fetch') && filter_var(ini_get('apc.enabled'), FILTER_VALIDATE_BOOLEAN) ? $apcuPrefix : null; + } + + /** + * The APCu prefix in use, or null if APCu caching is not enabled. + * + * @return string|null + */ + public function getApcuPrefix() + { + return $this->apcuPrefix; + } + + /** + * Registers this instance as an autoloader. + * + * @param bool $prepend Whether to prepend the autoloader or not + * + * @return void + */ + public function register($prepend = false) + { + spl_autoload_register(array($this, 'loadClass'), true, $prepend); + + if (null === $this->vendorDir) { + return; + } + + if ($prepend) { + self::$registeredLoaders = array($this->vendorDir => $this) + self::$registeredLoaders; + } else { + unset(self::$registeredLoaders[$this->vendorDir]); + self::$registeredLoaders[$this->vendorDir] = $this; + } + } + + /** + * Unregisters this instance as an autoloader. + * + * @return void + */ + public function unregister() + { + spl_autoload_unregister(array($this, 'loadClass')); + + if (null !== $this->vendorDir) { + unset(self::$registeredLoaders[$this->vendorDir]); + } + } + + /** + * Loads the given class or interface. + * + * @param string $class The name of the class + * @return true|null True if loaded, null otherwise + */ + public function loadClass($class) + { + if ($file = $this->findFile($class)) { + $includeFile = self::$includeFile; + $includeFile($file); + + return true; + } + + return null; + } + + /** + * Finds the path to the file where the class is defined. + * + * @param string $class The name of the class + * + * @return string|false The path if found, false otherwise + */ + public function findFile($class) + { + // class map lookup + if (isset($this->classMap[$class])) { + return $this->classMap[$class]; + } + if ($this->classMapAuthoritative || isset($this->missingClasses[$class])) { + return false; + } + if (null !== $this->apcuPrefix) { + $file = apcu_fetch($this->apcuPrefix.$class, $hit); + if ($hit) { + return $file; + } + } + + $file = $this->findFileWithExtension($class, '.php'); + + // Search for Hack files if we are running on HHVM + if (false === $file && defined('HHVM_VERSION')) { + $file = $this->findFileWithExtension($class, '.hh'); + } + + if (null !== $this->apcuPrefix) { + apcu_add($this->apcuPrefix.$class, $file); + } + + if (false === $file) { + // Remember that this class does not exist. + $this->missingClasses[$class] = true; + } + + return $file; + } + + /** + * Returns the currently registered loaders keyed by their corresponding vendor directories. + * + * @return array + */ + public static function getRegisteredLoaders() + { + return self::$registeredLoaders; + } + + /** + * @param string $class + * @param string $ext + * @return string|false + */ + private function findFileWithExtension($class, $ext) + { + // PSR-4 lookup + $logicalPathPsr4 = strtr($class, '\\', DIRECTORY_SEPARATOR) . $ext; + + $first = $class[0]; + if (isset($this->prefixLengthsPsr4[$first])) { + $subPath = $class; + while (false !== $lastPos = strrpos($subPath, '\\')) { + $subPath = substr($subPath, 0, $lastPos); + $search = $subPath . '\\'; + if (isset($this->prefixDirsPsr4[$search])) { + $pathEnd = DIRECTORY_SEPARATOR . substr($logicalPathPsr4, $lastPos + 1); + foreach ($this->prefixDirsPsr4[$search] as $dir) { + if (file_exists($file = $dir . $pathEnd)) { + return $file; + } + } + } + } + } + + // PSR-4 fallback dirs + foreach ($this->fallbackDirsPsr4 as $dir) { + if (file_exists($file = $dir . DIRECTORY_SEPARATOR . $logicalPathPsr4)) { + return $file; + } + } + + // PSR-0 lookup + if (false !== $pos = strrpos($class, '\\')) { + // namespaced class name + $logicalPathPsr0 = substr($logicalPathPsr4, 0, $pos + 1) + . strtr(substr($logicalPathPsr4, $pos + 1), '_', DIRECTORY_SEPARATOR); + } else { + // PEAR-like class name + $logicalPathPsr0 = strtr($class, '_', DIRECTORY_SEPARATOR) . $ext; + } + + if (isset($this->prefixesPsr0[$first])) { + foreach ($this->prefixesPsr0[$first] as $prefix => $dirs) { + if (0 === strpos($class, $prefix)) { + foreach ($dirs as $dir) { + if (file_exists($file = $dir . DIRECTORY_SEPARATOR . $logicalPathPsr0)) { + return $file; + } + } + } + } + } + + // PSR-0 fallback dirs + foreach ($this->fallbackDirsPsr0 as $dir) { + if (file_exists($file = $dir . DIRECTORY_SEPARATOR . $logicalPathPsr0)) { + return $file; + } + } + + // PSR-0 include paths. + if ($this->useIncludePath && $file = stream_resolve_include_path($logicalPathPsr0)) { + return $file; + } + + return false; + } + + /** + * @return void + */ + private static function initializeIncludeClosure() + { + if (self::$includeFile !== null) { + return; + } + + /** + * Scope isolated include. + * + * Prevents access to $this/self from included files. + * + * @param string $file + * @return void + */ + self::$includeFile = \Closure::bind(static function($file) { + include $file; + }, null, null); + } +} diff --git a/Perlite/perlite/vendor/composer/InstalledVersions.php b/Perlite/perlite/vendor/composer/InstalledVersions.php new file mode 100644 index 0000000..51e734a --- /dev/null +++ b/Perlite/perlite/vendor/composer/InstalledVersions.php @@ -0,0 +1,359 @@ + + * Jordi Boggiano + * + * For the full copyright and license information, please view the LICENSE + * file that was distributed with this source code. + */ + +namespace Composer; + +use Composer\Autoload\ClassLoader; +use Composer\Semver\VersionParser; + +/** + * This class is copied in every Composer installed project and available to all + * + * See also https://getcomposer.org/doc/07-runtime.md#installed-versions + * + * To require its presence, you can require `composer-runtime-api ^2.0` + * + * @final + */ +class InstalledVersions +{ + /** + * @var mixed[]|null + * @psalm-var array{root: array{name: string, pretty_version: string, version: string, reference: string|null, type: string, install_path: string, aliases: string[], dev: bool}, versions: array}|array{}|null + */ + private static $installed; + + /** + * @var bool|null + */ + private static $canGetVendors; + + /** + * @var array[] + * @psalm-var array}> + */ + private static $installedByVendor = array(); + + /** + * Returns a list of all package names which are present, either by being installed, replaced or provided + * + * @return string[] + * @psalm-return list + */ + public static function getInstalledPackages() + { + $packages = array(); + foreach (self::getInstalled() as $installed) { + $packages[] = array_keys($installed['versions']); + } + + if (1 === \count($packages)) { + return $packages[0]; + } + + return array_keys(array_flip(\call_user_func_array('array_merge', $packages))); + } + + /** + * Returns a list of all package names with a specific type e.g. 'library' + * + * @param string $type + * @return string[] + * @psalm-return list + */ + public static function getInstalledPackagesByType($type) + { + $packagesByType = array(); + + foreach (self::getInstalled() as $installed) { + foreach ($installed['versions'] as $name => $package) { + if (isset($package['type']) && $package['type'] === $type) { + $packagesByType[] = $name; + } + } + } + + return $packagesByType; + } + + /** + * Checks whether the given package is installed + * + * This also returns true if the package name is provided or replaced by another package + * + * @param string $packageName + * @param bool $includeDevRequirements + * @return bool + */ + public static function isInstalled($packageName, $includeDevRequirements = true) + { + foreach (self::getInstalled() as $installed) { + if (isset($installed['versions'][$packageName])) { + return $includeDevRequirements || !isset($installed['versions'][$packageName]['dev_requirement']) || $installed['versions'][$packageName]['dev_requirement'] === false; + } + } + + return false; + } + + /** + * Checks whether the given package satisfies a version constraint + * + * e.g. If you want to know whether version 2.3+ of package foo/bar is installed, you would call: + * + * Composer\InstalledVersions::satisfies(new VersionParser, 'foo/bar', '^2.3') + * + * @param VersionParser $parser Install composer/semver to have access to this class and functionality + * @param string $packageName + * @param string|null $constraint A version constraint to check for, if you pass one you have to make sure composer/semver is required by your package + * @return bool + */ + public static function satisfies(VersionParser $parser, $packageName, $constraint) + { + $constraint = $parser->parseConstraints((string) $constraint); + $provided = $parser->parseConstraints(self::getVersionRanges($packageName)); + + return $provided->matches($constraint); + } + + /** + * Returns a version constraint representing all the range(s) which are installed for a given package + * + * It is easier to use this via isInstalled() with the $constraint argument if you need to check + * whether a given version of a package is installed, and not just whether it exists + * + * @param string $packageName + * @return string Version constraint usable with composer/semver + */ + public static function getVersionRanges($packageName) + { + foreach (self::getInstalled() as $installed) { + if (!isset($installed['versions'][$packageName])) { + continue; + } + + $ranges = array(); + if (isset($installed['versions'][$packageName]['pretty_version'])) { + $ranges[] = $installed['versions'][$packageName]['pretty_version']; + } + if (array_key_exists('aliases', $installed['versions'][$packageName])) { + $ranges = array_merge($ranges, $installed['versions'][$packageName]['aliases']); + } + if (array_key_exists('replaced', $installed['versions'][$packageName])) { + $ranges = array_merge($ranges, $installed['versions'][$packageName]['replaced']); + } + if (array_key_exists('provided', $installed['versions'][$packageName])) { + $ranges = array_merge($ranges, $installed['versions'][$packageName]['provided']); + } + + return implode(' || ', $ranges); + } + + throw new \OutOfBoundsException('Package "' . $packageName . '" is not installed'); + } + + /** + * @param string $packageName + * @return string|null If the package is being replaced or provided but is not really installed, null will be returned as version, use satisfies or getVersionRanges if you need to know if a given version is present + */ + public static function getVersion($packageName) + { + foreach (self::getInstalled() as $installed) { + if (!isset($installed['versions'][$packageName])) { + continue; + } + + if (!isset($installed['versions'][$packageName]['version'])) { + return null; + } + + return $installed['versions'][$packageName]['version']; + } + + throw new \OutOfBoundsException('Package "' . $packageName . '" is not installed'); + } + + /** + * @param string $packageName + * @return string|null If the package is being replaced or provided but is not really installed, null will be returned as version, use satisfies or getVersionRanges if you need to know if a given version is present + */ + public static function getPrettyVersion($packageName) + { + foreach (self::getInstalled() as $installed) { + if (!isset($installed['versions'][$packageName])) { + continue; + } + + if (!isset($installed['versions'][$packageName]['pretty_version'])) { + return null; + } + + return $installed['versions'][$packageName]['pretty_version']; + } + + throw new \OutOfBoundsException('Package "' . $packageName . '" is not installed'); + } + + /** + * @param string $packageName + * @return string|null If the package is being replaced or provided but is not really installed, null will be returned as reference + */ + public static function getReference($packageName) + { + foreach (self::getInstalled() as $installed) { + if (!isset($installed['versions'][$packageName])) { + continue; + } + + if (!isset($installed['versions'][$packageName]['reference'])) { + return null; + } + + return $installed['versions'][$packageName]['reference']; + } + + throw new \OutOfBoundsException('Package "' . $packageName . '" is not installed'); + } + + /** + * @param string $packageName + * @return string|null If the package is being replaced or provided but is not really installed, null will be returned as install path. Packages of type metapackages also have a null install path. + */ + public static function getInstallPath($packageName) + { + foreach (self::getInstalled() as $installed) { + if (!isset($installed['versions'][$packageName])) { + continue; + } + + return isset($installed['versions'][$packageName]['install_path']) ? $installed['versions'][$packageName]['install_path'] : null; + } + + throw new \OutOfBoundsException('Package "' . $packageName . '" is not installed'); + } + + /** + * @return array + * @psalm-return array{name: string, pretty_version: string, version: string, reference: string|null, type: string, install_path: string, aliases: string[], dev: bool} + */ + public static function getRootPackage() + { + $installed = self::getInstalled(); + + return $installed[0]['root']; + } + + /** + * Returns the raw installed.php data for custom implementations + * + * @deprecated Use getAllRawData() instead which returns all datasets for all autoloaders present in the process. getRawData only returns the first dataset loaded, which may not be what you expect. + * @return array[] + * @psalm-return array{root: array{name: string, pretty_version: string, version: string, reference: string|null, type: string, install_path: string, aliases: string[], dev: bool}, versions: array} + */ + public static function getRawData() + { + @trigger_error('getRawData only returns the first dataset loaded, which may not be what you expect. Use getAllRawData() instead which returns all datasets for all autoloaders present in the process.', E_USER_DEPRECATED); + + if (null === self::$installed) { + // only require the installed.php file if this file is loaded from its dumped location, + // and not from its source location in the composer/composer package, see https://github.com/composer/composer/issues/9937 + if (substr(__DIR__, -8, 1) !== 'C') { + self::$installed = include __DIR__ . '/installed.php'; + } else { + self::$installed = array(); + } + } + + return self::$installed; + } + + /** + * Returns the raw data of all installed.php which are currently loaded for custom implementations + * + * @return array[] + * @psalm-return list}> + */ + public static function getAllRawData() + { + return self::getInstalled(); + } + + /** + * Lets you reload the static array from another file + * + * This is only useful for complex integrations in which a project needs to use + * this class but then also needs to execute another project's autoloader in process, + * and wants to ensure both projects have access to their version of installed.php. + * + * A typical case would be PHPUnit, where it would need to make sure it reads all + * the data it needs from this class, then call reload() with + * `require $CWD/vendor/composer/installed.php` (or similar) as input to make sure + * the project in which it runs can then also use this class safely, without + * interference between PHPUnit's dependencies and the project's dependencies. + * + * @param array[] $data A vendor/composer/installed.php data set + * @return void + * + * @psalm-param array{root: array{name: string, pretty_version: string, version: string, reference: string|null, type: string, install_path: string, aliases: string[], dev: bool}, versions: array} $data + */ + public static function reload($data) + { + self::$installed = $data; + self::$installedByVendor = array(); + } + + /** + * @return array[] + * @psalm-return list}> + */ + private static function getInstalled() + { + if (null === self::$canGetVendors) { + self::$canGetVendors = method_exists('Composer\Autoload\ClassLoader', 'getRegisteredLoaders'); + } + + $installed = array(); + + if (self::$canGetVendors) { + foreach (ClassLoader::getRegisteredLoaders() as $vendorDir => $loader) { + if (isset(self::$installedByVendor[$vendorDir])) { + $installed[] = self::$installedByVendor[$vendorDir]; + } elseif (is_file($vendorDir.'/composer/installed.php')) { + /** @var array{root: array{name: string, pretty_version: string, version: string, reference: string|null, type: string, install_path: string, aliases: string[], dev: bool}, versions: array} $required */ + $required = require $vendorDir.'/composer/installed.php'; + $installed[] = self::$installedByVendor[$vendorDir] = $required; + if (null === self::$installed && strtr($vendorDir.'/composer', '\\', '/') === strtr(__DIR__, '\\', '/')) { + self::$installed = $installed[count($installed) - 1]; + } + } + } + } + + if (null === self::$installed) { + // only require the installed.php file if this file is loaded from its dumped location, + // and not from its source location in the composer/composer package, see https://github.com/composer/composer/issues/9937 + if (substr(__DIR__, -8, 1) !== 'C') { + /** @var array{root: array{name: string, pretty_version: string, version: string, reference: string|null, type: string, install_path: string, aliases: string[], dev: bool}, versions: array} $required */ + $required = require __DIR__ . '/installed.php'; + self::$installed = $required; + } else { + self::$installed = array(); + } + } + + if (self::$installed !== array()) { + $installed[] = self::$installed; + } + + return $installed; + } +} diff --git a/Perlite/perlite/vendor/composer/LICENSE b/Perlite/perlite/vendor/composer/LICENSE new file mode 100644 index 0000000..f27399a --- /dev/null +++ b/Perlite/perlite/vendor/composer/LICENSE @@ -0,0 +1,21 @@ + +Copyright (c) Nils Adermann, Jordi Boggiano + +Permission is hereby granted, free of charge, to any person obtaining a copy +of this software and associated documentation files (the "Software"), to deal +in the Software without restriction, including without limitation the rights +to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +copies of the Software, and to permit persons to whom the Software is furnished +to do so, subject to the following conditions: + +The above copyright notice and this permission notice shall be included in all +copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN +THE SOFTWARE. + diff --git a/Perlite/perlite/vendor/composer/autoload_classmap.php b/Perlite/perlite/vendor/composer/autoload_classmap.php new file mode 100644 index 0000000..0fb0a2c --- /dev/null +++ b/Perlite/perlite/vendor/composer/autoload_classmap.php @@ -0,0 +1,10 @@ + $vendorDir . '/composer/InstalledVersions.php', +); diff --git a/Perlite/perlite/vendor/composer/autoload_namespaces.php b/Perlite/perlite/vendor/composer/autoload_namespaces.php new file mode 100644 index 0000000..20c027f --- /dev/null +++ b/Perlite/perlite/vendor/composer/autoload_namespaces.php @@ -0,0 +1,10 @@ + array($vendorDir . '/erusev/parsedown'), +); diff --git a/Perlite/perlite/vendor/composer/autoload_psr4.php b/Perlite/perlite/vendor/composer/autoload_psr4.php new file mode 100644 index 0000000..0fd2538 --- /dev/null +++ b/Perlite/perlite/vendor/composer/autoload_psr4.php @@ -0,0 +1,10 @@ + array($baseDir . '/.src'), +); diff --git a/Perlite/perlite/vendor/composer/autoload_real.php b/Perlite/perlite/vendor/composer/autoload_real.php new file mode 100644 index 0000000..f16ff66 --- /dev/null +++ b/Perlite/perlite/vendor/composer/autoload_real.php @@ -0,0 +1,38 @@ +register(true); + + return $loader; + } +} diff --git a/Perlite/perlite/vendor/composer/autoload_static.php b/Perlite/perlite/vendor/composer/autoload_static.php new file mode 100644 index 0000000..04ff4ad --- /dev/null +++ b/Perlite/perlite/vendor/composer/autoload_static.php @@ -0,0 +1,47 @@ + + array ( + 'Perlite\\' => 8, + ), + ); + + public static $prefixDirsPsr4 = array ( + 'Perlite\\' => + array ( + 0 => __DIR__ . '/../..' . '/.src', + ), + ); + + public static $prefixesPsr0 = array ( + 'P' => + array ( + 'Parsedown' => + array ( + 0 => __DIR__ . '/..' . '/erusev/parsedown', + ), + ), + ); + + public static $classMap = array ( + 'Composer\\InstalledVersions' => __DIR__ . '/..' . '/composer/InstalledVersions.php', + ); + + public static function getInitializer(ClassLoader $loader) + { + return \Closure::bind(function () use ($loader) { + $loader->prefixLengthsPsr4 = ComposerStaticInit49760f5a39ccaa8600b88f06b4cfa48e::$prefixLengthsPsr4; + $loader->prefixDirsPsr4 = ComposerStaticInit49760f5a39ccaa8600b88f06b4cfa48e::$prefixDirsPsr4; + $loader->prefixesPsr0 = ComposerStaticInit49760f5a39ccaa8600b88f06b4cfa48e::$prefixesPsr0; + $loader->classMap = ComposerStaticInit49760f5a39ccaa8600b88f06b4cfa48e::$classMap; + + }, null, ClassLoader::class); + } +} diff --git a/Perlite/perlite/vendor/composer/installed.json b/Perlite/perlite/vendor/composer/installed.json new file mode 100644 index 0000000..cb6fbe8 --- /dev/null +++ b/Perlite/perlite/vendor/composer/installed.json @@ -0,0 +1,59 @@ +{ + "packages": [ + { + "name": "erusev/parsedown", + "version": "1.7.4", + "version_normalized": "1.7.4.0", + "source": { + "type": "git", + "url": "https://github.com/erusev/parsedown.git", + "reference": "cb17b6477dfff935958ba01325f2e8a2bfa6dab3" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/erusev/parsedown/zipball/cb17b6477dfff935958ba01325f2e8a2bfa6dab3", + "reference": "cb17b6477dfff935958ba01325f2e8a2bfa6dab3", + "shasum": "" + }, + "require": { + "ext-mbstring": "*", + "php": ">=5.3.0" + }, + "require-dev": { + "phpunit/phpunit": "^4.8.35" + }, + "time": "2019-12-30T22:54:17+00:00", + "type": "library", + "installation-source": "dist", + "autoload": { + "psr-0": { + "Parsedown": "" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Emanuil Rusev", + "email": "hello@erusev.com", + "homepage": "http://erusev.com" + } + ], + "description": "Parser for Markdown.", + "homepage": "http://parsedown.org", + "keywords": [ + "markdown", + "parser" + ], + "support": { + "issues": "https://github.com/erusev/parsedown/issues", + "source": "https://github.com/erusev/parsedown/tree/1.7.x" + }, + "install-path": "../erusev/parsedown" + } + ], + "dev": true, + "dev-package-names": [] +} diff --git a/Perlite/perlite/vendor/composer/installed.php b/Perlite/perlite/vendor/composer/installed.php new file mode 100644 index 0000000..e1e1027 --- /dev/null +++ b/Perlite/perlite/vendor/composer/installed.php @@ -0,0 +1,32 @@ + array( + 'name' => 'secure-77/perlite', + 'pretty_version' => '1.6.0', + 'version' => '1.6.0.0', + 'reference' => NULL, + 'type' => 'project', + 'install_path' => __DIR__ . '/../../', + 'aliases' => array(), + 'dev' => true, + ), + 'versions' => array( + 'erusev/parsedown' => array( + 'pretty_version' => '1.7.4', + 'version' => '1.7.4.0', + 'reference' => 'cb17b6477dfff935958ba01325f2e8a2bfa6dab3', + 'type' => 'library', + 'install_path' => __DIR__ . '/../erusev/parsedown', + 'aliases' => array(), + 'dev_requirement' => false, + ), + 'secure-77/perlite' => array( + 'pretty_version' => '1.6.0', + 'version' => '1.6.0.0', + 'reference' => NULL, + 'type' => 'project', + 'install_path' => __DIR__ . '/../../', + 'aliases' => array(), + 'dev_requirement' => false, + ), + ), +); diff --git a/Perlite/perlite/vendor/composer/platform_check.php b/Perlite/perlite/vendor/composer/platform_check.php new file mode 100644 index 0000000..7621d4f --- /dev/null +++ b/Perlite/perlite/vendor/composer/platform_check.php @@ -0,0 +1,26 @@ += 50300)) { + $issues[] = 'Your Composer dependencies require a PHP version ">= 5.3.0". You are running ' . PHP_VERSION . '.'; +} + +if ($issues) { + if (!headers_sent()) { + header('HTTP/1.1 500 Internal Server Error'); + } + if (!ini_get('display_errors')) { + if (PHP_SAPI === 'cli' || PHP_SAPI === 'phpdbg') { + fwrite(STDERR, 'Composer detected issues in your platform:' . PHP_EOL.PHP_EOL . implode(PHP_EOL, $issues) . PHP_EOL.PHP_EOL); + } elseif (!headers_sent()) { + echo 'Composer detected issues in your platform:' . PHP_EOL.PHP_EOL . str_replace('You are running '.PHP_VERSION.'.', '', implode(PHP_EOL, $issues)) . PHP_EOL.PHP_EOL; + } + } + trigger_error( + 'Composer detected issues in your platform: ' . implode(' ', $issues), + E_USER_ERROR + ); +} diff --git a/Perlite/perlite/vendor/erusev/parsedown/LICENSE.txt b/Perlite/perlite/vendor/erusev/parsedown/LICENSE.txt new file mode 100644 index 0000000..8e7c764 --- /dev/null +++ b/Perlite/perlite/vendor/erusev/parsedown/LICENSE.txt @@ -0,0 +1,20 @@ +The MIT License (MIT) + +Copyright (c) 2013-2018 Emanuil Rusev, erusev.com + +Permission is hereby granted, free of charge, to any person obtaining a copy of +this software and associated documentation files (the "Software"), to deal in +the Software without restriction, including without limitation the rights to +use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of +the Software, and to permit persons to whom the Software is furnished to do so, +subject to the following conditions: + +The above copyright notice and this permission notice shall be included in all +copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS +FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR +COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER +IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN +CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. diff --git a/Perlite/perlite/vendor/erusev/parsedown/Parsedown.php b/Perlite/perlite/vendor/erusev/parsedown/Parsedown.php new file mode 100644 index 0000000..1b9d6d5 --- /dev/null +++ b/Perlite/perlite/vendor/erusev/parsedown/Parsedown.php @@ -0,0 +1,1712 @@ +DefinitionData = array(); + + # standardize line breaks + $text = str_replace(array("\r\n", "\r"), "\n", $text); + + # remove surrounding line breaks + $text = trim($text, "\n"); + + # split text into lines + $lines = explode("\n", $text); + + # iterate through lines to identify blocks + $markup = $this->lines($lines); + + # trim line breaks + $markup = trim($markup, "\n"); + + return $markup; + } + + # + # Setters + # + + function setBreaksEnabled($breaksEnabled) + { + $this->breaksEnabled = $breaksEnabled; + + return $this; + } + + protected $breaksEnabled; + + function setMarkupEscaped($markupEscaped) + { + $this->markupEscaped = $markupEscaped; + + return $this; + } + + protected $markupEscaped; + + function setUrlsLinked($urlsLinked) + { + $this->urlsLinked = $urlsLinked; + + return $this; + } + + protected $urlsLinked = true; + + function setSafeMode($safeMode) + { + $this->safeMode = (bool) $safeMode; + + return $this; + } + + protected $safeMode; + + protected $safeLinksWhitelist = array( + 'http://', + 'https://', + 'ftp://', + 'ftps://', + 'mailto:', + 'data:image/png;base64,', + 'data:image/gif;base64,', + 'data:image/jpeg;base64,', + 'irc:', + 'ircs:', + 'git:', + 'ssh:', + 'news:', + 'steam:', + ); + + # + # Lines + # + + protected $BlockTypes = array( + '#' => array('Header'), + '*' => array('Rule', 'List'), + '+' => array('List'), + '-' => array('SetextHeader', 'Table', 'Rule', 'List'), + '0' => array('List'), + '1' => array('List'), + '2' => array('List'), + '3' => array('List'), + '4' => array('List'), + '5' => array('List'), + '6' => array('List'), + '7' => array('List'), + '8' => array('List'), + '9' => array('List'), + ':' => array('Table'), + '<' => array('Comment', 'Markup'), + '=' => array('SetextHeader'), + '>' => array('Quote'), + '[' => array('Reference'), + '_' => array('Rule'), + '`' => array('FencedCode'), + '|' => array('Table'), + '~' => array('FencedCode'), + ); + + # ~ + + protected $unmarkedBlockTypes = array( + 'Code', + ); + + # + # Blocks + # + + protected function lines(array $lines) + { + $CurrentBlock = null; + + foreach ($lines as $line) + { + if (chop($line) === '') + { + if (isset($CurrentBlock)) + { + $CurrentBlock['interrupted'] = true; + } + + continue; + } + + if (strpos($line, "\t") !== false) + { + $parts = explode("\t", $line); + + $line = $parts[0]; + + unset($parts[0]); + + foreach ($parts as $part) + { + $shortage = 4 - mb_strlen($line, 'utf-8') % 4; + + $line .= str_repeat(' ', $shortage); + $line .= $part; + } + } + + $indent = 0; + + while (isset($line[$indent]) and $line[$indent] === ' ') + { + $indent ++; + } + + $text = $indent > 0 ? substr($line, $indent) : $line; + + # ~ + + $Line = array('body' => $line, 'indent' => $indent, 'text' => $text); + + # ~ + + if (isset($CurrentBlock['continuable'])) + { + $Block = $this->{'block'.$CurrentBlock['type'].'Continue'}($Line, $CurrentBlock); + + if (isset($Block)) + { + $CurrentBlock = $Block; + + continue; + } + else + { + if ($this->isBlockCompletable($CurrentBlock['type'])) + { + $CurrentBlock = $this->{'block'.$CurrentBlock['type'].'Complete'}($CurrentBlock); + } + } + } + + # ~ + + $marker = $text[0]; + + # ~ + + $blockTypes = $this->unmarkedBlockTypes; + + if (isset($this->BlockTypes[$marker])) + { + foreach ($this->BlockTypes[$marker] as $blockType) + { + $blockTypes []= $blockType; + } + } + + # + # ~ + + foreach ($blockTypes as $blockType) + { + $Block = $this->{'block'.$blockType}($Line, $CurrentBlock); + + if (isset($Block)) + { + $Block['type'] = $blockType; + + if ( ! isset($Block['identified'])) + { + $Blocks []= $CurrentBlock; + + $Block['identified'] = true; + } + + if ($this->isBlockContinuable($blockType)) + { + $Block['continuable'] = true; + } + + $CurrentBlock = $Block; + + continue 2; + } + } + + # ~ + + if (isset($CurrentBlock) and ! isset($CurrentBlock['type']) and ! isset($CurrentBlock['interrupted'])) + { + $CurrentBlock['element']['text'] .= "\n".$text; + } + else + { + $Blocks []= $CurrentBlock; + + $CurrentBlock = $this->paragraph($Line); + + $CurrentBlock['identified'] = true; + } + } + + # ~ + + if (isset($CurrentBlock['continuable']) and $this->isBlockCompletable($CurrentBlock['type'])) + { + $CurrentBlock = $this->{'block'.$CurrentBlock['type'].'Complete'}($CurrentBlock); + } + + # ~ + + $Blocks []= $CurrentBlock; + + unset($Blocks[0]); + + # ~ + + $markup = ''; + + foreach ($Blocks as $Block) + { + if (isset($Block['hidden'])) + { + continue; + } + + $markup .= "\n"; + $markup .= isset($Block['markup']) ? $Block['markup'] : $this->element($Block['element']); + } + + $markup .= "\n"; + + # ~ + + return $markup; + } + + protected function isBlockContinuable($Type) + { + return method_exists($this, 'block'.$Type.'Continue'); + } + + protected function isBlockCompletable($Type) + { + return method_exists($this, 'block'.$Type.'Complete'); + } + + # + # Code + + protected function blockCode($Line, $Block = null) + { + if (isset($Block) and ! isset($Block['type']) and ! isset($Block['interrupted'])) + { + return; + } + + if ($Line['indent'] >= 4) + { + $text = substr($Line['body'], 4); + + $Block = array( + 'element' => array( + 'name' => 'pre', + 'handler' => 'element', + 'text' => array( + 'name' => 'code', + 'text' => $text, + ), + ), + ); + + return $Block; + } + } + + protected function blockCodeContinue($Line, $Block) + { + if ($Line['indent'] >= 4) + { + if (isset($Block['interrupted'])) + { + $Block['element']['text']['text'] .= "\n"; + + unset($Block['interrupted']); + } + + $Block['element']['text']['text'] .= "\n"; + + $text = substr($Line['body'], 4); + + $Block['element']['text']['text'] .= $text; + + return $Block; + } + } + + protected function blockCodeComplete($Block) + { + $text = $Block['element']['text']['text']; + + $Block['element']['text']['text'] = $text; + + return $Block; + } + + # + # Comment + + protected function blockComment($Line) + { + if ($this->markupEscaped or $this->safeMode) + { + return; + } + + if (isset($Line['text'][3]) and $Line['text'][3] === '-' and $Line['text'][2] === '-' and $Line['text'][1] === '!') + { + $Block = array( + 'markup' => $Line['body'], + ); + + if (preg_match('/-->$/', $Line['text'])) + { + $Block['closed'] = true; + } + + return $Block; + } + } + + protected function blockCommentContinue($Line, array $Block) + { + if (isset($Block['closed'])) + { + return; + } + + $Block['markup'] .= "\n" . $Line['body']; + + if (preg_match('/-->$/', $Line['text'])) + { + $Block['closed'] = true; + } + + return $Block; + } + + # + # Fenced Code + + protected function blockFencedCode($Line) + { + if (preg_match('/^['.$Line['text'][0].']{3,}[ ]*([^`]+)?[ ]*$/', $Line['text'], $matches)) + { + $Element = array( + 'name' => 'code', + 'text' => '', + ); + + if (isset($matches[1])) + { + /** + * https://www.w3.org/TR/2011/WD-html5-20110525/elements.html#classes + * Every HTML element may have a class attribute specified. + * The attribute, if specified, must have a value that is a set + * of space-separated tokens representing the various classes + * that the element belongs to. + * [...] + * The space characters, for the purposes of this specification, + * are U+0020 SPACE, U+0009 CHARACTER TABULATION (tab), + * U+000A LINE FEED (LF), U+000C FORM FEED (FF), and + * U+000D CARRIAGE RETURN (CR). + */ + $language = substr($matches[1], 0, strcspn($matches[1], " \t\n\f\r")); + + $class = 'language-'.$language; + + $Element['attributes'] = array( + 'class' => $class, + ); + } + + $Block = array( + 'char' => $Line['text'][0], + 'element' => array( + 'name' => 'pre', + 'handler' => 'element', + 'text' => $Element, + ), + ); + + return $Block; + } + } + + protected function blockFencedCodeContinue($Line, $Block) + { + if (isset($Block['complete'])) + { + return; + } + + if (isset($Block['interrupted'])) + { + $Block['element']['text']['text'] .= "\n"; + + unset($Block['interrupted']); + } + + if (preg_match('/^'.$Block['char'].'{3,}[ ]*$/', $Line['text'])) + { + $Block['element']['text']['text'] = substr($Block['element']['text']['text'], 1); + + $Block['complete'] = true; + + return $Block; + } + + $Block['element']['text']['text'] .= "\n".$Line['body']; + + return $Block; + } + + protected function blockFencedCodeComplete($Block) + { + $text = $Block['element']['text']['text']; + + $Block['element']['text']['text'] = $text; + + return $Block; + } + + # + # Header + + protected function blockHeader($Line) + { + if (isset($Line['text'][1])) + { + $level = 1; + + while (isset($Line['text'][$level]) and $Line['text'][$level] === '#') + { + $level ++; + } + + if ($level > 6) + { + return; + } + + $text = trim($Line['text'], '# '); + + $Block = array( + 'element' => array( + 'name' => 'h' . min(6, $level), + 'text' => $text, + 'handler' => 'line', + ), + ); + + return $Block; + } + } + + # + # List + + protected function blockList($Line) + { + list($name, $pattern) = $Line['text'][0] <= '-' ? array('ul', '[*+-]') : array('ol', '[0-9]+[.]'); + + if (preg_match('/^('.$pattern.'[ ]+)(.*)/', $Line['text'], $matches)) + { + $Block = array( + 'indent' => $Line['indent'], + 'pattern' => $pattern, + 'element' => array( + 'name' => $name, + 'handler' => 'elements', + ), + ); + + if($name === 'ol') + { + $listStart = stristr($matches[0], '.', true); + + if($listStart !== '1') + { + $Block['element']['attributes'] = array('start' => $listStart); + } + } + + $Block['li'] = array( + 'name' => 'li', + 'handler' => 'li', + 'text' => array( + $matches[2], + ), + ); + + $Block['element']['text'] []= & $Block['li']; + + return $Block; + } + } + + protected function blockListContinue($Line, array $Block) + { + if ($Block['indent'] === $Line['indent'] and preg_match('/^'.$Block['pattern'].'(?:[ ]+(.*)|$)/', $Line['text'], $matches)) + { + if (isset($Block['interrupted'])) + { + $Block['li']['text'] []= ''; + + $Block['loose'] = true; + + unset($Block['interrupted']); + } + + unset($Block['li']); + + $text = isset($matches[1]) ? $matches[1] : ''; + + $Block['li'] = array( + 'name' => 'li', + 'handler' => 'li', + 'text' => array( + $text, + ), + ); + + $Block['element']['text'] []= & $Block['li']; + + return $Block; + } + + if ($Line['text'][0] === '[' and $this->blockReference($Line)) + { + return $Block; + } + + if ( ! isset($Block['interrupted'])) + { + $text = preg_replace('/^[ ]{0,4}/', '', $Line['body']); + + $Block['li']['text'] []= $text; + + return $Block; + } + + if ($Line['indent'] > 0) + { + $Block['li']['text'] []= ''; + + $text = preg_replace('/^[ ]{0,4}/', '', $Line['body']); + + $Block['li']['text'] []= $text; + + unset($Block['interrupted']); + + return $Block; + } + } + + protected function blockListComplete(array $Block) + { + if (isset($Block['loose'])) + { + foreach ($Block['element']['text'] as &$li) + { + if (end($li['text']) !== '') + { + $li['text'] []= ''; + } + } + } + + return $Block; + } + + # + # Quote + + protected function blockQuote($Line) + { + if (preg_match('/^>[ ]?(.*)/', $Line['text'], $matches)) + { + $Block = array( + 'element' => array( + 'name' => 'blockquote', + 'handler' => 'lines', + 'text' => (array) $matches[1], + ), + ); + + return $Block; + } + } + + protected function blockQuoteContinue($Line, array $Block) + { + if ($Line['text'][0] === '>' and preg_match('/^>[ ]?(.*)/', $Line['text'], $matches)) + { + if (isset($Block['interrupted'])) + { + $Block['element']['text'] []= ''; + + unset($Block['interrupted']); + } + + $Block['element']['text'] []= $matches[1]; + + return $Block; + } + + if ( ! isset($Block['interrupted'])) + { + $Block['element']['text'] []= $Line['text']; + + return $Block; + } + } + + # + # Rule + + protected function blockRule($Line) + { + if (preg_match('/^(['.$Line['text'][0].'])([ ]*\1){2,}[ ]*$/', $Line['text'])) + { + $Block = array( + 'element' => array( + 'name' => 'hr' + ), + ); + + return $Block; + } + } + + # + # Setext + + protected function blockSetextHeader($Line, array $Block = null) + { + if ( ! isset($Block) or isset($Block['type']) or isset($Block['interrupted'])) + { + return; + } + + if (chop($Line['text'], $Line['text'][0]) === '') + { + $Block['element']['name'] = $Line['text'][0] === '=' ? 'h1' : 'h2'; + + return $Block; + } + } + + # + # Markup + + protected function blockMarkup($Line) + { + if ($this->markupEscaped or $this->safeMode) + { + return; + } + + if (preg_match('/^<(\w[\w-]*)(?:[ ]*'.$this->regexHtmlAttribute.')*[ ]*(\/)?>/', $Line['text'], $matches)) + { + $element = strtolower($matches[1]); + + if (in_array($element, $this->textLevelElements)) + { + return; + } + + $Block = array( + 'name' => $matches[1], + 'depth' => 0, + 'markup' => $Line['text'], + ); + + $length = strlen($matches[0]); + + $remainder = substr($Line['text'], $length); + + if (trim($remainder) === '') + { + if (isset($matches[2]) or in_array($matches[1], $this->voidElements)) + { + $Block['closed'] = true; + + $Block['void'] = true; + } + } + else + { + if (isset($matches[2]) or in_array($matches[1], $this->voidElements)) + { + return; + } + + if (preg_match('/<\/'.$matches[1].'>[ ]*$/i', $remainder)) + { + $Block['closed'] = true; + } + } + + return $Block; + } + } + + protected function blockMarkupContinue($Line, array $Block) + { + if (isset($Block['closed'])) + { + return; + } + + if (preg_match('/^<'.$Block['name'].'(?:[ ]*'.$this->regexHtmlAttribute.')*[ ]*>/i', $Line['text'])) # open + { + $Block['depth'] ++; + } + + if (preg_match('/(.*?)<\/'.$Block['name'].'>[ ]*$/i', $Line['text'], $matches)) # close + { + if ($Block['depth'] > 0) + { + $Block['depth'] --; + } + else + { + $Block['closed'] = true; + } + } + + if (isset($Block['interrupted'])) + { + $Block['markup'] .= "\n"; + + unset($Block['interrupted']); + } + + $Block['markup'] .= "\n".$Line['body']; + + return $Block; + } + + # + # Reference + + protected function blockReference($Line) + { + if (preg_match('/^\[(.+?)\]:[ ]*?(?:[ ]+["\'(](.+)["\')])?[ ]*$/', $Line['text'], $matches)) + { + $id = strtolower($matches[1]); + + $Data = array( + 'url' => $matches[2], + 'title' => null, + ); + + if (isset($matches[3])) + { + $Data['title'] = $matches[3]; + } + + $this->DefinitionData['Reference'][$id] = $Data; + + $Block = array( + 'hidden' => true, + ); + + return $Block; + } + } + + # + # Table + + protected function blockTable($Line, array $Block = null) + { + if ( ! isset($Block) or isset($Block['type']) or isset($Block['interrupted'])) + { + return; + } + + if (strpos($Block['element']['text'], '|') !== false and chop($Line['text'], ' -:|') === '') + { + $alignments = array(); + + $divider = $Line['text']; + + $divider = trim($divider); + $divider = trim($divider, '|'); + + $dividerCells = explode('|', $divider); + + foreach ($dividerCells as $dividerCell) + { + $dividerCell = trim($dividerCell); + + if ($dividerCell === '') + { + continue; + } + + $alignment = null; + + if ($dividerCell[0] === ':') + { + $alignment = 'left'; + } + + if (substr($dividerCell, - 1) === ':') + { + $alignment = $alignment === 'left' ? 'center' : 'right'; + } + + $alignments []= $alignment; + } + + # ~ + + $HeaderElements = array(); + + $header = $Block['element']['text']; + + $header = trim($header); + $header = trim($header, '|'); + + $headerCells = explode('|', $header); + + foreach ($headerCells as $index => $headerCell) + { + $headerCell = trim($headerCell); + + $HeaderElement = array( + 'name' => 'th', + 'text' => $headerCell, + 'handler' => 'line', + ); + + if (isset($alignments[$index])) + { + $alignment = $alignments[$index]; + + $HeaderElement['attributes'] = array( + 'style' => 'text-align: '.$alignment.';', + ); + } + + $HeaderElements []= $HeaderElement; + } + + # ~ + + $Block = array( + 'alignments' => $alignments, + 'identified' => true, + 'element' => array( + 'name' => 'table', + 'handler' => 'elements', + ), + ); + + $Block['element']['text'] []= array( + 'name' => 'thead', + 'handler' => 'elements', + ); + + $Block['element']['text'] []= array( + 'name' => 'tbody', + 'handler' => 'elements', + 'text' => array(), + ); + + $Block['element']['text'][0]['text'] []= array( + 'name' => 'tr', + 'handler' => 'elements', + 'text' => $HeaderElements, + ); + + return $Block; + } + } + + protected function blockTableContinue($Line, array $Block) + { + if (isset($Block['interrupted'])) + { + return; + } + + if ($Line['text'][0] === '|' or strpos($Line['text'], '|')) + { + $Elements = array(); + + $row = $Line['text']; + + $row = trim($row); + $row = trim($row, '|'); + + preg_match_all('/(?:(\\\\[|])|[^|`]|`[^`]+`|`)+/', $row, $matches); + + foreach ($matches[0] as $index => $cell) + { + $cell = trim($cell); + + $Element = array( + 'name' => 'td', + 'handler' => 'line', + 'text' => $cell, + ); + + if (isset($Block['alignments'][$index])) + { + $Element['attributes'] = array( + 'style' => 'text-align: '.$Block['alignments'][$index].';', + ); + } + + $Elements []= $Element; + } + + $Element = array( + 'name' => 'tr', + 'handler' => 'elements', + 'text' => $Elements, + ); + + $Block['element']['text'][1]['text'] []= $Element; + + return $Block; + } + } + + # + # ~ + # + + protected function paragraph($Line) + { + $Block = array( + 'element' => array( + 'name' => 'p', + 'text' => $Line['text'], + 'handler' => 'line', + ), + ); + + return $Block; + } + + # + # Inline Elements + # + + protected $InlineTypes = array( + '"' => array('SpecialCharacter'), + '!' => array('Image'), + '&' => array('SpecialCharacter'), + '*' => array('Emphasis'), + ':' => array('Url'), + '<' => array('UrlTag', 'EmailTag', 'Markup', 'SpecialCharacter'), + '>' => array('SpecialCharacter'), + '[' => array('Link'), + '_' => array('Emphasis'), + '`' => array('Code'), + '~' => array('Strikethrough'), + '\\' => array('EscapeSequence'), + ); + + # ~ + + protected $inlineMarkerList = '!"*_&[:<>`~\\'; + + # + # ~ + # + + public function line($text, $nonNestables=array()) + { + $markup = ''; + + # $excerpt is based on the first occurrence of a marker + + while ($excerpt = strpbrk($text, $this->inlineMarkerList)) + { + $marker = $excerpt[0]; + + $markerPosition = strpos($text, $marker); + + $Excerpt = array('text' => $excerpt, 'context' => $text); + + foreach ($this->InlineTypes[$marker] as $inlineType) + { + # check to see if the current inline type is nestable in the current context + + if ( ! empty($nonNestables) and in_array($inlineType, $nonNestables)) + { + continue; + } + + $Inline = $this->{'inline'.$inlineType}($Excerpt); + + if ( ! isset($Inline)) + { + continue; + } + + # makes sure that the inline belongs to "our" marker + + if (isset($Inline['position']) and $Inline['position'] > $markerPosition) + { + continue; + } + + # sets a default inline position + + if ( ! isset($Inline['position'])) + { + $Inline['position'] = $markerPosition; + } + + # cause the new element to 'inherit' our non nestables + + foreach ($nonNestables as $non_nestable) + { + $Inline['element']['nonNestables'][] = $non_nestable; + } + + # the text that comes before the inline + $unmarkedText = substr($text, 0, $Inline['position']); + + # compile the unmarked text + $markup .= $this->unmarkedText($unmarkedText); + + # compile the inline + $markup .= isset($Inline['markup']) ? $Inline['markup'] : $this->element($Inline['element']); + + # remove the examined text + $text = substr($text, $Inline['position'] + $Inline['extent']); + + continue 2; + } + + # the marker does not belong to an inline + + $unmarkedText = substr($text, 0, $markerPosition + 1); + + $markup .= $this->unmarkedText($unmarkedText); + + $text = substr($text, $markerPosition + 1); + } + + $markup .= $this->unmarkedText($text); + + return $markup; + } + + # + # ~ + # + + protected function inlineCode($Excerpt) + { + $marker = $Excerpt['text'][0]; + + if (preg_match('/^('.$marker.'+)[ ]*(.+?)[ ]*(? strlen($matches[0]), + 'element' => array( + 'name' => 'code', + 'text' => $text, + ), + ); + } + } + + protected function inlineEmailTag($Excerpt) + { + if (strpos($Excerpt['text'], '>') !== false and preg_match('/^<((mailto:)?\S+?@\S+?)>/i', $Excerpt['text'], $matches)) + { + $url = $matches[1]; + + if ( ! isset($matches[2])) + { + $url = 'mailto:' . $url; + } + + return array( + 'extent' => strlen($matches[0]), + 'element' => array( + 'name' => 'a', + 'text' => $matches[1], + 'attributes' => array( + 'href' => $url, + ), + ), + ); + } + } + + protected function inlineEmphasis($Excerpt) + { + if ( ! isset($Excerpt['text'][1])) + { + return; + } + + $marker = $Excerpt['text'][0]; + + if ($Excerpt['text'][1] === $marker and preg_match($this->StrongRegex[$marker], $Excerpt['text'], $matches)) + { + $emphasis = 'strong'; + } + elseif (preg_match($this->EmRegex[$marker], $Excerpt['text'], $matches)) + { + $emphasis = 'em'; + } + else + { + return; + } + + return array( + 'extent' => strlen($matches[0]), + 'element' => array( + 'name' => $emphasis, + 'handler' => 'line', + 'text' => $matches[1], + ), + ); + } + + protected function inlineEscapeSequence($Excerpt) + { + if (isset($Excerpt['text'][1]) and in_array($Excerpt['text'][1], $this->specialCharacters)) + { + return array( + 'markup' => $Excerpt['text'][1], + 'extent' => 2, + ); + } + } + + protected function inlineImage($Excerpt) + { + if ( ! isset($Excerpt['text'][1]) or $Excerpt['text'][1] !== '[') + { + return; + } + + $Excerpt['text']= substr($Excerpt['text'], 1); + + $Link = $this->inlineLink($Excerpt); + + if ($Link === null) + { + return; + } + + $Inline = array( + 'extent' => $Link['extent'] + 1, + 'element' => array( + 'name' => 'img', + 'attributes' => array( + 'src' => $Link['element']['attributes']['href'], + 'alt' => $Link['element']['text'], + ), + ), + ); + + $Inline['element']['attributes'] += $Link['element']['attributes']; + + unset($Inline['element']['attributes']['href']); + + return $Inline; + } + + protected function inlineLink($Excerpt) + { + $Element = array( + 'name' => 'a', + 'handler' => 'line', + 'nonNestables' => array('Url', 'Link'), + 'text' => null, + 'attributes' => array( + 'href' => null, + 'title' => null, + ), + ); + + $extent = 0; + + $remainder = $Excerpt['text']; + + if (preg_match('/\[((?:[^][]++|(?R))*+)\]/', $remainder, $matches)) + { + $Element['text'] = $matches[1]; + + $extent += strlen($matches[0]); + + $remainder = substr($remainder, $extent); + } + else + { + return; + } + + if (preg_match('/^[(]\s*+((?:[^ ()]++|[(][^ )]+[)])++)(?:[ ]+("[^"]*"|\'[^\']*\'))?\s*[)]/', $remainder, $matches)) + { + $Element['attributes']['href'] = $matches[1]; + + if (isset($matches[2])) + { + $Element['attributes']['title'] = substr($matches[2], 1, - 1); + } + + $extent += strlen($matches[0]); + } + else + { + if (preg_match('/^\s*\[(.*?)\]/', $remainder, $matches)) + { + $definition = strlen($matches[1]) ? $matches[1] : $Element['text']; + $definition = strtolower($definition); + + $extent += strlen($matches[0]); + } + else + { + $definition = strtolower($Element['text']); + } + + if ( ! isset($this->DefinitionData['Reference'][$definition])) + { + return; + } + + $Definition = $this->DefinitionData['Reference'][$definition]; + + $Element['attributes']['href'] = $Definition['url']; + $Element['attributes']['title'] = $Definition['title']; + } + + return array( + 'extent' => $extent, + 'element' => $Element, + ); + } + + protected function inlineMarkup($Excerpt) + { + if ($this->markupEscaped or $this->safeMode or strpos($Excerpt['text'], '>') === false) + { + return; + } + + if ($Excerpt['text'][1] === '/' and preg_match('/^<\/\w[\w-]*[ ]*>/s', $Excerpt['text'], $matches)) + { + return array( + 'markup' => $matches[0], + 'extent' => strlen($matches[0]), + ); + } + + if ($Excerpt['text'][1] === '!' and preg_match('/^/s', $Excerpt['text'], $matches)) + { + return array( + 'markup' => $matches[0], + 'extent' => strlen($matches[0]), + ); + } + + if ($Excerpt['text'][1] !== ' ' and preg_match('/^<\w[\w-]*(?:[ ]*'.$this->regexHtmlAttribute.')*[ ]*\/?>/s', $Excerpt['text'], $matches)) + { + return array( + 'markup' => $matches[0], + 'extent' => strlen($matches[0]), + ); + } + } + + protected function inlineSpecialCharacter($Excerpt) + { + if ($Excerpt['text'][0] === '&' and ! preg_match('/^&#?\w+;/', $Excerpt['text'])) + { + return array( + 'markup' => '&', + 'extent' => 1, + ); + } + + $SpecialCharacter = array('>' => 'gt', '<' => 'lt', '"' => 'quot'); + + if (isset($SpecialCharacter[$Excerpt['text'][0]])) + { + return array( + 'markup' => '&'.$SpecialCharacter[$Excerpt['text'][0]].';', + 'extent' => 1, + ); + } + } + + protected function inlineStrikethrough($Excerpt) + { + if ( ! isset($Excerpt['text'][1])) + { + return; + } + + if ($Excerpt['text'][1] === '~' and preg_match('/^~~(?=\S)(.+?)(?<=\S)~~/', $Excerpt['text'], $matches)) + { + return array( + 'extent' => strlen($matches[0]), + 'element' => array( + 'name' => 'del', + 'text' => $matches[1], + 'handler' => 'line', + ), + ); + } + } + + protected function inlineUrl($Excerpt) + { + if ($this->urlsLinked !== true or ! isset($Excerpt['text'][2]) or $Excerpt['text'][2] !== '/') + { + return; + } + + if (preg_match('/\bhttps?:[\/]{2}[^\s<]+\b\/*/ui', $Excerpt['context'], $matches, PREG_OFFSET_CAPTURE)) + { + $url = $matches[0][0]; + + $Inline = array( + 'extent' => strlen($matches[0][0]), + 'position' => $matches[0][1], + 'element' => array( + 'name' => 'a', + 'text' => $url, + 'attributes' => array( + 'href' => $url, + ), + ), + ); + + return $Inline; + } + } + + protected function inlineUrlTag($Excerpt) + { + if (strpos($Excerpt['text'], '>') !== false and preg_match('/^<(\w+:\/{2}[^ >]+)>/i', $Excerpt['text'], $matches)) + { + $url = $matches[1]; + + return array( + 'extent' => strlen($matches[0]), + 'element' => array( + 'name' => 'a', + 'text' => $url, + 'attributes' => array( + 'href' => $url, + ), + ), + ); + } + } + + # ~ + + protected function unmarkedText($text) + { + if ($this->breaksEnabled) + { + $text = preg_replace('/[ ]*\n/', "
\n", $text); + } + else + { + $text = preg_replace('/(?:[ ][ ]+|[ ]*\\\\)\n/', "
\n", $text); + $text = str_replace(" \n", "\n", $text); + } + + return $text; + } + + # + # Handlers + # + + protected function element(array $Element) + { + if ($this->safeMode) + { + $Element = $this->sanitiseElement($Element); + } + + $markup = '<'.$Element['name']; + + if (isset($Element['attributes'])) + { + foreach ($Element['attributes'] as $name => $value) + { + if ($value === null) + { + continue; + } + + $markup .= ' '.$name.'="'.self::escape($value).'"'; + } + } + + $permitRawHtml = false; + + if (isset($Element['text'])) + { + $text = $Element['text']; + } + // very strongly consider an alternative if you're writing an + // extension + elseif (isset($Element['rawHtml'])) + { + $text = $Element['rawHtml']; + $allowRawHtmlInSafeMode = isset($Element['allowRawHtmlInSafeMode']) && $Element['allowRawHtmlInSafeMode']; + $permitRawHtml = !$this->safeMode || $allowRawHtmlInSafeMode; + } + + if (isset($text)) + { + $markup .= '>'; + + if (!isset($Element['nonNestables'])) + { + $Element['nonNestables'] = array(); + } + + if (isset($Element['handler'])) + { + $markup .= $this->{$Element['handler']}($text, $Element['nonNestables']); + } + elseif (!$permitRawHtml) + { + $markup .= self::escape($text, true); + } + else + { + $markup .= $text; + } + + $markup .= ''; + } + else + { + $markup .= ' />'; + } + + return $markup; + } + + protected function elements(array $Elements) + { + $markup = ''; + + foreach ($Elements as $Element) + { + $markup .= "\n" . $this->element($Element); + } + + $markup .= "\n"; + + return $markup; + } + + # ~ + + protected function li($lines) + { + $markup = $this->lines($lines); + + $trimmedMarkup = trim($markup); + + if ( ! in_array('', $lines) and substr($trimmedMarkup, 0, 3) === '

') + { + $markup = $trimmedMarkup; + $markup = substr($markup, 3); + + $position = strpos($markup, "

"); + + $markup = substr_replace($markup, '', $position, 4); + } + + return $markup; + } + + # + # Deprecated Methods + # + + function parse($text) + { + $markup = $this->text($text); + + return $markup; + } + + protected function sanitiseElement(array $Element) + { + static $goodAttribute = '/^[a-zA-Z0-9][a-zA-Z0-9-_]*+$/'; + static $safeUrlNameToAtt = array( + 'a' => 'href', + 'img' => 'src', + ); + + if (isset($safeUrlNameToAtt[$Element['name']])) + { + $Element = $this->filterUnsafeUrlInAttribute($Element, $safeUrlNameToAtt[$Element['name']]); + } + + if ( ! empty($Element['attributes'])) + { + foreach ($Element['attributes'] as $att => $val) + { + # filter out badly parsed attribute + if ( ! preg_match($goodAttribute, $att)) + { + unset($Element['attributes'][$att]); + } + # dump onevent attribute + elseif (self::striAtStart($att, 'on')) + { + unset($Element['attributes'][$att]); + } + } + } + + return $Element; + } + + protected function filterUnsafeUrlInAttribute(array $Element, $attribute) + { + foreach ($this->safeLinksWhitelist as $scheme) + { + if (self::striAtStart($Element['attributes'][$attribute], $scheme)) + { + return $Element; + } + } + + $Element['attributes'][$attribute] = str_replace(':', '%3A', $Element['attributes'][$attribute]); + + return $Element; + } + + # + # Static Methods + # + + protected static function escape($text, $allowQuotes = false) + { + return htmlspecialchars($text, $allowQuotes ? ENT_NOQUOTES : ENT_QUOTES, 'UTF-8'); + } + + protected static function striAtStart($string, $needle) + { + $len = strlen($needle); + + if ($len > strlen($string)) + { + return false; + } + else + { + return strtolower(substr($string, 0, $len)) === strtolower($needle); + } + } + + static function instance($name = 'default') + { + if (isset(self::$instances[$name])) + { + return self::$instances[$name]; + } + + $instance = new static(); + + self::$instances[$name] = $instance; + + return $instance; + } + + private static $instances = array(); + + # + # Fields + # + + protected $DefinitionData; + + # + # Read-Only + + protected $specialCharacters = array( + '\\', '`', '*', '_', '{', '}', '[', ']', '(', ')', '>', '#', '+', '-', '.', '!', '|', + ); + + protected $StrongRegex = array( + '*' => '/^[*]{2}((?:\\\\\*|[^*]|[*][^*]*[*])+?)[*]{2}(?![*])/s', + '_' => '/^__((?:\\\\_|[^_]|_[^_]*_)+?)__(?!_)/us', + ); + + protected $EmRegex = array( + '*' => '/^[*]((?:\\\\\*|[^*]|[*][*][^*]+?[*][*])+?)[*](?![*])/s', + '_' => '/^_((?:\\\\_|[^_]|__[^_]*__)+?)_(?!_)\b/us', + ); + + protected $regexHtmlAttribute = '[a-zA-Z_:][\w:.-]*(?:\s*=\s*(?:[^"\'=<>`\s]+|"[^"]*"|\'[^\']*\'))?'; + + protected $voidElements = array( + 'area', 'base', 'br', 'col', 'command', 'embed', 'hr', 'img', 'input', 'link', 'meta', 'param', 'source', + ); + + protected $textLevelElements = array( + 'a', 'br', 'bdo', 'abbr', 'blink', 'nextid', 'acronym', 'basefont', + 'b', 'em', 'big', 'cite', 'small', 'spacer', 'listing', + 'i', 'rp', 'del', 'code', 'strike', 'marquee', + 'q', 'rt', 'ins', 'font', 'strong', + 's', 'tt', 'kbd', 'mark', + 'u', 'xm', 'sub', 'nobr', + 'sup', 'ruby', + 'var', 'span', + 'wbr', 'time', + ); +} diff --git a/Perlite/perlite/vendor/erusev/parsedown/README.md b/Perlite/perlite/vendor/erusev/parsedown/README.md new file mode 100644 index 0000000..b5d9ed2 --- /dev/null +++ b/Perlite/perlite/vendor/erusev/parsedown/README.md @@ -0,0 +1,86 @@ +> I also make [Caret](https://caret.io?ref=parsedown) - a Markdown editor for Mac and PC. + +## Parsedown + +[![Build Status](https://img.shields.io/travis/erusev/parsedown/master.svg?style=flat-square)](https://travis-ci.org/erusev/parsedown) + + +Better Markdown Parser in PHP + +[Demo](http://parsedown.org/demo) | +[Benchmarks](http://parsedown.org/speed) | +[Tests](http://parsedown.org/tests/) | +[Documentation](https://github.com/erusev/parsedown/wiki/) + +### Features + +* One File +* No Dependencies +* Super Fast +* Extensible +* [GitHub flavored](https://help.github.com/articles/github-flavored-markdown) +* Tested in 5.3 to 7.1 and in HHVM +* [Markdown Extra extension](https://github.com/erusev/parsedown-extra) + +### Installation + +Include `Parsedown.php` or install [the composer package](https://packagist.org/packages/erusev/parsedown). + +### Example + +``` php +$Parsedown = new Parsedown(); + +echo $Parsedown->text('Hello _Parsedown_!'); # prints:

Hello Parsedown!

+``` + +More examples in [the wiki](https://github.com/erusev/parsedown/wiki/) and in [this video tutorial](http://youtu.be/wYZBY8DEikI). + +### Security + +Parsedown is capable of escaping user-input within the HTML that it generates. Additionally Parsedown will apply sanitisation to additional scripting vectors (such as scripting link destinations) that are introduced by the markdown syntax itself. + +To tell Parsedown that it is processing untrusted user-input, use the following: +```php +$parsedown = new Parsedown; +$parsedown->setSafeMode(true); +``` + +If instead, you wish to allow HTML within untrusted user-input, but still want output to be free from XSS it is recommended that you make use of a HTML sanitiser that allows HTML tags to be whitelisted, like [HTML Purifier](http://htmlpurifier.org/). + +In both cases you should strongly consider employing defence-in-depth measures, like [deploying a Content-Security-Policy](https://scotthelme.co.uk/content-security-policy-an-introduction/) (a browser security feature) so that your page is likely to be safe even if an attacker finds a vulnerability in one of the first lines of defence above. + +#### Security of Parsedown Extensions + +Safe mode does not necessarily yield safe results when using extensions to Parsedown. Extensions should be evaluated on their own to determine their specific safety against XSS. + +### Escaping HTML +> ⚠️  **WARNING:** This method isn't safe from XSS! + +If you wish to escape HTML **in trusted input**, you can use the following: +```php +$parsedown = new Parsedown; +$parsedown->setMarkupEscaped(true); +``` + +Beware that this still allows users to insert unsafe scripting vectors, such as links like `[xss](javascript:alert%281%29)`. + +### Questions + +**How does Parsedown work?** + +It tries to read Markdown like a human. First, it looks at the lines. It’s interested in how the lines start. This helps it recognise blocks. It knows, for example, that if a line starts with a `-` then perhaps it belongs to a list. Once it recognises the blocks, it continues to the content. As it reads, it watches out for special characters. This helps it recognise inline elements (or inlines). + +We call this approach "line based". We believe that Parsedown is the first Markdown parser to use it. Since the release of Parsedown, other developers have used the same approach to develop other Markdown parsers in PHP and in other languages. + +**Is it compliant with CommonMark?** + +It passes most of the CommonMark tests. Most of the tests that don't pass deal with cases that are quite uncommon. Still, as CommonMark matures, compliance should improve. + +**Who uses it?** + +[Laravel Framework](https://laravel.com/), [Bolt CMS](http://bolt.cm/), [Grav CMS](http://getgrav.org/), [Herbie CMS](http://www.getherbie.org/), [Kirby CMS](http://getkirby.com/), [October CMS](http://octobercms.com/), [Pico CMS](http://picocms.org), [Statamic CMS](http://www.statamic.com/), [phpDocumentor](http://www.phpdoc.org/), [RaspberryPi.org](http://www.raspberrypi.org/), [Symfony demo](https://github.com/symfony/symfony-demo) and [more](https://packagist.org/packages/erusev/parsedown/dependents). + +**How can I help?** + +Use it, star it, share it and if you feel generous, [donate](https://www.paypal.com/cgi-bin/webscr?cmd=_s-xclick&hosted_button_id=528P3NZQMP8N2). diff --git a/Perlite/perlite/vendor/erusev/parsedown/composer.json b/Perlite/perlite/vendor/erusev/parsedown/composer.json new file mode 100644 index 0000000..f8b40f8 --- /dev/null +++ b/Perlite/perlite/vendor/erusev/parsedown/composer.json @@ -0,0 +1,33 @@ +{ + "name": "erusev/parsedown", + "description": "Parser for Markdown.", + "keywords": ["markdown", "parser"], + "homepage": "http://parsedown.org", + "type": "library", + "license": "MIT", + "authors": [ + { + "name": "Emanuil Rusev", + "email": "hello@erusev.com", + "homepage": "http://erusev.com" + } + ], + "require": { + "php": ">=5.3.0", + "ext-mbstring": "*" + }, + "require-dev": { + "phpunit/phpunit": "^4.8.35" + }, + "autoload": { + "psr-0": {"Parsedown": ""} + }, + "autoload-dev": { + "psr-0": { + "TestParsedown": "test/", + "ParsedownTest": "test/", + "CommonMarkTest": "test/", + "CommonMarkTestWeak": "test/" + } + } +} diff --git a/Perlite/screenshots/folders.png b/Perlite/screenshots/folders.png new file mode 100644 index 0000000..28dc536 Binary files /dev/null and b/Perlite/screenshots/folders.png differ diff --git a/Perlite/screenshots/graph.png b/Perlite/screenshots/graph.png new file mode 100644 index 0000000..dadf59f Binary files /dev/null and b/Perlite/screenshots/graph.png differ diff --git a/Perlite/screenshots/link.png b/Perlite/screenshots/link.png new file mode 100644 index 0000000..12fcfda Binary files /dev/null and b/Perlite/screenshots/link.png differ diff --git a/Perlite/screenshots/plugin.png b/Perlite/screenshots/plugin.png new file mode 100644 index 0000000..b8eee79 Binary files /dev/null and b/Perlite/screenshots/plugin.png differ diff --git a/Perlite/screenshots/plugin_options.png b/Perlite/screenshots/plugin_options.png new file mode 100644 index 0000000..27859bc Binary files /dev/null and b/Perlite/screenshots/plugin_options.png differ diff --git a/Perlite/screenshots/screenshot.png b/Perlite/screenshots/screenshot.png new file mode 100644 index 0000000..9de14dc Binary files /dev/null and b/Perlite/screenshots/screenshot.png differ diff --git a/Perlite/web/config/perlite.conf b/Perlite/web/config/perlite.conf new file mode 100644 index 0000000..9e4f5a2 --- /dev/null +++ b/Perlite/web/config/perlite.conf @@ -0,0 +1,49 @@ +server { + listen 80; + server_name localhost; + + root /var/www/perlite; + index index.php index.html index.htm; + + access_log /var/log/nginx/php-access.log; + error_log /var/log/nginx/php-error.log; + + + location / { + try_files $uri $uri/ /index.php; + } + + # PHP-FPM Configuration Nginx + location ~ \.php$ { + try_files $uri = 404; + fastcgi_split_path_info ^(.+\.php)(/.+)$; + fastcgi_pass perlite:9000; + fastcgi_index index.php; + include fastcgi_params; + fastcgi_param REQUEST_URI $request_uri; + fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name; + fastcgi_param PATH_INFO $fastcgi_path_info; + } + + location ~ /\.ht { + deny all; + } + + location ~* ^/(.*)/.obsidian/appearance.json$ { + allow all; + } + + location ~* ^/(.*)/.obsidian/(.*)/theme.css$ { + allow all; + } + + location ~ \.(git|github|obsidian|trash) { + deny all; + } + + location ~ \.(md|json)$ { + deny all; + } + + +}