diff --git a/.platform/hooks/postdeploy/01-optimize-laravel.sh b/.platform/hooks/postdeploy/01-optimize-laravel.sh deleted file mode 100755 index 46f6d9e13..000000000 --- a/.platform/hooks/postdeploy/01-optimize-laravel.sh +++ /dev/null @@ -1,19 +0,0 @@ -#!/bin/bash - -# Clear caches -php artisan cache:clear - -# Clear expired password reset tokens -php artisan auth:clear-resets - -# Clear and cache routes -php artisan route:cache - -# Clear and cache events -php artisan events:cache - -# Clear and cache config -php artisan config:cache - -# Clear and cache views -php artisan view:cache diff --git a/.platform/hooks/prebuild/01-clear-folder.sh b/.platform/hooks/prebuild/01-clear-folder.sh deleted file mode 100755 index e2d3fb756..000000000 --- a/.platform/hooks/prebuild/01-clear-folder.sh +++ /dev/null @@ -1,5 +0,0 @@ -#!/bin/bash - -# Remove all files and folders in the deployment folder -rm -R /var/www/html/* -f -rm -R /var/www/html/{,.[!.],..?}* -f diff --git a/.platform/hooks/prebuild/02-install-composer.sh b/.platform/hooks/prebuild/02-install-composer.sh deleted file mode 100755 index 53275946d..000000000 --- a/.platform/hooks/prebuild/02-install-composer.sh +++ /dev/null @@ -1,11 +0,0 @@ -#!/bin/bash - -# Get Composer, and install to /usr/local/bin -if [ ! -f "/usr/local/bin/composer" ]; then - php -r "copy('https://getcomposer.org/installer', 'composer-setup.php');" - php composer-setup.php --install-dir=/usr/local/bin --filename=composer - php -r "unlink('composer-setup.php');" -else - echo "Composer already installed, moving on..." - #/usr/local/bin/composer self-update --stable --no-ansi --no-interaction -fi diff --git a/.platform/hooks/predeploy/01-laravel-down.sh b/.platform/hooks/predeploy/01-laravel-down.sh deleted file mode 100755 index bf428bd8f..000000000 --- a/.platform/hooks/predeploy/01-laravel-down.sh +++ /dev/null @@ -1,3 +0,0 @@ -#!/bin/bash - -php artisan down diff --git a/.platform/hooks/predeploy/02-install-composer-dependencies.sh b/.platform/hooks/predeploy/02-install-composer-dependencies.sh deleted file mode 100755 index c2077e3bb..000000000 --- a/.platform/hooks/predeploy/02-install-composer-dependencies.sh +++ /dev/null @@ -1,5 +0,0 @@ -#!/bin/bash - -# Install Composer dependencies -export COMPOSER_ALLOW_SUPERUSER=1 -/usr/local/bin/composer install --no-interaction --prefer-dist --optimize-autoloader --no-dev diff --git a/.platform/hooks/predeploy/03-migrate-tables.sh b/.platform/hooks/predeploy/03-migrate-tables.sh deleted file mode 100755 index ded10fa63..000000000 --- a/.platform/hooks/predeploy/03-migrate-tables.sh +++ /dev/null @@ -1,5 +0,0 @@ -#!/bin/bash - -php artisan migrate --force -php artisan love:reaction-type-add --default -php artisan love:reaction-type-add --name=Heart --mass=1 diff --git a/.platform/hooks/predeploy/04-laravel-up.sh b/.platform/hooks/predeploy/04-laravel-up.sh deleted file mode 100755 index 7b09fc917..000000000 --- a/.platform/hooks/predeploy/04-laravel-up.sh +++ /dev/null @@ -1,3 +0,0 @@ -#!/bin/bash - -php artisan up diff --git a/.platform/nginx/nginx.conf b/.platform/nginx/nginx.conf deleted file mode 100644 index 2754141a1..000000000 --- a/.platform/nginx/nginx.conf +++ /dev/null @@ -1,66 +0,0 @@ -# Elastic Beanstalk Nginx Configuration File -user nginx; -error_log /var/log/nginx/error.log warn; -pid /var/run/nginx.pid; -worker_processes auto; -worker_rlimit_nofile 32153; - -events { - worker_connections 1024; -} - -http { - include /etc/nginx/mime.types; - default_type application/octet-stream; - - log_format main '$remote_addr - $remote_user [$time_local] "$request" ' - '$status $body_bytes_sent "$http_referer" ' - '"$http_user_agent" "$http_x_forwarded_for"'; - - include conf.d/*.conf; - - map $http_upgrade $connection_upgrade { - default "upgrade"; - } - - server { - listen 80 default_server; - - if ($http_x_forwarded_proto = 'http'){ - return 301 https://$host$request_uri; - } - - access_log /var/log/nginx/access.log main; - - add_header X-Frame-Options "SAMEORIGIN"; - add_header X-XSS-Protection "1; mode=block"; - add_header X-Content-Type-Options "nosniff"; - - index index.html index.htm index.php; - - charset utf-8; - - location / { - try_files $uri $uri/ /index.php?$query_string; - } - - location ~ /\.(?!well-known).* { - deny all; - } - - location = /favicon.ico { access_log off; log_not_found off; } - location = /robots.txt { access_log off; log_not_found off; } - - error_page 404 /index.php; - - client_header_timeout 60; - client_body_timeout 60; - keepalive_timeout 60; - gzip off; - gzip_comp_level 4; - gzip_types text/plain text/css application/json application/javascript application/x-javascript text/xml application/xml application/xml+rss text/javascript; - - # Include the Elastic Beanstalk generated locations - include conf.d/elasticbeanstalk/*.conf; - } -} diff --git a/composer.lock b/composer.lock index 30e1546c6..4302f4065 100644 --- a/composer.lock +++ b/composer.lock @@ -542,21 +542,21 @@ }, { "name": "codercat/jwk-to-pem", - "version": "1.0", + "version": "1.1", "source": { "type": "git", "url": "https://github.com/acodercat/php-jwk-to-pem.git", - "reference": "e428b7abba5b37676e30e968930f718cf26724ac" + "reference": "4b3cdcf5f87b9b074f132f763a6b7b82c7d3ff1d" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/acodercat/php-jwk-to-pem/zipball/e428b7abba5b37676e30e968930f718cf26724ac", - "reference": "e428b7abba5b37676e30e968930f718cf26724ac", + "url": "https://api.github.com/repos/acodercat/php-jwk-to-pem/zipball/4b3cdcf5f87b9b074f132f763a6b7b82c7d3ff1d", + "reference": "4b3cdcf5f87b9b074f132f763a6b7b82c7d3ff1d", "shasum": "" }, "require": { - "php": ">=7.0.0", - "phpseclib/phpseclib": "~2.0" + "php": ">=7.1", + "phpseclib/phpseclib": "^3.0" }, "require-dev": { "phpunit/phpunit": "^7.0" @@ -580,9 +580,9 @@ "description": "Convert JWK to PEM format.", "support": { "issues": "https://github.com/acodercat/php-jwk-to-pem/issues", - "source": "https://github.com/acodercat/php-jwk-to-pem/tree/1.0" + "source": "https://github.com/acodercat/php-jwk-to-pem/tree/1.1" }, - "time": "2020-11-12T05:40:03+00:00" + "time": "2021-04-28T07:37:03+00:00" }, { "name": "composer/ca-bundle", @@ -1756,16 +1756,16 @@ }, { "name": "fruitcake/laravel-cors", - "version": "v2.0.3", + "version": "v2.0.4", "source": { "type": "git", "url": "https://github.com/fruitcake/laravel-cors.git", - "reference": "01de0fe5f71c70d1930ee9a80385f9cc28e0f63a" + "reference": "a8ccedc7ca95189ead0e407c43b530dc17791d6a" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/fruitcake/laravel-cors/zipball/01de0fe5f71c70d1930ee9a80385f9cc28e0f63a", - "reference": "01de0fe5f71c70d1930ee9a80385f9cc28e0f63a", + "url": "https://api.github.com/repos/fruitcake/laravel-cors/zipball/a8ccedc7ca95189ead0e407c43b530dc17791d6a", + "reference": "a8ccedc7ca95189ead0e407c43b530dc17791d6a", "shasum": "" }, "require": { @@ -1778,8 +1778,8 @@ }, "require-dev": { "laravel/framework": "^6|^7|^8", - "orchestra/testbench-dusk": "^4|^5|^6", - "phpunit/phpunit": "^6|^7|^8", + "orchestra/testbench-dusk": "^4|^5|^6|^7", + "phpunit/phpunit": "^6|^7|^8|^9", "squizlabs/php_codesniffer": "^3.5" }, "type": "library", @@ -1821,7 +1821,7 @@ ], "support": { "issues": "https://github.com/fruitcake/laravel-cors/issues", - "source": "https://github.com/fruitcake/laravel-cors/tree/v2.0.3" + "source": "https://github.com/fruitcake/laravel-cors/tree/v2.0.4" }, "funding": [ { @@ -1829,7 +1829,7 @@ "type": "github" } ], - "time": "2020-10-22T13:57:20+00:00" + "time": "2021-04-26T11:24:25+00:00" }, { "name": "google/auth", @@ -2114,16 +2114,16 @@ }, { "name": "guzzlehttp/psr7", - "version": "1.8.1", + "version": "1.8.2", "source": { "type": "git", "url": "https://github.com/guzzle/psr7.git", - "reference": "35ea11d335fd638b5882ff1725228b3d35496ab1" + "reference": "dc960a912984efb74d0a90222870c72c87f10c91" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/guzzle/psr7/zipball/35ea11d335fd638b5882ff1725228b3d35496ab1", - "reference": "35ea11d335fd638b5882ff1725228b3d35496ab1", + "url": "https://api.github.com/repos/guzzle/psr7/zipball/dc960a912984efb74d0a90222870c72c87f10c91", + "reference": "dc960a912984efb74d0a90222870c72c87f10c91", "shasum": "" }, "require": { @@ -2183,9 +2183,9 @@ ], "support": { "issues": "https://github.com/guzzle/psr7/issues", - "source": "https://github.com/guzzle/psr7/tree/1.8.1" + "source": "https://github.com/guzzle/psr7/tree/1.8.2" }, - "time": "2021-03-21T16:25:00+00:00" + "time": "2021-04-26T09:17:50+00:00" }, { "name": "hanneskod/classtools", @@ -2967,16 +2967,16 @@ }, { "name": "laravel/framework", - "version": "v8.38.0", + "version": "v8.40.0", "source": { "type": "git", "url": "https://github.com/laravel/framework.git", - "reference": "26a73532c54d2c090692bf2e3e64e449669053ba" + "reference": "a654897ad7f97aea9d7ef292803939798c4a02a4" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/laravel/framework/zipball/26a73532c54d2c090692bf2e3e64e449669053ba", - "reference": "26a73532c54d2c090692bf2e3e64e449669053ba", + "url": "https://api.github.com/repos/laravel/framework/zipball/a654897ad7f97aea9d7ef292803939798c4a02a4", + "reference": "a654897ad7f97aea9d7ef292803939798c4a02a4", "shasum": "" }, "require": { @@ -3131,7 +3131,7 @@ "issues": "https://github.com/laravel/framework/issues", "source": "https://github.com/laravel/framework" }, - "time": "2021-04-20T13:50:21+00:00" + "time": "2021-04-28T14:38:56+00:00" }, { "name": "laravel/nova", @@ -3290,16 +3290,16 @@ }, { "name": "laravel/ui", - "version": "v3.2.0", + "version": "v3.2.1", "source": { "type": "git", "url": "https://github.com/laravel/ui.git", - "reference": "a1f82c6283c8373ea1958b8a27c3d5c98cade351" + "reference": "e2478cd0342a92ec1c8c77422553bda8ee004fd0" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/laravel/ui/zipball/a1f82c6283c8373ea1958b8a27c3d5c98cade351", - "reference": "a1f82c6283c8373ea1958b8a27c3d5c98cade351", + "url": "https://api.github.com/repos/laravel/ui/zipball/e2478cd0342a92ec1c8c77422553bda8ee004fd0", + "reference": "e2478cd0342a92ec1c8c77422553bda8ee004fd0", "shasum": "" }, "require": { @@ -3341,10 +3341,9 @@ "ui" ], "support": { - "issues": "https://github.com/laravel/ui/issues", - "source": "https://github.com/laravel/ui/tree/v3.2.0" + "source": "https://github.com/laravel/ui/tree/v3.2.1" }, - "time": "2021-01-06T19:20:22+00:00" + "time": "2021-04-27T18:17:41+00:00" }, { "name": "league/commonmark", @@ -3722,16 +3721,16 @@ }, { "name": "livewire/livewire", - "version": "v2.4.3", + "version": "v2.4.4", "source": { "type": "git", "url": "https://github.com/livewire/livewire.git", - "reference": "69575f50bb7f8a49a41f9bd6bd16c73a6ef4fda3" + "reference": "33101c83b75728651b9e668a4559f97def7c9138" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/livewire/livewire/zipball/69575f50bb7f8a49a41f9bd6bd16c73a6ef4fda3", - "reference": "69575f50bb7f8a49a41f9bd6bd16c73a6ef4fda3", + "url": "https://api.github.com/repos/livewire/livewire/zipball/33101c83b75728651b9e668a4559f97def7c9138", + "reference": "33101c83b75728651b9e668a4559f97def7c9138", "shasum": "" }, "require": { @@ -3782,7 +3781,7 @@ "description": "A front-end framework for Laravel.", "support": { "issues": "https://github.com/livewire/livewire/issues", - "source": "https://github.com/livewire/livewire/tree/v2.4.3" + "source": "https://github.com/livewire/livewire/tree/v2.4.4" }, "funding": [ { @@ -3790,7 +3789,7 @@ "type": "github" } ], - "time": "2021-04-16T14:27:45+00:00" + "time": "2021-04-28T15:31:15+00:00" }, { "name": "maennchen/zipstream-php", @@ -4747,6 +4746,56 @@ }, "time": "2020-12-06T15:14:20+00:00" }, + { + "name": "paragonie/random_compat", + "version": "v9.99.100", + "source": { + "type": "git", + "url": "https://github.com/paragonie/random_compat.git", + "reference": "996434e5492cb4c3edcb9168db6fbb1359ef965a" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/paragonie/random_compat/zipball/996434e5492cb4c3edcb9168db6fbb1359ef965a", + "reference": "996434e5492cb4c3edcb9168db6fbb1359ef965a", + "shasum": "" + }, + "require": { + "php": ">= 7" + }, + "require-dev": { + "phpunit/phpunit": "4.*|5.*", + "vimeo/psalm": "^1" + }, + "suggest": { + "ext-libsodium": "Provides a modern crypto API that can be used to generate random bytes." + }, + "type": "library", + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Paragon Initiative Enterprises", + "email": "security@paragonie.com", + "homepage": "https://paragonie.com" + } + ], + "description": "PHP 5.x polyfill for random_bytes() and random_int() from PHP 7", + "keywords": [ + "csprng", + "polyfill", + "pseudorandom", + "random" + ], + "support": { + "email": "info@paragonie.com", + "issues": "https://github.com/paragonie/random_compat/issues", + "source": "https://github.com/paragonie/random_compat" + }, + "time": "2020-10-15T08:29:30+00:00" + }, { "name": "phpoption/phpoption", "version": "1.7.5", @@ -4818,20 +4867,20 @@ }, { "name": "phpseclib/bcmath_compat", - "version": "1.0.6", + "version": "2.0.0", "source": { "type": "git", "url": "https://github.com/phpseclib/bcmath_compat.git", - "reference": "f6f03d3af2ef95fc35b30abdd29f20ee11276a65" + "reference": "fd896dfceffc13d8cf45d2ee3470777a70026f3c" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/phpseclib/bcmath_compat/zipball/f6f03d3af2ef95fc35b30abdd29f20ee11276a65", - "reference": "f6f03d3af2ef95fc35b30abdd29f20ee11276a65", + "url": "https://api.github.com/repos/phpseclib/bcmath_compat/zipball/fd896dfceffc13d8cf45d2ee3470777a70026f3c", + "reference": "fd896dfceffc13d8cf45d2ee3470777a70026f3c", "shasum": "" }, "require": { - "phpseclib/phpseclib": ">=2.0.19 <3.0.0" + "phpseclib/phpseclib": "^3.0" }, "provide": { "ext-bcmath": "8.0.0" @@ -4876,28 +4925,30 @@ "issues": "https://github.com/phpseclib/bcmath_compat/issues", "source": "https://github.com/phpseclib/bcmath_compat" }, - "time": "2020-12-22T16:34:18+00:00" + "time": "2020-12-22T16:38:51+00:00" }, { "name": "phpseclib/phpseclib", - "version": "2.0.31", + "version": "3.0.8", "source": { "type": "git", "url": "https://github.com/phpseclib/phpseclib.git", - "reference": "233a920cb38636a43b18d428f9a8db1f0a1a08f4" + "reference": "d9615a6fb970d9933866ca8b4036ec3407b020b6" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/phpseclib/phpseclib/zipball/233a920cb38636a43b18d428f9a8db1f0a1a08f4", - "reference": "233a920cb38636a43b18d428f9a8db1f0a1a08f4", + "url": "https://api.github.com/repos/phpseclib/phpseclib/zipball/d9615a6fb970d9933866ca8b4036ec3407b020b6", + "reference": "d9615a6fb970d9933866ca8b4036ec3407b020b6", "shasum": "" }, "require": { - "php": ">=5.3.3" + "paragonie/constant_time_encoding": "^1|^2", + "paragonie/random_compat": "^1.4|^2.0|^9.99.99", + "php": ">=5.6.1" }, "require-dev": { "phing/phing": "~2.7", - "phpunit/phpunit": "^4.8.35|^5.7|^6.0|^9.4", + "phpunit/phpunit": "^5.7|^6.0|^9.4", "squizlabs/php_codesniffer": "~2.0" }, "suggest": { @@ -4912,7 +4963,7 @@ "phpseclib/bootstrap.php" ], "psr-4": { - "phpseclib\\": "phpseclib/" + "phpseclib3\\": "phpseclib/" } }, "notification-url": "https://packagist.org/downloads/", @@ -4969,7 +5020,7 @@ ], "support": { "issues": "https://github.com/phpseclib/phpseclib/issues", - "source": "https://github.com/phpseclib/phpseclib/tree/2.0.31" + "source": "https://github.com/phpseclib/phpseclib/tree/3.0.8" }, "funding": [ { @@ -4985,7 +5036,7 @@ "type": "tidelift" } ], - "time": "2021-04-06T13:56:45+00:00" + "time": "2021-04-19T03:20:48+00:00" }, { "name": "pragmarx/google2fa", @@ -9857,20 +9908,21 @@ }, { "name": "composer/composer", - "version": "2.0.12", + "version": "2.0.13", "source": { "type": "git", "url": "https://github.com/composer/composer.git", - "reference": "6c12ce263da71641903e399c3ce8ecb08fd375fb" + "reference": "986e8b86b7b570632ad0a905c3726c33dd4c0efb" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/composer/composer/zipball/6c12ce263da71641903e399c3ce8ecb08fd375fb", - "reference": "6c12ce263da71641903e399c3ce8ecb08fd375fb", + "url": "https://api.github.com/repos/composer/composer/zipball/986e8b86b7b570632ad0a905c3726c33dd4c0efb", + "reference": "986e8b86b7b570632ad0a905c3726c33dd4c0efb", "shasum": "" }, "require": { "composer/ca-bundle": "^1.0", + "composer/metadata-minifier": "^1.0", "composer/semver": "^3.0", "composer/spdx-licenses": "^1.2", "composer/xdebug-handler": "^1.1", @@ -9934,7 +9986,76 @@ "support": { "irc": "irc://irc.freenode.org/composer", "issues": "https://github.com/composer/composer/issues", - "source": "https://github.com/composer/composer/tree/2.0.12" + "source": "https://github.com/composer/composer/tree/2.0.13" + }, + "funding": [ + { + "url": "https://packagist.com", + "type": "custom" + }, + { + "url": "https://github.com/composer", + "type": "github" + }, + { + "url": "https://tidelift.com/funding/github/packagist/composer/composer", + "type": "tidelift" + } + ], + "time": "2021-04-27T11:11:08+00:00" + }, + { + "name": "composer/metadata-minifier", + "version": "1.0.0", + "source": { + "type": "git", + "url": "https://github.com/composer/metadata-minifier.git", + "reference": "c549d23829536f0d0e984aaabbf02af91f443207" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/composer/metadata-minifier/zipball/c549d23829536f0d0e984aaabbf02af91f443207", + "reference": "c549d23829536f0d0e984aaabbf02af91f443207", + "shasum": "" + }, + "require": { + "php": "^5.3.2 || ^7.0 || ^8.0" + }, + "require-dev": { + "composer/composer": "^2", + "phpstan/phpstan": "^0.12.55", + "symfony/phpunit-bridge": "^4.2 || ^5" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-main": "1.x-dev" + } + }, + "autoload": { + "psr-4": { + "Composer\\MetadataMinifier\\": "src" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Jordi Boggiano", + "email": "j.boggiano@seld.be", + "homepage": "http://seld.be" + } + ], + "description": "Small utility library that handles metadata minification and expansion.", + "keywords": [ + "composer", + "compression" + ], + "support": { + "issues": "https://github.com/composer/metadata-minifier/issues", + "source": "https://github.com/composer/metadata-minifier/tree/1.0.0" }, "funding": [ { @@ -9950,7 +10071,7 @@ "type": "tidelift" } ], - "time": "2021-04-01T08:14:59+00:00" + "time": "2021-04-07T13:37:33+00:00" }, { "name": "composer/semver", diff --git a/config/app.php b/config/app.php index 8714f498e..1649d024f 100644 --- a/config/app.php +++ b/config/app.php @@ -38,7 +38,7 @@ | or any other location as required by the application or its packages. */ - 'version' => '1.2.0-alpha.29', + 'version' => '1.2.0-alpha.31', /* |-------------------------------------------------------------------------- diff --git a/package-lock.json b/package-lock.json index ed6660ecd..eaf4f2cc0 100644 --- a/package-lock.json +++ b/package-lock.json @@ -15,7 +15,6 @@ "alpinejs": "^2.8", "autoprefixer": "^10.2.4", "cross-env": "^7.0.3", - "jquery": "^3.6.0", "laravel-mix": "^6.0", "laravel-mix-tailwind": "^0.1", "postcss": "^8.2.1", @@ -2067,9 +2066,9 @@ "dev": true }, "node_modules/@types/node": { - "version": "14.14.41", - "resolved": "https://registry.npmjs.org/@types/node/-/node-14.14.41.tgz", - "integrity": "sha512-dueRKfaJL4RTtSa7bWeTK1M+VH+Gns73oCgzvYfHZywRCoPSd8EkXBL0mZ9unPTveBn+D9phZBaxuzpwjWkW0g==", + "version": "15.0.1", + "resolved": "https://registry.npmjs.org/@types/node/-/node-15.0.1.tgz", + "integrity": "sha512-TMkXt0Ck1y0KKsGr9gJtWGjttxlZnnvDtphxUOSd0bfaR6Q1jle+sPvrzNR1urqYTWMinoKvjKfXUGsumaO1PA==", "dev": true }, "node_modules/@types/parse-glob": { @@ -3227,9 +3226,9 @@ } }, "node_modules/caniuse-lite": { - "version": "1.0.30001214", - "resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001214.tgz", - "integrity": "sha512-O2/SCpuaU3eASWVaesQirZv1MSjUNOvmugaD8zNSJqw6Vv5SGwoOpA9LJs3pNPfM745nxqPvfZY3MQKY4AKHYg==", + "version": "1.0.30001219", + "resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001219.tgz", + "integrity": "sha512-c0yixVG4v9KBc/tQ2rlbB3A/bgBFRvl8h8M4IeUbqCca4gsiCfvtaheUssbnux/Mb66Vjz7x8yYjDgYcNQOhyQ==", "dev": true }, "node_modules/chalk": { @@ -3737,12 +3736,12 @@ } }, "node_modules/core-js-compat": { - "version": "3.11.0", - "resolved": "https://registry.npmjs.org/core-js-compat/-/core-js-compat-3.11.0.tgz", - "integrity": "sha512-3wsN9YZJohOSDCjVB0GequOyHax8zFiogSX3XWLE28M1Ew7dTU57tgHjIylSBKSIouwmLBp3g61sKMz/q3xEGA==", + "version": "3.11.1", + "resolved": "https://registry.npmjs.org/core-js-compat/-/core-js-compat-3.11.1.tgz", + "integrity": "sha512-aZ0e4tmlG/aOBHj92/TuOuZwp6jFvn1WNabU5VOVixzhu5t5Ao+JZkQOPlgNXu6ynwLrwJxklT4Gw1G1VGEh+g==", "dev": true, "dependencies": { - "browserslist": "^4.16.4", + "browserslist": "^4.16.5", "semver": "7.0.0" }, "funding": { @@ -4984,9 +4983,9 @@ "dev": true }, "node_modules/electron-to-chromium": { - "version": "1.3.720", - "resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.3.720.tgz", - "integrity": "sha512-B6zLTxxaOFP4WZm6DrvgRk8kLFYWNhQ5TrHMC0l5WtkMXhU5UbnvWoTfeEwqOruUSlNMhVLfYak7REX6oC5Yfw==", + "version": "1.3.723", + "resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.3.723.tgz", + "integrity": "sha512-L+WXyXI7c7+G1V8ANzRsPI5giiimLAUDC6Zs1ojHHPhYXb3k/iTABFmWjivEtsWrRQymjnO66/rO2ZTABGdmWg==", "dev": true }, "node_modules/elliptic": { @@ -6396,9 +6395,9 @@ } }, "node_modules/http-proxy-middleware": { - "version": "1.2.1", - "resolved": "https://registry.npmjs.org/http-proxy-middleware/-/http-proxy-middleware-1.2.1.tgz", - "integrity": "sha512-mxqwEC+IOneTLuYz1B7fmLUmXXkVWfcbiXe8LsCctIX12vxfJU1Uj9HJD/G9MwK4HvgEdgKI8NZySM3uheC2JQ==", + "version": "1.3.1", + "resolved": "https://registry.npmjs.org/http-proxy-middleware/-/http-proxy-middleware-1.3.1.tgz", + "integrity": "sha512-13eVVDYS4z79w7f1+NPllJtOQFx/FdUW4btIvVRMaRlUY9VGstAbo5MOhLEuUgZFRHn3x50ufn25zkj/boZnEg==", "dev": true, "dependencies": { "@types/http-proxy": "^1.17.5", @@ -7137,12 +7136,6 @@ "node": ">= 10.13.0" } }, - "node_modules/jquery": { - "version": "3.6.0", - "resolved": "https://registry.npmjs.org/jquery/-/jquery-3.6.0.tgz", - "integrity": "sha512-JVzAR/AjBvVt2BmYhxRCSYysDsPcssdmTFnzyLEts9qNwmjmu4JTAMYubEfwVOSwpQ1I1sKKFcxhZCI2buerfw==", - "dev": true - }, "node_modules/js-tokens": { "version": "4.0.0", "resolved": "https://registry.npmjs.org/js-tokens/-/js-tokens-4.0.0.tgz", @@ -7692,9 +7685,9 @@ } }, "node_modules/mini-css-extract-plugin": { - "version": "1.5.0", - "resolved": "https://registry.npmjs.org/mini-css-extract-plugin/-/mini-css-extract-plugin-1.5.0.tgz", - "integrity": "sha512-SIbuLMv6jsk1FnLIU5OUG/+VMGUprEjM1+o2trOAx8i5KOKMrhyezb1dJ4Ugsykb8Jgq8/w5NEopy6escV9G7g==", + "version": "1.5.1", + "resolved": "https://registry.npmjs.org/mini-css-extract-plugin/-/mini-css-extract-plugin-1.5.1.tgz", + "integrity": "sha512-wEpr0XooH6rw/Mlf+9KTJoMBLT3HujzdTrmohPjAzF47N4Q6yAeczQLpRD/WxvAtXvskcXbily7TAdCfi2M4Dg==", "dev": true, "dependencies": { "loader-utils": "^2.0.0", @@ -8740,9 +8733,9 @@ } }, "node_modules/postcss": { - "version": "8.2.12", - "resolved": "https://registry.npmjs.org/postcss/-/postcss-8.2.12.tgz", - "integrity": "sha512-BJnGT5+0q2tzvs6oQfnY2NpEJ7rIXNfBnZtQOKCIsweeWXBXeDd5k31UgTdS3d/c02ouspufn37mTaHWkJyzMQ==", + "version": "8.2.13", + "resolved": "https://registry.npmjs.org/postcss/-/postcss-8.2.13.tgz", + "integrity": "sha512-FCE5xLH+hjbzRdpbRb1IMCvPv9yZx2QnDarBEYSN0N0HYk+TcXsEhwdFcFb+SRWOKzKGErhIEbBK2ogyLdTtfQ==", "dev": true, "dependencies": { "colorette": "^1.2.2", @@ -14091,9 +14084,9 @@ } }, "node_modules/terser": { - "version": "5.6.1", - "resolved": "https://registry.npmjs.org/terser/-/terser-5.6.1.tgz", - "integrity": "sha512-yv9YLFQQ+3ZqgWCUk+pvNJwgUTdlIxUk1WTN+RnaFJe2L7ipG2csPT0ra2XRm7Cs8cxN7QXmK1rFzEwYEQkzXw==", + "version": "5.7.0", + "resolved": "https://registry.npmjs.org/terser/-/terser-5.7.0.tgz", + "integrity": "sha512-HP5/9hp2UaZt5fYkuhNBR8YyRcT8juw8+uFbAme53iN9hblvKnLUTKkmwJG6ocWpIKf8UK4DoeWG4ty0J6S6/g==", "dev": true, "dependencies": { "commander": "^2.20.0", @@ -14738,9 +14731,9 @@ } }, "node_modules/webpack": { - "version": "5.35.1", - "resolved": "https://registry.npmjs.org/webpack/-/webpack-5.35.1.tgz", - "integrity": "sha512-uWKYStqJ23+N6/EnMEwUjPSSKUG1tFmcuKhALEh/QXoUxwN8eb3ATNIZB38A+fO6QZ0xfc7Cu7KNV9LXNhDCsw==", + "version": "5.36.1", + "resolved": "https://registry.npmjs.org/webpack/-/webpack-5.36.1.tgz", + "integrity": "sha512-2u25a82T+6quAxSlzEpN/R/RICwt20ONU3z3Ko05S8KVH9FXILcBYb2hD/rQtZT5y7lRAIsIIs05pdndY7ourQ==", "dev": true, "dependencies": { "@types/eslint-scope": "^3.7.0", @@ -14748,7 +14741,7 @@ "@webassemblyjs/ast": "1.11.0", "@webassemblyjs/wasm-edit": "1.11.0", "@webassemblyjs/wasm-parser": "1.11.0", - "acorn": "^8.0.4", + "acorn": "^8.2.1", "browserslist": "^4.14.5", "chrome-trace-event": "^1.0.2", "enhanced-resolve": "^5.8.0", @@ -16966,9 +16959,9 @@ "dev": true }, "@types/node": { - "version": "14.14.41", - "resolved": "https://registry.npmjs.org/@types/node/-/node-14.14.41.tgz", - "integrity": "sha512-dueRKfaJL4RTtSa7bWeTK1M+VH+Gns73oCgzvYfHZywRCoPSd8EkXBL0mZ9unPTveBn+D9phZBaxuzpwjWkW0g==", + "version": "15.0.1", + "resolved": "https://registry.npmjs.org/@types/node/-/node-15.0.1.tgz", + "integrity": "sha512-TMkXt0Ck1y0KKsGr9gJtWGjttxlZnnvDtphxUOSd0bfaR6Q1jle+sPvrzNR1urqYTWMinoKvjKfXUGsumaO1PA==", "dev": true }, "@types/parse-glob": { @@ -17923,9 +17916,9 @@ } }, "caniuse-lite": { - "version": "1.0.30001214", - "resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001214.tgz", - "integrity": "sha512-O2/SCpuaU3eASWVaesQirZv1MSjUNOvmugaD8zNSJqw6Vv5SGwoOpA9LJs3pNPfM745nxqPvfZY3MQKY4AKHYg==", + "version": "1.0.30001219", + "resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001219.tgz", + "integrity": "sha512-c0yixVG4v9KBc/tQ2rlbB3A/bgBFRvl8h8M4IeUbqCca4gsiCfvtaheUssbnux/Mb66Vjz7x8yYjDgYcNQOhyQ==", "dev": true }, "chalk": { @@ -18349,12 +18342,12 @@ "dev": true }, "core-js-compat": { - "version": "3.11.0", - "resolved": "https://registry.npmjs.org/core-js-compat/-/core-js-compat-3.11.0.tgz", - "integrity": "sha512-3wsN9YZJohOSDCjVB0GequOyHax8zFiogSX3XWLE28M1Ew7dTU57tgHjIylSBKSIouwmLBp3g61sKMz/q3xEGA==", + "version": "3.11.1", + "resolved": "https://registry.npmjs.org/core-js-compat/-/core-js-compat-3.11.1.tgz", + "integrity": "sha512-aZ0e4tmlG/aOBHj92/TuOuZwp6jFvn1WNabU5VOVixzhu5t5Ao+JZkQOPlgNXu6ynwLrwJxklT4Gw1G1VGEh+g==", "dev": true, "requires": { - "browserslist": "^4.16.4", + "browserslist": "^4.16.5", "semver": "7.0.0" }, "dependencies": { @@ -19348,9 +19341,9 @@ "dev": true }, "electron-to-chromium": { - "version": "1.3.720", - "resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.3.720.tgz", - "integrity": "sha512-B6zLTxxaOFP4WZm6DrvgRk8kLFYWNhQ5TrHMC0l5WtkMXhU5UbnvWoTfeEwqOruUSlNMhVLfYak7REX6oC5Yfw==", + "version": "1.3.723", + "resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.3.723.tgz", + "integrity": "sha512-L+WXyXI7c7+G1V8ANzRsPI5giiimLAUDC6Zs1ojHHPhYXb3k/iTABFmWjivEtsWrRQymjnO66/rO2ZTABGdmWg==", "dev": true }, "elliptic": { @@ -20459,9 +20452,9 @@ } }, "http-proxy-middleware": { - "version": "1.2.1", - "resolved": "https://registry.npmjs.org/http-proxy-middleware/-/http-proxy-middleware-1.2.1.tgz", - "integrity": "sha512-mxqwEC+IOneTLuYz1B7fmLUmXXkVWfcbiXe8LsCctIX12vxfJU1Uj9HJD/G9MwK4HvgEdgKI8NZySM3uheC2JQ==", + "version": "1.3.1", + "resolved": "https://registry.npmjs.org/http-proxy-middleware/-/http-proxy-middleware-1.3.1.tgz", + "integrity": "sha512-13eVVDYS4z79w7f1+NPllJtOQFx/FdUW4btIvVRMaRlUY9VGstAbo5MOhLEuUgZFRHn3x50ufn25zkj/boZnEg==", "dev": true, "requires": { "@types/http-proxy": "^1.17.5", @@ -20984,12 +20977,6 @@ "supports-color": "^7.0.0" } }, - "jquery": { - "version": "3.6.0", - "resolved": "https://registry.npmjs.org/jquery/-/jquery-3.6.0.tgz", - "integrity": "sha512-JVzAR/AjBvVt2BmYhxRCSYysDsPcssdmTFnzyLEts9qNwmjmu4JTAMYubEfwVOSwpQ1I1sKKFcxhZCI2buerfw==", - "dev": true - }, "js-tokens": { "version": "4.0.0", "resolved": "https://registry.npmjs.org/js-tokens/-/js-tokens-4.0.0.tgz", @@ -21436,9 +21423,9 @@ "dev": true }, "mini-css-extract-plugin": { - "version": "1.5.0", - "resolved": "https://registry.npmjs.org/mini-css-extract-plugin/-/mini-css-extract-plugin-1.5.0.tgz", - "integrity": "sha512-SIbuLMv6jsk1FnLIU5OUG/+VMGUprEjM1+o2trOAx8i5KOKMrhyezb1dJ4Ugsykb8Jgq8/w5NEopy6escV9G7g==", + "version": "1.5.1", + "resolved": "https://registry.npmjs.org/mini-css-extract-plugin/-/mini-css-extract-plugin-1.5.1.tgz", + "integrity": "sha512-wEpr0XooH6rw/Mlf+9KTJoMBLT3HujzdTrmohPjAzF47N4Q6yAeczQLpRD/WxvAtXvskcXbily7TAdCfi2M4Dg==", "dev": true, "requires": { "loader-utils": "^2.0.0", @@ -22246,9 +22233,9 @@ "dev": true }, "postcss": { - "version": "8.2.12", - "resolved": "https://registry.npmjs.org/postcss/-/postcss-8.2.12.tgz", - "integrity": "sha512-BJnGT5+0q2tzvs6oQfnY2NpEJ7rIXNfBnZtQOKCIsweeWXBXeDd5k31UgTdS3d/c02ouspufn37mTaHWkJyzMQ==", + "version": "8.2.13", + "resolved": "https://registry.npmjs.org/postcss/-/postcss-8.2.13.tgz", + "integrity": "sha512-FCE5xLH+hjbzRdpbRb1IMCvPv9yZx2QnDarBEYSN0N0HYk+TcXsEhwdFcFb+SRWOKzKGErhIEbBK2ogyLdTtfQ==", "dev": true, "requires": { "colorette": "^1.2.2", @@ -26505,9 +26492,9 @@ "dev": true }, "terser": { - "version": "5.6.1", - "resolved": "https://registry.npmjs.org/terser/-/terser-5.6.1.tgz", - "integrity": "sha512-yv9YLFQQ+3ZqgWCUk+pvNJwgUTdlIxUk1WTN+RnaFJe2L7ipG2csPT0ra2XRm7Cs8cxN7QXmK1rFzEwYEQkzXw==", + "version": "5.7.0", + "resolved": "https://registry.npmjs.org/terser/-/terser-5.7.0.tgz", + "integrity": "sha512-HP5/9hp2UaZt5fYkuhNBR8YyRcT8juw8+uFbAme53iN9hblvKnLUTKkmwJG6ocWpIKf8UK4DoeWG4ty0J6S6/g==", "dev": true, "requires": { "commander": "^2.20.0", @@ -27021,9 +27008,9 @@ } }, "webpack": { - "version": "5.35.1", - "resolved": "https://registry.npmjs.org/webpack/-/webpack-5.35.1.tgz", - "integrity": "sha512-uWKYStqJ23+N6/EnMEwUjPSSKUG1tFmcuKhALEh/QXoUxwN8eb3ATNIZB38A+fO6QZ0xfc7Cu7KNV9LXNhDCsw==", + "version": "5.36.1", + "resolved": "https://registry.npmjs.org/webpack/-/webpack-5.36.1.tgz", + "integrity": "sha512-2u25a82T+6quAxSlzEpN/R/RICwt20ONU3z3Ko05S8KVH9FXILcBYb2hD/rQtZT5y7lRAIsIIs05pdndY7ourQ==", "dev": true, "requires": { "@types/eslint-scope": "^3.7.0", @@ -27031,7 +27018,7 @@ "@webassemblyjs/ast": "1.11.0", "@webassemblyjs/wasm-edit": "1.11.0", "@webassemblyjs/wasm-parser": "1.11.0", - "acorn": "^8.0.4", + "acorn": "^8.2.1", "browserslist": "^4.14.5", "chrome-trace-event": "^1.0.2", "enhanced-resolve": "^5.8.0", diff --git a/public/css/app.css b/public/css/app.css index 9f2e1081b..e65c1b0a1 100644 --- a/public/css/app.css +++ b/public/css/app.css @@ -1,2815 +1,4 @@ -/** - * This injects Tailwind's base styles, which is a combination of - * Normalize.css and some additional base styles. - */ -/*! tailwindcss v2.1.2 | MIT License | https://tailwindcss.com - */ -/*! modern-normalize v1.0.0 | MIT License | https://github.com/sindresorhus/modern-normalize */ -/* -Document -======== -*/ -/** -Use a better box model (opinionated). -*/ -*, -*::before, -*::after { - box-sizing: border-box; -} -/** -Use a more readable tab size (opinionated). -*/ -:root { - -moz-tab-size: 4; - -o-tab-size: 4; - tab-size: 4; -} -/** -1. Correct the line height in all browsers. -2. Prevent adjustments of font size after orientation changes in iOS. -*/ -html { - line-height: 1.15; /* 1 */ - -webkit-text-size-adjust: 100%; /* 2 */ -} -/* -Sections -======== -*/ -/** -Remove the margin in all browsers. -*/ -body { - margin: 0; -} -/** -Improve consistency of default fonts in all browsers. (https://github.com/sindresorhus/modern-normalize/issues/3) -*/ -body { - font-family: - system-ui, - -apple-system, /* Firefox supports this but not yet `system-ui` */ - 'Segoe UI', - Roboto, - Helvetica, - Arial, - sans-serif, - 'Apple Color Emoji', - 'Segoe UI Emoji'; -} -/* -Grouping content -================ -*/ -/** -1. Add the correct height in Firefox. -2. Correct the inheritance of border color in Firefox. (https://bugzilla.mozilla.org/show_bug.cgi?id=190655) -*/ -hr { - height: 0; /* 1 */ - color: inherit; /* 2 */ -} -/* -Text-level semantics -==================== -*/ -/** -Add the correct text decoration in Chrome, Edge, and Safari. -*/ -abbr[title] { - -webkit-text-decoration: underline dotted; - text-decoration: underline dotted; -} -/** -Add the correct font weight in Edge and Safari. -*/ -b, -strong { - font-weight: bolder; -} -/** -1. Improve consistency of default fonts in all browsers. (https://github.com/sindresorhus/modern-normalize/issues/3) -2. Correct the odd 'em' font sizing in all browsers. -*/ -code, -kbd, -samp, -pre { - font-family: - ui-monospace, - SFMono-Regular, - Consolas, - 'Liberation Mono', - Menlo, - monospace; /* 1 */ - font-size: 1em; /* 2 */ -} -/** -Add the correct font size in all browsers. -*/ -small { - font-size: 80%; -} -/** -Prevent 'sub' and 'sup' elements from affecting the line height in all browsers. -*/ -sub, -sup { - font-size: 75%; - line-height: 0; - position: relative; - vertical-align: baseline; -} -sub { - bottom: -0.25em; -} -sup { - top: -0.5em; -} -/* -Tabular data -============ -*/ -/** -1. Remove text indentation from table contents in Chrome and Safari. (https://bugs.chromium.org/p/chromium/issues/detail?id=999088, https://bugs.webkit.org/show_bug.cgi?id=201297) -2. Correct table border color inheritance in all Chrome and Safari. (https://bugs.chromium.org/p/chromium/issues/detail?id=935729, https://bugs.webkit.org/show_bug.cgi?id=195016) -*/ -table { - text-indent: 0; /* 1 */ - border-color: inherit; /* 2 */ -} -/* -Forms -===== -*/ -/** -1. Change the font styles in all browsers. -2. Remove the margin in Firefox and Safari. -*/ -button, -input, -optgroup, -select, -textarea { - font-family: inherit; /* 1 */ - font-size: 100%; /* 1 */ - line-height: 1.15; /* 1 */ - margin: 0; /* 2 */ -} -/** -Remove the inheritance of text transform in Edge and Firefox. -1. Remove the inheritance of text transform in Firefox. -*/ -button, -select { /* 1 */ - text-transform: none; -} -/** -Correct the inability to style clickable types in iOS and Safari. -*/ -button, -[type='button'], -[type='reset'], -[type='submit'] { - -webkit-appearance: button; -} -/** -Remove the inner border and padding in Firefox. -*/ -::-moz-focus-inner { - border-style: none; - padding: 0; -} -/** -Restore the focus styles unset by the previous rule. -*/ -:-moz-focusring { - outline: 1px dotted ButtonText; -} -/** -Remove the additional ':invalid' styles in Firefox. -See: https://github.com/mozilla/gecko-dev/blob/2f9eacd9d3d995c937b4251a5557d95d494c9be1/layout/style/res/forms.css#L728-L737 -*/ -:-moz-ui-invalid { - box-shadow: none; -} -/** -Remove the padding so developers are not caught out when they zero out 'fieldset' elements in all browsers. -*/ -legend { - padding: 0; -} -/** -Add the correct vertical alignment in Chrome and Firefox. -*/ -progress { - vertical-align: baseline; -} -/** -Correct the cursor style of increment and decrement buttons in Safari. -*/ -::-webkit-inner-spin-button, -::-webkit-outer-spin-button { - height: auto; -} -/** -1. Correct the odd appearance in Chrome and Safari. -2. Correct the outline style in Safari. -*/ -[type='search'] { - -webkit-appearance: textfield; /* 1 */ - outline-offset: -2px; /* 2 */ -} -/** -Remove the inner padding in Chrome and Safari on macOS. -*/ -::-webkit-search-decoration { - -webkit-appearance: none; -} -/** -1. Correct the inability to style clickable types in iOS and Safari. -2. Change font properties to 'inherit' in Safari. -*/ -::-webkit-file-upload-button { - -webkit-appearance: button; /* 1 */ - font: inherit; /* 2 */ -} -/* -Interactive -=========== -*/ -/* -Add the correct display in Chrome and Safari. -*/ -summary { - display: list-item; -} -/** - * Manually forked from SUIT CSS Base: https://github.com/suitcss/base - * A thin layer on top of normalize.css that provides a starting point more - * suitable for web applications. - */ -/** - * Removes the default spacing and border for appropriate elements. - */ -blockquote, -dl, -dd, -h1, -h2, -h3, -h4, -h5, -h6, -hr, -figure, -p, -pre { - margin: 0; -} -button { - background-color: transparent; - background-image: none; -} -/** - * Work around a Firefox/IE bug where the transparent `button` background - * results in a loss of the default `button` focus styles. - */ -button:focus { - outline: 1px dotted; - outline: 5px auto -webkit-focus-ring-color; -} -fieldset { - margin: 0; - padding: 0; -} -ol, -ul { - list-style: none; - margin: 0; - padding: 0; -} -/** - * Tailwind custom reset styles - */ -/** - * 1. Use the user's configured `sans` font-family (with Tailwind's default - * sans-serif font stack as a fallback) as a sane default. - * 2. Use Tailwind's default "normal" line-height so the user isn't forced - * to override it to ensure consistency even when using the default theme. - */ -html { - font-family: Inter var, ui-sans-serif, system-ui, -apple-system, BlinkMacSystemFont, "Segoe UI", Roboto, "Helvetica Neue", Arial, "Noto Sans", sans-serif, "Apple Color Emoji", "Segoe UI Emoji", "Segoe UI Symbol", "Noto Color Emoji"; /* 1 */ - line-height: 1.5; /* 2 */ -} -/** - * Inherit font-family and line-height from `html` so users can set them as - * a class directly on the `html` element. - */ -body { - font-family: inherit; - line-height: inherit; -} -/** - * 1. Prevent padding and border from affecting element width. - * - * We used to set this in the html element and inherit from - * the parent element for everything else. This caused issues - * in shadow-dom-enhanced elements like
where the content - * is wrapped by a div with box-sizing set to `content-box`. - * - * https://github.com/mozdevs/cssremedy/issues/4 - * - * - * 2. Allow adding a border to an element by just adding a border-width. - * - * By default, the way the browser specifies that an element should have no - * border is by setting it's border-style to `none` in the user-agent - * stylesheet. - * - * In order to easily add borders to elements by just setting the `border-width` - * property, we change the default border-style for all elements to `solid`, and - * use border-width to hide them instead. This way our `border` utilities only - * need to set the `border-width` property instead of the entire `border` - * shorthand, making our border utilities much more straightforward to compose. - * - * https://github.com/tailwindcss/tailwindcss/pull/116 - */ -*, -::before, -::after { - box-sizing: border-box; /* 1 */ - border-width: 0; /* 2 */ - border-style: solid; /* 2 */ - border-color: #e4e4e7; /* 2 */ -} -/* - * Ensure horizontal rules are visible by default - */ -hr { - border-top-width: 1px; -} -/** - * Undo the `border-style: none` reset that Normalize applies to images so that - * our `border-{width}` utilities have the expected effect. - * - * The Normalize reset is unnecessary for us since we default the border-width - * to 0 on all elements. - * - * https://github.com/tailwindcss/tailwindcss/issues/362 - */ -img { - border-style: solid; -} -textarea { - resize: vertical; -} -input::-moz-placeholder, textarea::-moz-placeholder { - opacity: 1; - color: #a1a1aa; -} -input:-ms-input-placeholder, textarea:-ms-input-placeholder { - opacity: 1; - color: #a1a1aa; -} -input::placeholder, -textarea::placeholder { - opacity: 1; - color: #a1a1aa; -} -button, -[role="button"] { - cursor: pointer; -} -table { - border-collapse: collapse; -} -h1, -h2, -h3, -h4, -h5, -h6 { - font-size: inherit; - font-weight: inherit; -} -/** - * Reset links to optimize for opt-in styling instead of - * opt-out. - */ -a { - color: inherit; - text-decoration: inherit; -} -/** - * Reset form element properties that are easy to forget to - * style explicitly so you don't inadvertently introduce - * styles that deviate from your design system. These styles - * supplement a partial reset that is already applied by - * normalize.css. - */ -button, -input, -optgroup, -select, -textarea { - padding: 0; - line-height: inherit; - color: inherit; -} -/** - * Use the configured 'mono' font family for elements that - * are expected to be rendered with a monospace font, falling - * back to the system monospace stack if there is no configured - * 'mono' font family. - */ -pre, -code, -kbd, -samp { - font-family: ui-monospace, SFMono-Regular, Menlo, Monaco, Consolas, "Liberation Mono", "Courier New", monospace; -} -/** - * Make replaced elements `display: block` by default as that's - * the behavior you want almost all of the time. Inspired by - * CSS Remedy, with `svg` added as well. - * - * https://github.com/mozdevs/cssremedy/issues/14 - */ -img, -svg, -video, -canvas, -audio, -iframe, -embed, -object { - display: block; - vertical-align: middle; -} -/** - * Constrain images and videos to the parent width and preserve - * their intrinsic aspect ratio. - * - * https://github.com/mozdevs/cssremedy/issues/14 - */ -img, -video { - max-width: 100%; - height: auto; -} -* { - --tw-shadow: 0 0 #0000; - --tw-ring-inset: var(--tw-empty,/*!*/ /*!*/); - --tw-ring-offset-width: 0px; - --tw-ring-offset-color: #fff; - --tw-ring-color: rgba(59, 130, 246, 0.5); - --tw-ring-offset-shadow: 0 0 #0000; - --tw-ring-shadow: 0 0 #0000; -} -[type='text'],[type='email'],[type='url'],[type='password'],[type='number'],[type='date'],[type='datetime-local'],[type='month'],[type='search'],[type='tel'],[type='time'],[type='week'],[multiple],textarea,select { - -webkit-appearance: none; - -moz-appearance: none; - appearance: none; - background-color: #fff; - border-color: #71717a; - border-width: 1px; - border-radius: 0px; - padding-top: 0.5rem; - padding-right: 0.75rem; - padding-bottom: 0.5rem; - padding-left: 0.75rem; - font-size: 1rem; - line-height: 1.5rem; -} -[type='text']:focus, [type='email']:focus, [type='url']:focus, [type='password']:focus, [type='number']:focus, [type='date']:focus, [type='datetime-local']:focus, [type='month']:focus, [type='search']:focus, [type='tel']:focus, [type='time']:focus, [type='week']:focus, [multiple]:focus, textarea:focus, select:focus { - outline: 2px solid transparent; - outline-offset: 2px; - --tw-ring-inset: var(--tw-empty,/*!*/ /*!*/); - --tw-ring-offset-width: 0px; - --tw-ring-offset-color: #fff; - --tw-ring-color: #2563eb; - --tw-ring-offset-shadow: var(--tw-ring-inset) 0 0 0 var(--tw-ring-offset-width) var(--tw-ring-offset-color); - --tw-ring-shadow: var(--tw-ring-inset) 0 0 0 calc(1px + var(--tw-ring-offset-width)) var(--tw-ring-color); - box-shadow: var(--tw-ring-offset-shadow), var(--tw-ring-shadow), var(--tw-shadow, 0 0 #0000); - border-color: #2563eb; -} -input::-moz-placeholder, textarea::-moz-placeholder { - color: #71717a; - opacity: 1; -} -input:-ms-input-placeholder, textarea:-ms-input-placeholder { - color: #71717a; - opacity: 1; -} -input::placeholder,textarea::placeholder { - color: #71717a; - opacity: 1; -} -::-webkit-datetime-edit-fields-wrapper { - padding: 0; -} -::-webkit-date-and-time-value { - min-height: 1.5em; -} -select { - background-image: url("data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' fill='none' viewBox='0 0 20 20'%3e%3cpath stroke='%2371717a' stroke-linecap='round' stroke-linejoin='round' stroke-width='1.5' d='M6 8l4 4 4-4'/%3e%3c/svg%3e"); - background-position: right 0.5rem center; - background-repeat: no-repeat; - background-size: 1.5em 1.5em; - padding-right: 2.5rem; - -webkit-print-color-adjust: exact; - color-adjust: exact; -} -[multiple] { - background-image: initial; - background-position: initial; - background-repeat: unset; - background-size: initial; - padding-right: 0.75rem; - -webkit-print-color-adjust: unset; - color-adjust: unset; -} -[type='checkbox'],[type='radio'] { - -webkit-appearance: none; - -moz-appearance: none; - appearance: none; - padding: 0; - -webkit-print-color-adjust: exact; - color-adjust: exact; - display: inline-block; - vertical-align: middle; - background-origin: border-box; - -webkit-user-select: none; - -moz-user-select: none; - -ms-user-select: none; - user-select: none; - flex-shrink: 0; - height: 1rem; - width: 1rem; - color: #2563eb; - background-color: #fff; - border-color: #71717a; - border-width: 1px; -} -[type='checkbox'] { - border-radius: 0px; -} -[type='radio'] { - border-radius: 100%; -} -[type='checkbox']:focus,[type='radio']:focus { - outline: 2px solid transparent; - outline-offset: 2px; - --tw-ring-inset: var(--tw-empty,/*!*/ /*!*/); - --tw-ring-offset-width: 2px; - --tw-ring-offset-color: #fff; - --tw-ring-color: #2563eb; - --tw-ring-offset-shadow: var(--tw-ring-inset) 0 0 0 var(--tw-ring-offset-width) var(--tw-ring-offset-color); - --tw-ring-shadow: var(--tw-ring-inset) 0 0 0 calc(2px + var(--tw-ring-offset-width)) var(--tw-ring-color); - box-shadow: var(--tw-ring-offset-shadow), var(--tw-ring-shadow), var(--tw-shadow, 0 0 #0000); -} -[type='checkbox']:checked,[type='radio']:checked { - border-color: transparent; - background-color: currentColor; - background-size: 100% 100%; - background-position: center; - background-repeat: no-repeat; -} -[type='checkbox']:checked { - background-image: url("data:image/svg+xml,%3csvg viewBox='0 0 16 16' fill='white' xmlns='http://www.w3.org/2000/svg'%3e%3cpath d='M12.207 4.793a1 1 0 010 1.414l-5 5a1 1 0 01-1.414 0l-2-2a1 1 0 011.414-1.414L6.5 9.086l4.293-4.293a1 1 0 011.414 0z'/%3e%3c/svg%3e"); -} -[type='radio']:checked { - background-image: url("data:image/svg+xml,%3csvg viewBox='0 0 16 16' fill='white' xmlns='http://www.w3.org/2000/svg'%3e%3ccircle cx='8' cy='8' r='3'/%3e%3c/svg%3e"); -} -[type='checkbox']:checked:hover,[type='checkbox']:checked:focus,[type='radio']:checked:hover,[type='radio']:checked:focus { - border-color: transparent; - background-color: currentColor; -} -[type='checkbox']:indeterminate { - background-image: url("data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' fill='none' viewBox='0 0 16 16'%3e%3cpath stroke='white' stroke-linecap='round' stroke-linejoin='round' stroke-width='2' d='M4 8h8'/%3e%3c/svg%3e"); - border-color: transparent; - background-color: currentColor; - background-size: 100% 100%; - background-position: center; - background-repeat: no-repeat; -} -[type='checkbox']:indeterminate:hover,[type='checkbox']:indeterminate:focus { - border-color: transparent; - background-color: currentColor; -} -[type='file'] { - background: unset; - border-color: inherit; - border-width: 0; - border-radius: 0; - padding: 0; - font-size: unset; - line-height: inherit; -} -[type='file']:focus { - outline: 1px auto -webkit-focus-ring-color; -} - -/** - * Remove the default box-shadow for invalid elements to prevent - * inputs in Livewire components showing with a - * red border by default in Firefox. - */ -input:invalid, textarea:invalid, select:invalid { - box-shadow: none; -} - -/** - * This injects any component classes registered by plugins. - */ -.container { - width: 100%; -} -@media (min-width: 640px) { - .container { - max-width: 640px; - } -} -@media (min-width: 768px) { - .container { - max-width: 768px; - } -} -@media (min-width: 1024px) { - .container { - max-width: 1024px; - } -} -@media (min-width: 1280px) { - .container { - max-width: 1280px; - } -} -@media (min-width: 1536px) { - .container { - max-width: 1536px; - } -} -.prose { - color: #3f3f46; - max-width: 65ch; -} -.prose [class~="lead"] { - color: #52525b; - font-size: 1.25em; - line-height: 1.6; - margin-top: 1.2em; - margin-bottom: 1.2em; -} -.prose a { - color: #18181b; - text-decoration: underline; - font-weight: 500; -} -.prose strong { - color: #18181b; - font-weight: 600; -} -.prose ol[type="A"] { - --list-counter-style: upper-alpha; -} -.prose ol[type="a"] { - --list-counter-style: lower-alpha; -} -.prose ol[type="A s"] { - --list-counter-style: upper-alpha; -} -.prose ol[type="a s"] { - --list-counter-style: lower-alpha; -} -.prose ol[type="I"] { - --list-counter-style: upper-roman; -} -.prose ol[type="i"] { - --list-counter-style: lower-roman; -} -.prose ol[type="I s"] { - --list-counter-style: upper-roman; -} -.prose ol[type="i s"] { - --list-counter-style: lower-roman; -} -.prose ol[type="1"] { - --list-counter-style: decimal; -} -.prose ol > li { - position: relative; - padding-left: 1.75em; -} -.prose ol > li::before { - content: counter(list-item, var(--list-counter-style, decimal)) "."; - position: absolute; - font-weight: 400; - color: #71717a; - left: 0; -} -.prose ul > li { - position: relative; - padding-left: 1.75em; -} -.prose ul > li::before { - content: ""; - position: absolute; - background-color: #d4d4d8; - border-radius: 50%; - width: 0.375em; - height: 0.375em; - top: calc(0.875em - 0.1875em); - left: 0.25em; -} -.prose hr { - border-color: #e4e4e7; - border-top-width: 1px; - margin-top: 3em; - margin-bottom: 3em; -} -.prose blockquote { - font-weight: 500; - font-style: italic; - color: #18181b; - border-left-width: 0.25rem; - border-left-color: #e4e4e7; - quotes: "\201C""\201D""\2018""\2019"; - margin-top: 1.6em; - margin-bottom: 1.6em; - padding-left: 1em; -} -.prose blockquote p:first-of-type::before { - content: open-quote; -} -.prose blockquote p:last-of-type::after { - content: close-quote; -} -.prose h1 { - color: #18181b; - font-weight: 800; - font-size: 2.25em; - margin-top: 0; - margin-bottom: 0.8888889em; - line-height: 1.1111111; -} -.prose h2 { - color: #18181b; - font-weight: 700; - font-size: 1.5em; - margin-top: 2em; - margin-bottom: 1em; - line-height: 1.3333333; -} -.prose h3 { - color: #18181b; - font-weight: 600; - font-size: 1.25em; - margin-top: 1.6em; - margin-bottom: 0.6em; - line-height: 1.6; -} -.prose h4 { - color: #18181b; - font-weight: 600; - margin-top: 1.5em; - margin-bottom: 0.5em; - line-height: 1.5; -} -.prose figure figcaption { - color: #71717a; - font-size: 0.875em; - line-height: 1.4285714; - margin-top: 0.8571429em; -} -.prose code { - color: #18181b; - font-weight: 600; - font-size: 0.875em; -} -.prose code::before { - content: "`"; -} -.prose code::after { - content: "`"; -} -.prose a code { - color: #18181b; -} -.prose pre { - color: #e4e4e7; - background-color: #27272a; - overflow-x: auto; - font-size: 0.875em; - line-height: 1.7142857; - margin-top: 1.7142857em; - margin-bottom: 1.7142857em; - border-radius: 0.375rem; - padding-top: 0.8571429em; - padding-right: 1.1428571em; - padding-bottom: 0.8571429em; - padding-left: 1.1428571em; -} -.prose pre code { - background-color: transparent; - border-width: 0; - border-radius: 0; - padding: 0; - font-weight: 400; - color: inherit; - font-size: inherit; - font-family: inherit; - line-height: inherit; -} -.prose pre code::before { - content: none; -} -.prose pre code::after { - content: none; -} -.prose table { - width: 100%; - table-layout: auto; - text-align: left; - margin-top: 2em; - margin-bottom: 2em; - font-size: 0.875em; - line-height: 1.7142857; -} -.prose thead { - color: #18181b; - font-weight: 600; - border-bottom-width: 1px; - border-bottom-color: #d4d4d8; -} -.prose thead th { - vertical-align: bottom; - padding-right: 0.5714286em; - padding-bottom: 0.5714286em; - padding-left: 0.5714286em; -} -.prose tbody tr { - border-bottom-width: 1px; - border-bottom-color: #e4e4e7; -} -.prose tbody tr:last-child { - border-bottom-width: 0; -} -.prose tbody td { - vertical-align: top; - padding-top: 0.5714286em; - padding-right: 0.5714286em; - padding-bottom: 0.5714286em; - padding-left: 0.5714286em; -} -.prose { - font-size: 1rem; - line-height: 1.75; -} -.prose p { - margin-top: 1.25em; - margin-bottom: 1.25em; -} -.prose img { - margin-top: 2em; - margin-bottom: 2em; -} -.prose video { - margin-top: 2em; - margin-bottom: 2em; -} -.prose figure { - margin-top: 2em; - margin-bottom: 2em; -} -.prose figure > * { - margin-top: 0; - margin-bottom: 0; -} -.prose h2 code { - font-size: 0.875em; -} -.prose h3 code { - font-size: 0.9em; -} -.prose ol { - margin-top: 1.25em; - margin-bottom: 1.25em; -} -.prose ul { - margin-top: 1.25em; - margin-bottom: 1.25em; -} -.prose li { - margin-top: 0.5em; - margin-bottom: 0.5em; -} -.prose > ul > li p { - margin-top: 0.75em; - margin-bottom: 0.75em; -} -.prose > ul > li > *:first-child { - margin-top: 1.25em; -} -.prose > ul > li > *:last-child { - margin-bottom: 1.25em; -} -.prose > ol > li > *:first-child { - margin-top: 1.25em; -} -.prose > ol > li > *:last-child { - margin-bottom: 1.25em; -} -.prose ul ul, .prose ul ol, .prose ol ul, .prose ol ol { - margin-top: 0.75em; - margin-bottom: 0.75em; -} -.prose hr + * { - margin-top: 0; -} -.prose h2 + * { - margin-top: 0; -} -.prose h3 + * { - margin-top: 0; -} -.prose h4 + * { - margin-top: 0; -} -.prose thead th:first-child { - padding-left: 0; -} -.prose thead th:last-child { - padding-right: 0; -} -.prose tbody td:first-child { - padding-left: 0; -} -.prose tbody td:last-child { - padding-right: 0; -} -.prose > :first-child { - margin-top: 0; -} -.prose > :last-child { - margin-bottom: 0; -} -.prose-orange a { - color: #E68400; -} -.prose-orange a code { - color: #E68400; -} - -/** - * Here you would add any of your custom component classes; stuff that you'd - * want loaded *before* the utilities so that the utilities could still - * override them. - * - * Example: - * - * .btn { ... } - * .form-input { ... } - */ - -/* Global styles */ -html, body { - height: 100%; - width: 100%; -} - -ul, ol { - margin: 1em 0 1em 1.1em; -} - -body { - display: flex; - flex-direction: column; - line-height: 1.375; - letter-spacing: -0.025em; -} - -.dark body { - --tw-text-opacity: 1; - color: rgba(255, 255, 255, var(--tw-text-opacity)); -} - -body { - color: #333333; - quotes: "“" "”"; -} - -main { - display: flex; - flex-grow: 1; - flex-direction: column; -} - -picture::before { - position: absolute; - display: block; - height: 100%; - width: 100%; - background-color: transparent; - - content: ""; -} - -/* Placeholder styles */ -/* Anime placeholders */ -.anime-poster { - border-radius: 0.5rem; - border-width: 2px; - --tw-border-opacity: 1; - border-color: rgba(244, 244, 245, var(--tw-border-opacity)); - --tw-border-opacity: 0.25; - background-size: cover; - background-position: center; - background-repeat: no-repeat; - --tw-shadow: 0 10px 15px -3px rgba(0, 0, 0, 0.1), 0 4px 6px -2px rgba(0, 0, 0, 0.05); - box-shadow: var(--tw-ring-offset-shadow, 0 0 #0000), var(--tw-ring-shadow, 0 0 #0000), var(--tw-shadow); - margin: 10px auto 0; - width: 180px; - height: 268px; - background-size: 180px 268px; /* ratio 45:67 */ -} - -/* User placeholders */ -.profile-image { - border-radius: 9999px; - border-width: 2px; - --tw-border-opacity: 1; - border-color: rgba(244, 244, 245, var(--tw-border-opacity)); - --tw-border-opacity: 0.25; - background-size: cover; - background-position: center; - background-repeat: no-repeat; - --tw-shadow: 0 10px 15px -3px rgba(0, 0, 0, 0.1), 0 4px 6px -2px rgba(0, 0, 0, 0.05); - box-shadow: var(--tw-ring-offset-shadow, 0 0 #0000), var(--tw-ring-shadow, 0 0 #0000), var(--tw-shadow); - margin: 10px auto 0; - width: 150px; - height: 150px; - background-size: 150px 150px; -} - -/** - * This injects all of Tailwind's utility classes, generated based on the - * config file. - */ -.visible { - visibility: visible; -} -.static { - position: static; -} -.fixed { - position: fixed; -} -.absolute { - position: absolute; -} -.relative { - position: relative; -} -.inset-0 { - top: 0px; - right: 0px; - bottom: 0px; - left: 0px; -} -.inset-x-0 { - left: 0px; - right: 0px; -} -.left-0 { - left: 0px; -} -.right-0 { - right: 0px; -} -.top-0 { - top: 0px; -} -.bottom-0 { - bottom: 0px; -} -.top-10 { - top: 2.5rem; -} -.right-auto { - right: auto; -} -.z-50 { - z-index: 50; -} -.z-0 { - z-index: 0; -} -.col-span-12 { - grid-column: span 12 / span 12; -} -.col-span-6 { - grid-column: span 6 / span 6; -} -.col-span-3 { - grid-column: span 3 / span 3; -} -.m-0 { - margin: 0px; -} -.m-8 { - margin: 2rem; -} -.my-auto { - margin-top: auto; - margin-bottom: auto; -} -.mx-4 { - margin-left: 1rem; - margin-right: 1rem; -} -.mx-auto { - margin-left: auto; - margin-right: auto; -} -.my-3 { - margin-top: 0.75rem; - margin-bottom: 0.75rem; -} -.mx-5 { - margin-left: 1.25rem; - margin-right: 1.25rem; -} -.my-8 { - margin-top: 2rem; - margin-bottom: 2rem; -} -.mr-1 { - margin-right: 0.25rem; -} -.mb-5 { - margin-bottom: 1.25rem; -} -.mb-4 { - margin-bottom: 1rem; -} -.mt-1 { - margin-top: 0.25rem; -} -.mt-4 { - margin-top: 1rem; -} -.ml-2 { - margin-left: 0.5rem; -} -.ml-4 { - margin-left: 1rem; -} -.mt-5 { - margin-top: 1.25rem; -} -.mt-2 { - margin-top: 0.5rem; -} -.mb-2 { - margin-bottom: 0.5rem; -} -.ml-1 { - margin-left: 0.25rem; -} -.ml-0\.5 { - margin-left: 0.125rem; -} -.ml-0 { - margin-left: 0px; -} -.mr-2 { - margin-right: 0.5rem; -} -.mt-3 { - margin-top: 0.75rem; -} -.mb-8 { - margin-bottom: 2rem; -} -.-mr-2 { - margin-right: -0.5rem; -} -.ml-3 { - margin-left: 0.75rem; -} -.mt-10 { - margin-top: 2.5rem; -} -.mt-16 { - margin-top: 4rem; -} -.mt-6 { - margin-top: 1.5rem; -} -.mr-3 { - margin-right: 0.75rem; -} -.mb-6 { - margin-bottom: 1.5rem; -} -.-ml-px { - margin-left: -1px; -} -.mt-8 { - margin-top: 2rem; -} -.ml-8 { - margin-left: 2rem; -} -.block { - display: block; -} -.inline-block { - display: inline-block; -} -.flex { - display: flex; -} -.inline-flex { - display: inline-flex; -} -.table { - display: table; -} -.grid { - display: grid; -} -.contents { - display: contents; -} -.hidden { - display: none; -} -.h-4 { - height: 1rem; -} -.h-6 { - height: 1.5rem; -} -.h-8 { - height: 2rem; -} -.h-1 { - height: 0.25rem; -} -.h-full { - height: 100%; -} -.h-16 { - height: 4rem; -} -.h-10 { - height: 2.5rem; -} -.h-20 { - height: 5rem; -} -.h-5 { - height: 1.25rem; -} -.h-9 { - height: 2.25rem; -} -.min-h-screen { - min-height: 100vh; -} -.w-screen { - width: 100vw; -} -.w-full { - width: 100%; -} -.w-4 { - width: 1rem; -} -.w-3\/4 { - width: 75%; -} -.w-48 { - width: 12rem; -} -.w-1\/2 { - width: 50%; -} -.w-16 { - width: 4rem; -} -.w-auto { - width: auto; -} -.w-8 { - width: 2rem; -} -.w-6 { - width: 1.5rem; -} -.w-10 { - width: 2.5rem; -} -.w-1\/4 { - width: 25%; -} -.w-20 { - width: 5rem; -} -.w-5 { - width: 1.25rem; -} -.max-w-4xl { - max-width: 56rem; -} -.max-w-prose { - max-width: 65ch; -} -.max-w-7xl { - max-width: 80rem; -} -.max-w-lg { - max-width: 32rem; -} -.max-w-md { - max-width: 28rem; -} -.max-w-xl { - max-width: 36rem; -} -.flex-1 { - flex: 1 1 0%; -} -.flex-shrink-0 { - flex-shrink: 0; -} -.flex-grow { - flex-grow: 1; -} -.border-collapse { - border-collapse: collapse; -} -.transform { - --tw-translate-x: 0; - --tw-translate-y: 0; - --tw-rotate: 0; - --tw-skew-x: 0; - --tw-skew-y: 0; - --tw-scale-x: 1; - --tw-scale-y: 1; - transform: translateX(var(--tw-translate-x)) translateY(var(--tw-translate-y)) rotate(var(--tw-rotate)) skewX(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y)); -} -.transform-none { - transform: none; -} -.origin-top-left { - transform-origin: top left; -} -.origin-top { - transform-origin: top; -} -.origin-top-right { - transform-origin: top right; -} -.translate-y-4 { - --tw-translate-y: 1rem; -} -.translate-y-0 { - --tw-translate-y: 0px; -} -.scale-95 { - --tw-scale-x: .95; - --tw-scale-y: .95; -} -.scale-100 { - --tw-scale-x: 1; - --tw-scale-y: 1; -} -.cursor-pointer { - cursor: pointer; -} -.cursor-default { - cursor: default; -} -.select-none { - -webkit-user-select: none; - -moz-user-select: none; - -ms-user-select: none; - user-select: none; -} -.list-inside { - list-style-position: inside; -} -.list-none { - list-style-type: none; -} -.list-disc { - list-style-type: disc; -} -.grid-cols-6 { - grid-template-columns: repeat(6, minmax(0, 1fr)); -} -.grid-cols-1 { - grid-template-columns: repeat(1, minmax(0, 1fr)); -} -.grid-rows-\[repeat\(2\2c minmax\(0\2c min-content\)\)\] { - grid-template-rows: repeat(2, minmax(0, -webkit-min-content)); - grid-template-rows: repeat(2, minmax(0, min-content)); -} -.flex-col { - flex-direction: column; -} -.flex-row { - flex-direction: row; -} -.flex-wrap { - flex-wrap: wrap; -} -.flex-nowrap { - flex-wrap: nowrap; -} -.items-center { - align-items: center; -} -.justify-end { - justify-content: flex-end; -} -.justify-between { - justify-content: space-between; -} -.justify-center { - justify-content: center; -} -.gap-6 { - gap: 1.5rem; -} -.gap-1 { - gap: 0.25rem; -} -.gap-5 { - gap: 1.25rem; -} -.gap-x-10 { - -moz-column-gap: 2.5rem; - column-gap: 2.5rem; -} -.gap-y-4 { - row-gap: 1rem; -} -.space-x-8 > :not([hidden]) ~ :not([hidden]) { - --tw-space-x-reverse: 0; - margin-right: calc(2rem * var(--tw-space-x-reverse)); - margin-left: calc(2rem * calc(1 - var(--tw-space-x-reverse))); -} -.space-y-1 > :not([hidden]) ~ :not([hidden]) { - --tw-space-y-reverse: 0; - margin-top: calc(0.25rem * calc(1 - var(--tw-space-y-reverse))); - margin-bottom: calc(0.25rem * var(--tw-space-y-reverse)); -} -.space-y-6 > :not([hidden]) ~ :not([hidden]) { - --tw-space-y-reverse: 0; - margin-top: calc(1.5rem * calc(1 - var(--tw-space-y-reverse))); - margin-bottom: calc(1.5rem * var(--tw-space-y-reverse)); -} -.self-center { - align-self: center; -} -.overflow-hidden { - overflow: hidden; -} -.overflow-x-hidden { - overflow-x: hidden; -} -.overflow-y-scroll { - overflow-y: scroll; -} -.overflow-x-scroll { - overflow-x: scroll; -} -.whitespace-nowrap { - white-space: nowrap; -} -.break-all { - word-break: break-all; -} -.rounded { - border-radius: 0.25rem; -} -.rounded-md { - border-radius: 0.375rem; -} -.rounded-lg { - border-radius: 0.5rem; -} -.rounded-full { - border-radius: 9999px; -} -.rounded-l-md { - border-top-left-radius: 0.375rem; - border-bottom-left-radius: 0.375rem; -} -.rounded-r-md { - border-top-right-radius: 0.375rem; - border-bottom-right-radius: 0.375rem; -} -.border { - border-width: 1px; -} -.border-2 { - border-width: 2px; -} -.border-b { - border-bottom-width: 1px; -} -.border-b-2 { - border-bottom-width: 2px; -} -.border-l-4 { - border-left-width: 4px; -} -.border-t { - border-top-width: 1px; -} -.border-l-2 { - border-left-width: 2px; -} -.border-t-2 { - border-top-width: 2px; -} -.border-transparent { - border-color: transparent; -} -.border-orange-400 { - --tw-border-opacity: 1; - border-color: rgba(255, 169, 51, var(--tw-border-opacity)); -} -.border-orange-500 { - --tw-border-opacity: 1; - border-color: rgba(255, 147, 0, var(--tw-border-opacity)); -} -.border-gray-200 { - --tw-border-opacity: 1; - border-color: rgba(228, 228, 231, var(--tw-border-opacity)); -} -.border-blue-500 { - --tw-border-opacity: 1; - border-color: rgba(59, 130, 246, var(--tw-border-opacity)); -} -.border-green-500 { - --tw-border-opacity: 1; - border-color: rgba(34, 197, 94, var(--tw-border-opacity)); -} -.border-violet-500 { - --tw-border-opacity: 1; - border-color: rgba(139, 92, 246, var(--tw-border-opacity)); -} -.border-gray-100 { - --tw-border-opacity: 1; - border-color: rgba(244, 244, 245, var(--tw-border-opacity)); -} -.border-gray-300 { - --tw-border-opacity: 1; - border-color: rgba(212, 212, 216, var(--tw-border-opacity)); -} -.bg-white { - --tw-bg-opacity: 1; - background-color: rgba(255, 255, 255, var(--tw-bg-opacity)); -} -.bg-orange-500 { - --tw-bg-opacity: 1; - background-color: rgba(255, 147, 0, var(--tw-bg-opacity)); -} -.bg-red-600 { - --tw-bg-opacity: 1; - background-color: rgba(220, 38, 38, var(--tw-bg-opacity)); -} -.bg-gray-100 { - --tw-bg-opacity: 1; - background-color: rgba(244, 244, 245, var(--tw-bg-opacity)); -} -.bg-gray-50 { - --tw-bg-opacity: 1; - background-color: rgba(250, 250, 250, var(--tw-bg-opacity)); -} -.bg-gray-500 { - --tw-bg-opacity: 1; - background-color: rgba(113, 113, 122, var(--tw-bg-opacity)); -} -.bg-black { - --tw-bg-opacity: 1; - background-color: rgba(0, 0, 0, var(--tw-bg-opacity)); -} -.bg-purple-500 { - --tw-bg-opacity: 1; - background-color: rgba(168, 85, 247, var(--tw-bg-opacity)); -} -.bg-blue-500 { - --tw-bg-opacity: 1; - background-color: rgba(59, 130, 246, var(--tw-bg-opacity)); -} -.bg-lightBlue-500 { - --tw-bg-opacity: 1; - background-color: rgba(14, 165, 233, var(--tw-bg-opacity)); -} -.bg-green-500 { - --tw-bg-opacity: 1; - background-color: rgba(34, 197, 94, var(--tw-bg-opacity)); -} -.bg-yellow-500 { - --tw-bg-opacity: 1; - background-color: rgba(234, 179, 8, var(--tw-bg-opacity)); -} -.bg-amber-500 { - --tw-bg-opacity: 1; - background-color: rgba(245, 158, 11, var(--tw-bg-opacity)); -} -.bg-red-500 { - --tw-bg-opacity: 1; - background-color: rgba(239, 68, 68, var(--tw-bg-opacity)); -} -.bg-orange-50 { - --tw-bg-opacity: 1; - background-color: rgba(255, 244, 229, var(--tw-bg-opacity)); -} -.bg-gray-200 { - --tw-bg-opacity: 1; - background-color: rgba(228, 228, 231, var(--tw-bg-opacity)); -} -.bg-blue-300 { - --tw-bg-opacity: 1; - background-color: rgba(147, 197, 253, var(--tw-bg-opacity)); -} -.bg-orange-300 { - --tw-bg-opacity: 1; - background-color: rgba(255, 190, 102, var(--tw-bg-opacity)); -} -.bg-green-300 { - --tw-bg-opacity: 1; - background-color: rgba(134, 239, 172, var(--tw-bg-opacity)); -} -.bg-violet-300 { - --tw-bg-opacity: 1; - background-color: rgba(196, 181, 253, var(--tw-bg-opacity)); -} -.\!bg-white { - --tw-bg-opacity: 1 !important; - background-color: rgba(255, 255, 255, var(--tw-bg-opacity)) !important; -} -.bg-cover { - background-size: cover; -} -.bg-no-repeat { - background-repeat: no-repeat; -} -.fill-current { - fill: currentColor; -} -.p-10 { - padding: 2.5rem; -} -.p-2 { - padding: 0.5rem; -} -.p-6 { - padding: 1.5rem; -} -.p-3 { - padding: 0.75rem; -} -.py-1 { - padding-top: 0.25rem; - padding-bottom: 0.25rem; -} -.px-2 { - padding-left: 0.5rem; - padding-right: 0.5rem; -} -.px-4 { - padding-left: 1rem; - padding-right: 1rem; -} -.py-5 { - padding-top: 1.25rem; - padding-bottom: 1.25rem; -} -.py-2 { - padding-top: 0.5rem; - padding-bottom: 0.5rem; -} -.px-6 { - padding-left: 1.5rem; - padding-right: 1.5rem; -} -.py-4 { - padding-top: 1rem; - padding-bottom: 1rem; -} -.py-3 { - padding-top: 0.75rem; - padding-bottom: 0.75rem; -} -.px-1 { - padding-left: 0.25rem; - padding-right: 0.25rem; -} -.py-8 { - padding-top: 2rem; - padding-bottom: 2rem; -} -.px-3 { - padding-left: 0.75rem; - padding-right: 0.75rem; -} -.py-6 { - padding-top: 1.5rem; - padding-bottom: 1.5rem; -} -.py-10 { - padding-top: 2.5rem; - padding-bottom: 2.5rem; -} -.\!px-2 { - padding-left: 0.5rem !important; - padding-right: 0.5rem !important; -} -.px-12 { - padding-left: 3rem; - padding-right: 3rem; -} -.pt-10 { - padding-top: 2.5rem; -} -.pb-6 { - padding-bottom: 1.5rem; -} -.pb-4 { - padding-bottom: 1rem; -} -.pt-6 { - padding-top: 1.5rem; -} -.pt-1 { - padding-top: 0.25rem; -} -.pl-3 { - padding-left: 0.75rem; -} -.pr-4 { - padding-right: 1rem; -} -.pt-4 { - padding-top: 1rem; -} -.pb-2 { - padding-bottom: 0.5rem; -} -.pb-\[100\%\] { - padding-bottom: 100%; -} -.pt-2 { - padding-top: 0.5rem; -} -.pb-3 { - padding-bottom: 0.75rem; -} -.pb-1 { - padding-bottom: 0.25rem; -} -.pt-5 { - padding-top: 1.25rem; -} -.pb-8 { - padding-bottom: 2rem; -} -.pb-5 { - padding-bottom: 1.25rem; -} -.pr-12 { - padding-right: 3rem; -} -.pt-0 { - padding-top: 0px; -} -.text-center { - text-align: center; -} -.text-right { - text-align: right; -} -.align-middle { - vertical-align: middle; -} -.font-mono { - font-family: ui-monospace, SFMono-Regular, Menlo, Monaco, Consolas, "Liberation Mono", "Courier New", monospace; -} -.text-xl { - font-size: 1.25rem; - line-height: 1.75rem; -} -.text-2xl { - font-size: 1.5rem; - line-height: 2rem; -} -.text-sm { - font-size: 0.875rem; - line-height: 1.25rem; -} -.text-xs { - font-size: 0.75rem; - line-height: 1rem; -} -.text-lg { - font-size: 1.125rem; - line-height: 1.75rem; -} -.text-base { - font-size: 1rem; - line-height: 1.5rem; -} -.text-5xl { - font-size: 3rem; - line-height: 1; -} -.text-4xl { - font-size: 2.25rem; - line-height: 2.5rem; -} -.text-6xl { - font-size: 3.75rem; - line-height: 1; -} -.font-semibold { - font-weight: 600; -} -.font-bold { - font-weight: 700; -} -.font-medium { - font-weight: 500; -} -.font-black { - font-weight: 900; -} -.font-light { - font-weight: 300; -} -.font-normal { - font-weight: 400; -} -.uppercase { - text-transform: uppercase; -} -.leading-tight { - line-height: 1.25; -} -.leading-5 { - line-height: 1.25rem; -} -.leading-snug { - line-height: 1.375; -} -.leading-normal { - line-height: 1.5; -} -.tracking-wide { - letter-spacing: 0.025em; -} -.tracking-widest { - letter-spacing: 0.1em; -} -.tracking-normal { - letter-spacing: 0em; -} -.text-gray-800 { - --tw-text-opacity: 1; - color: rgba(39, 39, 42, var(--tw-text-opacity)); -} -.text-green-600 { - --tw-text-opacity: 1; - color: rgba(22, 163, 74, var(--tw-text-opacity)); -} -.text-orange-500 { - --tw-text-opacity: 1; - color: rgba(255, 147, 0, var(--tw-text-opacity)); -} -.text-gray-600 { - --tw-text-opacity: 1; - color: rgba(82, 82, 91, var(--tw-text-opacity)); -} -.text-white { - --tw-text-opacity: 1; - color: rgba(255, 255, 255, var(--tw-text-opacity)); -} -.text-gray-700 { - --tw-text-opacity: 1; - color: rgba(63, 63, 70, var(--tw-text-opacity)); -} -.text-gray-400 { - --tw-text-opacity: 1; - color: rgba(161, 161, 170, var(--tw-text-opacity)); -} -.text-gray-500 { - --tw-text-opacity: 1; - color: rgba(113, 113, 122, var(--tw-text-opacity)); -} -.text-red-600 { - --tw-text-opacity: 1; - color: rgba(220, 38, 38, var(--tw-text-opacity)); -} -.text-gray-900 { - --tw-text-opacity: 1; - color: rgba(24, 24, 27, var(--tw-text-opacity)); -} -.text-black { - --tw-text-opacity: 1; - color: rgba(0, 0, 0, var(--tw-text-opacity)); -} -.text-orange-700 { - --tw-text-opacity: 1; - color: rgba(204, 118, 0, var(--tw-text-opacity)); -} -.text-blue-500 { - --tw-text-opacity: 1; - color: rgba(59, 130, 246, var(--tw-text-opacity)); -} -.text-green-500 { - --tw-text-opacity: 1; - color: rgba(34, 197, 94, var(--tw-text-opacity)); -} -.text-violet-500 { - --tw-text-opacity: 1; - color: rgba(139, 92, 246, var(--tw-text-opacity)); -} -.text-yellow-300 { - --tw-text-opacity: 1; - color: rgba(253, 224, 71, var(--tw-text-opacity)); -} -.text-red-500 { - --tw-text-opacity: 1; - color: rgba(239, 68, 68, var(--tw-text-opacity)); -} -.underline { - text-decoration: underline; -} -.no-underline { - text-decoration: none; -} -.opacity-0 { - opacity: 0; -} -.opacity-100 { - opacity: 1; -} -.opacity-75 { - opacity: 0.75; -} -.opacity-25 { - opacity: 0.25; -} -.shadow-lg { - --tw-shadow: 0 10px 15px -3px rgba(0, 0, 0, 0.1), 0 4px 6px -2px rgba(0, 0, 0, 0.05); - box-shadow: var(--tw-ring-offset-shadow, 0 0 #0000), var(--tw-ring-shadow, 0 0 #0000), var(--tw-shadow); -} -.shadow { - --tw-shadow: 0 1px 3px 0 rgba(0, 0, 0, 0.1), 0 1px 2px 0 rgba(0, 0, 0, 0.06); - box-shadow: var(--tw-ring-offset-shadow, 0 0 #0000), var(--tw-ring-shadow, 0 0 #0000), var(--tw-shadow); -} -.shadow-sm { - --tw-shadow: 0 1px 2px 0 rgba(0, 0, 0, 0.05); - box-shadow: var(--tw-ring-offset-shadow, 0 0 #0000), var(--tw-ring-shadow, 0 0 #0000), var(--tw-shadow); -} -.shadow-xl { - --tw-shadow: 0 20px 25px -5px rgba(0, 0, 0, 0.1), 0 10px 10px -5px rgba(0, 0, 0, 0.04); - box-shadow: var(--tw-ring-offset-shadow, 0 0 #0000), var(--tw-ring-shadow, 0 0 #0000), var(--tw-shadow); -} -.shadow-md { - --tw-shadow: 0 4px 6px -1px rgba(0, 0, 0, 0.1), 0 2px 4px -1px rgba(0, 0, 0, 0.06); - box-shadow: var(--tw-ring-offset-shadow, 0 0 #0000), var(--tw-ring-shadow, 0 0 #0000), var(--tw-shadow); -} -.ring-1 { - --tw-ring-offset-shadow: var(--tw-ring-inset) 0 0 0 var(--tw-ring-offset-width) var(--tw-ring-offset-color); - --tw-ring-shadow: var(--tw-ring-inset) 0 0 0 calc(1px + var(--tw-ring-offset-width)) var(--tw-ring-color); - box-shadow: var(--tw-ring-offset-shadow), var(--tw-ring-shadow), var(--tw-shadow, 0 0 #0000); -} -.ring { - --tw-ring-offset-shadow: var(--tw-ring-inset) 0 0 0 var(--tw-ring-offset-width) var(--tw-ring-offset-color); - --tw-ring-shadow: var(--tw-ring-inset) 0 0 0 calc(3px + var(--tw-ring-offset-width)) var(--tw-ring-color); - box-shadow: var(--tw-ring-offset-shadow), var(--tw-ring-shadow), var(--tw-shadow, 0 0 #0000); -} -.ring-inset { - --tw-ring-inset: inset; -} -.ring-black { - --tw-ring-opacity: 1; - --tw-ring-color: rgba(0, 0, 0, var(--tw-ring-opacity)); -} -.ring-gray-100 { - --tw-ring-opacity: 1; - --tw-ring-color: rgba(244, 244, 245, var(--tw-ring-opacity)); -} -.ring-opacity-5 { - --tw-ring-opacity: 0.05; -} -.ring-opacity-25 { - --tw-ring-opacity: 0.25; -} -.filter { - --tw-blur: var(--tw-empty,/*!*/ /*!*/); - --tw-brightness: var(--tw-empty,/*!*/ /*!*/); - --tw-contrast: var(--tw-empty,/*!*/ /*!*/); - --tw-grayscale: var(--tw-empty,/*!*/ /*!*/); - --tw-hue-rotate: var(--tw-empty,/*!*/ /*!*/); - --tw-invert: var(--tw-empty,/*!*/ /*!*/); - --tw-saturate: var(--tw-empty,/*!*/ /*!*/); - --tw-sepia: var(--tw-empty,/*!*/ /*!*/); - --tw-drop-shadow: var(--tw-empty,/*!*/ /*!*/); - filter: var(--tw-blur) var(--tw-brightness) var(--tw-contrast) var(--tw-grayscale) var(--tw-hue-rotate) var(--tw-invert) var(--tw-saturate) var(--tw-sepia) var(--tw-drop-shadow); -} -.transition { - transition-property: background-color, border-color, color, fill, stroke, opacity, box-shadow, transform, filter, -webkit-backdrop-filter; - transition-property: background-color, border-color, color, fill, stroke, opacity, box-shadow, transform, filter, backdrop-filter; - transition-property: background-color, border-color, color, fill, stroke, opacity, box-shadow, transform, filter, backdrop-filter, -webkit-backdrop-filter; - transition-timing-function: cubic-bezier(0.4, 0, 0.2, 1); - transition-duration: 150ms; -} -.transition-all { - transition-property: all; - transition-timing-function: cubic-bezier(0.4, 0, 0.2, 1); - transition-duration: 150ms; -} -.duration { - transition-duration: 150ms; -} -.duration-150 { - transition-duration: 150ms; -} -.duration-200 { - transition-duration: 200ms; -} -.duration-75 { - transition-duration: 75ms; -} -.duration-300 { - transition-duration: 300ms; -} -.ease-in-out { - transition-timing-function: cubic-bezier(0.4, 0, 0.2, 1); -} -.ease-out { - transition-timing-function: cubic-bezier(0, 0, 0.2, 1); -} -.ease-in { - transition-timing-function: cubic-bezier(0.4, 0, 1, 1); -} -.line-clamp-5 { - overflow: hidden; - display: -webkit-box; - -webkit-box-orient: vertical; - -webkit-line-clamp: 5; -} -/* Chrome, Safari and Opera */ -.no-scrollbar::-webkit-scrollbar { - display: none; - } -.no-scrollbar { - -ms-overflow-style: none; /* IE and Edge */ - scrollbar-width: none; /* Firefox */ - } - -/** - * Here you would add any custom utilities you need that don't come out of the - * box with Tailwind. - * - * Example : - * - * .bg-pattern-graph-paper { ... } - * .skew-45 { ... } - */ - -[x-cloak] { - display: none; -} - -/** - * This injects all of Tailwind's screen classes, generated based on the - * config file. - */ -.hover\:border-gray-300:hover { - --tw-border-opacity: 1; - border-color: rgba(212, 212, 216, var(--tw-border-opacity)); -} -.hover\:border-orange-400:hover { - --tw-border-opacity: 1; - border-color: rgba(255, 169, 51, var(--tw-border-opacity)); -} -.hover\:border-blue-400:hover { - --tw-border-opacity: 1; - border-color: rgba(96, 165, 250, var(--tw-border-opacity)); -} -.hover\:border-green-400:hover { - --tw-border-opacity: 1; - border-color: rgba(74, 222, 128, var(--tw-border-opacity)); -} -.hover\:border-violet-400:hover { - --tw-border-opacity: 1; - border-color: rgba(167, 139, 250, var(--tw-border-opacity)); -} -.hover\:bg-orange-400:hover { - --tw-bg-opacity: 1; - background-color: rgba(255, 169, 51, var(--tw-bg-opacity)); -} -.hover\:bg-red-500:hover { - --tw-bg-opacity: 1; - background-color: rgba(239, 68, 68, var(--tw-bg-opacity)); -} -.hover\:bg-gray-100:hover { - --tw-bg-opacity: 1; - background-color: rgba(244, 244, 245, var(--tw-bg-opacity)); -} -.hover\:bg-gray-50:hover { - --tw-bg-opacity: 1; - background-color: rgba(250, 250, 250, var(--tw-bg-opacity)); -} -.hover\:bg-blue-400:hover { - --tw-bg-opacity: 1; - background-color: rgba(96, 165, 250, var(--tw-bg-opacity)); -} -.hover\:bg-green-400:hover { - --tw-bg-opacity: 1; - background-color: rgba(74, 222, 128, var(--tw-bg-opacity)); -} -.hover\:bg-violet-400:hover { - --tw-bg-opacity: 1; - background-color: rgba(167, 139, 250, var(--tw-bg-opacity)); -} -.hover\:\!bg-gray-50:hover { - --tw-bg-opacity: 1 !important; - background-color: rgba(250, 250, 250, var(--tw-bg-opacity)) !important; -} -.hover\:text-gray-900:hover { - --tw-text-opacity: 1; - color: rgba(24, 24, 27, var(--tw-text-opacity)); -} -.hover\:text-orange-500:hover { - --tw-text-opacity: 1; - color: rgba(255, 147, 0, var(--tw-text-opacity)); -} -.hover\:text-gray-700:hover { - --tw-text-opacity: 1; - color: rgba(63, 63, 70, var(--tw-text-opacity)); -} -.hover\:text-white:hover { - --tw-text-opacity: 1; - color: rgba(255, 255, 255, var(--tw-text-opacity)); -} -.hover\:text-gray-800:hover { - --tw-text-opacity: 1; - color: rgba(39, 39, 42, var(--tw-text-opacity)); -} -.hover\:text-orange-400:hover { - --tw-text-opacity: 1; - color: rgba(255, 169, 51, var(--tw-text-opacity)); -} -.hover\:text-gray-500:hover { - --tw-text-opacity: 1; - color: rgba(113, 113, 122, var(--tw-text-opacity)); -} -.hover\:text-gray-400:hover { - --tw-text-opacity: 1; - color: rgba(161, 161, 170, var(--tw-text-opacity)); -} -.hover\:underline:hover { - text-decoration: underline; -} -.focus\:z-10:focus { - z-index: 10; -} -.focus\:border-orange-300:focus { - --tw-border-opacity: 1; - border-color: rgba(255, 190, 102, var(--tw-border-opacity)); -} -.focus\:border-orange-600:focus { - --tw-border-opacity: 1; - border-color: rgba(230, 132, 0, var(--tw-border-opacity)); -} -.focus\:border-red-700:focus { - --tw-border-opacity: 1; - border-color: rgba(185, 28, 28, var(--tw-border-opacity)); -} -.focus\:border-orange-700:focus { - --tw-border-opacity: 1; - border-color: rgba(204, 118, 0, var(--tw-border-opacity)); -} -.focus\:border-gray-300:focus { - --tw-border-opacity: 1; - border-color: rgba(212, 212, 216, var(--tw-border-opacity)); -} -.focus\:border-blue-600:focus { - --tw-border-opacity: 1; - border-color: rgba(37, 99, 235, var(--tw-border-opacity)); -} -.focus\:border-green-600:focus { - --tw-border-opacity: 1; - border-color: rgba(22, 163, 74, var(--tw-border-opacity)); -} -.focus\:border-violet-600:focus { - --tw-border-opacity: 1; - border-color: rgba(124, 58, 237, var(--tw-border-opacity)); -} -.focus\:border-blue-300:focus { - --tw-border-opacity: 1; - border-color: rgba(147, 197, 253, var(--tw-border-opacity)); -} -.focus\:bg-gray-100:focus { - --tw-bg-opacity: 1; - background-color: rgba(244, 244, 245, var(--tw-bg-opacity)); -} -.focus\:bg-orange-100:focus { - --tw-bg-opacity: 1; - background-color: rgba(255, 233, 204, var(--tw-bg-opacity)); -} -.focus\:bg-gray-50:focus { - --tw-bg-opacity: 1; - background-color: rgba(250, 250, 250, var(--tw-bg-opacity)); -} -.focus\:text-gray-700:focus { - --tw-text-opacity: 1; - color: rgba(63, 63, 70, var(--tw-text-opacity)); -} -.focus\:text-orange-800:focus { - --tw-text-opacity: 1; - color: rgba(179, 103, 0, var(--tw-text-opacity)); -} -.focus\:text-gray-800:focus { - --tw-text-opacity: 1; - color: rgba(39, 39, 42, var(--tw-text-opacity)); -} -.focus\:text-gray-500:focus { - --tw-text-opacity: 1; - color: rgba(113, 113, 122, var(--tw-text-opacity)); -} -.focus\:outline-none:focus { - outline: 2px solid transparent; - outline-offset: 2px; -} -.focus\:ring-0:focus { - --tw-ring-offset-shadow: var(--tw-ring-inset) 0 0 0 var(--tw-ring-offset-width) var(--tw-ring-offset-color); - --tw-ring-shadow: var(--tw-ring-inset) 0 0 0 calc(0px + var(--tw-ring-offset-width)) var(--tw-ring-color); - box-shadow: var(--tw-ring-offset-shadow), var(--tw-ring-shadow), var(--tw-shadow, 0 0 #0000); -} -.focus\:ring-orange:focus { - --tw-ring-opacity: 1; - --tw-ring-color: rgba(255, 147, 0, var(--tw-ring-opacity)); -} -.focus\:ring-offset-0:focus { - --tw-ring-offset-width: 0px; -} -.active\:bg-orange-600:active { - --tw-bg-opacity: 1; - background-color: rgba(230, 132, 0, var(--tw-bg-opacity)); -} -.active\:bg-red-600:active { - --tw-bg-opacity: 1; - background-color: rgba(220, 38, 38, var(--tw-bg-opacity)); -} -.active\:bg-blue-600:active { - --tw-bg-opacity: 1; - background-color: rgba(37, 99, 235, var(--tw-bg-opacity)); -} -.active\:bg-green-600:active { - --tw-bg-opacity: 1; - background-color: rgba(22, 163, 74, var(--tw-bg-opacity)); -} -.active\:bg-violet-600:active { - --tw-bg-opacity: 1; - background-color: rgba(124, 58, 237, var(--tw-bg-opacity)); -} -.active\:\!bg-gray-100:active { - --tw-bg-opacity: 1 !important; - background-color: rgba(244, 244, 245, var(--tw-bg-opacity)) !important; -} -.active\:bg-gray-100:active { - --tw-bg-opacity: 1; - background-color: rgba(244, 244, 245, var(--tw-bg-opacity)); -} -.active\:text-white:active { - --tw-text-opacity: 1; - color: rgba(255, 255, 255, var(--tw-text-opacity)); -} -.active\:text-orange-600:active { - --tw-text-opacity: 1; - color: rgba(230, 132, 0, var(--tw-text-opacity)); -} -.active\:text-gray-700:active { - --tw-text-opacity: 1; - color: rgba(63, 63, 70, var(--tw-text-opacity)); -} -.active\:text-gray-500:active { - --tw-text-opacity: 1; - color: rgba(113, 113, 122, var(--tw-text-opacity)); -} -.disabled\:cursor-default:disabled { - cursor: default; -} -.disabled\:border-gray-200:disabled { - --tw-border-opacity: 1; - border-color: rgba(228, 228, 231, var(--tw-border-opacity)); -} -.disabled\:bg-gray-200:disabled { - --tw-bg-opacity: 1; - background-color: rgba(228, 228, 231, var(--tw-bg-opacity)); -} -.disabled\:text-gray-300:disabled { - --tw-text-opacity: 1; - color: rgba(212, 212, 216, var(--tw-text-opacity)); -} -.disabled\:opacity-25:disabled { - opacity: 0.25; -} -.dark .dark\:bg-black { - --tw-bg-opacity: 1; - background-color: rgba(0, 0, 0, var(--tw-bg-opacity)); -} -@media (min-width: 640px) { - .sm\:top-1\/2 { - top: 50%; - } - .sm\:right-10 { - right: 2.5rem; - } - .sm\:col-span-4 { - grid-column: span 4 / span 4; - } - .sm\:col-span-6 { - grid-column: span 6 / span 6; - } - .sm\:col-span-2 { - grid-column: span 2 / span 2; - } - .sm\:mx-0 { - margin-left: 0px; - margin-right: 0px; - } - .sm\:-my-px { - margin-top: -1px; - margin-bottom: -1px; - } - .sm\:ml-10 { - margin-left: 2.5rem; - } - .sm\:ml-6 { - margin-left: 1.5rem; - } - .sm\:mt-0 { - margin-top: 0px; - } - .sm\:block { - display: block; - } - .sm\:flex { - display: flex; - } - .sm\:hidden { - display: none; - } - .sm\:w-1\/3 { - width: 33.333333%; - } - .sm\:w-full { - width: 100%; - } - .sm\:max-w-sm { - max-width: 24rem; - } - .sm\:max-w-md { - max-width: 28rem; - } - .sm\:max-w-lg { - max-width: 32rem; - } - .sm\:max-w-xl { - max-width: 36rem; - } - .sm\:max-w-2xl { - max-width: 42rem; - } - .sm\:flex-1 { - flex: 1 1 0%; - } - .sm\:transform { - --tw-translate-x: 0; - --tw-translate-y: 0; - --tw-rotate: 0; - --tw-skew-x: 0; - --tw-skew-y: 0; - --tw-scale-x: 1; - --tw-scale-y: 1; - transform: translateX(var(--tw-translate-x)) translateY(var(--tw-translate-y)) rotate(var(--tw-rotate)) skewX(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y)); - } - .sm\:translate-y-0 { - --tw-translate-y: 0px; - } - .sm\:-translate-y-1\/2 { - --tw-translate-y: -50%; - } - .sm\:scale-95 { - --tw-scale-x: .95; - --tw-scale-y: .95; - } - .sm\:scale-100 { - --tw-scale-x: 1; - --tw-scale-y: 1; - } - .sm\:grid-cols-2 { - grid-template-columns: repeat(2, minmax(0, 1fr)); - } - .sm\:grid-cols-1 { - grid-template-columns: repeat(1, minmax(0, 1fr)); - } - .sm\:items-center { - align-items: center; - } - .sm\:justify-center { - justify-content: center; - } - .sm\:justify-between { - justify-content: space-between; - } - .sm\:rounded-lg { - border-radius: 0.5rem; - } - .sm\:rounded-md { - border-radius: 0.375rem; - } - .sm\:p-6 { - padding: 1.5rem; - } - .sm\:px-6 { - padding-left: 1.5rem; - padding-right: 1.5rem; - } - .sm\:px-0 { - padding-left: 0px; - padding-right: 0px; - } -} -@media (min-width: 768px) { - .md\:relative { - position: relative; - } - .md\:absolute { - position: absolute; - } - .md\:bottom-0 { - bottom: 0px; - } - .md\:left-0 { - left: 0px; - } - .md\:right-0 { - right: 0px; - } - .md\:col-span-2 { - grid-column: span 2 / span 2; - } - .md\:col-span-1 { - grid-column: span 1 / span 1; - } - .md\:my-6 { - margin-top: 1.5rem; - margin-bottom: 1.5rem; - } - .md\:mx-auto { - margin-left: auto; - margin-right: auto; - } - .md\:mt-0 { - margin-top: 0px; - } - .md\:mb-8 { - margin-bottom: 2rem; - } - .md\:flex { - display: flex; - } - .md\:grid { - display: grid; - } - .md\:h-full { - height: 100%; - } - .md\:min-h-screen { - min-height: 100vh; - } - .md\:w-1\/5 { - width: 20%; - } - .md\:w-1\/2 { - width: 50%; - } - .md\:max-w-xs { - max-width: 20rem; - } - .md\:max-w-lg { - max-width: 32rem; - } - .md\:grid-cols-3 { - grid-template-columns: repeat(3, minmax(0, 1fr)); - } - .md\:gap-6 { - gap: 1.5rem; - } - .md\:rounded-lg { - border-radius: 0.5rem; - } - .md\:bg-white { - --tw-bg-opacity: 1; - background-color: rgba(255, 255, 255, var(--tw-bg-opacity)); - } - .md\:bg-opacity-50 { - --tw-bg-opacity: 0.5; - } - .md\:bg-left { - background-position: left; - } - .md\:p-6 { - padding: 1.5rem; - } - .md\:pb-0 { - padding-bottom: 0px; - } - .md\:text-left { - text-align: left; - } - .md\:text-9xl { - font-size: 8rem; - line-height: 1; - } - .md\:text-3xl { - font-size: 1.875rem; - line-height: 2.25rem; - } - .md\:backdrop-filter { - --tw-backdrop-blur: var(--tw-empty,/*!*/ /*!*/); - --tw-backdrop-brightness: var(--tw-empty,/*!*/ /*!*/); - --tw-backdrop-contrast: var(--tw-empty,/*!*/ /*!*/); - --tw-backdrop-grayscale: var(--tw-empty,/*!*/ /*!*/); - --tw-backdrop-hue-rotate: var(--tw-empty,/*!*/ /*!*/); - --tw-backdrop-invert: var(--tw-empty,/*!*/ /*!*/); - --tw-backdrop-opacity: var(--tw-empty,/*!*/ /*!*/); - --tw-backdrop-saturate: var(--tw-empty,/*!*/ /*!*/); - --tw-backdrop-sepia: var(--tw-empty,/*!*/ /*!*/); - -webkit-backdrop-filter: var(--tw-backdrop-blur) var(--tw-backdrop-brightness) var(--tw-backdrop-contrast) var(--tw-backdrop-grayscale) var(--tw-backdrop-hue-rotate) var(--tw-backdrop-invert) var(--tw-backdrop-opacity) var(--tw-backdrop-saturate) var(--tw-backdrop-sepia); - backdrop-filter: var(--tw-backdrop-blur) var(--tw-backdrop-brightness) var(--tw-backdrop-contrast) var(--tw-backdrop-grayscale) var(--tw-backdrop-hue-rotate) var(--tw-backdrop-invert) var(--tw-backdrop-opacity) var(--tw-backdrop-saturate) var(--tw-backdrop-sepia); - } - .md\:backdrop-blur { - --tw-backdrop-blur: blur(8px); - } -} -@media (min-width: 1024px) { - .lg\:prose-lg { - font-size: 1.125rem; - line-height: 1.7777778; - } - .lg\:prose-lg p { - margin-top: 1.3333333em; - margin-bottom: 1.3333333em; - } - .lg\:prose-lg [class~="lead"] { - font-size: 1.2222222em; - line-height: 1.4545455; - margin-top: 1.0909091em; - margin-bottom: 1.0909091em; - } - .lg\:prose-lg blockquote { - margin-top: 1.6666667em; - margin-bottom: 1.6666667em; - padding-left: 1em; - } - .lg\:prose-lg h1 { - font-size: 2.6666667em; - margin-top: 0; - margin-bottom: 0.8333333em; - line-height: 1; - } - .lg\:prose-lg h2 { - font-size: 1.6666667em; - margin-top: 1.8666667em; - margin-bottom: 1.0666667em; - line-height: 1.3333333; - } - .lg\:prose-lg h3 { - font-size: 1.3333333em; - margin-top: 1.6666667em; - margin-bottom: 0.6666667em; - line-height: 1.5; - } - .lg\:prose-lg h4 { - margin-top: 1.7777778em; - margin-bottom: 0.4444444em; - line-height: 1.5555556; - } - .lg\:prose-lg img { - margin-top: 1.7777778em; - margin-bottom: 1.7777778em; - } - .lg\:prose-lg video { - margin-top: 1.7777778em; - margin-bottom: 1.7777778em; - } - .lg\:prose-lg figure { - margin-top: 1.7777778em; - margin-bottom: 1.7777778em; - } - .lg\:prose-lg figure > * { - margin-top: 0; - margin-bottom: 0; - } - .lg\:prose-lg figure figcaption { - font-size: 0.8888889em; - line-height: 1.5; - margin-top: 1em; - } - .lg\:prose-lg code { - font-size: 0.8888889em; - } - .lg\:prose-lg h2 code { - font-size: 0.8666667em; - } - .lg\:prose-lg h3 code { - font-size: 0.875em; - } - .lg\:prose-lg pre { - font-size: 0.8888889em; - line-height: 1.75; - margin-top: 2em; - margin-bottom: 2em; - border-radius: 0.375rem; - padding-top: 1em; - padding-right: 1.5em; - padding-bottom: 1em; - padding-left: 1.5em; - } - .lg\:prose-lg ol { - margin-top: 1.3333333em; - margin-bottom: 1.3333333em; - } - .lg\:prose-lg ul { - margin-top: 1.3333333em; - margin-bottom: 1.3333333em; - } - .lg\:prose-lg li { - margin-top: 0.6666667em; - margin-bottom: 0.6666667em; - } - .lg\:prose-lg ol > li { - padding-left: 1.6666667em; - } - .lg\:prose-lg ol > li::before { - left: 0; - } - .lg\:prose-lg ul > li { - padding-left: 1.6666667em; - } - .lg\:prose-lg ul > li::before { - width: 0.3333333em; - height: 0.3333333em; - top: calc(0.8888889em - 0.1666667em); - left: 0.2222222em; - } - .lg\:prose-lg > ul > li p { - margin-top: 0.8888889em; - margin-bottom: 0.8888889em; - } - .lg\:prose-lg > ul > li > *:first-child { - margin-top: 1.3333333em; - } - .lg\:prose-lg > ul > li > *:last-child { - margin-bottom: 1.3333333em; - } - .lg\:prose-lg > ol > li > *:first-child { - margin-top: 1.3333333em; - } - .lg\:prose-lg > ol > li > *:last-child { - margin-bottom: 1.3333333em; - } - .lg\:prose-lg ul ul, .lg\:prose-lg ul ol, .lg\:prose-lg ol ul, .lg\:prose-lg ol ol { - margin-top: 0.8888889em; - margin-bottom: 0.8888889em; - } - .lg\:prose-lg ul ul, .lg\:prose-lg ul ol, .lg\:prose-lg ol ul, .lg\:prose-lg ol ol { - margin-top: 0.8888889em; - margin-bottom: 0.8888889em; - } - .lg\:prose-lg ul ul, .lg\:prose-lg ul ol, .lg\:prose-lg ol ul, .lg\:prose-lg ol ol { - margin-top: 0.8888889em; - margin-bottom: 0.8888889em; - } - .lg\:prose-lg ul ul, .lg\:prose-lg ul ol, .lg\:prose-lg ol ul, .lg\:prose-lg ol ol { - margin-top: 0.8888889em; - margin-bottom: 0.8888889em; - } - .lg\:prose-lg hr { - margin-top: 3.1111111em; - margin-bottom: 3.1111111em; - } - .lg\:prose-lg hr + * { - margin-top: 0; - } - .lg\:prose-lg h2 + * { - margin-top: 0; - } - .lg\:prose-lg h3 + * { - margin-top: 0; - } - .lg\:prose-lg h4 + * { - margin-top: 0; - } - .lg\:prose-lg table { - font-size: 0.8888889em; - line-height: 1.5; - } - .lg\:prose-lg thead th { - padding-right: 0.75em; - padding-bottom: 0.75em; - padding-left: 0.75em; - } - .lg\:prose-lg thead th:first-child { - padding-left: 0; - } - .lg\:prose-lg thead th:last-child { - padding-right: 0; - } - .lg\:prose-lg tbody td { - padding-top: 0.75em; - padding-right: 0.75em; - padding-bottom: 0.75em; - padding-left: 0.75em; - } - .lg\:prose-lg tbody td:first-child { - padding-left: 0; - } - .lg\:prose-lg tbody td:last-child { - padding-right: 0; - } - .lg\:prose-lg > :first-child { - margin-top: 0; - } - .lg\:prose-lg > :last-child { - margin-bottom: 0; - } - .lg\:mb-0 { - margin-bottom: 0px; - } - .lg\:h-full { - height: 100%; - } - .lg\:max-h-\[calc\(100vh-64px\)\] { - max-height: calc(100vh - 64px); - } - .lg\:max-w-sm { - max-width: 24rem; - } - .lg\:grid-cols-2 { - grid-template-columns: repeat(2, minmax(0, 1fr)); - } - .lg\:grid-cols-3 { - grid-template-columns: repeat(3, minmax(0, 1fr)); - } - .lg\:grid-rows-none { - grid-template-rows: none; - } - .lg\:bg-center { - background-position: center; - } - .lg\:object-cover { - -o-object-fit: cover; - object-fit: cover; - } - .lg\:px-8 { - padding-left: 2rem; - padding-right: 2rem; - } - .lg\:px-4 { - padding-left: 1rem; - padding-right: 1rem; - } -} -@media (min-width: 1280px) { - .xl\:grid-cols-3 { - grid-template-columns: repeat(3, minmax(0, 1fr)); - } -} -@media (min-width: 1536px) { - .\32xl\:col-span-2 { - grid-column: span 2 / span 2; - } - .\32xl\:grid-cols-3 { - grid-template-columns: repeat(3, minmax(0, 1fr)); - } -} +/*! tailwindcss v2.1.2 | MIT License | https://tailwindcss.com*/ +/*! modern-normalize v1.0.0 | MIT License | https://github.com/sindresorhus/modern-normalize */:root{-moz-tab-size:4;-o-tab-size:4;tab-size:4}html{line-height:1.15;-webkit-text-size-adjust:100%}body{margin:0;font-family:system-ui,-apple-system,Segoe UI,Roboto,Helvetica,Arial,sans-serif,Apple Color Emoji,Segoe UI Emoji}hr{height:0;color:inherit}abbr[title]{-webkit-text-decoration:underline dotted;text-decoration:underline dotted}b,strong{font-weight:bolder}code,kbd,pre,samp{font-family:ui-monospace,SFMono-Regular,Consolas,Liberation Mono,Menlo,monospace;font-size:1em}small{font-size:80%}sub,sup{font-size:75%;line-height:0;position:relative;vertical-align:baseline}sub{bottom:-.25em}sup{top:-.5em}table{text-indent:0;border-color:inherit}button,input,optgroup,select,textarea{font-family:inherit;font-size:100%;line-height:1.15;margin:0}button,select{text-transform:none}[type=button],[type=reset],[type=submit],button{-webkit-appearance:button}::-moz-focus-inner{border-style:none;padding:0}:-moz-focusring{outline:1px dotted ButtonText}:-moz-ui-invalid{box-shadow:none}legend{padding:0}progress{vertical-align:baseline}::-webkit-inner-spin-button,::-webkit-outer-spin-button{height:auto}[type=search]{-webkit-appearance:textfield;outline-offset:-2px}::-webkit-search-decoration{-webkit-appearance:none}::-webkit-file-upload-button{-webkit-appearance:button;font:inherit}summary{display:list-item}blockquote,dd,dl,figure,h1,h2,h3,h4,h5,h6,hr,p,pre{margin:0}button{background-color:transparent;background-image:none}button:focus{outline:1px dotted;outline:5px auto -webkit-focus-ring-color}fieldset,ol,ul{margin:0;padding:0}ol,ul{list-style:none}html{font-family:Inter var,ui-sans-serif,system-ui,-apple-system,BlinkMacSystemFont,Segoe UI,Roboto,Helvetica Neue,Arial,Noto Sans,sans-serif,Apple Color Emoji,Segoe UI Emoji,Segoe UI Symbol,Noto Color Emoji;line-height:1.5}body{font-family:inherit;line-height:inherit}*,:after,:before{box-sizing:border-box;border:0 solid #e4e4e7}hr{border-top-width:1px}img{border-style:solid}textarea{resize:vertical}input::-moz-placeholder, textarea::-moz-placeholder{opacity:1;color:#a1a1aa}input:-ms-input-placeholder, textarea:-ms-input-placeholder{opacity:1;color:#a1a1aa}input::placeholder,textarea::placeholder{opacity:1;color:#a1a1aa}[role=button],button{cursor:pointer}table{border-collapse:collapse}h1,h2,h3,h4,h5,h6{font-size:inherit;font-weight:inherit}a{color:inherit;text-decoration:inherit}button,input,optgroup,select,textarea{padding:0;line-height:inherit;color:inherit}code,kbd,pre,samp{font-family:ui-monospace,SFMono-Regular,Menlo,Monaco,Consolas,Liberation Mono,Courier New,monospace}audio,canvas,embed,iframe,img,object,svg,video{display:block;vertical-align:middle}img,video{max-width:100%;height:auto}*{--tw-shadow:0 0 transparent;--tw-ring-inset:var(--tw-empty,/*!*/ /*!*/);--tw-ring-offset-width:0px;--tw-ring-offset-color:#fff;--tw-ring-color:rgba(59,130,246,0.5);--tw-ring-offset-shadow:0 0 transparent;--tw-ring-shadow:0 0 transparent}[multiple],[type=date],[type=datetime-local],[type=email],[type=month],[type=number],[type=password],[type=search],[type=tel],[type=text],[type=time],[type=url],[type=week],select,textarea{-webkit-appearance:none;-moz-appearance:none;appearance:none;background-color:#fff;border-color:#71717a;border-width:1px;border-radius:0;padding:.5rem .75rem;font-size:1rem;line-height:1.5rem}[multiple]:focus,[type=date]:focus,[type=datetime-local]:focus,[type=email]:focus,[type=month]:focus,[type=number]:focus,[type=password]:focus,[type=search]:focus,[type=tel]:focus,[type=text]:focus,[type=time]:focus,[type=url]:focus,[type=week]:focus,select:focus,textarea:focus{outline:2px solid transparent;outline-offset:2px;--tw-ring-inset:var(--tw-empty,/*!*/ /*!*/);--tw-ring-offset-width:0px;--tw-ring-offset-color:#fff;--tw-ring-color:#2563eb;--tw-ring-offset-shadow:var(--tw-ring-inset) 0 0 0 var(--tw-ring-offset-width) var(--tw-ring-offset-color);--tw-ring-shadow:var(--tw-ring-inset) 0 0 0 calc(1px + var(--tw-ring-offset-width)) var(--tw-ring-color);box-shadow:var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow,0 0 transparent);border-color:#2563eb}input::-moz-placeholder, textarea::-moz-placeholder{color:#71717a;opacity:1}input:-ms-input-placeholder, textarea:-ms-input-placeholder{color:#71717a;opacity:1}input::placeholder,textarea::placeholder{color:#71717a;opacity:1}::-webkit-datetime-edit-fields-wrapper{padding:0}::-webkit-date-and-time-value{min-height:1.5em}select{background-image:url("data:image/svg+xml;charset=utf-8,%3Csvg xmlns='http://www.w3.org/2000/svg' fill='none' viewBox='0 0 20 20'%3E%3Cpath stroke='%2371717a' stroke-linecap='round' stroke-linejoin='round' stroke-width='1.5' d='M6 8l4 4 4-4'/%3E%3C/svg%3E");background-position:right .5rem center;background-repeat:no-repeat;background-size:1.5em 1.5em;padding-right:2.5rem;-webkit-print-color-adjust:exact;color-adjust:exact}[multiple]{background-image:none;background-position:0 0;background-repeat:unset;background-size:initial;padding-right:.75rem;-webkit-print-color-adjust:unset;color-adjust:unset}[type=checkbox],[type=radio]{-webkit-appearance:none;-moz-appearance:none;appearance:none;padding:0;-webkit-print-color-adjust:exact;color-adjust:exact;display:inline-block;vertical-align:middle;background-origin:border-box;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none;flex-shrink:0;height:1rem;width:1rem;color:#2563eb;background-color:#fff;border-color:#71717a;border-width:1px}[type=checkbox]{border-radius:0}[type=radio]{border-radius:100%}[type=checkbox]:focus,[type=radio]:focus{outline:2px solid transparent;outline-offset:2px;--tw-ring-inset:var(--tw-empty,/*!*/ /*!*/);--tw-ring-offset-width:2px;--tw-ring-offset-color:#fff;--tw-ring-color:#2563eb;--tw-ring-offset-shadow:var(--tw-ring-inset) 0 0 0 var(--tw-ring-offset-width) var(--tw-ring-offset-color);--tw-ring-shadow:var(--tw-ring-inset) 0 0 0 calc(2px + var(--tw-ring-offset-width)) var(--tw-ring-color);box-shadow:var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow,0 0 transparent)}[type=checkbox]:checked,[type=radio]:checked{border-color:transparent;background-color:currentColor;background-size:100% 100%;background-position:50%;background-repeat:no-repeat}[type=checkbox]:checked{background-image:url("data:image/svg+xml;charset=utf-8,%3Csvg viewBox='0 0 16 16' fill='%23fff' xmlns='http://www.w3.org/2000/svg'%3E%3Cpath d='M12.207 4.793a1 1 0 010 1.414l-5 5a1 1 0 01-1.414 0l-2-2a1 1 0 011.414-1.414L6.5 9.086l4.293-4.293a1 1 0 011.414 0z'/%3E%3C/svg%3E")}[type=radio]:checked{background-image:url("data:image/svg+xml;charset=utf-8,%3Csvg viewBox='0 0 16 16' fill='%23fff' xmlns='http://www.w3.org/2000/svg'%3E%3Ccircle cx='8' cy='8' r='3'/%3E%3C/svg%3E")}[type=checkbox]:checked:focus,[type=checkbox]:checked:hover,[type=radio]:checked:focus,[type=radio]:checked:hover{border-color:transparent;background-color:currentColor}[type=checkbox]:indeterminate{background-image:url("data:image/svg+xml;charset=utf-8,%3Csvg xmlns='http://www.w3.org/2000/svg' fill='none' viewBox='0 0 16 16'%3E%3Cpath stroke='%23fff' stroke-linecap='round' stroke-linejoin='round' stroke-width='2' d='M4 8h8'/%3E%3C/svg%3E");border-color:transparent;background-color:currentColor;background-size:100% 100%;background-position:50%;background-repeat:no-repeat}[type=checkbox]:indeterminate:focus,[type=checkbox]:indeterminate:hover{border-color:transparent;background-color:currentColor}[type=file]{background:unset;border-color:inherit;border-width:0;border-radius:0;padding:0;font-size:unset;line-height:inherit}[type=file]:focus{outline:1px auto -webkit-focus-ring-color}input:invalid,select:invalid,textarea:invalid{box-shadow:none}.container{width:100%}@media (min-width:640px){.container{max-width:640px}}@media (min-width:768px){.container{max-width:768px}}@media (min-width:1024px){.container{max-width:1024px}}@media (min-width:1280px){.container{max-width:1280px}}@media (min-width:1536px){.container{max-width:1536px}}.prose{color:#3f3f46;max-width:65ch}.prose [class~=lead]{color:#52525b;font-size:1.25em;line-height:1.6;margin-top:1.2em;margin-bottom:1.2em}.prose a{color:#18181b;text-decoration:underline;font-weight:500}.prose strong{color:#18181b;font-weight:600}.prose ol[type=A]{--list-counter-style:upper-alpha}.prose ol[type=a]{--list-counter-style:lower-alpha}.prose ol[type="A s"]{--list-counter-style:upper-alpha}.prose ol[type="a s"]{--list-counter-style:lower-alpha}.prose ol[type=I]{--list-counter-style:upper-roman}.prose ol[type=i]{--list-counter-style:lower-roman}.prose ol[type="I s"]{--list-counter-style:upper-roman}.prose ol[type="i s"]{--list-counter-style:lower-roman}.prose ol[type="1"]{--list-counter-style:decimal}.prose ol>li{position:relative;padding-left:1.75em}.prose ol>li:before{content:counter(list-item,var(--list-counter-style,decimal)) ".";position:absolute;font-weight:400;color:#71717a;left:0}.prose ul>li{position:relative;padding-left:1.75em}.prose ul>li:before{content:"";position:absolute;background-color:#d4d4d8;border-radius:50%;width:.375em;height:.375em;top:.6875em;left:.25em}.prose hr{border-color:#e4e4e7;border-top-width:1px;margin-top:3em;margin-bottom:3em}.prose blockquote{font-weight:500;font-style:italic;color:#18181b;border-left-width:.25rem;border-left-color:#e4e4e7;quotes:"\201C""\201D""\2018""\2019";margin-top:1.6em;margin-bottom:1.6em;padding-left:1em}.prose blockquote p:first-of-type:before{content:open-quote}.prose blockquote p:last-of-type:after{content:close-quote}.prose h1{color:#18181b;font-weight:800;font-size:2.25em;margin-top:0;margin-bottom:.8888889em;line-height:1.1111111}.prose h2{color:#18181b;font-weight:700;font-size:1.5em;margin-top:2em;margin-bottom:1em;line-height:1.3333333}.prose h3{color:#18181b;font-weight:600;font-size:1.25em;margin-top:1.6em;margin-bottom:.6em;line-height:1.6}.prose h4{color:#18181b;font-weight:600;margin-top:1.5em;margin-bottom:.5em;line-height:1.5}.prose figure figcaption{color:#71717a;font-size:.875em;line-height:1.4285714;margin-top:.8571429em}.prose code{color:#18181b;font-weight:600;font-size:.875em}.prose code:after,.prose code:before{content:"`"}.prose a code{color:#18181b}.prose pre{color:#e4e4e7;background-color:#27272a;overflow-x:auto;font-size:.875em;line-height:1.7142857;margin-top:1.7142857em;margin-bottom:1.7142857em;border-radius:.375rem;padding:.8571429em 1.1428571em}.prose pre code{background-color:transparent;border-width:0;border-radius:0;padding:0;font-weight:400;color:inherit;font-size:inherit;font-family:inherit;line-height:inherit}.prose pre code:after,.prose pre code:before{content:none}.prose table{width:100%;table-layout:auto;text-align:left;margin-top:2em;margin-bottom:2em;font-size:.875em;line-height:1.7142857}.prose thead{color:#18181b;font-weight:600;border-bottom-width:1px;border-bottom-color:#d4d4d8}.prose thead th{vertical-align:bottom;padding-right:.5714286em;padding-bottom:.5714286em;padding-left:.5714286em}.prose tbody tr{border-bottom-width:1px;border-bottom-color:#e4e4e7}.prose tbody tr:last-child{border-bottom-width:0}.prose tbody td{vertical-align:top;padding:.5714286em}.prose{font-size:1rem;line-height:1.75}.prose p{margin-top:1.25em;margin-bottom:1.25em}.prose figure,.prose img,.prose video{margin-top:2em;margin-bottom:2em}.prose figure>*{margin-top:0;margin-bottom:0}.prose h2 code{font-size:.875em}.prose h3 code{font-size:.9em}.prose ol,.prose ul{margin-top:1.25em;margin-bottom:1.25em}.prose li{margin-top:.5em;margin-bottom:.5em}.prose>ul>li p{margin-top:.75em;margin-bottom:.75em}.prose>ul>li>:first-child{margin-top:1.25em}.prose>ul>li>:last-child{margin-bottom:1.25em}.prose>ol>li>:first-child{margin-top:1.25em}.prose>ol>li>:last-child{margin-bottom:1.25em}.prose ol ol,.prose ol ul,.prose ul ol,.prose ul ul{margin-top:.75em;margin-bottom:.75em}.prose h2+*,.prose h3+*,.prose h4+*,.prose hr+*{margin-top:0}.prose thead th:first-child{padding-left:0}.prose thead th:last-child{padding-right:0}.prose tbody td:first-child{padding-left:0}.prose tbody td:last-child{padding-right:0}.prose>:first-child{margin-top:0}.prose>:last-child{margin-bottom:0}.prose-orange a,.prose-orange a code{color:#e68400}body,html{height:100%;width:100%}ol,ul{margin:1em 0 1em 1.1em}body{display:flex;flex-direction:column;line-height:1.375;letter-spacing:-.025em}.dark body{--tw-text-opacity:1;color:rgba(255,255,255,var(--tw-text-opacity))}body{color:#333;quotes:"“" "”"}main{display:flex;flex-grow:1;flex-direction:column}picture:before{position:absolute;display:block;height:100%;width:100%;background-color:transparent;content:""}.anime-poster{border-radius:.5rem;background-size:cover;width:180px;height:268px;background-size:180px 268px}.anime-poster,.profile-image{border-width:2px;--tw-border-opacity:1;border-color:rgba(244,244,245,var(--tw-border-opacity));--tw-border-opacity:0.25;background-position:50%;background-repeat:no-repeat;--tw-shadow:0 10px 15px -3px rgba(0,0,0,0.1),0 4px 6px -2px rgba(0,0,0,0.05);box-shadow:var(--tw-ring-offset-shadow,0 0 transparent),var(--tw-ring-shadow,0 0 transparent),var(--tw-shadow);margin:10px auto 0}.profile-image{border-radius:9999px;background-size:cover;width:150px;height:150px;background-size:150px 150px}.visible{visibility:visible}.static{position:static}.fixed{position:fixed}.absolute{position:absolute}.relative{position:relative}.inset-0{top:0;bottom:0}.inset-0,.inset-x-0{right:0;left:0}.left-0{left:0}.right-0{right:0}.top-0{top:0}.bottom-0{bottom:0}.top-10{top:2.5rem}.right-auto{right:auto}.z-50{z-index:50}.z-0{z-index:0}.col-span-12{grid-column:span 12/span 12}.col-span-6{grid-column:span 6/span 6}.col-span-3{grid-column:span 3/span 3}.m-0{margin:0}.m-8{margin:2rem}.my-auto{margin-top:auto;margin-bottom:auto}.mx-4{margin-left:1rem;margin-right:1rem}.mx-auto{margin-left:auto;margin-right:auto}.my-3{margin-top:.75rem;margin-bottom:.75rem}.mx-5{margin-left:1.25rem;margin-right:1.25rem}.my-8{margin-top:2rem;margin-bottom:2rem}.mr-1{margin-right:.25rem}.mb-5{margin-bottom:1.25rem}.mb-4{margin-bottom:1rem}.mt-1{margin-top:.25rem}.mt-4{margin-top:1rem}.ml-2{margin-left:.5rem}.ml-4{margin-left:1rem}.mt-5{margin-top:1.25rem}.mt-2{margin-top:.5rem}.mb-2{margin-bottom:.5rem}.ml-1{margin-left:.25rem}.ml-0\.5{margin-left:.125rem}.ml-0{margin-left:0}.mr-2{margin-right:.5rem}.mt-3{margin-top:.75rem}.mb-8{margin-bottom:2rem}.-mr-2{margin-right:-.5rem}.ml-3{margin-left:.75rem}.mt-10{margin-top:2.5rem}.mt-16{margin-top:4rem}.mt-6{margin-top:1.5rem}.mr-3{margin-right:.75rem}.mb-6{margin-bottom:1.5rem}.-ml-px{margin-left:-1px}.mt-8{margin-top:2rem}.ml-8{margin-left:2rem}.block{display:block}.inline-block{display:inline-block}.flex{display:flex}.inline-flex{display:inline-flex}.table{display:table}.grid{display:grid}.contents{display:contents}.hidden{display:none}.h-4{height:1rem}.h-6{height:1.5rem}.h-8{height:2rem}.h-1{height:.25rem}.h-full{height:100%}.h-16{height:4rem}.h-10{height:2.5rem}.h-20{height:5rem}.h-5{height:1.25rem}.h-9{height:2.25rem}.min-h-screen{min-height:100vh}.w-screen{width:100vw}.w-full{width:100%}.w-4{width:1rem}.w-3\/4{width:75%}.w-48{width:12rem}.w-1\/2{width:50%}.w-16{width:4rem}.w-auto{width:auto}.w-8{width:2rem}.w-6{width:1.5rem}.w-10{width:2.5rem}.w-1\/4{width:25%}.w-20{width:5rem}.w-5{width:1.25rem}.max-w-4xl{max-width:56rem}.max-w-prose{max-width:65ch}.max-w-7xl{max-width:80rem}.max-w-lg{max-width:32rem}.max-w-md{max-width:28rem}.max-w-xl{max-width:36rem}.flex-1{flex:1 1 0%}.flex-shrink-0{flex-shrink:0}.flex-grow{flex-grow:1}.border-collapse{border-collapse:collapse}.transform{--tw-translate-x:0;--tw-translate-y:0;--tw-rotate:0;--tw-skew-x:0;--tw-skew-y:0;--tw-scale-x:1;--tw-scale-y:1;transform:translateX(var(--tw-translate-x)) translateY(var(--tw-translate-y)) rotate(var(--tw-rotate)) skewX(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y))}.transform-none{transform:none}.origin-top-left{transform-origin:top left}.origin-top{transform-origin:top}.origin-top-right{transform-origin:top right}.translate-y-4{--tw-translate-y:1rem}.translate-y-0{--tw-translate-y:0px}.scale-95{--tw-scale-x:.95;--tw-scale-y:.95}.scale-100{--tw-scale-x:1;--tw-scale-y:1}.cursor-pointer{cursor:pointer}.cursor-default{cursor:default}.select-none{-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none}.list-inside{list-style-position:inside}.list-none{list-style-type:none}.list-disc{list-style-type:disc}.grid-cols-6{grid-template-columns:repeat(6,minmax(0,1fr))}.grid-cols-1{grid-template-columns:repeat(1,minmax(0,1fr))}.grid-rows-\[repeat\(2\2c minmax\(0\2c min-content\)\)\]{grid-template-rows:repeat(2,minmax(0,-webkit-min-content));grid-template-rows:repeat(2,minmax(0,min-content))}.flex-col{flex-direction:column}.flex-row{flex-direction:row}.flex-wrap{flex-wrap:wrap}.flex-nowrap{flex-wrap:nowrap}.items-center{align-items:center}.justify-end{justify-content:flex-end}.justify-between{justify-content:space-between}.justify-center{justify-content:center}.gap-6{gap:1.5rem}.gap-1{gap:.25rem}.gap-5{gap:1.25rem}.gap-x-10{-moz-column-gap:2.5rem;column-gap:2.5rem}.gap-y-4{row-gap:1rem}.space-x-8>:not([hidden])~:not([hidden]){--tw-space-x-reverse:0;margin-right:calc(2rem*var(--tw-space-x-reverse));margin-left:calc(2rem*(1 - var(--tw-space-x-reverse)))}.space-y-1>:not([hidden])~:not([hidden]){--tw-space-y-reverse:0;margin-top:calc(0.25rem*(1 - var(--tw-space-y-reverse)));margin-bottom:calc(0.25rem*var(--tw-space-y-reverse))}.space-y-6>:not([hidden])~:not([hidden]){--tw-space-y-reverse:0;margin-top:calc(1.5rem*(1 - var(--tw-space-y-reverse)));margin-bottom:calc(1.5rem*var(--tw-space-y-reverse))}.self-center{align-self:center}.overflow-hidden{overflow:hidden}.overflow-x-hidden{overflow-x:hidden}.overflow-y-scroll{overflow-y:scroll}.overflow-x-scroll{overflow-x:scroll}.whitespace-nowrap{white-space:nowrap}.break-all{word-break:break-all}.rounded{border-radius:.25rem}.rounded-md{border-radius:.375rem}.rounded-lg{border-radius:.5rem}.rounded-full{border-radius:9999px}.rounded-l-md{border-top-left-radius:.375rem;border-bottom-left-radius:.375rem}.rounded-r-md{border-top-right-radius:.375rem;border-bottom-right-radius:.375rem}.border{border-width:1px}.border-2{border-width:2px}.border-b{border-bottom-width:1px}.border-b-2{border-bottom-width:2px}.border-l-4{border-left-width:4px}.border-t{border-top-width:1px}.border-l-2{border-left-width:2px}.border-t-2{border-top-width:2px}.border-transparent{border-color:transparent}.border-orange-400{--tw-border-opacity:1;border-color:rgba(255,169,51,var(--tw-border-opacity))}.border-orange-500{--tw-border-opacity:1;border-color:rgba(255,147,0,var(--tw-border-opacity))}.border-gray-200{--tw-border-opacity:1;border-color:rgba(228,228,231,var(--tw-border-opacity))}.border-blue-500{--tw-border-opacity:1;border-color:rgba(59,130,246,var(--tw-border-opacity))}.border-green-500{--tw-border-opacity:1;border-color:rgba(34,197,94,var(--tw-border-opacity))}.border-violet-500{--tw-border-opacity:1;border-color:rgba(139,92,246,var(--tw-border-opacity))}.border-gray-100{--tw-border-opacity:1;border-color:rgba(244,244,245,var(--tw-border-opacity))}.border-gray-300{--tw-border-opacity:1;border-color:rgba(212,212,216,var(--tw-border-opacity))}.bg-white{--tw-bg-opacity:1;background-color:rgba(255,255,255,var(--tw-bg-opacity))}.bg-orange-500{--tw-bg-opacity:1;background-color:rgba(255,147,0,var(--tw-bg-opacity))}.bg-red-600{--tw-bg-opacity:1;background-color:rgba(220,38,38,var(--tw-bg-opacity))}.bg-gray-100{--tw-bg-opacity:1;background-color:rgba(244,244,245,var(--tw-bg-opacity))}.bg-gray-50{--tw-bg-opacity:1;background-color:rgba(250,250,250,var(--tw-bg-opacity))}.bg-gray-500{--tw-bg-opacity:1;background-color:rgba(113,113,122,var(--tw-bg-opacity))}.bg-black{--tw-bg-opacity:1;background-color:rgba(0,0,0,var(--tw-bg-opacity))}.bg-purple-500{--tw-bg-opacity:1;background-color:rgba(168,85,247,var(--tw-bg-opacity))}.bg-blue-500{--tw-bg-opacity:1;background-color:rgba(59,130,246,var(--tw-bg-opacity))}.bg-lightBlue-500{--tw-bg-opacity:1;background-color:rgba(14,165,233,var(--tw-bg-opacity))}.bg-green-500{--tw-bg-opacity:1;background-color:rgba(34,197,94,var(--tw-bg-opacity))}.bg-yellow-500{--tw-bg-opacity:1;background-color:rgba(234,179,8,var(--tw-bg-opacity))}.bg-amber-500{--tw-bg-opacity:1;background-color:rgba(245,158,11,var(--tw-bg-opacity))}.bg-red-500{--tw-bg-opacity:1;background-color:rgba(239,68,68,var(--tw-bg-opacity))}.bg-orange-50{--tw-bg-opacity:1;background-color:rgba(255,244,229,var(--tw-bg-opacity))}.bg-gray-200{--tw-bg-opacity:1;background-color:rgba(228,228,231,var(--tw-bg-opacity))}.bg-blue-300{--tw-bg-opacity:1;background-color:rgba(147,197,253,var(--tw-bg-opacity))}.bg-orange-300{--tw-bg-opacity:1;background-color:rgba(255,190,102,var(--tw-bg-opacity))}.bg-green-300{--tw-bg-opacity:1;background-color:rgba(134,239,172,var(--tw-bg-opacity))}.bg-violet-300{--tw-bg-opacity:1;background-color:rgba(196,181,253,var(--tw-bg-opacity))}.\!bg-white{--tw-bg-opacity:1!important;background-color:rgba(255,255,255,var(--tw-bg-opacity))!important}.bg-cover{background-size:cover}.bg-no-repeat{background-repeat:no-repeat}.fill-current{fill:currentColor}.p-10{padding:2.5rem}.p-2{padding:.5rem}.p-6{padding:1.5rem}.p-3{padding:.75rem}.py-1{padding-top:.25rem;padding-bottom:.25rem}.px-2{padding-left:.5rem;padding-right:.5rem}.px-4{padding-left:1rem;padding-right:1rem}.py-5{padding-top:1.25rem;padding-bottom:1.25rem}.py-2{padding-top:.5rem;padding-bottom:.5rem}.px-6{padding-left:1.5rem;padding-right:1.5rem}.py-4{padding-top:1rem;padding-bottom:1rem}.py-3{padding-top:.75rem;padding-bottom:.75rem}.px-1{padding-left:.25rem;padding-right:.25rem}.py-8{padding-top:2rem;padding-bottom:2rem}.px-3{padding-left:.75rem;padding-right:.75rem}.py-6{padding-top:1.5rem;padding-bottom:1.5rem}.py-10{padding-top:2.5rem;padding-bottom:2.5rem}.\!px-2{padding-left:.5rem!important;padding-right:.5rem!important}.px-12{padding-left:3rem;padding-right:3rem}.pt-10{padding-top:2.5rem}.pb-6{padding-bottom:1.5rem}.pb-4{padding-bottom:1rem}.pt-6{padding-top:1.5rem}.pt-1{padding-top:.25rem}.pl-3{padding-left:.75rem}.pr-4{padding-right:1rem}.pt-4{padding-top:1rem}.pb-2{padding-bottom:.5rem}.pb-\[100\%\]{padding-bottom:100%}.pt-2{padding-top:.5rem}.pb-3{padding-bottom:.75rem}.pb-1{padding-bottom:.25rem}.pt-5{padding-top:1.25rem}.pb-8{padding-bottom:2rem}.pb-5{padding-bottom:1.25rem}.pr-12{padding-right:3rem}.pt-0{padding-top:0}.text-center{text-align:center}.text-right{text-align:right}.align-middle{vertical-align:middle}.font-mono{font-family:ui-monospace,SFMono-Regular,Menlo,Monaco,Consolas,Liberation Mono,Courier New,monospace}.text-xl{font-size:1.25rem;line-height:1.75rem}.text-2xl{font-size:1.5rem;line-height:2rem}.text-sm{font-size:.875rem;line-height:1.25rem}.text-xs{font-size:.75rem;line-height:1rem}.text-lg{font-size:1.125rem;line-height:1.75rem}.text-base{font-size:1rem;line-height:1.5rem}.text-5xl{font-size:3rem;line-height:1}.text-4xl{font-size:2.25rem;line-height:2.5rem}.text-6xl{font-size:3.75rem;line-height:1}.font-semibold{font-weight:600}.font-bold{font-weight:700}.font-medium{font-weight:500}.font-black{font-weight:900}.font-light{font-weight:300}.font-normal{font-weight:400}.uppercase{text-transform:uppercase}.leading-tight{line-height:1.25}.leading-5{line-height:1.25rem}.leading-snug{line-height:1.375}.leading-normal{line-height:1.5}.tracking-wide{letter-spacing:.025em}.tracking-widest{letter-spacing:.1em}.tracking-normal{letter-spacing:0}.text-gray-800{--tw-text-opacity:1;color:rgba(39,39,42,var(--tw-text-opacity))}.text-green-600{--tw-text-opacity:1;color:rgba(22,163,74,var(--tw-text-opacity))}.text-orange-500{--tw-text-opacity:1;color:rgba(255,147,0,var(--tw-text-opacity))}.text-gray-600{--tw-text-opacity:1;color:rgba(82,82,91,var(--tw-text-opacity))}.text-white{--tw-text-opacity:1;color:rgba(255,255,255,var(--tw-text-opacity))}.text-gray-700{--tw-text-opacity:1;color:rgba(63,63,70,var(--tw-text-opacity))}.text-gray-400{--tw-text-opacity:1;color:rgba(161,161,170,var(--tw-text-opacity))}.text-gray-500{--tw-text-opacity:1;color:rgba(113,113,122,var(--tw-text-opacity))}.text-red-600{--tw-text-opacity:1;color:rgba(220,38,38,var(--tw-text-opacity))}.text-gray-900{--tw-text-opacity:1;color:rgba(24,24,27,var(--tw-text-opacity))}.text-black{--tw-text-opacity:1;color:rgba(0,0,0,var(--tw-text-opacity))}.text-orange-700{--tw-text-opacity:1;color:rgba(204,118,0,var(--tw-text-opacity))}.text-blue-500{--tw-text-opacity:1;color:rgba(59,130,246,var(--tw-text-opacity))}.text-green-500{--tw-text-opacity:1;color:rgba(34,197,94,var(--tw-text-opacity))}.text-violet-500{--tw-text-opacity:1;color:rgba(139,92,246,var(--tw-text-opacity))}.text-yellow-300{--tw-text-opacity:1;color:rgba(253,224,71,var(--tw-text-opacity))}.text-red-500{--tw-text-opacity:1;color:rgba(239,68,68,var(--tw-text-opacity))}.underline{text-decoration:underline}.no-underline{text-decoration:none}.opacity-0{opacity:0}.opacity-100{opacity:1}.opacity-75{opacity:.75}.opacity-25{opacity:.25}.shadow-lg{--tw-shadow:0 10px 15px -3px rgba(0,0,0,0.1),0 4px 6px -2px rgba(0,0,0,0.05)}.shadow,.shadow-lg{box-shadow:var(--tw-ring-offset-shadow,0 0 transparent),var(--tw-ring-shadow,0 0 transparent),var(--tw-shadow)}.shadow{--tw-shadow:0 1px 3px 0 rgba(0,0,0,0.1),0 1px 2px 0 rgba(0,0,0,0.06)}.shadow-sm{--tw-shadow:0 1px 2px 0 rgba(0,0,0,0.05)}.shadow-sm,.shadow-xl{box-shadow:var(--tw-ring-offset-shadow,0 0 transparent),var(--tw-ring-shadow,0 0 transparent),var(--tw-shadow)}.shadow-xl{--tw-shadow:0 20px 25px -5px rgba(0,0,0,0.1),0 10px 10px -5px rgba(0,0,0,0.04)}.shadow-md{--tw-shadow:0 4px 6px -1px rgba(0,0,0,0.1),0 2px 4px -1px rgba(0,0,0,0.06);box-shadow:var(--tw-ring-offset-shadow,0 0 transparent),var(--tw-ring-shadow,0 0 transparent),var(--tw-shadow)}.ring-1{--tw-ring-offset-shadow:var(--tw-ring-inset) 0 0 0 var(--tw-ring-offset-width) var(--tw-ring-offset-color);--tw-ring-shadow:var(--tw-ring-inset) 0 0 0 calc(1px + var(--tw-ring-offset-width)) var(--tw-ring-color)}.ring,.ring-1{box-shadow:var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow,0 0 transparent)}.ring{--tw-ring-offset-shadow:var(--tw-ring-inset) 0 0 0 var(--tw-ring-offset-width) var(--tw-ring-offset-color);--tw-ring-shadow:var(--tw-ring-inset) 0 0 0 calc(3px + var(--tw-ring-offset-width)) var(--tw-ring-color)}.ring-inset{--tw-ring-inset:inset}.ring-black{--tw-ring-opacity:1;--tw-ring-color:rgba(0,0,0,var(--tw-ring-opacity))}.ring-gray-100{--tw-ring-opacity:1;--tw-ring-color:rgba(244,244,245,var(--tw-ring-opacity))}.ring-opacity-5{--tw-ring-opacity:0.05}.ring-opacity-25{--tw-ring-opacity:0.25}.filter{--tw-blur:var(--tw-empty,/*!*/ /*!*/);--tw-brightness:var(--tw-empty,/*!*/ /*!*/);--tw-contrast:var(--tw-empty,/*!*/ /*!*/);--tw-grayscale:var(--tw-empty,/*!*/ /*!*/);--tw-hue-rotate:var(--tw-empty,/*!*/ /*!*/);--tw-invert:var(--tw-empty,/*!*/ /*!*/);--tw-saturate:var(--tw-empty,/*!*/ /*!*/);--tw-sepia:var(--tw-empty,/*!*/ /*!*/);--tw-drop-shadow:var(--tw-empty,/*!*/ /*!*/);filter:var(--tw-blur) var(--tw-brightness) var(--tw-contrast) var(--tw-grayscale) var(--tw-hue-rotate) var(--tw-invert) var(--tw-saturate) var(--tw-sepia) var(--tw-drop-shadow)}.transition{transition-property:background-color,border-color,color,fill,stroke,opacity,box-shadow,transform,filter,-webkit-backdrop-filter;transition-property:background-color,border-color,color,fill,stroke,opacity,box-shadow,transform,filter,backdrop-filter;transition-property:background-color,border-color,color,fill,stroke,opacity,box-shadow,transform,filter,backdrop-filter,-webkit-backdrop-filter;transition-timing-function:cubic-bezier(.4,0,.2,1);transition-duration:.15s}.transition-all{transition-property:all;transition-timing-function:cubic-bezier(.4,0,.2,1)}.duration,.duration-150,.transition-all{transition-duration:.15s}.duration-200{transition-duration:.2s}.duration-75{transition-duration:75ms}.duration-300{transition-duration:.3s}.ease-in-out{transition-timing-function:cubic-bezier(.4,0,.2,1)}.ease-out{transition-timing-function:cubic-bezier(0,0,.2,1)}.ease-in{transition-timing-function:cubic-bezier(.4,0,1,1)}.line-clamp-5{overflow:hidden;display:-webkit-box;-webkit-box-orient:vertical;-webkit-line-clamp:5}.no-scrollbar::-webkit-scrollbar{display:none}.no-scrollbar{-ms-overflow-style:none;scrollbar-width:none}[x-cloak]{display:none}.hover\:border-gray-300:hover{--tw-border-opacity:1;border-color:rgba(212,212,216,var(--tw-border-opacity))}.hover\:border-orange-400:hover{--tw-border-opacity:1;border-color:rgba(255,169,51,var(--tw-border-opacity))}.hover\:border-blue-400:hover{--tw-border-opacity:1;border-color:rgba(96,165,250,var(--tw-border-opacity))}.hover\:border-green-400:hover{--tw-border-opacity:1;border-color:rgba(74,222,128,var(--tw-border-opacity))}.hover\:border-violet-400:hover{--tw-border-opacity:1;border-color:rgba(167,139,250,var(--tw-border-opacity))}.hover\:bg-orange-400:hover{--tw-bg-opacity:1;background-color:rgba(255,169,51,var(--tw-bg-opacity))}.hover\:bg-red-500:hover{--tw-bg-opacity:1;background-color:rgba(239,68,68,var(--tw-bg-opacity))}.hover\:bg-gray-100:hover{--tw-bg-opacity:1;background-color:rgba(244,244,245,var(--tw-bg-opacity))}.hover\:bg-gray-50:hover{--tw-bg-opacity:1;background-color:rgba(250,250,250,var(--tw-bg-opacity))}.hover\:bg-blue-400:hover{--tw-bg-opacity:1;background-color:rgba(96,165,250,var(--tw-bg-opacity))}.hover\:bg-green-400:hover{--tw-bg-opacity:1;background-color:rgba(74,222,128,var(--tw-bg-opacity))}.hover\:bg-violet-400:hover{--tw-bg-opacity:1;background-color:rgba(167,139,250,var(--tw-bg-opacity))}.hover\:\!bg-gray-50:hover{--tw-bg-opacity:1!important;background-color:rgba(250,250,250,var(--tw-bg-opacity))!important}.hover\:text-gray-900:hover{--tw-text-opacity:1;color:rgba(24,24,27,var(--tw-text-opacity))}.hover\:text-orange-500:hover{--tw-text-opacity:1;color:rgba(255,147,0,var(--tw-text-opacity))}.hover\:text-gray-700:hover{--tw-text-opacity:1;color:rgba(63,63,70,var(--tw-text-opacity))}.hover\:text-white:hover{--tw-text-opacity:1;color:rgba(255,255,255,var(--tw-text-opacity))}.hover\:text-gray-800:hover{--tw-text-opacity:1;color:rgba(39,39,42,var(--tw-text-opacity))}.hover\:text-orange-400:hover{--tw-text-opacity:1;color:rgba(255,169,51,var(--tw-text-opacity))}.hover\:text-gray-500:hover{--tw-text-opacity:1;color:rgba(113,113,122,var(--tw-text-opacity))}.hover\:text-gray-400:hover{--tw-text-opacity:1;color:rgba(161,161,170,var(--tw-text-opacity))}.hover\:underline:hover{text-decoration:underline}.focus\:z-10:focus{z-index:10}.focus\:border-orange-300:focus{--tw-border-opacity:1;border-color:rgba(255,190,102,var(--tw-border-opacity))}.focus\:border-orange-600:focus{--tw-border-opacity:1;border-color:rgba(230,132,0,var(--tw-border-opacity))}.focus\:border-red-700:focus{--tw-border-opacity:1;border-color:rgba(185,28,28,var(--tw-border-opacity))}.focus\:border-orange-700:focus{--tw-border-opacity:1;border-color:rgba(204,118,0,var(--tw-border-opacity))}.focus\:border-gray-300:focus{--tw-border-opacity:1;border-color:rgba(212,212,216,var(--tw-border-opacity))}.focus\:border-blue-600:focus{--tw-border-opacity:1;border-color:rgba(37,99,235,var(--tw-border-opacity))}.focus\:border-green-600:focus{--tw-border-opacity:1;border-color:rgba(22,163,74,var(--tw-border-opacity))}.focus\:border-violet-600:focus{--tw-border-opacity:1;border-color:rgba(124,58,237,var(--tw-border-opacity))}.focus\:border-blue-300:focus{--tw-border-opacity:1;border-color:rgba(147,197,253,var(--tw-border-opacity))}.focus\:bg-gray-100:focus{--tw-bg-opacity:1;background-color:rgba(244,244,245,var(--tw-bg-opacity))}.focus\:bg-orange-100:focus{--tw-bg-opacity:1;background-color:rgba(255,233,204,var(--tw-bg-opacity))}.focus\:bg-gray-50:focus{--tw-bg-opacity:1;background-color:rgba(250,250,250,var(--tw-bg-opacity))}.focus\:text-gray-700:focus{--tw-text-opacity:1;color:rgba(63,63,70,var(--tw-text-opacity))}.focus\:text-orange-800:focus{--tw-text-opacity:1;color:rgba(179,103,0,var(--tw-text-opacity))}.focus\:text-gray-800:focus{--tw-text-opacity:1;color:rgba(39,39,42,var(--tw-text-opacity))}.focus\:text-gray-500:focus{--tw-text-opacity:1;color:rgba(113,113,122,var(--tw-text-opacity))}.focus\:outline-none:focus{outline:2px solid transparent;outline-offset:2px}.focus\:ring-0:focus{--tw-ring-offset-shadow:var(--tw-ring-inset) 0 0 0 var(--tw-ring-offset-width) var(--tw-ring-offset-color);--tw-ring-shadow:var(--tw-ring-inset) 0 0 0 calc(var(--tw-ring-offset-width)) var(--tw-ring-color);box-shadow:var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow,0 0 transparent)}.focus\:ring-orange:focus{--tw-ring-opacity:1;--tw-ring-color:rgba(255,147,0,var(--tw-ring-opacity))}.focus\:ring-offset-0:focus{--tw-ring-offset-width:0px}.active\:bg-orange-600:active{--tw-bg-opacity:1;background-color:rgba(230,132,0,var(--tw-bg-opacity))}.active\:bg-red-600:active{--tw-bg-opacity:1;background-color:rgba(220,38,38,var(--tw-bg-opacity))}.active\:bg-blue-600:active{--tw-bg-opacity:1;background-color:rgba(37,99,235,var(--tw-bg-opacity))}.active\:bg-green-600:active{--tw-bg-opacity:1;background-color:rgba(22,163,74,var(--tw-bg-opacity))}.active\:bg-violet-600:active{--tw-bg-opacity:1;background-color:rgba(124,58,237,var(--tw-bg-opacity))}.active\:\!bg-gray-100:active{--tw-bg-opacity:1!important;background-color:rgba(244,244,245,var(--tw-bg-opacity))!important}.active\:bg-gray-100:active{--tw-bg-opacity:1;background-color:rgba(244,244,245,var(--tw-bg-opacity))}.active\:text-white:active{--tw-text-opacity:1;color:rgba(255,255,255,var(--tw-text-opacity))}.active\:text-orange-600:active{--tw-text-opacity:1;color:rgba(230,132,0,var(--tw-text-opacity))}.active\:text-gray-700:active{--tw-text-opacity:1;color:rgba(63,63,70,var(--tw-text-opacity))}.active\:text-gray-500:active{--tw-text-opacity:1;color:rgba(113,113,122,var(--tw-text-opacity))}.disabled\:cursor-default:disabled{cursor:default}.disabled\:border-gray-200:disabled{--tw-border-opacity:1;border-color:rgba(228,228,231,var(--tw-border-opacity))}.disabled\:bg-gray-200:disabled{--tw-bg-opacity:1;background-color:rgba(228,228,231,var(--tw-bg-opacity))}.disabled\:text-gray-300:disabled{--tw-text-opacity:1;color:rgba(212,212,216,var(--tw-text-opacity))}.disabled\:opacity-25:disabled{opacity:.25}.dark .dark\:bg-black{--tw-bg-opacity:1;background-color:rgba(0,0,0,var(--tw-bg-opacity))}@media (min-width:640px){.sm\:top-1\/2{top:50%}.sm\:right-10{right:2.5rem}.sm\:col-span-4{grid-column:span 4/span 4}.sm\:col-span-6{grid-column:span 6/span 6}.sm\:col-span-2{grid-column:span 2/span 2}.sm\:mx-0{margin-left:0;margin-right:0}.sm\:-my-px{margin-top:-1px;margin-bottom:-1px}.sm\:ml-10{margin-left:2.5rem}.sm\:ml-6{margin-left:1.5rem}.sm\:mt-0{margin-top:0}.sm\:block{display:block}.sm\:flex{display:flex}.sm\:hidden{display:none}.sm\:w-1\/3{width:33.333333%}.sm\:w-full{width:100%}.sm\:max-w-sm{max-width:24rem}.sm\:max-w-md{max-width:28rem}.sm\:max-w-lg{max-width:32rem}.sm\:max-w-xl{max-width:36rem}.sm\:max-w-2xl{max-width:42rem}.sm\:flex-1{flex:1 1 0%}.sm\:transform{--tw-translate-x:0;--tw-translate-y:0;--tw-rotate:0;--tw-skew-x:0;--tw-skew-y:0;--tw-scale-x:1;--tw-scale-y:1;transform:translateX(var(--tw-translate-x)) translateY(var(--tw-translate-y)) rotate(var(--tw-rotate)) skewX(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y))}.sm\:translate-y-0{--tw-translate-y:0px}.sm\:-translate-y-1\/2{--tw-translate-y:-50%}.sm\:scale-95{--tw-scale-x:.95;--tw-scale-y:.95}.sm\:scale-100{--tw-scale-x:1;--tw-scale-y:1}.sm\:grid-cols-2{grid-template-columns:repeat(2,minmax(0,1fr))}.sm\:grid-cols-1{grid-template-columns:repeat(1,minmax(0,1fr))}.sm\:items-center{align-items:center}.sm\:justify-center{justify-content:center}.sm\:justify-between{justify-content:space-between}.sm\:rounded-lg{border-radius:.5rem}.sm\:rounded-md{border-radius:.375rem}.sm\:p-6{padding:1.5rem}.sm\:px-6{padding-left:1.5rem;padding-right:1.5rem}.sm\:px-0{padding-left:0;padding-right:0}}@media (min-width:768px){.md\:relative{position:relative}.md\:absolute{position:absolute}.md\:bottom-0{bottom:0}.md\:left-0{left:0}.md\:right-0{right:0}.md\:col-span-2{grid-column:span 2/span 2}.md\:col-span-1{grid-column:span 1/span 1}.md\:my-6{margin-top:1.5rem;margin-bottom:1.5rem}.md\:mx-auto{margin-left:auto;margin-right:auto}.md\:mt-0{margin-top:0}.md\:mb-8{margin-bottom:2rem}.md\:flex{display:flex}.md\:grid{display:grid}.md\:h-full{height:100%}.md\:min-h-screen{min-height:100vh}.md\:w-1\/5{width:20%}.md\:w-1\/2{width:50%}.md\:max-w-xs{max-width:20rem}.md\:max-w-lg{max-width:32rem}.md\:grid-cols-3{grid-template-columns:repeat(3,minmax(0,1fr))}.md\:gap-6{gap:1.5rem}.md\:rounded-lg{border-radius:.5rem}.md\:bg-white{--tw-bg-opacity:1;background-color:rgba(255,255,255,var(--tw-bg-opacity))}.md\:bg-opacity-50{--tw-bg-opacity:0.5}.md\:bg-left{background-position:0}.md\:p-6{padding:1.5rem}.md\:pb-0{padding-bottom:0}.md\:text-left{text-align:left}.md\:text-9xl{font-size:8rem;line-height:1}.md\:text-3xl{font-size:1.875rem;line-height:2.25rem}.md\:backdrop-filter{--tw-backdrop-blur:var(--tw-empty,/*!*/ /*!*/);--tw-backdrop-brightness:var(--tw-empty,/*!*/ /*!*/);--tw-backdrop-contrast:var(--tw-empty,/*!*/ /*!*/);--tw-backdrop-grayscale:var(--tw-empty,/*!*/ /*!*/);--tw-backdrop-hue-rotate:var(--tw-empty,/*!*/ /*!*/);--tw-backdrop-invert:var(--tw-empty,/*!*/ /*!*/);--tw-backdrop-opacity:var(--tw-empty,/*!*/ /*!*/);--tw-backdrop-saturate:var(--tw-empty,/*!*/ /*!*/);--tw-backdrop-sepia:var(--tw-empty,/*!*/ /*!*/);-webkit-backdrop-filter:var(--tw-backdrop-blur) var(--tw-backdrop-brightness) var(--tw-backdrop-contrast) var(--tw-backdrop-grayscale) var(--tw-backdrop-hue-rotate) var(--tw-backdrop-invert) var(--tw-backdrop-opacity) var(--tw-backdrop-saturate) var(--tw-backdrop-sepia);backdrop-filter:var(--tw-backdrop-blur) var(--tw-backdrop-brightness) var(--tw-backdrop-contrast) var(--tw-backdrop-grayscale) var(--tw-backdrop-hue-rotate) var(--tw-backdrop-invert) var(--tw-backdrop-opacity) var(--tw-backdrop-saturate) var(--tw-backdrop-sepia)}.md\:backdrop-blur{--tw-backdrop-blur:blur(8px)}}@media (min-width:1024px){.lg\:prose-lg{font-size:1.125rem;line-height:1.7777778}.lg\:prose-lg p{margin-top:1.3333333em;margin-bottom:1.3333333em}.lg\:prose-lg [class~=lead]{font-size:1.2222222em;line-height:1.4545455;margin-top:1.0909091em;margin-bottom:1.0909091em}.lg\:prose-lg blockquote{margin-top:1.6666667em;margin-bottom:1.6666667em;padding-left:1em}.lg\:prose-lg h1{font-size:2.6666667em;margin-top:0;margin-bottom:.8333333em;line-height:1}.lg\:prose-lg h2{font-size:1.6666667em;margin-top:1.8666667em;margin-bottom:1.0666667em;line-height:1.3333333}.lg\:prose-lg h3{font-size:1.3333333em;margin-top:1.6666667em;margin-bottom:.6666667em;line-height:1.5}.lg\:prose-lg h4{margin-top:1.7777778em;margin-bottom:.4444444em;line-height:1.5555556}.lg\:prose-lg figure,.lg\:prose-lg img,.lg\:prose-lg video{margin-top:1.7777778em;margin-bottom:1.7777778em}.lg\:prose-lg figure>*{margin-top:0;margin-bottom:0}.lg\:prose-lg figure figcaption{font-size:.8888889em;line-height:1.5;margin-top:1em}.lg\:prose-lg code{font-size:.8888889em}.lg\:prose-lg h2 code{font-size:.8666667em}.lg\:prose-lg h3 code{font-size:.875em}.lg\:prose-lg pre{font-size:.8888889em;line-height:1.75;margin-top:2em;margin-bottom:2em;border-radius:.375rem;padding:1em 1.5em}.lg\:prose-lg ol,.lg\:prose-lg ul{margin-top:1.3333333em;margin-bottom:1.3333333em}.lg\:prose-lg li{margin-top:.6666667em;margin-bottom:.6666667em}.lg\:prose-lg ol>li{padding-left:1.6666667em}.lg\:prose-lg ol>li:before{left:0}.lg\:prose-lg ul>li{padding-left:1.6666667em}.lg\:prose-lg ul>li:before{width:.3333333em;height:.3333333em;top:.72222em;left:.2222222em}.lg\:prose-lg>ul>li p{margin-top:.8888889em;margin-bottom:.8888889em}.lg\:prose-lg>ul>li>:first-child{margin-top:1.3333333em}.lg\:prose-lg>ul>li>:last-child{margin-bottom:1.3333333em}.lg\:prose-lg>ol>li>:first-child{margin-top:1.3333333em}.lg\:prose-lg>ol>li>:last-child{margin-bottom:1.3333333em}.lg\:prose-lg ol ol,.lg\:prose-lg ol ul,.lg\:prose-lg ul ol,.lg\:prose-lg ul ul{margin-top:.8888889em;margin-bottom:.8888889em}.lg\:prose-lg hr{margin-top:3.1111111em;margin-bottom:3.1111111em}.lg\:prose-lg h2+*,.lg\:prose-lg h3+*,.lg\:prose-lg h4+*,.lg\:prose-lg hr+*{margin-top:0}.lg\:prose-lg table{font-size:.8888889em;line-height:1.5}.lg\:prose-lg thead th{padding-right:.75em;padding-bottom:.75em;padding-left:.75em}.lg\:prose-lg thead th:first-child{padding-left:0}.lg\:prose-lg thead th:last-child{padding-right:0}.lg\:prose-lg tbody td{padding:.75em}.lg\:prose-lg tbody td:first-child{padding-left:0}.lg\:prose-lg tbody td:last-child{padding-right:0}.lg\:prose-lg>:first-child{margin-top:0}.lg\:mb-0,.lg\:prose-lg>:last-child{margin-bottom:0}.lg\:h-full{height:100%}.lg\:max-h-\[calc\(100vh-64px\)\]{max-height:calc(100vh - 64px)}.lg\:max-w-sm{max-width:24rem}.lg\:grid-cols-2{grid-template-columns:repeat(2,minmax(0,1fr))}.lg\:grid-cols-3{grid-template-columns:repeat(3,minmax(0,1fr))}.lg\:grid-rows-none{grid-template-rows:none}.lg\:bg-center{background-position:50%}.lg\:object-cover{-o-object-fit:cover;object-fit:cover}.lg\:px-8{padding-left:2rem;padding-right:2rem}.lg\:px-4{padding-left:1rem;padding-right:1rem}}@media (min-width:1280px){.xl\:grid-cols-3{grid-template-columns:repeat(3,minmax(0,1fr))}}@media (min-width:1536px){.\32xl\:col-span-2{grid-column:span 2/span 2}.\32xl\:grid-cols-3{grid-template-columns:repeat(3,minmax(0,1fr))}} +/*# sourceMappingURL=app.css.map*/ \ No newline at end of file diff --git a/public/css/app.css.map b/public/css/app.css.map new file mode 100644 index 000000000..1e38a87e0 --- /dev/null +++ b/public/css/app.css.map @@ -0,0 +1 @@ +{"version":3,"sources":["webpack:///","webpack:///./resources/css/%3Cinput%20css%201aqyyB%3E","webpack:///./resources/css/%3Cinput%20css%20laxF4J%3E","webpack:///./resources/css/app.css"],"names":[],"mappings":"AAAA;ACAA,8FAA8F,CAqB9F,MACC,eAAgB,CAChB,aAAW,CAAX,UACD,CAOA,KACC,gBAAiB,CACjB,6BACD,CAWA,KACC,QAAS,CAQT,+GAPD,CA6BA,GACC,QAAS,CACT,aACD,CAWA,YACC,wCAAiC,CAAjC,gCACD,CAMA,SAEC,kBACD,CAOA,kBAIC,gFAMU,CACV,aACD,CAMA,MACC,aACD,CAMA,QAEC,aAAc,CACd,aAAc,CACd,iBAAkB,CAClB,uBACD,CAEA,IACC,aACD,CAEA,IACC,SACD,CAYA,MACC,aAAc,CACd,oBACD,CAYA,sCAKC,mBAAoB,CACpB,cAAe,CACf,gBAAiB,CACjB,QACD,CAOA,cAEC,mBACD,CAMA,gDAIC,yBACD,CAMA,mBACC,iBAAkB,CAClB,SACD,CAMA,gBACC,6BACD,CAOA,iBACC,eACD,CAMA,OACC,SACD,CAMA,SACC,uBACD,CAMA,wDAEC,WACD,CAOA,cACC,4BAA6B,CAC7B,mBACD,CAMA,4BACC,uBACD,CAOA,6BACC,yBAA0B,CAC1B,YACD,CAWA,QACC,iBACD,CC/RA,mDAaE,QACF,CAEA,OACE,4BAA6B,CAC7B,qBACF,CAOA,aACE,kBAAmB,CACnB,yCACF,CAOA,eAJE,QAAS,CACT,SAQF,CALA,MAEE,eAGF,CAaA,KACE,0MAAsP,CACtP,eACF,CAQA,KACE,mBAAoB,CACpB,mBACF,CA4BA,iBAGE,qBAAsB,CAGtB,sBACF,CAMA,GACE,oBACF,CAYA,IACE,kBACF,CAEA,SACE,eACF,CAEA,oDAEE,SAAU,CACV,aACF,CAJA,4DAEE,SAAU,CACV,aACF,CAJA,yCAEE,SAAU,CACV,aACF,CAEA,qBAEE,cACF,CAEA,MACE,wBACF,CAEA,kBAME,iBAAkB,CAClB,mBACF,CAOA,EACE,aAAc,CACd,uBACF,CAUA,sCAKE,SAAU,CACV,mBAAoB,CACpB,aACF,CASA,kBAIE,mGACF,CAUA,+CAQE,aAAc,CACd,qBACF,CASA,UAEE,cAAe,CACf,WACF,CF/OA,yyJGWA,8CACE,eACF,CHbA,m5IGqCA,MACE,sBACF,CHvCA,+JGyCA,KAME,UAAc,CACd,cACF,CHjDA,uJGgEE,WHhEF,wDG+EE,WAAY,CACZ,YAAa,CACb,4BHjFF,qYG8EE,mBH9EF,0DG+FE,WAAY,CACZ,YAAa,CACb,4BHjGF,opdG4GI,iCACE,YACF,CAEA,cACE,uBAAwB,CACxB,oBACF,CAcJ,UACE,YACF,CHnIA,2yZ","file":"css/app.css","sourcesContent":[null,"/*! modern-normalize v1.0.0 | MIT License | https://github.com/sindresorhus/modern-normalize */\n\n/*\nDocument\n========\n*/\n\n/**\nUse a better box model (opinionated).\n*/\n\n*,\n*::before,\n*::after {\n\tbox-sizing: border-box;\n}\n\n/**\nUse a more readable tab size (opinionated).\n*/\n\n:root {\n\t-moz-tab-size: 4;\n\ttab-size: 4;\n}\n\n/**\n1. Correct the line height in all browsers.\n2. Prevent adjustments of font size after orientation changes in iOS.\n*/\n\nhtml {\n\tline-height: 1.15; /* 1 */\n\t-webkit-text-size-adjust: 100%; /* 2 */\n}\n\n/*\nSections\n========\n*/\n\n/**\nRemove the margin in all browsers.\n*/\n\nbody {\n\tmargin: 0;\n}\n\n/**\nImprove consistency of default fonts in all browsers. (https://github.com/sindresorhus/modern-normalize/issues/3)\n*/\n\nbody {\n\tfont-family:\n\t\tsystem-ui,\n\t\t-apple-system, /* Firefox supports this but not yet `system-ui` */\n\t\t'Segoe UI',\n\t\tRoboto,\n\t\tHelvetica,\n\t\tArial,\n\t\tsans-serif,\n\t\t'Apple Color Emoji',\n\t\t'Segoe UI Emoji';\n}\n\n/*\nGrouping content\n================\n*/\n\n/**\n1. Add the correct height in Firefox.\n2. Correct the inheritance of border color in Firefox. (https://bugzilla.mozilla.org/show_bug.cgi?id=190655)\n*/\n\nhr {\n\theight: 0; /* 1 */\n\tcolor: inherit; /* 2 */\n}\n\n/*\nText-level semantics\n====================\n*/\n\n/**\nAdd the correct text decoration in Chrome, Edge, and Safari.\n*/\n\nabbr[title] {\n\ttext-decoration: underline dotted;\n}\n\n/**\nAdd the correct font weight in Edge and Safari.\n*/\n\nb,\nstrong {\n\tfont-weight: bolder;\n}\n\n/**\n1. Improve consistency of default fonts in all browsers. (https://github.com/sindresorhus/modern-normalize/issues/3)\n2. Correct the odd 'em' font sizing in all browsers.\n*/\n\ncode,\nkbd,\nsamp,\npre {\n\tfont-family:\n\t\tui-monospace,\n\t\tSFMono-Regular,\n\t\tConsolas,\n\t\t'Liberation Mono',\n\t\tMenlo,\n\t\tmonospace; /* 1 */\n\tfont-size: 1em; /* 2 */\n}\n\n/**\nAdd the correct font size in all browsers.\n*/\n\nsmall {\n\tfont-size: 80%;\n}\n\n/**\nPrevent 'sub' and 'sup' elements from affecting the line height in all browsers.\n*/\n\nsub,\nsup {\n\tfont-size: 75%;\n\tline-height: 0;\n\tposition: relative;\n\tvertical-align: baseline;\n}\n\nsub {\n\tbottom: -0.25em;\n}\n\nsup {\n\ttop: -0.5em;\n}\n\n/*\nTabular data\n============\n*/\n\n/**\n1. Remove text indentation from table contents in Chrome and Safari. (https://bugs.chromium.org/p/chromium/issues/detail?id=999088, https://bugs.webkit.org/show_bug.cgi?id=201297)\n2. Correct table border color inheritance in all Chrome and Safari. (https://bugs.chromium.org/p/chromium/issues/detail?id=935729, https://bugs.webkit.org/show_bug.cgi?id=195016)\n*/\n\ntable {\n\ttext-indent: 0; /* 1 */\n\tborder-color: inherit; /* 2 */\n}\n\n/*\nForms\n=====\n*/\n\n/**\n1. Change the font styles in all browsers.\n2. Remove the margin in Firefox and Safari.\n*/\n\nbutton,\ninput,\noptgroup,\nselect,\ntextarea {\n\tfont-family: inherit; /* 1 */\n\tfont-size: 100%; /* 1 */\n\tline-height: 1.15; /* 1 */\n\tmargin: 0; /* 2 */\n}\n\n/**\nRemove the inheritance of text transform in Edge and Firefox.\n1. Remove the inheritance of text transform in Firefox.\n*/\n\nbutton,\nselect { /* 1 */\n\ttext-transform: none;\n}\n\n/**\nCorrect the inability to style clickable types in iOS and Safari.\n*/\n\nbutton,\n[type='button'],\n[type='reset'],\n[type='submit'] {\n\t-webkit-appearance: button;\n}\n\n/**\nRemove the inner border and padding in Firefox.\n*/\n\n::-moz-focus-inner {\n\tborder-style: none;\n\tpadding: 0;\n}\n\n/**\nRestore the focus styles unset by the previous rule.\n*/\n\n:-moz-focusring {\n\toutline: 1px dotted ButtonText;\n}\n\n/**\nRemove the additional ':invalid' styles in Firefox.\nSee: https://github.com/mozilla/gecko-dev/blob/2f9eacd9d3d995c937b4251a5557d95d494c9be1/layout/style/res/forms.css#L728-L737\n*/\n\n:-moz-ui-invalid {\n\tbox-shadow: none;\n}\n\n/**\nRemove the padding so developers are not caught out when they zero out 'fieldset' elements in all browsers.\n*/\n\nlegend {\n\tpadding: 0;\n}\n\n/**\nAdd the correct vertical alignment in Chrome and Firefox.\n*/\n\nprogress {\n\tvertical-align: baseline;\n}\n\n/**\nCorrect the cursor style of increment and decrement buttons in Safari.\n*/\n\n::-webkit-inner-spin-button,\n::-webkit-outer-spin-button {\n\theight: auto;\n}\n\n/**\n1. Correct the odd appearance in Chrome and Safari.\n2. Correct the outline style in Safari.\n*/\n\n[type='search'] {\n\t-webkit-appearance: textfield; /* 1 */\n\toutline-offset: -2px; /* 2 */\n}\n\n/**\nRemove the inner padding in Chrome and Safari on macOS.\n*/\n\n::-webkit-search-decoration {\n\t-webkit-appearance: none;\n}\n\n/**\n1. Correct the inability to style clickable types in iOS and Safari.\n2. Change font properties to 'inherit' in Safari.\n*/\n\n::-webkit-file-upload-button {\n\t-webkit-appearance: button; /* 1 */\n\tfont: inherit; /* 2 */\n}\n\n/*\nInteractive\n===========\n*/\n\n/*\nAdd the correct display in Chrome and Safari.\n*/\n\nsummary {\n\tdisplay: list-item;\n}\n","/**\n * Manually forked from SUIT CSS Base: https://github.com/suitcss/base\n * A thin layer on top of normalize.css that provides a starting point more\n * suitable for web applications.\n */\n\n/**\n * Removes the default spacing and border for appropriate elements.\n */\n\nblockquote,\ndl,\ndd,\nh1,\nh2,\nh3,\nh4,\nh5,\nh6,\nhr,\nfigure,\np,\npre {\n margin: 0;\n}\n\nbutton {\n background-color: transparent;\n background-image: none;\n}\n\n/**\n * Work around a Firefox/IE bug where the transparent `button` background\n * results in a loss of the default `button` focus styles.\n */\n\nbutton:focus {\n outline: 1px dotted;\n outline: 5px auto -webkit-focus-ring-color;\n}\n\nfieldset {\n margin: 0;\n padding: 0;\n}\n\nol,\nul {\n list-style: none;\n margin: 0;\n padding: 0;\n}\n\n/**\n * Tailwind custom reset styles\n */\n\n/**\n * 1. Use the user's configured `sans` font-family (with Tailwind's default\n * sans-serif font stack as a fallback) as a sane default.\n * 2. Use Tailwind's default \"normal\" line-height so the user isn't forced\n * to override it to ensure consistency even when using the default theme.\n */\n\nhtml {\n font-family: theme('fontFamily.sans', ui-sans-serif, system-ui, -apple-system, BlinkMacSystemFont, \"Segoe UI\", Roboto, \"Helvetica Neue\", Arial, \"Noto Sans\", sans-serif, \"Apple Color Emoji\", \"Segoe UI Emoji\", \"Segoe UI Symbol\", \"Noto Color Emoji\"); /* 1 */\n line-height: 1.5; /* 2 */\n}\n\n\n/**\n * Inherit font-family and line-height from `html` so users can set them as\n * a class directly on the `html` element.\n */\n\nbody {\n font-family: inherit;\n line-height: inherit;\n}\n\n/**\n * 1. Prevent padding and border from affecting element width.\n *\n * We used to set this in the html element and inherit from\n * the parent element for everything else. This caused issues\n * in shadow-dom-enhanced elements like
where the content\n * is wrapped by a div with box-sizing set to `content-box`.\n *\n * https://github.com/mozdevs/cssremedy/issues/4\n *\n *\n * 2. Allow adding a border to an element by just adding a border-width.\n *\n * By default, the way the browser specifies that an element should have no\n * border is by setting it's border-style to `none` in the user-agent\n * stylesheet.\n *\n * In order to easily add borders to elements by just setting the `border-width`\n * property, we change the default border-style for all elements to `solid`, and\n * use border-width to hide them instead. This way our `border` utilities only\n * need to set the `border-width` property instead of the entire `border`\n * shorthand, making our border utilities much more straightforward to compose.\n *\n * https://github.com/tailwindcss/tailwindcss/pull/116\n */\n\n*,\n::before,\n::after {\n box-sizing: border-box; /* 1 */\n border-width: 0; /* 2 */\n border-style: solid; /* 2 */\n border-color: theme('borderColor.DEFAULT', currentColor); /* 2 */\n}\n\n/*\n * Ensure horizontal rules are visible by default\n */\n\nhr {\n border-top-width: 1px;\n}\n\n/**\n * Undo the `border-style: none` reset that Normalize applies to images so that\n * our `border-{width}` utilities have the expected effect.\n *\n * The Normalize reset is unnecessary for us since we default the border-width\n * to 0 on all elements.\n *\n * https://github.com/tailwindcss/tailwindcss/issues/362\n */\n\nimg {\n border-style: solid;\n}\n\ntextarea {\n resize: vertical;\n}\n\ninput::placeholder,\ntextarea::placeholder {\n opacity: 1;\n color: theme('colors.gray.400', #a1a1aa);\n}\n\nbutton,\n[role=\"button\"] {\n cursor: pointer;\n}\n\ntable {\n border-collapse: collapse;\n}\n\nh1,\nh2,\nh3,\nh4,\nh5,\nh6 {\n font-size: inherit;\n font-weight: inherit;\n}\n\n/**\n * Reset links to optimize for opt-in styling instead of\n * opt-out.\n */\n\na {\n color: inherit;\n text-decoration: inherit;\n}\n\n/**\n * Reset form element properties that are easy to forget to\n * style explicitly so you don't inadvertently introduce\n * styles that deviate from your design system. These styles\n * supplement a partial reset that is already applied by\n * normalize.css.\n */\n\nbutton,\ninput,\noptgroup,\nselect,\ntextarea {\n padding: 0;\n line-height: inherit;\n color: inherit;\n}\n\n/**\n * Use the configured 'mono' font family for elements that\n * are expected to be rendered with a monospace font, falling\n * back to the system monospace stack if there is no configured\n * 'mono' font family.\n */\n\npre,\ncode,\nkbd,\nsamp {\n font-family: theme('fontFamily.mono', ui-monospace, SFMono-Regular, Menlo, Monaco, Consolas, \"Liberation Mono\", \"Courier New\", monospace);\n}\n\n/**\n * Make replaced elements `display: block` by default as that's\n * the behavior you want almost all of the time. Inspired by\n * CSS Remedy, with `svg` added as well.\n *\n * https://github.com/mozdevs/cssremedy/issues/14\n */\n\nimg,\nsvg,\nvideo,\ncanvas,\naudio,\niframe,\nembed,\nobject {\n display: block;\n vertical-align: middle;\n}\n\n/**\n * Constrain images and videos to the parent width and preserve\n * their intrinsic aspect ratio.\n *\n * https://github.com/mozdevs/cssremedy/issues/14\n */\n\nimg,\nvideo {\n max-width: 100%;\n height: auto;\n}\n","/**\n * This injects Tailwind's base styles, which is a combination of\n * Normalize.css and some additional base styles.\n */\n@tailwind base;\n\n/**\n * Remove the default box-shadow for invalid elements to prevent\n * inputs in Livewire components showing with a\n * red border by default in Firefox.\n */\ninput:invalid, textarea:invalid, select:invalid {\n box-shadow: none;\n}\n\n/**\n * This injects any component classes registered by plugins.\n */\n@tailwind components;\n\n/**\n * Here you would add any of your custom component classes; stuff that you'd\n * want loaded *before* the utilities so that the utilities could still\n * override them.\n *\n * Example:\n *\n * .btn { ... }\n * .form-input { ... }\n */\n\n/* Global styles */\nhtml, body {\n @apply h-full\n w-full;\n}\n\nul, ol {\n margin: 1em 0 1em 1.1em;\n}\n\nbody {\n @apply flex\n flex-col\n leading-snug\n dark:text-white\n tracking-tight;\n color: #333333;\n quotes: \"“\" \"”\";\n}\n\nmain {\n @apply flex\n flex-col\n flex-grow;\n}\n\npicture::before {\n @apply absolute\n block\n bg-transparent\n h-full\n w-full;\n\n content: \"\";\n}\n\n/* Placeholder styles */\n/* Anime placeholders */\n.anime-poster {\n @apply bg-center\n bg-cover\n bg-no-repeat\n border-2\n border-gray-100\n border-opacity-25\n rounded-lg\n shadow-lg;\n margin: 10px auto 0;\n width: 180px;\n height: 268px;\n background-size: 180px 268px; /* ratio 45:67 */\n}\n\n/* User placeholders */\n.profile-image {\n @apply bg-center\n bg-cover\n bg-no-repeat\n border-2\n border-gray-100\n border-opacity-25\n rounded-full\n shadow-lg;\n margin: 10px auto 0;\n width: 150px;\n height: 150px;\n background-size: 150px 150px;\n}\n\n/**\n * This injects all of Tailwind's utility classes, generated based on the\n * config file.\n */\n@tailwind utilities;\n@layer utilities {\n @variants responsive {\n /* Chrome, Safari and Opera */\n .no-scrollbar::-webkit-scrollbar {\n display: none;\n }\n\n .no-scrollbar {\n -ms-overflow-style: none; /* IE and Edge */\n scrollbar-width: none; /* Firefox */\n }\n }\n}\n\n/**\n * Here you would add any custom utilities you need that don't come out of the\n * box with Tailwind.\n *\n * Example :\n *\n * .bg-pattern-graph-paper { ... }\n * .skew-45 { ... }\n */\n\n[x-cloak] {\n display: none;\n}\n\n/**\n * This injects all of Tailwind's screen classes, generated based on the\n * config file.\n */\n@tailwind screens;\n"],"sourceRoot":""} \ No newline at end of file diff --git a/public/js/app.js b/public/js/app.js index c2059341c..36e7d597c 100644 --- a/public/js/app.js +++ b/public/js/app.js @@ -1,228 +1,2 @@ -/* - * ATTENTION: An "eval-source-map" devtool has been used. - * This devtool is neither made for production nor for readable output files. - * It uses "eval()" calls to create a separate source file with attached SourceMaps in the browser devtools. - * If you are trying to read the output file, select a different devtool (https://webpack.js.org/configuration/devtool/) - * or disable the default devtool with "devtool: false". - * If you are looking for production-ready output files, see mode: "production" (https://webpack.js.org/configuration/mode/). - */ -/******/ (() => { // webpackBootstrap -/******/ var __webpack_modules__ = ({ - -/***/ "./node_modules/@jaames/iro/dist/iro.es.js": -/*!*************************************************!*\ - !*** ./node_modules/@jaames/iro/dist/iro.es.js ***! - \*************************************************/ -/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { - -"use strict"; -eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ \"default\": () => (__WEBPACK_DEFAULT_EXPORT__)\n/* harmony export */ });\n/*!\n * iro.js v5.5.1\n * 2016-2021 James Daniel\n * Licensed under MPL 2.0\n * github.com/jaames/iro.js\n */\n\nvar n,u,t,i,r,o,f={},e=[],c=/acit|ex(?:s|g|n|p|$)|rph|grid|ows|mnc|ntw|ine[ch]|zoo|^ord|^--/i;function s(n,l){for(var u in l){ n[u]=l[u]; }return n}function a(n){var l=n.parentNode;l&&l.removeChild(n);}function h(n,l,u){var t,i,r,o,f=arguments;if(l=s({},l),arguments.length>3){ for(u=[u],t=3;t -1;\n var num = parseFloat(str);\n return isPercentage ? max / 100 * num : num;\n}\n/**\r\n * @desc Parse hex str to an int\r\n * @param str - hex string to parse\r\n */\n\n\nfunction parseHexInt(str) {\n return parseInt(str, 16);\n}\n/**\r\n * @desc Convert nunber into to 2-digit hex\r\n * @param int - number to convert\r\n */\n\n\nfunction intToHex(_int) {\n return _int.toString(16).padStart(2, '0');\n}\n\nvar IroColor =\n/*#__PURE__*/\nfunction () {\n /**\r\n * @constructor Color object\r\n * @param value - initial color value\r\n */\n function IroColor(value, onChange) {\n // The default Color value\n this.$ = {\n h: 0,\n s: 0,\n v: 0,\n a: 1\n };\n if (value) { this.set(value); } // The watch callback function for this Color will be stored here\n\n this.onChange = onChange;\n this.initialValue = _extends({}, this.$); // copy initial value\n }\n /**\r\n * @desc Set the Color from any valid value\r\n * @param value - new color value\r\n */\n\n\n var _proto = IroColor.prototype;\n\n _proto.set = function set(value) {\n if (typeof value === 'string') {\n if (/^(?:#?|0x?)[0-9a-fA-F]{3,8}$/.test(value)) {\n this.hexString = value;\n } else if (/^rgba?/.test(value)) {\n this.rgbString = value;\n } else if (/^hsla?/.test(value)) {\n this.hslString = value;\n }\n } else if (typeof value === 'object') {\n if (value instanceof IroColor) {\n this.hsv = value.hsv;\n } else if ('r' in value && 'g' in value && 'b' in value) {\n this.rgb = value;\n } else if ('h' in value && 's' in value && 'v' in value) {\n this.hsv = value;\n } else if ('h' in value && 's' in value && 'l' in value) {\n this.hsl = value;\n } else if ('kelvin' in value) {\n this.kelvin = value.kelvin;\n }\n } else {\n throw new Error('Invalid color value');\n }\n }\n /**\r\n * @desc Shortcut to set a specific channel value\r\n * @param format - hsv | hsl | rgb\r\n * @param channel - individual channel to set, for example if model = hsl, chanel = h | s | l\r\n * @param value - new value for the channel\r\n */\n ;\n\n _proto.setChannel = function setChannel(format, channel, value) {\n var _extends2;\n\n this[format] = _extends({}, this[format], (_extends2 = {}, _extends2[channel] = value, _extends2));\n }\n /**\r\n * @desc Reset color back to its initial value\r\n */\n ;\n\n _proto.reset = function reset() {\n this.hsva = this.initialValue;\n }\n /**\r\n * @desc make new Color instance with the same value as this one\r\n */\n ;\n\n _proto.clone = function clone() {\n return new IroColor(this);\n }\n /**\r\n * @desc remove color onChange\r\n */\n ;\n\n _proto.unbind = function unbind() {\n this.onChange = undefined;\n }\n /**\r\n * @desc Convert hsv object to rgb\r\n * @param hsv - hsv color object\r\n */\n ;\n\n IroColor.hsvToRgb = function hsvToRgb(hsv) {\n var h = hsv.h / 60;\n var s = hsv.s / 100;\n var v = hsv.v / 100;\n var i = floor(h);\n var f = h - i;\n var p = v * (1 - s);\n var q = v * (1 - f * s);\n var t = v * (1 - (1 - f) * s);\n var mod = i % 6;\n var r = [v, q, p, p, t, v][mod];\n var g = [t, v, v, q, p, p][mod];\n var b = [p, p, t, v, v, q][mod];\n return {\n r: clamp(r * 255, 0, 255),\n g: clamp(g * 255, 0, 255),\n b: clamp(b * 255, 0, 255)\n };\n }\n /**\r\n * @desc Convert rgb object to hsv\r\n * @param rgb - rgb object\r\n */\n ;\n\n IroColor.rgbToHsv = function rgbToHsv(rgb) {\n var r = rgb.r / 255;\n var g = rgb.g / 255;\n var b = rgb.b / 255;\n var max = Math.max(r, g, b);\n var min = Math.min(r, g, b);\n var delta = max - min;\n var hue = 0;\n var value = max;\n var saturation = max === 0 ? 0 : delta / max;\n\n switch (max) {\n case min:\n hue = 0; // achromatic\n\n break;\n\n case r:\n hue = (g - b) / delta + (g < b ? 6 : 0);\n break;\n\n case g:\n hue = (b - r) / delta + 2;\n break;\n\n case b:\n hue = (r - g) / delta + 4;\n break;\n }\n\n return {\n h: hue * 60 % 360,\n s: clamp(saturation * 100, 0, 100),\n v: clamp(value * 100, 0, 100)\n };\n }\n /**\r\n * @desc Convert hsv object to hsl\r\n * @param hsv - hsv object\r\n */\n ;\n\n IroColor.hsvToHsl = function hsvToHsl(hsv) {\n var s = hsv.s / 100;\n var v = hsv.v / 100;\n var l = (2 - s) * v;\n var divisor = l <= 1 ? l : 2 - l; // Avoid division by zero when lightness is close to zero\n\n var saturation = divisor < 1e-9 ? 0 : s * v / divisor;\n return {\n h: hsv.h,\n s: clamp(saturation * 100, 0, 100),\n l: clamp(l * 50, 0, 100)\n };\n }\n /**\r\n * @desc Convert hsl object to hsv\r\n * @param hsl - hsl object\r\n */\n ;\n\n IroColor.hslToHsv = function hslToHsv(hsl) {\n var l = hsl.l * 2;\n var s = hsl.s * (l <= 100 ? l : 200 - l) / 100; // Avoid division by zero when l + s is near 0\n\n var saturation = l + s < 1e-9 ? 0 : 2 * s / (l + s);\n return {\n h: hsl.h,\n s: clamp(saturation * 100, 0, 100),\n v: clamp((l + s) / 2, 0, 100)\n };\n }\n /**\r\n * @desc Convert a kelvin temperature to an approx, RGB value\r\n * @param kelvin - kelvin temperature\r\n */\n ;\n\n IroColor.kelvinToRgb = function kelvinToRgb(kelvin) {\n var temp = kelvin / 100;\n var r, g, b;\n\n if (temp < 66) {\n r = 255;\n g = -155.25485562709179 - 0.44596950469579133 * (g = temp - 2) + 104.49216199393888 * log(g);\n b = temp < 20 ? 0 : -254.76935184120902 + 0.8274096064007395 * (b = temp - 10) + 115.67994401066147 * log(b);\n } else {\n r = 351.97690566805693 + 0.114206453784165 * (r = temp - 55) - 40.25366309332127 * log(r);\n g = 325.4494125711974 + 0.07943456536662342 * (g = temp - 50) - 28.0852963507957 * log(g);\n b = 255;\n }\n\n return {\n r: clamp(floor(r), 0, 255),\n g: clamp(floor(g), 0, 255),\n b: clamp(floor(b), 0, 255)\n };\n }\n /**\r\n * @desc Convert an RGB color to an approximate kelvin temperature\r\n * @param kelvin - kelvin temperature\r\n */\n ;\n\n IroColor.rgbToKelvin = function rgbToKelvin(rgb) {\n var r = rgb.r,\n b = rgb.b;\n var eps = 0.4;\n var minTemp = KELVIN_MIN;\n var maxTemp = KELVIN_MAX;\n var temp;\n\n while (maxTemp - minTemp > eps) {\n temp = (maxTemp + minTemp) * 0.5;\n\n var _rgb = IroColor.kelvinToRgb(temp);\n\n if (_rgb.b / _rgb.r >= b / r) {\n maxTemp = temp;\n } else {\n minTemp = temp;\n }\n }\n\n return temp;\n };\n\n _createClass(IroColor, [{\n key: \"hsv\",\n get: function get() {\n // value is cloned to allow changes to be made to the values before passing them back\n var value = this.$;\n return {\n h: value.h,\n s: value.s,\n v: value.v\n };\n },\n set: function set(newValue) {\n var oldValue = this.$;\n newValue = _extends({}, oldValue, newValue); // If this Color is being watched for changes we need to compare the new and old values to check the difference\n // Otherwise we can just be lazy\n\n if (this.onChange) {\n // Compute changed values\n var changes = {\n h: false,\n v: false,\n s: false,\n a: false\n };\n\n for (var key in oldValue) {\n changes[key] = newValue[key] != oldValue[key];\n }\n\n this.$ = newValue; // If the value has changed, call hook callback\n\n if (changes.h || changes.s || changes.v || changes.a) { this.onChange(this, changes); }\n } else {\n this.$ = newValue;\n }\n }\n }, {\n key: \"hsva\",\n get: function get() {\n return _extends({}, this.$);\n },\n set: function set(value) {\n this.hsv = value;\n }\n }, {\n key: \"hue\",\n get: function get() {\n return this.$.h;\n },\n set: function set(value) {\n this.hsv = {\n h: value\n };\n }\n }, {\n key: \"saturation\",\n get: function get() {\n return this.$.s;\n },\n set: function set(value) {\n this.hsv = {\n s: value\n };\n }\n }, {\n key: \"value\",\n get: function get() {\n return this.$.v;\n },\n set: function set(value) {\n this.hsv = {\n v: value\n };\n }\n }, {\n key: \"alpha\",\n get: function get() {\n return this.$.a;\n },\n set: function set(value) {\n this.hsv = _extends({}, this.hsv, {\n a: value\n });\n }\n }, {\n key: \"kelvin\",\n get: function get() {\n return IroColor.rgbToKelvin(this.rgb);\n },\n set: function set(value) {\n this.rgb = IroColor.kelvinToRgb(value);\n }\n }, {\n key: \"red\",\n get: function get() {\n var rgb = this.rgb;\n return rgb.r;\n },\n set: function set(value) {\n this.rgb = _extends({}, this.rgb, {\n r: value\n });\n }\n }, {\n key: \"green\",\n get: function get() {\n var rgb = this.rgb;\n return rgb.g;\n },\n set: function set(value) {\n this.rgb = _extends({}, this.rgb, {\n g: value\n });\n }\n }, {\n key: \"blue\",\n get: function get() {\n var rgb = this.rgb;\n return rgb.b;\n },\n set: function set(value) {\n this.rgb = _extends({}, this.rgb, {\n b: value\n });\n }\n }, {\n key: \"rgb\",\n get: function get() {\n var _IroColor$hsvToRgb = IroColor.hsvToRgb(this.$),\n r = _IroColor$hsvToRgb.r,\n g = _IroColor$hsvToRgb.g,\n b = _IroColor$hsvToRgb.b;\n\n return {\n r: round(r),\n g: round(g),\n b: round(b)\n };\n },\n set: function set(value) {\n this.hsv = _extends({}, IroColor.rgbToHsv(value), {\n a: value.a === undefined ? 1 : value.a\n });\n }\n }, {\n key: \"rgba\",\n get: function get() {\n return _extends({}, this.rgb, {\n a: this.alpha\n });\n },\n set: function set(value) {\n this.rgb = value;\n }\n }, {\n key: \"hsl\",\n get: function get() {\n var _IroColor$hsvToHsl = IroColor.hsvToHsl(this.$),\n h = _IroColor$hsvToHsl.h,\n s = _IroColor$hsvToHsl.s,\n l = _IroColor$hsvToHsl.l;\n\n return {\n h: round(h),\n s: round(s),\n l: round(l)\n };\n },\n set: function set(value) {\n this.hsv = _extends({}, IroColor.hslToHsv(value), {\n a: value.a === undefined ? 1 : value.a\n });\n }\n }, {\n key: \"hsla\",\n get: function get() {\n return _extends({}, this.hsl, {\n a: this.alpha\n });\n },\n set: function set(value) {\n this.hsl = value;\n }\n }, {\n key: \"rgbString\",\n get: function get() {\n var rgb = this.rgb;\n return \"rgb(\" + rgb.r + \", \" + rgb.g + \", \" + rgb.b + \")\";\n },\n set: function set(value) {\n var match;\n var r,\n g,\n b,\n a = 1;\n\n if (match = REGEX_FUNCTIONAL_RGB.exec(value)) {\n r = parseUnit(match[1], 255);\n g = parseUnit(match[2], 255);\n b = parseUnit(match[3], 255);\n } else if (match = REGEX_FUNCTIONAL_RGBA.exec(value)) {\n r = parseUnit(match[1], 255);\n g = parseUnit(match[2], 255);\n b = parseUnit(match[3], 255);\n a = parseUnit(match[4], 1);\n }\n\n if (match) {\n this.rgb = {\n r: r,\n g: g,\n b: b,\n a: a\n };\n } else {\n throw new Error('Invalid rgb string');\n }\n }\n }, {\n key: \"rgbaString\",\n get: function get() {\n var rgba = this.rgba;\n return \"rgba(\" + rgba.r + \", \" + rgba.g + \", \" + rgba.b + \", \" + rgba.a + \")\";\n },\n set: function set(value) {\n this.rgbString = value;\n }\n }, {\n key: \"hexString\",\n get: function get() {\n var rgb = this.rgb;\n return \"#\" + intToHex(rgb.r) + intToHex(rgb.g) + intToHex(rgb.b);\n },\n set: function set(value) {\n var match;\n var r,\n g,\n b,\n a = 255;\n\n if (match = REGEX_HEX_3.exec(value)) {\n r = parseHexInt(match[1]) * 17;\n g = parseHexInt(match[2]) * 17;\n b = parseHexInt(match[3]) * 17;\n } else if (match = REGEX_HEX_4.exec(value)) {\n r = parseHexInt(match[1]) * 17;\n g = parseHexInt(match[2]) * 17;\n b = parseHexInt(match[3]) * 17;\n a = parseHexInt(match[4]) * 17;\n } else if (match = REGEX_HEX_6.exec(value)) {\n r = parseHexInt(match[1]);\n g = parseHexInt(match[2]);\n b = parseHexInt(match[3]);\n } else if (match = REGEX_HEX_8.exec(value)) {\n r = parseHexInt(match[1]);\n g = parseHexInt(match[2]);\n b = parseHexInt(match[3]);\n a = parseHexInt(match[4]);\n }\n\n if (match) {\n this.rgb = {\n r: r,\n g: g,\n b: b,\n a: a / 255\n };\n } else {\n throw new Error('Invalid hex string');\n }\n }\n }, {\n key: \"hex8String\",\n get: function get() {\n var rgba = this.rgba;\n return \"#\" + intToHex(rgba.r) + intToHex(rgba.g) + intToHex(rgba.b) + intToHex(floor(rgba.a * 255));\n },\n set: function set(value) {\n this.hexString = value;\n }\n }, {\n key: \"hslString\",\n get: function get() {\n var hsl = this.hsl;\n return \"hsl(\" + hsl.h + \", \" + hsl.s + \"%, \" + hsl.l + \"%)\";\n },\n set: function set(value) {\n var match;\n var h,\n s,\n l,\n a = 1;\n\n if (match = REGEX_FUNCTIONAL_HSL.exec(value)) {\n h = parseUnit(match[1], 360);\n s = parseUnit(match[2], 100);\n l = parseUnit(match[3], 100);\n } else if (match = REGEX_FUNCTIONAL_HSLA.exec(value)) {\n h = parseUnit(match[1], 360);\n s = parseUnit(match[2], 100);\n l = parseUnit(match[3], 100);\n a = parseUnit(match[4], 1);\n }\n\n if (match) {\n this.hsl = {\n h: h,\n s: s,\n l: l,\n a: a\n };\n } else {\n throw new Error('Invalid hsl string');\n }\n }\n }, {\n key: \"hslaString\",\n get: function get() {\n var hsla = this.hsla;\n return \"hsl(\" + hsla.h + \", \" + hsla.s + \"%, \" + hsla.l + \"%, \" + hsla.a + \")\";\n },\n set: function set(value) {\n this.hslString = value;\n }\n }]);\n\n return IroColor;\n}();\n\nvar sliderDefaultOptions = {\n sliderShape: 'bar',\n sliderType: 'value',\n minTemperature: 2200,\n maxTemperature: 11000\n};\n/**\r\n * @desc Get the bounding dimensions of the slider\r\n * @param props - slider props\r\n */\n\nfunction getSliderDimensions(props) {\n var _sliderSize;\n\n var width = props.width,\n sliderSize = props.sliderSize,\n borderWidth = props.borderWidth,\n handleRadius = props.handleRadius,\n padding = props.padding,\n sliderShape = props.sliderShape;\n var ishorizontal = props.layoutDirection === 'horizontal'; // automatically calculate sliderSize if its not defined\n\n sliderSize = (_sliderSize = sliderSize) != null ? _sliderSize : padding * 2 + handleRadius * 2;\n\n if (sliderShape === 'circle') {\n return {\n handleStart: props.padding + props.handleRadius,\n handleRange: width - padding * 2 - handleRadius * 2,\n width: width,\n height: width,\n cx: width / 2,\n cy: width / 2,\n radius: width / 2 - borderWidth / 2\n };\n } else {\n return {\n handleStart: sliderSize / 2,\n handleRange: width - sliderSize,\n radius: sliderSize / 2,\n x: 0,\n y: 0,\n width: ishorizontal ? sliderSize : width,\n height: ishorizontal ? width : sliderSize\n };\n }\n}\n/**\r\n * @desc Get the current slider value for a given color, as a percentage\r\n * @param props - slider props\r\n * @param color\r\n */\n\nfunction getCurrentSliderValue(props, color) {\n var hsva = color.hsva;\n var rgb = color.rgb;\n\n switch (props.sliderType) {\n case 'red':\n return rgb.r / 2.55;\n\n case 'green':\n return rgb.g / 2.55;\n\n case 'blue':\n return rgb.b / 2.55;\n\n case 'alpha':\n return hsva.a * 100;\n\n case 'kelvin':\n var minTemperature = props.minTemperature,\n maxTemperature = props.maxTemperature;\n var temperatureRange = maxTemperature - minTemperature;\n var percent = (color.kelvin - minTemperature) / temperatureRange * 100; // clmap percentage\n\n return Math.max(0, Math.min(percent, 100));\n\n case 'hue':\n return hsva.h /= 3.6;\n\n case 'saturation':\n return hsva.s;\n\n case 'value':\n default:\n return hsva.v;\n }\n}\n/**\r\n * @desc Get the current slider value from user input\r\n * @param props - slider props\r\n * @param x - global input x position\r\n * @param y - global input y position\r\n */\n\nfunction getSliderValueFromInput(props, x, y) {\n var _getSliderDimensions = getSliderDimensions(props),\n handleRange = _getSliderDimensions.handleRange,\n handleStart = _getSliderDimensions.handleStart;\n\n var handlePos;\n\n if (props.layoutDirection === 'horizontal') {\n handlePos = -1 * y + handleRange + handleStart;\n } else {\n handlePos = x - handleStart;\n } // clamp handle position\n\n\n handlePos = Math.max(Math.min(handlePos, handleRange), 0);\n var percent = Math.round(100 / handleRange * handlePos);\n\n switch (props.sliderType) {\n case 'kelvin':\n var minTemperature = props.minTemperature,\n maxTemperature = props.maxTemperature;\n var temperatureRange = maxTemperature - minTemperature;\n return minTemperature + temperatureRange * (percent / 100);\n\n case 'alpha':\n return percent / 100;\n\n case 'hue':\n return percent * 3.6;\n\n case 'red':\n case 'blue':\n case 'green':\n return percent * 2.55;\n\n default:\n return percent;\n }\n}\n/**\r\n * @desc Get the current handle position for a given color\r\n * @param props - slider props\r\n * @param color\r\n */\n\nfunction getSliderHandlePosition(props, color) {\n var _getSliderDimensions2 = getSliderDimensions(props),\n width = _getSliderDimensions2.width,\n height = _getSliderDimensions2.height,\n handleRange = _getSliderDimensions2.handleRange,\n handleStart = _getSliderDimensions2.handleStart;\n\n var ishorizontal = props.layoutDirection === 'horizontal';\n var sliderValue = getCurrentSliderValue(props, color);\n var midPoint = ishorizontal ? width / 2 : height / 2;\n var handlePos = handleStart + sliderValue / 100 * handleRange;\n\n if (ishorizontal) {\n handlePos = -1 * handlePos + handleRange + handleStart * 2;\n }\n\n return {\n x: ishorizontal ? midPoint : handlePos,\n y: ishorizontal ? handlePos : midPoint\n };\n}\n/**\r\n * @desc Get the gradient stops for a slider\r\n * @param props - slider props\r\n * @param color\r\n */\n\nfunction getSliderGradient(props, color) {\n var hsv = color.hsv;\n var rgb = color.rgb;\n\n switch (props.sliderType) {\n case 'red':\n return [[0, \"rgb(\" + 0 + \",\" + rgb.g + \",\" + rgb.b + \")\"], [100, \"rgb(\" + 255 + \",\" + rgb.g + \",\" + rgb.b + \")\"]];\n\n case 'green':\n return [[0, \"rgb(\" + rgb.r + \",\" + 0 + \",\" + rgb.b + \")\"], [100, \"rgb(\" + rgb.r + \",\" + 255 + \",\" + rgb.b + \")\"]];\n\n case 'blue':\n return [[0, \"rgb(\" + rgb.r + \",\" + rgb.g + \",\" + 0 + \")\"], [100, \"rgb(\" + rgb.r + \",\" + rgb.g + \",\" + 255 + \")\"]];\n\n case 'alpha':\n return [[0, \"rgba(\" + rgb.r + \",\" + rgb.g + \",\" + rgb.b + \",0)\"], [100, \"rgb(\" + rgb.r + \",\" + rgb.g + \",\" + rgb.b + \")\"]];\n\n case 'kelvin':\n var stops = [];\n var min = props.minTemperature;\n var max = props.maxTemperature;\n var numStops = 8;\n var range = max - min;\n\n for (var kelvin = min, stop = 0; kelvin < max; kelvin += range / numStops, stop += 1) {\n var _IroColor$kelvinToRgb = IroColor.kelvinToRgb(kelvin),\n r = _IroColor$kelvinToRgb.r,\n g = _IroColor$kelvinToRgb.g,\n b = _IroColor$kelvinToRgb.b;\n\n stops.push([100 / numStops * stop, \"rgb(\" + r + \",\" + g + \",\" + b + \")\"]);\n }\n\n return stops;\n\n case 'hue':\n return [[0, '#f00'], [16.666, '#ff0'], [33.333, '#0f0'], [50, '#0ff'], [66.666, '#00f'], [83.333, '#f0f'], [100, '#f00']];\n\n case 'saturation':\n var noSat = IroColor.hsvToHsl({\n h: hsv.h,\n s: 0,\n v: hsv.v\n });\n var fullSat = IroColor.hsvToHsl({\n h: hsv.h,\n s: 100,\n v: hsv.v\n });\n return [[0, \"hsl(\" + noSat.h + \",\" + noSat.s + \"%,\" + noSat.l + \"%)\"], [100, \"hsl(\" + fullSat.h + \",\" + fullSat.s + \"%,\" + fullSat.l + \"%)\"]];\n\n case 'value':\n default:\n var hsl = IroColor.hsvToHsl({\n h: hsv.h,\n s: hsv.s,\n v: 100\n });\n return [[0, '#000'], [100, \"hsl(\" + hsl.h + \",\" + hsl.s + \"%,\" + hsl.l + \"%)\"]];\n }\n}\n\nvar TAU = Math.PI * 2; // javascript's modulo operator doesn't produce positive numbers with negative input\n// https://dev.to/maurobringolf/a-neat-trick-to-compute-modulo-of-negative-numbers-111e\n\nvar mod = function mod(a, n) {\n return (a % n + n) % n;\n}; // distance between points (x, y) and (0, 0)\n\n\nvar dist = function dist(x, y) {\n return Math.sqrt(x * x + y * y);\n};\n/**\r\n * @param props - wheel props\r\n * @internal\r\n */\n\n\nfunction getHandleRange(props) {\n return props.width / 2 - props.padding - props.handleRadius - props.borderWidth;\n}\n/**\r\n * Returns true if point (x, y) lands inside the wheel\r\n * @param props - wheel props\r\n * @param x\r\n * @param y\r\n */\n\n\nfunction isInputInsideWheel(props, x, y) {\n var _getWheelDimensions = getWheelDimensions(props),\n cx = _getWheelDimensions.cx,\n cy = _getWheelDimensions.cy;\n\n var r = props.width / 2;\n return dist(cx - x, cy - y) < r;\n}\n/**\r\n * @desc Get the point as the center of the wheel\r\n * @param props - wheel props\r\n */\n\nfunction getWheelDimensions(props) {\n var r = props.width / 2;\n return {\n width: props.width,\n radius: r - props.borderWidth,\n cx: r,\n cy: r\n };\n}\n/**\r\n * @desc Translate an angle according to wheelAngle and wheelDirection\r\n * @param props - wheel props\r\n * @param angle - input angle\r\n */\n\nfunction translateWheelAngle(props, angle, invert) {\n var wheelAngle = props.wheelAngle;\n var wheelDirection = props.wheelDirection; // inverted and clockwisee\n\n if (invert && wheelDirection === 'clockwise') { angle = wheelAngle + angle; } // clockwise (input handling)\n else if (wheelDirection === 'clockwise') { angle = 360 - wheelAngle + angle; } // inverted and anticlockwise\n else if (invert && wheelDirection === 'anticlockwise') { angle = wheelAngle + 180 - angle; } // anticlockwise (input handling)\n else if (wheelDirection === 'anticlockwise') { angle = wheelAngle - angle; }\n return mod(angle, 360);\n}\n/**\r\n * @desc Get the current handle position for a given color\r\n * @param props - wheel props\r\n * @param color\r\n */\n\nfunction getWheelHandlePosition(props, color) {\n var hsv = color.hsv;\n\n var _getWheelDimensions2 = getWheelDimensions(props),\n cx = _getWheelDimensions2.cx,\n cy = _getWheelDimensions2.cy;\n\n var handleRange = getHandleRange(props);\n var handleAngle = (180 + translateWheelAngle(props, hsv.h, true)) * (TAU / 360);\n var handleDist = hsv.s / 100 * handleRange;\n var direction = props.wheelDirection === 'clockwise' ? -1 : 1;\n return {\n x: cx + handleDist * Math.cos(handleAngle) * direction,\n y: cy + handleDist * Math.sin(handleAngle) * direction\n };\n}\n/**\r\n * @desc Get the current wheel value from user input\r\n * @param props - wheel props\r\n * @param x - global input x position\r\n * @param y - global input y position\r\n */\n\nfunction getWheelValueFromInput(props, x, y) {\n var _getWheelDimensions3 = getWheelDimensions(props),\n cx = _getWheelDimensions3.cx,\n cy = _getWheelDimensions3.cy;\n\n var handleRange = getHandleRange(props);\n x = cx - x;\n y = cy - y; // Calculate the hue by converting the angle to radians\n\n var hue = translateWheelAngle(props, Math.atan2(-y, -x) * (360 / TAU)); // Find the point's distance from the center of the wheel\n // This is used to show the saturation level\n\n var handleDist = Math.min(dist(x, y), handleRange);\n return {\n h: Math.round(hue),\n s: Math.round(100 / handleRange * handleDist)\n };\n}\n/**\r\n * @desc Get the bounding dimensions of the box\r\n * @param props - box props\r\n */\n\nfunction getBoxDimensions(props) {\n var width = props.width,\n boxHeight = props.boxHeight,\n padding = props.padding,\n handleRadius = props.handleRadius;\n return {\n width: width,\n height: boxHeight != null ? boxHeight : width,\n radius: padding + handleRadius\n };\n}\n/**\r\n * @desc Get the current box value from user input\r\n * @param props - box props\r\n * @param x - global input x position\r\n * @param y - global input y position\r\n */\n\nfunction getBoxValueFromInput(props, x, y) {\n var _getBoxDimensions = getBoxDimensions(props),\n width = _getBoxDimensions.width,\n height = _getBoxDimensions.height,\n radius = _getBoxDimensions.radius;\n\n var handleStart = radius;\n var handleRangeX = width - radius * 2;\n var handleRangeY = height - radius * 2;\n var percentX = (x - handleStart) / handleRangeX * 100;\n var percentY = (y - handleStart) / handleRangeY * 100;\n return {\n s: Math.max(0, Math.min(percentX, 100)),\n v: Math.max(0, Math.min(100 - percentY, 100))\n };\n}\n/**\r\n * @desc Get the current box handle position for a given color\r\n * @param props - box props\r\n * @param color\r\n */\n\nfunction getBoxHandlePosition(props, color) {\n var _getBoxDimensions2 = getBoxDimensions(props),\n width = _getBoxDimensions2.width,\n height = _getBoxDimensions2.height,\n radius = _getBoxDimensions2.radius;\n\n var hsv = color.hsv;\n var handleStart = radius;\n var handleRangeX = width - radius * 2;\n var handleRangeY = height - radius * 2;\n return {\n x: handleStart + hsv.s / 100 * handleRangeX,\n y: handleStart + (handleRangeY - hsv.v / 100 * handleRangeY)\n };\n}\n/**\r\n * @desc Get the gradient stops for a box\r\n * @param props - box props\r\n * @param color\r\n */\n\nfunction getBoxGradients(props, color) {\n var hue = color.hue;\n return [// saturation gradient\n [[0, '#fff'], [100, \"hsl(\" + hue + \",100%,50%)\"]], // lightness gradient\n [[0, 'rgba(0,0,0,0)'], [100, '#000']]];\n}\n\n// Keep track of html elements for resolveSvgUrl\n// getElementsByTagName returns a live HTMLCollection, which stays in sync with the DOM tree\n// So it only needs to be called once\nvar BASE_ELEMENTS;\n/**\r\n * @desc Resolve an SVG reference URL\r\n * This is required to work around how Safari and iOS webviews handle gradient URLS under certain conditions\r\n * If a page is using a client-side routing library which makes use of the HTML tag,\r\n * Safari won't be able to render SVG gradients properly (as they are referenced by URLs)\r\n * More info on the problem:\r\n * https://stackoverflow.com/questions/19742805/angular-and-svg-filters/19753427#19753427\r\n * https://github.com/jaames/iro.js/issues/18\r\n * https://github.com/jaames/iro.js/issues/45\r\n * https://github.com/jaames/iro.js/pull/89\r\n * @props url - SVG reference URL\r\n */\n\nfunction resolveSvgUrl(url) {\n if (!BASE_ELEMENTS) { BASE_ELEMENTS = document.getElementsByTagName('base'); } // Sniff useragent string to check if the user is running Safari\n\n var ua = window.navigator.userAgent;\n var isSafari = /^((?!chrome|android).)*safari/i.test(ua);\n var isIos = /iPhone|iPod|iPad/i.test(ua);\n var location = window.location;\n return (isSafari || isIos) && BASE_ELEMENTS.length > 0 ? location.protocol + \"//\" + location.host + location.pathname + location.search + url : url;\n}\n/**\r\n * @desc Given a specifc (x, y) position, test if there's a handle there and return its index, else return null.\r\n * This is used for components like the box and wheel which support multiple handles when multicolor is active\r\n * @props x - point x position\r\n * @props y - point y position\r\n * @props handlePositions - array of {x, y} coords for each handle\r\n */\n\nfunction getHandleAtPoint(props, x, y, handlePositions) {\n for (var i = 0; i < handlePositions.length; i++) {\n var dX = handlePositions[i].x - x;\n var dY = handlePositions[i].y - y;\n var dist = Math.sqrt(dX * dX + dY * dY);\n\n if (dist < props.handleRadius) {\n return i;\n }\n }\n\n return null;\n}\n\nfunction cssBorderStyles(props) {\n return {\n boxSizing: 'border-box',\n border: props.borderWidth + \"px solid \" + props.borderColor\n };\n}\nfunction cssGradient(type, direction, stops) {\n return type + \"-gradient(\" + direction + \", \" + stops.map(function (_ref) {\n var o = _ref[0],\n col = _ref[1];\n return col + \" \" + o + \"%\";\n }).join(',') + \")\";\n}\nfunction cssValue(value) {\n if (typeof value === 'string') { return value; }\n return value + \"px\";\n}\n\nvar iroColorPickerOptionDefaults = {\n width: 300,\n height: 300,\n color: '#fff',\n colors: [],\n padding: 6,\n layoutDirection: 'vertical',\n borderColor: '#fff',\n borderWidth: 0,\n handleRadius: 8,\n activeHandleRadius: null,\n handleSvg: null,\n handleProps: {\n x: 0,\n y: 0\n },\n wheelLightness: true,\n wheelAngle: 0,\n wheelDirection: 'anticlockwise',\n sliderSize: null,\n sliderMargin: 12,\n boxHeight: null\n};\n\nvar SECONDARY_EVENTS = [\"mousemove\" /* MouseMove */, \"touchmove\" /* TouchMove */, \"mouseup\" /* MouseUp */, \"touchend\" /* TouchEnd */];\r\n// Base component class for iro UI components\r\n// This extends the Preact component class to allow them to react to mouse/touch input events by themselves\r\nvar IroComponentWrapper = /*@__PURE__*/(function (Component) {\n function IroComponentWrapper(props) {\r\n Component.call(this, props);\r\n // Generate unique ID for the component\r\n // This can be used to generate unique IDs for gradients, etc\r\n this.uid = (Math.random() + 1).toString(36).substring(5);\r\n }\n\n if ( Component ) IroComponentWrapper.__proto__ = Component;\n IroComponentWrapper.prototype = Object.create( Component && Component.prototype );\n IroComponentWrapper.prototype.constructor = IroComponentWrapper;\r\n IroComponentWrapper.prototype.render = function render (props) {\r\n var eventHandler = this.handleEvent.bind(this);\r\n var rootProps = {\r\n onMouseDown: eventHandler,\r\n // https://github.com/jaames/iro.js/issues/126\r\n // https://github.com/preactjs/preact/issues/2113#issuecomment-553408767\r\n ontouchstart: eventHandler,\r\n };\r\n var isHorizontal = props.layoutDirection === 'horizontal';\r\n var margin = props.margin === null ? props.sliderMargin : props.margin;\r\n var rootStyles = {\r\n overflow: 'visible',\r\n display: isHorizontal ? 'inline-block' : 'block'\r\n };\r\n // first component shouldn't have any margin\r\n if (props.index > 0) {\r\n rootStyles[isHorizontal ? 'marginLeft' : 'marginTop'] = margin;\r\n }\r\n return (h(d, null, props.children(this.uid, rootProps, rootStyles)));\r\n };\r\n // More info on handleEvent:\r\n // https://medium.com/@WebReflection/dom-handleevent-a-cross-platform-standard-since-year-2000-5bf17287fd38\r\n // TL;DR this lets us have a single point of entry for multiple events, and we can avoid callback/binding hell\r\n IroComponentWrapper.prototype.handleEvent = function handleEvent (e) {\n var this$1 = this;\n\r\n var inputHandler = this.props.onInput;\r\n // Get the screen position of the component\r\n var bounds = this.base.getBoundingClientRect();\r\n // Prefect default browser action\r\n e.preventDefault();\r\n // Detect if the event is a touch event by checking if it has the `touches` property\r\n // If it is a touch event, use the first touch input\r\n var point = e.touches ? e.changedTouches[0] : e;\r\n var x = point.clientX - bounds.left;\r\n var y = point.clientY - bounds.top;\r\n switch (e.type) {\r\n case \"mousedown\" /* MouseDown */:\r\n case \"touchstart\" /* TouchStart */:\r\n var result = inputHandler(x, y, 0 /* Start */);\r\n if (result !== false) {\r\n SECONDARY_EVENTS.forEach(function (event) {\r\n document.addEventListener(event, this$1, { passive: false });\r\n });\r\n }\r\n break;\r\n case \"mousemove\" /* MouseMove */:\r\n case \"touchmove\" /* TouchMove */:\r\n inputHandler(x, y, 1 /* Move */);\r\n break;\r\n case \"mouseup\" /* MouseUp */:\r\n case \"touchend\" /* TouchEnd */:\r\n inputHandler(x, y, 2 /* End */);\r\n SECONDARY_EVENTS.forEach(function (event) {\r\n document.removeEventListener(event, this$1, { passive: false });\r\n });\r\n break;\r\n }\r\n };\n\n return IroComponentWrapper;\n}(m));\n\nfunction IroHandle(props) {\r\n var radius = props.r;\r\n var url = props.url;\r\n var cx = radius;\r\n var cy = radius;\r\n return (h(\"svg\", { className: (\"IroHandle IroHandle--\" + (props.index) + \" \" + (props.isActive ? 'IroHandle--isActive' : '')), style: {\r\n transform: (\"translate(\" + (cssValue(props.x)) + \", \" + (cssValue(props.y)) + \")\"),\r\n willChange: 'transform',\r\n top: cssValue(-radius),\r\n left: cssValue(-radius),\r\n width: cssValue(radius * 2),\r\n height: cssValue(radius * 2),\r\n position: 'absolute',\r\n overflow: 'visible'\r\n } },\r\n url && (h(\"use\", Object.assign({ xlinkHref: resolveSvgUrl(url) }, props.props))),\r\n !url && (h(\"circle\", { cx: cx, cy: cy, r: radius, fill: \"none\", \"stroke-width\": 2, stroke: \"#000\" })),\r\n !url && (h(\"circle\", { cx: cx, cy: cy, r: radius - 2, fill: props.fill, \"stroke-width\": 2, stroke: \"#fff\" }))));\r\n}\r\nIroHandle.defaultProps = {\r\n fill: 'none',\r\n x: 0,\r\n y: 0,\r\n r: 8,\r\n url: null,\r\n props: { x: 0, y: 0 }\r\n};\n\nfunction IroSlider(props) {\r\n var activeIndex = props.activeIndex;\r\n var activeColor = (activeIndex !== undefined && activeIndex < props.colors.length) ? props.colors[activeIndex] : props.color;\r\n var ref = getSliderDimensions(props);\n var width = ref.width;\n var height = ref.height;\n var radius = ref.radius;\r\n var handlePos = getSliderHandlePosition(props, activeColor);\r\n var gradient = getSliderGradient(props, activeColor);\r\n function handleInput(x, y, type) {\r\n var value = getSliderValueFromInput(props, x, y);\r\n props.parent.inputActive = true;\r\n activeColor[props.sliderType] = value;\r\n props.onInput(type, props.id);\r\n }\r\n return (h(IroComponentWrapper, Object.assign({}, props, { onInput: handleInput }), function (uid, rootProps, rootStyles) { return (h(\"div\", Object.assign({}, rootProps, { className: \"IroSlider\", style: Object.assign({}, {position: 'relative',\r\n width: cssValue(width),\r\n height: cssValue(height),\r\n borderRadius: cssValue(radius),\r\n // checkered bg to represent alpha\r\n background: \"conic-gradient(#ccc 25%, #fff 0 50%, #ccc 0 75%, #fff 0)\",\r\n backgroundSize: '8px 8px'},\r\n rootStyles) }),\r\n h(\"div\", { className: \"IroSliderGradient\", style: Object.assign({}, {position: 'absolute',\r\n top: 0,\r\n left: 0,\r\n width: \"100%\",\r\n height: \"100%\",\r\n borderRadius: cssValue(radius),\r\n background: cssGradient('linear', props.layoutDirection === 'horizontal' ? 'to top' : 'to right', gradient)},\r\n cssBorderStyles(props)) }),\r\n h(IroHandle, { isActive: true, index: activeColor.index, r: props.handleRadius, url: props.handleSvg, props: props.handleProps, x: handlePos.x, y: handlePos.y }))); }));\r\n}\r\nIroSlider.defaultProps = Object.assign({}, sliderDefaultOptions);\n\nfunction IroBox(props) {\r\n var ref = getBoxDimensions(props);\n var width = ref.width;\n var height = ref.height;\n var radius = ref.radius;\r\n var colors = props.colors;\r\n var colorPicker = props.parent;\r\n var activeIndex = props.activeIndex;\r\n var activeColor = (activeIndex !== undefined && activeIndex < props.colors.length) ? props.colors[activeIndex] : props.color;\r\n var gradients = getBoxGradients(props, activeColor);\r\n var handlePositions = colors.map(function (color) { return getBoxHandlePosition(props, color); });\r\n function handleInput(x, y, inputType) {\r\n if (inputType === 0 /* Start */) {\r\n // getHandleAtPoint() returns the index for the handle if the point 'hits' it, or null otherwise\r\n var activeHandle = getHandleAtPoint(props, x, y, handlePositions);\r\n // If the input hit a handle, set it as the active handle, but don't update the color\r\n if (activeHandle !== null) {\r\n colorPicker.setActiveColor(activeHandle);\r\n }\r\n // If the input didn't hit a handle, set the currently active handle to that position\r\n else {\r\n colorPicker.inputActive = true;\r\n activeColor.hsv = getBoxValueFromInput(props, x, y);\r\n props.onInput(inputType, props.id);\r\n }\r\n }\r\n // move is fired when the user has started dragging\r\n else if (inputType === 1 /* Move */) {\r\n colorPicker.inputActive = true;\r\n activeColor.hsv = getBoxValueFromInput(props, x, y);\r\n }\r\n // let the color picker fire input:start, input:move or input:end events\r\n props.onInput(inputType, props.id);\r\n }\r\n return (h(IroComponentWrapper, Object.assign({}, props, { onInput: handleInput }), function (uid, rootProps, rootStyles) { return (h(\"div\", Object.assign({}, rootProps, { className: \"IroBox\", style: Object.assign({}, {width: cssValue(width),\r\n height: cssValue(height),\r\n position: 'relative'},\r\n rootStyles) }),\r\n h(\"div\", { className: \"IroBox\", style: Object.assign({}, {width: '100%',\r\n height: '100%',\r\n borderRadius: cssValue(radius)},\r\n cssBorderStyles(props),\r\n {background: cssGradient('linear', 'to bottom', gradients[1])\r\n + ',' +\r\n cssGradient('linear', 'to right', gradients[0])}) }),\r\n colors.filter(function (color) { return color !== activeColor; }).map(function (color) { return (h(IroHandle, { isActive: false, index: color.index, fill: color.hslString, r: props.handleRadius, url: props.handleSvg, props: props.handleProps, x: handlePositions[color.index].x, y: handlePositions[color.index].y })); }),\r\n h(IroHandle, { isActive: true, index: activeColor.index, fill: activeColor.hslString, r: props.activeHandleRadius || props.handleRadius, url: props.handleSvg, props: props.handleProps, x: handlePositions[activeColor.index].x, y: handlePositions[activeColor.index].y }))); }));\r\n}\n\nvar HUE_GRADIENT_CLOCKWISE = 'conic-gradient(red, yellow, lime, aqua, blue, magenta, red)';\r\nvar HUE_GRADIENT_ANTICLOCKWISE = 'conic-gradient(red, magenta, blue, aqua, lime, yellow, red)';\r\nfunction IroWheel(props) {\r\n var ref = getWheelDimensions(props);\n var width = ref.width;\n var colors = props.colors;\n var borderWidth = props.borderWidth;\r\n var colorPicker = props.parent;\r\n var activeColor = props.color;\r\n var hsv = activeColor.hsv;\r\n var handlePositions = colors.map(function (color) { return getWheelHandlePosition(props, color); });\r\n var circleStyles = {\r\n position: 'absolute',\r\n top: 0,\r\n left: 0,\r\n width: '100%',\r\n height: '100%',\r\n borderRadius: '50%',\r\n boxSizing: 'border-box'\r\n };\r\n function handleInput(x, y, inputType) {\r\n if (inputType === 0 /* Start */) {\r\n // input hitbox is a square, \r\n // so we want to ignore any initial clicks outside the circular shape of the wheel\r\n if (!isInputInsideWheel(props, x, y)) {\r\n // returning false will cease all event handling for this interaction\r\n return false;\r\n }\r\n // getHandleAtPoint() returns the index for the handle if the point 'hits' it, or null otherwise\r\n var activeHandle = getHandleAtPoint(props, x, y, handlePositions);\r\n // If the input hit a handle, set it as the active handle, but don't update the color\r\n if (activeHandle !== null) {\r\n colorPicker.setActiveColor(activeHandle);\r\n }\r\n // If the input didn't hit a handle, set the currently active handle to that position\r\n else {\r\n colorPicker.inputActive = true;\r\n activeColor.hsv = getWheelValueFromInput(props, x, y);\r\n props.onInput(inputType, props.id);\r\n }\r\n }\r\n // move is fired when the user has started dragging\r\n else if (inputType === 1 /* Move */) {\r\n colorPicker.inputActive = true;\r\n activeColor.hsv = getWheelValueFromInput(props, x, y);\r\n }\r\n // let the color picker fire input:start, input:move or input:end events\r\n props.onInput(inputType, props.id);\r\n }\r\n return (h(IroComponentWrapper, Object.assign({}, props, { onInput: handleInput }), function (uid, rootProps, rootStyles) { return (h(\"div\", Object.assign({}, rootProps, { className: \"IroWheel\", style: Object.assign({}, {width: cssValue(width),\r\n height: cssValue(width),\r\n position: 'relative'},\r\n rootStyles) }),\r\n h(\"div\", { className: \"IroWheelHue\", style: Object.assign({}, circleStyles,\r\n {transform: (\"rotateZ(\" + (props.wheelAngle + 90) + \"deg)\"),\r\n background: props.wheelDirection === 'clockwise' ? HUE_GRADIENT_CLOCKWISE : HUE_GRADIENT_ANTICLOCKWISE}) }),\r\n h(\"div\", { className: \"IroWheelSaturation\", style: Object.assign({}, circleStyles,\r\n {background: 'radial-gradient(circle closest-side, #fff, transparent)'}) }),\r\n props.wheelLightness && (h(\"div\", { className: \"IroWheelLightness\", style: Object.assign({}, circleStyles,\r\n {background: '#000',\r\n opacity: 1 - hsv.v / 100}) })),\r\n h(\"div\", { className: \"IroWheelBorder\", style: Object.assign({}, circleStyles,\r\n cssBorderStyles(props)) }),\r\n colors.filter(function (color) { return color !== activeColor; }).map(function (color) { return (h(IroHandle, { isActive: false, index: color.index, fill: color.hslString, r: props.handleRadius, url: props.handleSvg, props: props.handleProps, x: handlePositions[color.index].x, y: handlePositions[color.index].y })); }),\r\n h(IroHandle, { isActive: true, index: activeColor.index, fill: activeColor.hslString, r: props.activeHandleRadius || props.handleRadius, url: props.handleSvg, props: props.handleProps, x: handlePositions[activeColor.index].x, y: handlePositions[activeColor.index].y }))); }));\r\n}\n\nfunction createWidget(WidgetComponent) {\r\n var widgetFactory = function (parent, props) {\r\n var widget; // will become an instance of the widget component class\r\n var widgetRoot = document.createElement('div');\r\n // Render widget into a temp DOM node\r\n I(h(WidgetComponent, Object.assign({}, {ref: function (ref) { return widget = ref; }},\r\n props)), widgetRoot);\r\n function mountWidget() {\r\n var container = parent instanceof Element ? parent : document.querySelector(parent);\r\n container.appendChild(widget.base);\r\n widget.onMount(container);\r\n }\r\n // Mount it into the DOM when the page document is ready\r\n if (document.readyState !== 'loading') {\r\n mountWidget();\r\n }\r\n else {\r\n document.addEventListener('DOMContentLoaded', mountWidget);\r\n }\r\n return widget;\r\n };\r\n // Allow the widget factory to inherit component prototype + static class methods\r\n // This makes it easier for plugin authors to extend the base widget component\r\n widgetFactory.prototype = WidgetComponent.prototype;\r\n Object.assign(widgetFactory, WidgetComponent);\r\n // Add reference to base component too\r\n widgetFactory.__component = WidgetComponent;\r\n return widgetFactory;\r\n}\n\nvar IroColorPicker = /*@__PURE__*/(function (Component) {\n function IroColorPicker(props) {\n var this$1 = this;\n\r\n Component.call(this, props);\r\n this.colors = [];\r\n this.inputActive = false;\r\n this.events = {};\r\n this.activeEvents = {};\r\n this.deferredEvents = {};\r\n this.id = props.id;\r\n var colors = props.colors.length > 0 ? props.colors : [props.color];\r\n colors.forEach(function (colorValue) { return this$1.addColor(colorValue); });\r\n this.setActiveColor(0);\r\n // Pass all the props into the component's state,\r\n // Except we want to add the color object and make sure that refs aren't passed down to children\r\n this.state = Object.assign({}, props,\r\n {color: this.color,\r\n colors: this.colors,\r\n layout: props.layout});\r\n }\n\n if ( Component ) IroColorPicker.__proto__ = Component;\n IroColorPicker.prototype = Object.create( Component && Component.prototype );\n IroColorPicker.prototype.constructor = IroColorPicker;\r\n // Plubic multicolor API\r\n /**\r\n * @desc Add a color to the color picker\r\n * @param color new color to add\r\n * @param index optional color index\r\n */\r\n IroColorPicker.prototype.addColor = function addColor (color, index) {\n if ( index === void 0 ) index = this.colors.length;\n\r\n // Create a new iro.Color\r\n // Also bind it to onColorChange, so whenever the color changes it updates the color picker\r\n var newColor = new IroColor(color, this.onColorChange.bind(this));\r\n // Insert color @ the given index\r\n this.colors.splice(index, 0, newColor);\r\n // Reindex colors\r\n this.colors.forEach(function (color, index) { return color.index = index; });\r\n // Update picker state if necessary\r\n if (this.state) {\r\n this.setState({ colors: this.colors });\r\n }\r\n // Fire color init event\r\n this.deferredEmit('color:init', newColor);\r\n };\r\n /**\r\n * @desc Remove a color from the color picker\r\n * @param index color index\r\n */\r\n IroColorPicker.prototype.removeColor = function removeColor (index) {\r\n var color = this.colors.splice(index, 1)[0];\r\n // Destroy the color object -- this unbinds it from the color picker\r\n color.unbind();\r\n // Reindex colors\r\n this.colors.forEach(function (color, index) { return color.index = index; });\r\n // Update picker state if necessary\r\n if (this.state) {\r\n this.setState({ colors: this.colors });\r\n }\r\n // If the active color was removed, default active color to 0\r\n if (color.index === this.color.index) {\r\n this.setActiveColor(0);\r\n }\r\n // Fire color remove event\r\n this.emit('color:remove', color);\r\n };\r\n /**\r\n * @desc Set the currently active color\r\n * @param index color index\r\n */\r\n IroColorPicker.prototype.setActiveColor = function setActiveColor (index) {\r\n this.color = this.colors[index];\r\n if (this.state) {\r\n this.setState({ color: this.color });\r\n }\r\n // Fire color switch event\r\n this.emit('color:setActive', this.color);\r\n };\r\n /**\r\n * @desc Replace all of the current colorPicker colors\r\n * @param newColorValues list of new colors to add\r\n */\r\n IroColorPicker.prototype.setColors = function setColors (newColorValues, activeColorIndex) {\n var this$1 = this;\n if ( activeColorIndex === void 0 ) activeColorIndex = 0;\n\r\n // Unbind color events\r\n this.colors.forEach(function (color) { return color.unbind(); });\r\n // Destroy old colors\r\n this.colors = [];\r\n // Add new colors\r\n newColorValues.forEach(function (colorValue) { return this$1.addColor(colorValue); });\r\n // Reset active color\r\n this.setActiveColor(activeColorIndex);\r\n this.emit('color:setAll', this.colors);\r\n };\r\n // Public ColorPicker events API\r\n /**\r\n * @desc Set a callback function for an event\r\n * @param eventList event(s) to listen to\r\n * @param callback - Function called when the event is fired\r\n */\r\n IroColorPicker.prototype.on = function on (eventList, callback) {\n var this$1 = this;\n\r\n var events = this.events;\r\n // eventList can be an eventType string or an array of eventType strings\r\n (!Array.isArray(eventList) ? [eventList] : eventList).forEach(function (eventType) {\r\n // Add event callback\r\n (events[eventType] || (events[eventType] = [])).push(callback);\r\n // Call deferred events\r\n // These are events that can be stored until a listener for them is added\r\n if (this$1.deferredEvents[eventType]) {\r\n // Deffered events store an array of arguments from when the event was called\r\n this$1.deferredEvents[eventType].forEach(function (args) {\r\n callback.apply(null, args);\r\n });\r\n // Clear deferred events\r\n this$1.deferredEvents[eventType] = [];\r\n }\r\n });\r\n };\r\n /**\r\n * @desc Remove a callback function for an event added with on()\r\n * @param eventList - event(s) to listen to\r\n * @param callback - original callback function to remove\r\n */\r\n IroColorPicker.prototype.off = function off (eventList, callback) {\n var this$1 = this;\n\r\n (!Array.isArray(eventList) ? [eventList] : eventList).forEach(function (eventType) {\r\n var callbackList = this$1.events[eventType];\r\n // this.emitHook('event:off', eventType, callback);\r\n if (callbackList)\r\n { callbackList.splice(callbackList.indexOf(callback), 1); }\r\n });\r\n };\r\n /**\r\n * @desc Emit an event\r\n * @param eventType event to emit\r\n */\r\n IroColorPicker.prototype.emit = function emit (eventType) {\n var this$1 = this;\n var args = [], len = arguments.length - 1;\n while ( len-- > 0 ) args[ len ] = arguments[ len + 1 ];\n\r\n var activeEvents = this.activeEvents;\r\n var isEventActive = activeEvents.hasOwnProperty(eventType) ? activeEvents[eventType] : false;\r\n // Prevent event callbacks from firing if the event is already active\r\n // This stops infinite loops if something in an event callback causes the same event to be fired again\r\n // (e.g. setting the color inside a color:change callback)\r\n if (!isEventActive) {\r\n activeEvents[eventType] = true;\r\n var callbackList = this.events[eventType] || [];\r\n callbackList.forEach(function (fn) { return fn.apply(this$1, args); });\r\n activeEvents[eventType] = false;\r\n }\r\n };\r\n /**\r\n * @desc Emit an event now, or save it for when the relevent event listener is added\r\n * @param eventType - The name of the event to emit\r\n */\r\n IroColorPicker.prototype.deferredEmit = function deferredEmit (eventType) {\n var ref;\n\n var args = [], len = arguments.length - 1;\n while ( len-- > 0 ) args[ len ] = arguments[ len + 1 ];\r\n var deferredEvents = this.deferredEvents;\r\n (ref = this).emit.apply(ref, [ eventType ].concat( args ));\r\n (deferredEvents[eventType] || (deferredEvents[eventType] = [])).push(args);\r\n };\r\n // Public utility methods\r\n IroColorPicker.prototype.setOptions = function setOptions (newOptions) {\r\n this.setState(newOptions);\r\n };\r\n /**\r\n * @desc Resize the color picker\r\n * @param width - new width\r\n */\r\n IroColorPicker.prototype.resize = function resize (width) {\r\n this.setOptions({ width: width });\r\n };\r\n /**\r\n * @desc Reset the color picker to the initial color provided in the color picker options\r\n */\r\n IroColorPicker.prototype.reset = function reset () {\r\n this.colors.forEach(function (color) { return color.reset(); });\r\n this.setState({ colors: this.colors });\r\n };\r\n /**\r\n * @desc Called by the createWidget wrapper when the element is mounted into the page\r\n * @param container - the container element for this ColorPicker instance\r\n */\r\n IroColorPicker.prototype.onMount = function onMount (container) {\r\n this.el = container;\r\n this.deferredEmit('mount', this);\r\n };\r\n // Internal methods\r\n /**\r\n * @desc React to a color update\r\n * @param color - current color\r\n * @param changes - shows which h,s,v,a color channels changed\r\n */\r\n IroColorPicker.prototype.onColorChange = function onColorChange (color, changes) {\r\n this.setState({ color: this.color });\r\n if (this.inputActive) {\r\n this.inputActive = false;\r\n this.emit('input:change', color, changes);\r\n }\r\n this.emit('color:change', color, changes);\r\n };\r\n /**\r\n * @desc Handle input from a UI control element\r\n * @param type - event type\r\n */\r\n IroColorPicker.prototype.emitInputEvent = function emitInputEvent (type, originId) {\r\n if (type === 0 /* Start */) {\r\n this.emit('input:start', this.color, originId);\r\n }\r\n else if (type === 1 /* Move */) {\r\n this.emit('input:move', this.color, originId);\r\n }\r\n else if (type === 2 /* End */) {\r\n this.emit('input:end', this.color, originId);\r\n }\r\n };\r\n IroColorPicker.prototype.render = function render (props, state) {\n var this$1 = this;\n\r\n var layout = state.layout;\r\n // use layout shorthands\r\n if (!Array.isArray(layout)) {\r\n switch (layout) {\r\n // TODO: implement some?\r\n default:\r\n layout = [\r\n { component: IroWheel },\r\n { component: IroSlider } ];\r\n }\r\n // add transparency slider to the layout\r\n if (state.transparency) {\r\n layout.push({\r\n component: IroSlider,\r\n options: {\r\n sliderType: 'alpha'\r\n }\r\n });\r\n }\r\n }\r\n return (h(\"div\", { class: \"IroColorPicker\", id: state.id, style: {\r\n display: state.display\r\n } }, layout.map(function (ref, componentIndex) {\n var UiComponent = ref.component;\n var options = ref.options;\n\n return (h(UiComponent, Object.assign({}, state, options, { ref: undefined, onInput: this$1.emitInputEvent.bind(this$1), parent: this$1, index: componentIndex })));\n })));\r\n };\n\n return IroColorPicker;\n}(m));\r\nIroColorPicker.defaultProps = Object.assign({}, iroColorPickerOptionDefaults,\r\n {colors: [],\r\n display: 'block',\r\n id: null,\r\n layout: 'default',\r\n margin: null});\r\nvar IroColorPickerWidget = createWidget(IroColorPicker);\n\nvar iro;\r\n(function (iro) {\r\n iro.version = \"5.5.1\"; // replaced by @rollup/plugin-replace; see rollup.config.js\r\n iro.Color = IroColor;\r\n iro.ColorPicker = IroColorPickerWidget;\r\n var ui;\r\n (function (ui) {\r\n ui.h = h;\r\n ui.ComponentBase = IroComponentWrapper;\r\n ui.Handle = IroHandle;\r\n ui.Slider = IroSlider;\r\n ui.Wheel = IroWheel;\r\n ui.Box = IroBox;\r\n })(ui = iro.ui || (iro.ui = {}));\r\n})(iro || (iro = {}));\r\nvar iro$1 = iro;\n\n/* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = (iro$1);\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvQGphYW1lcy9pcm8vZGlzdC9pcm8uZXMuanM/YTkwMCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7O0FBQUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBLG9CQUFvQiwwRUFBMEUsZ0JBQWdCLGdCQUFnQixXQUFXLEVBQUUsU0FBUyxjQUFjLG1CQUFtQixxQkFBcUIsa0JBQWtCLHdCQUF3QixTQUFTLHdCQUF3QixlQUFlLG1CQUFtQixLQUFLLGNBQWMsRUFBRSxFQUFFLDBEQUEwRCwwQkFBMEIseUNBQXlDLEVBQUUsRUFBRSw4RUFBOEUsb0JBQW9CLE9BQU8sZ0dBQWdHLDZCQUE2QixjQUFjLGtCQUFrQixjQUFjLGlDQUFpQyxhQUFhLEVBQUUsMkNBQTJDLDRCQUE0QixFQUFFLDZCQUE2QixtQ0FBbUMscUJBQXFCLFNBQVMsZ0JBQWdCLDZCQUE2QixnQkFBZ0IsWUFBWSxtREFBbUQsRUFBRSxVQUFVLGVBQWUsS0FBSyxxQ0FBcUMsY0FBYyxFQUFFLEVBQUUsMkNBQTJDLGNBQWMsUUFBUSxpQ0FBaUMsOEJBQThCLGVBQWUsS0FBSyxxQ0FBcUMsdUJBQXVCLE1BQU0sRUFBRSxhQUFhLGNBQWMsbUhBQW1ILGFBQWEsb0JBQW9CLHlCQUF5QiwyQkFBMkIsRUFBRSxVQUFVLEVBQUUseUZBQXlGLGtGQUFrRixHQUFHLDhCQUE4QiwyQ0FBMkMsc0VBQXNFLFlBQVksNEVBQTRFLGFBQWEsRUFBRSxNQUFNLFNBQVMsSUFBSSxLQUFLLDRDQUE0QyxZQUFZLE1BQU0sUUFBUSxFQUFFLGlHQUFpRyw2QkFBNkIsZ0JBQWdCLEVBQUUsd0NBQXdDLGdDQUFnQyxrQkFBa0IsRUFBRSxLQUFLLFlBQVksdUJBQXVCLE1BQU0sVUFBVSxTQUFTLEVBQUUsRUFBRSxxQkFBcUIsZ0NBQWdDLHFEQUFxRCxhQUFhLDhDQUE4QyxnQkFBZ0IsSUFBSSxFQUFFLHFCQUFxQixFQUFFLEVBQUUsUUFBUSxJQUFJLEVBQUUsMEJBQTBCLEVBQUUsTUFBTSxTQUFTLFdBQVcsS0FBSyx1QkFBdUIsRUFBRSxHQUFHLGtCQUFrQixpREFBaUQsb0JBQW9CLEVBQUUsMEJBQTBCLGFBQWEsV0FBVyxLQUFLLGFBQWEsRUFBRSxFQUFFLE1BQU0scUJBQXFCLEVBQUUsU0FBUyxzQkFBc0IsTUFBTSxZQUFZLDRCQUE0QixFQUFFLFlBQVkseUZBQXlGLEdBQUcsa0JBQWtCLDJGQUEyRixzQkFBc0IsY0FBYyxzRkFBc0YscUJBQXFCLGtDQUFrQyxhQUFhLEVBQUUsS0FBSyxnREFBZ0QsYUFBYSxzQkFBc0IsRUFBRSxFQUFFLE1BQU0sYUFBYSw2QkFBNkIsRUFBRSxHQUFHLEVBQUUsS0FBSyxtSkFBbUosbVpBQW1aLEdBQUcsY0FBYyw0Q0FBNEMsZ0NBQWdDLGlDQUFpQywyQkFBMkIsYUFBYSxFQUFFLGdCQUFnQixJQUFJLDJCQUEyQiwyUEFBMlAscUlBQXFJLHNEQUFzRCwySEFBMkgsRUFBRSxLQUFLLDhMQUE4TCxrR0FBa0csZUFBZSxLQUFLLDRCQUE0QixFQUFFLFFBQVEsK0RBQStELHlPQUF5TyxtSUFBbUksY0FBYyxFQUFFLGtDQUFrQyxFQUFFLDJGQUEyRixNQUFNLDhCQUE4QixFQUFFLG9CQUFvQixTQUFTLGNBQWMsYUFBYSxnQkFBZ0IsVUFBVSxVQUFVLEVBQUUsS0FBSyx1QkFBdUIsU0FBUyxnQkFBZ0IsRUFBRSxpQkFBaUIsNEJBQTRCLGdDQUFnQyx5Q0FBeUMsU0FBUyxXQUFXLEtBQUsseUVBQXlFLGNBQWMsTUFBTSxFQUFFLEVBQUUsWUFBWSxrQkFBa0IsbUNBQW1DLEVBQUUseUdBQXlHLG9nQkFBb2dCLGtCQUFrQixJQUFJLHVDQUF1QyxTQUFTLGFBQWEsa0JBQWtCLFVBQVUsb0lBQW9JLDJCQUEyQixLQUFLLDBCQUEwQixTQUFTLFlBQVksRUFBRSxtQkFBbUIsWUFBWSxTQUFTLFdBQVcsS0FBSyxtQkFBbUIsRUFBRSxFQUFFLGVBQWUsa0JBQWtCLDZCQUE2QixrQkFBa0IsVUFBVSxzTUFBc00sSUFBSSxvQ0FBb0MscURBQXFELGNBQWMsZ0hBQWdILHFDQUFxQyxtREFBbUQsOEpBQThKLFVBQVUsUUFBUSxFQUFFLHVCQUF1QixLQUFLLGdFQUFnRSx1REFBdUQsRUFBRSxLQUFLLDhCQUE4QixVQUFVLEVBQUUsd0JBQXdCLGtCQUFrQixTQUFTLEtBQUssRUFBRSxFQUFFLFFBQVE7O0FBRWxzUTtBQUNBLGlCQUFpQixrQkFBa0I7QUFDbkM7QUFDQTtBQUNBO0FBQ0EsZ0NBQWdDLDRCQUE0QjtBQUM1RDtBQUNBO0FBQ0E7O0FBRUE7QUFDQSxtQkFBbUIsc0RBQXNEO0FBQ3pFLG9CQUFvQiw2Q0FBNkM7QUFDakU7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUEsbUJBQW1CLHNCQUFzQjtBQUN6Qzs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxrQ0FBa0M7O0FBRWxDLHdDQUF3Qzs7QUFFeEMsZ0VBQWdFO0FBQ2hFOztBQUVBO0FBQ0EsOElBQThJOztBQUU5STtBQUNBO0FBQ0E7QUFDQSxvRUFBb0U7O0FBRXBFO0FBQ0EsbUNBQW1DLEVBQUU7QUFDckMsbUNBQW1DLEVBQUU7QUFDckM7QUFDQTtBQUNBO0FBQ0Esa0hBQWtIOztBQUVsSDtBQUNBLHVCQUF1Qjs7QUFFdkI7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7OztBQUdBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7O0FBR0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7OztBQUdBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxnQkFBZ0IsaUJBQWlCLEVBQUU7O0FBRW5DO0FBQ0EsbUNBQW1DLFVBQVU7QUFDN0M7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7O0FBR0E7O0FBRUE7QUFDQTtBQUNBLGtDQUFrQyxJQUFJO0FBQ3RDO0FBQ0EsT0FBTztBQUNQO0FBQ0EsT0FBTztBQUNQO0FBQ0E7QUFDQSxLQUFLO0FBQ0w7QUFDQTtBQUNBLE9BQU87QUFDUDtBQUNBLE9BQU87QUFDUDtBQUNBLE9BQU87QUFDUDtBQUNBLE9BQU87QUFDUDtBQUNBO0FBQ0EsS0FBSztBQUNMO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUEsOEJBQThCLCtCQUErQjtBQUM3RDtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQSxnQkFBZ0I7O0FBRWhCOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLHFDQUFxQzs7QUFFckM7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQSxtREFBbUQ7O0FBRW5EO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQSxLQUFLO0FBQ0w7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBOztBQUVBO0FBQ0E7QUFDQSxPQUFPO0FBQ1A7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxLQUFLO0FBQ0w7QUFDQTtBQUNBLDRCQUE0QixzQkFBc0I7QUFDbEQ7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUEsMEJBQTBCOztBQUUxQiwrREFBK0QsOEJBQThCO0FBQzdGLE9BQU87QUFDUDtBQUNBO0FBQ0E7QUFDQSxHQUFHO0FBQ0g7QUFDQTtBQUNBLHdCQUF3QjtBQUN4QixLQUFLO0FBQ0w7QUFDQTtBQUNBO0FBQ0EsR0FBRztBQUNIO0FBQ0E7QUFDQTtBQUNBLEtBQUs7QUFDTDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsR0FBRztBQUNIO0FBQ0E7QUFDQTtBQUNBLEtBQUs7QUFDTDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsR0FBRztBQUNIO0FBQ0E7QUFDQTtBQUNBLEtBQUs7QUFDTDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsR0FBRztBQUNIO0FBQ0E7QUFDQTtBQUNBLEtBQUs7QUFDTDtBQUNBLDRCQUE0QjtBQUM1QjtBQUNBLE9BQU87QUFDUDtBQUNBLEdBQUc7QUFDSDtBQUNBO0FBQ0E7QUFDQSxLQUFLO0FBQ0w7QUFDQTtBQUNBO0FBQ0EsR0FBRztBQUNIO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsS0FBSztBQUNMO0FBQ0EsNEJBQTRCO0FBQzVCO0FBQ0EsT0FBTztBQUNQO0FBQ0EsR0FBRztBQUNIO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsS0FBSztBQUNMO0FBQ0EsNEJBQTRCO0FBQzVCO0FBQ0EsT0FBTztBQUNQO0FBQ0EsR0FBRztBQUNIO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsS0FBSztBQUNMO0FBQ0EsNEJBQTRCO0FBQzVCO0FBQ0EsT0FBTztBQUNQO0FBQ0EsR0FBRztBQUNIO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsS0FBSztBQUNMO0FBQ0EsNEJBQTRCO0FBQzVCO0FBQ0EsT0FBTztBQUNQO0FBQ0EsR0FBRztBQUNIO0FBQ0E7QUFDQSx3QkFBd0I7QUFDeEI7QUFDQSxPQUFPO0FBQ1AsS0FBSztBQUNMO0FBQ0E7QUFDQTtBQUNBLEdBQUc7QUFDSDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEtBQUs7QUFDTDtBQUNBLDRCQUE0QjtBQUM1QjtBQUNBLE9BQU87QUFDUDtBQUNBLEdBQUc7QUFDSDtBQUNBO0FBQ0Esd0JBQXdCO0FBQ3hCO0FBQ0EsT0FBTztBQUNQLEtBQUs7QUFDTDtBQUNBO0FBQ0E7QUFDQSxHQUFHO0FBQ0g7QUFDQTtBQUNBO0FBQ0E7QUFDQSxLQUFLO0FBQ0w7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsT0FBTztBQUNQO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxPQUFPO0FBQ1A7QUFDQTtBQUNBO0FBQ0EsR0FBRztBQUNIO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsS0FBSztBQUNMO0FBQ0E7QUFDQTtBQUNBLEdBQUc7QUFDSDtBQUNBO0FBQ0E7QUFDQTtBQUNBLEtBQUs7QUFDTDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQSxPQUFPO0FBQ1A7QUFDQTtBQUNBO0FBQ0E7QUFDQSxPQUFPO0FBQ1A7QUFDQTtBQUNBO0FBQ0EsT0FBTztBQUNQO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxPQUFPO0FBQ1A7QUFDQTtBQUNBO0FBQ0EsR0FBRztBQUNIO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsS0FBSztBQUNMO0FBQ0E7QUFDQTtBQUNBLEdBQUc7QUFDSDtBQUNBO0FBQ0E7QUFDQTtBQUNBLEtBQUs7QUFDTDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQSxPQUFPO0FBQ1A7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLE9BQU87QUFDUDtBQUNBO0FBQ0E7QUFDQSxHQUFHO0FBQ0g7QUFDQTtBQUNBO0FBQ0E7QUFDQSxLQUFLO0FBQ0w7QUFDQTtBQUNBO0FBQ0EsR0FBRzs7QUFFSDtBQUNBLENBQUM7O0FBRUQ7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSw0REFBNEQ7O0FBRTVEOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsR0FBRztBQUNIO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQSw2RUFBNkU7O0FBRTdFOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBOztBQUVBO0FBQ0E7QUFDQSxHQUFHO0FBQ0g7QUFDQSxHQUFHOzs7QUFHSDtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUEsc0NBQXNDLGNBQWM7QUFDcEQ7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxPQUFPO0FBQ1A7QUFDQTtBQUNBO0FBQ0E7QUFDQSxPQUFPO0FBQ1A7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsT0FBTztBQUNQO0FBQ0E7QUFDQTs7QUFFQSxzQkFBc0I7QUFDdEI7O0FBRUE7QUFDQTtBQUNBLEVBQUU7OztBQUdGO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOzs7QUFHQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7OztBQUdBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBLDRDQUE0Qzs7QUFFNUMsaURBQWlELDRCQUE0QixFQUFFO0FBQy9FLDRDQUE0QyxrQ0FBa0MsRUFBRTtBQUNoRiw0REFBNEQsa0NBQWtDLEVBQUU7QUFDaEcsb0RBQW9ELDRCQUE0QjtBQUNoRjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBLGFBQWE7O0FBRWIseUVBQXlFO0FBQ3pFOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBLHVCQUF1Qix1REFBdUQsRUFBRTs7QUFFaEY7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLHNDQUFzQyxLQUFLO0FBQzNDOztBQUVBO0FBQ0EsaUJBQWlCLDRCQUE0QjtBQUM3QztBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsR0FBRztBQUNIO0FBQ0E7QUFDQSxrQ0FBa0MsY0FBYztBQUNoRDtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEdBQUc7QUFDSDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFVBQVU7QUFDVjtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0Esa0VBQWtFLGlCQUFpQjtBQUNuRixxQkFBcUI7QUFDckI7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxpRUFBaUUsaUJBQWlCO0FBQ2xGLGlCQUFpQjtBQUNqQjtBQUNBO0FBQ0E7O0FBRUE7QUFDQSxDQUFDOztBQUVEO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxzQkFBc0I7QUFDdEI7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFNBQVMsRUFBRTtBQUNYLHdDQUF3QyxnQ0FBZ0M7QUFDeEUsOEJBQThCLDZFQUE2RTtBQUMzRyw4QkFBOEIscUZBQXFGO0FBQ25IO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsWUFBWTtBQUNaOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLG1EQUFtRCxVQUFVLHVCQUF1QiwwQ0FBMEMsa0NBQWtDLGNBQWMsZ0RBQWdELEdBQUc7QUFDak87QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLHNDQUFzQztBQUN0Qyx5QkFBeUI7QUFDekIsa0JBQWtCLHdEQUF3RCxHQUFHO0FBQzdFO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSw0SEFBNEg7QUFDNUgseUNBQXlDO0FBQ3pDLHNCQUFzQixrSkFBa0osSUFBSSxFQUFFO0FBQzlLO0FBQ0EseUNBQXlDOztBQUV6QztBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLHVEQUF1RCwyQ0FBMkMsRUFBRTtBQUNwRztBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsbURBQW1ELFVBQVUsdUJBQXVCLDBDQUEwQyxrQ0FBa0MsY0FBYyw2Q0FBNkMsR0FBRztBQUM5TjtBQUNBLGlDQUFpQztBQUNqQyx5QkFBeUI7QUFDekIsa0JBQWtCLDZDQUE2QyxHQUFHO0FBQ2xFO0FBQ0EsK0NBQStDO0FBQy9DO0FBQ0EsaUJBQWlCO0FBQ2pCO0FBQ0Esb0VBQW9FLEdBQUc7QUFDdkUsd0NBQXdDLDhCQUE4QixFQUFFLHdCQUF3Qix1QkFBdUIsME1BQTBNLEdBQUcsRUFBRTtBQUN0VSxzQkFBc0IsNlBBQTZQLElBQUksRUFBRTtBQUN6Ujs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLHVEQUF1RCw2Q0FBNkMsRUFBRTtBQUN0RztBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsbURBQW1ELFVBQVUsdUJBQXVCLDBDQUEwQyxrQ0FBa0MsY0FBYywrQ0FBK0MsR0FBRztBQUNoTztBQUNBLGlDQUFpQztBQUNqQyx5QkFBeUI7QUFDekIsa0JBQWtCLGtEQUFrRDtBQUNwRSxpQkFBaUI7QUFDakIsdUhBQXVILEdBQUc7QUFDMUgsa0JBQWtCLHlEQUF5RDtBQUMzRSxpQkFBaUIsc0VBQXNFLEdBQUc7QUFDMUYsMkNBQTJDLHdEQUF3RDtBQUNuRyxpQkFBaUI7QUFDakIseUNBQXlDLEdBQUc7QUFDNUMsa0JBQWtCLHFEQUFxRDtBQUN2RSx5Q0FBeUM7QUFDekMsd0NBQXdDLDhCQUE4QixFQUFFLHdCQUF3Qix1QkFBdUIsME1BQTBNLEdBQUcsRUFBRTtBQUN0VSxzQkFBc0IsNlBBQTZQLElBQUksRUFBRTtBQUN6Ujs7QUFFQTtBQUNBO0FBQ0EsbUJBQW1CO0FBQ25CO0FBQ0E7QUFDQSw2Q0FBNkMsR0FBRyxxQkFBcUIscUJBQXFCLEdBQUc7QUFDN0Y7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLDhDQUE4QyxvQ0FBb0MsRUFBRTtBQUNwRjtBQUNBO0FBQ0E7QUFDQSxxQ0FBcUM7QUFDckMsYUFBYTtBQUNiO0FBQ0EsaUNBQWlDO0FBQ2pDOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EscURBQXFELDRCQUE0QixFQUFFO0FBQ25GO0FBQ0E7QUFDQSwyQkFBMkIsc0JBQXNCO0FBQ2pEO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EscURBQXFELDRCQUE0QixFQUFFO0FBQ25GO0FBQ0E7QUFDQSwyQkFBMkIsc0JBQXNCO0FBQ2pEO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLDJCQUEyQixvQkFBb0I7QUFDL0M7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBLDhDQUE4Qyx1QkFBdUIsRUFBRTtBQUN2RTtBQUNBO0FBQ0E7QUFDQSxzREFBc0Qsb0NBQW9DLEVBQUU7QUFDNUY7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxpQkFBaUI7QUFDakI7QUFDQTtBQUNBO0FBQ0EsU0FBUztBQUNUO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQSxpQkFBaUIsd0RBQXdEO0FBQ3pFLFNBQVM7QUFDVDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGdEQUFnRCwrQkFBK0IsRUFBRTtBQUNqRjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EseUJBQXlCLGVBQWU7QUFDeEM7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLDhDQUE4QyxzQkFBc0IsRUFBRTtBQUN0RSx1QkFBdUIsc0JBQXNCO0FBQzdDO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsdUJBQXVCLG9CQUFvQjtBQUMzQztBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EseUJBQXlCLHNCQUFzQjtBQUMvQyx5QkFBeUIsdUJBQXVCO0FBQ2hEO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxpQkFBaUI7QUFDakI7QUFDQTtBQUNBLDBCQUEwQjtBQUMxQjtBQUNBLGFBQWEsRUFBRTtBQUNmO0FBQ0E7O0FBRUEsdURBQXVELG1CQUFtQixxR0FBcUc7QUFDL0ssU0FBUztBQUNUOztBQUVBO0FBQ0EsQ0FBQztBQUNELDhDQUE4QztBQUM5QyxLQUFLO0FBQ0w7QUFDQTtBQUNBO0FBQ0EsaUJBQWlCO0FBQ2pCOztBQUVBO0FBQ0E7QUFDQSwwQkFBMEIsdUNBQXVDO0FBQ2pFO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsS0FBSyw2QkFBNkI7QUFDbEMsQ0FBQyxrQkFBa0I7QUFDbkI7O0FBRUEsaUVBQWUsS0FBSyxFQUFDIiwiZmlsZSI6Ii4vbm9kZV9tb2R1bGVzL0BqYWFtZXMvaXJvL2Rpc3QvaXJvLmVzLmpzLmpzIiwic291cmNlc0NvbnRlbnQiOlsiLyohXG4gKiBpcm8uanMgdjUuNS4xXG4gKiAyMDE2LTIwMjEgSmFtZXMgRGFuaWVsXG4gKiBMaWNlbnNlZCB1bmRlciBNUEwgMi4wXG4gKiBnaXRodWIuY29tL2phYW1lcy9pcm8uanNcbiAqL1xuXG52YXIgbix1LHQsaSxyLG8sZj17fSxlPVtdLGM9L2FjaXR8ZXgoPzpzfGd8bnxwfCQpfHJwaHxncmlkfG93c3xtbmN8bnR3fGluZVtjaF18em9vfF5vcmR8Xi0tL2k7ZnVuY3Rpb24gcyhuLGwpe2Zvcih2YXIgdSBpbiBsKXsgblt1XT1sW3VdOyB9cmV0dXJuIG59ZnVuY3Rpb24gYShuKXt2YXIgbD1uLnBhcmVudE5vZGU7bCYmbC5yZW1vdmVDaGlsZChuKTt9ZnVuY3Rpb24gaChuLGwsdSl7dmFyIHQsaSxyLG8sZj1hcmd1bWVudHM7aWYobD1zKHt9LGwpLGFyZ3VtZW50cy5sZW5ndGg+Myl7IGZvcih1PVt1XSx0PTM7dDxhcmd1bWVudHMubGVuZ3RoO3QrKyl7IHUucHVzaChmW3RdKTsgfSB9aWYobnVsbCE9dSYmKGwuY2hpbGRyZW49dSksbnVsbCE9biYmbnVsbCE9bi5kZWZhdWx0UHJvcHMpeyBmb3IoaSBpbiBuLmRlZmF1bHRQcm9wcyl7IHZvaWQgMD09PWxbaV0mJihsW2ldPW4uZGVmYXVsdFByb3BzW2ldKTsgfSB9cmV0dXJuIG89bC5rZXksbnVsbCE9KHI9bC5yZWYpJiZkZWxldGUgbC5yZWYsbnVsbCE9byYmZGVsZXRlIGwua2V5LHYobixsLG8scil9ZnVuY3Rpb24gdihsLHUsdCxpKXt2YXIgcj17dHlwZTpsLHByb3BzOnUsa2V5OnQscmVmOmksX19rOm51bGwsX19wOm51bGwsX19iOjAsX19lOm51bGwsbDpudWxsLF9fYzpudWxsLGNvbnN0cnVjdG9yOnZvaWQgMH07cmV0dXJuIG4udm5vZGUmJm4udm5vZGUocikscn1mdW5jdGlvbiBkKG4pe3JldHVybiBuLmNoaWxkcmVufWZ1bmN0aW9uIHkobil7aWYobnVsbD09bnx8XCJib29sZWFuXCI9PXR5cGVvZiBuKXsgcmV0dXJuIG51bGw7IH1pZihcInN0cmluZ1wiPT10eXBlb2Ygbnx8XCJudW1iZXJcIj09dHlwZW9mIG4peyByZXR1cm4gdihudWxsLG4sbnVsbCxudWxsKTsgfWlmKG51bGwhPW4uX19lfHxudWxsIT1uLl9fYyl7dmFyIGw9dihuLnR5cGUsbi5wcm9wcyxuLmtleSxudWxsKTtyZXR1cm4gbC5fX2U9bi5fX2UsbH1yZXR1cm4gbn1mdW5jdGlvbiBtKG4sbCl7dGhpcy5wcm9wcz1uLHRoaXMuY29udGV4dD1sO31mdW5jdGlvbiB3KG4sbCl7aWYobnVsbD09bCl7IHJldHVybiBuLl9fcD93KG4uX19wLG4uX19wLl9fay5pbmRleE9mKG4pKzEpOm51bGw7IH1mb3IodmFyIHU7bDxuLl9fay5sZW5ndGg7bCsrKXsgaWYobnVsbCE9KHU9bi5fX2tbbF0pJiZudWxsIT11Ll9fZSl7IHJldHVybiB1Ll9fZTsgfSB9cmV0dXJuIFwiZnVuY3Rpb25cIj09dHlwZW9mIG4udHlwZT93KG4pOm51bGx9ZnVuY3Rpb24gZyhuKXt2YXIgbCx1O2lmKG51bGwhPShuPW4uX19wKSYmbnVsbCE9bi5fX2Mpe2ZvcihuLl9fZT1uLl9fYy5iYXNlPW51bGwsbD0wO2w8bi5fX2subGVuZ3RoO2wrKyl7IGlmKG51bGwhPSh1PW4uX19rW2xdKSYmbnVsbCE9dS5fX2Upe24uX19lPW4uX19jLmJhc2U9dS5fX2U7YnJlYWt9IH1yZXR1cm4gZyhuKX19ZnVuY3Rpb24gayhsKXsoIWwuX19kJiYobC5fX2Q9ITApJiYxPT09dS5wdXNoKGwpfHxpIT09bi5kZWJvdW5jZVJlbmRlcmluZykmJihpPW4uZGVib3VuY2VSZW5kZXJpbmcsKG4uZGVib3VuY2VSZW5kZXJpbmd8fHQpKF8pKTt9ZnVuY3Rpb24gXygpe3ZhciBuLGwsdCxpLHIsbyxmLGU7Zm9yKHUuc29ydChmdW5jdGlvbihuLGwpe3JldHVybiBsLl9fdi5fX2Itbi5fX3YuX19ifSk7bj11LnBvcCgpOyl7IG4uX19kJiYodD12b2lkIDAsaT12b2lkIDAsbz0ocj0obD1uKS5fX3YpLl9fZSxmPWwuX19QLGU9bC51LGwudT0hMSxmJiYodD1bXSxpPSQoZixyLHMoe30sciksbC5fX24sdm9pZCAwIT09Zi5vd25lclNWR0VsZW1lbnQsbnVsbCx0LGUsbnVsbD09bz93KHIpOm8pLGoodCxyKSxpIT1vJiZnKHIpKSk7IH19ZnVuY3Rpb24gYihuLGwsdSx0LGkscixvLGMscyl7dmFyIGgsdixwLGQseSxtLGcsaz11JiZ1Ll9fa3x8ZSxfPWsubGVuZ3RoO2lmKGM9PWYmJihjPW51bGwhPXI/clswXTpfP3codSwwKTpudWxsKSxoPTAsbC5fX2s9eChsLl9fayxmdW5jdGlvbih1KXtpZihudWxsIT11KXtpZih1Ll9fcD1sLHUuX19iPWwuX19iKzEsbnVsbD09PShwPWtbaF0pfHxwJiZ1LmtleT09cC5rZXkmJnUudHlwZT09PXAudHlwZSl7IGtbaF09dm9pZCAwOyB9ZWxzZSB7IGZvcih2PTA7djxfO3YrKyl7aWYoKHA9a1t2XSkmJnUua2V5PT1wLmtleSYmdS50eXBlPT09cC50eXBlKXtrW3ZdPXZvaWQgMDticmVha31wPW51bGw7fSB9aWYoZD0kKG4sdSxwPXB8fGYsdCxpLHIsbyxudWxsLGMscyksKHY9dS5yZWYpJiZwLnJlZiE9diYmKGd8fChnPVtdKSkucHVzaCh2LHUuX19jfHxkLHUpLG51bGwhPWQpe2lmKG51bGw9PW0mJihtPWQpLG51bGwhPXUubCl7IGQ9dS5sLHUubD1udWxsOyB9ZWxzZSBpZihyPT1wfHxkIT1jfHxudWxsPT1kLnBhcmVudE5vZGUpe246aWYobnVsbD09Y3x8Yy5wYXJlbnROb2RlIT09bil7IG4uYXBwZW5kQ2hpbGQoZCk7IH1lbHNle2Zvcih5PWMsdj0wOyh5PXkubmV4dFNpYmxpbmcpJiZ2PF87dis9Mil7IGlmKHk9PWQpeyBicmVhayBuOyB9IH1uLmluc2VydEJlZm9yZShkLGMpO31cIm9wdGlvblwiPT1sLnR5cGUmJihuLnZhbHVlPVwiXCIpO31jPWQubmV4dFNpYmxpbmcsXCJmdW5jdGlvblwiPT10eXBlb2YgbC50eXBlJiYobC5sPWQpO319cmV0dXJuIGgrKyx1fSksbC5fX2U9bSxudWxsIT1yJiZcImZ1bmN0aW9uXCIhPXR5cGVvZiBsLnR5cGUpeyBmb3IoaD1yLmxlbmd0aDtoLS07KXsgbnVsbCE9cltoXSYmYShyW2hdKTsgfSB9Zm9yKGg9XztoLS07KXsgbnVsbCE9a1toXSYmRChrW2hdLGtbaF0pOyB9aWYoZyl7IGZvcihoPTA7aDxnLmxlbmd0aDtoKyspeyBBKGdbaF0sZ1srK2hdLGdbKytoXSk7IH0gfX1mdW5jdGlvbiB4KG4sbCx1KXtpZihudWxsPT11JiYodT1bXSksbnVsbD09bnx8XCJib29sZWFuXCI9PXR5cGVvZiBuKXsgbCYmdS5wdXNoKGwobnVsbCkpOyB9ZWxzZSBpZihBcnJheS5pc0FycmF5KG4pKXsgZm9yKHZhciB0PTA7dDxuLmxlbmd0aDt0KyspeyB4KG5bdF0sbCx1KTsgfSB9ZWxzZSB7IHUucHVzaChsP2woeShuKSk6bik7IH1yZXR1cm4gdX1mdW5jdGlvbiBDKG4sbCx1LHQsaSl7dmFyIHI7Zm9yKHIgaW4gdSl7IHIgaW4gbHx8TihuLHIsbnVsbCx1W3JdLHQpOyB9Zm9yKHIgaW4gbCl7IGkmJlwiZnVuY3Rpb25cIiE9dHlwZW9mIGxbcl18fFwidmFsdWVcIj09PXJ8fFwiY2hlY2tlZFwiPT09cnx8dVtyXT09PWxbcl18fE4obixyLGxbcl0sdVtyXSx0KTsgfX1mdW5jdGlvbiBQKG4sbCx1KXtcIi1cIj09PWxbMF0/bi5zZXRQcm9wZXJ0eShsLHUpOm5bbF09XCJudW1iZXJcIj09dHlwZW9mIHUmJiExPT09Yy50ZXN0KGwpP3UrXCJweFwiOm51bGw9PXU/XCJcIjp1O31mdW5jdGlvbiBOKG4sbCx1LHQsaSl7dmFyIHIsbyxmLGUsYztpZihcImtleVwiPT09KGw9aT9cImNsYXNzTmFtZVwiPT09bD9cImNsYXNzXCI6bDpcImNsYXNzXCI9PT1sP1wiY2xhc3NOYW1lXCI6bCl8fFwiY2hpbGRyZW5cIj09PWwpO2Vsc2UgaWYoXCJzdHlsZVwiPT09bCl7IGlmKHI9bi5zdHlsZSxcInN0cmluZ1wiPT10eXBlb2YgdSl7IHIuY3NzVGV4dD11OyB9ZWxzZXtpZihcInN0cmluZ1wiPT10eXBlb2YgdCYmKHIuY3NzVGV4dD1cIlwiLHQ9bnVsbCksdCl7IGZvcihvIGluIHQpeyB1JiZvIGluIHV8fFAocixvLFwiXCIpOyB9IH1pZih1KXsgZm9yKGYgaW4gdSl7IHQmJnVbZl09PT10W2ZdfHxQKHIsZix1W2ZdKTsgfSB9fSB9ZWxzZXsgXCJvXCI9PT1sWzBdJiZcIm5cIj09PWxbMV0/KGU9bCE9PShsPWwucmVwbGFjZSgvQ2FwdHVyZSQvLFwiXCIpKSxjPWwudG9Mb3dlckNhc2UoKSxsPShjIGluIG4/YzpsKS5zbGljZSgyKSx1Pyh0fHxuLmFkZEV2ZW50TGlzdGVuZXIobCxULGUpLChuLnR8fChuLnQ9e30pKVtsXT11KTpuLnJlbW92ZUV2ZW50TGlzdGVuZXIobCxULGUpKTpcImxpc3RcIiE9PWwmJlwidGFnTmFtZVwiIT09bCYmXCJmb3JtXCIhPT1sJiYhaSYmbCBpbiBuP25bbF09bnVsbD09dT9cIlwiOnU6XCJmdW5jdGlvblwiIT10eXBlb2YgdSYmXCJkYW5nZXJvdXNseVNldElubmVySFRNTFwiIT09bCYmKGwhPT0obD1sLnJlcGxhY2UoL154bGluazo/LyxcIlwiKSk/bnVsbD09dXx8ITE9PT11P24ucmVtb3ZlQXR0cmlidXRlTlMoXCJodHRwOi8vd3d3LnczLm9yZy8xOTk5L3hsaW5rXCIsbC50b0xvd2VyQ2FzZSgpKTpuLnNldEF0dHJpYnV0ZU5TKFwiaHR0cDovL3d3dy53My5vcmcvMTk5OS94bGlua1wiLGwudG9Mb3dlckNhc2UoKSx1KTpudWxsPT11fHwhMT09PXU/bi5yZW1vdmVBdHRyaWJ1dGUobCk6bi5zZXRBdHRyaWJ1dGUobCx1KSk7IH19ZnVuY3Rpb24gVChsKXtyZXR1cm4gdGhpcy50W2wudHlwZV0obi5ldmVudD9uLmV2ZW50KGwpOmwpfWZ1bmN0aW9uICQobCx1LHQsaSxyLG8sZixlLGMsYSl7dmFyIGgsdixwLHksdyxnLGssXyxDLFAsTj11LnR5cGU7aWYodm9pZCAwIT09dS5jb25zdHJ1Y3Rvcil7IHJldHVybiBudWxsOyB9KGg9bi5fX2IpJiZoKHUpO3RyeXtuOmlmKFwiZnVuY3Rpb25cIj09dHlwZW9mIE4pe2lmKF89dS5wcm9wcyxDPShoPU4uY29udGV4dFR5cGUpJiZpW2guX19jXSxQPWg/Qz9DLnByb3BzLnZhbHVlOmguX19wOmksdC5fX2M/az0odj11Ll9fYz10Ll9fYykuX19wPXYuX19FOihcInByb3RvdHlwZVwiaW4gTiYmTi5wcm90b3R5cGUucmVuZGVyP3UuX19jPXY9bmV3IE4oXyxQKToodS5fX2M9dj1uZXcgbShfLFApLHYuY29uc3RydWN0b3I9Tix2LnJlbmRlcj1IKSxDJiZDLnN1Yih2KSx2LnByb3BzPV8sdi5zdGF0ZXx8KHYuc3RhdGU9e30pLHYuY29udGV4dD1QLHYuX19uPWkscD12Ll9fZD0hMCx2Ll9faD1bXSksbnVsbD09di5fX3MmJih2Ll9fcz12LnN0YXRlKSxudWxsIT1OLmdldERlcml2ZWRTdGF0ZUZyb21Qcm9wcyYmcyh2Ll9fcz09di5zdGF0ZT92Ll9fcz1zKHt9LHYuX19zKTp2Ll9fcyxOLmdldERlcml2ZWRTdGF0ZUZyb21Qcm9wcyhfLHYuX19zKSkscCl7IG51bGw9PU4uZ2V0RGVyaXZlZFN0YXRlRnJvbVByb3BzJiZudWxsIT12LmNvbXBvbmVudFdpbGxNb3VudCYmdi5jb21wb25lbnRXaWxsTW91bnQoKSxudWxsIT12LmNvbXBvbmVudERpZE1vdW50JiZmLnB1c2godik7IH1lbHNle2lmKG51bGw9PU4uZ2V0RGVyaXZlZFN0YXRlRnJvbVByb3BzJiZudWxsPT1lJiZudWxsIT12LmNvbXBvbmVudFdpbGxSZWNlaXZlUHJvcHMmJnYuY29tcG9uZW50V2lsbFJlY2VpdmVQcm9wcyhfLFApLCFlJiZudWxsIT12LnNob3VsZENvbXBvbmVudFVwZGF0ZSYmITE9PT12LnNob3VsZENvbXBvbmVudFVwZGF0ZShfLHYuX19zLFApKXtmb3Iodi5wcm9wcz1fLHYuc3RhdGU9di5fX3Msdi5fX2Q9ITEsdi5fX3Y9dSx1Ll9fZT1udWxsIT1jP2MhPT10Ll9fZT9jOnQuX19lOm51bGwsdS5fX2s9dC5fX2ssaD0wO2g8dS5fX2subGVuZ3RoO2grKyl7IHUuX19rW2hdJiYodS5fX2tbaF0uX19wPXUpOyB9YnJlYWsgbn1udWxsIT12LmNvbXBvbmVudFdpbGxVcGRhdGUmJnYuY29tcG9uZW50V2lsbFVwZGF0ZShfLHYuX19zLFApO31mb3IoeT12LnByb3BzLHc9di5zdGF0ZSx2LmNvbnRleHQ9UCx2LnByb3BzPV8sdi5zdGF0ZT12Ll9fcywoaD1uLl9fcikmJmgodSksdi5fX2Q9ITEsdi5fX3Y9dSx2Ll9fUD1sLGg9di5yZW5kZXIodi5wcm9wcyx2LnN0YXRlLHYuY29udGV4dCksdS5fX2s9eChudWxsIT1oJiZoLnR5cGU9PWQmJm51bGw9PWgua2V5P2gucHJvcHMuY2hpbGRyZW46aCksbnVsbCE9di5nZXRDaGlsZENvbnRleHQmJihpPXMocyh7fSxpKSx2LmdldENoaWxkQ29udGV4dCgpKSkscHx8bnVsbD09di5nZXRTbmFwc2hvdEJlZm9yZVVwZGF0ZXx8KGc9di5nZXRTbmFwc2hvdEJlZm9yZVVwZGF0ZSh5LHcpKSxiKGwsdSx0LGkscixvLGYsYyxhKSx2LmJhc2U9dS5fX2U7aD12Ll9faC5wb3AoKTspeyB2Ll9fcyYmKHYuc3RhdGU9di5fX3MpLGguY2FsbCh2KTsgfXB8fG51bGw9PXl8fG51bGw9PXYuY29tcG9uZW50RGlkVXBkYXRlfHx2LmNvbXBvbmVudERpZFVwZGF0ZSh5LHcsZyksayYmKHYuX19FPXYuX19wPW51bGwpO31lbHNlIHsgdS5fX2U9eih0Ll9fZSx1LHQsaSxyLG8sZixhKTsgfShoPW4uZGlmZmVkKSYmaCh1KTt9Y2F0Y2gobCl7bi5fX2UobCx1LHQpO31yZXR1cm4gdS5fX2V9ZnVuY3Rpb24gaihsLHUpe2Zvcih2YXIgdDt0PWwucG9wKCk7KXsgdHJ5e3QuY29tcG9uZW50RGlkTW91bnQoKTt9Y2F0Y2gobCl7bi5fX2UobCx0Ll9fdik7fSB9bi5fX2MmJm4uX19jKHUpO31mdW5jdGlvbiB6KG4sbCx1LHQsaSxyLG8sYyl7dmFyIHMsYSxoLHYscD11LnByb3BzLGQ9bC5wcm9wcztpZihpPVwic3ZnXCI9PT1sLnR5cGV8fGksbnVsbD09biYmbnVsbCE9cil7IGZvcihzPTA7czxyLmxlbmd0aDtzKyspeyBpZihudWxsIT0oYT1yW3NdKSYmKG51bGw9PT1sLnR5cGU/Mz09PWEubm9kZVR5cGU6YS5sb2NhbE5hbWU9PT1sLnR5cGUpKXtuPWEscltzXT1udWxsO2JyZWFrfSB9IH1pZihudWxsPT1uKXtpZihudWxsPT09bC50eXBlKXsgcmV0dXJuIGRvY3VtZW50LmNyZWF0ZVRleHROb2RlKGQpOyB9bj1pP2RvY3VtZW50LmNyZWF0ZUVsZW1lbnROUyhcImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCIsbC50eXBlKTpkb2N1bWVudC5jcmVhdGVFbGVtZW50KGwudHlwZSkscj1udWxsO31yZXR1cm4gbnVsbD09PWwudHlwZT9wIT09ZCYmKG51bGwhPXImJihyW3IuaW5kZXhPZihuKV09bnVsbCksbi5kYXRhPWQpOmwhPT11JiYobnVsbCE9ciYmKHI9ZS5zbGljZS5jYWxsKG4uY2hpbGROb2RlcykpLGg9KHA9dS5wcm9wc3x8ZikuZGFuZ2Vyb3VzbHlTZXRJbm5lckhUTUwsdj1kLmRhbmdlcm91c2x5U2V0SW5uZXJIVE1MLGN8fCh2fHxoKSYmKHYmJmgmJnYuX19odG1sPT1oLl9faHRtbHx8KG4uaW5uZXJIVE1MPXYmJnYuX19odG1sfHxcIlwiKSksQyhuLGQscCxpLGMpLGwuX19rPWwucHJvcHMuY2hpbGRyZW4sdnx8YihuLGwsdSx0LFwiZm9yZWlnbk9iamVjdFwiIT09bC50eXBlJiZpLHIsbyxmLGMpLGN8fChcInZhbHVlXCJpbiBkJiZ2b2lkIDAhPT1kLnZhbHVlJiZkLnZhbHVlIT09bi52YWx1ZSYmKG4udmFsdWU9bnVsbD09ZC52YWx1ZT9cIlwiOmQudmFsdWUpLFwiY2hlY2tlZFwiaW4gZCYmdm9pZCAwIT09ZC5jaGVja2VkJiZkLmNoZWNrZWQhPT1uLmNoZWNrZWQmJihuLmNoZWNrZWQ9ZC5jaGVja2VkKSkpLG59ZnVuY3Rpb24gQShsLHUsdCl7dHJ5e1wiZnVuY3Rpb25cIj09dHlwZW9mIGw/bCh1KTpsLmN1cnJlbnQ9dTt9Y2F0Y2gobCl7bi5fX2UobCx0KTt9fWZ1bmN0aW9uIEQobCx1LHQpe3ZhciBpLHIsbztpZihuLnVubW91bnQmJm4udW5tb3VudChsKSwoaT1sLnJlZikmJkEoaSxudWxsLHUpLHR8fFwiZnVuY3Rpb25cIj09dHlwZW9mIGwudHlwZXx8KHQ9bnVsbCE9KHI9bC5fX2UpKSxsLl9fZT1sLmw9bnVsbCxudWxsIT0oaT1sLl9fYykpe2lmKGkuY29tcG9uZW50V2lsbFVubW91bnQpeyB0cnl7aS5jb21wb25lbnRXaWxsVW5tb3VudCgpO31jYXRjaChsKXtuLl9fZShsLHUpO30gfWkuYmFzZT1pLl9fUD1udWxsO31pZihpPWwuX19rKXsgZm9yKG89MDtvPGkubGVuZ3RoO28rKyl7IGlbb10mJkQoaVtvXSx1LHQpOyB9IH1udWxsIT1yJiZhKHIpO31mdW5jdGlvbiBIKG4sbCx1KXtyZXR1cm4gdGhpcy5jb25zdHJ1Y3RvcihuLHUpfWZ1bmN0aW9uIEkobCx1LHQpe3ZhciBpLG8sYztuLl9fcCYmbi5fX3AobCx1KSxvPShpPXQ9PT1yKT9udWxsOnQmJnQuX19rfHx1Ll9fayxsPWgoZCxudWxsLFtsXSksYz1bXSwkKHUsaT91Ll9faz1sOih0fHx1KS5fX2s9bCxvfHxmLGYsdm9pZCAwIT09dS5vd25lclNWR0VsZW1lbnQsdCYmIWk/W3RdOm8/bnVsbDplLnNsaWNlLmNhbGwodS5jaGlsZE5vZGVzKSxjLCExLHR8fGYsaSksaihjLGwpO31uPXt9LG0ucHJvdG90eXBlLnNldFN0YXRlPWZ1bmN0aW9uKG4sbCl7dmFyIHU9dGhpcy5fX3MhPT10aGlzLnN0YXRlJiZ0aGlzLl9fc3x8KHRoaXMuX19zPXMoe30sdGhpcy5zdGF0ZSkpOyhcImZ1bmN0aW9uXCIhPXR5cGVvZiBufHwobj1uKHUsdGhpcy5wcm9wcykpKSYmcyh1LG4pLG51bGwhPW4mJnRoaXMuX192JiYodGhpcy51PSExLGwmJnRoaXMuX19oLnB1c2gobCksayh0aGlzKSk7fSxtLnByb3RvdHlwZS5mb3JjZVVwZGF0ZT1mdW5jdGlvbihuKXt0aGlzLl9fdiYmKG4mJnRoaXMuX19oLnB1c2gobiksdGhpcy51PSEwLGsodGhpcykpO30sbS5wcm90b3R5cGUucmVuZGVyPWQsdT1bXSx0PVwiZnVuY3Rpb25cIj09dHlwZW9mIFByb21pc2U/UHJvbWlzZS5wcm90b3R5cGUudGhlbi5iaW5kKFByb21pc2UucmVzb2x2ZSgpKTpzZXRUaW1lb3V0LGk9bi5kZWJvdW5jZVJlbmRlcmluZyxuLl9fZT1mdW5jdGlvbihuLGwsdSl7Zm9yKHZhciB0O2w9bC5fX3A7KXsgaWYoKHQ9bC5fX2MpJiYhdC5fX3ApeyB0cnl7aWYodC5jb25zdHJ1Y3RvciYmbnVsbCE9dC5jb25zdHJ1Y3Rvci5nZXREZXJpdmVkU3RhdGVGcm9tRXJyb3IpeyB0LnNldFN0YXRlKHQuY29uc3RydWN0b3IuZ2V0RGVyaXZlZFN0YXRlRnJvbUVycm9yKG4pKTsgfWVsc2V7aWYobnVsbD09dC5jb21wb25lbnREaWRDYXRjaCl7IGNvbnRpbnVlOyB9dC5jb21wb25lbnREaWRDYXRjaChuKTt9cmV0dXJuIGsodC5fX0U9dCl9Y2F0Y2gobCl7bj1sO30gfSB9dGhyb3cgbn0scj1mLG89MDtcblxuZnVuY3Rpb24gX2RlZmluZVByb3BlcnRpZXModGFyZ2V0LCBwcm9wcykge1xuICBmb3IgKHZhciBpID0gMDsgaSA8IHByb3BzLmxlbmd0aDsgaSsrKSB7XG4gICAgdmFyIGRlc2NyaXB0b3IgPSBwcm9wc1tpXTtcbiAgICBkZXNjcmlwdG9yLmVudW1lcmFibGUgPSBkZXNjcmlwdG9yLmVudW1lcmFibGUgfHwgZmFsc2U7XG4gICAgZGVzY3JpcHRvci5jb25maWd1cmFibGUgPSB0cnVlO1xuICAgIGlmIChcInZhbHVlXCIgaW4gZGVzY3JpcHRvcikgeyBkZXNjcmlwdG9yLndyaXRhYmxlID0gdHJ1ZTsgfVxuICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eSh0YXJnZXQsIGRlc2NyaXB0b3Iua2V5LCBkZXNjcmlwdG9yKTtcbiAgfVxufVxuXG5mdW5jdGlvbiBfY3JlYXRlQ2xhc3MoQ29uc3RydWN0b3IsIHByb3RvUHJvcHMsIHN0YXRpY1Byb3BzKSB7XG4gIGlmIChwcm90b1Byb3BzKSB7IF9kZWZpbmVQcm9wZXJ0aWVzKENvbnN0cnVjdG9yLnByb3RvdHlwZSwgcHJvdG9Qcm9wcyk7IH1cbiAgaWYgKHN0YXRpY1Byb3BzKSB7IF9kZWZpbmVQcm9wZXJ0aWVzKENvbnN0cnVjdG9yLCBzdGF0aWNQcm9wcyk7IH1cbiAgcmV0dXJuIENvbnN0cnVjdG9yO1xufVxuXG5mdW5jdGlvbiBfZXh0ZW5kcygpIHtcbiAgX2V4dGVuZHMgPSBPYmplY3QuYXNzaWduIHx8IGZ1bmN0aW9uICh0YXJnZXQpIHtcbiAgICB2YXIgYXJndW1lbnRzJDEgPSBhcmd1bWVudHM7XG5cbiAgICBmb3IgKHZhciBpID0gMTsgaSA8IGFyZ3VtZW50cy5sZW5ndGg7IGkrKykge1xuICAgICAgdmFyIHNvdXJjZSA9IGFyZ3VtZW50cyQxW2ldO1xuXG4gICAgICBmb3IgKHZhciBrZXkgaW4gc291cmNlKSB7XG4gICAgICAgIGlmIChPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwoc291cmNlLCBrZXkpKSB7XG4gICAgICAgICAgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cblxuICAgIHJldHVybiB0YXJnZXQ7XG4gIH07XG5cbiAgcmV0dXJuIF9leHRlbmRzLmFwcGx5KHRoaXMsIGFyZ3VtZW50cyk7XG59XG5cbi8vIFNvbWUgcmVndWxhciBleHByZXNzaW9ucyBmb3IgcmdiKCkgYW5kIGhzbCgpIENvbG9ycyBhcmUgYm9ycm93ZWQgZnJvbSB0aW55Q29sb3Jcbi8vIGh0dHBzOi8vZ2l0aHViLmNvbS9iZ3JpbnMvVGlueUNvbG9yXG4vLyBLZWx2aW4gdGVtcGVyYXR1cmUgbWF0aCBib3Jyb3dlZCBmcm9tIE5laWwgQmFybGV0dCdzIGltcGxlbWVudGF0aW9uXG4vLyBmcm9tIGh0dHBzOi8vZ2l0aHViLmNvbS9uZWlsYmFydGxldHQvY29sb3ItdGVtcGVyYXR1cmVcbi8vIGh0dHBzOi8vd3d3LnczLm9yZy9UUi9jc3MzLXZhbHVlcy8jaW50ZWdlcnNcbnZhciBDU1NfSU5URUdFUiA9ICdbLVxcXFwrXT9cXFxcZCslPyc7IC8vIGh0dHA6Ly93d3cudzMub3JnL1RSL2NzczMtdmFsdWVzLyNudW1iZXItdmFsdWVcblxudmFyIENTU19OVU1CRVIgPSAnWy1cXFxcK10/XFxcXGQqXFxcXC5cXFxcZCslPyc7IC8vIEFsbG93IHBvc2l0aXZlL25lZ2F0aXZlIGludGVnZXIvbnVtYmVyLiBEb24ndCBjYXB0dXJlIHRoZSBlaXRoZXIvb3IsIGp1c3QgdGhlIGVudGlyZSBvdXRjb21lXG5cbnZhciBDU1NfVU5JVCA9ICcoPzonICsgQ1NTX05VTUJFUiArICcpfCg/OicgKyBDU1NfSU5URUdFUiArICcpJzsgLy8gUGFyc2UgZnVuY3Rpb24gcGFyYW1zXG4vLyBQYXJlbnMgYW5kIGNvbW1hcyBhcmUgb3B0aW9uYWwsIGFuZCB0aGlzIGFsc28gYWxsb3dzIGZvciB3aGl0ZXNwYWNlIGJldHdlZW4gbnVtYmVyc1xuXG52YXIgUEVSTUlTU0lWRV9NQVRDSF8zID0gJ1tcXFxcc3xcXFxcKF0rKCcgKyBDU1NfVU5JVCArICcpWyx8XFxcXHNdKygnICsgQ1NTX1VOSVQgKyAnKVssfFxcXFxzXSsoJyArIENTU19VTklUICsgJylcXFxccypcXFxcKT8nO1xudmFyIFBFUk1JU1NJVkVfTUFUQ0hfNCA9ICdbXFxcXHN8XFxcXChdKygnICsgQ1NTX1VOSVQgKyAnKVssfFxcXFxzXSsoJyArIENTU19VTklUICsgJylbLHxcXFxcc10rKCcgKyBDU1NfVU5JVCArICcpWyx8XFxcXHNdKygnICsgQ1NTX1VOSVQgKyAnKVxcXFxzKlxcXFwpPyc7IC8vIFJlZ2V4IHBhdHRlcm5zIGZvciBmdW5jdGlvbmFsIGNvbG9yIHN0cmluZ3NcblxudmFyIFJFR0VYX0ZVTkNUSU9OQUxfUkdCID0gbmV3IFJlZ0V4cCgncmdiJyArIFBFUk1JU1NJVkVfTUFUQ0hfMyk7XG52YXIgUkVHRVhfRlVOQ1RJT05BTF9SR0JBID0gbmV3IFJlZ0V4cCgncmdiYScgKyBQRVJNSVNTSVZFX01BVENIXzQpO1xudmFyIFJFR0VYX0ZVTkNUSU9OQUxfSFNMID0gbmV3IFJlZ0V4cCgnaHNsJyArIFBFUk1JU1NJVkVfTUFUQ0hfMyk7XG52YXIgUkVHRVhfRlVOQ1RJT05BTF9IU0xBID0gbmV3IFJlZ0V4cCgnaHNsYScgKyBQRVJNSVNTSVZFX01BVENIXzQpOyAvLyBDb2xvciBzdHJpbmcgcGFyc2luZyByZWdleFxuXG52YXIgSEVYX1NUQVJUID0gJ14oPzojP3wweD8pJztcbnZhciBIRVhfSU5UX1NJTkdMRSA9ICcoWzAtOWEtZkEtRl17MX0pJztcbnZhciBIRVhfSU5UX0RPVUJMRSA9ICcoWzAtOWEtZkEtRl17Mn0pJztcbnZhciBSRUdFWF9IRVhfMyA9IG5ldyBSZWdFeHAoSEVYX1NUQVJUICsgSEVYX0lOVF9TSU5HTEUgKyBIRVhfSU5UX1NJTkdMRSArIEhFWF9JTlRfU0lOR0xFICsgJyQnKTtcbnZhciBSRUdFWF9IRVhfNCA9IG5ldyBSZWdFeHAoSEVYX1NUQVJUICsgSEVYX0lOVF9TSU5HTEUgKyBIRVhfSU5UX1NJTkdMRSArIEhFWF9JTlRfU0lOR0xFICsgSEVYX0lOVF9TSU5HTEUgKyAnJCcpO1xudmFyIFJFR0VYX0hFWF82ID0gbmV3IFJlZ0V4cChIRVhfU1RBUlQgKyBIRVhfSU5UX0RPVUJMRSArIEhFWF9JTlRfRE9VQkxFICsgSEVYX0lOVF9ET1VCTEUgKyAnJCcpO1xudmFyIFJFR0VYX0hFWF84ID0gbmV3IFJlZ0V4cChIRVhfU1RBUlQgKyBIRVhfSU5UX0RPVUJMRSArIEhFWF9JTlRfRE9VQkxFICsgSEVYX0lOVF9ET1VCTEUgKyBIRVhfSU5UX0RPVUJMRSArICckJyk7IC8vIEtlbHZpbiB0ZW1wZXJhdHVyZSBib3VuZHNcblxudmFyIEtFTFZJTl9NSU4gPSAyMDAwO1xudmFyIEtFTFZJTl9NQVggPSA0MDAwMDsgLy8gTWF0aCBzaG9ydGhhbmRzXG5cbnZhciBsb2cgPSBNYXRoLmxvZyxcbiAgICByb3VuZCA9IE1hdGgucm91bmQsXG4gICAgZmxvb3IgPSBNYXRoLmZsb29yO1xuLyoqXHJcbiAqIEBkZXNjIENsYW1wIGEgbnVtYmVyIGJldHdlZW4gYSBtaW4gYW5kIG1heCB2YWx1ZVxyXG4gKiBAcGFyYW0gbnVtIC0gaW5wdXQgdmFsdWVcclxuICogQHBhcmFtIG1pbiAtIG1pbiBhbGxvd2VkIHZhbHVlXHJcbiAqIEBwYXJhbSBtYXggLSBtYXggYWxsb3dlZCB2YWx1ZVxyXG4gKi9cblxuZnVuY3Rpb24gY2xhbXAobnVtLCBtaW4sIG1heCkge1xuICByZXR1cm4gTWF0aC5taW4oTWF0aC5tYXgobnVtLCBtaW4pLCBtYXgpO1xufVxuLyoqXHJcbiAqIEBkZXNjIFBhcnNlIGEgY3NzIHVuaXQgc3RyaW5nIC0gZWl0aGVyIHJlZ3VsYXIgaW50IG9yIGEgcGVyY2VudGFnZSBudW1iZXJcclxuICogQHBhcmFtIHN0ciAtIGNzcyB1bml0IHN0cmluZ1xyXG4gKiBAcGFyYW0gbWF4IC0gbWF4IHVuaXQgdmFsdWUsIHVzZWQgZm9yIGNhbGN1bGF0aW5nIHBlcmNlbnRhZ2VzXHJcbiAqL1xuXG5cbmZ1bmN0aW9uIHBhcnNlVW5pdChzdHIsIG1heCkge1xuICB2YXIgaXNQZXJjZW50YWdlID0gc3RyLmluZGV4T2YoJyUnKSA+IC0xO1xuICB2YXIgbnVtID0gcGFyc2VGbG9hdChzdHIpO1xuICByZXR1cm4gaXNQZXJjZW50YWdlID8gbWF4IC8gMTAwICogbnVtIDogbnVtO1xufVxuLyoqXHJcbiAqIEBkZXNjIFBhcnNlIGhleCBzdHIgdG8gYW4gaW50XHJcbiAqIEBwYXJhbSBzdHIgLSBoZXggc3RyaW5nIHRvIHBhcnNlXHJcbiAqL1xuXG5cbmZ1bmN0aW9uIHBhcnNlSGV4SW50KHN0cikge1xuICByZXR1cm4gcGFyc2VJbnQoc3RyLCAxNik7XG59XG4vKipcclxuICogQGRlc2MgQ29udmVydCBudW5iZXIgaW50byB0byAyLWRpZ2l0IGhleFxyXG4gKiBAcGFyYW0gaW50IC0gbnVtYmVyIHRvIGNvbnZlcnRcclxuICovXG5cblxuZnVuY3Rpb24gaW50VG9IZXgoX2ludCkge1xuICByZXR1cm4gX2ludC50b1N0cmluZygxNikucGFkU3RhcnQoMiwgJzAnKTtcbn1cblxudmFyIElyb0NvbG9yID1cbi8qI19fUFVSRV9fKi9cbmZ1bmN0aW9uICgpIHtcbiAgLyoqXHJcbiAgICAqIEBjb25zdHJ1Y3RvciBDb2xvciBvYmplY3RcclxuICAgICogQHBhcmFtIHZhbHVlIC0gaW5pdGlhbCBjb2xvciB2YWx1ZVxyXG4gICovXG4gIGZ1bmN0aW9uIElyb0NvbG9yKHZhbHVlLCBvbkNoYW5nZSkge1xuICAgIC8vIFRoZSBkZWZhdWx0IENvbG9yIHZhbHVlXG4gICAgdGhpcy4kID0ge1xuICAgICAgaDogMCxcbiAgICAgIHM6IDAsXG4gICAgICB2OiAwLFxuICAgICAgYTogMVxuICAgIH07XG4gICAgaWYgKHZhbHVlKSB7IHRoaXMuc2V0KHZhbHVlKTsgfSAvLyBUaGUgd2F0Y2ggY2FsbGJhY2sgZnVuY3Rpb24gZm9yIHRoaXMgQ29sb3Igd2lsbCBiZSBzdG9yZWQgaGVyZVxuXG4gICAgdGhpcy5vbkNoYW5nZSA9IG9uQ2hhbmdlO1xuICAgIHRoaXMuaW5pdGlhbFZhbHVlID0gX2V4dGVuZHMoe30sIHRoaXMuJCk7IC8vIGNvcHkgaW5pdGlhbCB2YWx1ZVxuICB9XG4gIC8qKlxyXG4gICAgKiBAZGVzYyBTZXQgdGhlIENvbG9yIGZyb20gYW55IHZhbGlkIHZhbHVlXHJcbiAgICAqIEBwYXJhbSB2YWx1ZSAtIG5ldyBjb2xvciB2YWx1ZVxyXG4gICovXG5cblxuICB2YXIgX3Byb3RvID0gSXJvQ29sb3IucHJvdG90eXBlO1xuXG4gIF9wcm90by5zZXQgPSBmdW5jdGlvbiBzZXQodmFsdWUpIHtcbiAgICBpZiAodHlwZW9mIHZhbHVlID09PSAnc3RyaW5nJykge1xuICAgICAgaWYgKC9eKD86Iz98MHg/KVswLTlhLWZBLUZdezMsOH0kLy50ZXN0KHZhbHVlKSkge1xuICAgICAgICB0aGlzLmhleFN0cmluZyA9IHZhbHVlO1xuICAgICAgfSBlbHNlIGlmICgvXnJnYmE/Ly50ZXN0KHZhbHVlKSkge1xuICAgICAgICB0aGlzLnJnYlN0cmluZyA9IHZhbHVlO1xuICAgICAgfSBlbHNlIGlmICgvXmhzbGE/Ly50ZXN0KHZhbHVlKSkge1xuICAgICAgICB0aGlzLmhzbFN0cmluZyA9IHZhbHVlO1xuICAgICAgfVxuICAgIH0gZWxzZSBpZiAodHlwZW9mIHZhbHVlID09PSAnb2JqZWN0Jykge1xuICAgICAgaWYgKHZhbHVlIGluc3RhbmNlb2YgSXJvQ29sb3IpIHtcbiAgICAgICAgdGhpcy5oc3YgPSB2YWx1ZS5oc3Y7XG4gICAgICB9IGVsc2UgaWYgKCdyJyBpbiB2YWx1ZSAmJiAnZycgaW4gdmFsdWUgJiYgJ2InIGluIHZhbHVlKSB7XG4gICAgICAgIHRoaXMucmdiID0gdmFsdWU7XG4gICAgICB9IGVsc2UgaWYgKCdoJyBpbiB2YWx1ZSAmJiAncycgaW4gdmFsdWUgJiYgJ3YnIGluIHZhbHVlKSB7XG4gICAgICAgIHRoaXMuaHN2ID0gdmFsdWU7XG4gICAgICB9IGVsc2UgaWYgKCdoJyBpbiB2YWx1ZSAmJiAncycgaW4gdmFsdWUgJiYgJ2wnIGluIHZhbHVlKSB7XG4gICAgICAgIHRoaXMuaHNsID0gdmFsdWU7XG4gICAgICB9IGVsc2UgaWYgKCdrZWx2aW4nIGluIHZhbHVlKSB7XG4gICAgICAgIHRoaXMua2VsdmluID0gdmFsdWUua2VsdmluO1xuICAgICAgfVxuICAgIH0gZWxzZSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoJ0ludmFsaWQgY29sb3IgdmFsdWUnKTtcbiAgICB9XG4gIH1cbiAgLyoqXHJcbiAgICAqIEBkZXNjIFNob3J0Y3V0IHRvIHNldCBhIHNwZWNpZmljIGNoYW5uZWwgdmFsdWVcclxuICAgICogQHBhcmFtIGZvcm1hdCAtIGhzdiB8IGhzbCB8IHJnYlxyXG4gICAgKiBAcGFyYW0gY2hhbm5lbCAtIGluZGl2aWR1YWwgY2hhbm5lbCB0byBzZXQsIGZvciBleGFtcGxlIGlmIG1vZGVsID0gaHNsLCBjaGFuZWwgPSBoIHwgcyB8IGxcclxuICAgICogQHBhcmFtIHZhbHVlIC0gbmV3IHZhbHVlIGZvciB0aGUgY2hhbm5lbFxyXG4gICovXG4gIDtcblxuICBfcHJvdG8uc2V0Q2hhbm5lbCA9IGZ1bmN0aW9uIHNldENoYW5uZWwoZm9ybWF0LCBjaGFubmVsLCB2YWx1ZSkge1xuICAgIHZhciBfZXh0ZW5kczI7XG5cbiAgICB0aGlzW2Zvcm1hdF0gPSBfZXh0ZW5kcyh7fSwgdGhpc1tmb3JtYXRdLCAoX2V4dGVuZHMyID0ge30sIF9leHRlbmRzMltjaGFubmVsXSA9IHZhbHVlLCBfZXh0ZW5kczIpKTtcbiAgfVxuICAvKipcclxuICAgKiBAZGVzYyBSZXNldCBjb2xvciBiYWNrIHRvIGl0cyBpbml0aWFsIHZhbHVlXHJcbiAgICovXG4gIDtcblxuICBfcHJvdG8ucmVzZXQgPSBmdW5jdGlvbiByZXNldCgpIHtcbiAgICB0aGlzLmhzdmEgPSB0aGlzLmluaXRpYWxWYWx1ZTtcbiAgfVxuICAvKipcclxuICAgICogQGRlc2MgbWFrZSBuZXcgQ29sb3IgaW5zdGFuY2Ugd2l0aCB0aGUgc2FtZSB2YWx1ZSBhcyB0aGlzIG9uZVxyXG4gICovXG4gIDtcblxuICBfcHJvdG8uY2xvbmUgPSBmdW5jdGlvbiBjbG9uZSgpIHtcbiAgICByZXR1cm4gbmV3IElyb0NvbG9yKHRoaXMpO1xuICB9XG4gIC8qKlxyXG4gICAqIEBkZXNjIHJlbW92ZSBjb2xvciBvbkNoYW5nZVxyXG4gICAqL1xuICA7XG5cbiAgX3Byb3RvLnVuYmluZCA9IGZ1bmN0aW9uIHVuYmluZCgpIHtcbiAgICB0aGlzLm9uQ2hhbmdlID0gdW5kZWZpbmVkO1xuICB9XG4gIC8qKlxyXG4gICAgKiBAZGVzYyBDb252ZXJ0IGhzdiBvYmplY3QgdG8gcmdiXHJcbiAgICAqIEBwYXJhbSBoc3YgLSBoc3YgY29sb3Igb2JqZWN0XHJcbiAgKi9cbiAgO1xuXG4gIElyb0NvbG9yLmhzdlRvUmdiID0gZnVuY3Rpb24gaHN2VG9SZ2IoaHN2KSB7XG4gICAgdmFyIGggPSBoc3YuaCAvIDYwO1xuICAgIHZhciBzID0gaHN2LnMgLyAxMDA7XG4gICAgdmFyIHYgPSBoc3YudiAvIDEwMDtcbiAgICB2YXIgaSA9IGZsb29yKGgpO1xuICAgIHZhciBmID0gaCAtIGk7XG4gICAgdmFyIHAgPSB2ICogKDEgLSBzKTtcbiAgICB2YXIgcSA9IHYgKiAoMSAtIGYgKiBzKTtcbiAgICB2YXIgdCA9IHYgKiAoMSAtICgxIC0gZikgKiBzKTtcbiAgICB2YXIgbW9kID0gaSAlIDY7XG4gICAgdmFyIHIgPSBbdiwgcSwgcCwgcCwgdCwgdl1bbW9kXTtcbiAgICB2YXIgZyA9IFt0LCB2LCB2LCBxLCBwLCBwXVttb2RdO1xuICAgIHZhciBiID0gW3AsIHAsIHQsIHYsIHYsIHFdW21vZF07XG4gICAgcmV0dXJuIHtcbiAgICAgIHI6IGNsYW1wKHIgKiAyNTUsIDAsIDI1NSksXG4gICAgICBnOiBjbGFtcChnICogMjU1LCAwLCAyNTUpLFxuICAgICAgYjogY2xhbXAoYiAqIDI1NSwgMCwgMjU1KVxuICAgIH07XG4gIH1cbiAgLyoqXHJcbiAgICAqIEBkZXNjIENvbnZlcnQgcmdiIG9iamVjdCB0byBoc3ZcclxuICAgICogQHBhcmFtIHJnYiAtIHJnYiBvYmplY3RcclxuICAqL1xuICA7XG5cbiAgSXJvQ29sb3IucmdiVG9Ic3YgPSBmdW5jdGlvbiByZ2JUb0hzdihyZ2IpIHtcbiAgICB2YXIgciA9IHJnYi5yIC8gMjU1O1xuICAgIHZhciBnID0gcmdiLmcgLyAyNTU7XG4gICAgdmFyIGIgPSByZ2IuYiAvIDI1NTtcbiAgICB2YXIgbWF4ID0gTWF0aC5tYXgociwgZywgYik7XG4gICAgdmFyIG1pbiA9IE1hdGgubWluKHIsIGcsIGIpO1xuICAgIHZhciBkZWx0YSA9IG1heCAtIG1pbjtcbiAgICB2YXIgaHVlID0gMDtcbiAgICB2YXIgdmFsdWUgPSBtYXg7XG4gICAgdmFyIHNhdHVyYXRpb24gPSBtYXggPT09IDAgPyAwIDogZGVsdGEgLyBtYXg7XG5cbiAgICBzd2l0Y2ggKG1heCkge1xuICAgICAgY2FzZSBtaW46XG4gICAgICAgIGh1ZSA9IDA7IC8vIGFjaHJvbWF0aWNcblxuICAgICAgICBicmVhaztcblxuICAgICAgY2FzZSByOlxuICAgICAgICBodWUgPSAoZyAtIGIpIC8gZGVsdGEgKyAoZyA8IGIgPyA2IDogMCk7XG4gICAgICAgIGJyZWFrO1xuXG4gICAgICBjYXNlIGc6XG4gICAgICAgIGh1ZSA9IChiIC0gcikgLyBkZWx0YSArIDI7XG4gICAgICAgIGJyZWFrO1xuXG4gICAgICBjYXNlIGI6XG4gICAgICAgIGh1ZSA9IChyIC0gZykgLyBkZWx0YSArIDQ7XG4gICAgICAgIGJyZWFrO1xuICAgIH1cblxuICAgIHJldHVybiB7XG4gICAgICBoOiBodWUgKiA2MCAlIDM2MCxcbiAgICAgIHM6IGNsYW1wKHNhdHVyYXRpb24gKiAxMDAsIDAsIDEwMCksXG4gICAgICB2OiBjbGFtcCh2YWx1ZSAqIDEwMCwgMCwgMTAwKVxuICAgIH07XG4gIH1cbiAgLyoqXHJcbiAgICAqIEBkZXNjIENvbnZlcnQgaHN2IG9iamVjdCB0byBoc2xcclxuICAgICogQHBhcmFtIGhzdiAtIGhzdiBvYmplY3RcclxuICAqL1xuICA7XG5cbiAgSXJvQ29sb3IuaHN2VG9Ic2wgPSBmdW5jdGlvbiBoc3ZUb0hzbChoc3YpIHtcbiAgICB2YXIgcyA9IGhzdi5zIC8gMTAwO1xuICAgIHZhciB2ID0gaHN2LnYgLyAxMDA7XG4gICAgdmFyIGwgPSAoMiAtIHMpICogdjtcbiAgICB2YXIgZGl2aXNvciA9IGwgPD0gMSA/IGwgOiAyIC0gbDsgLy8gQXZvaWQgZGl2aXNpb24gYnkgemVybyB3aGVuIGxpZ2h0bmVzcyBpcyBjbG9zZSB0byB6ZXJvXG5cbiAgICB2YXIgc2F0dXJhdGlvbiA9IGRpdmlzb3IgPCAxZS05ID8gMCA6IHMgKiB2IC8gZGl2aXNvcjtcbiAgICByZXR1cm4ge1xuICAgICAgaDogaHN2LmgsXG4gICAgICBzOiBjbGFtcChzYXR1cmF0aW9uICogMTAwLCAwLCAxMDApLFxuICAgICAgbDogY2xhbXAobCAqIDUwLCAwLCAxMDApXG4gICAgfTtcbiAgfVxuICAvKipcclxuICAgICogQGRlc2MgQ29udmVydCBoc2wgb2JqZWN0IHRvIGhzdlxyXG4gICAgKiBAcGFyYW0gaHNsIC0gaHNsIG9iamVjdFxyXG4gICovXG4gIDtcblxuICBJcm9Db2xvci5oc2xUb0hzdiA9IGZ1bmN0aW9uIGhzbFRvSHN2KGhzbCkge1xuICAgIHZhciBsID0gaHNsLmwgKiAyO1xuICAgIHZhciBzID0gaHNsLnMgKiAobCA8PSAxMDAgPyBsIDogMjAwIC0gbCkgLyAxMDA7IC8vIEF2b2lkIGRpdmlzaW9uIGJ5IHplcm8gd2hlbiBsICsgcyBpcyBuZWFyIDBcblxuICAgIHZhciBzYXR1cmF0aW9uID0gbCArIHMgPCAxZS05ID8gMCA6IDIgKiBzIC8gKGwgKyBzKTtcbiAgICByZXR1cm4ge1xuICAgICAgaDogaHNsLmgsXG4gICAgICBzOiBjbGFtcChzYXR1cmF0aW9uICogMTAwLCAwLCAxMDApLFxuICAgICAgdjogY2xhbXAoKGwgKyBzKSAvIDIsIDAsIDEwMClcbiAgICB9O1xuICB9XG4gIC8qKlxyXG4gICAgKiBAZGVzYyBDb252ZXJ0IGEga2VsdmluIHRlbXBlcmF0dXJlIHRvIGFuIGFwcHJveCwgUkdCIHZhbHVlXHJcbiAgICAqIEBwYXJhbSBrZWx2aW4gLSBrZWx2aW4gdGVtcGVyYXR1cmVcclxuICAqL1xuICA7XG5cbiAgSXJvQ29sb3Iua2VsdmluVG9SZ2IgPSBmdW5jdGlvbiBrZWx2aW5Ub1JnYihrZWx2aW4pIHtcbiAgICB2YXIgdGVtcCA9IGtlbHZpbiAvIDEwMDtcbiAgICB2YXIgciwgZywgYjtcblxuICAgIGlmICh0ZW1wIDwgNjYpIHtcbiAgICAgIHIgPSAyNTU7XG4gICAgICBnID0gLTE1NS4yNTQ4NTU2MjcwOTE3OSAtIDAuNDQ1OTY5NTA0Njk1NzkxMzMgKiAoZyA9IHRlbXAgLSAyKSArIDEwNC40OTIxNjE5OTM5Mzg4OCAqIGxvZyhnKTtcbiAgICAgIGIgPSB0ZW1wIDwgMjAgPyAwIDogLTI1NC43NjkzNTE4NDEyMDkwMiArIDAuODI3NDA5NjA2NDAwNzM5NSAqIChiID0gdGVtcCAtIDEwKSArIDExNS42Nzk5NDQwMTA2NjE0NyAqIGxvZyhiKTtcbiAgICB9IGVsc2Uge1xuICAgICAgciA9IDM1MS45NzY5MDU2NjgwNTY5MyArIDAuMTE0MjA2NDUzNzg0MTY1ICogKHIgPSB0ZW1wIC0gNTUpIC0gNDAuMjUzNjYzMDkzMzIxMjcgKiBsb2cocik7XG4gICAgICBnID0gMzI1LjQ0OTQxMjU3MTE5NzQgKyAwLjA3OTQzNDU2NTM2NjYyMzQyICogKGcgPSB0ZW1wIC0gNTApIC0gMjguMDg1Mjk2MzUwNzk1NyAqIGxvZyhnKTtcbiAgICAgIGIgPSAyNTU7XG4gICAgfVxuXG4gICAgcmV0dXJuIHtcbiAgICAgIHI6IGNsYW1wKGZsb29yKHIpLCAwLCAyNTUpLFxuICAgICAgZzogY2xhbXAoZmxvb3IoZyksIDAsIDI1NSksXG4gICAgICBiOiBjbGFtcChmbG9vcihiKSwgMCwgMjU1KVxuICAgIH07XG4gIH1cbiAgLyoqXHJcbiAgICogQGRlc2MgQ29udmVydCBhbiBSR0IgY29sb3IgdG8gYW4gYXBwcm94aW1hdGUga2VsdmluIHRlbXBlcmF0dXJlXHJcbiAgICogQHBhcmFtIGtlbHZpbiAtIGtlbHZpbiB0ZW1wZXJhdHVyZVxyXG4gICovXG4gIDtcblxuICBJcm9Db2xvci5yZ2JUb0tlbHZpbiA9IGZ1bmN0aW9uIHJnYlRvS2VsdmluKHJnYikge1xuICAgIHZhciByID0gcmdiLnIsXG4gICAgICAgIGIgPSByZ2IuYjtcbiAgICB2YXIgZXBzID0gMC40O1xuICAgIHZhciBtaW5UZW1wID0gS0VMVklOX01JTjtcbiAgICB2YXIgbWF4VGVtcCA9IEtFTFZJTl9NQVg7XG4gICAgdmFyIHRlbXA7XG5cbiAgICB3aGlsZSAobWF4VGVtcCAtIG1pblRlbXAgPiBlcHMpIHtcbiAgICAgIHRlbXAgPSAobWF4VGVtcCArIG1pblRlbXApICogMC41O1xuXG4gICAgICB2YXIgX3JnYiA9IElyb0NvbG9yLmtlbHZpblRvUmdiKHRlbXApO1xuXG4gICAgICBpZiAoX3JnYi5iIC8gX3JnYi5yID49IGIgLyByKSB7XG4gICAgICAgIG1heFRlbXAgPSB0ZW1wO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgbWluVGVtcCA9IHRlbXA7XG4gICAgICB9XG4gICAgfVxuXG4gICAgcmV0dXJuIHRlbXA7XG4gIH07XG5cbiAgX2NyZWF0ZUNsYXNzKElyb0NvbG9yLCBbe1xuICAgIGtleTogXCJoc3ZcIixcbiAgICBnZXQ6IGZ1bmN0aW9uIGdldCgpIHtcbiAgICAgIC8vIHZhbHVlIGlzIGNsb25lZCB0byBhbGxvdyBjaGFuZ2VzIHRvIGJlIG1hZGUgdG8gdGhlIHZhbHVlcyBiZWZvcmUgcGFzc2luZyB0aGVtIGJhY2tcbiAgICAgIHZhciB2YWx1ZSA9IHRoaXMuJDtcbiAgICAgIHJldHVybiB7XG4gICAgICAgIGg6IHZhbHVlLmgsXG4gICAgICAgIHM6IHZhbHVlLnMsXG4gICAgICAgIHY6IHZhbHVlLnZcbiAgICAgIH07XG4gICAgfSxcbiAgICBzZXQ6IGZ1bmN0aW9uIHNldChuZXdWYWx1ZSkge1xuICAgICAgdmFyIG9sZFZhbHVlID0gdGhpcy4kO1xuICAgICAgbmV3VmFsdWUgPSBfZXh0ZW5kcyh7fSwgb2xkVmFsdWUsIG5ld1ZhbHVlKTsgLy8gSWYgdGhpcyBDb2xvciBpcyBiZWluZyB3YXRjaGVkIGZvciBjaGFuZ2VzIHdlIG5lZWQgdG8gY29tcGFyZSB0aGUgbmV3IGFuZCBvbGQgdmFsdWVzIHRvIGNoZWNrIHRoZSBkaWZmZXJlbmNlXG4gICAgICAvLyBPdGhlcndpc2Ugd2UgY2FuIGp1c3QgYmUgbGF6eVxuXG4gICAgICBpZiAodGhpcy5vbkNoYW5nZSkge1xuICAgICAgICAvLyBDb21wdXRlIGNoYW5nZWQgdmFsdWVzXG4gICAgICAgIHZhciBjaGFuZ2VzID0ge1xuICAgICAgICAgIGg6IGZhbHNlLFxuICAgICAgICAgIHY6IGZhbHNlLFxuICAgICAgICAgIHM6IGZhbHNlLFxuICAgICAgICAgIGE6IGZhbHNlXG4gICAgICAgIH07XG5cbiAgICAgICAgZm9yICh2YXIga2V5IGluIG9sZFZhbHVlKSB7XG4gICAgICAgICAgY2hhbmdlc1trZXldID0gbmV3VmFsdWVba2V5XSAhPSBvbGRWYWx1ZVtrZXldO1xuICAgICAgICB9XG5cbiAgICAgICAgdGhpcy4kID0gbmV3VmFsdWU7IC8vIElmIHRoZSB2YWx1ZSBoYXMgY2hhbmdlZCwgY2FsbCBob29rIGNhbGxiYWNrXG5cbiAgICAgICAgaWYgKGNoYW5nZXMuaCB8fCBjaGFuZ2VzLnMgfHwgY2hhbmdlcy52IHx8IGNoYW5nZXMuYSkgeyB0aGlzLm9uQ2hhbmdlKHRoaXMsIGNoYW5nZXMpOyB9XG4gICAgICB9IGVsc2Uge1xuICAgICAgICB0aGlzLiQgPSBuZXdWYWx1ZTtcbiAgICAgIH1cbiAgICB9XG4gIH0sIHtcbiAgICBrZXk6IFwiaHN2YVwiLFxuICAgIGdldDogZnVuY3Rpb24gZ2V0KCkge1xuICAgICAgcmV0dXJuIF9leHRlbmRzKHt9LCB0aGlzLiQpO1xuICAgIH0sXG4gICAgc2V0OiBmdW5jdGlvbiBzZXQodmFsdWUpIHtcbiAgICAgIHRoaXMuaHN2ID0gdmFsdWU7XG4gICAgfVxuICB9LCB7XG4gICAga2V5OiBcImh1ZVwiLFxuICAgIGdldDogZnVuY3Rpb24gZ2V0KCkge1xuICAgICAgcmV0dXJuIHRoaXMuJC5oO1xuICAgIH0sXG4gICAgc2V0OiBmdW5jdGlvbiBzZXQodmFsdWUpIHtcbiAgICAgIHRoaXMuaHN2ID0ge1xuICAgICAgICBoOiB2YWx1ZVxuICAgICAgfTtcbiAgICB9XG4gIH0sIHtcbiAgICBrZXk6IFwic2F0dXJhdGlvblwiLFxuICAgIGdldDogZnVuY3Rpb24gZ2V0KCkge1xuICAgICAgcmV0dXJuIHRoaXMuJC5zO1xuICAgIH0sXG4gICAgc2V0OiBmdW5jdGlvbiBzZXQodmFsdWUpIHtcbiAgICAgIHRoaXMuaHN2ID0ge1xuICAgICAgICBzOiB2YWx1ZVxuICAgICAgfTtcbiAgICB9XG4gIH0sIHtcbiAgICBrZXk6IFwidmFsdWVcIixcbiAgICBnZXQ6IGZ1bmN0aW9uIGdldCgpIHtcbiAgICAgIHJldHVybiB0aGlzLiQudjtcbiAgICB9LFxuICAgIHNldDogZnVuY3Rpb24gc2V0KHZhbHVlKSB7XG4gICAgICB0aGlzLmhzdiA9IHtcbiAgICAgICAgdjogdmFsdWVcbiAgICAgIH07XG4gICAgfVxuICB9LCB7XG4gICAga2V5OiBcImFscGhhXCIsXG4gICAgZ2V0OiBmdW5jdGlvbiBnZXQoKSB7XG4gICAgICByZXR1cm4gdGhpcy4kLmE7XG4gICAgfSxcbiAgICBzZXQ6IGZ1bmN0aW9uIHNldCh2YWx1ZSkge1xuICAgICAgdGhpcy5oc3YgPSBfZXh0ZW5kcyh7fSwgdGhpcy5oc3YsIHtcbiAgICAgICAgYTogdmFsdWVcbiAgICAgIH0pO1xuICAgIH1cbiAgfSwge1xuICAgIGtleTogXCJrZWx2aW5cIixcbiAgICBnZXQ6IGZ1bmN0aW9uIGdldCgpIHtcbiAgICAgIHJldHVybiBJcm9Db2xvci5yZ2JUb0tlbHZpbih0aGlzLnJnYik7XG4gICAgfSxcbiAgICBzZXQ6IGZ1bmN0aW9uIHNldCh2YWx1ZSkge1xuICAgICAgdGhpcy5yZ2IgPSBJcm9Db2xvci5rZWx2aW5Ub1JnYih2YWx1ZSk7XG4gICAgfVxuICB9LCB7XG4gICAga2V5OiBcInJlZFwiLFxuICAgIGdldDogZnVuY3Rpb24gZ2V0KCkge1xuICAgICAgdmFyIHJnYiA9IHRoaXMucmdiO1xuICAgICAgcmV0dXJuIHJnYi5yO1xuICAgIH0sXG4gICAgc2V0OiBmdW5jdGlvbiBzZXQodmFsdWUpIHtcbiAgICAgIHRoaXMucmdiID0gX2V4dGVuZHMoe30sIHRoaXMucmdiLCB7XG4gICAgICAgIHI6IHZhbHVlXG4gICAgICB9KTtcbiAgICB9XG4gIH0sIHtcbiAgICBrZXk6IFwiZ3JlZW5cIixcbiAgICBnZXQ6IGZ1bmN0aW9uIGdldCgpIHtcbiAgICAgIHZhciByZ2IgPSB0aGlzLnJnYjtcbiAgICAgIHJldHVybiByZ2IuZztcbiAgICB9LFxuICAgIHNldDogZnVuY3Rpb24gc2V0KHZhbHVlKSB7XG4gICAgICB0aGlzLnJnYiA9IF9leHRlbmRzKHt9LCB0aGlzLnJnYiwge1xuICAgICAgICBnOiB2YWx1ZVxuICAgICAgfSk7XG4gICAgfVxuICB9LCB7XG4gICAga2V5OiBcImJsdWVcIixcbiAgICBnZXQ6IGZ1bmN0aW9uIGdldCgpIHtcbiAgICAgIHZhciByZ2IgPSB0aGlzLnJnYjtcbiAgICAgIHJldHVybiByZ2IuYjtcbiAgICB9LFxuICAgIHNldDogZnVuY3Rpb24gc2V0KHZhbHVlKSB7XG4gICAgICB0aGlzLnJnYiA9IF9leHRlbmRzKHt9LCB0aGlzLnJnYiwge1xuICAgICAgICBiOiB2YWx1ZVxuICAgICAgfSk7XG4gICAgfVxuICB9LCB7XG4gICAga2V5OiBcInJnYlwiLFxuICAgIGdldDogZnVuY3Rpb24gZ2V0KCkge1xuICAgICAgdmFyIF9Jcm9Db2xvciRoc3ZUb1JnYiA9IElyb0NvbG9yLmhzdlRvUmdiKHRoaXMuJCksXG4gICAgICAgICAgciA9IF9Jcm9Db2xvciRoc3ZUb1JnYi5yLFxuICAgICAgICAgIGcgPSBfSXJvQ29sb3IkaHN2VG9SZ2IuZyxcbiAgICAgICAgICBiID0gX0lyb0NvbG9yJGhzdlRvUmdiLmI7XG5cbiAgICAgIHJldHVybiB7XG4gICAgICAgIHI6IHJvdW5kKHIpLFxuICAgICAgICBnOiByb3VuZChnKSxcbiAgICAgICAgYjogcm91bmQoYilcbiAgICAgIH07XG4gICAgfSxcbiAgICBzZXQ6IGZ1bmN0aW9uIHNldCh2YWx1ZSkge1xuICAgICAgdGhpcy5oc3YgPSBfZXh0ZW5kcyh7fSwgSXJvQ29sb3IucmdiVG9Ic3YodmFsdWUpLCB7XG4gICAgICAgIGE6IHZhbHVlLmEgPT09IHVuZGVmaW5lZCA/IDEgOiB2YWx1ZS5hXG4gICAgICB9KTtcbiAgICB9XG4gIH0sIHtcbiAgICBrZXk6IFwicmdiYVwiLFxuICAgIGdldDogZnVuY3Rpb24gZ2V0KCkge1xuICAgICAgcmV0dXJuIF9leHRlbmRzKHt9LCB0aGlzLnJnYiwge1xuICAgICAgICBhOiB0aGlzLmFscGhhXG4gICAgICB9KTtcbiAgICB9LFxuICAgIHNldDogZnVuY3Rpb24gc2V0KHZhbHVlKSB7XG4gICAgICB0aGlzLnJnYiA9IHZhbHVlO1xuICAgIH1cbiAgfSwge1xuICAgIGtleTogXCJoc2xcIixcbiAgICBnZXQ6IGZ1bmN0aW9uIGdldCgpIHtcbiAgICAgIHZhciBfSXJvQ29sb3IkaHN2VG9Ic2wgPSBJcm9Db2xvci5oc3ZUb0hzbCh0aGlzLiQpLFxuICAgICAgICAgIGggPSBfSXJvQ29sb3IkaHN2VG9Ic2wuaCxcbiAgICAgICAgICBzID0gX0lyb0NvbG9yJGhzdlRvSHNsLnMsXG4gICAgICAgICAgbCA9IF9Jcm9Db2xvciRoc3ZUb0hzbC5sO1xuXG4gICAgICByZXR1cm4ge1xuICAgICAgICBoOiByb3VuZChoKSxcbiAgICAgICAgczogcm91bmQocyksXG4gICAgICAgIGw6IHJvdW5kKGwpXG4gICAgICB9O1xuICAgIH0sXG4gICAgc2V0OiBmdW5jdGlvbiBzZXQodmFsdWUpIHtcbiAgICAgIHRoaXMuaHN2ID0gX2V4dGVuZHMoe30sIElyb0NvbG9yLmhzbFRvSHN2KHZhbHVlKSwge1xuICAgICAgICBhOiB2YWx1ZS5hID09PSB1bmRlZmluZWQgPyAxIDogdmFsdWUuYVxuICAgICAgfSk7XG4gICAgfVxuICB9LCB7XG4gICAga2V5OiBcImhzbGFcIixcbiAgICBnZXQ6IGZ1bmN0aW9uIGdldCgpIHtcbiAgICAgIHJldHVybiBfZXh0ZW5kcyh7fSwgdGhpcy5oc2wsIHtcbiAgICAgICAgYTogdGhpcy5hbHBoYVxuICAgICAgfSk7XG4gICAgfSxcbiAgICBzZXQ6IGZ1bmN0aW9uIHNldCh2YWx1ZSkge1xuICAgICAgdGhpcy5oc2wgPSB2YWx1ZTtcbiAgICB9XG4gIH0sIHtcbiAgICBrZXk6IFwicmdiU3RyaW5nXCIsXG4gICAgZ2V0OiBmdW5jdGlvbiBnZXQoKSB7XG4gICAgICB2YXIgcmdiID0gdGhpcy5yZ2I7XG4gICAgICByZXR1cm4gXCJyZ2IoXCIgKyByZ2IuciArIFwiLCBcIiArIHJnYi5nICsgXCIsIFwiICsgcmdiLmIgKyBcIilcIjtcbiAgICB9LFxuICAgIHNldDogZnVuY3Rpb24gc2V0KHZhbHVlKSB7XG4gICAgICB2YXIgbWF0Y2g7XG4gICAgICB2YXIgcixcbiAgICAgICAgICBnLFxuICAgICAgICAgIGIsXG4gICAgICAgICAgYSA9IDE7XG5cbiAgICAgIGlmIChtYXRjaCA9IFJFR0VYX0ZVTkNUSU9OQUxfUkdCLmV4ZWModmFsdWUpKSB7XG4gICAgICAgIHIgPSBwYXJzZVVuaXQobWF0Y2hbMV0sIDI1NSk7XG4gICAgICAgIGcgPSBwYXJzZVVuaXQobWF0Y2hbMl0sIDI1NSk7XG4gICAgICAgIGIgPSBwYXJzZVVuaXQobWF0Y2hbM10sIDI1NSk7XG4gICAgICB9IGVsc2UgaWYgKG1hdGNoID0gUkVHRVhfRlVOQ1RJT05BTF9SR0JBLmV4ZWModmFsdWUpKSB7XG4gICAgICAgIHIgPSBwYXJzZVVuaXQobWF0Y2hbMV0sIDI1NSk7XG4gICAgICAgIGcgPSBwYXJzZVVuaXQobWF0Y2hbMl0sIDI1NSk7XG4gICAgICAgIGIgPSBwYXJzZVVuaXQobWF0Y2hbM10sIDI1NSk7XG4gICAgICAgIGEgPSBwYXJzZVVuaXQobWF0Y2hbNF0sIDEpO1xuICAgICAgfVxuXG4gICAgICBpZiAobWF0Y2gpIHtcbiAgICAgICAgdGhpcy5yZ2IgPSB7XG4gICAgICAgICAgcjogcixcbiAgICAgICAgICBnOiBnLFxuICAgICAgICAgIGI6IGIsXG4gICAgICAgICAgYTogYVxuICAgICAgICB9O1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKCdJbnZhbGlkIHJnYiBzdHJpbmcnKTtcbiAgICAgIH1cbiAgICB9XG4gIH0sIHtcbiAgICBrZXk6IFwicmdiYVN0cmluZ1wiLFxuICAgIGdldDogZnVuY3Rpb24gZ2V0KCkge1xuICAgICAgdmFyIHJnYmEgPSB0aGlzLnJnYmE7XG4gICAgICByZXR1cm4gXCJyZ2JhKFwiICsgcmdiYS5yICsgXCIsIFwiICsgcmdiYS5nICsgXCIsIFwiICsgcmdiYS5iICsgXCIsIFwiICsgcmdiYS5hICsgXCIpXCI7XG4gICAgfSxcbiAgICBzZXQ6IGZ1bmN0aW9uIHNldCh2YWx1ZSkge1xuICAgICAgdGhpcy5yZ2JTdHJpbmcgPSB2YWx1ZTtcbiAgICB9XG4gIH0sIHtcbiAgICBrZXk6IFwiaGV4U3RyaW5nXCIsXG4gICAgZ2V0OiBmdW5jdGlvbiBnZXQoKSB7XG4gICAgICB2YXIgcmdiID0gdGhpcy5yZ2I7XG4gICAgICByZXR1cm4gXCIjXCIgKyBpbnRUb0hleChyZ2IucikgKyBpbnRUb0hleChyZ2IuZykgKyBpbnRUb0hleChyZ2IuYik7XG4gICAgfSxcbiAgICBzZXQ6IGZ1bmN0aW9uIHNldCh2YWx1ZSkge1xuICAgICAgdmFyIG1hdGNoO1xuICAgICAgdmFyIHIsXG4gICAgICAgICAgZyxcbiAgICAgICAgICBiLFxuICAgICAgICAgIGEgPSAyNTU7XG5cbiAgICAgIGlmIChtYXRjaCA9IFJFR0VYX0hFWF8zLmV4ZWModmFsdWUpKSB7XG4gICAgICAgIHIgPSBwYXJzZUhleEludChtYXRjaFsxXSkgKiAxNztcbiAgICAgICAgZyA9IHBhcnNlSGV4SW50KG1hdGNoWzJdKSAqIDE3O1xuICAgICAgICBiID0gcGFyc2VIZXhJbnQobWF0Y2hbM10pICogMTc7XG4gICAgICB9IGVsc2UgaWYgKG1hdGNoID0gUkVHRVhfSEVYXzQuZXhlYyh2YWx1ZSkpIHtcbiAgICAgICAgciA9IHBhcnNlSGV4SW50KG1hdGNoWzFdKSAqIDE3O1xuICAgICAgICBnID0gcGFyc2VIZXhJbnQobWF0Y2hbMl0pICogMTc7XG4gICAgICAgIGIgPSBwYXJzZUhleEludChtYXRjaFszXSkgKiAxNztcbiAgICAgICAgYSA9IHBhcnNlSGV4SW50KG1hdGNoWzRdKSAqIDE3O1xuICAgICAgfSBlbHNlIGlmIChtYXRjaCA9IFJFR0VYX0hFWF82LmV4ZWModmFsdWUpKSB7XG4gICAgICAgIHIgPSBwYXJzZUhleEludChtYXRjaFsxXSk7XG4gICAgICAgIGcgPSBwYXJzZUhleEludChtYXRjaFsyXSk7XG4gICAgICAgIGIgPSBwYXJzZUhleEludChtYXRjaFszXSk7XG4gICAgICB9IGVsc2UgaWYgKG1hdGNoID0gUkVHRVhfSEVYXzguZXhlYyh2YWx1ZSkpIHtcbiAgICAgICAgciA9IHBhcnNlSGV4SW50KG1hdGNoWzFdKTtcbiAgICAgICAgZyA9IHBhcnNlSGV4SW50KG1hdGNoWzJdKTtcbiAgICAgICAgYiA9IHBhcnNlSGV4SW50KG1hdGNoWzNdKTtcbiAgICAgICAgYSA9IHBhcnNlSGV4SW50KG1hdGNoWzRdKTtcbiAgICAgIH1cblxuICAgICAgaWYgKG1hdGNoKSB7XG4gICAgICAgIHRoaXMucmdiID0ge1xuICAgICAgICAgIHI6IHIsXG4gICAgICAgICAgZzogZyxcbiAgICAgICAgICBiOiBiLFxuICAgICAgICAgIGE6IGEgLyAyNTVcbiAgICAgICAgfTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHRocm93IG5ldyBFcnJvcignSW52YWxpZCBoZXggc3RyaW5nJyk7XG4gICAgICB9XG4gICAgfVxuICB9LCB7XG4gICAga2V5OiBcImhleDhTdHJpbmdcIixcbiAgICBnZXQ6IGZ1bmN0aW9uIGdldCgpIHtcbiAgICAgIHZhciByZ2JhID0gdGhpcy5yZ2JhO1xuICAgICAgcmV0dXJuIFwiI1wiICsgaW50VG9IZXgocmdiYS5yKSArIGludFRvSGV4KHJnYmEuZykgKyBpbnRUb0hleChyZ2JhLmIpICsgaW50VG9IZXgoZmxvb3IocmdiYS5hICogMjU1KSk7XG4gICAgfSxcbiAgICBzZXQ6IGZ1bmN0aW9uIHNldCh2YWx1ZSkge1xuICAgICAgdGhpcy5oZXhTdHJpbmcgPSB2YWx1ZTtcbiAgICB9XG4gIH0sIHtcbiAgICBrZXk6IFwiaHNsU3RyaW5nXCIsXG4gICAgZ2V0OiBmdW5jdGlvbiBnZXQoKSB7XG4gICAgICB2YXIgaHNsID0gdGhpcy5oc2w7XG4gICAgICByZXR1cm4gXCJoc2woXCIgKyBoc2wuaCArIFwiLCBcIiArIGhzbC5zICsgXCIlLCBcIiArIGhzbC5sICsgXCIlKVwiO1xuICAgIH0sXG4gICAgc2V0OiBmdW5jdGlvbiBzZXQodmFsdWUpIHtcbiAgICAgIHZhciBtYXRjaDtcbiAgICAgIHZhciBoLFxuICAgICAgICAgIHMsXG4gICAgICAgICAgbCxcbiAgICAgICAgICBhID0gMTtcblxuICAgICAgaWYgKG1hdGNoID0gUkVHRVhfRlVOQ1RJT05BTF9IU0wuZXhlYyh2YWx1ZSkpIHtcbiAgICAgICAgaCA9IHBhcnNlVW5pdChtYXRjaFsxXSwgMzYwKTtcbiAgICAgICAgcyA9IHBhcnNlVW5pdChtYXRjaFsyXSwgMTAwKTtcbiAgICAgICAgbCA9IHBhcnNlVW5pdChtYXRjaFszXSwgMTAwKTtcbiAgICAgIH0gZWxzZSBpZiAobWF0Y2ggPSBSRUdFWF9GVU5DVElPTkFMX0hTTEEuZXhlYyh2YWx1ZSkpIHtcbiAgICAgICAgaCA9IHBhcnNlVW5pdChtYXRjaFsxXSwgMzYwKTtcbiAgICAgICAgcyA9IHBhcnNlVW5pdChtYXRjaFsyXSwgMTAwKTtcbiAgICAgICAgbCA9IHBhcnNlVW5pdChtYXRjaFszXSwgMTAwKTtcbiAgICAgICAgYSA9IHBhcnNlVW5pdChtYXRjaFs0XSwgMSk7XG4gICAgICB9XG5cbiAgICAgIGlmIChtYXRjaCkge1xuICAgICAgICB0aGlzLmhzbCA9IHtcbiAgICAgICAgICBoOiBoLFxuICAgICAgICAgIHM6IHMsXG4gICAgICAgICAgbDogbCxcbiAgICAgICAgICBhOiBhXG4gICAgICAgIH07XG4gICAgICB9IGVsc2Uge1xuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ0ludmFsaWQgaHNsIHN0cmluZycpO1xuICAgICAgfVxuICAgIH1cbiAgfSwge1xuICAgIGtleTogXCJoc2xhU3RyaW5nXCIsXG4gICAgZ2V0OiBmdW5jdGlvbiBnZXQoKSB7XG4gICAgICB2YXIgaHNsYSA9IHRoaXMuaHNsYTtcbiAgICAgIHJldHVybiBcImhzbChcIiArIGhzbGEuaCArIFwiLCBcIiArIGhzbGEucyArIFwiJSwgXCIgKyBoc2xhLmwgKyBcIiUsIFwiICsgaHNsYS5hICsgXCIpXCI7XG4gICAgfSxcbiAgICBzZXQ6IGZ1bmN0aW9uIHNldCh2YWx1ZSkge1xuICAgICAgdGhpcy5oc2xTdHJpbmcgPSB2YWx1ZTtcbiAgICB9XG4gIH1dKTtcblxuICByZXR1cm4gSXJvQ29sb3I7XG59KCk7XG5cbnZhciBzbGlkZXJEZWZhdWx0T3B0aW9ucyA9IHtcbiAgc2xpZGVyU2hhcGU6ICdiYXInLFxuICBzbGlkZXJUeXBlOiAndmFsdWUnLFxuICBtaW5UZW1wZXJhdHVyZTogMjIwMCxcbiAgbWF4VGVtcGVyYXR1cmU6IDExMDAwXG59O1xuLyoqXHJcbiAqIEBkZXNjIEdldCB0aGUgYm91bmRpbmcgZGltZW5zaW9ucyBvZiB0aGUgc2xpZGVyXHJcbiAqIEBwYXJhbSBwcm9wcyAtIHNsaWRlciBwcm9wc1xyXG4gKi9cblxuZnVuY3Rpb24gZ2V0U2xpZGVyRGltZW5zaW9ucyhwcm9wcykge1xuICB2YXIgX3NsaWRlclNpemU7XG5cbiAgdmFyIHdpZHRoID0gcHJvcHMud2lkdGgsXG4gICAgICBzbGlkZXJTaXplID0gcHJvcHMuc2xpZGVyU2l6ZSxcbiAgICAgIGJvcmRlcldpZHRoID0gcHJvcHMuYm9yZGVyV2lkdGgsXG4gICAgICBoYW5kbGVSYWRpdXMgPSBwcm9wcy5oYW5kbGVSYWRpdXMsXG4gICAgICBwYWRkaW5nID0gcHJvcHMucGFkZGluZyxcbiAgICAgIHNsaWRlclNoYXBlID0gcHJvcHMuc2xpZGVyU2hhcGU7XG4gIHZhciBpc2hvcml6b250YWwgPSBwcm9wcy5sYXlvdXREaXJlY3Rpb24gPT09ICdob3Jpem9udGFsJzsgLy8gYXV0b21hdGljYWxseSBjYWxjdWxhdGUgc2xpZGVyU2l6ZSBpZiBpdHMgbm90IGRlZmluZWRcblxuICBzbGlkZXJTaXplID0gKF9zbGlkZXJTaXplID0gc2xpZGVyU2l6ZSkgIT0gbnVsbCA/IF9zbGlkZXJTaXplIDogcGFkZGluZyAqIDIgKyBoYW5kbGVSYWRpdXMgKiAyO1xuXG4gIGlmIChzbGlkZXJTaGFwZSA9PT0gJ2NpcmNsZScpIHtcbiAgICByZXR1cm4ge1xuICAgICAgaGFuZGxlU3RhcnQ6IHByb3BzLnBhZGRpbmcgKyBwcm9wcy5oYW5kbGVSYWRpdXMsXG4gICAgICBoYW5kbGVSYW5nZTogd2lkdGggLSBwYWRkaW5nICogMiAtIGhhbmRsZVJhZGl1cyAqIDIsXG4gICAgICB3aWR0aDogd2lkdGgsXG4gICAgICBoZWlnaHQ6IHdpZHRoLFxuICAgICAgY3g6IHdpZHRoIC8gMixcbiAgICAgIGN5OiB3aWR0aCAvIDIsXG4gICAgICByYWRpdXM6IHdpZHRoIC8gMiAtIGJvcmRlcldpZHRoIC8gMlxuICAgIH07XG4gIH0gZWxzZSB7XG4gICAgcmV0dXJuIHtcbiAgICAgIGhhbmRsZVN0YXJ0OiBzbGlkZXJTaXplIC8gMixcbiAgICAgIGhhbmRsZVJhbmdlOiB3aWR0aCAtIHNsaWRlclNpemUsXG4gICAgICByYWRpdXM6IHNsaWRlclNpemUgLyAyLFxuICAgICAgeDogMCxcbiAgICAgIHk6IDAsXG4gICAgICB3aWR0aDogaXNob3Jpem9udGFsID8gc2xpZGVyU2l6ZSA6IHdpZHRoLFxuICAgICAgaGVpZ2h0OiBpc2hvcml6b250YWwgPyB3aWR0aCA6IHNsaWRlclNpemVcbiAgICB9O1xuICB9XG59XG4vKipcclxuICogQGRlc2MgR2V0IHRoZSBjdXJyZW50IHNsaWRlciB2YWx1ZSBmb3IgYSBnaXZlbiBjb2xvciwgYXMgYSBwZXJjZW50YWdlXHJcbiAqIEBwYXJhbSBwcm9wcyAtIHNsaWRlciBwcm9wc1xyXG4gKiBAcGFyYW0gY29sb3JcclxuICovXG5cbmZ1bmN0aW9uIGdldEN1cnJlbnRTbGlkZXJWYWx1ZShwcm9wcywgY29sb3IpIHtcbiAgdmFyIGhzdmEgPSBjb2xvci5oc3ZhO1xuICB2YXIgcmdiID0gY29sb3IucmdiO1xuXG4gIHN3aXRjaCAocHJvcHMuc2xpZGVyVHlwZSkge1xuICAgIGNhc2UgJ3JlZCc6XG4gICAgICByZXR1cm4gcmdiLnIgLyAyLjU1O1xuXG4gICAgY2FzZSAnZ3JlZW4nOlxuICAgICAgcmV0dXJuIHJnYi5nIC8gMi41NTtcblxuICAgIGNhc2UgJ2JsdWUnOlxuICAgICAgcmV0dXJuIHJnYi5iIC8gMi41NTtcblxuICAgIGNhc2UgJ2FscGhhJzpcbiAgICAgIHJldHVybiBoc3ZhLmEgKiAxMDA7XG5cbiAgICBjYXNlICdrZWx2aW4nOlxuICAgICAgdmFyIG1pblRlbXBlcmF0dXJlID0gcHJvcHMubWluVGVtcGVyYXR1cmUsXG4gICAgICAgICAgbWF4VGVtcGVyYXR1cmUgPSBwcm9wcy5tYXhUZW1wZXJhdHVyZTtcbiAgICAgIHZhciB0ZW1wZXJhdHVyZVJhbmdlID0gbWF4VGVtcGVyYXR1cmUgLSBtaW5UZW1wZXJhdHVyZTtcbiAgICAgIHZhciBwZXJjZW50ID0gKGNvbG9yLmtlbHZpbiAtIG1pblRlbXBlcmF0dXJlKSAvIHRlbXBlcmF0dXJlUmFuZ2UgKiAxMDA7IC8vIGNsbWFwIHBlcmNlbnRhZ2VcblxuICAgICAgcmV0dXJuIE1hdGgubWF4KDAsIE1hdGgubWluKHBlcmNlbnQsIDEwMCkpO1xuXG4gICAgY2FzZSAnaHVlJzpcbiAgICAgIHJldHVybiBoc3ZhLmggLz0gMy42O1xuXG4gICAgY2FzZSAnc2F0dXJhdGlvbic6XG4gICAgICByZXR1cm4gaHN2YS5zO1xuXG4gICAgY2FzZSAndmFsdWUnOlxuICAgIGRlZmF1bHQ6XG4gICAgICByZXR1cm4gaHN2YS52O1xuICB9XG59XG4vKipcclxuICogQGRlc2MgR2V0IHRoZSBjdXJyZW50IHNsaWRlciB2YWx1ZSBmcm9tIHVzZXIgaW5wdXRcclxuICogQHBhcmFtIHByb3BzIC0gc2xpZGVyIHByb3BzXHJcbiAqIEBwYXJhbSB4IC0gZ2xvYmFsIGlucHV0IHggcG9zaXRpb25cclxuICogQHBhcmFtIHkgLSBnbG9iYWwgaW5wdXQgeSBwb3NpdGlvblxyXG4gKi9cblxuZnVuY3Rpb24gZ2V0U2xpZGVyVmFsdWVGcm9tSW5wdXQocHJvcHMsIHgsIHkpIHtcbiAgdmFyIF9nZXRTbGlkZXJEaW1lbnNpb25zID0gZ2V0U2xpZGVyRGltZW5zaW9ucyhwcm9wcyksXG4gICAgICBoYW5kbGVSYW5nZSA9IF9nZXRTbGlkZXJEaW1lbnNpb25zLmhhbmRsZVJhbmdlLFxuICAgICAgaGFuZGxlU3RhcnQgPSBfZ2V0U2xpZGVyRGltZW5zaW9ucy5oYW5kbGVTdGFydDtcblxuICB2YXIgaGFuZGxlUG9zO1xuXG4gIGlmIChwcm9wcy5sYXlvdXREaXJlY3Rpb24gPT09ICdob3Jpem9udGFsJykge1xuICAgIGhhbmRsZVBvcyA9IC0xICogeSArIGhhbmRsZVJhbmdlICsgaGFuZGxlU3RhcnQ7XG4gIH0gZWxzZSB7XG4gICAgaGFuZGxlUG9zID0geCAtIGhhbmRsZVN0YXJ0O1xuICB9IC8vIGNsYW1wIGhhbmRsZSBwb3NpdGlvblxuXG5cbiAgaGFuZGxlUG9zID0gTWF0aC5tYXgoTWF0aC5taW4oaGFuZGxlUG9zLCBoYW5kbGVSYW5nZSksIDApO1xuICB2YXIgcGVyY2VudCA9IE1hdGgucm91bmQoMTAwIC8gaGFuZGxlUmFuZ2UgKiBoYW5kbGVQb3MpO1xuXG4gIHN3aXRjaCAocHJvcHMuc2xpZGVyVHlwZSkge1xuICAgIGNhc2UgJ2tlbHZpbic6XG4gICAgICB2YXIgbWluVGVtcGVyYXR1cmUgPSBwcm9wcy5taW5UZW1wZXJhdHVyZSxcbiAgICAgICAgICBtYXhUZW1wZXJhdHVyZSA9IHByb3BzLm1heFRlbXBlcmF0dXJlO1xuICAgICAgdmFyIHRlbXBlcmF0dXJlUmFuZ2UgPSBtYXhUZW1wZXJhdHVyZSAtIG1pblRlbXBlcmF0dXJlO1xuICAgICAgcmV0dXJuIG1pblRlbXBlcmF0dXJlICsgdGVtcGVyYXR1cmVSYW5nZSAqIChwZXJjZW50IC8gMTAwKTtcblxuICAgIGNhc2UgJ2FscGhhJzpcbiAgICAgIHJldHVybiBwZXJjZW50IC8gMTAwO1xuXG4gICAgY2FzZSAnaHVlJzpcbiAgICAgIHJldHVybiBwZXJjZW50ICogMy42O1xuXG4gICAgY2FzZSAncmVkJzpcbiAgICBjYXNlICdibHVlJzpcbiAgICBjYXNlICdncmVlbic6XG4gICAgICByZXR1cm4gcGVyY2VudCAqIDIuNTU7XG5cbiAgICBkZWZhdWx0OlxuICAgICAgcmV0dXJuIHBlcmNlbnQ7XG4gIH1cbn1cbi8qKlxyXG4gKiBAZGVzYyBHZXQgdGhlIGN1cnJlbnQgaGFuZGxlIHBvc2l0aW9uIGZvciBhIGdpdmVuIGNvbG9yXHJcbiAqIEBwYXJhbSBwcm9wcyAtIHNsaWRlciBwcm9wc1xyXG4gKiBAcGFyYW0gY29sb3JcclxuICovXG5cbmZ1bmN0aW9uIGdldFNsaWRlckhhbmRsZVBvc2l0aW9uKHByb3BzLCBjb2xvcikge1xuICB2YXIgX2dldFNsaWRlckRpbWVuc2lvbnMyID0gZ2V0U2xpZGVyRGltZW5zaW9ucyhwcm9wcyksXG4gICAgICB3aWR0aCA9IF9nZXRTbGlkZXJEaW1lbnNpb25zMi53aWR0aCxcbiAgICAgIGhlaWdodCA9IF9nZXRTbGlkZXJEaW1lbnNpb25zMi5oZWlnaHQsXG4gICAgICBoYW5kbGVSYW5nZSA9IF9nZXRTbGlkZXJEaW1lbnNpb25zMi5oYW5kbGVSYW5nZSxcbiAgICAgIGhhbmRsZVN0YXJ0ID0gX2dldFNsaWRlckRpbWVuc2lvbnMyLmhhbmRsZVN0YXJ0O1xuXG4gIHZhciBpc2hvcml6b250YWwgPSBwcm9wcy5sYXlvdXREaXJlY3Rpb24gPT09ICdob3Jpem9udGFsJztcbiAgdmFyIHNsaWRlclZhbHVlID0gZ2V0Q3VycmVudFNsaWRlclZhbHVlKHByb3BzLCBjb2xvcik7XG4gIHZhciBtaWRQb2ludCA9IGlzaG9yaXpvbnRhbCA/IHdpZHRoIC8gMiA6IGhlaWdodCAvIDI7XG4gIHZhciBoYW5kbGVQb3MgPSBoYW5kbGVTdGFydCArIHNsaWRlclZhbHVlIC8gMTAwICogaGFuZGxlUmFuZ2U7XG5cbiAgaWYgKGlzaG9yaXpvbnRhbCkge1xuICAgIGhhbmRsZVBvcyA9IC0xICogaGFuZGxlUG9zICsgaGFuZGxlUmFuZ2UgKyBoYW5kbGVTdGFydCAqIDI7XG4gIH1cblxuICByZXR1cm4ge1xuICAgIHg6IGlzaG9yaXpvbnRhbCA/IG1pZFBvaW50IDogaGFuZGxlUG9zLFxuICAgIHk6IGlzaG9yaXpvbnRhbCA/IGhhbmRsZVBvcyA6IG1pZFBvaW50XG4gIH07XG59XG4vKipcclxuICogQGRlc2MgR2V0IHRoZSBncmFkaWVudCBzdG9wcyBmb3IgYSBzbGlkZXJcclxuICogQHBhcmFtIHByb3BzIC0gc2xpZGVyIHByb3BzXHJcbiAqIEBwYXJhbSBjb2xvclxyXG4gKi9cblxuZnVuY3Rpb24gZ2V0U2xpZGVyR3JhZGllbnQocHJvcHMsIGNvbG9yKSB7XG4gIHZhciBoc3YgPSBjb2xvci5oc3Y7XG4gIHZhciByZ2IgPSBjb2xvci5yZ2I7XG5cbiAgc3dpdGNoIChwcm9wcy5zbGlkZXJUeXBlKSB7XG4gICAgY2FzZSAncmVkJzpcbiAgICAgIHJldHVybiBbWzAsIFwicmdiKFwiICsgMCArIFwiLFwiICsgcmdiLmcgKyBcIixcIiArIHJnYi5iICsgXCIpXCJdLCBbMTAwLCBcInJnYihcIiArIDI1NSArIFwiLFwiICsgcmdiLmcgKyBcIixcIiArIHJnYi5iICsgXCIpXCJdXTtcblxuICAgIGNhc2UgJ2dyZWVuJzpcbiAgICAgIHJldHVybiBbWzAsIFwicmdiKFwiICsgcmdiLnIgKyBcIixcIiArIDAgKyBcIixcIiArIHJnYi5iICsgXCIpXCJdLCBbMTAwLCBcInJnYihcIiArIHJnYi5yICsgXCIsXCIgKyAyNTUgKyBcIixcIiArIHJnYi5iICsgXCIpXCJdXTtcblxuICAgIGNhc2UgJ2JsdWUnOlxuICAgICAgcmV0dXJuIFtbMCwgXCJyZ2IoXCIgKyByZ2IuciArIFwiLFwiICsgcmdiLmcgKyBcIixcIiArIDAgKyBcIilcIl0sIFsxMDAsIFwicmdiKFwiICsgcmdiLnIgKyBcIixcIiArIHJnYi5nICsgXCIsXCIgKyAyNTUgKyBcIilcIl1dO1xuXG4gICAgY2FzZSAnYWxwaGEnOlxuICAgICAgcmV0dXJuIFtbMCwgXCJyZ2JhKFwiICsgcmdiLnIgKyBcIixcIiArIHJnYi5nICsgXCIsXCIgKyByZ2IuYiArIFwiLDApXCJdLCBbMTAwLCBcInJnYihcIiArIHJnYi5yICsgXCIsXCIgKyByZ2IuZyArIFwiLFwiICsgcmdiLmIgKyBcIilcIl1dO1xuXG4gICAgY2FzZSAna2VsdmluJzpcbiAgICAgIHZhciBzdG9wcyA9IFtdO1xuICAgICAgdmFyIG1pbiA9IHByb3BzLm1pblRlbXBlcmF0dXJlO1xuICAgICAgdmFyIG1heCA9IHByb3BzLm1heFRlbXBlcmF0dXJlO1xuICAgICAgdmFyIG51bVN0b3BzID0gODtcbiAgICAgIHZhciByYW5nZSA9IG1heCAtIG1pbjtcblxuICAgICAgZm9yICh2YXIga2VsdmluID0gbWluLCBzdG9wID0gMDsga2VsdmluIDwgbWF4OyBrZWx2aW4gKz0gcmFuZ2UgLyBudW1TdG9wcywgc3RvcCArPSAxKSB7XG4gICAgICAgIHZhciBfSXJvQ29sb3Ika2VsdmluVG9SZ2IgPSBJcm9Db2xvci5rZWx2aW5Ub1JnYihrZWx2aW4pLFxuICAgICAgICAgICAgciA9IF9Jcm9Db2xvciRrZWx2aW5Ub1JnYi5yLFxuICAgICAgICAgICAgZyA9IF9Jcm9Db2xvciRrZWx2aW5Ub1JnYi5nLFxuICAgICAgICAgICAgYiA9IF9Jcm9Db2xvciRrZWx2aW5Ub1JnYi5iO1xuXG4gICAgICAgIHN0b3BzLnB1c2goWzEwMCAvIG51bVN0b3BzICogc3RvcCwgXCJyZ2IoXCIgKyByICsgXCIsXCIgKyBnICsgXCIsXCIgKyBiICsgXCIpXCJdKTtcbiAgICAgIH1cblxuICAgICAgcmV0dXJuIHN0b3BzO1xuXG4gICAgY2FzZSAnaHVlJzpcbiAgICAgIHJldHVybiBbWzAsICcjZjAwJ10sIFsxNi42NjYsICcjZmYwJ10sIFszMy4zMzMsICcjMGYwJ10sIFs1MCwgJyMwZmYnXSwgWzY2LjY2NiwgJyMwMGYnXSwgWzgzLjMzMywgJyNmMGYnXSwgWzEwMCwgJyNmMDAnXV07XG5cbiAgICBjYXNlICdzYXR1cmF0aW9uJzpcbiAgICAgIHZhciBub1NhdCA9IElyb0NvbG9yLmhzdlRvSHNsKHtcbiAgICAgICAgaDogaHN2LmgsXG4gICAgICAgIHM6IDAsXG4gICAgICAgIHY6IGhzdi52XG4gICAgICB9KTtcbiAgICAgIHZhciBmdWxsU2F0ID0gSXJvQ29sb3IuaHN2VG9Ic2woe1xuICAgICAgICBoOiBoc3YuaCxcbiAgICAgICAgczogMTAwLFxuICAgICAgICB2OiBoc3YudlxuICAgICAgfSk7XG4gICAgICByZXR1cm4gW1swLCBcImhzbChcIiArIG5vU2F0LmggKyBcIixcIiArIG5vU2F0LnMgKyBcIiUsXCIgKyBub1NhdC5sICsgXCIlKVwiXSwgWzEwMCwgXCJoc2woXCIgKyBmdWxsU2F0LmggKyBcIixcIiArIGZ1bGxTYXQucyArIFwiJSxcIiArIGZ1bGxTYXQubCArIFwiJSlcIl1dO1xuXG4gICAgY2FzZSAndmFsdWUnOlxuICAgIGRlZmF1bHQ6XG4gICAgICB2YXIgaHNsID0gSXJvQ29sb3IuaHN2VG9Ic2woe1xuICAgICAgICBoOiBoc3YuaCxcbiAgICAgICAgczogaHN2LnMsXG4gICAgICAgIHY6IDEwMFxuICAgICAgfSk7XG4gICAgICByZXR1cm4gW1swLCAnIzAwMCddLCBbMTAwLCBcImhzbChcIiArIGhzbC5oICsgXCIsXCIgKyBoc2wucyArIFwiJSxcIiArIGhzbC5sICsgXCIlKVwiXV07XG4gIH1cbn1cblxudmFyIFRBVSA9IE1hdGguUEkgKiAyOyAvLyBqYXZhc2NyaXB0J3MgbW9kdWxvIG9wZXJhdG9yIGRvZXNuJ3QgcHJvZHVjZSBwb3NpdGl2ZSBudW1iZXJzIHdpdGggbmVnYXRpdmUgaW5wdXRcbi8vIGh0dHBzOi8vZGV2LnRvL21hdXJvYnJpbmdvbGYvYS1uZWF0LXRyaWNrLXRvLWNvbXB1dGUtbW9kdWxvLW9mLW5lZ2F0aXZlLW51bWJlcnMtMTExZVxuXG52YXIgbW9kID0gZnVuY3Rpb24gbW9kKGEsIG4pIHtcbiAgcmV0dXJuIChhICUgbiArIG4pICUgbjtcbn07IC8vIGRpc3RhbmNlIGJldHdlZW4gcG9pbnRzICh4LCB5KSBhbmQgKDAsIDApXG5cblxudmFyIGRpc3QgPSBmdW5jdGlvbiBkaXN0KHgsIHkpIHtcbiAgcmV0dXJuIE1hdGguc3FydCh4ICogeCArIHkgKiB5KTtcbn07XG4vKipcclxuICogQHBhcmFtIHByb3BzIC0gd2hlZWwgcHJvcHNcclxuICogQGludGVybmFsXHJcbiAqL1xuXG5cbmZ1bmN0aW9uIGdldEhhbmRsZVJhbmdlKHByb3BzKSB7XG4gIHJldHVybiBwcm9wcy53aWR0aCAvIDIgLSBwcm9wcy5wYWRkaW5nIC0gcHJvcHMuaGFuZGxlUmFkaXVzIC0gcHJvcHMuYm9yZGVyV2lkdGg7XG59XG4vKipcclxuICogUmV0dXJucyB0cnVlIGlmIHBvaW50ICh4LCB5KSBsYW5kcyBpbnNpZGUgdGhlIHdoZWVsXHJcbiAqIEBwYXJhbSBwcm9wcyAtIHdoZWVsIHByb3BzXHJcbiAqIEBwYXJhbSB4XHJcbiAqIEBwYXJhbSB5XHJcbiAqL1xuXG5cbmZ1bmN0aW9uIGlzSW5wdXRJbnNpZGVXaGVlbChwcm9wcywgeCwgeSkge1xuICB2YXIgX2dldFdoZWVsRGltZW5zaW9ucyA9IGdldFdoZWVsRGltZW5zaW9ucyhwcm9wcyksXG4gICAgICBjeCA9IF9nZXRXaGVlbERpbWVuc2lvbnMuY3gsXG4gICAgICBjeSA9IF9nZXRXaGVlbERpbWVuc2lvbnMuY3k7XG5cbiAgdmFyIHIgPSBwcm9wcy53aWR0aCAvIDI7XG4gIHJldHVybiBkaXN0KGN4IC0geCwgY3kgLSB5KSA8IHI7XG59XG4vKipcclxuICogQGRlc2MgR2V0IHRoZSBwb2ludCBhcyB0aGUgY2VudGVyIG9mIHRoZSB3aGVlbFxyXG4gKiBAcGFyYW0gcHJvcHMgLSB3aGVlbCBwcm9wc1xyXG4gKi9cblxuZnVuY3Rpb24gZ2V0V2hlZWxEaW1lbnNpb25zKHByb3BzKSB7XG4gIHZhciByID0gcHJvcHMud2lkdGggLyAyO1xuICByZXR1cm4ge1xuICAgIHdpZHRoOiBwcm9wcy53aWR0aCxcbiAgICByYWRpdXM6IHIgLSBwcm9wcy5ib3JkZXJXaWR0aCxcbiAgICBjeDogcixcbiAgICBjeTogclxuICB9O1xufVxuLyoqXHJcbiAqIEBkZXNjIFRyYW5zbGF0ZSBhbiBhbmdsZSBhY2NvcmRpbmcgdG8gd2hlZWxBbmdsZSBhbmQgd2hlZWxEaXJlY3Rpb25cclxuICogQHBhcmFtIHByb3BzIC0gd2hlZWwgcHJvcHNcclxuICogQHBhcmFtIGFuZ2xlIC0gaW5wdXQgYW5nbGVcclxuICovXG5cbmZ1bmN0aW9uIHRyYW5zbGF0ZVdoZWVsQW5nbGUocHJvcHMsIGFuZ2xlLCBpbnZlcnQpIHtcbiAgdmFyIHdoZWVsQW5nbGUgPSBwcm9wcy53aGVlbEFuZ2xlO1xuICB2YXIgd2hlZWxEaXJlY3Rpb24gPSBwcm9wcy53aGVlbERpcmVjdGlvbjsgLy8gaW52ZXJ0ZWQgYW5kIGNsb2Nrd2lzZWVcblxuICBpZiAoaW52ZXJ0ICYmIHdoZWVsRGlyZWN0aW9uID09PSAnY2xvY2t3aXNlJykgeyBhbmdsZSA9IHdoZWVsQW5nbGUgKyBhbmdsZTsgfSAvLyBjbG9ja3dpc2UgKGlucHV0IGhhbmRsaW5nKVxuICBlbHNlIGlmICh3aGVlbERpcmVjdGlvbiA9PT0gJ2Nsb2Nrd2lzZScpIHsgYW5nbGUgPSAzNjAgLSB3aGVlbEFuZ2xlICsgYW5nbGU7IH0gLy8gaW52ZXJ0ZWQgYW5kIGFudGljbG9ja3dpc2VcbiAgICBlbHNlIGlmIChpbnZlcnQgJiYgd2hlZWxEaXJlY3Rpb24gPT09ICdhbnRpY2xvY2t3aXNlJykgeyBhbmdsZSA9IHdoZWVsQW5nbGUgKyAxODAgLSBhbmdsZTsgfSAvLyBhbnRpY2xvY2t3aXNlIChpbnB1dCBoYW5kbGluZylcbiAgICAgIGVsc2UgaWYgKHdoZWVsRGlyZWN0aW9uID09PSAnYW50aWNsb2Nrd2lzZScpIHsgYW5nbGUgPSB3aGVlbEFuZ2xlIC0gYW5nbGU7IH1cbiAgcmV0dXJuIG1vZChhbmdsZSwgMzYwKTtcbn1cbi8qKlxyXG4gKiBAZGVzYyBHZXQgdGhlIGN1cnJlbnQgaGFuZGxlIHBvc2l0aW9uIGZvciBhIGdpdmVuIGNvbG9yXHJcbiAqIEBwYXJhbSBwcm9wcyAtIHdoZWVsIHByb3BzXHJcbiAqIEBwYXJhbSBjb2xvclxyXG4gKi9cblxuZnVuY3Rpb24gZ2V0V2hlZWxIYW5kbGVQb3NpdGlvbihwcm9wcywgY29sb3IpIHtcbiAgdmFyIGhzdiA9IGNvbG9yLmhzdjtcblxuICB2YXIgX2dldFdoZWVsRGltZW5zaW9uczIgPSBnZXRXaGVlbERpbWVuc2lvbnMocHJvcHMpLFxuICAgICAgY3ggPSBfZ2V0V2hlZWxEaW1lbnNpb25zMi5jeCxcbiAgICAgIGN5ID0gX2dldFdoZWVsRGltZW5zaW9uczIuY3k7XG5cbiAgdmFyIGhhbmRsZVJhbmdlID0gZ2V0SGFuZGxlUmFuZ2UocHJvcHMpO1xuICB2YXIgaGFuZGxlQW5nbGUgPSAoMTgwICsgdHJhbnNsYXRlV2hlZWxBbmdsZShwcm9wcywgaHN2LmgsIHRydWUpKSAqIChUQVUgLyAzNjApO1xuICB2YXIgaGFuZGxlRGlzdCA9IGhzdi5zIC8gMTAwICogaGFuZGxlUmFuZ2U7XG4gIHZhciBkaXJlY3Rpb24gPSBwcm9wcy53aGVlbERpcmVjdGlvbiA9PT0gJ2Nsb2Nrd2lzZScgPyAtMSA6IDE7XG4gIHJldHVybiB7XG4gICAgeDogY3ggKyBoYW5kbGVEaXN0ICogTWF0aC5jb3MoaGFuZGxlQW5nbGUpICogZGlyZWN0aW9uLFxuICAgIHk6IGN5ICsgaGFuZGxlRGlzdCAqIE1hdGguc2luKGhhbmRsZUFuZ2xlKSAqIGRpcmVjdGlvblxuICB9O1xufVxuLyoqXHJcbiAqIEBkZXNjIEdldCB0aGUgY3VycmVudCB3aGVlbCB2YWx1ZSBmcm9tIHVzZXIgaW5wdXRcclxuICogQHBhcmFtIHByb3BzIC0gd2hlZWwgcHJvcHNcclxuICogQHBhcmFtIHggLSBnbG9iYWwgaW5wdXQgeCBwb3NpdGlvblxyXG4gKiBAcGFyYW0geSAtIGdsb2JhbCBpbnB1dCB5IHBvc2l0aW9uXHJcbiAqL1xuXG5mdW5jdGlvbiBnZXRXaGVlbFZhbHVlRnJvbUlucHV0KHByb3BzLCB4LCB5KSB7XG4gIHZhciBfZ2V0V2hlZWxEaW1lbnNpb25zMyA9IGdldFdoZWVsRGltZW5zaW9ucyhwcm9wcyksXG4gICAgICBjeCA9IF9nZXRXaGVlbERpbWVuc2lvbnMzLmN4LFxuICAgICAgY3kgPSBfZ2V0V2hlZWxEaW1lbnNpb25zMy5jeTtcblxuICB2YXIgaGFuZGxlUmFuZ2UgPSBnZXRIYW5kbGVSYW5nZShwcm9wcyk7XG4gIHggPSBjeCAtIHg7XG4gIHkgPSBjeSAtIHk7IC8vIENhbGN1bGF0ZSB0aGUgaHVlIGJ5IGNvbnZlcnRpbmcgdGhlIGFuZ2xlIHRvIHJhZGlhbnNcblxuICB2YXIgaHVlID0gdHJhbnNsYXRlV2hlZWxBbmdsZShwcm9wcywgTWF0aC5hdGFuMigteSwgLXgpICogKDM2MCAvIFRBVSkpOyAvLyBGaW5kIHRoZSBwb2ludCdzIGRpc3RhbmNlIGZyb20gdGhlIGNlbnRlciBvZiB0aGUgd2hlZWxcbiAgLy8gVGhpcyBpcyB1c2VkIHRvIHNob3cgdGhlIHNhdHVyYXRpb24gbGV2ZWxcblxuICB2YXIgaGFuZGxlRGlzdCA9IE1hdGgubWluKGRpc3QoeCwgeSksIGhhbmRsZVJhbmdlKTtcbiAgcmV0dXJuIHtcbiAgICBoOiBNYXRoLnJvdW5kKGh1ZSksXG4gICAgczogTWF0aC5yb3VuZCgxMDAgLyBoYW5kbGVSYW5nZSAqIGhhbmRsZURpc3QpXG4gIH07XG59XG4vKipcclxuICogQGRlc2MgR2V0IHRoZSBib3VuZGluZyBkaW1lbnNpb25zIG9mIHRoZSBib3hcclxuICogQHBhcmFtIHByb3BzIC0gYm94IHByb3BzXHJcbiAqL1xuXG5mdW5jdGlvbiBnZXRCb3hEaW1lbnNpb25zKHByb3BzKSB7XG4gIHZhciB3aWR0aCA9IHByb3BzLndpZHRoLFxuICAgICAgYm94SGVpZ2h0ID0gcHJvcHMuYm94SGVpZ2h0LFxuICAgICAgcGFkZGluZyA9IHByb3BzLnBhZGRpbmcsXG4gICAgICBoYW5kbGVSYWRpdXMgPSBwcm9wcy5oYW5kbGVSYWRpdXM7XG4gIHJldHVybiB7XG4gICAgd2lkdGg6IHdpZHRoLFxuICAgIGhlaWdodDogYm94SGVpZ2h0ICE9IG51bGwgPyBib3hIZWlnaHQgOiB3aWR0aCxcbiAgICByYWRpdXM6IHBhZGRpbmcgKyBoYW5kbGVSYWRpdXNcbiAgfTtcbn1cbi8qKlxyXG4gKiBAZGVzYyBHZXQgdGhlIGN1cnJlbnQgYm94IHZhbHVlIGZyb20gdXNlciBpbnB1dFxyXG4gKiBAcGFyYW0gcHJvcHMgLSBib3ggcHJvcHNcclxuICogQHBhcmFtIHggLSBnbG9iYWwgaW5wdXQgeCBwb3NpdGlvblxyXG4gKiBAcGFyYW0geSAtIGdsb2JhbCBpbnB1dCB5IHBvc2l0aW9uXHJcbiAqL1xuXG5mdW5jdGlvbiBnZXRCb3hWYWx1ZUZyb21JbnB1dChwcm9wcywgeCwgeSkge1xuICB2YXIgX2dldEJveERpbWVuc2lvbnMgPSBnZXRCb3hEaW1lbnNpb25zKHByb3BzKSxcbiAgICAgIHdpZHRoID0gX2dldEJveERpbWVuc2lvbnMud2lkdGgsXG4gICAgICBoZWlnaHQgPSBfZ2V0Qm94RGltZW5zaW9ucy5oZWlnaHQsXG4gICAgICByYWRpdXMgPSBfZ2V0Qm94RGltZW5zaW9ucy5yYWRpdXM7XG5cbiAgdmFyIGhhbmRsZVN0YXJ0ID0gcmFkaXVzO1xuICB2YXIgaGFuZGxlUmFuZ2VYID0gd2lkdGggLSByYWRpdXMgKiAyO1xuICB2YXIgaGFuZGxlUmFuZ2VZID0gaGVpZ2h0IC0gcmFkaXVzICogMjtcbiAgdmFyIHBlcmNlbnRYID0gKHggLSBoYW5kbGVTdGFydCkgLyBoYW5kbGVSYW5nZVggKiAxMDA7XG4gIHZhciBwZXJjZW50WSA9ICh5IC0gaGFuZGxlU3RhcnQpIC8gaGFuZGxlUmFuZ2VZICogMTAwO1xuICByZXR1cm4ge1xuICAgIHM6IE1hdGgubWF4KDAsIE1hdGgubWluKHBlcmNlbnRYLCAxMDApKSxcbiAgICB2OiBNYXRoLm1heCgwLCBNYXRoLm1pbigxMDAgLSBwZXJjZW50WSwgMTAwKSlcbiAgfTtcbn1cbi8qKlxyXG4gKiBAZGVzYyBHZXQgdGhlIGN1cnJlbnQgYm94IGhhbmRsZSBwb3NpdGlvbiBmb3IgYSBnaXZlbiBjb2xvclxyXG4gKiBAcGFyYW0gcHJvcHMgLSBib3ggcHJvcHNcclxuICogQHBhcmFtIGNvbG9yXHJcbiAqL1xuXG5mdW5jdGlvbiBnZXRCb3hIYW5kbGVQb3NpdGlvbihwcm9wcywgY29sb3IpIHtcbiAgdmFyIF9nZXRCb3hEaW1lbnNpb25zMiA9IGdldEJveERpbWVuc2lvbnMocHJvcHMpLFxuICAgICAgd2lkdGggPSBfZ2V0Qm94RGltZW5zaW9uczIud2lkdGgsXG4gICAgICBoZWlnaHQgPSBfZ2V0Qm94RGltZW5zaW9uczIuaGVpZ2h0LFxuICAgICAgcmFkaXVzID0gX2dldEJveERpbWVuc2lvbnMyLnJhZGl1cztcblxuICB2YXIgaHN2ID0gY29sb3IuaHN2O1xuICB2YXIgaGFuZGxlU3RhcnQgPSByYWRpdXM7XG4gIHZhciBoYW5kbGVSYW5nZVggPSB3aWR0aCAtIHJhZGl1cyAqIDI7XG4gIHZhciBoYW5kbGVSYW5nZVkgPSBoZWlnaHQgLSByYWRpdXMgKiAyO1xuICByZXR1cm4ge1xuICAgIHg6IGhhbmRsZVN0YXJ0ICsgaHN2LnMgLyAxMDAgKiBoYW5kbGVSYW5nZVgsXG4gICAgeTogaGFuZGxlU3RhcnQgKyAoaGFuZGxlUmFuZ2VZIC0gaHN2LnYgLyAxMDAgKiBoYW5kbGVSYW5nZVkpXG4gIH07XG59XG4vKipcclxuICogQGRlc2MgR2V0IHRoZSBncmFkaWVudCBzdG9wcyBmb3IgYSBib3hcclxuICogQHBhcmFtIHByb3BzIC0gYm94IHByb3BzXHJcbiAqIEBwYXJhbSBjb2xvclxyXG4gKi9cblxuZnVuY3Rpb24gZ2V0Qm94R3JhZGllbnRzKHByb3BzLCBjb2xvcikge1xuICB2YXIgaHVlID0gY29sb3IuaHVlO1xuICByZXR1cm4gWy8vIHNhdHVyYXRpb24gZ3JhZGllbnRcbiAgW1swLCAnI2ZmZiddLCBbMTAwLCBcImhzbChcIiArIGh1ZSArIFwiLDEwMCUsNTAlKVwiXV0sIC8vIGxpZ2h0bmVzcyBncmFkaWVudFxuICBbWzAsICdyZ2JhKDAsMCwwLDApJ10sIFsxMDAsICcjMDAwJ11dXTtcbn1cblxuLy8gS2VlcCB0cmFjayBvZiBodG1sIDxiYXNlPiBlbGVtZW50cyBmb3IgcmVzb2x2ZVN2Z1VybFxuLy8gZ2V0RWxlbWVudHNCeVRhZ05hbWUgcmV0dXJucyBhIGxpdmUgSFRNTENvbGxlY3Rpb24sIHdoaWNoIHN0YXlzIGluIHN5bmMgd2l0aCB0aGUgRE9NIHRyZWVcbi8vIFNvIGl0IG9ubHkgbmVlZHMgdG8gYmUgY2FsbGVkIG9uY2VcbnZhciBCQVNFX0VMRU1FTlRTO1xuLyoqXHJcbiAqIEBkZXNjIFJlc29sdmUgYW4gU1ZHIHJlZmVyZW5jZSBVUkxcclxuICogVGhpcyBpcyByZXF1aXJlZCB0byB3b3JrIGFyb3VuZCBob3cgU2FmYXJpIGFuZCBpT1Mgd2Vidmlld3MgaGFuZGxlIGdyYWRpZW50IFVSTFMgdW5kZXIgY2VydGFpbiBjb25kaXRpb25zXHJcbiAqIElmIGEgcGFnZSBpcyB1c2luZyBhIGNsaWVudC1zaWRlIHJvdXRpbmcgbGlicmFyeSB3aGljaCBtYWtlcyB1c2Ugb2YgdGhlIEhUTUwgPGJhc2U+IHRhZyxcclxuICogU2FmYXJpIHdvbid0IGJlIGFibGUgdG8gcmVuZGVyIFNWRyBncmFkaWVudHMgcHJvcGVybHkgKGFzIHRoZXkgYXJlIHJlZmVyZW5jZWQgYnkgVVJMcylcclxuICogTW9yZSBpbmZvIG9uIHRoZSBwcm9ibGVtOlxyXG4gKiBodHRwczovL3N0YWNrb3ZlcmZsb3cuY29tL3F1ZXN0aW9ucy8xOTc0MjgwNS9hbmd1bGFyLWFuZC1zdmctZmlsdGVycy8xOTc1MzQyNyMxOTc1MzQyN1xyXG4gKiBodHRwczovL2dpdGh1Yi5jb20vamFhbWVzL2lyby5qcy9pc3N1ZXMvMThcclxuICogaHR0cHM6Ly9naXRodWIuY29tL2phYW1lcy9pcm8uanMvaXNzdWVzLzQ1XHJcbiAqIGh0dHBzOi8vZ2l0aHViLmNvbS9qYWFtZXMvaXJvLmpzL3B1bGwvODlcclxuICogQHByb3BzIHVybCAtIFNWRyByZWZlcmVuY2UgVVJMXHJcbiAqL1xuXG5mdW5jdGlvbiByZXNvbHZlU3ZnVXJsKHVybCkge1xuICBpZiAoIUJBU0VfRUxFTUVOVFMpIHsgQkFTRV9FTEVNRU5UUyA9IGRvY3VtZW50LmdldEVsZW1lbnRzQnlUYWdOYW1lKCdiYXNlJyk7IH0gLy8gU25pZmYgdXNlcmFnZW50IHN0cmluZyB0byBjaGVjayBpZiB0aGUgdXNlciBpcyBydW5uaW5nIFNhZmFyaVxuXG4gIHZhciB1YSA9IHdpbmRvdy5uYXZpZ2F0b3IudXNlckFnZW50O1xuICB2YXIgaXNTYWZhcmkgPSAvXigoPyFjaHJvbWV8YW5kcm9pZCkuKSpzYWZhcmkvaS50ZXN0KHVhKTtcbiAgdmFyIGlzSW9zID0gL2lQaG9uZXxpUG9kfGlQYWQvaS50ZXN0KHVhKTtcbiAgdmFyIGxvY2F0aW9uID0gd2luZG93LmxvY2F0aW9uO1xuICByZXR1cm4gKGlzU2FmYXJpIHx8IGlzSW9zKSAmJiBCQVNFX0VMRU1FTlRTLmxlbmd0aCA+IDAgPyBsb2NhdGlvbi5wcm90b2NvbCArIFwiLy9cIiArIGxvY2F0aW9uLmhvc3QgKyBsb2NhdGlvbi5wYXRobmFtZSArIGxvY2F0aW9uLnNlYXJjaCArIHVybCA6IHVybDtcbn1cbi8qKlxyXG4gKiBAZGVzYyBHaXZlbiBhIHNwZWNpZmMgKHgsIHkpIHBvc2l0aW9uLCB0ZXN0IGlmIHRoZXJlJ3MgYSBoYW5kbGUgdGhlcmUgYW5kIHJldHVybiBpdHMgaW5kZXgsIGVsc2UgcmV0dXJuIG51bGwuXHJcbiAqICAgICAgIFRoaXMgaXMgdXNlZCBmb3IgY29tcG9uZW50cyBsaWtlIHRoZSBib3ggYW5kIHdoZWVsIHdoaWNoIHN1cHBvcnQgbXVsdGlwbGUgaGFuZGxlcyB3aGVuIG11bHRpY29sb3IgaXMgYWN0aXZlXHJcbiAqIEBwcm9wcyB4IC0gcG9pbnQgeCBwb3NpdGlvblxyXG4gKiBAcHJvcHMgeSAtIHBvaW50IHkgcG9zaXRpb25cclxuICogQHByb3BzIGhhbmRsZVBvc2l0aW9ucyAtIGFycmF5IG9mIHt4LCB5fSBjb29yZHMgZm9yIGVhY2ggaGFuZGxlXHJcbiAqL1xuXG5mdW5jdGlvbiBnZXRIYW5kbGVBdFBvaW50KHByb3BzLCB4LCB5LCBoYW5kbGVQb3NpdGlvbnMpIHtcbiAgZm9yICh2YXIgaSA9IDA7IGkgPCBoYW5kbGVQb3NpdGlvbnMubGVuZ3RoOyBpKyspIHtcbiAgICB2YXIgZFggPSBoYW5kbGVQb3NpdGlvbnNbaV0ueCAtIHg7XG4gICAgdmFyIGRZID0gaGFuZGxlUG9zaXRpb25zW2ldLnkgLSB5O1xuICAgIHZhciBkaXN0ID0gTWF0aC5zcXJ0KGRYICogZFggKyBkWSAqIGRZKTtcblxuICAgIGlmIChkaXN0IDwgcHJvcHMuaGFuZGxlUmFkaXVzKSB7XG4gICAgICByZXR1cm4gaTtcbiAgICB9XG4gIH1cblxuICByZXR1cm4gbnVsbDtcbn1cblxuZnVuY3Rpb24gY3NzQm9yZGVyU3R5bGVzKHByb3BzKSB7XG4gIHJldHVybiB7XG4gICAgYm94U2l6aW5nOiAnYm9yZGVyLWJveCcsXG4gICAgYm9yZGVyOiBwcm9wcy5ib3JkZXJXaWR0aCArIFwicHggc29saWQgXCIgKyBwcm9wcy5ib3JkZXJDb2xvclxuICB9O1xufVxuZnVuY3Rpb24gY3NzR3JhZGllbnQodHlwZSwgZGlyZWN0aW9uLCBzdG9wcykge1xuICByZXR1cm4gdHlwZSArIFwiLWdyYWRpZW50KFwiICsgZGlyZWN0aW9uICsgXCIsIFwiICsgc3RvcHMubWFwKGZ1bmN0aW9uIChfcmVmKSB7XG4gICAgdmFyIG8gPSBfcmVmWzBdLFxuICAgICAgICBjb2wgPSBfcmVmWzFdO1xuICAgIHJldHVybiBjb2wgKyBcIiBcIiArIG8gKyBcIiVcIjtcbiAgfSkuam9pbignLCcpICsgXCIpXCI7XG59XG5mdW5jdGlvbiBjc3NWYWx1ZSh2YWx1ZSkge1xuICBpZiAodHlwZW9mIHZhbHVlID09PSAnc3RyaW5nJykgeyByZXR1cm4gdmFsdWU7IH1cbiAgcmV0dXJuIHZhbHVlICsgXCJweFwiO1xufVxuXG52YXIgaXJvQ29sb3JQaWNrZXJPcHRpb25EZWZhdWx0cyA9IHtcbiAgd2lkdGg6IDMwMCxcbiAgaGVpZ2h0OiAzMDAsXG4gIGNvbG9yOiAnI2ZmZicsXG4gIGNvbG9yczogW10sXG4gIHBhZGRpbmc6IDYsXG4gIGxheW91dERpcmVjdGlvbjogJ3ZlcnRpY2FsJyxcbiAgYm9yZGVyQ29sb3I6ICcjZmZmJyxcbiAgYm9yZGVyV2lkdGg6IDAsXG4gIGhhbmRsZVJhZGl1czogOCxcbiAgYWN0aXZlSGFuZGxlUmFkaXVzOiBudWxsLFxuICBoYW5kbGVTdmc6IG51bGwsXG4gIGhhbmRsZVByb3BzOiB7XG4gICAgeDogMCxcbiAgICB5OiAwXG4gIH0sXG4gIHdoZWVsTGlnaHRuZXNzOiB0cnVlLFxuICB3aGVlbEFuZ2xlOiAwLFxuICB3aGVlbERpcmVjdGlvbjogJ2FudGljbG9ja3dpc2UnLFxuICBzbGlkZXJTaXplOiBudWxsLFxuICBzbGlkZXJNYXJnaW46IDEyLFxuICBib3hIZWlnaHQ6IG51bGxcbn07XG5cbnZhciBTRUNPTkRBUllfRVZFTlRTID0gW1wibW91c2Vtb3ZlXCIgLyogTW91c2VNb3ZlICovLCBcInRvdWNobW92ZVwiIC8qIFRvdWNoTW92ZSAqLywgXCJtb3VzZXVwXCIgLyogTW91c2VVcCAqLywgXCJ0b3VjaGVuZFwiIC8qIFRvdWNoRW5kICovXTtcclxuLy8gQmFzZSBjb21wb25lbnQgY2xhc3MgZm9yIGlybyBVSSBjb21wb25lbnRzXHJcbi8vIFRoaXMgZXh0ZW5kcyB0aGUgUHJlYWN0IGNvbXBvbmVudCBjbGFzcyB0byBhbGxvdyB0aGVtIHRvIHJlYWN0IHRvIG1vdXNlL3RvdWNoIGlucHV0IGV2ZW50cyBieSB0aGVtc2VsdmVzXHJcbnZhciBJcm9Db21wb25lbnRXcmFwcGVyID0gLypAX19QVVJFX18qLyhmdW5jdGlvbiAoQ29tcG9uZW50KSB7XG4gICAgZnVuY3Rpb24gSXJvQ29tcG9uZW50V3JhcHBlcihwcm9wcykge1xyXG4gICAgICAgIENvbXBvbmVudC5jYWxsKHRoaXMsIHByb3BzKTtcclxuICAgICAgICAvLyBHZW5lcmF0ZSB1bmlxdWUgSUQgZm9yIHRoZSBjb21wb25lbnRcclxuICAgICAgICAvLyBUaGlzIGNhbiBiZSB1c2VkIHRvIGdlbmVyYXRlIHVuaXF1ZSBJRHMgZm9yIGdyYWRpZW50cywgZXRjXHJcbiAgICAgICAgdGhpcy51aWQgPSAoTWF0aC5yYW5kb20oKSArIDEpLnRvU3RyaW5nKDM2KS5zdWJzdHJpbmcoNSk7XHJcbiAgICB9XG5cbiAgICBpZiAoIENvbXBvbmVudCApIElyb0NvbXBvbmVudFdyYXBwZXIuX19wcm90b19fID0gQ29tcG9uZW50O1xuICAgIElyb0NvbXBvbmVudFdyYXBwZXIucHJvdG90eXBlID0gT2JqZWN0LmNyZWF0ZSggQ29tcG9uZW50ICYmIENvbXBvbmVudC5wcm90b3R5cGUgKTtcbiAgICBJcm9Db21wb25lbnRXcmFwcGVyLnByb3RvdHlwZS5jb25zdHJ1Y3RvciA9IElyb0NvbXBvbmVudFdyYXBwZXI7XHJcbiAgICBJcm9Db21wb25lbnRXcmFwcGVyLnByb3RvdHlwZS5yZW5kZXIgPSBmdW5jdGlvbiByZW5kZXIgKHByb3BzKSB7XHJcbiAgICAgICAgdmFyIGV2ZW50SGFuZGxlciA9IHRoaXMuaGFuZGxlRXZlbnQuYmluZCh0aGlzKTtcclxuICAgICAgICB2YXIgcm9vdFByb3BzID0ge1xyXG4gICAgICAgICAgICBvbk1vdXNlRG93bjogZXZlbnRIYW5kbGVyLFxyXG4gICAgICAgICAgICAvLyBodHRwczovL2dpdGh1Yi5jb20vamFhbWVzL2lyby5qcy9pc3N1ZXMvMTI2XHJcbiAgICAgICAgICAgIC8vIGh0dHBzOi8vZ2l0aHViLmNvbS9wcmVhY3Rqcy9wcmVhY3QvaXNzdWVzLzIxMTMjaXNzdWVjb21tZW50LTU1MzQwODc2N1xyXG4gICAgICAgICAgICBvbnRvdWNoc3RhcnQ6IGV2ZW50SGFuZGxlcixcclxuICAgICAgICB9O1xyXG4gICAgICAgIHZhciBpc0hvcml6b250YWwgPSBwcm9wcy5sYXlvdXREaXJlY3Rpb24gPT09ICdob3Jpem9udGFsJztcclxuICAgICAgICB2YXIgbWFyZ2luID0gcHJvcHMubWFyZ2luID09PSBudWxsID8gcHJvcHMuc2xpZGVyTWFyZ2luIDogcHJvcHMubWFyZ2luO1xyXG4gICAgICAgIHZhciByb290U3R5bGVzID0ge1xyXG4gICAgICAgICAgICBvdmVyZmxvdzogJ3Zpc2libGUnLFxyXG4gICAgICAgICAgICBkaXNwbGF5OiBpc0hvcml6b250YWwgPyAnaW5saW5lLWJsb2NrJyA6ICdibG9jaydcclxuICAgICAgICB9O1xyXG4gICAgICAgIC8vIGZpcnN0IGNvbXBvbmVudCBzaG91bGRuJ3QgaGF2ZSBhbnkgbWFyZ2luXHJcbiAgICAgICAgaWYgKHByb3BzLmluZGV4ID4gMCkge1xyXG4gICAgICAgICAgICByb290U3R5bGVzW2lzSG9yaXpvbnRhbCA/ICdtYXJnaW5MZWZ0JyA6ICdtYXJnaW5Ub3AnXSA9IG1hcmdpbjtcclxuICAgICAgICB9XHJcbiAgICAgICAgcmV0dXJuIChoKGQsIG51bGwsIHByb3BzLmNoaWxkcmVuKHRoaXMudWlkLCByb290UHJvcHMsIHJvb3RTdHlsZXMpKSk7XHJcbiAgICB9O1xyXG4gICAgLy8gTW9yZSBpbmZvIG9uIGhhbmRsZUV2ZW50OlxyXG4gICAgLy8gaHR0cHM6Ly9tZWRpdW0uY29tL0BXZWJSZWZsZWN0aW9uL2RvbS1oYW5kbGVldmVudC1hLWNyb3NzLXBsYXRmb3JtLXN0YW5kYXJkLXNpbmNlLXllYXItMjAwMC01YmYxNzI4N2ZkMzhcclxuICAgIC8vIFRMO0RSIHRoaXMgbGV0cyB1cyBoYXZlIGEgc2luZ2xlIHBvaW50IG9mIGVudHJ5IGZvciBtdWx0aXBsZSBldmVudHMsIGFuZCB3ZSBjYW4gYXZvaWQgY2FsbGJhY2svYmluZGluZyBoZWxsXHJcbiAgICBJcm9Db21wb25lbnRXcmFwcGVyLnByb3RvdHlwZS5oYW5kbGVFdmVudCA9IGZ1bmN0aW9uIGhhbmRsZUV2ZW50IChlKSB7XG4gICAgICAgIHZhciB0aGlzJDEgPSB0aGlzO1xuXHJcbiAgICAgICAgdmFyIGlucHV0SGFuZGxlciA9IHRoaXMucHJvcHMub25JbnB1dDtcclxuICAgICAgICAvLyBHZXQgdGhlIHNjcmVlbiBwb3NpdGlvbiBvZiB0aGUgY29tcG9uZW50XHJcbiAgICAgICAgdmFyIGJvdW5kcyA9IHRoaXMuYmFzZS5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKTtcclxuICAgICAgICAvLyBQcmVmZWN0IGRlZmF1bHQgYnJvd3NlciBhY3Rpb25cclxuICAgICAgICBlLnByZXZlbnREZWZhdWx0KCk7XHJcbiAgICAgICAgLy8gRGV0ZWN0IGlmIHRoZSBldmVudCBpcyBhIHRvdWNoIGV2ZW50IGJ5IGNoZWNraW5nIGlmIGl0IGhhcyB0aGUgYHRvdWNoZXNgIHByb3BlcnR5XHJcbiAgICAgICAgLy8gSWYgaXQgaXMgYSB0b3VjaCBldmVudCwgdXNlIHRoZSBmaXJzdCB0b3VjaCBpbnB1dFxyXG4gICAgICAgIHZhciBwb2ludCA9IGUudG91Y2hlcyA/IGUuY2hhbmdlZFRvdWNoZXNbMF0gOiBlO1xyXG4gICAgICAgIHZhciB4ID0gcG9pbnQuY2xpZW50WCAtIGJvdW5kcy5sZWZ0O1xyXG4gICAgICAgIHZhciB5ID0gcG9pbnQuY2xpZW50WSAtIGJvdW5kcy50b3A7XHJcbiAgICAgICAgc3dpdGNoIChlLnR5cGUpIHtcclxuICAgICAgICAgICAgY2FzZSBcIm1vdXNlZG93blwiIC8qIE1vdXNlRG93biAqLzpcclxuICAgICAgICAgICAgY2FzZSBcInRvdWNoc3RhcnRcIiAvKiBUb3VjaFN0YXJ0ICovOlxyXG4gICAgICAgICAgICAgICAgdmFyIHJlc3VsdCA9IGlucHV0SGFuZGxlcih4LCB5LCAwIC8qIFN0YXJ0ICovKTtcclxuICAgICAgICAgICAgICAgIGlmIChyZXN1bHQgIT09IGZhbHNlKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgU0VDT05EQVJZX0VWRU5UUy5mb3JFYWNoKGZ1bmN0aW9uIChldmVudCkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBkb2N1bWVudC5hZGRFdmVudExpc3RlbmVyKGV2ZW50LCB0aGlzJDEsIHsgcGFzc2l2ZTogZmFsc2UgfSk7XHJcbiAgICAgICAgICAgICAgICAgICAgfSk7XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICBicmVhaztcclxuICAgICAgICAgICAgY2FzZSBcIm1vdXNlbW92ZVwiIC8qIE1vdXNlTW92ZSAqLzpcclxuICAgICAgICAgICAgY2FzZSBcInRvdWNobW92ZVwiIC8qIFRvdWNoTW92ZSAqLzpcclxuICAgICAgICAgICAgICAgIGlucHV0SGFuZGxlcih4LCB5LCAxIC8qIE1vdmUgKi8pO1xyXG4gICAgICAgICAgICAgICAgYnJlYWs7XHJcbiAgICAgICAgICAgIGNhc2UgXCJtb3VzZXVwXCIgLyogTW91c2VVcCAqLzpcclxuICAgICAgICAgICAgY2FzZSBcInRvdWNoZW5kXCIgLyogVG91Y2hFbmQgKi86XHJcbiAgICAgICAgICAgICAgICBpbnB1dEhhbmRsZXIoeCwgeSwgMiAvKiBFbmQgKi8pO1xyXG4gICAgICAgICAgICAgICAgU0VDT05EQVJZX0VWRU5UUy5mb3JFYWNoKGZ1bmN0aW9uIChldmVudCkge1xyXG4gICAgICAgICAgICAgICAgICAgIGRvY3VtZW50LnJlbW92ZUV2ZW50TGlzdGVuZXIoZXZlbnQsIHRoaXMkMSwgeyBwYXNzaXZlOiBmYWxzZSB9KTtcclxuICAgICAgICAgICAgICAgIH0pO1xyXG4gICAgICAgICAgICAgICAgYnJlYWs7XHJcbiAgICAgICAgfVxyXG4gICAgfTtcblxuICAgIHJldHVybiBJcm9Db21wb25lbnRXcmFwcGVyO1xufShtKSk7XG5cbmZ1bmN0aW9uIElyb0hhbmRsZShwcm9wcykge1xyXG4gICAgdmFyIHJhZGl1cyA9IHByb3BzLnI7XHJcbiAgICB2YXIgdXJsID0gcHJvcHMudXJsO1xyXG4gICAgdmFyIGN4ID0gcmFkaXVzO1xyXG4gICAgdmFyIGN5ID0gcmFkaXVzO1xyXG4gICAgcmV0dXJuIChoKFwic3ZnXCIsIHsgY2xhc3NOYW1lOiAoXCJJcm9IYW5kbGUgSXJvSGFuZGxlLS1cIiArIChwcm9wcy5pbmRleCkgKyBcIiBcIiArIChwcm9wcy5pc0FjdGl2ZSA/ICdJcm9IYW5kbGUtLWlzQWN0aXZlJyA6ICcnKSksIHN0eWxlOiB7XHJcbiAgICAgICAgICAgIHRyYW5zZm9ybTogKFwidHJhbnNsYXRlKFwiICsgKGNzc1ZhbHVlKHByb3BzLngpKSArIFwiLCBcIiArIChjc3NWYWx1ZShwcm9wcy55KSkgKyBcIilcIiksXHJcbiAgICAgICAgICAgIHdpbGxDaGFuZ2U6ICd0cmFuc2Zvcm0nLFxyXG4gICAgICAgICAgICB0b3A6IGNzc1ZhbHVlKC1yYWRpdXMpLFxyXG4gICAgICAgICAgICBsZWZ0OiBjc3NWYWx1ZSgtcmFkaXVzKSxcclxuICAgICAgICAgICAgd2lkdGg6IGNzc1ZhbHVlKHJhZGl1cyAqIDIpLFxyXG4gICAgICAgICAgICBoZWlnaHQ6IGNzc1ZhbHVlKHJhZGl1cyAqIDIpLFxyXG4gICAgICAgICAgICBwb3NpdGlvbjogJ2Fic29sdXRlJyxcclxuICAgICAgICAgICAgb3ZlcmZsb3c6ICd2aXNpYmxlJ1xyXG4gICAgICAgIH0gfSxcclxuICAgICAgICB1cmwgJiYgKGgoXCJ1c2VcIiwgT2JqZWN0LmFzc2lnbih7IHhsaW5rSHJlZjogcmVzb2x2ZVN2Z1VybCh1cmwpIH0sIHByb3BzLnByb3BzKSkpLFxyXG4gICAgICAgICF1cmwgJiYgKGgoXCJjaXJjbGVcIiwgeyBjeDogY3gsIGN5OiBjeSwgcjogcmFkaXVzLCBmaWxsOiBcIm5vbmVcIiwgXCJzdHJva2Utd2lkdGhcIjogMiwgc3Ryb2tlOiBcIiMwMDBcIiB9KSksXHJcbiAgICAgICAgIXVybCAmJiAoaChcImNpcmNsZVwiLCB7IGN4OiBjeCwgY3k6IGN5LCByOiByYWRpdXMgLSAyLCBmaWxsOiBwcm9wcy5maWxsLCBcInN0cm9rZS13aWR0aFwiOiAyLCBzdHJva2U6IFwiI2ZmZlwiIH0pKSkpO1xyXG59XHJcbklyb0hhbmRsZS5kZWZhdWx0UHJvcHMgPSB7XHJcbiAgICBmaWxsOiAnbm9uZScsXHJcbiAgICB4OiAwLFxyXG4gICAgeTogMCxcclxuICAgIHI6IDgsXHJcbiAgICB1cmw6IG51bGwsXHJcbiAgICBwcm9wczogeyB4OiAwLCB5OiAwIH1cclxufTtcblxuZnVuY3Rpb24gSXJvU2xpZGVyKHByb3BzKSB7XHJcbiAgICB2YXIgYWN0aXZlSW5kZXggPSBwcm9wcy5hY3RpdmVJbmRleDtcclxuICAgIHZhciBhY3RpdmVDb2xvciA9IChhY3RpdmVJbmRleCAhPT0gdW5kZWZpbmVkICYmIGFjdGl2ZUluZGV4IDwgcHJvcHMuY29sb3JzLmxlbmd0aCkgPyBwcm9wcy5jb2xvcnNbYWN0aXZlSW5kZXhdIDogcHJvcHMuY29sb3I7XHJcbiAgICB2YXIgcmVmID0gZ2V0U2xpZGVyRGltZW5zaW9ucyhwcm9wcyk7XG4gICAgdmFyIHdpZHRoID0gcmVmLndpZHRoO1xuICAgIHZhciBoZWlnaHQgPSByZWYuaGVpZ2h0O1xuICAgIHZhciByYWRpdXMgPSByZWYucmFkaXVzO1xyXG4gICAgdmFyIGhhbmRsZVBvcyA9IGdldFNsaWRlckhhbmRsZVBvc2l0aW9uKHByb3BzLCBhY3RpdmVDb2xvcik7XHJcbiAgICB2YXIgZ3JhZGllbnQgPSBnZXRTbGlkZXJHcmFkaWVudChwcm9wcywgYWN0aXZlQ29sb3IpO1xyXG4gICAgZnVuY3Rpb24gaGFuZGxlSW5wdXQoeCwgeSwgdHlwZSkge1xyXG4gICAgICAgIHZhciB2YWx1ZSA9IGdldFNsaWRlclZhbHVlRnJvbUlucHV0KHByb3BzLCB4LCB5KTtcclxuICAgICAgICBwcm9wcy5wYXJlbnQuaW5wdXRBY3RpdmUgPSB0cnVlO1xyXG4gICAgICAgIGFjdGl2ZUNvbG9yW3Byb3BzLnNsaWRlclR5cGVdID0gdmFsdWU7XHJcbiAgICAgICAgcHJvcHMub25JbnB1dCh0eXBlLCBwcm9wcy5pZCk7XHJcbiAgICB9XHJcbiAgICByZXR1cm4gKGgoSXJvQ29tcG9uZW50V3JhcHBlciwgT2JqZWN0LmFzc2lnbih7fSwgcHJvcHMsIHsgb25JbnB1dDogaGFuZGxlSW5wdXQgfSksIGZ1bmN0aW9uICh1aWQsIHJvb3RQcm9wcywgcm9vdFN0eWxlcykgeyByZXR1cm4gKGgoXCJkaXZcIiwgT2JqZWN0LmFzc2lnbih7fSwgcm9vdFByb3BzLCB7IGNsYXNzTmFtZTogXCJJcm9TbGlkZXJcIiwgc3R5bGU6IE9iamVjdC5hc3NpZ24oe30sIHtwb3NpdGlvbjogJ3JlbGF0aXZlJyxcclxuICAgICAgICAgICAgd2lkdGg6IGNzc1ZhbHVlKHdpZHRoKSxcclxuICAgICAgICAgICAgaGVpZ2h0OiBjc3NWYWx1ZShoZWlnaHQpLFxyXG4gICAgICAgICAgICBib3JkZXJSYWRpdXM6IGNzc1ZhbHVlKHJhZGl1cyksXHJcbiAgICAgICAgICAgIC8vIGNoZWNrZXJlZCBiZyB0byByZXByZXNlbnQgYWxwaGFcclxuICAgICAgICAgICAgYmFja2dyb3VuZDogXCJjb25pYy1ncmFkaWVudCgjY2NjIDI1JSwgI2ZmZiAwIDUwJSwgI2NjYyAwIDc1JSwgI2ZmZiAwKVwiLFxyXG4gICAgICAgICAgICBiYWNrZ3JvdW5kU2l6ZTogJzhweCA4cHgnfSxcclxuICAgICAgICAgICAgcm9vdFN0eWxlcykgfSksXHJcbiAgICAgICAgaChcImRpdlwiLCB7IGNsYXNzTmFtZTogXCJJcm9TbGlkZXJHcmFkaWVudFwiLCBzdHlsZTogT2JqZWN0LmFzc2lnbih7fSwge3Bvc2l0aW9uOiAnYWJzb2x1dGUnLFxyXG4gICAgICAgICAgICAgICAgdG9wOiAwLFxyXG4gICAgICAgICAgICAgICAgbGVmdDogMCxcclxuICAgICAgICAgICAgICAgIHdpZHRoOiBcIjEwMCVcIixcclxuICAgICAgICAgICAgICAgIGhlaWdodDogXCIxMDAlXCIsXHJcbiAgICAgICAgICAgICAgICBib3JkZXJSYWRpdXM6IGNzc1ZhbHVlKHJhZGl1cyksXHJcbiAgICAgICAgICAgICAgICBiYWNrZ3JvdW5kOiBjc3NHcmFkaWVudCgnbGluZWFyJywgcHJvcHMubGF5b3V0RGlyZWN0aW9uID09PSAnaG9yaXpvbnRhbCcgPyAndG8gdG9wJyA6ICd0byByaWdodCcsIGdyYWRpZW50KX0sXHJcbiAgICAgICAgICAgICAgICBjc3NCb3JkZXJTdHlsZXMocHJvcHMpKSB9KSxcclxuICAgICAgICBoKElyb0hhbmRsZSwgeyBpc0FjdGl2ZTogdHJ1ZSwgaW5kZXg6IGFjdGl2ZUNvbG9yLmluZGV4LCByOiBwcm9wcy5oYW5kbGVSYWRpdXMsIHVybDogcHJvcHMuaGFuZGxlU3ZnLCBwcm9wczogcHJvcHMuaGFuZGxlUHJvcHMsIHg6IGhhbmRsZVBvcy54LCB5OiBoYW5kbGVQb3MueSB9KSkpOyB9KSk7XHJcbn1cclxuSXJvU2xpZGVyLmRlZmF1bHRQcm9wcyA9IE9iamVjdC5hc3NpZ24oe30sIHNsaWRlckRlZmF1bHRPcHRpb25zKTtcblxuZnVuY3Rpb24gSXJvQm94KHByb3BzKSB7XHJcbiAgICB2YXIgcmVmID0gZ2V0Qm94RGltZW5zaW9ucyhwcm9wcyk7XG4gICAgdmFyIHdpZHRoID0gcmVmLndpZHRoO1xuICAgIHZhciBoZWlnaHQgPSByZWYuaGVpZ2h0O1xuICAgIHZhciByYWRpdXMgPSByZWYucmFkaXVzO1xyXG4gICAgdmFyIGNvbG9ycyA9IHByb3BzLmNvbG9ycztcclxuICAgIHZhciBjb2xvclBpY2tlciA9IHByb3BzLnBhcmVudDtcclxuICAgIHZhciBhY3RpdmVJbmRleCA9IHByb3BzLmFjdGl2ZUluZGV4O1xyXG4gICAgdmFyIGFjdGl2ZUNvbG9yID0gKGFjdGl2ZUluZGV4ICE9PSB1bmRlZmluZWQgJiYgYWN0aXZlSW5kZXggPCBwcm9wcy5jb2xvcnMubGVuZ3RoKSA/IHByb3BzLmNvbG9yc1thY3RpdmVJbmRleF0gOiBwcm9wcy5jb2xvcjtcclxuICAgIHZhciBncmFkaWVudHMgPSBnZXRCb3hHcmFkaWVudHMocHJvcHMsIGFjdGl2ZUNvbG9yKTtcclxuICAgIHZhciBoYW5kbGVQb3NpdGlvbnMgPSBjb2xvcnMubWFwKGZ1bmN0aW9uIChjb2xvcikgeyByZXR1cm4gZ2V0Qm94SGFuZGxlUG9zaXRpb24ocHJvcHMsIGNvbG9yKTsgfSk7XHJcbiAgICBmdW5jdGlvbiBoYW5kbGVJbnB1dCh4LCB5LCBpbnB1dFR5cGUpIHtcclxuICAgICAgICBpZiAoaW5wdXRUeXBlID09PSAwIC8qIFN0YXJ0ICovKSB7XHJcbiAgICAgICAgICAgIC8vIGdldEhhbmRsZUF0UG9pbnQoKSByZXR1cm5zIHRoZSBpbmRleCBmb3IgdGhlIGhhbmRsZSBpZiB0aGUgcG9pbnQgJ2hpdHMnIGl0LCBvciBudWxsIG90aGVyd2lzZVxyXG4gICAgICAgICAgICB2YXIgYWN0aXZlSGFuZGxlID0gZ2V0SGFuZGxlQXRQb2ludChwcm9wcywgeCwgeSwgaGFuZGxlUG9zaXRpb25zKTtcclxuICAgICAgICAgICAgLy8gSWYgdGhlIGlucHV0IGhpdCBhIGhhbmRsZSwgc2V0IGl0IGFzIHRoZSBhY3RpdmUgaGFuZGxlLCBidXQgZG9uJ3QgdXBkYXRlIHRoZSBjb2xvclxyXG4gICAgICAgICAgICBpZiAoYWN0aXZlSGFuZGxlICE9PSBudWxsKSB7XHJcbiAgICAgICAgICAgICAgICBjb2xvclBpY2tlci5zZXRBY3RpdmVDb2xvcihhY3RpdmVIYW5kbGUpO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIC8vIElmIHRoZSBpbnB1dCBkaWRuJ3QgaGl0IGEgaGFuZGxlLCBzZXQgdGhlIGN1cnJlbnRseSBhY3RpdmUgaGFuZGxlIHRvIHRoYXQgcG9zaXRpb25cclxuICAgICAgICAgICAgZWxzZSB7XHJcbiAgICAgICAgICAgICAgICBjb2xvclBpY2tlci5pbnB1dEFjdGl2ZSA9IHRydWU7XHJcbiAgICAgICAgICAgICAgICBhY3RpdmVDb2xvci5oc3YgPSBnZXRCb3hWYWx1ZUZyb21JbnB1dChwcm9wcywgeCwgeSk7XHJcbiAgICAgICAgICAgICAgICBwcm9wcy5vbklucHV0KGlucHV0VHlwZSwgcHJvcHMuaWQpO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG4gICAgICAgIC8vIG1vdmUgaXMgZmlyZWQgd2hlbiB0aGUgdXNlciBoYXMgc3RhcnRlZCBkcmFnZ2luZ1xyXG4gICAgICAgIGVsc2UgaWYgKGlucHV0VHlwZSA9PT0gMSAvKiBNb3ZlICovKSB7XHJcbiAgICAgICAgICAgIGNvbG9yUGlja2VyLmlucHV0QWN0aXZlID0gdHJ1ZTtcclxuICAgICAgICAgICAgYWN0aXZlQ29sb3IuaHN2ID0gZ2V0Qm94VmFsdWVGcm9tSW5wdXQocHJvcHMsIHgsIHkpO1xyXG4gICAgICAgIH1cclxuICAgICAgICAvLyBsZXQgdGhlIGNvbG9yIHBpY2tlciBmaXJlIGlucHV0OnN0YXJ0LCBpbnB1dDptb3ZlIG9yIGlucHV0OmVuZCBldmVudHNcclxuICAgICAgICBwcm9wcy5vbklucHV0KGlucHV0VHlwZSwgcHJvcHMuaWQpO1xyXG4gICAgfVxyXG4gICAgcmV0dXJuIChoKElyb0NvbXBvbmVudFdyYXBwZXIsIE9iamVjdC5hc3NpZ24oe30sIHByb3BzLCB7IG9uSW5wdXQ6IGhhbmRsZUlucHV0IH0pLCBmdW5jdGlvbiAodWlkLCByb290UHJvcHMsIHJvb3RTdHlsZXMpIHsgcmV0dXJuIChoKFwiZGl2XCIsIE9iamVjdC5hc3NpZ24oe30sIHJvb3RQcm9wcywgeyBjbGFzc05hbWU6IFwiSXJvQm94XCIsIHN0eWxlOiBPYmplY3QuYXNzaWduKHt9LCB7d2lkdGg6IGNzc1ZhbHVlKHdpZHRoKSxcclxuICAgICAgICAgICAgaGVpZ2h0OiBjc3NWYWx1ZShoZWlnaHQpLFxyXG4gICAgICAgICAgICBwb3NpdGlvbjogJ3JlbGF0aXZlJ30sXHJcbiAgICAgICAgICAgIHJvb3RTdHlsZXMpIH0pLFxyXG4gICAgICAgIGgoXCJkaXZcIiwgeyBjbGFzc05hbWU6IFwiSXJvQm94XCIsIHN0eWxlOiBPYmplY3QuYXNzaWduKHt9LCB7d2lkdGg6ICcxMDAlJyxcclxuICAgICAgICAgICAgICAgIGhlaWdodDogJzEwMCUnLFxyXG4gICAgICAgICAgICAgICAgYm9yZGVyUmFkaXVzOiBjc3NWYWx1ZShyYWRpdXMpfSxcclxuICAgICAgICAgICAgICAgIGNzc0JvcmRlclN0eWxlcyhwcm9wcyksXHJcbiAgICAgICAgICAgICAgICB7YmFja2dyb3VuZDogY3NzR3JhZGllbnQoJ2xpbmVhcicsICd0byBib3R0b20nLCBncmFkaWVudHNbMV0pXHJcbiAgICAgICAgICAgICAgICAgICAgKyAnLCcgK1xyXG4gICAgICAgICAgICAgICAgICAgIGNzc0dyYWRpZW50KCdsaW5lYXInLCAndG8gcmlnaHQnLCBncmFkaWVudHNbMF0pfSkgfSksXHJcbiAgICAgICAgY29sb3JzLmZpbHRlcihmdW5jdGlvbiAoY29sb3IpIHsgcmV0dXJuIGNvbG9yICE9PSBhY3RpdmVDb2xvcjsgfSkubWFwKGZ1bmN0aW9uIChjb2xvcikgeyByZXR1cm4gKGgoSXJvSGFuZGxlLCB7IGlzQWN0aXZlOiBmYWxzZSwgaW5kZXg6IGNvbG9yLmluZGV4LCBmaWxsOiBjb2xvci5oc2xTdHJpbmcsIHI6IHByb3BzLmhhbmRsZVJhZGl1cywgdXJsOiBwcm9wcy5oYW5kbGVTdmcsIHByb3BzOiBwcm9wcy5oYW5kbGVQcm9wcywgeDogaGFuZGxlUG9zaXRpb25zW2NvbG9yLmluZGV4XS54LCB5OiBoYW5kbGVQb3NpdGlvbnNbY29sb3IuaW5kZXhdLnkgfSkpOyB9KSxcclxuICAgICAgICBoKElyb0hhbmRsZSwgeyBpc0FjdGl2ZTogdHJ1ZSwgaW5kZXg6IGFjdGl2ZUNvbG9yLmluZGV4LCBmaWxsOiBhY3RpdmVDb2xvci5oc2xTdHJpbmcsIHI6IHByb3BzLmFjdGl2ZUhhbmRsZVJhZGl1cyB8fCBwcm9wcy5oYW5kbGVSYWRpdXMsIHVybDogcHJvcHMuaGFuZGxlU3ZnLCBwcm9wczogcHJvcHMuaGFuZGxlUHJvcHMsIHg6IGhhbmRsZVBvc2l0aW9uc1thY3RpdmVDb2xvci5pbmRleF0ueCwgeTogaGFuZGxlUG9zaXRpb25zW2FjdGl2ZUNvbG9yLmluZGV4XS55IH0pKSk7IH0pKTtcclxufVxuXG52YXIgSFVFX0dSQURJRU5UX0NMT0NLV0lTRSA9ICdjb25pYy1ncmFkaWVudChyZWQsIHllbGxvdywgbGltZSwgYXF1YSwgYmx1ZSwgbWFnZW50YSwgcmVkKSc7XHJcbnZhciBIVUVfR1JBRElFTlRfQU5USUNMT0NLV0lTRSA9ICdjb25pYy1ncmFkaWVudChyZWQsIG1hZ2VudGEsIGJsdWUsIGFxdWEsIGxpbWUsIHllbGxvdywgcmVkKSc7XHJcbmZ1bmN0aW9uIElyb1doZWVsKHByb3BzKSB7XHJcbiAgICB2YXIgcmVmID0gZ2V0V2hlZWxEaW1lbnNpb25zKHByb3BzKTtcbiAgICB2YXIgd2lkdGggPSByZWYud2lkdGg7XG4gICAgdmFyIGNvbG9ycyA9IHByb3BzLmNvbG9ycztcbiAgICB2YXIgYm9yZGVyV2lkdGggPSBwcm9wcy5ib3JkZXJXaWR0aDtcclxuICAgIHZhciBjb2xvclBpY2tlciA9IHByb3BzLnBhcmVudDtcclxuICAgIHZhciBhY3RpdmVDb2xvciA9IHByb3BzLmNvbG9yO1xyXG4gICAgdmFyIGhzdiA9IGFjdGl2ZUNvbG9yLmhzdjtcclxuICAgIHZhciBoYW5kbGVQb3NpdGlvbnMgPSBjb2xvcnMubWFwKGZ1bmN0aW9uIChjb2xvcikgeyByZXR1cm4gZ2V0V2hlZWxIYW5kbGVQb3NpdGlvbihwcm9wcywgY29sb3IpOyB9KTtcclxuICAgIHZhciBjaXJjbGVTdHlsZXMgPSB7XHJcbiAgICAgICAgcG9zaXRpb246ICdhYnNvbHV0ZScsXHJcbiAgICAgICAgdG9wOiAwLFxyXG4gICAgICAgIGxlZnQ6IDAsXHJcbiAgICAgICAgd2lkdGg6ICcxMDAlJyxcclxuICAgICAgICBoZWlnaHQ6ICcxMDAlJyxcclxuICAgICAgICBib3JkZXJSYWRpdXM6ICc1MCUnLFxyXG4gICAgICAgIGJveFNpemluZzogJ2JvcmRlci1ib3gnXHJcbiAgICB9O1xyXG4gICAgZnVuY3Rpb24gaGFuZGxlSW5wdXQoeCwgeSwgaW5wdXRUeXBlKSB7XHJcbiAgICAgICAgaWYgKGlucHV0VHlwZSA9PT0gMCAvKiBTdGFydCAqLykge1xyXG4gICAgICAgICAgICAvLyBpbnB1dCBoaXRib3ggaXMgYSBzcXVhcmUsIFxyXG4gICAgICAgICAgICAvLyBzbyB3ZSB3YW50IHRvIGlnbm9yZSBhbnkgaW5pdGlhbCBjbGlja3Mgb3V0c2lkZSB0aGUgY2lyY3VsYXIgc2hhcGUgb2YgdGhlIHdoZWVsXHJcbiAgICAgICAgICAgIGlmICghaXNJbnB1dEluc2lkZVdoZWVsKHByb3BzLCB4LCB5KSkge1xyXG4gICAgICAgICAgICAgICAgLy8gcmV0dXJuaW5nIGZhbHNlIHdpbGwgY2Vhc2UgYWxsIGV2ZW50IGhhbmRsaW5nIGZvciB0aGlzIGludGVyYWN0aW9uXHJcbiAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgLy8gZ2V0SGFuZGxlQXRQb2ludCgpIHJldHVybnMgdGhlIGluZGV4IGZvciB0aGUgaGFuZGxlIGlmIHRoZSBwb2ludCAnaGl0cycgaXQsIG9yIG51bGwgb3RoZXJ3aXNlXHJcbiAgICAgICAgICAgIHZhciBhY3RpdmVIYW5kbGUgPSBnZXRIYW5kbGVBdFBvaW50KHByb3BzLCB4LCB5LCBoYW5kbGVQb3NpdGlvbnMpO1xyXG4gICAgICAgICAgICAvLyBJZiB0aGUgaW5wdXQgaGl0IGEgaGFuZGxlLCBzZXQgaXQgYXMgdGhlIGFjdGl2ZSBoYW5kbGUsIGJ1dCBkb24ndCB1cGRhdGUgdGhlIGNvbG9yXHJcbiAgICAgICAgICAgIGlmIChhY3RpdmVIYW5kbGUgIT09IG51bGwpIHtcclxuICAgICAgICAgICAgICAgIGNvbG9yUGlja2VyLnNldEFjdGl2ZUNvbG9yKGFjdGl2ZUhhbmRsZSk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgLy8gSWYgdGhlIGlucHV0IGRpZG4ndCBoaXQgYSBoYW5kbGUsIHNldCB0aGUgY3VycmVudGx5IGFjdGl2ZSBoYW5kbGUgdG8gdGhhdCBwb3NpdGlvblxyXG4gICAgICAgICAgICBlbHNlIHtcclxuICAgICAgICAgICAgICAgIGNvbG9yUGlja2VyLmlucHV0QWN0aXZlID0gdHJ1ZTtcclxuICAgICAgICAgICAgICAgIGFjdGl2ZUNvbG9yLmhzdiA9IGdldFdoZWVsVmFsdWVGcm9tSW5wdXQocHJvcHMsIHgsIHkpO1xyXG4gICAgICAgICAgICAgICAgcHJvcHMub25JbnB1dChpbnB1dFR5cGUsIHByb3BzLmlkKTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuICAgICAgICAvLyBtb3ZlIGlzIGZpcmVkIHdoZW4gdGhlIHVzZXIgaGFzIHN0YXJ0ZWQgZHJhZ2dpbmdcclxuICAgICAgICBlbHNlIGlmIChpbnB1dFR5cGUgPT09IDEgLyogTW92ZSAqLykge1xyXG4gICAgICAgICAgICBjb2xvclBpY2tlci5pbnB1dEFjdGl2ZSA9IHRydWU7XHJcbiAgICAgICAgICAgIGFjdGl2ZUNvbG9yLmhzdiA9IGdldFdoZWVsVmFsdWVGcm9tSW5wdXQocHJvcHMsIHgsIHkpO1xyXG4gICAgICAgIH1cclxuICAgICAgICAvLyBsZXQgdGhlIGNvbG9yIHBpY2tlciBmaXJlIGlucHV0OnN0YXJ0LCBpbnB1dDptb3ZlIG9yIGlucHV0OmVuZCBldmVudHNcclxuICAgICAgICBwcm9wcy5vbklucHV0KGlucHV0VHlwZSwgcHJvcHMuaWQpO1xyXG4gICAgfVxyXG4gICAgcmV0dXJuIChoKElyb0NvbXBvbmVudFdyYXBwZXIsIE9iamVjdC5hc3NpZ24oe30sIHByb3BzLCB7IG9uSW5wdXQ6IGhhbmRsZUlucHV0IH0pLCBmdW5jdGlvbiAodWlkLCByb290UHJvcHMsIHJvb3RTdHlsZXMpIHsgcmV0dXJuIChoKFwiZGl2XCIsIE9iamVjdC5hc3NpZ24oe30sIHJvb3RQcm9wcywgeyBjbGFzc05hbWU6IFwiSXJvV2hlZWxcIiwgc3R5bGU6IE9iamVjdC5hc3NpZ24oe30sIHt3aWR0aDogY3NzVmFsdWUod2lkdGgpLFxyXG4gICAgICAgICAgICBoZWlnaHQ6IGNzc1ZhbHVlKHdpZHRoKSxcclxuICAgICAgICAgICAgcG9zaXRpb246ICdyZWxhdGl2ZSd9LFxyXG4gICAgICAgICAgICByb290U3R5bGVzKSB9KSxcclxuICAgICAgICBoKFwiZGl2XCIsIHsgY2xhc3NOYW1lOiBcIklyb1doZWVsSHVlXCIsIHN0eWxlOiBPYmplY3QuYXNzaWduKHt9LCBjaXJjbGVTdHlsZXMsXHJcbiAgICAgICAgICAgICAgICB7dHJhbnNmb3JtOiAoXCJyb3RhdGVaKFwiICsgKHByb3BzLndoZWVsQW5nbGUgKyA5MCkgKyBcImRlZylcIiksXHJcbiAgICAgICAgICAgICAgICBiYWNrZ3JvdW5kOiBwcm9wcy53aGVlbERpcmVjdGlvbiA9PT0gJ2Nsb2Nrd2lzZScgPyBIVUVfR1JBRElFTlRfQ0xPQ0tXSVNFIDogSFVFX0dSQURJRU5UX0FOVElDTE9DS1dJU0V9KSB9KSxcclxuICAgICAgICBoKFwiZGl2XCIsIHsgY2xhc3NOYW1lOiBcIklyb1doZWVsU2F0dXJhdGlvblwiLCBzdHlsZTogT2JqZWN0LmFzc2lnbih7fSwgY2lyY2xlU3R5bGVzLFxyXG4gICAgICAgICAgICAgICAge2JhY2tncm91bmQ6ICdyYWRpYWwtZ3JhZGllbnQoY2lyY2xlIGNsb3Nlc3Qtc2lkZSwgI2ZmZiwgdHJhbnNwYXJlbnQpJ30pIH0pLFxyXG4gICAgICAgIHByb3BzLndoZWVsTGlnaHRuZXNzICYmIChoKFwiZGl2XCIsIHsgY2xhc3NOYW1lOiBcIklyb1doZWVsTGlnaHRuZXNzXCIsIHN0eWxlOiBPYmplY3QuYXNzaWduKHt9LCBjaXJjbGVTdHlsZXMsXHJcbiAgICAgICAgICAgICAgICB7YmFja2dyb3VuZDogJyMwMDAnLFxyXG4gICAgICAgICAgICAgICAgb3BhY2l0eTogMSAtIGhzdi52IC8gMTAwfSkgfSkpLFxyXG4gICAgICAgIGgoXCJkaXZcIiwgeyBjbGFzc05hbWU6IFwiSXJvV2hlZWxCb3JkZXJcIiwgc3R5bGU6IE9iamVjdC5hc3NpZ24oe30sIGNpcmNsZVN0eWxlcyxcclxuICAgICAgICAgICAgICAgIGNzc0JvcmRlclN0eWxlcyhwcm9wcykpIH0pLFxyXG4gICAgICAgIGNvbG9ycy5maWx0ZXIoZnVuY3Rpb24gKGNvbG9yKSB7IHJldHVybiBjb2xvciAhPT0gYWN0aXZlQ29sb3I7IH0pLm1hcChmdW5jdGlvbiAoY29sb3IpIHsgcmV0dXJuIChoKElyb0hhbmRsZSwgeyBpc0FjdGl2ZTogZmFsc2UsIGluZGV4OiBjb2xvci5pbmRleCwgZmlsbDogY29sb3IuaHNsU3RyaW5nLCByOiBwcm9wcy5oYW5kbGVSYWRpdXMsIHVybDogcHJvcHMuaGFuZGxlU3ZnLCBwcm9wczogcHJvcHMuaGFuZGxlUHJvcHMsIHg6IGhhbmRsZVBvc2l0aW9uc1tjb2xvci5pbmRleF0ueCwgeTogaGFuZGxlUG9zaXRpb25zW2NvbG9yLmluZGV4XS55IH0pKTsgfSksXHJcbiAgICAgICAgaChJcm9IYW5kbGUsIHsgaXNBY3RpdmU6IHRydWUsIGluZGV4OiBhY3RpdmVDb2xvci5pbmRleCwgZmlsbDogYWN0aXZlQ29sb3IuaHNsU3RyaW5nLCByOiBwcm9wcy5hY3RpdmVIYW5kbGVSYWRpdXMgfHwgcHJvcHMuaGFuZGxlUmFkaXVzLCB1cmw6IHByb3BzLmhhbmRsZVN2ZywgcHJvcHM6IHByb3BzLmhhbmRsZVByb3BzLCB4OiBoYW5kbGVQb3NpdGlvbnNbYWN0aXZlQ29sb3IuaW5kZXhdLngsIHk6IGhhbmRsZVBvc2l0aW9uc1thY3RpdmVDb2xvci5pbmRleF0ueSB9KSkpOyB9KSk7XHJcbn1cblxuZnVuY3Rpb24gY3JlYXRlV2lkZ2V0KFdpZGdldENvbXBvbmVudCkge1xyXG4gICAgdmFyIHdpZGdldEZhY3RvcnkgPSBmdW5jdGlvbiAocGFyZW50LCBwcm9wcykge1xyXG4gICAgICAgIHZhciB3aWRnZXQ7IC8vIHdpbGwgYmVjb21lIGFuIGluc3RhbmNlIG9mIHRoZSB3aWRnZXQgY29tcG9uZW50IGNsYXNzXHJcbiAgICAgICAgdmFyIHdpZGdldFJvb3QgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCdkaXYnKTtcclxuICAgICAgICAvLyBSZW5kZXIgd2lkZ2V0IGludG8gYSB0ZW1wIERPTSBub2RlXHJcbiAgICAgICAgSShoKFdpZGdldENvbXBvbmVudCwgT2JqZWN0LmFzc2lnbih7fSwge3JlZjogZnVuY3Rpb24gKHJlZikgeyByZXR1cm4gd2lkZ2V0ID0gcmVmOyB9fSxcclxuICAgICAgICAgICAgcHJvcHMpKSwgd2lkZ2V0Um9vdCk7XHJcbiAgICAgICAgZnVuY3Rpb24gbW91bnRXaWRnZXQoKSB7XHJcbiAgICAgICAgICAgIHZhciBjb250YWluZXIgPSBwYXJlbnQgaW5zdGFuY2VvZiBFbGVtZW50ID8gcGFyZW50IDogZG9jdW1lbnQucXVlcnlTZWxlY3RvcihwYXJlbnQpO1xyXG4gICAgICAgICAgICBjb250YWluZXIuYXBwZW5kQ2hpbGQod2lkZ2V0LmJhc2UpO1xyXG4gICAgICAgICAgICB3aWRnZXQub25Nb3VudChjb250YWluZXIpO1xyXG4gICAgICAgIH1cclxuICAgICAgICAvLyBNb3VudCBpdCBpbnRvIHRoZSBET00gd2hlbiB0aGUgcGFnZSBkb2N1bWVudCBpcyByZWFkeVxyXG4gICAgICAgIGlmIChkb2N1bWVudC5yZWFkeVN0YXRlICE9PSAnbG9hZGluZycpIHtcclxuICAgICAgICAgICAgbW91bnRXaWRnZXQoKTtcclxuICAgICAgICB9XHJcbiAgICAgICAgZWxzZSB7XHJcbiAgICAgICAgICAgIGRvY3VtZW50LmFkZEV2ZW50TGlzdGVuZXIoJ0RPTUNvbnRlbnRMb2FkZWQnLCBtb3VudFdpZGdldCk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHJldHVybiB3aWRnZXQ7XHJcbiAgICB9O1xyXG4gICAgLy8gQWxsb3cgdGhlIHdpZGdldCBmYWN0b3J5IHRvIGluaGVyaXQgY29tcG9uZW50IHByb3RvdHlwZSArIHN0YXRpYyBjbGFzcyBtZXRob2RzXHJcbiAgICAvLyBUaGlzIG1ha2VzIGl0IGVhc2llciBmb3IgcGx1Z2luIGF1dGhvcnMgdG8gZXh0ZW5kIHRoZSBiYXNlIHdpZGdldCBjb21wb25lbnRcclxuICAgIHdpZGdldEZhY3RvcnkucHJvdG90eXBlID0gV2lkZ2V0Q29tcG9uZW50LnByb3RvdHlwZTtcclxuICAgIE9iamVjdC5hc3NpZ24od2lkZ2V0RmFjdG9yeSwgV2lkZ2V0Q29tcG9uZW50KTtcclxuICAgIC8vIEFkZCByZWZlcmVuY2UgdG8gYmFzZSBjb21wb25lbnQgdG9vXHJcbiAgICB3aWRnZXRGYWN0b3J5Ll9fY29tcG9uZW50ID0gV2lkZ2V0Q29tcG9uZW50O1xyXG4gICAgcmV0dXJuIHdpZGdldEZhY3Rvcnk7XHJcbn1cblxudmFyIElyb0NvbG9yUGlja2VyID0gLypAX19QVVJFX18qLyhmdW5jdGlvbiAoQ29tcG9uZW50KSB7XG4gICAgZnVuY3Rpb24gSXJvQ29sb3JQaWNrZXIocHJvcHMpIHtcbiAgICAgICAgdmFyIHRoaXMkMSA9IHRoaXM7XG5cclxuICAgICAgICBDb21wb25lbnQuY2FsbCh0aGlzLCBwcm9wcyk7XHJcbiAgICAgICAgdGhpcy5jb2xvcnMgPSBbXTtcclxuICAgICAgICB0aGlzLmlucHV0QWN0aXZlID0gZmFsc2U7XHJcbiAgICAgICAgdGhpcy5ldmVudHMgPSB7fTtcclxuICAgICAgICB0aGlzLmFjdGl2ZUV2ZW50cyA9IHt9O1xyXG4gICAgICAgIHRoaXMuZGVmZXJyZWRFdmVudHMgPSB7fTtcclxuICAgICAgICB0aGlzLmlkID0gcHJvcHMuaWQ7XHJcbiAgICAgICAgdmFyIGNvbG9ycyA9IHByb3BzLmNvbG9ycy5sZW5ndGggPiAwID8gcHJvcHMuY29sb3JzIDogW3Byb3BzLmNvbG9yXTtcclxuICAgICAgICBjb2xvcnMuZm9yRWFjaChmdW5jdGlvbiAoY29sb3JWYWx1ZSkgeyByZXR1cm4gdGhpcyQxLmFkZENvbG9yKGNvbG9yVmFsdWUpOyB9KTtcclxuICAgICAgICB0aGlzLnNldEFjdGl2ZUNvbG9yKDApO1xyXG4gICAgICAgIC8vIFBhc3MgYWxsIHRoZSBwcm9wcyBpbnRvIHRoZSBjb21wb25lbnQncyBzdGF0ZSxcclxuICAgICAgICAvLyBFeGNlcHQgd2Ugd2FudCB0byBhZGQgdGhlIGNvbG9yIG9iamVjdCBhbmQgbWFrZSBzdXJlIHRoYXQgcmVmcyBhcmVuJ3QgcGFzc2VkIGRvd24gdG8gY2hpbGRyZW5cclxuICAgICAgICB0aGlzLnN0YXRlID0gT2JqZWN0LmFzc2lnbih7fSwgcHJvcHMsXHJcbiAgICAgICAgICAgIHtjb2xvcjogdGhpcy5jb2xvcixcclxuICAgICAgICAgICAgY29sb3JzOiB0aGlzLmNvbG9ycyxcclxuICAgICAgICAgICAgbGF5b3V0OiBwcm9wcy5sYXlvdXR9KTtcclxuICAgIH1cblxuICAgIGlmICggQ29tcG9uZW50ICkgSXJvQ29sb3JQaWNrZXIuX19wcm90b19fID0gQ29tcG9uZW50O1xuICAgIElyb0NvbG9yUGlja2VyLnByb3RvdHlwZSA9IE9iamVjdC5jcmVhdGUoIENvbXBvbmVudCAmJiBDb21wb25lbnQucHJvdG90eXBlICk7XG4gICAgSXJvQ29sb3JQaWNrZXIucHJvdG90eXBlLmNvbnN0cnVjdG9yID0gSXJvQ29sb3JQaWNrZXI7XHJcbiAgICAvLyBQbHViaWMgbXVsdGljb2xvciBBUElcclxuICAgIC8qKlxyXG4gICAgKiBAZGVzYyBBZGQgYSBjb2xvciB0byB0aGUgY29sb3IgcGlja2VyXHJcbiAgICAqIEBwYXJhbSBjb2xvciBuZXcgY29sb3IgdG8gYWRkXHJcbiAgICAqIEBwYXJhbSBpbmRleCBvcHRpb25hbCBjb2xvciBpbmRleFxyXG4gICAgKi9cclxuICAgIElyb0NvbG9yUGlja2VyLnByb3RvdHlwZS5hZGRDb2xvciA9IGZ1bmN0aW9uIGFkZENvbG9yIChjb2xvciwgaW5kZXgpIHtcbiAgICAgICAgaWYgKCBpbmRleCA9PT0gdm9pZCAwICkgaW5kZXggPSB0aGlzLmNvbG9ycy5sZW5ndGg7XG5cclxuICAgICAgICAvLyBDcmVhdGUgYSBuZXcgaXJvLkNvbG9yXHJcbiAgICAgICAgLy8gQWxzbyBiaW5kIGl0IHRvIG9uQ29sb3JDaGFuZ2UsIHNvIHdoZW5ldmVyIHRoZSBjb2xvciBjaGFuZ2VzIGl0IHVwZGF0ZXMgdGhlIGNvbG9yIHBpY2tlclxyXG4gICAgICAgIHZhciBuZXdDb2xvciA9IG5ldyBJcm9Db2xvcihjb2xvciwgdGhpcy5vbkNvbG9yQ2hhbmdlLmJpbmQodGhpcykpO1xyXG4gICAgICAgIC8vIEluc2VydCBjb2xvciBAIHRoZSBnaXZlbiBpbmRleFxyXG4gICAgICAgIHRoaXMuY29sb3JzLnNwbGljZShpbmRleCwgMCwgbmV3Q29sb3IpO1xyXG4gICAgICAgIC8vIFJlaW5kZXggY29sb3JzXHJcbiAgICAgICAgdGhpcy5jb2xvcnMuZm9yRWFjaChmdW5jdGlvbiAoY29sb3IsIGluZGV4KSB7IHJldHVybiBjb2xvci5pbmRleCA9IGluZGV4OyB9KTtcclxuICAgICAgICAvLyBVcGRhdGUgcGlja2VyIHN0YXRlIGlmIG5lY2Vzc2FyeVxyXG4gICAgICAgIGlmICh0aGlzLnN0YXRlKSB7XHJcbiAgICAgICAgICAgIHRoaXMuc2V0U3RhdGUoeyBjb2xvcnM6IHRoaXMuY29sb3JzIH0pO1xyXG4gICAgICAgIH1cclxuICAgICAgICAvLyBGaXJlIGNvbG9yIGluaXQgZXZlbnRcclxuICAgICAgICB0aGlzLmRlZmVycmVkRW1pdCgnY29sb3I6aW5pdCcsIG5ld0NvbG9yKTtcclxuICAgIH07XHJcbiAgICAvKipcclxuICAgICAqIEBkZXNjIFJlbW92ZSBhIGNvbG9yIGZyb20gdGhlIGNvbG9yIHBpY2tlclxyXG4gICAgICogQHBhcmFtIGluZGV4IGNvbG9yIGluZGV4XHJcbiAgICAgKi9cclxuICAgIElyb0NvbG9yUGlja2VyLnByb3RvdHlwZS5yZW1vdmVDb2xvciA9IGZ1bmN0aW9uIHJlbW92ZUNvbG9yIChpbmRleCkge1xyXG4gICAgICAgIHZhciBjb2xvciA9IHRoaXMuY29sb3JzLnNwbGljZShpbmRleCwgMSlbMF07XHJcbiAgICAgICAgLy8gRGVzdHJveSB0aGUgY29sb3Igb2JqZWN0IC0tIHRoaXMgdW5iaW5kcyBpdCBmcm9tIHRoZSBjb2xvciBwaWNrZXJcclxuICAgICAgICBjb2xvci51bmJpbmQoKTtcclxuICAgICAgICAvLyBSZWluZGV4IGNvbG9yc1xyXG4gICAgICAgIHRoaXMuY29sb3JzLmZvckVhY2goZnVuY3Rpb24gKGNvbG9yLCBpbmRleCkgeyByZXR1cm4gY29sb3IuaW5kZXggPSBpbmRleDsgfSk7XHJcbiAgICAgICAgLy8gVXBkYXRlIHBpY2tlciBzdGF0ZSBpZiBuZWNlc3NhcnlcclxuICAgICAgICBpZiAodGhpcy5zdGF0ZSkge1xyXG4gICAgICAgICAgICB0aGlzLnNldFN0YXRlKHsgY29sb3JzOiB0aGlzLmNvbG9ycyB9KTtcclxuICAgICAgICB9XHJcbiAgICAgICAgLy8gSWYgdGhlIGFjdGl2ZSBjb2xvciB3YXMgcmVtb3ZlZCwgZGVmYXVsdCBhY3RpdmUgY29sb3IgdG8gMFxyXG4gICAgICAgIGlmIChjb2xvci5pbmRleCA9PT0gdGhpcy5jb2xvci5pbmRleCkge1xyXG4gICAgICAgICAgICB0aGlzLnNldEFjdGl2ZUNvbG9yKDApO1xyXG4gICAgICAgIH1cclxuICAgICAgICAvLyBGaXJlIGNvbG9yIHJlbW92ZSBldmVudFxyXG4gICAgICAgIHRoaXMuZW1pdCgnY29sb3I6cmVtb3ZlJywgY29sb3IpO1xyXG4gICAgfTtcclxuICAgIC8qKlxyXG4gICAgICogQGRlc2MgU2V0IHRoZSBjdXJyZW50bHkgYWN0aXZlIGNvbG9yXHJcbiAgICAgKiBAcGFyYW0gaW5kZXggY29sb3IgaW5kZXhcclxuICAgICAqL1xyXG4gICAgSXJvQ29sb3JQaWNrZXIucHJvdG90eXBlLnNldEFjdGl2ZUNvbG9yID0gZnVuY3Rpb24gc2V0QWN0aXZlQ29sb3IgKGluZGV4KSB7XHJcbiAgICAgICAgdGhpcy5jb2xvciA9IHRoaXMuY29sb3JzW2luZGV4XTtcclxuICAgICAgICBpZiAodGhpcy5zdGF0ZSkge1xyXG4gICAgICAgICAgICB0aGlzLnNldFN0YXRlKHsgY29sb3I6IHRoaXMuY29sb3IgfSk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIC8vIEZpcmUgY29sb3Igc3dpdGNoIGV2ZW50XHJcbiAgICAgICAgdGhpcy5lbWl0KCdjb2xvcjpzZXRBY3RpdmUnLCB0aGlzLmNvbG9yKTtcclxuICAgIH07XHJcbiAgICAvKipcclxuICAgICAqIEBkZXNjIFJlcGxhY2UgYWxsIG9mIHRoZSBjdXJyZW50IGNvbG9yUGlja2VyIGNvbG9yc1xyXG4gICAgICogQHBhcmFtIG5ld0NvbG9yVmFsdWVzIGxpc3Qgb2YgbmV3IGNvbG9ycyB0byBhZGRcclxuICAgICAqL1xyXG4gICAgSXJvQ29sb3JQaWNrZXIucHJvdG90eXBlLnNldENvbG9ycyA9IGZ1bmN0aW9uIHNldENvbG9ycyAobmV3Q29sb3JWYWx1ZXMsIGFjdGl2ZUNvbG9ySW5kZXgpIHtcbiAgICAgICAgdmFyIHRoaXMkMSA9IHRoaXM7XG4gICAgICAgIGlmICggYWN0aXZlQ29sb3JJbmRleCA9PT0gdm9pZCAwICkgYWN0aXZlQ29sb3JJbmRleCA9IDA7XG5cclxuICAgICAgICAvLyBVbmJpbmQgY29sb3IgZXZlbnRzXHJcbiAgICAgICAgdGhpcy5jb2xvcnMuZm9yRWFjaChmdW5jdGlvbiAoY29sb3IpIHsgcmV0dXJuIGNvbG9yLnVuYmluZCgpOyB9KTtcclxuICAgICAgICAvLyBEZXN0cm95IG9sZCBjb2xvcnNcclxuICAgICAgICB0aGlzLmNvbG9ycyA9IFtdO1xyXG4gICAgICAgIC8vIEFkZCBuZXcgY29sb3JzXHJcbiAgICAgICAgbmV3Q29sb3JWYWx1ZXMuZm9yRWFjaChmdW5jdGlvbiAoY29sb3JWYWx1ZSkgeyByZXR1cm4gdGhpcyQxLmFkZENvbG9yKGNvbG9yVmFsdWUpOyB9KTtcclxuICAgICAgICAvLyBSZXNldCBhY3RpdmUgY29sb3JcclxuICAgICAgICB0aGlzLnNldEFjdGl2ZUNvbG9yKGFjdGl2ZUNvbG9ySW5kZXgpO1xyXG4gICAgICAgIHRoaXMuZW1pdCgnY29sb3I6c2V0QWxsJywgdGhpcy5jb2xvcnMpO1xyXG4gICAgfTtcclxuICAgIC8vIFB1YmxpYyBDb2xvclBpY2tlciBldmVudHMgQVBJXHJcbiAgICAvKipcclxuICAgICAqIEBkZXNjIFNldCBhIGNhbGxiYWNrIGZ1bmN0aW9uIGZvciBhbiBldmVudFxyXG4gICAgICogQHBhcmFtIGV2ZW50TGlzdCBldmVudChzKSB0byBsaXN0ZW4gdG9cclxuICAgICAqIEBwYXJhbSBjYWxsYmFjayAtIEZ1bmN0aW9uIGNhbGxlZCB3aGVuIHRoZSBldmVudCBpcyBmaXJlZFxyXG4gICAgICovXHJcbiAgICBJcm9Db2xvclBpY2tlci5wcm90b3R5cGUub24gPSBmdW5jdGlvbiBvbiAoZXZlbnRMaXN0LCBjYWxsYmFjaykge1xuICAgICAgICB2YXIgdGhpcyQxID0gdGhpcztcblxyXG4gICAgICAgIHZhciBldmVudHMgPSB0aGlzLmV2ZW50cztcclxuICAgICAgICAvLyBldmVudExpc3QgY2FuIGJlIGFuIGV2ZW50VHlwZSBzdHJpbmcgb3IgYW4gYXJyYXkgb2YgZXZlbnRUeXBlIHN0cmluZ3NcclxuICAgICAgICAoIUFycmF5LmlzQXJyYXkoZXZlbnRMaXN0KSA/IFtldmVudExpc3RdIDogZXZlbnRMaXN0KS5mb3JFYWNoKGZ1bmN0aW9uIChldmVudFR5cGUpIHtcclxuICAgICAgICAgICAgLy8gQWRkIGV2ZW50IGNhbGxiYWNrXHJcbiAgICAgICAgICAgIChldmVudHNbZXZlbnRUeXBlXSB8fCAoZXZlbnRzW2V2ZW50VHlwZV0gPSBbXSkpLnB1c2goY2FsbGJhY2spO1xyXG4gICAgICAgICAgICAvLyBDYWxsIGRlZmVycmVkIGV2ZW50c1xyXG4gICAgICAgICAgICAvLyBUaGVzZSBhcmUgZXZlbnRzIHRoYXQgY2FuIGJlIHN0b3JlZCB1bnRpbCBhIGxpc3RlbmVyIGZvciB0aGVtIGlzIGFkZGVkXHJcbiAgICAgICAgICAgIGlmICh0aGlzJDEuZGVmZXJyZWRFdmVudHNbZXZlbnRUeXBlXSkge1xyXG4gICAgICAgICAgICAgICAgLy8gRGVmZmVyZWQgZXZlbnRzIHN0b3JlIGFuIGFycmF5IG9mIGFyZ3VtZW50cyBmcm9tIHdoZW4gdGhlIGV2ZW50IHdhcyBjYWxsZWRcclxuICAgICAgICAgICAgICAgIHRoaXMkMS5kZWZlcnJlZEV2ZW50c1tldmVudFR5cGVdLmZvckVhY2goZnVuY3Rpb24gKGFyZ3MpIHtcclxuICAgICAgICAgICAgICAgICAgICBjYWxsYmFjay5hcHBseShudWxsLCBhcmdzKTtcclxuICAgICAgICAgICAgICAgIH0pO1xyXG4gICAgICAgICAgICAgICAgLy8gQ2xlYXIgZGVmZXJyZWQgZXZlbnRzXHJcbiAgICAgICAgICAgICAgICB0aGlzJDEuZGVmZXJyZWRFdmVudHNbZXZlbnRUeXBlXSA9IFtdO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfSk7XHJcbiAgICB9O1xyXG4gICAgLyoqXHJcbiAgICAgKiBAZGVzYyBSZW1vdmUgYSBjYWxsYmFjayBmdW5jdGlvbiBmb3IgYW4gZXZlbnQgYWRkZWQgd2l0aCBvbigpXHJcbiAgICAgKiBAcGFyYW0gZXZlbnRMaXN0IC0gZXZlbnQocykgdG8gbGlzdGVuIHRvXHJcbiAgICAgKiBAcGFyYW0gY2FsbGJhY2sgLSBvcmlnaW5hbCBjYWxsYmFjayBmdW5jdGlvbiB0byByZW1vdmVcclxuICAgICAqL1xyXG4gICAgSXJvQ29sb3JQaWNrZXIucHJvdG90eXBlLm9mZiA9IGZ1bmN0aW9uIG9mZiAoZXZlbnRMaXN0LCBjYWxsYmFjaykge1xuICAgICAgICB2YXIgdGhpcyQxID0gdGhpcztcblxyXG4gICAgICAgICghQXJyYXkuaXNBcnJheShldmVudExpc3QpID8gW2V2ZW50TGlzdF0gOiBldmVudExpc3QpLmZvckVhY2goZnVuY3Rpb24gKGV2ZW50VHlwZSkge1xyXG4gICAgICAgICAgICB2YXIgY2FsbGJhY2tMaXN0ID0gdGhpcyQxLmV2ZW50c1tldmVudFR5cGVdO1xyXG4gICAgICAgICAgICAvLyB0aGlzLmVtaXRIb29rKCdldmVudDpvZmYnLCBldmVudFR5cGUsIGNhbGxiYWNrKTtcclxuICAgICAgICAgICAgaWYgKGNhbGxiYWNrTGlzdClcclxuICAgICAgICAgICAgICAgIHsgY2FsbGJhY2tMaXN0LnNwbGljZShjYWxsYmFja0xpc3QuaW5kZXhPZihjYWxsYmFjayksIDEpOyB9XHJcbiAgICAgICAgfSk7XHJcbiAgICB9O1xyXG4gICAgLyoqXHJcbiAgICAgKiBAZGVzYyBFbWl0IGFuIGV2ZW50XHJcbiAgICAgKiBAcGFyYW0gZXZlbnRUeXBlIGV2ZW50IHRvIGVtaXRcclxuICAgICAqL1xyXG4gICAgSXJvQ29sb3JQaWNrZXIucHJvdG90eXBlLmVtaXQgPSBmdW5jdGlvbiBlbWl0IChldmVudFR5cGUpIHtcbiAgICAgICAgdmFyIHRoaXMkMSA9IHRoaXM7XG4gICAgICAgIHZhciBhcmdzID0gW10sIGxlbiA9IGFyZ3VtZW50cy5sZW5ndGggLSAxO1xuICAgICAgICB3aGlsZSAoIGxlbi0tID4gMCApIGFyZ3NbIGxlbiBdID0gYXJndW1lbnRzWyBsZW4gKyAxIF07XG5cclxuICAgICAgICB2YXIgYWN0aXZlRXZlbnRzID0gdGhpcy5hY3RpdmVFdmVudHM7XHJcbiAgICAgICAgdmFyIGlzRXZlbnRBY3RpdmUgPSBhY3RpdmVFdmVudHMuaGFzT3duUHJvcGVydHkoZXZlbnRUeXBlKSA/IGFjdGl2ZUV2ZW50c1tldmVudFR5cGVdIDogZmFsc2U7XHJcbiAgICAgICAgLy8gUHJldmVudCBldmVudCBjYWxsYmFja3MgZnJvbSBmaXJpbmcgaWYgdGhlIGV2ZW50IGlzIGFscmVhZHkgYWN0aXZlXHJcbiAgICAgICAgLy8gVGhpcyBzdG9wcyBpbmZpbml0ZSBsb29wcyBpZiBzb21ldGhpbmcgaW4gYW4gZXZlbnQgY2FsbGJhY2sgY2F1c2VzIHRoZSBzYW1lIGV2ZW50IHRvIGJlIGZpcmVkIGFnYWluXHJcbiAgICAgICAgLy8gKGUuZy4gc2V0dGluZyB0aGUgY29sb3IgaW5zaWRlIGEgY29sb3I6Y2hhbmdlIGNhbGxiYWNrKVxyXG4gICAgICAgIGlmICghaXNFdmVudEFjdGl2ZSkge1xyXG4gICAgICAgICAgICBhY3RpdmVFdmVudHNbZXZlbnRUeXBlXSA9IHRydWU7XHJcbiAgICAgICAgICAgIHZhciBjYWxsYmFja0xpc3QgPSB0aGlzLmV2ZW50c1tldmVudFR5cGVdIHx8IFtdO1xyXG4gICAgICAgICAgICBjYWxsYmFja0xpc3QuZm9yRWFjaChmdW5jdGlvbiAoZm4pIHsgcmV0dXJuIGZuLmFwcGx5KHRoaXMkMSwgYXJncyk7IH0pO1xyXG4gICAgICAgICAgICBhY3RpdmVFdmVudHNbZXZlbnRUeXBlXSA9IGZhbHNlO1xyXG4gICAgICAgIH1cclxuICAgIH07XHJcbiAgICAvKipcclxuICAgICAqIEBkZXNjIEVtaXQgYW4gZXZlbnQgbm93LCBvciBzYXZlIGl0IGZvciB3aGVuIHRoZSByZWxldmVudCBldmVudCBsaXN0ZW5lciBpcyBhZGRlZFxyXG4gICAgICogQHBhcmFtIGV2ZW50VHlwZSAtIFRoZSBuYW1lIG9mIHRoZSBldmVudCB0byBlbWl0XHJcbiAgICAgKi9cclxuICAgIElyb0NvbG9yUGlja2VyLnByb3RvdHlwZS5kZWZlcnJlZEVtaXQgPSBmdW5jdGlvbiBkZWZlcnJlZEVtaXQgKGV2ZW50VHlwZSkge1xuICAgICAgICB2YXIgcmVmO1xuXG4gICAgICAgIHZhciBhcmdzID0gW10sIGxlbiA9IGFyZ3VtZW50cy5sZW5ndGggLSAxO1xuICAgICAgICB3aGlsZSAoIGxlbi0tID4gMCApIGFyZ3NbIGxlbiBdID0gYXJndW1lbnRzWyBsZW4gKyAxIF07XHJcbiAgICAgICAgdmFyIGRlZmVycmVkRXZlbnRzID0gdGhpcy5kZWZlcnJlZEV2ZW50cztcclxuICAgICAgICAocmVmID0gdGhpcykuZW1pdC5hcHBseShyZWYsIFsgZXZlbnRUeXBlIF0uY29uY2F0KCBhcmdzICkpO1xyXG4gICAgICAgIChkZWZlcnJlZEV2ZW50c1tldmVudFR5cGVdIHx8IChkZWZlcnJlZEV2ZW50c1tldmVudFR5cGVdID0gW10pKS5wdXNoKGFyZ3MpO1xyXG4gICAgfTtcclxuICAgIC8vIFB1YmxpYyB1dGlsaXR5IG1ldGhvZHNcclxuICAgIElyb0NvbG9yUGlja2VyLnByb3RvdHlwZS5zZXRPcHRpb25zID0gZnVuY3Rpb24gc2V0T3B0aW9ucyAobmV3T3B0aW9ucykge1xyXG4gICAgICAgIHRoaXMuc2V0U3RhdGUobmV3T3B0aW9ucyk7XHJcbiAgICB9O1xyXG4gICAgLyoqXHJcbiAgICAgKiBAZGVzYyBSZXNpemUgdGhlIGNvbG9yIHBpY2tlclxyXG4gICAgICogQHBhcmFtIHdpZHRoIC0gbmV3IHdpZHRoXHJcbiAgICAgKi9cclxuICAgIElyb0NvbG9yUGlja2VyLnByb3RvdHlwZS5yZXNpemUgPSBmdW5jdGlvbiByZXNpemUgKHdpZHRoKSB7XHJcbiAgICAgICAgdGhpcy5zZXRPcHRpb25zKHsgd2lkdGg6IHdpZHRoIH0pO1xyXG4gICAgfTtcclxuICAgIC8qKlxyXG4gICAgICogQGRlc2MgUmVzZXQgdGhlIGNvbG9yIHBpY2tlciB0byB0aGUgaW5pdGlhbCBjb2xvciBwcm92aWRlZCBpbiB0aGUgY29sb3IgcGlja2VyIG9wdGlvbnNcclxuICAgICAqL1xyXG4gICAgSXJvQ29sb3JQaWNrZXIucHJvdG90eXBlLnJlc2V0ID0gZnVuY3Rpb24gcmVzZXQgKCkge1xyXG4gICAgICAgIHRoaXMuY29sb3JzLmZvckVhY2goZnVuY3Rpb24gKGNvbG9yKSB7IHJldHVybiBjb2xvci5yZXNldCgpOyB9KTtcclxuICAgICAgICB0aGlzLnNldFN0YXRlKHsgY29sb3JzOiB0aGlzLmNvbG9ycyB9KTtcclxuICAgIH07XHJcbiAgICAvKipcclxuICAgICAqIEBkZXNjIENhbGxlZCBieSB0aGUgY3JlYXRlV2lkZ2V0IHdyYXBwZXIgd2hlbiB0aGUgZWxlbWVudCBpcyBtb3VudGVkIGludG8gdGhlIHBhZ2VcclxuICAgICAqIEBwYXJhbSBjb250YWluZXIgLSB0aGUgY29udGFpbmVyIGVsZW1lbnQgZm9yIHRoaXMgQ29sb3JQaWNrZXIgaW5zdGFuY2VcclxuICAgICAqL1xyXG4gICAgSXJvQ29sb3JQaWNrZXIucHJvdG90eXBlLm9uTW91bnQgPSBmdW5jdGlvbiBvbk1vdW50IChjb250YWluZXIpIHtcclxuICAgICAgICB0aGlzLmVsID0gY29udGFpbmVyO1xyXG4gICAgICAgIHRoaXMuZGVmZXJyZWRFbWl0KCdtb3VudCcsIHRoaXMpO1xyXG4gICAgfTtcclxuICAgIC8vIEludGVybmFsIG1ldGhvZHNcclxuICAgIC8qKlxyXG4gICAgICogQGRlc2MgUmVhY3QgdG8gYSBjb2xvciB1cGRhdGVcclxuICAgICAqIEBwYXJhbSBjb2xvciAtIGN1cnJlbnQgY29sb3JcclxuICAgICAqIEBwYXJhbSBjaGFuZ2VzIC0gc2hvd3Mgd2hpY2ggaCxzLHYsYSBjb2xvciBjaGFubmVscyBjaGFuZ2VkXHJcbiAgICAgKi9cclxuICAgIElyb0NvbG9yUGlja2VyLnByb3RvdHlwZS5vbkNvbG9yQ2hhbmdlID0gZnVuY3Rpb24gb25Db2xvckNoYW5nZSAoY29sb3IsIGNoYW5nZXMpIHtcclxuICAgICAgICB0aGlzLnNldFN0YXRlKHsgY29sb3I6IHRoaXMuY29sb3IgfSk7XHJcbiAgICAgICAgaWYgKHRoaXMuaW5wdXRBY3RpdmUpIHtcclxuICAgICAgICAgICAgdGhpcy5pbnB1dEFjdGl2ZSA9IGZhbHNlO1xyXG4gICAgICAgICAgICB0aGlzLmVtaXQoJ2lucHV0OmNoYW5nZScsIGNvbG9yLCBjaGFuZ2VzKTtcclxuICAgICAgICB9XHJcbiAgICAgICAgdGhpcy5lbWl0KCdjb2xvcjpjaGFuZ2UnLCBjb2xvciwgY2hhbmdlcyk7XHJcbiAgICB9O1xyXG4gICAgLyoqXHJcbiAgICAgKiBAZGVzYyBIYW5kbGUgaW5wdXQgZnJvbSBhIFVJIGNvbnRyb2wgZWxlbWVudFxyXG4gICAgICogQHBhcmFtIHR5cGUgLSBldmVudCB0eXBlXHJcbiAgICAgKi9cclxuICAgIElyb0NvbG9yUGlja2VyLnByb3RvdHlwZS5lbWl0SW5wdXRFdmVudCA9IGZ1bmN0aW9uIGVtaXRJbnB1dEV2ZW50ICh0eXBlLCBvcmlnaW5JZCkge1xyXG4gICAgICAgIGlmICh0eXBlID09PSAwIC8qIFN0YXJ0ICovKSB7XHJcbiAgICAgICAgICAgIHRoaXMuZW1pdCgnaW5wdXQ6c3RhcnQnLCB0aGlzLmNvbG9yLCBvcmlnaW5JZCk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGVsc2UgaWYgKHR5cGUgPT09IDEgLyogTW92ZSAqLykge1xyXG4gICAgICAgICAgICB0aGlzLmVtaXQoJ2lucHV0Om1vdmUnLCB0aGlzLmNvbG9yLCBvcmlnaW5JZCk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGVsc2UgaWYgKHR5cGUgPT09IDIgLyogRW5kICovKSB7XHJcbiAgICAgICAgICAgIHRoaXMuZW1pdCgnaW5wdXQ6ZW5kJywgdGhpcy5jb2xvciwgb3JpZ2luSWQpO1xyXG4gICAgICAgIH1cclxuICAgIH07XHJcbiAgICBJcm9Db2xvclBpY2tlci5wcm90b3R5cGUucmVuZGVyID0gZnVuY3Rpb24gcmVuZGVyIChwcm9wcywgc3RhdGUpIHtcbiAgICAgICAgdmFyIHRoaXMkMSA9IHRoaXM7XG5cclxuICAgICAgICB2YXIgbGF5b3V0ID0gc3RhdGUubGF5b3V0O1xyXG4gICAgICAgIC8vIHVzZSBsYXlvdXQgc2hvcnRoYW5kc1xyXG4gICAgICAgIGlmICghQXJyYXkuaXNBcnJheShsYXlvdXQpKSB7XHJcbiAgICAgICAgICAgIHN3aXRjaCAobGF5b3V0KSB7XHJcbiAgICAgICAgICAgICAgICAvLyBUT0RPOiBpbXBsZW1lbnQgc29tZT9cclxuICAgICAgICAgICAgICAgIGRlZmF1bHQ6XHJcbiAgICAgICAgICAgICAgICAgICAgbGF5b3V0ID0gW1xyXG4gICAgICAgICAgICAgICAgICAgICAgICB7IGNvbXBvbmVudDogSXJvV2hlZWwgfSxcclxuICAgICAgICAgICAgICAgICAgICAgICAgeyBjb21wb25lbnQ6IElyb1NsaWRlciB9IF07XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgLy8gYWRkIHRyYW5zcGFyZW5jeSBzbGlkZXIgdG8gdGhlIGxheW91dFxyXG4gICAgICAgICAgICBpZiAoc3RhdGUudHJhbnNwYXJlbmN5KSB7XHJcbiAgICAgICAgICAgICAgICBsYXlvdXQucHVzaCh7XHJcbiAgICAgICAgICAgICAgICAgICAgY29tcG9uZW50OiBJcm9TbGlkZXIsXHJcbiAgICAgICAgICAgICAgICAgICAgb3B0aW9uczoge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBzbGlkZXJUeXBlOiAnYWxwaGEnXHJcbiAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgfSk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9XHJcbiAgICAgICAgcmV0dXJuIChoKFwiZGl2XCIsIHsgY2xhc3M6IFwiSXJvQ29sb3JQaWNrZXJcIiwgaWQ6IHN0YXRlLmlkLCBzdHlsZToge1xyXG4gICAgICAgICAgICAgICAgZGlzcGxheTogc3RhdGUuZGlzcGxheVxyXG4gICAgICAgICAgICB9IH0sIGxheW91dC5tYXAoZnVuY3Rpb24gKHJlZiwgY29tcG9uZW50SW5kZXgpIHtcbiAgICAgICAgICAgICAgICB2YXIgVWlDb21wb25lbnQgPSByZWYuY29tcG9uZW50O1xuICAgICAgICAgICAgICAgIHZhciBvcHRpb25zID0gcmVmLm9wdGlvbnM7XG5cbiAgICAgICAgICAgICAgICByZXR1cm4gKGgoVWlDb21wb25lbnQsIE9iamVjdC5hc3NpZ24oe30sIHN0YXRlLCBvcHRpb25zLCB7IHJlZjogdW5kZWZpbmVkLCBvbklucHV0OiB0aGlzJDEuZW1pdElucHV0RXZlbnQuYmluZCh0aGlzJDEpLCBwYXJlbnQ6IHRoaXMkMSwgaW5kZXg6IGNvbXBvbmVudEluZGV4IH0pKSk7XG4gICAgICAgIH0pKSk7XHJcbiAgICB9O1xuXG4gICAgcmV0dXJuIElyb0NvbG9yUGlja2VyO1xufShtKSk7XHJcbklyb0NvbG9yUGlja2VyLmRlZmF1bHRQcm9wcyA9IE9iamVjdC5hc3NpZ24oe30sIGlyb0NvbG9yUGlja2VyT3B0aW9uRGVmYXVsdHMsXHJcbiAgICB7Y29sb3JzOiBbXSxcclxuICAgIGRpc3BsYXk6ICdibG9jaycsXHJcbiAgICBpZDogbnVsbCxcclxuICAgIGxheW91dDogJ2RlZmF1bHQnLFxyXG4gICAgbWFyZ2luOiBudWxsfSk7XHJcbnZhciBJcm9Db2xvclBpY2tlcldpZGdldCA9IGNyZWF0ZVdpZGdldChJcm9Db2xvclBpY2tlcik7XG5cbnZhciBpcm87XHJcbihmdW5jdGlvbiAoaXJvKSB7XHJcbiAgICBpcm8udmVyc2lvbiA9IFwiNS41LjFcIjsgLy8gcmVwbGFjZWQgYnkgQHJvbGx1cC9wbHVnaW4tcmVwbGFjZTsgc2VlIHJvbGx1cC5jb25maWcuanNcclxuICAgIGlyby5Db2xvciA9IElyb0NvbG9yO1xyXG4gICAgaXJvLkNvbG9yUGlja2VyID0gSXJvQ29sb3JQaWNrZXJXaWRnZXQ7XHJcbiAgICB2YXIgdWk7XHJcbiAgICAoZnVuY3Rpb24gKHVpKSB7XHJcbiAgICAgICAgdWkuaCA9IGg7XHJcbiAgICAgICAgdWkuQ29tcG9uZW50QmFzZSA9IElyb0NvbXBvbmVudFdyYXBwZXI7XHJcbiAgICAgICAgdWkuSGFuZGxlID0gSXJvSGFuZGxlO1xyXG4gICAgICAgIHVpLlNsaWRlciA9IElyb1NsaWRlcjtcclxuICAgICAgICB1aS5XaGVlbCA9IElyb1doZWVsO1xyXG4gICAgICAgIHVpLkJveCA9IElyb0JveDtcclxuICAgIH0pKHVpID0gaXJvLnVpIHx8IChpcm8udWkgPSB7fSkpO1xyXG59KShpcm8gfHwgKGlybyA9IHt9KSk7XHJcbnZhciBpcm8kMSA9IGlybztcblxuZXhwb3J0IGRlZmF1bHQgaXJvJDE7XG4iXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///./node_modules/@jaames/iro/dist/iro.es.js\n"); - -/***/ }), - -/***/ "./node_modules/alpinejs/dist/alpine.js": -/*!**********************************************!*\ - !*** ./node_modules/alpinejs/dist/alpine.js ***! - \**********************************************/ -/***/ (function(module) { - -eval("(function (global, factory) {\n true ? module.exports = factory() :\n 0;\n}(this, (function () { 'use strict';\n\n function _defineProperty(obj, key, value) {\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\n return obj;\n }\n\n function ownKeys(object, enumerableOnly) {\n var keys = Object.keys(object);\n\n if (Object.getOwnPropertySymbols) {\n var symbols = Object.getOwnPropertySymbols(object);\n if (enumerableOnly) symbols = symbols.filter(function (sym) {\n return Object.getOwnPropertyDescriptor(object, sym).enumerable;\n });\n keys.push.apply(keys, symbols);\n }\n\n return keys;\n }\n\n function _objectSpread2(target) {\n for (var i = 1; i < arguments.length; i++) {\n var source = arguments[i] != null ? arguments[i] : {};\n\n if (i % 2) {\n ownKeys(Object(source), true).forEach(function (key) {\n _defineProperty(target, key, source[key]);\n });\n } else if (Object.getOwnPropertyDescriptors) {\n Object.defineProperties(target, Object.getOwnPropertyDescriptors(source));\n } else {\n ownKeys(Object(source)).forEach(function (key) {\n Object.defineProperty(target, key, Object.getOwnPropertyDescriptor(source, key));\n });\n }\n }\n\n return target;\n }\n\n // Thanks @stimulus:\n // https://github.com/stimulusjs/stimulus/blob/master/packages/%40stimulus/core/src/application.ts\n function domReady() {\n return new Promise(resolve => {\n if (document.readyState == \"loading\") {\n document.addEventListener(\"DOMContentLoaded\", resolve);\n } else {\n resolve();\n }\n });\n }\n function arrayUnique(array) {\n return Array.from(new Set(array));\n }\n function isTesting() {\n return navigator.userAgent.includes(\"Node.js\") || navigator.userAgent.includes(\"jsdom\");\n }\n function checkedAttrLooseCompare(valueA, valueB) {\n return valueA == valueB;\n }\n function warnIfMalformedTemplate(el, directive) {\n if (el.tagName.toLowerCase() !== 'template') {\n console.warn(`Alpine: [${directive}] directive should only be added to