From 94fbb996f0063ea71c02f44cca425a2aa9228df1 Mon Sep 17 00:00:00 2001 From: Philip Wagner Date: Mon, 14 Oct 2024 14:22:24 +0200 Subject: [PATCH] adding kirby3-janitor --- composer.json | 3 +- composer.lock | 414 +- site/blueprints/pages/default.yml | 7 + site/blueprints/pages/project.yml | 7 + site/config/config.php | 12 + site/plugins/kirby3-janitor/.editorconfig | 25 + site/plugins/kirby3-janitor/.eslintrc.json | 18 + .../kirby3-janitor/.php-cs-fixer.dist.php | 19 + site/plugins/kirby3-janitor/LICENSE | 21 + site/plugins/kirby3-janitor/README.md | 67 + .../kirby3-janitor/classes/BackupZipJob.php | 165 + .../classes/CleanCacheFilesJob.php | 39 + .../classes/CleanContentJob.php | 116 + .../classes/CleanSessionsJob.php | 19 + .../kirby3-janitor/classes/ContextJob.php | 19 + .../kirby3-janitor/classes/FlushLapseJob.php | 24 + .../classes/FlushPagesCacheJob.php | 18 + .../classes/FlushRedisDBJob.php | 29 + .../classes/FlushSessionFilesJob.php | 39 + .../kirby3-janitor/classes/Janitor.php | 274 + .../kirby3-janitor/classes/JanitorJob.php | 47 + site/plugins/kirby3-janitor/classes/Job.php | 18 + .../kirby3-janitor/classes/QuietWriter.php | 13 + .../classes/ReindexAutoIDJob.php | 24 + .../classes/ReindexSearchForKirbyJob.php | 32 + .../kirby3-janitor/classes/RenderJob.php | 187 + .../kirby3-janitor/classes/ThumbsJob.php | 124 + .../kirby3-janitor/classes/WhistleJob.php | 19 + site/plugins/kirby3-janitor/composer.json | 75 + site/plugins/kirby3-janitor/composer.lock | 4619 +++++++++++ .../plugins/kirby3-janitor/docker-compose.yml | 12 + site/plugins/kirby3-janitor/index.css | 1 + site/plugins/kirby3-janitor/index.js | 1 + site/plugins/kirby3-janitor/index.php | 210 + site/plugins/kirby3-janitor/janitor | 190 + site/plugins/kirby3-janitor/package-lock.json | 6789 +++++++++++++++++ site/plugins/kirby3-janitor/package.json | 16 + .../kirby3-janitor/snippets/maintenance.php | 41 + .../src/components/fields/Janitor.vue | 296 + site/plugins/kirby3-janitor/src/index.js | 11 + vendor/composer/autoload_classmap.php | 136 + vendor/composer/autoload_files.php | 2 + vendor/composer/autoload_psr4.php | 5 + vendor/composer/autoload_static.php | 166 + vendor/composer/installed.json | 430 ++ vendor/composer/installed.php | 58 +- vendor/league/climate/CHANGELOG.md | 246 + vendor/league/climate/CODE_OF_CONDUCT.md | 22 + vendor/league/climate/CONTRIBUTING.md | 32 + vendor/league/climate/Dockerfile | 13 + vendor/league/climate/LICENSE.md | 21 + vendor/league/climate/README.md | 44 + vendor/league/climate/composer.json | 48 + vendor/league/climate/src/ASCII/404.txt | 6 + vendor/league/climate/src/ASCII/bender.txt | 17 + vendor/league/climate/src/ASCII/failed.txt | 6 + .../league/climate/src/ASCII/fancy-bender.txt | 17 + vendor/league/climate/src/ASCII/passed.txt | 6 + vendor/league/climate/src/ASCII/php | 6 + .../climate/src/ASCII/the-league-big.txt | 102 + .../climate/src/ASCII/the-league-bigger.txt | 153 + .../climate/src/ASCII/the-league-massive.txt | 255 + .../league/climate/src/ASCII/the-league.txt | 51 + .../league/climate/src/Argument/Argument.php | 416 + vendor/league/climate/src/Argument/Filter.php | 183 + .../league/climate/src/Argument/Manager.php | 261 + vendor/league/climate/src/Argument/Parser.php | 309 + .../league/climate/src/Argument/Summary.php | 215 + vendor/league/climate/src/CLImate.php | 446 ++ .../Decorator/Component/BackgroundColor.php | 72 + .../src/Decorator/Component/BaseDecorator.php | 53 + .../climate/src/Decorator/Component/Color.php | 100 + .../src/Decorator/Component/Command.php | 77 + .../Component/DecoratorInterface.php | 28 + .../src/Decorator/Component/Format.php | 89 + .../climate/src/Decorator/Parser/Ansi.php | 174 + .../climate/src/Decorator/Parser/NonAnsi.php | 19 + .../climate/src/Decorator/Parser/Parser.php | 38 + .../src/Decorator/Parser/ParserFactory.php | 26 + .../src/Decorator/Parser/ParserImporter.php | 23 + vendor/league/climate/src/Decorator/Style.php | 295 + vendor/league/climate/src/Decorator/Tags.php | 76 + .../climate/src/Exceptions/Exception.php | 7 + .../Exceptions/InvalidArgumentException.php | 7 + .../src/Exceptions/RuntimeException.php | 7 + .../Exceptions/UnexpectedValueException.php | 7 + vendor/league/climate/src/Logger.php | 174 + vendor/league/climate/src/Settings/Art.php | 22 + .../league/climate/src/Settings/Manager.php | 84 + .../climate/src/Settings/SettingsImporter.php | 32 + .../src/Settings/SettingsInterface.php | 11 + .../Basic/BasicTerminalObject.php | 47 + .../Basic/BasicTerminalObjectInterface.php | 34 + .../src/TerminalObject/Basic/Border.php | 67 + .../climate/src/TerminalObject/Basic/Br.php | 16 + .../src/TerminalObject/Basic/Clear.php | 21 + .../src/TerminalObject/Basic/ClearLine.php | 36 + .../src/TerminalObject/Basic/Columns.php | 207 + .../climate/src/TerminalObject/Basic/Draw.php | 30 + .../climate/src/TerminalObject/Basic/Dump.php | 36 + .../src/TerminalObject/Basic/Flank.php | 74 + .../src/TerminalObject/Basic/Inline.php | 16 + .../climate/src/TerminalObject/Basic/Json.php | 28 + .../climate/src/TerminalObject/Basic/Out.php | 28 + .../src/TerminalObject/Basic/Repeatable.php | 18 + .../climate/src/TerminalObject/Basic/Tab.php | 29 + .../src/TerminalObject/Basic/Table.php | 308 + .../src/TerminalObject/Dynamic/Animation.php | 213 + .../Dynamic/Animation/Keyframe.php | 265 + .../Dynamic/Checkbox/Checkbox.php | 222 + .../Dynamic/Checkbox/CheckboxGroup.php | 191 + .../Dynamic/Checkbox/RadioGroup.php | 38 + .../src/TerminalObject/Dynamic/Checkboxes.php | 159 + .../src/TerminalObject/Dynamic/Confirm.php | 44 + .../Dynamic/DynamicTerminalObject.php | 18 + .../DynamicTerminalObjectInterface.php | 27 + .../src/TerminalObject/Dynamic/Input.php | 283 + .../TerminalObject/Dynamic/InputAbstract.php | 37 + .../src/TerminalObject/Dynamic/Padding.php | 141 + .../src/TerminalObject/Dynamic/Password.php | 13 + .../src/TerminalObject/Dynamic/Progress.php | 315 + .../src/TerminalObject/Dynamic/Radio.php | 51 + .../src/TerminalObject/Dynamic/Spinner.php | 159 + .../climate/src/TerminalObject/Helper/Art.php | 160 + .../src/TerminalObject/Helper/Sleeper.php | 37 + .../Helper/SleeperInterface.php | 13 + .../TerminalObject/Helper/StringLength.php | 112 + .../src/TerminalObject/Router/BaseRouter.php | 89 + .../src/TerminalObject/Router/BasicRouter.php | 42 + .../TerminalObject/Router/DynamicRouter.php | 32 + .../Router/ExtensionCollection.php | 147 + .../src/TerminalObject/Router/Router.php | 157 + .../TerminalObject/Router/RouterInterface.php | 29 + vendor/league/climate/src/Util/Cursor.php | 94 + vendor/league/climate/src/Util/Helper.php | 50 + vendor/league/climate/src/Util/Output.php | 315 + .../climate/src/Util/OutputImporter.php | 23 + .../src/Util/Reader/ReaderInterface.php | 16 + .../league/climate/src/Util/Reader/Stdin.php | 95 + .../league/climate/src/Util/System/Linux.php | 109 + .../league/climate/src/Util/System/System.php | 68 + .../climate/src/Util/System/SystemFactory.php | 44 + .../climate/src/Util/System/Windows.php | 78 + .../league/climate/src/Util/UtilFactory.php | 66 + .../league/climate/src/Util/UtilImporter.php | 23 + .../league/climate/src/Util/Writer/Buffer.php | 44 + .../league/climate/src/Util/Writer/File.php | 101 + .../league/climate/src/Util/Writer/StdErr.php | 16 + .../league/climate/src/Util/Writer/StdOut.php | 16 + .../src/Util/Writer/WriterInterface.php | 13 + .../cli-prompt/.github/workflows/lint.yml | 30 + .../cli-prompt/.github/workflows/phpstan.yml | 46 + vendor/seld/cli-prompt/.gitignore | 1 + vendor/seld/cli-prompt/LICENSE | 19 + vendor/seld/cli-prompt/README.md | 61 + vendor/seld/cli-prompt/composer.json | 35 + vendor/seld/cli-prompt/phpstan.neon.dist | 5 + vendor/seld/cli-prompt/res/example.php | 15 + vendor/seld/cli-prompt/res/hiddeninput.exe | Bin 0 -> 9216 bytes vendor/seld/cli-prompt/src/CliPrompt.php | 127 + .../symfony/deprecation-contracts/.gitignore | 3 + .../deprecation-contracts/CHANGELOG.md | 5 + vendor/symfony/deprecation-contracts/LICENSE | 19 + .../symfony/deprecation-contracts/README.md | 26 + .../deprecation-contracts/composer.json | 35 + .../deprecation-contracts/function.php | 27 + vendor/symfony/finder/CHANGELOG.md | 87 + .../symfony/finder/Comparator/Comparator.php | 117 + .../finder/Comparator/DateComparator.php | 50 + .../finder/Comparator/NumberComparator.php | 78 + .../Exception/AccessDeniedException.php | 19 + .../Exception/DirectoryNotFoundException.php | 19 + vendor/symfony/finder/Finder.php | 806 ++ vendor/symfony/finder/Gitignore.php | 93 + vendor/symfony/finder/Glob.php | 111 + .../finder/Iterator/CustomFilterIterator.php | 64 + .../Iterator/DateRangeFilterIterator.php | 61 + .../Iterator/DepthRangeFilterIterator.php | 51 + .../ExcludeDirectoryFilterIterator.php | 97 + .../Iterator/FileTypeFilterIterator.php | 56 + .../Iterator/FilecontentFilterIterator.php | 61 + .../Iterator/FilenameFilterIterator.php | 50 + .../symfony/finder/Iterator/LazyIterator.php | 32 + .../Iterator/MultiplePcreFilterIterator.php | 117 + .../finder/Iterator/PathFilterIterator.php | 59 + .../Iterator/RecursiveDirectoryIterator.php | 158 + .../Iterator/SizeRangeFilterIterator.php | 60 + .../finder/Iterator/SortableIterator.php | 104 + .../Iterator/VcsIgnoredFilterIterator.php | 151 + vendor/symfony/finder/LICENSE | 19 + vendor/symfony/finder/README.md | 14 + vendor/symfony/finder/SplFileInfo.php | 88 + vendor/symfony/finder/composer.json | 30 + vendor/symfony/polyfill-php80/LICENSE | 19 + vendor/symfony/polyfill-php80/Php80.php | 115 + vendor/symfony/polyfill-php80/PhpToken.php | 103 + vendor/symfony/polyfill-php80/README.md | 25 + .../Resources/stubs/Attribute.php | 31 + .../Resources/stubs/PhpToken.php | 16 + .../Resources/stubs/Stringable.php | 20 + .../Resources/stubs/UnhandledMatchError.php | 16 + .../Resources/stubs/ValueError.php | 16 + vendor/symfony/polyfill-php80/bootstrap.php | 42 + vendor/symfony/polyfill-php80/composer.json | 37 + 204 files changed, 27855 insertions(+), 4 deletions(-) create mode 100644 site/plugins/kirby3-janitor/.editorconfig create mode 100644 site/plugins/kirby3-janitor/.eslintrc.json create mode 100644 site/plugins/kirby3-janitor/.php-cs-fixer.dist.php create mode 100644 site/plugins/kirby3-janitor/LICENSE create mode 100644 site/plugins/kirby3-janitor/README.md create mode 100644 site/plugins/kirby3-janitor/classes/BackupZipJob.php create mode 100644 site/plugins/kirby3-janitor/classes/CleanCacheFilesJob.php create mode 100644 site/plugins/kirby3-janitor/classes/CleanContentJob.php create mode 100644 site/plugins/kirby3-janitor/classes/CleanSessionsJob.php create mode 100644 site/plugins/kirby3-janitor/classes/ContextJob.php create mode 100644 site/plugins/kirby3-janitor/classes/FlushLapseJob.php create mode 100644 site/plugins/kirby3-janitor/classes/FlushPagesCacheJob.php create mode 100644 site/plugins/kirby3-janitor/classes/FlushRedisDBJob.php create mode 100644 site/plugins/kirby3-janitor/classes/FlushSessionFilesJob.php create mode 100644 site/plugins/kirby3-janitor/classes/Janitor.php create mode 100644 site/plugins/kirby3-janitor/classes/JanitorJob.php create mode 100644 site/plugins/kirby3-janitor/classes/Job.php create mode 100644 site/plugins/kirby3-janitor/classes/QuietWriter.php create mode 100644 site/plugins/kirby3-janitor/classes/ReindexAutoIDJob.php create mode 100644 site/plugins/kirby3-janitor/classes/ReindexSearchForKirbyJob.php create mode 100644 site/plugins/kirby3-janitor/classes/RenderJob.php create mode 100644 site/plugins/kirby3-janitor/classes/ThumbsJob.php create mode 100644 site/plugins/kirby3-janitor/classes/WhistleJob.php create mode 100644 site/plugins/kirby3-janitor/composer.json create mode 100644 site/plugins/kirby3-janitor/composer.lock create mode 100644 site/plugins/kirby3-janitor/docker-compose.yml create mode 100644 site/plugins/kirby3-janitor/index.css create mode 100644 site/plugins/kirby3-janitor/index.js create mode 100644 site/plugins/kirby3-janitor/index.php create mode 100755 site/plugins/kirby3-janitor/janitor create mode 100644 site/plugins/kirby3-janitor/package-lock.json create mode 100755 site/plugins/kirby3-janitor/package.json create mode 100644 site/plugins/kirby3-janitor/snippets/maintenance.php create mode 100755 site/plugins/kirby3-janitor/src/components/fields/Janitor.vue create mode 100755 site/plugins/kirby3-janitor/src/index.js create mode 100644 vendor/league/climate/CHANGELOG.md create mode 100644 vendor/league/climate/CODE_OF_CONDUCT.md create mode 100644 vendor/league/climate/CONTRIBUTING.md create mode 100644 vendor/league/climate/Dockerfile create mode 100644 vendor/league/climate/LICENSE.md create mode 100644 vendor/league/climate/README.md create mode 100644 vendor/league/climate/composer.json create mode 100644 vendor/league/climate/src/ASCII/404.txt create mode 100644 vendor/league/climate/src/ASCII/bender.txt create mode 100644 vendor/league/climate/src/ASCII/failed.txt create mode 100644 vendor/league/climate/src/ASCII/fancy-bender.txt create mode 100644 vendor/league/climate/src/ASCII/passed.txt create mode 100644 vendor/league/climate/src/ASCII/php create mode 100644 vendor/league/climate/src/ASCII/the-league-big.txt create mode 100644 vendor/league/climate/src/ASCII/the-league-bigger.txt create mode 100644 vendor/league/climate/src/ASCII/the-league-massive.txt create mode 100644 vendor/league/climate/src/ASCII/the-league.txt create mode 100644 vendor/league/climate/src/Argument/Argument.php create mode 100644 vendor/league/climate/src/Argument/Filter.php create mode 100644 vendor/league/climate/src/Argument/Manager.php create mode 100644 vendor/league/climate/src/Argument/Parser.php create mode 100644 vendor/league/climate/src/Argument/Summary.php create mode 100644 vendor/league/climate/src/CLImate.php create mode 100644 vendor/league/climate/src/Decorator/Component/BackgroundColor.php create mode 100644 vendor/league/climate/src/Decorator/Component/BaseDecorator.php create mode 100644 vendor/league/climate/src/Decorator/Component/Color.php create mode 100644 vendor/league/climate/src/Decorator/Component/Command.php create mode 100644 vendor/league/climate/src/Decorator/Component/DecoratorInterface.php create mode 100644 vendor/league/climate/src/Decorator/Component/Format.php create mode 100644 vendor/league/climate/src/Decorator/Parser/Ansi.php create mode 100644 vendor/league/climate/src/Decorator/Parser/NonAnsi.php create mode 100644 vendor/league/climate/src/Decorator/Parser/Parser.php create mode 100644 vendor/league/climate/src/Decorator/Parser/ParserFactory.php create mode 100644 vendor/league/climate/src/Decorator/Parser/ParserImporter.php create mode 100644 vendor/league/climate/src/Decorator/Style.php create mode 100644 vendor/league/climate/src/Decorator/Tags.php create mode 100644 vendor/league/climate/src/Exceptions/Exception.php create mode 100644 vendor/league/climate/src/Exceptions/InvalidArgumentException.php create mode 100644 vendor/league/climate/src/Exceptions/RuntimeException.php create mode 100644 vendor/league/climate/src/Exceptions/UnexpectedValueException.php create mode 100644 vendor/league/climate/src/Logger.php create mode 100644 vendor/league/climate/src/Settings/Art.php create mode 100644 vendor/league/climate/src/Settings/Manager.php create mode 100644 vendor/league/climate/src/Settings/SettingsImporter.php create mode 100644 vendor/league/climate/src/Settings/SettingsInterface.php create mode 100644 vendor/league/climate/src/TerminalObject/Basic/BasicTerminalObject.php create mode 100644 vendor/league/climate/src/TerminalObject/Basic/BasicTerminalObjectInterface.php create mode 100644 vendor/league/climate/src/TerminalObject/Basic/Border.php create mode 100644 vendor/league/climate/src/TerminalObject/Basic/Br.php create mode 100644 vendor/league/climate/src/TerminalObject/Basic/Clear.php create mode 100644 vendor/league/climate/src/TerminalObject/Basic/ClearLine.php create mode 100644 vendor/league/climate/src/TerminalObject/Basic/Columns.php create mode 100644 vendor/league/climate/src/TerminalObject/Basic/Draw.php create mode 100644 vendor/league/climate/src/TerminalObject/Basic/Dump.php create mode 100644 vendor/league/climate/src/TerminalObject/Basic/Flank.php create mode 100644 vendor/league/climate/src/TerminalObject/Basic/Inline.php create mode 100644 vendor/league/climate/src/TerminalObject/Basic/Json.php create mode 100644 vendor/league/climate/src/TerminalObject/Basic/Out.php create mode 100644 vendor/league/climate/src/TerminalObject/Basic/Repeatable.php create mode 100644 vendor/league/climate/src/TerminalObject/Basic/Tab.php create mode 100644 vendor/league/climate/src/TerminalObject/Basic/Table.php create mode 100644 vendor/league/climate/src/TerminalObject/Dynamic/Animation.php create mode 100644 vendor/league/climate/src/TerminalObject/Dynamic/Animation/Keyframe.php create mode 100644 vendor/league/climate/src/TerminalObject/Dynamic/Checkbox/Checkbox.php create mode 100644 vendor/league/climate/src/TerminalObject/Dynamic/Checkbox/CheckboxGroup.php create mode 100644 vendor/league/climate/src/TerminalObject/Dynamic/Checkbox/RadioGroup.php create mode 100644 vendor/league/climate/src/TerminalObject/Dynamic/Checkboxes.php create mode 100644 vendor/league/climate/src/TerminalObject/Dynamic/Confirm.php create mode 100644 vendor/league/climate/src/TerminalObject/Dynamic/DynamicTerminalObject.php create mode 100644 vendor/league/climate/src/TerminalObject/Dynamic/DynamicTerminalObjectInterface.php create mode 100644 vendor/league/climate/src/TerminalObject/Dynamic/Input.php create mode 100644 vendor/league/climate/src/TerminalObject/Dynamic/InputAbstract.php create mode 100644 vendor/league/climate/src/TerminalObject/Dynamic/Padding.php create mode 100644 vendor/league/climate/src/TerminalObject/Dynamic/Password.php create mode 100644 vendor/league/climate/src/TerminalObject/Dynamic/Progress.php create mode 100644 vendor/league/climate/src/TerminalObject/Dynamic/Radio.php create mode 100644 vendor/league/climate/src/TerminalObject/Dynamic/Spinner.php create mode 100644 vendor/league/climate/src/TerminalObject/Helper/Art.php create mode 100644 vendor/league/climate/src/TerminalObject/Helper/Sleeper.php create mode 100644 vendor/league/climate/src/TerminalObject/Helper/SleeperInterface.php create mode 100644 vendor/league/climate/src/TerminalObject/Helper/StringLength.php create mode 100644 vendor/league/climate/src/TerminalObject/Router/BaseRouter.php create mode 100644 vendor/league/climate/src/TerminalObject/Router/BasicRouter.php create mode 100644 vendor/league/climate/src/TerminalObject/Router/DynamicRouter.php create mode 100644 vendor/league/climate/src/TerminalObject/Router/ExtensionCollection.php create mode 100644 vendor/league/climate/src/TerminalObject/Router/Router.php create mode 100644 vendor/league/climate/src/TerminalObject/Router/RouterInterface.php create mode 100644 vendor/league/climate/src/Util/Cursor.php create mode 100644 vendor/league/climate/src/Util/Helper.php create mode 100644 vendor/league/climate/src/Util/Output.php create mode 100644 vendor/league/climate/src/Util/OutputImporter.php create mode 100644 vendor/league/climate/src/Util/Reader/ReaderInterface.php create mode 100644 vendor/league/climate/src/Util/Reader/Stdin.php create mode 100644 vendor/league/climate/src/Util/System/Linux.php create mode 100644 vendor/league/climate/src/Util/System/System.php create mode 100644 vendor/league/climate/src/Util/System/SystemFactory.php create mode 100644 vendor/league/climate/src/Util/System/Windows.php create mode 100644 vendor/league/climate/src/Util/UtilFactory.php create mode 100644 vendor/league/climate/src/Util/UtilImporter.php create mode 100644 vendor/league/climate/src/Util/Writer/Buffer.php create mode 100644 vendor/league/climate/src/Util/Writer/File.php create mode 100644 vendor/league/climate/src/Util/Writer/StdErr.php create mode 100644 vendor/league/climate/src/Util/Writer/StdOut.php create mode 100644 vendor/league/climate/src/Util/Writer/WriterInterface.php create mode 100644 vendor/seld/cli-prompt/.github/workflows/lint.yml create mode 100644 vendor/seld/cli-prompt/.github/workflows/phpstan.yml create mode 100644 vendor/seld/cli-prompt/.gitignore create mode 100644 vendor/seld/cli-prompt/LICENSE create mode 100644 vendor/seld/cli-prompt/README.md create mode 100644 vendor/seld/cli-prompt/composer.json create mode 100644 vendor/seld/cli-prompt/phpstan.neon.dist create mode 100644 vendor/seld/cli-prompt/res/example.php create mode 100644 vendor/seld/cli-prompt/res/hiddeninput.exe create mode 100644 vendor/seld/cli-prompt/src/CliPrompt.php create mode 100644 vendor/symfony/deprecation-contracts/.gitignore create mode 100644 vendor/symfony/deprecation-contracts/CHANGELOG.md create mode 100644 vendor/symfony/deprecation-contracts/LICENSE create mode 100644 vendor/symfony/deprecation-contracts/README.md create mode 100644 vendor/symfony/deprecation-contracts/composer.json create mode 100644 vendor/symfony/deprecation-contracts/function.php create mode 100644 vendor/symfony/finder/CHANGELOG.md create mode 100644 vendor/symfony/finder/Comparator/Comparator.php create mode 100644 vendor/symfony/finder/Comparator/DateComparator.php create mode 100644 vendor/symfony/finder/Comparator/NumberComparator.php create mode 100644 vendor/symfony/finder/Exception/AccessDeniedException.php create mode 100644 vendor/symfony/finder/Exception/DirectoryNotFoundException.php create mode 100644 vendor/symfony/finder/Finder.php create mode 100644 vendor/symfony/finder/Gitignore.php create mode 100644 vendor/symfony/finder/Glob.php create mode 100644 vendor/symfony/finder/Iterator/CustomFilterIterator.php create mode 100644 vendor/symfony/finder/Iterator/DateRangeFilterIterator.php create mode 100644 vendor/symfony/finder/Iterator/DepthRangeFilterIterator.php create mode 100644 vendor/symfony/finder/Iterator/ExcludeDirectoryFilterIterator.php create mode 100644 vendor/symfony/finder/Iterator/FileTypeFilterIterator.php create mode 100644 vendor/symfony/finder/Iterator/FilecontentFilterIterator.php create mode 100644 vendor/symfony/finder/Iterator/FilenameFilterIterator.php create mode 100644 vendor/symfony/finder/Iterator/LazyIterator.php create mode 100644 vendor/symfony/finder/Iterator/MultiplePcreFilterIterator.php create mode 100644 vendor/symfony/finder/Iterator/PathFilterIterator.php create mode 100644 vendor/symfony/finder/Iterator/RecursiveDirectoryIterator.php create mode 100644 vendor/symfony/finder/Iterator/SizeRangeFilterIterator.php create mode 100644 vendor/symfony/finder/Iterator/SortableIterator.php create mode 100644 vendor/symfony/finder/Iterator/VcsIgnoredFilterIterator.php create mode 100644 vendor/symfony/finder/LICENSE create mode 100644 vendor/symfony/finder/README.md create mode 100644 vendor/symfony/finder/SplFileInfo.php create mode 100644 vendor/symfony/finder/composer.json create mode 100644 vendor/symfony/polyfill-php80/LICENSE create mode 100644 vendor/symfony/polyfill-php80/Php80.php create mode 100644 vendor/symfony/polyfill-php80/PhpToken.php create mode 100644 vendor/symfony/polyfill-php80/README.md create mode 100644 vendor/symfony/polyfill-php80/Resources/stubs/Attribute.php create mode 100644 vendor/symfony/polyfill-php80/Resources/stubs/PhpToken.php create mode 100644 vendor/symfony/polyfill-php80/Resources/stubs/Stringable.php create mode 100644 vendor/symfony/polyfill-php80/Resources/stubs/UnhandledMatchError.php create mode 100644 vendor/symfony/polyfill-php80/Resources/stubs/ValueError.php create mode 100644 vendor/symfony/polyfill-php80/bootstrap.php create mode 100644 vendor/symfony/polyfill-php80/composer.json diff --git a/composer.json b/composer.json index 639e889..48eeab6 100644 --- a/composer.json +++ b/composer.json @@ -26,7 +26,8 @@ "getkirby/cms": "^3.6", "sylvainjule/embed": "^1.0", "jg/kirby-fields-block": "^1.1", - "sylvainjule/color-palette": "^1.0" + "sylvainjule/color-palette": "^1.0", + "bnomei/kirby3-janitor": "^2.16" }, "config": { "allow-plugins": { diff --git a/composer.lock b/composer.lock index 861bcd3..f6d283e 100644 --- a/composer.lock +++ b/composer.lock @@ -4,8 +4,90 @@ "Read more about it at https://getcomposer.org/doc/01-basic-usage.md#installing-dependencies", "This file is @generated automatically" ], - "content-hash": "74776b9954f7c7164160efc4281c70dc", + "content-hash": "12d6b33d05835517f785cab96892d755", "packages": [ + { + "name": "bnomei/kirby3-janitor", + "version": "2.16.0", + "source": { + "type": "git", + "url": "https://github.com/bnomei/kirby3-janitor.git", + "reference": "12a9132cf221f3e248d9f22bddb7cbd7d303ae3a" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/bnomei/kirby3-janitor/zipball/12a9132cf221f3e248d9f22bddb7cbd7d303ae3a", + "reference": "12a9132cf221f3e248d9f22bddb7cbd7d303ae3a", + "shasum": "" + }, + "require": { + "getkirby/composer-installer": "^1.2", + "league/climate": "^3.7", + "php": ">=7.4.0", + "symfony/deprecation-contracts": "2.5", + "symfony/finder": "^5.4" + }, + "require-dev": { + "getkirby/cms": "^3.5", + "php-coveralls/php-coveralls": "^2.4", + "phpunit/phpunit": "^9.5" + }, + "type": "kirby-plugin", + "extra": { + "kirby-cms-path": "tests/kirby" + }, + "autoload": { + "psr-4": { + "Bnomei\\": "classes/" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Bruno Meilick", + "email": "b@bnomei.com" + } + ], + "description": "Kirby 3 Plugin for running jobs like cleaning the cache from within the Panel, PHP code or a cronjob", + "keywords": [ + "ajax", + "button", + "cache", + "clean", + "cronjob", + "janitor", + "job-runner", + "kirby3", + "kirby3-cms", + "kirby3-plugin" + ], + "support": { + "issues": "https://github.com/bnomei/kirby3-janitor/issues", + "source": "https://github.com/bnomei/kirby3-janitor/tree/v2.16.0" + }, + "funding": [ + { + "url": "https://buymeacoff.ee/bnomei", + "type": "custom" + }, + { + "url": "https://paypal.me/bnomei", + "type": "custom" + }, + { + "url": "https://github.com/bnomei", + "type": "github" + }, + { + "url": "https://www.patreon.com/bnomei", + "type": "patreon" + } + ], + "time": "2022-04-14T18:24:35+00:00" + }, { "name": "claviska/simpleimage", "version": "3.7.0", @@ -650,6 +732,71 @@ ], "time": "2022-03-08T20:15:36+00:00" }, + { + "name": "league/climate", + "version": "3.8.2", + "source": { + "type": "git", + "url": "https://github.com/thephpleague/climate.git", + "reference": "a785a3ac8f584eed4abd45e4e16fe64c46659a28" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/thephpleague/climate/zipball/a785a3ac8f584eed4abd45e4e16fe64c46659a28", + "reference": "a785a3ac8f584eed4abd45e4e16fe64c46659a28", + "shasum": "" + }, + "require": { + "php": "^7.3 || ^8.0", + "psr/log": "^1.0 || ^2.0 || ^3.0", + "seld/cli-prompt": "^1.0" + }, + "require-dev": { + "mikey179/vfsstream": "^1.6.10", + "mockery/mockery": "^1.4.2", + "phpunit/phpunit": "^9.5.10" + }, + "suggest": { + "ext-mbstring": "If ext-mbstring is not available you MUST install symfony/polyfill-mbstring" + }, + "type": "library", + "autoload": { + "psr-4": { + "League\\CLImate\\": "src/" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Joe Tannenbaum", + "email": "hey@joe.codes", + "homepage": "http://joe.codes/", + "role": "Developer" + }, + { + "name": "Craig Duncan", + "email": "git@duncanc.co.uk", + "homepage": "https://github.com/duncan3dc", + "role": "Developer" + } + ], + "description": "PHP's best friend for the terminal. CLImate allows you to easily output colored text, special formats, and more.", + "keywords": [ + "cli", + "colors", + "command", + "php", + "terminal" + ], + "support": { + "issues": "https://github.com/thephpleague/climate/issues", + "source": "https://github.com/thephpleague/climate/tree/3.8.2" + }, + "time": "2022-06-18T14:42:08+00:00" + }, { "name": "league/color-extractor", "version": "0.3.2", @@ -1251,6 +1398,61 @@ }, "time": "2019-03-08T08:55:37+00:00" }, + { + "name": "seld/cli-prompt", + "version": "1.0.4", + "source": { + "type": "git", + "url": "https://github.com/Seldaek/cli-prompt.git", + "reference": "b8dfcf02094b8c03b40322c229493bb2884423c5" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/Seldaek/cli-prompt/zipball/b8dfcf02094b8c03b40322c229493bb2884423c5", + "reference": "b8dfcf02094b8c03b40322c229493bb2884423c5", + "shasum": "" + }, + "require": { + "php": ">=5.3" + }, + "require-dev": { + "phpstan/phpstan": "^0.12.63" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "1.x-dev" + } + }, + "autoload": { + "psr-4": { + "Seld\\CliPrompt\\": "src/" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Jordi Boggiano", + "email": "j.boggiano@seld.be" + } + ], + "description": "Allows you to prompt for user input on the command line, and optionally hide the characters they type", + "keywords": [ + "cli", + "console", + "hidden", + "input", + "prompt" + ], + "support": { + "issues": "https://github.com/Seldaek/cli-prompt/issues", + "source": "https://github.com/Seldaek/cli-prompt/tree/1.0.4" + }, + "time": "2020-12-15T21:32:01+00:00" + }, { "name": "sylvainjule/color-palette", "version": "1.0.4", @@ -1329,6 +1531,136 @@ }, "time": "2024-03-08T14:51:01+00:00" }, + { + "name": "symfony/deprecation-contracts", + "version": "v2.5.0", + "source": { + "type": "git", + "url": "https://github.com/symfony/deprecation-contracts.git", + "reference": "6f981ee24cf69ee7ce9736146d1c57c2780598a8" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/symfony/deprecation-contracts/zipball/6f981ee24cf69ee7ce9736146d1c57c2780598a8", + "reference": "6f981ee24cf69ee7ce9736146d1c57c2780598a8", + "shasum": "" + }, + "require": { + "php": ">=7.1" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-main": "2.5-dev" + }, + "thanks": { + "name": "symfony/contracts", + "url": "https://github.com/symfony/contracts" + } + }, + "autoload": { + "files": [ + "function.php" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Nicolas Grekas", + "email": "p@tchwork.com" + }, + { + "name": "Symfony Community", + "homepage": "https://symfony.com/contributors" + } + ], + "description": "A generic function and convention to trigger deprecation notices", + "homepage": "https://symfony.com", + "support": { + "source": "https://github.com/symfony/deprecation-contracts/tree/v2.5.0" + }, + "funding": [ + { + "url": "https://symfony.com/sponsor", + "type": "custom" + }, + { + "url": "https://github.com/fabpot", + "type": "github" + }, + { + "url": "https://tidelift.com/funding/github/packagist/symfony/symfony", + "type": "tidelift" + } + ], + "time": "2021-07-12T14:48:14+00:00" + }, + { + "name": "symfony/finder", + "version": "v5.4.43", + "source": { + "type": "git", + "url": "https://github.com/symfony/finder.git", + "reference": "ae25a9145a900764158d439653d5630191155ca0" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/symfony/finder/zipball/ae25a9145a900764158d439653d5630191155ca0", + "reference": "ae25a9145a900764158d439653d5630191155ca0", + "shasum": "" + }, + "require": { + "php": ">=7.2.5", + "symfony/deprecation-contracts": "^2.1|^3", + "symfony/polyfill-php80": "^1.16" + }, + "type": "library", + "autoload": { + "psr-4": { + "Symfony\\Component\\Finder\\": "" + }, + "exclude-from-classmap": [ + "/Tests/" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Fabien Potencier", + "email": "fabien@symfony.com" + }, + { + "name": "Symfony Community", + "homepage": "https://symfony.com/contributors" + } + ], + "description": "Finds files and directories via an intuitive fluent interface", + "homepage": "https://symfony.com", + "support": { + "source": "https://github.com/symfony/finder/tree/v5.4.43" + }, + "funding": [ + { + "url": "https://symfony.com/sponsor", + "type": "custom" + }, + { + "url": "https://github.com/fabpot", + "type": "github" + }, + { + "url": "https://tidelift.com/funding/github/packagist/symfony/symfony", + "type": "tidelift" + } + ], + "time": "2024-08-13T14:03:51+00:00" + }, { "name": "symfony/polyfill-intl-idn", "version": "v1.26.0", @@ -1579,6 +1911,86 @@ } ], "time": "2022-05-24T11:49:31+00:00" + }, + { + "name": "symfony/polyfill-php80", + "version": "v1.31.0", + "source": { + "type": "git", + "url": "https://github.com/symfony/polyfill-php80.git", + "reference": "60328e362d4c2c802a54fcbf04f9d3fb892b4cf8" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/symfony/polyfill-php80/zipball/60328e362d4c2c802a54fcbf04f9d3fb892b4cf8", + "reference": "60328e362d4c2c802a54fcbf04f9d3fb892b4cf8", + "shasum": "" + }, + "require": { + "php": ">=7.2" + }, + "type": "library", + "extra": { + "thanks": { + "name": "symfony/polyfill", + "url": "https://github.com/symfony/polyfill" + } + }, + "autoload": { + "files": [ + "bootstrap.php" + ], + "psr-4": { + "Symfony\\Polyfill\\Php80\\": "" + }, + "classmap": [ + "Resources/stubs" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Ion Bazan", + "email": "ion.bazan@gmail.com" + }, + { + "name": "Nicolas Grekas", + "email": "p@tchwork.com" + }, + { + "name": "Symfony Community", + "homepage": "https://symfony.com/contributors" + } + ], + "description": "Symfony polyfill backporting some PHP 8.0+ features to lower PHP versions", + "homepage": "https://symfony.com", + "keywords": [ + "compatibility", + "polyfill", + "portable", + "shim" + ], + "support": { + "source": "https://github.com/symfony/polyfill-php80/tree/v1.31.0" + }, + "funding": [ + { + "url": "https://symfony.com/sponsor", + "type": "custom" + }, + { + "url": "https://github.com/fabpot", + "type": "github" + }, + { + "url": "https://tidelift.com/funding/github/packagist/symfony/symfony", + "type": "tidelift" + } + ], + "time": "2024-09-09T11:45:10+00:00" } ], "packages-dev": [], diff --git a/site/blueprints/pages/default.yml b/site/blueprints/pages/default.yml index e0fa632..9dc5ac7 100644 --- a/site/blueprints/pages/default.yml +++ b/site/blueprints/pages/default.yml @@ -10,6 +10,13 @@ columns: fields: type: fields fields: + janitor: + type: janitor + label: Copy from de to here + progress: Working... + job: copyFromDe + data: 'layout' + confirm: "This will replace everything under here" layout: label: Layout type: layout diff --git a/site/blueprints/pages/project.yml b/site/blueprints/pages/project.yml index ad8fc0b..b202a4f 100644 --- a/site/blueprints/pages/project.yml +++ b/site/blueprints/pages/project.yml @@ -32,6 +32,13 @@ tabs: work: label: Projekt fields: + janitor: + type: janitor + label: Copy from de to here + progress: Working... + job: copyFromDe + data: 'layout' + confirm: "This will replace everything under here" layout: label: Layout type: layout diff --git a/site/config/config.php b/site/config/config.php index a840570..e6729ba 100644 --- a/site/config/config.php +++ b/site/config/config.php @@ -3,6 +3,18 @@ return [ 'languages' => true, 'debug' => true, + 'bnomei.janitor.jobs' => [ + 'copyFromDe' => function (Kirby\Cms\Page $page = null, string $data) { + $content = $page->content('de')->toArray(); + $page->update([$data => $content[$data]], kirby()->languageCode()); + + return [ + 'status' => 200, + 'label' => 'Done', + 'reload' => true + ]; + }, + ], 'thumbs' => [ 'srcsets' => [ 'full' => [ diff --git a/site/plugins/kirby3-janitor/.editorconfig b/site/plugins/kirby3-janitor/.editorconfig new file mode 100644 index 0000000..9b773af --- /dev/null +++ b/site/plugins/kirby3-janitor/.editorconfig @@ -0,0 +1,25 @@ +[*.{css,scss,less,js,json,ts,sass,html,hbs,mustache,phtml,html.twig,md,yml}] +charset = utf-8 +indent_style = space +indent_size = 2 +end_of_line = lf +insert_final_newline = true +trim_trailing_whitespace = true +insert_final_newline = true + +[*.md, *.txt] +indent_size = 4 +trim_trailing_whitespace = false + +[site/templates/**.php] +indent_size = 2 + +[site/snippets/**.php] +indent_size = 2 + +[package.json,.{babelrc,editorconfig,eslintrc,lintstagedrc,stylelintrc}] +indent_style = space +indent_size = 2 + +[composer.json] +indent_size = 4 \ No newline at end of file diff --git a/site/plugins/kirby3-janitor/.eslintrc.json b/site/plugins/kirby3-janitor/.eslintrc.json new file mode 100644 index 0000000..6fef7de --- /dev/null +++ b/site/plugins/kirby3-janitor/.eslintrc.json @@ -0,0 +1,18 @@ +{ + "env": { + "browser": true, + "es2021": true + }, + "extends": [ + "eslint:recommended", + "plugin:vue/recommended", + "prettier" + ], + "parserOptions": { + "ecmaVersion": 12, + "sourceType": "module" + }, + "rules": { + "vue/require-default-prop": "off" + } +} diff --git a/site/plugins/kirby3-janitor/.php-cs-fixer.dist.php b/site/plugins/kirby3-janitor/.php-cs-fixer.dist.php new file mode 100644 index 0000000..5b386ad --- /dev/null +++ b/site/plugins/kirby3-janitor/.php-cs-fixer.dist.php @@ -0,0 +1,19 @@ +exclude('content') + ->exclude('kirby') + ->exclude('node_modules') + //->exclude('site/plugins') + ->exclude('src') + ->exclude('vendor') + ->in(__DIR__) +; + +return (new PhpCsFixer\Config()) + ->setRules([ + '@PSR12' => true, + ]) + ->setFinder($finder) +; diff --git a/site/plugins/kirby3-janitor/LICENSE b/site/plugins/kirby3-janitor/LICENSE new file mode 100644 index 0000000..6e6c1d8 --- /dev/null +++ b/site/plugins/kirby3-janitor/LICENSE @@ -0,0 +1,21 @@ +MIT License + +Copyright (c) 2019 Bruno Meilick + +Permission is hereby granted, free of charge, to any person obtaining a copy +of this software and associated documentation files (the "Software"), to deal +in the Software without restriction, including without limitation the rights +to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +copies of the Software, and to permit persons to whom the Software is +furnished to do so, subject to the following conditions: + +The above copyright notice and this permission notice shall be included in all +copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE +SOFTWARE. diff --git a/site/plugins/kirby3-janitor/README.md b/site/plugins/kirby3-janitor/README.md new file mode 100644 index 0000000..48481c5 --- /dev/null +++ b/site/plugins/kirby3-janitor/README.md @@ -0,0 +1,67 @@ +# Kirby 3 Janitor + +![Release](https://flat.badgen.net/packagist/v/bnomei/kirby3-janitor?color=ae81ff) +![Downloads](https://flat.badgen.net/packagist/dt/bnomei/kirby3-janitor?color=272822) +[![Build Status](https://flat.badgen.net/travis/bnomei/kirby3-janitor)](https://travis-ci.com/bnomei/kirby3-janitor) +[![Coverage Status](https://flat.badgen.net/coveralls/c/github/bnomei/kirby3-janitor)](https://coveralls.io/github/bnomei/kirby3-janitor) +[![Maintainability](https://flat.badgen.net/codeclimate/maintainability/bnomei/kirby3-janitor)](https://codeclimate.com/github/bnomei/kirby3-janitor) +[![Twitter](https://flat.badgen.net/badge/twitter/bnomei?color=66d9ef)](https://twitter.com/bnomei) + +Kirby 3 Plugin for running jobs. + +- It is a Panel Button! +- It has jobs build-in for cleaning the cache, sessions, create zip-backup, pre-generate thumbs, open URLs, refresh the current Panel page and more. +- You can define your own jobs (call API hooks, play a game, hack a server, ...) +- It can be triggered in your frontend code and with CRON. +- It can also be used as a CLI with fancy output. +- It can also create logs of what it did. + +## Install + +Using composer: + +```bash +composer require bnomei/kirby3-janitor +``` + +Using git submodules: + +```bash +git submodule add https://github.com/bnomei/kirby3-janitor.git site/plugins/kirby3-janitor +``` + +Using download & copy: download [the latest release](https://github.com/bnomei/kirby3-janitor/releases) and copy to `site/plugins` + +## Commerical Usage + +>
+>Support open source!

+> This plugin is free but if you use it in a commercial project please consider to sponsor me or make a donation.
+> If my work helped you to make some cash it seems fair to me that I might get a little reward as well, right?

+> Be kind. Share a little. Thanks.

+> ‐ Bruno
+>   + +| M | O | N | E | Y | +|---|----|---|---|---| +| [Github sponsor](https://github.com/sponsors/bnomei) | [Patreon](https://patreon.com/bnomei) | [Buy Me a Coffee](https://buymeacoff.ee/bnomei) | [Paypal dontation](https://www.paypal.me/bnomei/15) | [Hire me](mailto:b@bnomei.com?subject=Kirby) | + +## Wiki + +Continue to the [Janitor Wiki](https://github.com/bnomei/kirby3-janitor/wiki) to read more on how to install, setup and use this plugin. + +## Dependencies + +- [Symfony Finder](https://symfony.com/doc/current/components/finder.html) +- [CLIMate](https://github.com/thephpleague/climate) + +## Disclaimer + +This plugin is provided "as is" with no guarantee. Use it at your own risk and always test it yourself before using it in a production environment. If you find any issues, please [create a new issue](https://github.com/bnomei/kirby3-janitor/issues/new). + +## License + +[MIT](https://opensource.org/licenses/MIT) + +It is discouraged to use this plugin in any project that promotes racism, sexism, homophobia, animal abuse, violence or any other form of hate speech. + diff --git a/site/plugins/kirby3-janitor/classes/BackupZipJob.php b/site/plugins/kirby3-janitor/classes/BackupZipJob.php new file mode 100644 index 0000000..473b03c --- /dev/null +++ b/site/plugins/kirby3-janitor/classes/BackupZipJob.php @@ -0,0 +1,165 @@ +options = [ + 'ulimit' => option('bnomei.janitor.backupzip.ulimit', 512), // 1024 seems to be unix default + 'date' => option('bnomei.janitor.backupzip.date', null), // null to disable, 'since 1 day ago' + 'roots' => option('bnomei.janitor.backupzip.roots', function () { + return [ + kirby()->roots()->accounts(), + kirby()->roots()->content(), + ]; + }), + 'target' => option('bnomei.janitor.backupzip.target', function () { + $dir = realpath(kirby()->roots()->accounts() . '/../') . '/backups'; + Dir::make($dir); + $prefix = option('bnomei.janitor.backupzip.prefix', ''); + return $dir . '/' . $prefix . time() . '.zip'; // date('Y-m-d') + }), + ]; + + foreach ($this->options as $key => $value) { + if (!is_string($value) && is_callable($value)) { + $this->options[$key] = $value(); + } + } + } + + /** + * @param string|null $key + * @return array + */ + public function option(?string $key = null) + { + if ($key) { + return A::get($this->options, $key); + } + return $this->options; + } + + public static function directory(): string + { + return \dirname((string) (new self())->option('target')); + } + + /** + * @return array + */ + public function job(): array + { + $time = time(); + $climate = \Bnomei\Janitor::climate(); + + $zipPath = (string) $this->option('target'); + $zip = new ZipArchive(); + if ($zip->open($zipPath, ZIPARCHIVE::CREATE | ZIPARCHIVE::OVERWRITE) !== true) { + if ($climate) { + $climate->red('Failed to create: ' . $zipPath); + } + return [ + 'status' => 500, + ]; + } + + $roots = $this->option('roots'); + $finder = new Finder(); + $finder->files()->in($roots); + if ($date = $this->option('date')) { + $finder->date($date); + } + $count = iterator_count($finder); // closing of zip + + $ulimit = $this->option('ulimit'); + $zipped = 0; + if ($climate) { + $climate->out('Files: ' . $count); + } + + $progress = null; + if ($count && $climate) { + $progress = $climate->progress()->total($count); + } + + foreach ($finder as $file) { + $filePath = $file->getPath() . DIRECTORY_SEPARATOR . $file->getFilename(); + $localFilePath = $filePath; + foreach ($roots as $root) { + $localFilePath = str_replace(dirname($root), '', $localFilePath); + } + if ($zip->addFile($filePath, $localFilePath)) { + $mime = F::mime($filePath); + + if (in_array($mime, [ + 'application/json', 'text/json', + 'application/yaml', 'text/yaml', + 'text/html', + 'text/plain', + 'text/xml', + 'application/x-javascript', + 'text/css', + 'text/csv', 'text/x-comma-separated-values', + 'text/comma-separated-values', 'application/octet-stream', + ])) { + $zip->setCompressionName($filePath, ZipArchive::CM_DEFLATE); + } else { + $zip->setCompressionName($filePath, ZipArchive::CM_STORE); + } + + $zipped++; + + if ($progress && $climate) { + $progress->current($zipped); + } + if ($zipped % $ulimit === 0) { + $zip->close(); + if ($zip->open($zipPath) === false) { + @unlink($zipPath); + if ($climate) { + $climate->red('Hit ulimit but failed to reopen zip: ' . $zipPath); + } + return [ + 'status' => 500, + 'error' => 'Hit ulimit but failed to reopen zip: ' . $zipPath, + ]; + } + } + } + } + + if ($climate) { + $climate->out('Closing zip...'); + } + $zip->close(); + if ($climate) { + $climate->out($zipPath); + } + + return [ + 'status' => $zipped > 0 ? 200 : 204, + 'duration' => time() - $time, + 'filename' => \basename($zipPath, '.zip'), + 'files' => $zipped, + 'nicesize' => \Kirby\Toolkit\F::niceSize($zipPath), + 'modified' => date('d/m/Y, H:i:s', \Kirby\Toolkit\F::modified($zipPath)), + ]; + } +} diff --git a/site/plugins/kirby3-janitor/classes/CleanCacheFilesJob.php b/site/plugins/kirby3-janitor/classes/CleanCacheFilesJob.php new file mode 100644 index 0000000..cef4427 --- /dev/null +++ b/site/plugins/kirby3-janitor/classes/CleanCacheFilesJob.php @@ -0,0 +1,39 @@ +roots()->cache(); + $removed = 0; + $finder = new Finder(); + $finder->files()->name('*.cache')->in($dir); + $count = iterator_count($finder); + $climate = \Bnomei\Janitor::climate(); + $progress = null; + if ($count && $climate) { + $progress = $climate->progress()->total($count); + } + foreach ($finder as $cacheFile) { + if (F::remove($cacheFile->getRealPath())) { + $removed++; + if ($progress && $climate) { + $progress->current($removed); + } + } + } + return [ + 'status' => $removed > 0 ? 200 : 204, + ]; + } +} diff --git a/site/plugins/kirby3-janitor/classes/CleanContentJob.php b/site/plugins/kirby3-janitor/classes/CleanContentJob.php new file mode 100644 index 0000000..f4ef480 --- /dev/null +++ b/site/plugins/kirby3-janitor/classes/CleanContentJob.php @@ -0,0 +1,116 @@ +impersonate('kirby'); + + // Define your collection + // Don't use `$site->index()` for thousands of pages + $collection = $kirby->site()->index(); + + $time = microtime(true); + $count = $collection->count(); + $updated = 0; + $this->climate = \Bnomei\Janitor::climate(); + + // set the fields to be ignored + $ignore = option('bnomei.jabitor.cleancontentjob.ignore', ['title', 'slug', 'template', 'sort']); + + // call the script for all languages if multilang + if ($kirby->multilang() === true) { + $languages = $kirby->languages(); + foreach ($languages as $language) { + $updated += $this->cleanUp($collection, $ignore, $language->code()); + } + } else { + $updated += $this->cleanUp($collection, $ignore); + } + + if ($this->climate) { + $this->climate->blue('duration: ' . round((microtime(true) - $time) * 1000) . 'ms'); + $this->climate->blue('count: ' . $count); + $this->climate->blue('updated: ' . $updated); + } + + return [ + 'status' => $updated > 0 ? 200 : 204, + ]; + } + + /** + * based on cookbook by @texnixe + * https://getkirby.com/docs/cookbook/extensions/content-file-cleanup + */ + protected function cleanUp($collection, $ignore = null, string $lang = null): int + { + $updated = 0; + foreach ($collection as $item) { + // get all fields in the content file + $contentFields = $item->content($lang)->fields(); + + // unset all fields in the `$ignore` array + foreach ($ignore as $field) { + if (array_key_exists($field, $contentFields) === true) { + unset($contentFields[$field]); + } + } + + // get the keys + $contentFields = array_keys($contentFields); + + // get all field keys from blueprint + $blueprintFields = array_keys($item->blueprint()->fields()); + + // get all field keys that are in $contentFields but not in $blueprintFields + $fieldsToBeDeleted = array_diff($contentFields, $blueprintFields); + + // update page only if there are any fields to be deleted + if (count($fieldsToBeDeleted) > 0) { + + // flip keys and values and set new values to null + $data = array_map(function ($value) { + return null; + }, array_flip($fieldsToBeDeleted)); + + // try to update the page with the data + try { + $item->update($data, $lang); + $updated++; + if ($this->climate) { + $this->climate->green('+++ ' . $item->id()); + } + } catch (\Exception $e) { + if ($this->climate) { + $this->climate->red('ERR ' . $item->id() . ': ' .$e->getMessage()); + } + } + } else { + if ($this->climate) { + $this->climate->white('=== ' . $item->id()); + } + } + } + + return $updated; + } +} diff --git a/site/plugins/kirby3-janitor/classes/CleanSessionsJob.php b/site/plugins/kirby3-janitor/classes/CleanSessionsJob.php new file mode 100644 index 0000000..141270b --- /dev/null +++ b/site/plugins/kirby3-janitor/classes/CleanSessionsJob.php @@ -0,0 +1,19 @@ +app()->session()->store()->collectGarbage(); + return [ + 'status' => $success ? 200 : 204, + ]; + } +} diff --git a/site/plugins/kirby3-janitor/classes/ContextJob.php b/site/plugins/kirby3-janitor/classes/ContextJob.php new file mode 100644 index 0000000..e4a2ef6 --- /dev/null +++ b/site/plugins/kirby3-janitor/classes/ContextJob.php @@ -0,0 +1,19 @@ + 200, + 'label' => $this->page()->title()->value() . ' ' . $this->data(), + ]; + } +} diff --git a/site/plugins/kirby3-janitor/classes/FlushLapseJob.php b/site/plugins/kirby3-janitor/classes/FlushLapseJob.php new file mode 100644 index 0000000..871f88f --- /dev/null +++ b/site/plugins/kirby3-janitor/classes/FlushLapseJob.php @@ -0,0 +1,24 @@ +flush(); + } + + return [ + 'status' => $success ? 200 : 204, + ]; + } +} diff --git a/site/plugins/kirby3-janitor/classes/FlushPagesCacheJob.php b/site/plugins/kirby3-janitor/classes/FlushPagesCacheJob.php new file mode 100644 index 0000000..cedd0b8 --- /dev/null +++ b/site/plugins/kirby3-janitor/classes/FlushPagesCacheJob.php @@ -0,0 +1,18 @@ + kirby()->cache('pages')->flush() ? 200 : 404, + ]; + } +} diff --git a/site/plugins/kirby3-janitor/classes/FlushRedisDBJob.php b/site/plugins/kirby3-janitor/classes/FlushRedisDBJob.php new file mode 100644 index 0000000..0584244 --- /dev/null +++ b/site/plugins/kirby3-janitor/classes/FlushRedisDBJob.php @@ -0,0 +1,29 @@ +redisClient()->dbsize() > 1) { + // DANGER: $this->connection->flushdb() + $redis->flush(); + $success = $redis->redisClient()->dbsize() === 0; + } + } + + return [ + 'status' => $success ? 200 : 204, + ]; + } +} diff --git a/site/plugins/kirby3-janitor/classes/FlushSessionFilesJob.php b/site/plugins/kirby3-janitor/classes/FlushSessionFilesJob.php new file mode 100644 index 0000000..a8ec2b7 --- /dev/null +++ b/site/plugins/kirby3-janitor/classes/FlushSessionFilesJob.php @@ -0,0 +1,39 @@ +root('sessions'); + $removed = 0; + $finder = new Finder(); + $finder->files()->name('*.sess')->in($dir); + $count = iterator_count($finder); + $climate = \Bnomei\Janitor::climate(); + $progress = null; + if ($count && $climate) { + $progress = $climate->progress()->total($count); + } + foreach ($finder as $cacheFile) { + if (F::remove($cacheFile->getRealPath())) { + $removed++; + if ($progress && $climate) { + $progress->current($removed); + } + } + } + return [ + 'status' => $removed > 0 ? 200 : 204, + ]; + } +} diff --git a/site/plugins/kirby3-janitor/classes/Janitor.php b/site/plugins/kirby3-janitor/classes/Janitor.php new file mode 100644 index 0000000..2e2c9a0 --- /dev/null +++ b/site/plugins/kirby3-janitor/classes/Janitor.php @@ -0,0 +1,274 @@ + option('debug'), + 'log' => option('bnomei.janitor.log.fn'), + 'jobs' => option('bnomei.janitor.jobs'), + 'jobs-defaults' => ['bnomei.janitor.jobs-defaults'], + 'jobs-extends' => option('bnomei.janitor.jobs-extends'), + 'secret' => option('bnomei.janitor.secret'), + ]; + $this->options = array_merge($defaults, $options); + + $extends = array_merge($this->options['jobs-defaults'], $this->options['jobs-extends']); + foreach ($extends as $extend) { + // NOTE: it is intended that jobs override merged not other way around + $this->options['jobs'] = array_change_key_case( + array_merge(option($extend, []), $this->options['jobs']) + ); + } + + foreach ($this->options as $key => $call) { + if (is_callable($call) && in_array($key, ['secret'])) { + $this->options[$key] = $call(); + } + } + } + + /** + * @param string|null $key + * @return array + */ + public function option(?string $key = null) + { + if ($key) { + return A::get($this->options, $key); + } + return $this->options; + } + + /** + * @param string $secret + * @param string $name + * @param array $data + * @return array + */ + public function jobWithSecret(string $secret, string $name, array $data = []): array + { + if ($secret === $this->option('secret')) { + return $this->job($name, $data); + } + return [ + 'status' => 401, + ]; + } + + /** + * @param string $name + * @param array $data + * @return array + */ + public function job(string $name, array $data = []): array + { + $job = $this->findJob($name); + + if (!is_string($job) && is_callable($job)) { + return $this->jobFromCallable($job, $data); + } elseif (class_exists($job)) { + return $this->jobFromClass($job, $data); + } + + return [ + 'status' => 404, + ]; + } + + /** + * @return mixed + */ + public function listJobs() + { + // find in jobs config + return array_keys($this->option('jobs')); + } + + /** + * @param string $name + * @return mixed|string + */ + public function findJob(string $name) + { + // find in jobs config + $jobInConfig = A::get($this->option('jobs'), strtolower($name)); + if ($jobInConfig) { + return $jobInConfig; + } + + // could be a class + return $name; + } + + /** + * @param $job + * @param array $data + * @return array + */ + public function jobFromCallable($job, array $data): array + { + $return = false; + try { + set_time_limit(0); + } catch (\Exception $ex) { + // ignore + } + + try { + $return = $job( + page(str_replace('+', '/', urldecode(A::get($data, 'contextPage', '')))), + str_replace('+S_L_A_S_H+', '/', urldecode(A::get($data, 'contextData', ''))) + ); + } catch (\BadMethodCallException $ex) { + $return = $job(); + } + if (is_array($return)) { + return $return; + } + return [ + 'status' => $return ? 200 : 404, + ]; + } + + /** + * @param string $job + * @param array $data + * @return array + */ + public function jobFromClass(string $job, array $data): array + { + $object = new $job( + page(str_replace('+', '/', urldecode(A::get($data, 'contextPage', '')))), + str_replace('+S_L_A_S_H+', '/', urldecode(A::get($data, 'contextData', ''))) + ); + + if (method_exists($object, 'job')) { + try { + set_time_limit(0); + } catch (\Exception $ex) { + // ignore + } + return $object->job(); + } + return [ + 'status' => 400, + ]; + } + + /** + * @param string $msg + * @param string $level + * @param array $context + * @return bool + */ + public function log(string $msg = '', string $level = 'info', array $context = []): bool + { + $log = $this->option('log'); + if ($log && is_callable($log)) { + if (!$this->option('debug') && $level == 'debug') { + // skip but... + return true; + } else { + return $log($msg, $level, $context); + } + } + return false; + } + + /* + * @var Janitor + */ + private static $singleton; + + /** + * @param array $options + * @return Janitor + */ + public static function singleton(array $options = []): Janitor + { + if (self::$singleton) { + return self::$singleton; + } + + self::$singleton = new Janitor($options); + return self::$singleton; + } + + /** + * @param string|null $template + * @param mixed|null $model + * @return string + */ + public static function query(string $template = null, $model = null): string + { + $page = null; + $file = null; + $user = kirby()->user(); + if ($model && $model instanceof Page) { + $page = $model; + } elseif ($model && $model instanceof File) { + $file = $model; + } elseif ($model && $model instanceof User) { + $user = $model; + } + return Str::template($template, [ + 'kirby' => kirby(), + 'site' => kirby()->site(), + 'page' => $page, + 'file' => $file, + 'user' => $user, + 'model' => $model ? get_class($model) : null, + ]); + } + + /** + * @param $val + * @param bool $return_null + * @return bool + */ + public static function isTrue($val, $return_null = false): bool + { + $boolval = (is_string($val) ? filter_var($val, FILTER_VALIDATE_BOOLEAN, FILTER_NULL_ON_FAILURE) : (bool) $val); + $boolval = ($boolval === null && !$return_null ? false : $boolval); + return $boolval; + } + + /** + * @var \League\CLImate\CLImate + */ + private static $climate; + + /** + * @param CLImate|null $climate + * @return CLImate|null + */ + public static function climate(?CLImate $climate = null): ?CLImate + { + if ($climate && !self::$climate) { + self::$climate = $climate; + } + return self::$climate; + } +} diff --git a/site/plugins/kirby3-janitor/classes/JanitorJob.php b/site/plugins/kirby3-janitor/classes/JanitorJob.php new file mode 100644 index 0000000..11892da --- /dev/null +++ b/site/plugins/kirby3-janitor/classes/JanitorJob.php @@ -0,0 +1,47 @@ +page = $page; + $this->data = $data; + } + + /** + * @return string|null + */ + public function data(): ?string + { + return $this->data; + } + + /** + * @return Page|null + */ + public function page(): ?Page + { + return $this->page; + } + + /** + * @return array + */ + abstract public function job(): array; +} diff --git a/site/plugins/kirby3-janitor/classes/Job.php b/site/plugins/kirby3-janitor/classes/Job.php new file mode 100644 index 0000000..afa4528 --- /dev/null +++ b/site/plugins/kirby3-janitor/classes/Job.php @@ -0,0 +1,18 @@ + 0; + } + + return [ + 'status' => $success ? 200 : 204, + ]; + } +} diff --git a/site/plugins/kirby3-janitor/classes/ReindexSearchForKirbyJob.php b/site/plugins/kirby3-janitor/classes/ReindexSearchForKirbyJob.php new file mode 100644 index 0000000..2619514 --- /dev/null +++ b/site/plugins/kirby3-janitor/classes/ReindexSearchForKirbyJob.php @@ -0,0 +1,32 @@ +build(); + } catch (\Exception $e) { + return [ + 'status' => 500, + 'error' => $e->getMessage(), + ]; + } + return [ + 'status' => 200, + ]; + } + + return [ + 'status' => 204, + ]; + } +} diff --git a/site/plugins/kirby3-janitor/classes/RenderJob.php b/site/plugins/kirby3-janitor/classes/RenderJob.php new file mode 100644 index 0000000..6ec9396 --- /dev/null +++ b/site/plugins/kirby3-janitor/classes/RenderJob.php @@ -0,0 +1,187 @@ +verbose = $climate ? $climate->arguments->defined('verbose') : false; + $time = time(); + + // make sure the thumbs are triggered + $kirby->cache('pages')->flush(); + if (class_exists('\Bnomei\Lapse')) { + Lapse::singleton()->flush(); + } + + // visit all pages to generate media/*.job files + $allPages = $this->getAllPagesIDs(); + $this->countPages = count($allPages); + $this->countLanguages = $kirby->languages()->count() > 0 ? $kirby->languages()->count() : 1; + $visited = 0; + + if ($climate) { + $climate->out('Languages: ' . $this->countLanguages); + $climate->out('Pages: ' . $this->countPages); + $climate->blue('Rendering Pages...'); + } + if ($this->countPages && $climate) { + $progress = $climate->progress()->total($this->countPages); + } + $this->failed = []; + $this->found = []; + + $this->renderSiteUrl = rtrim((string)\option('bnomei.janitor.renderSiteUrl')(), '/'); + + foreach ($allPages as $pageId) { + try { + $content = ''; + if (strlen($this->renderSiteUrl) > 0) { + $content = $this->remoteGetPage($pageId); + } else { + $content = $this->renderPage($pageId); + } + if ($this->verbose && strlen($content) > 0) { + $this->verboseCheckContent($content); + } + } catch (Exception $ex) { + $this->failed[] = $pageId . ': ' . $ex->getMessage(); + } + + $visited++; + if ($progress && $climate) { + $progress->current($visited); + } + } + + $this->found = array_unique($this->found); + if ($climate && count($this->found)) { + $climate->out('Found images with media/pages/* : ' . count($this->found)); + } + + if (count($this->failed)) { + $climate->out('Rendering failed for Pages: ' . count($this->failed)); + foreach ($this->failed as $fail) { + $climate->red($fail); + } + } + + $duration = time() - $time; + + return [ + 'status' => $visited > 0 ? 200 : 204, + 'duration' => $duration, + ]; + } + + private function getAllPagesIDs(): array + { + $ids = []; + $allPages = null; + if ($this->data()) { + $allPages = (new Query( + $this->data(), + [ + 'kirby' => kirby(), + 'site' => site(), + 'page' => $this->page(), + ] + ))->result(); + if (is_a($allPages, Page::class)) { + $allPages = new Pages([$allPages]); + } + foreach ($allPages as $page) { + $ids[] = $page->id(); // this should not fully load the page yet + } + } + if (!$allPages) { + $finder = new Finder(); + $finder->directories() + ->in(kirby()->roots()->content()); + foreach ($finder as $folder) { + $id = $folder->getRelativePathname(); + if (strpos($id, '_drafts') === false) { + $ids[] = ltrim(preg_replace('/\/*\d+_/', '/', $id), '/'); + } + } + } + + return $ids; + } + + private function remoteGetPage(string $pageId): string + { + $content = Remote::get($this->renderSiteUrl . '/' . $pageId)->content(); + foreach (kirby()->languages() as $lang) { + $content .= Remote::get($this->renderSiteUrl . '/' . $lang->code() . '/' . $pageId)->content(); + } + return $content; + } + + private function verboseCheckContent(string $content) + { + preg_match_all('~/media/pages/([a-zA-Z0-9-_./]+.(?:png|jpg|jpeg|webp|avif|gif))~', $content, $matches); + if ($matches && count($matches) > 1) { + $this->found = array_merge($this->found, $matches[1]); + } + } + + private function renderPage(string $pageId) + { + $page = page($pageId); + $content = ''; + if ($this->countLanguages > 1) { + $content = $page->render(); + foreach (kirby()->languages() as $lang) { + site()->visit($page, $lang->code()); + $content .= $page->render(); + } + } else { + site()->visit($page); + $content = $page->render(); + } + return $content; + } +} diff --git a/site/plugins/kirby3-janitor/classes/ThumbsJob.php b/site/plugins/kirby3-janitor/classes/ThumbsJob.php new file mode 100644 index 0000000..05331a3 --- /dev/null +++ b/site/plugins/kirby3-janitor/classes/ThumbsJob.php @@ -0,0 +1,124 @@ +arguments->defined('verbose') : false; + $time = time(); + + $root = realpath(kirby()->roots()->index() . '/media/') . '/pages'; + if ($this->page() && $this->data()) { + $root = $this->page()->mediaRoot(); + } + Dir::make($root); + + if ($verbose) { + $finder = new Finder(); + $finder->files() + ->in($root) + ->name('/\.(?:avif|png|jpg|jpeg|webp|gif)$/'); + if ($climate) { + $climate->out('Thumbs found: ' . iterator_count($finder)); + } + } + + $finder = new Finder(); + $finder->files() + ->in($root) + ->ignoreDotFiles(false) + ->name('/\.json$/'); + $countJobs = iterator_count($finder); + $jobs = 0; + $created = 0; + $jobsSkipped = []; + if ($climate) { + $climate->out('Jobs found: ' . $countJobs); + } + + if ($countJobs && $climate) { + $climate->blue('Generating Thumbs...'); + $progress = $climate->progress()->total($countJobs); + } + + foreach ($finder as $file) { + $jobs++; + + $parentID = null; + $page = null; + + $page = null; + if (preg_match('/.*\/media\/pages\/(.*)\/.*-[\d]*\/\.jobs/', $file->getPath(), $matches)) { + $page = page($matches[1]); + } + if (!$page) { + $jobsSkipped[] = 'Page not found: ' . $parentID; + continue; + } + + $path = $file->getPath() . '/' . $file->getFilename(); + $options = Data::read($path); + $jobFilename = $file->getFilenameWithoutExtension(); + $filename = A::get($options, 'filename'); + + $pageFile = $page->file($filename); + if (!$pageFile) { + $jobsSkipped[] = 'File not found: ' . $parentID . '/' . $filename; + continue; + } + + $hash = basename(str_replace('/.jobs', '', $file->getPath())); + + if (Media::link($page, $hash, $jobFilename) !== false) { + $created++; + } + + if ($progress && $climate) { + $progress->current($jobs); + } + } + + $duration = time() - $time; + if ($climate) { + $climate->out('Thumbs created: ' . $created); + if ($jobsSkipped) { + $climate->out('Jobs executed: ' . $jobs); + $climate->out('Jobs skipped: ' . count($jobsSkipped)); + foreach ($jobsSkipped as $skip) { + $climate->red($skip); + } + } + $climate->out('Duration in seconds: ' . strval($duration)); + } + + return [ + 'status' => $created > 0 ? 200 : 204, + 'duration' => $duration, + 'thumbs' => [ + 'jobs' => $countJobs, + 'created' => $created, + ], + ]; + } +} diff --git a/site/plugins/kirby3-janitor/classes/WhistleJob.php b/site/plugins/kirby3-janitor/classes/WhistleJob.php new file mode 100644 index 0000000..96d679b --- /dev/null +++ b/site/plugins/kirby3-janitor/classes/WhistleJob.php @@ -0,0 +1,19 @@ + 200, + 'label' => '♫', + ]; + } +} diff --git a/site/plugins/kirby3-janitor/composer.json b/site/plugins/kirby3-janitor/composer.json new file mode 100644 index 0000000..e58301d --- /dev/null +++ b/site/plugins/kirby3-janitor/composer.json @@ -0,0 +1,75 @@ +{ + "name": "bnomei/kirby3-janitor", + "type": "kirby-plugin", + "version": "2.16.0", + "license": "MIT", + "description": "Kirby 3 Plugin for running jobs like cleaning the cache from within the Panel, PHP code or a cronjob", + "authors": [ + { + "name": "Bruno Meilick", + "email": "b@bnomei.com" + } + ], + "keywords": [ + "kirby3", + "kirby3-cms", + "kirby3-plugin", + "cache", + "clean", + "janitor", + "job-runner", + "cronjob", + "ajax", + "button" + ], + "autoload": { + "psr-4": { + "Bnomei\\": "classes/" + } + }, + "config": { + "optimize-autoloader": true, + "sort-packages": true, + "allow-plugins": { + "getkirby/composer-installer": true + } + }, + "require": { + "php": ">=7.4.0", + "getkirby/composer-installer": "^1.2", + "league/climate": "^3.7", + "symfony/deprecation-contracts": "2.5", + "symfony/finder": "^5.4" + }, + "require-dev": { + "getkirby/cms": "^3.5", + "php-coveralls/php-coveralls": "^2.4", + "phpunit/phpunit": "^9.5" + }, + "scripts": { + "build": [ + "yarn", + "yarn run build" + ], + "analyze": "phpstan analyse classes", + "fix": "php-cs-fixer fix", + "test": [ + "mkdir -p tests/logs", + "@putenv XDEBUG_MODE=coverage", + "phpunit --configuration ./phpunit.xml" + ], + "dist": [ + "composer install --no-dev --optimize-autoloader", + "git rm -rf --cached .; git add .;" + ], + "kirby": [ + "composer install", + "composer update", + "composer install --working-dir=tests/kirby --no-dev --optimize-autoloader", + "composer update --working-dir=tests/kirby" + ] + }, + "extra": { + "kirby-cms-path": "tests/kirby" + } +} diff --git a/site/plugins/kirby3-janitor/composer.lock b/site/plugins/kirby3-janitor/composer.lock new file mode 100644 index 0000000..06dd6ab --- /dev/null +++ b/site/plugins/kirby3-janitor/composer.lock @@ -0,0 +1,4619 @@ +{ + "_readme": [ + "This file locks the dependencies of your project to a known state", + "Read more about it at https://getcomposer.org/doc/01-basic-usage.md#installing-dependencies", + "This file is @generated automatically" + ], + "content-hash": "aa88d08e04791b90d7a9998efcf0f394", + "packages": [ + { + "name": "getkirby/composer-installer", + "version": "1.2.1", + "source": { + "type": "git", + "url": "https://github.com/getkirby/composer-installer.git", + "reference": "c98ece30bfba45be7ce457e1102d1b169d922f3d" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/getkirby/composer-installer/zipball/c98ece30bfba45be7ce457e1102d1b169d922f3d", + "reference": "c98ece30bfba45be7ce457e1102d1b169d922f3d", + "shasum": "" + }, + "require": { + "composer-plugin-api": "^1.0 || ^2.0" + }, + "require-dev": { + "composer/composer": "^1.8 || ^2.0" + }, + "type": "composer-plugin", + "extra": { + "class": "Kirby\\ComposerInstaller\\Plugin" + }, + "autoload": { + "psr-4": { + "Kirby\\": "src/" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "description": "Kirby's custom Composer installer for the Kirby CMS and for Kirby plugins", + "homepage": "https://getkirby.com", + "support": { + "issues": "https://github.com/getkirby/composer-installer/issues", + "source": "https://github.com/getkirby/composer-installer/tree/1.2.1" + }, + "funding": [ + { + "url": "https://getkirby.com/buy", + "type": "custom" + } + ], + "time": "2020-12-28T12:54:39+00:00" + }, + { + "name": "league/climate", + "version": "3.8.1", + "source": { + "type": "git", + "url": "https://github.com/thephpleague/climate.git", + "reference": "22243322c6f049240e0fa6ad6c3873343b6f6055" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/thephpleague/climate/zipball/22243322c6f049240e0fa6ad6c3873343b6f6055", + "reference": "22243322c6f049240e0fa6ad6c3873343b6f6055", + "shasum": "" + }, + "require": { + "php": "^7.3 || ^8.0", + "psr/log": "^1.0", + "seld/cli-prompt": "^1.0" + }, + "require-dev": { + "mikey179/vfsstream": "^1.4", + "mockery/mockery": "^1.4.2", + "phpunit/phpunit": "^9.5.0" + }, + "suggest": { + "ext-mbstring": "If ext-mbstring is not available you MUST install symfony/polyfill-mbstring" + }, + "type": "library", + "autoload": { + "psr-4": { + "League\\CLImate\\": "src/" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Joe Tannenbaum", + "email": "hey@joe.codes", + "homepage": "http://joe.codes/", + "role": "Developer" + }, + { + "name": "Craig Duncan", + "email": "git@duncanc.co.uk", + "homepage": "https://github.com/duncan3dc", + "role": "Developer" + } + ], + "description": "PHP's best friend for the terminal. CLImate allows you to easily output colored text, special formats, and more.", + "keywords": [ + "cli", + "colors", + "command", + "php", + "terminal" + ], + "support": { + "issues": "https://github.com/thephpleague/climate/issues", + "source": "https://github.com/thephpleague/climate/tree/3.8.1" + }, + "time": "2022-01-23T14:38:49+00:00" + }, + { + "name": "psr/log", + "version": "1.1.4", + "source": { + "type": "git", + "url": "https://github.com/php-fig/log.git", + "reference": "d49695b909c3b7628b6289db5479a1c204601f11" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/php-fig/log/zipball/d49695b909c3b7628b6289db5479a1c204601f11", + "reference": "d49695b909c3b7628b6289db5479a1c204601f11", + "shasum": "" + }, + "require": { + "php": ">=5.3.0" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "1.1.x-dev" + } + }, + "autoload": { + "psr-4": { + "Psr\\Log\\": "Psr/Log/" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "PHP-FIG", + "homepage": "https://www.php-fig.org/" + } + ], + "description": "Common interface for logging libraries", + "homepage": "https://github.com/php-fig/log", + "keywords": [ + "log", + "psr", + "psr-3" + ], + "support": { + "source": "https://github.com/php-fig/log/tree/1.1.4" + }, + "time": "2021-05-03T11:20:27+00:00" + }, + { + "name": "seld/cli-prompt", + "version": "1.0.4", + "source": { + "type": "git", + "url": "https://github.com/Seldaek/cli-prompt.git", + "reference": "b8dfcf02094b8c03b40322c229493bb2884423c5" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/Seldaek/cli-prompt/zipball/b8dfcf02094b8c03b40322c229493bb2884423c5", + "reference": "b8dfcf02094b8c03b40322c229493bb2884423c5", + "shasum": "" + }, + "require": { + "php": ">=5.3" + }, + "require-dev": { + "phpstan/phpstan": "^0.12.63" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "1.x-dev" + } + }, + "autoload": { + "psr-4": { + "Seld\\CliPrompt\\": "src/" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Jordi Boggiano", + "email": "j.boggiano@seld.be" + } + ], + "description": "Allows you to prompt for user input on the command line, and optionally hide the characters they type", + "keywords": [ + "cli", + "console", + "hidden", + "input", + "prompt" + ], + "support": { + "issues": "https://github.com/Seldaek/cli-prompt/issues", + "source": "https://github.com/Seldaek/cli-prompt/tree/1.0.4" + }, + "time": "2020-12-15T21:32:01+00:00" + }, + { + "name": "symfony/deprecation-contracts", + "version": "v2.5.0", + "source": { + "type": "git", + "url": "https://github.com/symfony/deprecation-contracts.git", + "reference": "6f981ee24cf69ee7ce9736146d1c57c2780598a8" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/symfony/deprecation-contracts/zipball/6f981ee24cf69ee7ce9736146d1c57c2780598a8", + "reference": "6f981ee24cf69ee7ce9736146d1c57c2780598a8", + "shasum": "" + }, + "require": { + "php": ">=7.1" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-main": "2.5-dev" + }, + "thanks": { + "name": "symfony/contracts", + "url": "https://github.com/symfony/contracts" + } + }, + "autoload": { + "files": [ + "function.php" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Nicolas Grekas", + "email": "p@tchwork.com" + }, + { + "name": "Symfony Community", + "homepage": "https://symfony.com/contributors" + } + ], + "description": "A generic function and convention to trigger deprecation notices", + "homepage": "https://symfony.com", + "support": { + "source": "https://github.com/symfony/deprecation-contracts/tree/v2.5.0" + }, + "funding": [ + { + "url": "https://symfony.com/sponsor", + "type": "custom" + }, + { + "url": "https://github.com/fabpot", + "type": "github" + }, + { + "url": "https://tidelift.com/funding/github/packagist/symfony/symfony", + "type": "tidelift" + } + ], + "time": "2021-07-12T14:48:14+00:00" + }, + { + "name": "symfony/finder", + "version": "v5.4.3", + "source": { + "type": "git", + "url": "https://github.com/symfony/finder.git", + "reference": "231313534dded84c7ecaa79d14bc5da4ccb69b7d" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/symfony/finder/zipball/231313534dded84c7ecaa79d14bc5da4ccb69b7d", + "reference": "231313534dded84c7ecaa79d14bc5da4ccb69b7d", + "shasum": "" + }, + "require": { + "php": ">=7.2.5", + "symfony/deprecation-contracts": "^2.1|^3", + "symfony/polyfill-php80": "^1.16" + }, + "type": "library", + "autoload": { + "psr-4": { + "Symfony\\Component\\Finder\\": "" + }, + "exclude-from-classmap": [ + "/Tests/" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Fabien Potencier", + "email": "fabien@symfony.com" + }, + { + "name": "Symfony Community", + "homepage": "https://symfony.com/contributors" + } + ], + "description": "Finds files and directories via an intuitive fluent interface", + "homepage": "https://symfony.com", + "support": { + "source": "https://github.com/symfony/finder/tree/v5.4.3" + }, + "funding": [ + { + "url": "https://symfony.com/sponsor", + "type": "custom" + }, + { + "url": "https://github.com/fabpot", + "type": "github" + }, + { + "url": "https://tidelift.com/funding/github/packagist/symfony/symfony", + "type": "tidelift" + } + ], + "time": "2022-01-26T16:34:36+00:00" + }, + { + "name": "symfony/polyfill-php80", + "version": "v1.25.0", + "source": { + "type": "git", + "url": "https://github.com/symfony/polyfill-php80.git", + "reference": "4407588e0d3f1f52efb65fbe92babe41f37fe50c" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/symfony/polyfill-php80/zipball/4407588e0d3f1f52efb65fbe92babe41f37fe50c", + "reference": "4407588e0d3f1f52efb65fbe92babe41f37fe50c", + "shasum": "" + }, + "require": { + "php": ">=7.1" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-main": "1.23-dev" + }, + "thanks": { + "name": "symfony/polyfill", + "url": "https://github.com/symfony/polyfill" + } + }, + "autoload": { + "files": [ + "bootstrap.php" + ], + "psr-4": { + "Symfony\\Polyfill\\Php80\\": "" + }, + "classmap": [ + "Resources/stubs" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Ion Bazan", + "email": "ion.bazan@gmail.com" + }, + { + "name": "Nicolas Grekas", + "email": "p@tchwork.com" + }, + { + "name": "Symfony Community", + "homepage": "https://symfony.com/contributors" + } + ], + "description": "Symfony polyfill backporting some PHP 8.0+ features to lower PHP versions", + "homepage": "https://symfony.com", + "keywords": [ + "compatibility", + "polyfill", + "portable", + "shim" + ], + "support": { + "source": "https://github.com/symfony/polyfill-php80/tree/v1.25.0" + }, + "funding": [ + { + "url": "https://symfony.com/sponsor", + "type": "custom" + }, + { + "url": "https://github.com/fabpot", + "type": "github" + }, + { + "url": "https://tidelift.com/funding/github/packagist/symfony/symfony", + "type": "tidelift" + } + ], + "time": "2022-03-04T08:16:47+00:00" + } + ], + "packages-dev": [ + { + "name": "claviska/simpleimage", + "version": "3.6.5", + "source": { + "type": "git", + "url": "https://github.com/claviska/SimpleImage.git", + "reference": "00f90662686696b9b7157dbb176183aabe89700f" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/claviska/SimpleImage/zipball/00f90662686696b9b7157dbb176183aabe89700f", + "reference": "00f90662686696b9b7157dbb176183aabe89700f", + "shasum": "" + }, + "require": { + "ext-gd": "*", + "league/color-extractor": "0.3.*", + "php": ">=5.6.0" + }, + "type": "library", + "autoload": { + "psr-0": { + "claviska": "src/" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Cory LaViska", + "homepage": "http://www.abeautifulsite.net/", + "role": "Developer" + } + ], + "description": "A PHP class that makes working with images as simple as possible.", + "support": { + "issues": "https://github.com/claviska/SimpleImage/issues", + "source": "https://github.com/claviska/SimpleImage/tree/3.6.5" + }, + "funding": [ + { + "url": "https://github.com/claviska", + "type": "github" + } + ], + "time": "2021-12-01T12:42:55+00:00" + }, + { + "name": "doctrine/instantiator", + "version": "1.4.1", + "source": { + "type": "git", + "url": "https://github.com/doctrine/instantiator.git", + "reference": "10dcfce151b967d20fde1b34ae6640712c3891bc" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/doctrine/instantiator/zipball/10dcfce151b967d20fde1b34ae6640712c3891bc", + "reference": "10dcfce151b967d20fde1b34ae6640712c3891bc", + "shasum": "" + }, + "require": { + "php": "^7.1 || ^8.0" + }, + "require-dev": { + "doctrine/coding-standard": "^9", + "ext-pdo": "*", + "ext-phar": "*", + "phpbench/phpbench": "^0.16 || ^1", + "phpstan/phpstan": "^1.4", + "phpstan/phpstan-phpunit": "^1", + "phpunit/phpunit": "^7.5 || ^8.5 || ^9.5", + "vimeo/psalm": "^4.22" + }, + "type": "library", + "autoload": { + "psr-4": { + "Doctrine\\Instantiator\\": "src/Doctrine/Instantiator/" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Marco Pivetta", + "email": "ocramius@gmail.com", + "homepage": "https://ocramius.github.io/" + } + ], + "description": "A small, lightweight utility to instantiate objects in PHP without invoking their constructors", + "homepage": "https://www.doctrine-project.org/projects/instantiator.html", + "keywords": [ + "constructor", + "instantiate" + ], + "support": { + "issues": "https://github.com/doctrine/instantiator/issues", + "source": "https://github.com/doctrine/instantiator/tree/1.4.1" + }, + "funding": [ + { + "url": "https://www.doctrine-project.org/sponsorship.html", + "type": "custom" + }, + { + "url": "https://www.patreon.com/phpdoctrine", + "type": "patreon" + }, + { + "url": "https://tidelift.com/funding/github/packagist/doctrine%2Finstantiator", + "type": "tidelift" + } + ], + "time": "2022-03-03T08:28:38+00:00" + }, + { + "name": "filp/whoops", + "version": "2.14.5", + "source": { + "type": "git", + "url": "https://github.com/filp/whoops.git", + "reference": "a63e5e8f26ebbebf8ed3c5c691637325512eb0dc" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/filp/whoops/zipball/a63e5e8f26ebbebf8ed3c5c691637325512eb0dc", + "reference": "a63e5e8f26ebbebf8ed3c5c691637325512eb0dc", + "shasum": "" + }, + "require": { + "php": "^5.5.9 || ^7.0 || ^8.0", + "psr/log": "^1.0.1 || ^2.0 || ^3.0" + }, + "require-dev": { + "mockery/mockery": "^0.9 || ^1.0", + "phpunit/phpunit": "^4.8.36 || ^5.7.27 || ^6.5.14 || ^7.5.20 || ^8.5.8 || ^9.3.3", + "symfony/var-dumper": "^2.6 || ^3.0 || ^4.0 || ^5.0" + }, + "suggest": { + "symfony/var-dumper": "Pretty print complex values better with var-dumper available", + "whoops/soap": "Formats errors as SOAP responses" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "2.7-dev" + } + }, + "autoload": { + "psr-4": { + "Whoops\\": "src/Whoops/" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Filipe Dobreira", + "homepage": "https://github.com/filp", + "role": "Developer" + } + ], + "description": "php error handling for cool kids", + "homepage": "https://filp.github.io/whoops/", + "keywords": [ + "error", + "exception", + "handling", + "library", + "throwable", + "whoops" + ], + "support": { + "issues": "https://github.com/filp/whoops/issues", + "source": "https://github.com/filp/whoops/tree/2.14.5" + }, + "funding": [ + { + "url": "https://github.com/denis-sokolov", + "type": "github" + } + ], + "time": "2022-01-07T12:00:00+00:00" + }, + { + "name": "getkirby/cms", + "version": "3.6.4", + "source": { + "type": "git", + "url": "https://github.com/getkirby/kirby.git", + "reference": "3de403cabcd6755bdd95c159bd282ec63ec14658" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/getkirby/kirby/zipball/3de403cabcd6755bdd95c159bd282ec63ec14658", + "reference": "3de403cabcd6755bdd95c159bd282ec63ec14658", + "shasum": "" + }, + "require": { + "claviska/simpleimage": "3.6.5", + "ext-ctype": "*", + "ext-mbstring": "*", + "filp/whoops": "2.14.5", + "getkirby/composer-installer": "^1.2.1", + "laminas/laminas-escaper": "2.10.0", + "michelf/php-smartypants": "1.8.1", + "php": ">=7.4.0 <8.2.0", + "phpmailer/phpmailer": "6.5.4", + "psr/log": "1.1.4", + "symfony/polyfill-intl-idn": "1.25.0", + "symfony/polyfill-mbstring": "1.25.0" + }, + "replace": { + "symfony/polyfill-php72": "*" + }, + "type": "kirby-cms", + "extra": { + "unused": [ + "symfony/polyfill-intl-idn" + ] + }, + "autoload": { + "files": [ + "config/setup.php", + "config/helpers.php" + ], + "psr-4": { + "Kirby\\": "src/" + }, + "classmap": [ + "dependencies/" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "proprietary" + ], + "authors": [ + { + "name": "Kirby Team", + "email": "support@getkirby.com", + "homepage": "https://getkirby.com" + } + ], + "description": "The Kirby 3 core", + "homepage": "https://getkirby.com", + "keywords": [ + "cms", + "core", + "kirby" + ], + "support": { + "email": "support@getkirby.com", + "forum": "https://forum.getkirby.com", + "issues": "https://github.com/getkirby/kirby/issues", + "source": "https://github.com/getkirby/kirby" + }, + "funding": [ + { + "url": "https://getkirby.com/buy", + "type": "custom" + } + ], + "time": "2022-04-05T08:03:55+00:00" + }, + { + "name": "guzzlehttp/guzzle", + "version": "7.4.2", + "source": { + "type": "git", + "url": "https://github.com/guzzle/guzzle.git", + "reference": "ac1ec1cd9b5624694c3a40be801d94137afb12b4" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/guzzle/guzzle/zipball/ac1ec1cd9b5624694c3a40be801d94137afb12b4", + "reference": "ac1ec1cd9b5624694c3a40be801d94137afb12b4", + "shasum": "" + }, + "require": { + "ext-json": "*", + "guzzlehttp/promises": "^1.5", + "guzzlehttp/psr7": "^1.8.3 || ^2.1", + "php": "^7.2.5 || ^8.0", + "psr/http-client": "^1.0", + "symfony/deprecation-contracts": "^2.2 || ^3.0" + }, + "provide": { + "psr/http-client-implementation": "1.0" + }, + "require-dev": { + "bamarni/composer-bin-plugin": "^1.4.1", + "ext-curl": "*", + "php-http/client-integration-tests": "^3.0", + "phpunit/phpunit": "^8.5.5 || ^9.3.5", + "psr/log": "^1.1 || ^2.0 || ^3.0" + }, + "suggest": { + "ext-curl": "Required for CURL handler support", + "ext-intl": "Required for Internationalized Domain Name (IDN) support", + "psr/log": "Required for using the Log middleware" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "7.4-dev" + } + }, + "autoload": { + "files": [ + "src/functions_include.php" + ], + "psr-4": { + "GuzzleHttp\\": "src/" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Graham Campbell", + "email": "hello@gjcampbell.co.uk", + "homepage": "https://github.com/GrahamCampbell" + }, + { + "name": "Michael Dowling", + "email": "mtdowling@gmail.com", + "homepage": "https://github.com/mtdowling" + }, + { + "name": "Jeremy Lindblom", + "email": "jeremeamia@gmail.com", + "homepage": "https://github.com/jeremeamia" + }, + { + "name": "George Mponos", + "email": "gmponos@gmail.com", + "homepage": "https://github.com/gmponos" + }, + { + "name": "Tobias Nyholm", + "email": "tobias.nyholm@gmail.com", + "homepage": "https://github.com/Nyholm" + }, + { + "name": "Márk Sági-Kazár", + "email": "mark.sagikazar@gmail.com", + "homepage": "https://github.com/sagikazarmark" + }, + { + "name": "Tobias Schultze", + "email": "webmaster@tubo-world.de", + "homepage": "https://github.com/Tobion" + } + ], + "description": "Guzzle is a PHP HTTP client library", + "keywords": [ + "client", + "curl", + "framework", + "http", + "http client", + "psr-18", + "psr-7", + "rest", + "web service" + ], + "support": { + "issues": "https://github.com/guzzle/guzzle/issues", + "source": "https://github.com/guzzle/guzzle/tree/7.4.2" + }, + "funding": [ + { + "url": "https://github.com/GrahamCampbell", + "type": "github" + }, + { + "url": "https://github.com/Nyholm", + "type": "github" + }, + { + "url": "https://tidelift.com/funding/github/packagist/guzzlehttp/guzzle", + "type": "tidelift" + } + ], + "time": "2022-03-20T14:16:28+00:00" + }, + { + "name": "guzzlehttp/promises", + "version": "1.5.1", + "source": { + "type": "git", + "url": "https://github.com/guzzle/promises.git", + "reference": "fe752aedc9fd8fcca3fe7ad05d419d32998a06da" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/guzzle/promises/zipball/fe752aedc9fd8fcca3fe7ad05d419d32998a06da", + "reference": "fe752aedc9fd8fcca3fe7ad05d419d32998a06da", + "shasum": "" + }, + "require": { + "php": ">=5.5" + }, + "require-dev": { + "symfony/phpunit-bridge": "^4.4 || ^5.1" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "1.5-dev" + } + }, + "autoload": { + "files": [ + "src/functions_include.php" + ], + "psr-4": { + "GuzzleHttp\\Promise\\": "src/" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Graham Campbell", + "email": "hello@gjcampbell.co.uk", + "homepage": "https://github.com/GrahamCampbell" + }, + { + "name": "Michael Dowling", + "email": "mtdowling@gmail.com", + "homepage": "https://github.com/mtdowling" + }, + { + "name": "Tobias Nyholm", + "email": "tobias.nyholm@gmail.com", + "homepage": "https://github.com/Nyholm" + }, + { + "name": "Tobias Schultze", + "email": "webmaster@tubo-world.de", + "homepage": "https://github.com/Tobion" + } + ], + "description": "Guzzle promises library", + "keywords": [ + "promise" + ], + "support": { + "issues": "https://github.com/guzzle/promises/issues", + "source": "https://github.com/guzzle/promises/tree/1.5.1" + }, + "funding": [ + { + "url": "https://github.com/GrahamCampbell", + "type": "github" + }, + { + "url": "https://github.com/Nyholm", + "type": "github" + }, + { + "url": "https://tidelift.com/funding/github/packagist/guzzlehttp/promises", + "type": "tidelift" + } + ], + "time": "2021-10-22T20:56:57+00:00" + }, + { + "name": "guzzlehttp/psr7", + "version": "2.2.1", + "source": { + "type": "git", + "url": "https://github.com/guzzle/psr7.git", + "reference": "c94a94f120803a18554c1805ef2e539f8285f9a2" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/guzzle/psr7/zipball/c94a94f120803a18554c1805ef2e539f8285f9a2", + "reference": "c94a94f120803a18554c1805ef2e539f8285f9a2", + "shasum": "" + }, + "require": { + "php": "^7.2.5 || ^8.0", + "psr/http-factory": "^1.0", + "psr/http-message": "^1.0", + "ralouphie/getallheaders": "^3.0" + }, + "provide": { + "psr/http-factory-implementation": "1.0", + "psr/http-message-implementation": "1.0" + }, + "require-dev": { + "bamarni/composer-bin-plugin": "^1.4.1", + "http-interop/http-factory-tests": "^0.9", + "phpunit/phpunit": "^8.5.8 || ^9.3.10" + }, + "suggest": { + "laminas/laminas-httphandlerrunner": "Emit PSR-7 responses" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "2.2-dev" + } + }, + "autoload": { + "psr-4": { + "GuzzleHttp\\Psr7\\": "src/" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Graham Campbell", + "email": "hello@gjcampbell.co.uk", + "homepage": "https://github.com/GrahamCampbell" + }, + { + "name": "Michael Dowling", + "email": "mtdowling@gmail.com", + "homepage": "https://github.com/mtdowling" + }, + { + "name": "George Mponos", + "email": "gmponos@gmail.com", + "homepage": "https://github.com/gmponos" + }, + { + "name": "Tobias Nyholm", + "email": "tobias.nyholm@gmail.com", + "homepage": "https://github.com/Nyholm" + }, + { + "name": "Márk Sági-Kazár", + "email": "mark.sagikazar@gmail.com", + "homepage": "https://github.com/sagikazarmark" + }, + { + "name": "Tobias Schultze", + "email": "webmaster@tubo-world.de", + "homepage": "https://github.com/Tobion" + }, + { + "name": "Márk Sági-Kazár", + "email": "mark.sagikazar@gmail.com", + "homepage": "https://sagikazarmark.hu" + } + ], + "description": "PSR-7 message implementation that also provides common utility methods", + "keywords": [ + "http", + "message", + "psr-7", + "request", + "response", + "stream", + "uri", + "url" + ], + "support": { + "issues": "https://github.com/guzzle/psr7/issues", + "source": "https://github.com/guzzle/psr7/tree/2.2.1" + }, + "funding": [ + { + "url": "https://github.com/GrahamCampbell", + "type": "github" + }, + { + "url": "https://github.com/Nyholm", + "type": "github" + }, + { + "url": "https://tidelift.com/funding/github/packagist/guzzlehttp/psr7", + "type": "tidelift" + } + ], + "time": "2022-03-20T21:55:58+00:00" + }, + { + "name": "laminas/laminas-escaper", + "version": "2.10.0", + "source": { + "type": "git", + "url": "https://github.com/laminas/laminas-escaper.git", + "reference": "58af67282db37d24e584a837a94ee55b9c7552be" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/laminas/laminas-escaper/zipball/58af67282db37d24e584a837a94ee55b9c7552be", + "reference": "58af67282db37d24e584a837a94ee55b9c7552be", + "shasum": "" + }, + "require": { + "ext-ctype": "*", + "ext-mbstring": "*", + "php": "^7.4 || ~8.0.0 || ~8.1.0" + }, + "conflict": { + "zendframework/zend-escaper": "*" + }, + "require-dev": { + "infection/infection": "^0.26.6", + "laminas/laminas-coding-standard": "~2.3.0", + "maglnet/composer-require-checker": "^3.8.0", + "phpunit/phpunit": "^9.5.18", + "psalm/plugin-phpunit": "^0.16.1", + "vimeo/psalm": "^4.22.0" + }, + "type": "library", + "autoload": { + "psr-4": { + "Laminas\\Escaper\\": "src/" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "BSD-3-Clause" + ], + "description": "Securely and safely escape HTML, HTML attributes, JavaScript, CSS, and URLs", + "homepage": "https://laminas.dev", + "keywords": [ + "escaper", + "laminas" + ], + "support": { + "chat": "https://laminas.dev/chat", + "docs": "https://docs.laminas.dev/laminas-escaper/", + "forum": "https://discourse.laminas.dev", + "issues": "https://github.com/laminas/laminas-escaper/issues", + "rss": "https://github.com/laminas/laminas-escaper/releases.atom", + "source": "https://github.com/laminas/laminas-escaper" + }, + "funding": [ + { + "url": "https://funding.communitybridge.org/projects/laminas-project", + "type": "community_bridge" + } + ], + "time": "2022-03-08T20:15:36+00:00" + }, + { + "name": "league/color-extractor", + "version": "0.3.2", + "source": { + "type": "git", + "url": "https://github.com/thephpleague/color-extractor.git", + "reference": "837086ec60f50c84c611c613963e4ad2e2aec806" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/thephpleague/color-extractor/zipball/837086ec60f50c84c611c613963e4ad2e2aec806", + "reference": "837086ec60f50c84c611c613963e4ad2e2aec806", + "shasum": "" + }, + "require": { + "ext-gd": "*", + "php": ">=5.4.0" + }, + "replace": { + "matthecat/colorextractor": "*" + }, + "require-dev": { + "friendsofphp/php-cs-fixer": "~2", + "phpunit/phpunit": "~5" + }, + "type": "library", + "autoload": { + "psr-4": { + "": "src" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Mathieu Lechat", + "email": "math.lechat@gmail.com", + "homepage": "http://matthecat.com", + "role": "Developer" + } + ], + "description": "Extract colors from an image as a human would do.", + "homepage": "https://github.com/thephpleague/color-extractor", + "keywords": [ + "color", + "extract", + "human", + "image", + "palette" + ], + "support": { + "issues": "https://github.com/thephpleague/color-extractor/issues", + "source": "https://github.com/thephpleague/color-extractor/tree/master" + }, + "time": "2016-12-15T09:30:02+00:00" + }, + { + "name": "michelf/php-smartypants", + "version": "1.8.1", + "source": { + "type": "git", + "url": "https://github.com/michelf/php-smartypants.git", + "reference": "47d17c90a4dfd0ccf1f87e25c65e6c8012415aad" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/michelf/php-smartypants/zipball/47d17c90a4dfd0ccf1f87e25c65e6c8012415aad", + "reference": "47d17c90a4dfd0ccf1f87e25c65e6c8012415aad", + "shasum": "" + }, + "require": { + "php": ">=5.3.0" + }, + "type": "library", + "autoload": { + "psr-0": { + "Michelf": "" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "BSD-3-Clause" + ], + "authors": [ + { + "name": "Michel Fortin", + "email": "michel.fortin@michelf.ca", + "homepage": "https://michelf.ca/", + "role": "Developer" + }, + { + "name": "John Gruber", + "homepage": "https://daringfireball.net/" + } + ], + "description": "PHP SmartyPants", + "homepage": "https://michelf.ca/projects/php-smartypants/", + "keywords": [ + "dashes", + "quotes", + "spaces", + "typographer", + "typography" + ], + "support": { + "issues": "https://github.com/michelf/php-smartypants/issues", + "source": "https://github.com/michelf/php-smartypants/tree/1.8.1" + }, + "time": "2016-12-13T01:01:17+00:00" + }, + { + "name": "myclabs/deep-copy", + "version": "1.11.0", + "source": { + "type": "git", + "url": "https://github.com/myclabs/DeepCopy.git", + "reference": "14daed4296fae74d9e3201d2c4925d1acb7aa614" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/myclabs/DeepCopy/zipball/14daed4296fae74d9e3201d2c4925d1acb7aa614", + "reference": "14daed4296fae74d9e3201d2c4925d1acb7aa614", + "shasum": "" + }, + "require": { + "php": "^7.1 || ^8.0" + }, + "conflict": { + "doctrine/collections": "<1.6.8", + "doctrine/common": "<2.13.3 || >=3,<3.2.2" + }, + "require-dev": { + "doctrine/collections": "^1.6.8", + "doctrine/common": "^2.13.3 || ^3.2.2", + "phpunit/phpunit": "^7.5.20 || ^8.5.23 || ^9.5.13" + }, + "type": "library", + "autoload": { + "files": [ + "src/DeepCopy/deep_copy.php" + ], + "psr-4": { + "DeepCopy\\": "src/DeepCopy/" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "description": "Create deep copies (clones) of your objects", + "keywords": [ + "clone", + "copy", + "duplicate", + "object", + "object graph" + ], + "support": { + "issues": "https://github.com/myclabs/DeepCopy/issues", + "source": "https://github.com/myclabs/DeepCopy/tree/1.11.0" + }, + "funding": [ + { + "url": "https://tidelift.com/funding/github/packagist/myclabs/deep-copy", + "type": "tidelift" + } + ], + "time": "2022-03-03T13:19:32+00:00" + }, + { + "name": "nikic/php-parser", + "version": "v4.13.2", + "source": { + "type": "git", + "url": "https://github.com/nikic/PHP-Parser.git", + "reference": "210577fe3cf7badcc5814d99455df46564f3c077" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/nikic/PHP-Parser/zipball/210577fe3cf7badcc5814d99455df46564f3c077", + "reference": "210577fe3cf7badcc5814d99455df46564f3c077", + "shasum": "" + }, + "require": { + "ext-tokenizer": "*", + "php": ">=7.0" + }, + "require-dev": { + "ircmaxell/php-yacc": "^0.0.7", + "phpunit/phpunit": "^6.5 || ^7.0 || ^8.0 || ^9.0" + }, + "bin": [ + "bin/php-parse" + ], + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "4.9-dev" + } + }, + "autoload": { + "psr-4": { + "PhpParser\\": "lib/PhpParser" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "BSD-3-Clause" + ], + "authors": [ + { + "name": "Nikita Popov" + } + ], + "description": "A PHP parser written in PHP", + "keywords": [ + "parser", + "php" + ], + "support": { + "issues": "https://github.com/nikic/PHP-Parser/issues", + "source": "https://github.com/nikic/PHP-Parser/tree/v4.13.2" + }, + "time": "2021-11-30T19:35:32+00:00" + }, + { + "name": "phar-io/manifest", + "version": "2.0.3", + "source": { + "type": "git", + "url": "https://github.com/phar-io/manifest.git", + "reference": "97803eca37d319dfa7826cc2437fc020857acb53" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/phar-io/manifest/zipball/97803eca37d319dfa7826cc2437fc020857acb53", + "reference": "97803eca37d319dfa7826cc2437fc020857acb53", + "shasum": "" + }, + "require": { + "ext-dom": "*", + "ext-phar": "*", + "ext-xmlwriter": "*", + "phar-io/version": "^3.0.1", + "php": "^7.2 || ^8.0" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "2.0.x-dev" + } + }, + "autoload": { + "classmap": [ + "src/" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "BSD-3-Clause" + ], + "authors": [ + { + "name": "Arne Blankerts", + "email": "arne@blankerts.de", + "role": "Developer" + }, + { + "name": "Sebastian Heuer", + "email": "sebastian@phpeople.de", + "role": "Developer" + }, + { + "name": "Sebastian Bergmann", + "email": "sebastian@phpunit.de", + "role": "Developer" + } + ], + "description": "Component for reading phar.io manifest information from a PHP Archive (PHAR)", + "support": { + "issues": "https://github.com/phar-io/manifest/issues", + "source": "https://github.com/phar-io/manifest/tree/2.0.3" + }, + "time": "2021-07-20T11:28:43+00:00" + }, + { + "name": "phar-io/version", + "version": "3.2.1", + "source": { + "type": "git", + "url": "https://github.com/phar-io/version.git", + "reference": "4f7fd7836c6f332bb2933569e566a0d6c4cbed74" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/phar-io/version/zipball/4f7fd7836c6f332bb2933569e566a0d6c4cbed74", + "reference": "4f7fd7836c6f332bb2933569e566a0d6c4cbed74", + "shasum": "" + }, + "require": { + "php": "^7.2 || ^8.0" + }, + "type": "library", + "autoload": { + "classmap": [ + "src/" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "BSD-3-Clause" + ], + "authors": [ + { + "name": "Arne Blankerts", + "email": "arne@blankerts.de", + "role": "Developer" + }, + { + "name": "Sebastian Heuer", + "email": "sebastian@phpeople.de", + "role": "Developer" + }, + { + "name": "Sebastian Bergmann", + "email": "sebastian@phpunit.de", + "role": "Developer" + } + ], + "description": "Library for handling version information and constraints", + "support": { + "issues": "https://github.com/phar-io/version/issues", + "source": "https://github.com/phar-io/version/tree/3.2.1" + }, + "time": "2022-02-21T01:04:05+00:00" + }, + { + "name": "php-coveralls/php-coveralls", + "version": "v2.5.2", + "source": { + "type": "git", + "url": "https://github.com/php-coveralls/php-coveralls.git", + "reference": "007e13afdcdba2cd0efcc5f72c3b7efb356a8bd4" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/php-coveralls/php-coveralls/zipball/007e13afdcdba2cd0efcc5f72c3b7efb356a8bd4", + "reference": "007e13afdcdba2cd0efcc5f72c3b7efb356a8bd4", + "shasum": "" + }, + "require": { + "ext-json": "*", + "ext-simplexml": "*", + "guzzlehttp/guzzle": "^6.0 || ^7.0", + "php": "^5.5 || ^7.0 || ^8.0", + "psr/log": "^1.0 || ^2.0", + "symfony/config": "^2.1 || ^3.0 || ^4.0 || ^5.0 || ^6.0", + "symfony/console": "^2.1 || ^3.0 || ^4.0 || ^5.0 || ^6.0", + "symfony/stopwatch": "^2.0 || ^3.0 || ^4.0 || ^5.0 || ^6.0", + "symfony/yaml": "^2.0.5 || ^3.0 || ^4.0 || ^5.0 || ^6.0" + }, + "require-dev": { + "phpunit/phpunit": "^4.8.35 || ^5.4.3 || ^6.0 || ^7.0 || ^8.0 || ^9.0", + "sanmai/phpunit-legacy-adapter": "^6.1 || ^8.0" + }, + "suggest": { + "symfony/http-kernel": "Allows Symfony integration" + }, + "bin": [ + "bin/php-coveralls" + ], + "type": "library", + "autoload": { + "psr-4": { + "PhpCoveralls\\": "src/" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Kitamura Satoshi", + "email": "with.no.parachute@gmail.com", + "homepage": "https://www.facebook.com/satooshi.jp", + "role": "Original creator" + }, + { + "name": "Takashi Matsuo", + "email": "tmatsuo@google.com" + }, + { + "name": "Google Inc" + }, + { + "name": "Dariusz Ruminski", + "email": "dariusz.ruminski@gmail.com", + "homepage": "https://github.com/keradus" + }, + { + "name": "Contributors", + "homepage": "https://github.com/php-coveralls/php-coveralls/graphs/contributors" + } + ], + "description": "PHP client library for Coveralls API", + "homepage": "https://github.com/php-coveralls/php-coveralls", + "keywords": [ + "ci", + "coverage", + "github", + "test" + ], + "support": { + "issues": "https://github.com/php-coveralls/php-coveralls/issues", + "source": "https://github.com/php-coveralls/php-coveralls/tree/v2.5.2" + }, + "time": "2021-12-06T17:05:08+00:00" + }, + { + "name": "phpdocumentor/reflection-common", + "version": "2.2.0", + "source": { + "type": "git", + "url": "https://github.com/phpDocumentor/ReflectionCommon.git", + "reference": "1d01c49d4ed62f25aa84a747ad35d5a16924662b" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/phpDocumentor/ReflectionCommon/zipball/1d01c49d4ed62f25aa84a747ad35d5a16924662b", + "reference": "1d01c49d4ed62f25aa84a747ad35d5a16924662b", + "shasum": "" + }, + "require": { + "php": "^7.2 || ^8.0" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-2.x": "2.x-dev" + } + }, + "autoload": { + "psr-4": { + "phpDocumentor\\Reflection\\": "src/" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Jaap van Otterdijk", + "email": "opensource@ijaap.nl" + } + ], + "description": "Common reflection classes used by phpdocumentor to reflect the code structure", + "homepage": "http://www.phpdoc.org", + "keywords": [ + "FQSEN", + "phpDocumentor", + "phpdoc", + "reflection", + "static analysis" + ], + "support": { + "issues": "https://github.com/phpDocumentor/ReflectionCommon/issues", + "source": "https://github.com/phpDocumentor/ReflectionCommon/tree/2.x" + }, + "time": "2020-06-27T09:03:43+00:00" + }, + { + "name": "phpdocumentor/reflection-docblock", + "version": "5.3.0", + "source": { + "type": "git", + "url": "https://github.com/phpDocumentor/ReflectionDocBlock.git", + "reference": "622548b623e81ca6d78b721c5e029f4ce664f170" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/phpDocumentor/ReflectionDocBlock/zipball/622548b623e81ca6d78b721c5e029f4ce664f170", + "reference": "622548b623e81ca6d78b721c5e029f4ce664f170", + "shasum": "" + }, + "require": { + "ext-filter": "*", + "php": "^7.2 || ^8.0", + "phpdocumentor/reflection-common": "^2.2", + "phpdocumentor/type-resolver": "^1.3", + "webmozart/assert": "^1.9.1" + }, + "require-dev": { + "mockery/mockery": "~1.3.2", + "psalm/phar": "^4.8" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "5.x-dev" + } + }, + "autoload": { + "psr-4": { + "phpDocumentor\\Reflection\\": "src" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Mike van Riel", + "email": "me@mikevanriel.com" + }, + { + "name": "Jaap van Otterdijk", + "email": "account@ijaap.nl" + } + ], + "description": "With this component, a library can provide support for annotations via DocBlocks or otherwise retrieve information that is embedded in a DocBlock.", + "support": { + "issues": "https://github.com/phpDocumentor/ReflectionDocBlock/issues", + "source": "https://github.com/phpDocumentor/ReflectionDocBlock/tree/5.3.0" + }, + "time": "2021-10-19T17:43:47+00:00" + }, + { + "name": "phpdocumentor/type-resolver", + "version": "1.6.1", + "source": { + "type": "git", + "url": "https://github.com/phpDocumentor/TypeResolver.git", + "reference": "77a32518733312af16a44300404e945338981de3" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/phpDocumentor/TypeResolver/zipball/77a32518733312af16a44300404e945338981de3", + "reference": "77a32518733312af16a44300404e945338981de3", + "shasum": "" + }, + "require": { + "php": "^7.2 || ^8.0", + "phpdocumentor/reflection-common": "^2.0" + }, + "require-dev": { + "ext-tokenizer": "*", + "psalm/phar": "^4.8" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-1.x": "1.x-dev" + } + }, + "autoload": { + "psr-4": { + "phpDocumentor\\Reflection\\": "src" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Mike van Riel", + "email": "me@mikevanriel.com" + } + ], + "description": "A PSR-5 based resolver of Class names, Types and Structural Element Names", + "support": { + "issues": "https://github.com/phpDocumentor/TypeResolver/issues", + "source": "https://github.com/phpDocumentor/TypeResolver/tree/1.6.1" + }, + "time": "2022-03-15T21:29:03+00:00" + }, + { + "name": "phpmailer/phpmailer", + "version": "v6.5.4", + "source": { + "type": "git", + "url": "https://github.com/PHPMailer/PHPMailer.git", + "reference": "c0d9f7dd3c2aa247ca44791e9209233829d82285" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/PHPMailer/PHPMailer/zipball/c0d9f7dd3c2aa247ca44791e9209233829d82285", + "reference": "c0d9f7dd3c2aa247ca44791e9209233829d82285", + "shasum": "" + }, + "require": { + "ext-ctype": "*", + "ext-filter": "*", + "ext-hash": "*", + "php": ">=5.5.0" + }, + "require-dev": { + "dealerdirect/phpcodesniffer-composer-installer": "^0.7.0", + "doctrine/annotations": "^1.2", + "php-parallel-lint/php-console-highlighter": "^0.5.0", + "php-parallel-lint/php-parallel-lint": "^1.3.1", + "phpcompatibility/php-compatibility": "^9.3.5", + "roave/security-advisories": "dev-latest", + "squizlabs/php_codesniffer": "^3.6.2", + "yoast/phpunit-polyfills": "^1.0.0" + }, + "suggest": { + "ext-mbstring": "Needed to send email in multibyte encoding charset or decode encoded addresses", + "hayageek/oauth2-yahoo": "Needed for Yahoo XOAUTH2 authentication", + "league/oauth2-google": "Needed for Google XOAUTH2 authentication", + "psr/log": "For optional PSR-3 debug logging", + "stevenmaguire/oauth2-microsoft": "Needed for Microsoft XOAUTH2 authentication", + "symfony/polyfill-mbstring": "To support UTF-8 if the Mbstring PHP extension is not enabled (^1.2)" + }, + "type": "library", + "autoload": { + "psr-4": { + "PHPMailer\\PHPMailer\\": "src/" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "LGPL-2.1-only" + ], + "authors": [ + { + "name": "Marcus Bointon", + "email": "phpmailer@synchromedia.co.uk" + }, + { + "name": "Jim Jagielski", + "email": "jimjag@gmail.com" + }, + { + "name": "Andy Prevost", + "email": "codeworxtech@users.sourceforge.net" + }, + { + "name": "Brent R. Matzelle" + } + ], + "description": "PHPMailer is a full-featured email creation and transfer class for PHP", + "support": { + "issues": "https://github.com/PHPMailer/PHPMailer/issues", + "source": "https://github.com/PHPMailer/PHPMailer/tree/v6.5.4" + }, + "funding": [ + { + "url": "https://github.com/Synchro", + "type": "github" + } + ], + "time": "2022-02-17T08:19:04+00:00" + }, + { + "name": "phpspec/prophecy", + "version": "v1.15.0", + "source": { + "type": "git", + "url": "https://github.com/phpspec/prophecy.git", + "reference": "bbcd7380b0ebf3961ee21409db7b38bc31d69a13" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/phpspec/prophecy/zipball/bbcd7380b0ebf3961ee21409db7b38bc31d69a13", + "reference": "bbcd7380b0ebf3961ee21409db7b38bc31d69a13", + "shasum": "" + }, + "require": { + "doctrine/instantiator": "^1.2", + "php": "^7.2 || ~8.0, <8.2", + "phpdocumentor/reflection-docblock": "^5.2", + "sebastian/comparator": "^3.0 || ^4.0", + "sebastian/recursion-context": "^3.0 || ^4.0" + }, + "require-dev": { + "phpspec/phpspec": "^6.0 || ^7.0", + "phpunit/phpunit": "^8.0 || ^9.0" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "1.x-dev" + } + }, + "autoload": { + "psr-4": { + "Prophecy\\": "src/Prophecy" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Konstantin Kudryashov", + "email": "ever.zet@gmail.com", + "homepage": "http://everzet.com" + }, + { + "name": "Marcello Duarte", + "email": "marcello.duarte@gmail.com" + } + ], + "description": "Highly opinionated mocking framework for PHP 5.3+", + "homepage": "https://github.com/phpspec/prophecy", + "keywords": [ + "Double", + "Dummy", + "fake", + "mock", + "spy", + "stub" + ], + "support": { + "issues": "https://github.com/phpspec/prophecy/issues", + "source": "https://github.com/phpspec/prophecy/tree/v1.15.0" + }, + "time": "2021-12-08T12:19:24+00:00" + }, + { + "name": "phpunit/php-code-coverage", + "version": "9.2.15", + "source": { + "type": "git", + "url": "https://github.com/sebastianbergmann/php-code-coverage.git", + "reference": "2e9da11878c4202f97915c1cb4bb1ca318a63f5f" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/sebastianbergmann/php-code-coverage/zipball/2e9da11878c4202f97915c1cb4bb1ca318a63f5f", + "reference": "2e9da11878c4202f97915c1cb4bb1ca318a63f5f", + "shasum": "" + }, + "require": { + "ext-dom": "*", + "ext-libxml": "*", + "ext-xmlwriter": "*", + "nikic/php-parser": "^4.13.0", + "php": ">=7.3", + "phpunit/php-file-iterator": "^3.0.3", + "phpunit/php-text-template": "^2.0.2", + "sebastian/code-unit-reverse-lookup": "^2.0.2", + "sebastian/complexity": "^2.0", + "sebastian/environment": "^5.1.2", + "sebastian/lines-of-code": "^1.0.3", + "sebastian/version": "^3.0.1", + "theseer/tokenizer": "^1.2.0" + }, + "require-dev": { + "phpunit/phpunit": "^9.3" + }, + "suggest": { + "ext-pcov": "*", + "ext-xdebug": "*" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "9.2-dev" + } + }, + "autoload": { + "classmap": [ + "src/" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "BSD-3-Clause" + ], + "authors": [ + { + "name": "Sebastian Bergmann", + "email": "sebastian@phpunit.de", + "role": "lead" + } + ], + "description": "Library that provides collection, processing, and rendering functionality for PHP code coverage information.", + "homepage": "https://github.com/sebastianbergmann/php-code-coverage", + "keywords": [ + "coverage", + "testing", + "xunit" + ], + "support": { + "issues": "https://github.com/sebastianbergmann/php-code-coverage/issues", + "source": "https://github.com/sebastianbergmann/php-code-coverage/tree/9.2.15" + }, + "funding": [ + { + "url": "https://github.com/sebastianbergmann", + "type": "github" + } + ], + "time": "2022-03-07T09:28:20+00:00" + }, + { + "name": "phpunit/php-file-iterator", + "version": "3.0.6", + "source": { + "type": "git", + "url": "https://github.com/sebastianbergmann/php-file-iterator.git", + "reference": "cf1c2e7c203ac650e352f4cc675a7021e7d1b3cf" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/sebastianbergmann/php-file-iterator/zipball/cf1c2e7c203ac650e352f4cc675a7021e7d1b3cf", + "reference": "cf1c2e7c203ac650e352f4cc675a7021e7d1b3cf", + "shasum": "" + }, + "require": { + "php": ">=7.3" + }, + "require-dev": { + "phpunit/phpunit": "^9.3" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "3.0-dev" + } + }, + "autoload": { + "classmap": [ + "src/" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "BSD-3-Clause" + ], + "authors": [ + { + "name": "Sebastian Bergmann", + "email": "sebastian@phpunit.de", + "role": "lead" + } + ], + "description": "FilterIterator implementation that filters files based on a list of suffixes.", + "homepage": "https://github.com/sebastianbergmann/php-file-iterator/", + "keywords": [ + "filesystem", + "iterator" + ], + "support": { + "issues": "https://github.com/sebastianbergmann/php-file-iterator/issues", + "source": "https://github.com/sebastianbergmann/php-file-iterator/tree/3.0.6" + }, + "funding": [ + { + "url": "https://github.com/sebastianbergmann", + "type": "github" + } + ], + "time": "2021-12-02T12:48:52+00:00" + }, + { + "name": "phpunit/php-invoker", + "version": "3.1.1", + "source": { + "type": "git", + "url": "https://github.com/sebastianbergmann/php-invoker.git", + "reference": "5a10147d0aaf65b58940a0b72f71c9ac0423cc67" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/sebastianbergmann/php-invoker/zipball/5a10147d0aaf65b58940a0b72f71c9ac0423cc67", + "reference": "5a10147d0aaf65b58940a0b72f71c9ac0423cc67", + "shasum": "" + }, + "require": { + "php": ">=7.3" + }, + "require-dev": { + "ext-pcntl": "*", + "phpunit/phpunit": "^9.3" + }, + "suggest": { + "ext-pcntl": "*" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "3.1-dev" + } + }, + "autoload": { + "classmap": [ + "src/" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "BSD-3-Clause" + ], + "authors": [ + { + "name": "Sebastian Bergmann", + "email": "sebastian@phpunit.de", + "role": "lead" + } + ], + "description": "Invoke callables with a timeout", + "homepage": "https://github.com/sebastianbergmann/php-invoker/", + "keywords": [ + "process" + ], + "support": { + "issues": "https://github.com/sebastianbergmann/php-invoker/issues", + "source": "https://github.com/sebastianbergmann/php-invoker/tree/3.1.1" + }, + "funding": [ + { + "url": "https://github.com/sebastianbergmann", + "type": "github" + } + ], + "time": "2020-09-28T05:58:55+00:00" + }, + { + "name": "phpunit/php-text-template", + "version": "2.0.4", + "source": { + "type": "git", + "url": "https://github.com/sebastianbergmann/php-text-template.git", + "reference": "5da5f67fc95621df9ff4c4e5a84d6a8a2acf7c28" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/sebastianbergmann/php-text-template/zipball/5da5f67fc95621df9ff4c4e5a84d6a8a2acf7c28", + "reference": "5da5f67fc95621df9ff4c4e5a84d6a8a2acf7c28", + "shasum": "" + }, + "require": { + "php": ">=7.3" + }, + "require-dev": { + "phpunit/phpunit": "^9.3" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "2.0-dev" + } + }, + "autoload": { + "classmap": [ + "src/" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "BSD-3-Clause" + ], + "authors": [ + { + "name": "Sebastian Bergmann", + "email": "sebastian@phpunit.de", + "role": "lead" + } + ], + "description": "Simple template engine.", + "homepage": "https://github.com/sebastianbergmann/php-text-template/", + "keywords": [ + "template" + ], + "support": { + "issues": "https://github.com/sebastianbergmann/php-text-template/issues", + "source": "https://github.com/sebastianbergmann/php-text-template/tree/2.0.4" + }, + "funding": [ + { + "url": "https://github.com/sebastianbergmann", + "type": "github" + } + ], + "time": "2020-10-26T05:33:50+00:00" + }, + { + "name": "phpunit/php-timer", + "version": "5.0.3", + "source": { + "type": "git", + "url": "https://github.com/sebastianbergmann/php-timer.git", + "reference": "5a63ce20ed1b5bf577850e2c4e87f4aa902afbd2" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/sebastianbergmann/php-timer/zipball/5a63ce20ed1b5bf577850e2c4e87f4aa902afbd2", + "reference": "5a63ce20ed1b5bf577850e2c4e87f4aa902afbd2", + "shasum": "" + }, + "require": { + "php": ">=7.3" + }, + "require-dev": { + "phpunit/phpunit": "^9.3" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "5.0-dev" + } + }, + "autoload": { + "classmap": [ + "src/" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "BSD-3-Clause" + ], + "authors": [ + { + "name": "Sebastian Bergmann", + "email": "sebastian@phpunit.de", + "role": "lead" + } + ], + "description": "Utility class for timing", + "homepage": "https://github.com/sebastianbergmann/php-timer/", + "keywords": [ + "timer" + ], + "support": { + "issues": "https://github.com/sebastianbergmann/php-timer/issues", + "source": "https://github.com/sebastianbergmann/php-timer/tree/5.0.3" + }, + "funding": [ + { + "url": "https://github.com/sebastianbergmann", + "type": "github" + } + ], + "time": "2020-10-26T13:16:10+00:00" + }, + { + "name": "phpunit/phpunit", + "version": "9.5.20", + "source": { + "type": "git", + "url": "https://github.com/sebastianbergmann/phpunit.git", + "reference": "12bc8879fb65aef2138b26fc633cb1e3620cffba" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/sebastianbergmann/phpunit/zipball/12bc8879fb65aef2138b26fc633cb1e3620cffba", + "reference": "12bc8879fb65aef2138b26fc633cb1e3620cffba", + "shasum": "" + }, + "require": { + "doctrine/instantiator": "^1.3.1", + "ext-dom": "*", + "ext-json": "*", + "ext-libxml": "*", + "ext-mbstring": "*", + "ext-xml": "*", + "ext-xmlwriter": "*", + "myclabs/deep-copy": "^1.10.1", + "phar-io/manifest": "^2.0.3", + "phar-io/version": "^3.0.2", + "php": ">=7.3", + "phpspec/prophecy": "^1.12.1", + "phpunit/php-code-coverage": "^9.2.13", + "phpunit/php-file-iterator": "^3.0.5", + "phpunit/php-invoker": "^3.1.1", + "phpunit/php-text-template": "^2.0.3", + "phpunit/php-timer": "^5.0.2", + "sebastian/cli-parser": "^1.0.1", + "sebastian/code-unit": "^1.0.6", + "sebastian/comparator": "^4.0.5", + "sebastian/diff": "^4.0.3", + "sebastian/environment": "^5.1.3", + "sebastian/exporter": "^4.0.3", + "sebastian/global-state": "^5.0.1", + "sebastian/object-enumerator": "^4.0.3", + "sebastian/resource-operations": "^3.0.3", + "sebastian/type": "^3.0", + "sebastian/version": "^3.0.2" + }, + "require-dev": { + "ext-pdo": "*", + "phpspec/prophecy-phpunit": "^2.0.1" + }, + "suggest": { + "ext-soap": "*", + "ext-xdebug": "*" + }, + "bin": [ + "phpunit" + ], + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "9.5-dev" + } + }, + "autoload": { + "files": [ + "src/Framework/Assert/Functions.php" + ], + "classmap": [ + "src/" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "BSD-3-Clause" + ], + "authors": [ + { + "name": "Sebastian Bergmann", + "email": "sebastian@phpunit.de", + "role": "lead" + } + ], + "description": "The PHP Unit Testing framework.", + "homepage": "https://phpunit.de/", + "keywords": [ + "phpunit", + "testing", + "xunit" + ], + "support": { + "issues": "https://github.com/sebastianbergmann/phpunit/issues", + "source": "https://github.com/sebastianbergmann/phpunit/tree/9.5.20" + }, + "funding": [ + { + "url": "https://phpunit.de/sponsors.html", + "type": "custom" + }, + { + "url": "https://github.com/sebastianbergmann", + "type": "github" + } + ], + "time": "2022-04-01T12:37:26+00:00" + }, + { + "name": "psr/container", + "version": "2.0.2", + "source": { + "type": "git", + "url": "https://github.com/php-fig/container.git", + "reference": "c71ecc56dfe541dbd90c5360474fbc405f8d5963" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/php-fig/container/zipball/c71ecc56dfe541dbd90c5360474fbc405f8d5963", + "reference": "c71ecc56dfe541dbd90c5360474fbc405f8d5963", + "shasum": "" + }, + "require": { + "php": ">=7.4.0" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "2.0.x-dev" + } + }, + "autoload": { + "psr-4": { + "Psr\\Container\\": "src/" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "PHP-FIG", + "homepage": "https://www.php-fig.org/" + } + ], + "description": "Common Container Interface (PHP FIG PSR-11)", + "homepage": "https://github.com/php-fig/container", + "keywords": [ + "PSR-11", + "container", + "container-interface", + "container-interop", + "psr" + ], + "support": { + "issues": "https://github.com/php-fig/container/issues", + "source": "https://github.com/php-fig/container/tree/2.0.2" + }, + "time": "2021-11-05T16:47:00+00:00" + }, + { + "name": "psr/http-client", + "version": "1.0.1", + "source": { + "type": "git", + "url": "https://github.com/php-fig/http-client.git", + "reference": "2dfb5f6c5eff0e91e20e913f8c5452ed95b86621" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/php-fig/http-client/zipball/2dfb5f6c5eff0e91e20e913f8c5452ed95b86621", + "reference": "2dfb5f6c5eff0e91e20e913f8c5452ed95b86621", + "shasum": "" + }, + "require": { + "php": "^7.0 || ^8.0", + "psr/http-message": "^1.0" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "1.0.x-dev" + } + }, + "autoload": { + "psr-4": { + "Psr\\Http\\Client\\": "src/" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "PHP-FIG", + "homepage": "http://www.php-fig.org/" + } + ], + "description": "Common interface for HTTP clients", + "homepage": "https://github.com/php-fig/http-client", + "keywords": [ + "http", + "http-client", + "psr", + "psr-18" + ], + "support": { + "source": "https://github.com/php-fig/http-client/tree/master" + }, + "time": "2020-06-29T06:28:15+00:00" + }, + { + "name": "psr/http-factory", + "version": "1.0.1", + "source": { + "type": "git", + "url": "https://github.com/php-fig/http-factory.git", + "reference": "12ac7fcd07e5b077433f5f2bee95b3a771bf61be" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/php-fig/http-factory/zipball/12ac7fcd07e5b077433f5f2bee95b3a771bf61be", + "reference": "12ac7fcd07e5b077433f5f2bee95b3a771bf61be", + "shasum": "" + }, + "require": { + "php": ">=7.0.0", + "psr/http-message": "^1.0" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "1.0.x-dev" + } + }, + "autoload": { + "psr-4": { + "Psr\\Http\\Message\\": "src/" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "PHP-FIG", + "homepage": "http://www.php-fig.org/" + } + ], + "description": "Common interfaces for PSR-7 HTTP message factories", + "keywords": [ + "factory", + "http", + "message", + "psr", + "psr-17", + "psr-7", + "request", + "response" + ], + "support": { + "source": "https://github.com/php-fig/http-factory/tree/master" + }, + "time": "2019-04-30T12:38:16+00:00" + }, + { + "name": "psr/http-message", + "version": "1.0.1", + "source": { + "type": "git", + "url": "https://github.com/php-fig/http-message.git", + "reference": "f6561bf28d520154e4b0ec72be95418abe6d9363" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/php-fig/http-message/zipball/f6561bf28d520154e4b0ec72be95418abe6d9363", + "reference": "f6561bf28d520154e4b0ec72be95418abe6d9363", + "shasum": "" + }, + "require": { + "php": ">=5.3.0" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "1.0.x-dev" + } + }, + "autoload": { + "psr-4": { + "Psr\\Http\\Message\\": "src/" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "PHP-FIG", + "homepage": "http://www.php-fig.org/" + } + ], + "description": "Common interface for HTTP messages", + "homepage": "https://github.com/php-fig/http-message", + "keywords": [ + "http", + "http-message", + "psr", + "psr-7", + "request", + "response" + ], + "support": { + "source": "https://github.com/php-fig/http-message/tree/master" + }, + "time": "2016-08-06T14:39:51+00:00" + }, + { + "name": "ralouphie/getallheaders", + "version": "3.0.3", + "source": { + "type": "git", + "url": "https://github.com/ralouphie/getallheaders.git", + "reference": "120b605dfeb996808c31b6477290a714d356e822" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/ralouphie/getallheaders/zipball/120b605dfeb996808c31b6477290a714d356e822", + "reference": "120b605dfeb996808c31b6477290a714d356e822", + "shasum": "" + }, + "require": { + "php": ">=5.6" + }, + "require-dev": { + "php-coveralls/php-coveralls": "^2.1", + "phpunit/phpunit": "^5 || ^6.5" + }, + "type": "library", + "autoload": { + "files": [ + "src/getallheaders.php" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Ralph Khattar", + "email": "ralph.khattar@gmail.com" + } + ], + "description": "A polyfill for getallheaders.", + "support": { + "issues": "https://github.com/ralouphie/getallheaders/issues", + "source": "https://github.com/ralouphie/getallheaders/tree/develop" + }, + "time": "2019-03-08T08:55:37+00:00" + }, + { + "name": "sebastian/cli-parser", + "version": "1.0.1", + "source": { + "type": "git", + "url": "https://github.com/sebastianbergmann/cli-parser.git", + "reference": "442e7c7e687e42adc03470c7b668bc4b2402c0b2" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/sebastianbergmann/cli-parser/zipball/442e7c7e687e42adc03470c7b668bc4b2402c0b2", + "reference": "442e7c7e687e42adc03470c7b668bc4b2402c0b2", + "shasum": "" + }, + "require": { + "php": ">=7.3" + }, + "require-dev": { + "phpunit/phpunit": "^9.3" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "1.0-dev" + } + }, + "autoload": { + "classmap": [ + "src/" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "BSD-3-Clause" + ], + "authors": [ + { + "name": "Sebastian Bergmann", + "email": "sebastian@phpunit.de", + "role": "lead" + } + ], + "description": "Library for parsing CLI options", + "homepage": "https://github.com/sebastianbergmann/cli-parser", + "support": { + "issues": "https://github.com/sebastianbergmann/cli-parser/issues", + "source": "https://github.com/sebastianbergmann/cli-parser/tree/1.0.1" + }, + "funding": [ + { + "url": "https://github.com/sebastianbergmann", + "type": "github" + } + ], + "time": "2020-09-28T06:08:49+00:00" + }, + { + "name": "sebastian/code-unit", + "version": "1.0.8", + "source": { + "type": "git", + "url": "https://github.com/sebastianbergmann/code-unit.git", + "reference": "1fc9f64c0927627ef78ba436c9b17d967e68e120" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/sebastianbergmann/code-unit/zipball/1fc9f64c0927627ef78ba436c9b17d967e68e120", + "reference": "1fc9f64c0927627ef78ba436c9b17d967e68e120", + "shasum": "" + }, + "require": { + "php": ">=7.3" + }, + "require-dev": { + "phpunit/phpunit": "^9.3" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "1.0-dev" + } + }, + "autoload": { + "classmap": [ + "src/" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "BSD-3-Clause" + ], + "authors": [ + { + "name": "Sebastian Bergmann", + "email": "sebastian@phpunit.de", + "role": "lead" + } + ], + "description": "Collection of value objects that represent the PHP code units", + "homepage": "https://github.com/sebastianbergmann/code-unit", + "support": { + "issues": "https://github.com/sebastianbergmann/code-unit/issues", + "source": "https://github.com/sebastianbergmann/code-unit/tree/1.0.8" + }, + "funding": [ + { + "url": "https://github.com/sebastianbergmann", + "type": "github" + } + ], + "time": "2020-10-26T13:08:54+00:00" + }, + { + "name": "sebastian/code-unit-reverse-lookup", + "version": "2.0.3", + "source": { + "type": "git", + "url": "https://github.com/sebastianbergmann/code-unit-reverse-lookup.git", + "reference": "ac91f01ccec49fb77bdc6fd1e548bc70f7faa3e5" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/sebastianbergmann/code-unit-reverse-lookup/zipball/ac91f01ccec49fb77bdc6fd1e548bc70f7faa3e5", + "reference": "ac91f01ccec49fb77bdc6fd1e548bc70f7faa3e5", + "shasum": "" + }, + "require": { + "php": ">=7.3" + }, + "require-dev": { + "phpunit/phpunit": "^9.3" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "2.0-dev" + } + }, + "autoload": { + "classmap": [ + "src/" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "BSD-3-Clause" + ], + "authors": [ + { + "name": "Sebastian Bergmann", + "email": "sebastian@phpunit.de" + } + ], + "description": "Looks up which function or method a line of code belongs to", + "homepage": "https://github.com/sebastianbergmann/code-unit-reverse-lookup/", + "support": { + "issues": "https://github.com/sebastianbergmann/code-unit-reverse-lookup/issues", + "source": "https://github.com/sebastianbergmann/code-unit-reverse-lookup/tree/2.0.3" + }, + "funding": [ + { + "url": "https://github.com/sebastianbergmann", + "type": "github" + } + ], + "time": "2020-09-28T05:30:19+00:00" + }, + { + "name": "sebastian/comparator", + "version": "4.0.6", + "source": { + "type": "git", + "url": "https://github.com/sebastianbergmann/comparator.git", + "reference": "55f4261989e546dc112258c7a75935a81a7ce382" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/sebastianbergmann/comparator/zipball/55f4261989e546dc112258c7a75935a81a7ce382", + "reference": "55f4261989e546dc112258c7a75935a81a7ce382", + "shasum": "" + }, + "require": { + "php": ">=7.3", + "sebastian/diff": "^4.0", + "sebastian/exporter": "^4.0" + }, + "require-dev": { + "phpunit/phpunit": "^9.3" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "4.0-dev" + } + }, + "autoload": { + "classmap": [ + "src/" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "BSD-3-Clause" + ], + "authors": [ + { + "name": "Sebastian Bergmann", + "email": "sebastian@phpunit.de" + }, + { + "name": "Jeff Welch", + "email": "whatthejeff@gmail.com" + }, + { + "name": "Volker Dusch", + "email": "github@wallbash.com" + }, + { + "name": "Bernhard Schussek", + "email": "bschussek@2bepublished.at" + } + ], + "description": "Provides the functionality to compare PHP values for equality", + "homepage": "https://github.com/sebastianbergmann/comparator", + "keywords": [ + "comparator", + "compare", + "equality" + ], + "support": { + "issues": "https://github.com/sebastianbergmann/comparator/issues", + "source": "https://github.com/sebastianbergmann/comparator/tree/4.0.6" + }, + "funding": [ + { + "url": "https://github.com/sebastianbergmann", + "type": "github" + } + ], + "time": "2020-10-26T15:49:45+00:00" + }, + { + "name": "sebastian/complexity", + "version": "2.0.2", + "source": { + "type": "git", + "url": "https://github.com/sebastianbergmann/complexity.git", + "reference": "739b35e53379900cc9ac327b2147867b8b6efd88" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/sebastianbergmann/complexity/zipball/739b35e53379900cc9ac327b2147867b8b6efd88", + "reference": "739b35e53379900cc9ac327b2147867b8b6efd88", + "shasum": "" + }, + "require": { + "nikic/php-parser": "^4.7", + "php": ">=7.3" + }, + "require-dev": { + "phpunit/phpunit": "^9.3" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "2.0-dev" + } + }, + "autoload": { + "classmap": [ + "src/" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "BSD-3-Clause" + ], + "authors": [ + { + "name": "Sebastian Bergmann", + "email": "sebastian@phpunit.de", + "role": "lead" + } + ], + "description": "Library for calculating the complexity of PHP code units", + "homepage": "https://github.com/sebastianbergmann/complexity", + "support": { + "issues": "https://github.com/sebastianbergmann/complexity/issues", + "source": "https://github.com/sebastianbergmann/complexity/tree/2.0.2" + }, + "funding": [ + { + "url": "https://github.com/sebastianbergmann", + "type": "github" + } + ], + "time": "2020-10-26T15:52:27+00:00" + }, + { + "name": "sebastian/diff", + "version": "4.0.4", + "source": { + "type": "git", + "url": "https://github.com/sebastianbergmann/diff.git", + "reference": "3461e3fccc7cfdfc2720be910d3bd73c69be590d" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/sebastianbergmann/diff/zipball/3461e3fccc7cfdfc2720be910d3bd73c69be590d", + "reference": "3461e3fccc7cfdfc2720be910d3bd73c69be590d", + "shasum": "" + }, + "require": { + "php": ">=7.3" + }, + "require-dev": { + "phpunit/phpunit": "^9.3", + "symfony/process": "^4.2 || ^5" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "4.0-dev" + } + }, + "autoload": { + "classmap": [ + "src/" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "BSD-3-Clause" + ], + "authors": [ + { + "name": "Sebastian Bergmann", + "email": "sebastian@phpunit.de" + }, + { + "name": "Kore Nordmann", + "email": "mail@kore-nordmann.de" + } + ], + "description": "Diff implementation", + "homepage": "https://github.com/sebastianbergmann/diff", + "keywords": [ + "diff", + "udiff", + "unidiff", + "unified diff" + ], + "support": { + "issues": "https://github.com/sebastianbergmann/diff/issues", + "source": "https://github.com/sebastianbergmann/diff/tree/4.0.4" + }, + "funding": [ + { + "url": "https://github.com/sebastianbergmann", + "type": "github" + } + ], + "time": "2020-10-26T13:10:38+00:00" + }, + { + "name": "sebastian/environment", + "version": "5.1.4", + "source": { + "type": "git", + "url": "https://github.com/sebastianbergmann/environment.git", + "reference": "1b5dff7bb151a4db11d49d90e5408e4e938270f7" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/sebastianbergmann/environment/zipball/1b5dff7bb151a4db11d49d90e5408e4e938270f7", + "reference": "1b5dff7bb151a4db11d49d90e5408e4e938270f7", + "shasum": "" + }, + "require": { + "php": ">=7.3" + }, + "require-dev": { + "phpunit/phpunit": "^9.3" + }, + "suggest": { + "ext-posix": "*" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "5.1-dev" + } + }, + "autoload": { + "classmap": [ + "src/" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "BSD-3-Clause" + ], + "authors": [ + { + "name": "Sebastian Bergmann", + "email": "sebastian@phpunit.de" + } + ], + "description": "Provides functionality to handle HHVM/PHP environments", + "homepage": "http://www.github.com/sebastianbergmann/environment", + "keywords": [ + "Xdebug", + "environment", + "hhvm" + ], + "support": { + "issues": "https://github.com/sebastianbergmann/environment/issues", + "source": "https://github.com/sebastianbergmann/environment/tree/5.1.4" + }, + "funding": [ + { + "url": "https://github.com/sebastianbergmann", + "type": "github" + } + ], + "time": "2022-04-03T09:37:03+00:00" + }, + { + "name": "sebastian/exporter", + "version": "4.0.4", + "source": { + "type": "git", + "url": "https://github.com/sebastianbergmann/exporter.git", + "reference": "65e8b7db476c5dd267e65eea9cab77584d3cfff9" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/sebastianbergmann/exporter/zipball/65e8b7db476c5dd267e65eea9cab77584d3cfff9", + "reference": "65e8b7db476c5dd267e65eea9cab77584d3cfff9", + "shasum": "" + }, + "require": { + "php": ">=7.3", + "sebastian/recursion-context": "^4.0" + }, + "require-dev": { + "ext-mbstring": "*", + "phpunit/phpunit": "^9.3" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "4.0-dev" + } + }, + "autoload": { + "classmap": [ + "src/" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "BSD-3-Clause" + ], + "authors": [ + { + "name": "Sebastian Bergmann", + "email": "sebastian@phpunit.de" + }, + { + "name": "Jeff Welch", + "email": "whatthejeff@gmail.com" + }, + { + "name": "Volker Dusch", + "email": "github@wallbash.com" + }, + { + "name": "Adam Harvey", + "email": "aharvey@php.net" + }, + { + "name": "Bernhard Schussek", + "email": "bschussek@gmail.com" + } + ], + "description": "Provides the functionality to export PHP variables for visualization", + "homepage": "https://www.github.com/sebastianbergmann/exporter", + "keywords": [ + "export", + "exporter" + ], + "support": { + "issues": "https://github.com/sebastianbergmann/exporter/issues", + "source": "https://github.com/sebastianbergmann/exporter/tree/4.0.4" + }, + "funding": [ + { + "url": "https://github.com/sebastianbergmann", + "type": "github" + } + ], + "time": "2021-11-11T14:18:36+00:00" + }, + { + "name": "sebastian/global-state", + "version": "5.0.5", + "source": { + "type": "git", + "url": "https://github.com/sebastianbergmann/global-state.git", + "reference": "0ca8db5a5fc9c8646244e629625ac486fa286bf2" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/sebastianbergmann/global-state/zipball/0ca8db5a5fc9c8646244e629625ac486fa286bf2", + "reference": "0ca8db5a5fc9c8646244e629625ac486fa286bf2", + "shasum": "" + }, + "require": { + "php": ">=7.3", + "sebastian/object-reflector": "^2.0", + "sebastian/recursion-context": "^4.0" + }, + "require-dev": { + "ext-dom": "*", + "phpunit/phpunit": "^9.3" + }, + "suggest": { + "ext-uopz": "*" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "5.0-dev" + } + }, + "autoload": { + "classmap": [ + "src/" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "BSD-3-Clause" + ], + "authors": [ + { + "name": "Sebastian Bergmann", + "email": "sebastian@phpunit.de" + } + ], + "description": "Snapshotting of global state", + "homepage": "http://www.github.com/sebastianbergmann/global-state", + "keywords": [ + "global state" + ], + "support": { + "issues": "https://github.com/sebastianbergmann/global-state/issues", + "source": "https://github.com/sebastianbergmann/global-state/tree/5.0.5" + }, + "funding": [ + { + "url": "https://github.com/sebastianbergmann", + "type": "github" + } + ], + "time": "2022-02-14T08:28:10+00:00" + }, + { + "name": "sebastian/lines-of-code", + "version": "1.0.3", + "source": { + "type": "git", + "url": "https://github.com/sebastianbergmann/lines-of-code.git", + "reference": "c1c2e997aa3146983ed888ad08b15470a2e22ecc" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/sebastianbergmann/lines-of-code/zipball/c1c2e997aa3146983ed888ad08b15470a2e22ecc", + "reference": "c1c2e997aa3146983ed888ad08b15470a2e22ecc", + "shasum": "" + }, + "require": { + "nikic/php-parser": "^4.6", + "php": ">=7.3" + }, + "require-dev": { + "phpunit/phpunit": "^9.3" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "1.0-dev" + } + }, + "autoload": { + "classmap": [ + "src/" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "BSD-3-Clause" + ], + "authors": [ + { + "name": "Sebastian Bergmann", + "email": "sebastian@phpunit.de", + "role": "lead" + } + ], + "description": "Library for counting the lines of code in PHP source code", + "homepage": "https://github.com/sebastianbergmann/lines-of-code", + "support": { + "issues": "https://github.com/sebastianbergmann/lines-of-code/issues", + "source": "https://github.com/sebastianbergmann/lines-of-code/tree/1.0.3" + }, + "funding": [ + { + "url": "https://github.com/sebastianbergmann", + "type": "github" + } + ], + "time": "2020-11-28T06:42:11+00:00" + }, + { + "name": "sebastian/object-enumerator", + "version": "4.0.4", + "source": { + "type": "git", + "url": "https://github.com/sebastianbergmann/object-enumerator.git", + "reference": "5c9eeac41b290a3712d88851518825ad78f45c71" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/sebastianbergmann/object-enumerator/zipball/5c9eeac41b290a3712d88851518825ad78f45c71", + "reference": "5c9eeac41b290a3712d88851518825ad78f45c71", + "shasum": "" + }, + "require": { + "php": ">=7.3", + "sebastian/object-reflector": "^2.0", + "sebastian/recursion-context": "^4.0" + }, + "require-dev": { + "phpunit/phpunit": "^9.3" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "4.0-dev" + } + }, + "autoload": { + "classmap": [ + "src/" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "BSD-3-Clause" + ], + "authors": [ + { + "name": "Sebastian Bergmann", + "email": "sebastian@phpunit.de" + } + ], + "description": "Traverses array structures and object graphs to enumerate all referenced objects", + "homepage": "https://github.com/sebastianbergmann/object-enumerator/", + "support": { + "issues": "https://github.com/sebastianbergmann/object-enumerator/issues", + "source": "https://github.com/sebastianbergmann/object-enumerator/tree/4.0.4" + }, + "funding": [ + { + "url": "https://github.com/sebastianbergmann", + "type": "github" + } + ], + "time": "2020-10-26T13:12:34+00:00" + }, + { + "name": "sebastian/object-reflector", + "version": "2.0.4", + "source": { + "type": "git", + "url": "https://github.com/sebastianbergmann/object-reflector.git", + "reference": "b4f479ebdbf63ac605d183ece17d8d7fe49c15c7" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/sebastianbergmann/object-reflector/zipball/b4f479ebdbf63ac605d183ece17d8d7fe49c15c7", + "reference": "b4f479ebdbf63ac605d183ece17d8d7fe49c15c7", + "shasum": "" + }, + "require": { + "php": ">=7.3" + }, + "require-dev": { + "phpunit/phpunit": "^9.3" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "2.0-dev" + } + }, + "autoload": { + "classmap": [ + "src/" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "BSD-3-Clause" + ], + "authors": [ + { + "name": "Sebastian Bergmann", + "email": "sebastian@phpunit.de" + } + ], + "description": "Allows reflection of object attributes, including inherited and non-public ones", + "homepage": "https://github.com/sebastianbergmann/object-reflector/", + "support": { + "issues": "https://github.com/sebastianbergmann/object-reflector/issues", + "source": "https://github.com/sebastianbergmann/object-reflector/tree/2.0.4" + }, + "funding": [ + { + "url": "https://github.com/sebastianbergmann", + "type": "github" + } + ], + "time": "2020-10-26T13:14:26+00:00" + }, + { + "name": "sebastian/recursion-context", + "version": "4.0.4", + "source": { + "type": "git", + "url": "https://github.com/sebastianbergmann/recursion-context.git", + "reference": "cd9d8cf3c5804de4341c283ed787f099f5506172" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/sebastianbergmann/recursion-context/zipball/cd9d8cf3c5804de4341c283ed787f099f5506172", + "reference": "cd9d8cf3c5804de4341c283ed787f099f5506172", + "shasum": "" + }, + "require": { + "php": ">=7.3" + }, + "require-dev": { + "phpunit/phpunit": "^9.3" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "4.0-dev" + } + }, + "autoload": { + "classmap": [ + "src/" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "BSD-3-Clause" + ], + "authors": [ + { + "name": "Sebastian Bergmann", + "email": "sebastian@phpunit.de" + }, + { + "name": "Jeff Welch", + "email": "whatthejeff@gmail.com" + }, + { + "name": "Adam Harvey", + "email": "aharvey@php.net" + } + ], + "description": "Provides functionality to recursively process PHP variables", + "homepage": "http://www.github.com/sebastianbergmann/recursion-context", + "support": { + "issues": "https://github.com/sebastianbergmann/recursion-context/issues", + "source": "https://github.com/sebastianbergmann/recursion-context/tree/4.0.4" + }, + "funding": [ + { + "url": "https://github.com/sebastianbergmann", + "type": "github" + } + ], + "time": "2020-10-26T13:17:30+00:00" + }, + { + "name": "sebastian/resource-operations", + "version": "3.0.3", + "source": { + "type": "git", + "url": "https://github.com/sebastianbergmann/resource-operations.git", + "reference": "0f4443cb3a1d92ce809899753bc0d5d5a8dd19a8" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/sebastianbergmann/resource-operations/zipball/0f4443cb3a1d92ce809899753bc0d5d5a8dd19a8", + "reference": "0f4443cb3a1d92ce809899753bc0d5d5a8dd19a8", + "shasum": "" + }, + "require": { + "php": ">=7.3" + }, + "require-dev": { + "phpunit/phpunit": "^9.0" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "3.0-dev" + } + }, + "autoload": { + "classmap": [ + "src/" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "BSD-3-Clause" + ], + "authors": [ + { + "name": "Sebastian Bergmann", + "email": "sebastian@phpunit.de" + } + ], + "description": "Provides a list of PHP built-in functions that operate on resources", + "homepage": "https://www.github.com/sebastianbergmann/resource-operations", + "support": { + "issues": "https://github.com/sebastianbergmann/resource-operations/issues", + "source": "https://github.com/sebastianbergmann/resource-operations/tree/3.0.3" + }, + "funding": [ + { + "url": "https://github.com/sebastianbergmann", + "type": "github" + } + ], + "time": "2020-09-28T06:45:17+00:00" + }, + { + "name": "sebastian/type", + "version": "3.0.0", + "source": { + "type": "git", + "url": "https://github.com/sebastianbergmann/type.git", + "reference": "b233b84bc4465aff7b57cf1c4bc75c86d00d6dad" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/sebastianbergmann/type/zipball/b233b84bc4465aff7b57cf1c4bc75c86d00d6dad", + "reference": "b233b84bc4465aff7b57cf1c4bc75c86d00d6dad", + "shasum": "" + }, + "require": { + "php": ">=7.3" + }, + "require-dev": { + "phpunit/phpunit": "^9.5" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "3.0-dev" + } + }, + "autoload": { + "classmap": [ + "src/" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "BSD-3-Clause" + ], + "authors": [ + { + "name": "Sebastian Bergmann", + "email": "sebastian@phpunit.de", + "role": "lead" + } + ], + "description": "Collection of value objects that represent the types of the PHP type system", + "homepage": "https://github.com/sebastianbergmann/type", + "support": { + "issues": "https://github.com/sebastianbergmann/type/issues", + "source": "https://github.com/sebastianbergmann/type/tree/3.0.0" + }, + "funding": [ + { + "url": "https://github.com/sebastianbergmann", + "type": "github" + } + ], + "time": "2022-03-15T09:54:48+00:00" + }, + { + "name": "sebastian/version", + "version": "3.0.2", + "source": { + "type": "git", + "url": "https://github.com/sebastianbergmann/version.git", + "reference": "c6c1022351a901512170118436c764e473f6de8c" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/sebastianbergmann/version/zipball/c6c1022351a901512170118436c764e473f6de8c", + "reference": "c6c1022351a901512170118436c764e473f6de8c", + "shasum": "" + }, + "require": { + "php": ">=7.3" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "3.0-dev" + } + }, + "autoload": { + "classmap": [ + "src/" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "BSD-3-Clause" + ], + "authors": [ + { + "name": "Sebastian Bergmann", + "email": "sebastian@phpunit.de", + "role": "lead" + } + ], + "description": "Library that helps with managing the version number of Git-hosted PHP projects", + "homepage": "https://github.com/sebastianbergmann/version", + "support": { + "issues": "https://github.com/sebastianbergmann/version/issues", + "source": "https://github.com/sebastianbergmann/version/tree/3.0.2" + }, + "funding": [ + { + "url": "https://github.com/sebastianbergmann", + "type": "github" + } + ], + "time": "2020-09-28T06:39:44+00:00" + }, + { + "name": "symfony/config", + "version": "v6.0.7", + "source": { + "type": "git", + "url": "https://github.com/symfony/config.git", + "reference": "22850bfdd2b6090568ad05dece6843c859d933b7" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/symfony/config/zipball/22850bfdd2b6090568ad05dece6843c859d933b7", + "reference": "22850bfdd2b6090568ad05dece6843c859d933b7", + "shasum": "" + }, + "require": { + "php": ">=8.0.2", + "symfony/deprecation-contracts": "^2.1|^3", + "symfony/filesystem": "^5.4|^6.0", + "symfony/polyfill-ctype": "~1.8", + "symfony/polyfill-php81": "^1.22" + }, + "conflict": { + "symfony/finder": "<4.4" + }, + "require-dev": { + "symfony/event-dispatcher": "^5.4|^6.0", + "symfony/finder": "^5.4|^6.0", + "symfony/messenger": "^5.4|^6.0", + "symfony/service-contracts": "^1.1|^2|^3", + "symfony/yaml": "^5.4|^6.0" + }, + "suggest": { + "symfony/yaml": "To use the yaml reference dumper" + }, + "type": "library", + "autoload": { + "psr-4": { + "Symfony\\Component\\Config\\": "" + }, + "exclude-from-classmap": [ + "/Tests/" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Fabien Potencier", + "email": "fabien@symfony.com" + }, + { + "name": "Symfony Community", + "homepage": "https://symfony.com/contributors" + } + ], + "description": "Helps you find, load, combine, autofill and validate configuration values of any kind", + "homepage": "https://symfony.com", + "support": { + "source": "https://github.com/symfony/config/tree/v6.0.7" + }, + "funding": [ + { + "url": "https://symfony.com/sponsor", + "type": "custom" + }, + { + "url": "https://github.com/fabpot", + "type": "github" + }, + { + "url": "https://tidelift.com/funding/github/packagist/symfony/symfony", + "type": "tidelift" + } + ], + "time": "2022-03-22T16:12:04+00:00" + }, + { + "name": "symfony/console", + "version": "v6.0.7", + "source": { + "type": "git", + "url": "https://github.com/symfony/console.git", + "reference": "70dcf7b2ca2ea08ad6ebcc475f104a024fb5632e" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/symfony/console/zipball/70dcf7b2ca2ea08ad6ebcc475f104a024fb5632e", + "reference": "70dcf7b2ca2ea08ad6ebcc475f104a024fb5632e", + "shasum": "" + }, + "require": { + "php": ">=8.0.2", + "symfony/polyfill-mbstring": "~1.0", + "symfony/service-contracts": "^1.1|^2|^3", + "symfony/string": "^5.4|^6.0" + }, + "conflict": { + "symfony/dependency-injection": "<5.4", + "symfony/dotenv": "<5.4", + "symfony/event-dispatcher": "<5.4", + "symfony/lock": "<5.4", + "symfony/process": "<5.4" + }, + "provide": { + "psr/log-implementation": "1.0|2.0|3.0" + }, + "require-dev": { + "psr/log": "^1|^2|^3", + "symfony/config": "^5.4|^6.0", + "symfony/dependency-injection": "^5.4|^6.0", + "symfony/event-dispatcher": "^5.4|^6.0", + "symfony/lock": "^5.4|^6.0", + "symfony/process": "^5.4|^6.0", + "symfony/var-dumper": "^5.4|^6.0" + }, + "suggest": { + "psr/log": "For using the console logger", + "symfony/event-dispatcher": "", + "symfony/lock": "", + "symfony/process": "" + }, + "type": "library", + "autoload": { + "psr-4": { + "Symfony\\Component\\Console\\": "" + }, + "exclude-from-classmap": [ + "/Tests/" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Fabien Potencier", + "email": "fabien@symfony.com" + }, + { + "name": "Symfony Community", + "homepage": "https://symfony.com/contributors" + } + ], + "description": "Eases the creation of beautiful and testable command line interfaces", + "homepage": "https://symfony.com", + "keywords": [ + "cli", + "command line", + "console", + "terminal" + ], + "support": { + "source": "https://github.com/symfony/console/tree/v6.0.7" + }, + "funding": [ + { + "url": "https://symfony.com/sponsor", + "type": "custom" + }, + { + "url": "https://github.com/fabpot", + "type": "github" + }, + { + "url": "https://tidelift.com/funding/github/packagist/symfony/symfony", + "type": "tidelift" + } + ], + "time": "2022-03-31T17:18:25+00:00" + }, + { + "name": "symfony/filesystem", + "version": "v6.0.7", + "source": { + "type": "git", + "url": "https://github.com/symfony/filesystem.git", + "reference": "6c9e4c41f2c51dfde3db298594ed9cba55dbf5ff" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/symfony/filesystem/zipball/6c9e4c41f2c51dfde3db298594ed9cba55dbf5ff", + "reference": "6c9e4c41f2c51dfde3db298594ed9cba55dbf5ff", + "shasum": "" + }, + "require": { + "php": ">=8.0.2", + "symfony/polyfill-ctype": "~1.8", + "symfony/polyfill-mbstring": "~1.8" + }, + "type": "library", + "autoload": { + "psr-4": { + "Symfony\\Component\\Filesystem\\": "" + }, + "exclude-from-classmap": [ + "/Tests/" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Fabien Potencier", + "email": "fabien@symfony.com" + }, + { + "name": "Symfony Community", + "homepage": "https://symfony.com/contributors" + } + ], + "description": "Provides basic utilities for the filesystem", + "homepage": "https://symfony.com", + "support": { + "source": "https://github.com/symfony/filesystem/tree/v6.0.7" + }, + "funding": [ + { + "url": "https://symfony.com/sponsor", + "type": "custom" + }, + { + "url": "https://github.com/fabpot", + "type": "github" + }, + { + "url": "https://tidelift.com/funding/github/packagist/symfony/symfony", + "type": "tidelift" + } + ], + "time": "2022-04-01T12:54:51+00:00" + }, + { + "name": "symfony/polyfill-ctype", + "version": "v1.25.0", + "source": { + "type": "git", + "url": "https://github.com/symfony/polyfill-ctype.git", + "reference": "30885182c981ab175d4d034db0f6f469898070ab" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/symfony/polyfill-ctype/zipball/30885182c981ab175d4d034db0f6f469898070ab", + "reference": "30885182c981ab175d4d034db0f6f469898070ab", + "shasum": "" + }, + "require": { + "php": ">=7.1" + }, + "provide": { + "ext-ctype": "*" + }, + "suggest": { + "ext-ctype": "For best performance" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-main": "1.23-dev" + }, + "thanks": { + "name": "symfony/polyfill", + "url": "https://github.com/symfony/polyfill" + } + }, + "autoload": { + "files": [ + "bootstrap.php" + ], + "psr-4": { + "Symfony\\Polyfill\\Ctype\\": "" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Gert de Pagter", + "email": "BackEndTea@gmail.com" + }, + { + "name": "Symfony Community", + "homepage": "https://symfony.com/contributors" + } + ], + "description": "Symfony polyfill for ctype functions", + "homepage": "https://symfony.com", + "keywords": [ + "compatibility", + "ctype", + "polyfill", + "portable" + ], + "support": { + "source": "https://github.com/symfony/polyfill-ctype/tree/v1.25.0" + }, + "funding": [ + { + "url": "https://symfony.com/sponsor", + "type": "custom" + }, + { + "url": "https://github.com/fabpot", + "type": "github" + }, + { + "url": "https://tidelift.com/funding/github/packagist/symfony/symfony", + "type": "tidelift" + } + ], + "time": "2021-10-20T20:35:02+00:00" + }, + { + "name": "symfony/polyfill-intl-grapheme", + "version": "v1.25.0", + "source": { + "type": "git", + "url": "https://github.com/symfony/polyfill-intl-grapheme.git", + "reference": "81b86b50cf841a64252b439e738e97f4a34e2783" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/symfony/polyfill-intl-grapheme/zipball/81b86b50cf841a64252b439e738e97f4a34e2783", + "reference": "81b86b50cf841a64252b439e738e97f4a34e2783", + "shasum": "" + }, + "require": { + "php": ">=7.1" + }, + "suggest": { + "ext-intl": "For best performance" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-main": "1.23-dev" + }, + "thanks": { + "name": "symfony/polyfill", + "url": "https://github.com/symfony/polyfill" + } + }, + "autoload": { + "files": [ + "bootstrap.php" + ], + "psr-4": { + "Symfony\\Polyfill\\Intl\\Grapheme\\": "" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Nicolas Grekas", + "email": "p@tchwork.com" + }, + { + "name": "Symfony Community", + "homepage": "https://symfony.com/contributors" + } + ], + "description": "Symfony polyfill for intl's grapheme_* functions", + "homepage": "https://symfony.com", + "keywords": [ + "compatibility", + "grapheme", + "intl", + "polyfill", + "portable", + "shim" + ], + "support": { + "source": "https://github.com/symfony/polyfill-intl-grapheme/tree/v1.25.0" + }, + "funding": [ + { + "url": "https://symfony.com/sponsor", + "type": "custom" + }, + { + "url": "https://github.com/fabpot", + "type": "github" + }, + { + "url": "https://tidelift.com/funding/github/packagist/symfony/symfony", + "type": "tidelift" + } + ], + "time": "2021-11-23T21:10:46+00:00" + }, + { + "name": "symfony/polyfill-intl-idn", + "version": "v1.25.0", + "source": { + "type": "git", + "url": "https://github.com/symfony/polyfill-intl-idn.git", + "reference": "749045c69efb97c70d25d7463abba812e91f3a44" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/symfony/polyfill-intl-idn/zipball/749045c69efb97c70d25d7463abba812e91f3a44", + "reference": "749045c69efb97c70d25d7463abba812e91f3a44", + "shasum": "" + }, + "require": { + "php": ">=7.1", + "symfony/polyfill-intl-normalizer": "^1.10", + "symfony/polyfill-php72": "^1.10" + }, + "suggest": { + "ext-intl": "For best performance" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-main": "1.23-dev" + }, + "thanks": { + "name": "symfony/polyfill", + "url": "https://github.com/symfony/polyfill" + } + }, + "autoload": { + "files": [ + "bootstrap.php" + ], + "psr-4": { + "Symfony\\Polyfill\\Intl\\Idn\\": "" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Laurent Bassin", + "email": "laurent@bassin.info" + }, + { + "name": "Trevor Rowbotham", + "email": "trevor.rowbotham@pm.me" + }, + { + "name": "Symfony Community", + "homepage": "https://symfony.com/contributors" + } + ], + "description": "Symfony polyfill for intl's idn_to_ascii and idn_to_utf8 functions", + "homepage": "https://symfony.com", + "keywords": [ + "compatibility", + "idn", + "intl", + "polyfill", + "portable", + "shim" + ], + "support": { + "source": "https://github.com/symfony/polyfill-intl-idn/tree/v1.25.0" + }, + "funding": [ + { + "url": "https://symfony.com/sponsor", + "type": "custom" + }, + { + "url": "https://github.com/fabpot", + "type": "github" + }, + { + "url": "https://tidelift.com/funding/github/packagist/symfony/symfony", + "type": "tidelift" + } + ], + "time": "2021-09-14T14:02:44+00:00" + }, + { + "name": "symfony/polyfill-intl-normalizer", + "version": "v1.25.0", + "source": { + "type": "git", + "url": "https://github.com/symfony/polyfill-intl-normalizer.git", + "reference": "8590a5f561694770bdcd3f9b5c69dde6945028e8" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/symfony/polyfill-intl-normalizer/zipball/8590a5f561694770bdcd3f9b5c69dde6945028e8", + "reference": "8590a5f561694770bdcd3f9b5c69dde6945028e8", + "shasum": "" + }, + "require": { + "php": ">=7.1" + }, + "suggest": { + "ext-intl": "For best performance" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-main": "1.23-dev" + }, + "thanks": { + "name": "symfony/polyfill", + "url": "https://github.com/symfony/polyfill" + } + }, + "autoload": { + "files": [ + "bootstrap.php" + ], + "psr-4": { + "Symfony\\Polyfill\\Intl\\Normalizer\\": "" + }, + "classmap": [ + "Resources/stubs" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Nicolas Grekas", + "email": "p@tchwork.com" + }, + { + "name": "Symfony Community", + "homepage": "https://symfony.com/contributors" + } + ], + "description": "Symfony polyfill for intl's Normalizer class and related functions", + "homepage": "https://symfony.com", + "keywords": [ + "compatibility", + "intl", + "normalizer", + "polyfill", + "portable", + "shim" + ], + "support": { + "source": "https://github.com/symfony/polyfill-intl-normalizer/tree/v1.25.0" + }, + "funding": [ + { + "url": "https://symfony.com/sponsor", + "type": "custom" + }, + { + "url": "https://github.com/fabpot", + "type": "github" + }, + { + "url": "https://tidelift.com/funding/github/packagist/symfony/symfony", + "type": "tidelift" + } + ], + "time": "2021-02-19T12:13:01+00:00" + }, + { + "name": "symfony/polyfill-mbstring", + "version": "v1.25.0", + "source": { + "type": "git", + "url": "https://github.com/symfony/polyfill-mbstring.git", + "reference": "0abb51d2f102e00a4eefcf46ba7fec406d245825" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/symfony/polyfill-mbstring/zipball/0abb51d2f102e00a4eefcf46ba7fec406d245825", + "reference": "0abb51d2f102e00a4eefcf46ba7fec406d245825", + "shasum": "" + }, + "require": { + "php": ">=7.1" + }, + "provide": { + "ext-mbstring": "*" + }, + "suggest": { + "ext-mbstring": "For best performance" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-main": "1.23-dev" + }, + "thanks": { + "name": "symfony/polyfill", + "url": "https://github.com/symfony/polyfill" + } + }, + "autoload": { + "files": [ + "bootstrap.php" + ], + "psr-4": { + "Symfony\\Polyfill\\Mbstring\\": "" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Nicolas Grekas", + "email": "p@tchwork.com" + }, + { + "name": "Symfony Community", + "homepage": "https://symfony.com/contributors" + } + ], + "description": "Symfony polyfill for the Mbstring extension", + "homepage": "https://symfony.com", + "keywords": [ + "compatibility", + "mbstring", + "polyfill", + "portable", + "shim" + ], + "support": { + "source": "https://github.com/symfony/polyfill-mbstring/tree/v1.25.0" + }, + "funding": [ + { + "url": "https://symfony.com/sponsor", + "type": "custom" + }, + { + "url": "https://github.com/fabpot", + "type": "github" + }, + { + "url": "https://tidelift.com/funding/github/packagist/symfony/symfony", + "type": "tidelift" + } + ], + "time": "2021-11-30T18:21:41+00:00" + }, + { + "name": "symfony/polyfill-php81", + "version": "v1.25.0", + "source": { + "type": "git", + "url": "https://github.com/symfony/polyfill-php81.git", + "reference": "5de4ba2d41b15f9bd0e19b2ab9674135813ec98f" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/symfony/polyfill-php81/zipball/5de4ba2d41b15f9bd0e19b2ab9674135813ec98f", + "reference": "5de4ba2d41b15f9bd0e19b2ab9674135813ec98f", + "shasum": "" + }, + "require": { + "php": ">=7.1" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-main": "1.23-dev" + }, + "thanks": { + "name": "symfony/polyfill", + "url": "https://github.com/symfony/polyfill" + } + }, + "autoload": { + "files": [ + "bootstrap.php" + ], + "psr-4": { + "Symfony\\Polyfill\\Php81\\": "" + }, + "classmap": [ + "Resources/stubs" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Nicolas Grekas", + "email": "p@tchwork.com" + }, + { + "name": "Symfony Community", + "homepage": "https://symfony.com/contributors" + } + ], + "description": "Symfony polyfill backporting some PHP 8.1+ features to lower PHP versions", + "homepage": "https://symfony.com", + "keywords": [ + "compatibility", + "polyfill", + "portable", + "shim" + ], + "support": { + "source": "https://github.com/symfony/polyfill-php81/tree/v1.25.0" + }, + "funding": [ + { + "url": "https://symfony.com/sponsor", + "type": "custom" + }, + { + "url": "https://github.com/fabpot", + "type": "github" + }, + { + "url": "https://tidelift.com/funding/github/packagist/symfony/symfony", + "type": "tidelift" + } + ], + "time": "2021-09-13T13:58:11+00:00" + }, + { + "name": "symfony/service-contracts", + "version": "v3.0.1", + "source": { + "type": "git", + "url": "https://github.com/symfony/service-contracts.git", + "reference": "e517458f278c2131ca9f262f8fbaf01410f2c65c" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/symfony/service-contracts/zipball/e517458f278c2131ca9f262f8fbaf01410f2c65c", + "reference": "e517458f278c2131ca9f262f8fbaf01410f2c65c", + "shasum": "" + }, + "require": { + "php": ">=8.0.2", + "psr/container": "^2.0" + }, + "conflict": { + "ext-psr": "<1.1|>=2" + }, + "suggest": { + "symfony/service-implementation": "" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-main": "3.0-dev" + }, + "thanks": { + "name": "symfony/contracts", + "url": "https://github.com/symfony/contracts" + } + }, + "autoload": { + "psr-4": { + "Symfony\\Contracts\\Service\\": "" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Nicolas Grekas", + "email": "p@tchwork.com" + }, + { + "name": "Symfony Community", + "homepage": "https://symfony.com/contributors" + } + ], + "description": "Generic abstractions related to writing services", + "homepage": "https://symfony.com", + "keywords": [ + "abstractions", + "contracts", + "decoupling", + "interfaces", + "interoperability", + "standards" + ], + "support": { + "source": "https://github.com/symfony/service-contracts/tree/v3.0.1" + }, + "funding": [ + { + "url": "https://symfony.com/sponsor", + "type": "custom" + }, + { + "url": "https://github.com/fabpot", + "type": "github" + }, + { + "url": "https://tidelift.com/funding/github/packagist/symfony/symfony", + "type": "tidelift" + } + ], + "time": "2022-03-13T20:10:05+00:00" + }, + { + "name": "symfony/stopwatch", + "version": "v6.0.5", + "source": { + "type": "git", + "url": "https://github.com/symfony/stopwatch.git", + "reference": "f2c1780607ec6502f2121d9729fd8150a655d337" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/symfony/stopwatch/zipball/f2c1780607ec6502f2121d9729fd8150a655d337", + "reference": "f2c1780607ec6502f2121d9729fd8150a655d337", + "shasum": "" + }, + "require": { + "php": ">=8.0.2", + "symfony/service-contracts": "^1|^2|^3" + }, + "type": "library", + "autoload": { + "psr-4": { + "Symfony\\Component\\Stopwatch\\": "" + }, + "exclude-from-classmap": [ + "/Tests/" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Fabien Potencier", + "email": "fabien@symfony.com" + }, + { + "name": "Symfony Community", + "homepage": "https://symfony.com/contributors" + } + ], + "description": "Provides a way to profile code", + "homepage": "https://symfony.com", + "support": { + "source": "https://github.com/symfony/stopwatch/tree/v6.0.5" + }, + "funding": [ + { + "url": "https://symfony.com/sponsor", + "type": "custom" + }, + { + "url": "https://github.com/fabpot", + "type": "github" + }, + { + "url": "https://tidelift.com/funding/github/packagist/symfony/symfony", + "type": "tidelift" + } + ], + "time": "2022-02-21T17:15:17+00:00" + }, + { + "name": "symfony/string", + "version": "v6.0.3", + "source": { + "type": "git", + "url": "https://github.com/symfony/string.git", + "reference": "522144f0c4c004c80d56fa47e40e17028e2eefc2" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/symfony/string/zipball/522144f0c4c004c80d56fa47e40e17028e2eefc2", + "reference": "522144f0c4c004c80d56fa47e40e17028e2eefc2", + "shasum": "" + }, + "require": { + "php": ">=8.0.2", + "symfony/polyfill-ctype": "~1.8", + "symfony/polyfill-intl-grapheme": "~1.0", + "symfony/polyfill-intl-normalizer": "~1.0", + "symfony/polyfill-mbstring": "~1.0" + }, + "conflict": { + "symfony/translation-contracts": "<2.0" + }, + "require-dev": { + "symfony/error-handler": "^5.4|^6.0", + "symfony/http-client": "^5.4|^6.0", + "symfony/translation-contracts": "^2.0|^3.0", + "symfony/var-exporter": "^5.4|^6.0" + }, + "type": "library", + "autoload": { + "files": [ + "Resources/functions.php" + ], + "psr-4": { + "Symfony\\Component\\String\\": "" + }, + "exclude-from-classmap": [ + "/Tests/" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Nicolas Grekas", + "email": "p@tchwork.com" + }, + { + "name": "Symfony Community", + "homepage": "https://symfony.com/contributors" + } + ], + "description": "Provides an object-oriented API to strings and deals with bytes, UTF-8 code points and grapheme clusters in a unified way", + "homepage": "https://symfony.com", + "keywords": [ + "grapheme", + "i18n", + "string", + "unicode", + "utf-8", + "utf8" + ], + "support": { + "source": "https://github.com/symfony/string/tree/v6.0.3" + }, + "funding": [ + { + "url": "https://symfony.com/sponsor", + "type": "custom" + }, + { + "url": "https://github.com/fabpot", + "type": "github" + }, + { + "url": "https://tidelift.com/funding/github/packagist/symfony/symfony", + "type": "tidelift" + } + ], + "time": "2022-01-02T09:55:41+00:00" + }, + { + "name": "symfony/yaml", + "version": "v6.0.3", + "source": { + "type": "git", + "url": "https://github.com/symfony/yaml.git", + "reference": "e77f3ea0b21141d771d4a5655faa54f692b34af5" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/symfony/yaml/zipball/e77f3ea0b21141d771d4a5655faa54f692b34af5", + "reference": "e77f3ea0b21141d771d4a5655faa54f692b34af5", + "shasum": "" + }, + "require": { + "php": ">=8.0.2", + "symfony/polyfill-ctype": "^1.8" + }, + "conflict": { + "symfony/console": "<5.4" + }, + "require-dev": { + "symfony/console": "^5.4|^6.0" + }, + "suggest": { + "symfony/console": "For validating YAML files using the lint command" + }, + "bin": [ + "Resources/bin/yaml-lint" + ], + "type": "library", + "autoload": { + "psr-4": { + "Symfony\\Component\\Yaml\\": "" + }, + "exclude-from-classmap": [ + "/Tests/" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Fabien Potencier", + "email": "fabien@symfony.com" + }, + { + "name": "Symfony Community", + "homepage": "https://symfony.com/contributors" + } + ], + "description": "Loads and dumps YAML files", + "homepage": "https://symfony.com", + "support": { + "source": "https://github.com/symfony/yaml/tree/v6.0.3" + }, + "funding": [ + { + "url": "https://symfony.com/sponsor", + "type": "custom" + }, + { + "url": "https://github.com/fabpot", + "type": "github" + }, + { + "url": "https://tidelift.com/funding/github/packagist/symfony/symfony", + "type": "tidelift" + } + ], + "time": "2022-01-26T17:23:29+00:00" + }, + { + "name": "theseer/tokenizer", + "version": "1.2.1", + "source": { + "type": "git", + "url": "https://github.com/theseer/tokenizer.git", + "reference": "34a41e998c2183e22995f158c581e7b5e755ab9e" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/theseer/tokenizer/zipball/34a41e998c2183e22995f158c581e7b5e755ab9e", + "reference": "34a41e998c2183e22995f158c581e7b5e755ab9e", + "shasum": "" + }, + "require": { + "ext-dom": "*", + "ext-tokenizer": "*", + "ext-xmlwriter": "*", + "php": "^7.2 || ^8.0" + }, + "type": "library", + "autoload": { + "classmap": [ + "src/" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "BSD-3-Clause" + ], + "authors": [ + { + "name": "Arne Blankerts", + "email": "arne@blankerts.de", + "role": "Developer" + } + ], + "description": "A small library for converting tokenized PHP source code into XML and potentially other formats", + "support": { + "issues": "https://github.com/theseer/tokenizer/issues", + "source": "https://github.com/theseer/tokenizer/tree/1.2.1" + }, + "funding": [ + { + "url": "https://github.com/theseer", + "type": "github" + } + ], + "time": "2021-07-28T10:34:58+00:00" + }, + { + "name": "webmozart/assert", + "version": "1.10.0", + "source": { + "type": "git", + "url": "https://github.com/webmozarts/assert.git", + "reference": "6964c76c7804814a842473e0c8fd15bab0f18e25" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/webmozarts/assert/zipball/6964c76c7804814a842473e0c8fd15bab0f18e25", + "reference": "6964c76c7804814a842473e0c8fd15bab0f18e25", + "shasum": "" + }, + "require": { + "php": "^7.2 || ^8.0", + "symfony/polyfill-ctype": "^1.8" + }, + "conflict": { + "phpstan/phpstan": "<0.12.20", + "vimeo/psalm": "<4.6.1 || 4.6.2" + }, + "require-dev": { + "phpunit/phpunit": "^8.5.13" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "1.10-dev" + } + }, + "autoload": { + "psr-4": { + "Webmozart\\Assert\\": "src/" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Bernhard Schussek", + "email": "bschussek@gmail.com" + } + ], + "description": "Assertions to validate method input/output with nice error messages.", + "keywords": [ + "assert", + "check", + "validate" + ], + "support": { + "issues": "https://github.com/webmozarts/assert/issues", + "source": "https://github.com/webmozarts/assert/tree/1.10.0" + }, + "time": "2021-03-09T10:59:23+00:00" + } + ], + "aliases": [], + "minimum-stability": "stable", + "stability-flags": [], + "prefer-stable": false, + "prefer-lowest": false, + "platform": { + "php": ">=7.4.0" + }, + "platform-dev": [], + "plugin-api-version": "2.3.0" +} diff --git a/site/plugins/kirby3-janitor/docker-compose.yml b/site/plugins/kirby3-janitor/docker-compose.yml new file mode 100644 index 0000000..e3b2b9c --- /dev/null +++ b/site/plugins/kirby3-janitor/docker-compose.yml @@ -0,0 +1,12 @@ +version: '3.8' + +services: + webserver: + image: webdevops/php-apache:7.4 + ports: + - 8000:80 + environment: + WEB_DOCUMENT_ROOT: /app/tests/ + WEB_ALIAS_DOMAIN: janitor.test + volumes: + - .:/app:rw diff --git a/site/plugins/kirby3-janitor/index.css b/site/plugins/kirby3-janitor/index.css new file mode 100644 index 0000000..d92f1e3 --- /dev/null +++ b/site/plugins/kirby3-janitor/index.css @@ -0,0 +1 @@ +.janitor{background-color:var(--color-text);color:#fff;border-radius:3px;padding:.5rem 1rem;line-height:1.25rem;text-align:left}.janitor:hover{background-color:#222}.janitor .k-button-text{opacity:1}.janitor.is-running{background-color:var(--color-border)}.janitor.is-running .k-button-text{color:var(--color-text)}.janitor.has-response{background-color:var(--color-text)}.janitor.is-success{background-color:var(--color-positive)}.janitor.has-error{background-color:var(--color-negative-light)}.visually-hidden{position:absolute;width:1px;height:1px;border:0;padding:0;margin:0;clip-path:inset(50%);overflow:hidden;white-space:nowrap} diff --git a/site/plugins/kirby3-janitor/index.js b/site/plugins/kirby3-janitor/index.js new file mode 100644 index 0000000..349def0 --- /dev/null +++ b/site/plugins/kirby3-janitor/index.js @@ -0,0 +1 @@ +(()=>{(function(){"use strict";var p=function(){var t=this,e=t.$createElement,i=t._self._c||e;return i("div",{staticClass:"janitor-wrapper"},[i("k-button",{class:["janitor",t.button.state],attrs:{id:t.id,icon:t.currentIcon,job:t.job,disabled:!t.isUnsaved&&t.hasChanges},on:{click:t.runJanitor}},[t._v(" "+t._s(t.button.label||t.label)+" ")]),i("a",{directives:[{name:"show",rawName:"v-show",value:t.downloadRequest,expression:"downloadRequest"}],ref:"downloadAnchor",staticClass:"visually-hidden",attrs:{href:t.downloadRequest,download:""}}),i("a",{directives:[{name:"show",rawName:"v-show",value:t.urlRequest,expression:"urlRequest"}],ref:"tabAnchor",staticClass:"visually-hidden",attrs:{href:t.urlRequest,target:"_blank"}})],1)},v=[],q="";function g(t,e,i,c,o,r,l,h){var s=typeof t=="function"?t.options:t;e&&(s.render=e,s.staticRenderFns=i,s._compiled=!0),c&&(s.functional=!0),r&&(s._scopeId="data-v-"+r);var a;if(l?(a=function(n){n=n||this.$vnode&&this.$vnode.ssrContext||this.parent&&this.parent.$vnode&&this.parent.$vnode.ssrContext,!n&&typeof __VUE_SSR_CONTEXT__!="undefined"&&(n=__VUE_SSR_CONTEXT__),o&&o.call(this,n),n&&n._registeredComponents&&n._registeredComponents.add(l)},s._ssrRegister=a):o&&(a=h?function(){o.call(this,(s.functional?this.parent:this).$root.$options.shadowRoot)}:o),a)if(s.functional){s._injectStyles=a;var R=s.render;s.render=function(k,b){return a.call(b),R(k,b)}}else{var f=s.beforeCreate;s.beforeCreate=f?[].concat(f,a):[a]}return{exports:t,options:s}}const u="janitor.runAfterAutosave",m={props:{label:String,progress:String,job:String,cooldown:Number,status:String,data:String,pageURI:String,clipboard:Boolean,unsaved:Boolean,autosave:Boolean,intab:Boolean,confirm:String,icon:{type:[Boolean,String],default:!1}},data(){return{button:{label:null,state:null},downloadRequest:null,clipboardRequest:null,urlRequest:null,isUnsaved:!1,icons:{"is-running":"janitorLoader","is-success":"check","has-error":"alert"}}},computed:{id(){var t;return"janitor-"+this.hashCode(this.job+((t=this.button.label)!=null?t:"")+this.pageURI)},hasChanges(){return this.$store.getters["content/hasChanges"]()},currentIcon(){var t;return(t=this.icons[this.status])!=null?t:this.icon}},created(){this.$events.$on("model.update",()=>sessionStorage.getItem(u)&&location.reload()),sessionStorage.getItem(u)===this.id&&(sessionStorage.removeItem(u),this.runJanitor())},methods:{hashCode(t){let e=0;if(t.length===0)return e;for(const i of t)e=(e<<5)-e+t.charCodeAt(i),e=e&e;return e},async runJanitor(){if(this.confirm&&!window.confirm(this.confirm))return;if(this.autosave&&this.hasChanges){const e=document.querySelector(".k-panel .k-form-buttons .k-view").lastChild;if(e){this.isUnsaved=!1,sessionStorage.setItem(u,this.id),this.simulateClick(e);return}}if(this.clipboard){this.clipboardRequest=this.data,this.button.label=this.progress,this.button.state="is-success",setTimeout(this.resetButton,this.cooldown),this.$nextTick(()=>{this.copyToClipboard(this.data)});return}if(this.clipboardRequest){await this.copyToClipboard(this.clipboardRequest),this.resetButton(),this.clipboardRequest=null;return}if(this.status)return;let t=this.job+"/"+encodeURIComponent(this.pageURI);this.data&&(t=t+"/"+encodeURIComponent(this.data)),this.getRequest(t)},async getRequest(t){var h;this.button.label=(h=this.progress)!=null?h:`${this.label} \u2026`,this.button.state="is-running";const{label:e,status:i,reload:c,href:o,download:r,clipboard:l}=await this.$api.get(t);e&&(this.button.label=e),i?this.button.state=i===200?"is-success":"has-error":this.button.state="has-response",c&&location.reload(),o&&(this.intab?(this.urlRequest=o,this.$nextTick(()=>{this.simulateClick(this.$refs.tabAnchor)})):location.href=o),r&&(this.downloadRequest=r,this.$nextTick(()=>{this.simulateClick(this.$refs.downloadAnchor)})),l?this.clipboardRequest=l:setTimeout(this.resetButton,this.cooldown)},resetButton(){this.button.label=null,this.button.state=null},simulateClick(t){const e=new MouseEvent("click",{bubbles:!0,cancelable:!0,view:window});t.dispatchEvent(e)},async copyToClipboard(t){try{await navigator.clipboard.writeText(t)}catch{console.error("navigator.clipboard is not available")}}}},d={};var _=g(m,p,v,!1,w,null,null,null);function w(t){for(let e in d)this[e]=d[e]}var C=function(){return _.exports}();window.panel.plugin("bnomei/janitor",{fields:{janitor:C},icons:{janitorLoader:''}})})();})(); diff --git a/site/plugins/kirby3-janitor/index.php b/site/plugins/kirby3-janitor/index.php new file mode 100644 index 0000000..92c2359 --- /dev/null +++ b/site/plugins/kirby3-janitor/index.php @@ -0,0 +1,210 @@ + [ + 'jobs' => [], + 'jobs-defaults' => [ + 'clean' => 'Bnomei\\CleanCacheFilesJob', // legacy + 'cleanCache' => 'Bnomei\\CleanCacheFilesJob', + 'flush' => 'Bnomei\\FlushPagesCacheJob', // legacy + 'flushPages' => 'Bnomei\\FlushPagesCacheJob', + 'cleanSessions' => 'Bnomei\\CleanSessionsJob', + 'cleanContent' => 'Bnomei\\CleanContentJob', + 'flushSessions' => 'Bnomei\\FlushSessionFilesJob', + 'flushLapse' => 'Bnomei\\FlushLapseJob', + 'flushRedisDB' => 'Bnomei\\FlushRedisDBJob', + 'reindexAutoID' => 'Bnomei\\ReindexAutoIDJob', + 'reindexSearch' => 'Bnomei\\ReindexSearchForKirbyJob', + 'backupZip' => 'Bnomei\\BackupZipJob', + 'render' => 'Bnomei\\RenderJob', + 'thumbs' => 'Bnomei\\ThumbsJob', + ], + 'jobs-extends' => [ + 'bnomei.lapse.jobs', // https://github.com/bnomei/kirby3-lapse/blob/master/index.php#L10 + ], + + 'label.cooldown' => 2000, // ms + 'secret' => null, + + 'thumbsOnUpload' => false, + + 'renderSiteUrl' => function () { + $url = site()->url(); +// $url = 'https://www.example.com/'; + return php_sapi_name() === 'cli' ? $url : ''; + }, + + 'log.enabled' => false, + 'log.fn' => function (string $msg, string $level = 'info', array $context = []): bool { + if (option('bnomei.janitor.log.enabled')) { + if (function_exists('monolog')) { + monolog()->{$level}($msg, $context); + } elseif (function_exists('kirbyLog')) { + kirbyLog('bnomei.janitor.log')->log($msg, $level, $context); + } + return true; + } + return false; + }, + 'icon' => false, + ], + 'snippets' => [ + 'maintenance' => __DIR__ . '/snippets/maintenance.php', + ], + 'fields' => [ + 'janitor' => [ + 'props' => [ + 'label' => function ($label = null) { + return \Kirby\Toolkit\I18n::translate($label, $label); + }, + 'progress' => function ($progress = null) { + return \Kirby\Toolkit\I18n::translate($progress, $progress); + }, + 'job' => function (?string $job = null) { + return 'plugin-janitor/' . $job; + }, + 'cooldown' => function (int $cooldownMilliseconds = 2000) { + return intval(option('bnomei.janitor.label.cooldown', $cooldownMilliseconds)); + }, + 'data' => function (?string $data = null) { + $data = \Bnomei\Janitor::query($data, $this->model()); + return str_replace( + '/', + '+S_L_A_S_H+', + \Kirby\Toolkit\I18n::translate($data, $data) + ); + }, + 'clipboard' => function ($clipboard = null) { + return \Bnomei\Janitor::isTrue($clipboard); + }, + 'unsaved' => function ($allowUnsaved = true) { + return \Bnomei\Janitor::isTrue($allowUnsaved); + }, + 'autosave' => function ($doAutosave = false) { + return \Bnomei\Janitor::isTrue($doAutosave); + }, + 'intab' => function ($intab = false) { + return \Bnomei\Janitor::isTrue($intab); + }, + 'confirm' => function ($confirm = '') { + return $confirm; + }, + 'pageURI' => function () { + $uri = kirby()->site()->homePageId(); + if (is_a($this->model(), \Kirby\Cms\Page::class)) { + $uri = $this->model()->uri(); + } + if (is_a($this->model(), \Kirby\Cms\File::class)) { + $uri = $this->model()->parent()->uri(); + } + if (is_a($this->model(), \Kirby\Cms\User::class)) { + $uri = $this->model()->panelPath(); + } + if (is_a($this->model(), \Kirby\Cms\Site::class)) { + $uri = '$'; // any not empty string so route /$/DATA is used + } + return str_replace('/', '+', $uri); + }, + 'icon' => function ($icon = false) { + return $icon ?? option('bnomei.janitor.icon'); + }, + ], + ], + ], + 'routes' => [ + [ + 'pattern' => 'plugin-janitor/(:any)/(:any)', + 'action' => function (string $job, string $secret) { + $janitor = new \Bnomei\Janitor(); + $janitor->log('janitor-api-secret', 'debug'); + $response = $janitor->jobWithSecret($secret, $job); + return Kirby\Http\Response::json($response, A::get($response, 'status', 400)); + }, + ], + ], + 'hooks' => [ + 'file.create:after' => function ($file) { + if (option('bnomei.janitor.thumbsOnUpload') && $file->isResizable()) { + janitor('render', $file->page(), 'page'); + janitor('thumbs', $file->page(), 'page'); + } + }, + 'route:before' => function () { + $isPanel = strpos( + kirby()->request()->url()->toString(), + kirby()->urls()->panel() + ) !== false; + $isApi = strpos( + kirby()->request()->url()->toString(), + kirby()->urls()->api() + ) !== false; + if (!$isPanel && !$isApi) { + if (F::exists(kirby()->roots()->index() . '/down')) { + snippet('maintenance'); + die; + } + } + }, + ], + 'api' => [ + 'routes' => [ + [ + 'pattern' => 'plugin-janitor/(:any)/(:any)/(:any)', + 'action' => function (string $job, string $page, string $data) { + $janitor = \Bnomei\Janitor::singleton(); + $janitor->log('janitor-api-auth', 'debug'); + return $janitor->job($job, [ + 'contextPage' => $page, + 'contextData' => $data, + ]); + }, + ], + [ + 'pattern' => 'plugin-janitor/(:any)/(:any)', + 'action' => function (string $job, string $page) { + $janitor = \Bnomei\Janitor::singleton(); + $janitor->log('janitor-api-auth', 'debug'); + return $janitor->job($job, [ + 'contextPage' => $page, + ]); + }, + ], + [ + 'pattern' => 'plugin-janitor/(:any)', + 'action' => function (string $job) { + $janitor = \Bnomei\Janitor::singleton(); + $janitor->log('janitor-api-auth', 'debug'); + return $janitor->job($job); + } + ], + ], + ], +]); + +if (!class_exists('Bnomei\Janitor')) { + require_once __DIR__ . '/classes/Janitor.php'; +} + +if (!function_exists('janitor')) { + function janitor(string $job, ?\Kirby\Cms\Page $contextPage = null, ?string $contextData = null, bool $dump = false) + { + $janitor = \Bnomei\Janitor::singleton(); + $janitor->log('janitor()', 'debug'); + $response = $janitor->job($job, [ + 'contextPage' => $contextPage ? urlencode(str_replace('/', '+', $contextPage->uri())) : '', + 'contextData' => $contextData ? urlencode($contextData) : '', + ]); + if ($dump) { + return $response; + } + return intval(A::get($response, 'status')) === 200; + } +} diff --git a/site/plugins/kirby3-janitor/janitor b/site/plugins/kirby3-janitor/janitor new file mode 100755 index 0000000..738f3e2 --- /dev/null +++ b/site/plugins/kirby3-janitor/janitor @@ -0,0 +1,190 @@ +#!/usr/bin/env php +arguments->add([ + 'help' => [ + 'prefix' => 'h', + 'longPrefix' => 'help', + 'description' => 'Display the help', + 'noValue' => true, + ], + 'list' => [ + 'prefix' => 'l', + 'longPrefix' => 'list', + 'description' => 'List all registered jobs', + 'noValue' => true, + ], + 'format' => [ + 'prefix' => 'f', + 'longPrefix' => 'format', + 'description' => 'Format the output as "label", "table" or "json"', + 'defaultValue' => 'label', + ], + 'kirby' => [ + 'prefix' => 'k', + 'longPrefix' => 'kirby', + 'description' => 'Relative path to Kirbys public folder', + 'defaultValue' => '/', + ], + 'verbose' => [ + 'prefix' => 'v', + 'longPrefix' => 'verbose', + 'description' => 'Show debug info', + 'noValue' => true, + ], + 'job' => [ + 'description' => 'Run a job', + ], + 'quiet' => [ + 'prefix' => 'q', + 'longPrefix' => 'quiet', + 'description' => 'Run jobs silently', + 'noValue' => true, + ], + 'tinker' => [ + 'prefix' => 't', + 'longPrefix' => 'tinker', + 'description' => 'Run a REPL session', + 'noValue' => true, + ], + 'down' => [ + 'prefix' => 'd', + 'longPrefix' => 'down', + 'description' => 'Start maintenance mode', + 'noValue' => true, + ], + 'up' => [ + 'prefix' => 'u', + 'longPrefix' => 'up', + 'description' => 'Stop maintenance mode', + 'noValue' => true, + ], +]); +$climate->arguments->parse(); +$verbose = $climate->arguments->defined('verbose'); + +// COMMAND: kirby +$kirbyPublicFolder = null; +foreach([ // site/plugins/kirby3-janitor => /index.php + realpath(__DIR__ . '/../../../'), + // site/plugins/kirby3-janitor => /public/index.php + realpath(__DIR__ . '/../../../public'), + ] as $dir) { + if ($dir !== false && file_exists($dir . '/index.php')) { + $kirbyPublicFolder = $dir; + break; + } +} +if ($climate->arguments->defined('kirby')) { + $kirbyPublicFolder = realpath(__DIR__ . DIRECTORY_SEPARATOR . ltrim($climate->arguments->get('kirby'), DIRECTORY_SEPARATOR)); +} +if ($kirbyPublicFolder) { + $kirbyLoader = $kirbyPublicFolder . DIRECTORY_SEPARATOR . 'janitor-' . sha1(__DIR__) . '.php'; + if (! file_exists($kirbyLoader)) { + file_put_contents( + $kirbyLoader, + str_replace('echo ', '// echo ', + file_get_contents($kirbyPublicFolder . DIRECTORY_SEPARATOR . 'index.php') + ) + ); + if ($verbose) { + $climate->backgroundYellow()->out('ATTENTION! Janitor created this file to load the Kirby instance: ' . $kirbyLoader); + } + } + include $kirbyLoader; + if ($verbose) { + $climate->backgroundCyan()->out('Using Kirby instance from: ' . $kirbyLoader); + } +} + +\Bnomei\Janitor::climate($climate); +$janitor = new \Bnomei\Janitor(); + +// COMMAND: help +$command = $climate->arguments->defined('help'); +if ($command) { + $climate->usage(); +} + +// COMMAND: list +$command = $climate->arguments->defined('list'); +if ($command) { + foreach ($janitor->listJobs() as $key) { + $climate->out($key); + } +} + +// COMMAND: quiet +$command = $climate->arguments->get('quiet'); +if ($command) { + $climate->output->add('quiet', new \Bnomei\QuietWriter()); + $climate->output->defaultTo('quiet'); +} + +// COMMAND: tinker +$command = $climate->arguments->get('tinker'); +if ($command) { + while (true) eval($climate->input('>>> ')->prompt()); +} + +// COMMAND: down +$command = $climate->arguments->get('down'); +if ($command) { + file_put_contents(kirby()->roots()->index() . '/down', date('c')); +} + +// COMMAND: up +$command = $climate->arguments->get('up'); +if ($command) { + $down = kirby()->roots()->index() . '/down'; + if (file_exists($down)) { + unlink($down); + } +} + +// COMMAND: job +$job = $climate->arguments->get('job'); +if ($job) { + $format = $climate->arguments->get('format'); + if ($format === 'class') { + $janitor->job($job, [], $climate); + } elseif ($format === 'json') { + $climate->json($janitor->job($job)); + } elseif ($format === 'table') { + $table = []; + foreach ($janitor->job($job) as $key => $value) { + $table[] = [$key, $value]; + } + $climate->table($table); + } else { + $data = $janitor->job($job); + $status = $data['status']; + $label = array_key_exists('label', $data) ? $data['label'] : $status; + if ($status === 200) { + $climate->lightGreen($label); + } elseif ($status === 204) { + $climate->lightRed($label); + } elseif ($status === 404) { + $climate->backgroundRed($label); + } else { + $climate->out($label); + } + } +} diff --git a/site/plugins/kirby3-janitor/package-lock.json b/site/plugins/kirby3-janitor/package-lock.json new file mode 100644 index 0000000..46c1155 --- /dev/null +++ b/site/plugins/kirby3-janitor/package-lock.json @@ -0,0 +1,6789 @@ +{ + "name": "kirby3-janitor", + "version": "2.11.0", + "lockfileVersion": 2, + "requires": true, + "packages": { + "": { + "devDependencies": { + "eslint": "^8.0.1", + "eslint-config-prettier": "^8.3.0", + "eslint-plugin-vue": "^7.19.1", + "kirbyup": "^0.18.0" + } + }, + "node_modules/@babel/code-frame": { + "version": "7.15.8", + "resolved": "https://registry.npmjs.org/@babel/code-frame/-/code-frame-7.15.8.tgz", + "integrity": "sha512-2IAnmn8zbvC/jKYhq5Ki9I+DwjlrtMPUCH/CpHvqI4dNnlwHwsxoIhlc8WcYY5LSYknXQtAlFYuHfqAFCvQ4Wg==", + "dev": true, + "dependencies": { + "@babel/highlight": "^7.14.5" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/compat-data": { + "version": "7.15.0", + "resolved": "https://registry.npmjs.org/@babel/compat-data/-/compat-data-7.15.0.tgz", + "integrity": "sha512-0NqAC1IJE0S0+lL1SWFMxMkz1pKCNCjI4tr2Zx4LJSXxCLAdr6KyArnY+sno5m3yH9g737ygOyPABDsnXkpxiA==", + "dev": true, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/core": { + "version": "7.15.8", + "resolved": "https://registry.npmjs.org/@babel/core/-/core-7.15.8.tgz", + "integrity": "sha512-3UG9dsxvYBMYwRv+gS41WKHno4K60/9GPy1CJaH6xy3Elq8CTtvtjT5R5jmNhXfCYLX2mTw+7/aq5ak/gOE0og==", + "dev": true, + "dependencies": { + "@babel/code-frame": "^7.15.8", + "@babel/generator": "^7.15.8", + "@babel/helper-compilation-targets": "^7.15.4", + "@babel/helper-module-transforms": "^7.15.8", + "@babel/helpers": "^7.15.4", + "@babel/parser": "^7.15.8", + "@babel/template": "^7.15.4", + "@babel/traverse": "^7.15.4", + "@babel/types": "^7.15.6", + "convert-source-map": "^1.7.0", + "debug": "^4.1.0", + "gensync": "^1.0.0-beta.2", + "json5": "^2.1.2", + "semver": "^6.3.0", + "source-map": "^0.5.0" + }, + "engines": { + "node": ">=6.9.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/babel" + } + }, + "node_modules/@babel/core/node_modules/semver": { + "version": "6.3.0", + "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.0.tgz", + "integrity": "sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw==", + "dev": true, + "bin": { + "semver": "bin/semver.js" + } + }, + "node_modules/@babel/core/node_modules/source-map": { + "version": "0.5.7", + "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.5.7.tgz", + "integrity": "sha1-igOdLRAh0i0eoUyA2OpGi6LvP8w=", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/@babel/generator": { + "version": "7.15.8", + "resolved": "https://registry.npmjs.org/@babel/generator/-/generator-7.15.8.tgz", + "integrity": "sha512-ECmAKstXbp1cvpTTZciZCgfOt6iN64lR0d+euv3UZisU5awfRawOvg07Utn/qBGuH4bRIEZKrA/4LzZyXhZr8g==", + "dev": true, + "dependencies": { + "@babel/types": "^7.15.6", + "jsesc": "^2.5.1", + "source-map": "^0.5.0" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/generator/node_modules/source-map": { + "version": "0.5.7", + "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.5.7.tgz", + "integrity": "sha1-igOdLRAh0i0eoUyA2OpGi6LvP8w=", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/@babel/helper-annotate-as-pure": { + "version": "7.15.4", + "resolved": "https://registry.npmjs.org/@babel/helper-annotate-as-pure/-/helper-annotate-as-pure-7.15.4.tgz", + "integrity": "sha512-QwrtdNvUNsPCj2lfNQacsGSQvGX8ee1ttrBrcozUP2Sv/jylewBP/8QFe6ZkBsC8T/GYWonNAWJV4aRR9AL2DA==", + "dev": true, + "dependencies": { + "@babel/types": "^7.15.4" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helper-compilation-targets": { + "version": "7.15.4", + "resolved": "https://registry.npmjs.org/@babel/helper-compilation-targets/-/helper-compilation-targets-7.15.4.tgz", + "integrity": "sha512-rMWPCirulnPSe4d+gwdWXLfAXTTBj8M3guAf5xFQJ0nvFY7tfNAFnWdqaHegHlgDZOCT4qvhF3BYlSJag8yhqQ==", + "dev": true, + "dependencies": { + "@babel/compat-data": "^7.15.0", + "@babel/helper-validator-option": "^7.14.5", + "browserslist": "^4.16.6", + "semver": "^6.3.0" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0" + } + }, + "node_modules/@babel/helper-compilation-targets/node_modules/semver": { + "version": "6.3.0", + "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.0.tgz", + "integrity": "sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw==", + "dev": true, + "bin": { + "semver": "bin/semver.js" + } + }, + "node_modules/@babel/helper-create-class-features-plugin": { + "version": "7.15.4", + "resolved": "https://registry.npmjs.org/@babel/helper-create-class-features-plugin/-/helper-create-class-features-plugin-7.15.4.tgz", + "integrity": "sha512-7ZmzFi+DwJx6A7mHRwbuucEYpyBwmh2Ca0RvI6z2+WLZYCqV0JOaLb+u0zbtmDicebgKBZgqbYfLaKNqSgv5Pw==", + "dev": true, + "dependencies": { + "@babel/helper-annotate-as-pure": "^7.15.4", + "@babel/helper-function-name": "^7.15.4", + "@babel/helper-member-expression-to-functions": "^7.15.4", + "@babel/helper-optimise-call-expression": "^7.15.4", + "@babel/helper-replace-supers": "^7.15.4", + "@babel/helper-split-export-declaration": "^7.15.4" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0" + } + }, + "node_modules/@babel/helper-function-name": { + "version": "7.15.4", + "resolved": "https://registry.npmjs.org/@babel/helper-function-name/-/helper-function-name-7.15.4.tgz", + "integrity": "sha512-Z91cOMM4DseLIGOnog+Z8OI6YseR9bua+HpvLAQ2XayUGU+neTtX+97caALaLdyu53I/fjhbeCnWnRH1O3jFOw==", + "dev": true, + "dependencies": { + "@babel/helper-get-function-arity": "^7.15.4", + "@babel/template": "^7.15.4", + "@babel/types": "^7.15.4" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helper-get-function-arity": { + "version": "7.15.4", + "resolved": "https://registry.npmjs.org/@babel/helper-get-function-arity/-/helper-get-function-arity-7.15.4.tgz", + "integrity": "sha512-1/AlxSF92CmGZzHnC515hm4SirTxtpDnLEJ0UyEMgTMZN+6bxXKg04dKhiRx5Enel+SUA1G1t5Ed/yQia0efrA==", + "dev": true, + "dependencies": { + "@babel/types": "^7.15.4" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helper-hoist-variables": { + "version": "7.15.4", + "resolved": "https://registry.npmjs.org/@babel/helper-hoist-variables/-/helper-hoist-variables-7.15.4.tgz", + "integrity": "sha512-VTy085egb3jUGVK9ycIxQiPbquesq0HUQ+tPO0uv5mPEBZipk+5FkRKiWq5apuyTE9FUrjENB0rCf8y+n+UuhA==", + "dev": true, + "dependencies": { + "@babel/types": "^7.15.4" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helper-member-expression-to-functions": { + "version": "7.15.4", + "resolved": "https://registry.npmjs.org/@babel/helper-member-expression-to-functions/-/helper-member-expression-to-functions-7.15.4.tgz", + "integrity": "sha512-cokOMkxC/BTyNP1AlY25HuBWM32iCEsLPI4BHDpJCHHm1FU2E7dKWWIXJgQgSFiu4lp8q3bL1BIKwqkSUviqtA==", + "dev": true, + "dependencies": { + "@babel/types": "^7.15.4" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helper-module-imports": { + "version": "7.15.4", + "resolved": "https://registry.npmjs.org/@babel/helper-module-imports/-/helper-module-imports-7.15.4.tgz", + "integrity": "sha512-jeAHZbzUwdW/xHgHQ3QmWR4Jg6j15q4w/gCfwZvtqOxoo5DKtLHk8Bsf4c5RZRC7NmLEs+ohkdq8jFefuvIxAA==", + "dev": true, + "dependencies": { + "@babel/types": "^7.15.4" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helper-module-transforms": { + "version": "7.15.8", + "resolved": "https://registry.npmjs.org/@babel/helper-module-transforms/-/helper-module-transforms-7.15.8.tgz", + "integrity": "sha512-DfAfA6PfpG8t4S6npwzLvTUpp0sS7JrcuaMiy1Y5645laRJIp/LiLGIBbQKaXSInK8tiGNI7FL7L8UvB8gdUZg==", + "dev": true, + "dependencies": { + "@babel/helper-module-imports": "^7.15.4", + "@babel/helper-replace-supers": "^7.15.4", + "@babel/helper-simple-access": "^7.15.4", + "@babel/helper-split-export-declaration": "^7.15.4", + "@babel/helper-validator-identifier": "^7.15.7", + "@babel/template": "^7.15.4", + "@babel/traverse": "^7.15.4", + "@babel/types": "^7.15.6" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helper-optimise-call-expression": { + "version": "7.15.4", + "resolved": "https://registry.npmjs.org/@babel/helper-optimise-call-expression/-/helper-optimise-call-expression-7.15.4.tgz", + "integrity": "sha512-E/z9rfbAOt1vDW1DR7k4SzhzotVV5+qMciWV6LaG1g4jeFrkDlJedjtV4h0i4Q/ITnUu+Pk08M7fczsB9GXBDw==", + "dev": true, + "dependencies": { + "@babel/types": "^7.15.4" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helper-plugin-utils": { + "version": "7.14.5", + "resolved": "https://registry.npmjs.org/@babel/helper-plugin-utils/-/helper-plugin-utils-7.14.5.tgz", + "integrity": "sha512-/37qQCE3K0vvZKwoK4XU/irIJQdIfCJuhU5eKnNxpFDsOkgFaUAwbv+RYw6eYgsC0E4hS7r5KqGULUogqui0fQ==", + "dev": true, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helper-replace-supers": { + "version": "7.15.4", + "resolved": "https://registry.npmjs.org/@babel/helper-replace-supers/-/helper-replace-supers-7.15.4.tgz", + "integrity": "sha512-/ztT6khaXF37MS47fufrKvIsiQkx1LBRvSJNzRqmbyeZnTwU9qBxXYLaaT/6KaxfKhjs2Wy8kG8ZdsFUuWBjzw==", + "dev": true, + "dependencies": { + "@babel/helper-member-expression-to-functions": "^7.15.4", + "@babel/helper-optimise-call-expression": "^7.15.4", + "@babel/traverse": "^7.15.4", + "@babel/types": "^7.15.4" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helper-simple-access": { + "version": "7.15.4", + "resolved": "https://registry.npmjs.org/@babel/helper-simple-access/-/helper-simple-access-7.15.4.tgz", + "integrity": "sha512-UzazrDoIVOZZcTeHHEPYrr1MvTR/K+wgLg6MY6e1CJyaRhbibftF6fR2KU2sFRtI/nERUZR9fBd6aKgBlIBaPg==", + "dev": true, + "dependencies": { + "@babel/types": "^7.15.4" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helper-split-export-declaration": { + "version": "7.15.4", + "resolved": "https://registry.npmjs.org/@babel/helper-split-export-declaration/-/helper-split-export-declaration-7.15.4.tgz", + "integrity": "sha512-HsFqhLDZ08DxCpBdEVtKmywj6PQbwnF6HHybur0MAnkAKnlS6uHkwnmRIkElB2Owpfb4xL4NwDmDLFubueDXsw==", + "dev": true, + "dependencies": { + "@babel/types": "^7.15.4" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helper-validator-identifier": { + "version": "7.15.7", + "resolved": "https://registry.npmjs.org/@babel/helper-validator-identifier/-/helper-validator-identifier-7.15.7.tgz", + "integrity": "sha512-K4JvCtQqad9OY2+yTU8w+E82ywk/fe+ELNlt1G8z3bVGlZfn/hOcQQsUhGhW/N+tb3fxK800wLtKOE/aM0m72w==", + "dev": true, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helper-validator-option": { + "version": "7.14.5", + "resolved": "https://registry.npmjs.org/@babel/helper-validator-option/-/helper-validator-option-7.14.5.tgz", + "integrity": "sha512-OX8D5eeX4XwcroVW45NMvoYaIuFI+GQpA2a8Gi+X/U/cDUIRsV37qQfF905F0htTRCREQIB4KqPeaveRJUl3Ow==", + "dev": true, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helpers": { + "version": "7.15.4", + "resolved": "https://registry.npmjs.org/@babel/helpers/-/helpers-7.15.4.tgz", + "integrity": "sha512-V45u6dqEJ3w2rlryYYXf6i9rQ5YMNu4FLS6ngs8ikblhu2VdR1AqAd6aJjBzmf2Qzh6KOLqKHxEN9+TFbAkAVQ==", + "dev": true, + "dependencies": { + "@babel/template": "^7.15.4", + "@babel/traverse": "^7.15.4", + "@babel/types": "^7.15.4" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/highlight": { + "version": "7.14.5", + "resolved": "https://registry.npmjs.org/@babel/highlight/-/highlight-7.14.5.tgz", + "integrity": "sha512-qf9u2WFWVV0MppaL877j2dBtQIDgmidgjGk5VIMw3OadXvYaXn66U1BFlH2t4+t3i+8PhedppRv+i40ABzd+gg==", + "dev": true, + "dependencies": { + "@babel/helper-validator-identifier": "^7.14.5", + "chalk": "^2.0.0", + "js-tokens": "^4.0.0" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/highlight/node_modules/ansi-styles": { + "version": "3.2.1", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-3.2.1.tgz", + "integrity": "sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==", + "dev": true, + "dependencies": { + "color-convert": "^1.9.0" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/@babel/highlight/node_modules/chalk": { + "version": "2.4.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.2.tgz", + "integrity": "sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==", + "dev": true, + "dependencies": { + "ansi-styles": "^3.2.1", + "escape-string-regexp": "^1.0.5", + "supports-color": "^5.3.0" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/@babel/highlight/node_modules/color-convert": { + "version": "1.9.3", + "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-1.9.3.tgz", + "integrity": "sha512-QfAUtd+vFdAtFQcC8CCyYt1fYWxSqAiK2cSD6zDB8N3cpsEBAvRxp9zOGg6G/SHHJYAT88/az/IuDGALsNVbGg==", + "dev": true, + "dependencies": { + "color-name": "1.1.3" + } + }, + "node_modules/@babel/highlight/node_modules/color-name": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.3.tgz", + "integrity": "sha1-p9BVi9icQveV3UIyj3QIMcpTvCU=", + "dev": true + }, + "node_modules/@babel/highlight/node_modules/escape-string-regexp": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz", + "integrity": "sha1-G2HAViGQqN/2rjuyzwIAyhMLhtQ=", + "dev": true, + "engines": { + "node": ">=0.8.0" + } + }, + "node_modules/@babel/highlight/node_modules/has-flag": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-3.0.0.tgz", + "integrity": "sha1-tdRU3CGZriJWmfNGfloH87lVuv0=", + "dev": true, + "engines": { + "node": ">=4" + } + }, + "node_modules/@babel/highlight/node_modules/supports-color": { + "version": "5.5.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.5.0.tgz", + "integrity": "sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==", + "dev": true, + "dependencies": { + "has-flag": "^3.0.0" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/@babel/parser": { + "version": "7.15.8", + "resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.15.8.tgz", + "integrity": "sha512-BRYa3wcQnjS/nqI8Ac94pYYpJfojHVvVXJ97+IDCImX4Jc8W8Xv1+47enbruk+q1etOpsQNwnfFcNGw+gtPGxA==", + "dev": true, + "bin": { + "parser": "bin/babel-parser.js" + }, + "engines": { + "node": ">=6.0.0" + } + }, + "node_modules/@babel/plugin-proposal-class-properties": { + "version": "7.14.5", + "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-class-properties/-/plugin-proposal-class-properties-7.14.5.tgz", + "integrity": "sha512-q/PLpv5Ko4dVc1LYMpCY7RVAAO4uk55qPwrIuJ5QJ8c6cVuAmhu7I/49JOppXL6gXf7ZHzpRVEUZdYoPLM04Gg==", + "dev": true, + "dependencies": { + "@babel/helper-create-class-features-plugin": "^7.14.5", + "@babel/helper-plugin-utils": "^7.14.5" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-proposal-decorators": { + "version": "7.15.8", + "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-decorators/-/plugin-proposal-decorators-7.15.8.tgz", + "integrity": "sha512-5n8+xGK7YDrXF+WAORg3P7LlCCdiaAyKLZi22eP2BwTy4kJ0kFUMMDCj4nQ8YrKyNZgjhU/9eRVqONnjB3us8g==", + "dev": true, + "dependencies": { + "@babel/helper-create-class-features-plugin": "^7.15.4", + "@babel/helper-plugin-utils": "^7.14.5", + "@babel/plugin-syntax-decorators": "^7.14.5" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-syntax-decorators": { + "version": "7.14.5", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-decorators/-/plugin-syntax-decorators-7.14.5.tgz", + "integrity": "sha512-c4sZMRWL4GSvP1EXy0woIP7m4jkVcEuG8R1TOZxPBPtp4FSM/kiPZub9UIs/Jrb5ZAOzvTUSGYrWsrSu1JvoPw==", + "dev": true, + "dependencies": { + "@babel/helper-plugin-utils": "^7.14.5" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-syntax-jsx": { + "version": "7.14.5", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-jsx/-/plugin-syntax-jsx-7.14.5.tgz", + "integrity": "sha512-ohuFIsOMXJnbOMRfX7/w7LocdR6R7whhuRD4ax8IipLcLPlZGJKkBxgHp++U4N/vKyU16/YDQr2f5seajD3jIw==", + "dev": true, + "dependencies": { + "@babel/helper-plugin-utils": "^7.14.5" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-syntax-typescript": { + "version": "7.14.5", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-typescript/-/plugin-syntax-typescript-7.14.5.tgz", + "integrity": "sha512-u6OXzDaIXjEstBRRoBCQ/uKQKlbuaeE5in0RvWdA4pN6AhqxTIwUsnHPU1CFZA/amYObMsuWhYfRl3Ch90HD0Q==", + "dev": true, + "dependencies": { + "@babel/helper-plugin-utils": "^7.14.5" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-typescript": { + "version": "7.15.8", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-typescript/-/plugin-transform-typescript-7.15.8.tgz", + "integrity": "sha512-ZXIkJpbaf6/EsmjeTbiJN/yMxWPFWvlr7sEG1P95Xb4S4IBcrf2n7s/fItIhsAmOf8oSh3VJPDppO6ExfAfKRQ==", + "dev": true, + "dependencies": { + "@babel/helper-create-class-features-plugin": "^7.15.4", + "@babel/helper-plugin-utils": "^7.14.5", + "@babel/plugin-syntax-typescript": "^7.14.5" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/template": { + "version": "7.15.4", + "resolved": "https://registry.npmjs.org/@babel/template/-/template-7.15.4.tgz", + "integrity": "sha512-UgBAfEa1oGuYgDIPM2G+aHa4Nlo9Lh6mGD2bDBGMTbYnc38vulXPuC1MGjYILIEmlwl6Rd+BPR9ee3gm20CBtg==", + "dev": true, + "dependencies": { + "@babel/code-frame": "^7.14.5", + "@babel/parser": "^7.15.4", + "@babel/types": "^7.15.4" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/traverse": { + "version": "7.15.4", + "resolved": "https://registry.npmjs.org/@babel/traverse/-/traverse-7.15.4.tgz", + "integrity": "sha512-W6lQD8l4rUbQR/vYgSuCAE75ADyyQvOpFVsvPPdkhf6lATXAsQIG9YdtOcu8BB1dZ0LKu+Zo3c1wEcbKeuhdlA==", + "dev": true, + "dependencies": { + "@babel/code-frame": "^7.14.5", + "@babel/generator": "^7.15.4", + "@babel/helper-function-name": "^7.15.4", + "@babel/helper-hoist-variables": "^7.15.4", + "@babel/helper-split-export-declaration": "^7.15.4", + "@babel/parser": "^7.15.4", + "@babel/types": "^7.15.4", + "debug": "^4.1.0", + "globals": "^11.1.0" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/traverse/node_modules/globals": { + "version": "11.12.0", + "resolved": "https://registry.npmjs.org/globals/-/globals-11.12.0.tgz", + "integrity": "sha512-WOBp/EEGUiIsJSp7wcv/y6MO+lV9UoncWqxuFfm8eBwzWNgyfBd6Gz+IeKQ9jCmyhoH99g15M3T+QaVHFjizVA==", + "dev": true, + "engines": { + "node": ">=4" + } + }, + "node_modules/@babel/types": { + "version": "7.15.6", + "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.15.6.tgz", + "integrity": "sha512-BPU+7QhqNjmWyDO0/vitH/CuhpV8ZmK1wpKva8nuyNF5MJfuRNWMc+hc14+u9xT93kvykMdncrJT19h74uB1Ig==", + "dev": true, + "dependencies": { + "@babel/helper-validator-identifier": "^7.14.9", + "to-fast-properties": "^2.0.0" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@eslint/eslintrc": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/@eslint/eslintrc/-/eslintrc-1.0.3.tgz", + "integrity": "sha512-DHI1wDPoKCBPoLZA3qDR91+3te/wDSc1YhKg3jR8NxKKRJq2hwHwcWv31cSwSYvIBrmbENoYMWcenW8uproQqg==", + "dev": true, + "dependencies": { + "ajv": "^6.12.4", + "debug": "^4.3.2", + "espree": "^9.0.0", + "globals": "^13.9.0", + "ignore": "^4.0.6", + "import-fresh": "^3.2.1", + "js-yaml": "^3.13.1", + "minimatch": "^3.0.4", + "strip-json-comments": "^3.1.1" + }, + "engines": { + "node": "^12.22.0 || ^14.17.0 || >=16.0.0" + } + }, + "node_modules/@eslint/eslintrc/node_modules/argparse": { + "version": "1.0.10", + "resolved": "https://registry.npmjs.org/argparse/-/argparse-1.0.10.tgz", + "integrity": "sha512-o5Roy6tNG4SL/FOkCAN6RzjiakZS25RLYFrcMttJqbdd8BWrnA+fGz57iN5Pb06pvBGvl5gQ0B48dJlslXvoTg==", + "dev": true, + "dependencies": { + "sprintf-js": "~1.0.2" + } + }, + "node_modules/@eslint/eslintrc/node_modules/js-yaml": { + "version": "3.14.1", + "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-3.14.1.tgz", + "integrity": "sha512-okMH7OXXJ7YrN9Ok3/SXrnu4iX9yOk+25nqX4imS2npuvTYDmo/QEZoqwZkYaIDk3jVvBOTOIEgEhaLOynBS9g==", + "dev": true, + "dependencies": { + "argparse": "^1.0.7", + "esprima": "^4.0.0" + }, + "bin": { + "js-yaml": "bin/js-yaml.js" + } + }, + "node_modules/@humanwhocodes/config-array": { + "version": "0.6.0", + "resolved": "https://registry.npmjs.org/@humanwhocodes/config-array/-/config-array-0.6.0.tgz", + "integrity": "sha512-JQlEKbcgEUjBFhLIF4iqM7u/9lwgHRBcpHrmUNCALK0Q3amXN6lxdoXLnF0sm11E9VqTmBALR87IlUg1bZ8A9A==", + "dev": true, + "dependencies": { + "@humanwhocodes/object-schema": "^1.2.0", + "debug": "^4.1.1", + "minimatch": "^3.0.4" + }, + "engines": { + "node": ">=10.10.0" + } + }, + "node_modules/@humanwhocodes/object-schema": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/@humanwhocodes/object-schema/-/object-schema-1.2.0.tgz", + "integrity": "sha512-wdppn25U8z/2yiaT6YGquE6X8sSv7hNMWSXYSSU1jGv/yd6XqjXgTDJ8KP4NgjTXfJ3GbRjeeb8RTV7a/VpM+w==", + "dev": true + }, + "node_modules/@rollup/pluginutils": { + "version": "4.1.1", + "resolved": "https://registry.npmjs.org/@rollup/pluginutils/-/pluginutils-4.1.1.tgz", + "integrity": "sha512-clDjivHqWGXi7u+0d2r2sBi4Ie6VLEAzWMIkvJLnDmxoOhBYOTfzGbOQBA32THHm11/LiJbd01tJUpJsbshSWQ==", + "dev": true, + "dependencies": { + "estree-walker": "^2.0.1", + "picomatch": "^2.2.2" + }, + "engines": { + "node": ">= 8.0.0" + } + }, + "node_modules/@vue/babel-helper-vue-jsx-merge-props": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/@vue/babel-helper-vue-jsx-merge-props/-/babel-helper-vue-jsx-merge-props-1.2.1.tgz", + "integrity": "sha512-QOi5OW45e2R20VygMSNhyQHvpdUwQZqGPc748JLGCYEy+yp8fNFNdbNIGAgZmi9e+2JHPd6i6idRuqivyicIkA==", + "dev": true + }, + "node_modules/@vue/babel-plugin-transform-vue-jsx": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/@vue/babel-plugin-transform-vue-jsx/-/babel-plugin-transform-vue-jsx-1.2.1.tgz", + "integrity": "sha512-HJuqwACYehQwh1fNT8f4kyzqlNMpBuUK4rSiSES5D4QsYncv5fxFsLyrxFPG2ksO7t5WP+Vgix6tt6yKClwPzA==", + "dev": true, + "dependencies": { + "@babel/helper-module-imports": "^7.0.0", + "@babel/plugin-syntax-jsx": "^7.2.0", + "@vue/babel-helper-vue-jsx-merge-props": "^1.2.1", + "html-tags": "^2.0.0", + "lodash.kebabcase": "^4.1.1", + "svg-tags": "^1.0.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@vue/babel-preset-jsx": { + "version": "1.2.4", + "resolved": "https://registry.npmjs.org/@vue/babel-preset-jsx/-/babel-preset-jsx-1.2.4.tgz", + "integrity": "sha512-oRVnmN2a77bYDJzeGSt92AuHXbkIxbf/XXSE3klINnh9AXBmVS1DGa1f0d+dDYpLfsAKElMnqKTQfKn7obcL4w==", + "dev": true, + "dependencies": { + "@vue/babel-helper-vue-jsx-merge-props": "^1.2.1", + "@vue/babel-plugin-transform-vue-jsx": "^1.2.1", + "@vue/babel-sugar-composition-api-inject-h": "^1.2.1", + "@vue/babel-sugar-composition-api-render-instance": "^1.2.4", + "@vue/babel-sugar-functional-vue": "^1.2.2", + "@vue/babel-sugar-inject-h": "^1.2.2", + "@vue/babel-sugar-v-model": "^1.2.3", + "@vue/babel-sugar-v-on": "^1.2.3" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@vue/babel-sugar-composition-api-inject-h": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/@vue/babel-sugar-composition-api-inject-h/-/babel-sugar-composition-api-inject-h-1.2.1.tgz", + "integrity": "sha512-4B3L5Z2G+7s+9Bwbf+zPIifkFNcKth7fQwekVbnOA3cr3Pq71q71goWr97sk4/yyzH8phfe5ODVzEjX7HU7ItQ==", + "dev": true, + "dependencies": { + "@babel/plugin-syntax-jsx": "^7.2.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@vue/babel-sugar-composition-api-render-instance": { + "version": "1.2.4", + "resolved": "https://registry.npmjs.org/@vue/babel-sugar-composition-api-render-instance/-/babel-sugar-composition-api-render-instance-1.2.4.tgz", + "integrity": "sha512-joha4PZznQMsxQYXtR3MnTgCASC9u3zt9KfBxIeuI5g2gscpTsSKRDzWQt4aqNIpx6cv8On7/m6zmmovlNsG7Q==", + "dev": true, + "dependencies": { + "@babel/plugin-syntax-jsx": "^7.2.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@vue/babel-sugar-functional-vue": { + "version": "1.2.2", + "resolved": "https://registry.npmjs.org/@vue/babel-sugar-functional-vue/-/babel-sugar-functional-vue-1.2.2.tgz", + "integrity": "sha512-JvbgGn1bjCLByIAU1VOoepHQ1vFsroSA/QkzdiSs657V79q6OwEWLCQtQnEXD/rLTA8rRit4rMOhFpbjRFm82w==", + "dev": true, + "dependencies": { + "@babel/plugin-syntax-jsx": "^7.2.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@vue/babel-sugar-inject-h": { + "version": "1.2.2", + "resolved": "https://registry.npmjs.org/@vue/babel-sugar-inject-h/-/babel-sugar-inject-h-1.2.2.tgz", + "integrity": "sha512-y8vTo00oRkzQTgufeotjCLPAvlhnpSkcHFEp60+LJUwygGcd5Chrpn5480AQp/thrxVm8m2ifAk0LyFel9oCnw==", + "dev": true, + "dependencies": { + "@babel/plugin-syntax-jsx": "^7.2.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@vue/babel-sugar-v-model": { + "version": "1.2.3", + "resolved": "https://registry.npmjs.org/@vue/babel-sugar-v-model/-/babel-sugar-v-model-1.2.3.tgz", + "integrity": "sha512-A2jxx87mySr/ulAsSSyYE8un6SIH0NWHiLaCWpodPCVOlQVODCaSpiR4+IMsmBr73haG+oeCuSvMOM+ttWUqRQ==", + "dev": true, + "dependencies": { + "@babel/plugin-syntax-jsx": "^7.2.0", + "@vue/babel-helper-vue-jsx-merge-props": "^1.2.1", + "@vue/babel-plugin-transform-vue-jsx": "^1.2.1", + "camelcase": "^5.0.0", + "html-tags": "^2.0.0", + "svg-tags": "^1.0.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@vue/babel-sugar-v-on": { + "version": "1.2.3", + "resolved": "https://registry.npmjs.org/@vue/babel-sugar-v-on/-/babel-sugar-v-on-1.2.3.tgz", + "integrity": "sha512-kt12VJdz/37D3N3eglBywV8GStKNUhNrsxChXIV+o0MwVXORYuhDTHJRKPgLJRb/EY3vM2aRFQdxJBp9CLikjw==", + "dev": true, + "dependencies": { + "@babel/plugin-syntax-jsx": "^7.2.0", + "@vue/babel-plugin-transform-vue-jsx": "^1.2.1", + "camelcase": "^5.0.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@vue/component-compiler-utils": { + "version": "3.2.2", + "resolved": "https://registry.npmjs.org/@vue/component-compiler-utils/-/component-compiler-utils-3.2.2.tgz", + "integrity": "sha512-rAYMLmgMuqJFWAOb3Awjqqv5X3Q3hVr4jH/kgrFJpiU0j3a90tnNBplqbj+snzrgZhC9W128z+dtgMifOiMfJg==", + "dev": true, + "dependencies": { + "consolidate": "^0.15.1", + "hash-sum": "^1.0.2", + "lru-cache": "^4.1.2", + "merge-source-map": "^1.1.0", + "postcss": "^7.0.36", + "postcss-selector-parser": "^6.0.2", + "source-map": "~0.6.1", + "vue-template-es2015-compiler": "^1.9.0" + }, + "optionalDependencies": { + "prettier": "^1.18.2" + } + }, + "node_modules/@vue/component-compiler-utils/node_modules/consolidate": { + "version": "0.15.1", + "resolved": "https://registry.npmjs.org/consolidate/-/consolidate-0.15.1.tgz", + "integrity": "sha512-DW46nrsMJgy9kqAbPt5rKaCr7uFtpo4mSUvLHIUbJEjm0vo+aY5QLwBUq3FK4tRnJr/X0Psc0C4jf/h+HtXSMw==", + "dev": true, + "dependencies": { + "bluebird": "^3.1.1" + }, + "engines": { + "node": ">= 0.10.0" + } + }, + "node_modules/@vue/component-compiler-utils/node_modules/hash-sum": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/hash-sum/-/hash-sum-1.0.2.tgz", + "integrity": "sha1-M7QHd3VMZDJXPBIMw4CLvRDUfwQ=", + "dev": true + }, + "node_modules/@vue/component-compiler-utils/node_modules/lru-cache": { + "version": "4.1.5", + "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-4.1.5.tgz", + "integrity": "sha512-sWZlbEP2OsHNkXrMl5GYk/jKk70MBng6UU4YI/qGDYbgf6YbP4EvmqISbXCoJiRKs+1bSpFHVgQxvJ17F2li5g==", + "dev": true, + "dependencies": { + "pseudomap": "^1.0.2", + "yallist": "^2.1.2" + } + }, + "node_modules/@vue/component-compiler-utils/node_modules/postcss": { + "version": "7.0.39", + "resolved": "https://registry.npmjs.org/postcss/-/postcss-7.0.39.tgz", + "integrity": "sha512-yioayjNbHn6z1/Bywyb2Y4s3yvDAeXGOyxqD+LnVOinq6Mdmd++SW2wUNVzavyyHxd6+DxzWGIuosg6P1Rj8uA==", + "dev": true, + "dependencies": { + "picocolors": "^0.2.1", + "source-map": "^0.6.1" + }, + "engines": { + "node": ">=6.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/postcss/" + } + }, + "node_modules/@vue/component-compiler-utils/node_modules/prettier": { + "version": "1.19.1", + "resolved": "https://registry.npmjs.org/prettier/-/prettier-1.19.1.tgz", + "integrity": "sha512-s7PoyDv/II1ObgQunCbB9PdLmUcBZcnWOcxDh7O0N/UwDEsHyqkW+Qh28jW+mVuCdx7gLB0BotYI1Y6uI9iyew==", + "dev": true, + "optional": true, + "bin": { + "prettier": "bin-prettier.js" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/@vue/component-compiler-utils/node_modules/source-map": { + "version": "0.6.1", + "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", + "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/@vue/component-compiler-utils/node_modules/yallist": { + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/yallist/-/yallist-2.1.2.tgz", + "integrity": "sha1-HBH5IY8HYImkfdUS+TxmmaaoHVI=", + "dev": true + }, + "node_modules/acorn": { + "version": "8.5.0", + "resolved": "https://registry.npmjs.org/acorn/-/acorn-8.5.0.tgz", + "integrity": "sha512-yXbYeFy+jUuYd3/CDcg2NkIYE991XYX/bje7LmjJigUciaeO1JR4XxXgCIV1/Zc/dRuFEyw1L0pbA+qynJkW5Q==", + "dev": true, + "bin": { + "acorn": "bin/acorn" + }, + "engines": { + "node": ">=0.4.0" + } + }, + "node_modules/acorn-jsx": { + "version": "5.3.2", + "resolved": "https://registry.npmjs.org/acorn-jsx/-/acorn-jsx-5.3.2.tgz", + "integrity": "sha512-rq9s+JNhf0IChjtDXxllJ7g41oZk5SlXtp0LHwyA5cejwn7vKmKp4pPri6YEePv2PU65sAsegbXtIinmDFDXgQ==", + "dev": true, + "peerDependencies": { + "acorn": "^6.0.0 || ^7.0.0 || ^8.0.0" + } + }, + "node_modules/ajv": { + "version": "6.12.6", + "resolved": "https://registry.npmjs.org/ajv/-/ajv-6.12.6.tgz", + "integrity": "sha512-j3fVLgvTo527anyYyJOGTYJbG+vnnQYvE0m5mmkc1TK+nxAppkCLMIL0aZ4dblVCNoGShhm+kzE4ZUykBoMg4g==", + "dev": true, + "dependencies": { + "fast-deep-equal": "^3.1.1", + "fast-json-stable-stringify": "^2.0.0", + "json-schema-traverse": "^0.4.1", + "uri-js": "^4.2.2" + }, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/epoberezkin" + } + }, + "node_modules/ansi-colors": { + "version": "4.1.1", + "resolved": "https://registry.npmjs.org/ansi-colors/-/ansi-colors-4.1.1.tgz", + "integrity": "sha512-JoX0apGbHaUJBNl6yF+p6JAFYZ666/hhCGKN5t9QFjbJQKUU/g8MNbFDbvfrgKXvI1QpZplPOnwIo99lX/AAmA==", + "dev": true, + "engines": { + "node": ">=6" + } + }, + "node_modules/ansi-regex": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.1.tgz", + "integrity": "sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==", + "dev": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/ansi-styles": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", + "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", + "dev": true, + "dependencies": { + "color-convert": "^2.0.1" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/chalk/ansi-styles?sponsor=1" + } + }, + "node_modules/anymatch": { + "version": "3.1.2", + "resolved": "https://registry.npmjs.org/anymatch/-/anymatch-3.1.2.tgz", + "integrity": "sha512-P43ePfOAIupkguHUycrc4qJ9kz8ZiuOUijaETwX7THt0Y/GNK7v0aa8rY816xWjZ7rJdA5XdMcpVFTKMq+RvWg==", + "dev": true, + "dependencies": { + "normalize-path": "^3.0.0", + "picomatch": "^2.0.4" + }, + "engines": { + "node": ">= 8" + } + }, + "node_modules/argparse": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/argparse/-/argparse-2.0.1.tgz", + "integrity": "sha512-8+9WqebbFzpX9OR+Wa6O29asIogeRMzcGtAINdpMHHyAg10f05aSFVBbcEqGf/PXw1EjAZ+q2/bEBg3DvurK3Q==", + "dev": true + }, + "node_modules/at-least-node": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/at-least-node/-/at-least-node-1.0.0.tgz", + "integrity": "sha512-+q/t7Ekv1EDY2l6Gda6LLiX14rU9TV20Wa3ofeQmwPFZbOMo9DXrLbOjFaaclkXKWidIaopwAObQDqwWtGUjqg==", + "dev": true, + "engines": { + "node": ">= 4.0.0" + } + }, + "node_modules/babel-code-frame": { + "version": "6.26.0", + "resolved": "https://registry.npmjs.org/babel-code-frame/-/babel-code-frame-6.26.0.tgz", + "integrity": "sha1-Y/1D99weO7fONZR9uP42mj9Yx0s=", + "dev": true, + "dependencies": { + "chalk": "^1.1.3", + "esutils": "^2.0.2", + "js-tokens": "^3.0.2" + } + }, + "node_modules/babel-code-frame/node_modules/ansi-regex": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-2.1.1.tgz", + "integrity": "sha1-w7M6te42DYbg5ijwRorn7yfWVN8=", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/babel-code-frame/node_modules/ansi-styles": { + "version": "2.2.1", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-2.2.1.tgz", + "integrity": "sha1-tDLdM1i2NM914eRmQ2gkBTPB3b4=", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/babel-code-frame/node_modules/chalk": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-1.1.3.tgz", + "integrity": "sha1-qBFcVeSnAv5NFQq9OHKCKn4J/Jg=", + "dev": true, + "dependencies": { + "ansi-styles": "^2.2.1", + "escape-string-regexp": "^1.0.2", + "has-ansi": "^2.0.0", + "strip-ansi": "^3.0.0", + "supports-color": "^2.0.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/babel-code-frame/node_modules/escape-string-regexp": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz", + "integrity": "sha1-G2HAViGQqN/2rjuyzwIAyhMLhtQ=", + "dev": true, + "engines": { + "node": ">=0.8.0" + } + }, + "node_modules/babel-code-frame/node_modules/js-tokens": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/js-tokens/-/js-tokens-3.0.2.tgz", + "integrity": "sha1-mGbfOVECEw449/mWvOtlRDIJwls=", + "dev": true + }, + "node_modules/babel-code-frame/node_modules/strip-ansi": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-3.0.1.tgz", + "integrity": "sha1-ajhfuIU9lS1f8F0Oiq+UJ43GPc8=", + "dev": true, + "dependencies": { + "ansi-regex": "^2.0.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/babel-code-frame/node_modules/supports-color": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-2.0.0.tgz", + "integrity": "sha1-U10EXOa2Nj+kARcIRimZXp3zJMc=", + "dev": true, + "engines": { + "node": ">=0.8.0" + } + }, + "node_modules/babel-helper-builder-binary-assignment-operator-visitor": { + "version": "6.24.1", + "resolved": "https://registry.npmjs.org/babel-helper-builder-binary-assignment-operator-visitor/-/babel-helper-builder-binary-assignment-operator-visitor-6.24.1.tgz", + "integrity": "sha1-zORReto1b0IgvK6KAsKzRvmlZmQ=", + "dev": true, + "dependencies": { + "babel-helper-explode-assignable-expression": "^6.24.1", + "babel-runtime": "^6.22.0", + "babel-types": "^6.24.1" + } + }, + "node_modules/babel-helper-call-delegate": { + "version": "6.24.1", + "resolved": "https://registry.npmjs.org/babel-helper-call-delegate/-/babel-helper-call-delegate-6.24.1.tgz", + "integrity": "sha1-7Oaqzdx25Bw0YfiL/Fdb0Nqi340=", + "dev": true, + "dependencies": { + "babel-helper-hoist-variables": "^6.24.1", + "babel-runtime": "^6.22.0", + "babel-traverse": "^6.24.1", + "babel-types": "^6.24.1" + } + }, + "node_modules/babel-helper-define-map": { + "version": "6.26.0", + "resolved": "https://registry.npmjs.org/babel-helper-define-map/-/babel-helper-define-map-6.26.0.tgz", + "integrity": "sha1-pfVtq0GiX5fstJjH66ypgZ+Vvl8=", + "dev": true, + "dependencies": { + "babel-helper-function-name": "^6.24.1", + "babel-runtime": "^6.26.0", + "babel-types": "^6.26.0", + "lodash": "^4.17.4" + } + }, + "node_modules/babel-helper-explode-assignable-expression": { + "version": "6.24.1", + "resolved": "https://registry.npmjs.org/babel-helper-explode-assignable-expression/-/babel-helper-explode-assignable-expression-6.24.1.tgz", + "integrity": "sha1-8luCz33BBDPFX3BZLVdGQArCLKo=", + "dev": true, + "dependencies": { + "babel-runtime": "^6.22.0", + "babel-traverse": "^6.24.1", + "babel-types": "^6.24.1" + } + }, + "node_modules/babel-helper-function-name": { + "version": "6.24.1", + "resolved": "https://registry.npmjs.org/babel-helper-function-name/-/babel-helper-function-name-6.24.1.tgz", + "integrity": "sha1-00dbjAPtmCQqJbSDUasYOZ01gKk=", + "dev": true, + "dependencies": { + "babel-helper-get-function-arity": "^6.24.1", + "babel-runtime": "^6.22.0", + "babel-template": "^6.24.1", + "babel-traverse": "^6.24.1", + "babel-types": "^6.24.1" + } + }, + "node_modules/babel-helper-get-function-arity": { + "version": "6.24.1", + "resolved": "https://registry.npmjs.org/babel-helper-get-function-arity/-/babel-helper-get-function-arity-6.24.1.tgz", + "integrity": "sha1-j3eCqpNAfEHTqlCQj4mwMbG2hT0=", + "dev": true, + "dependencies": { + "babel-runtime": "^6.22.0", + "babel-types": "^6.24.1" + } + }, + "node_modules/babel-helper-hoist-variables": { + "version": "6.24.1", + "resolved": "https://registry.npmjs.org/babel-helper-hoist-variables/-/babel-helper-hoist-variables-6.24.1.tgz", + "integrity": "sha1-HssnaJydJVE+rbyZFKc/VAi+enY=", + "dev": true, + "dependencies": { + "babel-runtime": "^6.22.0", + "babel-types": "^6.24.1" + } + }, + "node_modules/babel-helper-optimise-call-expression": { + "version": "6.24.1", + "resolved": "https://registry.npmjs.org/babel-helper-optimise-call-expression/-/babel-helper-optimise-call-expression-6.24.1.tgz", + "integrity": "sha1-96E0J7qfc/j0+pk8VKl4gtEkQlc=", + "dev": true, + "dependencies": { + "babel-runtime": "^6.22.0", + "babel-types": "^6.24.1" + } + }, + "node_modules/babel-helper-regex": { + "version": "6.26.0", + "resolved": "https://registry.npmjs.org/babel-helper-regex/-/babel-helper-regex-6.26.0.tgz", + "integrity": "sha1-MlxZ+QL4LyS3T6zu0DY5VPZJXnI=", + "dev": true, + "dependencies": { + "babel-runtime": "^6.26.0", + "babel-types": "^6.26.0", + "lodash": "^4.17.4" + } + }, + "node_modules/babel-helper-remap-async-to-generator": { + "version": "6.24.1", + "resolved": "https://registry.npmjs.org/babel-helper-remap-async-to-generator/-/babel-helper-remap-async-to-generator-6.24.1.tgz", + "integrity": "sha1-XsWBgnrXI/7N04HxySg5BnbkVRs=", + "dev": true, + "dependencies": { + "babel-helper-function-name": "^6.24.1", + "babel-runtime": "^6.22.0", + "babel-template": "^6.24.1", + "babel-traverse": "^6.24.1", + "babel-types": "^6.24.1" + } + }, + "node_modules/babel-helper-replace-supers": { + "version": "6.24.1", + "resolved": "https://registry.npmjs.org/babel-helper-replace-supers/-/babel-helper-replace-supers-6.24.1.tgz", + "integrity": "sha1-v22/5Dk40XNpohPKiov3S2qQqxo=", + "dev": true, + "dependencies": { + "babel-helper-optimise-call-expression": "^6.24.1", + "babel-messages": "^6.23.0", + "babel-runtime": "^6.22.0", + "babel-template": "^6.24.1", + "babel-traverse": "^6.24.1", + "babel-types": "^6.24.1" + } + }, + "node_modules/babel-messages": { + "version": "6.23.0", + "resolved": "https://registry.npmjs.org/babel-messages/-/babel-messages-6.23.0.tgz", + "integrity": "sha1-8830cDhYA1sqKVHG7F7fbGLyYw4=", + "dev": true, + "dependencies": { + "babel-runtime": "^6.22.0" + } + }, + "node_modules/babel-plugin-check-es2015-constants": { + "version": "6.22.0", + "resolved": "https://registry.npmjs.org/babel-plugin-check-es2015-constants/-/babel-plugin-check-es2015-constants-6.22.0.tgz", + "integrity": "sha1-NRV7EBQm/S/9PaP3XH0ekYNbv4o=", + "dev": true, + "dependencies": { + "babel-runtime": "^6.22.0" + } + }, + "node_modules/babel-plugin-syntax-async-functions": { + "version": "6.13.0", + "resolved": "https://registry.npmjs.org/babel-plugin-syntax-async-functions/-/babel-plugin-syntax-async-functions-6.13.0.tgz", + "integrity": "sha1-ytnK0RkbWtY0vzCuCHI5HgZHvpU=", + "dev": true + }, + "node_modules/babel-plugin-syntax-exponentiation-operator": { + "version": "6.13.0", + "resolved": "https://registry.npmjs.org/babel-plugin-syntax-exponentiation-operator/-/babel-plugin-syntax-exponentiation-operator-6.13.0.tgz", + "integrity": "sha1-nufoM3KQ2pUoggGmpX9BcDF4MN4=", + "dev": true + }, + "node_modules/babel-plugin-syntax-trailing-function-commas": { + "version": "6.22.0", + "resolved": "https://registry.npmjs.org/babel-plugin-syntax-trailing-function-commas/-/babel-plugin-syntax-trailing-function-commas-6.22.0.tgz", + "integrity": "sha1-ugNgk3+NBuQBgKQ/4NVhb/9TLPM=", + "dev": true + }, + "node_modules/babel-plugin-transform-async-to-generator": { + "version": "6.24.1", + "resolved": "https://registry.npmjs.org/babel-plugin-transform-async-to-generator/-/babel-plugin-transform-async-to-generator-6.24.1.tgz", + "integrity": "sha1-ZTbjeK/2yx1VF6wOQOs+n8jQh2E=", + "dev": true, + "dependencies": { + "babel-helper-remap-async-to-generator": "^6.24.1", + "babel-plugin-syntax-async-functions": "^6.8.0", + "babel-runtime": "^6.22.0" + } + }, + "node_modules/babel-plugin-transform-es2015-arrow-functions": { + "version": "6.22.0", + "resolved": "https://registry.npmjs.org/babel-plugin-transform-es2015-arrow-functions/-/babel-plugin-transform-es2015-arrow-functions-6.22.0.tgz", + "integrity": "sha1-RSaSy3EdX3ncf4XkQM5BufJE0iE=", + "dev": true, + "dependencies": { + "babel-runtime": "^6.22.0" + } + }, + "node_modules/babel-plugin-transform-es2015-block-scoped-functions": { + "version": "6.22.0", + "resolved": "https://registry.npmjs.org/babel-plugin-transform-es2015-block-scoped-functions/-/babel-plugin-transform-es2015-block-scoped-functions-6.22.0.tgz", + "integrity": "sha1-u8UbSflk1wy42OC5ToICRs46YUE=", + "dev": true, + "dependencies": { + "babel-runtime": "^6.22.0" + } + }, + "node_modules/babel-plugin-transform-es2015-block-scoping": { + "version": "6.26.0", + "resolved": "https://registry.npmjs.org/babel-plugin-transform-es2015-block-scoping/-/babel-plugin-transform-es2015-block-scoping-6.26.0.tgz", + "integrity": "sha1-1w9SmcEwjQXBL0Y4E7CgnnOxiV8=", + "dev": true, + "dependencies": { + "babel-runtime": "^6.26.0", + "babel-template": "^6.26.0", + "babel-traverse": "^6.26.0", + "babel-types": "^6.26.0", + "lodash": "^4.17.4" + } + }, + "node_modules/babel-plugin-transform-es2015-classes": { + "version": "6.24.1", + "resolved": "https://registry.npmjs.org/babel-plugin-transform-es2015-classes/-/babel-plugin-transform-es2015-classes-6.24.1.tgz", + "integrity": "sha1-WkxYpQyclGHlZLSyo7+ryXolhNs=", + "dev": true, + "dependencies": { + "babel-helper-define-map": "^6.24.1", + "babel-helper-function-name": "^6.24.1", + "babel-helper-optimise-call-expression": "^6.24.1", + "babel-helper-replace-supers": "^6.24.1", + "babel-messages": "^6.23.0", + "babel-runtime": "^6.22.0", + "babel-template": "^6.24.1", + "babel-traverse": "^6.24.1", + "babel-types": "^6.24.1" + } + }, + "node_modules/babel-plugin-transform-es2015-computed-properties": { + "version": "6.24.1", + "resolved": "https://registry.npmjs.org/babel-plugin-transform-es2015-computed-properties/-/babel-plugin-transform-es2015-computed-properties-6.24.1.tgz", + "integrity": "sha1-b+Ko0WiV1WNPTNmZttNICjCBWbM=", + "dev": true, + "dependencies": { + "babel-runtime": "^6.22.0", + "babel-template": "^6.24.1" + } + }, + "node_modules/babel-plugin-transform-es2015-destructuring": { + "version": "6.23.0", + "resolved": "https://registry.npmjs.org/babel-plugin-transform-es2015-destructuring/-/babel-plugin-transform-es2015-destructuring-6.23.0.tgz", + "integrity": "sha1-mXux8auWf2gtKwh2/jWNYOdlxW0=", + "dev": true, + "dependencies": { + "babel-runtime": "^6.22.0" + } + }, + "node_modules/babel-plugin-transform-es2015-duplicate-keys": { + "version": "6.24.1", + "resolved": "https://registry.npmjs.org/babel-plugin-transform-es2015-duplicate-keys/-/babel-plugin-transform-es2015-duplicate-keys-6.24.1.tgz", + "integrity": "sha1-c+s9MQypaePvnskcU3QabxV2Qj4=", + "dev": true, + "dependencies": { + "babel-runtime": "^6.22.0", + "babel-types": "^6.24.1" + } + }, + "node_modules/babel-plugin-transform-es2015-for-of": { + "version": "6.23.0", + "resolved": "https://registry.npmjs.org/babel-plugin-transform-es2015-for-of/-/babel-plugin-transform-es2015-for-of-6.23.0.tgz", + "integrity": "sha1-9HyVsrYT3x0+zC/bdXNiPHUkhpE=", + "dev": true, + "dependencies": { + "babel-runtime": "^6.22.0" + } + }, + "node_modules/babel-plugin-transform-es2015-function-name": { + "version": "6.24.1", + "resolved": "https://registry.npmjs.org/babel-plugin-transform-es2015-function-name/-/babel-plugin-transform-es2015-function-name-6.24.1.tgz", + "integrity": "sha1-g0yJhTvDaxrw86TF26qU/Y6sqos=", + "dev": true, + "dependencies": { + "babel-helper-function-name": "^6.24.1", + "babel-runtime": "^6.22.0", + "babel-types": "^6.24.1" + } + }, + "node_modules/babel-plugin-transform-es2015-literals": { + "version": "6.22.0", + "resolved": "https://registry.npmjs.org/babel-plugin-transform-es2015-literals/-/babel-plugin-transform-es2015-literals-6.22.0.tgz", + "integrity": "sha1-T1SgLWzWbPkVKAAZox0xklN3yi4=", + "dev": true, + "dependencies": { + "babel-runtime": "^6.22.0" + } + }, + "node_modules/babel-plugin-transform-es2015-modules-amd": { + "version": "6.24.1", + "resolved": "https://registry.npmjs.org/babel-plugin-transform-es2015-modules-amd/-/babel-plugin-transform-es2015-modules-amd-6.24.1.tgz", + "integrity": "sha1-Oz5UAXI5hC1tGcMBHEvS8AoA0VQ=", + "dev": true, + "dependencies": { + "babel-plugin-transform-es2015-modules-commonjs": "^6.24.1", + "babel-runtime": "^6.22.0", + "babel-template": "^6.24.1" + } + }, + "node_modules/babel-plugin-transform-es2015-modules-commonjs": { + "version": "6.26.2", + "resolved": "https://registry.npmjs.org/babel-plugin-transform-es2015-modules-commonjs/-/babel-plugin-transform-es2015-modules-commonjs-6.26.2.tgz", + "integrity": "sha512-CV9ROOHEdrjcwhIaJNBGMBCodN+1cfkwtM1SbUHmvyy35KGT7fohbpOxkE2uLz1o6odKK2Ck/tz47z+VqQfi9Q==", + "dev": true, + "dependencies": { + "babel-plugin-transform-strict-mode": "^6.24.1", + "babel-runtime": "^6.26.0", + "babel-template": "^6.26.0", + "babel-types": "^6.26.0" + } + }, + "node_modules/babel-plugin-transform-es2015-modules-systemjs": { + "version": "6.24.1", + "resolved": "https://registry.npmjs.org/babel-plugin-transform-es2015-modules-systemjs/-/babel-plugin-transform-es2015-modules-systemjs-6.24.1.tgz", + "integrity": "sha1-/4mhQrkRmpBhlfXxBuzzBdlAfSM=", + "dev": true, + "dependencies": { + "babel-helper-hoist-variables": "^6.24.1", + "babel-runtime": "^6.22.0", + "babel-template": "^6.24.1" + } + }, + "node_modules/babel-plugin-transform-es2015-modules-umd": { + "version": "6.24.1", + "resolved": "https://registry.npmjs.org/babel-plugin-transform-es2015-modules-umd/-/babel-plugin-transform-es2015-modules-umd-6.24.1.tgz", + "integrity": "sha1-rJl+YoXNGO1hdq22B9YCNErThGg=", + "dev": true, + "dependencies": { + "babel-plugin-transform-es2015-modules-amd": "^6.24.1", + "babel-runtime": "^6.22.0", + "babel-template": "^6.24.1" + } + }, + "node_modules/babel-plugin-transform-es2015-object-super": { + "version": "6.24.1", + "resolved": "https://registry.npmjs.org/babel-plugin-transform-es2015-object-super/-/babel-plugin-transform-es2015-object-super-6.24.1.tgz", + "integrity": "sha1-JM72muIcuDp/hgPa0CH1cusnj40=", + "dev": true, + "dependencies": { + "babel-helper-replace-supers": "^6.24.1", + "babel-runtime": "^6.22.0" + } + }, + "node_modules/babel-plugin-transform-es2015-parameters": { + "version": "6.24.1", + "resolved": "https://registry.npmjs.org/babel-plugin-transform-es2015-parameters/-/babel-plugin-transform-es2015-parameters-6.24.1.tgz", + "integrity": "sha1-V6w1GrScrxSpfNE7CfZv3wpiXys=", + "dev": true, + "dependencies": { + "babel-helper-call-delegate": "^6.24.1", + "babel-helper-get-function-arity": "^6.24.1", + "babel-runtime": "^6.22.0", + "babel-template": "^6.24.1", + "babel-traverse": "^6.24.1", + "babel-types": "^6.24.1" + } + }, + "node_modules/babel-plugin-transform-es2015-shorthand-properties": { + "version": "6.24.1", + "resolved": "https://registry.npmjs.org/babel-plugin-transform-es2015-shorthand-properties/-/babel-plugin-transform-es2015-shorthand-properties-6.24.1.tgz", + "integrity": "sha1-JPh11nIch2YbvZmkYi5R8U3jiqA=", + "dev": true, + "dependencies": { + "babel-runtime": "^6.22.0", + "babel-types": "^6.24.1" + } + }, + "node_modules/babel-plugin-transform-es2015-spread": { + "version": "6.22.0", + "resolved": "https://registry.npmjs.org/babel-plugin-transform-es2015-spread/-/babel-plugin-transform-es2015-spread-6.22.0.tgz", + "integrity": "sha1-1taKmfia7cRTbIGlQujdnxdG+NE=", + "dev": true, + "dependencies": { + "babel-runtime": "^6.22.0" + } + }, + "node_modules/babel-plugin-transform-es2015-sticky-regex": { + "version": "6.24.1", + "resolved": "https://registry.npmjs.org/babel-plugin-transform-es2015-sticky-regex/-/babel-plugin-transform-es2015-sticky-regex-6.24.1.tgz", + "integrity": "sha1-AMHNsaynERLN8M9hJsLta0V8zbw=", + "dev": true, + "dependencies": { + "babel-helper-regex": "^6.24.1", + "babel-runtime": "^6.22.0", + "babel-types": "^6.24.1" + } + }, + "node_modules/babel-plugin-transform-es2015-template-literals": { + "version": "6.22.0", + "resolved": "https://registry.npmjs.org/babel-plugin-transform-es2015-template-literals/-/babel-plugin-transform-es2015-template-literals-6.22.0.tgz", + "integrity": "sha1-qEs0UPfp+PH2g51taH2oS7EjbY0=", + "dev": true, + "dependencies": { + "babel-runtime": "^6.22.0" + } + }, + "node_modules/babel-plugin-transform-es2015-typeof-symbol": { + "version": "6.23.0", + "resolved": "https://registry.npmjs.org/babel-plugin-transform-es2015-typeof-symbol/-/babel-plugin-transform-es2015-typeof-symbol-6.23.0.tgz", + "integrity": "sha1-3sCfHN3/lLUqxz1QXITfWdzOs3I=", + "dev": true, + "dependencies": { + "babel-runtime": "^6.22.0" + } + }, + "node_modules/babel-plugin-transform-es2015-unicode-regex": { + "version": "6.24.1", + "resolved": "https://registry.npmjs.org/babel-plugin-transform-es2015-unicode-regex/-/babel-plugin-transform-es2015-unicode-regex-6.24.1.tgz", + "integrity": "sha1-04sS9C6nMj9yk4fxinxa4frrNek=", + "dev": true, + "dependencies": { + "babel-helper-regex": "^6.24.1", + "babel-runtime": "^6.22.0", + "regexpu-core": "^2.0.0" + } + }, + "node_modules/babel-plugin-transform-exponentiation-operator": { + "version": "6.24.1", + "resolved": "https://registry.npmjs.org/babel-plugin-transform-exponentiation-operator/-/babel-plugin-transform-exponentiation-operator-6.24.1.tgz", + "integrity": "sha1-KrDJx/MJj6SJB3cruBP+QejeOg4=", + "dev": true, + "dependencies": { + "babel-helper-builder-binary-assignment-operator-visitor": "^6.24.1", + "babel-plugin-syntax-exponentiation-operator": "^6.8.0", + "babel-runtime": "^6.22.0" + } + }, + "node_modules/babel-plugin-transform-regenerator": { + "version": "6.26.0", + "resolved": "https://registry.npmjs.org/babel-plugin-transform-regenerator/-/babel-plugin-transform-regenerator-6.26.0.tgz", + "integrity": "sha1-4HA2lvveJ/Cj78rPi03KL3s6jy8=", + "dev": true, + "dependencies": { + "regenerator-transform": "^0.10.0" + } + }, + "node_modules/babel-plugin-transform-strict-mode": { + "version": "6.24.1", + "resolved": "https://registry.npmjs.org/babel-plugin-transform-strict-mode/-/babel-plugin-transform-strict-mode-6.24.1.tgz", + "integrity": "sha1-1fr3qleKZbvlkc9e2uBKDGcCB1g=", + "dev": true, + "dependencies": { + "babel-runtime": "^6.22.0", + "babel-types": "^6.24.1" + } + }, + "node_modules/babel-preset-env": { + "version": "1.7.0", + "resolved": "https://registry.npmjs.org/babel-preset-env/-/babel-preset-env-1.7.0.tgz", + "integrity": "sha512-9OR2afuKDneX2/q2EurSftUYM0xGu4O2D9adAhVfADDhrYDaxXV0rBbevVYoY9n6nyX1PmQW/0jtpJvUNr9CHg==", + "dev": true, + "dependencies": { + "babel-plugin-check-es2015-constants": "^6.22.0", + "babel-plugin-syntax-trailing-function-commas": "^6.22.0", + "babel-plugin-transform-async-to-generator": "^6.22.0", + "babel-plugin-transform-es2015-arrow-functions": "^6.22.0", + "babel-plugin-transform-es2015-block-scoped-functions": "^6.22.0", + "babel-plugin-transform-es2015-block-scoping": "^6.23.0", + "babel-plugin-transform-es2015-classes": "^6.23.0", + "babel-plugin-transform-es2015-computed-properties": "^6.22.0", + "babel-plugin-transform-es2015-destructuring": "^6.23.0", + "babel-plugin-transform-es2015-duplicate-keys": "^6.22.0", + "babel-plugin-transform-es2015-for-of": "^6.23.0", + "babel-plugin-transform-es2015-function-name": "^6.22.0", + "babel-plugin-transform-es2015-literals": "^6.22.0", + "babel-plugin-transform-es2015-modules-amd": "^6.22.0", + "babel-plugin-transform-es2015-modules-commonjs": "^6.23.0", + "babel-plugin-transform-es2015-modules-systemjs": "^6.23.0", + "babel-plugin-transform-es2015-modules-umd": "^6.23.0", + "babel-plugin-transform-es2015-object-super": "^6.22.0", + "babel-plugin-transform-es2015-parameters": "^6.23.0", + "babel-plugin-transform-es2015-shorthand-properties": "^6.22.0", + "babel-plugin-transform-es2015-spread": "^6.22.0", + "babel-plugin-transform-es2015-sticky-regex": "^6.22.0", + "babel-plugin-transform-es2015-template-literals": "^6.22.0", + "babel-plugin-transform-es2015-typeof-symbol": "^6.23.0", + "babel-plugin-transform-es2015-unicode-regex": "^6.22.0", + "babel-plugin-transform-exponentiation-operator": "^6.22.0", + "babel-plugin-transform-regenerator": "^6.22.0", + "browserslist": "^3.2.6", + "invariant": "^2.2.2", + "semver": "^5.3.0" + } + }, + "node_modules/babel-preset-env/node_modules/browserslist": { + "version": "3.2.8", + "resolved": "https://registry.npmjs.org/browserslist/-/browserslist-3.2.8.tgz", + "integrity": "sha512-WHVocJYavUwVgVViC0ORikPHQquXwVh939TaelZ4WDqpWgTX/FsGhl/+P4qBUAGcRvtOgDgC+xftNWWp2RUTAQ==", + "dev": true, + "dependencies": { + "caniuse-lite": "^1.0.30000844", + "electron-to-chromium": "^1.3.47" + }, + "bin": { + "browserslist": "cli.js" + } + }, + "node_modules/babel-preset-env/node_modules/semver": { + "version": "5.7.1", + "resolved": "https://registry.npmjs.org/semver/-/semver-5.7.1.tgz", + "integrity": "sha512-sauaDf/PZdVgrLTNYHRtpXa1iRiKcaebiKQ1BJdpQlWH2lCvexQdX55snPFyK7QzpudqbCI0qXFfOasHdyNDGQ==", + "dev": true, + "bin": { + "semver": "bin/semver" + } + }, + "node_modules/babel-runtime": { + "version": "6.26.0", + "resolved": "https://registry.npmjs.org/babel-runtime/-/babel-runtime-6.26.0.tgz", + "integrity": "sha1-llxwWGaOgrVde/4E/yM3vItWR/4=", + "dev": true, + "dependencies": { + "core-js": "^2.4.0", + "regenerator-runtime": "^0.11.0" + } + }, + "node_modules/babel-template": { + "version": "6.26.0", + "resolved": "https://registry.npmjs.org/babel-template/-/babel-template-6.26.0.tgz", + "integrity": "sha1-3gPi0WOWsGn0bdn/+FIfsaDjXgI=", + "dev": true, + "dependencies": { + "babel-runtime": "^6.26.0", + "babel-traverse": "^6.26.0", + "babel-types": "^6.26.0", + "babylon": "^6.18.0", + "lodash": "^4.17.4" + } + }, + "node_modules/babel-traverse": { + "version": "6.26.0", + "resolved": "https://registry.npmjs.org/babel-traverse/-/babel-traverse-6.26.0.tgz", + "integrity": "sha1-RqnL1+3MYsjlwGTi0tjQ9ANXZu4=", + "dev": true, + "dependencies": { + "babel-code-frame": "^6.26.0", + "babel-messages": "^6.23.0", + "babel-runtime": "^6.26.0", + "babel-types": "^6.26.0", + "babylon": "^6.18.0", + "debug": "^2.6.8", + "globals": "^9.18.0", + "invariant": "^2.2.2", + "lodash": "^4.17.4" + } + }, + "node_modules/babel-traverse/node_modules/debug": { + "version": "2.6.9", + "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", + "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", + "dev": true, + "dependencies": { + "ms": "2.0.0" + } + }, + "node_modules/babel-traverse/node_modules/globals": { + "version": "9.18.0", + "resolved": "https://registry.npmjs.org/globals/-/globals-9.18.0.tgz", + "integrity": "sha512-S0nG3CLEQiY/ILxqtztTWH/3iRRdyBLw6KMDxnKMchrtbj2OFmehVh0WUCfW3DUrIgx/qFrJPICrq4Z4sTR9UQ==", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/babel-traverse/node_modules/ms": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", + "integrity": "sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g=", + "dev": true + }, + "node_modules/babel-types": { + "version": "6.26.0", + "resolved": "https://registry.npmjs.org/babel-types/-/babel-types-6.26.0.tgz", + "integrity": "sha1-o7Bz+Uq0nrb6Vc1lInozQ4BjJJc=", + "dev": true, + "dependencies": { + "babel-runtime": "^6.26.0", + "esutils": "^2.0.2", + "lodash": "^4.17.4", + "to-fast-properties": "^1.0.3" + } + }, + "node_modules/babel-types/node_modules/to-fast-properties": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/to-fast-properties/-/to-fast-properties-1.0.3.tgz", + "integrity": "sha1-uDVx+k2MJbguIxsG46MFXeTKGkc=", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/babylon": { + "version": "6.18.0", + "resolved": "https://registry.npmjs.org/babylon/-/babylon-6.18.0.tgz", + "integrity": "sha512-q/UEjfGJ2Cm3oKV71DJz9d25TPnq5rhBVL2Q4fA5wcC3jcrdn7+SssEybFIxwAvvP+YCsCYNKughoF33GxgycQ==", + "dev": true, + "bin": { + "babylon": "bin/babylon.js" + } + }, + "node_modules/balanced-match": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-1.0.2.tgz", + "integrity": "sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw==", + "dev": true + }, + "node_modules/binary-extensions": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/binary-extensions/-/binary-extensions-2.2.0.tgz", + "integrity": "sha512-jDctJ/IVQbZoJykoeHbhXpOlNBqGNcwXJKJog42E5HDPUwQTSdjCHdihjj0DlnheQ7blbT6dHOafNAiS8ooQKA==", + "dev": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/bluebird": { + "version": "3.7.2", + "resolved": "https://registry.npmjs.org/bluebird/-/bluebird-3.7.2.tgz", + "integrity": "sha512-XpNj6GDQzdfW+r2Wnn7xiSAd7TM3jzkxGXBGTtWKuSXv1xUV+azxAm8jdWZN06QTQk+2N2XB9jRDkvbmQmcRtg==", + "dev": true + }, + "node_modules/brace-expansion": { + "version": "1.1.11", + "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.11.tgz", + "integrity": "sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==", + "dev": true, + "dependencies": { + "balanced-match": "^1.0.0", + "concat-map": "0.0.1" + } + }, + "node_modules/braces": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/braces/-/braces-3.0.2.tgz", + "integrity": "sha512-b8um+L1RzM3WDSzvhm6gIz1yfTbBt6YTlcEKAvsmqCZZFw46z626lVj9j1yEPW33H5H+lBQpZMP1k8l+78Ha0A==", + "dev": true, + "dependencies": { + "fill-range": "^7.0.1" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/browserslist": { + "version": "4.17.4", + "resolved": "https://registry.npmjs.org/browserslist/-/browserslist-4.17.4.tgz", + "integrity": "sha512-Zg7RpbZpIJRW3am9Lyckue7PLytvVxxhJj1CaJVlCWENsGEAOlnlt8X0ZxGRPp7Bt9o8tIRM5SEXy4BCPMJjLQ==", + "dev": true, + "dependencies": { + "caniuse-lite": "^1.0.30001265", + "electron-to-chromium": "^1.3.867", + "escalade": "^3.1.1", + "node-releases": "^2.0.0", + "picocolors": "^1.0.0" + }, + "bin": { + "browserslist": "cli.js" + }, + "engines": { + "node": "^6 || ^7 || ^8 || ^9 || ^10 || ^11 || ^12 || >=13.7" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/browserslist" + } + }, + "node_modules/browserslist/node_modules/picocolors": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/picocolors/-/picocolors-1.0.0.tgz", + "integrity": "sha512-1fygroTLlHu66zi26VoTDv8yRgm0Fccecssto+MhsZ0D/DGW2sm8E8AjW7NU5VVTRt5GxbeZ5qBuJr+HyLYkjQ==", + "dev": true + }, + "node_modules/cac": { + "version": "6.7.11", + "resolved": "https://registry.npmjs.org/cac/-/cac-6.7.11.tgz", + "integrity": "sha512-m4xrA2MKfid6uDV2j2+0mXrtPGxlvAW0y+7Gnn2P8WVMSG+4e4tcoYX++94ZPblPfpBccJ5e7HvKdghlX5yiDA==", + "dev": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/callsites": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/callsites/-/callsites-3.1.0.tgz", + "integrity": "sha512-P8BjAsXvZS+VIDUI11hHCQEv74YT67YUi5JJFNWIqL235sBmjX4+qx9Muvls5ivyNENctx46xQLQ3aTuE7ssaQ==", + "dev": true, + "engines": { + "node": ">=6" + } + }, + "node_modules/camelcase": { + "version": "5.3.1", + "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-5.3.1.tgz", + "integrity": "sha512-L28STB170nwWS63UjtlEOE3dldQApaJXZkOI1uMFfzf3rRuPegHaHesyee+YxQ+W6SvRDQV6UrdOdRiR153wJg==", + "dev": true, + "engines": { + "node": ">=6" + } + }, + "node_modules/caniuse-lite": { + "version": "1.0.30001267", + "resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001267.tgz", + "integrity": "sha512-r1mjTzAuJ9W8cPBGbbus8E0SKcUP7gn03R14Wk8FlAlqhH9hroy9nLqmpuXlfKEw/oILW+FGz47ipXV2O7x8lg==", + "dev": true, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/browserslist" + } + }, + "node_modules/chalk": { + "version": "4.1.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", + "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", + "dev": true, + "dependencies": { + "ansi-styles": "^4.1.0", + "supports-color": "^7.1.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/chalk/chalk?sponsor=1" + } + }, + "node_modules/chokidar": { + "version": "3.5.2", + "resolved": "https://registry.npmjs.org/chokidar/-/chokidar-3.5.2.tgz", + "integrity": "sha512-ekGhOnNVPgT77r4K/U3GDhu+FQ2S8TnK/s2KbIGXi0SZWuwkZ2QNyfWdZW+TVfn84DpEP7rLeCt2UI6bJ8GwbQ==", + "dev": true, + "dependencies": { + "anymatch": "~3.1.2", + "braces": "~3.0.2", + "glob-parent": "~5.1.2", + "is-binary-path": "~2.1.0", + "is-glob": "~4.0.1", + "normalize-path": "~3.0.0", + "readdirp": "~3.6.0" + }, + "engines": { + "node": ">= 8.10.0" + }, + "optionalDependencies": { + "fsevents": "~2.3.2" + } + }, + "node_modules/chokidar/node_modules/glob-parent": { + "version": "5.1.2", + "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-5.1.2.tgz", + "integrity": "sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow==", + "dev": true, + "dependencies": { + "is-glob": "^4.0.1" + }, + "engines": { + "node": ">= 6" + } + }, + "node_modules/color-convert": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", + "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", + "dev": true, + "dependencies": { + "color-name": "~1.1.4" + }, + "engines": { + "node": ">=7.0.0" + } + }, + "node_modules/color-name": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", + "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", + "dev": true + }, + "node_modules/colorette": { + "version": "2.0.16", + "resolved": "https://registry.npmjs.org/colorette/-/colorette-2.0.16.tgz", + "integrity": "sha512-hUewv7oMjCp+wkBv5Rm0v87eJhq4woh5rSR+42YSQJKecCqgIqNkZ6lAlQms/BwHPJA5NKMRlpxPRv0n8HQW6g==", + "dev": true + }, + "node_modules/concat-map": { + "version": "0.0.1", + "resolved": "https://registry.npmjs.org/concat-map/-/concat-map-0.0.1.tgz", + "integrity": "sha1-2Klr13/Wjfd5OnMDajug1UBdR3s=", + "dev": true + }, + "node_modules/consolidate": { + "version": "0.16.0", + "resolved": "https://registry.npmjs.org/consolidate/-/consolidate-0.16.0.tgz", + "integrity": "sha512-Nhl1wzCslqXYTJVDyJCu3ODohy9OfBMB5uD2BiBTzd7w+QY0lBzafkR8y8755yMYHAaMD4NuzbAw03/xzfw+eQ==", + "dev": true, + "dependencies": { + "bluebird": "^3.7.2" + }, + "engines": { + "node": ">= 0.10.0" + } + }, + "node_modules/convert-source-map": { + "version": "1.8.0", + "resolved": "https://registry.npmjs.org/convert-source-map/-/convert-source-map-1.8.0.tgz", + "integrity": "sha512-+OQdjP49zViI/6i7nIJpA8rAl4sV/JdPfU9nZs3VqOwGIgizICvuN2ru6fMd+4llL0tar18UYJXfZ/TWtmhUjA==", + "dev": true, + "dependencies": { + "safe-buffer": "~5.1.1" + } + }, + "node_modules/core-js": { + "version": "2.6.12", + "resolved": "https://registry.npmjs.org/core-js/-/core-js-2.6.12.tgz", + "integrity": "sha512-Kb2wC0fvsWfQrgk8HU5lW6U/Lcs8+9aaYcy4ZFc6DDlo4nZ7n70dEgE5rtR0oG6ufKDUnrwfWL1mXR5ljDatrQ==", + "deprecated": "core-js@<3.3 is no longer maintained and not recommended for usage due to the number of issues. Because of the V8 engine whims, feature detection in old core-js versions could cause a slowdown up to 100x even if nothing is polyfilled. Please, upgrade your dependencies to the actual version of core-js.", + "dev": true, + "hasInstallScript": true + }, + "node_modules/cross-spawn": { + "version": "7.0.3", + "resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-7.0.3.tgz", + "integrity": "sha512-iRDPJKUPVEND7dHPO8rkbOnPpyDygcDFtWjpeWNCgy8WP2rXcxXL8TskReQl6OrB2G7+UJrags1q15Fudc7G6w==", + "dev": true, + "dependencies": { + "path-key": "^3.1.0", + "shebang-command": "^2.0.0", + "which": "^2.0.1" + }, + "engines": { + "node": ">= 8" + } + }, + "node_modules/cssesc": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/cssesc/-/cssesc-3.0.0.tgz", + "integrity": "sha512-/Tb/JcjK111nNScGob5MNtsntNM1aCNUDipB/TkwZFhyDrrE47SOx/18wF2bbjgc3ZzCSKW1T5nt5EbFoAz/Vg==", + "dev": true, + "bin": { + "cssesc": "bin/cssesc" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/de-indent": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/de-indent/-/de-indent-1.0.2.tgz", + "integrity": "sha1-sgOOhG3DO6pXlhKNCAS0VbjB4h0=", + "dev": true + }, + "node_modules/debug": { + "version": "4.3.2", + "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.2.tgz", + "integrity": "sha512-mOp8wKcvj7XxC78zLgw/ZA+6TSgkoE2C/ienthhRD298T7UNwAg9diBpLRxC0mOezLl4B0xV7M0cCO6P/O0Xhw==", + "dev": true, + "dependencies": { + "ms": "2.1.2" + }, + "engines": { + "node": ">=6.0" + }, + "peerDependenciesMeta": { + "supports-color": { + "optional": true + } + } + }, + "node_modules/deep-is": { + "version": "0.1.4", + "resolved": "https://registry.npmjs.org/deep-is/-/deep-is-0.1.4.tgz", + "integrity": "sha512-oIPzksmTg4/MriiaYGO+okXDT7ztn/w3Eptv/+gSIdMdKsJo0u4CfYNFJPy+4SKMuCqGw2wxnA+URMg3t8a/bQ==", + "dev": true + }, + "node_modules/doctrine": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/doctrine/-/doctrine-3.0.0.tgz", + "integrity": "sha512-yS+Q5i3hBf7GBkd4KG8a7eBNNWNGLTaEwwYWUijIYM7zrlYDM0BFXHjjPWlWZ1Rg7UaddZeIDmi9jF3HmqiQ2w==", + "dev": true, + "dependencies": { + "esutils": "^2.0.2" + }, + "engines": { + "node": ">=6.0.0" + } + }, + "node_modules/electron-to-chromium": { + "version": "1.3.870", + "resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.3.870.tgz", + "integrity": "sha512-PiJMshfq6PL+i1V+nKLwhHbCKeD8eAz8rvO9Cwk/7cChOHJBtufmjajLyYLsSRHguRFiOCVx3XzJLeZsIAYfSA==", + "dev": true + }, + "node_modules/enquirer": { + "version": "2.3.6", + "resolved": "https://registry.npmjs.org/enquirer/-/enquirer-2.3.6.tgz", + "integrity": "sha512-yjNnPr315/FjS4zIsUxYguYUPP2e1NK4d7E7ZOLiyYCcbFBiTMyID+2wvm2w6+pZ/odMA7cRkjhsPbltwBOrLg==", + "dev": true, + "dependencies": { + "ansi-colors": "^4.1.1" + }, + "engines": { + "node": ">=8.6" + } + }, + "node_modules/esbuild": { + "version": "0.13.6", + "resolved": "https://registry.npmjs.org/esbuild/-/esbuild-0.13.6.tgz", + "integrity": "sha512-zkMkYwC9ohVe6qxXykKf/4jfbtM/09CL8UEEnwuhO7Xq8NOTN2yAwCrmKKvHlGrEej6Y8e/tAmHB7wMMg7O0ew==", + "dev": true, + "hasInstallScript": true, + "bin": { + "esbuild": "bin/esbuild" + }, + "optionalDependencies": { + "esbuild-android-arm64": "0.13.6", + "esbuild-darwin-64": "0.13.6", + "esbuild-darwin-arm64": "0.13.6", + "esbuild-freebsd-64": "0.13.6", + "esbuild-freebsd-arm64": "0.13.6", + "esbuild-linux-32": "0.13.6", + "esbuild-linux-64": "0.13.6", + "esbuild-linux-arm": "0.13.6", + "esbuild-linux-arm64": "0.13.6", + "esbuild-linux-mips64le": "0.13.6", + "esbuild-linux-ppc64le": "0.13.6", + "esbuild-netbsd-64": "0.13.6", + "esbuild-openbsd-64": "0.13.6", + "esbuild-sunos-64": "0.13.6", + "esbuild-windows-32": "0.13.6", + "esbuild-windows-64": "0.13.6", + "esbuild-windows-arm64": "0.13.6" + } + }, + "node_modules/esbuild-android-arm64": { + "version": "0.13.6", + "resolved": "https://registry.npmjs.org/esbuild-android-arm64/-/esbuild-android-arm64-0.13.6.tgz", + "integrity": "sha512-uEwrMRzqNzXxzIi0K/CtHn3/SPoRso4Dd/aJCpf9KuX+kCs9Tlhz29cKbZieznYAekdo36fDUrZyuugAwSdI+A==", + "cpu": [ + "arm64" + ], + "dev": true, + "optional": true, + "os": [ + "android" + ] + }, + "node_modules/esbuild-darwin-64": { + "version": "0.13.6", + "resolved": "https://registry.npmjs.org/esbuild-darwin-64/-/esbuild-darwin-64-0.13.6.tgz", + "integrity": "sha512-oJdWZn2QV5LTM24/vVWaUFlMVlRhpG9zZIA6Xd+xbCULOURwYnYRQWIzRpXNtTfuAr3+em9PqKUaGtYqvO/DYg==", + "cpu": [ + "x64" + ], + "dev": true, + "optional": true, + "os": [ + "darwin" + ] + }, + "node_modules/esbuild-darwin-arm64": { + "version": "0.13.6", + "resolved": "https://registry.npmjs.org/esbuild-darwin-arm64/-/esbuild-darwin-arm64-0.13.6.tgz", + "integrity": "sha512-+f8Yn5doTEpCWtBaGxciDTikxESdGCNZpLYtXzMJLTWFHr8zqfAf4TAYGvg6T5T6N7OMC8HHy3GM+BijFXDXMg==", + "cpu": [ + "arm64" + ], + "dev": true, + "optional": true, + "os": [ + "darwin" + ] + }, + "node_modules/esbuild-freebsd-64": { + "version": "0.13.6", + "resolved": "https://registry.npmjs.org/esbuild-freebsd-64/-/esbuild-freebsd-64-0.13.6.tgz", + "integrity": "sha512-Yb/DgZUX0C6i4vnOymthLzoWAJBYWbn3Y2F4wKEufsx2veGN/wlwO/yz7IWGVVzb2zMUqbt30hCLF61sUFe7gA==", + "cpu": [ + "x64" + ], + "dev": true, + "optional": true, + "os": [ + "freebsd" + ] + }, + "node_modules/esbuild-freebsd-arm64": { + "version": "0.13.6", + "resolved": "https://registry.npmjs.org/esbuild-freebsd-arm64/-/esbuild-freebsd-arm64-0.13.6.tgz", + "integrity": "sha512-UKYlEb7mwprSJ9VW9+q3/Mgxest45I6rGMB/hrKY1T6lqoBVhWS4BTbL4EGetWdk05Tw4njFAO9+nmxgl7jMlA==", + "cpu": [ + "arm64" + ], + "dev": true, + "optional": true, + "os": [ + "freebsd" + ] + }, + "node_modules/esbuild-linux-32": { + "version": "0.13.6", + "resolved": "https://registry.npmjs.org/esbuild-linux-32/-/esbuild-linux-32-0.13.6.tgz", + "integrity": "sha512-hQCZfSLBYtn8f1afFT6Dh9KeLsW12xLqrqssbhpi/xfN9c/bbCh/QQZaR9ZOEnmBHHRPb7rbSo3jQqlCWYb7LQ==", + "cpu": [ + "ia32" + ], + "dev": true, + "optional": true, + "os": [ + "linux" + ] + }, + "node_modules/esbuild-linux-64": { + "version": "0.13.6", + "resolved": "https://registry.npmjs.org/esbuild-linux-64/-/esbuild-linux-64-0.13.6.tgz", + "integrity": "sha512-bRQwsD+xJoajonfyeq5JpiNRogH4mYFYbYsGhwrtQ4pMGk93V/4KuKQiKEisRZO0hYhZL4MtxufwF195zKlCAw==", + "cpu": [ + "x64" + ], + "dev": true, + "optional": true, + "os": [ + "linux" + ] + }, + "node_modules/esbuild-linux-arm": { + "version": "0.13.6", + "resolved": "https://registry.npmjs.org/esbuild-linux-arm/-/esbuild-linux-arm-0.13.6.tgz", + "integrity": "sha512-qQUrpL7QoPqujXEFSpeu6QZ43z0+OdDPHDkLO0GPbpV/jebP7J+0FreMqoq7ZxWG4rPigwcRdEyqzHh8Bh4Faw==", + "cpu": [ + "arm" + ], + "dev": true, + "optional": true, + "os": [ + "linux" + ] + }, + "node_modules/esbuild-linux-arm64": { + "version": "0.13.6", + "resolved": "https://registry.npmjs.org/esbuild-linux-arm64/-/esbuild-linux-arm64-0.13.6.tgz", + "integrity": "sha512-sRc1lt9ma1xBvInCwpS77ywR6KVdcJNsErsrDkDXx3mVe8DLLEn05TG0nIX9I+s8ouHEepikdKCfe1DZdILRjQ==", + "cpu": [ + "arm64" + ], + "dev": true, + "optional": true, + "os": [ + "linux" + ] + }, + "node_modules/esbuild-linux-mips64le": { + "version": "0.13.6", + "resolved": "https://registry.npmjs.org/esbuild-linux-mips64le/-/esbuild-linux-mips64le-0.13.6.tgz", + "integrity": "sha512-1lsHZaIsHlFkHn1QRa/EONPGVHwzdIrkKn6r2m9cYUIn2J+rKtJg0e+WkNG3MaIrxozaGKaiSPGvaG1toCbZjw==", + "cpu": [ + "mips64el" + ], + "dev": true, + "optional": true, + "os": [ + "linux" + ] + }, + "node_modules/esbuild-linux-ppc64le": { + "version": "0.13.6", + "resolved": "https://registry.npmjs.org/esbuild-linux-ppc64le/-/esbuild-linux-ppc64le-0.13.6.tgz", + "integrity": "sha512-x223JNC8XeLDf05zLaKfxqCEWVct4frp8ft8Qc13cha33TMrqMFaSPq6cgpgT2VYuUsXtwoocoWChKfvy+AUQg==", + "cpu": [ + "ppc64" + ], + "dev": true, + "optional": true, + "os": [ + "linux" + ] + }, + "node_modules/esbuild-netbsd-64": { + "version": "0.13.6", + "resolved": "https://registry.npmjs.org/esbuild-netbsd-64/-/esbuild-netbsd-64-0.13.6.tgz", + "integrity": "sha512-TonKf530kT25+zi1Da6esITmuBJe13QiN+QGVch6YE8t720IvIelDGwkOQN3Td7A0JjbSbK3u+Fo6YaL151VxQ==", + "cpu": [ + "x64" + ], + "dev": true, + "optional": true, + "os": [ + "netbsd" + ] + }, + "node_modules/esbuild-openbsd-64": { + "version": "0.13.6", + "resolved": "https://registry.npmjs.org/esbuild-openbsd-64/-/esbuild-openbsd-64-0.13.6.tgz", + "integrity": "sha512-WFa5J0IuyER0UJbCGw87gvGWXGfhxeNppYcvQjp0pWYuH4FS+YqphyjV0RJlybzzDpAXkyZ9RzkMFtSAp+6AUA==", + "cpu": [ + "x64" + ], + "dev": true, + "optional": true, + "os": [ + "openbsd" + ] + }, + "node_modules/esbuild-sunos-64": { + "version": "0.13.6", + "resolved": "https://registry.npmjs.org/esbuild-sunos-64/-/esbuild-sunos-64-0.13.6.tgz", + "integrity": "sha512-duCL8Ewri+zjKxuN/61maniDxcd8fHwSuubdAPofll0y0E6WcL/R/e/mQzhHIuoguFm5RJkKun1qua54javh7g==", + "cpu": [ + "x64" + ], + "dev": true, + "optional": true, + "os": [ + "sunos" + ] + }, + "node_modules/esbuild-windows-32": { + "version": "0.13.6", + "resolved": "https://registry.npmjs.org/esbuild-windows-32/-/esbuild-windows-32-0.13.6.tgz", + "integrity": "sha512-U8RkpT4f0/dygA5ytFyHNZ/fRECU9LWBMrqWflNhM31iTi6RhU0QTuOzFYkmpYnwl358ZZhVoBeEOm313d4u4A==", + "cpu": [ + "ia32" + ], + "dev": true, + "optional": true, + "os": [ + "win32" + ] + }, + "node_modules/esbuild-windows-64": { + "version": "0.13.6", + "resolved": "https://registry.npmjs.org/esbuild-windows-64/-/esbuild-windows-64-0.13.6.tgz", + "integrity": "sha512-A23VyUeyBfSWUYNL0jtrJi5M/2yR/RR8zfpGQ0wU0fldqV2vxnvmBYOBwRxexFYCDRpRWh4cPFsoYoXRCFa8Dg==", + "cpu": [ + "x64" + ], + "dev": true, + "optional": true, + "os": [ + "win32" + ] + }, + "node_modules/esbuild-windows-arm64": { + "version": "0.13.6", + "resolved": "https://registry.npmjs.org/esbuild-windows-arm64/-/esbuild-windows-arm64-0.13.6.tgz", + "integrity": "sha512-K/pFqK/s5C6wXYcFKO9iPY4yU3DI0/Gbl1W2+OhaPHoXu13VGBmqbCiQ5lohHGE72FFQl76naOjEayEiI+gDMQ==", + "cpu": [ + "arm64" + ], + "dev": true, + "optional": true, + "os": [ + "win32" + ] + }, + "node_modules/escalade": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/escalade/-/escalade-3.1.1.tgz", + "integrity": "sha512-k0er2gUkLf8O0zKJiAhmkTnJlTvINGv7ygDNPbeIsX/TJjGJZHuh9B2UxbsaEkmlEo9MfhrSzmhIlhRlI2GXnw==", + "dev": true, + "engines": { + "node": ">=6" + } + }, + "node_modules/escape-string-regexp": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-4.0.0.tgz", + "integrity": "sha512-TtpcNJ3XAzx3Gq8sWRzJaVajRs0uVxA2YAkdb1jm2YkPz4G6egUFAyA3n5vtEIZefPk5Wa4UXbKuS5fKkJWdgA==", + "dev": true, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/eslint": { + "version": "8.0.1", + "resolved": "https://registry.npmjs.org/eslint/-/eslint-8.0.1.tgz", + "integrity": "sha512-LsgcwZgQ72vZ+SMp4K6pAnk2yFDWL7Ti4pJaRvsZ0Hsw2h8ZjUIW38a9AFn2cZXdBMlScMFYYgsSp4ttFI/0bA==", + "dev": true, + "dependencies": { + "@eslint/eslintrc": "^1.0.3", + "@humanwhocodes/config-array": "^0.6.0", + "ajv": "^6.10.0", + "chalk": "^4.0.0", + "cross-spawn": "^7.0.2", + "debug": "^4.3.2", + "doctrine": "^3.0.0", + "enquirer": "^2.3.5", + "escape-string-regexp": "^4.0.0", + "eslint-scope": "^6.0.0", + "eslint-utils": "^3.0.0", + "eslint-visitor-keys": "^3.0.0", + "espree": "^9.0.0", + "esquery": "^1.4.0", + "esutils": "^2.0.2", + "fast-deep-equal": "^3.1.3", + "file-entry-cache": "^6.0.1", + "functional-red-black-tree": "^1.0.1", + "glob-parent": "^6.0.1", + "globals": "^13.6.0", + "ignore": "^4.0.6", + "import-fresh": "^3.0.0", + "imurmurhash": "^0.1.4", + "is-glob": "^4.0.0", + "js-yaml": "^4.1.0", + "json-stable-stringify-without-jsonify": "^1.0.1", + "levn": "^0.4.1", + "lodash.merge": "^4.6.2", + "minimatch": "^3.0.4", + "natural-compare": "^1.4.0", + "optionator": "^0.9.1", + "progress": "^2.0.0", + "regexpp": "^3.2.0", + "semver": "^7.2.1", + "strip-ansi": "^6.0.0", + "strip-json-comments": "^3.1.0", + "text-table": "^0.2.0", + "v8-compile-cache": "^2.0.3" + }, + "bin": { + "eslint": "bin/eslint.js" + }, + "engines": { + "node": "^12.22.0 || ^14.17.0 || >=16.0.0" + }, + "funding": { + "url": "https://opencollective.com/eslint" + } + }, + "node_modules/eslint-config-prettier": { + "version": "8.3.0", + "resolved": "https://registry.npmjs.org/eslint-config-prettier/-/eslint-config-prettier-8.3.0.tgz", + "integrity": "sha512-BgZuLUSeKzvlL/VUjx/Yb787VQ26RU3gGjA3iiFvdsp/2bMfVIWUVP7tjxtjS0e+HP409cPlPvNkQloz8C91ew==", + "dev": true, + "bin": { + "eslint-config-prettier": "bin/cli.js" + }, + "peerDependencies": { + "eslint": ">=7.0.0" + } + }, + "node_modules/eslint-plugin-vue": { + "version": "7.19.1", + "resolved": "https://registry.npmjs.org/eslint-plugin-vue/-/eslint-plugin-vue-7.19.1.tgz", + "integrity": "sha512-e2pD7nW2sTY04ThH+66BgToNwC4n6dqfNhKE+ypdJFtZgn3Zn+nP8ZEIFPG0PGqCKQ3qxy8dJk1bzUsuQd3ANA==", + "dev": true, + "dependencies": { + "eslint-utils": "^2.1.0", + "natural-compare": "^1.4.0", + "semver": "^6.3.0", + "vue-eslint-parser": "^7.10.0" + }, + "engines": { + "node": ">=8.10" + }, + "peerDependencies": { + "eslint": "^6.2.0 || ^7.0.0 || ^8.0.0-0" + } + }, + "node_modules/eslint-plugin-vue/node_modules/eslint-utils": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/eslint-utils/-/eslint-utils-2.1.0.tgz", + "integrity": "sha512-w94dQYoauyvlDc43XnGB8lU3Zt713vNChgt4EWwhXAP2XkBvndfxF0AgIqKOOasjPIPzj9JqgwkwbCYD0/V3Zg==", + "dev": true, + "dependencies": { + "eslint-visitor-keys": "^1.1.0" + }, + "engines": { + "node": ">=6" + }, + "funding": { + "url": "https://github.com/sponsors/mysticatea" + } + }, + "node_modules/eslint-plugin-vue/node_modules/eslint-visitor-keys": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-1.3.0.tgz", + "integrity": "sha512-6J72N8UNa462wa/KFODt/PJ3IU60SDpC3QXC1Hjc1BXXpfL2C9R5+AU7jhe0F6GREqVMh4Juu+NY7xn+6dipUQ==", + "dev": true, + "engines": { + "node": ">=4" + } + }, + "node_modules/eslint-plugin-vue/node_modules/semver": { + "version": "6.3.0", + "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.0.tgz", + "integrity": "sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw==", + "dev": true, + "bin": { + "semver": "bin/semver.js" + } + }, + "node_modules/eslint-scope": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/eslint-scope/-/eslint-scope-6.0.0.tgz", + "integrity": "sha512-uRDL9MWmQCkaFus8RF5K9/L/2fn+80yoW3jkD53l4shjCh26fCtvJGasxjUqP5OT87SYTxCVA3BwTUzuELx9kA==", + "dev": true, + "dependencies": { + "esrecurse": "^4.3.0", + "estraverse": "^5.2.0" + }, + "engines": { + "node": "^12.22.0 || ^14.17.0 || >=16.0.0" + } + }, + "node_modules/eslint-utils": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/eslint-utils/-/eslint-utils-3.0.0.tgz", + "integrity": "sha512-uuQC43IGctw68pJA1RgbQS8/NP7rch6Cwd4j3ZBtgo4/8Flj4eGE7ZYSZRN3iq5pVUv6GPdW5Z1RFleo84uLDA==", + "dev": true, + "dependencies": { + "eslint-visitor-keys": "^2.0.0" + }, + "engines": { + "node": "^10.0.0 || ^12.0.0 || >= 14.0.0" + }, + "funding": { + "url": "https://github.com/sponsors/mysticatea" + }, + "peerDependencies": { + "eslint": ">=5" + } + }, + "node_modules/eslint-utils/node_modules/eslint-visitor-keys": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-2.1.0.tgz", + "integrity": "sha512-0rSmRBzXgDzIsD6mGdJgevzgezI534Cer5L/vyMX0kHzT/jiB43jRhd9YUlMGYLQy2zprNmoT8qasCGtY+QaKw==", + "dev": true, + "engines": { + "node": ">=10" + } + }, + "node_modules/eslint-visitor-keys": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-3.0.0.tgz", + "integrity": "sha512-mJOZa35trBTb3IyRmo8xmKBZlxf+N7OnUl4+ZhJHs/r+0770Wh/LEACE2pqMGMe27G/4y8P2bYGk4J70IC5k1Q==", + "dev": true, + "engines": { + "node": "^12.22.0 || ^14.17.0 || >=16.0.0" + } + }, + "node_modules/espree": { + "version": "9.0.0", + "resolved": "https://registry.npmjs.org/espree/-/espree-9.0.0.tgz", + "integrity": "sha512-r5EQJcYZ2oaGbeR0jR0fFVijGOcwai07/690YRXLINuhmVeRY4UKSAsQPe/0BNuDgwP7Ophoc1PRsr2E3tkbdQ==", + "dev": true, + "dependencies": { + "acorn": "^8.5.0", + "acorn-jsx": "^5.3.1", + "eslint-visitor-keys": "^3.0.0" + }, + "engines": { + "node": "^12.22.0 || ^14.17.0 || >=16.0.0" + } + }, + "node_modules/esprima": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/esprima/-/esprima-4.0.1.tgz", + "integrity": "sha512-eGuFFw7Upda+g4p+QHvnW0RyTX/SVeJBDM/gCtMARO0cLuT2HcEKnTPvhjV6aGeqrCB/sbNop0Kszm0jsaWU4A==", + "dev": true, + "bin": { + "esparse": "bin/esparse.js", + "esvalidate": "bin/esvalidate.js" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/esquery": { + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/esquery/-/esquery-1.4.0.tgz", + "integrity": "sha512-cCDispWt5vHHtwMY2YrAQ4ibFkAL8RbH5YGBnZBc90MolvvfkkQcJro/aZiAQUlQ3qgrYS6D6v8Gc5G5CQsc9w==", + "dev": true, + "dependencies": { + "estraverse": "^5.1.0" + }, + "engines": { + "node": ">=0.10" + } + }, + "node_modules/esrecurse": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/esrecurse/-/esrecurse-4.3.0.tgz", + "integrity": "sha512-KmfKL3b6G+RXvP8N1vr3Tq1kL/oCFgn2NYXEtqP8/L3pKapUA4G8cFVaoF3SU323CD4XypR/ffioHmkti6/Tag==", + "dev": true, + "dependencies": { + "estraverse": "^5.2.0" + }, + "engines": { + "node": ">=4.0" + } + }, + "node_modules/estraverse": { + "version": "5.2.0", + "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-5.2.0.tgz", + "integrity": "sha512-BxbNGGNm0RyRYvUdHpIwv9IWzeM9XClbOxwoATuFdOE7ZE6wHL+HQ5T8hoPM+zHvmKzzsEqhgy0GrQ5X13afiQ==", + "dev": true, + "engines": { + "node": ">=4.0" + } + }, + "node_modules/estree-walker": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/estree-walker/-/estree-walker-2.0.2.tgz", + "integrity": "sha512-Rfkk/Mp/DL7JVje3u18FxFujQlTNR2q6QfMSMB7AvCBx91NGj/ba3kCfza0f6dVDbw7YlRf/nDrn7pQrCCyQ/w==", + "dev": true + }, + "node_modules/esutils": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/esutils/-/esutils-2.0.3.tgz", + "integrity": "sha512-kVscqXk4OCp68SZ0dkgEKVi6/8ij300KBWTJq32P/dYeWTSwK41WyTxalN1eRmA5Z9UU/LX9D7FWSmV9SAYx6g==", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/fast-deep-equal": { + "version": "3.1.3", + "resolved": "https://registry.npmjs.org/fast-deep-equal/-/fast-deep-equal-3.1.3.tgz", + "integrity": "sha512-f3qQ9oQy9j2AhBe/H9VC91wLmKBCCU/gDOnKNAYG5hswO7BLKj09Hc5HYNz9cGI++xlpDCIgDaitVs03ATR84Q==", + "dev": true + }, + "node_modules/fast-json-stable-stringify": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/fast-json-stable-stringify/-/fast-json-stable-stringify-2.1.0.tgz", + "integrity": "sha512-lhd/wF+Lk98HZoTCtlVraHtfh5XYijIjalXck7saUtuanSDyLMxnHhSXEDJqHxD7msR8D0uCmqlkwjCV8xvwHw==", + "dev": true + }, + "node_modules/fast-levenshtein": { + "version": "2.0.6", + "resolved": "https://registry.npmjs.org/fast-levenshtein/-/fast-levenshtein-2.0.6.tgz", + "integrity": "sha1-PYpcZog6FqMMqGQ+hR8Zuqd5eRc=", + "dev": true + }, + "node_modules/file-entry-cache": { + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/file-entry-cache/-/file-entry-cache-6.0.1.tgz", + "integrity": "sha512-7Gps/XWymbLk2QLYK4NzpMOrYjMhdIxXuIvy2QBsLE6ljuodKvdkWs/cpyJJ3CVIVpH0Oi1Hvg1ovbMzLdFBBg==", + "dev": true, + "dependencies": { + "flat-cache": "^3.0.4" + }, + "engines": { + "node": "^10.12.0 || >=12.0.0" + } + }, + "node_modules/fill-range": { + "version": "7.0.1", + "resolved": "https://registry.npmjs.org/fill-range/-/fill-range-7.0.1.tgz", + "integrity": "sha512-qOo9F+dMUmC2Lcb4BbVvnKJxTPjCm+RRpe4gDuGrzkL7mEVl/djYSu2OdQ2Pa302N4oqkSg9ir6jaLWJ2USVpQ==", + "dev": true, + "dependencies": { + "to-regex-range": "^5.0.1" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/flat-cache": { + "version": "3.0.4", + "resolved": "https://registry.npmjs.org/flat-cache/-/flat-cache-3.0.4.tgz", + "integrity": "sha512-dm9s5Pw7Jc0GvMYbshN6zchCA9RgQlzzEZX3vylR9IqFfS8XciblUXOKfW6SiuJ0e13eDYZoZV5wdrev7P3Nwg==", + "dev": true, + "dependencies": { + "flatted": "^3.1.0", + "rimraf": "^3.0.2" + }, + "engines": { + "node": "^10.12.0 || >=12.0.0" + } + }, + "node_modules/flatted": { + "version": "3.2.2", + "resolved": "https://registry.npmjs.org/flatted/-/flatted-3.2.2.tgz", + "integrity": "sha512-JaTY/wtrcSyvXJl4IMFHPKyFur1sE9AUqc0QnhOaJ0CxHtAoIV8pYDzeEfAaNEtGkOfq4gr3LBFmdXW5mOQFnA==", + "dev": true + }, + "node_modules/fs-extra": { + "version": "9.1.0", + "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-9.1.0.tgz", + "integrity": "sha512-hcg3ZmepS30/7BSFqRvoo3DOMQu7IjqxO5nCDt+zM9XWjb33Wg7ziNT+Qvqbuc3+gWpzO02JubVyk2G4Zvo1OQ==", + "dev": true, + "dependencies": { + "at-least-node": "^1.0.0", + "graceful-fs": "^4.2.0", + "jsonfile": "^6.0.1", + "universalify": "^2.0.0" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/fs.realpath": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/fs.realpath/-/fs.realpath-1.0.0.tgz", + "integrity": "sha1-FQStJSMVjKpA20onh8sBQRmU6k8=", + "dev": true + }, + "node_modules/fsevents": { + "version": "2.3.2", + "resolved": "https://registry.npmjs.org/fsevents/-/fsevents-2.3.2.tgz", + "integrity": "sha512-xiqMQR4xAeHTuB9uWm+fFRcIOgKBMiOBP+eXiyT7jsgVCq1bkVygt00oASowB7EdtpOHaaPgKt812P9ab+DDKA==", + "dev": true, + "hasInstallScript": true, + "optional": true, + "os": [ + "darwin" + ], + "engines": { + "node": "^8.16.0 || ^10.6.0 || >=11.0.0" + } + }, + "node_modules/function-bind": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/function-bind/-/function-bind-1.1.1.tgz", + "integrity": "sha512-yIovAzMX49sF8Yl58fSCWJ5svSLuaibPxXQJFLmBObTuCr0Mf1KiPopGM9NiFjiYBCbfaa2Fh6breQ6ANVTI0A==", + "dev": true + }, + "node_modules/functional-red-black-tree": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/functional-red-black-tree/-/functional-red-black-tree-1.0.1.tgz", + "integrity": "sha1-GwqzvVU7Kg1jmdKcDj6gslIHgyc=", + "dev": true + }, + "node_modules/gensync": { + "version": "1.0.0-beta.2", + "resolved": "https://registry.npmjs.org/gensync/-/gensync-1.0.0-beta.2.tgz", + "integrity": "sha512-3hN7NaskYvMDLQY55gnW3NQ+mesEAepTqlg+VEbj7zzqEMBVNhzcGYYeqFo/TlYz6eQiFcp1HcsCZO+nGgS8zg==", + "dev": true, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/glob": { + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/glob/-/glob-7.2.0.tgz", + "integrity": "sha512-lmLf6gtyrPq8tTjSmrO94wBeQbFR3HbLHbuyD69wuyQkImp2hWqMGB47OX65FBkPffO641IP9jWa1z4ivqG26Q==", + "dev": true, + "dependencies": { + "fs.realpath": "^1.0.0", + "inflight": "^1.0.4", + "inherits": "2", + "minimatch": "^3.0.4", + "once": "^1.3.0", + "path-is-absolute": "^1.0.0" + }, + "engines": { + "node": "*" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" + } + }, + "node_modules/glob-parent": { + "version": "6.0.2", + "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-6.0.2.tgz", + "integrity": "sha512-XxwI8EOhVQgWp6iDL+3b0r86f4d6AX6zSU55HfB4ydCEuXLXc5FcYeOu+nnGftS4TEju/11rt4KJPTMgbfmv4A==", + "dev": true, + "dependencies": { + "is-glob": "^4.0.3" + }, + "engines": { + "node": ">=10.13.0" + } + }, + "node_modules/globals": { + "version": "13.11.0", + "resolved": "https://registry.npmjs.org/globals/-/globals-13.11.0.tgz", + "integrity": "sha512-08/xrJ7wQjK9kkkRoI3OFUBbLx4f+6x3SGwcPvQ0QH6goFDrOU2oyAWrmh3dJezu65buo+HBMzAMQy6rovVC3g==", + "dev": true, + "dependencies": { + "type-fest": "^0.20.2" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/graceful-fs": { + "version": "4.2.8", + "resolved": "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.2.8.tgz", + "integrity": "sha512-qkIilPUYcNhJpd33n0GBXTB1MMPp14TxEsEs0pTrsSVucApsYzW5V+Q8Qxhik6KU3evy+qkAAowTByymK0avdg==", + "dev": true + }, + "node_modules/has": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/has/-/has-1.0.3.tgz", + "integrity": "sha512-f2dvO0VU6Oej7RkWJGrehjbzMAjFp5/VKPp5tTpWIV4JHHZK1/BxbFRtf/siA2SWTe09caDmVtYYzWEIbBS4zw==", + "dev": true, + "dependencies": { + "function-bind": "^1.1.1" + }, + "engines": { + "node": ">= 0.4.0" + } + }, + "node_modules/has-ansi": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/has-ansi/-/has-ansi-2.0.0.tgz", + "integrity": "sha1-NPUEnOHs3ysGSa8+8k5F7TVBbZE=", + "dev": true, + "dependencies": { + "ansi-regex": "^2.0.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/has-ansi/node_modules/ansi-regex": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-2.1.1.tgz", + "integrity": "sha1-w7M6te42DYbg5ijwRorn7yfWVN8=", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/has-flag": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", + "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", + "dev": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/hash-sum": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/hash-sum/-/hash-sum-2.0.0.tgz", + "integrity": "sha512-WdZTbAByD+pHfl/g9QSsBIIwy8IT+EsPiKDs0KNX+zSHhdDLFKdZu0BQHljvO+0QI/BasbMSUa8wYNCZTvhslg==", + "dev": true + }, + "node_modules/he": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/he/-/he-1.2.0.tgz", + "integrity": "sha512-F/1DnUGPopORZi0ni+CvrCgHQ5FyEAHRLSApuYWMmrbSwoN2Mn/7k+Gl38gJnR7yyDZk6WLXwiGod1JOWNDKGw==", + "dev": true, + "bin": { + "he": "bin/he" + } + }, + "node_modules/html-tags": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/html-tags/-/html-tags-2.0.0.tgz", + "integrity": "sha1-ELMKOGCF9Dzt41PMj6fLDe7qZos=", + "dev": true, + "engines": { + "node": ">=4" + } + }, + "node_modules/ignore": { + "version": "4.0.6", + "resolved": "https://registry.npmjs.org/ignore/-/ignore-4.0.6.tgz", + "integrity": "sha512-cyFDKrqc/YdcWFniJhzI42+AzS+gNwmUzOSFcRCQYwySuBBBy/KjuxWLZ/FHEH6Moq1NizMOBWyTcv8O4OZIMg==", + "dev": true, + "engines": { + "node": ">= 4" + } + }, + "node_modules/import-fresh": { + "version": "3.3.0", + "resolved": "https://registry.npmjs.org/import-fresh/-/import-fresh-3.3.0.tgz", + "integrity": "sha512-veYYhQa+D1QBKznvhUHxb8faxlrwUnxseDAbAp457E0wLNio2bOSKnjYDhMj+YiAq61xrMGhQk9iXVk5FzgQMw==", + "dev": true, + "dependencies": { + "parent-module": "^1.0.0", + "resolve-from": "^4.0.0" + }, + "engines": { + "node": ">=6" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/imurmurhash": { + "version": "0.1.4", + "resolved": "https://registry.npmjs.org/imurmurhash/-/imurmurhash-0.1.4.tgz", + "integrity": "sha1-khi5srkoojixPcT7a21XbyMUU+o=", + "dev": true, + "engines": { + "node": ">=0.8.19" + } + }, + "node_modules/inflight": { + "version": "1.0.6", + "resolved": "https://registry.npmjs.org/inflight/-/inflight-1.0.6.tgz", + "integrity": "sha1-Sb1jMdfQLQwJvJEKEHW6gWW1bfk=", + "dev": true, + "dependencies": { + "once": "^1.3.0", + "wrappy": "1" + } + }, + "node_modules/inherits": { + "version": "2.0.4", + "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.4.tgz", + "integrity": "sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ==", + "dev": true + }, + "node_modules/invariant": { + "version": "2.2.4", + "resolved": "https://registry.npmjs.org/invariant/-/invariant-2.2.4.tgz", + "integrity": "sha512-phJfQVBuaJM5raOpJjSfkiD6BpbCE4Ns//LaXl6wGYtUBY83nWS6Rf9tXm2e8VaK60JEjYldbPif/A2B1C2gNA==", + "dev": true, + "dependencies": { + "loose-envify": "^1.0.0" + } + }, + "node_modules/is-binary-path": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/is-binary-path/-/is-binary-path-2.1.0.tgz", + "integrity": "sha512-ZMERYes6pDydyuGidse7OsHxtbI7WVeUEozgR/g7rd0xUimYNlvZRE/K2MgZTjWy725IfelLeVcEM97mmtRGXw==", + "dev": true, + "dependencies": { + "binary-extensions": "^2.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/is-core-module": { + "version": "2.8.0", + "resolved": "https://registry.npmjs.org/is-core-module/-/is-core-module-2.8.0.tgz", + "integrity": "sha512-vd15qHsaqrRL7dtH6QNuy0ndJmRDrS9HAM1CAiSifNUFv4x1a0CCVsj18hJ1mShxIG6T2i1sO78MkP56r0nYRw==", + "dev": true, + "dependencies": { + "has": "^1.0.3" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/is-extglob": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/is-extglob/-/is-extglob-2.1.1.tgz", + "integrity": "sha1-qIwCU1eR8C7TfHahueqXc8gz+MI=", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/is-glob": { + "version": "4.0.3", + "resolved": "https://registry.npmjs.org/is-glob/-/is-glob-4.0.3.tgz", + "integrity": "sha512-xelSayHH36ZgE7ZWhli7pW34hNbNl8Ojv5KVmkJD4hBdD3th8Tfk9vYasLM+mXWOZhFkgZfxhLSnrwRr4elSSg==", + "dev": true, + "dependencies": { + "is-extglob": "^2.1.1" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/is-number": { + "version": "7.0.0", + "resolved": "https://registry.npmjs.org/is-number/-/is-number-7.0.0.tgz", + "integrity": "sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng==", + "dev": true, + "engines": { + "node": ">=0.12.0" + } + }, + "node_modules/isexe": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/isexe/-/isexe-2.0.0.tgz", + "integrity": "sha1-6PvzdNxVb/iUehDcsFctYz8s+hA=", + "dev": true + }, + "node_modules/js-tokens": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/js-tokens/-/js-tokens-4.0.0.tgz", + "integrity": "sha512-RdJUflcE3cUzKiMqQgsCu06FPu9UdIJO0beYbPhHN4k6apgJtifcoCtT9bcxOpYBtpD2kCM6Sbzg4CausW/PKQ==", + "dev": true + }, + "node_modules/js-yaml": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-4.1.0.tgz", + "integrity": "sha512-wpxZs9NoxZaJESJGIZTyDEaYpl0FKSA+FB9aJiyemKhMwkxQg63h4T1KJgUGHpTqPDNRcmmYLugrRjJlBtWvRA==", + "dev": true, + "dependencies": { + "argparse": "^2.0.1" + }, + "bin": { + "js-yaml": "bin/js-yaml.js" + } + }, + "node_modules/jsesc": { + "version": "2.5.2", + "resolved": "https://registry.npmjs.org/jsesc/-/jsesc-2.5.2.tgz", + "integrity": "sha512-OYu7XEzjkCQ3C5Ps3QIZsQfNpqoJyZZA99wd9aWd05NCtC5pWOkShK2mkL6HXQR6/Cy2lbNdPlZBpuQHXE63gA==", + "dev": true, + "bin": { + "jsesc": "bin/jsesc" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/json-schema-traverse": { + "version": "0.4.1", + "resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-0.4.1.tgz", + "integrity": "sha512-xbbCH5dCYU5T8LcEhhuh7HJ88HXuW3qsI3Y0zOZFKfZEHcpWiHU/Jxzk629Brsab/mMiHQti9wMP+845RPe3Vg==", + "dev": true + }, + "node_modules/json-stable-stringify-without-jsonify": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/json-stable-stringify-without-jsonify/-/json-stable-stringify-without-jsonify-1.0.1.tgz", + "integrity": "sha1-nbe1lJatPzz+8wp1FC0tkwrXJlE=", + "dev": true + }, + "node_modules/json5": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/json5/-/json5-2.2.0.tgz", + "integrity": "sha512-f+8cldu7X/y7RAJurMEJmdoKXGB/X550w2Nr3tTbezL6RwEE/iMcm+tZnXeoZtKuOq6ft8+CqzEkrIgx1fPoQA==", + "dev": true, + "dependencies": { + "minimist": "^1.2.5" + }, + "bin": { + "json5": "lib/cli.js" + }, + "engines": { + "node": ">=6" + } + }, + "node_modules/jsonfile": { + "version": "6.1.0", + "resolved": "https://registry.npmjs.org/jsonfile/-/jsonfile-6.1.0.tgz", + "integrity": "sha512-5dgndWOriYSm5cnYaJNhalLNDKOqFwyDB/rr1E9ZsGciGvKPs8R2xYGCacuf3z6K1YKDz182fd+fY3cn3pMqXQ==", + "dev": true, + "dependencies": { + "universalify": "^2.0.0" + }, + "optionalDependencies": { + "graceful-fs": "^4.1.6" + } + }, + "node_modules/kirbyup": { + "version": "0.18.0", + "resolved": "https://registry.npmjs.org/kirbyup/-/kirbyup-0.18.0.tgz", + "integrity": "sha512-B+mZux9Fn32dG3Li6M0urm2fi8JySlCe3zunX4rI6YZJvaGHaGVv14l0/H4SGRhqetEdoG4/frmr7rIUVDVRFw==", + "dev": true, + "dependencies": { + "cac": "^6.7.8", + "chokidar": "^3.5.2", + "colorette": "^2.0.16", + "postcss-dir-pseudo-class": "^6.0.0", + "postcss-logical": "^5.0.0", + "sass": "^1.42.1", + "vite": "^2.6.7", + "vite-plugin-vue2": "^1.8.2", + "vue": "^2.6.14", + "vue-template-compiler": "^2.6.14" + }, + "bin": { + "kirbyup": "dist/cli.js" + }, + "engines": { + "node": ">=14" + } + }, + "node_modules/levn": { + "version": "0.4.1", + "resolved": "https://registry.npmjs.org/levn/-/levn-0.4.1.tgz", + "integrity": "sha512-+bT2uH4E5LGE7h/n3evcS/sQlJXCpIp6ym8OWJ5eV6+67Dsql/LaaT7qJBAt2rzfoa/5QBGBhxDix1dMt2kQKQ==", + "dev": true, + "dependencies": { + "prelude-ls": "^1.2.1", + "type-check": "~0.4.0" + }, + "engines": { + "node": ">= 0.8.0" + } + }, + "node_modules/lodash": { + "version": "4.17.21", + "resolved": "https://registry.npmjs.org/lodash/-/lodash-4.17.21.tgz", + "integrity": "sha512-v2kDEe57lecTulaDIuNTPy3Ry4gLGJ6Z1O3vE1krgXZNrsQ+LFTGHVxVjcXPs17LhbZVGedAJv8XZ1tvj5FvSg==", + "dev": true + }, + "node_modules/lodash.kebabcase": { + "version": "4.1.1", + "resolved": "https://registry.npmjs.org/lodash.kebabcase/-/lodash.kebabcase-4.1.1.tgz", + "integrity": "sha1-hImxyw0p/4gZXM7KRI/21swpXDY=", + "dev": true + }, + "node_modules/lodash.merge": { + "version": "4.6.2", + "resolved": "https://registry.npmjs.org/lodash.merge/-/lodash.merge-4.6.2.tgz", + "integrity": "sha512-0KpjqXRVvrYyCsX1swR/XTK0va6VQkQM6MNo7PqW77ByjAhoARA8EfrP1N4+KlKj8YS0ZUCtRT/YUuhyYDujIQ==", + "dev": true + }, + "node_modules/loose-envify": { + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/loose-envify/-/loose-envify-1.4.0.tgz", + "integrity": "sha512-lyuxPGr/Wfhrlem2CL/UcnUc1zcqKAImBDzukY7Y5F/yQiNdko6+fRLevlw1HgMySw7f611UIY408EtxRSoK3Q==", + "dev": true, + "dependencies": { + "js-tokens": "^3.0.0 || ^4.0.0" + }, + "bin": { + "loose-envify": "cli.js" + } + }, + "node_modules/lru-cache": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-6.0.0.tgz", + "integrity": "sha512-Jo6dJ04CmSjuznwJSS3pUeWmd/H0ffTlkXXgwZi+eq1UCmqQwCh+eLsYOYCwY991i2Fah4h1BEMCx4qThGbsiA==", + "dev": true, + "dependencies": { + "yallist": "^4.0.0" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/magic-string": { + "version": "0.25.7", + "resolved": "https://registry.npmjs.org/magic-string/-/magic-string-0.25.7.tgz", + "integrity": "sha512-4CrMT5DOHTDk4HYDlzmwu4FVCcIYI8gauveasrdCu2IKIFOJ3f0v/8MDGJCDL9oD2ppz/Av1b0Nj345H9M+XIA==", + "dev": true, + "dependencies": { + "sourcemap-codec": "^1.4.4" + } + }, + "node_modules/merge-source-map": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/merge-source-map/-/merge-source-map-1.1.0.tgz", + "integrity": "sha512-Qkcp7P2ygktpMPh2mCQZaf3jhN6D3Z/qVZHSdWvQ+2Ef5HgRAPBO57A77+ENm0CPx2+1Ce/MYKi3ymqdfuqibw==", + "dev": true, + "dependencies": { + "source-map": "^0.6.1" + } + }, + "node_modules/merge-source-map/node_modules/source-map": { + "version": "0.6.1", + "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", + "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/minimatch": { + "version": "3.0.4", + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.0.4.tgz", + "integrity": "sha512-yJHVQEhyqPLUTgt9B83PXu6W3rx4MvvHvSUvToogpwoGDOUQ+yDrR0HRot+yOCdCO7u4hX3pWft6kWBBcqh0UA==", + "dev": true, + "dependencies": { + "brace-expansion": "^1.1.7" + }, + "engines": { + "node": "*" + } + }, + "node_modules/minimist": { + "version": "1.2.5", + "resolved": "https://registry.npmjs.org/minimist/-/minimist-1.2.5.tgz", + "integrity": "sha512-FM9nNUYrRBAELZQT3xeZQ7fmMOBg6nWNmJKTcgsJeaLstP/UODVpGsr5OhXhhXg6f+qtJ8uiZ+PUxkDWcgIXLw==", + "dev": true + }, + "node_modules/ms": { + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz", + "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==", + "dev": true + }, + "node_modules/nanoid": { + "version": "3.1.30", + "resolved": "https://registry.npmjs.org/nanoid/-/nanoid-3.1.30.tgz", + "integrity": "sha512-zJpuPDwOv8D2zq2WRoMe1HsfZthVewpel9CAvTfc/2mBD1uUT/agc5f7GHGWXlYkFvi1mVxe4IjvP2HNrop7nQ==", + "dev": true, + "bin": { + "nanoid": "bin/nanoid.cjs" + }, + "engines": { + "node": "^10 || ^12 || ^13.7 || ^14 || >=15.0.1" + } + }, + "node_modules/natural-compare": { + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/natural-compare/-/natural-compare-1.4.0.tgz", + "integrity": "sha1-Sr6/7tdUHywnrPspvbvRXI1bpPc=", + "dev": true + }, + "node_modules/node-releases": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/node-releases/-/node-releases-2.0.0.tgz", + "integrity": "sha512-aA87l0flFYMzCHpTM3DERFSYxc6lv/BltdbRTOMZuxZ0cwZCD3mejE5n9vLhSJCN++/eOqr77G1IO5uXxlQYWA==", + "dev": true + }, + "node_modules/normalize-path": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/normalize-path/-/normalize-path-3.0.0.tgz", + "integrity": "sha512-6eZs5Ls3WtCisHWp9S2GUy8dqkpGi4BVSz3GaqiE6ezub0512ESztXUwUB6C6IKbQkY2Pnb/mD4WYojCRwcwLA==", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/once": { + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/once/-/once-1.4.0.tgz", + "integrity": "sha1-WDsap3WWHUsROsF9nFC6753Xa9E=", + "dev": true, + "dependencies": { + "wrappy": "1" + } + }, + "node_modules/optionator": { + "version": "0.9.1", + "resolved": "https://registry.npmjs.org/optionator/-/optionator-0.9.1.tgz", + "integrity": "sha512-74RlY5FCnhq4jRxVUPKDaRwrVNXMqsGsiW6AJw4XK8hmtm10wC0ypZBLw5IIp85NZMr91+qd1RvvENwg7jjRFw==", + "dev": true, + "dependencies": { + "deep-is": "^0.1.3", + "fast-levenshtein": "^2.0.6", + "levn": "^0.4.1", + "prelude-ls": "^1.2.1", + "type-check": "^0.4.0", + "word-wrap": "^1.2.3" + }, + "engines": { + "node": ">= 0.8.0" + } + }, + "node_modules/parent-module": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/parent-module/-/parent-module-1.0.1.tgz", + "integrity": "sha512-GQ2EWRpQV8/o+Aw8YqtfZZPfNRWZYkbidE9k5rpl/hC3vtHHBfGm2Ifi6qWV+coDGkrUKZAxE3Lot5kcsRlh+g==", + "dev": true, + "dependencies": { + "callsites": "^3.0.0" + }, + "engines": { + "node": ">=6" + } + }, + "node_modules/path-is-absolute": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/path-is-absolute/-/path-is-absolute-1.0.1.tgz", + "integrity": "sha1-F0uSaHNVNP+8es5r9TpanhtcX18=", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/path-key": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/path-key/-/path-key-3.1.1.tgz", + "integrity": "sha512-ojmeN0qd+y0jszEtoY48r0Peq5dwMEkIlCOu6Q5f41lfkswXuKtYrhgoTpLnyIcHm24Uhqx+5Tqm2InSwLhE6Q==", + "dev": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/path-parse": { + "version": "1.0.7", + "resolved": "https://registry.npmjs.org/path-parse/-/path-parse-1.0.7.tgz", + "integrity": "sha512-LDJzPVEEEPR+y48z93A0Ed0yXb8pAByGWo/k5YYdYgpY2/2EsOsksJrq7lOHxryrVOn1ejG6oAp8ahvOIQD8sw==", + "dev": true + }, + "node_modules/picocolors": { + "version": "0.2.1", + "resolved": "https://registry.npmjs.org/picocolors/-/picocolors-0.2.1.tgz", + "integrity": "sha512-cMlDqaLEqfSaW8Z7N5Jw+lyIW869EzT73/F5lhtY9cLGoVxSXznfgfXMO0Z5K0o0Q2TkTXq+0KFsdnSe3jDViA==", + "dev": true + }, + "node_modules/picomatch": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-2.3.0.tgz", + "integrity": "sha512-lY1Q/PiJGC2zOv/z391WOTD+Z02bCgsFfvxoXXf6h7kv9o+WmsmzYqrAwY63sNgOxE4xEdq0WyUnXfKeBrSvYw==", + "dev": true, + "engines": { + "node": ">=8.6" + }, + "funding": { + "url": "https://github.com/sponsors/jonschlinkert" + } + }, + "node_modules/postcss": { + "version": "8.3.9", + "resolved": "https://registry.npmjs.org/postcss/-/postcss-8.3.9.tgz", + "integrity": "sha512-f/ZFyAKh9Dnqytx5X62jgjhhzttjZS7hMsohcI7HEI5tjELX/HxCy3EFhsRxyzGvrzFF+82XPvCS8T9TFleVJw==", + "dev": true, + "dependencies": { + "nanoid": "^3.1.28", + "picocolors": "^0.2.1", + "source-map-js": "^0.6.2" + }, + "engines": { + "node": "^10 || ^12 || >=14" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/postcss/" + } + }, + "node_modules/postcss-dir-pseudo-class": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/postcss-dir-pseudo-class/-/postcss-dir-pseudo-class-6.0.0.tgz", + "integrity": "sha512-TC4eB5ZnLRSV1PLsAPualEjxFysU9IVEBx8h+Md2qzo8iWdNqwWCckx5fTWfe6dJxUpB0TWEpWEFhZ/YHvjSCA==", + "dev": true, + "dependencies": { + "postcss-selector-parser": "6.0.6" + }, + "engines": { + "node": ">=12" + }, + "peerDependencies": { + "postcss": "^8.3" + } + }, + "node_modules/postcss-logical": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/postcss-logical/-/postcss-logical-5.0.0.tgz", + "integrity": "sha512-fWEWMn/xf6F9SMzAD7OS0GTm8Qh1BlBmEbVT/YZGYhwipQEwOpO7YOOu+qnzLksDg9JjLRj5tLmeN8OW8+ogIA==", + "dev": true, + "engines": { + "node": ">=12" + }, + "peerDependencies": { + "postcss": "^8.3" + } + }, + "node_modules/postcss-selector-parser": { + "version": "6.0.6", + "resolved": "https://registry.npmjs.org/postcss-selector-parser/-/postcss-selector-parser-6.0.6.tgz", + "integrity": "sha512-9LXrvaaX3+mcv5xkg5kFwqSzSH1JIObIx51PrndZwlmznwXRfxMddDvo9gve3gVR8ZTKgoFDdWkbRFmEhT4PMg==", + "dev": true, + "dependencies": { + "cssesc": "^3.0.0", + "util-deprecate": "^1.0.2" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/prelude-ls": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/prelude-ls/-/prelude-ls-1.2.1.tgz", + "integrity": "sha512-vkcDPrRZo1QZLbn5RLGPpg/WmIQ65qoWWhcGKf/b5eplkkarX0m9z8ppCat4mlOqUsWpyNuYgO3VRyrYHSzX5g==", + "dev": true, + "engines": { + "node": ">= 0.8.0" + } + }, + "node_modules/prettier": { + "version": "2.4.1", + "resolved": "https://registry.npmjs.org/prettier/-/prettier-2.4.1.tgz", + "integrity": "sha512-9fbDAXSBcc6Bs1mZrDYb3XKzDLm4EXXL9sC1LqKP5rZkT6KRr/rf9amVUcODVXgguK/isJz0d0hP72WeaKWsvA==", + "dev": true, + "bin": { + "prettier": "bin-prettier.js" + }, + "engines": { + "node": ">=10.13.0" + } + }, + "node_modules/private": { + "version": "0.1.8", + "resolved": "https://registry.npmjs.org/private/-/private-0.1.8.tgz", + "integrity": "sha512-VvivMrbvd2nKkiG38qjULzlc+4Vx4wm/whI9pQD35YrARNnhxeiRktSOhSukRLFNlzg6Br/cJPet5J/u19r/mg==", + "dev": true, + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/progress": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/progress/-/progress-2.0.3.tgz", + "integrity": "sha512-7PiHtLll5LdnKIMw100I+8xJXR5gW2QwWYkT6iJva0bXitZKa/XMrSbdmg3r2Xnaidz9Qumd0VPaMrZlF9V9sA==", + "dev": true, + "engines": { + "node": ">=0.4.0" + } + }, + "node_modules/pseudomap": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/pseudomap/-/pseudomap-1.0.2.tgz", + "integrity": "sha1-8FKijacOYYkX7wqKw0wa5aaChrM=", + "dev": true + }, + "node_modules/punycode": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/punycode/-/punycode-2.1.1.tgz", + "integrity": "sha512-XRsRjdf+j5ml+y/6GKHPZbrF/8p2Yga0JPtdqTIY2Xe5ohJPD9saDJJLPvp9+NSBprVvevdXZybnj2cv8OEd0A==", + "dev": true, + "engines": { + "node": ">=6" + } + }, + "node_modules/querystring": { + "version": "0.2.1", + "resolved": "https://registry.npmjs.org/querystring/-/querystring-0.2.1.tgz", + "integrity": "sha512-wkvS7mL/JMugcup3/rMitHmd9ecIGd2lhFhK9N3UUQ450h66d1r3Y9nvXzQAW1Lq+wyx61k/1pfKS5KuKiyEbg==", + "deprecated": "The querystring API is considered Legacy. new code should use the URLSearchParams API instead.", + "dev": true, + "engines": { + "node": ">=0.4.x" + } + }, + "node_modules/readdirp": { + "version": "3.6.0", + "resolved": "https://registry.npmjs.org/readdirp/-/readdirp-3.6.0.tgz", + "integrity": "sha512-hOS089on8RduqdbhvQ5Z37A0ESjsqz6qnRcffsMU3495FuTdqSm+7bhJ29JvIOsBDEEnan5DPu9t3To9VRlMzA==", + "dev": true, + "dependencies": { + "picomatch": "^2.2.1" + }, + "engines": { + "node": ">=8.10.0" + } + }, + "node_modules/regenerate": { + "version": "1.4.2", + "resolved": "https://registry.npmjs.org/regenerate/-/regenerate-1.4.2.tgz", + "integrity": "sha512-zrceR/XhGYU/d/opr2EKO7aRHUeiBI8qjtfHqADTwZd6Szfy16la6kqD0MIUs5z5hx6AaKa+PixpPrR289+I0A==", + "dev": true + }, + "node_modules/regenerator-runtime": { + "version": "0.11.1", + "resolved": "https://registry.npmjs.org/regenerator-runtime/-/regenerator-runtime-0.11.1.tgz", + "integrity": "sha512-MguG95oij0fC3QV3URf4V2SDYGJhJnJGqvIIgdECeODCT98wSWDAJ94SSuVpYQUoTcGUIL6L4yNB7j1DFFHSBg==", + "dev": true + }, + "node_modules/regenerator-transform": { + "version": "0.10.1", + "resolved": "https://registry.npmjs.org/regenerator-transform/-/regenerator-transform-0.10.1.tgz", + "integrity": "sha512-PJepbvDbuK1xgIgnau7Y90cwaAmO/LCLMI2mPvaXq2heGMR3aWW5/BQvYrhJ8jgmQjXewXvBjzfqKcVOmhjZ6Q==", + "dev": true, + "dependencies": { + "babel-runtime": "^6.18.0", + "babel-types": "^6.19.0", + "private": "^0.1.6" + } + }, + "node_modules/regexpp": { + "version": "3.2.0", + "resolved": "https://registry.npmjs.org/regexpp/-/regexpp-3.2.0.tgz", + "integrity": "sha512-pq2bWo9mVD43nbts2wGv17XLiNLya+GklZ8kaDLV2Z08gDCsGpnKn9BFMepvWuHCbyVvY7J5o5+BVvoQbmlJLg==", + "dev": true, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/sponsors/mysticatea" + } + }, + "node_modules/regexpu-core": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/regexpu-core/-/regexpu-core-2.0.0.tgz", + "integrity": "sha1-SdA4g3uNz4v6W5pCE5k45uoq4kA=", + "dev": true, + "dependencies": { + "regenerate": "^1.2.1", + "regjsgen": "^0.2.0", + "regjsparser": "^0.1.4" + } + }, + "node_modules/regjsgen": { + "version": "0.2.0", + "resolved": "https://registry.npmjs.org/regjsgen/-/regjsgen-0.2.0.tgz", + "integrity": "sha1-bAFq3qxVT3WCP+N6wFuS1aTtsfc=", + "dev": true + }, + "node_modules/regjsparser": { + "version": "0.1.5", + "resolved": "https://registry.npmjs.org/regjsparser/-/regjsparser-0.1.5.tgz", + "integrity": "sha1-fuj4Tcb6eS0/0K4ijSS9lJ6tIFw=", + "dev": true, + "dependencies": { + "jsesc": "~0.5.0" + }, + "bin": { + "regjsparser": "bin/parser" + } + }, + "node_modules/regjsparser/node_modules/jsesc": { + "version": "0.5.0", + "resolved": "https://registry.npmjs.org/jsesc/-/jsesc-0.5.0.tgz", + "integrity": "sha1-597mbjXW/Bb3EP6R1c9p9w8IkR0=", + "dev": true, + "bin": { + "jsesc": "bin/jsesc" + } + }, + "node_modules/resolve": { + "version": "1.20.0", + "resolved": "https://registry.npmjs.org/resolve/-/resolve-1.20.0.tgz", + "integrity": "sha512-wENBPt4ySzg4ybFQW2TT1zMQucPK95HSh/nq2CFTZVOGut2+pQvSsgtda4d26YrYcr067wjbmzOG8byDPBX63A==", + "dev": true, + "dependencies": { + "is-core-module": "^2.2.0", + "path-parse": "^1.0.6" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/resolve-from": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/resolve-from/-/resolve-from-4.0.0.tgz", + "integrity": "sha512-pb/MYmXstAkysRFx8piNI1tGFNQIFA3vkE3Gq4EuA1dF6gHp/+vgZqsCGJapvy8N3Q+4o7FwvquPJcnZ7RYy4g==", + "dev": true, + "engines": { + "node": ">=4" + } + }, + "node_modules/rimraf": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-3.0.2.tgz", + "integrity": "sha512-JZkJMZkAGFFPP2YqXZXPbMlMBgsxzE8ILs4lMIX/2o0L9UBw9O/Y3o6wFw/i9YLapcUJWwqbi3kdxIPdC62TIA==", + "dev": true, + "dependencies": { + "glob": "^7.1.3" + }, + "bin": { + "rimraf": "bin.js" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" + } + }, + "node_modules/rollup": { + "version": "2.58.0", + "resolved": "https://registry.npmjs.org/rollup/-/rollup-2.58.0.tgz", + "integrity": "sha512-NOXpusKnaRpbS7ZVSzcEXqxcLDOagN6iFS8p45RkoiMqPHDLwJm758UF05KlMoCRbLBTZsPOIa887gZJ1AiXvw==", + "dev": true, + "bin": { + "rollup": "dist/bin/rollup" + }, + "engines": { + "node": ">=10.0.0" + }, + "optionalDependencies": { + "fsevents": "~2.3.2" + } + }, + "node_modules/safe-buffer": { + "version": "5.1.2", + "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.2.tgz", + "integrity": "sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g==", + "dev": true + }, + "node_modules/sass": { + "version": "1.43.2", + "resolved": "https://registry.npmjs.org/sass/-/sass-1.43.2.tgz", + "integrity": "sha512-DncYhjl3wBaPMMJR0kIUaH3sF536rVrOcqqVGmTZHQRRzj7LQlyGV7Mb8aCKFyILMr5VsPHwRYtyKpnKYlmQSQ==", + "dev": true, + "dependencies": { + "chokidar": ">=3.0.0 <4.0.0" + }, + "bin": { + "sass": "sass.js" + }, + "engines": { + "node": ">=8.9.0" + } + }, + "node_modules/semver": { + "version": "7.3.5", + "resolved": "https://registry.npmjs.org/semver/-/semver-7.3.5.tgz", + "integrity": "sha512-PoeGJYh8HK4BTO/a9Tf6ZG3veo/A7ZVsYrSA6J8ny9nb3B1VrpkuN+z9OE5wfE5p6H4LchYZsegiQgbJD94ZFQ==", + "dev": true, + "dependencies": { + "lru-cache": "^6.0.0" + }, + "bin": { + "semver": "bin/semver.js" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/shebang-command": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/shebang-command/-/shebang-command-2.0.0.tgz", + "integrity": "sha512-kHxr2zZpYtdmrN1qDjrrX/Z1rR1kG8Dx+gkpK1G4eXmvXswmcE1hTWBWYUzlraYw1/yZp6YuDY77YtvbN0dmDA==", + "dev": true, + "dependencies": { + "shebang-regex": "^3.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/shebang-regex": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/shebang-regex/-/shebang-regex-3.0.0.tgz", + "integrity": "sha512-7++dFhtcx3353uBaq8DDR4NuxBetBzC7ZQOhmTQInHEd6bSrXdiEyzCvG07Z44UYdLShWUyXt5M/yhz8ekcb1A==", + "dev": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/slash": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/slash/-/slash-3.0.0.tgz", + "integrity": "sha512-g9Q1haeby36OSStwb4ntCGGGaKsaVSjQ68fBxoQcutl5fS1vuY18H3wSt3jFyFtrkx+Kz0V1G85A4MyAdDMi2Q==", + "dev": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/source-map": { + "version": "0.7.3", + "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.7.3.tgz", + "integrity": "sha512-CkCj6giN3S+n9qrYiBTX5gystlENnRW5jZeNLHpe6aue+SrHcG5VYwujhW9s4dY31mEGsxBDrHR6oI69fTXsaQ==", + "dev": true, + "engines": { + "node": ">= 8" + } + }, + "node_modules/source-map-js": { + "version": "0.6.2", + "resolved": "https://registry.npmjs.org/source-map-js/-/source-map-js-0.6.2.tgz", + "integrity": "sha512-/3GptzWzu0+0MBQFrDKzw/DvvMTUORvgY6k6jd/VS6iCR4RDTKWH6v6WPwQoUO8667uQEf9Oe38DxAYWY5F/Ug==", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/sourcemap-codec": { + "version": "1.4.8", + "resolved": "https://registry.npmjs.org/sourcemap-codec/-/sourcemap-codec-1.4.8.tgz", + "integrity": "sha512-9NykojV5Uih4lgo5So5dtw+f0JgJX30KCNI8gwhz2J9A15wD0Ml6tjHKwf6fTSa6fAdVBdZeNOs9eJ71qCk8vA==", + "dev": true + }, + "node_modules/sprintf-js": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/sprintf-js/-/sprintf-js-1.0.3.tgz", + "integrity": "sha1-BOaSb2YolTVPPdAVIDYzuFcpfiw=", + "dev": true + }, + "node_modules/strip-ansi": { + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.1.tgz", + "integrity": "sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==", + "dev": true, + "dependencies": { + "ansi-regex": "^5.0.1" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/strip-json-comments": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/strip-json-comments/-/strip-json-comments-3.1.1.tgz", + "integrity": "sha512-6fPc+R4ihwqP6N/aIv2f1gMH8lOVtWQHoqC4yK6oSDVVocumAsfCqjkXnqiYMhmMwS/mEHLp7Vehlt3ql6lEig==", + "dev": true, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/supports-color": { + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", + "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", + "dev": true, + "dependencies": { + "has-flag": "^4.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/svg-tags": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/svg-tags/-/svg-tags-1.0.0.tgz", + "integrity": "sha1-WPcc7jvVGbWdSyqEO2x95krAR2Q=", + "dev": true + }, + "node_modules/text-table": { + "version": "0.2.0", + "resolved": "https://registry.npmjs.org/text-table/-/text-table-0.2.0.tgz", + "integrity": "sha1-f17oI66AUgfACvLfSoTsP8+lcLQ=", + "dev": true + }, + "node_modules/to-fast-properties": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/to-fast-properties/-/to-fast-properties-2.0.0.tgz", + "integrity": "sha1-3F5pjL0HkmW8c+A3doGk5Og/YW4=", + "dev": true, + "engines": { + "node": ">=4" + } + }, + "node_modules/to-regex-range": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/to-regex-range/-/to-regex-range-5.0.1.tgz", + "integrity": "sha512-65P7iz6X5yEr1cwcgvQxbbIw7Uk3gOy5dIdtZ4rDveLqhrdJP+Li/Hx6tyK0NEb+2GCyneCMJiGqrADCSNk8sQ==", + "dev": true, + "dependencies": { + "is-number": "^7.0.0" + }, + "engines": { + "node": ">=8.0" + } + }, + "node_modules/type-check": { + "version": "0.4.0", + "resolved": "https://registry.npmjs.org/type-check/-/type-check-0.4.0.tgz", + "integrity": "sha512-XleUoc9uwGXqjWwXaUTZAmzMcFZ5858QA2vvx1Ur5xIcixXIP+8LnFDgRplU30us6teqdlskFfu+ae4K79Ooew==", + "dev": true, + "dependencies": { + "prelude-ls": "^1.2.1" + }, + "engines": { + "node": ">= 0.8.0" + } + }, + "node_modules/type-fest": { + "version": "0.20.2", + "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.20.2.tgz", + "integrity": "sha512-Ne+eE4r0/iWnpAxD852z3A+N0Bt5RN//NjJwRd2VFHEmrywxf5vsZlh4R6lixl6B+wz/8d+maTSAkN1FIkI3LQ==", + "dev": true, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/universalify": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/universalify/-/universalify-2.0.0.tgz", + "integrity": "sha512-hAZsKq7Yy11Zu1DE0OzWjw7nnLZmJZYTDZZyEFHZdUhV8FkH5MCfoU1XMaxXovpyW5nq5scPqq0ZDP9Zyl04oQ==", + "dev": true, + "engines": { + "node": ">= 10.0.0" + } + }, + "node_modules/uri-js": { + "version": "4.4.1", + "resolved": "https://registry.npmjs.org/uri-js/-/uri-js-4.4.1.tgz", + "integrity": "sha512-7rKUyy33Q1yc98pQ1DAmLtwX109F7TIfWlW1Ydo8Wl1ii1SeHieeh0HHfPeL2fMXK6z0s8ecKs9frCuLJvndBg==", + "dev": true, + "dependencies": { + "punycode": "^2.1.0" + } + }, + "node_modules/util-deprecate": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/util-deprecate/-/util-deprecate-1.0.2.tgz", + "integrity": "sha1-RQ1Nyfpw3nMnYvvS1KKJgUGaDM8=", + "dev": true + }, + "node_modules/v8-compile-cache": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/v8-compile-cache/-/v8-compile-cache-2.3.0.tgz", + "integrity": "sha512-l8lCEmLcLYZh4nbunNZvQCJc5pv7+RCwa8q/LdUx8u7lsWvPDKmpodJAJNwkAhJC//dFY48KuIEmjtd4RViDrA==", + "dev": true + }, + "node_modules/vite": { + "version": "2.6.7", + "resolved": "https://registry.npmjs.org/vite/-/vite-2.6.7.tgz", + "integrity": "sha512-ewk//jve9k6vlU8PfJmWUHN8k0YYdw4VaKOMvoQ3nT2Pb6k5OSMKQi4jPOzVH/TlUqMsCrq7IJ80xcuDDVyigg==", + "dev": true, + "dependencies": { + "esbuild": "^0.13.2", + "postcss": "^8.3.8", + "resolve": "^1.20.0", + "rollup": "^2.57.0" + }, + "bin": { + "vite": "bin/vite.js" + }, + "engines": { + "node": ">=12.2.0" + }, + "optionalDependencies": { + "fsevents": "~2.3.2" + }, + "peerDependencies": { + "less": "*", + "sass": "*", + "stylus": "*" + }, + "peerDependenciesMeta": { + "less": { + "optional": true + }, + "sass": { + "optional": true + }, + "stylus": { + "optional": true + } + } + }, + "node_modules/vite-plugin-vue2": { + "version": "1.8.2", + "resolved": "https://registry.npmjs.org/vite-plugin-vue2/-/vite-plugin-vue2-1.8.2.tgz", + "integrity": "sha512-qQXLH+yVn5o7cq+KJULyty4OxWKQ3lsvrYx8QkLO78LsM+/r1gEytfcXiqewnvgP7eTkJ5Pd/kHbfDce1Pim/w==", + "dev": true, + "dependencies": { + "@babel/core": "^7.11.6", + "@babel/parser": "^7.13.10", + "@babel/plugin-proposal-class-properties": "^7.14.5", + "@babel/plugin-proposal-decorators": "^7.14.5", + "@babel/plugin-transform-typescript": "^7.13.0", + "@rollup/pluginutils": "^4.1.0", + "@vue/babel-helper-vue-jsx-merge-props": "^1.2.1", + "@vue/babel-preset-jsx": "^1.2.4", + "@vue/component-compiler-utils": "^3.2.0", + "babel-preset-env": "^1.7.0", + "consolidate": "^0.16.0", + "debug": "^4.3.1", + "fs-extra": "^9.0.1", + "hash-sum": "^2.0.0", + "magic-string": "^0.25.7", + "prettier": "^2.0.5", + "querystring": "^0.2.0", + "rollup": "^2.35.1", + "slash": "^3.0.0", + "source-map": "^0.7.3", + "vue-template-es2015-compiler": "^1.9.1" + }, + "peerDependencies": { + "vite": "^2.0.0-beta.23", + "vue-template-compiler": "^2.2.0" + } + }, + "node_modules/vue": { + "version": "2.6.14", + "resolved": "https://registry.npmjs.org/vue/-/vue-2.6.14.tgz", + "integrity": "sha512-x2284lgYvjOMj3Za7kqzRcUSxBboHqtgRE2zlos1qWaOye5yUmHn42LB1250NJBLRwEcdrB0JRwyPTEPhfQjiQ==", + "dev": true + }, + "node_modules/vue-eslint-parser": { + "version": "7.11.0", + "resolved": "https://registry.npmjs.org/vue-eslint-parser/-/vue-eslint-parser-7.11.0.tgz", + "integrity": "sha512-qh3VhDLeh773wjgNTl7ss0VejY9bMMa0GoDG2fQVyDzRFdiU3L7fw74tWZDHNQXdZqxO3EveQroa9ct39D2nqg==", + "dev": true, + "dependencies": { + "debug": "^4.1.1", + "eslint-scope": "^5.1.1", + "eslint-visitor-keys": "^1.1.0", + "espree": "^6.2.1", + "esquery": "^1.4.0", + "lodash": "^4.17.21", + "semver": "^6.3.0" + }, + "engines": { + "node": ">=8.10" + }, + "funding": { + "url": "https://github.com/sponsors/mysticatea" + }, + "peerDependencies": { + "eslint": ">=5.0.0" + } + }, + "node_modules/vue-eslint-parser/node_modules/acorn": { + "version": "7.4.1", + "resolved": "https://registry.npmjs.org/acorn/-/acorn-7.4.1.tgz", + "integrity": "sha512-nQyp0o1/mNdbTO1PO6kHkwSrmgZ0MT/jCCpNiwbUjGoRN4dlBhqJtoQuCnEOKzgTVwg0ZWiCoQy6SxMebQVh8A==", + "dev": true, + "bin": { + "acorn": "bin/acorn" + }, + "engines": { + "node": ">=0.4.0" + } + }, + "node_modules/vue-eslint-parser/node_modules/eslint-scope": { + "version": "5.1.1", + "resolved": "https://registry.npmjs.org/eslint-scope/-/eslint-scope-5.1.1.tgz", + "integrity": "sha512-2NxwbF/hZ0KpepYN0cNbo+FN6XoK7GaHlQhgx/hIZl6Va0bF45RQOOwhLIy8lQDbuCiadSLCBnH2CFYquit5bw==", + "dev": true, + "dependencies": { + "esrecurse": "^4.3.0", + "estraverse": "^4.1.1" + }, + "engines": { + "node": ">=8.0.0" + } + }, + "node_modules/vue-eslint-parser/node_modules/eslint-visitor-keys": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-1.3.0.tgz", + "integrity": "sha512-6J72N8UNa462wa/KFODt/PJ3IU60SDpC3QXC1Hjc1BXXpfL2C9R5+AU7jhe0F6GREqVMh4Juu+NY7xn+6dipUQ==", + "dev": true, + "engines": { + "node": ">=4" + } + }, + "node_modules/vue-eslint-parser/node_modules/espree": { + "version": "6.2.1", + "resolved": "https://registry.npmjs.org/espree/-/espree-6.2.1.tgz", + "integrity": "sha512-ysCxRQY3WaXJz9tdbWOwuWr5Y/XrPTGX9Kiz3yoUXwW0VZ4w30HTkQLaGx/+ttFjF8i+ACbArnB4ce68a9m5hw==", + "dev": true, + "dependencies": { + "acorn": "^7.1.1", + "acorn-jsx": "^5.2.0", + "eslint-visitor-keys": "^1.1.0" + }, + "engines": { + "node": ">=6.0.0" + } + }, + "node_modules/vue-eslint-parser/node_modules/estraverse": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-4.3.0.tgz", + "integrity": "sha512-39nnKffWz8xN1BU/2c79n9nB9HDzo0niYUqx6xyqUnyoAnQyyWpOTdZEeiCch8BBu515t4wp9ZmgVfVhn9EBpw==", + "dev": true, + "engines": { + "node": ">=4.0" + } + }, + "node_modules/vue-eslint-parser/node_modules/semver": { + "version": "6.3.0", + "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.0.tgz", + "integrity": "sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw==", + "dev": true, + "bin": { + "semver": "bin/semver.js" + } + }, + "node_modules/vue-template-compiler": { + "version": "2.6.14", + "resolved": "https://registry.npmjs.org/vue-template-compiler/-/vue-template-compiler-2.6.14.tgz", + "integrity": "sha512-ODQS1SyMbjKoO1JBJZojSw6FE4qnh9rIpUZn2EUT86FKizx9uH5z6uXiIrm4/Nb/gwxTi/o17ZDEGWAXHvtC7g==", + "dev": true, + "dependencies": { + "de-indent": "^1.0.2", + "he": "^1.1.0" + } + }, + "node_modules/vue-template-es2015-compiler": { + "version": "1.9.1", + "resolved": "https://registry.npmjs.org/vue-template-es2015-compiler/-/vue-template-es2015-compiler-1.9.1.tgz", + "integrity": "sha512-4gDntzrifFnCEvyoO8PqyJDmguXgVPxKiIxrBKjIowvL9l+N66196+72XVYR8BBf1Uv1Fgt3bGevJ+sEmxfZzw==", + "dev": true + }, + "node_modules/which": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/which/-/which-2.0.2.tgz", + "integrity": "sha512-BLI3Tl1TW3Pvl70l3yq3Y64i+awpwXqsGBYWkkqMtnbXgrMD+yj7rhW0kuEDxzJaYXGjEW5ogapKNMEKNMjibA==", + "dev": true, + "dependencies": { + "isexe": "^2.0.0" + }, + "bin": { + "node-which": "bin/node-which" + }, + "engines": { + "node": ">= 8" + } + }, + "node_modules/word-wrap": { + "version": "1.2.3", + "resolved": "https://registry.npmjs.org/word-wrap/-/word-wrap-1.2.3.tgz", + "integrity": "sha512-Hz/mrNwitNRh/HUAtM/VT/5VH+ygD6DV7mYKZAtHOrbs8U7lvPS6xf7EJKMF0uW1KJCl0H701g3ZGus+muE5vQ==", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/wrappy": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/wrappy/-/wrappy-1.0.2.tgz", + "integrity": "sha1-tSQ9jz7BqjXxNkYFvA0QNuMKtp8=", + "dev": true + }, + "node_modules/yallist": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/yallist/-/yallist-4.0.0.tgz", + "integrity": "sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==", + "dev": true + } + }, + "dependencies": { + "@babel/code-frame": { + "version": "7.15.8", + "resolved": "https://registry.npmjs.org/@babel/code-frame/-/code-frame-7.15.8.tgz", + "integrity": "sha512-2IAnmn8zbvC/jKYhq5Ki9I+DwjlrtMPUCH/CpHvqI4dNnlwHwsxoIhlc8WcYY5LSYknXQtAlFYuHfqAFCvQ4Wg==", + "dev": true, + "requires": { + "@babel/highlight": "^7.14.5" + } + }, + "@babel/compat-data": { + "version": "7.15.0", + "resolved": "https://registry.npmjs.org/@babel/compat-data/-/compat-data-7.15.0.tgz", + "integrity": "sha512-0NqAC1IJE0S0+lL1SWFMxMkz1pKCNCjI4tr2Zx4LJSXxCLAdr6KyArnY+sno5m3yH9g737ygOyPABDsnXkpxiA==", + "dev": true + }, + "@babel/core": { + "version": "7.15.8", + "resolved": "https://registry.npmjs.org/@babel/core/-/core-7.15.8.tgz", + "integrity": "sha512-3UG9dsxvYBMYwRv+gS41WKHno4K60/9GPy1CJaH6xy3Elq8CTtvtjT5R5jmNhXfCYLX2mTw+7/aq5ak/gOE0og==", + "dev": true, + "requires": { + "@babel/code-frame": "^7.15.8", + "@babel/generator": "^7.15.8", + "@babel/helper-compilation-targets": "^7.15.4", + "@babel/helper-module-transforms": "^7.15.8", + "@babel/helpers": "^7.15.4", + "@babel/parser": "^7.15.8", + "@babel/template": "^7.15.4", + "@babel/traverse": "^7.15.4", + "@babel/types": "^7.15.6", + "convert-source-map": "^1.7.0", + "debug": "^4.1.0", + "gensync": "^1.0.0-beta.2", + "json5": "^2.1.2", + "semver": "^6.3.0", + "source-map": "^0.5.0" + }, + "dependencies": { + "semver": { + "version": "6.3.0", + "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.0.tgz", + "integrity": "sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw==", + "dev": true + }, + "source-map": { + "version": "0.5.7", + "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.5.7.tgz", + "integrity": "sha1-igOdLRAh0i0eoUyA2OpGi6LvP8w=", + "dev": true + } + } + }, + "@babel/generator": { + "version": "7.15.8", + "resolved": "https://registry.npmjs.org/@babel/generator/-/generator-7.15.8.tgz", + "integrity": "sha512-ECmAKstXbp1cvpTTZciZCgfOt6iN64lR0d+euv3UZisU5awfRawOvg07Utn/qBGuH4bRIEZKrA/4LzZyXhZr8g==", + "dev": true, + "requires": { + "@babel/types": "^7.15.6", + "jsesc": "^2.5.1", + "source-map": "^0.5.0" + }, + "dependencies": { + "source-map": { + "version": "0.5.7", + "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.5.7.tgz", + "integrity": "sha1-igOdLRAh0i0eoUyA2OpGi6LvP8w=", + "dev": true + } + } + }, + "@babel/helper-annotate-as-pure": { + "version": "7.15.4", + "resolved": "https://registry.npmjs.org/@babel/helper-annotate-as-pure/-/helper-annotate-as-pure-7.15.4.tgz", + "integrity": "sha512-QwrtdNvUNsPCj2lfNQacsGSQvGX8ee1ttrBrcozUP2Sv/jylewBP/8QFe6ZkBsC8T/GYWonNAWJV4aRR9AL2DA==", + "dev": true, + "requires": { + "@babel/types": "^7.15.4" + } + }, + "@babel/helper-compilation-targets": { + "version": "7.15.4", + "resolved": "https://registry.npmjs.org/@babel/helper-compilation-targets/-/helper-compilation-targets-7.15.4.tgz", + "integrity": "sha512-rMWPCirulnPSe4d+gwdWXLfAXTTBj8M3guAf5xFQJ0nvFY7tfNAFnWdqaHegHlgDZOCT4qvhF3BYlSJag8yhqQ==", + "dev": true, + "requires": { + "@babel/compat-data": "^7.15.0", + "@babel/helper-validator-option": "^7.14.5", + "browserslist": "^4.16.6", + "semver": "^6.3.0" + }, + "dependencies": { + "semver": { + "version": "6.3.0", + "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.0.tgz", + "integrity": "sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw==", + "dev": true + } + } + }, + "@babel/helper-create-class-features-plugin": { + "version": "7.15.4", + "resolved": "https://registry.npmjs.org/@babel/helper-create-class-features-plugin/-/helper-create-class-features-plugin-7.15.4.tgz", + "integrity": "sha512-7ZmzFi+DwJx6A7mHRwbuucEYpyBwmh2Ca0RvI6z2+WLZYCqV0JOaLb+u0zbtmDicebgKBZgqbYfLaKNqSgv5Pw==", + "dev": true, + "requires": { + "@babel/helper-annotate-as-pure": "^7.15.4", + "@babel/helper-function-name": "^7.15.4", + "@babel/helper-member-expression-to-functions": "^7.15.4", + "@babel/helper-optimise-call-expression": "^7.15.4", + "@babel/helper-replace-supers": "^7.15.4", + "@babel/helper-split-export-declaration": "^7.15.4" + } + }, + "@babel/helper-function-name": { + "version": "7.15.4", + "resolved": "https://registry.npmjs.org/@babel/helper-function-name/-/helper-function-name-7.15.4.tgz", + "integrity": "sha512-Z91cOMM4DseLIGOnog+Z8OI6YseR9bua+HpvLAQ2XayUGU+neTtX+97caALaLdyu53I/fjhbeCnWnRH1O3jFOw==", + "dev": true, + "requires": { + "@babel/helper-get-function-arity": "^7.15.4", + "@babel/template": "^7.15.4", + "@babel/types": "^7.15.4" + } + }, + "@babel/helper-get-function-arity": { + "version": "7.15.4", + "resolved": "https://registry.npmjs.org/@babel/helper-get-function-arity/-/helper-get-function-arity-7.15.4.tgz", + "integrity": "sha512-1/AlxSF92CmGZzHnC515hm4SirTxtpDnLEJ0UyEMgTMZN+6bxXKg04dKhiRx5Enel+SUA1G1t5Ed/yQia0efrA==", + "dev": true, + "requires": { + "@babel/types": "^7.15.4" + } + }, + "@babel/helper-hoist-variables": { + "version": "7.15.4", + "resolved": "https://registry.npmjs.org/@babel/helper-hoist-variables/-/helper-hoist-variables-7.15.4.tgz", + "integrity": "sha512-VTy085egb3jUGVK9ycIxQiPbquesq0HUQ+tPO0uv5mPEBZipk+5FkRKiWq5apuyTE9FUrjENB0rCf8y+n+UuhA==", + "dev": true, + "requires": { + "@babel/types": "^7.15.4" + } + }, + "@babel/helper-member-expression-to-functions": { + "version": "7.15.4", + "resolved": "https://registry.npmjs.org/@babel/helper-member-expression-to-functions/-/helper-member-expression-to-functions-7.15.4.tgz", + "integrity": "sha512-cokOMkxC/BTyNP1AlY25HuBWM32iCEsLPI4BHDpJCHHm1FU2E7dKWWIXJgQgSFiu4lp8q3bL1BIKwqkSUviqtA==", + "dev": true, + "requires": { + "@babel/types": "^7.15.4" + } + }, + "@babel/helper-module-imports": { + "version": "7.15.4", + "resolved": "https://registry.npmjs.org/@babel/helper-module-imports/-/helper-module-imports-7.15.4.tgz", + "integrity": "sha512-jeAHZbzUwdW/xHgHQ3QmWR4Jg6j15q4w/gCfwZvtqOxoo5DKtLHk8Bsf4c5RZRC7NmLEs+ohkdq8jFefuvIxAA==", + "dev": true, + "requires": { + "@babel/types": "^7.15.4" + } + }, + "@babel/helper-module-transforms": { + "version": "7.15.8", + "resolved": "https://registry.npmjs.org/@babel/helper-module-transforms/-/helper-module-transforms-7.15.8.tgz", + "integrity": "sha512-DfAfA6PfpG8t4S6npwzLvTUpp0sS7JrcuaMiy1Y5645laRJIp/LiLGIBbQKaXSInK8tiGNI7FL7L8UvB8gdUZg==", + "dev": true, + "requires": { + "@babel/helper-module-imports": "^7.15.4", + "@babel/helper-replace-supers": "^7.15.4", + "@babel/helper-simple-access": "^7.15.4", + "@babel/helper-split-export-declaration": "^7.15.4", + "@babel/helper-validator-identifier": "^7.15.7", + "@babel/template": "^7.15.4", + "@babel/traverse": "^7.15.4", + "@babel/types": "^7.15.6" + } + }, + "@babel/helper-optimise-call-expression": { + "version": "7.15.4", + "resolved": "https://registry.npmjs.org/@babel/helper-optimise-call-expression/-/helper-optimise-call-expression-7.15.4.tgz", + "integrity": "sha512-E/z9rfbAOt1vDW1DR7k4SzhzotVV5+qMciWV6LaG1g4jeFrkDlJedjtV4h0i4Q/ITnUu+Pk08M7fczsB9GXBDw==", + "dev": true, + "requires": { + "@babel/types": "^7.15.4" + } + }, + "@babel/helper-plugin-utils": { + "version": "7.14.5", + "resolved": "https://registry.npmjs.org/@babel/helper-plugin-utils/-/helper-plugin-utils-7.14.5.tgz", + "integrity": "sha512-/37qQCE3K0vvZKwoK4XU/irIJQdIfCJuhU5eKnNxpFDsOkgFaUAwbv+RYw6eYgsC0E4hS7r5KqGULUogqui0fQ==", + "dev": true + }, + "@babel/helper-replace-supers": { + "version": "7.15.4", + "resolved": "https://registry.npmjs.org/@babel/helper-replace-supers/-/helper-replace-supers-7.15.4.tgz", + "integrity": "sha512-/ztT6khaXF37MS47fufrKvIsiQkx1LBRvSJNzRqmbyeZnTwU9qBxXYLaaT/6KaxfKhjs2Wy8kG8ZdsFUuWBjzw==", + "dev": true, + "requires": { + "@babel/helper-member-expression-to-functions": "^7.15.4", + "@babel/helper-optimise-call-expression": "^7.15.4", + "@babel/traverse": "^7.15.4", + "@babel/types": "^7.15.4" + } + }, + "@babel/helper-simple-access": { + "version": "7.15.4", + "resolved": "https://registry.npmjs.org/@babel/helper-simple-access/-/helper-simple-access-7.15.4.tgz", + "integrity": "sha512-UzazrDoIVOZZcTeHHEPYrr1MvTR/K+wgLg6MY6e1CJyaRhbibftF6fR2KU2sFRtI/nERUZR9fBd6aKgBlIBaPg==", + "dev": true, + "requires": { + "@babel/types": "^7.15.4" + } + }, + "@babel/helper-split-export-declaration": { + "version": "7.15.4", + "resolved": "https://registry.npmjs.org/@babel/helper-split-export-declaration/-/helper-split-export-declaration-7.15.4.tgz", + "integrity": "sha512-HsFqhLDZ08DxCpBdEVtKmywj6PQbwnF6HHybur0MAnkAKnlS6uHkwnmRIkElB2Owpfb4xL4NwDmDLFubueDXsw==", + "dev": true, + "requires": { + "@babel/types": "^7.15.4" + } + }, + "@babel/helper-validator-identifier": { + "version": "7.15.7", + "resolved": "https://registry.npmjs.org/@babel/helper-validator-identifier/-/helper-validator-identifier-7.15.7.tgz", + "integrity": "sha512-K4JvCtQqad9OY2+yTU8w+E82ywk/fe+ELNlt1G8z3bVGlZfn/hOcQQsUhGhW/N+tb3fxK800wLtKOE/aM0m72w==", + "dev": true + }, + "@babel/helper-validator-option": { + "version": "7.14.5", + "resolved": "https://registry.npmjs.org/@babel/helper-validator-option/-/helper-validator-option-7.14.5.tgz", + "integrity": "sha512-OX8D5eeX4XwcroVW45NMvoYaIuFI+GQpA2a8Gi+X/U/cDUIRsV37qQfF905F0htTRCREQIB4KqPeaveRJUl3Ow==", + "dev": true + }, + "@babel/helpers": { + "version": "7.15.4", + "resolved": "https://registry.npmjs.org/@babel/helpers/-/helpers-7.15.4.tgz", + "integrity": "sha512-V45u6dqEJ3w2rlryYYXf6i9rQ5YMNu4FLS6ngs8ikblhu2VdR1AqAd6aJjBzmf2Qzh6KOLqKHxEN9+TFbAkAVQ==", + "dev": true, + "requires": { + "@babel/template": "^7.15.4", + "@babel/traverse": "^7.15.4", + "@babel/types": "^7.15.4" + } + }, + "@babel/highlight": { + "version": "7.14.5", + "resolved": "https://registry.npmjs.org/@babel/highlight/-/highlight-7.14.5.tgz", + "integrity": "sha512-qf9u2WFWVV0MppaL877j2dBtQIDgmidgjGk5VIMw3OadXvYaXn66U1BFlH2t4+t3i+8PhedppRv+i40ABzd+gg==", + "dev": true, + "requires": { + "@babel/helper-validator-identifier": "^7.14.5", + "chalk": "^2.0.0", + "js-tokens": "^4.0.0" + }, + "dependencies": { + "ansi-styles": { + "version": "3.2.1", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-3.2.1.tgz", + "integrity": "sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==", + "dev": true, + "requires": { + "color-convert": "^1.9.0" + } + }, + "chalk": { + "version": "2.4.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.2.tgz", + "integrity": "sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==", + "dev": true, + "requires": { + "ansi-styles": "^3.2.1", + "escape-string-regexp": "^1.0.5", + "supports-color": "^5.3.0" + } + }, + "color-convert": { + "version": "1.9.3", + "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-1.9.3.tgz", + "integrity": "sha512-QfAUtd+vFdAtFQcC8CCyYt1fYWxSqAiK2cSD6zDB8N3cpsEBAvRxp9zOGg6G/SHHJYAT88/az/IuDGALsNVbGg==", + "dev": true, + "requires": { + "color-name": "1.1.3" + } + }, + "color-name": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.3.tgz", + "integrity": "sha1-p9BVi9icQveV3UIyj3QIMcpTvCU=", + "dev": true + }, + "escape-string-regexp": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz", + "integrity": "sha1-G2HAViGQqN/2rjuyzwIAyhMLhtQ=", + "dev": true + }, + "has-flag": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-3.0.0.tgz", + "integrity": "sha1-tdRU3CGZriJWmfNGfloH87lVuv0=", + "dev": true + }, + "supports-color": { + "version": "5.5.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.5.0.tgz", + "integrity": "sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==", + "dev": true, + "requires": { + "has-flag": "^3.0.0" + } + } + } + }, + "@babel/parser": { + "version": "7.15.8", + "resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.15.8.tgz", + "integrity": "sha512-BRYa3wcQnjS/nqI8Ac94pYYpJfojHVvVXJ97+IDCImX4Jc8W8Xv1+47enbruk+q1etOpsQNwnfFcNGw+gtPGxA==", + "dev": true + }, + "@babel/plugin-proposal-class-properties": { + "version": "7.14.5", + "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-class-properties/-/plugin-proposal-class-properties-7.14.5.tgz", + "integrity": "sha512-q/PLpv5Ko4dVc1LYMpCY7RVAAO4uk55qPwrIuJ5QJ8c6cVuAmhu7I/49JOppXL6gXf7ZHzpRVEUZdYoPLM04Gg==", + "dev": true, + "requires": { + "@babel/helper-create-class-features-plugin": "^7.14.5", + "@babel/helper-plugin-utils": "^7.14.5" + } + }, + "@babel/plugin-proposal-decorators": { + "version": "7.15.8", + "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-decorators/-/plugin-proposal-decorators-7.15.8.tgz", + "integrity": "sha512-5n8+xGK7YDrXF+WAORg3P7LlCCdiaAyKLZi22eP2BwTy4kJ0kFUMMDCj4nQ8YrKyNZgjhU/9eRVqONnjB3us8g==", + "dev": true, + "requires": { + "@babel/helper-create-class-features-plugin": "^7.15.4", + "@babel/helper-plugin-utils": "^7.14.5", + "@babel/plugin-syntax-decorators": "^7.14.5" + } + }, + "@babel/plugin-syntax-decorators": { + "version": "7.14.5", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-decorators/-/plugin-syntax-decorators-7.14.5.tgz", + "integrity": "sha512-c4sZMRWL4GSvP1EXy0woIP7m4jkVcEuG8R1TOZxPBPtp4FSM/kiPZub9UIs/Jrb5ZAOzvTUSGYrWsrSu1JvoPw==", + "dev": true, + "requires": { + "@babel/helper-plugin-utils": "^7.14.5" + } + }, + "@babel/plugin-syntax-jsx": { + "version": "7.14.5", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-jsx/-/plugin-syntax-jsx-7.14.5.tgz", + "integrity": "sha512-ohuFIsOMXJnbOMRfX7/w7LocdR6R7whhuRD4ax8IipLcLPlZGJKkBxgHp++U4N/vKyU16/YDQr2f5seajD3jIw==", + "dev": true, + "requires": { + "@babel/helper-plugin-utils": "^7.14.5" + } + }, + "@babel/plugin-syntax-typescript": { + "version": "7.14.5", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-typescript/-/plugin-syntax-typescript-7.14.5.tgz", + "integrity": "sha512-u6OXzDaIXjEstBRRoBCQ/uKQKlbuaeE5in0RvWdA4pN6AhqxTIwUsnHPU1CFZA/amYObMsuWhYfRl3Ch90HD0Q==", + "dev": true, + "requires": { + "@babel/helper-plugin-utils": "^7.14.5" + } + }, + "@babel/plugin-transform-typescript": { + "version": "7.15.8", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-typescript/-/plugin-transform-typescript-7.15.8.tgz", + "integrity": "sha512-ZXIkJpbaf6/EsmjeTbiJN/yMxWPFWvlr7sEG1P95Xb4S4IBcrf2n7s/fItIhsAmOf8oSh3VJPDppO6ExfAfKRQ==", + "dev": true, + "requires": { + "@babel/helper-create-class-features-plugin": "^7.15.4", + "@babel/helper-plugin-utils": "^7.14.5", + "@babel/plugin-syntax-typescript": "^7.14.5" + } + }, + "@babel/template": { + "version": "7.15.4", + "resolved": "https://registry.npmjs.org/@babel/template/-/template-7.15.4.tgz", + "integrity": "sha512-UgBAfEa1oGuYgDIPM2G+aHa4Nlo9Lh6mGD2bDBGMTbYnc38vulXPuC1MGjYILIEmlwl6Rd+BPR9ee3gm20CBtg==", + "dev": true, + "requires": { + "@babel/code-frame": "^7.14.5", + "@babel/parser": "^7.15.4", + "@babel/types": "^7.15.4" + } + }, + "@babel/traverse": { + "version": "7.15.4", + "resolved": "https://registry.npmjs.org/@babel/traverse/-/traverse-7.15.4.tgz", + "integrity": "sha512-W6lQD8l4rUbQR/vYgSuCAE75ADyyQvOpFVsvPPdkhf6lATXAsQIG9YdtOcu8BB1dZ0LKu+Zo3c1wEcbKeuhdlA==", + "dev": true, + "requires": { + "@babel/code-frame": "^7.14.5", + "@babel/generator": "^7.15.4", + "@babel/helper-function-name": "^7.15.4", + "@babel/helper-hoist-variables": "^7.15.4", + "@babel/helper-split-export-declaration": "^7.15.4", + "@babel/parser": "^7.15.4", + "@babel/types": "^7.15.4", + "debug": "^4.1.0", + "globals": "^11.1.0" + }, + "dependencies": { + "globals": { + "version": "11.12.0", + "resolved": "https://registry.npmjs.org/globals/-/globals-11.12.0.tgz", + "integrity": "sha512-WOBp/EEGUiIsJSp7wcv/y6MO+lV9UoncWqxuFfm8eBwzWNgyfBd6Gz+IeKQ9jCmyhoH99g15M3T+QaVHFjizVA==", + "dev": true + } + } + }, + "@babel/types": { + "version": "7.15.6", + "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.15.6.tgz", + "integrity": "sha512-BPU+7QhqNjmWyDO0/vitH/CuhpV8ZmK1wpKva8nuyNF5MJfuRNWMc+hc14+u9xT93kvykMdncrJT19h74uB1Ig==", + "dev": true, + "requires": { + "@babel/helper-validator-identifier": "^7.14.9", + "to-fast-properties": "^2.0.0" + } + }, + "@eslint/eslintrc": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/@eslint/eslintrc/-/eslintrc-1.0.3.tgz", + "integrity": "sha512-DHI1wDPoKCBPoLZA3qDR91+3te/wDSc1YhKg3jR8NxKKRJq2hwHwcWv31cSwSYvIBrmbENoYMWcenW8uproQqg==", + "dev": true, + "requires": { + "ajv": "^6.12.4", + "debug": "^4.3.2", + "espree": "^9.0.0", + "globals": "^13.9.0", + "ignore": "^4.0.6", + "import-fresh": "^3.2.1", + "js-yaml": "^3.13.1", + "minimatch": "^3.0.4", + "strip-json-comments": "^3.1.1" + }, + "dependencies": { + "argparse": { + "version": "1.0.10", + "resolved": "https://registry.npmjs.org/argparse/-/argparse-1.0.10.tgz", + "integrity": "sha512-o5Roy6tNG4SL/FOkCAN6RzjiakZS25RLYFrcMttJqbdd8BWrnA+fGz57iN5Pb06pvBGvl5gQ0B48dJlslXvoTg==", + "dev": true, + "requires": { + "sprintf-js": "~1.0.2" + } + }, + "js-yaml": { + "version": "3.14.1", + "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-3.14.1.tgz", + "integrity": "sha512-okMH7OXXJ7YrN9Ok3/SXrnu4iX9yOk+25nqX4imS2npuvTYDmo/QEZoqwZkYaIDk3jVvBOTOIEgEhaLOynBS9g==", + "dev": true, + "requires": { + "argparse": "^1.0.7", + "esprima": "^4.0.0" + } + } + } + }, + "@humanwhocodes/config-array": { + "version": "0.6.0", + "resolved": "https://registry.npmjs.org/@humanwhocodes/config-array/-/config-array-0.6.0.tgz", + "integrity": "sha512-JQlEKbcgEUjBFhLIF4iqM7u/9lwgHRBcpHrmUNCALK0Q3amXN6lxdoXLnF0sm11E9VqTmBALR87IlUg1bZ8A9A==", + "dev": true, + "requires": { + "@humanwhocodes/object-schema": "^1.2.0", + "debug": "^4.1.1", + "minimatch": "^3.0.4" + } + }, + "@humanwhocodes/object-schema": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/@humanwhocodes/object-schema/-/object-schema-1.2.0.tgz", + "integrity": "sha512-wdppn25U8z/2yiaT6YGquE6X8sSv7hNMWSXYSSU1jGv/yd6XqjXgTDJ8KP4NgjTXfJ3GbRjeeb8RTV7a/VpM+w==", + "dev": true + }, + "@rollup/pluginutils": { + "version": "4.1.1", + "resolved": "https://registry.npmjs.org/@rollup/pluginutils/-/pluginutils-4.1.1.tgz", + "integrity": "sha512-clDjivHqWGXi7u+0d2r2sBi4Ie6VLEAzWMIkvJLnDmxoOhBYOTfzGbOQBA32THHm11/LiJbd01tJUpJsbshSWQ==", + "dev": true, + "requires": { + "estree-walker": "^2.0.1", + "picomatch": "^2.2.2" + } + }, + "@vue/babel-helper-vue-jsx-merge-props": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/@vue/babel-helper-vue-jsx-merge-props/-/babel-helper-vue-jsx-merge-props-1.2.1.tgz", + "integrity": "sha512-QOi5OW45e2R20VygMSNhyQHvpdUwQZqGPc748JLGCYEy+yp8fNFNdbNIGAgZmi9e+2JHPd6i6idRuqivyicIkA==", + "dev": true + }, + "@vue/babel-plugin-transform-vue-jsx": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/@vue/babel-plugin-transform-vue-jsx/-/babel-plugin-transform-vue-jsx-1.2.1.tgz", + "integrity": "sha512-HJuqwACYehQwh1fNT8f4kyzqlNMpBuUK4rSiSES5D4QsYncv5fxFsLyrxFPG2ksO7t5WP+Vgix6tt6yKClwPzA==", + "dev": true, + "requires": { + "@babel/helper-module-imports": "^7.0.0", + "@babel/plugin-syntax-jsx": "^7.2.0", + "@vue/babel-helper-vue-jsx-merge-props": "^1.2.1", + "html-tags": "^2.0.0", + "lodash.kebabcase": "^4.1.1", + "svg-tags": "^1.0.0" + } + }, + "@vue/babel-preset-jsx": { + "version": "1.2.4", + "resolved": "https://registry.npmjs.org/@vue/babel-preset-jsx/-/babel-preset-jsx-1.2.4.tgz", + "integrity": "sha512-oRVnmN2a77bYDJzeGSt92AuHXbkIxbf/XXSE3klINnh9AXBmVS1DGa1f0d+dDYpLfsAKElMnqKTQfKn7obcL4w==", + "dev": true, + "requires": { + "@vue/babel-helper-vue-jsx-merge-props": "^1.2.1", + "@vue/babel-plugin-transform-vue-jsx": "^1.2.1", + "@vue/babel-sugar-composition-api-inject-h": "^1.2.1", + "@vue/babel-sugar-composition-api-render-instance": "^1.2.4", + "@vue/babel-sugar-functional-vue": "^1.2.2", + "@vue/babel-sugar-inject-h": "^1.2.2", + "@vue/babel-sugar-v-model": "^1.2.3", + "@vue/babel-sugar-v-on": "^1.2.3" + } + }, + "@vue/babel-sugar-composition-api-inject-h": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/@vue/babel-sugar-composition-api-inject-h/-/babel-sugar-composition-api-inject-h-1.2.1.tgz", + "integrity": "sha512-4B3L5Z2G+7s+9Bwbf+zPIifkFNcKth7fQwekVbnOA3cr3Pq71q71goWr97sk4/yyzH8phfe5ODVzEjX7HU7ItQ==", + "dev": true, + "requires": { + "@babel/plugin-syntax-jsx": "^7.2.0" + } + }, + "@vue/babel-sugar-composition-api-render-instance": { + "version": "1.2.4", + "resolved": "https://registry.npmjs.org/@vue/babel-sugar-composition-api-render-instance/-/babel-sugar-composition-api-render-instance-1.2.4.tgz", + "integrity": "sha512-joha4PZznQMsxQYXtR3MnTgCASC9u3zt9KfBxIeuI5g2gscpTsSKRDzWQt4aqNIpx6cv8On7/m6zmmovlNsG7Q==", + "dev": true, + "requires": { + "@babel/plugin-syntax-jsx": "^7.2.0" + } + }, + "@vue/babel-sugar-functional-vue": { + "version": "1.2.2", + "resolved": "https://registry.npmjs.org/@vue/babel-sugar-functional-vue/-/babel-sugar-functional-vue-1.2.2.tgz", + "integrity": "sha512-JvbgGn1bjCLByIAU1VOoepHQ1vFsroSA/QkzdiSs657V79q6OwEWLCQtQnEXD/rLTA8rRit4rMOhFpbjRFm82w==", + "dev": true, + "requires": { + "@babel/plugin-syntax-jsx": "^7.2.0" + } + }, + "@vue/babel-sugar-inject-h": { + "version": "1.2.2", + "resolved": "https://registry.npmjs.org/@vue/babel-sugar-inject-h/-/babel-sugar-inject-h-1.2.2.tgz", + "integrity": "sha512-y8vTo00oRkzQTgufeotjCLPAvlhnpSkcHFEp60+LJUwygGcd5Chrpn5480AQp/thrxVm8m2ifAk0LyFel9oCnw==", + "dev": true, + "requires": { + "@babel/plugin-syntax-jsx": "^7.2.0" + } + }, + "@vue/babel-sugar-v-model": { + "version": "1.2.3", + "resolved": "https://registry.npmjs.org/@vue/babel-sugar-v-model/-/babel-sugar-v-model-1.2.3.tgz", + "integrity": "sha512-A2jxx87mySr/ulAsSSyYE8un6SIH0NWHiLaCWpodPCVOlQVODCaSpiR4+IMsmBr73haG+oeCuSvMOM+ttWUqRQ==", + "dev": true, + "requires": { + "@babel/plugin-syntax-jsx": "^7.2.0", + "@vue/babel-helper-vue-jsx-merge-props": "^1.2.1", + "@vue/babel-plugin-transform-vue-jsx": "^1.2.1", + "camelcase": "^5.0.0", + "html-tags": "^2.0.0", + "svg-tags": "^1.0.0" + } + }, + "@vue/babel-sugar-v-on": { + "version": "1.2.3", + "resolved": "https://registry.npmjs.org/@vue/babel-sugar-v-on/-/babel-sugar-v-on-1.2.3.tgz", + "integrity": "sha512-kt12VJdz/37D3N3eglBywV8GStKNUhNrsxChXIV+o0MwVXORYuhDTHJRKPgLJRb/EY3vM2aRFQdxJBp9CLikjw==", + "dev": true, + "requires": { + "@babel/plugin-syntax-jsx": "^7.2.0", + "@vue/babel-plugin-transform-vue-jsx": "^1.2.1", + "camelcase": "^5.0.0" + } + }, + "@vue/component-compiler-utils": { + "version": "3.2.2", + "resolved": "https://registry.npmjs.org/@vue/component-compiler-utils/-/component-compiler-utils-3.2.2.tgz", + "integrity": "sha512-rAYMLmgMuqJFWAOb3Awjqqv5X3Q3hVr4jH/kgrFJpiU0j3a90tnNBplqbj+snzrgZhC9W128z+dtgMifOiMfJg==", + "dev": true, + "requires": { + "consolidate": "^0.15.1", + "hash-sum": "^1.0.2", + "lru-cache": "^4.1.2", + "merge-source-map": "^1.1.0", + "postcss": "^7.0.36", + "postcss-selector-parser": "^6.0.2", + "prettier": "^1.18.2", + "source-map": "~0.6.1", + "vue-template-es2015-compiler": "^1.9.0" + }, + "dependencies": { + "consolidate": { + "version": "0.15.1", + "resolved": "https://registry.npmjs.org/consolidate/-/consolidate-0.15.1.tgz", + "integrity": "sha512-DW46nrsMJgy9kqAbPt5rKaCr7uFtpo4mSUvLHIUbJEjm0vo+aY5QLwBUq3FK4tRnJr/X0Psc0C4jf/h+HtXSMw==", + "dev": true, + "requires": { + "bluebird": "^3.1.1" + } + }, + "hash-sum": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/hash-sum/-/hash-sum-1.0.2.tgz", + "integrity": "sha1-M7QHd3VMZDJXPBIMw4CLvRDUfwQ=", + "dev": true + }, + "lru-cache": { + "version": "4.1.5", + "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-4.1.5.tgz", + "integrity": "sha512-sWZlbEP2OsHNkXrMl5GYk/jKk70MBng6UU4YI/qGDYbgf6YbP4EvmqISbXCoJiRKs+1bSpFHVgQxvJ17F2li5g==", + "dev": true, + "requires": { + "pseudomap": "^1.0.2", + "yallist": "^2.1.2" + } + }, + "postcss": { + "version": "7.0.39", + "resolved": "https://registry.npmjs.org/postcss/-/postcss-7.0.39.tgz", + "integrity": "sha512-yioayjNbHn6z1/Bywyb2Y4s3yvDAeXGOyxqD+LnVOinq6Mdmd++SW2wUNVzavyyHxd6+DxzWGIuosg6P1Rj8uA==", + "dev": true, + "requires": { + "picocolors": "^0.2.1", + "source-map": "^0.6.1" + } + }, + "prettier": { + "version": "1.19.1", + "resolved": "https://registry.npmjs.org/prettier/-/prettier-1.19.1.tgz", + "integrity": "sha512-s7PoyDv/II1ObgQunCbB9PdLmUcBZcnWOcxDh7O0N/UwDEsHyqkW+Qh28jW+mVuCdx7gLB0BotYI1Y6uI9iyew==", + "dev": true, + "optional": true + }, + "source-map": { + "version": "0.6.1", + "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", + "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", + "dev": true + }, + "yallist": { + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/yallist/-/yallist-2.1.2.tgz", + "integrity": "sha1-HBH5IY8HYImkfdUS+TxmmaaoHVI=", + "dev": true + } + } + }, + "acorn": { + "version": "8.5.0", + "resolved": "https://registry.npmjs.org/acorn/-/acorn-8.5.0.tgz", + "integrity": "sha512-yXbYeFy+jUuYd3/CDcg2NkIYE991XYX/bje7LmjJigUciaeO1JR4XxXgCIV1/Zc/dRuFEyw1L0pbA+qynJkW5Q==", + "dev": true + }, + "acorn-jsx": { + "version": "5.3.2", + "resolved": "https://registry.npmjs.org/acorn-jsx/-/acorn-jsx-5.3.2.tgz", + "integrity": "sha512-rq9s+JNhf0IChjtDXxllJ7g41oZk5SlXtp0LHwyA5cejwn7vKmKp4pPri6YEePv2PU65sAsegbXtIinmDFDXgQ==", + "dev": true, + "requires": {} + }, + "ajv": { + "version": "6.12.6", + "resolved": "https://registry.npmjs.org/ajv/-/ajv-6.12.6.tgz", + "integrity": "sha512-j3fVLgvTo527anyYyJOGTYJbG+vnnQYvE0m5mmkc1TK+nxAppkCLMIL0aZ4dblVCNoGShhm+kzE4ZUykBoMg4g==", + "dev": true, + "requires": { + "fast-deep-equal": "^3.1.1", + "fast-json-stable-stringify": "^2.0.0", + "json-schema-traverse": "^0.4.1", + "uri-js": "^4.2.2" + } + }, + "ansi-colors": { + "version": "4.1.1", + "resolved": "https://registry.npmjs.org/ansi-colors/-/ansi-colors-4.1.1.tgz", + "integrity": "sha512-JoX0apGbHaUJBNl6yF+p6JAFYZ666/hhCGKN5t9QFjbJQKUU/g8MNbFDbvfrgKXvI1QpZplPOnwIo99lX/AAmA==", + "dev": true + }, + "ansi-regex": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.1.tgz", + "integrity": "sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==", + "dev": true + }, + "ansi-styles": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", + "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", + "dev": true, + "requires": { + "color-convert": "^2.0.1" + } + }, + "anymatch": { + "version": "3.1.2", + "resolved": "https://registry.npmjs.org/anymatch/-/anymatch-3.1.2.tgz", + "integrity": "sha512-P43ePfOAIupkguHUycrc4qJ9kz8ZiuOUijaETwX7THt0Y/GNK7v0aa8rY816xWjZ7rJdA5XdMcpVFTKMq+RvWg==", + "dev": true, + "requires": { + "normalize-path": "^3.0.0", + "picomatch": "^2.0.4" + } + }, + "argparse": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/argparse/-/argparse-2.0.1.tgz", + "integrity": "sha512-8+9WqebbFzpX9OR+Wa6O29asIogeRMzcGtAINdpMHHyAg10f05aSFVBbcEqGf/PXw1EjAZ+q2/bEBg3DvurK3Q==", + "dev": true + }, + "at-least-node": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/at-least-node/-/at-least-node-1.0.0.tgz", + "integrity": "sha512-+q/t7Ekv1EDY2l6Gda6LLiX14rU9TV20Wa3ofeQmwPFZbOMo9DXrLbOjFaaclkXKWidIaopwAObQDqwWtGUjqg==", + "dev": true + }, + "babel-code-frame": { + "version": "6.26.0", + "resolved": "https://registry.npmjs.org/babel-code-frame/-/babel-code-frame-6.26.0.tgz", + "integrity": "sha1-Y/1D99weO7fONZR9uP42mj9Yx0s=", + "dev": true, + "requires": { + "chalk": "^1.1.3", + "esutils": "^2.0.2", + "js-tokens": "^3.0.2" + }, + "dependencies": { + "ansi-regex": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-2.1.1.tgz", + "integrity": "sha1-w7M6te42DYbg5ijwRorn7yfWVN8=", + "dev": true + }, + "ansi-styles": { + "version": "2.2.1", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-2.2.1.tgz", + "integrity": "sha1-tDLdM1i2NM914eRmQ2gkBTPB3b4=", + "dev": true + }, + "chalk": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-1.1.3.tgz", + "integrity": "sha1-qBFcVeSnAv5NFQq9OHKCKn4J/Jg=", + "dev": true, + "requires": { + "ansi-styles": "^2.2.1", + "escape-string-regexp": "^1.0.2", + "has-ansi": "^2.0.0", + "strip-ansi": "^3.0.0", + "supports-color": "^2.0.0" + } + }, + "escape-string-regexp": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz", + "integrity": "sha1-G2HAViGQqN/2rjuyzwIAyhMLhtQ=", + "dev": true + }, + "js-tokens": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/js-tokens/-/js-tokens-3.0.2.tgz", + "integrity": "sha1-mGbfOVECEw449/mWvOtlRDIJwls=", + "dev": true + }, + "strip-ansi": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-3.0.1.tgz", + "integrity": "sha1-ajhfuIU9lS1f8F0Oiq+UJ43GPc8=", + "dev": true, + "requires": { + "ansi-regex": "^2.0.0" + } + }, + "supports-color": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-2.0.0.tgz", + "integrity": "sha1-U10EXOa2Nj+kARcIRimZXp3zJMc=", + "dev": true + } + } + }, + "babel-helper-builder-binary-assignment-operator-visitor": { + "version": "6.24.1", + "resolved": "https://registry.npmjs.org/babel-helper-builder-binary-assignment-operator-visitor/-/babel-helper-builder-binary-assignment-operator-visitor-6.24.1.tgz", + "integrity": "sha1-zORReto1b0IgvK6KAsKzRvmlZmQ=", + "dev": true, + "requires": { + "babel-helper-explode-assignable-expression": "^6.24.1", + "babel-runtime": "^6.22.0", + "babel-types": "^6.24.1" + } + }, + "babel-helper-call-delegate": { + "version": "6.24.1", + "resolved": "https://registry.npmjs.org/babel-helper-call-delegate/-/babel-helper-call-delegate-6.24.1.tgz", + "integrity": "sha1-7Oaqzdx25Bw0YfiL/Fdb0Nqi340=", + "dev": true, + "requires": { + "babel-helper-hoist-variables": "^6.24.1", + "babel-runtime": "^6.22.0", + "babel-traverse": "^6.24.1", + "babel-types": "^6.24.1" + } + }, + "babel-helper-define-map": { + "version": "6.26.0", + "resolved": "https://registry.npmjs.org/babel-helper-define-map/-/babel-helper-define-map-6.26.0.tgz", + "integrity": "sha1-pfVtq0GiX5fstJjH66ypgZ+Vvl8=", + "dev": true, + "requires": { + "babel-helper-function-name": "^6.24.1", + "babel-runtime": "^6.26.0", + "babel-types": "^6.26.0", + "lodash": "^4.17.4" + } + }, + "babel-helper-explode-assignable-expression": { + "version": "6.24.1", + "resolved": "https://registry.npmjs.org/babel-helper-explode-assignable-expression/-/babel-helper-explode-assignable-expression-6.24.1.tgz", + "integrity": "sha1-8luCz33BBDPFX3BZLVdGQArCLKo=", + "dev": true, + "requires": { + "babel-runtime": "^6.22.0", + "babel-traverse": "^6.24.1", + "babel-types": "^6.24.1" + } + }, + "babel-helper-function-name": { + "version": "6.24.1", + "resolved": "https://registry.npmjs.org/babel-helper-function-name/-/babel-helper-function-name-6.24.1.tgz", + "integrity": "sha1-00dbjAPtmCQqJbSDUasYOZ01gKk=", + "dev": true, + "requires": { + "babel-helper-get-function-arity": "^6.24.1", + "babel-runtime": "^6.22.0", + "babel-template": "^6.24.1", + "babel-traverse": "^6.24.1", + "babel-types": "^6.24.1" + } + }, + "babel-helper-get-function-arity": { + "version": "6.24.1", + "resolved": "https://registry.npmjs.org/babel-helper-get-function-arity/-/babel-helper-get-function-arity-6.24.1.tgz", + "integrity": "sha1-j3eCqpNAfEHTqlCQj4mwMbG2hT0=", + "dev": true, + "requires": { + "babel-runtime": "^6.22.0", + "babel-types": "^6.24.1" + } + }, + "babel-helper-hoist-variables": { + "version": "6.24.1", + "resolved": "https://registry.npmjs.org/babel-helper-hoist-variables/-/babel-helper-hoist-variables-6.24.1.tgz", + "integrity": "sha1-HssnaJydJVE+rbyZFKc/VAi+enY=", + "dev": true, + "requires": { + "babel-runtime": "^6.22.0", + "babel-types": "^6.24.1" + } + }, + "babel-helper-optimise-call-expression": { + "version": "6.24.1", + "resolved": "https://registry.npmjs.org/babel-helper-optimise-call-expression/-/babel-helper-optimise-call-expression-6.24.1.tgz", + "integrity": "sha1-96E0J7qfc/j0+pk8VKl4gtEkQlc=", + "dev": true, + "requires": { + "babel-runtime": "^6.22.0", + "babel-types": "^6.24.1" + } + }, + "babel-helper-regex": { + "version": "6.26.0", + "resolved": "https://registry.npmjs.org/babel-helper-regex/-/babel-helper-regex-6.26.0.tgz", + "integrity": "sha1-MlxZ+QL4LyS3T6zu0DY5VPZJXnI=", + "dev": true, + "requires": { + "babel-runtime": "^6.26.0", + "babel-types": "^6.26.0", + "lodash": "^4.17.4" + } + }, + "babel-helper-remap-async-to-generator": { + "version": "6.24.1", + "resolved": "https://registry.npmjs.org/babel-helper-remap-async-to-generator/-/babel-helper-remap-async-to-generator-6.24.1.tgz", + "integrity": "sha1-XsWBgnrXI/7N04HxySg5BnbkVRs=", + "dev": true, + "requires": { + "babel-helper-function-name": "^6.24.1", + "babel-runtime": "^6.22.0", + "babel-template": "^6.24.1", + "babel-traverse": "^6.24.1", + "babel-types": "^6.24.1" + } + }, + "babel-helper-replace-supers": { + "version": "6.24.1", + "resolved": "https://registry.npmjs.org/babel-helper-replace-supers/-/babel-helper-replace-supers-6.24.1.tgz", + "integrity": "sha1-v22/5Dk40XNpohPKiov3S2qQqxo=", + "dev": true, + "requires": { + "babel-helper-optimise-call-expression": "^6.24.1", + "babel-messages": "^6.23.0", + "babel-runtime": "^6.22.0", + "babel-template": "^6.24.1", + "babel-traverse": "^6.24.1", + "babel-types": "^6.24.1" + } + }, + "babel-messages": { + "version": "6.23.0", + "resolved": "https://registry.npmjs.org/babel-messages/-/babel-messages-6.23.0.tgz", + "integrity": "sha1-8830cDhYA1sqKVHG7F7fbGLyYw4=", + "dev": true, + "requires": { + "babel-runtime": "^6.22.0" + } + }, + "babel-plugin-check-es2015-constants": { + "version": "6.22.0", + "resolved": "https://registry.npmjs.org/babel-plugin-check-es2015-constants/-/babel-plugin-check-es2015-constants-6.22.0.tgz", + "integrity": "sha1-NRV7EBQm/S/9PaP3XH0ekYNbv4o=", + "dev": true, + "requires": { + "babel-runtime": "^6.22.0" + } + }, + "babel-plugin-syntax-async-functions": { + "version": "6.13.0", + "resolved": "https://registry.npmjs.org/babel-plugin-syntax-async-functions/-/babel-plugin-syntax-async-functions-6.13.0.tgz", + "integrity": "sha1-ytnK0RkbWtY0vzCuCHI5HgZHvpU=", + "dev": true + }, + "babel-plugin-syntax-exponentiation-operator": { + "version": "6.13.0", + "resolved": "https://registry.npmjs.org/babel-plugin-syntax-exponentiation-operator/-/babel-plugin-syntax-exponentiation-operator-6.13.0.tgz", + "integrity": "sha1-nufoM3KQ2pUoggGmpX9BcDF4MN4=", + "dev": true + }, + "babel-plugin-syntax-trailing-function-commas": { + "version": "6.22.0", + "resolved": "https://registry.npmjs.org/babel-plugin-syntax-trailing-function-commas/-/babel-plugin-syntax-trailing-function-commas-6.22.0.tgz", + "integrity": "sha1-ugNgk3+NBuQBgKQ/4NVhb/9TLPM=", + "dev": true + }, + "babel-plugin-transform-async-to-generator": { + "version": "6.24.1", + "resolved": "https://registry.npmjs.org/babel-plugin-transform-async-to-generator/-/babel-plugin-transform-async-to-generator-6.24.1.tgz", + "integrity": "sha1-ZTbjeK/2yx1VF6wOQOs+n8jQh2E=", + "dev": true, + "requires": { + "babel-helper-remap-async-to-generator": "^6.24.1", + "babel-plugin-syntax-async-functions": "^6.8.0", + "babel-runtime": "^6.22.0" + } + }, + "babel-plugin-transform-es2015-arrow-functions": { + "version": "6.22.0", + "resolved": "https://registry.npmjs.org/babel-plugin-transform-es2015-arrow-functions/-/babel-plugin-transform-es2015-arrow-functions-6.22.0.tgz", + "integrity": "sha1-RSaSy3EdX3ncf4XkQM5BufJE0iE=", + "dev": true, + "requires": { + "babel-runtime": "^6.22.0" + } + }, + "babel-plugin-transform-es2015-block-scoped-functions": { + "version": "6.22.0", + "resolved": "https://registry.npmjs.org/babel-plugin-transform-es2015-block-scoped-functions/-/babel-plugin-transform-es2015-block-scoped-functions-6.22.0.tgz", + "integrity": "sha1-u8UbSflk1wy42OC5ToICRs46YUE=", + "dev": true, + "requires": { + "babel-runtime": "^6.22.0" + } + }, + "babel-plugin-transform-es2015-block-scoping": { + "version": "6.26.0", + "resolved": "https://registry.npmjs.org/babel-plugin-transform-es2015-block-scoping/-/babel-plugin-transform-es2015-block-scoping-6.26.0.tgz", + "integrity": "sha1-1w9SmcEwjQXBL0Y4E7CgnnOxiV8=", + "dev": true, + "requires": { + "babel-runtime": "^6.26.0", + "babel-template": "^6.26.0", + "babel-traverse": "^6.26.0", + "babel-types": "^6.26.0", + "lodash": "^4.17.4" + } + }, + "babel-plugin-transform-es2015-classes": { + "version": "6.24.1", + "resolved": "https://registry.npmjs.org/babel-plugin-transform-es2015-classes/-/babel-plugin-transform-es2015-classes-6.24.1.tgz", + "integrity": "sha1-WkxYpQyclGHlZLSyo7+ryXolhNs=", + "dev": true, + "requires": { + "babel-helper-define-map": "^6.24.1", + "babel-helper-function-name": "^6.24.1", + "babel-helper-optimise-call-expression": "^6.24.1", + "babel-helper-replace-supers": "^6.24.1", + "babel-messages": "^6.23.0", + "babel-runtime": "^6.22.0", + "babel-template": "^6.24.1", + "babel-traverse": "^6.24.1", + "babel-types": "^6.24.1" + } + }, + "babel-plugin-transform-es2015-computed-properties": { + "version": "6.24.1", + "resolved": "https://registry.npmjs.org/babel-plugin-transform-es2015-computed-properties/-/babel-plugin-transform-es2015-computed-properties-6.24.1.tgz", + "integrity": "sha1-b+Ko0WiV1WNPTNmZttNICjCBWbM=", + "dev": true, + "requires": { + "babel-runtime": "^6.22.0", + "babel-template": "^6.24.1" + } + }, + "babel-plugin-transform-es2015-destructuring": { + "version": "6.23.0", + "resolved": "https://registry.npmjs.org/babel-plugin-transform-es2015-destructuring/-/babel-plugin-transform-es2015-destructuring-6.23.0.tgz", + "integrity": "sha1-mXux8auWf2gtKwh2/jWNYOdlxW0=", + "dev": true, + "requires": { + "babel-runtime": "^6.22.0" + } + }, + "babel-plugin-transform-es2015-duplicate-keys": { + "version": "6.24.1", + "resolved": "https://registry.npmjs.org/babel-plugin-transform-es2015-duplicate-keys/-/babel-plugin-transform-es2015-duplicate-keys-6.24.1.tgz", + "integrity": "sha1-c+s9MQypaePvnskcU3QabxV2Qj4=", + "dev": true, + "requires": { + "babel-runtime": "^6.22.0", + "babel-types": "^6.24.1" + } + }, + "babel-plugin-transform-es2015-for-of": { + "version": "6.23.0", + "resolved": "https://registry.npmjs.org/babel-plugin-transform-es2015-for-of/-/babel-plugin-transform-es2015-for-of-6.23.0.tgz", + "integrity": "sha1-9HyVsrYT3x0+zC/bdXNiPHUkhpE=", + "dev": true, + "requires": { + "babel-runtime": "^6.22.0" + } + }, + "babel-plugin-transform-es2015-function-name": { + "version": "6.24.1", + "resolved": "https://registry.npmjs.org/babel-plugin-transform-es2015-function-name/-/babel-plugin-transform-es2015-function-name-6.24.1.tgz", + "integrity": "sha1-g0yJhTvDaxrw86TF26qU/Y6sqos=", + "dev": true, + "requires": { + "babel-helper-function-name": "^6.24.1", + "babel-runtime": "^6.22.0", + "babel-types": "^6.24.1" + } + }, + "babel-plugin-transform-es2015-literals": { + "version": "6.22.0", + "resolved": "https://registry.npmjs.org/babel-plugin-transform-es2015-literals/-/babel-plugin-transform-es2015-literals-6.22.0.tgz", + "integrity": "sha1-T1SgLWzWbPkVKAAZox0xklN3yi4=", + "dev": true, + "requires": { + "babel-runtime": "^6.22.0" + } + }, + "babel-plugin-transform-es2015-modules-amd": { + "version": "6.24.1", + "resolved": "https://registry.npmjs.org/babel-plugin-transform-es2015-modules-amd/-/babel-plugin-transform-es2015-modules-amd-6.24.1.tgz", + "integrity": "sha1-Oz5UAXI5hC1tGcMBHEvS8AoA0VQ=", + "dev": true, + "requires": { + "babel-plugin-transform-es2015-modules-commonjs": "^6.24.1", + "babel-runtime": "^6.22.0", + "babel-template": "^6.24.1" + } + }, + "babel-plugin-transform-es2015-modules-commonjs": { + "version": "6.26.2", + "resolved": "https://registry.npmjs.org/babel-plugin-transform-es2015-modules-commonjs/-/babel-plugin-transform-es2015-modules-commonjs-6.26.2.tgz", + "integrity": "sha512-CV9ROOHEdrjcwhIaJNBGMBCodN+1cfkwtM1SbUHmvyy35KGT7fohbpOxkE2uLz1o6odKK2Ck/tz47z+VqQfi9Q==", + "dev": true, + "requires": { + "babel-plugin-transform-strict-mode": "^6.24.1", + "babel-runtime": "^6.26.0", + "babel-template": "^6.26.0", + "babel-types": "^6.26.0" + } + }, + "babel-plugin-transform-es2015-modules-systemjs": { + "version": "6.24.1", + "resolved": "https://registry.npmjs.org/babel-plugin-transform-es2015-modules-systemjs/-/babel-plugin-transform-es2015-modules-systemjs-6.24.1.tgz", + "integrity": "sha1-/4mhQrkRmpBhlfXxBuzzBdlAfSM=", + "dev": true, + "requires": { + "babel-helper-hoist-variables": "^6.24.1", + "babel-runtime": "^6.22.0", + "babel-template": "^6.24.1" + } + }, + "babel-plugin-transform-es2015-modules-umd": { + "version": "6.24.1", + "resolved": "https://registry.npmjs.org/babel-plugin-transform-es2015-modules-umd/-/babel-plugin-transform-es2015-modules-umd-6.24.1.tgz", + "integrity": "sha1-rJl+YoXNGO1hdq22B9YCNErThGg=", + "dev": true, + "requires": { + "babel-plugin-transform-es2015-modules-amd": "^6.24.1", + "babel-runtime": "^6.22.0", + "babel-template": "^6.24.1" + } + }, + "babel-plugin-transform-es2015-object-super": { + "version": "6.24.1", + "resolved": "https://registry.npmjs.org/babel-plugin-transform-es2015-object-super/-/babel-plugin-transform-es2015-object-super-6.24.1.tgz", + "integrity": "sha1-JM72muIcuDp/hgPa0CH1cusnj40=", + "dev": true, + "requires": { + "babel-helper-replace-supers": "^6.24.1", + "babel-runtime": "^6.22.0" + } + }, + "babel-plugin-transform-es2015-parameters": { + "version": "6.24.1", + "resolved": "https://registry.npmjs.org/babel-plugin-transform-es2015-parameters/-/babel-plugin-transform-es2015-parameters-6.24.1.tgz", + "integrity": "sha1-V6w1GrScrxSpfNE7CfZv3wpiXys=", + "dev": true, + "requires": { + "babel-helper-call-delegate": "^6.24.1", + "babel-helper-get-function-arity": "^6.24.1", + "babel-runtime": "^6.22.0", + "babel-template": "^6.24.1", + "babel-traverse": "^6.24.1", + "babel-types": "^6.24.1" + } + }, + "babel-plugin-transform-es2015-shorthand-properties": { + "version": "6.24.1", + "resolved": "https://registry.npmjs.org/babel-plugin-transform-es2015-shorthand-properties/-/babel-plugin-transform-es2015-shorthand-properties-6.24.1.tgz", + "integrity": "sha1-JPh11nIch2YbvZmkYi5R8U3jiqA=", + "dev": true, + "requires": { + "babel-runtime": "^6.22.0", + "babel-types": "^6.24.1" + } + }, + "babel-plugin-transform-es2015-spread": { + "version": "6.22.0", + "resolved": "https://registry.npmjs.org/babel-plugin-transform-es2015-spread/-/babel-plugin-transform-es2015-spread-6.22.0.tgz", + "integrity": "sha1-1taKmfia7cRTbIGlQujdnxdG+NE=", + "dev": true, + "requires": { + "babel-runtime": "^6.22.0" + } + }, + "babel-plugin-transform-es2015-sticky-regex": { + "version": "6.24.1", + "resolved": "https://registry.npmjs.org/babel-plugin-transform-es2015-sticky-regex/-/babel-plugin-transform-es2015-sticky-regex-6.24.1.tgz", + "integrity": "sha1-AMHNsaynERLN8M9hJsLta0V8zbw=", + "dev": true, + "requires": { + "babel-helper-regex": "^6.24.1", + "babel-runtime": "^6.22.0", + "babel-types": "^6.24.1" + } + }, + "babel-plugin-transform-es2015-template-literals": { + "version": "6.22.0", + "resolved": "https://registry.npmjs.org/babel-plugin-transform-es2015-template-literals/-/babel-plugin-transform-es2015-template-literals-6.22.0.tgz", + "integrity": "sha1-qEs0UPfp+PH2g51taH2oS7EjbY0=", + "dev": true, + "requires": { + "babel-runtime": "^6.22.0" + } + }, + "babel-plugin-transform-es2015-typeof-symbol": { + "version": "6.23.0", + "resolved": "https://registry.npmjs.org/babel-plugin-transform-es2015-typeof-symbol/-/babel-plugin-transform-es2015-typeof-symbol-6.23.0.tgz", + "integrity": "sha1-3sCfHN3/lLUqxz1QXITfWdzOs3I=", + "dev": true, + "requires": { + "babel-runtime": "^6.22.0" + } + }, + "babel-plugin-transform-es2015-unicode-regex": { + "version": "6.24.1", + "resolved": "https://registry.npmjs.org/babel-plugin-transform-es2015-unicode-regex/-/babel-plugin-transform-es2015-unicode-regex-6.24.1.tgz", + "integrity": "sha1-04sS9C6nMj9yk4fxinxa4frrNek=", + "dev": true, + "requires": { + "babel-helper-regex": "^6.24.1", + "babel-runtime": "^6.22.0", + "regexpu-core": "^2.0.0" + } + }, + "babel-plugin-transform-exponentiation-operator": { + "version": "6.24.1", + "resolved": "https://registry.npmjs.org/babel-plugin-transform-exponentiation-operator/-/babel-plugin-transform-exponentiation-operator-6.24.1.tgz", + "integrity": "sha1-KrDJx/MJj6SJB3cruBP+QejeOg4=", + "dev": true, + "requires": { + "babel-helper-builder-binary-assignment-operator-visitor": "^6.24.1", + "babel-plugin-syntax-exponentiation-operator": "^6.8.0", + "babel-runtime": "^6.22.0" + } + }, + "babel-plugin-transform-regenerator": { + "version": "6.26.0", + "resolved": "https://registry.npmjs.org/babel-plugin-transform-regenerator/-/babel-plugin-transform-regenerator-6.26.0.tgz", + "integrity": "sha1-4HA2lvveJ/Cj78rPi03KL3s6jy8=", + "dev": true, + "requires": { + "regenerator-transform": "^0.10.0" + } + }, + "babel-plugin-transform-strict-mode": { + "version": "6.24.1", + "resolved": "https://registry.npmjs.org/babel-plugin-transform-strict-mode/-/babel-plugin-transform-strict-mode-6.24.1.tgz", + "integrity": "sha1-1fr3qleKZbvlkc9e2uBKDGcCB1g=", + "dev": true, + "requires": { + "babel-runtime": "^6.22.0", + "babel-types": "^6.24.1" + } + }, + "babel-preset-env": { + "version": "1.7.0", + "resolved": "https://registry.npmjs.org/babel-preset-env/-/babel-preset-env-1.7.0.tgz", + "integrity": "sha512-9OR2afuKDneX2/q2EurSftUYM0xGu4O2D9adAhVfADDhrYDaxXV0rBbevVYoY9n6nyX1PmQW/0jtpJvUNr9CHg==", + "dev": true, + "requires": { + "babel-plugin-check-es2015-constants": "^6.22.0", + "babel-plugin-syntax-trailing-function-commas": "^6.22.0", + "babel-plugin-transform-async-to-generator": "^6.22.0", + "babel-plugin-transform-es2015-arrow-functions": "^6.22.0", + "babel-plugin-transform-es2015-block-scoped-functions": "^6.22.0", + "babel-plugin-transform-es2015-block-scoping": "^6.23.0", + "babel-plugin-transform-es2015-classes": "^6.23.0", + "babel-plugin-transform-es2015-computed-properties": "^6.22.0", + "babel-plugin-transform-es2015-destructuring": "^6.23.0", + "babel-plugin-transform-es2015-duplicate-keys": "^6.22.0", + "babel-plugin-transform-es2015-for-of": "^6.23.0", + "babel-plugin-transform-es2015-function-name": "^6.22.0", + "babel-plugin-transform-es2015-literals": "^6.22.0", + "babel-plugin-transform-es2015-modules-amd": "^6.22.0", + "babel-plugin-transform-es2015-modules-commonjs": "^6.23.0", + "babel-plugin-transform-es2015-modules-systemjs": "^6.23.0", + "babel-plugin-transform-es2015-modules-umd": "^6.23.0", + "babel-plugin-transform-es2015-object-super": "^6.22.0", + "babel-plugin-transform-es2015-parameters": "^6.23.0", + "babel-plugin-transform-es2015-shorthand-properties": "^6.22.0", + "babel-plugin-transform-es2015-spread": "^6.22.0", + "babel-plugin-transform-es2015-sticky-regex": "^6.22.0", + "babel-plugin-transform-es2015-template-literals": "^6.22.0", + "babel-plugin-transform-es2015-typeof-symbol": "^6.23.0", + "babel-plugin-transform-es2015-unicode-regex": "^6.22.0", + "babel-plugin-transform-exponentiation-operator": "^6.22.0", + "babel-plugin-transform-regenerator": "^6.22.0", + "browserslist": "^3.2.6", + "invariant": "^2.2.2", + "semver": "^5.3.0" + }, + "dependencies": { + "browserslist": { + "version": "3.2.8", + "resolved": "https://registry.npmjs.org/browserslist/-/browserslist-3.2.8.tgz", + "integrity": "sha512-WHVocJYavUwVgVViC0ORikPHQquXwVh939TaelZ4WDqpWgTX/FsGhl/+P4qBUAGcRvtOgDgC+xftNWWp2RUTAQ==", + "dev": true, + "requires": { + "caniuse-lite": "^1.0.30000844", + "electron-to-chromium": "^1.3.47" + } + }, + "semver": { + "version": "5.7.1", + "resolved": "https://registry.npmjs.org/semver/-/semver-5.7.1.tgz", + "integrity": "sha512-sauaDf/PZdVgrLTNYHRtpXa1iRiKcaebiKQ1BJdpQlWH2lCvexQdX55snPFyK7QzpudqbCI0qXFfOasHdyNDGQ==", + "dev": true + } + } + }, + "babel-runtime": { + "version": "6.26.0", + "resolved": "https://registry.npmjs.org/babel-runtime/-/babel-runtime-6.26.0.tgz", + "integrity": "sha1-llxwWGaOgrVde/4E/yM3vItWR/4=", + "dev": true, + "requires": { + "core-js": "^2.4.0", + "regenerator-runtime": "^0.11.0" + } + }, + "babel-template": { + "version": "6.26.0", + "resolved": "https://registry.npmjs.org/babel-template/-/babel-template-6.26.0.tgz", + "integrity": "sha1-3gPi0WOWsGn0bdn/+FIfsaDjXgI=", + "dev": true, + "requires": { + "babel-runtime": "^6.26.0", + "babel-traverse": "^6.26.0", + "babel-types": "^6.26.0", + "babylon": "^6.18.0", + "lodash": "^4.17.4" + } + }, + "babel-traverse": { + "version": "6.26.0", + "resolved": "https://registry.npmjs.org/babel-traverse/-/babel-traverse-6.26.0.tgz", + "integrity": "sha1-RqnL1+3MYsjlwGTi0tjQ9ANXZu4=", + "dev": true, + "requires": { + "babel-code-frame": "^6.26.0", + "babel-messages": "^6.23.0", + "babel-runtime": "^6.26.0", + "babel-types": "^6.26.0", + "babylon": "^6.18.0", + "debug": "^2.6.8", + "globals": "^9.18.0", + "invariant": "^2.2.2", + "lodash": "^4.17.4" + }, + "dependencies": { + "debug": { + "version": "2.6.9", + "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", + "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", + "dev": true, + "requires": { + "ms": "2.0.0" + } + }, + "globals": { + "version": "9.18.0", + "resolved": "https://registry.npmjs.org/globals/-/globals-9.18.0.tgz", + "integrity": "sha512-S0nG3CLEQiY/ILxqtztTWH/3iRRdyBLw6KMDxnKMchrtbj2OFmehVh0WUCfW3DUrIgx/qFrJPICrq4Z4sTR9UQ==", + "dev": true + }, + "ms": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", + "integrity": "sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g=", + "dev": true + } + } + }, + "babel-types": { + "version": "6.26.0", + "resolved": "https://registry.npmjs.org/babel-types/-/babel-types-6.26.0.tgz", + "integrity": "sha1-o7Bz+Uq0nrb6Vc1lInozQ4BjJJc=", + "dev": true, + "requires": { + "babel-runtime": "^6.26.0", + "esutils": "^2.0.2", + "lodash": "^4.17.4", + "to-fast-properties": "^1.0.3" + }, + "dependencies": { + "to-fast-properties": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/to-fast-properties/-/to-fast-properties-1.0.3.tgz", + "integrity": "sha1-uDVx+k2MJbguIxsG46MFXeTKGkc=", + "dev": true + } + } + }, + "babylon": { + "version": "6.18.0", + "resolved": "https://registry.npmjs.org/babylon/-/babylon-6.18.0.tgz", + "integrity": "sha512-q/UEjfGJ2Cm3oKV71DJz9d25TPnq5rhBVL2Q4fA5wcC3jcrdn7+SssEybFIxwAvvP+YCsCYNKughoF33GxgycQ==", + "dev": true + }, + "balanced-match": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-1.0.2.tgz", + "integrity": "sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw==", + "dev": true + }, + "binary-extensions": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/binary-extensions/-/binary-extensions-2.2.0.tgz", + "integrity": "sha512-jDctJ/IVQbZoJykoeHbhXpOlNBqGNcwXJKJog42E5HDPUwQTSdjCHdihjj0DlnheQ7blbT6dHOafNAiS8ooQKA==", + "dev": true + }, + "bluebird": { + "version": "3.7.2", + "resolved": "https://registry.npmjs.org/bluebird/-/bluebird-3.7.2.tgz", + "integrity": "sha512-XpNj6GDQzdfW+r2Wnn7xiSAd7TM3jzkxGXBGTtWKuSXv1xUV+azxAm8jdWZN06QTQk+2N2XB9jRDkvbmQmcRtg==", + "dev": true + }, + "brace-expansion": { + "version": "1.1.11", + "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.11.tgz", + "integrity": "sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==", + "dev": true, + "requires": { + "balanced-match": "^1.0.0", + "concat-map": "0.0.1" + } + }, + "braces": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/braces/-/braces-3.0.2.tgz", + "integrity": "sha512-b8um+L1RzM3WDSzvhm6gIz1yfTbBt6YTlcEKAvsmqCZZFw46z626lVj9j1yEPW33H5H+lBQpZMP1k8l+78Ha0A==", + "dev": true, + "requires": { + "fill-range": "^7.0.1" + } + }, + "browserslist": { + "version": "4.17.4", + "resolved": "https://registry.npmjs.org/browserslist/-/browserslist-4.17.4.tgz", + "integrity": "sha512-Zg7RpbZpIJRW3am9Lyckue7PLytvVxxhJj1CaJVlCWENsGEAOlnlt8X0ZxGRPp7Bt9o8tIRM5SEXy4BCPMJjLQ==", + "dev": true, + "requires": { + "caniuse-lite": "^1.0.30001265", + "electron-to-chromium": "^1.3.867", + "escalade": "^3.1.1", + "node-releases": "^2.0.0", + "picocolors": "^1.0.0" + }, + "dependencies": { + "picocolors": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/picocolors/-/picocolors-1.0.0.tgz", + "integrity": "sha512-1fygroTLlHu66zi26VoTDv8yRgm0Fccecssto+MhsZ0D/DGW2sm8E8AjW7NU5VVTRt5GxbeZ5qBuJr+HyLYkjQ==", + "dev": true + } + } + }, + "cac": { + "version": "6.7.11", + "resolved": "https://registry.npmjs.org/cac/-/cac-6.7.11.tgz", + "integrity": "sha512-m4xrA2MKfid6uDV2j2+0mXrtPGxlvAW0y+7Gnn2P8WVMSG+4e4tcoYX++94ZPblPfpBccJ5e7HvKdghlX5yiDA==", + "dev": true + }, + "callsites": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/callsites/-/callsites-3.1.0.tgz", + "integrity": "sha512-P8BjAsXvZS+VIDUI11hHCQEv74YT67YUi5JJFNWIqL235sBmjX4+qx9Muvls5ivyNENctx46xQLQ3aTuE7ssaQ==", + "dev": true + }, + "camelcase": { + "version": "5.3.1", + "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-5.3.1.tgz", + "integrity": "sha512-L28STB170nwWS63UjtlEOE3dldQApaJXZkOI1uMFfzf3rRuPegHaHesyee+YxQ+W6SvRDQV6UrdOdRiR153wJg==", + "dev": true + }, + "caniuse-lite": { + "version": "1.0.30001267", + "resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001267.tgz", + "integrity": "sha512-r1mjTzAuJ9W8cPBGbbus8E0SKcUP7gn03R14Wk8FlAlqhH9hroy9nLqmpuXlfKEw/oILW+FGz47ipXV2O7x8lg==", + "dev": true + }, + "chalk": { + "version": "4.1.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", + "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", + "dev": true, + "requires": { + "ansi-styles": "^4.1.0", + "supports-color": "^7.1.0" + } + }, + "chokidar": { + "version": "3.5.2", + "resolved": "https://registry.npmjs.org/chokidar/-/chokidar-3.5.2.tgz", + "integrity": "sha512-ekGhOnNVPgT77r4K/U3GDhu+FQ2S8TnK/s2KbIGXi0SZWuwkZ2QNyfWdZW+TVfn84DpEP7rLeCt2UI6bJ8GwbQ==", + "dev": true, + "requires": { + "anymatch": "~3.1.2", + "braces": "~3.0.2", + "fsevents": "~2.3.2", + "glob-parent": "~5.1.2", + "is-binary-path": "~2.1.0", + "is-glob": "~4.0.1", + "normalize-path": "~3.0.0", + "readdirp": "~3.6.0" + }, + "dependencies": { + "glob-parent": { + "version": "5.1.2", + "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-5.1.2.tgz", + "integrity": "sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow==", + "dev": true, + "requires": { + "is-glob": "^4.0.1" + } + } + } + }, + "color-convert": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", + "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", + "dev": true, + "requires": { + "color-name": "~1.1.4" + } + }, + "color-name": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", + "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", + "dev": true + }, + "colorette": { + "version": "2.0.16", + "resolved": "https://registry.npmjs.org/colorette/-/colorette-2.0.16.tgz", + "integrity": "sha512-hUewv7oMjCp+wkBv5Rm0v87eJhq4woh5rSR+42YSQJKecCqgIqNkZ6lAlQms/BwHPJA5NKMRlpxPRv0n8HQW6g==", + "dev": true + }, + "concat-map": { + "version": "0.0.1", + "resolved": "https://registry.npmjs.org/concat-map/-/concat-map-0.0.1.tgz", + "integrity": "sha1-2Klr13/Wjfd5OnMDajug1UBdR3s=", + "dev": true + }, + "consolidate": { + "version": "0.16.0", + "resolved": "https://registry.npmjs.org/consolidate/-/consolidate-0.16.0.tgz", + "integrity": "sha512-Nhl1wzCslqXYTJVDyJCu3ODohy9OfBMB5uD2BiBTzd7w+QY0lBzafkR8y8755yMYHAaMD4NuzbAw03/xzfw+eQ==", + "dev": true, + "requires": { + "bluebird": "^3.7.2" + } + }, + "convert-source-map": { + "version": "1.8.0", + "resolved": "https://registry.npmjs.org/convert-source-map/-/convert-source-map-1.8.0.tgz", + "integrity": "sha512-+OQdjP49zViI/6i7nIJpA8rAl4sV/JdPfU9nZs3VqOwGIgizICvuN2ru6fMd+4llL0tar18UYJXfZ/TWtmhUjA==", + "dev": true, + "requires": { + "safe-buffer": "~5.1.1" + } + }, + "core-js": { + "version": "2.6.12", + "resolved": "https://registry.npmjs.org/core-js/-/core-js-2.6.12.tgz", + "integrity": "sha512-Kb2wC0fvsWfQrgk8HU5lW6U/Lcs8+9aaYcy4ZFc6DDlo4nZ7n70dEgE5rtR0oG6ufKDUnrwfWL1mXR5ljDatrQ==", + "dev": true + }, + "cross-spawn": { + "version": "7.0.3", + "resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-7.0.3.tgz", + "integrity": "sha512-iRDPJKUPVEND7dHPO8rkbOnPpyDygcDFtWjpeWNCgy8WP2rXcxXL8TskReQl6OrB2G7+UJrags1q15Fudc7G6w==", + "dev": true, + "requires": { + "path-key": "^3.1.0", + "shebang-command": "^2.0.0", + "which": "^2.0.1" + } + }, + "cssesc": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/cssesc/-/cssesc-3.0.0.tgz", + "integrity": "sha512-/Tb/JcjK111nNScGob5MNtsntNM1aCNUDipB/TkwZFhyDrrE47SOx/18wF2bbjgc3ZzCSKW1T5nt5EbFoAz/Vg==", + "dev": true + }, + "de-indent": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/de-indent/-/de-indent-1.0.2.tgz", + "integrity": "sha1-sgOOhG3DO6pXlhKNCAS0VbjB4h0=", + "dev": true + }, + "debug": { + "version": "4.3.2", + "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.2.tgz", + "integrity": "sha512-mOp8wKcvj7XxC78zLgw/ZA+6TSgkoE2C/ienthhRD298T7UNwAg9diBpLRxC0mOezLl4B0xV7M0cCO6P/O0Xhw==", + "dev": true, + "requires": { + "ms": "2.1.2" + } + }, + "deep-is": { + "version": "0.1.4", + "resolved": "https://registry.npmjs.org/deep-is/-/deep-is-0.1.4.tgz", + "integrity": "sha512-oIPzksmTg4/MriiaYGO+okXDT7ztn/w3Eptv/+gSIdMdKsJo0u4CfYNFJPy+4SKMuCqGw2wxnA+URMg3t8a/bQ==", + "dev": true + }, + "doctrine": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/doctrine/-/doctrine-3.0.0.tgz", + "integrity": "sha512-yS+Q5i3hBf7GBkd4KG8a7eBNNWNGLTaEwwYWUijIYM7zrlYDM0BFXHjjPWlWZ1Rg7UaddZeIDmi9jF3HmqiQ2w==", + "dev": true, + "requires": { + "esutils": "^2.0.2" + } + }, + "electron-to-chromium": { + "version": "1.3.870", + "resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.3.870.tgz", + "integrity": "sha512-PiJMshfq6PL+i1V+nKLwhHbCKeD8eAz8rvO9Cwk/7cChOHJBtufmjajLyYLsSRHguRFiOCVx3XzJLeZsIAYfSA==", + "dev": true + }, + "enquirer": { + "version": "2.3.6", + "resolved": "https://registry.npmjs.org/enquirer/-/enquirer-2.3.6.tgz", + "integrity": "sha512-yjNnPr315/FjS4zIsUxYguYUPP2e1NK4d7E7ZOLiyYCcbFBiTMyID+2wvm2w6+pZ/odMA7cRkjhsPbltwBOrLg==", + "dev": true, + "requires": { + "ansi-colors": "^4.1.1" + } + }, + "esbuild": { + "version": "0.13.6", + "resolved": "https://registry.npmjs.org/esbuild/-/esbuild-0.13.6.tgz", + "integrity": "sha512-zkMkYwC9ohVe6qxXykKf/4jfbtM/09CL8UEEnwuhO7Xq8NOTN2yAwCrmKKvHlGrEej6Y8e/tAmHB7wMMg7O0ew==", + "dev": true, + "requires": { + "esbuild-android-arm64": "0.13.6", + "esbuild-darwin-64": "0.13.6", + "esbuild-darwin-arm64": "0.13.6", + "esbuild-freebsd-64": "0.13.6", + "esbuild-freebsd-arm64": "0.13.6", + "esbuild-linux-32": "0.13.6", + "esbuild-linux-64": "0.13.6", + "esbuild-linux-arm": "0.13.6", + "esbuild-linux-arm64": "0.13.6", + "esbuild-linux-mips64le": "0.13.6", + "esbuild-linux-ppc64le": "0.13.6", + "esbuild-netbsd-64": "0.13.6", + "esbuild-openbsd-64": "0.13.6", + "esbuild-sunos-64": "0.13.6", + "esbuild-windows-32": "0.13.6", + "esbuild-windows-64": "0.13.6", + "esbuild-windows-arm64": "0.13.6" + } + }, + "esbuild-android-arm64": { + "version": "0.13.6", + "resolved": "https://registry.npmjs.org/esbuild-android-arm64/-/esbuild-android-arm64-0.13.6.tgz", + "integrity": "sha512-uEwrMRzqNzXxzIi0K/CtHn3/SPoRso4Dd/aJCpf9KuX+kCs9Tlhz29cKbZieznYAekdo36fDUrZyuugAwSdI+A==", + "dev": true, + "optional": true + }, + "esbuild-darwin-64": { + "version": "0.13.6", + "resolved": "https://registry.npmjs.org/esbuild-darwin-64/-/esbuild-darwin-64-0.13.6.tgz", + "integrity": "sha512-oJdWZn2QV5LTM24/vVWaUFlMVlRhpG9zZIA6Xd+xbCULOURwYnYRQWIzRpXNtTfuAr3+em9PqKUaGtYqvO/DYg==", + "dev": true, + "optional": true + }, + "esbuild-darwin-arm64": { + "version": "0.13.6", + "resolved": "https://registry.npmjs.org/esbuild-darwin-arm64/-/esbuild-darwin-arm64-0.13.6.tgz", + "integrity": "sha512-+f8Yn5doTEpCWtBaGxciDTikxESdGCNZpLYtXzMJLTWFHr8zqfAf4TAYGvg6T5T6N7OMC8HHy3GM+BijFXDXMg==", + "dev": true, + "optional": true + }, + "esbuild-freebsd-64": { + "version": "0.13.6", + "resolved": "https://registry.npmjs.org/esbuild-freebsd-64/-/esbuild-freebsd-64-0.13.6.tgz", + "integrity": "sha512-Yb/DgZUX0C6i4vnOymthLzoWAJBYWbn3Y2F4wKEufsx2veGN/wlwO/yz7IWGVVzb2zMUqbt30hCLF61sUFe7gA==", + "dev": true, + "optional": true + }, + "esbuild-freebsd-arm64": { + "version": "0.13.6", + "resolved": "https://registry.npmjs.org/esbuild-freebsd-arm64/-/esbuild-freebsd-arm64-0.13.6.tgz", + "integrity": "sha512-UKYlEb7mwprSJ9VW9+q3/Mgxest45I6rGMB/hrKY1T6lqoBVhWS4BTbL4EGetWdk05Tw4njFAO9+nmxgl7jMlA==", + "dev": true, + "optional": true + }, + "esbuild-linux-32": { + "version": "0.13.6", + "resolved": "https://registry.npmjs.org/esbuild-linux-32/-/esbuild-linux-32-0.13.6.tgz", + "integrity": "sha512-hQCZfSLBYtn8f1afFT6Dh9KeLsW12xLqrqssbhpi/xfN9c/bbCh/QQZaR9ZOEnmBHHRPb7rbSo3jQqlCWYb7LQ==", + "dev": true, + "optional": true + }, + "esbuild-linux-64": { + "version": "0.13.6", + "resolved": "https://registry.npmjs.org/esbuild-linux-64/-/esbuild-linux-64-0.13.6.tgz", + "integrity": "sha512-bRQwsD+xJoajonfyeq5JpiNRogH4mYFYbYsGhwrtQ4pMGk93V/4KuKQiKEisRZO0hYhZL4MtxufwF195zKlCAw==", + "dev": true, + "optional": true + }, + "esbuild-linux-arm": { + "version": "0.13.6", + "resolved": "https://registry.npmjs.org/esbuild-linux-arm/-/esbuild-linux-arm-0.13.6.tgz", + "integrity": "sha512-qQUrpL7QoPqujXEFSpeu6QZ43z0+OdDPHDkLO0GPbpV/jebP7J+0FreMqoq7ZxWG4rPigwcRdEyqzHh8Bh4Faw==", + "dev": true, + "optional": true + }, + "esbuild-linux-arm64": { + "version": "0.13.6", + "resolved": "https://registry.npmjs.org/esbuild-linux-arm64/-/esbuild-linux-arm64-0.13.6.tgz", + "integrity": "sha512-sRc1lt9ma1xBvInCwpS77ywR6KVdcJNsErsrDkDXx3mVe8DLLEn05TG0nIX9I+s8ouHEepikdKCfe1DZdILRjQ==", + "dev": true, + "optional": true + }, + "esbuild-linux-mips64le": { + "version": "0.13.6", + "resolved": "https://registry.npmjs.org/esbuild-linux-mips64le/-/esbuild-linux-mips64le-0.13.6.tgz", + "integrity": "sha512-1lsHZaIsHlFkHn1QRa/EONPGVHwzdIrkKn6r2m9cYUIn2J+rKtJg0e+WkNG3MaIrxozaGKaiSPGvaG1toCbZjw==", + "dev": true, + "optional": true + }, + "esbuild-linux-ppc64le": { + "version": "0.13.6", + "resolved": "https://registry.npmjs.org/esbuild-linux-ppc64le/-/esbuild-linux-ppc64le-0.13.6.tgz", + "integrity": "sha512-x223JNC8XeLDf05zLaKfxqCEWVct4frp8ft8Qc13cha33TMrqMFaSPq6cgpgT2VYuUsXtwoocoWChKfvy+AUQg==", + "dev": true, + "optional": true + }, + "esbuild-netbsd-64": { + "version": "0.13.6", + "resolved": "https://registry.npmjs.org/esbuild-netbsd-64/-/esbuild-netbsd-64-0.13.6.tgz", + "integrity": "sha512-TonKf530kT25+zi1Da6esITmuBJe13QiN+QGVch6YE8t720IvIelDGwkOQN3Td7A0JjbSbK3u+Fo6YaL151VxQ==", + "dev": true, + "optional": true + }, + "esbuild-openbsd-64": { + "version": "0.13.6", + "resolved": "https://registry.npmjs.org/esbuild-openbsd-64/-/esbuild-openbsd-64-0.13.6.tgz", + "integrity": "sha512-WFa5J0IuyER0UJbCGw87gvGWXGfhxeNppYcvQjp0pWYuH4FS+YqphyjV0RJlybzzDpAXkyZ9RzkMFtSAp+6AUA==", + "dev": true, + "optional": true + }, + "esbuild-sunos-64": { + "version": "0.13.6", + "resolved": "https://registry.npmjs.org/esbuild-sunos-64/-/esbuild-sunos-64-0.13.6.tgz", + "integrity": "sha512-duCL8Ewri+zjKxuN/61maniDxcd8fHwSuubdAPofll0y0E6WcL/R/e/mQzhHIuoguFm5RJkKun1qua54javh7g==", + "dev": true, + "optional": true + }, + "esbuild-windows-32": { + "version": "0.13.6", + "resolved": "https://registry.npmjs.org/esbuild-windows-32/-/esbuild-windows-32-0.13.6.tgz", + "integrity": "sha512-U8RkpT4f0/dygA5ytFyHNZ/fRECU9LWBMrqWflNhM31iTi6RhU0QTuOzFYkmpYnwl358ZZhVoBeEOm313d4u4A==", + "dev": true, + "optional": true + }, + "esbuild-windows-64": { + "version": "0.13.6", + "resolved": "https://registry.npmjs.org/esbuild-windows-64/-/esbuild-windows-64-0.13.6.tgz", + "integrity": "sha512-A23VyUeyBfSWUYNL0jtrJi5M/2yR/RR8zfpGQ0wU0fldqV2vxnvmBYOBwRxexFYCDRpRWh4cPFsoYoXRCFa8Dg==", + "dev": true, + "optional": true + }, + "esbuild-windows-arm64": { + "version": "0.13.6", + "resolved": "https://registry.npmjs.org/esbuild-windows-arm64/-/esbuild-windows-arm64-0.13.6.tgz", + "integrity": "sha512-K/pFqK/s5C6wXYcFKO9iPY4yU3DI0/Gbl1W2+OhaPHoXu13VGBmqbCiQ5lohHGE72FFQl76naOjEayEiI+gDMQ==", + "dev": true, + "optional": true + }, + "escalade": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/escalade/-/escalade-3.1.1.tgz", + "integrity": "sha512-k0er2gUkLf8O0zKJiAhmkTnJlTvINGv7ygDNPbeIsX/TJjGJZHuh9B2UxbsaEkmlEo9MfhrSzmhIlhRlI2GXnw==", + "dev": true + }, + "escape-string-regexp": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-4.0.0.tgz", + "integrity": "sha512-TtpcNJ3XAzx3Gq8sWRzJaVajRs0uVxA2YAkdb1jm2YkPz4G6egUFAyA3n5vtEIZefPk5Wa4UXbKuS5fKkJWdgA==", + "dev": true + }, + "eslint": { + "version": "8.0.1", + "resolved": "https://registry.npmjs.org/eslint/-/eslint-8.0.1.tgz", + "integrity": "sha512-LsgcwZgQ72vZ+SMp4K6pAnk2yFDWL7Ti4pJaRvsZ0Hsw2h8ZjUIW38a9AFn2cZXdBMlScMFYYgsSp4ttFI/0bA==", + "dev": true, + "requires": { + "@eslint/eslintrc": "^1.0.3", + "@humanwhocodes/config-array": "^0.6.0", + "ajv": "^6.10.0", + "chalk": "^4.0.0", + "cross-spawn": "^7.0.2", + "debug": "^4.3.2", + "doctrine": "^3.0.0", + "enquirer": "^2.3.5", + "escape-string-regexp": "^4.0.0", + "eslint-scope": "^6.0.0", + "eslint-utils": "^3.0.0", + "eslint-visitor-keys": "^3.0.0", + "espree": "^9.0.0", + "esquery": "^1.4.0", + "esutils": "^2.0.2", + "fast-deep-equal": "^3.1.3", + "file-entry-cache": "^6.0.1", + "functional-red-black-tree": "^1.0.1", + "glob-parent": "^6.0.1", + "globals": "^13.6.0", + "ignore": "^4.0.6", + "import-fresh": "^3.0.0", + "imurmurhash": "^0.1.4", + "is-glob": "^4.0.0", + "js-yaml": "^4.1.0", + "json-stable-stringify-without-jsonify": "^1.0.1", + "levn": "^0.4.1", + "lodash.merge": "^4.6.2", + "minimatch": "^3.0.4", + "natural-compare": "^1.4.0", + "optionator": "^0.9.1", + "progress": "^2.0.0", + "regexpp": "^3.2.0", + "semver": "^7.2.1", + "strip-ansi": "^6.0.0", + "strip-json-comments": "^3.1.0", + "text-table": "^0.2.0", + "v8-compile-cache": "^2.0.3" + } + }, + "eslint-config-prettier": { + "version": "8.3.0", + "resolved": "https://registry.npmjs.org/eslint-config-prettier/-/eslint-config-prettier-8.3.0.tgz", + "integrity": "sha512-BgZuLUSeKzvlL/VUjx/Yb787VQ26RU3gGjA3iiFvdsp/2bMfVIWUVP7tjxtjS0e+HP409cPlPvNkQloz8C91ew==", + "dev": true, + "requires": {} + }, + "eslint-plugin-vue": { + "version": "7.19.1", + "resolved": "https://registry.npmjs.org/eslint-plugin-vue/-/eslint-plugin-vue-7.19.1.tgz", + "integrity": "sha512-e2pD7nW2sTY04ThH+66BgToNwC4n6dqfNhKE+ypdJFtZgn3Zn+nP8ZEIFPG0PGqCKQ3qxy8dJk1bzUsuQd3ANA==", + "dev": true, + "requires": { + "eslint-utils": "^2.1.0", + "natural-compare": "^1.4.0", + "semver": "^6.3.0", + "vue-eslint-parser": "^7.10.0" + }, + "dependencies": { + "eslint-utils": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/eslint-utils/-/eslint-utils-2.1.0.tgz", + "integrity": "sha512-w94dQYoauyvlDc43XnGB8lU3Zt713vNChgt4EWwhXAP2XkBvndfxF0AgIqKOOasjPIPzj9JqgwkwbCYD0/V3Zg==", + "dev": true, + "requires": { + "eslint-visitor-keys": "^1.1.0" + } + }, + "eslint-visitor-keys": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-1.3.0.tgz", + "integrity": "sha512-6J72N8UNa462wa/KFODt/PJ3IU60SDpC3QXC1Hjc1BXXpfL2C9R5+AU7jhe0F6GREqVMh4Juu+NY7xn+6dipUQ==", + "dev": true + }, + "semver": { + "version": "6.3.0", + "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.0.tgz", + "integrity": "sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw==", + "dev": true + } + } + }, + "eslint-scope": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/eslint-scope/-/eslint-scope-6.0.0.tgz", + "integrity": "sha512-uRDL9MWmQCkaFus8RF5K9/L/2fn+80yoW3jkD53l4shjCh26fCtvJGasxjUqP5OT87SYTxCVA3BwTUzuELx9kA==", + "dev": true, + "requires": { + "esrecurse": "^4.3.0", + "estraverse": "^5.2.0" + } + }, + "eslint-utils": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/eslint-utils/-/eslint-utils-3.0.0.tgz", + "integrity": "sha512-uuQC43IGctw68pJA1RgbQS8/NP7rch6Cwd4j3ZBtgo4/8Flj4eGE7ZYSZRN3iq5pVUv6GPdW5Z1RFleo84uLDA==", + "dev": true, + "requires": { + "eslint-visitor-keys": "^2.0.0" + }, + "dependencies": { + "eslint-visitor-keys": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-2.1.0.tgz", + "integrity": "sha512-0rSmRBzXgDzIsD6mGdJgevzgezI534Cer5L/vyMX0kHzT/jiB43jRhd9YUlMGYLQy2zprNmoT8qasCGtY+QaKw==", + "dev": true + } + } + }, + "eslint-visitor-keys": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-3.0.0.tgz", + "integrity": "sha512-mJOZa35trBTb3IyRmo8xmKBZlxf+N7OnUl4+ZhJHs/r+0770Wh/LEACE2pqMGMe27G/4y8P2bYGk4J70IC5k1Q==", + "dev": true + }, + "espree": { + "version": "9.0.0", + "resolved": "https://registry.npmjs.org/espree/-/espree-9.0.0.tgz", + "integrity": "sha512-r5EQJcYZ2oaGbeR0jR0fFVijGOcwai07/690YRXLINuhmVeRY4UKSAsQPe/0BNuDgwP7Ophoc1PRsr2E3tkbdQ==", + "dev": true, + "requires": { + "acorn": "^8.5.0", + "acorn-jsx": "^5.3.1", + "eslint-visitor-keys": "^3.0.0" + } + }, + "esprima": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/esprima/-/esprima-4.0.1.tgz", + "integrity": "sha512-eGuFFw7Upda+g4p+QHvnW0RyTX/SVeJBDM/gCtMARO0cLuT2HcEKnTPvhjV6aGeqrCB/sbNop0Kszm0jsaWU4A==", + "dev": true + }, + "esquery": { + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/esquery/-/esquery-1.4.0.tgz", + "integrity": "sha512-cCDispWt5vHHtwMY2YrAQ4ibFkAL8RbH5YGBnZBc90MolvvfkkQcJro/aZiAQUlQ3qgrYS6D6v8Gc5G5CQsc9w==", + "dev": true, + "requires": { + "estraverse": "^5.1.0" + } + }, + "esrecurse": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/esrecurse/-/esrecurse-4.3.0.tgz", + "integrity": "sha512-KmfKL3b6G+RXvP8N1vr3Tq1kL/oCFgn2NYXEtqP8/L3pKapUA4G8cFVaoF3SU323CD4XypR/ffioHmkti6/Tag==", + "dev": true, + "requires": { + "estraverse": "^5.2.0" + } + }, + "estraverse": { + "version": "5.2.0", + "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-5.2.0.tgz", + "integrity": "sha512-BxbNGGNm0RyRYvUdHpIwv9IWzeM9XClbOxwoATuFdOE7ZE6wHL+HQ5T8hoPM+zHvmKzzsEqhgy0GrQ5X13afiQ==", + "dev": true + }, + "estree-walker": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/estree-walker/-/estree-walker-2.0.2.tgz", + "integrity": "sha512-Rfkk/Mp/DL7JVje3u18FxFujQlTNR2q6QfMSMB7AvCBx91NGj/ba3kCfza0f6dVDbw7YlRf/nDrn7pQrCCyQ/w==", + "dev": true + }, + "esutils": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/esutils/-/esutils-2.0.3.tgz", + "integrity": "sha512-kVscqXk4OCp68SZ0dkgEKVi6/8ij300KBWTJq32P/dYeWTSwK41WyTxalN1eRmA5Z9UU/LX9D7FWSmV9SAYx6g==", + "dev": true + }, + "fast-deep-equal": { + "version": "3.1.3", + "resolved": "https://registry.npmjs.org/fast-deep-equal/-/fast-deep-equal-3.1.3.tgz", + "integrity": "sha512-f3qQ9oQy9j2AhBe/H9VC91wLmKBCCU/gDOnKNAYG5hswO7BLKj09Hc5HYNz9cGI++xlpDCIgDaitVs03ATR84Q==", + "dev": true + }, + "fast-json-stable-stringify": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/fast-json-stable-stringify/-/fast-json-stable-stringify-2.1.0.tgz", + "integrity": "sha512-lhd/wF+Lk98HZoTCtlVraHtfh5XYijIjalXck7saUtuanSDyLMxnHhSXEDJqHxD7msR8D0uCmqlkwjCV8xvwHw==", + "dev": true + }, + "fast-levenshtein": { + "version": "2.0.6", + "resolved": "https://registry.npmjs.org/fast-levenshtein/-/fast-levenshtein-2.0.6.tgz", + "integrity": "sha1-PYpcZog6FqMMqGQ+hR8Zuqd5eRc=", + "dev": true + }, + "file-entry-cache": { + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/file-entry-cache/-/file-entry-cache-6.0.1.tgz", + "integrity": "sha512-7Gps/XWymbLk2QLYK4NzpMOrYjMhdIxXuIvy2QBsLE6ljuodKvdkWs/cpyJJ3CVIVpH0Oi1Hvg1ovbMzLdFBBg==", + "dev": true, + "requires": { + "flat-cache": "^3.0.4" + } + }, + "fill-range": { + "version": "7.0.1", + "resolved": "https://registry.npmjs.org/fill-range/-/fill-range-7.0.1.tgz", + "integrity": "sha512-qOo9F+dMUmC2Lcb4BbVvnKJxTPjCm+RRpe4gDuGrzkL7mEVl/djYSu2OdQ2Pa302N4oqkSg9ir6jaLWJ2USVpQ==", + "dev": true, + "requires": { + "to-regex-range": "^5.0.1" + } + }, + "flat-cache": { + "version": "3.0.4", + "resolved": "https://registry.npmjs.org/flat-cache/-/flat-cache-3.0.4.tgz", + "integrity": "sha512-dm9s5Pw7Jc0GvMYbshN6zchCA9RgQlzzEZX3vylR9IqFfS8XciblUXOKfW6SiuJ0e13eDYZoZV5wdrev7P3Nwg==", + "dev": true, + "requires": { + "flatted": "^3.1.0", + "rimraf": "^3.0.2" + } + }, + "flatted": { + "version": "3.2.2", + "resolved": "https://registry.npmjs.org/flatted/-/flatted-3.2.2.tgz", + "integrity": "sha512-JaTY/wtrcSyvXJl4IMFHPKyFur1sE9AUqc0QnhOaJ0CxHtAoIV8pYDzeEfAaNEtGkOfq4gr3LBFmdXW5mOQFnA==", + "dev": true + }, + "fs-extra": { + "version": "9.1.0", + "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-9.1.0.tgz", + "integrity": "sha512-hcg3ZmepS30/7BSFqRvoo3DOMQu7IjqxO5nCDt+zM9XWjb33Wg7ziNT+Qvqbuc3+gWpzO02JubVyk2G4Zvo1OQ==", + "dev": true, + "requires": { + "at-least-node": "^1.0.0", + "graceful-fs": "^4.2.0", + "jsonfile": "^6.0.1", + "universalify": "^2.0.0" + } + }, + "fs.realpath": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/fs.realpath/-/fs.realpath-1.0.0.tgz", + "integrity": "sha1-FQStJSMVjKpA20onh8sBQRmU6k8=", + "dev": true + }, + "fsevents": { + "version": "2.3.2", + "resolved": "https://registry.npmjs.org/fsevents/-/fsevents-2.3.2.tgz", + "integrity": "sha512-xiqMQR4xAeHTuB9uWm+fFRcIOgKBMiOBP+eXiyT7jsgVCq1bkVygt00oASowB7EdtpOHaaPgKt812P9ab+DDKA==", + "dev": true, + "optional": true + }, + "function-bind": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/function-bind/-/function-bind-1.1.1.tgz", + "integrity": "sha512-yIovAzMX49sF8Yl58fSCWJ5svSLuaibPxXQJFLmBObTuCr0Mf1KiPopGM9NiFjiYBCbfaa2Fh6breQ6ANVTI0A==", + "dev": true + }, + "functional-red-black-tree": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/functional-red-black-tree/-/functional-red-black-tree-1.0.1.tgz", + "integrity": "sha1-GwqzvVU7Kg1jmdKcDj6gslIHgyc=", + "dev": true + }, + "gensync": { + "version": "1.0.0-beta.2", + "resolved": "https://registry.npmjs.org/gensync/-/gensync-1.0.0-beta.2.tgz", + "integrity": "sha512-3hN7NaskYvMDLQY55gnW3NQ+mesEAepTqlg+VEbj7zzqEMBVNhzcGYYeqFo/TlYz6eQiFcp1HcsCZO+nGgS8zg==", + "dev": true + }, + "glob": { + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/glob/-/glob-7.2.0.tgz", + "integrity": "sha512-lmLf6gtyrPq8tTjSmrO94wBeQbFR3HbLHbuyD69wuyQkImp2hWqMGB47OX65FBkPffO641IP9jWa1z4ivqG26Q==", + "dev": true, + "requires": { + "fs.realpath": "^1.0.0", + "inflight": "^1.0.4", + "inherits": "2", + "minimatch": "^3.0.4", + "once": "^1.3.0", + "path-is-absolute": "^1.0.0" + } + }, + "glob-parent": { + "version": "6.0.2", + "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-6.0.2.tgz", + "integrity": "sha512-XxwI8EOhVQgWp6iDL+3b0r86f4d6AX6zSU55HfB4ydCEuXLXc5FcYeOu+nnGftS4TEju/11rt4KJPTMgbfmv4A==", + "dev": true, + "requires": { + "is-glob": "^4.0.3" + } + }, + "globals": { + "version": "13.11.0", + "resolved": "https://registry.npmjs.org/globals/-/globals-13.11.0.tgz", + "integrity": "sha512-08/xrJ7wQjK9kkkRoI3OFUBbLx4f+6x3SGwcPvQ0QH6goFDrOU2oyAWrmh3dJezu65buo+HBMzAMQy6rovVC3g==", + "dev": true, + "requires": { + "type-fest": "^0.20.2" + } + }, + "graceful-fs": { + "version": "4.2.8", + "resolved": "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.2.8.tgz", + "integrity": "sha512-qkIilPUYcNhJpd33n0GBXTB1MMPp14TxEsEs0pTrsSVucApsYzW5V+Q8Qxhik6KU3evy+qkAAowTByymK0avdg==", + "dev": true + }, + "has": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/has/-/has-1.0.3.tgz", + "integrity": "sha512-f2dvO0VU6Oej7RkWJGrehjbzMAjFp5/VKPp5tTpWIV4JHHZK1/BxbFRtf/siA2SWTe09caDmVtYYzWEIbBS4zw==", + "dev": true, + "requires": { + "function-bind": "^1.1.1" + } + }, + "has-ansi": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/has-ansi/-/has-ansi-2.0.0.tgz", + "integrity": "sha1-NPUEnOHs3ysGSa8+8k5F7TVBbZE=", + "dev": true, + "requires": { + "ansi-regex": "^2.0.0" + }, + "dependencies": { + "ansi-regex": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-2.1.1.tgz", + "integrity": "sha1-w7M6te42DYbg5ijwRorn7yfWVN8=", + "dev": true + } + } + }, + "has-flag": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", + "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", + "dev": true + }, + "hash-sum": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/hash-sum/-/hash-sum-2.0.0.tgz", + "integrity": "sha512-WdZTbAByD+pHfl/g9QSsBIIwy8IT+EsPiKDs0KNX+zSHhdDLFKdZu0BQHljvO+0QI/BasbMSUa8wYNCZTvhslg==", + "dev": true + }, + "he": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/he/-/he-1.2.0.tgz", + "integrity": "sha512-F/1DnUGPopORZi0ni+CvrCgHQ5FyEAHRLSApuYWMmrbSwoN2Mn/7k+Gl38gJnR7yyDZk6WLXwiGod1JOWNDKGw==", + "dev": true + }, + "html-tags": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/html-tags/-/html-tags-2.0.0.tgz", + "integrity": "sha1-ELMKOGCF9Dzt41PMj6fLDe7qZos=", + "dev": true + }, + "ignore": { + "version": "4.0.6", + "resolved": "https://registry.npmjs.org/ignore/-/ignore-4.0.6.tgz", + "integrity": "sha512-cyFDKrqc/YdcWFniJhzI42+AzS+gNwmUzOSFcRCQYwySuBBBy/KjuxWLZ/FHEH6Moq1NizMOBWyTcv8O4OZIMg==", + "dev": true + }, + "import-fresh": { + "version": "3.3.0", + "resolved": "https://registry.npmjs.org/import-fresh/-/import-fresh-3.3.0.tgz", + "integrity": "sha512-veYYhQa+D1QBKznvhUHxb8faxlrwUnxseDAbAp457E0wLNio2bOSKnjYDhMj+YiAq61xrMGhQk9iXVk5FzgQMw==", + "dev": true, + "requires": { + "parent-module": "^1.0.0", + "resolve-from": "^4.0.0" + } + }, + "imurmurhash": { + "version": "0.1.4", + "resolved": "https://registry.npmjs.org/imurmurhash/-/imurmurhash-0.1.4.tgz", + "integrity": "sha1-khi5srkoojixPcT7a21XbyMUU+o=", + "dev": true + }, + "inflight": { + "version": "1.0.6", + "resolved": "https://registry.npmjs.org/inflight/-/inflight-1.0.6.tgz", + "integrity": "sha1-Sb1jMdfQLQwJvJEKEHW6gWW1bfk=", + "dev": true, + "requires": { + "once": "^1.3.0", + "wrappy": "1" + } + }, + "inherits": { + "version": "2.0.4", + "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.4.tgz", + "integrity": "sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ==", + "dev": true + }, + "invariant": { + "version": "2.2.4", + "resolved": "https://registry.npmjs.org/invariant/-/invariant-2.2.4.tgz", + "integrity": "sha512-phJfQVBuaJM5raOpJjSfkiD6BpbCE4Ns//LaXl6wGYtUBY83nWS6Rf9tXm2e8VaK60JEjYldbPif/A2B1C2gNA==", + "dev": true, + "requires": { + "loose-envify": "^1.0.0" + } + }, + "is-binary-path": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/is-binary-path/-/is-binary-path-2.1.0.tgz", + "integrity": "sha512-ZMERYes6pDydyuGidse7OsHxtbI7WVeUEozgR/g7rd0xUimYNlvZRE/K2MgZTjWy725IfelLeVcEM97mmtRGXw==", + "dev": true, + "requires": { + "binary-extensions": "^2.0.0" + } + }, + "is-core-module": { + "version": "2.8.0", + "resolved": "https://registry.npmjs.org/is-core-module/-/is-core-module-2.8.0.tgz", + "integrity": "sha512-vd15qHsaqrRL7dtH6QNuy0ndJmRDrS9HAM1CAiSifNUFv4x1a0CCVsj18hJ1mShxIG6T2i1sO78MkP56r0nYRw==", + "dev": true, + "requires": { + "has": "^1.0.3" + } + }, + "is-extglob": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/is-extglob/-/is-extglob-2.1.1.tgz", + "integrity": "sha1-qIwCU1eR8C7TfHahueqXc8gz+MI=", + "dev": true + }, + "is-glob": { + "version": "4.0.3", + "resolved": "https://registry.npmjs.org/is-glob/-/is-glob-4.0.3.tgz", + "integrity": "sha512-xelSayHH36ZgE7ZWhli7pW34hNbNl8Ojv5KVmkJD4hBdD3th8Tfk9vYasLM+mXWOZhFkgZfxhLSnrwRr4elSSg==", + "dev": true, + "requires": { + "is-extglob": "^2.1.1" + } + }, + "is-number": { + "version": "7.0.0", + "resolved": "https://registry.npmjs.org/is-number/-/is-number-7.0.0.tgz", + "integrity": "sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng==", + "dev": true + }, + "isexe": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/isexe/-/isexe-2.0.0.tgz", + "integrity": "sha1-6PvzdNxVb/iUehDcsFctYz8s+hA=", + "dev": true + }, + "js-tokens": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/js-tokens/-/js-tokens-4.0.0.tgz", + "integrity": "sha512-RdJUflcE3cUzKiMqQgsCu06FPu9UdIJO0beYbPhHN4k6apgJtifcoCtT9bcxOpYBtpD2kCM6Sbzg4CausW/PKQ==", + "dev": true + }, + "js-yaml": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-4.1.0.tgz", + "integrity": "sha512-wpxZs9NoxZaJESJGIZTyDEaYpl0FKSA+FB9aJiyemKhMwkxQg63h4T1KJgUGHpTqPDNRcmmYLugrRjJlBtWvRA==", + "dev": true, + "requires": { + "argparse": "^2.0.1" + } + }, + "jsesc": { + "version": "2.5.2", + "resolved": "https://registry.npmjs.org/jsesc/-/jsesc-2.5.2.tgz", + "integrity": "sha512-OYu7XEzjkCQ3C5Ps3QIZsQfNpqoJyZZA99wd9aWd05NCtC5pWOkShK2mkL6HXQR6/Cy2lbNdPlZBpuQHXE63gA==", + "dev": true + }, + "json-schema-traverse": { + "version": "0.4.1", + "resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-0.4.1.tgz", + "integrity": "sha512-xbbCH5dCYU5T8LcEhhuh7HJ88HXuW3qsI3Y0zOZFKfZEHcpWiHU/Jxzk629Brsab/mMiHQti9wMP+845RPe3Vg==", + "dev": true + }, + "json-stable-stringify-without-jsonify": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/json-stable-stringify-without-jsonify/-/json-stable-stringify-without-jsonify-1.0.1.tgz", + "integrity": "sha1-nbe1lJatPzz+8wp1FC0tkwrXJlE=", + "dev": true + }, + "json5": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/json5/-/json5-2.2.0.tgz", + "integrity": "sha512-f+8cldu7X/y7RAJurMEJmdoKXGB/X550w2Nr3tTbezL6RwEE/iMcm+tZnXeoZtKuOq6ft8+CqzEkrIgx1fPoQA==", + "dev": true, + "requires": { + "minimist": "^1.2.5" + } + }, + "jsonfile": { + "version": "6.1.0", + "resolved": "https://registry.npmjs.org/jsonfile/-/jsonfile-6.1.0.tgz", + "integrity": "sha512-5dgndWOriYSm5cnYaJNhalLNDKOqFwyDB/rr1E9ZsGciGvKPs8R2xYGCacuf3z6K1YKDz182fd+fY3cn3pMqXQ==", + "dev": true, + "requires": { + "graceful-fs": "^4.1.6", + "universalify": "^2.0.0" + } + }, + "kirbyup": { + "version": "0.18.0", + "resolved": "https://registry.npmjs.org/kirbyup/-/kirbyup-0.18.0.tgz", + "integrity": "sha512-B+mZux9Fn32dG3Li6M0urm2fi8JySlCe3zunX4rI6YZJvaGHaGVv14l0/H4SGRhqetEdoG4/frmr7rIUVDVRFw==", + "dev": true, + "requires": { + "cac": "^6.7.8", + "chokidar": "^3.5.2", + "colorette": "^2.0.16", + "postcss-dir-pseudo-class": "^6.0.0", + "postcss-logical": "^5.0.0", + "sass": "^1.42.1", + "vite": "^2.6.7", + "vite-plugin-vue2": "^1.8.2", + "vue": "^2.6.14", + "vue-template-compiler": "^2.6.14" + } + }, + "levn": { + "version": "0.4.1", + "resolved": "https://registry.npmjs.org/levn/-/levn-0.4.1.tgz", + "integrity": "sha512-+bT2uH4E5LGE7h/n3evcS/sQlJXCpIp6ym8OWJ5eV6+67Dsql/LaaT7qJBAt2rzfoa/5QBGBhxDix1dMt2kQKQ==", + "dev": true, + "requires": { + "prelude-ls": "^1.2.1", + "type-check": "~0.4.0" + } + }, + "lodash": { + "version": "4.17.21", + "resolved": "https://registry.npmjs.org/lodash/-/lodash-4.17.21.tgz", + "integrity": "sha512-v2kDEe57lecTulaDIuNTPy3Ry4gLGJ6Z1O3vE1krgXZNrsQ+LFTGHVxVjcXPs17LhbZVGedAJv8XZ1tvj5FvSg==", + "dev": true + }, + "lodash.kebabcase": { + "version": "4.1.1", + "resolved": "https://registry.npmjs.org/lodash.kebabcase/-/lodash.kebabcase-4.1.1.tgz", + "integrity": "sha1-hImxyw0p/4gZXM7KRI/21swpXDY=", + "dev": true + }, + "lodash.merge": { + "version": "4.6.2", + "resolved": "https://registry.npmjs.org/lodash.merge/-/lodash.merge-4.6.2.tgz", + "integrity": "sha512-0KpjqXRVvrYyCsX1swR/XTK0va6VQkQM6MNo7PqW77ByjAhoARA8EfrP1N4+KlKj8YS0ZUCtRT/YUuhyYDujIQ==", + "dev": true + }, + "loose-envify": { + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/loose-envify/-/loose-envify-1.4.0.tgz", + "integrity": "sha512-lyuxPGr/Wfhrlem2CL/UcnUc1zcqKAImBDzukY7Y5F/yQiNdko6+fRLevlw1HgMySw7f611UIY408EtxRSoK3Q==", + "dev": true, + "requires": { + "js-tokens": "^3.0.0 || ^4.0.0" + } + }, + "lru-cache": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-6.0.0.tgz", + "integrity": "sha512-Jo6dJ04CmSjuznwJSS3pUeWmd/H0ffTlkXXgwZi+eq1UCmqQwCh+eLsYOYCwY991i2Fah4h1BEMCx4qThGbsiA==", + "dev": true, + "requires": { + "yallist": "^4.0.0" + } + }, + "magic-string": { + "version": "0.25.7", + "resolved": "https://registry.npmjs.org/magic-string/-/magic-string-0.25.7.tgz", + "integrity": "sha512-4CrMT5DOHTDk4HYDlzmwu4FVCcIYI8gauveasrdCu2IKIFOJ3f0v/8MDGJCDL9oD2ppz/Av1b0Nj345H9M+XIA==", + "dev": true, + "requires": { + "sourcemap-codec": "^1.4.4" + } + }, + "merge-source-map": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/merge-source-map/-/merge-source-map-1.1.0.tgz", + "integrity": "sha512-Qkcp7P2ygktpMPh2mCQZaf3jhN6D3Z/qVZHSdWvQ+2Ef5HgRAPBO57A77+ENm0CPx2+1Ce/MYKi3ymqdfuqibw==", + "dev": true, + "requires": { + "source-map": "^0.6.1" + }, + "dependencies": { + "source-map": { + "version": "0.6.1", + "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", + "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", + "dev": true + } + } + }, + "minimatch": { + "version": "3.0.4", + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.0.4.tgz", + "integrity": "sha512-yJHVQEhyqPLUTgt9B83PXu6W3rx4MvvHvSUvToogpwoGDOUQ+yDrR0HRot+yOCdCO7u4hX3pWft6kWBBcqh0UA==", + "dev": true, + "requires": { + "brace-expansion": "^1.1.7" + } + }, + "minimist": { + "version": "1.2.5", + "resolved": "https://registry.npmjs.org/minimist/-/minimist-1.2.5.tgz", + "integrity": "sha512-FM9nNUYrRBAELZQT3xeZQ7fmMOBg6nWNmJKTcgsJeaLstP/UODVpGsr5OhXhhXg6f+qtJ8uiZ+PUxkDWcgIXLw==", + "dev": true + }, + "ms": { + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz", + "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==", + "dev": true + }, + "nanoid": { + "version": "3.1.30", + "resolved": "https://registry.npmjs.org/nanoid/-/nanoid-3.1.30.tgz", + "integrity": "sha512-zJpuPDwOv8D2zq2WRoMe1HsfZthVewpel9CAvTfc/2mBD1uUT/agc5f7GHGWXlYkFvi1mVxe4IjvP2HNrop7nQ==", + "dev": true + }, + "natural-compare": { + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/natural-compare/-/natural-compare-1.4.0.tgz", + "integrity": "sha1-Sr6/7tdUHywnrPspvbvRXI1bpPc=", + "dev": true + }, + "node-releases": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/node-releases/-/node-releases-2.0.0.tgz", + "integrity": "sha512-aA87l0flFYMzCHpTM3DERFSYxc6lv/BltdbRTOMZuxZ0cwZCD3mejE5n9vLhSJCN++/eOqr77G1IO5uXxlQYWA==", + "dev": true + }, + "normalize-path": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/normalize-path/-/normalize-path-3.0.0.tgz", + "integrity": "sha512-6eZs5Ls3WtCisHWp9S2GUy8dqkpGi4BVSz3GaqiE6ezub0512ESztXUwUB6C6IKbQkY2Pnb/mD4WYojCRwcwLA==", + "dev": true + }, + "once": { + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/once/-/once-1.4.0.tgz", + "integrity": "sha1-WDsap3WWHUsROsF9nFC6753Xa9E=", + "dev": true, + "requires": { + "wrappy": "1" + } + }, + "optionator": { + "version": "0.9.1", + "resolved": "https://registry.npmjs.org/optionator/-/optionator-0.9.1.tgz", + "integrity": "sha512-74RlY5FCnhq4jRxVUPKDaRwrVNXMqsGsiW6AJw4XK8hmtm10wC0ypZBLw5IIp85NZMr91+qd1RvvENwg7jjRFw==", + "dev": true, + "requires": { + "deep-is": "^0.1.3", + "fast-levenshtein": "^2.0.6", + "levn": "^0.4.1", + "prelude-ls": "^1.2.1", + "type-check": "^0.4.0", + "word-wrap": "^1.2.3" + } + }, + "parent-module": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/parent-module/-/parent-module-1.0.1.tgz", + "integrity": "sha512-GQ2EWRpQV8/o+Aw8YqtfZZPfNRWZYkbidE9k5rpl/hC3vtHHBfGm2Ifi6qWV+coDGkrUKZAxE3Lot5kcsRlh+g==", + "dev": true, + "requires": { + "callsites": "^3.0.0" + } + }, + "path-is-absolute": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/path-is-absolute/-/path-is-absolute-1.0.1.tgz", + "integrity": "sha1-F0uSaHNVNP+8es5r9TpanhtcX18=", + "dev": true + }, + "path-key": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/path-key/-/path-key-3.1.1.tgz", + "integrity": "sha512-ojmeN0qd+y0jszEtoY48r0Peq5dwMEkIlCOu6Q5f41lfkswXuKtYrhgoTpLnyIcHm24Uhqx+5Tqm2InSwLhE6Q==", + "dev": true + }, + "path-parse": { + "version": "1.0.7", + "resolved": "https://registry.npmjs.org/path-parse/-/path-parse-1.0.7.tgz", + "integrity": "sha512-LDJzPVEEEPR+y48z93A0Ed0yXb8pAByGWo/k5YYdYgpY2/2EsOsksJrq7lOHxryrVOn1ejG6oAp8ahvOIQD8sw==", + "dev": true + }, + "picocolors": { + "version": "0.2.1", + "resolved": "https://registry.npmjs.org/picocolors/-/picocolors-0.2.1.tgz", + "integrity": "sha512-cMlDqaLEqfSaW8Z7N5Jw+lyIW869EzT73/F5lhtY9cLGoVxSXznfgfXMO0Z5K0o0Q2TkTXq+0KFsdnSe3jDViA==", + "dev": true + }, + "picomatch": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-2.3.0.tgz", + "integrity": "sha512-lY1Q/PiJGC2zOv/z391WOTD+Z02bCgsFfvxoXXf6h7kv9o+WmsmzYqrAwY63sNgOxE4xEdq0WyUnXfKeBrSvYw==", + "dev": true + }, + "postcss": { + "version": "8.3.9", + "resolved": "https://registry.npmjs.org/postcss/-/postcss-8.3.9.tgz", + "integrity": "sha512-f/ZFyAKh9Dnqytx5X62jgjhhzttjZS7hMsohcI7HEI5tjELX/HxCy3EFhsRxyzGvrzFF+82XPvCS8T9TFleVJw==", + "dev": true, + "requires": { + "nanoid": "^3.1.28", + "picocolors": "^0.2.1", + "source-map-js": "^0.6.2" + } + }, + "postcss-dir-pseudo-class": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/postcss-dir-pseudo-class/-/postcss-dir-pseudo-class-6.0.0.tgz", + "integrity": "sha512-TC4eB5ZnLRSV1PLsAPualEjxFysU9IVEBx8h+Md2qzo8iWdNqwWCckx5fTWfe6dJxUpB0TWEpWEFhZ/YHvjSCA==", + "dev": true, + "requires": { + "postcss-selector-parser": "6.0.6" + } + }, + "postcss-logical": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/postcss-logical/-/postcss-logical-5.0.0.tgz", + "integrity": "sha512-fWEWMn/xf6F9SMzAD7OS0GTm8Qh1BlBmEbVT/YZGYhwipQEwOpO7YOOu+qnzLksDg9JjLRj5tLmeN8OW8+ogIA==", + "dev": true, + "requires": {} + }, + "postcss-selector-parser": { + "version": "6.0.6", + "resolved": "https://registry.npmjs.org/postcss-selector-parser/-/postcss-selector-parser-6.0.6.tgz", + "integrity": "sha512-9LXrvaaX3+mcv5xkg5kFwqSzSH1JIObIx51PrndZwlmznwXRfxMddDvo9gve3gVR8ZTKgoFDdWkbRFmEhT4PMg==", + "dev": true, + "requires": { + "cssesc": "^3.0.0", + "util-deprecate": "^1.0.2" + } + }, + "prelude-ls": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/prelude-ls/-/prelude-ls-1.2.1.tgz", + "integrity": "sha512-vkcDPrRZo1QZLbn5RLGPpg/WmIQ65qoWWhcGKf/b5eplkkarX0m9z8ppCat4mlOqUsWpyNuYgO3VRyrYHSzX5g==", + "dev": true + }, + "prettier": { + "version": "2.4.1", + "resolved": "https://registry.npmjs.org/prettier/-/prettier-2.4.1.tgz", + "integrity": "sha512-9fbDAXSBcc6Bs1mZrDYb3XKzDLm4EXXL9sC1LqKP5rZkT6KRr/rf9amVUcODVXgguK/isJz0d0hP72WeaKWsvA==", + "dev": true + }, + "private": { + "version": "0.1.8", + "resolved": "https://registry.npmjs.org/private/-/private-0.1.8.tgz", + "integrity": "sha512-VvivMrbvd2nKkiG38qjULzlc+4Vx4wm/whI9pQD35YrARNnhxeiRktSOhSukRLFNlzg6Br/cJPet5J/u19r/mg==", + "dev": true + }, + "progress": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/progress/-/progress-2.0.3.tgz", + "integrity": "sha512-7PiHtLll5LdnKIMw100I+8xJXR5gW2QwWYkT6iJva0bXitZKa/XMrSbdmg3r2Xnaidz9Qumd0VPaMrZlF9V9sA==", + "dev": true + }, + "pseudomap": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/pseudomap/-/pseudomap-1.0.2.tgz", + "integrity": "sha1-8FKijacOYYkX7wqKw0wa5aaChrM=", + "dev": true + }, + "punycode": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/punycode/-/punycode-2.1.1.tgz", + "integrity": "sha512-XRsRjdf+j5ml+y/6GKHPZbrF/8p2Yga0JPtdqTIY2Xe5ohJPD9saDJJLPvp9+NSBprVvevdXZybnj2cv8OEd0A==", + "dev": true + }, + "querystring": { + "version": "0.2.1", + "resolved": "https://registry.npmjs.org/querystring/-/querystring-0.2.1.tgz", + "integrity": "sha512-wkvS7mL/JMugcup3/rMitHmd9ecIGd2lhFhK9N3UUQ450h66d1r3Y9nvXzQAW1Lq+wyx61k/1pfKS5KuKiyEbg==", + "dev": true + }, + "readdirp": { + "version": "3.6.0", + "resolved": "https://registry.npmjs.org/readdirp/-/readdirp-3.6.0.tgz", + "integrity": "sha512-hOS089on8RduqdbhvQ5Z37A0ESjsqz6qnRcffsMU3495FuTdqSm+7bhJ29JvIOsBDEEnan5DPu9t3To9VRlMzA==", + "dev": true, + "requires": { + "picomatch": "^2.2.1" + } + }, + "regenerate": { + "version": "1.4.2", + "resolved": "https://registry.npmjs.org/regenerate/-/regenerate-1.4.2.tgz", + "integrity": "sha512-zrceR/XhGYU/d/opr2EKO7aRHUeiBI8qjtfHqADTwZd6Szfy16la6kqD0MIUs5z5hx6AaKa+PixpPrR289+I0A==", + "dev": true + }, + "regenerator-runtime": { + "version": "0.11.1", + "resolved": "https://registry.npmjs.org/regenerator-runtime/-/regenerator-runtime-0.11.1.tgz", + "integrity": "sha512-MguG95oij0fC3QV3URf4V2SDYGJhJnJGqvIIgdECeODCT98wSWDAJ94SSuVpYQUoTcGUIL6L4yNB7j1DFFHSBg==", + "dev": true + }, + "regenerator-transform": { + "version": "0.10.1", + "resolved": "https://registry.npmjs.org/regenerator-transform/-/regenerator-transform-0.10.1.tgz", + "integrity": "sha512-PJepbvDbuK1xgIgnau7Y90cwaAmO/LCLMI2mPvaXq2heGMR3aWW5/BQvYrhJ8jgmQjXewXvBjzfqKcVOmhjZ6Q==", + "dev": true, + "requires": { + "babel-runtime": "^6.18.0", + "babel-types": "^6.19.0", + "private": "^0.1.6" + } + }, + "regexpp": { + "version": "3.2.0", + "resolved": "https://registry.npmjs.org/regexpp/-/regexpp-3.2.0.tgz", + "integrity": "sha512-pq2bWo9mVD43nbts2wGv17XLiNLya+GklZ8kaDLV2Z08gDCsGpnKn9BFMepvWuHCbyVvY7J5o5+BVvoQbmlJLg==", + "dev": true + }, + "regexpu-core": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/regexpu-core/-/regexpu-core-2.0.0.tgz", + "integrity": "sha1-SdA4g3uNz4v6W5pCE5k45uoq4kA=", + "dev": true, + "requires": { + "regenerate": "^1.2.1", + "regjsgen": "^0.2.0", + "regjsparser": "^0.1.4" + } + }, + "regjsgen": { + "version": "0.2.0", + "resolved": "https://registry.npmjs.org/regjsgen/-/regjsgen-0.2.0.tgz", + "integrity": "sha1-bAFq3qxVT3WCP+N6wFuS1aTtsfc=", + "dev": true + }, + "regjsparser": { + "version": "0.1.5", + "resolved": "https://registry.npmjs.org/regjsparser/-/regjsparser-0.1.5.tgz", + "integrity": "sha1-fuj4Tcb6eS0/0K4ijSS9lJ6tIFw=", + "dev": true, + "requires": { + "jsesc": "~0.5.0" + }, + "dependencies": { + "jsesc": { + "version": "0.5.0", + "resolved": "https://registry.npmjs.org/jsesc/-/jsesc-0.5.0.tgz", + "integrity": "sha1-597mbjXW/Bb3EP6R1c9p9w8IkR0=", + "dev": true + } + } + }, + "resolve": { + "version": "1.20.0", + "resolved": "https://registry.npmjs.org/resolve/-/resolve-1.20.0.tgz", + "integrity": "sha512-wENBPt4ySzg4ybFQW2TT1zMQucPK95HSh/nq2CFTZVOGut2+pQvSsgtda4d26YrYcr067wjbmzOG8byDPBX63A==", + "dev": true, + "requires": { + "is-core-module": "^2.2.0", + "path-parse": "^1.0.6" + } + }, + "resolve-from": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/resolve-from/-/resolve-from-4.0.0.tgz", + "integrity": "sha512-pb/MYmXstAkysRFx8piNI1tGFNQIFA3vkE3Gq4EuA1dF6gHp/+vgZqsCGJapvy8N3Q+4o7FwvquPJcnZ7RYy4g==", + "dev": true + }, + "rimraf": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-3.0.2.tgz", + "integrity": "sha512-JZkJMZkAGFFPP2YqXZXPbMlMBgsxzE8ILs4lMIX/2o0L9UBw9O/Y3o6wFw/i9YLapcUJWwqbi3kdxIPdC62TIA==", + "dev": true, + "requires": { + "glob": "^7.1.3" + } + }, + "rollup": { + "version": "2.58.0", + "resolved": "https://registry.npmjs.org/rollup/-/rollup-2.58.0.tgz", + "integrity": "sha512-NOXpusKnaRpbS7ZVSzcEXqxcLDOagN6iFS8p45RkoiMqPHDLwJm758UF05KlMoCRbLBTZsPOIa887gZJ1AiXvw==", + "dev": true, + "requires": { + "fsevents": "~2.3.2" + } + }, + "safe-buffer": { + "version": "5.1.2", + "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.2.tgz", + "integrity": "sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g==", + "dev": true + }, + "sass": { + "version": "1.43.2", + "resolved": "https://registry.npmjs.org/sass/-/sass-1.43.2.tgz", + "integrity": "sha512-DncYhjl3wBaPMMJR0kIUaH3sF536rVrOcqqVGmTZHQRRzj7LQlyGV7Mb8aCKFyILMr5VsPHwRYtyKpnKYlmQSQ==", + "dev": true, + "requires": { + "chokidar": ">=3.0.0 <4.0.0" + } + }, + "semver": { + "version": "7.3.5", + "resolved": "https://registry.npmjs.org/semver/-/semver-7.3.5.tgz", + "integrity": "sha512-PoeGJYh8HK4BTO/a9Tf6ZG3veo/A7ZVsYrSA6J8ny9nb3B1VrpkuN+z9OE5wfE5p6H4LchYZsegiQgbJD94ZFQ==", + "dev": true, + "requires": { + "lru-cache": "^6.0.0" + } + }, + "shebang-command": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/shebang-command/-/shebang-command-2.0.0.tgz", + "integrity": "sha512-kHxr2zZpYtdmrN1qDjrrX/Z1rR1kG8Dx+gkpK1G4eXmvXswmcE1hTWBWYUzlraYw1/yZp6YuDY77YtvbN0dmDA==", + "dev": true, + "requires": { + "shebang-regex": "^3.0.0" + } + }, + "shebang-regex": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/shebang-regex/-/shebang-regex-3.0.0.tgz", + "integrity": "sha512-7++dFhtcx3353uBaq8DDR4NuxBetBzC7ZQOhmTQInHEd6bSrXdiEyzCvG07Z44UYdLShWUyXt5M/yhz8ekcb1A==", + "dev": true + }, + "slash": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/slash/-/slash-3.0.0.tgz", + "integrity": "sha512-g9Q1haeby36OSStwb4ntCGGGaKsaVSjQ68fBxoQcutl5fS1vuY18H3wSt3jFyFtrkx+Kz0V1G85A4MyAdDMi2Q==", + "dev": true + }, + "source-map": { + "version": "0.7.3", + "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.7.3.tgz", + "integrity": "sha512-CkCj6giN3S+n9qrYiBTX5gystlENnRW5jZeNLHpe6aue+SrHcG5VYwujhW9s4dY31mEGsxBDrHR6oI69fTXsaQ==", + "dev": true + }, + "source-map-js": { + "version": "0.6.2", + "resolved": "https://registry.npmjs.org/source-map-js/-/source-map-js-0.6.2.tgz", + "integrity": "sha512-/3GptzWzu0+0MBQFrDKzw/DvvMTUORvgY6k6jd/VS6iCR4RDTKWH6v6WPwQoUO8667uQEf9Oe38DxAYWY5F/Ug==", + "dev": true + }, + "sourcemap-codec": { + "version": "1.4.8", + "resolved": "https://registry.npmjs.org/sourcemap-codec/-/sourcemap-codec-1.4.8.tgz", + "integrity": "sha512-9NykojV5Uih4lgo5So5dtw+f0JgJX30KCNI8gwhz2J9A15wD0Ml6tjHKwf6fTSa6fAdVBdZeNOs9eJ71qCk8vA==", + "dev": true + }, + "sprintf-js": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/sprintf-js/-/sprintf-js-1.0.3.tgz", + "integrity": "sha1-BOaSb2YolTVPPdAVIDYzuFcpfiw=", + "dev": true + }, + "strip-ansi": { + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.1.tgz", + "integrity": "sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==", + "dev": true, + "requires": { + "ansi-regex": "^5.0.1" + } + }, + "strip-json-comments": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/strip-json-comments/-/strip-json-comments-3.1.1.tgz", + "integrity": "sha512-6fPc+R4ihwqP6N/aIv2f1gMH8lOVtWQHoqC4yK6oSDVVocumAsfCqjkXnqiYMhmMwS/mEHLp7Vehlt3ql6lEig==", + "dev": true + }, + "supports-color": { + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", + "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", + "dev": true, + "requires": { + "has-flag": "^4.0.0" + } + }, + "svg-tags": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/svg-tags/-/svg-tags-1.0.0.tgz", + "integrity": "sha1-WPcc7jvVGbWdSyqEO2x95krAR2Q=", + "dev": true + }, + "text-table": { + "version": "0.2.0", + "resolved": "https://registry.npmjs.org/text-table/-/text-table-0.2.0.tgz", + "integrity": "sha1-f17oI66AUgfACvLfSoTsP8+lcLQ=", + "dev": true + }, + "to-fast-properties": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/to-fast-properties/-/to-fast-properties-2.0.0.tgz", + "integrity": "sha1-3F5pjL0HkmW8c+A3doGk5Og/YW4=", + "dev": true + }, + "to-regex-range": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/to-regex-range/-/to-regex-range-5.0.1.tgz", + "integrity": "sha512-65P7iz6X5yEr1cwcgvQxbbIw7Uk3gOy5dIdtZ4rDveLqhrdJP+Li/Hx6tyK0NEb+2GCyneCMJiGqrADCSNk8sQ==", + "dev": true, + "requires": { + "is-number": "^7.0.0" + } + }, + "type-check": { + "version": "0.4.0", + "resolved": "https://registry.npmjs.org/type-check/-/type-check-0.4.0.tgz", + "integrity": "sha512-XleUoc9uwGXqjWwXaUTZAmzMcFZ5858QA2vvx1Ur5xIcixXIP+8LnFDgRplU30us6teqdlskFfu+ae4K79Ooew==", + "dev": true, + "requires": { + "prelude-ls": "^1.2.1" + } + }, + "type-fest": { + "version": "0.20.2", + "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.20.2.tgz", + "integrity": "sha512-Ne+eE4r0/iWnpAxD852z3A+N0Bt5RN//NjJwRd2VFHEmrywxf5vsZlh4R6lixl6B+wz/8d+maTSAkN1FIkI3LQ==", + "dev": true + }, + "universalify": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/universalify/-/universalify-2.0.0.tgz", + "integrity": "sha512-hAZsKq7Yy11Zu1DE0OzWjw7nnLZmJZYTDZZyEFHZdUhV8FkH5MCfoU1XMaxXovpyW5nq5scPqq0ZDP9Zyl04oQ==", + "dev": true + }, + "uri-js": { + "version": "4.4.1", + "resolved": "https://registry.npmjs.org/uri-js/-/uri-js-4.4.1.tgz", + "integrity": "sha512-7rKUyy33Q1yc98pQ1DAmLtwX109F7TIfWlW1Ydo8Wl1ii1SeHieeh0HHfPeL2fMXK6z0s8ecKs9frCuLJvndBg==", + "dev": true, + "requires": { + "punycode": "^2.1.0" + } + }, + "util-deprecate": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/util-deprecate/-/util-deprecate-1.0.2.tgz", + "integrity": "sha1-RQ1Nyfpw3nMnYvvS1KKJgUGaDM8=", + "dev": true + }, + "v8-compile-cache": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/v8-compile-cache/-/v8-compile-cache-2.3.0.tgz", + "integrity": "sha512-l8lCEmLcLYZh4nbunNZvQCJc5pv7+RCwa8q/LdUx8u7lsWvPDKmpodJAJNwkAhJC//dFY48KuIEmjtd4RViDrA==", + "dev": true + }, + "vite": { + "version": "2.6.7", + "resolved": "https://registry.npmjs.org/vite/-/vite-2.6.7.tgz", + "integrity": "sha512-ewk//jve9k6vlU8PfJmWUHN8k0YYdw4VaKOMvoQ3nT2Pb6k5OSMKQi4jPOzVH/TlUqMsCrq7IJ80xcuDDVyigg==", + "dev": true, + "requires": { + "esbuild": "^0.13.2", + "fsevents": "~2.3.2", + "postcss": "^8.3.8", + "resolve": "^1.20.0", + "rollup": "^2.57.0" + } + }, + "vite-plugin-vue2": { + "version": "1.8.2", + "resolved": "https://registry.npmjs.org/vite-plugin-vue2/-/vite-plugin-vue2-1.8.2.tgz", + "integrity": "sha512-qQXLH+yVn5o7cq+KJULyty4OxWKQ3lsvrYx8QkLO78LsM+/r1gEytfcXiqewnvgP7eTkJ5Pd/kHbfDce1Pim/w==", + "dev": true, + "requires": { + "@babel/core": "^7.11.6", + "@babel/parser": "^7.13.10", + "@babel/plugin-proposal-class-properties": "^7.14.5", + "@babel/plugin-proposal-decorators": "^7.14.5", + "@babel/plugin-transform-typescript": "^7.13.0", + "@rollup/pluginutils": "^4.1.0", + "@vue/babel-helper-vue-jsx-merge-props": "^1.2.1", + "@vue/babel-preset-jsx": "^1.2.4", + "@vue/component-compiler-utils": "^3.2.0", + "babel-preset-env": "^1.7.0", + "consolidate": "^0.16.0", + "debug": "^4.3.1", + "fs-extra": "^9.0.1", + "hash-sum": "^2.0.0", + "magic-string": "^0.25.7", + "prettier": "^2.0.5", + "querystring": "^0.2.0", + "rollup": "^2.35.1", + "slash": "^3.0.0", + "source-map": "^0.7.3", + "vue-template-es2015-compiler": "^1.9.1" + } + }, + "vue": { + "version": "2.6.14", + "resolved": "https://registry.npmjs.org/vue/-/vue-2.6.14.tgz", + "integrity": "sha512-x2284lgYvjOMj3Za7kqzRcUSxBboHqtgRE2zlos1qWaOye5yUmHn42LB1250NJBLRwEcdrB0JRwyPTEPhfQjiQ==", + "dev": true + }, + "vue-eslint-parser": { + "version": "7.11.0", + "resolved": "https://registry.npmjs.org/vue-eslint-parser/-/vue-eslint-parser-7.11.0.tgz", + "integrity": "sha512-qh3VhDLeh773wjgNTl7ss0VejY9bMMa0GoDG2fQVyDzRFdiU3L7fw74tWZDHNQXdZqxO3EveQroa9ct39D2nqg==", + "dev": true, + "requires": { + "debug": "^4.1.1", + "eslint-scope": "^5.1.1", + "eslint-visitor-keys": "^1.1.0", + "espree": "^6.2.1", + "esquery": "^1.4.0", + "lodash": "^4.17.21", + "semver": "^6.3.0" + }, + "dependencies": { + "acorn": { + "version": "7.4.1", + "resolved": "https://registry.npmjs.org/acorn/-/acorn-7.4.1.tgz", + "integrity": "sha512-nQyp0o1/mNdbTO1PO6kHkwSrmgZ0MT/jCCpNiwbUjGoRN4dlBhqJtoQuCnEOKzgTVwg0ZWiCoQy6SxMebQVh8A==", + "dev": true + }, + "eslint-scope": { + "version": "5.1.1", + "resolved": "https://registry.npmjs.org/eslint-scope/-/eslint-scope-5.1.1.tgz", + "integrity": "sha512-2NxwbF/hZ0KpepYN0cNbo+FN6XoK7GaHlQhgx/hIZl6Va0bF45RQOOwhLIy8lQDbuCiadSLCBnH2CFYquit5bw==", + "dev": true, + "requires": { + "esrecurse": "^4.3.0", + "estraverse": "^4.1.1" + } + }, + "eslint-visitor-keys": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-1.3.0.tgz", + "integrity": "sha512-6J72N8UNa462wa/KFODt/PJ3IU60SDpC3QXC1Hjc1BXXpfL2C9R5+AU7jhe0F6GREqVMh4Juu+NY7xn+6dipUQ==", + "dev": true + }, + "espree": { + "version": "6.2.1", + "resolved": "https://registry.npmjs.org/espree/-/espree-6.2.1.tgz", + "integrity": "sha512-ysCxRQY3WaXJz9tdbWOwuWr5Y/XrPTGX9Kiz3yoUXwW0VZ4w30HTkQLaGx/+ttFjF8i+ACbArnB4ce68a9m5hw==", + "dev": true, + "requires": { + "acorn": "^7.1.1", + "acorn-jsx": "^5.2.0", + "eslint-visitor-keys": "^1.1.0" + } + }, + "estraverse": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-4.3.0.tgz", + "integrity": "sha512-39nnKffWz8xN1BU/2c79n9nB9HDzo0niYUqx6xyqUnyoAnQyyWpOTdZEeiCch8BBu515t4wp9ZmgVfVhn9EBpw==", + "dev": true + }, + "semver": { + "version": "6.3.0", + "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.0.tgz", + "integrity": "sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw==", + "dev": true + } + } + }, + "vue-template-compiler": { + "version": "2.6.14", + "resolved": "https://registry.npmjs.org/vue-template-compiler/-/vue-template-compiler-2.6.14.tgz", + "integrity": "sha512-ODQS1SyMbjKoO1JBJZojSw6FE4qnh9rIpUZn2EUT86FKizx9uH5z6uXiIrm4/Nb/gwxTi/o17ZDEGWAXHvtC7g==", + "dev": true, + "requires": { + "de-indent": "^1.0.2", + "he": "^1.1.0" + } + }, + "vue-template-es2015-compiler": { + "version": "1.9.1", + "resolved": "https://registry.npmjs.org/vue-template-es2015-compiler/-/vue-template-es2015-compiler-1.9.1.tgz", + "integrity": "sha512-4gDntzrifFnCEvyoO8PqyJDmguXgVPxKiIxrBKjIowvL9l+N66196+72XVYR8BBf1Uv1Fgt3bGevJ+sEmxfZzw==", + "dev": true + }, + "which": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/which/-/which-2.0.2.tgz", + "integrity": "sha512-BLI3Tl1TW3Pvl70l3yq3Y64i+awpwXqsGBYWkkqMtnbXgrMD+yj7rhW0kuEDxzJaYXGjEW5ogapKNMEKNMjibA==", + "dev": true, + "requires": { + "isexe": "^2.0.0" + } + }, + "word-wrap": { + "version": "1.2.3", + "resolved": "https://registry.npmjs.org/word-wrap/-/word-wrap-1.2.3.tgz", + "integrity": "sha512-Hz/mrNwitNRh/HUAtM/VT/5VH+ygD6DV7mYKZAtHOrbs8U7lvPS6xf7EJKMF0uW1KJCl0H701g3ZGus+muE5vQ==", + "dev": true + }, + "wrappy": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/wrappy/-/wrappy-1.0.2.tgz", + "integrity": "sha1-tSQ9jz7BqjXxNkYFvA0QNuMKtp8=", + "dev": true + }, + "yallist": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/yallist/-/yallist-4.0.0.tgz", + "integrity": "sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==", + "dev": true + } + } +} diff --git a/site/plugins/kirby3-janitor/package.json b/site/plugins/kirby3-janitor/package.json new file mode 100755 index 0000000..996c3d8 --- /dev/null +++ b/site/plugins/kirby3-janitor/package.json @@ -0,0 +1,16 @@ +{ + "private": true, + "scripts": { + "dev": "kirbyup src/index.js --watch", + "build": "kirbyup src/index.js", + "lint": "eslint \"src/**/*.{js,vue}\"", + "lint:fix": "npm run lint -- --fix", + "format": "prettier --write \"src/**/*.{js,vue}\"" + }, + "devDependencies": { + "eslint": "^8.0.1", + "eslint-config-prettier": "^8.3.0", + "eslint-plugin-vue": "^7.19.1", + "kirbyup": "^0.18.0" + } +} diff --git a/site/plugins/kirby3-janitor/snippets/maintenance.php b/site/plugins/kirby3-janitor/snippets/maintenance.php new file mode 100644 index 0000000..4e8b01b --- /dev/null +++ b/site/plugins/kirby3-janitor/snippets/maintenance.php @@ -0,0 +1,41 @@ + + + + + + Maintenance + + + +

+ This page is currently in maintenance. +

+ + \ No newline at end of file diff --git a/site/plugins/kirby3-janitor/src/components/fields/Janitor.vue b/site/plugins/kirby3-janitor/src/components/fields/Janitor.vue new file mode 100755 index 0000000..6c5982b --- /dev/null +++ b/site/plugins/kirby3-janitor/src/components/fields/Janitor.vue @@ -0,0 +1,296 @@ + + + + + diff --git a/site/plugins/kirby3-janitor/src/index.js b/site/plugins/kirby3-janitor/src/index.js new file mode 100755 index 0000000..d0506ef --- /dev/null +++ b/site/plugins/kirby3-janitor/src/index.js @@ -0,0 +1,11 @@ +import Janitor from "./components/fields/Janitor.vue"; + +window.panel.plugin("bnomei/janitor", { + fields: { + janitor: Janitor, + }, + icons: { + janitorLoader: + '', + }, +}); diff --git a/vendor/composer/autoload_classmap.php b/vendor/composer/autoload_classmap.php index f74fb4b..9c5a721 100644 --- a/vendor/composer/autoload_classmap.php +++ b/vendor/composer/autoload_classmap.php @@ -6,6 +6,25 @@ $vendorDir = dirname(__DIR__); $baseDir = dirname($vendorDir); return array( + 'Attribute' => $vendorDir . '/symfony/polyfill-php80/Resources/stubs/Attribute.php', + 'Bnomei\\BackupZipJob' => $baseDir . '/site/plugins/kirby3-janitor/classes/BackupZipJob.php', + 'Bnomei\\CleanCacheFilesJob' => $baseDir . '/site/plugins/kirby3-janitor/classes/CleanCacheFilesJob.php', + 'Bnomei\\CleanContentJob' => $baseDir . '/site/plugins/kirby3-janitor/classes/CleanContentJob.php', + 'Bnomei\\CleanSessionsJob' => $baseDir . '/site/plugins/kirby3-janitor/classes/CleanSessionsJob.php', + 'Bnomei\\ContextJob' => $baseDir . '/site/plugins/kirby3-janitor/classes/ContextJob.php', + 'Bnomei\\FlushLapseJob' => $baseDir . '/site/plugins/kirby3-janitor/classes/FlushLapseJob.php', + 'Bnomei\\FlushPagesCacheJob' => $baseDir . '/site/plugins/kirby3-janitor/classes/FlushPagesCacheJob.php', + 'Bnomei\\FlushRedisDBJob' => $baseDir . '/site/plugins/kirby3-janitor/classes/FlushRedisDBJob.php', + 'Bnomei\\FlushSessionFilesJob' => $baseDir . '/site/plugins/kirby3-janitor/classes/FlushSessionFilesJob.php', + 'Bnomei\\Janitor' => $baseDir . '/site/plugins/kirby3-janitor/classes/Janitor.php', + 'Bnomei\\JanitorJob' => $baseDir . '/site/plugins/kirby3-janitor/classes/JanitorJob.php', + 'Bnomei\\Job' => $baseDir . '/site/plugins/kirby3-janitor/classes/Job.php', + 'Bnomei\\QuietWriter' => $baseDir . '/site/plugins/kirby3-janitor/classes/QuietWriter.php', + 'Bnomei\\ReindexAutoIDJob' => $baseDir . '/site/plugins/kirby3-janitor/classes/ReindexAutoIDJob.php', + 'Bnomei\\ReindexSearchForKirbyJob' => $baseDir . '/site/plugins/kirby3-janitor/classes/ReindexSearchForKirbyJob.php', + 'Bnomei\\RenderJob' => $baseDir . '/site/plugins/kirby3-janitor/classes/RenderJob.php', + 'Bnomei\\ThumbsJob' => $baseDir . '/site/plugins/kirby3-janitor/classes/ThumbsJob.php', + 'Bnomei\\WhistleJob' => $baseDir . '/site/plugins/kirby3-janitor/classes/WhistleJob.php', 'Composer\\CaBundle\\CaBundle' => $vendorDir . '/composer/ca-bundle/src/CaBundle.php', 'Composer\\InstalledVersions' => $vendorDir . '/composer/InstalledVersions.php', 'Embed\\Adapters\\Archive\\Api' => $vendorDir . '/embed/embed/src/Adapters/Archive/Api.php', @@ -400,6 +419,93 @@ return array( 'Laminas\\Escaper\\Exception\\ExceptionInterface' => $vendorDir . '/laminas/laminas-escaper/src/Exception/ExceptionInterface.php', 'Laminas\\Escaper\\Exception\\InvalidArgumentException' => $vendorDir . '/laminas/laminas-escaper/src/Exception/InvalidArgumentException.php', 'Laminas\\Escaper\\Exception\\RuntimeException' => $vendorDir . '/laminas/laminas-escaper/src/Exception/RuntimeException.php', + 'League\\CLImate\\Argument\\Argument' => $vendorDir . '/league/climate/src/Argument/Argument.php', + 'League\\CLImate\\Argument\\Filter' => $vendorDir . '/league/climate/src/Argument/Filter.php', + 'League\\CLImate\\Argument\\Manager' => $vendorDir . '/league/climate/src/Argument/Manager.php', + 'League\\CLImate\\Argument\\Parser' => $vendorDir . '/league/climate/src/Argument/Parser.php', + 'League\\CLImate\\Argument\\Summary' => $vendorDir . '/league/climate/src/Argument/Summary.php', + 'League\\CLImate\\CLImate' => $vendorDir . '/league/climate/src/CLImate.php', + 'League\\CLImate\\Decorator\\Component\\BackgroundColor' => $vendorDir . '/league/climate/src/Decorator/Component/BackgroundColor.php', + 'League\\CLImate\\Decorator\\Component\\BaseDecorator' => $vendorDir . '/league/climate/src/Decorator/Component/BaseDecorator.php', + 'League\\CLImate\\Decorator\\Component\\Color' => $vendorDir . '/league/climate/src/Decorator/Component/Color.php', + 'League\\CLImate\\Decorator\\Component\\Command' => $vendorDir . '/league/climate/src/Decorator/Component/Command.php', + 'League\\CLImate\\Decorator\\Component\\DecoratorInterface' => $vendorDir . '/league/climate/src/Decorator/Component/DecoratorInterface.php', + 'League\\CLImate\\Decorator\\Component\\Format' => $vendorDir . '/league/climate/src/Decorator/Component/Format.php', + 'League\\CLImate\\Decorator\\Parser\\Ansi' => $vendorDir . '/league/climate/src/Decorator/Parser/Ansi.php', + 'League\\CLImate\\Decorator\\Parser\\NonAnsi' => $vendorDir . '/league/climate/src/Decorator/Parser/NonAnsi.php', + 'League\\CLImate\\Decorator\\Parser\\Parser' => $vendorDir . '/league/climate/src/Decorator/Parser/Parser.php', + 'League\\CLImate\\Decorator\\Parser\\ParserFactory' => $vendorDir . '/league/climate/src/Decorator/Parser/ParserFactory.php', + 'League\\CLImate\\Decorator\\Parser\\ParserImporter' => $vendorDir . '/league/climate/src/Decorator/Parser/ParserImporter.php', + 'League\\CLImate\\Decorator\\Style' => $vendorDir . '/league/climate/src/Decorator/Style.php', + 'League\\CLImate\\Decorator\\Tags' => $vendorDir . '/league/climate/src/Decorator/Tags.php', + 'League\\CLImate\\Exceptions\\Exception' => $vendorDir . '/league/climate/src/Exceptions/Exception.php', + 'League\\CLImate\\Exceptions\\InvalidArgumentException' => $vendorDir . '/league/climate/src/Exceptions/InvalidArgumentException.php', + 'League\\CLImate\\Exceptions\\RuntimeException' => $vendorDir . '/league/climate/src/Exceptions/RuntimeException.php', + 'League\\CLImate\\Exceptions\\UnexpectedValueException' => $vendorDir . '/league/climate/src/Exceptions/UnexpectedValueException.php', + 'League\\CLImate\\Logger' => $vendorDir . '/league/climate/src/Logger.php', + 'League\\CLImate\\Settings\\Art' => $vendorDir . '/league/climate/src/Settings/Art.php', + 'League\\CLImate\\Settings\\Manager' => $vendorDir . '/league/climate/src/Settings/Manager.php', + 'League\\CLImate\\Settings\\SettingsImporter' => $vendorDir . '/league/climate/src/Settings/SettingsImporter.php', + 'League\\CLImate\\Settings\\SettingsInterface' => $vendorDir . '/league/climate/src/Settings/SettingsInterface.php', + 'League\\CLImate\\TerminalObject\\Basic\\BasicTerminalObject' => $vendorDir . '/league/climate/src/TerminalObject/Basic/BasicTerminalObject.php', + 'League\\CLImate\\TerminalObject\\Basic\\BasicTerminalObjectInterface' => $vendorDir . '/league/climate/src/TerminalObject/Basic/BasicTerminalObjectInterface.php', + 'League\\CLImate\\TerminalObject\\Basic\\Border' => $vendorDir . '/league/climate/src/TerminalObject/Basic/Border.php', + 'League\\CLImate\\TerminalObject\\Basic\\Br' => $vendorDir . '/league/climate/src/TerminalObject/Basic/Br.php', + 'League\\CLImate\\TerminalObject\\Basic\\Clear' => $vendorDir . '/league/climate/src/TerminalObject/Basic/Clear.php', + 'League\\CLImate\\TerminalObject\\Basic\\ClearLine' => $vendorDir . '/league/climate/src/TerminalObject/Basic/ClearLine.php', + 'League\\CLImate\\TerminalObject\\Basic\\Columns' => $vendorDir . '/league/climate/src/TerminalObject/Basic/Columns.php', + 'League\\CLImate\\TerminalObject\\Basic\\Draw' => $vendorDir . '/league/climate/src/TerminalObject/Basic/Draw.php', + 'League\\CLImate\\TerminalObject\\Basic\\Dump' => $vendorDir . '/league/climate/src/TerminalObject/Basic/Dump.php', + 'League\\CLImate\\TerminalObject\\Basic\\Flank' => $vendorDir . '/league/climate/src/TerminalObject/Basic/Flank.php', + 'League\\CLImate\\TerminalObject\\Basic\\Inline' => $vendorDir . '/league/climate/src/TerminalObject/Basic/Inline.php', + 'League\\CLImate\\TerminalObject\\Basic\\Json' => $vendorDir . '/league/climate/src/TerminalObject/Basic/Json.php', + 'League\\CLImate\\TerminalObject\\Basic\\Out' => $vendorDir . '/league/climate/src/TerminalObject/Basic/Out.php', + 'League\\CLImate\\TerminalObject\\Basic\\Repeatable' => $vendorDir . '/league/climate/src/TerminalObject/Basic/Repeatable.php', + 'League\\CLImate\\TerminalObject\\Basic\\Tab' => $vendorDir . '/league/climate/src/TerminalObject/Basic/Tab.php', + 'League\\CLImate\\TerminalObject\\Basic\\Table' => $vendorDir . '/league/climate/src/TerminalObject/Basic/Table.php', + 'League\\CLImate\\TerminalObject\\Dynamic\\Animation' => $vendorDir . '/league/climate/src/TerminalObject/Dynamic/Animation.php', + 'League\\CLImate\\TerminalObject\\Dynamic\\Animation\\Keyframe' => $vendorDir . '/league/climate/src/TerminalObject/Dynamic/Animation/Keyframe.php', + 'League\\CLImate\\TerminalObject\\Dynamic\\Checkbox\\Checkbox' => $vendorDir . '/league/climate/src/TerminalObject/Dynamic/Checkbox/Checkbox.php', + 'League\\CLImate\\TerminalObject\\Dynamic\\Checkbox\\CheckboxGroup' => $vendorDir . '/league/climate/src/TerminalObject/Dynamic/Checkbox/CheckboxGroup.php', + 'League\\CLImate\\TerminalObject\\Dynamic\\Checkbox\\RadioGroup' => $vendorDir . '/league/climate/src/TerminalObject/Dynamic/Checkbox/RadioGroup.php', + 'League\\CLImate\\TerminalObject\\Dynamic\\Checkboxes' => $vendorDir . '/league/climate/src/TerminalObject/Dynamic/Checkboxes.php', + 'League\\CLImate\\TerminalObject\\Dynamic\\Confirm' => $vendorDir . '/league/climate/src/TerminalObject/Dynamic/Confirm.php', + 'League\\CLImate\\TerminalObject\\Dynamic\\DynamicTerminalObject' => $vendorDir . '/league/climate/src/TerminalObject/Dynamic/DynamicTerminalObject.php', + 'League\\CLImate\\TerminalObject\\Dynamic\\DynamicTerminalObjectInterface' => $vendorDir . '/league/climate/src/TerminalObject/Dynamic/DynamicTerminalObjectInterface.php', + 'League\\CLImate\\TerminalObject\\Dynamic\\Input' => $vendorDir . '/league/climate/src/TerminalObject/Dynamic/Input.php', + 'League\\CLImate\\TerminalObject\\Dynamic\\InputAbstract' => $vendorDir . '/league/climate/src/TerminalObject/Dynamic/InputAbstract.php', + 'League\\CLImate\\TerminalObject\\Dynamic\\Padding' => $vendorDir . '/league/climate/src/TerminalObject/Dynamic/Padding.php', + 'League\\CLImate\\TerminalObject\\Dynamic\\Password' => $vendorDir . '/league/climate/src/TerminalObject/Dynamic/Password.php', + 'League\\CLImate\\TerminalObject\\Dynamic\\Progress' => $vendorDir . '/league/climate/src/TerminalObject/Dynamic/Progress.php', + 'League\\CLImate\\TerminalObject\\Dynamic\\Radio' => $vendorDir . '/league/climate/src/TerminalObject/Dynamic/Radio.php', + 'League\\CLImate\\TerminalObject\\Dynamic\\Spinner' => $vendorDir . '/league/climate/src/TerminalObject/Dynamic/Spinner.php', + 'League\\CLImate\\TerminalObject\\Helper\\Art' => $vendorDir . '/league/climate/src/TerminalObject/Helper/Art.php', + 'League\\CLImate\\TerminalObject\\Helper\\Sleeper' => $vendorDir . '/league/climate/src/TerminalObject/Helper/Sleeper.php', + 'League\\CLImate\\TerminalObject\\Helper\\SleeperInterface' => $vendorDir . '/league/climate/src/TerminalObject/Helper/SleeperInterface.php', + 'League\\CLImate\\TerminalObject\\Helper\\StringLength' => $vendorDir . '/league/climate/src/TerminalObject/Helper/StringLength.php', + 'League\\CLImate\\TerminalObject\\Router\\BaseRouter' => $vendorDir . '/league/climate/src/TerminalObject/Router/BaseRouter.php', + 'League\\CLImate\\TerminalObject\\Router\\BasicRouter' => $vendorDir . '/league/climate/src/TerminalObject/Router/BasicRouter.php', + 'League\\CLImate\\TerminalObject\\Router\\DynamicRouter' => $vendorDir . '/league/climate/src/TerminalObject/Router/DynamicRouter.php', + 'League\\CLImate\\TerminalObject\\Router\\ExtensionCollection' => $vendorDir . '/league/climate/src/TerminalObject/Router/ExtensionCollection.php', + 'League\\CLImate\\TerminalObject\\Router\\Router' => $vendorDir . '/league/climate/src/TerminalObject/Router/Router.php', + 'League\\CLImate\\TerminalObject\\Router\\RouterInterface' => $vendorDir . '/league/climate/src/TerminalObject/Router/RouterInterface.php', + 'League\\CLImate\\Util\\Cursor' => $vendorDir . '/league/climate/src/Util/Cursor.php', + 'League\\CLImate\\Util\\Helper' => $vendorDir . '/league/climate/src/Util/Helper.php', + 'League\\CLImate\\Util\\Output' => $vendorDir . '/league/climate/src/Util/Output.php', + 'League\\CLImate\\Util\\OutputImporter' => $vendorDir . '/league/climate/src/Util/OutputImporter.php', + 'League\\CLImate\\Util\\Reader\\ReaderInterface' => $vendorDir . '/league/climate/src/Util/Reader/ReaderInterface.php', + 'League\\CLImate\\Util\\Reader\\Stdin' => $vendorDir . '/league/climate/src/Util/Reader/Stdin.php', + 'League\\CLImate\\Util\\System\\Linux' => $vendorDir . '/league/climate/src/Util/System/Linux.php', + 'League\\CLImate\\Util\\System\\System' => $vendorDir . '/league/climate/src/Util/System/System.php', + 'League\\CLImate\\Util\\System\\SystemFactory' => $vendorDir . '/league/climate/src/Util/System/SystemFactory.php', + 'League\\CLImate\\Util\\System\\Windows' => $vendorDir . '/league/climate/src/Util/System/Windows.php', + 'League\\CLImate\\Util\\UtilFactory' => $vendorDir . '/league/climate/src/Util/UtilFactory.php', + 'League\\CLImate\\Util\\UtilImporter' => $vendorDir . '/league/climate/src/Util/UtilImporter.php', + 'League\\CLImate\\Util\\Writer\\Buffer' => $vendorDir . '/league/climate/src/Util/Writer/Buffer.php', + 'League\\CLImate\\Util\\Writer\\File' => $vendorDir . '/league/climate/src/Util/Writer/File.php', + 'League\\CLImate\\Util\\Writer\\StdErr' => $vendorDir . '/league/climate/src/Util/Writer/StdErr.php', + 'League\\CLImate\\Util\\Writer\\StdOut' => $vendorDir . '/league/climate/src/Util/Writer/StdOut.php', + 'League\\CLImate\\Util\\Writer\\WriterInterface' => $vendorDir . '/league/climate/src/Util/Writer/WriterInterface.php', 'League\\ColorExtractor\\Color' => $vendorDir . '/league/color-extractor/src/League/ColorExtractor/Color.php', 'League\\ColorExtractor\\ColorExtractor' => $vendorDir . '/league/color-extractor/src/League/ColorExtractor/ColorExtractor.php', 'League\\ColorExtractor\\Palette' => $vendorDir . '/league/color-extractor/src/League/ColorExtractor/Palette.php', @@ -450,6 +556,7 @@ return array( 'PHPMailer\\PHPMailer\\SMTP' => $vendorDir . '/phpmailer/phpmailer/src/SMTP.php', 'Parsedown' => $baseDir . '/kirby/dependencies/parsedown/Parsedown.php', 'ParsedownExtra' => $baseDir . '/kirby/dependencies/parsedown-extra/ParsedownExtra.php', + 'PhpToken' => $vendorDir . '/symfony/polyfill-php80/Resources/stubs/PhpToken.php', 'Psr\\Http\\Client\\ClientExceptionInterface' => $vendorDir . '/psr/http-client/src/ClientExceptionInterface.php', 'Psr\\Http\\Client\\ClientInterface' => $vendorDir . '/psr/http-client/src/ClientInterface.php', 'Psr\\Http\\Client\\NetworkExceptionInterface' => $vendorDir . '/psr/http-client/src/NetworkExceptionInterface.php', @@ -478,13 +585,42 @@ return array( 'Psr\\Log\\Test\\DummyTest' => $vendorDir . '/psr/log/Psr/Log/Test/DummyTest.php', 'Psr\\Log\\Test\\LoggerInterfaceTest' => $vendorDir . '/psr/log/Psr/Log/Test/LoggerInterfaceTest.php', 'Psr\\Log\\Test\\TestLogger' => $vendorDir . '/psr/log/Psr/Log/Test/TestLogger.php', + 'Seld\\CliPrompt\\CliPrompt' => $vendorDir . '/seld/cli-prompt/src/CliPrompt.php', 'Spyc' => $baseDir . '/kirby/dependencies/spyc/Spyc.php', + 'Stringable' => $vendorDir . '/symfony/polyfill-php80/Resources/stubs/Stringable.php', + 'Symfony\\Component\\Finder\\Comparator\\Comparator' => $vendorDir . '/symfony/finder/Comparator/Comparator.php', + 'Symfony\\Component\\Finder\\Comparator\\DateComparator' => $vendorDir . '/symfony/finder/Comparator/DateComparator.php', + 'Symfony\\Component\\Finder\\Comparator\\NumberComparator' => $vendorDir . '/symfony/finder/Comparator/NumberComparator.php', + 'Symfony\\Component\\Finder\\Exception\\AccessDeniedException' => $vendorDir . '/symfony/finder/Exception/AccessDeniedException.php', + 'Symfony\\Component\\Finder\\Exception\\DirectoryNotFoundException' => $vendorDir . '/symfony/finder/Exception/DirectoryNotFoundException.php', + 'Symfony\\Component\\Finder\\Finder' => $vendorDir . '/symfony/finder/Finder.php', + 'Symfony\\Component\\Finder\\Gitignore' => $vendorDir . '/symfony/finder/Gitignore.php', + 'Symfony\\Component\\Finder\\Glob' => $vendorDir . '/symfony/finder/Glob.php', + 'Symfony\\Component\\Finder\\Iterator\\CustomFilterIterator' => $vendorDir . '/symfony/finder/Iterator/CustomFilterIterator.php', + 'Symfony\\Component\\Finder\\Iterator\\DateRangeFilterIterator' => $vendorDir . '/symfony/finder/Iterator/DateRangeFilterIterator.php', + 'Symfony\\Component\\Finder\\Iterator\\DepthRangeFilterIterator' => $vendorDir . '/symfony/finder/Iterator/DepthRangeFilterIterator.php', + 'Symfony\\Component\\Finder\\Iterator\\ExcludeDirectoryFilterIterator' => $vendorDir . '/symfony/finder/Iterator/ExcludeDirectoryFilterIterator.php', + 'Symfony\\Component\\Finder\\Iterator\\FileTypeFilterIterator' => $vendorDir . '/symfony/finder/Iterator/FileTypeFilterIterator.php', + 'Symfony\\Component\\Finder\\Iterator\\FilecontentFilterIterator' => $vendorDir . '/symfony/finder/Iterator/FilecontentFilterIterator.php', + 'Symfony\\Component\\Finder\\Iterator\\FilenameFilterIterator' => $vendorDir . '/symfony/finder/Iterator/FilenameFilterIterator.php', + 'Symfony\\Component\\Finder\\Iterator\\LazyIterator' => $vendorDir . '/symfony/finder/Iterator/LazyIterator.php', + 'Symfony\\Component\\Finder\\Iterator\\MultiplePcreFilterIterator' => $vendorDir . '/symfony/finder/Iterator/MultiplePcreFilterIterator.php', + 'Symfony\\Component\\Finder\\Iterator\\PathFilterIterator' => $vendorDir . '/symfony/finder/Iterator/PathFilterIterator.php', + 'Symfony\\Component\\Finder\\Iterator\\RecursiveDirectoryIterator' => $vendorDir . '/symfony/finder/Iterator/RecursiveDirectoryIterator.php', + 'Symfony\\Component\\Finder\\Iterator\\SizeRangeFilterIterator' => $vendorDir . '/symfony/finder/Iterator/SizeRangeFilterIterator.php', + 'Symfony\\Component\\Finder\\Iterator\\SortableIterator' => $vendorDir . '/symfony/finder/Iterator/SortableIterator.php', + 'Symfony\\Component\\Finder\\Iterator\\VcsIgnoredFilterIterator' => $vendorDir . '/symfony/finder/Iterator/VcsIgnoredFilterIterator.php', + 'Symfony\\Component\\Finder\\SplFileInfo' => $vendorDir . '/symfony/finder/SplFileInfo.php', 'Symfony\\Polyfill\\Intl\\Idn\\Idn' => $vendorDir . '/symfony/polyfill-intl-idn/Idn.php', 'Symfony\\Polyfill\\Intl\\Idn\\Info' => $vendorDir . '/symfony/polyfill-intl-idn/Info.php', 'Symfony\\Polyfill\\Intl\\Idn\\Resources\\unidata\\DisallowedRanges' => $vendorDir . '/symfony/polyfill-intl-idn/Resources/unidata/DisallowedRanges.php', 'Symfony\\Polyfill\\Intl\\Idn\\Resources\\unidata\\Regex' => $vendorDir . '/symfony/polyfill-intl-idn/Resources/unidata/Regex.php', 'Symfony\\Polyfill\\Intl\\Normalizer\\Normalizer' => $vendorDir . '/symfony/polyfill-intl-normalizer/Normalizer.php', 'Symfony\\Polyfill\\Mbstring\\Mbstring' => $vendorDir . '/symfony/polyfill-mbstring/Mbstring.php', + 'Symfony\\Polyfill\\Php80\\Php80' => $vendorDir . '/symfony/polyfill-php80/Php80.php', + 'Symfony\\Polyfill\\Php80\\PhpToken' => $vendorDir . '/symfony/polyfill-php80/PhpToken.php', + 'UnhandledMatchError' => $vendorDir . '/symfony/polyfill-php80/Resources/stubs/UnhandledMatchError.php', + 'ValueError' => $vendorDir . '/symfony/polyfill-php80/Resources/stubs/ValueError.php', 'Whoops\\Exception\\ErrorException' => $vendorDir . '/filp/whoops/src/Whoops/Exception/ErrorException.php', 'Whoops\\Exception\\Formatter' => $vendorDir . '/filp/whoops/src/Whoops/Exception/Formatter.php', 'Whoops\\Exception\\Frame' => $vendorDir . '/filp/whoops/src/Whoops/Exception/Frame.php', diff --git a/vendor/composer/autoload_files.php b/vendor/composer/autoload_files.php index 46ba14c..17b61f8 100644 --- a/vendor/composer/autoload_files.php +++ b/vendor/composer/autoload_files.php @@ -6,8 +6,10 @@ $vendorDir = dirname(__DIR__); $baseDir = dirname($vendorDir); return array( + '6e3fae29631ef280660b3cdad06f25a8' => $vendorDir . '/symfony/deprecation-contracts/function.php', '7b11c4dc42b3b3023073cb14e519683c' => $vendorDir . '/ralouphie/getallheaders/src/getallheaders.php', 'e69f7f6ee287b969198c3c9d6777bd38' => $vendorDir . '/symfony/polyfill-intl-normalizer/bootstrap.php', + 'a4a119a56e50fbb293281d9a48007e0e' => $vendorDir . '/symfony/polyfill-php80/bootstrap.php', '09fc349b549513bf7f4291502426f919' => $vendorDir . '/embed/embed/src/functions.php', 'f598d06aa772fa33d905e87be6398fb1' => $vendorDir . '/symfony/polyfill-intl-idn/bootstrap.php', '0e6d7bf4a5811bfa5cf40c5ccd6fae6a' => $vendorDir . '/symfony/polyfill-mbstring/bootstrap.php', diff --git a/vendor/composer/autoload_psr4.php b/vendor/composer/autoload_psr4.php index 6f58d37..7c528f1 100644 --- a/vendor/composer/autoload_psr4.php +++ b/vendor/composer/autoload_psr4.php @@ -7,19 +7,24 @@ $baseDir = dirname($vendorDir); return array( 'Whoops\\' => array($vendorDir . '/filp/whoops/src/Whoops'), + 'Symfony\\Polyfill\\Php80\\' => array($vendorDir . '/symfony/polyfill-php80'), 'Symfony\\Polyfill\\Mbstring\\' => array($vendorDir . '/symfony/polyfill-mbstring'), 'Symfony\\Polyfill\\Intl\\Normalizer\\' => array($vendorDir . '/symfony/polyfill-intl-normalizer'), 'Symfony\\Polyfill\\Intl\\Idn\\' => array($vendorDir . '/symfony/polyfill-intl-idn'), + 'Symfony\\Component\\Finder\\' => array($vendorDir . '/symfony/finder'), + 'Seld\\CliPrompt\\' => array($vendorDir . '/seld/cli-prompt/src'), 'Psr\\Log\\' => array($vendorDir . '/psr/log/Psr/Log'), 'Psr\\Http\\Message\\' => array($vendorDir . '/psr/http-factory/src', $vendorDir . '/psr/http-message/src'), 'Psr\\Http\\Client\\' => array($vendorDir . '/psr/http-client/src'), 'PHPMailer\\PHPMailer\\' => array($vendorDir . '/phpmailer/phpmailer/src'), 'ML\\JsonLD\\' => array($vendorDir . '/ml/json-ld'), + 'League\\CLImate\\' => array($vendorDir . '/league/climate/src'), 'Laminas\\Escaper\\' => array($vendorDir . '/laminas/laminas-escaper/src'), 'Kirby\\' => array($baseDir . '/kirby/src', $vendorDir . '/getkirby/composer-installer/src'), 'HtmlParser\\' => array($vendorDir . '/oscarotero/html-parser/src'), 'GuzzleHttp\\Psr7\\' => array($vendorDir . '/guzzlehttp/psr7/src'), 'Embed\\' => array($vendorDir . '/embed/embed/src'), 'Composer\\CaBundle\\' => array($vendorDir . '/composer/ca-bundle/src'), + 'Bnomei\\' => array($baseDir . '/site/plugins/kirby3-janitor/classes'), '' => array($vendorDir . '/league/color-extractor/src'), ); diff --git a/vendor/composer/autoload_static.php b/vendor/composer/autoload_static.php index 01f5bb1..2718635 100644 --- a/vendor/composer/autoload_static.php +++ b/vendor/composer/autoload_static.php @@ -7,8 +7,10 @@ namespace Composer\Autoload; class ComposerStaticInit34ad0fcfd7efff0ce7004033b941cfcf { public static $files = array ( + '6e3fae29631ef280660b3cdad06f25a8' => __DIR__ . '/..' . '/symfony/deprecation-contracts/function.php', '7b11c4dc42b3b3023073cb14e519683c' => __DIR__ . '/..' . '/ralouphie/getallheaders/src/getallheaders.php', 'e69f7f6ee287b969198c3c9d6777bd38' => __DIR__ . '/..' . '/symfony/polyfill-intl-normalizer/bootstrap.php', + 'a4a119a56e50fbb293281d9a48007e0e' => __DIR__ . '/..' . '/symfony/polyfill-php80/bootstrap.php', '09fc349b549513bf7f4291502426f919' => __DIR__ . '/..' . '/embed/embed/src/functions.php', 'f598d06aa772fa33d905e87be6398fb1' => __DIR__ . '/..' . '/symfony/polyfill-intl-idn/bootstrap.php', '0e6d7bf4a5811bfa5cf40c5ccd6fae6a' => __DIR__ . '/..' . '/symfony/polyfill-mbstring/bootstrap.php', @@ -23,9 +25,12 @@ class ComposerStaticInit34ad0fcfd7efff0ce7004033b941cfcf ), 'S' => array ( + 'Symfony\\Polyfill\\Php80\\' => 23, 'Symfony\\Polyfill\\Mbstring\\' => 26, 'Symfony\\Polyfill\\Intl\\Normalizer\\' => 33, 'Symfony\\Polyfill\\Intl\\Idn\\' => 26, + 'Symfony\\Component\\Finder\\' => 25, + 'Seld\\CliPrompt\\' => 15, ), 'P' => array ( @@ -40,6 +45,7 @@ class ComposerStaticInit34ad0fcfd7efff0ce7004033b941cfcf ), 'L' => array ( + 'League\\CLImate\\' => 15, 'Laminas\\Escaper\\' => 16, ), 'K' => @@ -62,6 +68,10 @@ class ComposerStaticInit34ad0fcfd7efff0ce7004033b941cfcf array ( 'Composer\\CaBundle\\' => 18, ), + 'B' => + array ( + 'Bnomei\\' => 7, + ), ); public static $prefixDirsPsr4 = array ( @@ -69,6 +79,10 @@ class ComposerStaticInit34ad0fcfd7efff0ce7004033b941cfcf array ( 0 => __DIR__ . '/..' . '/filp/whoops/src/Whoops', ), + 'Symfony\\Polyfill\\Php80\\' => + array ( + 0 => __DIR__ . '/..' . '/symfony/polyfill-php80', + ), 'Symfony\\Polyfill\\Mbstring\\' => array ( 0 => __DIR__ . '/..' . '/symfony/polyfill-mbstring', @@ -81,6 +95,14 @@ class ComposerStaticInit34ad0fcfd7efff0ce7004033b941cfcf array ( 0 => __DIR__ . '/..' . '/symfony/polyfill-intl-idn', ), + 'Symfony\\Component\\Finder\\' => + array ( + 0 => __DIR__ . '/..' . '/symfony/finder', + ), + 'Seld\\CliPrompt\\' => + array ( + 0 => __DIR__ . '/..' . '/seld/cli-prompt/src', + ), 'Psr\\Log\\' => array ( 0 => __DIR__ . '/..' . '/psr/log/Psr/Log', @@ -102,6 +124,10 @@ class ComposerStaticInit34ad0fcfd7efff0ce7004033b941cfcf array ( 0 => __DIR__ . '/..' . '/ml/json-ld', ), + 'League\\CLImate\\' => + array ( + 0 => __DIR__ . '/..' . '/league/climate/src', + ), 'Laminas\\Escaper\\' => array ( 0 => __DIR__ . '/..' . '/laminas/laminas-escaper/src', @@ -127,6 +153,10 @@ class ComposerStaticInit34ad0fcfd7efff0ce7004033b941cfcf array ( 0 => __DIR__ . '/..' . '/composer/ca-bundle/src', ), + 'Bnomei\\' => + array ( + 0 => __DIR__ . '/../..' . '/site/plugins/kirby3-janitor/classes', + ), ); public static $fallbackDirsPsr4 = array ( @@ -155,6 +185,25 @@ class ComposerStaticInit34ad0fcfd7efff0ce7004033b941cfcf ); public static $classMap = array ( + 'Attribute' => __DIR__ . '/..' . '/symfony/polyfill-php80/Resources/stubs/Attribute.php', + 'Bnomei\\BackupZipJob' => __DIR__ . '/../..' . '/site/plugins/kirby3-janitor/classes/BackupZipJob.php', + 'Bnomei\\CleanCacheFilesJob' => __DIR__ . '/../..' . '/site/plugins/kirby3-janitor/classes/CleanCacheFilesJob.php', + 'Bnomei\\CleanContentJob' => __DIR__ . '/../..' . '/site/plugins/kirby3-janitor/classes/CleanContentJob.php', + 'Bnomei\\CleanSessionsJob' => __DIR__ . '/../..' . '/site/plugins/kirby3-janitor/classes/CleanSessionsJob.php', + 'Bnomei\\ContextJob' => __DIR__ . '/../..' . '/site/plugins/kirby3-janitor/classes/ContextJob.php', + 'Bnomei\\FlushLapseJob' => __DIR__ . '/../..' . '/site/plugins/kirby3-janitor/classes/FlushLapseJob.php', + 'Bnomei\\FlushPagesCacheJob' => __DIR__ . '/../..' . '/site/plugins/kirby3-janitor/classes/FlushPagesCacheJob.php', + 'Bnomei\\FlushRedisDBJob' => __DIR__ . '/../..' . '/site/plugins/kirby3-janitor/classes/FlushRedisDBJob.php', + 'Bnomei\\FlushSessionFilesJob' => __DIR__ . '/../..' . '/site/plugins/kirby3-janitor/classes/FlushSessionFilesJob.php', + 'Bnomei\\Janitor' => __DIR__ . '/../..' . '/site/plugins/kirby3-janitor/classes/Janitor.php', + 'Bnomei\\JanitorJob' => __DIR__ . '/../..' . '/site/plugins/kirby3-janitor/classes/JanitorJob.php', + 'Bnomei\\Job' => __DIR__ . '/../..' . '/site/plugins/kirby3-janitor/classes/Job.php', + 'Bnomei\\QuietWriter' => __DIR__ . '/../..' . '/site/plugins/kirby3-janitor/classes/QuietWriter.php', + 'Bnomei\\ReindexAutoIDJob' => __DIR__ . '/../..' . '/site/plugins/kirby3-janitor/classes/ReindexAutoIDJob.php', + 'Bnomei\\ReindexSearchForKirbyJob' => __DIR__ . '/../..' . '/site/plugins/kirby3-janitor/classes/ReindexSearchForKirbyJob.php', + 'Bnomei\\RenderJob' => __DIR__ . '/../..' . '/site/plugins/kirby3-janitor/classes/RenderJob.php', + 'Bnomei\\ThumbsJob' => __DIR__ . '/../..' . '/site/plugins/kirby3-janitor/classes/ThumbsJob.php', + 'Bnomei\\WhistleJob' => __DIR__ . '/../..' . '/site/plugins/kirby3-janitor/classes/WhistleJob.php', 'Composer\\CaBundle\\CaBundle' => __DIR__ . '/..' . '/composer/ca-bundle/src/CaBundle.php', 'Composer\\InstalledVersions' => __DIR__ . '/..' . '/composer/InstalledVersions.php', 'Embed\\Adapters\\Archive\\Api' => __DIR__ . '/..' . '/embed/embed/src/Adapters/Archive/Api.php', @@ -549,6 +598,93 @@ class ComposerStaticInit34ad0fcfd7efff0ce7004033b941cfcf 'Laminas\\Escaper\\Exception\\ExceptionInterface' => __DIR__ . '/..' . '/laminas/laminas-escaper/src/Exception/ExceptionInterface.php', 'Laminas\\Escaper\\Exception\\InvalidArgumentException' => __DIR__ . '/..' . '/laminas/laminas-escaper/src/Exception/InvalidArgumentException.php', 'Laminas\\Escaper\\Exception\\RuntimeException' => __DIR__ . '/..' . '/laminas/laminas-escaper/src/Exception/RuntimeException.php', + 'League\\CLImate\\Argument\\Argument' => __DIR__ . '/..' . '/league/climate/src/Argument/Argument.php', + 'League\\CLImate\\Argument\\Filter' => __DIR__ . '/..' . '/league/climate/src/Argument/Filter.php', + 'League\\CLImate\\Argument\\Manager' => __DIR__ . '/..' . '/league/climate/src/Argument/Manager.php', + 'League\\CLImate\\Argument\\Parser' => __DIR__ . '/..' . '/league/climate/src/Argument/Parser.php', + 'League\\CLImate\\Argument\\Summary' => __DIR__ . '/..' . '/league/climate/src/Argument/Summary.php', + 'League\\CLImate\\CLImate' => __DIR__ . '/..' . '/league/climate/src/CLImate.php', + 'League\\CLImate\\Decorator\\Component\\BackgroundColor' => __DIR__ . '/..' . '/league/climate/src/Decorator/Component/BackgroundColor.php', + 'League\\CLImate\\Decorator\\Component\\BaseDecorator' => __DIR__ . '/..' . '/league/climate/src/Decorator/Component/BaseDecorator.php', + 'League\\CLImate\\Decorator\\Component\\Color' => __DIR__ . '/..' . '/league/climate/src/Decorator/Component/Color.php', + 'League\\CLImate\\Decorator\\Component\\Command' => __DIR__ . '/..' . '/league/climate/src/Decorator/Component/Command.php', + 'League\\CLImate\\Decorator\\Component\\DecoratorInterface' => __DIR__ . '/..' . '/league/climate/src/Decorator/Component/DecoratorInterface.php', + 'League\\CLImate\\Decorator\\Component\\Format' => __DIR__ . '/..' . '/league/climate/src/Decorator/Component/Format.php', + 'League\\CLImate\\Decorator\\Parser\\Ansi' => __DIR__ . '/..' . '/league/climate/src/Decorator/Parser/Ansi.php', + 'League\\CLImate\\Decorator\\Parser\\NonAnsi' => __DIR__ . '/..' . '/league/climate/src/Decorator/Parser/NonAnsi.php', + 'League\\CLImate\\Decorator\\Parser\\Parser' => __DIR__ . '/..' . '/league/climate/src/Decorator/Parser/Parser.php', + 'League\\CLImate\\Decorator\\Parser\\ParserFactory' => __DIR__ . '/..' . '/league/climate/src/Decorator/Parser/ParserFactory.php', + 'League\\CLImate\\Decorator\\Parser\\ParserImporter' => __DIR__ . '/..' . '/league/climate/src/Decorator/Parser/ParserImporter.php', + 'League\\CLImate\\Decorator\\Style' => __DIR__ . '/..' . '/league/climate/src/Decorator/Style.php', + 'League\\CLImate\\Decorator\\Tags' => __DIR__ . '/..' . '/league/climate/src/Decorator/Tags.php', + 'League\\CLImate\\Exceptions\\Exception' => __DIR__ . '/..' . '/league/climate/src/Exceptions/Exception.php', + 'League\\CLImate\\Exceptions\\InvalidArgumentException' => __DIR__ . '/..' . '/league/climate/src/Exceptions/InvalidArgumentException.php', + 'League\\CLImate\\Exceptions\\RuntimeException' => __DIR__ . '/..' . '/league/climate/src/Exceptions/RuntimeException.php', + 'League\\CLImate\\Exceptions\\UnexpectedValueException' => __DIR__ . '/..' . '/league/climate/src/Exceptions/UnexpectedValueException.php', + 'League\\CLImate\\Logger' => __DIR__ . '/..' . '/league/climate/src/Logger.php', + 'League\\CLImate\\Settings\\Art' => __DIR__ . '/..' . '/league/climate/src/Settings/Art.php', + 'League\\CLImate\\Settings\\Manager' => __DIR__ . '/..' . '/league/climate/src/Settings/Manager.php', + 'League\\CLImate\\Settings\\SettingsImporter' => __DIR__ . '/..' . '/league/climate/src/Settings/SettingsImporter.php', + 'League\\CLImate\\Settings\\SettingsInterface' => __DIR__ . '/..' . '/league/climate/src/Settings/SettingsInterface.php', + 'League\\CLImate\\TerminalObject\\Basic\\BasicTerminalObject' => __DIR__ . '/..' . '/league/climate/src/TerminalObject/Basic/BasicTerminalObject.php', + 'League\\CLImate\\TerminalObject\\Basic\\BasicTerminalObjectInterface' => __DIR__ . '/..' . '/league/climate/src/TerminalObject/Basic/BasicTerminalObjectInterface.php', + 'League\\CLImate\\TerminalObject\\Basic\\Border' => __DIR__ . '/..' . '/league/climate/src/TerminalObject/Basic/Border.php', + 'League\\CLImate\\TerminalObject\\Basic\\Br' => __DIR__ . '/..' . '/league/climate/src/TerminalObject/Basic/Br.php', + 'League\\CLImate\\TerminalObject\\Basic\\Clear' => __DIR__ . '/..' . '/league/climate/src/TerminalObject/Basic/Clear.php', + 'League\\CLImate\\TerminalObject\\Basic\\ClearLine' => __DIR__ . '/..' . '/league/climate/src/TerminalObject/Basic/ClearLine.php', + 'League\\CLImate\\TerminalObject\\Basic\\Columns' => __DIR__ . '/..' . '/league/climate/src/TerminalObject/Basic/Columns.php', + 'League\\CLImate\\TerminalObject\\Basic\\Draw' => __DIR__ . '/..' . '/league/climate/src/TerminalObject/Basic/Draw.php', + 'League\\CLImate\\TerminalObject\\Basic\\Dump' => __DIR__ . '/..' . '/league/climate/src/TerminalObject/Basic/Dump.php', + 'League\\CLImate\\TerminalObject\\Basic\\Flank' => __DIR__ . '/..' . '/league/climate/src/TerminalObject/Basic/Flank.php', + 'League\\CLImate\\TerminalObject\\Basic\\Inline' => __DIR__ . '/..' . '/league/climate/src/TerminalObject/Basic/Inline.php', + 'League\\CLImate\\TerminalObject\\Basic\\Json' => __DIR__ . '/..' . '/league/climate/src/TerminalObject/Basic/Json.php', + 'League\\CLImate\\TerminalObject\\Basic\\Out' => __DIR__ . '/..' . '/league/climate/src/TerminalObject/Basic/Out.php', + 'League\\CLImate\\TerminalObject\\Basic\\Repeatable' => __DIR__ . '/..' . '/league/climate/src/TerminalObject/Basic/Repeatable.php', + 'League\\CLImate\\TerminalObject\\Basic\\Tab' => __DIR__ . '/..' . '/league/climate/src/TerminalObject/Basic/Tab.php', + 'League\\CLImate\\TerminalObject\\Basic\\Table' => __DIR__ . '/..' . '/league/climate/src/TerminalObject/Basic/Table.php', + 'League\\CLImate\\TerminalObject\\Dynamic\\Animation' => __DIR__ . '/..' . '/league/climate/src/TerminalObject/Dynamic/Animation.php', + 'League\\CLImate\\TerminalObject\\Dynamic\\Animation\\Keyframe' => __DIR__ . '/..' . '/league/climate/src/TerminalObject/Dynamic/Animation/Keyframe.php', + 'League\\CLImate\\TerminalObject\\Dynamic\\Checkbox\\Checkbox' => __DIR__ . '/..' . '/league/climate/src/TerminalObject/Dynamic/Checkbox/Checkbox.php', + 'League\\CLImate\\TerminalObject\\Dynamic\\Checkbox\\CheckboxGroup' => __DIR__ . '/..' . '/league/climate/src/TerminalObject/Dynamic/Checkbox/CheckboxGroup.php', + 'League\\CLImate\\TerminalObject\\Dynamic\\Checkbox\\RadioGroup' => __DIR__ . '/..' . '/league/climate/src/TerminalObject/Dynamic/Checkbox/RadioGroup.php', + 'League\\CLImate\\TerminalObject\\Dynamic\\Checkboxes' => __DIR__ . '/..' . '/league/climate/src/TerminalObject/Dynamic/Checkboxes.php', + 'League\\CLImate\\TerminalObject\\Dynamic\\Confirm' => __DIR__ . '/..' . '/league/climate/src/TerminalObject/Dynamic/Confirm.php', + 'League\\CLImate\\TerminalObject\\Dynamic\\DynamicTerminalObject' => __DIR__ . '/..' . '/league/climate/src/TerminalObject/Dynamic/DynamicTerminalObject.php', + 'League\\CLImate\\TerminalObject\\Dynamic\\DynamicTerminalObjectInterface' => __DIR__ . '/..' . '/league/climate/src/TerminalObject/Dynamic/DynamicTerminalObjectInterface.php', + 'League\\CLImate\\TerminalObject\\Dynamic\\Input' => __DIR__ . '/..' . '/league/climate/src/TerminalObject/Dynamic/Input.php', + 'League\\CLImate\\TerminalObject\\Dynamic\\InputAbstract' => __DIR__ . '/..' . '/league/climate/src/TerminalObject/Dynamic/InputAbstract.php', + 'League\\CLImate\\TerminalObject\\Dynamic\\Padding' => __DIR__ . '/..' . '/league/climate/src/TerminalObject/Dynamic/Padding.php', + 'League\\CLImate\\TerminalObject\\Dynamic\\Password' => __DIR__ . '/..' . '/league/climate/src/TerminalObject/Dynamic/Password.php', + 'League\\CLImate\\TerminalObject\\Dynamic\\Progress' => __DIR__ . '/..' . '/league/climate/src/TerminalObject/Dynamic/Progress.php', + 'League\\CLImate\\TerminalObject\\Dynamic\\Radio' => __DIR__ . '/..' . '/league/climate/src/TerminalObject/Dynamic/Radio.php', + 'League\\CLImate\\TerminalObject\\Dynamic\\Spinner' => __DIR__ . '/..' . '/league/climate/src/TerminalObject/Dynamic/Spinner.php', + 'League\\CLImate\\TerminalObject\\Helper\\Art' => __DIR__ . '/..' . '/league/climate/src/TerminalObject/Helper/Art.php', + 'League\\CLImate\\TerminalObject\\Helper\\Sleeper' => __DIR__ . '/..' . '/league/climate/src/TerminalObject/Helper/Sleeper.php', + 'League\\CLImate\\TerminalObject\\Helper\\SleeperInterface' => __DIR__ . '/..' . '/league/climate/src/TerminalObject/Helper/SleeperInterface.php', + 'League\\CLImate\\TerminalObject\\Helper\\StringLength' => __DIR__ . '/..' . '/league/climate/src/TerminalObject/Helper/StringLength.php', + 'League\\CLImate\\TerminalObject\\Router\\BaseRouter' => __DIR__ . '/..' . '/league/climate/src/TerminalObject/Router/BaseRouter.php', + 'League\\CLImate\\TerminalObject\\Router\\BasicRouter' => __DIR__ . '/..' . '/league/climate/src/TerminalObject/Router/BasicRouter.php', + 'League\\CLImate\\TerminalObject\\Router\\DynamicRouter' => __DIR__ . '/..' . '/league/climate/src/TerminalObject/Router/DynamicRouter.php', + 'League\\CLImate\\TerminalObject\\Router\\ExtensionCollection' => __DIR__ . '/..' . '/league/climate/src/TerminalObject/Router/ExtensionCollection.php', + 'League\\CLImate\\TerminalObject\\Router\\Router' => __DIR__ . '/..' . '/league/climate/src/TerminalObject/Router/Router.php', + 'League\\CLImate\\TerminalObject\\Router\\RouterInterface' => __DIR__ . '/..' . '/league/climate/src/TerminalObject/Router/RouterInterface.php', + 'League\\CLImate\\Util\\Cursor' => __DIR__ . '/..' . '/league/climate/src/Util/Cursor.php', + 'League\\CLImate\\Util\\Helper' => __DIR__ . '/..' . '/league/climate/src/Util/Helper.php', + 'League\\CLImate\\Util\\Output' => __DIR__ . '/..' . '/league/climate/src/Util/Output.php', + 'League\\CLImate\\Util\\OutputImporter' => __DIR__ . '/..' . '/league/climate/src/Util/OutputImporter.php', + 'League\\CLImate\\Util\\Reader\\ReaderInterface' => __DIR__ . '/..' . '/league/climate/src/Util/Reader/ReaderInterface.php', + 'League\\CLImate\\Util\\Reader\\Stdin' => __DIR__ . '/..' . '/league/climate/src/Util/Reader/Stdin.php', + 'League\\CLImate\\Util\\System\\Linux' => __DIR__ . '/..' . '/league/climate/src/Util/System/Linux.php', + 'League\\CLImate\\Util\\System\\System' => __DIR__ . '/..' . '/league/climate/src/Util/System/System.php', + 'League\\CLImate\\Util\\System\\SystemFactory' => __DIR__ . '/..' . '/league/climate/src/Util/System/SystemFactory.php', + 'League\\CLImate\\Util\\System\\Windows' => __DIR__ . '/..' . '/league/climate/src/Util/System/Windows.php', + 'League\\CLImate\\Util\\UtilFactory' => __DIR__ . '/..' . '/league/climate/src/Util/UtilFactory.php', + 'League\\CLImate\\Util\\UtilImporter' => __DIR__ . '/..' . '/league/climate/src/Util/UtilImporter.php', + 'League\\CLImate\\Util\\Writer\\Buffer' => __DIR__ . '/..' . '/league/climate/src/Util/Writer/Buffer.php', + 'League\\CLImate\\Util\\Writer\\File' => __DIR__ . '/..' . '/league/climate/src/Util/Writer/File.php', + 'League\\CLImate\\Util\\Writer\\StdErr' => __DIR__ . '/..' . '/league/climate/src/Util/Writer/StdErr.php', + 'League\\CLImate\\Util\\Writer\\StdOut' => __DIR__ . '/..' . '/league/climate/src/Util/Writer/StdOut.php', + 'League\\CLImate\\Util\\Writer\\WriterInterface' => __DIR__ . '/..' . '/league/climate/src/Util/Writer/WriterInterface.php', 'League\\ColorExtractor\\Color' => __DIR__ . '/..' . '/league/color-extractor/src/League/ColorExtractor/Color.php', 'League\\ColorExtractor\\ColorExtractor' => __DIR__ . '/..' . '/league/color-extractor/src/League/ColorExtractor/ColorExtractor.php', 'League\\ColorExtractor\\Palette' => __DIR__ . '/..' . '/league/color-extractor/src/League/ColorExtractor/Palette.php', @@ -599,6 +735,7 @@ class ComposerStaticInit34ad0fcfd7efff0ce7004033b941cfcf 'PHPMailer\\PHPMailer\\SMTP' => __DIR__ . '/..' . '/phpmailer/phpmailer/src/SMTP.php', 'Parsedown' => __DIR__ . '/../..' . '/kirby/dependencies/parsedown/Parsedown.php', 'ParsedownExtra' => __DIR__ . '/../..' . '/kirby/dependencies/parsedown-extra/ParsedownExtra.php', + 'PhpToken' => __DIR__ . '/..' . '/symfony/polyfill-php80/Resources/stubs/PhpToken.php', 'Psr\\Http\\Client\\ClientExceptionInterface' => __DIR__ . '/..' . '/psr/http-client/src/ClientExceptionInterface.php', 'Psr\\Http\\Client\\ClientInterface' => __DIR__ . '/..' . '/psr/http-client/src/ClientInterface.php', 'Psr\\Http\\Client\\NetworkExceptionInterface' => __DIR__ . '/..' . '/psr/http-client/src/NetworkExceptionInterface.php', @@ -627,13 +764,42 @@ class ComposerStaticInit34ad0fcfd7efff0ce7004033b941cfcf 'Psr\\Log\\Test\\DummyTest' => __DIR__ . '/..' . '/psr/log/Psr/Log/Test/DummyTest.php', 'Psr\\Log\\Test\\LoggerInterfaceTest' => __DIR__ . '/..' . '/psr/log/Psr/Log/Test/LoggerInterfaceTest.php', 'Psr\\Log\\Test\\TestLogger' => __DIR__ . '/..' . '/psr/log/Psr/Log/Test/TestLogger.php', + 'Seld\\CliPrompt\\CliPrompt' => __DIR__ . '/..' . '/seld/cli-prompt/src/CliPrompt.php', 'Spyc' => __DIR__ . '/../..' . '/kirby/dependencies/spyc/Spyc.php', + 'Stringable' => __DIR__ . '/..' . '/symfony/polyfill-php80/Resources/stubs/Stringable.php', + 'Symfony\\Component\\Finder\\Comparator\\Comparator' => __DIR__ . '/..' . '/symfony/finder/Comparator/Comparator.php', + 'Symfony\\Component\\Finder\\Comparator\\DateComparator' => __DIR__ . '/..' . '/symfony/finder/Comparator/DateComparator.php', + 'Symfony\\Component\\Finder\\Comparator\\NumberComparator' => __DIR__ . '/..' . '/symfony/finder/Comparator/NumberComparator.php', + 'Symfony\\Component\\Finder\\Exception\\AccessDeniedException' => __DIR__ . '/..' . '/symfony/finder/Exception/AccessDeniedException.php', + 'Symfony\\Component\\Finder\\Exception\\DirectoryNotFoundException' => __DIR__ . '/..' . '/symfony/finder/Exception/DirectoryNotFoundException.php', + 'Symfony\\Component\\Finder\\Finder' => __DIR__ . '/..' . '/symfony/finder/Finder.php', + 'Symfony\\Component\\Finder\\Gitignore' => __DIR__ . '/..' . '/symfony/finder/Gitignore.php', + 'Symfony\\Component\\Finder\\Glob' => __DIR__ . '/..' . '/symfony/finder/Glob.php', + 'Symfony\\Component\\Finder\\Iterator\\CustomFilterIterator' => __DIR__ . '/..' . '/symfony/finder/Iterator/CustomFilterIterator.php', + 'Symfony\\Component\\Finder\\Iterator\\DateRangeFilterIterator' => __DIR__ . '/..' . '/symfony/finder/Iterator/DateRangeFilterIterator.php', + 'Symfony\\Component\\Finder\\Iterator\\DepthRangeFilterIterator' => __DIR__ . '/..' . '/symfony/finder/Iterator/DepthRangeFilterIterator.php', + 'Symfony\\Component\\Finder\\Iterator\\ExcludeDirectoryFilterIterator' => __DIR__ . '/..' . '/symfony/finder/Iterator/ExcludeDirectoryFilterIterator.php', + 'Symfony\\Component\\Finder\\Iterator\\FileTypeFilterIterator' => __DIR__ . '/..' . '/symfony/finder/Iterator/FileTypeFilterIterator.php', + 'Symfony\\Component\\Finder\\Iterator\\FilecontentFilterIterator' => __DIR__ . '/..' . '/symfony/finder/Iterator/FilecontentFilterIterator.php', + 'Symfony\\Component\\Finder\\Iterator\\FilenameFilterIterator' => __DIR__ . '/..' . '/symfony/finder/Iterator/FilenameFilterIterator.php', + 'Symfony\\Component\\Finder\\Iterator\\LazyIterator' => __DIR__ . '/..' . '/symfony/finder/Iterator/LazyIterator.php', + 'Symfony\\Component\\Finder\\Iterator\\MultiplePcreFilterIterator' => __DIR__ . '/..' . '/symfony/finder/Iterator/MultiplePcreFilterIterator.php', + 'Symfony\\Component\\Finder\\Iterator\\PathFilterIterator' => __DIR__ . '/..' . '/symfony/finder/Iterator/PathFilterIterator.php', + 'Symfony\\Component\\Finder\\Iterator\\RecursiveDirectoryIterator' => __DIR__ . '/..' . '/symfony/finder/Iterator/RecursiveDirectoryIterator.php', + 'Symfony\\Component\\Finder\\Iterator\\SizeRangeFilterIterator' => __DIR__ . '/..' . '/symfony/finder/Iterator/SizeRangeFilterIterator.php', + 'Symfony\\Component\\Finder\\Iterator\\SortableIterator' => __DIR__ . '/..' . '/symfony/finder/Iterator/SortableIterator.php', + 'Symfony\\Component\\Finder\\Iterator\\VcsIgnoredFilterIterator' => __DIR__ . '/..' . '/symfony/finder/Iterator/VcsIgnoredFilterIterator.php', + 'Symfony\\Component\\Finder\\SplFileInfo' => __DIR__ . '/..' . '/symfony/finder/SplFileInfo.php', 'Symfony\\Polyfill\\Intl\\Idn\\Idn' => __DIR__ . '/..' . '/symfony/polyfill-intl-idn/Idn.php', 'Symfony\\Polyfill\\Intl\\Idn\\Info' => __DIR__ . '/..' . '/symfony/polyfill-intl-idn/Info.php', 'Symfony\\Polyfill\\Intl\\Idn\\Resources\\unidata\\DisallowedRanges' => __DIR__ . '/..' . '/symfony/polyfill-intl-idn/Resources/unidata/DisallowedRanges.php', 'Symfony\\Polyfill\\Intl\\Idn\\Resources\\unidata\\Regex' => __DIR__ . '/..' . '/symfony/polyfill-intl-idn/Resources/unidata/Regex.php', 'Symfony\\Polyfill\\Intl\\Normalizer\\Normalizer' => __DIR__ . '/..' . '/symfony/polyfill-intl-normalizer/Normalizer.php', 'Symfony\\Polyfill\\Mbstring\\Mbstring' => __DIR__ . '/..' . '/symfony/polyfill-mbstring/Mbstring.php', + 'Symfony\\Polyfill\\Php80\\Php80' => __DIR__ . '/..' . '/symfony/polyfill-php80/Php80.php', + 'Symfony\\Polyfill\\Php80\\PhpToken' => __DIR__ . '/..' . '/symfony/polyfill-php80/PhpToken.php', + 'UnhandledMatchError' => __DIR__ . '/..' . '/symfony/polyfill-php80/Resources/stubs/UnhandledMatchError.php', + 'ValueError' => __DIR__ . '/..' . '/symfony/polyfill-php80/Resources/stubs/ValueError.php', 'Whoops\\Exception\\ErrorException' => __DIR__ . '/..' . '/filp/whoops/src/Whoops/Exception/ErrorException.php', 'Whoops\\Exception\\Formatter' => __DIR__ . '/..' . '/filp/whoops/src/Whoops/Exception/Formatter.php', 'Whoops\\Exception\\Frame' => __DIR__ . '/..' . '/filp/whoops/src/Whoops/Exception/Frame.php', diff --git a/vendor/composer/installed.json b/vendor/composer/installed.json index e7ef256..6b676a6 100644 --- a/vendor/composer/installed.json +++ b/vendor/composer/installed.json @@ -1,5 +1,90 @@ { "packages": [ + { + "name": "bnomei/kirby3-janitor", + "version": "2.16.0", + "version_normalized": "2.16.0.0", + "source": { + "type": "git", + "url": "https://github.com/bnomei/kirby3-janitor.git", + "reference": "12a9132cf221f3e248d9f22bddb7cbd7d303ae3a" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/bnomei/kirby3-janitor/zipball/12a9132cf221f3e248d9f22bddb7cbd7d303ae3a", + "reference": "12a9132cf221f3e248d9f22bddb7cbd7d303ae3a", + "shasum": "" + }, + "require": { + "getkirby/composer-installer": "^1.2", + "league/climate": "^3.7", + "php": ">=7.4.0", + "symfony/deprecation-contracts": "2.5", + "symfony/finder": "^5.4" + }, + "require-dev": { + "getkirby/cms": "^3.5", + "php-coveralls/php-coveralls": "^2.4", + "phpunit/phpunit": "^9.5" + }, + "time": "2022-04-14T18:24:35+00:00", + "type": "kirby-plugin", + "extra": { + "kirby-cms-path": "tests/kirby" + }, + "installation-source": "dist", + "autoload": { + "psr-4": { + "Bnomei\\": "classes/" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Bruno Meilick", + "email": "b@bnomei.com" + } + ], + "description": "Kirby 3 Plugin for running jobs like cleaning the cache from within the Panel, PHP code or a cronjob", + "keywords": [ + "ajax", + "button", + "cache", + "clean", + "cronjob", + "janitor", + "job-runner", + "kirby3", + "kirby3-cms", + "kirby3-plugin" + ], + "support": { + "issues": "https://github.com/bnomei/kirby3-janitor/issues", + "source": "https://github.com/bnomei/kirby3-janitor/tree/v2.16.0" + }, + "funding": [ + { + "url": "https://buymeacoff.ee/bnomei", + "type": "custom" + }, + { + "url": "https://paypal.me/bnomei", + "type": "custom" + }, + { + "url": "https://github.com/bnomei", + "type": "github" + }, + { + "url": "https://www.patreon.com/bnomei", + "type": "patreon" + } + ], + "install-path": "../../site/plugins/kirby3-janitor" + }, { "name": "claviska/simpleimage", "version": "3.7.0", @@ -671,6 +756,74 @@ ], "install-path": "../laminas/laminas-escaper" }, + { + "name": "league/climate", + "version": "3.8.2", + "version_normalized": "3.8.2.0", + "source": { + "type": "git", + "url": "https://github.com/thephpleague/climate.git", + "reference": "a785a3ac8f584eed4abd45e4e16fe64c46659a28" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/thephpleague/climate/zipball/a785a3ac8f584eed4abd45e4e16fe64c46659a28", + "reference": "a785a3ac8f584eed4abd45e4e16fe64c46659a28", + "shasum": "" + }, + "require": { + "php": "^7.3 || ^8.0", + "psr/log": "^1.0 || ^2.0 || ^3.0", + "seld/cli-prompt": "^1.0" + }, + "require-dev": { + "mikey179/vfsstream": "^1.6.10", + "mockery/mockery": "^1.4.2", + "phpunit/phpunit": "^9.5.10" + }, + "suggest": { + "ext-mbstring": "If ext-mbstring is not available you MUST install symfony/polyfill-mbstring" + }, + "time": "2022-06-18T14:42:08+00:00", + "type": "library", + "installation-source": "dist", + "autoload": { + "psr-4": { + "League\\CLImate\\": "src/" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Joe Tannenbaum", + "email": "hey@joe.codes", + "homepage": "http://joe.codes/", + "role": "Developer" + }, + { + "name": "Craig Duncan", + "email": "git@duncanc.co.uk", + "homepage": "https://github.com/duncan3dc", + "role": "Developer" + } + ], + "description": "PHP's best friend for the terminal. CLImate allows you to easily output colored text, special formats, and more.", + "keywords": [ + "cli", + "colors", + "command", + "php", + "terminal" + ], + "support": { + "issues": "https://github.com/thephpleague/climate/issues", + "source": "https://github.com/thephpleague/climate/tree/3.8.2" + }, + "install-path": "../league/climate" + }, { "name": "league/color-extractor", "version": "0.3.2", @@ -1305,6 +1458,64 @@ }, "install-path": "../ralouphie/getallheaders" }, + { + "name": "seld/cli-prompt", + "version": "1.0.4", + "version_normalized": "1.0.4.0", + "source": { + "type": "git", + "url": "https://github.com/Seldaek/cli-prompt.git", + "reference": "b8dfcf02094b8c03b40322c229493bb2884423c5" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/Seldaek/cli-prompt/zipball/b8dfcf02094b8c03b40322c229493bb2884423c5", + "reference": "b8dfcf02094b8c03b40322c229493bb2884423c5", + "shasum": "" + }, + "require": { + "php": ">=5.3" + }, + "require-dev": { + "phpstan/phpstan": "^0.12.63" + }, + "time": "2020-12-15T21:32:01+00:00", + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "1.x-dev" + } + }, + "installation-source": "dist", + "autoload": { + "psr-4": { + "Seld\\CliPrompt\\": "src/" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Jordi Boggiano", + "email": "j.boggiano@seld.be" + } + ], + "description": "Allows you to prompt for user input on the command line, and optionally hide the characters they type", + "keywords": [ + "cli", + "console", + "hidden", + "input", + "prompt" + ], + "support": { + "issues": "https://github.com/Seldaek/cli-prompt/issues", + "source": "https://github.com/Seldaek/cli-prompt/tree/1.0.4" + }, + "install-path": "../seld/cli-prompt" + }, { "name": "sylvainjule/color-palette", "version": "1.0.4", @@ -1389,6 +1600,142 @@ }, "install-path": "../../site/plugins/embed" }, + { + "name": "symfony/deprecation-contracts", + "version": "v2.5.0", + "version_normalized": "2.5.0.0", + "source": { + "type": "git", + "url": "https://github.com/symfony/deprecation-contracts.git", + "reference": "6f981ee24cf69ee7ce9736146d1c57c2780598a8" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/symfony/deprecation-contracts/zipball/6f981ee24cf69ee7ce9736146d1c57c2780598a8", + "reference": "6f981ee24cf69ee7ce9736146d1c57c2780598a8", + "shasum": "" + }, + "require": { + "php": ">=7.1" + }, + "time": "2021-07-12T14:48:14+00:00", + "type": "library", + "extra": { + "branch-alias": { + "dev-main": "2.5-dev" + }, + "thanks": { + "name": "symfony/contracts", + "url": "https://github.com/symfony/contracts" + } + }, + "installation-source": "dist", + "autoload": { + "files": [ + "function.php" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Nicolas Grekas", + "email": "p@tchwork.com" + }, + { + "name": "Symfony Community", + "homepage": "https://symfony.com/contributors" + } + ], + "description": "A generic function and convention to trigger deprecation notices", + "homepage": "https://symfony.com", + "support": { + "source": "https://github.com/symfony/deprecation-contracts/tree/v2.5.0" + }, + "funding": [ + { + "url": "https://symfony.com/sponsor", + "type": "custom" + }, + { + "url": "https://github.com/fabpot", + "type": "github" + }, + { + "url": "https://tidelift.com/funding/github/packagist/symfony/symfony", + "type": "tidelift" + } + ], + "install-path": "../symfony/deprecation-contracts" + }, + { + "name": "symfony/finder", + "version": "v5.4.43", + "version_normalized": "5.4.43.0", + "source": { + "type": "git", + "url": "https://github.com/symfony/finder.git", + "reference": "ae25a9145a900764158d439653d5630191155ca0" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/symfony/finder/zipball/ae25a9145a900764158d439653d5630191155ca0", + "reference": "ae25a9145a900764158d439653d5630191155ca0", + "shasum": "" + }, + "require": { + "php": ">=7.2.5", + "symfony/deprecation-contracts": "^2.1|^3", + "symfony/polyfill-php80": "^1.16" + }, + "time": "2024-08-13T14:03:51+00:00", + "type": "library", + "installation-source": "dist", + "autoload": { + "psr-4": { + "Symfony\\Component\\Finder\\": "" + }, + "exclude-from-classmap": [ + "/Tests/" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Fabien Potencier", + "email": "fabien@symfony.com" + }, + { + "name": "Symfony Community", + "homepage": "https://symfony.com/contributors" + } + ], + "description": "Finds files and directories via an intuitive fluent interface", + "homepage": "https://symfony.com", + "support": { + "source": "https://github.com/symfony/finder/tree/v5.4.43" + }, + "funding": [ + { + "url": "https://symfony.com/sponsor", + "type": "custom" + }, + { + "url": "https://github.com/fabpot", + "type": "github" + }, + { + "url": "https://tidelift.com/funding/github/packagist/symfony/symfony", + "type": "tidelift" + } + ], + "install-path": "../symfony/finder" + }, { "name": "symfony/polyfill-intl-idn", "version": "v1.26.0", @@ -1648,6 +1995,89 @@ } ], "install-path": "../symfony/polyfill-mbstring" + }, + { + "name": "symfony/polyfill-php80", + "version": "v1.31.0", + "version_normalized": "1.31.0.0", + "source": { + "type": "git", + "url": "https://github.com/symfony/polyfill-php80.git", + "reference": "60328e362d4c2c802a54fcbf04f9d3fb892b4cf8" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/symfony/polyfill-php80/zipball/60328e362d4c2c802a54fcbf04f9d3fb892b4cf8", + "reference": "60328e362d4c2c802a54fcbf04f9d3fb892b4cf8", + "shasum": "" + }, + "require": { + "php": ">=7.2" + }, + "time": "2024-09-09T11:45:10+00:00", + "type": "library", + "extra": { + "thanks": { + "name": "symfony/polyfill", + "url": "https://github.com/symfony/polyfill" + } + }, + "installation-source": "dist", + "autoload": { + "files": [ + "bootstrap.php" + ], + "psr-4": { + "Symfony\\Polyfill\\Php80\\": "" + }, + "classmap": [ + "Resources/stubs" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Ion Bazan", + "email": "ion.bazan@gmail.com" + }, + { + "name": "Nicolas Grekas", + "email": "p@tchwork.com" + }, + { + "name": "Symfony Community", + "homepage": "https://symfony.com/contributors" + } + ], + "description": "Symfony polyfill backporting some PHP 8.0+ features to lower PHP versions", + "homepage": "https://symfony.com", + "keywords": [ + "compatibility", + "polyfill", + "portable", + "shim" + ], + "support": { + "source": "https://github.com/symfony/polyfill-php80/tree/v1.31.0" + }, + "funding": [ + { + "url": "https://symfony.com/sponsor", + "type": "custom" + }, + { + "url": "https://github.com/fabpot", + "type": "github" + }, + { + "url": "https://tidelift.com/funding/github/packagist/symfony/symfony", + "type": "tidelift" + } + ], + "install-path": "../symfony/polyfill-php80" } ], "dev": true, diff --git a/vendor/composer/installed.php b/vendor/composer/installed.php index 98a502e..b832985 100644 --- a/vendor/composer/installed.php +++ b/vendor/composer/installed.php @@ -3,13 +3,22 @@ 'name' => 'getkirby/plainkit', 'pretty_version' => 'dev-main', 'version' => 'dev-main', - 'reference' => 'a4b2aece7b44b516ca8349830f01c2eccae22ff0', + 'reference' => 'b0db09492d378d45eb0ecd0234e85a57db00d2f8', 'type' => 'project', 'install_path' => __DIR__ . '/../../', 'aliases' => array(), 'dev' => true, ), 'versions' => array( + 'bnomei/kirby3-janitor' => array( + 'pretty_version' => '2.16.0', + 'version' => '2.16.0.0', + 'reference' => '12a9132cf221f3e248d9f22bddb7cbd7d303ae3a', + 'type' => 'kirby-plugin', + 'install_path' => __DIR__ . '/../../site/plugins/kirby3-janitor', + 'aliases' => array(), + 'dev_requirement' => false, + ), 'claviska/simpleimage' => array( 'pretty_version' => '3.7.0', 'version' => '3.7.0.0', @@ -67,7 +76,7 @@ 'getkirby/plainkit' => array( 'pretty_version' => 'dev-main', 'version' => 'dev-main', - 'reference' => 'a4b2aece7b44b516ca8349830f01c2eccae22ff0', + 'reference' => 'b0db09492d378d45eb0ecd0234e85a57db00d2f8', 'type' => 'project', 'install_path' => __DIR__ . '/../../', 'aliases' => array(), @@ -100,6 +109,15 @@ 'aliases' => array(), 'dev_requirement' => false, ), + 'league/climate' => array( + 'pretty_version' => '3.8.2', + 'version' => '3.8.2.0', + 'reference' => 'a785a3ac8f584eed4abd45e4e16fe64c46659a28', + 'type' => 'library', + 'install_path' => __DIR__ . '/../league/climate', + 'aliases' => array(), + 'dev_requirement' => false, + ), 'league/color-extractor' => array( 'pretty_version' => '0.3.2', 'version' => '0.3.2.0', @@ -217,6 +235,15 @@ 'aliases' => array(), 'dev_requirement' => false, ), + 'seld/cli-prompt' => array( + 'pretty_version' => '1.0.4', + 'version' => '1.0.4.0', + 'reference' => 'b8dfcf02094b8c03b40322c229493bb2884423c5', + 'type' => 'library', + 'install_path' => __DIR__ . '/../seld/cli-prompt', + 'aliases' => array(), + 'dev_requirement' => false, + ), 'sylvainjule/color-palette' => array( 'pretty_version' => '1.0.4', 'version' => '1.0.4.0', @@ -235,6 +262,24 @@ 'aliases' => array(), 'dev_requirement' => false, ), + 'symfony/deprecation-contracts' => array( + 'pretty_version' => 'v2.5.0', + 'version' => '2.5.0.0', + 'reference' => '6f981ee24cf69ee7ce9736146d1c57c2780598a8', + 'type' => 'library', + 'install_path' => __DIR__ . '/../symfony/deprecation-contracts', + 'aliases' => array(), + 'dev_requirement' => false, + ), + 'symfony/finder' => array( + 'pretty_version' => 'v5.4.43', + 'version' => '5.4.43.0', + 'reference' => 'ae25a9145a900764158d439653d5630191155ca0', + 'type' => 'library', + 'install_path' => __DIR__ . '/../symfony/finder', + 'aliases' => array(), + 'dev_requirement' => false, + ), 'symfony/polyfill-intl-idn' => array( 'pretty_version' => 'v1.26.0', 'version' => '1.26.0.0', @@ -268,5 +313,14 @@ 0 => '*', ), ), + 'symfony/polyfill-php80' => array( + 'pretty_version' => 'v1.31.0', + 'version' => '1.31.0.0', + 'reference' => '60328e362d4c2c802a54fcbf04f9d3fb892b4cf8', + 'type' => 'library', + 'install_path' => __DIR__ . '/../symfony/polyfill-php80', + 'aliases' => array(), + 'dev_requirement' => false, + ), ), ); diff --git a/vendor/league/climate/CHANGELOG.md b/vendor/league/climate/CHANGELOG.md new file mode 100644 index 0000000..53459e3 --- /dev/null +++ b/vendor/league/climate/CHANGELOG.md @@ -0,0 +1,246 @@ +Changelog +========= + +-------- + +## 3.8.2 - 2022-01-23 + +### Fixed + +* Avoid passing null to strlen(). [#186](https://github.com/thephpleague/climate/issues/186) +* [Support] Added compatibility for psr/log 2 & 3. [#191](https://github.com/thephpleague/climate/issues/191) + +-------- + +## 3.8.1 - 2022-01-23 + +### Fixed + +* [Linux] Avoid type issue when checking if \STDOUT is defined. [#185](https://github.com/thephpleague/climate/issues/185) + +-------- + +## 3.8.0 - 2022-01-22 + +### Changed + +* [Support] Added support for PHP 8.1. + +### Fixed + +* [Linux] Added a workaround for executed some parts of the code in a non-cli context. [#175](https://github.com/thephpleague/climate/pull/175) + +-------- + +## 3.7.0 - 2021-01-10 + +### Changed + +* [Support] Added support for PHP 8.0. +* [Support] Dropped support for PHP 7.2. + +-------- + +## 3.6.0 - 2020-10-04 + +### Added + +* [Arguments] Add a method to access trailing args as array. [#158](https://github.com/thephpleague/climate/pull/158) + +### Fixed + +* [Table] Add support for newlines in table data. [#160](https://github.com/thephpleague/climate/pull/160) +* [Checkbox] Don't try to add padding if the there's no spare space. [#161](https://github.com/thephpleague/climate/issues/161) + +### Changed + +* [Support] Dropped support for PHP 7.1. + +-------- + +## 3.5.2 - 2019-12-01 + +### Fixed + +* [Checkbox] Ensure we can output when the terminal width is unknown. [#156](https://github.com/thephpleague/climate/pull/156) + +-------- + +## 3.5.1 - 2019-11-24 + +### Fixed + +* [Art] Be stricter about matching filenames when looking for art. [#155](https://github.com/thephpleague/climate/issues/155) +* [Support] Provide better support for Windows using GitHub actions. + +-------- + +## 3.5.0 - 2019-02-10 + +### Added + +* [Arguments] Multiple arguments (eg `cli -d foo=bar -d baz=qux`) available via `$climate->arguments->getArray("d")`. [#111](https://github.com/thephpleague/climate/pull/111) +* [Arguments] A new method (`Argument::values()`) replaces the deprecated `valueArray()` method. +* [Spinner] Add an indeterminate progress spinner. +* [Exceptions] All exception now implement `League\CLImate\Exceptions\Exception`. +* [Basic] Allow single lines to be cleared using `$climate->clearLine()`. [#145](https://github.com/thephpleague/climate/issues/145). + +### Fixed + +* [Arguments] Mixing arguments with/without option values. [#122](https://github.com/thephpleague/climate/issues/122). +* [Output] Prevent `tput` output from being sent to the terminal. +* [Confirm] Accept more reasonable options for yes/no. [#126](https://github.com/thephpleague/climate/issues/126). +* [Radio] Allow ENTER to be used to choose an option. [#140](https://github.com/thephpleague/climate/issues/140). +* [Output] Improve the checks for ANSI color checks. [#128](https://github.com/thephpleague/climate/issues/128) / [#129](https://github.com/thephpleague/climate/issues/129). +* [Art] Only match filenames when looking for art. [#130](https://github.com/thephpleague/climate/issues/130) + +### Changed + +* [Support] Dropped support for PHP 5.6 and PHP 7.0 + +-------- + +## 3.4.1 - 2018-04-29 + +### Fixed + +* [Json] Don't escape slashes when outputting JSON. [#121](https://github.com/thephpleague/climate/pull/121) + +-------- + +## 3.4.0 - 2018-04-28 + +### Added + +* [Logger] Added a Logger class to use CLImate as a PSR-3 logger. + +-------- + +## 3.3.0 - 2018-04-20 + +### Fixed + +* Ensure multibyte strings are supported everywhere. +* Improved support for IDE assistance when using method chaining. [#102](https://github.com/thephpleague/climate/pull/102) +* [Art] Improve handling of missing files. [#114](https://github.com/thephpleague/climate/issues/114) +* [Input] Correct the usage of `defaultTo()` with `accept()`. [#104](https://github.com/thephpleague/climate/pull/104) +* [Windows] Fixed the terminal width detection. [#64](https://github.com/thephpleague/climate/pull/64) + +### Added + +* [Table] Add support for a prefix argument for each row. [#51](https://github.com/thephpleague/climate/issues/51) +* [Progress] Added an `each()` method. [#112](https://github.com/thephpleague/climate/pull/112) + +### Changed + +* [Support] Add support for PHP 7.2 +* [Support] Drop support for PHP 5.4 +* [Support] Drop support for PHP 5.5 +* [Support] Drop support for HHVM. +* Suggest the symfony polyfill library is `ext-mbstring` is not available. [#110](https://github.com/thephpleague/climate/pull/110) + +-------- + +## 3.2.4 - 2016-10-30 + +### Fixed + +* [Progres] Allow labels to be shown/hidden on each iteration. [#98](https://github.com/thephpleague/climate/pull/98) + +-------- + +## 3.2.3 - 2016-10-17 + +### Added + +* [Support] Added support for PHP 7.1 + +-------- + +## 3.2.2 - 2016-07-18 + +### Fixed + +* [Art] Allow code to be used in a phar. [#86](https://github.com/thephpleague/climate/pull/86) + +-------- + +## 3.2.1 - 2016-04-05 + +### Added + +* [Arguments] Add a `trailing()` method to get any trailing arguments. +* [Progress] Added a `forceRedraw()` method. [#72](https://github.com/thephpleague/climate/issues/72) + +### Fixed + +* [Checkbox] Don't cancel out the formatting for the first checkbox. [#77](https://github.com/thephpleague/climate/issues/77) +* [Padding] Ensure formatting is handled. [#78](https://github.com/thephpleague/climate/issues/78) +* [Columns] Prevent error when less items than columns are passed. [#75](https://github.com/thephpleague/climate/pull/75) + +-------- + +## 3.2.0 - 2015-08-13 + +### Added +- Multi-line support for `input` method [https://github.com/thephpleague/climate/pull/67](https://github.com/thephpleague/climate/pull/67) +- `extend` method for _much_ easier extending of CLImate + +### Fixed +- Unnecessary progress bar re-drawing when the output hadn't changed [https://github.com/thephpleague/climate/pull/69](https://github.com/thephpleague/climate/pull/69) +- Progress label no longer removed once progress reaches 100% +- Non-prefixed paramaters for `arguments` method now show in usage description [https://github.com/thephpleague/climate/issues/65](https://github.com/thephpleague/climate/issues/65) + +## 3.1.1 - 2015-05-01 + +### Fixed +- Windows support added for `password` thanks to @Seldaek and [seld/cli-prompt](https://packagist.org/packages/seld/cli-prompt) + +## 3.1.0 - 2015-04-30 + +### Added +- `password` prompt +- `checkboxes` prompt +- `radio` prompt +- 'file' as output option + +## 3.0.0 - 2015-03-01 + +### Changed + +- Custom output writers are added simply via the `output` property on CLImate now, as opposed to the immense amount of scaffolding required before + +### Added + +- Argument parsing +- StdErr output +- Buffer output +- `animate` method for running ASCII animations in the terminal. Because it's fun. +- Input now bolds the default response if it exists + +## 2.6.1 - 2015-01-18 + +### Fixed + +- Added `forceAnsiOn` and `forceAnsiOff` methods to address systems that were not identified correctly + +## 2.6.0 - 2015-01-07 + +### Added + +- Allow for passing an array of arrays into `columns` method +- `tab` method, for indenting text +- `padding` method, for padding strings to an equal width with a character +- `League\CLImate\TerminalObject\Repeatable` for repeatable objects such as `tab` and `br` +- `League\CLImate\Decorator\Parser\Ansi` and `League\CLImate\Decorator\Parser\NonAnsi` +- Factories: + + `League\CLImate\Decorator\Parser\ParserFactory` + + `League\CLImate\Util\System\SystemFactory` +- Terminal Objects now are appropriately namespaced as `Basic` or `Dynamic` +- Readers and Writers are appropriately namespaced as such under `League\CLImate\Util` + +### Fixed + +- Labels for `advance` method +- Non-ansi terminals will now have plaintext output instead of jumbled characters +- `border` method now default to full terminal width diff --git a/vendor/league/climate/CODE_OF_CONDUCT.md b/vendor/league/climate/CODE_OF_CONDUCT.md new file mode 100644 index 0000000..01b8644 --- /dev/null +++ b/vendor/league/climate/CODE_OF_CONDUCT.md @@ -0,0 +1,22 @@ +# Contributor Code of Conduct + +As contributors and maintainers of this project, and in the interest of fostering an open and welcoming community, we pledge to respect all people who contribute through reporting issues, posting feature requests, updating documentation, submitting pull requests or patches, and other activities. + +We are committed to making participation in this project a harassment-free experience for everyone, regardless of level of experience, gender, gender identity and expression, sexual orientation, disability, personal appearance, body size, race, ethnicity, age, religion, or nationality. + +Examples of unacceptable behavior by participants include: + +* The use of sexualized language or imagery +* Personal attacks +* Trolling or insulting/derogatory comments +* Public or private harassment +* Publishing other's private information, such as physical or electronic addresses, without explicit permission +* Other unethical or unprofessional conduct. + +Project maintainers have the right and responsibility to remove, edit, or reject comments, commits, code, wiki edits, issues, and other contributions that are not aligned to this Code of Conduct. By adopting this Code of Conduct, project maintainers commit themselves to fairly and consistently applying these principles to every aspect of managing this project. Project maintainers who do not follow or enforce the Code of Conduct may be permanently removed from the project team. + +This code of conduct applies both within project spaces and in public spaces when an individual is representing the project or its community. + +Instances of abusive, harassing, or otherwise unacceptable behavior may be reported by opening an issue or contacting one or more of the project maintainers. + +This Code of Conduct is adapted from the [Contributor Covenant](http://contributor-covenant.org), version 1.2.0, available at [http://contributor-covenant.org/version/1/2/0/](http://contributor-covenant.org/version/1/2/0/) diff --git a/vendor/league/climate/CONTRIBUTING.md b/vendor/league/climate/CONTRIBUTING.md new file mode 100644 index 0000000..780ad9c --- /dev/null +++ b/vendor/league/climate/CONTRIBUTING.md @@ -0,0 +1,32 @@ +# Contributing + +Contributions are **welcome** and will be fully **credited**. + +We accept contributions via Pull Requests on [Github](https://github.com/thephpleague/climate). + + +## Pull Requests + +- **[PSR-2 Coding Standard](https://github.com/php-fig/fig-standards/blob/master/accepted/PSR-2-coding-style-guide.md)** - The easiest way to apply the conventions is to install [PHP Code Sniffer](http://pear.php.net/package/PHP_CodeSniffer). + +- **Add tests!** - Your patch won't be accepted if it doesn't have tests. + +- **Document any change in behaviour** - Make sure the `README.md` and any other relevant documentation are kept up-to-date. + +- **Consider our release cycle** - We try to follow [SemVer v2.0.0](http://semver.org/). Randomly breaking public APIs is not an option. + +- **Create feature branches** - Don't ask us to pull from your master branch. + +- **One pull request per feature** - If you want to do more than one thing, send multiple pull requests. + +- **Send coherent history** - Make sure each individual commit in your pull request is meaningful. If you had to make multiple intermediate commits while developing, please [squash them](http://www.git-scm.com/book/en/v2/Git-Tools-Rewriting-History#Changing-Multiple-Commit-Messages) before submitting. + + +## Running Tests + +``` bash +$ composer test +``` + + +**Happy coding**! diff --git a/vendor/league/climate/Dockerfile b/vendor/league/climate/Dockerfile new file mode 100644 index 0000000..0de66e4 --- /dev/null +++ b/vendor/league/climate/Dockerfile @@ -0,0 +1,13 @@ +ARG PHP_VERSION=7.3 +FROM php:${PHP_VERSION}-cli + +ARG COVERAGE +RUN if [ "$COVERAGE" = "pcov" ]; then pecl install pcov && docker-php-ext-enable pcov; fi + +# Install composer to manage PHP dependencies +RUN apt-get update && apt-get install -y git zip +RUN curl https://getcomposer.org/download/1.9.0/composer.phar -o /usr/local/sbin/composer +RUN chmod +x /usr/local/sbin/composer +RUN composer self-update + +WORKDIR /app diff --git a/vendor/league/climate/LICENSE.md b/vendor/league/climate/LICENSE.md new file mode 100644 index 0000000..f35299c --- /dev/null +++ b/vendor/league/climate/LICENSE.md @@ -0,0 +1,21 @@ +The MIT License (MIT) + +Copyright (c) 2014 Joe Tannenbaum + +Permission is hereby granted, free of charge, to any person obtaining a copy +of this software and associated documentation files (the "Software"), to deal +in the Software without restriction, including without limitation the rights +to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +copies of the Software, and to permit persons to whom the Software is +furnished to do so, subject to the following conditions: + +The above copyright notice and this permission notice shall be included in all +copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE +SOFTWARE. diff --git a/vendor/league/climate/README.md b/vendor/league/climate/README.md new file mode 100644 index 0000000..3481c88 --- /dev/null +++ b/vendor/league/climate/README.md @@ -0,0 +1,44 @@ +

CLImate

+ +[![Latest Version](https://img.shields.io/github/tag/thephpleague/climate.svg?style=flat&label=release)](https://github.com/thephpleague/climate/tags) +[![Software License](https://img.shields.io/badge/license-MIT-brightgreen.svg?style=flat)](LICENSE.md) +[![Build Status](https://github.com/thephpleague/climate/workflows/.github/workflows/buildcheck.yml/badge.svg?branch=master)](https://github.com/thephpleague/climate/actions?query=branch%3Amaster+workflow%3Abuildcheck) +[![Coverage Status](https://img.shields.io/scrutinizer/coverage/g/thephpleague/climate.svg?style=flat)](https://scrutinizer-ci.com/g/thephpleague/climate/code-structure) +[![Quality Score](https://img.shields.io/scrutinizer/g/thephpleague/climate.svg?style=flat)](https://scrutinizer-ci.com/g/thephpleague/climate) +[![Total Downloads](https://img.shields.io/packagist/dt/league/climate.svg?style=flat)](https://packagist.org/packages/league/climate) + +Running PHP from the command line? CLImate is your new best bud. + +CLImate allows you to easily output colored text, special formats, and more. + + +## Installation + +The recommended method of installing this library is via [Composer](https://getcomposer.org/). + +Run the following command from your project root: + +```bash +$ composer require league/climate +``` + + +## Usage + +```php +require_once __DIR__ . "/vendor/autoload.php"; + +$climate = new \League\CLImate\CLImate; + +$climate->red('Whoa now this text is red.'); +$climate->blue('Blue? Wow!'); +``` + +_Read more at https://climate.thephpleague.com/_ + + +## Credits + +This library was created by [Joe Tannenbaum](https://joe.codes/). +It is currently maintained and developed by [Craig Duncan](https://twitter.com/duncan3dc). +Much love to [Damian Makki](https://dribbble.com/damianmakki) for the logo. diff --git a/vendor/league/climate/composer.json b/vendor/league/climate/composer.json new file mode 100644 index 0000000..cdd02dd --- /dev/null +++ b/vendor/league/climate/composer.json @@ -0,0 +1,48 @@ +{ + "name": "league/climate", + "description": "PHP's best friend for the terminal. CLImate allows you to easily output colored text, special formats, and more.", + "keywords": ["cli","php", "terminal", "command", "colors"], + "license": "MIT", + "authors": [ + { + "name": "Joe Tannenbaum", + "email": "hey@joe.codes", + "homepage": "http://joe.codes/", + "role": "Developer" + }, { + "name": "Craig Duncan", + "email": "git@duncanc.co.uk", + "homepage": "https://github.com/duncan3dc", + "role": "Developer" + } + ], + "require": { + "psr/log": "^1.0 || ^2.0 || ^3.0", + "php": "^7.3 || ^8.0", + "seld/cli-prompt": "^1.0" + }, + "require-dev": { + "phpunit/phpunit": "^9.5.10", + "mockery/mockery": "^1.4.2", + "mikey179/vfsstream": "^1.6.10" + }, + "suggest": { + "ext-mbstring": "If ext-mbstring is not available you MUST install symfony/polyfill-mbstring" + }, + "autoload": { + "psr-4": { + "League\\CLImate\\": "src/" + } + }, + "autoload-dev": { + "psr-4": { + "League\\CLImate\\Tests\\": "tests/" + } + }, + "scripts": { + "test": [ + "vendor/bin/phpunit", + "@composer validate --strict" + ] + } +} diff --git a/vendor/league/climate/src/ASCII/404.txt b/vendor/league/climate/src/ASCII/404.txt new file mode 100644 index 0000000..25cd067 --- /dev/null +++ b/vendor/league/climate/src/ASCII/404.txt @@ -0,0 +1,6 @@ + _ _ ___ _ _ + | || | / _ \| || | + | || |_| | | | || |_ + |__ _| | | |__ _| + | | | |_| | | | + |_| \___/ |_| \ No newline at end of file diff --git a/vendor/league/climate/src/ASCII/bender.txt b/vendor/league/climate/src/ASCII/bender.txt new file mode 100644 index 0000000..760c3e3 --- /dev/null +++ b/vendor/league/climate/src/ASCII/bender.txt @@ -0,0 +1,17 @@ + ( ) + H + H + _H_ + .-'-.-'-. + / \ +| | +| .-------'._ +| / / '.' '. \ +| \ \ @ @ / / +| '---------' +| _______| +| .'-+-+-+| +| '.-+-+-+| +| """""" | +'-.__ __.-' + """ \ No newline at end of file diff --git a/vendor/league/climate/src/ASCII/failed.txt b/vendor/league/climate/src/ASCII/failed.txt new file mode 100644 index 0000000..19187b6 --- /dev/null +++ b/vendor/league/climate/src/ASCII/failed.txt @@ -0,0 +1,6 @@ + ______ _____ _ ______ _____ + | ____/\ |_ _| | | ____| __ \ + | |__ / \ | | | | | |__ | | | | + | __/ /\ \ | | | | | __| | | | | + | | / ____ \ _| |_| |____| |____| |__| | + |_|/_/ \_\_____|______|______|_____/ \ No newline at end of file diff --git a/vendor/league/climate/src/ASCII/fancy-bender.txt b/vendor/league/climate/src/ASCII/fancy-bender.txt new file mode 100644 index 0000000..b8e7f8a --- /dev/null +++ b/vendor/league/climate/src/ASCII/fancy-bender.txt @@ -0,0 +1,17 @@ + ( ) + H + H + _H_ + .-'-.-'-. + / \ +| | +| .-------'._ +| // '.' '. \ +| \\ @ @ / / +| '---------' +| _______| +| .'-+-+-+| +| '.-+-+-+| +| """""" | +'-.__ __.-' + """ \ No newline at end of file diff --git a/vendor/league/climate/src/ASCII/passed.txt b/vendor/league/climate/src/ASCII/passed.txt new file mode 100644 index 0000000..0cbc03b --- /dev/null +++ b/vendor/league/climate/src/ASCII/passed.txt @@ -0,0 +1,6 @@ + _____ _____ _____ ______ _____ + | __ \ /\ / ____/ ____| ____| __ \ + | |__) / \ | (___| (___ | |__ | | | | + | ___/ /\ \ \___ \\___ \| __| | | | | + | | / ____ \ ____) |___) | |____| |__| | + |_| /_/ \_\_____/_____/|______|_____/ \ No newline at end of file diff --git a/vendor/league/climate/src/ASCII/php b/vendor/league/climate/src/ASCII/php new file mode 100644 index 0000000..3129ab7 --- /dev/null +++ b/vendor/league/climate/src/ASCII/php @@ -0,0 +1,6 @@ + __ + ____ / /_ ____ + / __ \/ __ \/ __ \ + / /_/ / / / / /_/ / + / .___/_/ /_/ .___/ +/_/ /_/ \ No newline at end of file diff --git a/vendor/league/climate/src/ASCII/the-league-big.txt b/vendor/league/climate/src/ASCII/the-league-big.txt new file mode 100644 index 0000000..6515d12 --- /dev/null +++ b/vendor/league/climate/src/ASCII/the-league-big.txt @@ -0,0 +1,102 @@ +hhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhh +hhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhh +hhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhh +hhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhh +hhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhh +hhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhh +hhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhyyyyyyyyyyyyhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhh +hhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhyssoo+/:--...`````````````..--:/++ossyhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhh +hhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhyso/:-.``` ```.-:/osyyhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhh +hhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhyso/-.`` ``.-/+syhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhh +hhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhso/-`` ``-:osyhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhh +hhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhs+:.` `.:+syhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhh +hhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhyo:.` `.:oyhhyhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhh +hhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhy+-` ```.` `:::` `....` `-+yhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhh +hhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhy+-` `+++///. .o+-/o- -o+://++` .:` `-+shhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhh +hhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhyo:` :: `oo.``` .o+` /s- `+o` ``. +s` ./. `:oyhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhh +hhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhy/. /s. :s+/++. -s/:::/s/ .s/ `/+/` -s: +s` -/-`` ./shhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhh +hhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhys:` ``-//` `o+` .s/````` -s/----o+ .s/` .+o``o+` -s: :s/:++/- `-oyhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhh +hhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhyo- `:++:-` -s: ``. oo//++/`.+. `/: -++++++- -s/` `o+` -so.```-. .oyhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhh +hhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhyo. `-` :s:`.:+` /s//++/`.-.``` ```` :+++/+s. -s/:/+/` .oyhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhh +hhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhho. .oo- :oo+:. ` `-.`` ``..` .so-` `` `/+++-` .oyhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhh +hhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhs- `:` `/s:` -s/`./++. ```..........``` .-/++/ -o+.`-+o/ .shhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhh +hhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhy: ` .oo-`-/o/+o. -o+/-` ``.-/+ossyyyhhyyyyyyhhyyysso+/:.`` `. `+s- `os` -yhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhh +hhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhh+` .o+` `:oo+-` `:s: ` `.:+syhhyyso+/::--........--::/+osyyhhys+/.` -y: .oo- -+- `/hhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhh +hhhhhhhhhhhhhhhhhhhhhhhhhhhhhhy- .os/` .+o- ` .:+shhys+/-.` `.-:+syhhso:. `/o+:-/s/` :oo:oo- -shhhhhhhhhhhhhhhhhhhhhhhhhhhhhh +hhhhhhhhhhhhhhhhhhhhhhhhhhhhho` `+o--oo-` :o- `-+shhs+:.` ``.` ...` `... `` `.:+shhs+-` -//:.`:ooo- .o/ `+hhhhhhhhhhhhhhhhhhhhhhhhhhhhh +hhhhhhhhhhhhhhhhhhhhhhhhhhhh: ` -oo-` `:oyhyo:. ``` `.--` `--.` .--.` .--.` .--. ` `:oyhho:` -o+-`-oo` -hhhhhhhhhhhhhhhhhhhhhhhhhhhh +hhhhhhhhhhhhhhhhhhhhhhhhhhy- -o+` -oyhy+-` `.` `.--` `.--` `--.` `--.` .--.` .--. .-.` `-/yhyo-` `. ` .shhhhhhhhhhhhhhhhhhhhhhhhhh +hhhhhhhhhhhhhhhhhhhhhhhhhs` ` `:yhyo-` `.` `.--` `.--` `.--` `--.` `--.` .--.` .--.` .--. `.+yhy/. `ohhhhhhhhhhhhhhhhhhhhhhhhh +hhhhhhhhhhhhhhhhhhhhhhhh+` .+yhs/` `..``.--. `.--` `.--` `.--` `---` `--.` .--.` .--.` .--. ` `:shh+. `+hhhhhhhhhhhhhhhhhhhhhhhh +hhhhhhhhhhhhhhhhhhhhhhho .+hho- ``` .--.``.--. `.--` `.--` `.--` `.--` `--.` `--.` .--.` .--.` `.` -ohh+. +hhhhhhhhhhhhhhhhhhhhhhh +hhhhhhhhhhhhhhhhhhhhhh+` `/yho- ` `--.``.--.``.--.``.--` `.--` `.--` `.--` `--.` `--.` .--.` .--.``..` -ohh/` /hhhhhhhhhhhhhhhhhhhhhh +hhhhhhhhhhhhhhhhhhhhho -yhs: .-.` `--.` .--.``.--.``.--` `... `..````..` `.-.` `--.` .--.` .--.``..` -shy: +hhhhhhhhhhhhhhhhhhhhh +hhhhhhhhhhhhhhhhhhhho` `ohy/` `.` `--.` `--.` .--.``.-.` ``...-:://++++++++++//:-..`` `--.` `--.` .--.``.-` `/yho` `ohhhhhhhhhhhhhhhhhhhh +hhhhhhhhhhhhhhhhhhhy` -shs. ` `--.` `--.` `--.``.-. `.-:/++ooooooooooooooooooooooooo+:-```--.` `-.` `.` ..` .shy: `yhhhhhhhhhhhhhhhhhhh +hhhhhhhhhhhhhhhhhhy- /hh+` `--` `.-.` `--.` `--. `-/+oooooooooooooooooooooooooooooooooso+-``.``````.....--` `.. `/hh/` -yhhhhhhhhhhhhhhhhhh +hhhhhhhhhhhhhhhhhh/ +hy: `` `.--` `.-.` `--.` ``-osoooooooooooooooooooooooooooooooooo+/:--..--::/:::---... ..```` :yho` :hhhhhhhhhhhhhhhhhh +hhhhhhhhhhhhhhhhhs `+hy- .--. `.--` `.-.` `-- `+soooooooooooooooooooooooooooooooooo/--:--:/+/-..` .` `...` `--.` .yho` shhhhhhhhhhhhhhhhh +hhhhhhhhhhhhhhhhh- ohy- ..``.--` `..` ``...` ``+soooooooooooooooooooooooooooooooo+:-::-:+o:.`.:+o/``.-` `--.` `--.` .yho` -yhhhhhhhhhhhhhhhh +hhhhhhhhhhhhhhhh+ -/ /hh- .--. ```-/++++++/:-. /soooooooooooooooooooooooooooooooo--/:-/oo-``-+oooooo:``--` `--.` `--.` .yh+` -/ +hhhhhhhhhhhhhhhh +hhhhhhhhhhhhhhhh. -ss: :hh: ..``.` -osooooooooos+ -sooooooooooooooooooooooooooooooo/./+.:os:``-osooooooos+-`.--` `.--` `--. :hh/ -ss/` `hhhhhhhhhhhhhhhh +hhhhhhhhhhhhhhho ..---/ooos/.```` `hh+ .--. -sooooooooooo+`.oooooooooooooooooooooooooooooooo--o:.+so- .+sooooooooooos:``.--` `.--` `-. /hh. ..---/ooos/.```` ohhhhhhhhhhhhhhh +hhhhhhhhhhhhhhh: -osssoooooosooo:` `ohy` `.` .` `ooooooooooooo` osoooooooooooooooooooooooooooos+.:s--oso` :ooooooooooooooos+` `.--` `.--` `` sho` -osssoooooosooo:` -hhhhhhhhhhhhhhh +hhhhhhhhhhhhhhy` -oooooooooo:. -hh: `--.` .sooooooooooo- +sooooooooooooooooooooooooooos/`+s-.ss+` :soooooooooooooooos+` `.--` `.--` -hh: -oooooooooo:. `shhhhhhhhhhhhhh +hhhhhhhhhhhhhh+ /sooooooo. shs` `` `-- .sooooooooos- :`.oooooooooooooooooooooooooooo:`:s-.oso` :soooooooooooooooooos+ `. `.--` `.--` `ohs /sooooooo. /hhhhhhhhhhhhhh +hhhhhhhhhhhhhd- .sooo/+oos- .hd: .--` ` `+oooooooos: -+/``+soooooooooooooooooooooooo.`:..`:/+- -soooooooooooooooooooos- --` `.--` `.-` -dh- `sooo/+oos- -dhhhhhhhhhhhhh +hhhhhhhhhhhhhh. -/-` .-+/ /dh` `---` .soooooos/ -////-`-ooooooooooooooooooooooo.`.::::---``oooooooooooooooooooooos/ `.--` `.--` `` yh+ -/-` .-+/ `hhhhhhhhhhhhhh +hhhhhhhhhhhhhy `ohs .-` `.-- ` .oooooos- ///////.`:ooooooooooooooooooso`-+:``..---`/sooooooooooooooooooooos: ` `.--. `.--` ohs` yhhhhhhhhhhhhh +hhhhhhhhhhhhhs .yh+ `.--` `-. `+sooos/ -///////:.`-+sooooooooooooos+`-//:`+so+` .soooooooooooooooooooooos` --. .--. `.-- /hy. ohhhhhhhhhhhhh +hhhhhhhhhhhhho .hh: . `.--` `. -osoos- ://///////-``/osooooooooos+`://:`+sos: `+oooooooooooooooooooooos/ .--. .--. `.` -hh- ohhhhhhhhhhhhh +hhhhhhhhhhhhho .hh- `--` `.--` -osos: -///////////-``:+ssoooos/`:///`/soso :sooooooooooooooooooooooo``-.` .--. .--. -hh- +hhhhhhhhhhhhh +hhhhhhhhhhhhho .hh- .--. `.--` .+ss+.`:////////////-``-/oss/`:///`/soos- osooooooooooooooooooooos- `--.` `--.` .--` -hh- +hhhhhhhhhhhhh +hhhhhhhhhhhhho .hh: . .--. `.--` `/os/``----://///////:-.`.`////`:soos/` :sooooooooooooooooooooos+ .-` `--.` `--.` .` -hh- ohhhhhhhhhhhhh +hhhhhhhhhhhhhs .yh+ --. .--. `.--` ` ..-:::..:`.//////////..////`:sooos```ooooooooooooooosssooooso. `.--` `--.` `--.` /hh. ohhhhhhhhhhhhh +hhhhhhhhhhhhhy `sho .--.` .--. .--` `-/+oooooos:`-`+..//////:`-////`-sooos:``.++oosssssoo+/:-..``....` `` ``.` `--.` `-- ohs` shhhhhhhhhhhhh +hhhhhhhhhhhhhh` /dh` `` .--.` .--. `.:+oooooooss/.-.`.+s/.-::/-`:////.-oooooo`-`--..``......---:::--.....`` `--.` ` yh+ `hhhhhhhhhhhhhh +hhhhhhhhhhhhhd- .hd- `-.` `--.` ```:+oooooooso+:.-..://.-oo. ` ./////..ooooos--.`..```..........-::/+++oooooo++/:.` `--. -hd- .hhhhhhhhhhhhhh +hhhhhhhhhhhhhh+ sho` `--.` `-- -ooooosso+/:-.-.-://///-.+s: -/////-.ooooos+`: ``....-:::/++oooooooooooooooooooooo+/.``` `. ohy /hhhhhhhhhhhhhh +hhhhhhhhhhhhhhy` -hh- `--.` -.:+///::--.-..-://///////:`/s/`:///..ooooooo.:.:ooooooooooooooooooooooooooooooooooooos- --` -hh: `shhhhhhhhhhhhhh +hhhhhhhhhhhhhhh- `` `ohs `` `--.``....```-`.-:///////////////`:s/`//.-oooooos-./`osooooooooooooooooooooooooooooooooooos/` `.` shs` ` -hhhhhhhhhhhhhhh +hhhhhhhhhhhhhhho `.-:/+++o` .hh/ .-` `-.`.`::::`+/`/////////////////:`/s-..:sooooos+`+`.++oossooooooooooooooooooooooooooooos+- .-. /hh. `++` -::- +hhhhhhhhhhhhhhh +hhhhhhhhhhhhhhhh. `++:-o/``o: /hh: .-.` ``..-///-.o-./////////////////:`o+.+oooooooo.// `.....-:/++ooosoooooooooooooooooooo/.`` `.. -yh/ :o` -s:-o/ `hhhhhhhhhhhhhhhh +hhhhhhhhhhhhhhhh+ -s. -o` .+` `+hy. `.--` -`:///..s:./////////////////`:soooooooos.-o`` `.--` `.....-::/++oooooooooo++:.`` .--. .yho` -o//o- .s: /hhhhhhhhhhhhhhhh +hhhhhhhhhhhhhhhhy- +/ ` `:/` `ohy. `.--``-`:///.-s:.:///////////////`:sooooooos:.s- --` `.--` `.--` `..````........` `--.``.. .shs` `-``.-. `+/ .yhhhhhhhhhhhhhhhh +hhhhhhhhhhhhhhhhhs ``.```++-` `ohy. `.-.`:`////.-s+../////////////:`+ooooooos:`o/ `.--` `.--` `.--` `.-.` `.-.` `--.` .--. .yho` `/+` -` `` ohhhhhhhhhhhhhhhhh +hhhhhhhhhhhhhhhhhh: `+///+s:``. `ohy: ````...:.:///.-+s+--://///////-.+soooooos/.++`.-.``.--```.--` `.--` `.-.` `--.` `--.` .` -yho` /s. :o` -o` :hhhhhhhhhhhhhhhhhh +hhhhhhhhhhhhhhhhhhy- .s/:/++. `/hh/` .. ``.:.-///-./oo+:---::::--:ooooooooo:.o+```.--.``.--```.--` `.--` `.--` `--.` `--` :hh+` -/++o/..o: .yhhhhhhhhhhhhhhhhhh +hhhhhhhhhhhhhhhhhhhy` `/o/` ` //` :yho. `.. `--.:///-./oso++////+oooooooos+--o/`.-.``.--.``.--` `.--` `.--` `.--` `--.` ` `ohy: -/` `..:/+: `shhhhhhhhhhhhhhhhhhh +hhhhhhhhhhhhhhhhhhhho` .. `:s+` .shy/ `.. .----:/:-.:+oooooooooooooo+:-+o-```.--.``.--.``.--. `.--` `.--` `.--` `.` :yhs. `/+- .++:. ` `+hhhhhhhhhhhhhhhhhhhh +hhhhhhhhhhhhhhhhhhhhh+ .-/+/-/o` `:yho- `.. `-:::---.:+oooooooooo+:-:++:``--.` .--.``.--.``.--. `.--` `.--` `.-. -ohy/` /s. ..`+s` +hhhhhhhhhhhhhhhhhhhhh +hhhhhhhhhhhhhhhhhhhhhh/ `++/.` -:- .+hho. `.. `.:/++ooooo++///::-://:.`..` `--.` .--.``.--.``.--. `.--` `.--` ` .+hh+. `/++-.`.o/ /hhhhhhhhhhhhhhhhhhhhhh +hhhhhhhhhhhhhhhhhhhhhhh+ ` ./+/+/` .+hho- `.` `....``````..----..`..` `--.` `--.` `--.` .--.``.--. `.--. `.` .+hho- `---.``.:+++- /hhhhhhhhhhhhhhhhhhhhhhh +hhhhhhhhhhhhhhhhhhhhhhhh+` `:+o+. /s. -+hho:` `` `.--. .-.` .--` `--.` `--.` `--.` `--.` .--.``.--.``..` `-ohho- .s/::/++:` /hhhhhhhhhhhhhhhhhhhhhhhh +hhhhhhhhhhhhhhhhhhhhhhhhho` :/.`++.-+o` ./yhy+. .--. `.--. `.--` `.--` `--.` `--.` `--.` `--.` .-. ./shy+. +o .o//o- +hhhhhhhhhhhhhhhhhhhhhhhhh +hhhhhhhhhhhhhhhhhhhhhhhhhhs. .o+::. ``.-. `:shhs/. ..-. `.--. `.--` `.--` `--.` `--.` `--.` `-. .:shhs:` /:` `++/o- ` .ohhhhhhhhhhhhhhhhhhhhhhhhhh +hhhhhhhhhhhhhhhhhhhhhhhhhhhy- :: .+++/:o/ `/shhs+-` ` .--. `.--` `.--` `---` `--.` `.` `-+shhs/` `/o- ./o+` .yhhhhhhhhhhhhhhhhhhhhhhhhhhh +hhhhhhhhhhhhhhhhhhhhhhhhhhhhh+ -+oo:` .s: .:oyhhs/-` `` `...` `.-.` `..` `-/oyhyo:. :o- .so:-` `` /hhhhhhhhhhhhhhhhhhhhhhhhhhhhh +hhhhhhhhhhhhhhhhhhhhhhhhhhhhhhs. .- `/o:o+` .//:` `.:oyhhyo/:.` `.:/oyhhyo/.` `-/- .+o++.`-/+. .shhhhhhhhhhhhhhhhhhhhhhhhhhhhhh +hhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhh/` -o+- `+o-.:o/. `.-/osyhhyso+/:--..````````..--:/+osyhhyso/:.` `/o:.` .+o-` `/hhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhh +hhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhy- .. -o/` .s: .` `.-/+ossyyhhyyyyyyyyyyhyyysso+/-.` .s: ` ./. -shhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhh +hhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhho. +o. `/o:``+++/-` ``..............`` -/+/-` .o+. `++ .ohhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhh +hhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhy+` `:++/++. .o+``.+o` `` `` o+`./o/``:o/++:` `+yhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhh +hhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhy+. `... -o++:.-o/``/o//:. .-///++` oo .:+oo` `..` `+yhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhh +hhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhy+. `o- `+o:- /s.`.:s- .:-.` `. :s:` `o/`.oo/-.`/: .+yhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhh +hhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhyo-` o/ :s- -s- `+o:.`+/` .` ``` `..... /- :s. +o.-/o: `o+ .oyhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhh +hhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhs:` `` -s/.` -s- .s: .oo+ .s. `+++o. `o+:::o/ :o/.`o/ `+s:.` `` `:syhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhh +hhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhy+-` `.://++: `++` /o`+/`:o .o/` :s- o+ `/o` `:+oo` `o/ `-+yhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhh +hhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhs+.` ` -/o/` s/ `o/o/ :s:---s+ /s//+s- +o `` `./shhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhh +hhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhys/-` ``.` `+. `+o. /s----s/ :s. `/+` .: `-/syhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhh +hhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhs+-. `. .- :- `:` .` .-+shhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhh +hhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhys+-.` `-/oyhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhh +hhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhys+:.` `.-+oyhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhh +hhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhso+:.`` ``.:/oshhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhh +hhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhyso+:-.``` ```.-:/osyhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhh +hhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhyyso++::-..``````````````````..-::/+osyyhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhh +hhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhyyyyyyyssyyyyyyyhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhh +hhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhh +hhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhh +hhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhh +hhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhh +hhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhh +hhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhh diff --git a/vendor/league/climate/src/ASCII/the-league-bigger.txt b/vendor/league/climate/src/ASCII/the-league-bigger.txt new file mode 100644 index 0000000..4b13643 --- /dev/null +++ b/vendor/league/climate/src/ASCII/the-league-bigger.txt @@ -0,0 +1,153 @@ +hhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhh +hhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhh +hhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhh +hhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhh +hhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhh +hhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhh +hhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhh +hhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhh +hhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhh +hhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhh +hhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhyyyssooo+++////////////+++ooossyyyhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhh +hhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhyyso+//:-..```` ````..-://+osyyhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhh +hhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhyyo+/:-.`` ``.-:/+osyhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhh +hhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhyso/:.`` ``.-/+syhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhh +hhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhyo+:.` `.:/oyhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhh +hhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhyhhhhyo+-.` `.-+oyhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhh +hhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhyhhhhyo:.` `.:oshhhhyhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhh +hhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhyo:. .:oyhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhh +hhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhyhhhys/.` .:oyhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhh +hhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhy+-` `-+yhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhh +hhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhy+- ``.. -++++- .---..`` ./yhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhh +hhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhy/. -//oosssss. `+yo:/sy: .ossoossss+- .. ./yhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhh +hhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhh+. /ys:...`` `oyo` -sy+` oy+` ``.:o: `sy/ ./yhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhh +hhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhho- `+s/ -sy- `oyo` `oy+ -sy- +yo` +s: -ohhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhh +hhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhyhdy:` :ys. oso/+osys` `sy:`.....:yo` :ys` `o+//- -yy- :ys. .:. :ydhyhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhh +hhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhyhds- `. oyo :ys/:--.` `ssssssssssso` +y+ `-:oy/ `oy+ `sy/ -ysys+:. .ohhyhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhh +hhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhyhh/` .:oyy: .sy: .sy- `oy/`` -ys` `oyo` -sy- :ys. +yo` .sy/`-/osss- `/hdhyhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhh +hhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhyhdy: .-+syo/-` /ys. +y+-:/+ooy: `oy/ -ss` `+ysso+++ss+ `sy/ -sy: -sy/ `-:` :ydhyhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhh +hhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhyhdy: /ys/` ` `oy+ `.-:+s- :yoo+/:--.` `---:/+:` /ys/-.` `oy+ .ssoss/-. -sdhyhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhh +hhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhyhdy- .:` :ss: `-+sy: -ysosso+/:. -/oossssss. .sy/`.:+sy: -sdhyhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhh +hhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhyhdy: `oys- -ssoss+:` :/-.` `.--.` .sy+` ` `:++o+- -sdhyhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhh +hhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhyhh:` :sy+` .ss+` `.+: ./osso:.` -syo//oso/. :ydhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhh +hhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhyhh/` .+: .oss- .sy+`./oss+:` ``......----......``` ``-/osso` `+ys:` `-+ss/ `/hhyhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhh +hhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhyhdo. -sy+. ./os+os+` .ossso/-` `..://+ossyyyhhhhhhhhhhhhhhhhyyysso++/:-.` `-- :sy+. /ys. `+dhyhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhh +hhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhy- `/:` `+ys:-oss/.``+ys:` `/:`` `.-/+osyhhhhhhhhhyyyysssoooooooosssyyyyhhhhhhhhhyso+/-.` /ys: :sy+` `` -sdhyhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhh +hhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhyhh+` `/ss/` -osso-` -ss- `.:+syhhhhhhhyso+/:-..`````` ``````.-::++oyyhhhhhhyso:.` /ys. .oys- `:os/` `/hhyhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhh +hhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhdy. `/sy+` `/ss/` `` .:+syhhhhhys+/-.`` ``.-/+oyhhhhhys+:.` `+ss+-```:ss/` `:oy+/ss/. .sdhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhh +hhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhyhd+` `/ss+os+. -oyo- .-+shhhhhyo+:.` `.-/oyhhhhhs+:. `:osoooso- `:oso-` `/ss/. /hhyhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhh +hhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhyhy- `oy/` ./ss+. `/s/` `./shhhhhs+:.` ` `...` `----` .---.` ``` `.:+shhhhhs+-` .::-.` `:osoos/` `/s/ .ydyhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhh +hhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhdo` `` ./ss+. ` `-+yhhhhyo:. ` .---. .----` .----` `.----` `.---.` .-+yhhhhyo-` `/sso-``/ss/` ` `+dhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhh +hhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhyhd/ ./ss+. `.+yhhhhs/.` `---.` `----. `----. .----` `.----` `.---.` `..`` `./shhhhy+-` .oo- .+o. :hhyhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhh +hhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhyhh- `/so. `/yhhhhs/. .--.` `.---.` `----. `----. .----` .----` `.---.` `.--..` .:shhhhy+. -hhyhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhh +hhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhyhy. ` `-ohhhhy/. `.` `.---.` `.---.` `----. `----. `----` .----` `.---.` `.---.` .:shhhhs-` `sdyhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhh +hhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhyds` `:yhhhho- .----` `.---.` `.---.` `----. `----. `----` .----` `.---.` `.---.` .+yhhhy/` `odhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhh +hhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhdo` `/yhhhy/` .--` .----` `.---.` `.---.` `----. `----. `----` .----` .----` `.---.` `` `:shhhh/` +dhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhh +hhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhdo `/hhhhs- .----` .----` .----` `.---.` `----. `----. `----` .----` .----` `.---.` `..` -shhhh/` +dhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhh +hhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhdo :hhhhs- `---. `----` .----` .----` `.---.` `----. `----. `----` .----` .----` `.---.` `--` .ohhhh/` +dhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhh +hhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhydo -ydhds- ` `----. `----` .----` .----` `.---.` `.---.` `----. `----. `----` .----` .----` `--. .sdhhh: +dhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhh +hhhhhhhhhhhhhhhhhhhhhhhhhhhhhhydo `odhhy- .--. `----. `----` .----` .----` .---. `.... `....` `--:-. `----` .----` .---.` `-:. -ydhds. +dhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhh +hhhhhhhhhhhhhhhhhhhhhhhhhhhhhyds /dhhd/ `.---.` `----. `----. `----` .---. ` ```.....--....``` ```.-. `----` .----` .----` `.:.` :hhhd+ odyhhhhhhhhhhhhhhhhhhhhhhhhhhhhh +hhhhhhhhhhhhhhhhhhhhhhhhhhhhyhy` `ydyds` .:-` `.---.` `----. `----. `--.` `.--//+ooosssssssssssssssssoo++/-.` `----` .----` .----` .:. `odhdy. sdyhhhhhhhhhhhhhhhhhhhhhhhhhhhh +hhhhhhhhhhhhhhhhhhhhhhhhhhhhhh. :dhhd: .----` .---.` `----. `--:-` `.-:/+oossssoooooooooooooooooooooooooooossso+/-` `----` `--:-` .--.` .:. -hhhd/ `hhhhhhhhhhhhhhhhhhhhhhhhhhhhhh +hhhhhhhhhhhhhhhhhhhhhhhhhhhhd: +dyds` `-` .----` .----` `.---.` `` .:+ossssoooooooooooooooooooooooooooooooooooooooooosso+-` `.---` ``` .:` `odydo` -dhhhhhhhhhhhhhhhhhhhhhhhhhhhh +hhhhhhhhhhhhhhhhhhhhhhhhhhyd+ `ydhd/ `----` .----` .----` `.-:-` ./ossooooooooooooooooooooooooooooooooooooooooooooooooooosss+. ``.`..``` ``..---::/+- .-` :dhhh. /dyhhhhhhhhhhhhhhhhhhhhhhhhhh +hhhhhhhhhhhhhhhhhhhhhhhhhhhy` .hhhh- ` `----` .----` .----` `. .+ssooooooooooooooooooooooooooooooooooooooooooooooooooosso/-`..--..`.-:++ooo++//:-----` .-` `.` -hhhh- sdyhhhhhhhhhhhhhhhhhhhhhhhhh +hhhhhhhhhhhhhhhhhhhhhhhhhhh. -hhhh. .:-. `----` .----` .----` `/ssooooooooooooooooooooooooooooooooooooooooooooooooooss+-`.-/:-`.-/ooo+:-.` ``` .:--` `` `ydhd: `hhhhhhhhhhhhhhhhhhhhhhhhhhh +hhhhhhhhhhhhhhhhhhhhhhhhyd+ -dhhy. `----. `----. .----` .:-` `osooooooooooooooooooooooooooooooooooooooooooooooooosso:`.:+:.`-/oso/-` ` .-. `-:--. `----` `sdhd: :dhhhhhhhhhhhhhhhhhhhhhhhhh +hhhhhhhhhhhhhhhhhhhhhhhhhy` -hhdy` `.` `----. `...` ..---` `` `osooooooooooooooooooooooooooooooooooooooooooooooooss/.`-++-`./oyo:. `./+so- `--. `----. .----` `sdhd: sdhhhhhhhhhhhhhhhhhhhhhhhh +hhhhhhhhhhhhhhhhhhhhhhhhd: .` .hhhy` `-:-.` `-.` `.........`` `` `+soooooooooooooooooooooooooooooooooooooooooooooooss/.`:s/.`:oss+-` ./ossooos+. .--.` `----. `----` `sdhd- .` -dhhhhhhhhhhhhhhhhhhhhhhhh +hhhhhhhhhhhhhhhhhhhhhhhds .y+ `yhhh. `.---. `:+osssssssssoo+/:-` /yooooooooooooooooooooooooooooooooooooooooooooooos+. :s+``:oss+. -+ssoooooooss/` `-:-.` `----. `----` `yhhh. .so` odhhhhhhhhhhhhhhhhhhhhhhh +hhhhhhhhhhhhhhhhhhhhhhhd: -sss/ sdhh- `-` `.-` `/ssoooooooooooooooy+ -sooooooooooooooooooooooooooooooooooooooooooooooss: .ss- -osso- -osooooooooooooss: `---.` `----. `----` .hhhy` -sss/ -hhhhhhhhhhhhhhhhhhhhhhhh +hhhhhhhhhhhhhhhhhhhhhhhy :sooos/ +dhd/ -:--` `+sooooooooooooooooso` .ssooooooooooooooooooooooooooooooooooooooooooooos+``/y/``+sos/` .+ssooooooooooooooos+` `.---.` `----. `-:-` -dhdo :ssoos/ sdhhhhhhhhhhhhhhhhhhhhhh +hhhhhhhhhhhhhhhhhhhhhhd/ .--::///+sooooos/-..``` -dhdo .--:. /sooooooooooooooooss. `osooooooooooooooooooooooooooooooooooooooooooooss: .oy- -ssss: :ssooooooooooooooooooss- `.---.` `----. `-- +dhd: .--::///+sooooos/-..``` -dhhhhhhhhhhhhhhhhhhhhhh +hhhhhhhhhhhhhhhhhhhhhhh` `/ssssssoooooooossssoooo- `sdhy` .. .-` -sooooooooooooooooss- +sooooooooooooooooooooooooooooooooooooooooooooso. :ss. :soss. `+soooooooooooooooooooooss: `.---.` `----.` .. `sdhy` `/ssssssoooooooossssoooo- `yhhhhhhhhhhhhhhhhhhhhhh +hhhhhhhhhhhhhhhhhhhhhd+ .+ssooooooooooooooso:` /dhd: `:--` +soooooooooooooooos- `ssooooooooooooooooooooooooooooooooooooooooooos+``+ys. /soss. `osoooooooooooooooooooooooos/ `.---.` `.---.` -dhd+ ./ssooooooooooooooso/` /dhhhhhhhhhhhhhhhhhhhhh +hhhhhhhhhhhhhhhhhhhhhd: .+soooooooooooso-` `yhds .----` osooooooooooooooos/ /yoooooooooooooooooooooooooooooooooooooooooos/ `oss. /soss. `osoooooooooooooooooooooooooos/ `.---.` `.---. odhh. .+soooooooooooso:` -dhhhhhhhhhhhhhhhhhhhhh +hhhhhhhhhhhhhhhhhhhhhy` -soooooooooos/ /dhd: ` `--:` osoooooooooooooos/ -. `+soooooooooooooooooooooooooooooooooooooooss: .sss. :soss- `osooooooooooooooooooooooooooooy: .` `.---.` `.---.` .hhd+ -yoooooooooos/ sdhhhhhhhhhhhhhhhhhhhh +hhhhhhhhhhhhhhhhhhhhdo osoooossoooos+ `yhds `--. `-. /yooooooooooooos+ .++. `+soooooooooooooooooooooooooooooooooooooss. ``./- :yssy: `osoooooooooooooooooooooooooooooos. --` `.---.` `.---` odhh. +soooossoooos+ +dhhhhhhhhhhhhhhhhhhhh +hhhhhhhhhhhhhhhhhhhhd: -yssso+::+ssoso` -dhd/ `----. ` `ssoooooooooooso` `///+. :ssooooooooooooooooooooooooooooooooooso` -/:-.``..:+: /yooooooooooooooooooooooooooooooos+ .:--` `.---.` `.:. -dhd/ .sssso+::+ssoss` -dhhhhhhhhhhhhhhhhhhhh +hhhhhhhhhhhhhhhhhhhhd- +o/-.` .-+oy- odhh. `----. -sooooooooooss. `/+///+:` .+sooooooooooooooooooooooooooooooooso` `::::::::-...` -sooooooooooooooooooooooooooooooooso` .----` `.---.` `.` `yhds +o/-.` `-+oy- .hhhhhhhhhhhhhhhhhhhhh +hhhhhhhhhhhhhhhhhhhhh` ` `-. `yhds `-` `----. ` :sooooooooos/ :+///////. .osooooooooooooooooooooooooooooos+``:-``.-::::::/: `osooooooooooooooooooooooooooooooooso` .----` .----` +dhh` ` `-. yhhhhhhhhhhhhhhhhhhhh +hhhhhhhhhhhhhhhhhhhhs .hhd/ .:-.` `----` ` -ssoooooooy: :+///////+/. -ossooooooooooooooooooooooooos/ `/+/+- ````...-` /yooooooooooooooooooooooooooooooooos+ .. .----` .----` :dhd: odhhhhhhhhhhhhhhhhhhh +hhhhhhhhhhhhhhhhhhhdo /dhd: `.---.` `-:- .osoooooos+ -+/////////+/. ./ssoooooooooooooooooooooos/ `///+: .sso++: .soooooooooooooooooooooooooooooooooos. -:-` .----` .---. -dhd+ +dhhhhhhhhhhhhhhhhhhh +hhhhhhhhhhhhhhhhhhhd+ +dhh. `.---.` `-- :ssooooos- :+//////////+/-` `-ossooooooooooooooooooy: .+//+: `osooos. +sooooooooooooooooooooooooooooooooos/ `----. `----` .-:` `yhdo /dhhhhhhhhhhhhhhhhhhh +hhhhhhhhhhhhhhhhhhhd/ odhy` `-` `.---.` `. `+ssoooss. :+////////////+:. .:ossoooooooooooooos- .+//+/ `osoooy/ :yoooooooooooooooooooooooooooooooooos. `----. `----` .` sdds /dhhhhhhhhhhhhhhhhhhh +hhhhhhhhhhhhhhhhhhhd/ odhy `:--` .----` .+ssooss- -+/////////////+/:. `:ossoooooooooss- .+//+/ +soooso` `osoooooooooooooooooooooooooooooooooy/ .:. `----. `----` sdds :dhhhhhhhhhhhhhhhhhhh +hhhhhhhhhhhhhhhhhhhd/ odhy .----` .----` `/ssoos+` `:+//////////////+/:. `-/ossooooss. -+////` +sooooy: :yoooooooooooooooooooooooooooooooooso` ----. `----. `----` sdds :dhhhhhhhhhhhhhhhhhhh +hhhhhhhhhhhhhhhhhhhd/ odhy .----` .----` `:ssoss: `/+///////////////+//-` `-+osss. -+///+` /yoooos+ `ssoooooooooooooooooooooooooooooooooy- `----. `----. `--:` sdds :dhhhhhhhhhhhhhhhhhhh +hhhhhhhhhhhhhhhhhhhd/ odhy` `. .----` .----` -+ssss:` `:/::://////////////+/:.` `-` :+///+. :yooooss. ` /yooooooooooooooooooooooooooooooooos+ .-` `.---.` `----. `-` sdds :dhhhhhhhhhhhhhhhhhhh +hhhhhhhhhhhhhhhhhhhd+ +dhh. --. `----` .----` `:/--` `.``-/+///////////////. `/+///+. -yoooooy/ ` `ssooooooooooooooooooooooooooooooooss. ----` `.---.` `----. `yhdo /dhhhhhhhhhhhhhhhhhhh +hhhhhhhhhhhhhhhhhhhdo /dhd: .:--. `----` .----` `` `.-://++/- .+. -/+///////////+- `/////+- -ssooooso``. /yoooooooooooooooooooossssssoooooosy- .--:-` `.---.` `.---. .hhd+ +dhhhhhhhhhhhhhhhhhhh +hhhhhhhhhhhhhhhhhhhds -hhd/ `----. `----` .----` `.-/+ossssooooso``+` /. -///////////. .+////+- .ssoooooy- -``ossssssoooooooossssoo/::-..````````. ``` ``.-` `.---.` `.-:. :dhd: odhhhhhhhhhhhhhhhhhhh +hhhhhhhhhhhhhhhhhhhhy` `yhdo `----. `----` .-.` .-+ossoooooooooss/``/. :ys/``-+/////+:` :+////+: .ssooooos+ .- ``.-::/++ooooo/:-.`` ``..--:::::---..` `` `.---.` `-. +dhh. shhhhhhhhhhhhhhhhhhhh +hhhhhhhhhhhhhhhhhhhhh. odhh` .` `----. `----` ./ossoooooooooooss/.`--````:sss: `-:://- `/+////+: `osoooooos. :``/::-.` `````..-:////:--..``````````` `.---.` `yhds `hhhhhhhhhhhhhhhhhhhhh +hhhhhhhhhhhhhhhhhhhhd: :dhd: .:.` `----. `-` `:ossoooooooooosss+:`.--``-++:``/ss+` ` -+/////+: `osoooooos/ -: `-..```````.---:---.``````..-://++oooooooo++//:..` `.----` -dhd/ -dhhhhhhhhhhhhhhhhhhhh +hhhhhhhhhhhhhhhhhhhhdo `yhds `---.` `----. `/ssooooooooossso/:`.---``-//////. -sss- ` `:+/////+: `osooooooss``/` ``..```...```````..-://+oossssssoooooooooooossssso+:.` `` .-:` odhh. /dhhhhhhhhhhhhhhhhhhhh +hhhhhhhhhhhhhhhhhhhhhy` +dhd- `.---.` `-:. .ssoooooosssoo/:...---``-:////////+: `+ss: /+/////+: `+sooooooos: /: `````...--::/+++oossssssooooooooooooooooooooooooooossso+:. `` `. .hhdo sdhhhhhhhhhhhhhhhhhhhh +hhhhhhhhhhhhhhhhhhhhhd- `hhdo `.---.` ` .. /soooooo//-....---.``-:////////////+/` /ss/``/+///+: `osooooooos+ .o `ooooooosssssssooooooooooooooooooooooooooooooooooooooooooss. `:-` +dhh. .hhhhhhhhhhhhhhhhhhhhhh +hhhhhhhhhhhhhhhhhhhhhd+ /dhd- `.---.` -+-`......``...-.`..-:///////////////////` /ss+ `///+: `osoooooooss. o: /yoooooooooooooooooooooooooooooooooooooooooooooooooooooooy/ `--:. .hhdo /dhhhhhhhhhhhhhhhhhhhhh +hhhhhhhhhhhhhhhhhhhhhhy` `.` `yhhy` .` `.---. ``....`````.. `::///////////////////////+. :sy/ `++- .osooooooooy: :o `ssoooooooooooooooooooooooooooooooooooooooooooooooooooooss/` .- sdhh. `` sdhhhhhhhhhhhhhhhhhhhhh +hhhhhhhhhhhhhhhhhhhhhhd: ``.-/+osy/ :dhd+ --` `.-:` -` :::::/` +s` /+/////////////////////////` /ss- -- -ssoooooooos+ `y- /yssssoooooooooooooooooooooooooooooooooooooooooooooooosso. .-. /dhd/ -so` .-.` -dhhhhhhhhhhhhhhhhhhhhhh +hhhhhhhhhhhhhhhhhhhhhhds .//+oosso/-.+y- odhd: `---` `.- `- .+///+: `so `/////////////////////////+/ `oyo` `:ssooooooooss. oo `..-:/+ooossssooooooooooooooooooooooooooooooooooooooss+- `----` -hhds -yo. `+sooso. odhhhhhhhhhhhhhhhhhhhhhh +hhhhhhhhhhhhhhhhhhhhhhhd- -ys:.`.yo` .yo` `yhhh. `----` `` -- :+///+- .y+ `/////////////////////////+- .sy-`osoooooooooos- :y. ...`` ``.-:/++oosssssooooooooooooooooooooooooooss+:` .. `-. `yhhh` `oy. `+y/``-ss. .hhhhhhhhhhhhhhhhhhhhhhhh +hhhhhhhhhhhhhhhhhhhhhhhds /h- /h/ /h: .hhhy` .----` :. /+///+. :y/ `/+////////////////////////` +soosoooooooooos/ .y/ `----. ``` ``..:/++oossssssssoooooooossssso+:. .:--. sdhd- `oy+..+y+ -yo` odhhhhhhhhhhhhhhhhhhhhhhh +hhhhhhhhhhhhhhhhhhhhhhhhd: `ss. `/. `.` -dhds` .----` `/``//////` /y+``:+//////////////////////+. /yoooooooooooos+ `ss` --` `.---.` `----. ``...-:///++++o++++/:-.` `..` `.---` odhd/ `/+oss/ -sy. .hhhhhhhhhhhhhhhhhhhhhhhhh +hhhhhhhhhhhhhhhhhhhhhhhhds` :s: `:+o. :dhds` .----` ./ `//////` +yo. -//////////////////////+` +soooooooooooso` +y: `---.` `.---.` `----. `....` ```` .---.` `-` +dhd/ `/: `` .so. odhhhhhhhhhhhhhhhhhhhhhhhh +hhhhhhhhhhhhhhhhhhhhhhhhhd/ `oy+-` :dhds` .--:. -/ `////+/` +ys/``:+//////////////////+: .ssooooooooooss` /y/ .---.` `.---.` `----. `-:--. `----` .-:--` .---.` odhd/ +y: ` :dhhhhhhhhhhhhhhhhhhhhhhhhh +hhhhhhhhhhhhhhhhhhhhhhhhhhh. .:+o/:.`/y/ :dhdy` ` .-:. :+ `//////` /sso- `:+///////////////+: `osooooooooooss. /y+` .` `.---.` `.---.` `----. `----. `----` .----` .-:- `sdhd/ /y: :y/ .:` `yhhhhhhhhhhhhhhhhhhhhhhhhhh +hhhhhhhhhhhhhhhhhhhhhhhhhyds .o:-:ososs:. . -hhhh. `. `:. -+``/+///+. -ssso:``-/+//////////+/- .osooooooooooss. /yo` .:--` .----` `.---.` `----. `----. `----` .----` ` .ydhd: /y+` -yo` `sy- odyhhhhhhhhhhhhhhhhhhhhhhhhh +hhhhhhhhhhhhhhhhhhhhhhhhhhyd/ `ss/+ssosy: .hhhd: `-. .. -o. :+///+: `+soss/. .-////////:.``/ssooooooooooss. /yo` .----` .----` `.---.` `----. `----. `----` .----` -hhhd- /+oso+os. `oy- :dhhhhhhhhhhhhhhhhhhhhhhhhhhh +hhhhhhhhhhhhhhhhhhhhhhhhhhhhd- `+h/ `.-.``- `sdhd+ .:. ` `+: .////+/. .ososso/-.````` `.:ossooooooooooos+``+y+` -. .----` .----` .----` `.---. `----. `----` `-. /dhdy. .-/osso/+y: .hhhhhhhhhhhhhhhhhhhhhhhhhhhhh +hhhhhhhhhhhhhhhhhhhhhhhhhhhhhh` .osy+ +h+ /dhhh. .:. :+. -++//+/. -ossoosssooooosssooooooooooooss- .sy/ -:--. `----` .----` .----` `.---.` `----. `----. .ydyd+ -oy- .-+s/ `ydhhhhhhhhhhhhhhhhhhhhhhhhhhhh +hhhhhhhhhhhhhhhhhhhhhhhhhhhhyds --` :yo` .hhhd+ `-:. `:/. .:/+++/. .+ssoooooooooooooooooooooss: `+ys. `----. `----` .----` .----` `.---.` `----. `-:-` /dhhh- `+y+. +y+-` odyhhhhhhhhhhhhhhhhhhhhhhhhhhhh +hhhhhhhhhhhhhhhhhhhhhhhhhhhhhydo .:ososs. +dhhh- `-:. :+:. `.--::` `-/osoooooooooooooosss+- .+ys: `-:. `----. `----` .----` .----` `.---.` `----. ` -ydhdo` `oy: `os:/sy/ +dyhhhhhhhhhhhhhhhhhhhhhhhhhhhhh +hhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhd+ `-+syo:. `sy- .ydhds. `-:. ./oo+:-----:/+osooooooooosssso/-`.:oyo- `.---. `----. `----. `----` .----` .----` `.-:- .odhdy- -ys` `` .sy. /dhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhh +hhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhd+ :oss+-` `:`. :hhhdo. `.:.` `.:+sssssssssssssssooo+::.``-/oso:.``--` `.---. `----. `----. .----` .----` `.---.` `` `+hhhh/ /sso:. `+y/ :dhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhh +hhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhd+ ./. `:oyo. `+hhhho. .--` `..```..--------..`..---/+++/-.`` .----` `.---.` `----. `----. `----` .----` .-:-` `+hhhdo` `-/oss/-:oy: :dhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhh +hhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhd+ `-+ss/-oy: `+hhhho. `..` `---.. `..---..``` ----` .----` `.---.` `----. `----. `----` .----` `` .+hhhdo. ://::-.` `:+o+/. /dhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhh +hhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhd+ ./sso-` `/yo. .+hhhhs- `` `----. `.-... `.---` .----` .----` `.---.` `.---.` `----. `----` .--.` -ohhhho. .os//++oss+-` /dhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhh +hhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhdo` :sso:+y/` `oh/ `+hhhhy/. `.---.` `----. `----. .----` .----` `.---.` `.---.` `----. `----. `:shhhh+. -ys. `+sss+.` +dhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhh +hhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhds` ./. -yo:-+ss/` `:shhhho-` `.---.` `----. `----` .----` .----` `.---.` `.---.` `----.` `..` `-ohhhhy/` :yo` .oy/`-oo. `odhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhh +hhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhyhy. `/s++o+-` `` `-+hhhhyo-` `.---.` `----. `----. .----` .----` `.---.` `.---.` `---. `-+yhhhho-` -/` /yo-:so. `` .ydyhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhh +hhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhyhh: `oy/` .:/++oso:` `:ohhhhyo:. `...` `.---.` `----. `----` .----` .---.` `.---. ` `-+yhhhhs:` :ss/` ./sss-` -hhyhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhh +hhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhyhd+` /: .+so//:..+y/ `:ohhhhho/.` `----.` `----. `----` .----` .---. `` `./oyhhhhs/. `/ss. `:+yo` /dhyhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhh +hhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhds. `-+sss. `sy. .:oyhhhhyo/.` ```.` `----. `----` .---. `` `.:oyhhhhyo:. .o+. `oy+-`` .. `odhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhh +hhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhyhh/ :yo..+y+. /y+ `` `./oyhhhhys+:.` ` ```` `.:+syhhhhyo/.` `:ss+``:so//oso+:` :hhyhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhh +hhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhyhdo` . .+s/+y+` `:+oo+-` `./oyhhhhhys+/-.`` ``.-/+syhhhhhyo+-` `-/+o. `:osos:` `.:+- `+dhyhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhh +hhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhyhh: `-ss+- -sy/--/ss/. `.-+oyhhhhhhhyo+/:--.```` ````.--:/+osyhhhhhhys+:.` `/ss+-.` `:os+. :yhyhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhh +hhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhyhds. /y+. `+yo. `:ss. `.-/+osyhhhhhhhhyyysso++++++//++++++ossyyyhhhhhhhhyss+/-.` +h/` `-oy+` .odhyhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhh +hhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhyhh+` . -ss: -ss. `-` `.-:/+ossyyhhhhhhhhhhhhhhhhhhhhhhyysso+/:-.` +y+` ` :- `/hhyhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhh +hhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhyhy: +h/ `+yo. `oyso:.` ```...-----::::-----....`` ./+/-` :ss: -s+ -ydhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhh +hhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhyhds- .oso-` `:ss: .sy-`:oss/` /yo:/sso/. `+yo.``-+yo. .sdhyhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhh +hhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhyhds. .+ssosy+` :ys. `+h/ `` `` /h: `./sy: -sssss+. .odhyhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhh +hhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhyhdo. `--.` /yss/-` :ss. `oyo+:.` `.:/osso- /h: `-+sy/ `..` .odhyhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhh +hhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhyhdo. `+y+`.+so+oyo` +y/.:+sss- .osso:.`.oy: :yo.-oss/./yo` .odhyhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhh +hhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhyhds- -s/ -y+-. /yo` .sy- /s/:-.` .:` /y+` .sy- :sss:. /:` .odhyhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhh +hhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhyhdy: +h: :ys` -ys` `-ss+o. .o/` -:` +h/ +h+ `-+ys` .ss: -sdhyhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhh +hhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhh+` -o. -ys. .sy. +y/ :yso :y/ :++/. `/++oooss+. oh/ +y: +yooso/-` `o:` `/hdhyhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhh +hhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhyhds- .sy+-` .sy- :yo os+s+ +y- `oy/:sy: `ss:....:ss. `/ys:` /h+ `oy/ -ohhyhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhh +hhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhyhhy+. .-/ossoosy: `sy- .yo -h+ .so` -yy- `oy/ +y- oy- `:ss+so` `sy: `/ydhyhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhh +hhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhy:` .-:. ../y/ /h/ :h+ :h/ .ss. `oy: /y+...-/ss. -sy- .:. `:shhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhh +hhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhs:` `/ooso/ oy. /y/+y- .so+/////oy: -yooo++ss. :yo `-ohhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhh +hhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhs:` `-. -y+ /yso -yo--::::oy- .ss` -ys. `+/` `-ohhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhh +hhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhs/. ` :s: -yo `sy- `oy- -o+` .:shhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhh +hhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhy+-` `.` ..` `` `-+shhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhh +hhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhs/-` `-/syhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhh +hhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhys/-` `-/oyhhhhyhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhh +hhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhs+:.` `.:+syhhhhyhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhh +hhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhys+:.` `.:+oyhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhh +hhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhyso/:.`` ``.:/osyhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhh +hhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhyyo+/:..`` ``..-/+osyhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhh +hhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhyss++/:-..```` ```..-:/++ssyhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhh +hhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhyyssso+++////::::::::::::////+++oossyyhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhh +hhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhh +hhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhh +hhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhh +hhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhh +hhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhh +hhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhh +hhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhh +hhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhh +hhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhh +hhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhh diff --git a/vendor/league/climate/src/ASCII/the-league-massive.txt b/vendor/league/climate/src/ASCII/the-league-massive.txt new file mode 100644 index 0000000..9805252 --- /dev/null +++ b/vendor/league/climate/src/ASCII/the-league-massive.txt @@ -0,0 +1,255 @@ +hhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhh +hhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhh +hhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhh +hhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhh +hhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhh +hhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhh +hhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhh +hhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhh +hhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhh +hhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhh +hhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhh +hhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhh +hhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhh +hhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhh +hhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhh +hhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhh +hhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhh +hhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhyyyyysssooo+++++++//////////++++++++oossssyyyyhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhh +hhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhyyyso++//::--....``` ````....--://++ossyyhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhh +hhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhyhhhhhhhhhhhyyysoo+/::--..`` ``..---://oooyyyhhhhhhhhhhhyhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhh +hhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhyyso++::-..``` ```..-::/+osyyyhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhh +hhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhyso+/:-..``` ```..--/+osyhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhh +hhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhddhyss/:-.``` ```.-:/osyhhdhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhh +hhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhyhhhhhhhhhyo+--` `.-+oyyhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhh +hhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhyhhhhhhhhys++--` `.-/+syyhhhhhhhyhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhh +hhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhyhhhhhyys+/--` `.-/+syyhhhhhyyhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhh +hhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhyhhhdhhyo+-..` ``.-/+syhddhhyhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhh +hhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhyhhddhso:-``` ```--oshddhhyyyhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhh +hhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhdyy/:.` ``:/syhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhh +hhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhyhhhhhhhso/.` `.:+ohhhhhhhyhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhh +hhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhyhhhhhyyo/:`` ``:/osyhhhhhyhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhh +hhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhyyhhdhyo+-.` `.-+oyhhhhyhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhh +hhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhyyhhdhh+/.`` ``./+yhdhhyyhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhh +hhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhdhy+-.` `..---.. ` `-+sydhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhh +hhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhso-.` ``````..:::.` `./ossssss:- ``-:///:::--..`` `.-oshhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhh +hhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhyyhhhhhso:.` `.--::/+++oooossy:. :+yss+++sss+-` ``/+ssyssssssssoo:-`` ``` .:+ohhhhhyyhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhh +hhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhyyhhhhy+:`` .+sysssssooo++//:.` ..ssyo+```/oyss:. -/yyso+::://++ossys+. .///.` `:/shhhhyhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhh +hhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhyyhhdhh+/.` ./sys+:-...```` `/oyss-` ..ssyo+` /oys+-` ```.-:s+:` `:syy/- `.:/hhdhhyyhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhh +hhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhys:-` --/-. `-oys+.` ./oyso-` :/syy:- `.+syo:` `` :+yss.` `-::.` .:oyhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhh +hhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhyhhhhhy/:` ``osyo+ `.+syo:` `````` `-osy+: .+syo/ `-oyyo-` +oyo+ -oyy/: `-:yydhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhh +hhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhyhhhhhyo:. /+yss`` `/oys+:-:://+oo+. `:syy:-`````````.:oyo/` `:oys+.` `:::---.` `.ssy+: -/syy-. ````` .-oyhhhhhyhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhh +hhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhyyhhhhy/- .:syy:- :+ssossssssssoo-` `-sss++/////////++sso/` ./syo/ `.yyyssys+. -/yys-` +oyso`` :+so/-.`` -:yyhhhyyhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhh +hhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhyyhhdhs:- `.` .osyo: -:yss+/::---..`` `-sssssssssssssssssso/` .+sy+: `--:+oys/. `/oys+. ``ssy+/ `-oyssyss+/:-. .:oyhhhyyyhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhh +hhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhyyhhdhh/:` `.-/+s+-` `:oys+.` .-yys/- `-oss+/----------/oys/` `-osy/: `+syo:` `-oyyo-` .:yys/- `-osy++:+osssso//-.` `-:yhdhhyyhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhh +hhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhdhy/- `-:+ossyso:` `+sys/. `.ssy+: ``` `-oyy/- `-oys+` -osyo+-` .:osyo-` ./syo/` :+yso- :/yys-.```-:+osyyy+: .:shdhhyyhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhh +hhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhyhhddo/` ``:/ossyso+/.`` :+yso-` osyo/``.--::://s+:` `-syh/- `-shy+.` `.+ssso++//:::/+ssss/` `-ssy/- `.+sys/. ``ssyo+ `../+o:. `/oddhhyhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhh +hhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhyhhhhho/ .:osssso+:-` .-yyy/- ``.` /+yssoosssyyyysyo:` ./++-. `.:/:-` .-oosssyyyyysssoo.` `-ssy+:` ./oys+.` :/yys+/.`` :+hhhhhyhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhh +hhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhyhhhdyo:` ./syso/.` `` osyo+ ``..-:/+so-` :/ysooo++//:---..` `.----:://+/:.` ./oyso/--..`` `-osy+: `.+sssossso/:-`` `-oydhhhyhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhh +hhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhyhhdys.. `` `/oyso-` .-:+o.` /+yso::/+osssssso:` `.-..````` ``` `/+ssyssoo+/:/+ssy:- .+syo+-:/ssssso+-` `.osdhhyyhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhh +hhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhyyhhdho-. `.:+o.` ..ssy+/``.:/osyyy:- .:ssssssss++/:-..` ``-:/++sssssyyyso`` -/syy:- ``.-:+oyo-` `-+ydhhyhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhh +hhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhyhhdd+:` .:yyyo/` /+yso++oyyss+:-` .+os/:-..`` ```..-////:.. `osyo+` ``-. ``::://-. `:/ddhhyhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhh +hhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhyyhhdo/ `-osyso-` .osssso+/.` `` -/yyso+-.`` `-osyyyyyyso:. -+hhhyyhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhh +hhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhyhhhs:` -:ssyo+`` `.+sss+. `..+/:` .-++osssso/:..` -:ssyo+///osyss/:. `-shhhyyhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhh +hhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhyhhhh:. ..` :/ssy/:` -/yss/- ``-:/osyso-` `.::+ossyso/:-` `.ssyso..` -:+sssso:. .-yhdhyhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhh +hhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhyydhh/- -:so+. `-ossso/. ``osyso..-/+ssyss/:.` ```..---::::::::::::::::::::---..```` `.-:/osyss`` `.+oyss:. `-:ssyoo ./yhdyyhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhh +hhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhyyhdhs-` :/yys+/ .-oossssss+/ .:sssossyyo+:-.` ``..-::/++oosssyyhhhhhhhhhhhhhhhhhhhhhhhhhhyysssoo++/::-..`` `.-/:: .:osys+.` /+yss`` `.oydhyyhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhh +hhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhyhhhh.` ` /+yyy/- `-+ssyso:-/+syy:- .:syss+:-`` ```..-:/+oyyyhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhyyoo+::..``` ``ossss-. /+yss.` ``yhdhyhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhh +hhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhyyhhh/- `./::` `-+syso:--osyss/:.` `-osyso-` `:/:-` ``..::++ssyhhhhhhhhhhhhhhhhhhhhhyyyyyysssoooooooooossssyyyyyhhhhhhhhhhhhhhhhhhhhhyyso+/:..``` -/yys/- -:ssyo+ ``` ./yhdhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhh +hhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhyhhhs-` ``/oyss.` `/ossossso+:- `./oyys/- `..-//osyhhhhhhhhhhhhhhhyyssooo///::-----....`````````````...-----::://+oossyyhhhhhhhhhhhhhhhyss+/-..` :+yso- `-osyso-` `./++.` `.oydhyyhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhh +hhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhyhhhh-. `./+yys/:`` `.oosss+:` `.oos/- .-:/+yyhhhhhhhhhhhhyyss++/::-..```` ```..-:::++osyyhhhhhhhhhhhhyy++:-. -/yys/- -/ssyo/.` ``/+syyo/.` .-hhdhyhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhh +hhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhyyhhd+: -/osyo/.` .-osyo+-` ...` `.:/+yyhhhhhhhhdhhyyo+/:-..``` ``..--/+osyhhddhhhhhhhyyo+:.` `.ssyss/:` .-ssyso.` `./osssooyss/- -/hhhyyhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhh +hhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhyhhdy/. -:sssss+:` `.+oyss:. ``.:/syhhhhhhhhdhyss+/-.``` ```.-//ssyhdhhhhhhhhyy+/-`` .-+sssso/---:+oyso:. -/sssso-.`/oyss/-` `:sdhhyhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhh +hhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhyhhdd+: `./ossooosso+-` ..ssyso.` `.-+oyhhhhhhhhhhss+/-.``` ``.-:/oshhhhhhhhhhyso--`` `-:ossssssssss+.` `-:sssoo-. `./osyo/-` -/dhhhyhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhh +hhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhdyo ``+oyss:-.:/ssyoo.` -/syyo/` ``-:oyhdhhhhhhhyy+/:.` ````` ``.....`` `...````` `.-/+syhhhhhhhdhyo/:`` .-/oooo+++-. `./osssso+`` -:ssyo+ +sdhhyhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhh +hhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhyydhs-` ``oos/- :/ssys+-` `:+o:- `.:+shhdhhhhhhho+:.` ``` `.-----.. `.-:::--.` `.--:----`` ``..````` `.:/+yhhhhhhdhhso:.. `..`` `.+oyss++osyo/.` -:o/: -ohdhyhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhh +hhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhyyhdho.` `..` `-+oyys+/` `` -:syhhhhhhhhys+:-`` `.-----.` `.-:-----`` `.-:----.` ``--:----.` ``------..` `--/syhhhhhhhhys:-` `-+oyys+:``./oyyo:- .` `+ydhyyhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhh +hhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhyhhhh-. `.+oyss+:` -/oyhhhhhhhhs+/..` ``...` ``--:----`` `.-------`` `.-------`` ``.------.` ``--:---.. ``` `./+syhhhhhhhys/: -/ssys+-` `.+oyyy-. `.hhhhyhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhh +hhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhdo/ `-/osss+-. ``/+hhhhhhhhyy/:.`` ..-----.` ``-------.` ``-------`` `.------.` `.------.` ..-----..` `....`` `.-:syhhhhhhhh+/.` .:ooo-. `-+oo.` :+dhhyhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhh +hhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhydhs- `-/ssyss.` ``:+yhdhhhhdys+-` ``..`` ``.------. ``-------. `.------.. `.------.` ..------.` ..------`` --:--..`` `./sydhhhhdhy+/`` ``.. ``` .ohdyyhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhh +hhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhyyhdyo` -/s++`` `.+sddhhhhhho+.` .-:::--` `.------.` `.----:-.` ..----:..` `.------.` `.------.` `-------`` `.--::---`` ``/ohhhhhhdds+-` `+sdhyyhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhh +hhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhyhhhd-. `.`` ``/+yhdhhhhho+-` `` `.------.. `.------.` ..------.` ..------`` .------.`` `.------.` ``-------.` ``-------`` `-/+hhhhhdhho+`` `.hhhhyhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhh +hhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhdo/ `./ohhhhhdhy+:`` `.----.` `..-----.. `.------.` `.------.` ``-------`` `.-------`` `.-------` ``.------. ``------.. `:/shdhhhhds+-` :odhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhh +hhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhyydhy-` :+yhhhhhhdo/.` ..:-----.` .-------`` `.------.` `-------.` ``-------.` ``------.` `.------.` ..------.` `..:----.. `./+hhhhhhhh+/ `-ohdyyhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhh +hhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhds.` :/dhhhydhh+:` ``.` ``-------`` `.-:-----`` `.-:----- `.-:----. ``--:----. `.------.. `.------.` ..:-----.` .-------` ` `-/yhdhhhdd+: `ohhhyhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhh +hhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhydd/- `-shdhhhhdo/` ``--::-.` `-----:-.` ``-------`` ``-------` `.----:-.` ..----:-. .-----:.. `.-----:.` `.------.` `-------`` ```. /odhhhhdhy:. -:ddhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhh +hhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhyhdyy` ..yydhhhhho/ `.----:--` `-----:-. ``------.. `.------.` `.------.` ..------.` .----:--`` .----:-.`` ``-------.` ``-------.` `...` /+hhhhhdhy-. sydhyhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhh +hhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhd+- `:oydhhhdyo:` ..` `.------.` `.------.` `..-----..` `.------.` `.------.` `-------`` `.-------`` `.-------`` ``.------.` ``------.. `.-..` `-oydhhhhhs:` ./hhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhh +hhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhyydho. :+hhhhhdys.. `.----.. `.------.` `.------.` ..------`` `.-------`` `--:----.` ``-------.` ``-------` ``------.` `.------.` `..-----..` `.--.` `.oydhhhhho/ .+ydyyhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhh +hhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhyhhho` -/ddhhhdho-` `.-::---.. `.-:----.` `.------.` ``-------`` `.-:-----`` `.-:----- `--:----. ``--:---.. `.------.. `.------.` ..:-----.` .-:-. `-+hdhhhdd+: `oyhhyhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhh +hhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhdd/- .+ydhhhdd+: ``` ..------`` .-:--:--` -----:-.` ``-----:-.` ``-------`` `.----:--` `.---::-.` ..----:-. .-----:.. `.-----:.` `.------.` `.-:-.` -/ddhhhdho-` .-ddhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhh +hhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhdyy /odhhhhdo+ `.---`` `.-------`` `.-------` `.------.` ``-------. `.-----:.. `.-----.`` `....---`` ..---:--`` .----:--`` `-------.` ``-------.` ``---.` /ohhhhhds+`` sydhyhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhh +hhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhd+: -/dhhhhhy/. --:----.` ``-------`` `.------.` `.------.` ..---::-.` `..-.... ``` `..------`` `.-------`` `.------.` ``.------.` `.--:.` .:shhhhhd+:` -/dhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhh +hhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhydhs- ./ydhhhhd/- ``.------.` ``------.. `.------.. `.------.` ..----..` ```.......-----.......``` ````..-..` ``-------` `.------.` `.------.` `..:--`` .:hhhhhdy+. .ohdyhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhh +hhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhdy-` :+dhhhhdo/ -.` `.:-----.` `..:-----. `.-:----.` `.-:::::`` ``` ``...-::////+++ooooooooooooooooooo+++///::-..`` ````` ``--:---.. `.------.` `.------.` .-:--` :+dhhhhdo/ `.sdhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhh +hhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhyhds/ .-dhhhhdy/. `.-::-.. `.------.` ..------.` ..------`` ...`` ````--://++ooossssssssssssssssssssosssssssssssssssssssooo//:--`` ..-----.. `.-:----.` `.------.` `----` `:sdhhhdd:- :+ddyyhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhh +hhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhdd-. `.oyhhhhd+: `.------.` `.------.` ``-------`` `.----:--`` ```..-:://+oosssssssooooooooooooooooooooooooooooooooooooooooooosssssso++/:-``` ..------`` .----:-.`` `------.` ``---.` :/dhhhhhs-` ..hhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhh +hhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhyhdys `-shdhhdyo` ` `.------.`` ``-------.` ``-------.` ``---..` ``.-:/++oosssssssoooooooooooooooooooooooooooooooooooooooooooooooooooooooooosssss++:-.`` `.----:--`` `.-----.` ````` ``---`` +sdhhdhy:` osdhyhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhh +hhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhd+: +sdhydhs-` `.-`` `.-------`` `.-------` ``-------. ``` `.-:++osssssssoooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooosssso+/-.` ``.-----.` ``` ..:-` -ohdyhdyo`` -/dhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhh +hhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhyhhy-` -/ddhhhho.` `.--:--.` ``------.` `.------.` `.------.` ``:/oosssssooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooossssso+:-` `````````````````` ````` ..:.` `+ydhhdd+: -shdyhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhh +hhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhyhdy/. `-shhhhhh-. ``-------. ``------.. `.------.. `.-::-.` `:+ossssoooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooosssss+:.` ``.......`````````..-:::////++++ooso:` `` ``.-`` `.hhhhhds:` `:ydhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhh +hhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhho` `-shdhhdo/ ..-----..` `.------.` `.------.` ``.- `/+sssoooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooosssso+/-..``..---..`````..-::/++ooooooo+++/////::/:.` ..-` ``-.` :odhhhhy:` `+yhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhh +hhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhyddo: /odhydhs- `..` ..------`` .------.` `-------.` `:/sssooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooossso+/:`````:::--.````.-/++ossso++/::--...````` ..:--` ``.`` -ohdyhds+ -/ddyhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhh +hhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhd.` ..dhhhhho.` .-::-.` `-------`` `.----:--`` `.----:--` `./syooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooossso+-.```--//:-.```.-/oossso+::-.` ``` ..::--.` `` `oydhhdd:. ``hhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhh +hhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhyhdys `+sdhhdd/- .-:----.` ``-------.` ``-------.` `.---::`` :+ysooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooossso+:.` .:/+/:-``..:+osssoo:-.`` ```` `.---...` `.------.. .-ddhhdyo` osdhyhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhh +hhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhdo/ ./ydhhdys` ``.-------` ``.---::-.` ``------.. `.--- ..sssoooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooosss+/.` .-+++:-```-:osyss+/-.` ..` `.-:-.` `.-::---.. `.------.` +sdhydy+. -+dhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhh +hhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhh:. `:yhhhhh/. `` `.------.` ..--.--.` `..---::.. ``` :+ssooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooosso+:.``./oo/:.` :/+ssss+:-`` `.:/oo+.` `..::-.` ..------`` `.------.` `:yhhhhh/. `:yhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhh +hhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhdho- +sdhydy+. ..:.. `.---::-.` ```..--.`` `-oyooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooossso.` `.oos:-```:+sssss:-` `./+sssssso+` .-:--`` `.-------`` `.-------` `:ydyhdso .+ydyyhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhh +hhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhdy:` ``` `.dhhhhy+` `---::.. `.-..`` ````......``````` ``` .ossooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooso+.` `:oy+: ``-/ssysso:. `-/osssoooooosso/` `.-::-.` ``-------.` ``-------`` /sdhhdd-. ``` `-sdhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhh +hhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhho` .o// /oddydd:- .-------`` `.-:/++ooooooooooo++//:--..`` -/ysoooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooosss/- `/+y+/ `:/sssss/:` .-oosssoooooooooosso:. `.:::-.` ``-------. `.------.. .-dhhhds+ .o// `+yhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhh +hhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhyhdo/ -/yso`` `.shhhdyy` `.----:-- ..+ossssssssssssssssssssssooo+//`` +ossoooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooss+/```:/yo:` `-+ossss+/` `.:osssoooooooooooooossoo.` ..:::-.` ..-----..` `.------.. sydhhds-` -/yss`` :+ddyhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhh +hhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhydd/- ``ssssy:- .ohdyhd+: `.` ``--:-. `-+ssssooooooooooooooooooooossssso`` `.ssooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooyo/.` .+sy:- ``oosssyo/.` `++sssoooooooooooooooooosso/. `.-:---.` ..------.` .-------` -+dhhdhs- ``osssy:- .:ddhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhh +hhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhh.` :+ssosso/` `:hhhhhy- ..:-. ``.` .:sssoooooooooooooooooooooooooosy/: :/ysoooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooosy+:` /oh+: `/ossosy/: :+ssooooooooooooooooooooooosso-` .-::---.` ``-------`` `.-:--:-. -shdhhd/. :/ysosss+` ``hhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhh +hhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhyy `:oyoooooyo/. +sdhydy:` ----:-.` oossoooooooooooooooooooooooooosso- `.+soooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooossoo :/hs/. `-ossosyo+ `-osyoooooooooooooooooooooooooossoo` --:--:-.` `-----:-.` ``-----` `-sdhhdyo `-oyoooooys/. sydhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhh +hhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhds+ ` ```````...-:sssooooosss:.` ``yhhhhy+` ..------.` .-ysooooooooooooooooooooooooooooyo:` ./oyooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooosso-` `:sh+: `+oysosso-` ``+ossooooooooooooooooooooooooooooosy+: `.----:--` `.----:-.` ``-::.. +sdhhhh.` ` ```````...-:sssooooosss:.` /odhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhh +hhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhd+: `-:////+++++oooosooooooooosoo/::--...````` -:ddydd+: `.--::-. :+ssoooooooooooooooooooooooooosso/` `-sssooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooosss+.` -/yss`` -:ysosss+.` :/ysoooooooooooooooooooooooooooooooooso:` `.------.` `.------.` `.-:-` -/ddydd/- `-:////+++++oooosooooooooosoo/::--...````` -/dhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhh +hhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhh/. `.+oyssssssssssoooooooooooosssssssooo+++/:` /oddhhh.` ``` ``--:.` `.+soooooooooooooooooooooooooooosy:- /+ysooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooosss-. `.ssy/- `-+sssosy:. `:oyooooooooooooooooooooooooooooooooooosss:- `.------.` ..------.` ...` ``yhhhds+ `.+oyssssssssssoooooooooooossssssoooo+++/:` `:hhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhh +hhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhy- `.ooysooooooooooooooooooooooooossssyy+/.` .ohhhdyo `---` ``.` `:oyoooooooooooooooooooooooooossoo` ``ossooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooosy+/ `/oys+. `-ossosso+ .:sssoooooooooooooooooooooooooooooooooooossso`` `.-:----.` `.------.` ```` +sdhhds.` ``ooysoooooooooooooooooooooooooosssyyo/.` -ohdhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhh +hhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhdh+. `.+ssooooooooooooooooooooooooosss/:` ./ydhhd+: ..:----`` .+ssoooooooooooooooooooooooooosy/- ``sssooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooss+. .+sys+` /+ysosss:` ``ossooooooooooooooooooooooooooooooooooooooooss+: .-:-----` -------.` -/dhhdy+. `.+osooooooooooooooooooooooooosss/:` ./ydhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhh +hhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhdy/. `:/ssooooooooooooooooooooosso/-` -shdhhy:` `.------.. .ossooooooooooooooooooooooooosso- +ossooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooosss/`` :+yyy:- `.sssooyo:` -/ysooooooooooooooooooooooooooooooooooooooooooos+-` `.-------`` `.------.` -yhdhhy- -/ssooooooooooooooooooooosso+-` `:ydhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhh +hhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhds-` `/+ssoooooooooooooooooss+/.` `:hhhdho. `.------.` -ossoooooooooooooooooooooooooyo-` :/ysoooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooosss-. ..sssso`` :+ssosso/` `.+sssoooooooooooooooooooooooooooooooooooooooooooss+. `.------.` `.------.` .+hdhhh/. /+ssoooooooooooooooooss++.` `.shhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhh +hhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhho` .:ssooooooooooooooooso/.` :+dhhdy/` `.----:-` .ossooooooooooooooooooooooosso/` ...` `-ossooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooss+/ `/ssss/- `-oyooosy:. .+ssoooooooooooooooooooooooooooooooooooooooooooooosy/- ``` `.------.. `.------.` `-sdhhdo/ .:ysooooooooooooooooso/.` +yhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhh +hhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhds+ :+ysooooooooooooooooyo/. osdhhho.` ...` `.--:-` .+ssooooooooooooooooooooooosy-. //:` `:oyooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooosso-` `/oys+. `-ossoosoo` -/ysooooooooooooooooooooooooooooooooooooooooooooooosso+ `.-.` `.-:----.. `.-:----.` `+yhhdys :+ysooooooooooooooooyo/. /odhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhh +hhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhdo/ oossoooooosssoooooooso+. ``yhhhds+ `.-:-.` ``:-.` ./oyooooooooooooooooooooosso+ `.+++-` :+ssooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooosss+.` `` ``::.` /+ysoosy/- `oossoooooooooooooooooooooooooooooooooooooooooooooooooss.` ---.` .-------`` .------` /oddhhh.` +ossoooooosssoooooooss+. :/ddhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhh +hhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhdd/: `.sssoosssssooossssooosso. ..hhhdd+: `-:----. ``.` `-oyoooooooooooooooooooooss/- -:+++// ``osssooooooooooooooooooooooooooooooooooooooooooooooooooooooooooosy:- ``/:-.``` :/+oosso-` .-ysooooooooooooooooooooooooooooooooooooooooooooooooooosy:- .-:--`` `.-------`` `.--:-` -/ddhhd-. ``sssoosssssooosssoooosso-` -:ddhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhh +hhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhdd:- .:yssssso+/:...:/ssssssss:` -:ddhdd:- ..------.` `/ossooooooooooooooooooss+. `.:+///++-. .:sssoooooooooooooooooooooooooooooooooooooooooooooooooooooooosso+ -://:::--.`````..:--` :+ssoooooooooooooooooooooooooooooooooooooooooooooooooooss+: ..:----.` ``------.`` `.:-.` .-dhhdd/: .-ysssssoo/:...:/ssssssss:. .-dhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhh +hhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhd-. :+yso+/-.` --/oossy/- :+ddhhh.` ..------.` -:ysoooooooooooooooooos+.` .:/+/////+/-` `-+sssooooooooooooooooooooooooooooooooooooooooooooooooooooosss:. `:/::::://:::--..````` `.+sooooooooooooooooooooooooooooooooooooooooooooooooooooosso/` `-------.` `.------.. `.-` ``hhhdds/ :+yso+/-.` .-/+ossy/. `.hhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhh +hhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhh.` `:/:-.` ../+y/: /sdhhhy`` `.------`` `` ``sssooooooooooooooosso/ .-+/////////+:. .-osssoooooooooooooooooooooooooooooooooooooooooooooooooooyo:` ` `.-:://:::::::::::::.` ./oyooooooooooooooooooooooooooooooooooooooooooooooooooooosso/` ..------.` `..-----..` ``` sydhhy+ :/:-.` ../+s/: ``hhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhh +hhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhh`` `` ``... `+yhhdyo `.-`` `-------.` `` :/ysooooooooooooooss/- :/+//////////++-. .:ossooooooooooooooooooooooooooooooooooooooooooooooooss+: `/:-` ``.--:::::::::://:` `-ossooooooooooooooooooooooooooooooooooooooooooooooooooooosso/` ..------.` ..------.` +sdhhho` `` ``... yyhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhh +hhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhyy` .ohhhds+ `.:--` `.------. ``` `-+ssooooooooooooosy:- :/+////////////+/-` `/+sssoooooooooooooooooooooooooooooooooooooooooooosss.` .-++//:.` ```.---::::/:.` -/ssoooooooooooooooooooooooooooooooooooooooooooooooooooooosso/ `` `.------`` `.-------`` /odhhds-` oydhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhh +hhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhdys `-sdhhdo/ .-::--.` `.----:`` ` `.+sssooooooooooosy/- :/+//////////////+:- `/+sssooooooooooooooooooooooooooooooooooooooooosy/: `:+///++-. `...````````.` +ossooooooooooooooooooooooooooooooooooooooooooooooooooooooss/- ..-` ``-------.` ``-------`` :+dhhdy:` osdhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhh +hhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhdso `:ydhhd+: `.------.` `.-::.. .-sssooooooooooss+: -:+///////////////++:-` `-+osssoooooooooooooooooooooooooooooooooooooss+. .//+//+// `/oss+//:-.` ``sssooooooooooooooooooooooooooooooooooooooooooooooooooooooosy-. --:--` `.----:-.` ``------.. -+dhhdy+. +sdhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhh +hhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhds+ ./ydhhd+- `.------.. `.-:-` :/sssoooooooosso/` `-+/////////////////+//-. `./+sssooooooooooooooooooooooooooooooooosss+.` -:+////+-. `:oysssssys/. -:ysooooooooooooooooooooooooooooooooooooooooooooooooooooooosss`` ------.` `.------.` ..-----` ./hhhdy+. /odhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhh +hhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhds+ .+ydhhh/. `.-------`` `---` .:osssooooooooyo-` `:/+////////////////////-.` ``-/osssoooooooooooooooooooooooooooooosy:- `.++///+/:` `-ossooooos+.` :+ssooooooooooooooooooooooooooooooooooooooooooooooooooooooss+/ `.------.. `.------.` ..-::`` `:yhhdho. /odhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhh +hhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhdo+ .ohdhhh:` ``` `.-------`` ``-.. -:sssoooooooss+. `:+////////////////////+/:-. `./+sssoooooooooooooooooooooooooossoo` -/+////+:` :+ysoooosso/ `.+soooooooooooooooooooooooooooooooooooooooooooooooooooooooosy/: `.------.` `.------.` ``-:`` -yhhdho. /odhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhh +hhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhdo/ .ohdhhy:` ``:-.` ``------.` `.`` :/yssoooooosy/- .-++////////////////////+++-. `./+ssssooooooooooooooooooooosss:. `-/+///++:- ``sssooooosy:- `:oyooooooooooooooooooooooooooooooooooooooooooooooooooooooosss-` ``` .-:--:-.` `--:----.` ```` -shddhs- :odhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhh +hhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhdo/ .ohdhhy- ``:::-. ``-----:.. ` `-+sssooooosss`` :/+//////////////////////++/--` .:+osssooooooooooooooooooyo:` `-+//////+`` :/ysooooosss.` .ossoooooooooooooooooooooooooooooooooooooooooooooooooooooooss/. `.-:`` `.----:--`` `.----:-- -shddhs- :+dhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhh +hhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhdo/ .ohdhhy- ``:---:-.` `..----:..` `.oosssooosso/` .:/+//////////////////////+++::.`` .-++sssssooooooooooosso/ //+////+:- `.+ssooooosso+ .:ssooooooooooooooooooooooooooooooooooooooooooooooooooooooooyo-` `--:--.` ``-------` `.------.` -shddhs- :+dhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhh +hhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhdo/ .ohdhhy- ..------.` ..------`` `-/osssoooss+.` `-:++///////////////////////+///:.` ``-:/ossssooooooosss.` .-++//////.` .+ssoooooosy/: :+ysoooooooooooooooooooooooooooooooooooooooooooooooooooooosso/` `-------. `.------.. `.------.` -shddhs- :+dhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhh +hhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhdo/ .ohdhhy- `-------`` `.-------`` `-:ssssooss+/ ``:/+/////////////////////////////:-. `.-/+ossssoosy+: `://////+/-` .:ssoooooosso-` +ossooooooooooooooooooooooooooooooooooooooooooooooooooooooss/: `..:----..` `.-:----.. `.------`` -shddhs- :+dhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhh +hhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhdo/ .ohdhhy- ``--:----.` ``-------` .-osysooss+: `.:/+////////////////////////////++:-.` ```:/+ssyso-` `:/+//////: +ossooooooyo/. `.sssooooooooooooooooooooooooooooooooooooooooooooooooooooooosy-. ..:-----.` .-:-----` --:::`` -shddhs- :+dhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhh +hhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhdo/ .ohdhhy- ``` `.-:--:-. `-----:-. -:ssssoyso-` ../++////////////////////////////++//-.` ../:.` -:+/////++.. .-ysooooooooyo-` ` -:ysoooooooooooooooooooooooooooooooooooooooooooooooooooooossoo `... `-------`` ``-------`` `.-:`` -shddhs- :odhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhh +hhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhdo+ .ohdhhh:` ``--` `.------.` ..-----..` .-+osssyo+`` ..........-://+////////////////////+//:-.``` `.++/////+// /ossoooooosso/ ` :+ssoooooooooooooooooooooooooooooooooooooooooooooooooooooosy+: .-:-.`` ``-------.` ``-------.` `.`` -yhhdhs- /odhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhh +hhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhds+ .+ydhhh/. ---.` ..------.` ..------`` `-:/:---`` `````--///////////////////////++///-. `-/+//////+-. `-oyoooooooosy/- `` `/sssooooooooooooooooooooooooooooooooooooooooooooooooooooosss:. .------` ``-------.` `.------.. -yhhdho. /odhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhh +hhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhds+ .+ydhhd+- --:--.` `.------.` ``-------`` ``` ```....... .-:-` .-//+////////////////////+++-` `-/+/////+//. `-ossooooooooss.` `. `-oyoooooooooooooooooooooooooooooooooooooooooosssssssssssssys+. `.---::-.` `.------.` `..-----..` .:hhhdho. /odhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhh +hhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhdso ./ydhhd+: .-:----.` `--:----.` ``--:----.` ``` `.-::/++oooooooo/: ``o/-` `:/++//////////////////+/.` .-+///////+/.` :/ysooooooossoo ``.. ./oyooooooooooooooooooooooooooooooooossssssssssoooooooooossyo-` ``..-:::.. `.------.` ..------`` -/dhhdy+. +sdhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhh +hhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhdys `-sdhhdo/ `.-------`` `.-:-----` `.------. ```-:/+ossssssssosssosss+` +:.` -.```:/+///////////////++.. ``+///////++:- ``sssoooooooosy+: `-```-sssoooooooooooooooooooooooooosssssso++///:-.....````````.... ````` ``.--.. `.------.` ``----:-- :+dhhdy/. +sdhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhh +hhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhyy `.ohhhds+ ``-------`` `.------.` ..---::.. ``--/+osssssooooooooooooosy/- `./- ``so/.` .:/+////////////+:: `-/+///////++`` -/ysoooooooooss:. `-` `./++oosssssssssssssssssssssssoo+/:--.```` ``````````````````` ```` ``...`` `-------.` ``--:-. /odhhds-` osdhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhh +hhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhy`` `+yhhdso `.------.` `.------.` ..-..`` `.-/+sssssooooooooooooooossso+```-/.` -:yys+/`` -:++////////+//.` `:/+///////+/: `+sssooooooooss+. ..-` ``..-::://++oooooooooo+//::..` `````..----:::::::::---...`` ``` `.------.` `.-.. +sdhhho.` syhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhh +hhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhh.` +sdhhyy ` `.------.. `.------.` ` `-:+ossssooooooooooooooooossso/.``.:-- .-ossss/:` ::+/////++/:` -:+//////////-` ./oyooooooooooyo:` --.` ...```` ``.....---..`` ``..--://////////::----......````` `.------.` ``` sydhhy+` ``yhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhh +hhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhd-. /oddhhh.` `-.` `.-------`` `-----:-.` :/oossssooooooooooooooooosssso-. `.::-` ...` .:ossso+. ``...--::/.` `.++////////+/-` .:sssoooooooooss+`` :- ``+++//::-..` `.--:////////::--...``` `````````````` `.------.` ``yhhdds/ `.hhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhh +hhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhd:. -:ddhhd-. `.-:`` `.-------`` `.--.. `./+ssssooooooooooooooooooossso/-. `-::.` ../++:- ``/osss+/ ``` `.:////////////:` +ossoooooooooss+: .-:- `.::---..``` ``.---:://:::--..````` `..--::://++++++ooo++++++/::--.` `.------.` ..dhhdd+: .-dhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhh +hhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhdd/- .-dhhdd+: `-:--.` ``-------`` `` `:/osssooooooooooooooooooossso+-.```:::.```-:////++.. `.ossss:- `` `.//+////////++.. .-ssooooooooooosy-. -/-. ````` ``..---------..`````````````..::///+ooosssssssssssssssssssssssssso++/:..`` `.----:-` -:ddhdd:. .:ddhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhh +hhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhddo: ``hhhhds/ `.-----. `.------.. `-/sssooooooooooooooooosssss+/:.``.-::-. ``-:+///////+:.` -/ssss+.` ` ``//+/////////+// /ossoooooooooosss`` :/`` ````...`````.....```` ```````--:://+ooosssssssoooooooooooooooooooooooooooosssssoo+/:``` ``` `.--:-` :oddhhh.` -/ddhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhh +hhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhds/ oydhhho` `.----:-.` `..-----` ./oysoooooooooooooosssssoo/:- ``..:::.```.:/++////////+++-` `:ossso-` -:++//////////+-. `:oyoooooooooooss++ `-// ```````` `````...--::/+++oosssssssssoooooooooooooooooooooooooooooooooooooooooossssoo/-.`` ```` `.-. +yhhhyy /oddhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhh +hhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhyo` /odhhdy:` ..------.` .-:.` :/yssooooooooossssssoo+::.. `.--::-.` `.::/++////////////+//`` -/ssso+ -/++////////+/:` `-sssoooooooooooss:. .+:- `````.....---::///++ooooossssssssooooooooooooooooooooooooooooooooooooooooooooooooooooooosssss+/-` `.. `` `.shhhds+ +shhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhh +hhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhds-` ./hhhdho. `.------.` `` ``` +oyssssssssssoo++/:-..```---::-..` ..-////////////////////++:- ``oosss:- ``/////////+/:` +ossooooooooooosso. `-o-` .+++++oooooooosssssssssssooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooosssss:. `-:-.` .+ydhhd+- `.ohhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhh +hhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhdy:` -yhdhhy-` ``-------.` :::` .-/+++++///::-..````..---:-.````.--/////////////////////////+/-` .:ssss+.` -:+/////++.. .-ssoooooooooooooyo:` :/+. .:ysssssssssssooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooosss-` `-:---`` -shdhhy:` `-sdhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhh +hhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhdy+. .+ydhhd+- `-------. -/o:-```````````````.------.`````..::/++////////////////////////////.` ./oyss+. `./////+/: `/ossooooooooooooss+.` o+:` /+ysoooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooys+. `----:-. ./hhhdho. ./ydhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhh +hhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhdhs- `.sdhhds+ `` `.----:-.` `.:::----.......---..`` ``..::/+++///////////////////////////////+// /ossy/- `-/+///.` ./syoooooooooooooss+: ``s/` oossooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooosss+.` ``--:.` /odhhds-` .ohdhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhh +hhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhh:. ``..-.` +sdhhhh`` `... `.---:--` ` `````````` --.` .-/++++////////////////////////////////////++.. .-ssso+ `:++/.` -/ssoooooooooooooosy-. -/o/ ``sssooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooosss:. ` ``.` `yyhhhy+` `.. `-yhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhh +hhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhd+- ``.--:/+osy+/ -/ddydd/- `-:.. `.--::.` `-`` `--------:- ooo- `.//+///////////////////////////////////////+/:` +osss.` -::- ``ossoooooooooooooosoo` +s:- -/yysooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooosss/: ``-.` -:ddhdd+: .:ooo`` `` ./dhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhh +hhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhdo+ `.-::/+ossyssossso` `.hhhhds+ ..:-.` `--:-. `--. .//+/////+/.` /+h/- `-/+////////////////////////////////////////+/-` -/yyy/- ```` :+ssoooooooooooooosy+/ `-oy`` -:ooosssssssoooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooosss+-` `.-:--.` /oddhhd-. `osyso`` `./++//:.` :+dhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhh +hhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhdys `.-:++ossyyssso+/-.`-osy.. osdhydy-` `--:--` `--: `-- `./+/////+/:` `:yo+ ://///////////////////////////////////////+//. -osyo/ `:oyooooooooooooooosss:` .ooo ``..-:/++ossysssssooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooossyoo.` `------:`` `.sdhhdys .-yyo-` +oyyyyyyso.` osdhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhh +hhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhh`` ./shsso++-:/sy/- `-sh+: ./dhhdhs- ..:----` `..` -:`` -/+//////+-` `:sh-. ..++////////////////////////////////////////+:. `:oys+.` :/ysooooooooooooooooys/. .:h+: ``` `.-::/+oossssssssoooooooooooooooooooooooooooooooooooooooooooooooooooooooosss+:` --:-- .ohdhhd+- :+ho-` .:yyo:.-:+syo/` yhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhh +hhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhdd:- `.+ss+.` `+ss+` `+ss+` -shdhhd+- `------.. ` ..:. .-++/////+/: `+yo/` //+///////////////////////////////////////+/: `+syo:-.sssooooooooooooooooss+.` /oy:` `.---..``` `..-:://+ooosssssssssoooooooooooooooooooooooooooooooooooooooosssss+/.` ``---`` `.`` ./hhhdhy- `+ss+` `/oyo:` `.+syo.` .-dhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhh +hhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhyddo/ :+yo.` :+hs:` :+hs:` `-sdhhdys `..-----.. `:-```/////////+`` -/hs:` .-+////////////////////////////////////////// :ossooossooooooooooooooooss+: ``ys+. ..-::---.` ``..--::/++ooossssssssssoooooooooooooooooooooooooossssss+/-` --::---` +sdhydy:` `/syo:.``./syo/` `.+yo/` :+ddhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhh +hhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhy+` .:hs/. .-hy+. .-so:` +sdhhhd-. .-------`` ---` -:+/////++-. `.yss:. `-/+//////////////////////////////////////++.` -/sssssooooooooooooooooooss.. -:hs:` `` `.-:----.` `....``` ```..--://++ooosssssssssssssssssssssssssssoo+/--`` `.------.. `.hhhhhy+` -:yyso+/+syy-. ./sh/- +sdhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhh +hhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhdy-` ``sss:` ``:-.` ```` .-ddhhds/ `.-------`` `./. `.+///////+:` /oho+ -:++////////////////////////////////////++.` -/ysooooooooooooooooooosso+ `/ss+` ---` `--:----.` ``--:----.` `````..-::///++++ooooooooooo++//:-.``` ``.--. `.-:--::`` /oddydm/- :/ossyyy+/ .:syy.. `.sdhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhh +hhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhdho. /oho/ ``.-: osdhydy:` ``-------.` `::: `-/+/////+/:` `-syy/- `//+///////////////////////////////////++.` -/ysoooooooooooooooooooss:. `:sh/: `--:--`` `.-------` `.-:--:-. ``..`` `````````````` `.::----.` .-:-- `-sdhhdys ``` ``.--.` `.syyo/ ./ydyhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhh +hhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhy:` -:o:- `.++syy-. ./hhhhhy:` ``------.. `:/`` -/+//////+-. `:oyso:` `-//+///////////////////////////////////` :+ssooooooooooooooooooss+. `-osy.. ``-------`` `.------.` `.------.` `..-----..` ``` ` ```...` `-------`` `.`` `-shdhhd+- `.so/. `.o+/.` -shdhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhh +hhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhd+: :+yys+/.` .+ydyhds+ ..---::.` -::- `.++/////+/: `/osss/- `.:/+///////////////////////////////+/: `/sssoooooooooooooooooos+.` :+yo+ `.------.. `.------.` ..------.` ..--:---`` ..---...`` .-:::--.` ``-------.` /odhhdho. -/hy+. `` -/dhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhh +hhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhyhdyo `..`` `-oys+.` `oyhhhhd-. ..--:-. ``+/.` :/+/////++.. .-sssss-. `.//+/////////////////////////////+:. `-oyooooooooooooooooooss+: ``ssy/- `.------.. `.------.` `.------`` `-------`` `.-:::---`` ``.-------` ``.------. `.hhhhhho.` `.+ys+` `.-.` +sdhyhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhh +hhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhh`` `.:/+os+/:.. ./sy+: -:ddhhdy+` `` ``--:-.` ::+. `-+////////:` /+ysss+-` `.:/+/////////////////////////+//. `-ossooooooooooooooooosss.` -/yyo- `-.` .-------`` `.-:----.` ``--:----.` ``-------.` ``-------` `.------.` `.-::-- /sdhydd/- ./sh:- `:sy/: `-:`` `yhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhh +hhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhydd+: .:yyoo+ssyso++oss.` osdhydho. ``.`` ``--:.` .+/: `./+/////+/:. `.+sssss+/```.-//+////////////////////++/:` /+ssooooooooooooooooosy+/ `.+syo-` ..:--.` ``-------`` `.-------`` `.-------` `.------. ``------.. `.------.. ..-`` ./ydyhdys` ./yso` `-oyy-. ./sh:- -:ddhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhh +hhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhy+` ``::.``.-/++sssss+/:.````.-`` `:yhhhhd+: `..`` ``--- `./o.` -:++/////+:- ``/osssss+:```.-:/+/////////////////+//`` .-sssooooooooooooooooosso-` .+sy+: .-:----.` ``-------.` ``------.`` `.------.` ..------.` ..-----.. `.------.` -/hhhhhh/. +oyoo..`` :+ho+ .:yss`` +sdhyhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhh +hhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhdy:` `.ossoosssoo/++sy:- `:ydhhhhh.` ``-.` .-`` -:+:```//+/////++.` `.ssssosso:-`` .-/////////////////:.```-+sssooooooooooooooooosso-` -/yss.` ``.------. `.------.. `.------.` ..------.` ..------.` .-------`` .------.` ``yydhhdy/. `+osssso+::ooy:. /oh+/ `-sdhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhh +hhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhydhs- .-yso:.--/oossso+-. :+ddyhds+` ..-.. .`` +//. `-//+/////+:.` .:ossoosss+/.````.--::::::::--.` `./+sssooooooooooooooooooss/- ``ssy+: ` `.------.` ..-----..` `.------.. `.------.` `.------`` `.-------`` `.---::.` `/oddyhdo/ `.-:/oossssso/-.` `.yss-` .ohdyhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhh +hhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhd+- :+hs/. `.--.```.-` ``sydhydyo. .-:.` ` `-+/: `.:++///////-. `./ossoossso+/--.`` `````` ``.-:+osssoooooooooooooooooosyo+```:+ys+. `-.. `.------.` ..------.` .-------`` `.------.` ``-------.` ``-------`` ``--.` ./ydhhdhy.` `.-:/oosssoo//+ys:` ./hhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhh +hhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhyhdyo `-:/oss+.` +oy/- .:yhhhhdo+ ``:--` ./+-. `.//+///////.. `.+ossooossssoo++/::::::/++oosssooooooooooooooooooooss+-` ./syo/` .-:--.` `.------.` ``.------`` `.-------`` `.-------`` ``.------.` ``-------. `` /odhhhhh/. `.://`` `..-//oosyyo/` +sdhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhh +hhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhh.. `.syyss:- :+yso`` `-shhhhhd:- `.:--` `.+/-``.-//+///////-` `./osssooosssssssssssssssssoooooooooooooooooooooss+/`` :+yss-. .-:----.` `-------.` ``-------.` ``-------`` `.------.` `.------.` ..------.` .-hhhhhdy:` `+osyy-. `` ```.:/+:. `.hhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhh +hhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhyyddo: ///-. ./sy/: -/ddhhhhs-` `-:-.` .-+::```-:++////++:-```-:ssssooooooooooooooooooooooooooooooooooooosso+`` -:yyy+: `.-------` `.------. ``-------. `.------.. `.------.` ..------.` ..---:-` `.ohhhhdd+: -/yys/:` :/o/-`` `` :/ddyyhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhh +hhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhds.` .-:osyo-` +odhhhhh/- ``--:.. `://:.` ..::////++/:.` .-+osssoooooooooooooooooooooooooooooosssso/. `./oyyo/` ```` ``-------` `.----:-.` ..----:-.` ..----:..` `.-----:.` `.------.` `--`` ./hhdyhdso `-oys+.` .-yyyyyo+:.` `ohhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhh +hhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhydho. `.::ossoosss:. .ohdhhhhh-. ``-::.` :/+/:.` ``..---:::.` .-/+oooooooooooooooooooooooooooossso+-. `.+oyss:- ``--:-. `.------.. `.------.` ..------.` ..------`` `.------.`` ``-------.` ` ..yhdhhdhs-` `-osy:- `/oso://syy+/ .+ydyyhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhh +hhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhd/- ../+osyso/-.:+yo+`` `/odhhhhhs:` `..:--`` `.:/o+/:-..`` ````` ```.-:+osoooooooooooooooooooosssss+/-.```-+oyso:- ``::----.` `..-----.. `.------.` `.------.` ``-------`` `.-------`` ``.------- `-oydhhhds+` :+yso` .-:. ``:/yss`` ./hhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhh +hhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhyhdys .-/ooyss+/..` `-oyh/- ``osdhhhhh+: ..:--`` ``-:+ssso+/////////++ooooooooooooooooooooosssssoo+:-`` .-+oyys/:.` ..------.` .-------`` `.-:----.` `-------.` ``-------.` ``-------` `.-::-. -/hhhhhdys`` -/yss.. `:syy-. +sdhyhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhh +hhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhdd-. `.:/ssyss+/.`` `./o.. `-shdyhhhh:- `--:-` `.-ooyyysssssssssssooooooooooossssssssoo+/:```` .-/syyso:-` `..` ``-------`` `.-:-----`` `.-:----- `--:--:-. ``--:---.. `.------.. ...` .-hhhhydhy:` -osyo+/.` :+yso`` `.hhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhh +hhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhyhdy+` .+yhso/-. `./-. /oddhhhdy/.` --:-. ```` `.:/++oossssssssssssssssoo++//::.. ```.-:+oyys+/.. ``--::-.` ``-----:-.` ``-------`` ``------.` `.----:-.` ..----:-. .-----:.. .:ydhhyhds/` `:/ssyss/:.`` .-yys:. +sdhyhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhh +hhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhydy/. `.:/.` `--osyso`` +sdhhhhds+`` `.--..` `...`` `...-------------...`````....-:/++ooo++--.` ` ``.----:--` ``.------.` `.------.. `.------.. `.------.` ..------.` .------` ``/odhhhhdso`` .-/osyys+/--:+syo:` `:ydhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhh +hhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhh/. -:+syso+syo/` ./yhhhhhds+.` ``---.` ``---..``` ``..--:///////:::-.`` ``..-.` `.------.` `.------.` `..-----..` `.------.. `.------.` `-------`` `..-`` `./odhhhhdy+-` ``.````` `.:/osssssss/: `:hhhyhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhh +hhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhyhdyo `-/ssyso-..:+hs+. -:hhdhhdhy+: ``.-`` `.-:----.` ````.....``` ``--:---.. `.------.` ..------.` ..------`` `.-:-----` `--:----.` ``-------.` -/yhdhhhhd/-` `-+ooo+++///:-. `.-:+/:--`` +sdhyhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhh +hhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhdd:. -:ossoo/.` ``osyo/ -/hddyhhhh/: `..`` `.::----.` ``......`` ``------. `.-:----.` `.-:----.` `-------`` `.-------`` `.-:-----` `.-:----- `--::::.` -:hhhhyddh+: `+oyssosssyyyyss/-` `` .-dhhhyhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhh +hhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhyhhho` `./+yysss+/` `-oyy:- `/sddhhhdhs:. ``` `.------.. ..::::--.` ..:-----.` .----:--`` .-:--:--` -----:-.` ``-----:-.` ``-------`` `.------.` `...` `-ohdhhhhds+.` -:hyo-```..--:/+oyss/:` `+ydhyyhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhh +hhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhyydho- :/syyo+:/+ys/.` `-oyh/- +ohhhhhdhh/:` `.------.. `.------.` `-------`` `.-------`` `.-------` `.------.` ``-------. `.------.. `.------.. `-:yhdhhhhhs+`` .-yss-` :/sssss+:.`` .+ydhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhh +hhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhyyhhd+: /+y+/.` `.osy+:`` ..+osss.. `:oydhhhhhyo:- .------.`` ``-------.` ``-------.` ``-------`` `.------.` `.------.` ..-----..` `.------.. `.----.. .:oyhhhhhdys/. +oho/ `-+so+:+oyys:. -/dhhyyhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhh +hhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhyhhhh.` `.-`` .:sss///+oyso:- `.oshhhhhdhy/:` `.-------`` `.-------`` ``.------. `.------.. `.------.. `.------.` ..------.` .------.`` `..` `-/yhdhhhhdyo-. -/yss.` -/syy-. `.++o-` ``yydhyhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhh +hhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhyhds+ -/ssssssss/:.` `.:syddhhhhhy+: ``--:::--` `.------.` `.:-----.` `..:----.. `.-:----.` `.------.` `-------`` `.---::-- :/shhhhhddhs/.` ``.` .+sy+:`..ssy/- ``` /oddhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhh +hhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhyhdy+. ..sss/-..-.. ````.-:.. ``+shhhhhhhhs+:.` ``..--:-. `.------.. `.------.` ..------`` .-------`` .------.` `-------.` ``-..`` ``-+ohhhhhhhhso.` `+oy+: `./oysoooso-` ./ydhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhh +hhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhyhhd+: `/oys/. ``-://+ooosss+:.` `.-+shhhhhhhhso-.` ``..-..` `.------.` `.------.` ``-------`` `.-------`` `.-------` ``.----:-. `.-oshhhhhhhhso:.` :/ssy/-` `.++ssss+.`` -/hhhyyhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhh +hhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhyhhhh.` `+so/` `./osssssoo+//ssy/: ``/+yhhhhhhhyyo:-`` ``` `.----:-.`` ``-------.` ``-------.` ``-------`` `.----:-.` `.-..`` ``-:+sydhhhhhhyo/`` `-+sys/.` .:+osso/:` ``yydhyhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhh +hhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhyyhds+` .--. :/sss+/:--.`` /oho+ `.:+yhhhhhhdhho+:.. `.----:--`` ``.------.` ``-------. `.------.. `.------`` `.:+oyhdhhhhhhh+/-` ` .-ssy:. `./+yss`` `/oddyhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhh +hhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhdho. `-/syyso`` `osy/- -:+sydhhhhhhhys/:.` ````.....` `.--:::--` `..--:::-.` `..-----.` `````` `.:/syhhhhhhhdys+:- `-+/: osy+:`` ``--- ./ydhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhh +hhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhyhhdo+ .:+syoo+sy+:` .-yso-` ``./+shhhhhhhhhyso::.`` ``......`` ..-..-..` `````` ``-:ooyhhhhhhhhhyo+..` -/yyy/:` -:ssssso+/-. /odhhyyhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhh +hhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhyhhhd:- /+yso..`/+yso-. :/hs+. ``.:/syhhhhhhhhhyyo+:-``` ```--+osyhhhhhhhhhys/:.`` `.:osys+-``.:osso//+sssss+/:.` .-hhhhyhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhh +hhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhyyhhhs-` `-/-. ``+oyso...+syo-` ``--:::..` `.:+ohhhhhhhhhdhyso+:-.`` ```--+osyhdhhhhhhhhhso:.` ``--:.` .-ssyo+/+sss-. ``-:/ooyso-` `.ohhhyyhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhh +hhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhyydhh/. ./osoossy/- `/+sssyyso/-. -:/oshhhhhhhhddhhyso/:-..`` ``..-:/osyhhddhhhhhhhhso+:- .-/ossyy/- .-+syyss:. `.:-` .:yhdyyhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhh +hhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhyhdhy.` `/oyys/: `-+syo+:::osyso-. ``-:/osyhhhhhhhhhhhyyyoo+/:--..`` ```.--://+oyyyhhhhhhhhhhhhso+:-.` .-osyss/::.. `:/sss/:` ``sydhyhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhh +hhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhyhhdy+.` -:osso+-` ``+oyso.` .-/osso/. `.-:/ooyyhhhhhhhhhhhhhyyysso+//:::---..``` ```..---::://+ossyyyhhhhhhhhhhhhhyyoo/:-.` `-osso+-. ``:/ssy+:` `+sdhhhyhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhh +hhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhdhs:. +oyso.` `:+yyo:. `-:sss:. ```.-:/+ssyyhhhhhhhhhhhhhhhhhhyyyyssooo+++++++++++++++++++oosssyyyhhhhhhhhhhhhhhhhhhhyss+/:-.``` .+sh/:` `-+syso-` `-ohdhhyhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhh +hhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhyhdys`` `./.` .+sys+.` `ssy/- ```.-:++osyhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhdhhhhyyso+:-.```` -oyy:- `.sso-` `oydhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhh +hhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhyyhdy+. :+yss.` `-/yss:. ``/:.`` ``..-:/++ossyyyhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhyyysso++/:--.`` ` ./sys+.` ``` ``` `/sddyhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhh +hhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhyydhs:. +oho/ ./oyso-` :+yys+/..` ```..--:::::///////+++++++///////::::---..`` `.-/:-.. `:+yys:. `-o+/` `-ohdhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhh +hhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhdyy.` /+ho+.` :+yys:. `:oyoo+ssso/:- .-+ossssoo:-.` ``+oyso.` ``+oho+ `.sydhhyhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhh +hhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhdyo.` .:ssyo+-` -:yyy/: .:syy--`--ooyss/:` /+yso::/osyso+/`` `-+syo/.` `-/oyys:. `+sdhhhyhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhh +hhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhyydhh/. ``/+yys+/::/osyo:. osyo+ `.:+syo-` /oh+: `.-+oyyy+: `/oyso///+syyo/.` .:yhdhyhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhh +hhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhyhhdd:- -/oyyyyyys:- :+yso. :/hs+. ``..` `````` /oh+: `./oys+. `+osyyyys/: .-hhdhyhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhh +hhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhyhhdy/.` `.-::::-- `-oysso:-`` `.+syo:` :+ys+/:..` `..:/+osoo/-. /oh+: ``:/yyy/- `-----.` .:shhhyhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhh +hhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhyyhhds+`` .:sss++oss+/-...:osy/: `.+ssssssso+/:.` `.-:+osssso+osyso`` /oh+/ `.:/oosoosss.` ``/ohhhyyhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhh +hhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhyhhhds+.` `+oyo+`..:+sssoossyso`` .+sy+:.--+ossss+-` `.+ssssoo:-.``.:oyy:- :+yso..-+oyss+/.-+syo/` `/odhhhyhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhh +hhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhyhhdhy/- -:hys:. ``:/yssoo+-. .:yyy.` ``.:+yso-` ..:-.` `/sys/.` `:oyo/` `-ossoosss/:.`` `+syo-` .:yhdhhyhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhh +hhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhyhhhh/:` ``/:-` :+ho+`` +oyo/ `ssy/: :+yyso+//:.` -:o/.` .-yyo-` `/oyo-` `.+syso-` `.`` `-:hhhhyhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhh +hhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhyhhdyo:. /oh+: .-yys:. `.sss:. `.:/sssssy:. `:/-. `..` :+hs/. osy+/ ``.:oss+.` .-yss:. .-+yhhhyhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhh +hhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhyhhdys-. osh/- :+ys/. :/ys+. -/yso..-.` `-oys+-` `.-`` ````` ````````.....`` `+os:. -/hs+. -/yss...:/oosss/- /oyso`` .-sydhhyyhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhh +hhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhyhhhhhy+-` -/o:. `-oys+.` `.+sy+.` +oh+/ `:oysso- `:sy/- `:/++//-. ``//+++ooooosss++.` osho/ :+ys:` .+syooossoo/:-` `-o/:` `./shdhhhyhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhh +hhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhyyhhdys-. ``` .+sy/: ./sh+: `.sss:. .+osssy/- ./yh:- :+yssssyoo`` ``sssooo++++/+osyo/` -/yys/-` `.oys+` `-oyss+:-.`` `` `.oshhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhh +hhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhyhhhhhy+.` .:ssyo+/:-`` -/sss.` -/hs+. `-sss:/sss`` .osy.` .-yys/:.:+sy+: `osy/-```````.+sy+.` `-+syso:. .+sh/- :+ys/. `./shhhhhyhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhh +hhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhyhhhhhys-.` `.-:/oosss++///osyo/ `/oyo:` .:yoo`./sh/- `-sss`` ./oys/. `.+syo-` osy/- /oyo-` ..+oyso/+sss`` ..ssy/- `..oshhhhhyhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhh +hhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhdhs+-. ..://ossssso+-` `.oys+` -/ho+ `+ss+.` -/yo+ .+syo/` -/yso-` +oh+: `/oys:` `./ossss+/ +oho+ `-/sydhhhyhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhh +hhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhyyhhdyy:-` ..-::.` `..-/sh/: /oh+/ -:hs+. :+h+/ .:yss.` `osy+: /+yo+.....--/oss+-` .-ssy/- .-/-. `.-sydhhyyhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhh +hhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhyhhhhhyo:- `/osssyy/:.` +oy/- ``osy:.:+h+: .:yso...```````+oy+: :/ysooossssssss:- +oy+/ .:+yhhhhhyhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhh +hhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhyyhhhhh+/.` `-:/++ooss+. ``sss:` -/yoooos:. .:ssoooooooooooosy/: -/yso++//::/osy-. -/yso` `.:+yhhhhyyhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhh +hhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhyhhhhhhyo/`` ```..:::` .-hyo- .+sssso-` -/yso////++++++osy/- .:yss```` .:syo/` `:sso`` ``/+yhhhhhhyhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhh +hhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhdyo:.` `.o+:` `.+yys+. -/yso``````````osy/- `:sss.` `/oys/. `... `.:osdhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhh +hhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhyyyhhdys:-.` -:so:` -/hso `ssy/- `-oyy-. ..ooo-. `-:syhddyyyhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhh +hhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhyhhhdhhs+:.` .`` .-/:: `/++:. `://.` ````` `.:/syhdhhhyhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhh +hhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhyyhhhhhyo/-- ```` .-/oshhhhhyyhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhh +hhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhyy+/-` `./+yyhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhh +hhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhdhhso-. ..oshhdhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhh +hhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhyhhhddhy+/.`` ``./+shhddhhyhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhh +hhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhyhhdddyyo/:..` ``.-:osydddhhyyhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhh +hhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhyhhhhhhhys+/:.` `.::+sshhhhhhhyhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhh +hhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhyyyhhhhhhhss+/:.` ``-:+oshhhhhhhyyyhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhh +hhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhyhhhhhhhhhyso/:`` ``:/+syhhhhhhhhhyhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhh +hhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhddhys+/--``` ```.-/+syydddhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhh +hhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhysoo/:-..``` ```...:/oosyhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhh +hhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhyyyoo/::--.``` ```..-::/+osyyhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhh +hhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhyhhhhhhhhhhyysso++::--..`` ``..--::/+oosyyhhhhhhhhhhyhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhh +hhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhyyyss++//:--...``` ```...--::/++osyyyhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhh +hhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhyyyyssoo++++/////:::::::::::::::::::://///+++++osssyyyhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhh +hhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhh +hhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhh +hhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhh +hhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhh +hhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhh +hhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhh +hhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhh +hhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhh +hhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhh +hhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhh +hhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhh +hhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhh +hhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhh +hhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhh +hhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhh +hhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhh +hhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhh diff --git a/vendor/league/climate/src/ASCII/the-league.txt b/vendor/league/climate/src/ASCII/the-league.txt new file mode 100644 index 0000000..56420c5 --- /dev/null +++ b/vendor/league/climate/src/ASCII/the-league.txt @@ -0,0 +1,51 @@ +hhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhh +hhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhh +hhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhh +hhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhyysoo++//////++oosyyhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhh +hhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhyo+/-.`` ``.-:+oyhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhh +hhhhhhhhhhhhhhhhhhhhhhhhhhhhhhs+:.` `.:+shhhhhhhhhhhhhhhhhhhhhhhhhhhhhh +hhhhhhhhhhhhhhhhhhhhhhhhhhyo:.` `` `.` `.` `.:oyhhhhhhhhhhhhhhhhhhhhhhhhhh +hhhhhhhhhhhhhhhhhhhhhhhyo:` . :/-. -/./`./.-. /` . `:oyhhhhhhhhhhhhhhhhhhhhhhh +hhhhhhhhhhhhhhhhhhhhhy+. `.` /- `o-. +:-+-/-`/:-/ `+ ::-. ./yhhhhhhhhhhhhhhhhhhhhh +hhhhhhhhhhhhhhhhhhhs/` ` .+-- `+.-./--`.` ```---`::./.:/-.` ` `/shhhhhhhhhhhhhhhhhhh +hhhhhhhhhhhhhhhhhy/` . .+.-+--. ``` ```.....`` ````/:-` `/-:- `/yhhhhhhhhhhhhhhhhh +hhhhhhhhhhhhhhhy+. `- :::-:--.` .-:/++++//////++++/:-.` `` `+. -+`.` `+yhhhhhhhhhhhhhhh +hhhhhhhhhhhhhhy- -//` ./` ` .:+++:-.`` ` ` ` ``.-:+++:. -:::-/::- -shhhhhhhhhhhhhh +hhhhhhhhhhhhho` ` `:: ` `:++:.````.`...........`.`````.:++:. -.`- ` `ohhhhhhhhhhhhh +hhhhhhhhhhhh+` ` .+o:.```.`..`..`................` .:o+. +hhhhhhhhhhhh +hhhhhhhhhhh+ .+o-``.`..`..`..`..`..`..`...........```-o+. /hhhhhhhhhhh +hhhhhhhhhh+ `/s- `..`..`..`..`...--:::::--.``........```-s/` +hhhhhhhhhh +hhhhhhhhhs `o+```..`..`..`.-/++oooooooooooo+/-..`..`.`````+s. ohhhhhhhhh +hhhhhhhhy. .y: .`..`..`..`:ooooooooooooooooo+/:-::-...-`..` :y. `yhhhhhhhh +hhhhhhhh/ . .y: .`.`.:---. /oooooooooooooooo/::/:-:++:..`..... -y. . /hhhhhhhh +hhhhhhhy` `.:s:`` s/ .```+ooooo/-ooooooooooooooo+::/+./ooooo+...`..`. /y` `.:s:`` yhhhhhhh +hhhhhhh+ `/ooooo/` /s ..` :ooooo+`ooooooooooooooo//:+/.+oooooooo.`..`..` s/ `/ooooo/` +hhhhhhh +hhhhhhh. oooo/ h-`.`` :ooooo.:-ooooooooooooo:--/+`ooooooooooo`.`..`.`-h` oooo/ .hhhhhhh +hhhhhhh `. `- -h ``.. `+oos.///-/oooooooooo-----./oooooooooos.`..`..` y: `. `- yhhhhhh +hhhhhhy +s `..`` :oo:-///:-:+oooooo-/-/o-.sooooooooooo ..`..`. o+ yhhhhhh +hhhhhhy ++ ..`.. `:o/-/////:-:/oo-/:/o+ oooooooooooo-`.`..`.. ++ shhhhhh +hhhhhhy +o .`..`.. `-:.-.-:///:.-/::oo.-ooooooosooo+`.`..`..` o+ yhhhhhh +hhhhhhh -y `..`..`..:+ooo+../-:/--//:oo/.:::///::-...`` ` ..`. y: yhhhhhh +hhhhhhh. `h-`.`..`-+ooo+/--:/-/:`://-ooo-`.`.-:::/++ooooo+:-``.`.h` .hhhhhhh +hhhhhhh+ ` /s `..`.---.-:://///::/:::ooo:-+oooooooooooooooooo:`. s+ /hhhhhhh +hhhhhhhy .:/:/` `y/ .`.`-/-/-////////:/-/ooo/:`://++oooooooooooo/-`. :y` `/`::` yhhhhhhh +hhhhhhhh/ `/`.`: .y- ..`.:/-/-////////.ooooo:-.`..`....:::///:-..`. -y. .::`/` :hhhhhhhh +hhhhhhhhy` `--/:` .y: `..-:/-//://///:/oooo:/.`..`..`..`..`..`..`. :y- /.:`-` `yhhhhhhhh +hhhhhhhhhs `::.-- .s+````.:/::++/::/+ooo+::.`..`..`..`..`..`..```/s. ..:/-: ohhhhhhhhh +hhhhhhhhhh+ ``.-/: `/s-````-:::/ooooo++/:-.`..`..`..`..`..`..` -s+` /-`:/` +hhhhhhhhhh +hhhhhhhhhhh/ ..``::. .oo-```.-:::::::--...`..`..`..`..`..`.``-oo. ..-:--: /hhhhhhhhhhh +hhhhhhhhhhhh+ -:/.+` .+o:` `.``..`.......`..`..`..`.````:o+- `+.::-` /hhhhhhhhhhhh +hhhhhhhhhhhhho` `:.---: ./++:.`````.`...........`.``` .:+o/. ` :-.:/ ` `ohhhhhhhhhhhhh +hhhhhhhhhhhhhhs- -::-:`.. .:++/:..`` `` ` ` ``..:/++:. ``-::::.` -shhhhhhhhhhhhhh +hhhhhhhhhhhhhhhy+` :.-:.-: ` `.-//+++////////+++//-.` ` ::` .:- `+yhhhhhhhhhhhhhhh +hhhhhhhhhhhhhhhhhy:` /-.:./-:. ` ``......`` `` /-:-:--: `:yhhhhhhhhhhhhhhhhh +hhhhhhhhhhhhhhhhhhhs:` ```/-/:.:--- .` ` `/././::/``` `:shhhhhhhhhhhhhhhhhhh +hhhhhhhhhhhhhhhhhhhhhs/. : -:`-:`+`:: -` --` :-:`:.-: /:-` - ./shhhhhhhhhhhhhhhhhhhhh +hhhhhhhhhhhhhhhhhhhhhhhyo:` `.--`/- +.:+ /-.+ +-/- -+ - `-oyhhhhhhhhhhhhhhhhhhhhhhh +hhhhhhhhhhhhhhhhhhhhhhhhhhyo:`` `` . .- /../ :`.- . ``:oyhhhhhhhhhhhhhhhhhhhhhhhhhh +hhhhhhhhhhhhhhhhhhhhhhhhhhhhhys+:`` ``-+syhhhhhhhhhhhhhhhhhhhhhhhhhhhhh +hhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhso+:.`` ``.:/oshhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhh +hhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhysso++////////++oosyhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhh +hhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhh +hhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhh +hhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhh diff --git a/vendor/league/climate/src/Argument/Argument.php b/vendor/league/climate/src/Argument/Argument.php new file mode 100644 index 0000000..a1d4e4e --- /dev/null +++ b/vendor/league/climate/src/Argument/Argument.php @@ -0,0 +1,416 @@ +setName($name); + } + + /** + * Build a new command argument from an array. + * + * @param string $name + * @param array $params + * + * @return Argument + */ + public static function createFromArray($name, array $params) + { + $argument = new Argument($name); + $params = self::getSettableArgumentParams($params); + + foreach ($params as $key => $value) { + $method = 'set' . ucwords($key); + $argument->{$method}($value); + } + + return $argument; + } + + /** + * Get argument params based on settable properties + * + * @param array $params + * + * @return array + */ + protected static function getSettableArgumentParams(array $params) + { + $allowed = [ + 'prefix', + 'longPrefix', + 'description', + 'required', + 'noValue', + 'castTo', + 'defaultValue', + ]; + + return array_intersect_key($params, array_flip($allowed)); + } + + /** + * Retrieve an argument's name. + * + * Use this name when internally referring to the argument. + * + * @return string + */ + public function name() + { + return $this->name; + } + + /** + * Set an argument's name. + * + * Use this name when internally referring to the argument. + * + * @param string $name + */ + protected function setName($name) + { + $this->name = trim($name); + } + + /** + * Retrieve an argument's short form. + * + * @return string + */ + public function prefix() + { + return $this->prefix; + } + + /** + * Set an argument's short form. + * + * @param string $prefix + */ + protected function setPrefix($prefix) + { + $this->prefix = trim($prefix); + } + + /** + * Retrieve an argument's long form. + * + * @return string + */ + public function longPrefix() + { + return $this->longPrefix; + } + + /** + * Set an argument's short form. + * + * @param string $longPrefix + */ + protected function setLongPrefix($longPrefix) + { + $this->longPrefix = trim($longPrefix); + } + + /** + * Determine if an argument has a prefix. + * + * @return bool + */ + public function hasPrefix() + { + return $this->prefix() || $this->longPrefix(); + } + + /** + * Retrieve an argument's description. + * + * @return string + */ + public function description() + { + return $this->description; + } + + /** + * Set an argument's description. + * + * @param string $description + */ + protected function setDescription($description) + { + $this->description = trim($description); + } + + /** + * Determine whether or not an argument is required. + * + * @return bool + */ + public function isRequired() + { + return $this->required; + } + + /** + * Set whether an argument is required or not. + * + * @param bool $required + */ + protected function setRequired($required) + { + $this->required = (bool) $required; + } + + /** + * Determine whether or not an argument only needs to be defined to have a + * value. + * + * @return bool + */ + public function noValue() + { + return $this->noValue; + } + + /** + * Set whether or not an argument only needs to be defined to have a value. + * + * @param bool $noValue + */ + protected function setNoValue($noValue) + { + $this->setCastTo('bool'); + $this->noValue = (bool) $noValue; + } + + /** + * Retrieve the data type to cast an argument's value to. + * + * @return string + */ + public function castTo() + { + return $this->castTo; + } + + /** + * Set the data type to cast an argument's value to. + * + * Valid data types are "string", "int", "float", and "bool". + * + * @param string $castTo + * + * @return void + * @throws UnexpectedValueException if $castTo is not a valid data type. + */ + protected function setCastTo($castTo) + { + if (!in_array($castTo, ['string', 'int', 'float', 'bool'])) { + throw new UnexpectedValueException( + "An argument may only be cast to the data type " + . "'string', 'int', 'float', or 'bool'." + ); + } + + $this->castTo = $this->noValue() ? 'bool' : $castTo; + } + + /** + * Retrieve an argument's default values. + * + * @return string + */ + public function defaultValue() + { + return $this->defaultValue; + } + + /** + * Set an argument's default value. + * + * @param string $defaultValue + */ + public function setDefaultValue($defaultValue) + { + if (!is_array($defaultValue)) { + $defaultValue = [$defaultValue]; + } + $this->defaultValue = $defaultValue; + } + + /** + * Retrieve an argument's value. + * + * Argument values are type cast based on the value of $castTo. + * + * @return string|int|float|bool + */ + public function value() + { + if ($this->values) { + return end($this->values); + } + $cast_method = 'castTo' . ucwords($this->castTo); + return $this->{$cast_method}(current($this->defaultValue())); + } + + /** + * Retrieve an argument's values. + * + * Argument values are type cast based on the value of $castTo. + * + * @return string[]|int[]|float[]|bool[] + */ + public function values() + { + if ($this->values) { + return $this->values; + } + $cast_method = 'castTo' . ucwords($this->castTo); + return array_map([$this, $cast_method], $this->defaultValue()); + } + + /** + * @deprecated use values() instead. + */ + public function valueArray() + { + return $this->values(); + } + + /** + * Set an argument's value based on its command line entry. + * + * Argument values are type cast based on the value of $castTo. + * + * @param string|bool $value + */ + public function setValue($value) + { + $cast_method = 'castTo' . ucwords($this->castTo); + $this->values[] = $this->{$cast_method}($value); + } + + /** + * @param string $value + * + * @return string + */ + protected function castToString($value) + { + return (string) $value; + } + + /** + * @param string $value + * + * @return int + */ + protected function castToInt($value) + { + return (int) $value; + } + + /** + * @param string $value + * + * @return float + */ + protected function castToFloat($value) + { + return (float) $value; + } + + /** + * @param string $value + * + * @return bool + */ + protected function castToBool($value) + { + return (bool) $value; + } +} diff --git a/vendor/league/climate/src/Argument/Filter.php b/vendor/league/climate/src/Argument/Filter.php new file mode 100644 index 0000000..9be0641 --- /dev/null +++ b/vendor/league/climate/src/Argument/Filter.php @@ -0,0 +1,183 @@ +arguments = $arguments; + } + + /** + * Retrieve optional arguments + * + * @return Argument[] + */ + public function optional() + { + return $this->filterArguments(['isOptional']); + } + + /** + * Retrieve required arguments + * + * @return Argument[] + */ + public function required() + { + return $this->filterArguments(['isRequired']); + } + + /** + * Retrieve arguments with prefix + * + * @return Argument[] + */ + public function withPrefix() + { + return $this->filterArguments(['hasPrefix']); + } + + /** + * Retrieve arguments without prefix + * + * @return Argument[] + */ + public function withoutPrefix() + { + return $this->filterArguments(['noPrefix']); + } + + /** + * Find all required arguments that don't have values after parsing. + * + * These arguments weren't defined on the command line. + * + * @return Argument[] + */ + public function missing() + { + return $this->filterArguments(['isRequired', 'noValue']); + } + + /** + * Filter defined arguments as to whether they are required or not + * + * @param string[] $filters + * + * @return Argument[] + */ + protected function filterArguments($filters = []) + { + $arguments = $this->arguments; + + foreach ($filters as $filter) { + $arguments = array_filter($arguments, [$this, $filter]); + } + + if (in_array('hasPrefix', $filters)) { + usort($arguments, [$this, 'compareByPrefix']); + } + + return array_values($arguments); + } + + /** + * Determine whether an argument as a prefix + * + * @param Argument $argument + * + * @return bool + */ + protected function noPrefix($argument) + { + return !$argument->hasPrefix(); + } + + /** + * Determine whether an argument as a prefix + * + * @param Argument $argument + * + * @return bool + */ + protected function hasPrefix($argument) + { + return $argument->hasPrefix(); + } + + /** + * Determine whether an argument is required + * + * @param Argument $argument + * + * @return bool + */ + protected function isRequired($argument) + { + return $argument->isRequired(); + } + + /** + * Determine whether an argument is optional + * + * @param Argument $argument + * + * @return bool + */ + protected function isOptional($argument) + { + return !$argument->isRequired(); + } + + /** + * Determine whether an argument is optional + * + * @param Argument $argument + * + * @return bool + */ + protected function noValue($argument) + { + return $argument->values() == []; + } + + /** + * Compare two arguments by their short and long prefixes. + * + * @see usort() + * + * @param Argument $a + * @param Argument $b + * + * @return int + */ + public function compareByPrefix(Argument $a, Argument $b) + { + if ($this->prefixCompareString($a) < $this->prefixCompareString($b)) { + return -1; + } + + return 1; + } + + /** + * Prep the prefix string for comparison + * + * @param Argument $argument + * + * @return string + */ + protected function prefixCompareString(Argument $argument) + { + return mb_strtolower($argument->longPrefix() ?: $argument->prefix() ?: ''); + } +} diff --git a/vendor/league/climate/src/Argument/Manager.php b/vendor/league/climate/src/Argument/Manager.php new file mode 100644 index 0000000..a18410b --- /dev/null +++ b/vendor/league/climate/src/Argument/Manager.php @@ -0,0 +1,261 @@ +filter = new Filter(); + $this->summary = new Summary(); + $this->parser = new Parser(); + } + + /** + * Add an argument. + * + * @param Argument|string|array $argument + * @param $options + * + * @return void + * @throws InvalidArgumentException if $argument isn't an array or Argument object. + */ + public function add($argument, array $options = []) + { + if (is_array($argument)) { + $this->addMany($argument); + return; + } + + if (is_string($argument)) { + $argument = Argument::createFromArray($argument, $options); + } + + if (!$argument instanceof Argument) { + throw new InvalidArgumentException('Please provide an argument name or object.'); + } + + $this->arguments[$argument->name()] = $argument; + } + + /** + * Add multiple arguments to a CLImate script. + * + * @param array $arguments + */ + protected function addMany(array $arguments = []) + { + foreach ($arguments as $name => $options) { + $this->add($name, $options); + } + } + + /** + * Determine if an argument exists. + * + * @param string $name + * @return bool + */ + public function exists($name) + { + return isset($this->arguments[$name]); + } + + /** + * Retrieve an argument's value. + * + * @param string $name + * @return string|int|float|bool|null + */ + public function get($name) + { + return isset($this->arguments[$name]) ? $this->arguments[$name]->value() : null; + } + + /** + * Retrieve an argument's all values as an array. + * + * @param string $name + * @return string[]|int[]|float[]|bool[] + */ + public function getArray($name) + { + return isset($this->arguments[$name]) ? $this->arguments[$name]->values() : []; + } + + /** + * Retrieve all arguments. + * + * @return Argument[] + */ + public function all() + { + return $this->arguments; + } + + /** + * Determine if an argument has been defined on the command line. + * + * This can be useful for making sure an argument is present on the command + * line before parse()'ing them into argument objects. + * + * @param string $name + * @param array $argv + * + * @return bool + */ + public function defined($name, array $argv = null) + { + // The argument isn't defined if it's not defined by the calling code. + if (!$this->exists($name)) { + return false; + } + + $argument = $this->arguments[$name]; + $command_arguments = $this->parser->arguments($argv); + + foreach ($command_arguments as $command_argument) { + if ($this->isArgument($argument, $command_argument)) { + return true; + } + } + + return false; + } + + /** + * Check if the defined argument matches the command argument. + * + * @param Argument $argument + * @param string $command_argument + * + * @return bool + */ + protected function isArgument($argument, $command_argument) + { + $possibilities = [ + $argument->prefix() => "-{$argument->prefix()}", + $argument->longPrefix() => "--{$argument->longPrefix()}", + ]; + + foreach ($possibilities as $key => $search) { + if ($key && strpos($command_argument, $search) === 0) { + return true; + } + } + + return false; + } + + /** + * Retrieve all arguments as key/value pairs. + * + * @return array + */ + public function toArray() + { + $return = []; + + foreach ($this->all() as $name => $argument) { + $return[$name] = $argument->value(); + } + + return $return; + } + + /** + * Set a program's description. + * + * @param string $description + */ + public function description($description) + { + $this->description = trim($description); + } + + /** + * Output a script's usage statement. + * + * @param CLImate $climate + * @param array $argv + */ + public function usage(CLImate $climate, array $argv = null) + { + $this->summary + ->setClimate($climate) + ->setDescription($this->description) + ->setCommand($this->parser->command($argv)) + ->setFilter($this->filter, $this->all()) + ->output(); + } + + /** + * Parse command line arguments into CLImate arguments. + * + * @param array $argv + */ + public function parse(array $argv = null) + { + $this->parser->setFilter($this->filter, $this->all()); + + $this->parser->parse($argv); + } + + /** + * Get the trailing arguments + * + * @return string|null + */ + public function trailing() + { + return $this->parser->trailing(); + } + + /** + * Get the trailing arguments as an array + * + * @return array|null + */ + public function trailingArray() + { + return $this->parser->trailingArray(); + } +} diff --git a/vendor/league/climate/src/Argument/Parser.php b/vendor/league/climate/src/Argument/Parser.php new file mode 100644 index 0000000..1badc63 --- /dev/null +++ b/vendor/league/climate/src/Argument/Parser.php @@ -0,0 +1,309 @@ +summary = new Summary(); + } + + /** + * @param Filter $filter + * @param Argument[] $arguments + * + * @return \League\CLImate\Argument\Parser + */ + public function setFilter($filter, $arguments) + { + $this->filter = $filter; + $this->filter->setArguments($arguments); + + return $this; + } + + /** + * Parse command line arguments into CLImate arguments. + * + * @param array $argv + * + * @return void + * @throws InvalidArgumentException if required arguments aren't defined. + */ + public function parse(array $argv = null) + { + $cliArguments = $this->arguments($argv); + + if (in_array('--', $cliArguments)) { + $cliArguments = $this->removeTrailingArguments($cliArguments); + } + + $unParsedArguments = $this->prefixedArguments($cliArguments); + + $this->nonPrefixedArguments($unParsedArguments); + + // After parsing find out which arguments were required but not + // defined on the command line. + $missingArguments = $this->filter->missing(); + + if (count($missingArguments) > 0) { + throw new InvalidArgumentException( + 'The following arguments are required: ' + . $this->summary->short($missingArguments) . '.' + ); + } + } + + /** + * Get the command name. + * + * @param array $argv + * + * @return string + */ + public function command(array $argv = null) + { + return $this->getCommandAndArguments($argv)['command']; + } + + /** + * Get the passed arguments. + * + * @param array $argv + * + * @return array + */ + public function arguments(array $argv = null) + { + return $this->getCommandAndArguments($argv)['arguments']; + } + + /** + * Get the trailing arguments + * + * @return string|null + */ + public function trailing() + { + return $this->trailing; + } + + /** + * Get the trailing arguments as an array + * + * @return array|null + */ + public function trailingArray() + { + return $this->trailingArray; + } + + /** + * Remove the trailing arguments from the parser and set them aside + * + * @param array $arguments + * + * @return array + */ + protected function removeTrailingArguments(array $arguments) + { + $trailing = array_splice($arguments, array_search('--', $arguments)); + array_shift($trailing); + $this->trailingArray = $trailing; + $this->trailing = implode(' ', $trailing); + + return $arguments; + } + + /** + * Parse command line options into prefixed CLImate arguments. + * + * Prefixed arguments are arguments with a prefix (-) or a long prefix (--) + * on the command line. + * + * Return the arguments passed on the command line that didn't match up with + * prefixed arguments so they can be assigned to non-prefixed arguments. + * + * @param array $argv + * @return array + */ + protected function prefixedArguments(array $argv = []) + { + foreach ($argv as $key => $passed_argument) { + $argv = $this->trySettingArgumentValue($argv, $key, $passed_argument); + } + + // Send un-parsed arguments back upstream. + return array_values($argv); + } + + /** + * Parse unset command line options into non-prefixed CLImate arguments. + * + * Non-prefixed arguments are parsed after the prefixed arguments on the + * command line, in the order that they're defined in the script. + * + * @param array $unParsedArguments + */ + protected function nonPrefixedArguments(array $unParsedArguments = []) + { + foreach ($this->filter->withoutPrefix() as $key => $argument) { + if (isset($unParsedArguments[$key])) { + $argument->setValue($unParsedArguments[$key]); + } + } + } + + /** + * Parse the name and value of the argument passed in + * + * @param string $cliArgument + * @return string[] [$name, $value] + */ + protected function getNameAndValue($cliArgument) + { + // Look for arguments defined in the "key=value" format. + if (strpos($cliArgument, '=') !== false) { + return explode('=', $cliArgument, 2); + } + + // If the argument isn't in "key=value" format then assume it's in + // "key value" format and define the value after we've found the + // matching CLImate argument. + return [$cliArgument, null]; + } + + /** + * Attempt to set the an argument's value and remove applicable + * arguments from array + * + * @param array $argv + * @param int $key + * @param string $passed_argument + * + * @return array The new $argv + */ + protected function trySettingArgumentValue($argv, $key, $passed_argument) + { + list($name, $value) = $this->getNameAndValue($passed_argument); + + // Look for the argument in our defined $arguments + // and assign their value. + if (!($argument = $this->findPrefixedArgument($name))) { + return $argv; + } + + // We found an argument key, so take it out of the array. + unset($argv[$key]); + + return $this->setArgumentValue($argv, $argument, $key, $value); + } + + /** + * Set the argument's value + * + * @param array $argv + * @param Argument $argument + * @param int $key + * @param string|null $value + * + * @return array The new $argv + */ + protected function setArgumentValue($argv, $argument, $key, $value) + { + // Arguments are given the value true if they only need to + // be defined on the command line to be set. + if ($argument->noValue()) { + $argument->setValue(true); + return $argv; + } + + if (is_null($value)) { + if (count($argv) === 0) { + return $argv; + } + + // If the value wasn't previously defined in "key=value" + // format then define it from the next command argument. + $nextArgvValue = $argv[$key + 1]; + if ($this->isValidArgumentValue($nextArgvValue)) { + $argument->setValue($nextArgvValue); + unset($argv[$key + 1]); + return $argv; + } + } + + $argument->setValue($value); + + return $argv; + } + + /** + * Check if the value is considered a valid input value. + * + * @param $argumentValue + * @return bool + */ + protected function isValidArgumentValue($argumentValue) + { + return empty($this->findPrefixedArgument($argumentValue)); + } + + /** + * Search for argument in defined prefix arguments + * + * @param string $name + * + * @return Argument|false + */ + protected function findPrefixedArgument($name) + { + foreach ($this->filter->withPrefix() as $argument) { + if (in_array($name, ["-{$argument->prefix()}", "--{$argument->longPrefix()}"])) { + return $argument; + } + } + + return false; + } + + /** + * Pull a command name and arguments from $argv. + * + * @param array $argv + * @return array + */ + protected function getCommandAndArguments(array $argv = null) + { + // If no $argv is provided then use the global PHP defined $argv. + if (is_null($argv)) { + global $argv; + } + + $arguments = $argv; + $command = array_shift($arguments); + + return compact('arguments', 'command'); + } +} diff --git a/vendor/league/climate/src/Argument/Summary.php b/vendor/league/climate/src/Argument/Summary.php new file mode 100644 index 0000000..57f581d --- /dev/null +++ b/vendor/league/climate/src/Argument/Summary.php @@ -0,0 +1,215 @@ +climate = $climate; + + return $this; + } + + /** + * @param string $description + * + * @return \League\CLImate\Argument\Summary + */ + public function setDescription($description) + { + $this->description = $description; + + return $this; + } + + /** + * @param string $command + * + * @return \League\CLImate\Argument\Summary + */ + public function setCommand($command) + { + $this->command = $command; + + return $this; + } + + /** + * @param Filter $filter + * @param Argument[] $arguments + * + * @return \League\CLImate\Argument\Summary + */ + public function setFilter($filter, $arguments) + { + $this->filter = $filter; + $this->filter->setArguments($arguments); + + return $this; + } + + /** + * Output the full summary for the program + */ + public function output() + { + // Print the description if it's defined. + if ($this->description) { + $this->climate->out($this->description)->br(); + } + + // Print the usage statement with the arguments without a prefix at the end. + $this->climate->out("Usage: {$this->command} " + . $this->short($this->getOrderedArguments())); + + // Print argument details. + foreach (['required', 'optional'] as $type) { + $this->outputArguments($this->filter->{$type}(), $type); + } + } + + /** + * Build a short summary of a list of arguments. + * + * @param Argument[] $arguments + * + * @return string + */ + public function short($arguments) + { + return implode(' ', array_map([$this, 'argumentBracketed'], $arguments)); + } + + /** + * Build an argument's summary for use in a usage statement. + * + * For example, "-u username, --user username", "--force", or + * "-c count (default: 7)". + * + * @param Argument $argument + * + * @return string + */ + public function argument(Argument $argument) + { + $summary = $this->prefixedArguments($argument); + $printedName = mb_strstr($summary, ' ' . $argument->name()); + + // Print the argument name if it's not printed yet. + if (!$printedName && !$argument->noValue()) { + $summary .= $argument->name(); + } + + if ($defaults = $argument->defaultValue()) { + if (count($defaults) == 1) { + $summary .= " (default: {$defaults[0]})"; + } else { + $summary .= ' (defaults: ' . implode(', ', $defaults) . ')'; + } + } + + return $summary; + } + + /** + * Build argument summary surrounded by brackets + * + * @param Argument $argument + * + * @return string + */ + protected function argumentBracketed(Argument $argument) + { + return '[' . $this->argument($argument) . ']'; + } + + /** + * Get the arguments ordered by whether or not they have a prefix + * + * @return Argument[] + */ + protected function getOrderedArguments() + { + return array_merge($this->filter->withPrefix(), $this->filter->withoutPrefix()); + } + + /** + * Print out the argument list + * + * @param array $arguments + * @param string $type + */ + protected function outputArguments($arguments, $type) + { + if (count($arguments) == 0) { + return; + } + + $this->climate->br()->out(mb_convert_case($type, MB_CASE_TITLE) . ' Arguments:'); + + foreach ($arguments as $argument) { + $this->climate->tab()->out($this->argument($argument)); + + if ($argument->description()) { + $this->climate->tab(2)->out($argument->description()); + } + } + } + + /** + * Builds the summary for any prefixed arguments + * + * @param Argument $argument + * + * @return string + */ + protected function prefixedArguments(Argument $argument) + { + $prefixes = [$argument->prefix(), $argument->longPrefix()]; + $summary = []; + + foreach ($prefixes as $key => $prefix) { + if (!$prefix) { + continue; + } + + $sub = str_repeat('-', $key + 1) . $prefix; + + if (!$argument->noValue()) { + $sub .= " {$argument->name()}"; + } + + $summary[] = $sub; + } + + return implode(', ', $summary); + } +} diff --git a/vendor/league/climate/src/CLImate.php b/vendor/league/climate/src/CLImate.php new file mode 100644 index 0000000..5c7c0aa --- /dev/null +++ b/vendor/league/climate/src/CLImate.php @@ -0,0 +1,446 @@ +setStyle(new Style()); + $this->setRouter(new Router()); + $this->setSettingsManager(new SettingsManager()); + $this->setOutput(new Output()); + $this->setUtil(new UtilFactory()); + $this->setArgumentManager(new ArgumentManager()); + } + + /** + * Set the style property + * + * @param \League\CLImate\Decorator\Style $style + */ + public function setStyle(Style $style) + { + $this->style = $style; + } + + /** + * Set the router property + * + * @param \League\CLImate\TerminalObject\Router\Router $router + */ + public function setRouter(Router $router) + { + $this->router = $router; + } + + /** + * Set the settings property + * + * @param \League\CLImate\Settings\Manager $manager + */ + public function setSettingsManager(SettingsManager $manager) + { + $this->settings = $manager; + } + + /** + * Set the arguments property + * + * @param \League\CLImate\Argument\Manager $manager + */ + public function setArgumentManager(ArgumentManager $manager) + { + $this->arguments = $manager; + } + + /** + * Set the output property + * + * @param \League\CLImate\Util\Output $output + */ + public function setOutput(Output $output) + { + $this->output = $output; + } + + /** + * Set the util property + * + * @param \League\CLImate\Util\UtilFactory $util + */ + public function setUtil(UtilFactory $util) + { + $this->util = $util; + } + + /** + * Extend CLImate with custom methods + * + * @param string|object|array $class + * @param string $key Optional custom key instead of class name + * + * @return \League\CLImate\CLImate + */ + public function extend($class, $key = null) + { + $this->router->addExtension($key, $class); + + return $this; + } + + /** + * Force ansi support on + * + * @return \League\CLImate\CLImate + */ + public function forceAnsiOn() + { + $this->util->system->forceAnsi(); + + return $this; + } + + /** + * Force ansi support off + * + * @return \League\CLImate\CLImate + */ + public function forceAnsiOff() + { + $this->util->system->forceAnsi(false); + + return $this; + } + + /** + * Write line to writer once + * + * @param string|array $writer + * + * @return \League\CLImate\CLImate + */ + public function to($writer) + { + $this->output->once($writer); + + return $this; + } + + /** + * Output the program's usage statement + * + * @param array $argv + * @return void + */ + public function usage(array $argv = null) + { + $this->arguments->usage($this, $argv); + } + + /** + * Set the program's description + * + * @param string $description + * + * @return \League\CLImate\CLImate + */ + public function description($description) + { + $this->arguments->description($description); + + return $this; + } + + /** + * Check if we have valid output + * + * @param mixed $output + * + * @return boolean + */ + protected function hasOutput($output) + { + if (!empty($output)) { + return true; + } + + // Check for type first to avoid errors with objects/arrays/etc + return ((is_string($output) || is_numeric($output)) && strlen($output) > 0); + } + + /** + * Search for the method within the string + * and route it if we find one. + * + * @param string $method + * @param string $name + * + * @return string The new string without the executed method. + */ + protected function parseStyleMethod($method, $name) + { + // If the name starts with this method string... + if (substr($name, 0, strlen($method)) == $method) { + // ...remove the method name from the beginning of the string... + $name = substr($name, strlen($method)); + + // ...and trim off any of those underscores hanging around + $name = ltrim($name, '_'); + + $this->style->set($method); + } + + return $name; + } + + /** + * Search for any style methods within the name and apply them + * + * @param string $name + * @param array $method_search + * + * @return string Anything left over after applying styles + */ + protected function applyStyleMethods($name, $method_search = null) + { + // Get all of the possible style attributes + $method_search = $method_search ?: array_keys($this->style->all()); + + $new_name = $this->searchForStyleMethods($name, $method_search); + + // While we still have a name left and we keep finding methods, + // loop through the possibilities + if (strlen($new_name) > 0 && $new_name != $name) { + return $this->applyStyleMethods($new_name, $method_search); + } + + return $new_name; + } + + /** + * Search for style methods in the current name + * + * @param string $name + * @param array $search + * @return string + */ + protected function searchForStyleMethods($name, $search) + { + // Loop through the possible methods + foreach ($search as $method) { + // See if we found a valid method + $name = $this->parseStyleMethod($method, $name); + } + + return $name; + } + + /** + * Build up the terminal object and return it + * + * @param string $name + * @param array $arguments + * + * @return object|null + */ + protected function buildTerminalObject($name, $arguments) + { + // Retrieve the parser for the current set of styles + $parser = $this->style->parser($this->util->system); + + // Reset the styles + $this->style->reset(); + + // Execute the terminal object + $this->router->settings($this->settings); + $this->router->parser($parser); + $this->router->output($this->output); + $this->router->util($this->util); + + return $this->router->execute($name, $arguments); + } + + /** + * Route anything leftover after styles were applied + * + * @param string $name + * @param array $arguments + * + * @return object|null + */ + protected function routeRemainingMethod($name, array $arguments) + { + // If we still have something left, let's figure out what it is + if ($this->router->exists($name)) { + $obj = $this->buildTerminalObject($name, $arguments); + + // If something was returned, return it + if (is_object($obj)) { + return $obj; + } + } elseif ($this->settings->exists($name)) { + $this->settings->add($name, reset($arguments)); + // Handle passthroughs to the arguments manager. + } else { + // If we can't find it at this point, let's fail gracefully + $this->out(reset($arguments)); + } + } + + /** + * Magic method for anything called that doesn't exist + * + * @param string $requested_method + * @param array $arguments + * + * @return \League\CLImate\CLImate|\League\CLImate\TerminalObject\Dynamic\DynamicTerminalObject + * + * List of many of the possible method being called here + * documented at the top of this class. + */ + public function __call($requested_method, $arguments) + { + // Apply any style methods that we can find first + $name = $this->applyStyleMethods(Helper::snakeCase($requested_method)); + + // The first argument is the string|array|object we want to echo out + $output = reset($arguments); + + if (strlen($name)) { + // If we have something left, let's try and route it to the appropriate place + if ($result = $this->routeRemainingMethod($name, $arguments)) { + return $result; + } + } elseif ($this->hasOutput($output)) { + // If we have fulfilled all of the requested methods and we have output, output it + $this->out($output); + } + + return $this; + } +} diff --git a/vendor/league/climate/src/Decorator/Component/BackgroundColor.php b/vendor/league/climate/src/Decorator/Component/BackgroundColor.php new file mode 100644 index 0000000..70f5d9f --- /dev/null +++ b/vendor/league/climate/src/Decorator/Component/BackgroundColor.php @@ -0,0 +1,72 @@ +strip($val)); + + if ($color) { + $color += self::ADD; + } + + return $color; + } + + /** + * Set the current background color + * + * @param mixed $val + * + * @return boolean + */ + public function set($val) + { + return parent::set($this->strip($val)); + } + + /** + * Get all of the available background colors + * + * @return array + */ + public function all() + { + $colors = []; + + foreach ($this->colors as $color => $code) { + $colors['background_' . $color] = $code + self::ADD; + } + + return $colors; + } + + /** + * Strip the color of any prefixes + * + * @param string $val + * + * @return string + */ + protected function strip($val) + { + return str_replace('background_', '', $val); + } +} diff --git a/vendor/league/climate/src/Decorator/Component/BaseDecorator.php b/vendor/league/climate/src/Decorator/Component/BaseDecorator.php new file mode 100644 index 0000000..40f0329 --- /dev/null +++ b/vendor/league/climate/src/Decorator/Component/BaseDecorator.php @@ -0,0 +1,53 @@ +defaults(); + } + + /** + * Load up the defaults for this decorator + */ + public function defaults() + { + foreach ($this->defaults as $name => $code) { + $this->add($name, $code); + } + } + + /** + * Reset the currently set decorator + */ + public function reset() + { + $this->current = []; + } + + /** + * Retrieve the currently set codes for the decorator + * + * @return array + */ + public function current() + { + return $this->current; + } +} diff --git a/vendor/league/climate/src/Decorator/Component/Color.php b/vendor/league/climate/src/Decorator/Component/Color.php new file mode 100644 index 0000000..7b176dc --- /dev/null +++ b/vendor/league/climate/src/Decorator/Component/Color.php @@ -0,0 +1,100 @@ + 39, + 'black' => 30, + 'red' => 31, + 'green' => 32, + 'yellow' => 33, + 'blue' => 34, + 'magenta' => 35, + 'cyan' => 36, + 'light_gray' => 37, + 'dark_gray' => 90, + 'light_red' => 91, + 'light_green' => 92, + 'light_yellow' => 93, + 'light_blue' => 94, + 'light_magenta' => 95, + 'light_cyan' => 96, + 'white' => 97, + ]; + + /** + * Add a color into the mix + * + * @param string $key + * @param integer $value + */ + public function add($key, $value) + { + $this->colors[$key] = (int) $value; + } + + /** + * Retrieve all of available colors + * + * @return array + */ + public function all() + { + return $this->colors; + } + + /** + * Get the code for the color + * + * @param string $val + * + * @return string + */ + public function get($val) + { + // If we already have the code, just return that + if (is_numeric($val)) { + return $val; + } + + if (array_key_exists($val, $this->colors)) { + return $this->colors[$val]; + } + + return null; + } + + /** + * Set the current color + * + * @param string $val + * + * @return boolean + */ + public function set($val) + { + $code = $this->get($val); + + if ($code) { + $this->current = [$code]; + + return true; + } + + return false; + } +} diff --git a/vendor/league/climate/src/Decorator/Component/Command.php b/vendor/league/climate/src/Decorator/Component/Command.php new file mode 100644 index 0000000..343ac15 --- /dev/null +++ b/vendor/league/climate/src/Decorator/Component/Command.php @@ -0,0 +1,77 @@ + 'green', + 'comment' => 'yellow', + 'whisper' => 'light_gray', + 'shout' => 'red', + 'error' => 'light_red', + ]; + + /** + * Add a command into the mix + * + * @param string $key + * @param mixed $value + */ + public function add($key, $value) + { + $this->commands[$key] = $value; + } + + /** + * Retrieve all of the available commands + * + * @return array + */ + public function all() + { + return $this->commands; + } + + /** + * Get the style that corresponds to the command + * + * @param string $val + * + * @return string + */ + public function get($val) + { + if (array_key_exists($val, $this->commands)) { + return $this->commands[$val]; + } + + return null; + } + + /** + * Set the currently used command + * + * @param string $val + * + * @return string|false + */ + public function set($val) + { + // Return the code because it is a string corresponding + // to a property in another class + return ($code = $this->get($val)) ? $code : false; + } +} diff --git a/vendor/league/climate/src/Decorator/Component/DecoratorInterface.php b/vendor/league/climate/src/Decorator/Component/DecoratorInterface.php new file mode 100644 index 0000000..b48e41a --- /dev/null +++ b/vendor/league/climate/src/Decorator/Component/DecoratorInterface.php @@ -0,0 +1,28 @@ + 1, + 'dim' => 2, + 'underline' => 4, + 'blink' => 5, + 'invert' => 7, + 'hidden' => 8, + ]; + + /** + * Add a format into the mix + * + * @param string $key + * @param mixed $value + */ + public function add($key, $value) + { + $this->formats[$key] = (int) $value; + } + + /** + * Retrieve all of the available formats + * + * @return array + */ + public function all() + { + return $this->formats; + } + + /** + * Get the code for the format + * + * @param string $val + * + * @return string + */ + public function get($val) + { + // If we already have the code, just return that + if (is_numeric($val)) { + return $val; + } + + if (array_key_exists($val, $this->formats)) { + return $this->formats[$val]; + } + + return null; + } + + /** + * Set the current format + * + * @param string $val + * + * @return boolean + */ + public function set($val) + { + $code = $this->get($val); + + if ($code) { + $this->current[] = $code; + + return true; + } + + return false; + } +} diff --git a/vendor/league/climate/src/Decorator/Parser/Ansi.php b/vendor/league/climate/src/Decorator/Parser/Ansi.php new file mode 100644 index 0000000..d4d86c5 --- /dev/null +++ b/vendor/league/climate/src/Decorator/Parser/Ansi.php @@ -0,0 +1,174 @@ +start() . $this->parse($str) . $this->end(); + } + + /** + * Get the string that begins the style + * + * @param string $codes + * @return string + */ + protected function start($codes = null) + { + $codes = $codes ?: $this->currentCode(); + $codes = $this->codeStr($codes); + + return $this->wrapCodes($codes); + } + + /** + * Get the string that ends the style + * + * @param string|array $codes + * @return string + */ + protected function end($codes = null) + { + if (empty($codes)) { + $codes = [0]; + } else { + $codes = Helper::toArray($codes); + + // Reset everything back to normal up front + array_unshift($codes, 0); + } + + return $this->wrapCodes($this->codeStr($codes)); + } + + /** + * Wrap the code string in the full escaped sequence + * + * @param string $codes + * + * @return string + */ + + protected function wrapCodes($codes) + { + return "\e[{$codes}m"; + } + + /** + * Parse the string for tags and replace them with their codes + * + * @param string $str + * + * @return string + */ + + protected function parse($str) + { + $count = preg_match_all($this->tags->regex(), $str, $matches); + + // If we didn't find anything, return the string right back + if (!$count || !is_array($matches)) { + return $str; + } + + // All we want is the array of actual strings matched + $matches = reset($matches); + + return $this->parseTags($str, $matches); + } + + /** + * Parse the given string for the tags and replace them with the appropriate codes + * + * @param string $str + * @param array $tags + * + * @return string + */ + + protected function parseTags($str, $tags) + { + // Let's keep a history of styles applied + $history = ($this->currentCode()) ? [$this->currentCode()] : []; + + foreach ($tags as $tag) { + $str = $this->replaceTag($str, $tag, $history); + } + + return $str; + } + + /** + * Replace the tag in the str + * + * @param string $str + * @param string $tag + * @param array $history + * + * @return string + */ + + protected function replaceTag($str, $tag, &$history) + { + // We will be replacing tags one at a time, can't pass this by reference + $replace_count = 1; + + if (strpos($tag, '/')) { + // We are closing out the tag, pop off the last element and get the codes that are left + array_pop($history); + $replace = $this->end($history); + } else { + // We are starting a new tag, add it onto the history and replace with correct color code + $history[] = $this->tags->value($tag); + $replace = $this->start($this->tags->value($tag)); + } + + return str_replace($tag, $replace, $str, $replace_count); + } + + /** + * Stringify the codes + * + * @param mixed $codes + * + * @return string + */ + + protected function codeStr($codes) + { + // If we get something that is already a code string, just pass it back + if (!is_array($codes) && strpos($codes, ';')) { + return $codes; + } + + $codes = Helper::toArray($codes); + + // Sort for the sake of consistency and testability + sort($codes); + + return implode(';', $codes); + } + + /** + * Retrieve the current style code + * + * @return string + */ + + protected function currentCode() + { + return $this->codeStr($this->current); + } +} diff --git a/vendor/league/climate/src/Decorator/Parser/NonAnsi.php b/vendor/league/climate/src/Decorator/Parser/NonAnsi.php new file mode 100644 index 0000000..6c5fef6 --- /dev/null +++ b/vendor/league/climate/src/Decorator/Parser/NonAnsi.php @@ -0,0 +1,19 @@ +tags->regex(), '', $str); + } +} diff --git a/vendor/league/climate/src/Decorator/Parser/Parser.php b/vendor/league/climate/src/Decorator/Parser/Parser.php new file mode 100644 index 0000000..43e0910 --- /dev/null +++ b/vendor/league/climate/src/Decorator/Parser/Parser.php @@ -0,0 +1,38 @@ +current = $current; + $this->tags = $tags; + } + + /** + * Wrap the string in the current style + * + * @param string $str + * + * @return string + */ + abstract public function apply($str); +} diff --git a/vendor/league/climate/src/Decorator/Parser/ParserFactory.php b/vendor/league/climate/src/Decorator/Parser/ParserFactory.php new file mode 100644 index 0000000..5383f5a --- /dev/null +++ b/vendor/league/climate/src/Decorator/Parser/ParserFactory.php @@ -0,0 +1,26 @@ +hasAnsiSupport()) { + return new Ansi($current, $tags); + } + + return new NonAnsi($current, $tags); + } +} diff --git a/vendor/league/climate/src/Decorator/Parser/ParserImporter.php b/vendor/league/climate/src/Decorator/Parser/ParserImporter.php new file mode 100644 index 0000000..823c041 --- /dev/null +++ b/vendor/league/climate/src/Decorator/Parser/ParserImporter.php @@ -0,0 +1,23 @@ +parser = $parser; + } +} diff --git a/vendor/league/climate/src/Decorator/Style.php b/vendor/league/climate/src/Decorator/Style.php new file mode 100644 index 0000000..fb52669 --- /dev/null +++ b/vendor/league/climate/src/Decorator/Style.php @@ -0,0 +1,295 @@ + 'Format', + 'color' => 'Color', + 'background' => 'BackgroundColor', + 'command' => 'Command', + ]; + + protected $parser; + + /** + * An array of the current styles applied + * + * @var array $current + */ + protected $current = []; + + public function __construct() + { + foreach ($this->available as $key => $class) { + $class = 'League\CLImate\Decorator\Component\\' . $class; + $this->style[$key] = new $class(); + } + } + + /** + * Get all of the styles available + * + * @return array + */ + public function all() + { + $all = []; + + foreach ($this->style as $style) { + $all = array_merge($all, $this->convertToCodes($style->all())); + } + + return $all; + } + + /** + * Attempt to get the corresponding code for the style + * + * @param mixed $key + * + * @return mixed + */ + public function get($key) + { + foreach ($this->style as $style) { + if ($code = $style->get($key)) { + return $code; + } + } + + return false; + } + + /** + * Attempt to set some aspect of the styling, + * return true if attempt was successful + * + * @param string $key + * + * @return boolean + */ + public function set($key) + { + foreach ($this->style as $style) { + if ($code = $style->set($key)) { + return $this->validateCode($code); + } + } + + return false; + } + + /** + * Reset the current styles applied + * + */ + public function reset() + { + foreach ($this->style as $style) { + $style->reset(); + } + } + + /** + * Get a new instance of the Parser class based on the current settings + * + * @param \League\CLImate\Util\System\System $system + * + * @return \League\CLImate\Decorator\Parser\Parser + */ + public function parser(System $system) + { + return ParserFactory::getInstance($system, $this->current(), new Tags($this->all())); + } + + /** + * Compile an array of the current codes + * + * @return array + */ + public function current() + { + $full_current = []; + + foreach ($this->style as $style) { + $full_current = array_merge($full_current, Helper::toArray($style->current())); + } + + $full_current = array_filter($full_current); + + return array_values($full_current); + } + + /** + * Make sure that the code is an integer, if not let's try and get it there + * + * @param mixed $code + * + * @return boolean + */ + protected function validateCode($code) + { + if (is_integer($code)) { + return true; + } + + // Plug it back in and see what we get + if (is_string($code)) { + return $this->set($code); + } + + if (is_array($code)) { + return $this->validateCodeArray($code); + } + + return false; + } + + /** + * Validate an array of codes + * + * @param array $codes + * + * @return boolean + */ + protected function validateCodeArray(array $codes) + { + // Loop through it and add each of the properties + $adds = []; + + foreach ($codes as $code) { + $adds[] = $this->set($code); + } + + // If any of them came back true, we're good to go + return in_array(true, $adds); + } + + /** + * Convert the array of codes to integers + * + * @param array $codes + * @return array + */ + protected function convertToCodes(array $codes) + { + foreach ($codes as $key => $code) { + if (is_int($code)) { + continue; + } + + $codes[$key] = $this->getCode($code); + } + + return $codes; + } + + /** + * Retrieve the integers from the mixed code input + * + * @param string|array $code + * + * @return integer|array + */ + protected function getCode($code) + { + if (is_array($code)) { + return $this->getCodeArray($code); + } + + return $this->get($code); + } + + /** + * Retrieve an array of integers from the array of codes + * + * @param array $codes + * + * @return array + */ + protected function getCodeArray(array $codes) + { + foreach ($codes as $key => $code) { + $codes[$key] = $this->get($code); + } + + return $codes; + } + + /** + * Parse the add method for the style they are trying to add + * + * @param string $method + * + * @return string + */ + protected function parseAddMethod($method) + { + return strtolower(substr($method, 3, strlen($method))); + } + + /** + * Add a custom style + * + * @param string $style + * @param string $key + * @param string $value + */ + protected function add($style, $key, $value) + { + $this->style[$style]->add($key, $value); + + // If we are adding a color, make sure it gets added + // as a background color too + if ($style == 'color') { + $this->style['background']->add($key, $value); + } + } + + /** + * Magic Methods + * + * List of possible magic methods are at the top of this class + * + * @param string $requested_method + * @param array $arguments + */ + public function __call($requested_method, $arguments) + { + // The only methods we are concerned about are 'add' methods + if (substr($requested_method, 0, 3) != 'add') { + return false; + } + + $style = $this->parseAddMethod($requested_method); + + if (array_key_exists($style, $this->style)) { + list($key, $value) = $arguments; + $this->add($style, $key, $value); + } + } +} diff --git a/vendor/league/climate/src/Decorator/Tags.php b/vendor/league/climate/src/Decorator/Tags.php new file mode 100644 index 0000000..ab15a41 --- /dev/null +++ b/vendor/league/climate/src/Decorator/Tags.php @@ -0,0 +1,76 @@ +keys = $keys; + $this->build(); + } + + /** + * Get all available tags + * + * @return array + */ + + public function all() + { + return $this->tags; + } + + /** + * Get the value of the requested tag + * + * @param string $key + * + * @return string|null + */ + + public function value($key) + { + return (array_key_exists($key, $this->tags)) ? $this->tags[$key] : null; + } + + /** + * Get the regular expression that can be used to parse the string for tags + * + * @return string + */ + + public function regex() + { + return '(<(?:(?:(?:\\\)*\/)*(?:' . implode('|', array_keys($this->keys)) . '))>)'; + } + + /** + * Build the search and replace for all of the various style tags + */ + + protected function build() + { + foreach ($this->keys as $tag => $code) { + $this->tags["<{$tag}>"] = $code; + $this->tags[""] = $code; + $this->tags["<\\/{$tag}>"] = $code; + } + } +} diff --git a/vendor/league/climate/src/Exceptions/Exception.php b/vendor/league/climate/src/Exceptions/Exception.php new file mode 100644 index 0000000..3b6f140 --- /dev/null +++ b/vendor/league/climate/src/Exceptions/Exception.php @@ -0,0 +1,7 @@ + 1, + LogLevel::ALERT => 2, + LogLevel::CRITICAL => 3, + LogLevel::ERROR => 4, + LogLevel::WARNING => 5, + LogLevel::NOTICE => 6, + LogLevel::INFO => 7, + LogLevel::DEBUG => 8, + ]; + + /** + * @var int $level Ignore logging attempts at a level less than this. + */ + private $level; + + /** + * @var CLImate $climate The underlying climate instance we are using for output. + */ + private $climate; + + /** + * Create a new Logger instance. + * + * @param string $level One of the LogLevel constants + * @param CLImate $climate An existing CLImate instance to use for output + */ + public function __construct($level = LogLevel::INFO, CLImate $climate = null) + { + $this->level = $this->convertLevel($level); + + if ($climate === null) { + $climate = new CLImate; + } + $this->climate = $climate; + + # Define some default styles to use for the output + $commands = [ + "emergency" => ["white", "bold", "background_red"], + "alert" => ["white", "background_yellow"], + "critical" => ["red", "bold"], + "error" => ["red"], + "warning" => "yellow", + "notice" => "light_cyan", + "info" => "green", + "debug" => "dark_gray", + ]; + + # If any of the required styles are not defined then define them now + foreach ($commands as $command => $style) { + if (!$this->climate->style->get($command)) { + $this->climate->style->addCommand($command, $style); + } + } + } + + + /** + * Get a numeric log level for the passed parameter. + * + * @param string $level One of the LogLevel constants + * + * @return int + */ + private function convertLevel($level) + { + # If this is one of the defined string log levels then return it's numeric value + if (!array_key_exists($level, $this->levels)) { + throw new InvalidArgumentException("Unknown log level: {$level}"); + } + + return $this->levels[$level]; + } + + + /** + * Get a new instance logging at a different level + * + * @param string $level One of the LogLevel constants + * + * @return Logger + */ + public function withLogLevel($level) + { + $logger = clone $this; + $logger->level = $this->convertLevel($level); + return $logger; + } + + + /** + * Log messages to a CLImate instance. + * + * @param string $level One of the LogLevel constants + * @param string|object $message If an object is passed it must implement __toString() + * @param array $context Placeholders to be substituted in the message + * + * @return void + */ + public function log($level, $message, array $context = []): void + { + if ($this->convertLevel($level) > $this->level) { + return; + } + + # Handle objects implementing __toString + $message = (string)$message; + + # Handle any placeholders in the $context array + foreach ($context as $key => $val) { + $placeholder = "{" . $key . "}"; + + # If this context key is used as a placeholder, then replace it, and remove it from the $context array + if (strpos($message, $placeholder) !== false) { + $val = (string)$val; + $message = str_replace($placeholder, $val, $message); + unset($context[$key]); + } + } + + # Send the message to the climate instance + $this->climate->{$level}($message); + + # Append any context information not used as placeholders + $this->outputRecursiveContext($level, $context, 1); + } + + + /** + * Handle recursive arrays in the logging context. + * + * @param string $level One of the LogLevel constants + * @param array $context The array of context to output + * @param int $indent The current level of indentation to be used + * + * @return void + */ + private function outputRecursiveContext($level, array $context, $indent) + { + foreach ($context as $key => $val) { + $this->climate->tab($indent); + + $this->climate->{$level}()->inline("{$key}: "); + + if (is_array($val)) { + $this->climate->{$level}("["); + $this->outputRecursiveContext($level, $val, $indent + 1); + $this->climate->tab($indent)->{$level}("]"); + } else { + $this->climate->{$level}((string)$val); + } + } + } +} diff --git a/vendor/league/climate/src/Settings/Art.php b/vendor/league/climate/src/Settings/Art.php new file mode 100644 index 0000000..cf69ab9 --- /dev/null +++ b/vendor/league/climate/src/Settings/Art.php @@ -0,0 +1,22 @@ +dirs = array_merge($this->dirs, func_get_args()); + $this->dirs = array_filter($this->dirs); + $this->dirs = array_values($this->dirs); + } +} diff --git a/vendor/league/climate/src/Settings/Manager.php b/vendor/league/climate/src/Settings/Manager.php new file mode 100644 index 0000000..ccd5a32 --- /dev/null +++ b/vendor/league/climate/src/Settings/Manager.php @@ -0,0 +1,84 @@ +getPath($name)); + } + + /** + * Add a setting + * + * @param string $name + * @param mixed $value + */ + public function add($name, $value) + { + $setting = $this->getPath($name); + $key = $this->getClassName($name); + + // If the current key doesn't exist in the settings array, set it up + if (!array_key_exists($name, $this->settings)) { + $this->settings[$key] = new $setting(); + } + + $this->settings[$key]->add($value); + } + + /** + * Get the value of the requested setting if it exists + * + * @param string $key + * + * @return mixed + */ + public function get($key) + { + if (array_key_exists($key, $this->settings)) { + return $this->settings[$key]; + } + + return false; + } + + /** + * Get the short name for the requested settings class + * + * @param string $name + * + * @return string + */ + protected function getPath($name) + { + return 'League\CLImate\Settings\\' . $this->getClassName($name); + } + + /** + * Get the short class name for the setting + * + * @param string $name + * + * @return string + */ + protected function getClassName($name) + { + return ucwords(str_replace('add_', '', $name)); + } +} diff --git a/vendor/league/climate/src/Settings/SettingsImporter.php b/vendor/league/climate/src/Settings/SettingsImporter.php new file mode 100644 index 0000000..72420cb --- /dev/null +++ b/vendor/league/climate/src/Settings/SettingsImporter.php @@ -0,0 +1,32 @@ +$method($setting); + } + } +} diff --git a/vendor/league/climate/src/Settings/SettingsInterface.php b/vendor/league/climate/src/Settings/SettingsInterface.php new file mode 100644 index 0000000..180bd67 --- /dev/null +++ b/vendor/league/climate/src/Settings/SettingsInterface.php @@ -0,0 +1,11 @@ +$key = $value; + } + } + + /** + * Get the parser for the current object + * + * @return \League\CLImate\Decorator\Parser\Parser + */ + public function getParser() + { + return $this->parser; + } + + /** + * Check if this object requires a new line to be added after the output + * + * @return boolean + */ + public function sameLine() + { + return false; + } +} diff --git a/vendor/league/climate/src/TerminalObject/Basic/BasicTerminalObjectInterface.php b/vendor/league/climate/src/TerminalObject/Basic/BasicTerminalObjectInterface.php new file mode 100644 index 0000000..863abb5 --- /dev/null +++ b/vendor/league/climate/src/TerminalObject/Basic/BasicTerminalObjectInterface.php @@ -0,0 +1,34 @@ +char($char)->length($length); + } + + /** + * Set the character to repeat for the border + * + * @param string $char + * + * @return Border + */ + public function char($char) + { + $this->set('char', $char); + + return $this; + } + + /** + * Set the length of the border + * + * @param integer $length + * + * @return Border + */ + public function length($length) + { + $this->set('length', $length); + + return $this; + } + + /** + * Return the border + * + * @return string + */ + public function result() + { + $length = $this->length ?: $this->util->width() ?: 100; + $str = str_repeat($this->char, $length); + $str = substr($str, 0, $length); + + return $str; + } +} diff --git a/vendor/league/climate/src/TerminalObject/Basic/Br.php b/vendor/league/climate/src/TerminalObject/Basic/Br.php new file mode 100644 index 0000000..8c69797 --- /dev/null +++ b/vendor/league/climate/src/TerminalObject/Basic/Br.php @@ -0,0 +1,16 @@ +count, ''); + } +} diff --git a/vendor/league/climate/src/TerminalObject/Basic/Clear.php b/vendor/league/climate/src/TerminalObject/Basic/Clear.php new file mode 100644 index 0000000..23f2766 --- /dev/null +++ b/vendor/league/climate/src/TerminalObject/Basic/Clear.php @@ -0,0 +1,21 @@ +count > 0) { + $string .= $this->util->cursor->startOfCurrentLine(); + $string .= $this->util->cursor->deleteCurrentLine(); + --$this->count; + + $string .= $this->util->cursor->up(); + } + + $string .= $this->util->cursor->down(); + + return $string; + } + + + /** + * @inheritdoc + */ + public function sameLine() + { + return true; + } +} diff --git a/vendor/league/climate/src/TerminalObject/Basic/Columns.php b/vendor/league/climate/src/TerminalObject/Basic/Columns.php new file mode 100644 index 0000000..9569abd --- /dev/null +++ b/vendor/league/climate/src/TerminalObject/Basic/Columns.php @@ -0,0 +1,207 @@ +data = $data; + $this->column_count = $column_count; + } + + /** + * Calculate the number of columns organize data + * + * @return array + */ + public function result() + { + $keys = array_keys($this->data); + $first_key = reset($keys); + + return (!is_int($first_key)) ? $this->associativeColumns() : $this->columns(); + } + + /** + * Get columns for a regular array + * + * @return array + */ + protected function columns() + { + $this->data = $this->setData(); + $column_widths = $this->getColumnWidths(); + $output = []; + $count = count(reset($this->data)); + + for ($i = 0; $i < $count; $i++) { + $output[] = $this->getRow($i, $column_widths); + } + + return $output; + } + + /** + * Re-configure the data into it's final form + */ + protected function setData() + { + // If it's already an array of arrays, we're good to go + if (is_array(reset($this->data))) { + return $this->setArrayOfArraysData(); + } + + $column_width = $this->getColumnWidth($this->data); + $row_count = $this->getMaxRows($column_width); + + return array_chunk($this->data, $row_count); + } + + /** + * Re-configure an array of arrays into column arrays + */ + protected function setArrayOfArraysData() + { + $this->setColumnCountViaArray($this->data); + + $new_data = array_fill(0, $this->column_count, []); + + foreach ($this->data as $items) { + for ($i = 0; $i < $this->column_count; $i++) { + $new_data[$i][] = (array_key_exists($i, $items)) ? $items[$i] : null; + } + } + + return $new_data; + } + + /** + * Get columns for an associative array + * + * @return array + */ + protected function associativeColumns() + { + $column_width = $this->getColumnWidth(array_keys($this->data)); + $output = []; + + foreach ($this->data as $key => $value) { + $output[] = $this->pad($key, $column_width) . $value; + } + + return $output; + } + + /** + * Get the row of data + * + * @param integer $key + * @param array $column_widths + * + * @return string + */ + protected function getRow($key, $column_widths) + { + $row = []; + + for ($j = 0; $j < $this->column_count; $j++) { + if (isset($this->data[$j]) && array_key_exists($key, $this->data[$j])) { + $row[] = $this->pad($this->data[$j][$key], $column_widths[$j]); + } + } + + return trim(implode('', $row)); + } + + /** + * Get the standard column width + * + * @param array $data + * + * @return integer + */ + protected function getColumnWidth($data) + { + // Return the maximum width plus a buffer + return $this->maxStrLen($data) + 5; + } + + /** + * Get an array of each column's width + * + * @return array + */ + protected function getColumnWidths() + { + $column_widths = []; + + for ($i = 0; $i < $this->column_count; $i++) { + if (!isset($this->data[$i])) { + $column_widths[] = 0; + continue; + } + $column_widths[] = $this->getColumnWidth($this->data[$i]); + } + + return $column_widths; + } + + /** + * Set the count property + * + * @param integer $column_width + */ + protected function setColumnCount($column_width) + { + $this->column_count = (int) floor($this->util->width() / $column_width); + } + + /** + * Set the count property via an array + * + * @param array $items + */ + protected function setColumnCountViaArray($items) + { + $counts = array_map(function ($arr) { + return count($arr); + }, $items); + + $this->column_count = max($counts); + } + + /** + * Get the number of rows per column + * + * @param integer $column_width + * + * @return integer + */ + protected function getMaxRows($column_width) + { + if (!$this->column_count) { + $this->setColumnCount($column_width); + } + + return ceil(count($this->data) / $this->column_count); + } +} diff --git a/vendor/league/climate/src/TerminalObject/Basic/Draw.php b/vendor/league/climate/src/TerminalObject/Basic/Draw.php new file mode 100644 index 0000000..0b10116 --- /dev/null +++ b/vendor/league/climate/src/TerminalObject/Basic/Draw.php @@ -0,0 +1,30 @@ +addDir(__DIR__ . \DIRECTORY_SEPARATOR . '..' . \DIRECTORY_SEPARATOR . '..' . \DIRECTORY_SEPARATOR . 'ASCII'); + + $this->art = $art; + } + + /** + * Return the art + * + * @return array + */ + public function result() + { + $file = $this->artFile($this->art); + + return $this->parse($file); + } +} diff --git a/vendor/league/climate/src/TerminalObject/Basic/Dump.php b/vendor/league/climate/src/TerminalObject/Basic/Dump.php new file mode 100644 index 0000000..4412f03 --- /dev/null +++ b/vendor/league/climate/src/TerminalObject/Basic/Dump.php @@ -0,0 +1,36 @@ +data = $data; + } + + /** + * Return the data as JSON + * + * @return string + */ + public function result() + { + ob_start(); + + var_dump($this->data); + + $result = ob_get_contents(); + + ob_end_clean(); + + return $result; + } +} diff --git a/vendor/league/climate/src/TerminalObject/Basic/Flank.php b/vendor/league/climate/src/TerminalObject/Basic/Flank.php new file mode 100644 index 0000000..046bcaf --- /dev/null +++ b/vendor/league/climate/src/TerminalObject/Basic/Flank.php @@ -0,0 +1,74 @@ +str = $str; + + $this->char($char)->repeat($repeat); + } + + /** + * Set the character(s) to repeat on either side + * + * @param string $char + * + * @return Flank + */ + public function char($char) + { + $this->set('char', $char); + + return $this; + } + + /** + * Set the repeat of the flank character(s) + * + * @param integer $repeat + * + * @return Flank + */ + public function repeat($repeat) + { + $this->set('repeat', $repeat); + + return $this; + } + + /** + * Return the flanked string + * + * @return string + */ + public function result() + { + $flank = str_repeat($this->char, $this->repeat); + + return "{$flank} {$this->str} {$flank}"; + } +} diff --git a/vendor/league/climate/src/TerminalObject/Basic/Inline.php b/vendor/league/climate/src/TerminalObject/Basic/Inline.php new file mode 100644 index 0000000..9cd8dc5 --- /dev/null +++ b/vendor/league/climate/src/TerminalObject/Basic/Inline.php @@ -0,0 +1,16 @@ +data = $data; + } + + /** + * Return the data as JSON + * + * @return string + */ + public function result() + { + return json_encode($this->data, JSON_PRETTY_PRINT | JSON_UNESCAPED_SLASHES); + } +} diff --git a/vendor/league/climate/src/TerminalObject/Basic/Out.php b/vendor/league/climate/src/TerminalObject/Basic/Out.php new file mode 100644 index 0000000..550b6c4 --- /dev/null +++ b/vendor/league/climate/src/TerminalObject/Basic/Out.php @@ -0,0 +1,28 @@ +content = $content; + } + + /** + * Return the content to output + * + * @return string + */ + public function result() + { + return $this->content; + } +} diff --git a/vendor/league/climate/src/TerminalObject/Basic/Repeatable.php b/vendor/league/climate/src/TerminalObject/Basic/Repeatable.php new file mode 100644 index 0000000..7d8dacd --- /dev/null +++ b/vendor/league/climate/src/TerminalObject/Basic/Repeatable.php @@ -0,0 +1,18 @@ +count = (int) round(max((int) $count, 1)); + } +} diff --git a/vendor/league/climate/src/TerminalObject/Basic/Tab.php b/vendor/league/climate/src/TerminalObject/Basic/Tab.php new file mode 100644 index 0000000..1eae6cf --- /dev/null +++ b/vendor/league/climate/src/TerminalObject/Basic/Tab.php @@ -0,0 +1,29 @@ +count); + } +} diff --git a/vendor/league/climate/src/TerminalObject/Basic/Table.php b/vendor/league/climate/src/TerminalObject/Basic/Table.php new file mode 100644 index 0000000..f40f789 --- /dev/null +++ b/vendor/league/climate/src/TerminalObject/Basic/Table.php @@ -0,0 +1,308 @@ +data = $this->getData($data); + $this->prefix = $prefix; + } + + + /** + * @param array $input + * + * @return array + */ + private function getData(array $input) + { + $output = []; + + foreach ($input as $item) { + if (is_object($item)) { + $item = get_object_vars($item); + } + + if (!is_array($item)) { + throw new InvalidArgumentException("Invalid table data, you must pass an array of arrays or objects"); + } + + $output[] = $item; + } + + return $this->splitRows($output); + } + + /** + * Split each row in $data into an array of arrays + * Where each value represents a line in a cell + * + * @param array $data + * + * @return array + */ + private function splitRows($data) + { + foreach ($data as $row_key => $row) { + $height = 1; + $lines = []; + foreach ($row as $key => $column) { + $lines[$key] = preg_split('/(\r\n|\r|\n)/u', $column); + $height = max($height, count($lines[$key])); + } + $keys = array_keys($row); + $new_rows = []; + for ($i = 0; $i < $height; $i++) { + $new_row = []; + foreach ($keys as $key) { + $new_row[$key] = $lines[$key][$i] ?? ''; + } + $new_rows[] = $new_row; + } + $data[$row_key] = $new_rows; + } + return $data; + } + + + /** + * Return the built rows + * + * @return array + */ + public function result() + { + $this->column_widths = $this->getColumnWidths(); + $this->table_width = $this->getWidth(); + $this->border = $this->getBorder(); + + $this->buildHeaderRow(); + + foreach ($this->data as $row_columns) { + foreach ($row_columns as $columns) { + $this->addLine($this->buildRow($columns)); + } + $this->addLine($this->border); + } + + return $this->rows; + } + + /** + * Append a line to the output. + * + * @param string $line The line to output + * + * @return void + */ + private function addLine($line) + { + $this->rows[] = $this->prefix . $line; + } + + + /** + * Determine the width of the table + * + * @return integer + */ + protected function getWidth() + { + $first_row = reset($this->data); + $first_row = reset($first_row); + $first_row = $this->buildRow($first_row); + + return $this->lengthWithoutTags($first_row); + } + + /** + * Get the border for each row based on the table width + */ + protected function getBorder() + { + return (new Border())->length($this->table_width)->result(); + } + + /** + * Check for a header row (if it's an array of associative arrays or objects), + * if there is one, tack it onto the front of the rows array + */ + protected function buildHeaderRow() + { + $this->addLine($this->border); + + $header_row = $this->getHeaderRow(); + if ($header_row) { + $this->addLine($this->buildRow($header_row)); + $this->addLine((new Border)->char('=')->length($this->table_width)->result()); + } + } + + /** + * Get table row + * + * @param mixed $columns + * + * @return string + */ + protected function buildRow($columns) + { + $row = []; + + foreach ($columns as $key => $column) { + $row[] = $this->buildCell($key, $column); + } + + $row = implode($this->column_divider, $row); + + return trim($this->column_divider . $row . $this->column_divider); + } + + /** + * Build the string for this particular table cell + * + * @param mixed $key + * @param string $column + * + * @return string + */ + protected function buildCell($key, $column) + { + return $this->pad($column, $this->column_widths[$key]); + } + + /** + * Get the header row for the table if it's an associative array or object + * + * @return mixed + */ + protected function getHeaderRow() + { + $first_item = reset($this->data); + $first_item = reset($first_item); + + $keys = array_keys($first_item); + $first_key = reset($keys); + + // We have an associative array (probably), let's have a header row + if (!is_int($first_key)) { + return array_combine($keys, $keys); + } + + return false; + } + + /** + * Determine the width of each column + * + * @return array + */ + protected function getColumnWidths() + { + $first_row = reset($this->data); + $first_row = reset($first_row); + + // Create an array with the columns as keys and values of zero + $column_widths = $this->getDefaultColumnWidths($first_row); + + foreach ($this->data as $row_columns) { + foreach ($row_columns as $columns) { + foreach ($columns as $key => $column) { + $column_widths[$key] = $this->getCellWidth($column_widths[$key], $column); + } + } + } + + return $column_widths; + } + + /** + * Set up an array of default column widths + * + * @param array $columns + * + * @return array + */ + protected function getDefaultColumnWidths(array $columns) + { + $widths = $this->arrayOfStrLens(array_keys($columns)); + + return array_combine(array_keys($columns), $widths); + } + + /** + * Determine the width of the columns without tags + * + * @param array $current_width + * @param string $str + * + * @return integer + */ + protected function getCellWidth($current_width, $str) + { + return max($current_width, $this->lengthWithoutTags($str)); + } +} diff --git a/vendor/league/climate/src/TerminalObject/Dynamic/Animation.php b/vendor/league/climate/src/TerminalObject/Dynamic/Animation.php new file mode 100644 index 0000000..4b5ee21 --- /dev/null +++ b/vendor/league/climate/src/TerminalObject/Dynamic/Animation.php @@ -0,0 +1,213 @@ +addDir(__DIR__ . \DIRECTORY_SEPARATOR . '..' . \DIRECTORY_SEPARATOR . '..' . \DIRECTORY_SEPARATOR . 'ASCII'); + + $this->setSleeper($sleeper); + $this->setKeyFrames($keyframes); + + $this->art = $art; + } + + /** + * Run a basic animation + */ + public function run() + { + $files = $this->artDir($this->art); + $animation = []; + + foreach ($files as $file) { + $animation[] = $this->parse($file); + } + + $this->animate($animation); + } + + /** + * Set the speed of the animation based on a percentage + * (50% slower, 200% faster, etc) + * + * @param int|float $percentage + * + * @return \League\CLImate\TerminalObject\Dynamic\Animation + */ + public function speed($percentage) + { + $this->sleeper->speed($percentage); + + return $this; + } + + /** + * Scroll the art + * + * @param string $direction + * @return bool + */ + public function scroll($direction = 'right') + { + $this->setupKeyframes(); + + $mapping = $this->getScrollDirectionMapping(); + + if (!array_key_exists($direction, $mapping)) { + return false; + } + + $lines = $this->getLines(); + $enter_from = $mapping[$direction]; + $exit_to = $mapping[$enter_from]; + + $this->animate($this->keyframes->scroll($lines, $enter_from, $exit_to)); + } + + /** + * Animate the art exiting the screen + * + * @param string $direction top|bottom|right|left + */ + public function exitTo($direction) + { + $this->setupKeyframes(); + + $this->animate($this->keyframes->exitTo($this->getLines(), $direction)); + } + + /** + * Animate the art entering the screen + * + * @param string $direction top|bottom|right|left + */ + public function enterFrom($direction) + { + $this->setupKeyframes(); + + $this->animate($this->keyframes->enterFrom($this->getLines(), $direction)); + } + + protected function getScrollDirectionMapping() + { + return [ + 'left' => 'right', + 'right' => 'left', + 'top' => 'bottom', + 'bottom' => 'top', + 'up' => 'bottom', + 'down' => 'top', + ]; + } + + protected function getLines() + { + return $this->parse($this->artFile($this->art)); + } + + /** + * @param \League\CLImate\TerminalObject\Helper\Sleeper $sleeper + */ + protected function setSleeper($sleeper = null) + { + $this->sleeper = $sleeper ?: new Sleeper(); + } + + /** + * @param League\CLImate\TerminalObject\Dynamic\Animation\Keyframe $keyframes + */ + protected function setKeyFrames($keyframes) + { + $this->keyframes = $keyframes ?: new Keyframe; + } + + /** + * Set up the necessary properties on the Keyframe class + */ + protected function setupKeyframes() + { + $this->keyframes->parser($this->parser); + $this->keyframes->util($this->util); + } + + /** + * Animate the given keyframes + * + * @param array $keyframes Array of arrays + */ + protected function animate(array $keyframes) + { + $count = 0; + + foreach ($keyframes as $lines) { + $this->writeKeyFrame($lines, $count); + $this->sleeper->sleep(); + $count = count($lines); + } + } + + /** + * Write the current keyframe to the terminal, line by line + * + * @param array $lines + * @param integer $count + */ + protected function writeKeyFrame(array $lines, $count) + { + foreach ($lines as $key => $line) { + $content = $this->getLineFormatted($line, $key, $count); + $this->output->write($this->parser->apply($content)); + } + } + + /** + * Format the line to re-write previous lines, if necessary + * + * @param string $line + * @param integer $key + * @param integer $last_frame_count + * + * @return string + */ + protected function getLineFormatted($line, $key, $last_frame_count) + { + // If this is the first thing we're writing, just return the line + if ($last_frame_count == 0) { + return $line; + } + + $content = ''; + + // If this is the first line of the frame, + // move the cursor up the total number of previous lines from the previous frame + if ($key == 0) { + $content .= $this->util->cursor->up($last_frame_count); + } + + $content .= $this->util->cursor->startOfCurrentLine(); + $content .= $this->util->cursor->deleteCurrentLine(); + $content .= $line; + + return $content; + } +} diff --git a/vendor/league/climate/src/TerminalObject/Dynamic/Animation/Keyframe.php b/vendor/league/climate/src/TerminalObject/Dynamic/Animation/Keyframe.php new file mode 100644 index 0000000..cb9fe39 --- /dev/null +++ b/vendor/league/climate/src/TerminalObject/Dynamic/Animation/Keyframe.php @@ -0,0 +1,265 @@ +exitTo($lines, $direction)); + } + + /** + * Get the exit keyframes for the desired direction + * + * @param array $lines + * @param string $direction + * + * @return array + */ + public function exitTo($lines, $direction) + { + $lines = $this->adjustLines($lines, $direction); + $line_method = $this->getLineMethod($direction); + + $direction_keyframes = $this->getDirectionFrames($direction, $lines, $line_method); + + $keyframes = array_fill(0, 4, $lines); + $keyframes = array_merge($keyframes, $direction_keyframes); + $keyframes[] = array_fill(0, count($lines), ''); + + return $keyframes; + } + + /** + * Get scroll keyframes + * + * @param array $lines + * @param string $enter_from + * @param string $exit_to + * + * @return array + */ + public function scroll($lines, $enter_from, $exit_to) + { + $keyframes = $this->enterFrom($lines, $enter_from); + $keyframes = array_merge($keyframes, $this->exitTo($lines, $exit_to)); + $keyframes = array_unique($keyframes, SORT_REGULAR); + $keyframes[] = reset($keyframes); + + return $keyframes; + } + + /** + * Get the line parser for the direction + * + * @param string $direction + * @return string + */ + protected function getLineMethod($direction) + { + return 'current' . ucwords(strtolower($direction)) . 'Line'; + } + + /** + * Adjust the array of lines if necessary + * + * @param array $lines + * @param string $direction + * + * @return array + */ + protected function adjustLines(array $lines, $direction) + { + $adjust_method = 'adjust' . ucwords(strtolower($direction)) . 'Lines'; + + if (method_exists($this, $adjust_method)) { + return $this->$adjust_method($lines); + } + + return $lines; + } + + /** + * Pad the array of lines for "right" animation + * + * @param array $lines + * @return array + */ + protected function adjustRightLines(array $lines) + { + return $this->padArray($lines, $this->util->width()); + } + + /** + * Pad the array of lines for "left" animation + * + * @param array $lines + * @return array + */ + protected function adjustLeftLines(array $lines) + { + return $this->padArray($lines, $this->maxStrLen($lines)); + } + + /** + * Get the keyframes appropriate for the animation direction + * + * @param string $direction + * @param array $lines + * @param string $line_method + * + * @return array + */ + protected function getDirectionFrames($direction, array $lines, $line_method) + { + $mapping = [ + 'exitHorizontalFrames' => ['left', 'right'], + 'exitVerticalFrames' => ['top', 'bottom'], + ]; + + foreach ($mapping as $method => $directions) { + if (in_array($direction, $directions)) { + return $this->$method($lines, $line_method); + } + } + + // Fail gracefully, simply return an array + return []; + } + + /** + * Create horizontal exit animation keyframes for the art + * + * @param array $lines + * @param string $line_method + * + * @return array + */ + protected function exitHorizontalFrames(array $lines, $line_method) + { + $keyframes = []; + $length = mb_strlen($lines[0]); + + for ($i = $length; $i > 0; $i--) { + $keyframes[] = $this->getHorizontalKeyframe($lines, $i, $line_method, $length); + } + + return $keyframes; + } + + /** + * Get the keyframe for a horizontal animation + * + * @param array $lines + * @param int $frame_number + * @param string $line_method + * @param int $length + * + * @return array + */ + protected function getHorizontalKeyframe(array $lines, $frame_number, $line_method, $length) + { + $keyframe = []; + + foreach ($lines as $line) { + $keyframe[] = $this->$line_method($line, $frame_number, $length); + } + + return $keyframe; + } + + /** + * Create vertical exit animation keyframes for the art + * + * @param array $lines + * @param string $line_method + * + * @return array + */ + protected function exitVerticalFrames(array $lines, $line_method) + { + $keyframes = []; + $line_count = count($lines); + + for ($i = $line_count - 1; $i >= 0; $i--) { + $keyframes[] = $this->$line_method($lines, $line_count, $i); + } + + return $keyframes; + } + + /** + * Get the current line as it is exiting left + * + * @param string $line + * @param int $frame_number + * + * @return string + */ + protected function currentLeftLine($line, $frame_number) + { + return mb_substr($line, -$frame_number); + } + + + /** + * Get the current line as it is exiting right + * + * @param string $line + * @param int $frame_number + * @param int $length + * + * @return string + */ + protected function currentRightLine($line, $frame_number, $length) + { + return str_repeat(' ', $length - $frame_number) . mb_substr($line, 0, $frame_number); + } + + /** + * Slice off X number of lines from the bottom and fill the rest with empty strings + * + * @param array $lines + * @param integer $total_lines + * @param integer $current + * + * @return array + */ + protected function currentTopLine($lines, $total_lines, $current) + { + $keyframe = array_slice($lines, -$current, $current); + + return array_merge($keyframe, array_fill(0, $total_lines - $current, '')); + } + + /** + * Slice off X number of lines from the top and fill the rest with empty strings + * + * @param array $lines + * @param integer $total_lines + * @param integer $current + * + * @return array + */ + protected function currentBottomLine($lines, $total_lines, $current) + { + $keyframe = array_fill(0, $total_lines - $current, ''); + + return array_merge($keyframe, array_slice($lines, 0, $current)); + } +} diff --git a/vendor/league/climate/src/TerminalObject/Dynamic/Checkbox/Checkbox.php b/vendor/league/climate/src/TerminalObject/Dynamic/Checkbox/Checkbox.php new file mode 100644 index 0000000..793fdcc --- /dev/null +++ b/vendor/league/climate/src/TerminalObject/Dynamic/Checkbox/Checkbox.php @@ -0,0 +1,222 @@ +value = (!is_int($value)) ? $value : $label; + $this->label = $label; + } + + /** + * @return bool + */ + public function isCurrent() + { + return $this->current; + } + + /** + * @return bool + */ + public function isChecked() + { + return $this->checked; + } + + /** + * @return bool + */ + public function isFirst() + { + return $this->first; + } + + /** + * @return bool + */ + public function isLast() + { + return $this->last; + } + + /** + * Set whether the pointer is currently pointing at this checkbox + * + * @param bool $current + * + * @return Checkbox + */ + public function setCurrent($current = true) + { + $this->current = $current; + + return $this; + } + + /** + * Set whether the checkbox is currently checked + * + * @param bool $checked + * + * @return Checkbox + */ + public function setChecked($checked = true) + { + $this->checked = $checked; + + return $this; + } + + /** + * @return Checkbox + */ + public function setFirst() + { + $this->first = true; + + return $this; + } + + /** + * @return Checkbox + */ + public function setLast() + { + $this->last = true; + + return $this; + } + + /** + * @return string|int|bool + */ + public function getValue() + { + return $this->value; + } + + /** + * Build out basic checkbox string based on current options + * + * @return string + */ + protected function buildCheckboxString() + { + $parts = [ + ($this->isCurrent()) ? $this->pointer() : ' ', + $this->checkbox($this->isChecked()), + $this->label, + ]; + + $line = implode(' ', $parts); + + return $line . $this->getPaddingString($line); + } + + /** + * Get the padding string based on the length of the terminal/line + * + * @param string $line + * + * @return string + */ + protected function getPaddingString($line) + { + $length = $this->util->width() - $this->lengthWithoutTags($line); + if ($length < 1) { + return ''; + } + + return str_repeat(' ', $length); + } + + /** + * Get the checkbox symbol + * + * @param bool $checked + * + * @return string + */ + protected function checkbox($checked) + { + if ($checked) { + return html_entity_decode("●"); + } + + return html_entity_decode("○"); + } + + /** + * Get the pointer symbol + * + * @return string + */ + protected function pointer() + { + return html_entity_decode("❯"); + } + + public function __toString() + { + if ($this->isFirst()) { + return $this->buildCheckboxString(); + } + + if ($this->isLast()) { + return $this->buildCheckboxString() . $this->util->cursor->left(10) . ''; + } + + return $this->buildCheckboxString(); + } +} diff --git a/vendor/league/climate/src/TerminalObject/Dynamic/Checkbox/CheckboxGroup.php b/vendor/league/climate/src/TerminalObject/Dynamic/Checkbox/CheckboxGroup.php new file mode 100644 index 0000000..3a09d68 --- /dev/null +++ b/vendor/league/climate/src/TerminalObject/Dynamic/Checkbox/CheckboxGroup.php @@ -0,0 +1,191 @@ + $option) { + $this->checkboxes[] = new Checkbox($option, $key); + } + + $this->count = count($this->checkboxes); + + $this->checkboxes[0]->setFirst()->setCurrent(); + $this->checkboxes[$this->count - 1]->setLast(); + } + + public function write() + { + array_map([$this, 'writeCheckbox'], $this->checkboxes); + } + + /** + * Retrieve the checked option values + * + * @return array + */ + public function getCheckedValues() + { + return array_values(array_map([$this, 'getValue'], $this->getChecked())); + } + + /** + * Set the newly selected option based on the direction + * + * @param string $direction 'previous' or 'next' + */ + public function setCurrent($direction) + { + list($option, $key) = $this->getCurrent(); + + $option->setCurrent(false); + + $new_key = $this->getCurrentKey($direction, $option, $key); + + $this->checkboxes[$new_key]->setCurrent(); + } + + /** + * Toggle the current option's checked status + */ + public function toggleCurrent() + { + list($option) = $this->getCurrent(); + + $option->setChecked(!$option->isChecked()); + } + + /** + * Get the number of checkboxes + * + * @return int + */ + public function count() + { + return $this->count; + } + + /** + * Retrieve the checked options + * + * @return array + */ + protected function getChecked() + { + return array_filter($this->checkboxes, [$this, 'isChecked']); + } + + /** + * Determine whether the option is checked + * + * @param Checkbox $option + * + * @return bool + */ + protected function isChecked($option) + { + return $option->isChecked(); + } + + /** + * Retrieve the option's value + * + * @param Checkbox $option + * + * @return mixed + */ + protected function getValue($option) + { + return $option->getValue(); + } + + /** + * Get the currently selected option + * + * @return array + */ + protected function getCurrent() + { + foreach ($this->checkboxes as $key => $option) { + if ($option->isCurrent()) { + return [$option, $key]; + } + } + } + + /** + * Retrieve the correct current key + * + * @param string $direction 'previous' or 'next' + * @param Checkbox $option + * @param int $key + * + * @return int + */ + protected function getCurrentKey($direction, $option, $key) + { + $method = 'get' . ucwords($direction). 'Key'; + + return $this->{$method}($option, $key); + } + + /** + * @param Checkbox $option + * @param int $key + * + * @return int + */ + protected function getPreviousKey($option, $key) + { + if ($option->isFirst()) { + return count($this->checkboxes) - 1; + } + + return --$key; + } + + /** + * @param Checkbox $option + * @param int $key + * + * @return int + */ + protected function getNextKey($option, $key) + { + if ($option->isLast()) { + return 0; + } + + return ++$key; + } + + /** + * @param Checkbox $checkbox + */ + protected function writeCheckbox($checkbox) + { + $checkbox->util($this->util); + $checkbox->parser($this->parser); + + $parsed = $this->parser->apply((string) $checkbox); + + if ($checkbox->isLast()) { + $this->output->sameLine()->write($parsed); + return; + } + + $this->output->write($parsed); + } +} diff --git a/vendor/league/climate/src/TerminalObject/Dynamic/Checkbox/RadioGroup.php b/vendor/league/climate/src/TerminalObject/Dynamic/Checkbox/RadioGroup.php new file mode 100644 index 0000000..bf08611 --- /dev/null +++ b/vendor/league/climate/src/TerminalObject/Dynamic/Checkbox/RadioGroup.php @@ -0,0 +1,38 @@ +getCurrent(); + + $checkbox->setChecked(!$checkbox->isChecked()); + + foreach ($this->checkboxes as $key => $checkbox) { + if ($key == $checkbox_key) { + continue; + } + + $checkbox->setChecked(false); + } + } + + /** + * Get the checked option + * + * @return string|bool|int + */ + public function getCheckedValues() + { + if ($checked = $this->getChecked()) { + return reset($checked)->getValue(); + } + + return null; + } +} diff --git a/vendor/league/climate/src/TerminalObject/Dynamic/Checkboxes.php b/vendor/league/climate/src/TerminalObject/Dynamic/Checkboxes.php new file mode 100644 index 0000000..89c3bfe --- /dev/null +++ b/vendor/league/climate/src/TerminalObject/Dynamic/Checkboxes.php @@ -0,0 +1,159 @@ +prompt = $prompt; + $this->reader = $reader ?: new Stdin(); + + $this->checkboxes = $this->buildCheckboxes($options); + } + + /** + * Do it! Prompt the user for information! + * + * @return string + */ + public function prompt() + { + $this->output->write($this->parser->apply($this->promptFormatted())); + + $this->writeCheckboxes(); + + $this->util->system->exec('stty sane'); + + return $this->checkboxes->getCheckedValues(); + } + + /** + * Build out the checkboxes + * + * @param array $options + * + * @return Checkbox\CheckboxGroup + */ + protected function buildCheckboxes(array $options) + { + return new Checkbox\CheckboxGroup($options); + } + + /** + * Format the prompt string + * + * @return string + */ + protected function promptFormatted() + { + return $this->prompt . ' (use to select)'; + } + + /** + * Output the checkboxes and listen for any keystrokes + */ + protected function writeCheckboxes() + { + $this->updateCheckboxView(); + + $this->util->system->exec('stty -icanon'); + $this->output->sameLine()->write($this->util->cursor->hide()); + + $this->listenForInput(); + } + + /** + * Listen for input and act on it + */ + protected function listenForInput() + { + while ($char = $this->reader->char(1)) { + if ($this->handleCharacter($char)) { + break; + } + + $this->moveCursorToTop(); + $this->updateCheckboxView(); + } + } + + /** + * Take the appropriate action based on the input character, + * returns whether to stop listening or not + * + * @param string $char + * + * @return bool + */ + protected function handleCharacter($char) + { + switch ($char) { + case "\n": + $this->output->sameLine()->write($this->util->cursor->defaultStyle()); + $this->output->sameLine()->write("\e[0m"); + return true; // Break the while loop as well + + case "\e": + $this->handleAnsi(); + break; + + case ' ': + $this->checkboxes->toggleCurrent(); + break; + } + + return false; + } + + /** + * Move the cursor to the top of the option list + */ + protected function moveCursorToTop() + { + $output = $this->util->cursor->up($this->checkboxes->count() - 1); + $output .= $this->util->cursor->startOfCurrentLine(); + + $this->output->sameLine()->write($output); + } + + /** + * Handle any ANSI characters + */ + protected function handleAnsi() + { + switch ($this->reader->char(2)) { + // Up arrow + case '[A': + $this->checkboxes->setCurrent('previous'); + break; + + // Down arrow + case '[B': + $this->checkboxes->setCurrent('next'); + break; + } + } + + /** + * Re-write the checkboxes based on the current objects + */ + protected function updateCheckboxView() + { + $this->checkboxes->util($this->util); + $this->checkboxes->output($this->output); + $this->checkboxes->parser($this->parser); + + $this->checkboxes->write(); + } +} diff --git a/vendor/league/climate/src/TerminalObject/Dynamic/Confirm.php b/vendor/league/climate/src/TerminalObject/Dynamic/Confirm.php new file mode 100644 index 0000000..a917987 --- /dev/null +++ b/vendor/league/climate/src/TerminalObject/Dynamic/Confirm.php @@ -0,0 +1,44 @@ +default = "n"; + } + + + /** + * Let us know if the user confirmed. + * + * @return bool + */ + public function confirmed() + { + if (in_array($this->default, ["y", "yes"], true)) { + $this->prompt .= " [Y/n]"; + } else { + $this->prompt .= " [y/N]"; + } + + $this->accept(['y', 'yes', 'n', 'no'], false); + + $response = strtolower($this->prompt()); + + return (substr($response, 0, 1) === 'y'); + } +} diff --git a/vendor/league/climate/src/TerminalObject/Dynamic/DynamicTerminalObject.php b/vendor/league/climate/src/TerminalObject/Dynamic/DynamicTerminalObject.php new file mode 100644 index 0000000..c8f8751 --- /dev/null +++ b/vendor/league/climate/src/TerminalObject/Dynamic/DynamicTerminalObject.php @@ -0,0 +1,18 @@ +prompt = $prompt; + $this->reader = $reader ?: new Stdin(); + } + + /** + * Do it! Prompt the user for information! + * + * @return string + */ + public function prompt() + { + $this->writePrompt(); + + $response = $this->valueOrDefault($this->getUserInput()); + + if ($this->isValidResponse($response)) { + return $response; + } + + return $this->prompt(); + } + + /** + * Define the acceptable responses and whether or not to + * display them to the user + * + * @param array|object $acceptable + * @param boolean $show + * + * @return \League\CLImate\TerminalObject\Dynamic\Input + */ + public function accept($acceptable, $show = false) + { + $this->acceptable = $acceptable; + $this->show_acceptable = $show; + + return $this; + } + + /** + * Define whether we should be strict about exact responses + * + * @return \League\CLImate\TerminalObject\Dynamic\Input + */ + public function strict() + { + $this->strict = true; + + return $this; + } + + /** + * Set a default response + * + * @param string $default + * + * @return \League\CLImate\TerminalObject\Dynamic\Input + */ + public function defaultTo($default) + { + $this->default = $default; + + return $this; + } + + /** + * Set multiline input to true + * + * @return \League\CLImate\TerminalObject\Dynamic\Input + */ + public function multiLine() + { + $this->multiLine = true; + + return $this; + } + + /** + * @return string + */ + protected function getUserInput() + { + if ($this->multiLine) { + return $this->reader->multiLine(); + } + + return $this->reader->line(); + } + + /** + * Write out the formatted prompt + */ + protected function writePrompt() + { + $prompt = $this->parser->apply($this->promptFormatted()); + + $this->output->sameLine()->write($prompt); + } + + /** + * If no response was given and there is a default, return it, + * otherwise return response + * + * @param string $response + * + * @return string + */ + protected function valueOrDefault($response) + { + if (strlen($response) == 0 && strlen($this->default)) { + return $this->default; + } + + return $response; + } + + /** + * Format the acceptable responses as options + * + * @return string + */ + protected function acceptableFormatted() + { + if (!is_array($this->acceptable)) { + return ''; + } + + $acceptable = array_map([$this, 'acceptableItemFormatted'], $this->acceptable); + + return '[' . implode('/', $acceptable) . ']'; + } + + /** + * Format the acceptable item depending on whether it is the default or not + * + * @param string $item + * + * @return string + */ + protected function acceptableItemFormatted($item) + { + if ($item == $this->default) { + return '' . $item . ''; + } + + return $item; + } + + /** + * Format the prompt incorporating spacing and any acceptable options + * + * @return string + */ + protected function promptFormatted() + { + $prompt = $this->prompt . ' '; + + if ($this->show_acceptable) { + $prompt .= $this->acceptableFormatted() . ' '; + } + + return $prompt; + } + + /** + * Apply some string manipulation functions for normalization + * + * @param string|array $var + * @return array + */ + protected function levelPlayingField($var) + { + $levelers = ['trim', 'mb_strtolower']; + + foreach ($levelers as $leveler) { + if (is_array($var)) { + $var = array_map($leveler, $var); + } else { + $var = $leveler($var); + } + } + + return $var; + } + + /** + * Determine whether or not the acceptable property is of type closure + * + * @return boolean + */ + protected function acceptableIsClosure() + { + return (is_object($this->acceptable) && $this->acceptable instanceof \Closure); + } + + /** + * Determine if the user's response is in the acceptable responses array + * + * @param string $response + * + * @return boolean $response + */ + protected function isAcceptableResponse($response) + { + if ($this->strict) { + return in_array($response, $this->acceptable); + } + + $acceptable = $this->levelPlayingField($this->acceptable); + $response = $this->levelPlayingField($response); + + return in_array($response, $acceptable); + } + + /** + * Determine if the user's response is valid based on the current settings + * + * @param string $response + * + * @return boolean $response + */ + protected function isValidResponse($response) + { + if (empty($this->acceptable)) { + return true; + } + + if ($this->acceptableIsClosure()) { + return call_user_func($this->acceptable, $response); + } + + return $this->isAcceptableResponse($response); + } +} diff --git a/vendor/league/climate/src/TerminalObject/Dynamic/InputAbstract.php b/vendor/league/climate/src/TerminalObject/Dynamic/InputAbstract.php new file mode 100644 index 0000000..230ed61 --- /dev/null +++ b/vendor/league/climate/src/TerminalObject/Dynamic/InputAbstract.php @@ -0,0 +1,37 @@ +length($length); + } + + if (is_string($char)) { + $this->char($char); + } + } + + /** + * Set the character(s) that should be used to pad + * + * @param string $char + * + * @return \League\CLImate\TerminalObject\Dynamic\Padding + */ + public function char($char) + { + $this->char = $char; + + return $this; + } + + /** + * Set the length of the line that should be generated + * + * @param integer $length + * + * @return \League\CLImate\TerminalObject\Dynamic\Padding + */ + public function length($length) + { + $this->length = $length; + + return $this; + } + + /** + * Get the length of the line based on the width of the terminal window + * + * @return integer + */ + protected function getLength() + { + if (!$this->length) { + $this->length = $this->util->width(); + } + + return $this->length; + } + + /** + * Pad the content with the characters + * + * @param string $content + * + * @return string + */ + protected function padContent($content) + { + if (strlen($this->char) > 0) { + $length = $this->getLength(); + $padding_length = ceil($length / mb_strlen($this->char)); + + $padding = str_repeat($this->char, $padding_length); + $content .= mb_substr($padding, 0, $length - mb_strlen($content)); + } + + return $content; + } + + /** + * Output the content and pad to the previously defined length + * + * @param string $content + * + * @return \League\CLImate\TerminalObject\Dynamic\Padding + */ + public function label($content) + { + // Handle long labels by splitting them across several lines + $lines = []; + $stop = mb_strlen($content); + $width = $this->util->width(); + for ($i = 0; $i < $stop; $i += $width) { + $lines[] = mb_substr($content, $i, $width); + } + $content = array_pop($lines); + + foreach ($lines as $line) { + $this->output->write($this->parser->apply($line)); + } + + $content = $this->padContent($content); + $content = $this->parser->apply($content); + + $this->output->sameLine(); + $this->output->write($content); + + return $this; + } + + /** + * Output result + * + * @param string $content + */ + public function result($content) + { + $this->output->write($this->parser->apply(' ' . $content)); + } +} diff --git a/vendor/league/climate/src/TerminalObject/Dynamic/Password.php b/vendor/league/climate/src/TerminalObject/Dynamic/Password.php new file mode 100644 index 0000000..a8d714c --- /dev/null +++ b/vendor/league/climate/src/TerminalObject/Dynamic/Password.php @@ -0,0 +1,13 @@ +writePrompt(); + + return $this->reader->hidden(); + } +} diff --git a/vendor/league/climate/src/TerminalObject/Dynamic/Progress.php b/vendor/league/climate/src/TerminalObject/Dynamic/Progress.php new file mode 100644 index 0000000..e673eda --- /dev/null +++ b/vendor/league/climate/src/TerminalObject/Dynamic/Progress.php @@ -0,0 +1,315 @@ +total($total); + } + } + + /** + * Set the total property + * + * @param integer $total + * + * @return Progress + */ + public function total($total) + { + $this->total = $total; + + return $this; + } + + /** + * Determines the current percentage we are at and re-writes the progress bar + * + * @param integer $current + * @param mixed $label + * + * @return void + * @throws UnexpectedValueException + */ + public function current($current, $label = null) + { + if ($this->total == 0) { + // Avoid dividing by 0 + throw new UnexpectedValueException('The progress total must be greater than zero.'); + } + + if ($current > $this->total) { + throw new UnexpectedValueException('The current is greater than the total.'); + } + + $this->drawProgressBar($current, $label); + + $this->current = $current; + $this->label = $label; + } + + /** + * Increments the current position we are at and re-writes the progress bar + * + * @param integer $increment The number of items to increment by + * @param string $label + */ + public function advance($increment = 1, $label = null) + { + $this->current($this->current + $increment, $label); + } + + /** + * Force the progress bar to redraw every time regardless of whether it has changed or not + * + * @param boolean $force + * @return Progress + */ + public function forceRedraw($force = true) + { + $this->force_redraw = !!$force; + + return $this; + } + + + /** + * Update a progress bar using an iterable. + * + * @param iterable $items Array or any other iterable object + * @param callable $callback A handler to run on each item + */ + public function each($items, callable $callback = null) + { + if ($items instanceof \Traversable) { + $items = iterator_to_array($items); + } + + $total = count($items); + if (!$total) { + return; + } + $this->total($total); + + foreach ($items as $key => $item) { + if ($callback) { + $label = $callback($item, $key); + } else { + $label = null; + } + + $this->advance(1, $label); + } + } + + + /** + * Draw the progress bar, if necessary + * + * @param string $current + * @param string $label + */ + protected function drawProgressBar($current, $label) + { + $percentage = $this->percentageFormatted($current / $this->total); + + if ($this->shouldRedraw($percentage, $label)) { + $progress_bar = $this->getProgressBar($current, $label); + $this->output->write($this->parser->apply($progress_bar)); + } + + $this->current_percentage = $percentage; + } + + /** + * Build the progress bar str and return it + * + * @param integer $current + * @param string $label + * + * @return string + */ + protected function getProgressBar($current, $label) + { + if ($this->first_line) { + // Drop down a line, we are about to + // re-write this line for the progress bar + $this->output->write(''); + $this->first_line = false; + } + + // Move the cursor up and clear it to the end + $line_count = $this->has_label_line ? 2 : 1; + + $progress_bar = $this->util->cursor->up($line_count); + $progress_bar .= $this->util->cursor->startOfCurrentLine(); + $progress_bar .= $this->util->cursor->deleteCurrentLine(); + $progress_bar .= $this->getProgressBarStr($current, $label); + + // If this line has a label then set that this progress bar has a label line + if (strlen($label) > 0) { + $this->has_label_line = true; + } + + return $progress_bar; + } + + /** + * Get the progress bar string, basically: + * =============> 50% label + * + * @param integer $current + * @param string $label + * + * @return string + */ + protected function getProgressBarStr($current, $label) + { + $percentage = $current / $this->total; + $bar_length = round($this->getBarStrLen() * $percentage); + + $bar = $this->getBar($bar_length); + $number = $this->percentageFormatted($percentage); + + if ($label) { + $label = $this->labelFormatted($label); + // If this line doesn't have a label, but we've had one before, + // then ensure the label line is cleared + } elseif ($this->has_label_line) { + $label = $this->labelFormatted(''); + } + + return trim("{$bar} {$number}{$label}"); + } + + /** + * Get the string for the actual bar based on the current length + * + * @param integer $length + * + * @return string + */ + protected function getBar($length) + { + $bar = str_repeat('=', $length); + $padding = str_repeat(' ', $this->getBarStrLen() - $length); + + return "{$bar}>{$padding}"; + } + + /** + * Get the length of the bar string based on the width of the terminal window + * + * @return integer + */ + protected function getBarStrLen() + { + if (!$this->bar_str_len) { + // Subtract 10 because of the '> 100%' plus some padding, max 100 + $this->bar_str_len = min($this->util->width() - 10, 100); + } + + return $this->bar_str_len; + } + + /** + * Format the percentage so it looks pretty + * + * @param integer $percentage + * @return float + */ + protected function percentageFormatted($percentage) + { + return round($percentage * 100) . '%'; + } + + /** + * Format the label so it is positioned correctly + * + * @param string $label + * @return string + */ + protected function labelFormatted($label) + { + return "\n" . $this->util->cursor->startOfCurrentLine() . $this->util->cursor->deleteCurrentLine() . $label; + } + + /** + * Determine whether the progress bar has changed and we need to redrew + * + * @param string $percentage + * @param string $label + * + * @return boolean + */ + protected function shouldRedraw($percentage, $label) + { + return ($this->force_redraw || $percentage != $this->current_percentage || $label != $this->label); + } +} diff --git a/vendor/league/climate/src/TerminalObject/Dynamic/Radio.php b/vendor/league/climate/src/TerminalObject/Dynamic/Radio.php new file mode 100644 index 0000000..29b0d17 --- /dev/null +++ b/vendor/league/climate/src/TerminalObject/Dynamic/Radio.php @@ -0,0 +1,51 @@ +checkboxes->toggleCurrent(); + } + + return parent::handleCharacter($char); + } + + /** + * Format the prompt string + * + * @return string + */ + protected function promptFormatted() + { + return $this->prompt . ' (press to select)'; + } +} diff --git a/vendor/league/climate/src/TerminalObject/Dynamic/Spinner.php b/vendor/league/climate/src/TerminalObject/Dynamic/Spinner.php new file mode 100644 index 0000000..66b6fac --- /dev/null +++ b/vendor/league/climate/src/TerminalObject/Dynamic/Spinner.php @@ -0,0 +1,159 @@ +label = $label; + } + + if (count($characters) < 1) { + $characters = []; + $size = 5; + $positions = array_merge(range(0, $size - 1), range($size - 2, 1, -1)); + foreach ($positions as $pos) { + $line = str_repeat("-", $size); + $characters[] = "[" . substr($line, 0, $pos) . "=" . substr($line, $pos + 1) . "]"; + } + } + $this->characters(...$characters); + } + + + /** + * Set the length of time to wait between drawing each stage. + * + * @param float $timeLimit + * + * @return Spinner + */ + public function timeLimit($timeLimit) + { + $this->timeLimit = (float) $timeLimit; + + return $this; + } + + + /** + * Set the character to loop around. + * + * @param string $characters + * + * @return Spinner + */ + public function characters(...$characters) + { + if (count($characters) < 1) { + throw new UnexpectedValueException("You must specify the characters to use"); + } + + $this->characters = $characters; + + return $this; + } + + + /** + * Re-writes the spinner + * + * @param string $label + * + * @return void + */ + public function advance($label = null) + { + if ($label === null) { + $label = $this->label; + } + + if ($this->lastDrawn) { + $time = microtime(true) - $this->lastDrawn; + if ($time < $this->timeLimit) { + return; + } + } + + ++$this->current; + if ($this->current >= count($this->characters)) { + $this->current = 0; + } + + $characters = $this->characters[$this->current]; + $this->drawSpinner($characters, $label); + $this->lastDrawn = microtime(true); + } + + + /** + * Draw the spinner + * + * @param string $characters + * @param string $label + */ + private function drawSpinner($characters, $label) + { + $spinner = ""; + + if ($this->firstLine) { + $this->firstLine = false; + } else { + $spinner .= $this->util->cursor->up(1); + $spinner .= $this->util->cursor->startOfCurrentLine(); + $spinner .= $this->util->cursor->deleteCurrentLine(); + } + + $spinner .= trim("{$characters} {$label}"); + + $this->output->write($this->parser->apply($spinner)); + } +} diff --git a/vendor/league/climate/src/TerminalObject/Helper/Art.php b/vendor/league/climate/src/TerminalObject/Helper/Art.php new file mode 100644 index 0000000..0189b0e --- /dev/null +++ b/vendor/league/climate/src/TerminalObject/Helper/Art.php @@ -0,0 +1,160 @@ +dirs as $dir) { + $this->addDir($dir); + } + } + + /** + * Add a directory to search for art in + * + * @param string $dir + */ + protected function addDir($dir) + { + // Add any additional directories to the top of the array + // so that the user can override art + array_unshift($this->art_dirs, rtrim($dir, \DIRECTORY_SEPARATOR)); + + // Keep the array clean + $this->art_dirs = array_unique($this->art_dirs); + $this->art_dirs = array_filter($this->art_dirs); + $this->art_dirs = array_values($this->art_dirs); + } + + /** + * Find a valid art path + * + * @param string $art + * + * @return array + */ + protected function artDir($art) + { + return $this->fileSearch($art, preg_quote(\DIRECTORY_SEPARATOR) . '*.*'); + } + + /** + * Find a valid art path + * + * @param string $art + * + * @return string + */ + protected function artFile($art) + { + $files = $this->fileSearch($art, '(\.[^' . preg_quote(\DIRECTORY_SEPARATOR) . ']*)?$'); + + if (count($files) === 0) { + $this->addDir(__DIR__ . \DIRECTORY_SEPARATOR . '..' . \DIRECTORY_SEPARATOR . '..' . \DIRECTORY_SEPARATOR . 'ASCII'); + $files = $this->fileSearch($this->default_art, '.*'); + } + + if (count($files) === 0) { + throw new UnexpectedValueException("Unable to find an art file with the name '{$art}'"); + } + + return reset($files); + } + + /** + * Find a set of files in the current art directories + * based on a pattern + * + * @param string $art + * @param string $pattern + * + * @return array + */ + protected function fileSearch($art, $pattern) + { + foreach ($this->art_dirs as $dir) { + $directory_iterator = new \RecursiveIteratorIterator(new \RecursiveDirectoryIterator($dir)); + + $paths = []; + $regex = '~' . preg_quote($art) . $pattern . '~'; + + foreach ($directory_iterator as $file) { + if ($file->isDir()) { + continue; + } + + // Look for anything that has the $art filename + if (preg_match($regex, $file)) { + $paths[] = $file->getPathname(); + } + } + + asort($paths); + + // If we've got one, no need to look any further + if (!empty($paths)) { + return $paths; + } + } + + return []; + } + + /** + * Parse the contents of the file and return each line + * + * @param string $path + * + * @return array + */ + protected function parse($path) + { + $output = file_get_contents($path); + $output = explode("\n", $output); + $output = array_map('rtrim', $output); + + return $output; + } +} diff --git a/vendor/league/climate/src/TerminalObject/Helper/Sleeper.php b/vendor/league/climate/src/TerminalObject/Helper/Sleeper.php new file mode 100644 index 0000000..b0ae639 --- /dev/null +++ b/vendor/league/climate/src/TerminalObject/Helper/Sleeper.php @@ -0,0 +1,37 @@ + 0) { + $this->speed *= (100 / $percentage); + } + + return $this->speed; + } + + /** + * Sleep for the specified amount of time + */ + public function sleep() + { + usleep($this->speed); + } +} diff --git a/vendor/league/climate/src/TerminalObject/Helper/SleeperInterface.php b/vendor/league/climate/src/TerminalObject/Helper/SleeperInterface.php new file mode 100644 index 0000000..b18135a --- /dev/null +++ b/vendor/league/climate/src/TerminalObject/Helper/SleeperInterface.php @@ -0,0 +1,13 @@ +ignore_tags)) { + $this->ignore_tags = array_keys($this->parser->tags->all()); + } + } + + /** + * Determine the length of the string without any tags + * + * @param string $str + * + * @return integer + */ + protected function lengthWithoutTags($str) + { + $this->setIgnoreTags(); + + return mb_strwidth($this->withoutTags($str), 'UTF-8'); + } + + /** + * Get the string without the tags that are to be ignored + * + * @param string $str + * + * @return string + */ + protected function withoutTags($str) + { + $this->setIgnoreTags(); + + return str_replace($this->ignore_tags, '', $str); + } + + /** + * Apply padding to a string + * + * @param string $str + * @param string $final_length + * @param string $padding_side + * + * @return string + */ + protected function pad($str, $final_length, $padding_side = 'right') + { + $padding = $final_length - $this->lengthWithoutTags($str); + + if ($padding_side == 'left') { + return str_repeat(' ', $padding) . $str; + } + + return $str . str_repeat(' ', $padding); + } + + /** + * Apply padding to an array of strings + * + * @param array $arr + * @param integer $final_length + * @param string $padding_side + * + * @return array + */ + protected function padArray($arr, $final_length, $padding_side = 'right') + { + foreach ($arr as $key => $value) { + $arr[$key] = $this->pad($value, $final_length, $padding_side); + } + + return $arr; + } + + /** + * Find the max string length in an array + * + * @param array $arr + * @return int + */ + protected function maxStrLen(array $arr) + { + return max($this->arrayOfStrLens($arr)); + } + + /** + * Get an array of the string lengths from an array of strings + * + * @param array $arr + * @return array + */ + protected function arrayOfStrLens(array $arr) + { + return array_map([$this, 'lengthWithoutTags'], $arr); + } +} diff --git a/vendor/league/climate/src/TerminalObject/Router/BaseRouter.php b/vendor/league/climate/src/TerminalObject/Router/BaseRouter.php new file mode 100644 index 0000000..cabbc7b --- /dev/null +++ b/vendor/league/climate/src/TerminalObject/Router/BaseRouter.php @@ -0,0 +1,89 @@ +extensions[$key] = $class; + } + + /** + * Get the full path for the class based on the key + * + * @param string $class + * + * @return string + */ + public function path($class) + { + return $this->getExtension($class) ?: $this->getPath($this->shortName($class)); + } + + /** + * Determines if the requested class is a + * valid terminal object class + * + * @param string $class + * + * @return boolean + */ + public function exists($class) + { + $class = $this->path($class); + + return (is_object($class) || class_exists($class)); + } + + /** + * Get the full path for the terminal object class + * + * @param string $class + * + * @return string + */ + protected function getPath($class) + { + return 'League\CLImate\TerminalObject\\' . $this->pathPrefix() . '\\' . $class; + } + + /** + * Get an extension by its key + * + * @param string $key + * + * @return string|false Full class path to extension + */ + protected function getExtension($key) + { + if (array_key_exists($key, $this->extensions)) { + return $this->extensions[$key]; + } + + return false; + } + + /** + * Get the class short name + * + * @param string $name + * + * @return string + */ + protected function shortName($name) + { + $name = str_replace('_', ' ', $name); + $name = ucwords($name); + + return str_replace(' ', '', $name); + } +} diff --git a/vendor/league/climate/src/TerminalObject/Router/BasicRouter.php b/vendor/league/climate/src/TerminalObject/Router/BasicRouter.php new file mode 100644 index 0000000..a30b9c9 --- /dev/null +++ b/vendor/league/climate/src/TerminalObject/Router/BasicRouter.php @@ -0,0 +1,42 @@ +result()); + + $this->output->persist(); + + foreach ($results as $result) { + if ($obj->sameLine()) { + $this->output->sameLine(); + } + + $this->output->write($obj->getParser()->apply($result)); + } + + $this->output->persist(false); + } +} diff --git a/vendor/league/climate/src/TerminalObject/Router/DynamicRouter.php b/vendor/league/climate/src/TerminalObject/Router/DynamicRouter.php new file mode 100644 index 0000000..8456fb7 --- /dev/null +++ b/vendor/league/climate/src/TerminalObject/Router/DynamicRouter.php @@ -0,0 +1,32 @@ +output($this->output); + + return $obj; + } +} diff --git a/vendor/league/climate/src/TerminalObject/Router/ExtensionCollection.php b/vendor/league/climate/src/TerminalObject/Router/ExtensionCollection.php new file mode 100644 index 0000000..fea4f2a --- /dev/null +++ b/vendor/league/climate/src/TerminalObject/Router/ExtensionCollection.php @@ -0,0 +1,147 @@ + [], 'dynamic' => []]; + + /** + * @var string $basic_interface + */ + protected $basic_interface = 'League\CLImate\TerminalObject\Basic\BasicTerminalObjectInterface'; + + /** + * @var string $dynamic_interface + */ + protected $dynamic_interface = 'League\CLImate\TerminalObject\Dynamic\DynamicTerminalObjectInterface'; + + public function __construct($key, $class) + { + $this->createCollection($key, $class); + } + + public function collection() + { + return $this->collection; + } + + /** + * Create the collection from the key/class + * + * @param string $original_key + * @param string|object|array $original_class + * + * @return void + */ + protected function createCollection($original_key, $original_class) + { + $collection = $this->convertToArray($original_key, $original_class); + + foreach ($collection as $key => $class) { + $this->validateExtension($class); + $this->collection[$this->getType($class)][$this->getKey($key, $class)] = $class; + } + } + + /** + * Convert the given class and key to an array of classes + * + * @param string|object|array $class + * @param string $key Optional custom key instead of class name + * + * @return array + */ + protected function convertToArray($key, $class) + { + if (is_array($class)) { + return $class; + } + + return [$this->getKey($key, $class) => $class]; + } + + /** + * Ensure that the extension is valid + * + * @param string|object|array $class + */ + protected function validateExtension($class) + { + $this->validateClassExists($class); + $this->validateClassImplementation($class); + } + + /** + * @param string|object $class + * + * @throws UnexpectedValueException if extension class does not exist + */ + protected function validateClassExists($class) + { + if (is_string($class) && !class_exists($class)) { + throw new UnexpectedValueException('Class does not exist: ' . $class); + } + } + + /** + * @param string|object $class + * + * @throws InvalidArgumentException if extension class does not implement either Dynamic or Basic interface + */ + protected function validateClassImplementation($class) + { + $str_class = is_string($class); + + $valid_implementation = (is_a($class, $this->basic_interface, $str_class) + || is_a($class, $this->dynamic_interface, $str_class)); + + if (!$valid_implementation) { + throw new InvalidArgumentException('Class must implement either ' + . $this->basic_interface . ' or ' . $this->dynamic_interface); + } + } + + /** + * Determine the extension key based on the class + * + * @param string|null $key + * @param string|object $class + * + * @return string + */ + protected function getKey($key, $class) + { + if ($key === null || !is_string($key)) { + $class_path = (is_string($class)) ? $class : get_class($class); + + $key = explode('\\', $class_path); + $key = end($key); + } + + return Helper::snakeCase($key); + } + + /** + * Get the type of class the extension implements + * + * @param string|object $class + * + * @return string 'basic' or 'dynamic' + */ + protected function getType($class) + { + if (is_a($class, $this->basic_interface, is_string($class))) { + return 'basic'; + } + + return 'dynamic'; + } +} diff --git a/vendor/league/climate/src/TerminalObject/Router/Router.php b/vendor/league/climate/src/TerminalObject/Router/Router.php new file mode 100644 index 0000000..0edc640 --- /dev/null +++ b/vendor/league/climate/src/TerminalObject/Router/Router.php @@ -0,0 +1,157 @@ +dynamic = $dynamic ?: new DynamicRouter(); + $this->basic = $basic ?: new BasicRouter(); + } + + /** + * Register a custom class with the router + * + * @param string $key + * @param string $class + */ + public function addExtension($key, $class) + { + $extension = new ExtensionCollection($key, $class); + + foreach ($extension->collection() as $obj_type => $collection) { + foreach ($collection as $obj_key => $obj_class) { + $this->{$obj_type}->addExtension($obj_key, $obj_class); + } + } + } + + /** + * Check if the name matches an existing terminal object + * + * @param string $name + * + * @return boolean + */ + public function exists($name) + { + return ($this->basic->exists($name) || $this->dynamic->exists($name)); + } + + /** + * Execute a terminal object using given arguments + * + * @param string $name + * @param mixed $arguments + * + * @return null|\League\CLImate\TerminalObject\Basic\BasicTerminalObjectInterface + */ + public function execute($name, $arguments) + { + $router = $this->getRouter($name); + + $router->output($this->output); + + $obj = $this->getObject($router, $name, $arguments); + + $obj->parser($this->parser); + $obj->util($this->util); + + // If the object needs any settings, import them + foreach ($obj->settings() as $obj_setting) { + $setting = $this->settings->get($obj_setting); + + if ($setting) { + $obj->importSetting($setting); + } + } + + return $router->execute($obj); + } + + /** + * Get the object whether it's a string or already instantiated + * + * @param \League\CLImate\TerminalObject\Router\RouterInterface $router + * @param string $name + * @param array $arguments + * + * @return \League\CLImate\TerminalObject\Dynamic\DynamicTerminalObjectInterface|\League\CLImate\TerminalObject\Basic\BasicTerminalObjectInterface + */ + protected function getObject($router, $name, $arguments) + { + $obj = $router->path($name); + + if (is_string($obj)) { + $obj = (new \ReflectionClass($obj))->newInstanceArgs($arguments); + } + + if (method_exists($obj, 'arguments')) { + call_user_func_array([$obj, 'arguments'], $arguments); + } + + return $obj; + } + + /** + * Determine which type of router we are using and return it + * + * @param string $name + * + * @return \League\CLImate\TerminalObject\Router\RouterInterface|null + */ + protected function getRouter($name) + { + if ($this->basic->exists($name)) { + return $this->basic; + } + + if ($this->dynamic->exists($name)) { + return $this->dynamic; + } + } + + /** + * Set the settings property + * + * @param \League\CLImate\Settings\Manager $settings + * + * @return Router + */ + public function settings(Manager $settings) + { + $this->settings = $settings; + + return $this; + } +} diff --git a/vendor/league/climate/src/TerminalObject/Router/RouterInterface.php b/vendor/league/climate/src/TerminalObject/Router/RouterInterface.php new file mode 100644 index 0000000..218f8ae --- /dev/null +++ b/vendor/league/climate/src/TerminalObject/Router/RouterInterface.php @@ -0,0 +1,29 @@ +add('out', new Writer\StdOut); + $this->add('error', new Writer\StdErr); + $this->add('buffer', new Writer\Buffer); + + $this->defaultTo('out'); + } + + /** + * Dictate that a new line should not be added after the output + */ + public function sameLine() + { + $this->new_line = false; + + return $this; + } + + /** + * Add a writer to the available writers + * + * @param string $key + * @param WriterInterface|array $writer + * + * @return \League\CLImate\Util\Output + */ + public function add($key, $writer) + { + $this->writers[$key] = $this->resolve(Helper::toArray($writer)); + + return $this; + } + + /** + * Set the default writer + * + * @param string|array $keys + */ + public function defaultTo($keys) + { + $this->default = $this->getWriters($keys); + } + + /** + * Add a default writer + * + * @param string|array $keys + */ + public function addDefault($keys) + { + $this->default = array_merge($this->default, $this->getWriters($keys)); + } + + /** + * Register a writer to be used just once + * + * @param string|array $keys + * + * @return \League\CLImate\Util\Output + */ + public function once($keys) + { + $this->once = $this->getWriters($keys); + + return $this; + } + + /** + * Persist or un-persist one time writers (for multi-line output) + * + * @param bool $persist + * + * @return \League\CLImate\Util\Output + */ + public function persist($persist = true) + { + $this->persist = (bool) $persist; + + if (!$this->persist) { + $this->resetOneTimers(); + } + + return $this; + } + + /** + * Get a specific writer + * + * @param string $writer + * + * @return WriterInterface|array + * @throws UnexpectedValueException if writer key doesn't exist + */ + public function get($writer) + { + if (!array_key_exists($writer, $this->writers)) { + throw new UnexpectedValueException('Unknown writer [' . $writer . ']'); + } + + if (count($this->writers[$writer]) == 1) { + return reset($this->writers[$writer]); + } + + return $this->writers[$writer]; + } + + /** + * Get the currently available writers + * + * @return array + */ + public function getAvailable() + { + $writers = []; + + foreach ($this->writers as $key => $writer) { + $writers[$key] = $this->getReadable($writer); + } + + return $writers; + } + + /** + * Write the content using the provided writer + * + * @param string $content + */ + public function write($content) + { + if ($this->new_line) { + $content .= PHP_EOL; + } + + foreach ($this->getCurrentWriters() as $writer) { + $writer->write($content); + } + + $this->resetOneTimers(); + } + + /** + * Resolve the writer(s) down to an array of WriterInterface classes + * + * @param WriterInterface|array|string $writer + * + * @return array + */ + protected function resolve($writer) + { + $resolver = 'resolve' . ucwords(gettype($writer)) . 'Writer'; + + if (method_exists($this, $resolver) && $resolved = $this->{$resolver}($writer)) { + return $resolved; + } + + $this->handleUnknownWriter($writer); + } + + /** + * @param array $writer + * + * @return array + */ + protected function resolveArrayWriter($writer) + { + return Helper::flatten(array_map([$this, 'resolve'], $writer)); + } + + /** + * @param object $writer + * + * @return WriterInterface|false + */ + protected function resolveObjectWriter($writer) + { + if ($writer instanceof WriterInterface) { + return $writer; + } + + return false; + } + + /** + * @param string $writer + * + * @return array|false + */ + protected function resolveStringWriter($writer) + { + if (is_string($writer) && array_key_exists($writer, $this->writers)) { + return $this->writers[$writer]; + } + + return false; + } + + /** + * @param mixed $writer + * @throws InvalidArgumentException For non-valid writer + */ + protected function handleUnknownWriter($writer) + { + // If we've gotten this far and don't know what it is, + // let's at least try and give a helpful error message + if (is_object($writer)) { + throw new InvalidArgumentException('Class [' . get_class($writer) . '] must implement ' + . 'League\CLImate\Util\Writer\WriterInterface.'); + } + + // No idea, just tell them we can't resolve it + throw new InvalidArgumentException('Unable to resolve writer [' . $writer . ']'); + } + + /** + * Get the readable version of the writer(s) + * + * @param array $writer + * + * @return string|array + */ + protected function getReadable(array $writer) + { + $classes = array_map('get_class', $writer); + + if (count($classes) == 1) { + return reset($classes); + } + + return $classes; + } + + /** + * Get the writers based on their keys + * + * @param string|array $keys + * + * @return array + */ + protected function getWriters($keys) + { + $writers = array_flip(Helper::toArray($keys)); + + return Helper::flatten(array_intersect_key($this->writers, $writers)); + } + + /** + * @return WriterInterface[] + */ + protected function getCurrentWriters() + { + return $this->once ?: $this->default; + } + + /** + * Reset anything only used for the current content being written + */ + protected function resetOneTimers() + { + // Reset new line flag for next time + $this->new_line = true; + + if (!$this->persist) { + // Reset once since we only want to use it... once. + $this->once = null; + } + } +} diff --git a/vendor/league/climate/src/Util/OutputImporter.php b/vendor/league/climate/src/Util/OutputImporter.php new file mode 100644 index 0000000..e508f16 --- /dev/null +++ b/vendor/league/climate/src/Util/OutputImporter.php @@ -0,0 +1,23 @@ +output = $output; + } +} diff --git a/vendor/league/climate/src/Util/Reader/ReaderInterface.php b/vendor/league/climate/src/Util/Reader/ReaderInterface.php new file mode 100644 index 0000000..6ef947f --- /dev/null +++ b/vendor/league/climate/src/Util/Reader/ReaderInterface.php @@ -0,0 +1,16 @@ +getStdIn(), 1024)); + } + + /** + * Read from STDIN until EOF (^D) is reached + * + * @return string + */ + public function multiLine() + { + return trim(stream_get_contents($this->getStdIn())); + } + + /** + * Read one character + * + * @param int $count + * + * @return string + */ + public function char($count = 1) + { + return fread($this->getStdIn(), $count); + } + + /** + * Read the line, but hide what the user is typing + * + * @return string + */ + public function hidden() + { + return CliPrompt::hiddenPrompt(); + } + + /** + * Return a valid STDIN, even if it previously EOF'ed + * + * Lazily re-opens STDIN after hitting an EOF + * + * @return resource + * @throws RuntimeException + */ + protected function getStdIn() + { + if ($this->stdIn && !feof($this->stdIn)) { + return $this->stdIn; + } + + try { + $this->setStdIn(); + } catch (\Error $e) { + throw new RuntimeException('Unable to read from STDIN', 0, $e); + } + + return $this->stdIn; + } + + /** + * Attempt to set the stdin property + * + * @return void + * @throws RuntimeException + */ + protected function setStdIn() + { + if ($this->stdIn !== false) { + fclose($this->stdIn); + } + + $this->stdIn = fopen('php://stdin', 'r'); + + if (!$this->stdIn) { + throw new RuntimeException('Unable to read from STDIN'); + } + } +} diff --git a/vendor/league/climate/src/Util/System/Linux.php b/vendor/league/climate/src/Util/System/Linux.php new file mode 100644 index 0000000..eae9f08 --- /dev/null +++ b/vendor/league/climate/src/Util/System/Linux.php @@ -0,0 +1,109 @@ +getDimension($this->tput("cols")); + } + + /** + * Get the height of the terminal + * + * @return integer|null + */ + public function height() + { + return $this->getDimension($this->tput("lines")); + } + + /** + * Get a value from the tput command. + * + * @param string $type + * + * @return array|null|string + */ + private function tput($type) + { + return $this->exec("tput {$type} 2>/dev/null"); + } + + /** + * Determine if system has access to bash commands + * + * @return bool + */ + public function canAccessBash() + { + return (rtrim($this->exec("/usr/bin/env bash -c 'echo OK'")) === 'OK'); + } + + /** + * Display a hidden response prompt and return the response + * + * @param string $prompt + * + * @return string + */ + public function hiddenResponsePrompt($prompt) + { + $bash_command = 'read -s -p "' . $prompt . '" response && echo $response'; + + return rtrim($this->exec("/usr/bin/env bash -c '{$bash_command}'")); + } + + /** + * Determine if dimension is numeric and return it + * + * @param integer|string|null $dimension + * + * @return integer|null + */ + protected function getDimension($dimension) + { + return (is_numeric($dimension)) ? $dimension : null; + } + + /** + * Check if the stream supports ansi escape characters. + * + * Based on https://github.com/symfony/symfony/blob/master/src/Symfony/Component/Console/Output/StreamOutput.php + * + * @return bool + */ + protected function systemHasAnsiSupport() + { + if ('Hyper' === getenv('TERM_PROGRAM')) { + return true; + } + + # If we're running in a web context then we can't use stdout + if (!defined('STDOUT')) { + return false; + } + + $stream = \STDOUT; + + if (function_exists('stream_isatty')) { + return @stream_isatty($stream); + } + + if (function_exists('posix_isatty')) { + return @posix_isatty($stream); + } + + $stat = @fstat($stream); + // Check if formatted mode is S_IFCHR + return $stat ? 0020000 === ($stat['mode'] & 0170000) : false; + } +} diff --git a/vendor/league/climate/src/Util/System/System.php b/vendor/league/climate/src/Util/System/System.php new file mode 100644 index 0000000..1eaaf11 --- /dev/null +++ b/vendor/league/climate/src/Util/System/System.php @@ -0,0 +1,68 @@ +force_ansi = $force; + } + + /** + * @return integer|null + */ + abstract public function width(); + + /** + * @return integer|null + */ + abstract public function height(); + + /** + * Check if the stream supports ansi escape characters. + * + * @return bool + */ + abstract protected function systemHasAnsiSupport(); + + /** + * Check if we are forcing ansi, fallback to system support + * + * @return bool + */ + public function hasAnsiSupport() + { + if (is_bool($this->force_ansi)) { + return $this->force_ansi; + } + + return $this->systemHasAnsiSupport(); + } + + /** + * Wraps exec function, allowing the dimension methods to decouple + * + * @param string $command + * @param boolean $full + * + * @return string|array + */ + public function exec($command, $full = false) + { + if ($full) { + exec($command, $output); + + return $output; + } + + return exec($command); + } +} diff --git a/vendor/league/climate/src/Util/System/SystemFactory.php b/vendor/league/climate/src/Util/System/SystemFactory.php new file mode 100644 index 0000000..b6137b3 --- /dev/null +++ b/vendor/league/climate/src/Util/System/SystemFactory.php @@ -0,0 +1,44 @@ +getDimension('width'); + } + + /** + * Get the height of the terminal + * + * @return integer|null + */ + public function height() + { + return $this->getDimension('height'); + } + + /** + * Get specified terminal dimension + * + * @param string $key + * + * @return integer|null + */ + + protected function getDimension($key) + { + $index = array_search($key, ['height', 'width']); + $dimensions = $this->getDimensions(); + + return (!empty($dimensions[$index])) ? $dimensions[$index] : null; + } + + /** + * Get information about the dimensions of the terminal + * + * @return array + */ + protected function getDimensions() + { + $output = $this->exec('mode CON', true); + + if (!is_array($output)) { + return []; + } + + $output = implode("\n", $output); + + preg_match_all('/.*:\s*(\d+)/', $output, $matches); + + return (!empty($matches[1])) ? $matches[1] : []; + } + + /** + * Check if the stream supports ansi escape characters. + * + * Based on https://github.com/symfony/symfony/blob/master/src/Symfony/Component/Console/Output/StreamOutput.php + * + * @return bool + */ + protected function systemHasAnsiSupport() + { + return (function_exists('sapi_windows_vt100_support') && @sapi_windows_vt100_support(STDOUT)) + || false !== getenv('ANSICON') + || 'ON' === getenv('ConEmuANSI') + || 'Hyper' === getenv('TERM_PROGRAM') + || 'xterm' === getenv('TERM'); + } +} diff --git a/vendor/league/climate/src/Util/UtilFactory.php b/vendor/league/climate/src/Util/UtilFactory.php new file mode 100644 index 0000000..3584a6b --- /dev/null +++ b/vendor/league/climate/src/Util/UtilFactory.php @@ -0,0 +1,66 @@ +system = $system ?: SystemFactory::getInstance(); + $this->cursor = $cursor ?: new Cursor(); + } + + /** + * Get the width of the terminal + * + * @return integer + */ + + public function width() + { + return (int) $this->getDimension($this->system->width(), 80); + } + + /** + * Get the height of the terminal + * + * @return integer + */ + + public function height() + { + return (int) $this->getDimension($this->system->height(), 25); + } + + /** + * Determine if the value is numeric, fallback to a default if not + * + * @param integer|null $dimension + * @param integer $default + * + * @return integer + */ + + protected function getDimension($dimension, $default) + { + return (is_numeric($dimension)) ? $dimension : $default; + } +} diff --git a/vendor/league/climate/src/Util/UtilImporter.php b/vendor/league/climate/src/Util/UtilImporter.php new file mode 100644 index 0000000..88debfc --- /dev/null +++ b/vendor/league/climate/src/Util/UtilImporter.php @@ -0,0 +1,23 @@ +util = $util; + } +} diff --git a/vendor/league/climate/src/Util/Writer/Buffer.php b/vendor/league/climate/src/Util/Writer/Buffer.php new file mode 100644 index 0000000..58f1051 --- /dev/null +++ b/vendor/league/climate/src/Util/Writer/Buffer.php @@ -0,0 +1,44 @@ +contents .= $content; + } + + + /** + * Get the buffered data. + * + * @return string + */ + public function get() + { + return $this->contents; + } + + /** + * Clean the buffer and throw away any data. + * + * @return void + */ + public function clean() + { + $this->contents = ""; + } +} diff --git a/vendor/league/climate/src/Util/Writer/File.php b/vendor/league/climate/src/Util/Writer/File.php new file mode 100644 index 0000000..0550249 --- /dev/null +++ b/vendor/league/climate/src/Util/Writer/File.php @@ -0,0 +1,101 @@ +resource = $resource; + $this->use_locking = $use_locking; + $this->gzip_file = $gzip_file; + } + + public function lock() + { + $this->use_locking = true; + + return $this; + } + + public function gzipped() + { + $this->gzip_file = true; + + return $this; + } + + /** + * Write the content to the stream + * + * @param string $content + */ + public function write($content) + { + $resource = $this->getResource(); + + if ($this->use_locking) { + flock($resource, LOCK_EX); + } + + gzwrite($resource, $content); + + if ($this->use_locking) { + flock($resource, LOCK_UN); + } + } + + protected function getResource() + { + if (is_resource($this->resource)) { + return $this->resource; + } + + $this->close_locally = true; + + if (!is_writable($this->resource)) { + throw new RuntimeException("The resource [{$this->resource}] is not writable"); + } + + if (!($this->resource = $this->openResource())) { + throw new RuntimeException("The resource could not be opened"); + } + + return $this->resource; + } + + protected function openResource() + { + if ($this->gzip_file) { + return gzopen($this->resource, 'a'); + } + + return fopen($this->resource, 'a'); + } + + public function _destruct() + { + if ($this->close_locally) { + gzclose($this->getResource()); + } + } +} diff --git a/vendor/league/climate/src/Util/Writer/StdErr.php b/vendor/league/climate/src/Util/Writer/StdErr.php new file mode 100644 index 0000000..4e778a6 --- /dev/null +++ b/vendor/league/climate/src/Util/Writer/StdErr.php @@ -0,0 +1,16 @@ + Prompts the user for input and hides what they type. If this fails for any + > reason and `$allowFallback` is set to `true` the prompt will be done using + > the usual `fgets()` and characters will be visible. + +- `Seld\CliPrompt\CliPrompt::prompt();` + + > Regular user prompt for input with characters being shown on screen. + +In both cases, the trailing newline the user enters when submitting the answer +is trimmed. + +Requirements +------------ + +PHP 5.3 and above + +License +------- + +CLI-Prompt is licensed under the MIT License - see the LICENSE file for details + +Acknowledgments +--------------- + +- This project uses hiddeninput.exe to prompt for passwords on Windows, sources + and details can be found on the [github page of the project](https://github.com/Seldaek/hidden-input). diff --git a/vendor/seld/cli-prompt/composer.json b/vendor/seld/cli-prompt/composer.json new file mode 100644 index 0000000..fa1d0d3 --- /dev/null +++ b/vendor/seld/cli-prompt/composer.json @@ -0,0 +1,35 @@ +{ + "name": "seld/cli-prompt", + "description": "Allows you to prompt for user input on the command line, and optionally hide the characters they type", + "type": "library", + "keywords": ["cli", "console", "hidden", "input", "prompt"], + "license": "MIT", + "require": { + "php": ">=5.3" + }, + "authors": [ + { + "name": "Jordi Boggiano", + "email": "j.boggiano@seld.be" + } + ], + "autoload": { + "psr-4": { + "Seld\\CliPrompt\\": "src/" + } + }, + "extra": { + "branch-alias": { + "dev-master": "1.x-dev" + } + }, + "require-dev": { + "phpstan/phpstan": "^0.12.63" + }, + "scripts": { + "phpstan": "vendor/bin/phpstan analyse" + }, + "config": { + "lock": false + } +} diff --git a/vendor/seld/cli-prompt/phpstan.neon.dist b/vendor/seld/cli-prompt/phpstan.neon.dist new file mode 100644 index 0000000..d7ce77b --- /dev/null +++ b/vendor/seld/cli-prompt/phpstan.neon.dist @@ -0,0 +1,5 @@ +parameters: + level: 8 + + paths: + - src/ diff --git a/vendor/seld/cli-prompt/res/example.php b/vendor/seld/cli-prompt/res/example.php new file mode 100644 index 0000000..5ce5b23 --- /dev/null +++ b/vendor/seld/cli-prompt/res/example.php @@ -0,0 +1,15 @@ +Ylx+k1K6PLHo z_e!z_fhOzeA3JTX&-Z@s{rFOgjEwBlqjr!)9f zjyHz`A+ni`!0Taby{Uj5Y>jQq(k5A+X})PLWAi|{IZbtc8n^^trM{GI=P_15U6d?l zJJ3PW8XjfHpR}6`k{&5@JcEeH_SqQoQbU62o2YS30W)p_t&Fjy*RXQCZt$gCf|ao| zx&3R}m6|-Lfi@pua=$26n(UlnWo$>K67*|+#(qL_An=?l0M02AhOSJDv3;~?1ORfw z76EdK#MpSHqACHLcnJLIYlCSiX4eS@Pr8rN)Xwz0dk7O*y^0_C(Yks2Kvg! z-d-fJ)F9@k?>)m(XqDKIe2OKfhCQde9fpO0ko24yn*4xzX7q+ze`Z*=aJgwV?D?73 zaJ8UkSk|NN>@-|mB*f`EIK7$ElgAB<7p&p`^Vuq$58#;?B^*Bz7&d$B#+AYUC z(^m|`7{lqx&b^5$;i`j|S!+u|lcaQplp_&Nb)!>r>vGh3wb!tW zLq6%bkSt8jO|(vWH>LiPV(Xkp%BiGhl1q!PXXNKVKE!>Y5cHc2%cJOJA{-&ZsSn`T z#8~TA#(HWH4m>uCd+kCMTFgMI*s*n3!iCOwEI`{vGcVhzDu!Lw%-Ea^JATtrF`q3`+#KvvYJ0vM~A}D#LOD zlw`4ncB0U*Jji=--Wz#>I&5?hy;MgYW2u91d8ob=7MWfY`u;7Xe-J{Qsb0=0p|SM2 zG|=~mERIj4?gi)Ew|{LIN#oAsh20k_khIYjJBBN6rrIJ=eQO=nE;rTnPSiaQS$1$# z+|JRh0!IbQIa*f1(TZ}QM;|WO0+jTy(e)ggN4>zqp2E>C>hGPLHjHBh--2%@{EZNE zbUk{<3MABX&20QwK{MxK8`1Vk>^%dO5i@VTfu>NG3$K4NC=hSPsj9UYy`rNO}sBnB9QdKdIk7G+2_amnWstdTYVg z7HgLJGC~XLZG`63GwH8PdO_+G(k6~?J8Wj5mQos#21kC4W#2)guQXI)!z^{@F)U)5 z*re+r(2dib3D4P~%Z6TL=$PIkpmm<_#isu%t=%DcIwNkJhMeJ|bpahHO%8h|y~Ccf zUg#xVk+dyu>Q1O7JZ~8KS>tqi0qK**X*y6yHM71`bT=kFZ=@E%oe2!Km1^2sa>v+onZ%x_>aOJF+N0{i~z|<(IzgT*{0PpQq}E zQpU35@bm;qI?t_znGI&5&4sZV>+%m}w$(4hSDvLk)l<{5XyMlnCl7C%AjM3XnWvVz z{NoFsX)JB)SoqABZxUa*Yq+^^(cbq4mL%^lO12c${z{pf+)|kTTI~nQywyYF6}6|8 zlsN9&{-vwTrTyu<5^90_AsIU-ID#ZG@6d%poU44<**%xVe?`uxf}_Mr$SLHLS|K_N zQnw>(Lr2U=%$-<2D~RSzbG)2W2u^KMDnFFE?GmmbQ)V)fty957F`4OvQ_25E68ITr z5?`suu`|v?r!y=gFOGj$%9IJ zuTP=&2GcnoZZ0qSe6YL-*-lg>Q#>?Ew`a=GDc4vI#<1sNdKn?n7iSj0Orl$-#FMFi zykr>X-Xvi>sVr;92+8*H!r|3L$#o~hXa0z>AmF=z z?|@FF;*S|S0yqsw0j>Z(3mX-HD!|{N-vYc9paC8Ld=|6?00!6(_%lERupO`&um*4k z0b~W>e*uhTe4;V;mq>(ox$9FB`wLt!*DKj~!aOh|fL&#Pg*b??tm%5~_6M#02wqeC zS~wO>TWGnSp^r<0&8f2V6W->w=C+p~daC5e5wNQM*(* z66^}b0(!q3)zq$mu&VnbR#nr3;h5DS*o7{y66=!#;Dy4$pd1ZH<6WEOi0oJ8SxRL* z*v-9@Z^2w%^S(w5dO{_9Duby%2RT~;ppxaE$l()x6&}>7Wcg=u_&>f`Vs8OJGTy{X z2HpG=ThJz<{%|4Qq-~ad0qcrc87n88DHpM(nypwXIkZn<{zIT$ul&BQ?{ApCAZtyr zs2YpNt@x(G*faTU*HCKnAk(G=Tl~>r1QK8LY~J8mFFGoN5iIkYSwlm4Lsj#g4dsE5 zU-4;*Kdh-zv!rT4N$O}Q&n)?v0-9Y)lRFz58^P-KtKonzrfQ1p@0V_10^0||cGRn9 zRG<-#_TEV2nn4{BOh{YVBR4e!V!D?0K%BAlQN!D%M#k1bHypiIHT)5tlj>p0Pp_;+ z!cqC-JIs@JRhB+#teGs$Cib_=(yjRo4OJg^YPg%58aJVsC(LQ?W6%pn!-#aMZwoPcopo^Rn6BE z3=c5&W5~pP(C(-2r;PnH-S0{F`runM0ERCf3rESX$+S(MKOXmKJL9zXF}9-lf^xUs z+bb)+P%L&gV@<4q{6w^xEJ>Y>TQFUeoz0o-yq)jUqww=?wjUO8Y{a5G;DJ0Jr!LL+ zWhgsLuzi&eDrGDn$2DJwpFfH-?SGWbr>qRb?v{P`_%)So)CQgzO^HQ%;y#tJ=knH4 z95jX;^bF#BiuTH^%-j}{9VrZD=R%Q%wselH^p>5 z7d>gWB-st&3Fj%Mt*|tR5iK3J=`xhs&G)I7E>`FO@o7L z@S$B!pYMuzz5DN@X!O4DPm5n@raPJn-Q#o*m*e^5lk$g?0esg%$;>g5QW-|;c=H2GM}bo2tW^D924wmOkrUbWxcQ# z#v6bP%Tdfe~jtCRzAL;-OahZ=#yvUixu2-9fD2j$*|YY`F?0wF-{a# ztr<&kZjZ+81}6ZESqtgW)8kP#s@VLTSUR{}6?U^R*x7RE3Rl&n=VnFFqg9Uqz1n@N9N|=9<4} zuJfy^+}|D9X&vm3MAdqmu0&UMd^=K>b1hLAm_E!$rZC2b;;T~Dl zI`Eo_yRY76uM})|6wk9->of(=9&4jLv5#p@OzS~Yl>@pG)^>6`R+KtL{<4ly4o9WiM!%p_pfROU354)e8PIeE z1_s?#;OX6waNvvb&UQRN(WLbR+}&b#jo&WY-LlwCX}Q*$jGuKYuOGoIoyR(>e}}ix z+t}Q^cEcC8Y{@h}>HmJ^gD!l@gzwHmiBKl26x_lZVZG2UY!`w;RJd122;US&geQdW z3Qq}R!gIo5;ka;0I4c-Jq5X6A6?VzK&c4y!ZXdAUYu{r}*!SBXw?Aor+J4-A(*COb zb^CwV-?3k`zi-cX*c`VzL`RLI(b4MgIrGN z%ojf`E*6)Gg1A9!7q^N##2zsss^V9~-Qt7d!{UDNZ^XY9pA^3@9ui*?e=7c5d`nD; z?}~R(p>y1Kw!>|X4ycYEAkcZa*n-R%y! zqi)Up756UpqwfE7=hfigw$k~G@25gaxF9UGTkV>C(7x1Rbx4jb#|}rxq0vQ!n-c#f J0sQ~1{4brj`U(I5 literal 0 HcmV?d00001 diff --git a/vendor/seld/cli-prompt/src/CliPrompt.php b/vendor/seld/cli-prompt/src/CliPrompt.php new file mode 100644 index 0000000..54e469c --- /dev/null +++ b/vendor/seld/cli-prompt/src/CliPrompt.php @@ -0,0 +1,127 @@ + + * + * For the full copyright and license information, please view the LICENSE + * file that was distributed with this source code. + */ + +namespace Seld\CliPrompt; + +class CliPrompt +{ + /** + * Prompts the user for input and shows what they type + * + * @return string + */ + public static function prompt() + { + $stdin = fopen('php://stdin', 'r'); + if (false === $stdin) { + throw new \RuntimeException('Failed to open STDIN, could not prompt user for input.'); + } + $answer = self::trimAnswer(fgets($stdin, 4096)); + fclose($stdin); + + return $answer; + } + + /** + * Prompts the user for input and hides what they type + * + * @param bool $allowFallback If prompting fails for any reason and this is set to true the prompt + * will be done using the regular prompt() function, otherwise a + * \RuntimeException is thrown. + * @return string + * @throws \RuntimeException on failure to prompt, unless $allowFallback is true + */ + public static function hiddenPrompt($allowFallback = false) + { + // handle windows + if (defined('PHP_WINDOWS_VERSION_BUILD')) { + // fallback to hiddeninput executable + $exe = __DIR__.'\\..\\res\\hiddeninput.exe'; + + // handle code running from a phar + if ('phar:' === substr(__FILE__, 0, 5)) { + $tmpExe = sys_get_temp_dir().'/hiddeninput.exe'; + + // use stream_copy_to_stream instead of copy + // to work around https://bugs.php.net/bug.php?id=64634 + $source = fopen($exe, 'r'); + $target = fopen($tmpExe, 'w+'); + if (false === $source) { + throw new \RuntimeException('Failed to open '.$exe.' for reading.'); + } + if (false === $target) { + throw new \RuntimeException('Failed to open '.$tmpExe.' for writing.'); + } + stream_copy_to_stream($source, $target); + fclose($source); + fclose($target); + unset($source, $target); + + $exe = $tmpExe; + } + + $output = shell_exec($exe); + + // clean up + if (isset($tmpExe)) { + unlink($tmpExe); + } + + if ($output !== null) { + // output a newline to be on par with the regular prompt() + echo PHP_EOL; + + return self::trimAnswer($output); + } + } + + if (file_exists('/usr/bin/env')) { + // handle other OSs with bash/zsh/ksh/csh if available to hide the answer + $test = "/usr/bin/env %s -c 'echo OK' 2> /dev/null"; + foreach (array('bash', 'zsh', 'ksh', 'csh', 'sh') as $sh) { + $output = shell_exec(sprintf($test, $sh)); + if (is_string($output) && 'OK' === rtrim($output)) { + $shell = $sh; + break; + } + } + + if (isset($shell)) { + $readCmd = ($shell === 'csh') ? 'set mypassword = $<' : 'read -r mypassword'; + $command = sprintf("/usr/bin/env %s -c 'stty -echo; %s; stty echo; echo \$mypassword'", $shell, $readCmd); + $output = shell_exec($command); + + if ($output !== null) { + // output a newline to be on par with the regular prompt() + echo PHP_EOL; + + return self::trimAnswer($output); + } + } + } + + // not able to hide the answer + if (!$allowFallback) { + throw new \RuntimeException('Could not prompt for input in a secure fashion, aborting'); + } + + return self::prompt(); + } + + /** + * @param string|bool $str + * @return string + */ + private static function trimAnswer($str) + { + return preg_replace('{\r?\n$}D', '', (string) $str) ?: ''; + } +} diff --git a/vendor/symfony/deprecation-contracts/.gitignore b/vendor/symfony/deprecation-contracts/.gitignore new file mode 100644 index 0000000..c49a5d8 --- /dev/null +++ b/vendor/symfony/deprecation-contracts/.gitignore @@ -0,0 +1,3 @@ +vendor/ +composer.lock +phpunit.xml diff --git a/vendor/symfony/deprecation-contracts/CHANGELOG.md b/vendor/symfony/deprecation-contracts/CHANGELOG.md new file mode 100644 index 0000000..7932e26 --- /dev/null +++ b/vendor/symfony/deprecation-contracts/CHANGELOG.md @@ -0,0 +1,5 @@ +CHANGELOG +========= + +The changelog is maintained for all Symfony contracts at the following URL: +https://github.com/symfony/contracts/blob/main/CHANGELOG.md diff --git a/vendor/symfony/deprecation-contracts/LICENSE b/vendor/symfony/deprecation-contracts/LICENSE new file mode 100644 index 0000000..ad85e17 --- /dev/null +++ b/vendor/symfony/deprecation-contracts/LICENSE @@ -0,0 +1,19 @@ +Copyright (c) 2020-2021 Fabien Potencier + +Permission is hereby granted, free of charge, to any person obtaining a copy +of this software and associated documentation files (the "Software"), to deal +in the Software without restriction, including without limitation the rights +to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +copies of the Software, and to permit persons to whom the Software is furnished +to do so, subject to the following conditions: + +The above copyright notice and this permission notice shall be included in all +copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN +THE SOFTWARE. diff --git a/vendor/symfony/deprecation-contracts/README.md b/vendor/symfony/deprecation-contracts/README.md new file mode 100644 index 0000000..4957933 --- /dev/null +++ b/vendor/symfony/deprecation-contracts/README.md @@ -0,0 +1,26 @@ +Symfony Deprecation Contracts +============================= + +A generic function and convention to trigger deprecation notices. + +This package provides a single global function named `trigger_deprecation()` that triggers silenced deprecation notices. + +By using a custom PHP error handler such as the one provided by the Symfony ErrorHandler component, +the triggered deprecations can be caught and logged for later discovery, both on dev and prod environments. + +The function requires at least 3 arguments: + - the name of the Composer package that is triggering the deprecation + - the version of the package that introduced the deprecation + - the message of the deprecation + - more arguments can be provided: they will be inserted in the message using `printf()` formatting + +Example: +```php +trigger_deprecation('symfony/blockchain', '8.9', 'Using "%s" is deprecated, use "%s" instead.', 'bitcoin', 'fabcoin'); +``` + +This will generate the following message: +`Since symfony/blockchain 8.9: Using "bitcoin" is deprecated, use "fabcoin" instead.` + +While not necessarily recommended, the deprecation notices can be completely ignored by declaring an empty +`function trigger_deprecation() {}` in your application. diff --git a/vendor/symfony/deprecation-contracts/composer.json b/vendor/symfony/deprecation-contracts/composer.json new file mode 100644 index 0000000..cc7cc12 --- /dev/null +++ b/vendor/symfony/deprecation-contracts/composer.json @@ -0,0 +1,35 @@ +{ + "name": "symfony/deprecation-contracts", + "type": "library", + "description": "A generic function and convention to trigger deprecation notices", + "homepage": "https://symfony.com", + "license": "MIT", + "authors": [ + { + "name": "Nicolas Grekas", + "email": "p@tchwork.com" + }, + { + "name": "Symfony Community", + "homepage": "https://symfony.com/contributors" + } + ], + "require": { + "php": ">=7.1" + }, + "autoload": { + "files": [ + "function.php" + ] + }, + "minimum-stability": "dev", + "extra": { + "branch-alias": { + "dev-main": "2.5-dev" + }, + "thanks": { + "name": "symfony/contracts", + "url": "https://github.com/symfony/contracts" + } + } +} diff --git a/vendor/symfony/deprecation-contracts/function.php b/vendor/symfony/deprecation-contracts/function.php new file mode 100644 index 0000000..d437150 --- /dev/null +++ b/vendor/symfony/deprecation-contracts/function.php @@ -0,0 +1,27 @@ + + * + * For the full copyright and license information, please view the LICENSE + * file that was distributed with this source code. + */ + +if (!function_exists('trigger_deprecation')) { + /** + * Triggers a silenced deprecation notice. + * + * @param string $package The name of the Composer package that is triggering the deprecation + * @param string $version The version of the package that introduced the deprecation + * @param string $message The message of the deprecation + * @param mixed ...$args Values to insert in the message using printf() formatting + * + * @author Nicolas Grekas + */ + function trigger_deprecation(string $package, string $version, string $message, ...$args): void + { + @trigger_error(($package || $version ? "Since $package $version: " : '').($args ? vsprintf($message, $args) : $message), \E_USER_DEPRECATED); + } +} diff --git a/vendor/symfony/finder/CHANGELOG.md b/vendor/symfony/finder/CHANGELOG.md new file mode 100644 index 0000000..6a44e87 --- /dev/null +++ b/vendor/symfony/finder/CHANGELOG.md @@ -0,0 +1,87 @@ +CHANGELOG +========= + +5.4.0 +----- + + * Deprecate `Comparator::setTarget()` and `Comparator::setOperator()` + * Add a constructor to `Comparator` that allows setting target and operator + * Finder's iterator has now `Symfony\Component\Finder\SplFileInfo` inner type specified + * Add recursive .gitignore files support + +5.0.0 +----- + + * added `$useNaturalSort` argument to `Finder::sortByName()` + +4.3.0 +----- + + * added Finder::ignoreVCSIgnored() to ignore files based on rules listed in .gitignore + +4.2.0 +----- + + * added $useNaturalSort option to Finder::sortByName() method + * the `Finder::sortByName()` method will have a new `$useNaturalSort` + argument in version 5.0, not defining it is deprecated + * added `Finder::reverseSorting()` to reverse the sorting + +4.0.0 +----- + + * removed `ExceptionInterface` + * removed `Symfony\Component\Finder\Iterator\FilterIterator` + +3.4.0 +----- + + * deprecated `Symfony\Component\Finder\Iterator\FilterIterator` + * added Finder::hasResults() method to check if any results were found + +3.3.0 +----- + + * added double-star matching to Glob::toRegex() + +3.0.0 +----- + + * removed deprecated classes + +2.8.0 +----- + + * deprecated adapters and related classes + +2.5.0 +----- + * added support for GLOB_BRACE in the paths passed to Finder::in() + +2.3.0 +----- + + * added a way to ignore unreadable directories (via Finder::ignoreUnreadableDirs()) + * unified the way subfolders that are not executable are handled by always throwing an AccessDeniedException exception + +2.2.0 +----- + + * added Finder::path() and Finder::notPath() methods + * added finder adapters to improve performance on specific platforms + * added support for wildcard characters (glob patterns) in the paths passed + to Finder::in() + +2.1.0 +----- + + * added Finder::sortByAccessedTime(), Finder::sortByChangedTime(), and + Finder::sortByModifiedTime() + * added Countable to Finder + * added support for an array of directories as an argument to + Finder::exclude() + * added searching based on the file content via Finder::contains() and + Finder::notContains() + * added support for the != operator in the Comparator + * [BC BREAK] filter expressions (used for file name and content) are no more + considered as regexps but glob patterns when they are enclosed in '*' or '?' diff --git a/vendor/symfony/finder/Comparator/Comparator.php b/vendor/symfony/finder/Comparator/Comparator.php new file mode 100644 index 0000000..23cf94e --- /dev/null +++ b/vendor/symfony/finder/Comparator/Comparator.php @@ -0,0 +1,117 @@ + + * + * For the full copyright and license information, please view the LICENSE + * file that was distributed with this source code. + */ + +namespace Symfony\Component\Finder\Comparator; + +/** + * @author Fabien Potencier + */ +class Comparator +{ + private $target; + private $operator = '=='; + + public function __construct(?string $target = null, string $operator = '==') + { + if (null === $target) { + trigger_deprecation('symfony/finder', '5.4', 'Constructing a "%s" without setting "$target" is deprecated.', __CLASS__); + } + + $this->target = $target; + $this->doSetOperator($operator); + } + + /** + * Gets the target value. + * + * @return string + */ + public function getTarget() + { + if (null === $this->target) { + trigger_deprecation('symfony/finder', '5.4', 'Calling "%s" without initializing the target is deprecated.', __METHOD__); + } + + return $this->target; + } + + /** + * @deprecated set the target via the constructor instead + */ + public function setTarget(string $target) + { + trigger_deprecation('symfony/finder', '5.4', '"%s" is deprecated. Set the target via the constructor instead.', __METHOD__); + + $this->target = $target; + } + + /** + * Gets the comparison operator. + * + * @return string + */ + public function getOperator() + { + return $this->operator; + } + + /** + * Sets the comparison operator. + * + * @throws \InvalidArgumentException + * + * @deprecated set the operator via the constructor instead + */ + public function setOperator(string $operator) + { + trigger_deprecation('symfony/finder', '5.4', '"%s" is deprecated. Set the operator via the constructor instead.', __METHOD__); + + $this->doSetOperator('' === $operator ? '==' : $operator); + } + + /** + * Tests against the target. + * + * @param mixed $test A test value + * + * @return bool + */ + public function test($test) + { + if (null === $this->target) { + trigger_deprecation('symfony/finder', '5.4', 'Calling "%s" without initializing the target is deprecated.', __METHOD__); + } + + switch ($this->operator) { + case '>': + return $test > $this->target; + case '>=': + return $test >= $this->target; + case '<': + return $test < $this->target; + case '<=': + return $test <= $this->target; + case '!=': + return $test != $this->target; + } + + return $test == $this->target; + } + + private function doSetOperator(string $operator): void + { + if (!\in_array($operator, ['>', '<', '>=', '<=', '==', '!='])) { + throw new \InvalidArgumentException(sprintf('Invalid operator "%s".', $operator)); + } + + $this->operator = $operator; + } +} diff --git a/vendor/symfony/finder/Comparator/DateComparator.php b/vendor/symfony/finder/Comparator/DateComparator.php new file mode 100644 index 0000000..8f651e1 --- /dev/null +++ b/vendor/symfony/finder/Comparator/DateComparator.php @@ -0,0 +1,50 @@ + + * + * For the full copyright and license information, please view the LICENSE + * file that was distributed with this source code. + */ + +namespace Symfony\Component\Finder\Comparator; + +/** + * DateCompare compiles date comparisons. + * + * @author Fabien Potencier + */ +class DateComparator extends Comparator +{ + /** + * @param string $test A comparison string + * + * @throws \InvalidArgumentException If the test is not understood + */ + public function __construct(string $test) + { + if (!preg_match('#^\s*(==|!=|[<>]=?|after|since|before|until)?\s*(.+?)\s*$#i', $test, $matches)) { + throw new \InvalidArgumentException(sprintf('Don\'t understand "%s" as a date test.', $test)); + } + + try { + $date = new \DateTime($matches[2]); + $target = $date->format('U'); + } catch (\Exception $e) { + throw new \InvalidArgumentException(sprintf('"%s" is not a valid date.', $matches[2])); + } + + $operator = $matches[1] ?? '=='; + if ('since' === $operator || 'after' === $operator) { + $operator = '>'; + } + + if ('until' === $operator || 'before' === $operator) { + $operator = '<'; + } + + parent::__construct($target, $operator); + } +} diff --git a/vendor/symfony/finder/Comparator/NumberComparator.php b/vendor/symfony/finder/Comparator/NumberComparator.php new file mode 100644 index 0000000..dd30820 --- /dev/null +++ b/vendor/symfony/finder/Comparator/NumberComparator.php @@ -0,0 +1,78 @@ + + * + * For the full copyright and license information, please view the LICENSE + * file that was distributed with this source code. + */ + +namespace Symfony\Component\Finder\Comparator; + +/** + * NumberComparator compiles a simple comparison to an anonymous + * subroutine, which you can call with a value to be tested again. + * + * Now this would be very pointless, if NumberCompare didn't understand + * magnitudes. + * + * The target value may use magnitudes of kilobytes (k, ki), + * megabytes (m, mi), or gigabytes (g, gi). Those suffixed + * with an i use the appropriate 2**n version in accordance with the + * IEC standard: http://physics.nist.gov/cuu/Units/binary.html + * + * Based on the Perl Number::Compare module. + * + * @author Fabien Potencier PHP port + * @author Richard Clamp Perl version + * @copyright 2004-2005 Fabien Potencier + * @copyright 2002 Richard Clamp + * + * @see http://physics.nist.gov/cuu/Units/binary.html + */ +class NumberComparator extends Comparator +{ + /** + * @param string|null $test A comparison string or null + * + * @throws \InvalidArgumentException If the test is not understood + */ + public function __construct(?string $test) + { + if (null === $test || !preg_match('#^\s*(==|!=|[<>]=?)?\s*([0-9\.]+)\s*([kmg]i?)?\s*$#i', $test, $matches)) { + throw new \InvalidArgumentException(sprintf('Don\'t understand "%s" as a number test.', $test ?? 'null')); + } + + $target = $matches[2]; + if (!is_numeric($target)) { + throw new \InvalidArgumentException(sprintf('Invalid number "%s".', $target)); + } + if (isset($matches[3])) { + // magnitude + switch (strtolower($matches[3])) { + case 'k': + $target *= 1000; + break; + case 'ki': + $target *= 1024; + break; + case 'm': + $target *= 1000000; + break; + case 'mi': + $target *= 1024 * 1024; + break; + case 'g': + $target *= 1000000000; + break; + case 'gi': + $target *= 1024 * 1024 * 1024; + break; + } + } + + parent::__construct($target, $matches[1] ?: '=='); + } +} diff --git a/vendor/symfony/finder/Exception/AccessDeniedException.php b/vendor/symfony/finder/Exception/AccessDeniedException.php new file mode 100644 index 0000000..ee195ea --- /dev/null +++ b/vendor/symfony/finder/Exception/AccessDeniedException.php @@ -0,0 +1,19 @@ + + * + * For the full copyright and license information, please view the LICENSE + * file that was distributed with this source code. + */ + +namespace Symfony\Component\Finder\Exception; + +/** + * @author Jean-François Simon + */ +class AccessDeniedException extends \UnexpectedValueException +{ +} diff --git a/vendor/symfony/finder/Exception/DirectoryNotFoundException.php b/vendor/symfony/finder/Exception/DirectoryNotFoundException.php new file mode 100644 index 0000000..c6cc0f2 --- /dev/null +++ b/vendor/symfony/finder/Exception/DirectoryNotFoundException.php @@ -0,0 +1,19 @@ + + * + * For the full copyright and license information, please view the LICENSE + * file that was distributed with this source code. + */ + +namespace Symfony\Component\Finder\Exception; + +/** + * @author Andreas Erhard + */ +class DirectoryNotFoundException extends \InvalidArgumentException +{ +} diff --git a/vendor/symfony/finder/Finder.php b/vendor/symfony/finder/Finder.php new file mode 100644 index 0000000..0b56965 --- /dev/null +++ b/vendor/symfony/finder/Finder.php @@ -0,0 +1,806 @@ + + * + * For the full copyright and license information, please view the LICENSE + * file that was distributed with this source code. + */ + +namespace Symfony\Component\Finder; + +use Symfony\Component\Finder\Comparator\DateComparator; +use Symfony\Component\Finder\Comparator\NumberComparator; +use Symfony\Component\Finder\Exception\DirectoryNotFoundException; +use Symfony\Component\Finder\Iterator\CustomFilterIterator; +use Symfony\Component\Finder\Iterator\DateRangeFilterIterator; +use Symfony\Component\Finder\Iterator\DepthRangeFilterIterator; +use Symfony\Component\Finder\Iterator\ExcludeDirectoryFilterIterator; +use Symfony\Component\Finder\Iterator\FilecontentFilterIterator; +use Symfony\Component\Finder\Iterator\FilenameFilterIterator; +use Symfony\Component\Finder\Iterator\LazyIterator; +use Symfony\Component\Finder\Iterator\SizeRangeFilterIterator; +use Symfony\Component\Finder\Iterator\SortableIterator; + +/** + * Finder allows to build rules to find files and directories. + * + * It is a thin wrapper around several specialized iterator classes. + * + * All rules may be invoked several times. + * + * All methods return the current Finder object to allow chaining: + * + * $finder = Finder::create()->files()->name('*.php')->in(__DIR__); + * + * @author Fabien Potencier + * + * @implements \IteratorAggregate + */ +class Finder implements \IteratorAggregate, \Countable +{ + public const IGNORE_VCS_FILES = 1; + public const IGNORE_DOT_FILES = 2; + public const IGNORE_VCS_IGNORED_FILES = 4; + + private $mode = 0; + private $names = []; + private $notNames = []; + private $exclude = []; + private $filters = []; + private $depths = []; + private $sizes = []; + private $followLinks = false; + private $reverseSorting = false; + private $sort = false; + private $ignore = 0; + private $dirs = []; + private $dates = []; + private $iterators = []; + private $contains = []; + private $notContains = []; + private $paths = []; + private $notPaths = []; + private $ignoreUnreadableDirs = false; + + private static $vcsPatterns = ['.svn', '_svn', 'CVS', '_darcs', '.arch-params', '.monotone', '.bzr', '.git', '.hg']; + + public function __construct() + { + $this->ignore = static::IGNORE_VCS_FILES | static::IGNORE_DOT_FILES; + } + + /** + * Creates a new Finder. + * + * @return static + */ + public static function create() + { + return new static(); + } + + /** + * Restricts the matching to directories only. + * + * @return $this + */ + public function directories() + { + $this->mode = Iterator\FileTypeFilterIterator::ONLY_DIRECTORIES; + + return $this; + } + + /** + * Restricts the matching to files only. + * + * @return $this + */ + public function files() + { + $this->mode = Iterator\FileTypeFilterIterator::ONLY_FILES; + + return $this; + } + + /** + * Adds tests for the directory depth. + * + * Usage: + * + * $finder->depth('> 1') // the Finder will start matching at level 1. + * $finder->depth('< 3') // the Finder will descend at most 3 levels of directories below the starting point. + * $finder->depth(['>= 1', '< 3']) + * + * @param string|int|string[]|int[] $levels The depth level expression or an array of depth levels + * + * @return $this + * + * @see DepthRangeFilterIterator + * @see NumberComparator + */ + public function depth($levels) + { + foreach ((array) $levels as $level) { + $this->depths[] = new Comparator\NumberComparator($level); + } + + return $this; + } + + /** + * Adds tests for file dates (last modified). + * + * The date must be something that strtotime() is able to parse: + * + * $finder->date('since yesterday'); + * $finder->date('until 2 days ago'); + * $finder->date('> now - 2 hours'); + * $finder->date('>= 2005-10-15'); + * $finder->date(['>= 2005-10-15', '<= 2006-05-27']); + * + * @param string|string[] $dates A date range string or an array of date ranges + * + * @return $this + * + * @see strtotime + * @see DateRangeFilterIterator + * @see DateComparator + */ + public function date($dates) + { + foreach ((array) $dates as $date) { + $this->dates[] = new Comparator\DateComparator($date); + } + + return $this; + } + + /** + * Adds rules that files must match. + * + * You can use patterns (delimited with / sign), globs or simple strings. + * + * $finder->name('/\.php$/') + * $finder->name('*.php') // same as above, without dot files + * $finder->name('test.php') + * $finder->name(['test.py', 'test.php']) + * + * @param string|string[] $patterns A pattern (a regexp, a glob, or a string) or an array of patterns + * + * @return $this + * + * @see FilenameFilterIterator + */ + public function name($patterns) + { + $this->names = array_merge($this->names, (array) $patterns); + + return $this; + } + + /** + * Adds rules that files must not match. + * + * @param string|string[] $patterns A pattern (a regexp, a glob, or a string) or an array of patterns + * + * @return $this + * + * @see FilenameFilterIterator + */ + public function notName($patterns) + { + $this->notNames = array_merge($this->notNames, (array) $patterns); + + return $this; + } + + /** + * Adds tests that file contents must match. + * + * Strings or PCRE patterns can be used: + * + * $finder->contains('Lorem ipsum') + * $finder->contains('/Lorem ipsum/i') + * $finder->contains(['dolor', '/ipsum/i']) + * + * @param string|string[] $patterns A pattern (string or regexp) or an array of patterns + * + * @return $this + * + * @see FilecontentFilterIterator + */ + public function contains($patterns) + { + $this->contains = array_merge($this->contains, (array) $patterns); + + return $this; + } + + /** + * Adds tests that file contents must not match. + * + * Strings or PCRE patterns can be used: + * + * $finder->notContains('Lorem ipsum') + * $finder->notContains('/Lorem ipsum/i') + * $finder->notContains(['lorem', '/dolor/i']) + * + * @param string|string[] $patterns A pattern (string or regexp) or an array of patterns + * + * @return $this + * + * @see FilecontentFilterIterator + */ + public function notContains($patterns) + { + $this->notContains = array_merge($this->notContains, (array) $patterns); + + return $this; + } + + /** + * Adds rules that filenames must match. + * + * You can use patterns (delimited with / sign) or simple strings. + * + * $finder->path('some/special/dir') + * $finder->path('/some\/special\/dir/') // same as above + * $finder->path(['some dir', 'another/dir']) + * + * Use only / as dirname separator. + * + * @param string|string[] $patterns A pattern (a regexp or a string) or an array of patterns + * + * @return $this + * + * @see FilenameFilterIterator + */ + public function path($patterns) + { + $this->paths = array_merge($this->paths, (array) $patterns); + + return $this; + } + + /** + * Adds rules that filenames must not match. + * + * You can use patterns (delimited with / sign) or simple strings. + * + * $finder->notPath('some/special/dir') + * $finder->notPath('/some\/special\/dir/') // same as above + * $finder->notPath(['some/file.txt', 'another/file.log']) + * + * Use only / as dirname separator. + * + * @param string|string[] $patterns A pattern (a regexp or a string) or an array of patterns + * + * @return $this + * + * @see FilenameFilterIterator + */ + public function notPath($patterns) + { + $this->notPaths = array_merge($this->notPaths, (array) $patterns); + + return $this; + } + + /** + * Adds tests for file sizes. + * + * $finder->size('> 10K'); + * $finder->size('<= 1Ki'); + * $finder->size(4); + * $finder->size(['> 10K', '< 20K']) + * + * @param string|int|string[]|int[] $sizes A size range string or an integer or an array of size ranges + * + * @return $this + * + * @see SizeRangeFilterIterator + * @see NumberComparator + */ + public function size($sizes) + { + foreach ((array) $sizes as $size) { + $this->sizes[] = new Comparator\NumberComparator($size); + } + + return $this; + } + + /** + * Excludes directories. + * + * Directories passed as argument must be relative to the ones defined with the `in()` method. For example: + * + * $finder->in(__DIR__)->exclude('ruby'); + * + * @param string|array $dirs A directory path or an array of directories + * + * @return $this + * + * @see ExcludeDirectoryFilterIterator + */ + public function exclude($dirs) + { + $this->exclude = array_merge($this->exclude, (array) $dirs); + + return $this; + } + + /** + * Excludes "hidden" directories and files (starting with a dot). + * + * This option is enabled by default. + * + * @return $this + * + * @see ExcludeDirectoryFilterIterator + */ + public function ignoreDotFiles(bool $ignoreDotFiles) + { + if ($ignoreDotFiles) { + $this->ignore |= static::IGNORE_DOT_FILES; + } else { + $this->ignore &= ~static::IGNORE_DOT_FILES; + } + + return $this; + } + + /** + * Forces the finder to ignore version control directories. + * + * This option is enabled by default. + * + * @return $this + * + * @see ExcludeDirectoryFilterIterator + */ + public function ignoreVCS(bool $ignoreVCS) + { + if ($ignoreVCS) { + $this->ignore |= static::IGNORE_VCS_FILES; + } else { + $this->ignore &= ~static::IGNORE_VCS_FILES; + } + + return $this; + } + + /** + * Forces Finder to obey .gitignore and ignore files based on rules listed there. + * + * This option is disabled by default. + * + * @return $this + */ + public function ignoreVCSIgnored(bool $ignoreVCSIgnored) + { + if ($ignoreVCSIgnored) { + $this->ignore |= static::IGNORE_VCS_IGNORED_FILES; + } else { + $this->ignore &= ~static::IGNORE_VCS_IGNORED_FILES; + } + + return $this; + } + + /** + * Adds VCS patterns. + * + * @see ignoreVCS() + * + * @param string|string[] $pattern VCS patterns to ignore + */ + public static function addVCSPattern($pattern) + { + foreach ((array) $pattern as $p) { + self::$vcsPatterns[] = $p; + } + + self::$vcsPatterns = array_unique(self::$vcsPatterns); + } + + /** + * Sorts files and directories by an anonymous function. + * + * The anonymous function receives two \SplFileInfo instances to compare. + * + * This can be slow as all the matching files and directories must be retrieved for comparison. + * + * @return $this + * + * @see SortableIterator + */ + public function sort(\Closure $closure) + { + $this->sort = $closure; + + return $this; + } + + /** + * Sorts files and directories by name. + * + * This can be slow as all the matching files and directories must be retrieved for comparison. + * + * @return $this + * + * @see SortableIterator + */ + public function sortByName(bool $useNaturalSort = false) + { + $this->sort = $useNaturalSort ? Iterator\SortableIterator::SORT_BY_NAME_NATURAL : Iterator\SortableIterator::SORT_BY_NAME; + + return $this; + } + + /** + * Sorts files and directories by type (directories before files), then by name. + * + * This can be slow as all the matching files and directories must be retrieved for comparison. + * + * @return $this + * + * @see SortableIterator + */ + public function sortByType() + { + $this->sort = Iterator\SortableIterator::SORT_BY_TYPE; + + return $this; + } + + /** + * Sorts files and directories by the last accessed time. + * + * This is the time that the file was last accessed, read or written to. + * + * This can be slow as all the matching files and directories must be retrieved for comparison. + * + * @return $this + * + * @see SortableIterator + */ + public function sortByAccessedTime() + { + $this->sort = Iterator\SortableIterator::SORT_BY_ACCESSED_TIME; + + return $this; + } + + /** + * Reverses the sorting. + * + * @return $this + */ + public function reverseSorting() + { + $this->reverseSorting = true; + + return $this; + } + + /** + * Sorts files and directories by the last inode changed time. + * + * This is the time that the inode information was last modified (permissions, owner, group or other metadata). + * + * On Windows, since inode is not available, changed time is actually the file creation time. + * + * This can be slow as all the matching files and directories must be retrieved for comparison. + * + * @return $this + * + * @see SortableIterator + */ + public function sortByChangedTime() + { + $this->sort = Iterator\SortableIterator::SORT_BY_CHANGED_TIME; + + return $this; + } + + /** + * Sorts files and directories by the last modified time. + * + * This is the last time the actual contents of the file were last modified. + * + * This can be slow as all the matching files and directories must be retrieved for comparison. + * + * @return $this + * + * @see SortableIterator + */ + public function sortByModifiedTime() + { + $this->sort = Iterator\SortableIterator::SORT_BY_MODIFIED_TIME; + + return $this; + } + + /** + * Filters the iterator with an anonymous function. + * + * The anonymous function receives a \SplFileInfo and must return false + * to remove files. + * + * @return $this + * + * @see CustomFilterIterator + */ + public function filter(\Closure $closure) + { + $this->filters[] = $closure; + + return $this; + } + + /** + * Forces the following of symlinks. + * + * @return $this + */ + public function followLinks() + { + $this->followLinks = true; + + return $this; + } + + /** + * Tells finder to ignore unreadable directories. + * + * By default, scanning unreadable directories content throws an AccessDeniedException. + * + * @return $this + */ + public function ignoreUnreadableDirs(bool $ignore = true) + { + $this->ignoreUnreadableDirs = $ignore; + + return $this; + } + + /** + * Searches files and directories which match defined rules. + * + * @param string|string[] $dirs A directory path or an array of directories + * + * @return $this + * + * @throws DirectoryNotFoundException if one of the directories does not exist + */ + public function in($dirs) + { + $resolvedDirs = []; + + foreach ((array) $dirs as $dir) { + if (is_dir($dir)) { + $resolvedDirs[] = [$this->normalizeDir($dir)]; + } elseif ($glob = glob($dir, (\defined('GLOB_BRACE') ? \GLOB_BRACE : 0) | \GLOB_ONLYDIR | \GLOB_NOSORT)) { + sort($glob); + $resolvedDirs[] = array_map([$this, 'normalizeDir'], $glob); + } else { + throw new DirectoryNotFoundException(sprintf('The "%s" directory does not exist.', $dir)); + } + } + + $this->dirs = array_merge($this->dirs, ...$resolvedDirs); + + return $this; + } + + /** + * Returns an Iterator for the current Finder configuration. + * + * This method implements the IteratorAggregate interface. + * + * @return \Iterator + * + * @throws \LogicException if the in() method has not been called + */ + #[\ReturnTypeWillChange] + public function getIterator() + { + if (0 === \count($this->dirs) && 0 === \count($this->iterators)) { + throw new \LogicException('You must call one of in() or append() methods before iterating over a Finder.'); + } + + if (1 === \count($this->dirs) && 0 === \count($this->iterators)) { + $iterator = $this->searchInDirectory($this->dirs[0]); + + if ($this->sort || $this->reverseSorting) { + $iterator = (new Iterator\SortableIterator($iterator, $this->sort, $this->reverseSorting))->getIterator(); + } + + return $iterator; + } + + $iterator = new \AppendIterator(); + foreach ($this->dirs as $dir) { + $iterator->append(new \IteratorIterator(new LazyIterator(function () use ($dir) { + return $this->searchInDirectory($dir); + }))); + } + + foreach ($this->iterators as $it) { + $iterator->append($it); + } + + if ($this->sort || $this->reverseSorting) { + $iterator = (new Iterator\SortableIterator($iterator, $this->sort, $this->reverseSorting))->getIterator(); + } + + return $iterator; + } + + /** + * Appends an existing set of files/directories to the finder. + * + * The set can be another Finder, an Iterator, an IteratorAggregate, or even a plain array. + * + * @return $this + * + * @throws \InvalidArgumentException when the given argument is not iterable + */ + public function append(iterable $iterator) + { + if ($iterator instanceof \IteratorAggregate) { + $this->iterators[] = $iterator->getIterator(); + } elseif ($iterator instanceof \Iterator) { + $this->iterators[] = $iterator; + } elseif (is_iterable($iterator)) { + $it = new \ArrayIterator(); + foreach ($iterator as $file) { + $file = $file instanceof \SplFileInfo ? $file : new \SplFileInfo($file); + $it[$file->getPathname()] = $file; + } + $this->iterators[] = $it; + } else { + throw new \InvalidArgumentException('Finder::append() method wrong argument type.'); + } + + return $this; + } + + /** + * Check if any results were found. + * + * @return bool + */ + public function hasResults() + { + foreach ($this->getIterator() as $_) { + return true; + } + + return false; + } + + /** + * Counts all the results collected by the iterators. + * + * @return int + */ + #[\ReturnTypeWillChange] + public function count() + { + return iterator_count($this->getIterator()); + } + + private function searchInDirectory(string $dir): \Iterator + { + $exclude = $this->exclude; + $notPaths = $this->notPaths; + + if (static::IGNORE_VCS_FILES === (static::IGNORE_VCS_FILES & $this->ignore)) { + $exclude = array_merge($exclude, self::$vcsPatterns); + } + + if (static::IGNORE_DOT_FILES === (static::IGNORE_DOT_FILES & $this->ignore)) { + $notPaths[] = '#(^|/)\..+(/|$)#'; + } + + $minDepth = 0; + $maxDepth = \PHP_INT_MAX; + + foreach ($this->depths as $comparator) { + switch ($comparator->getOperator()) { + case '>': + $minDepth = $comparator->getTarget() + 1; + break; + case '>=': + $minDepth = $comparator->getTarget(); + break; + case '<': + $maxDepth = $comparator->getTarget() - 1; + break; + case '<=': + $maxDepth = $comparator->getTarget(); + break; + default: + $minDepth = $maxDepth = $comparator->getTarget(); + } + } + + $flags = \RecursiveDirectoryIterator::SKIP_DOTS; + + if ($this->followLinks) { + $flags |= \RecursiveDirectoryIterator::FOLLOW_SYMLINKS; + } + + $iterator = new Iterator\RecursiveDirectoryIterator($dir, $flags, $this->ignoreUnreadableDirs); + + if ($exclude) { + $iterator = new Iterator\ExcludeDirectoryFilterIterator($iterator, $exclude); + } + + $iterator = new \RecursiveIteratorIterator($iterator, \RecursiveIteratorIterator::SELF_FIRST); + + if ($minDepth > 0 || $maxDepth < \PHP_INT_MAX) { + $iterator = new Iterator\DepthRangeFilterIterator($iterator, $minDepth, $maxDepth); + } + + if ($this->mode) { + $iterator = new Iterator\FileTypeFilterIterator($iterator, $this->mode); + } + + if ($this->names || $this->notNames) { + $iterator = new Iterator\FilenameFilterIterator($iterator, $this->names, $this->notNames); + } + + if ($this->contains || $this->notContains) { + $iterator = new Iterator\FilecontentFilterIterator($iterator, $this->contains, $this->notContains); + } + + if ($this->sizes) { + $iterator = new Iterator\SizeRangeFilterIterator($iterator, $this->sizes); + } + + if ($this->dates) { + $iterator = new Iterator\DateRangeFilterIterator($iterator, $this->dates); + } + + if ($this->filters) { + $iterator = new Iterator\CustomFilterIterator($iterator, $this->filters); + } + + if ($this->paths || $notPaths) { + $iterator = new Iterator\PathFilterIterator($iterator, $this->paths, $notPaths); + } + + if (static::IGNORE_VCS_IGNORED_FILES === (static::IGNORE_VCS_IGNORED_FILES & $this->ignore)) { + $iterator = new Iterator\VcsIgnoredFilterIterator($iterator, $dir); + } + + return $iterator; + } + + /** + * Normalizes given directory names by removing trailing slashes. + * + * Excluding: (s)ftp:// or ssh2.(s)ftp:// wrapper + */ + private function normalizeDir(string $dir): string + { + if ('/' === $dir) { + return $dir; + } + + $dir = rtrim($dir, '/'.\DIRECTORY_SEPARATOR); + + if (preg_match('#^(ssh2\.)?s?ftp://#', $dir)) { + $dir .= '/'; + } + + return $dir; + } +} diff --git a/vendor/symfony/finder/Gitignore.php b/vendor/symfony/finder/Gitignore.php new file mode 100644 index 0000000..d42cca1 --- /dev/null +++ b/vendor/symfony/finder/Gitignore.php @@ -0,0 +1,93 @@ + + * + * For the full copyright and license information, please view the LICENSE + * file that was distributed with this source code. + */ + +namespace Symfony\Component\Finder; + +/** + * Gitignore matches against text. + * + * @author Michael Voříšek + * @author Ahmed Abdou + */ +class Gitignore +{ + /** + * Returns a regexp which is the equivalent of the gitignore pattern. + * + * Format specification: https://git-scm.com/docs/gitignore#_pattern_format + */ + public static function toRegex(string $gitignoreFileContent): string + { + return self::buildRegex($gitignoreFileContent, false); + } + + public static function toRegexMatchingNegatedPatterns(string $gitignoreFileContent): string + { + return self::buildRegex($gitignoreFileContent, true); + } + + private static function buildRegex(string $gitignoreFileContent, bool $inverted): string + { + $gitignoreFileContent = preg_replace('~(? + * + * For the full copyright and license information, please view the LICENSE + * file that was distributed with this source code. + */ + +namespace Symfony\Component\Finder; + +/** + * Glob matches globbing patterns against text. + * + * if match_glob("foo.*", "foo.bar") echo "matched\n"; + * + * // prints foo.bar and foo.baz + * $regex = glob_to_regex("foo.*"); + * for (['foo.bar', 'foo.baz', 'foo', 'bar'] as $t) + * { + * if (/$regex/) echo "matched: $car\n"; + * } + * + * Glob implements glob(3) style matching that can be used to match + * against text, rather than fetching names from a filesystem. + * + * Based on the Perl Text::Glob module. + * + * @author Fabien Potencier PHP port + * @author Richard Clamp Perl version + * @copyright 2004-2005 Fabien Potencier + * @copyright 2002 Richard Clamp + */ +class Glob +{ + /** + * Returns a regexp which is the equivalent of the glob pattern. + * + * @return string + */ + public static function toRegex(string $glob, bool $strictLeadingDot = true, bool $strictWildcardSlash = true, string $delimiter = '#') + { + $firstByte = true; + $escaping = false; + $inCurlies = 0; + $regex = ''; + $sizeGlob = \strlen($glob); + for ($i = 0; $i < $sizeGlob; ++$i) { + $car = $glob[$i]; + if ($firstByte && $strictLeadingDot && '.' !== $car) { + $regex .= '(?=[^\.])'; + } + + $firstByte = '/' === $car; + + if ($firstByte && $strictWildcardSlash && isset($glob[$i + 2]) && '**' === $glob[$i + 1].$glob[$i + 2] && (!isset($glob[$i + 3]) || '/' === $glob[$i + 3])) { + $car = '[^/]++/'; + if (!isset($glob[$i + 3])) { + $car .= '?'; + } + + if ($strictLeadingDot) { + $car = '(?=[^\.])'.$car; + } + + $car = '/(?:'.$car.')*'; + $i += 2 + isset($glob[$i + 3]); + + if ('/' === $delimiter) { + $car = str_replace('/', '\\/', $car); + } + } + + if ($delimiter === $car || '.' === $car || '(' === $car || ')' === $car || '|' === $car || '+' === $car || '^' === $car || '$' === $car) { + $regex .= "\\$car"; + } elseif ('*' === $car) { + $regex .= $escaping ? '\\*' : ($strictWildcardSlash ? '[^/]*' : '.*'); + } elseif ('?' === $car) { + $regex .= $escaping ? '\\?' : ($strictWildcardSlash ? '[^/]' : '.'); + } elseif ('{' === $car) { + $regex .= $escaping ? '\\{' : '('; + if (!$escaping) { + ++$inCurlies; + } + } elseif ('}' === $car && $inCurlies) { + $regex .= $escaping ? '}' : ')'; + if (!$escaping) { + --$inCurlies; + } + } elseif (',' === $car && $inCurlies) { + $regex .= $escaping ? ',' : '|'; + } elseif ('\\' === $car) { + if ($escaping) { + $regex .= '\\\\'; + $escaping = false; + } else { + $escaping = true; + } + + continue; + } else { + $regex .= $car; + } + $escaping = false; + } + + return $delimiter.'^'.$regex.'$'.$delimiter; + } +} diff --git a/vendor/symfony/finder/Iterator/CustomFilterIterator.php b/vendor/symfony/finder/Iterator/CustomFilterIterator.php new file mode 100644 index 0000000..f7bf19b --- /dev/null +++ b/vendor/symfony/finder/Iterator/CustomFilterIterator.php @@ -0,0 +1,64 @@ + + * + * For the full copyright and license information, please view the LICENSE + * file that was distributed with this source code. + */ + +namespace Symfony\Component\Finder\Iterator; + +/** + * CustomFilterIterator filters files by applying anonymous functions. + * + * The anonymous function receives a \SplFileInfo and must return false + * to remove files. + * + * @author Fabien Potencier + * + * @extends \FilterIterator + */ +class CustomFilterIterator extends \FilterIterator +{ + private $filters = []; + + /** + * @param \Iterator $iterator The Iterator to filter + * @param callable[] $filters An array of PHP callbacks + * + * @throws \InvalidArgumentException + */ + public function __construct(\Iterator $iterator, array $filters) + { + foreach ($filters as $filter) { + if (!\is_callable($filter)) { + throw new \InvalidArgumentException('Invalid PHP callback.'); + } + } + $this->filters = $filters; + + parent::__construct($iterator); + } + + /** + * Filters the iterator values. + * + * @return bool + */ + #[\ReturnTypeWillChange] + public function accept() + { + $fileinfo = $this->current(); + + foreach ($this->filters as $filter) { + if (false === $filter($fileinfo)) { + return false; + } + } + + return true; + } +} diff --git a/vendor/symfony/finder/Iterator/DateRangeFilterIterator.php b/vendor/symfony/finder/Iterator/DateRangeFilterIterator.php new file mode 100644 index 0000000..f592e19 --- /dev/null +++ b/vendor/symfony/finder/Iterator/DateRangeFilterIterator.php @@ -0,0 +1,61 @@ + + * + * For the full copyright and license information, please view the LICENSE + * file that was distributed with this source code. + */ + +namespace Symfony\Component\Finder\Iterator; + +use Symfony\Component\Finder\Comparator\DateComparator; + +/** + * DateRangeFilterIterator filters out files that are not in the given date range (last modified dates). + * + * @author Fabien Potencier + * + * @extends \FilterIterator + */ +class DateRangeFilterIterator extends \FilterIterator +{ + private $comparators = []; + + /** + * @param \Iterator $iterator + * @param DateComparator[] $comparators + */ + public function __construct(\Iterator $iterator, array $comparators) + { + $this->comparators = $comparators; + + parent::__construct($iterator); + } + + /** + * Filters the iterator values. + * + * @return bool + */ + #[\ReturnTypeWillChange] + public function accept() + { + $fileinfo = $this->current(); + + if (!file_exists($fileinfo->getPathname())) { + return false; + } + + $filedate = $fileinfo->getMTime(); + foreach ($this->comparators as $compare) { + if (!$compare->test($filedate)) { + return false; + } + } + + return true; + } +} diff --git a/vendor/symfony/finder/Iterator/DepthRangeFilterIterator.php b/vendor/symfony/finder/Iterator/DepthRangeFilterIterator.php new file mode 100644 index 0000000..f593a3f --- /dev/null +++ b/vendor/symfony/finder/Iterator/DepthRangeFilterIterator.php @@ -0,0 +1,51 @@ + + * + * For the full copyright and license information, please view the LICENSE + * file that was distributed with this source code. + */ + +namespace Symfony\Component\Finder\Iterator; + +/** + * DepthRangeFilterIterator limits the directory depth. + * + * @author Fabien Potencier + * + * @template-covariant TKey + * @template-covariant TValue + * + * @extends \FilterIterator + */ +class DepthRangeFilterIterator extends \FilterIterator +{ + private $minDepth = 0; + + /** + * @param \RecursiveIteratorIterator<\RecursiveIterator> $iterator The Iterator to filter + * @param int $minDepth The min depth + * @param int $maxDepth The max depth + */ + public function __construct(\RecursiveIteratorIterator $iterator, int $minDepth = 0, int $maxDepth = \PHP_INT_MAX) + { + $this->minDepth = $minDepth; + $iterator->setMaxDepth(\PHP_INT_MAX === $maxDepth ? -1 : $maxDepth); + + parent::__construct($iterator); + } + + /** + * Filters the iterator values. + * + * @return bool + */ + #[\ReturnTypeWillChange] + public function accept() + { + return $this->getInnerIterator()->getDepth() >= $this->minDepth; + } +} diff --git a/vendor/symfony/finder/Iterator/ExcludeDirectoryFilterIterator.php b/vendor/symfony/finder/Iterator/ExcludeDirectoryFilterIterator.php new file mode 100644 index 0000000..39797c8 --- /dev/null +++ b/vendor/symfony/finder/Iterator/ExcludeDirectoryFilterIterator.php @@ -0,0 +1,97 @@ + + * + * For the full copyright and license information, please view the LICENSE + * file that was distributed with this source code. + */ + +namespace Symfony\Component\Finder\Iterator; + +/** + * ExcludeDirectoryFilterIterator filters out directories. + * + * @author Fabien Potencier + * + * @extends \FilterIterator + * + * @implements \RecursiveIterator + */ +class ExcludeDirectoryFilterIterator extends \FilterIterator implements \RecursiveIterator +{ + private $iterator; + private $isRecursive; + private $excludedDirs = []; + private $excludedPattern; + + /** + * @param \Iterator $iterator The Iterator to filter + * @param string[] $directories An array of directories to exclude + */ + public function __construct(\Iterator $iterator, array $directories) + { + $this->iterator = $iterator; + $this->isRecursive = $iterator instanceof \RecursiveIterator; + $patterns = []; + foreach ($directories as $directory) { + $directory = rtrim($directory, '/'); + if (!$this->isRecursive || str_contains($directory, '/')) { + $patterns[] = preg_quote($directory, '#'); + } else { + $this->excludedDirs[$directory] = true; + } + } + if ($patterns) { + $this->excludedPattern = '#(?:^|/)(?:'.implode('|', $patterns).')(?:/|$)#'; + } + + parent::__construct($iterator); + } + + /** + * Filters the iterator values. + * + * @return bool + */ + #[\ReturnTypeWillChange] + public function accept() + { + if ($this->isRecursive && isset($this->excludedDirs[$this->getFilename()]) && $this->isDir()) { + return false; + } + + if ($this->excludedPattern) { + $path = $this->isDir() ? $this->current()->getRelativePathname() : $this->current()->getRelativePath(); + $path = str_replace('\\', '/', $path); + + return !preg_match($this->excludedPattern, $path); + } + + return true; + } + + /** + * @return bool + */ + #[\ReturnTypeWillChange] + public function hasChildren() + { + return $this->isRecursive && $this->iterator->hasChildren(); + } + + /** + * @return self + */ + #[\ReturnTypeWillChange] + public function getChildren() + { + $children = new self($this->iterator->getChildren(), []); + $children->excludedDirs = $this->excludedDirs; + $children->excludedPattern = $this->excludedPattern; + + return $children; + } +} diff --git a/vendor/symfony/finder/Iterator/FileTypeFilterIterator.php b/vendor/symfony/finder/Iterator/FileTypeFilterIterator.php new file mode 100644 index 0000000..793ae35 --- /dev/null +++ b/vendor/symfony/finder/Iterator/FileTypeFilterIterator.php @@ -0,0 +1,56 @@ + + * + * For the full copyright and license information, please view the LICENSE + * file that was distributed with this source code. + */ + +namespace Symfony\Component\Finder\Iterator; + +/** + * FileTypeFilterIterator only keeps files, directories, or both. + * + * @author Fabien Potencier + * + * @extends \FilterIterator + */ +class FileTypeFilterIterator extends \FilterIterator +{ + public const ONLY_FILES = 1; + public const ONLY_DIRECTORIES = 2; + + private $mode; + + /** + * @param \Iterator $iterator The Iterator to filter + * @param int $mode The mode (self::ONLY_FILES or self::ONLY_DIRECTORIES) + */ + public function __construct(\Iterator $iterator, int $mode) + { + $this->mode = $mode; + + parent::__construct($iterator); + } + + /** + * Filters the iterator values. + * + * @return bool + */ + #[\ReturnTypeWillChange] + public function accept() + { + $fileinfo = $this->current(); + if (self::ONLY_DIRECTORIES === (self::ONLY_DIRECTORIES & $this->mode) && $fileinfo->isFile()) { + return false; + } elseif (self::ONLY_FILES === (self::ONLY_FILES & $this->mode) && $fileinfo->isDir()) { + return false; + } + + return true; + } +} diff --git a/vendor/symfony/finder/Iterator/FilecontentFilterIterator.php b/vendor/symfony/finder/Iterator/FilecontentFilterIterator.php new file mode 100644 index 0000000..79f8c29 --- /dev/null +++ b/vendor/symfony/finder/Iterator/FilecontentFilterIterator.php @@ -0,0 +1,61 @@ + + * + * For the full copyright and license information, please view the LICENSE + * file that was distributed with this source code. + */ + +namespace Symfony\Component\Finder\Iterator; + +/** + * FilecontentFilterIterator filters files by their contents using patterns (regexps or strings). + * + * @author Fabien Potencier + * @author Włodzimierz Gajda + * + * @extends MultiplePcreFilterIterator + */ +class FilecontentFilterIterator extends MultiplePcreFilterIterator +{ + /** + * Filters the iterator values. + * + * @return bool + */ + #[\ReturnTypeWillChange] + public function accept() + { + if (!$this->matchRegexps && !$this->noMatchRegexps) { + return true; + } + + $fileinfo = $this->current(); + + if ($fileinfo->isDir() || !$fileinfo->isReadable()) { + return false; + } + + $content = $fileinfo->getContents(); + if (!$content) { + return false; + } + + return $this->isAccepted($content); + } + + /** + * Converts string to regexp if necessary. + * + * @param string $str Pattern: string or regexp + * + * @return string + */ + protected function toRegex(string $str) + { + return $this->isRegex($str) ? $str : '/'.preg_quote($str, '/').'/'; + } +} diff --git a/vendor/symfony/finder/Iterator/FilenameFilterIterator.php b/vendor/symfony/finder/Iterator/FilenameFilterIterator.php new file mode 100644 index 0000000..77b3b24 --- /dev/null +++ b/vendor/symfony/finder/Iterator/FilenameFilterIterator.php @@ -0,0 +1,50 @@ + + * + * For the full copyright and license information, please view the LICENSE + * file that was distributed with this source code. + */ + +namespace Symfony\Component\Finder\Iterator; + +use Symfony\Component\Finder\Glob; + +/** + * FilenameFilterIterator filters files by patterns (a regexp, a glob, or a string). + * + * @author Fabien Potencier + * + * @extends MultiplePcreFilterIterator + */ +class FilenameFilterIterator extends MultiplePcreFilterIterator +{ + /** + * Filters the iterator values. + * + * @return bool + */ + #[\ReturnTypeWillChange] + public function accept() + { + return $this->isAccepted($this->current()->getFilename()); + } + + /** + * Converts glob to regexp. + * + * PCRE patterns are left unchanged. + * Glob strings are transformed with Glob::toRegex(). + * + * @param string $str Pattern: glob or regexp + * + * @return string + */ + protected function toRegex(string $str) + { + return $this->isRegex($str) ? $str : Glob::toRegex($str); + } +} diff --git a/vendor/symfony/finder/Iterator/LazyIterator.php b/vendor/symfony/finder/Iterator/LazyIterator.php new file mode 100644 index 0000000..32cc37f --- /dev/null +++ b/vendor/symfony/finder/Iterator/LazyIterator.php @@ -0,0 +1,32 @@ + + * + * For the full copyright and license information, please view the LICENSE + * file that was distributed with this source code. + */ + +namespace Symfony\Component\Finder\Iterator; + +/** + * @author Jérémy Derussé + * + * @internal + */ +class LazyIterator implements \IteratorAggregate +{ + private $iteratorFactory; + + public function __construct(callable $iteratorFactory) + { + $this->iteratorFactory = $iteratorFactory; + } + + public function getIterator(): \Traversable + { + yield from ($this->iteratorFactory)(); + } +} diff --git a/vendor/symfony/finder/Iterator/MultiplePcreFilterIterator.php b/vendor/symfony/finder/Iterator/MultiplePcreFilterIterator.php new file mode 100644 index 0000000..564765d --- /dev/null +++ b/vendor/symfony/finder/Iterator/MultiplePcreFilterIterator.php @@ -0,0 +1,117 @@ + + * + * For the full copyright and license information, please view the LICENSE + * file that was distributed with this source code. + */ + +namespace Symfony\Component\Finder\Iterator; + +/** + * MultiplePcreFilterIterator filters files using patterns (regexps, globs or strings). + * + * @author Fabien Potencier + * + * @template-covariant TKey + * @template-covariant TValue + * + * @extends \FilterIterator + */ +abstract class MultiplePcreFilterIterator extends \FilterIterator +{ + protected $matchRegexps = []; + protected $noMatchRegexps = []; + + /** + * @param \Iterator $iterator The Iterator to filter + * @param string[] $matchPatterns An array of patterns that need to match + * @param string[] $noMatchPatterns An array of patterns that need to not match + */ + public function __construct(\Iterator $iterator, array $matchPatterns, array $noMatchPatterns) + { + foreach ($matchPatterns as $pattern) { + $this->matchRegexps[] = $this->toRegex($pattern); + } + + foreach ($noMatchPatterns as $pattern) { + $this->noMatchRegexps[] = $this->toRegex($pattern); + } + + parent::__construct($iterator); + } + + /** + * Checks whether the string is accepted by the regex filters. + * + * If there is no regexps defined in the class, this method will accept the string. + * Such case can be handled by child classes before calling the method if they want to + * apply a different behavior. + * + * @return bool + */ + protected function isAccepted(string $string) + { + // should at least not match one rule to exclude + foreach ($this->noMatchRegexps as $regex) { + if (preg_match($regex, $string)) { + return false; + } + } + + // should at least match one rule + if ($this->matchRegexps) { + foreach ($this->matchRegexps as $regex) { + if (preg_match($regex, $string)) { + return true; + } + } + + return false; + } + + // If there is no match rules, the file is accepted + return true; + } + + /** + * Checks whether the string is a regex. + * + * @return bool + */ + protected function isRegex(string $str) + { + $availableModifiers = 'imsxuADU'; + + if (\PHP_VERSION_ID >= 80200) { + $availableModifiers .= 'n'; + } + + if (preg_match('/^(.{3,}?)['.$availableModifiers.']*$/', $str, $m)) { + $start = substr($m[1], 0, 1); + $end = substr($m[1], -1); + + if ($start === $end) { + return !preg_match('/[*?[:alnum:] \\\\]/', $start); + } + + foreach ([['{', '}'], ['(', ')'], ['[', ']'], ['<', '>']] as $delimiters) { + if ($start === $delimiters[0] && $end === $delimiters[1]) { + return true; + } + } + } + + return false; + } + + /** + * Converts string into regexp. + * + * @return string + */ + abstract protected function toRegex(string $str); +} diff --git a/vendor/symfony/finder/Iterator/PathFilterIterator.php b/vendor/symfony/finder/Iterator/PathFilterIterator.php new file mode 100644 index 0000000..7974c4e --- /dev/null +++ b/vendor/symfony/finder/Iterator/PathFilterIterator.php @@ -0,0 +1,59 @@ + + * + * For the full copyright and license information, please view the LICENSE + * file that was distributed with this source code. + */ + +namespace Symfony\Component\Finder\Iterator; + +/** + * PathFilterIterator filters files by path patterns (e.g. some/special/dir). + * + * @author Fabien Potencier + * @author Włodzimierz Gajda + * + * @extends MultiplePcreFilterIterator + */ +class PathFilterIterator extends MultiplePcreFilterIterator +{ + /** + * Filters the iterator values. + * + * @return bool + */ + #[\ReturnTypeWillChange] + public function accept() + { + $filename = $this->current()->getRelativePathname(); + + if ('\\' === \DIRECTORY_SEPARATOR) { + $filename = str_replace('\\', '/', $filename); + } + + return $this->isAccepted($filename); + } + + /** + * Converts strings to regexp. + * + * PCRE patterns are left unchanged. + * + * Default conversion: + * 'lorem/ipsum/dolor' ==> 'lorem\/ipsum\/dolor/' + * + * Use only / as directory separator (on Windows also). + * + * @param string $str Pattern: regexp or dirname + * + * @return string + */ + protected function toRegex(string $str) + { + return $this->isRegex($str) ? $str : '/'.preg_quote($str, '/').'/'; + } +} diff --git a/vendor/symfony/finder/Iterator/RecursiveDirectoryIterator.php b/vendor/symfony/finder/Iterator/RecursiveDirectoryIterator.php new file mode 100644 index 0000000..ac5d720 --- /dev/null +++ b/vendor/symfony/finder/Iterator/RecursiveDirectoryIterator.php @@ -0,0 +1,158 @@ + + * + * For the full copyright and license information, please view the LICENSE + * file that was distributed with this source code. + */ + +namespace Symfony\Component\Finder\Iterator; + +use Symfony\Component\Finder\Exception\AccessDeniedException; +use Symfony\Component\Finder\SplFileInfo; + +/** + * Extends the \RecursiveDirectoryIterator to support relative paths. + * + * @author Victor Berchet + */ +class RecursiveDirectoryIterator extends \RecursiveDirectoryIterator +{ + /** + * @var bool + */ + private $ignoreUnreadableDirs; + + /** + * @var bool + */ + private $ignoreFirstRewind = true; + + // these 3 properties take part of the performance optimization to avoid redoing the same work in all iterations + private $rootPath; + private $subPath; + private $directorySeparator = '/'; + + /** + * @throws \RuntimeException + */ + public function __construct(string $path, int $flags, bool $ignoreUnreadableDirs = false) + { + if ($flags & (self::CURRENT_AS_PATHNAME | self::CURRENT_AS_SELF)) { + throw new \RuntimeException('This iterator only support returning current as fileinfo.'); + } + + parent::__construct($path, $flags); + $this->ignoreUnreadableDirs = $ignoreUnreadableDirs; + $this->rootPath = $path; + if ('/' !== \DIRECTORY_SEPARATOR && !($flags & self::UNIX_PATHS)) { + $this->directorySeparator = \DIRECTORY_SEPARATOR; + } + } + + /** + * Return an instance of SplFileInfo with support for relative paths. + * + * @return SplFileInfo + */ + #[\ReturnTypeWillChange] + public function current() + { + // the logic here avoids redoing the same work in all iterations + + if (null === $subPathname = $this->subPath) { + $subPathname = $this->subPath = $this->getSubPath(); + } + if ('' !== $subPathname) { + $subPathname .= $this->directorySeparator; + } + $subPathname .= $this->getFilename(); + $basePath = $this->rootPath; + + if ('/' !== $basePath && !str_ends_with($basePath, $this->directorySeparator) && !str_ends_with($basePath, '/')) { + $basePath .= $this->directorySeparator; + } + + return new SplFileInfo($basePath.$subPathname, $this->subPath, $subPathname); + } + + /** + * @param bool $allowLinks + * + * @return bool + */ + #[\ReturnTypeWillChange] + public function hasChildren($allowLinks = false) + { + $hasChildren = parent::hasChildren($allowLinks); + + if (!$hasChildren || !$this->ignoreUnreadableDirs) { + return $hasChildren; + } + + try { + parent::getChildren(); + + return true; + } catch (\UnexpectedValueException $e) { + // If directory is unreadable and finder is set to ignore it, skip children + return false; + } + } + + /** + * @return \RecursiveDirectoryIterator + * + * @throws AccessDeniedException + */ + #[\ReturnTypeWillChange] + public function getChildren() + { + try { + $children = parent::getChildren(); + + if ($children instanceof self) { + // parent method will call the constructor with default arguments, so unreadable dirs won't be ignored anymore + $children->ignoreUnreadableDirs = $this->ignoreUnreadableDirs; + + // performance optimization to avoid redoing the same work in all children + $children->rootPath = $this->rootPath; + } + + return $children; + } catch (\UnexpectedValueException $e) { + throw new AccessDeniedException($e->getMessage(), $e->getCode(), $e); + } + } + + /** + * @return void + */ + #[\ReturnTypeWillChange] + public function next() + { + $this->ignoreFirstRewind = false; + + parent::next(); + } + + /** + * @return void + */ + #[\ReturnTypeWillChange] + public function rewind() + { + // some streams like FTP are not rewindable, ignore the first rewind after creation, + // as newly created DirectoryIterator does not need to be rewound + if ($this->ignoreFirstRewind) { + $this->ignoreFirstRewind = false; + + return; + } + + parent::rewind(); + } +} diff --git a/vendor/symfony/finder/Iterator/SizeRangeFilterIterator.php b/vendor/symfony/finder/Iterator/SizeRangeFilterIterator.php new file mode 100644 index 0000000..575bf29 --- /dev/null +++ b/vendor/symfony/finder/Iterator/SizeRangeFilterIterator.php @@ -0,0 +1,60 @@ + + * + * For the full copyright and license information, please view the LICENSE + * file that was distributed with this source code. + */ + +namespace Symfony\Component\Finder\Iterator; + +use Symfony\Component\Finder\Comparator\NumberComparator; + +/** + * SizeRangeFilterIterator filters out files that are not in the given size range. + * + * @author Fabien Potencier + * + * @extends \FilterIterator + */ +class SizeRangeFilterIterator extends \FilterIterator +{ + private $comparators = []; + + /** + * @param \Iterator $iterator + * @param NumberComparator[] $comparators + */ + public function __construct(\Iterator $iterator, array $comparators) + { + $this->comparators = $comparators; + + parent::__construct($iterator); + } + + /** + * Filters the iterator values. + * + * @return bool + */ + #[\ReturnTypeWillChange] + public function accept() + { + $fileinfo = $this->current(); + if (!$fileinfo->isFile()) { + return true; + } + + $filesize = $fileinfo->getSize(); + foreach ($this->comparators as $compare) { + if (!$compare->test($filesize)) { + return false; + } + } + + return true; + } +} diff --git a/vendor/symfony/finder/Iterator/SortableIterator.php b/vendor/symfony/finder/Iterator/SortableIterator.php new file mode 100644 index 0000000..9afde5c --- /dev/null +++ b/vendor/symfony/finder/Iterator/SortableIterator.php @@ -0,0 +1,104 @@ + + * + * For the full copyright and license information, please view the LICENSE + * file that was distributed with this source code. + */ + +namespace Symfony\Component\Finder\Iterator; + +/** + * SortableIterator applies a sort on a given Iterator. + * + * @author Fabien Potencier + * + * @implements \IteratorAggregate + */ +class SortableIterator implements \IteratorAggregate +{ + public const SORT_BY_NONE = 0; + public const SORT_BY_NAME = 1; + public const SORT_BY_TYPE = 2; + public const SORT_BY_ACCESSED_TIME = 3; + public const SORT_BY_CHANGED_TIME = 4; + public const SORT_BY_MODIFIED_TIME = 5; + public const SORT_BY_NAME_NATURAL = 6; + + private $iterator; + private $sort; + + /** + * @param \Traversable $iterator + * @param int|callable $sort The sort type (SORT_BY_NAME, SORT_BY_TYPE, or a PHP callback) + * + * @throws \InvalidArgumentException + */ + public function __construct(\Traversable $iterator, $sort, bool $reverseOrder = false) + { + $this->iterator = $iterator; + $order = $reverseOrder ? -1 : 1; + + if (self::SORT_BY_NAME === $sort) { + $this->sort = static function (\SplFileInfo $a, \SplFileInfo $b) use ($order) { + return $order * strcmp($a->getRealPath() ?: $a->getPathname(), $b->getRealPath() ?: $b->getPathname()); + }; + } elseif (self::SORT_BY_NAME_NATURAL === $sort) { + $this->sort = static function (\SplFileInfo $a, \SplFileInfo $b) use ($order) { + return $order * strnatcmp($a->getRealPath() ?: $a->getPathname(), $b->getRealPath() ?: $b->getPathname()); + }; + } elseif (self::SORT_BY_TYPE === $sort) { + $this->sort = static function (\SplFileInfo $a, \SplFileInfo $b) use ($order) { + if ($a->isDir() && $b->isFile()) { + return -$order; + } elseif ($a->isFile() && $b->isDir()) { + return $order; + } + + return $order * strcmp($a->getRealPath() ?: $a->getPathname(), $b->getRealPath() ?: $b->getPathname()); + }; + } elseif (self::SORT_BY_ACCESSED_TIME === $sort) { + $this->sort = static function (\SplFileInfo $a, \SplFileInfo $b) use ($order) { + return $order * ($a->getATime() - $b->getATime()); + }; + } elseif (self::SORT_BY_CHANGED_TIME === $sort) { + $this->sort = static function (\SplFileInfo $a, \SplFileInfo $b) use ($order) { + return $order * ($a->getCTime() - $b->getCTime()); + }; + } elseif (self::SORT_BY_MODIFIED_TIME === $sort) { + $this->sort = static function (\SplFileInfo $a, \SplFileInfo $b) use ($order) { + return $order * ($a->getMTime() - $b->getMTime()); + }; + } elseif (self::SORT_BY_NONE === $sort) { + $this->sort = $order; + } elseif (\is_callable($sort)) { + $this->sort = $reverseOrder ? static function (\SplFileInfo $a, \SplFileInfo $b) use ($sort) { return -$sort($a, $b); } : $sort; + } else { + throw new \InvalidArgumentException('The SortableIterator takes a PHP callable or a valid built-in sort algorithm as an argument.'); + } + } + + /** + * @return \Traversable + */ + #[\ReturnTypeWillChange] + public function getIterator() + { + if (1 === $this->sort) { + return $this->iterator; + } + + $array = iterator_to_array($this->iterator, true); + + if (-1 === $this->sort) { + $array = array_reverse($array); + } else { + uasort($array, $this->sort); + } + + return new \ArrayIterator($array); + } +} diff --git a/vendor/symfony/finder/Iterator/VcsIgnoredFilterIterator.php b/vendor/symfony/finder/Iterator/VcsIgnoredFilterIterator.php new file mode 100644 index 0000000..e27158c --- /dev/null +++ b/vendor/symfony/finder/Iterator/VcsIgnoredFilterIterator.php @@ -0,0 +1,151 @@ + + * + * For the full copyright and license information, please view the LICENSE + * file that was distributed with this source code. + */ + +namespace Symfony\Component\Finder\Iterator; + +use Symfony\Component\Finder\Gitignore; + +final class VcsIgnoredFilterIterator extends \FilterIterator +{ + /** + * @var string + */ + private $baseDir; + + /** + * @var array + */ + private $gitignoreFilesCache = []; + + /** + * @var array + */ + private $ignoredPathsCache = []; + + public function __construct(\Iterator $iterator, string $baseDir) + { + $this->baseDir = $this->normalizePath($baseDir); + + parent::__construct($iterator); + } + + public function accept(): bool + { + $file = $this->current(); + + $fileRealPath = $this->normalizePath($file->getRealPath()); + + return !$this->isIgnored($fileRealPath); + } + + private function isIgnored(string $fileRealPath): bool + { + if (is_dir($fileRealPath) && !str_ends_with($fileRealPath, '/')) { + $fileRealPath .= '/'; + } + + if (isset($this->ignoredPathsCache[$fileRealPath])) { + return $this->ignoredPathsCache[$fileRealPath]; + } + + $ignored = false; + + foreach ($this->parentsDirectoryDownward($fileRealPath) as $parentDirectory) { + if ($this->isIgnored($parentDirectory)) { + // rules in ignored directories are ignored, no need to check further. + break; + } + + $fileRelativePath = substr($fileRealPath, \strlen($parentDirectory) + 1); + + if (null === $regexps = $this->readGitignoreFile("{$parentDirectory}/.gitignore")) { + continue; + } + + [$exclusionRegex, $inclusionRegex] = $regexps; + + if (preg_match($exclusionRegex, $fileRelativePath)) { + $ignored = true; + + continue; + } + + if (preg_match($inclusionRegex, $fileRelativePath)) { + $ignored = false; + } + } + + return $this->ignoredPathsCache[$fileRealPath] = $ignored; + } + + /** + * @return list + */ + private function parentsDirectoryDownward(string $fileRealPath): array + { + $parentDirectories = []; + + $parentDirectory = $fileRealPath; + + while (true) { + $newParentDirectory = \dirname($parentDirectory); + + // dirname('/') = '/' + if ($newParentDirectory === $parentDirectory) { + break; + } + + $parentDirectory = $newParentDirectory; + + if (0 !== strpos($parentDirectory, $this->baseDir)) { + break; + } + + $parentDirectories[] = $parentDirectory; + } + + return array_reverse($parentDirectories); + } + + /** + * @return array{0: string, 1: string}|null + */ + private function readGitignoreFile(string $path): ?array + { + if (\array_key_exists($path, $this->gitignoreFilesCache)) { + return $this->gitignoreFilesCache[$path]; + } + + if (!file_exists($path)) { + return $this->gitignoreFilesCache[$path] = null; + } + + if (!is_file($path) || !is_readable($path)) { + throw new \RuntimeException("The \"ignoreVCSIgnored\" option cannot be used by the Finder as the \"{$path}\" file is not readable."); + } + + $gitignoreFileContent = file_get_contents($path); + + return $this->gitignoreFilesCache[$path] = [ + Gitignore::toRegex($gitignoreFileContent), + Gitignore::toRegexMatchingNegatedPatterns($gitignoreFileContent), + ]; + } + + private function normalizePath(string $path): string + { + if ('\\' === \DIRECTORY_SEPARATOR) { + return str_replace('\\', '/', $path); + } + + return $path; + } +} diff --git a/vendor/symfony/finder/LICENSE b/vendor/symfony/finder/LICENSE new file mode 100644 index 0000000..0138f8f --- /dev/null +++ b/vendor/symfony/finder/LICENSE @@ -0,0 +1,19 @@ +Copyright (c) 2004-present Fabien Potencier + +Permission is hereby granted, free of charge, to any person obtaining a copy +of this software and associated documentation files (the "Software"), to deal +in the Software without restriction, including without limitation the rights +to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +copies of the Software, and to permit persons to whom the Software is furnished +to do so, subject to the following conditions: + +The above copyright notice and this permission notice shall be included in all +copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN +THE SOFTWARE. diff --git a/vendor/symfony/finder/README.md b/vendor/symfony/finder/README.md new file mode 100644 index 0000000..22bdeb9 --- /dev/null +++ b/vendor/symfony/finder/README.md @@ -0,0 +1,14 @@ +Finder Component +================ + +The Finder component finds files and directories via an intuitive fluent +interface. + +Resources +--------- + + * [Documentation](https://symfony.com/doc/current/components/finder.html) + * [Contributing](https://symfony.com/doc/current/contributing/index.html) + * [Report issues](https://github.com/symfony/symfony/issues) and + [send Pull Requests](https://github.com/symfony/symfony/pulls) + in the [main Symfony repository](https://github.com/symfony/symfony) diff --git a/vendor/symfony/finder/SplFileInfo.php b/vendor/symfony/finder/SplFileInfo.php new file mode 100644 index 0000000..11604a2 --- /dev/null +++ b/vendor/symfony/finder/SplFileInfo.php @@ -0,0 +1,88 @@ + + * + * For the full copyright and license information, please view the LICENSE + * file that was distributed with this source code. + */ + +namespace Symfony\Component\Finder; + +/** + * Extends \SplFileInfo to support relative paths. + * + * @author Fabien Potencier + */ +class SplFileInfo extends \SplFileInfo +{ + private $relativePath; + private $relativePathname; + + /** + * @param string $file The file name + * @param string $relativePath The relative path + * @param string $relativePathname The relative path name + */ + public function __construct(string $file, string $relativePath, string $relativePathname) + { + parent::__construct($file); + $this->relativePath = $relativePath; + $this->relativePathname = $relativePathname; + } + + /** + * Returns the relative path. + * + * This path does not contain the file name. + * + * @return string + */ + public function getRelativePath() + { + return $this->relativePath; + } + + /** + * Returns the relative path name. + * + * This path contains the file name. + * + * @return string + */ + public function getRelativePathname() + { + return $this->relativePathname; + } + + public function getFilenameWithoutExtension(): string + { + $filename = $this->getFilename(); + + return pathinfo($filename, \PATHINFO_FILENAME); + } + + /** + * Returns the contents of the file. + * + * @return string + * + * @throws \RuntimeException + */ + public function getContents() + { + set_error_handler(function ($type, $msg) use (&$error) { $error = $msg; }); + try { + $content = file_get_contents($this->getPathname()); + } finally { + restore_error_handler(); + } + if (false === $content) { + throw new \RuntimeException($error); + } + + return $content; + } +} diff --git a/vendor/symfony/finder/composer.json b/vendor/symfony/finder/composer.json new file mode 100644 index 0000000..ef19911 --- /dev/null +++ b/vendor/symfony/finder/composer.json @@ -0,0 +1,30 @@ +{ + "name": "symfony/finder", + "type": "library", + "description": "Finds files and directories via an intuitive fluent interface", + "keywords": [], + "homepage": "https://symfony.com", + "license": "MIT", + "authors": [ + { + "name": "Fabien Potencier", + "email": "fabien@symfony.com" + }, + { + "name": "Symfony Community", + "homepage": "https://symfony.com/contributors" + } + ], + "require": { + "php": ">=7.2.5", + "symfony/deprecation-contracts": "^2.1|^3", + "symfony/polyfill-php80": "^1.16" + }, + "autoload": { + "psr-4": { "Symfony\\Component\\Finder\\": "" }, + "exclude-from-classmap": [ + "/Tests/" + ] + }, + "minimum-stability": "dev" +} diff --git a/vendor/symfony/polyfill-php80/LICENSE b/vendor/symfony/polyfill-php80/LICENSE new file mode 100644 index 0000000..0ed3a24 --- /dev/null +++ b/vendor/symfony/polyfill-php80/LICENSE @@ -0,0 +1,19 @@ +Copyright (c) 2020-present Fabien Potencier + +Permission is hereby granted, free of charge, to any person obtaining a copy +of this software and associated documentation files (the "Software"), to deal +in the Software without restriction, including without limitation the rights +to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +copies of the Software, and to permit persons to whom the Software is furnished +to do so, subject to the following conditions: + +The above copyright notice and this permission notice shall be included in all +copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN +THE SOFTWARE. diff --git a/vendor/symfony/polyfill-php80/Php80.php b/vendor/symfony/polyfill-php80/Php80.php new file mode 100644 index 0000000..362dd1a --- /dev/null +++ b/vendor/symfony/polyfill-php80/Php80.php @@ -0,0 +1,115 @@ + + * + * For the full copyright and license information, please view the LICENSE + * file that was distributed with this source code. + */ + +namespace Symfony\Polyfill\Php80; + +/** + * @author Ion Bazan + * @author Nico Oelgart + * @author Nicolas Grekas + * + * @internal + */ +final class Php80 +{ + public static function fdiv(float $dividend, float $divisor): float + { + return @($dividend / $divisor); + } + + public static function get_debug_type($value): string + { + switch (true) { + case null === $value: return 'null'; + case \is_bool($value): return 'bool'; + case \is_string($value): return 'string'; + case \is_array($value): return 'array'; + case \is_int($value): return 'int'; + case \is_float($value): return 'float'; + case \is_object($value): break; + case $value instanceof \__PHP_Incomplete_Class: return '__PHP_Incomplete_Class'; + default: + if (null === $type = @get_resource_type($value)) { + return 'unknown'; + } + + if ('Unknown' === $type) { + $type = 'closed'; + } + + return "resource ($type)"; + } + + $class = \get_class($value); + + if (false === strpos($class, '@')) { + return $class; + } + + return (get_parent_class($class) ?: key(class_implements($class)) ?: 'class').'@anonymous'; + } + + public static function get_resource_id($res): int + { + if (!\is_resource($res) && null === @get_resource_type($res)) { + throw new \TypeError(sprintf('Argument 1 passed to get_resource_id() must be of the type resource, %s given', get_debug_type($res))); + } + + return (int) $res; + } + + public static function preg_last_error_msg(): string + { + switch (preg_last_error()) { + case \PREG_INTERNAL_ERROR: + return 'Internal error'; + case \PREG_BAD_UTF8_ERROR: + return 'Malformed UTF-8 characters, possibly incorrectly encoded'; + case \PREG_BAD_UTF8_OFFSET_ERROR: + return 'The offset did not correspond to the beginning of a valid UTF-8 code point'; + case \PREG_BACKTRACK_LIMIT_ERROR: + return 'Backtrack limit exhausted'; + case \PREG_RECURSION_LIMIT_ERROR: + return 'Recursion limit exhausted'; + case \PREG_JIT_STACKLIMIT_ERROR: + return 'JIT stack limit exhausted'; + case \PREG_NO_ERROR: + return 'No error'; + default: + return 'Unknown error'; + } + } + + public static function str_contains(string $haystack, string $needle): bool + { + return '' === $needle || false !== strpos($haystack, $needle); + } + + public static function str_starts_with(string $haystack, string $needle): bool + { + return 0 === strncmp($haystack, $needle, \strlen($needle)); + } + + public static function str_ends_with(string $haystack, string $needle): bool + { + if ('' === $needle || $needle === $haystack) { + return true; + } + + if ('' === $haystack) { + return false; + } + + $needleLength = \strlen($needle); + + return $needleLength <= \strlen($haystack) && 0 === substr_compare($haystack, $needle, -$needleLength); + } +} diff --git a/vendor/symfony/polyfill-php80/PhpToken.php b/vendor/symfony/polyfill-php80/PhpToken.php new file mode 100644 index 0000000..fe6e691 --- /dev/null +++ b/vendor/symfony/polyfill-php80/PhpToken.php @@ -0,0 +1,103 @@ + + * + * For the full copyright and license information, please view the LICENSE + * file that was distributed with this source code. + */ + +namespace Symfony\Polyfill\Php80; + +/** + * @author Fedonyuk Anton + * + * @internal + */ +class PhpToken implements \Stringable +{ + /** + * @var int + */ + public $id; + + /** + * @var string + */ + public $text; + + /** + * @var int + */ + public $line; + + /** + * @var int + */ + public $pos; + + public function __construct(int $id, string $text, int $line = -1, int $position = -1) + { + $this->id = $id; + $this->text = $text; + $this->line = $line; + $this->pos = $position; + } + + public function getTokenName(): ?string + { + if ('UNKNOWN' === $name = token_name($this->id)) { + $name = \strlen($this->text) > 1 || \ord($this->text) < 32 ? null : $this->text; + } + + return $name; + } + + /** + * @param int|string|array $kind + */ + public function is($kind): bool + { + foreach ((array) $kind as $value) { + if (\in_array($value, [$this->id, $this->text], true)) { + return true; + } + } + + return false; + } + + public function isIgnorable(): bool + { + return \in_array($this->id, [\T_WHITESPACE, \T_COMMENT, \T_DOC_COMMENT, \T_OPEN_TAG], true); + } + + public function __toString(): string + { + return (string) $this->text; + } + + /** + * @return static[] + */ + public static function tokenize(string $code, int $flags = 0): array + { + $line = 1; + $position = 0; + $tokens = token_get_all($code, $flags); + foreach ($tokens as $index => $token) { + if (\is_string($token)) { + $id = \ord($token); + $text = $token; + } else { + [$id, $text, $line] = $token; + } + $tokens[$index] = new static($id, $text, $line, $position); + $position += \strlen($text); + } + + return $tokens; + } +} diff --git a/vendor/symfony/polyfill-php80/README.md b/vendor/symfony/polyfill-php80/README.md new file mode 100644 index 0000000..3816c55 --- /dev/null +++ b/vendor/symfony/polyfill-php80/README.md @@ -0,0 +1,25 @@ +Symfony Polyfill / Php80 +======================== + +This component provides features added to PHP 8.0 core: + +- [`Stringable`](https://php.net/stringable) interface +- [`fdiv`](https://php.net/fdiv) +- [`ValueError`](https://php.net/valueerror) class +- [`UnhandledMatchError`](https://php.net/unhandledmatcherror) class +- `FILTER_VALIDATE_BOOL` constant +- [`get_debug_type`](https://php.net/get_debug_type) +- [`PhpToken`](https://php.net/phptoken) class +- [`preg_last_error_msg`](https://php.net/preg_last_error_msg) +- [`str_contains`](https://php.net/str_contains) +- [`str_starts_with`](https://php.net/str_starts_with) +- [`str_ends_with`](https://php.net/str_ends_with) +- [`get_resource_id`](https://php.net/get_resource_id) + +More information can be found in the +[main Polyfill README](https://github.com/symfony/polyfill/blob/main/README.md). + +License +======= + +This library is released under the [MIT license](LICENSE). diff --git a/vendor/symfony/polyfill-php80/Resources/stubs/Attribute.php b/vendor/symfony/polyfill-php80/Resources/stubs/Attribute.php new file mode 100644 index 0000000..2b95542 --- /dev/null +++ b/vendor/symfony/polyfill-php80/Resources/stubs/Attribute.php @@ -0,0 +1,31 @@ + + * + * For the full copyright and license information, please view the LICENSE + * file that was distributed with this source code. + */ + +#[Attribute(Attribute::TARGET_CLASS)] +final class Attribute +{ + public const TARGET_CLASS = 1; + public const TARGET_FUNCTION = 2; + public const TARGET_METHOD = 4; + public const TARGET_PROPERTY = 8; + public const TARGET_CLASS_CONSTANT = 16; + public const TARGET_PARAMETER = 32; + public const TARGET_ALL = 63; + public const IS_REPEATABLE = 64; + + /** @var int */ + public $flags; + + public function __construct(int $flags = self::TARGET_ALL) + { + $this->flags = $flags; + } +} diff --git a/vendor/symfony/polyfill-php80/Resources/stubs/PhpToken.php b/vendor/symfony/polyfill-php80/Resources/stubs/PhpToken.php new file mode 100644 index 0000000..bd1212f --- /dev/null +++ b/vendor/symfony/polyfill-php80/Resources/stubs/PhpToken.php @@ -0,0 +1,16 @@ + + * + * For the full copyright and license information, please view the LICENSE + * file that was distributed with this source code. + */ + +if (\PHP_VERSION_ID < 80000 && extension_loaded('tokenizer')) { + class PhpToken extends Symfony\Polyfill\Php80\PhpToken + { + } +} diff --git a/vendor/symfony/polyfill-php80/Resources/stubs/Stringable.php b/vendor/symfony/polyfill-php80/Resources/stubs/Stringable.php new file mode 100644 index 0000000..7c62d75 --- /dev/null +++ b/vendor/symfony/polyfill-php80/Resources/stubs/Stringable.php @@ -0,0 +1,20 @@ + + * + * For the full copyright and license information, please view the LICENSE + * file that was distributed with this source code. + */ + +if (\PHP_VERSION_ID < 80000) { + interface Stringable + { + /** + * @return string + */ + public function __toString(); + } +} diff --git a/vendor/symfony/polyfill-php80/Resources/stubs/UnhandledMatchError.php b/vendor/symfony/polyfill-php80/Resources/stubs/UnhandledMatchError.php new file mode 100644 index 0000000..01c6c6c --- /dev/null +++ b/vendor/symfony/polyfill-php80/Resources/stubs/UnhandledMatchError.php @@ -0,0 +1,16 @@ + + * + * For the full copyright and license information, please view the LICENSE + * file that was distributed with this source code. + */ + +if (\PHP_VERSION_ID < 80000) { + class UnhandledMatchError extends Error + { + } +} diff --git a/vendor/symfony/polyfill-php80/Resources/stubs/ValueError.php b/vendor/symfony/polyfill-php80/Resources/stubs/ValueError.php new file mode 100644 index 0000000..783dbc2 --- /dev/null +++ b/vendor/symfony/polyfill-php80/Resources/stubs/ValueError.php @@ -0,0 +1,16 @@ + + * + * For the full copyright and license information, please view the LICENSE + * file that was distributed with this source code. + */ + +if (\PHP_VERSION_ID < 80000) { + class ValueError extends Error + { + } +} diff --git a/vendor/symfony/polyfill-php80/bootstrap.php b/vendor/symfony/polyfill-php80/bootstrap.php new file mode 100644 index 0000000..e5f7dbc --- /dev/null +++ b/vendor/symfony/polyfill-php80/bootstrap.php @@ -0,0 +1,42 @@ + + * + * For the full copyright and license information, please view the LICENSE + * file that was distributed with this source code. + */ + +use Symfony\Polyfill\Php80 as p; + +if (\PHP_VERSION_ID >= 80000) { + return; +} + +if (!defined('FILTER_VALIDATE_BOOL') && defined('FILTER_VALIDATE_BOOLEAN')) { + define('FILTER_VALIDATE_BOOL', \FILTER_VALIDATE_BOOLEAN); +} + +if (!function_exists('fdiv')) { + function fdiv(float $num1, float $num2): float { return p\Php80::fdiv($num1, $num2); } +} +if (!function_exists('preg_last_error_msg')) { + function preg_last_error_msg(): string { return p\Php80::preg_last_error_msg(); } +} +if (!function_exists('str_contains')) { + function str_contains(?string $haystack, ?string $needle): bool { return p\Php80::str_contains($haystack ?? '', $needle ?? ''); } +} +if (!function_exists('str_starts_with')) { + function str_starts_with(?string $haystack, ?string $needle): bool { return p\Php80::str_starts_with($haystack ?? '', $needle ?? ''); } +} +if (!function_exists('str_ends_with')) { + function str_ends_with(?string $haystack, ?string $needle): bool { return p\Php80::str_ends_with($haystack ?? '', $needle ?? ''); } +} +if (!function_exists('get_debug_type')) { + function get_debug_type($value): string { return p\Php80::get_debug_type($value); } +} +if (!function_exists('get_resource_id')) { + function get_resource_id($resource): int { return p\Php80::get_resource_id($resource); } +} diff --git a/vendor/symfony/polyfill-php80/composer.json b/vendor/symfony/polyfill-php80/composer.json new file mode 100644 index 0000000..a503b03 --- /dev/null +++ b/vendor/symfony/polyfill-php80/composer.json @@ -0,0 +1,37 @@ +{ + "name": "symfony/polyfill-php80", + "type": "library", + "description": "Symfony polyfill backporting some PHP 8.0+ features to lower PHP versions", + "keywords": ["polyfill", "shim", "compatibility", "portable"], + "homepage": "https://symfony.com", + "license": "MIT", + "authors": [ + { + "name": "Ion Bazan", + "email": "ion.bazan@gmail.com" + }, + { + "name": "Nicolas Grekas", + "email": "p@tchwork.com" + }, + { + "name": "Symfony Community", + "homepage": "https://symfony.com/contributors" + } + ], + "require": { + "php": ">=7.2" + }, + "autoload": { + "psr-4": { "Symfony\\Polyfill\\Php80\\": "" }, + "files": [ "bootstrap.php" ], + "classmap": [ "Resources/stubs" ] + }, + "minimum-stability": "dev", + "extra": { + "thanks": { + "name": "symfony/polyfill", + "url": "https://github.com/symfony/polyfill" + } + } +}