From d2521cd5e8563589965a3d7d852b939d95b2b394 Mon Sep 17 00:00:00 2001 From: Patrick Robrecht Date: Thu, 20 Aug 2020 21:05:39 +0200 Subject: [PATCH 01/17] Add code style check for CSS, update code style checks for JS and PHP, generate minified files in build step and remove them from the repository, update PHP versions in Travis build --- .distignore | 20 + .gitattributes | 1 + .../wordpress-plugin-asset-update.yml | 21 +- .github/workflows/wordpress-plugin-deploy.yml | 5 +- .gitignore | 14 +- .stylelintrc.json | 6 + .travis.yml | 24 +- composer.json | 36 +- composer.lock | 1892 +++++++++ css/style.css | 25 +- css/style.min.css | 1 - inc/class-antivirus.php | 2 - js/script.js | 2 - js/script.min.js | 11 - package-lock.json | 3637 +++++++++++++++++ package.json | 6 +- 16 files changed, 5641 insertions(+), 62 deletions(-) create mode 100644 .distignore create mode 100644 .stylelintrc.json create mode 100644 composer.lock delete mode 100644 css/style.min.css delete mode 100644 js/script.min.js create mode 100644 package-lock.json diff --git a/.distignore b/.distignore new file mode 100644 index 0000000..de93c6d --- /dev/null +++ b/.distignore @@ -0,0 +1,20 @@ +# Directories +/.git +/.github +/.wordpress-org +/node_modules +/vendor + +# Files +/.distignore +/.eslintrc.json +/.gitattributes +/.gitignore +/.stylelintrc.json +/.travis.yml +/composer.json +/package.json +/package-lock.json +/composer.lock +/phpcs.xml +/phpunit.xml export-ignore diff --git a/.gitattributes b/.gitattributes index e46b2d4..cb1170f 100644 --- a/.gitattributes +++ b/.gitattributes @@ -10,6 +10,7 @@ /.eslintrc.json export-ignore /.gitattributes export-ignore /.gitignore export-ignore +/.stylelintrc.json export-ignore /.travis.yml export-ignore /composer.json export-ignore /composer.lock export-ignore diff --git a/.github/workflows/wordpress-plugin-asset-update.yml b/.github/workflows/wordpress-plugin-asset-update.yml index bfec93b..951d0e0 100644 --- a/.github/workflows/wordpress-plugin-asset-update.yml +++ b/.github/workflows/wordpress-plugin-asset-update.yml @@ -2,16 +2,17 @@ name: Plugin asset/readme update on: push: branches: - - master + - stable jobs: - master: - name: Push to master + stable: + name: Push to stable runs-on: ubuntu-latest steps: - - uses: actions/checkout@master - - name: WordPress.org plugin asset/readme update - uses: 10up/action-wordpress-plugin-asset-update@master - env: - SVN_PASSWORD: ${{ secrets.SVN_PASSWORD }} - SVN_USERNAME: ${{ secrets.SVN_USERNAME }} - README_NAME: README.md \ No newline at end of file + - uses: actions/checkout@v2 + - uses: php-actions/composer@v1 + - name: WordPress.org plugin asset/readme update + uses: 10up/action-wordpress-plugin-asset-update@stable + env: + SVN_PASSWORD: ${{ secrets.SVN_PASSWORD }} + SVN_USERNAME: ${{ secrets.SVN_USERNAME }} + README_NAME: README.md diff --git a/.github/workflows/wordpress-plugin-deploy.yml b/.github/workflows/wordpress-plugin-deploy.yml index cbedec6..d25468d 100644 --- a/.github/workflows/wordpress-plugin-deploy.yml +++ b/.github/workflows/wordpress-plugin-deploy.yml @@ -9,9 +9,10 @@ jobs: name: New tag runs-on: ubuntu-latest steps: - - uses: actions/checkout@master + - uses: actions/checkout@v2 + - uses: php-actions/composer@v1 - name: WordPress Plugin Deploy - uses: 10up/action-wordpress-plugin-deploy@master + uses: 10up/action-wordpress-plugin-deploy@stable env: SVN_PASSWORD: ${{ secrets.SVN_PASSWORD }} SVN_USERNAME: ${{ secrets.SVN_USERNAME }} diff --git a/.gitignore b/.gitignore index 20055d9..87c14fc 100644 --- a/.gitignore +++ b/.gitignore @@ -1,9 +1,5 @@ -# General -.DS_Store -composer.lock -package-lock.json - -# Dependencies (e.g. Composer, npm, etc.) -vendor -!vendor/.gitkeep -node_modules +.idea/ +css/*.min.css +js/*.min.js +vendor/ +node_modules/ diff --git a/.stylelintrc.json b/.stylelintrc.json new file mode 100644 index 0000000..cefe643 --- /dev/null +++ b/.stylelintrc.json @@ -0,0 +1,6 @@ +{ + "extends": "stylelint-config-wordpress", + "rules": { + "selector-id-pattern": null + } +} diff --git a/.travis.yml b/.travis.yml index f53c802..8f5d2cd 100644 --- a/.travis.yml +++ b/.travis.yml @@ -1,23 +1,25 @@ language: php php: - - 5.2 - - 5.3 - - 5.4 - - 5.5 - - 5.6 - - 7.0 - - hhvm + - '5.6' + - '7.0' + - '7.1' + - '7.2' + - '7.3' + - '7.4' + - nightly matrix: allow_failures: - - php: 7.0 - - php: hhvm + - php: nightly env: - WP_VERSION=nightly WP_MULTISITE=0 - WP_VERSION=nightly WP_MULTISITE=1 +before_install: + - nvm install 12 + # Clones WordPress and configures our testing environment. before_script: # Setup Coveralls @@ -30,9 +32,9 @@ before_script: - bash bin/install-wp-tests.sh wordpress_test root '' 127.0.0.1 $WP_VERSION script: - - vendor/bin/phpcs -n --report=emacs --standard=phpcs.ruleset.xml antivirus.php + - composer build + - composer lint-all - phpunit --coverage-clover clover.xml - - npx eslint js/script.js after_script: # Push coverage off to Codecov diff --git a/composer.json b/composer.json index 34c2894..bb9dc3d 100644 --- a/composer.json +++ b/composer.json @@ -5,11 +5,11 @@ "type": "wordpress-plugin", "license": "GPL-2.0+", "require": { - "composer/installers": "~1.0", + "php": "^5.2|^7", "ext-json": "*" }, "require-dev": { - "dealerdirect/phpcodesniffer-composer-installer": "^0.4", + "dealerdirect/phpcodesniffer-composer-installer": "^0.7", "lipemat/wp-unit": "^1.5", "matthiasmullie/minify": "^1.3", "phpcompatibility/php-compatibility": "^9.3", @@ -18,10 +18,38 @@ "wp-coding-standards/wpcs": "^2.3" }, "scripts": { + "post-install-cmd": [ + "@build" + ], + "post-update-cmd": [ + "@build" + ], + "build": [ + "@minify" + ], + "cs": [ + "@lint-php" + ], + "csfix": [ + "phpcbf --standard=phpcs.xml" + ], + "lint-all": [ + "@lint-php", + "@lint-js", + "@lint-css" + ], + "lint-css": [ + "npx stylelint css/style.css" + ], + "lint-js": [ + "npx eslint js/script.js" + ], + "lint-php": [ + "phpcs --standard=phpcs.xml -s" + ], "minify": [ "minifycss css/style.css > css/style.min.css", "minifyjs js/script.js > js/script.min.js" - ], - "lint": "phpcs" + ] } } diff --git a/composer.lock b/composer.lock new file mode 100644 index 0000000..7fff0dc --- /dev/null +++ b/composer.lock @@ -0,0 +1,1892 @@ +{ + "_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": "95513f9aab1762eca4452b9b9d73a5d1", + "packages": [], + "packages-dev": [ + { + "name": "dealerdirect/phpcodesniffer-composer-installer", + "version": "v0.7.0", + "source": { + "type": "git", + "url": "https://github.com/Dealerdirect/phpcodesniffer-composer-installer.git", + "reference": "e8d808670b8f882188368faaf1144448c169c0b7" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/Dealerdirect/phpcodesniffer-composer-installer/zipball/e8d808670b8f882188368faaf1144448c169c0b7", + "reference": "e8d808670b8f882188368faaf1144448c169c0b7", + "shasum": "" + }, + "require": { + "composer-plugin-api": "^1.0 || ^2.0", + "php": ">=5.3", + "squizlabs/php_codesniffer": "^2 || ^3 || 4.0.x-dev" + }, + "require-dev": { + "composer/composer": "*", + "phpcompatibility/php-compatibility": "^9.0", + "sensiolabs/security-checker": "^4.1.0" + }, + "type": "composer-plugin", + "extra": { + "class": "Dealerdirect\\Composer\\Plugin\\Installers\\PHPCodeSniffer\\Plugin" + }, + "autoload": { + "psr-4": { + "Dealerdirect\\Composer\\Plugin\\Installers\\PHPCodeSniffer\\": "src/" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Franck Nijhof", + "email": "franck.nijhof@dealerdirect.com", + "homepage": "http://www.frenck.nl", + "role": "Developer / IT Manager" + } + ], + "description": "PHP_CodeSniffer Standards Composer Installer Plugin", + "homepage": "http://www.dealerdirect.com", + "keywords": [ + "PHPCodeSniffer", + "PHP_CodeSniffer", + "code quality", + "codesniffer", + "composer", + "installer", + "phpcs", + "plugin", + "qa", + "quality", + "standard", + "standards", + "style guide", + "stylecheck", + "tests" + ], + "time": "2020-06-25T14:57:39+00:00" + }, + { + "name": "doctrine/instantiator", + "version": "1.3.1", + "source": { + "type": "git", + "url": "https://github.com/doctrine/instantiator.git", + "reference": "f350df0268e904597e3bd9c4685c53e0e333feea" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/doctrine/instantiator/zipball/f350df0268e904597e3bd9c4685c53e0e333feea", + "reference": "f350df0268e904597e3bd9c4685c53e0e333feea", + "shasum": "" + }, + "require": { + "php": "^7.1 || ^8.0" + }, + "require-dev": { + "doctrine/coding-standard": "^6.0", + "ext-pdo": "*", + "ext-phar": "*", + "phpbench/phpbench": "^0.13", + "phpstan/phpstan-phpunit": "^0.11", + "phpstan/phpstan-shim": "^0.11", + "phpunit/phpunit": "^7.0" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "1.2.x-dev" + } + }, + "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": "http://ocramius.github.com/" + } + ], + "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" + ], + "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": "2020-05-29T17:27:14+00:00" + }, + { + "name": "lipemat/wp-unit", + "version": "1.9.0", + "source": { + "type": "git", + "url": "https://github.com/lipemat/wp-unit.git", + "reference": "5cb0d6974df254950d77d075474d08b44352fc1c" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/lipemat/wp-unit/zipball/5cb0d6974df254950d77d075474d08b44352fc1c", + "reference": "5cb0d6974df254950d77d075474d08b44352fc1c", + "shasum": "" + }, + "require": { + "php": ">=5.6.1" + }, + "type": "library", + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "lipemat", + "email": "mat@matlipe.com" + } + ], + "description": "Forked Wp-unit with support for testing against existing database and other environment enhancements", + "time": "2019-11-05T17:13:15+00:00" + }, + { + "name": "matthiasmullie/minify", + "version": "1.3.63", + "source": { + "type": "git", + "url": "https://github.com/matthiasmullie/minify.git", + "reference": "9ba1b459828adc13430f4dd6c49dae4950dc4117" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/matthiasmullie/minify/zipball/9ba1b459828adc13430f4dd6c49dae4950dc4117", + "reference": "9ba1b459828adc13430f4dd6c49dae4950dc4117", + "shasum": "" + }, + "require": { + "ext-pcre": "*", + "matthiasmullie/path-converter": "~1.1", + "php": ">=5.3.0" + }, + "require-dev": { + "friendsofphp/php-cs-fixer": "~2.0", + "matthiasmullie/scrapbook": "~1.0", + "phpunit/phpunit": "~4.8" + }, + "suggest": { + "psr/cache-implementation": "Cache implementation to use with Minify::cache" + }, + "bin": [ + "bin/minifycss", + "bin/minifyjs" + ], + "type": "library", + "autoload": { + "psr-4": { + "MatthiasMullie\\Minify\\": "src/" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Matthias Mullie", + "email": "minify@mullie.eu", + "homepage": "http://www.mullie.eu", + "role": "Developer" + } + ], + "description": "CSS & JavaScript minifier, in PHP. Removes whitespace, strips comments, combines files (incl. @import statements and small assets in CSS files), and optimizes/shortens a few common programming patterns.", + "homepage": "http://www.minifier.org", + "keywords": [ + "JS", + "css", + "javascript", + "minifier", + "minify" + ], + "time": "2020-01-21T20:21:08+00:00" + }, + { + "name": "matthiasmullie/path-converter", + "version": "1.1.3", + "source": { + "type": "git", + "url": "https://github.com/matthiasmullie/path-converter.git", + "reference": "e7d13b2c7e2f2268e1424aaed02085518afa02d9" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/matthiasmullie/path-converter/zipball/e7d13b2c7e2f2268e1424aaed02085518afa02d9", + "reference": "e7d13b2c7e2f2268e1424aaed02085518afa02d9", + "shasum": "" + }, + "require": { + "ext-pcre": "*", + "php": ">=5.3.0" + }, + "require-dev": { + "phpunit/phpunit": "~4.8" + }, + "type": "library", + "autoload": { + "psr-4": { + "MatthiasMullie\\PathConverter\\": "src/" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Matthias Mullie", + "email": "pathconverter@mullie.eu", + "homepage": "http://www.mullie.eu", + "role": "Developer" + } + ], + "description": "Relative path converter", + "homepage": "http://github.com/matthiasmullie/path-converter", + "keywords": [ + "converter", + "path", + "paths", + "relative" + ], + "time": "2019-02-05T23:41:09+00:00" + }, + { + "name": "myclabs/deep-copy", + "version": "1.10.1", + "source": { + "type": "git", + "url": "https://github.com/myclabs/DeepCopy.git", + "reference": "969b211f9a51aa1f6c01d1d2aef56d3bd91598e5" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/myclabs/DeepCopy/zipball/969b211f9a51aa1f6c01d1d2aef56d3bd91598e5", + "reference": "969b211f9a51aa1f6c01d1d2aef56d3bd91598e5", + "shasum": "" + }, + "require": { + "php": "^7.1 || ^8.0" + }, + "replace": { + "myclabs/deep-copy": "self.version" + }, + "require-dev": { + "doctrine/collections": "^1.0", + "doctrine/common": "^2.6", + "phpunit/phpunit": "^7.1" + }, + "type": "library", + "autoload": { + "psr-4": { + "DeepCopy\\": "src/DeepCopy/" + }, + "files": [ + "src/DeepCopy/deep_copy.php" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "description": "Create deep copies (clones) of your objects", + "keywords": [ + "clone", + "copy", + "duplicate", + "object", + "object graph" + ], + "funding": [ + { + "url": "https://tidelift.com/funding/github/packagist/myclabs/deep-copy", + "type": "tidelift" + } + ], + "time": "2020-06-29T13:22:24+00:00" + }, + { + "name": "phar-io/manifest", + "version": "1.0.3", + "source": { + "type": "git", + "url": "https://github.com/phar-io/manifest.git", + "reference": "7761fcacf03b4d4f16e7ccb606d4879ca431fcf4" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/phar-io/manifest/zipball/7761fcacf03b4d4f16e7ccb606d4879ca431fcf4", + "reference": "7761fcacf03b4d4f16e7ccb606d4879ca431fcf4", + "shasum": "" + }, + "require": { + "ext-dom": "*", + "ext-phar": "*", + "phar-io/version": "^2.0", + "php": "^5.6 || ^7.0" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "1.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)", + "time": "2018-07-08T19:23:20+00:00" + }, + { + "name": "phar-io/version", + "version": "2.0.1", + "source": { + "type": "git", + "url": "https://github.com/phar-io/version.git", + "reference": "45a2ec53a73c70ce41d55cedef9063630abaf1b6" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/phar-io/version/zipball/45a2ec53a73c70ce41d55cedef9063630abaf1b6", + "reference": "45a2ec53a73c70ce41d55cedef9063630abaf1b6", + "shasum": "" + }, + "require": { + "php": "^5.6 || ^7.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", + "time": "2018-07-08T19:19:57+00:00" + }, + { + "name": "phpcompatibility/php-compatibility", + "version": "9.3.5", + "source": { + "type": "git", + "url": "https://github.com/PHPCompatibility/PHPCompatibility.git", + "reference": "9fb324479acf6f39452e0655d2429cc0d3914243" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/PHPCompatibility/PHPCompatibility/zipball/9fb324479acf6f39452e0655d2429cc0d3914243", + "reference": "9fb324479acf6f39452e0655d2429cc0d3914243", + "shasum": "" + }, + "require": { + "php": ">=5.3", + "squizlabs/php_codesniffer": "^2.3 || ^3.0.2" + }, + "conflict": { + "squizlabs/php_codesniffer": "2.6.2" + }, + "require-dev": { + "phpunit/phpunit": "~4.5 || ^5.0 || ^6.0 || ^7.0" + }, + "suggest": { + "dealerdirect/phpcodesniffer-composer-installer": "^0.5 || This Composer plugin will sort out the PHPCS 'installed_paths' automatically.", + "roave/security-advisories": "dev-master || Helps prevent installing dependencies with known security issues." + }, + "type": "phpcodesniffer-standard", + "notification-url": "https://packagist.org/downloads/", + "license": [ + "LGPL-3.0-or-later" + ], + "authors": [ + { + "name": "Wim Godden", + "homepage": "https://github.com/wimg", + "role": "lead" + }, + { + "name": "Juliette Reinders Folmer", + "homepage": "https://github.com/jrfnl", + "role": "lead" + }, + { + "name": "Contributors", + "homepage": "https://github.com/PHPCompatibility/PHPCompatibility/graphs/contributors" + } + ], + "description": "A set of sniffs for PHP_CodeSniffer that checks for PHP cross-version compatibility.", + "homepage": "http://techblog.wimgodden.be/tag/codesniffer/", + "keywords": [ + "compatibility", + "phpcs", + "standards" + ], + "time": "2019-12-27T09:44:58+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" + ], + "time": "2020-06-27T09:03:43+00:00" + }, + { + "name": "phpdocumentor/reflection-docblock", + "version": "5.2.1", + "source": { + "type": "git", + "url": "https://github.com/phpDocumentor/ReflectionDocBlock.git", + "reference": "d870572532cd70bc3fab58f2e23ad423c8404c44" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/phpDocumentor/ReflectionDocBlock/zipball/d870572532cd70bc3fab58f2e23ad423c8404c44", + "reference": "d870572532cd70bc3fab58f2e23ad423c8404c44", + "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" + }, + "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.", + "time": "2020-08-15T11:14:08+00:00" + }, + { + "name": "phpdocumentor/type-resolver", + "version": "1.3.0", + "source": { + "type": "git", + "url": "https://github.com/phpDocumentor/TypeResolver.git", + "reference": "e878a14a65245fbe78f8080eba03b47c3b705651" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/phpDocumentor/TypeResolver/zipball/e878a14a65245fbe78f8080eba03b47c3b705651", + "reference": "e878a14a65245fbe78f8080eba03b47c3b705651", + "shasum": "" + }, + "require": { + "php": "^7.2 || ^8.0", + "phpdocumentor/reflection-common": "^2.0" + }, + "require-dev": { + "ext-tokenizer": "*" + }, + "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", + "time": "2020-06-27T10:12:23+00:00" + }, + { + "name": "phpspec/prophecy", + "version": "1.11.1", + "source": { + "type": "git", + "url": "https://github.com/phpspec/prophecy.git", + "reference": "b20034be5efcdab4fb60ca3a29cba2949aead160" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/phpspec/prophecy/zipball/b20034be5efcdab4fb60ca3a29cba2949aead160", + "reference": "b20034be5efcdab4fb60ca3a29cba2949aead160", + "shasum": "" + }, + "require": { + "doctrine/instantiator": "^1.2", + "php": "^7.2", + "phpdocumentor/reflection-docblock": "^5.0", + "sebastian/comparator": "^3.0 || ^4.0", + "sebastian/recursion-context": "^3.0 || ^4.0" + }, + "require-dev": { + "phpspec/phpspec": "^6.0", + "phpunit/phpunit": "^8.0" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "1.11.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" + ], + "time": "2020-07-08T12:44:21+00:00" + }, + { + "name": "phpunit/php-code-coverage", + "version": "6.1.4", + "source": { + "type": "git", + "url": "https://github.com/sebastianbergmann/php-code-coverage.git", + "reference": "807e6013b00af69b6c5d9ceb4282d0393dbb9d8d" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/sebastianbergmann/php-code-coverage/zipball/807e6013b00af69b6c5d9ceb4282d0393dbb9d8d", + "reference": "807e6013b00af69b6c5d9ceb4282d0393dbb9d8d", + "shasum": "" + }, + "require": { + "ext-dom": "*", + "ext-xmlwriter": "*", + "php": "^7.1", + "phpunit/php-file-iterator": "^2.0", + "phpunit/php-text-template": "^1.2.1", + "phpunit/php-token-stream": "^3.0", + "sebastian/code-unit-reverse-lookup": "^1.0.1", + "sebastian/environment": "^3.1 || ^4.0", + "sebastian/version": "^2.0.1", + "theseer/tokenizer": "^1.1" + }, + "require-dev": { + "phpunit/phpunit": "^7.0" + }, + "suggest": { + "ext-xdebug": "^2.6.0" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "6.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": "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" + ], + "time": "2018-10-31T16:06:48+00:00" + }, + { + "name": "phpunit/php-file-iterator", + "version": "2.0.2", + "source": { + "type": "git", + "url": "https://github.com/sebastianbergmann/php-file-iterator.git", + "reference": "050bedf145a257b1ff02746c31894800e5122946" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/sebastianbergmann/php-file-iterator/zipball/050bedf145a257b1ff02746c31894800e5122946", + "reference": "050bedf145a257b1ff02746c31894800e5122946", + "shasum": "" + }, + "require": { + "php": "^7.1" + }, + "require-dev": { + "phpunit/phpunit": "^7.1" + }, + "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": "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" + ], + "time": "2018-09-13T20:33:42+00:00" + }, + { + "name": "phpunit/php-text-template", + "version": "1.2.1", + "source": { + "type": "git", + "url": "https://github.com/sebastianbergmann/php-text-template.git", + "reference": "31f8b717e51d9a2afca6c9f046f5d69fc27c8686" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/sebastianbergmann/php-text-template/zipball/31f8b717e51d9a2afca6c9f046f5d69fc27c8686", + "reference": "31f8b717e51d9a2afca6c9f046f5d69fc27c8686", + "shasum": "" + }, + "require": { + "php": ">=5.3.3" + }, + "type": "library", + "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" + ], + "time": "2015-06-21T13:50:34+00:00" + }, + { + "name": "phpunit/php-timer", + "version": "2.1.2", + "source": { + "type": "git", + "url": "https://github.com/sebastianbergmann/php-timer.git", + "reference": "1038454804406b0b5f5f520358e78c1c2f71501e" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/sebastianbergmann/php-timer/zipball/1038454804406b0b5f5f520358e78c1c2f71501e", + "reference": "1038454804406b0b5f5f520358e78c1c2f71501e", + "shasum": "" + }, + "require": { + "php": "^7.1" + }, + "require-dev": { + "phpunit/phpunit": "^7.0" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "2.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": "Utility class for timing", + "homepage": "https://github.com/sebastianbergmann/php-timer/", + "keywords": [ + "timer" + ], + "time": "2019-06-07T04:22:29+00:00" + }, + { + "name": "phpunit/php-token-stream", + "version": "3.1.1", + "source": { + "type": "git", + "url": "https://github.com/sebastianbergmann/php-token-stream.git", + "reference": "995192df77f63a59e47f025390d2d1fdf8f425ff" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/sebastianbergmann/php-token-stream/zipball/995192df77f63a59e47f025390d2d1fdf8f425ff", + "reference": "995192df77f63a59e47f025390d2d1fdf8f425ff", + "shasum": "" + }, + "require": { + "ext-tokenizer": "*", + "php": "^7.1" + }, + "require-dev": { + "phpunit/phpunit": "^7.0" + }, + "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" + } + ], + "description": "Wrapper around PHP's tokenizer extension.", + "homepage": "https://github.com/sebastianbergmann/php-token-stream/", + "keywords": [ + "tokenizer" + ], + "abandoned": true, + "time": "2019-09-17T06:23:10+00:00" + }, + { + "name": "phpunit/phpunit", + "version": "7.5.20", + "source": { + "type": "git", + "url": "https://github.com/sebastianbergmann/phpunit.git", + "reference": "9467db479d1b0487c99733bb1e7944d32deded2c" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/sebastianbergmann/phpunit/zipball/9467db479d1b0487c99733bb1e7944d32deded2c", + "reference": "9467db479d1b0487c99733bb1e7944d32deded2c", + "shasum": "" + }, + "require": { + "doctrine/instantiator": "^1.1", + "ext-dom": "*", + "ext-json": "*", + "ext-libxml": "*", + "ext-mbstring": "*", + "ext-xml": "*", + "myclabs/deep-copy": "^1.7", + "phar-io/manifest": "^1.0.2", + "phar-io/version": "^2.0", + "php": "^7.1", + "phpspec/prophecy": "^1.7", + "phpunit/php-code-coverage": "^6.0.7", + "phpunit/php-file-iterator": "^2.0.1", + "phpunit/php-text-template": "^1.2.1", + "phpunit/php-timer": "^2.1", + "sebastian/comparator": "^3.0", + "sebastian/diff": "^3.0", + "sebastian/environment": "^4.0", + "sebastian/exporter": "^3.1", + "sebastian/global-state": "^2.0", + "sebastian/object-enumerator": "^3.0.3", + "sebastian/resource-operations": "^2.0", + "sebastian/version": "^2.0.1" + }, + "conflict": { + "phpunit/phpunit-mock-objects": "*" + }, + "require-dev": { + "ext-pdo": "*" + }, + "suggest": { + "ext-soap": "*", + "ext-xdebug": "*", + "phpunit/php-invoker": "^2.0" + }, + "bin": [ + "phpunit" + ], + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "7.5-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": "The PHP Unit Testing framework.", + "homepage": "https://phpunit.de/", + "keywords": [ + "phpunit", + "testing", + "xunit" + ], + "time": "2020-01-08T08:45:45+00:00" + }, + { + "name": "sebastian/code-unit-reverse-lookup", + "version": "1.0.1", + "source": { + "type": "git", + "url": "https://github.com/sebastianbergmann/code-unit-reverse-lookup.git", + "reference": "4419fcdb5eabb9caa61a27c7a1db532a6b55dd18" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/sebastianbergmann/code-unit-reverse-lookup/zipball/4419fcdb5eabb9caa61a27c7a1db532a6b55dd18", + "reference": "4419fcdb5eabb9caa61a27c7a1db532a6b55dd18", + "shasum": "" + }, + "require": { + "php": "^5.6 || ^7.0" + }, + "require-dev": { + "phpunit/phpunit": "^5.7 || ^6.0" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "1.0.x-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/", + "time": "2017-03-04T06:30:41+00:00" + }, + { + "name": "sebastian/comparator", + "version": "3.0.2", + "source": { + "type": "git", + "url": "https://github.com/sebastianbergmann/comparator.git", + "reference": "5de4fc177adf9bce8df98d8d141a7559d7ccf6da" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/sebastianbergmann/comparator/zipball/5de4fc177adf9bce8df98d8d141a7559d7ccf6da", + "reference": "5de4fc177adf9bce8df98d8d141a7559d7ccf6da", + "shasum": "" + }, + "require": { + "php": "^7.1", + "sebastian/diff": "^3.0", + "sebastian/exporter": "^3.1" + }, + "require-dev": { + "phpunit/phpunit": "^7.1" + }, + "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": "Jeff Welch", + "email": "whatthejeff@gmail.com" + }, + { + "name": "Volker Dusch", + "email": "github@wallbash.com" + }, + { + "name": "Bernhard Schussek", + "email": "bschussek@2bepublished.at" + }, + { + "name": "Sebastian Bergmann", + "email": "sebastian@phpunit.de" + } + ], + "description": "Provides the functionality to compare PHP values for equality", + "homepage": "https://github.com/sebastianbergmann/comparator", + "keywords": [ + "comparator", + "compare", + "equality" + ], + "time": "2018-07-12T15:12:46+00:00" + }, + { + "name": "sebastian/diff", + "version": "3.0.2", + "source": { + "type": "git", + "url": "https://github.com/sebastianbergmann/diff.git", + "reference": "720fcc7e9b5cf384ea68d9d930d480907a0c1a29" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/sebastianbergmann/diff/zipball/720fcc7e9b5cf384ea68d9d930d480907a0c1a29", + "reference": "720fcc7e9b5cf384ea68d9d930d480907a0c1a29", + "shasum": "" + }, + "require": { + "php": "^7.1" + }, + "require-dev": { + "phpunit/phpunit": "^7.5 || ^8.0", + "symfony/process": "^2 || ^3.3 || ^4" + }, + "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": "Kore Nordmann", + "email": "mail@kore-nordmann.de" + }, + { + "name": "Sebastian Bergmann", + "email": "sebastian@phpunit.de" + } + ], + "description": "Diff implementation", + "homepage": "https://github.com/sebastianbergmann/diff", + "keywords": [ + "diff", + "udiff", + "unidiff", + "unified diff" + ], + "time": "2019-02-04T06:01:07+00:00" + }, + { + "name": "sebastian/environment", + "version": "4.2.3", + "source": { + "type": "git", + "url": "https://github.com/sebastianbergmann/environment.git", + "reference": "464c90d7bdf5ad4e8a6aea15c091fec0603d4368" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/sebastianbergmann/environment/zipball/464c90d7bdf5ad4e8a6aea15c091fec0603d4368", + "reference": "464c90d7bdf5ad4e8a6aea15c091fec0603d4368", + "shasum": "" + }, + "require": { + "php": "^7.1" + }, + "require-dev": { + "phpunit/phpunit": "^7.5" + }, + "suggest": { + "ext-posix": "*" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "4.2-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" + ], + "time": "2019-11-20T08:46:58+00:00" + }, + { + "name": "sebastian/exporter", + "version": "3.1.2", + "source": { + "type": "git", + "url": "https://github.com/sebastianbergmann/exporter.git", + "reference": "68609e1261d215ea5b21b7987539cbfbe156ec3e" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/sebastianbergmann/exporter/zipball/68609e1261d215ea5b21b7987539cbfbe156ec3e", + "reference": "68609e1261d215ea5b21b7987539cbfbe156ec3e", + "shasum": "" + }, + "require": { + "php": "^7.0", + "sebastian/recursion-context": "^3.0" + }, + "require-dev": { + "ext-mbstring": "*", + "phpunit/phpunit": "^6.0" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "3.1.x-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": "http://www.github.com/sebastianbergmann/exporter", + "keywords": [ + "export", + "exporter" + ], + "time": "2019-09-14T09:02:43+00:00" + }, + { + "name": "sebastian/global-state", + "version": "2.0.0", + "source": { + "type": "git", + "url": "https://github.com/sebastianbergmann/global-state.git", + "reference": "e8ba02eed7bbbb9e59e43dedd3dddeff4a56b0c4" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/sebastianbergmann/global-state/zipball/e8ba02eed7bbbb9e59e43dedd3dddeff4a56b0c4", + "reference": "e8ba02eed7bbbb9e59e43dedd3dddeff4a56b0c4", + "shasum": "" + }, + "require": { + "php": "^7.0" + }, + "require-dev": { + "phpunit/phpunit": "^6.0" + }, + "suggest": { + "ext-uopz": "*" + }, + "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": "Snapshotting of global state", + "homepage": "http://www.github.com/sebastianbergmann/global-state", + "keywords": [ + "global state" + ], + "time": "2017-04-27T15:39:26+00:00" + }, + { + "name": "sebastian/object-enumerator", + "version": "3.0.3", + "source": { + "type": "git", + "url": "https://github.com/sebastianbergmann/object-enumerator.git", + "reference": "7cfd9e65d11ffb5af41198476395774d4c8a84c5" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/sebastianbergmann/object-enumerator/zipball/7cfd9e65d11ffb5af41198476395774d4c8a84c5", + "reference": "7cfd9e65d11ffb5af41198476395774d4c8a84c5", + "shasum": "" + }, + "require": { + "php": "^7.0", + "sebastian/object-reflector": "^1.1.1", + "sebastian/recursion-context": "^3.0" + }, + "require-dev": { + "phpunit/phpunit": "^6.0" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "3.0.x-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/", + "time": "2017-08-03T12:35:26+00:00" + }, + { + "name": "sebastian/object-reflector", + "version": "1.1.1", + "source": { + "type": "git", + "url": "https://github.com/sebastianbergmann/object-reflector.git", + "reference": "773f97c67f28de00d397be301821b06708fca0be" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/sebastianbergmann/object-reflector/zipball/773f97c67f28de00d397be301821b06708fca0be", + "reference": "773f97c67f28de00d397be301821b06708fca0be", + "shasum": "" + }, + "require": { + "php": "^7.0" + }, + "require-dev": { + "phpunit/phpunit": "^6.0" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "1.1-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/", + "time": "2017-03-29T09:07:27+00:00" + }, + { + "name": "sebastian/recursion-context", + "version": "3.0.0", + "source": { + "type": "git", + "url": "https://github.com/sebastianbergmann/recursion-context.git", + "reference": "5b0cd723502bac3b006cbf3dbf7a1e3fcefe4fa8" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/sebastianbergmann/recursion-context/zipball/5b0cd723502bac3b006cbf3dbf7a1e3fcefe4fa8", + "reference": "5b0cd723502bac3b006cbf3dbf7a1e3fcefe4fa8", + "shasum": "" + }, + "require": { + "php": "^7.0" + }, + "require-dev": { + "phpunit/phpunit": "^6.0" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "3.0.x-dev" + } + }, + "autoload": { + "classmap": [ + "src/" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "BSD-3-Clause" + ], + "authors": [ + { + "name": "Jeff Welch", + "email": "whatthejeff@gmail.com" + }, + { + "name": "Sebastian Bergmann", + "email": "sebastian@phpunit.de" + }, + { + "name": "Adam Harvey", + "email": "aharvey@php.net" + } + ], + "description": "Provides functionality to recursively process PHP variables", + "homepage": "http://www.github.com/sebastianbergmann/recursion-context", + "time": "2017-03-03T06:23:57+00:00" + }, + { + "name": "sebastian/resource-operations", + "version": "2.0.1", + "source": { + "type": "git", + "url": "https://github.com/sebastianbergmann/resource-operations.git", + "reference": "4d7a795d35b889bf80a0cc04e08d77cedfa917a9" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/sebastianbergmann/resource-operations/zipball/4d7a795d35b889bf80a0cc04e08d77cedfa917a9", + "reference": "4d7a795d35b889bf80a0cc04e08d77cedfa917a9", + "shasum": "" + }, + "require": { + "php": "^7.1" + }, + "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": "Provides a list of PHP built-in functions that operate on resources", + "homepage": "https://www.github.com/sebastianbergmann/resource-operations", + "time": "2018-10-04T04:07:39+00:00" + }, + { + "name": "sebastian/version", + "version": "2.0.1", + "source": { + "type": "git", + "url": "https://github.com/sebastianbergmann/version.git", + "reference": "99732be0ddb3361e16ad77b68ba41efc8e979019" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/sebastianbergmann/version/zipball/99732be0ddb3361e16ad77b68ba41efc8e979019", + "reference": "99732be0ddb3361e16ad77b68ba41efc8e979019", + "shasum": "" + }, + "require": { + "php": ">=5.6" + }, + "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": "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", + "time": "2016-10-03T07:35:21+00:00" + }, + { + "name": "squizlabs/php_codesniffer", + "version": "3.5.6", + "source": { + "type": "git", + "url": "https://github.com/squizlabs/PHP_CodeSniffer.git", + "reference": "e97627871a7eab2f70e59166072a6b767d5834e0" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/squizlabs/PHP_CodeSniffer/zipball/e97627871a7eab2f70e59166072a6b767d5834e0", + "reference": "e97627871a7eab2f70e59166072a6b767d5834e0", + "shasum": "" + }, + "require": { + "ext-simplexml": "*", + "ext-tokenizer": "*", + "ext-xmlwriter": "*", + "php": ">=5.4.0" + }, + "require-dev": { + "phpunit/phpunit": "^4.0 || ^5.0 || ^6.0 || ^7.0" + }, + "bin": [ + "bin/phpcs", + "bin/phpcbf" + ], + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "3.x-dev" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "BSD-3-Clause" + ], + "authors": [ + { + "name": "Greg Sherwood", + "role": "lead" + } + ], + "description": "PHP_CodeSniffer tokenizes PHP, JavaScript and CSS files and detects violations of a defined set of coding standards.", + "homepage": "https://github.com/squizlabs/PHP_CodeSniffer", + "keywords": [ + "phpcs", + "standards" + ], + "time": "2020-08-10T04:50:15+00:00" + }, + { + "name": "symfony/polyfill-ctype", + "version": "v1.18.1", + "source": { + "type": "git", + "url": "https://github.com/symfony/polyfill-ctype.git", + "reference": "1c302646f6efc070cd46856e600e5e0684d6b454" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/symfony/polyfill-ctype/zipball/1c302646f6efc070cd46856e600e5e0684d6b454", + "reference": "1c302646f6efc070cd46856e600e5e0684d6b454", + "shasum": "" + }, + "require": { + "php": ">=5.3.3" + }, + "suggest": { + "ext-ctype": "For best performance" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "1.18-dev" + }, + "thanks": { + "name": "symfony/polyfill", + "url": "https://github.com/symfony/polyfill" + } + }, + "autoload": { + "psr-4": { + "Symfony\\Polyfill\\Ctype\\": "" + }, + "files": [ + "bootstrap.php" + ] + }, + "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" + ], + "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": "2020-07-14T12:35:20+00:00" + }, + { + "name": "theseer/tokenizer", + "version": "1.2.0", + "source": { + "type": "git", + "url": "https://github.com/theseer/tokenizer.git", + "reference": "75a63c33a8577608444246075ea0af0d052e452a" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/theseer/tokenizer/zipball/75a63c33a8577608444246075ea0af0d052e452a", + "reference": "75a63c33a8577608444246075ea0af0d052e452a", + "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", + "funding": [ + { + "url": "https://github.com/theseer", + "type": "github" + } + ], + "time": "2020-07-12T23:59:07+00:00" + }, + { + "name": "webmozart/assert", + "version": "1.9.1", + "source": { + "type": "git", + "url": "https://github.com/webmozart/assert.git", + "reference": "bafc69caeb4d49c39fd0779086c03a3738cbb389" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/webmozart/assert/zipball/bafc69caeb4d49c39fd0779086c03a3738cbb389", + "reference": "bafc69caeb4d49c39fd0779086c03a3738cbb389", + "shasum": "" + }, + "require": { + "php": "^5.3.3 || ^7.0 || ^8.0", + "symfony/polyfill-ctype": "^1.8" + }, + "conflict": { + "phpstan/phpstan": "<0.12.20", + "vimeo/psalm": "<3.9.1" + }, + "require-dev": { + "phpunit/phpunit": "^4.8.36 || ^7.5.13" + }, + "type": "library", + "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" + ], + "time": "2020-07-08T17:02:28+00:00" + }, + { + "name": "wp-coding-standards/wpcs", + "version": "2.3.0", + "source": { + "type": "git", + "url": "https://github.com/WordPress/WordPress-Coding-Standards.git", + "reference": "7da1894633f168fe244afc6de00d141f27517b62" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/WordPress/WordPress-Coding-Standards/zipball/7da1894633f168fe244afc6de00d141f27517b62", + "reference": "7da1894633f168fe244afc6de00d141f27517b62", + "shasum": "" + }, + "require": { + "php": ">=5.4", + "squizlabs/php_codesniffer": "^3.3.1" + }, + "require-dev": { + "dealerdirect/phpcodesniffer-composer-installer": "^0.5 || ^0.6", + "phpcompatibility/php-compatibility": "^9.0", + "phpcsstandards/phpcsdevtools": "^1.0", + "phpunit/phpunit": "^4.0 || ^5.0 || ^6.0 || ^7.0" + }, + "suggest": { + "dealerdirect/phpcodesniffer-composer-installer": "^0.6 || This Composer plugin will sort out the PHPCS 'installed_paths' automatically." + }, + "type": "phpcodesniffer-standard", + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Contributors", + "homepage": "https://github.com/WordPress/WordPress-Coding-Standards/graphs/contributors" + } + ], + "description": "PHP_CodeSniffer rules (sniffs) to enforce WordPress coding conventions", + "keywords": [ + "phpcs", + "standards", + "wordpress" + ], + "time": "2020-05-13T23:57:56+00:00" + } + ], + "aliases": [], + "minimum-stability": "stable", + "stability-flags": [], + "prefer-stable": false, + "prefer-lowest": false, + "platform": { + "php": "^5.2|^7", + "ext-json": "*" + }, + "platform-dev": [], + "plugin-api-version": "1.1.0" +} diff --git a/css/style.css b/css/style.css index cd94fe9..11fe397 100644 --- a/css/style.css +++ b/css/style.css @@ -4,14 +4,16 @@ height: 1%; overflow: hidden; } + #av_manual_scan a.button { float: left; } + #av_manual_scan .alert { float: left; - color: green; + color: #008000; margin: 0 10px; - border: 1px solid green; + border: 1px solid #008000; display: none; height: 26px; line-height: 26px; @@ -27,12 +29,13 @@ padding: 0 0 6px; overflow: hidden; } + #av_main .inside .output div { float: left; - color: #FFF; + color: #fff; margin: 12px 6px 0; padding: 8px 12px 10px; - background: orange; + background: #ffa500; border-radius: 3px; transition: background-color 0.5s linear; @@ -41,23 +44,28 @@ -moz-transition: background-color 0.5s linear; -webkit-transition: background-color 0.5s linear; } + #av_main .inside .output div.done { - background: green; + background: #008000; } + #av_main .inside .output div.danger { width: 97%; - background: red; + background: #f00; } + #av_main .inside .output div p { padding: 10px; overflow: hidden; - background: #F9F9F9; + background: #f9f9f9; white-space: nowrap; border-radius: 3px; } + #av_main .inside .output div p a { margin: 0 6px 12px 0; } + #av_main .inside .output div p code { clear: both; float: left; @@ -65,9 +73,10 @@ padding: 2px 5px; border-radius: 3px; } + #av_main .inside .output div p code span { padding: 2px; - background: yellow; + background: #ff0; } /* @end group */ diff --git a/css/style.min.css b/css/style.min.css deleted file mode 100644 index 3358283..0000000 --- a/css/style.min.css +++ /dev/null @@ -1 +0,0 @@ -#av_manual_scan{height:1%;overflow:hidden}#av_manual_scan a.button{float:left}#av_manual_scan .alert{float:left;color:green;margin:0 10px;border:1px solid green;display:none;height:26px;line-height:26px;padding:0 10px;background:#fff;border-radius:3px}#av_main .inside .output{clear:both;height:1%;margin:0 0 0 -6px;padding:0 0 6px;overflow:hidden}#av_main .inside .output div{float:left;color:#FFF;margin:12px 6px 0;padding:8px 12px 10px;background:orange;border-radius:3px;transition:background-color 0.5s linear;-o-transition:background-color 0.5s linear;-ms-transition:background-color 0.5s linear;-moz-transition:background-color 0.5s linear;-webkit-transition:background-color 0.5s linear}#av_main .inside .output div.done{background:green}#av_main .inside .output div.danger{width:97%;background:red}#av_main .inside .output div p{padding:10px;overflow:hidden;background:#F9F9F9;white-space:nowrap;border-radius:3px}#av_main .inside .output div p a{margin:0 6px 12px 0}#av_main .inside .output div p code{clear:both;float:left;color:#000;padding:2px 5px;border-radius:3px}#av_main .inside .output div p code span{padding:2px;background:yellow}#av_notify_email{line-height:1.5} \ No newline at end of file diff --git a/inc/class-antivirus.php b/inc/class-antivirus.php index 76a41be..c03a7ea 100644 --- a/inc/class-antivirus.php +++ b/inc/class-antivirus.php @@ -340,9 +340,7 @@ public static function add_enqueue_script() { 'av_settings', array( 'nonce' => wp_create_nonce( 'av_ajax_nonce' ), - 'theme' => esc_js( urlencode( self::_get_theme_name() ) ), 'msg_1' => esc_js( __( 'Dismiss', 'antivirus' ) ), - 'msg_2' => esc_js( __( 'View line', 'antivirus' ) ), 'msg_3' => esc_js( __( 'Scan finished', 'antivirus' ) ), 'msg_4' => esc_js( __( 'Dismiss false positive virus detection', 'antivirus' ) ), ) diff --git a/js/script.js b/js/script.js index a8fcb45..d18cd02 100644 --- a/js/script.js +++ b/js/script.js @@ -2,9 +2,7 @@ jQuery( document ).ready( function( $ ) { // Initialize. var avNonce = av_settings.nonce; - var avTheme = av_settings.theme; var avMsg1 = av_settings.msg_1; - var avMsg2 = av_settings.msg_2; var avMsg3 = av_settings.msg_3; var avMsg4 = av_settings.msg_4; var avFiles = []; diff --git a/js/script.min.js b/js/script.min.js deleted file mode 100644 index 3f261ae..0000000 --- a/js/script.min.js +++ /dev/null @@ -1,11 +0,0 @@ -jQuery(document).ready(function($){var avNonce=av_settings.nonce;var avTheme=av_settings.theme;var avMsg1=av_settings.msg_1;var avMsg2=av_settings.msg_2;var avMsg3=av_settings.msg_3;var avMsg4=av_settings.msg_4;var avFiles=[];var avFilesLoaded;function checkThemeFile(current){var id=parseInt(current||0);var file=avFiles[id];$.post(ajaxurl,{action:'get_ajax_response',_ajax_nonce:avNonce,_theme_file:file,_action_request:'check_theme_file',},function(input){var item=$('#av_template_'+id);var i;var lines;var line;var md5;if(input){if(!input.nonce||input.nonce!==avNonce){return} -item.addClass('danger');lines=input.data;for(i=0;i').replace(/@\/span@/g,'');item.append('

'+avMsg1+' '+line+'

');$('#'+md5).click(function(){$.post(ajaxurl,{action:'get_ajax_response',_ajax_nonce:avNonce,_file_md5:$(this).attr('id'),_action_request:'update_white_list',},function(res){var parent;if(!res){return} -if(!res.nonce||res.nonce!==avNonce){return} -parent=$('#'+res.data[0]).parent();if(parent.parent().children().length<=1){parent.parent().hide('slow').remove()} -parent.hide('slow').remove()});return!1})}}else{item.addClass('done')} -avFilesLoaded++;if(avFilesLoaded>=avFiles.length){$('#av_manual_scan .alert').text(avMsg3).fadeIn().fadeOut().fadeIn().fadeOut().fadeIn().animate({opacity:1.0},500).fadeOut('slow',function(){$(this).empty()})}else{checkThemeFile(id+1)}})} -$('#av_manual_scan a.button').click(function(){$.post(ajaxurl,{action:'get_ajax_response',_ajax_nonce:avNonce,_action_request:'get_theme_files',},function(input){var output='';if(!input){return} -if(!input.nonce||input.nonce!==avNonce){return} -avFiles=input.data;avFilesLoaded=0;jQuery.each(avFiles,function(i,val){output+='
'+val+'
'});$('#av_manual_scan .alert').empty();$('#av_manual_scan .output').empty().append(output);checkThemeFile()});return!1});function manageOptions(){var cbSelectors=['#av_cronjob_enable','#av_safe_browsing','#av_checksum_verifier'];var anyEnabled=!1;cbSelectors.forEach(function(c){var cb=$(c);var inputs=cb.parents('fieldset').find(':text, :checkbox').not(cb);var enabled;if(typeof $.fn.prop==='function'){enabled=!!cb.prop('checked');inputs.prop('disabled',!enabled)}else{enabled=!!cb.attr('checked');inputs.attr('disabled',!enabled)} -anyEnabled=anyEnabled||enabled});if(typeof $.fn.prop==='function'){$('#av_notify_email').prop('disabled',!anyEnabled)}else{$('#av_notify_email').attr('disabled',!anyEnabled)}} -$('#av_settings input[type=checkbox]').click(manageOptions);manageOptions()}) \ No newline at end of file diff --git a/package-lock.json b/package-lock.json new file mode 100644 index 0000000..6afc9a7 --- /dev/null +++ b/package-lock.json @@ -0,0 +1,3637 @@ +{ + "requires": true, + "lockfileVersion": 1, + "dependencies": { + "@babel/code-frame": { + "version": "7.10.4", + "resolved": "https://registry.npmjs.org/@babel/code-frame/-/code-frame-7.10.4.tgz", + "integrity": "sha512-vG6SvB6oYEhvgisZNFRmRCUkLz11c7rp+tbNTynGqc6mS1d5ATd/sGyV6W0KZZnXRKMTzZDRgQT3Ou9jhpAfUg==", + "dev": true, + "requires": { + "@babel/highlight": "^7.10.4" + } + }, + "@babel/core": { + "version": "7.11.1", + "resolved": "https://registry.npmjs.org/@babel/core/-/core-7.11.1.tgz", + "integrity": "sha512-XqF7F6FWQdKGGWAzGELL+aCO1p+lRY5Tj5/tbT3St1G8NaH70jhhDIKknIZaDans0OQBG5wRAldROLHSt44BgQ==", + "dev": true, + "requires": { + "@babel/code-frame": "^7.10.4", + "@babel/generator": "^7.11.0", + "@babel/helper-module-transforms": "^7.11.0", + "@babel/helpers": "^7.10.4", + "@babel/parser": "^7.11.1", + "@babel/template": "^7.10.4", + "@babel/traverse": "^7.11.0", + "@babel/types": "^7.11.0", + "convert-source-map": "^1.7.0", + "debug": "^4.1.0", + "gensync": "^1.0.0-beta.1", + "json5": "^2.1.2", + "lodash": "^4.17.19", + "resolve": "^1.3.2", + "semver": "^5.4.1", + "source-map": "^0.5.0" + }, + "dependencies": { + "lodash": { + "version": "4.17.20", + "resolved": "https://registry.npmjs.org/lodash/-/lodash-4.17.20.tgz", + "integrity": "sha512-PlhdFcillOINfeV7Ni6oF1TAEayyZBoZ8bcshTHqOYJYlrqzRK5hagpagky5o4HfCzzd1TRkXPMFq6cKk9rGmA==", + "dev": true + }, + "resolve": { + "version": "1.17.0", + "resolved": "https://registry.npmjs.org/resolve/-/resolve-1.17.0.tgz", + "integrity": "sha512-ic+7JYiV8Vi2yzQGFWOkiZD5Z9z7O2Zhm9XMaTxdJExKasieFCr+yXZ/WmXsckHiKl12ar0y6XiXDx3m4RHn1w==", + "dev": true, + "requires": { + "path-parse": "^1.0.6" + } + }, + "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.11.0", + "resolved": "https://registry.npmjs.org/@babel/generator/-/generator-7.11.0.tgz", + "integrity": "sha512-fEm3Uzw7Mc9Xi//qU20cBKatTfs2aOtKqmvy/Vm7RkJEGFQ4xc9myCfbXxqK//ZS8MR/ciOHw6meGASJuKmDfQ==", + "dev": true, + "requires": { + "@babel/types": "^7.11.0", + "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-function-name": { + "version": "7.10.4", + "resolved": "https://registry.npmjs.org/@babel/helper-function-name/-/helper-function-name-7.10.4.tgz", + "integrity": "sha512-YdaSyz1n8gY44EmN7x44zBn9zQ1Ry2Y+3GTA+3vH6Mizke1Vw0aWDM66FOYEPw8//qKkmqOckrGgTYa+6sceqQ==", + "dev": true, + "requires": { + "@babel/helper-get-function-arity": "^7.10.4", + "@babel/template": "^7.10.4", + "@babel/types": "^7.10.4" + } + }, + "@babel/helper-get-function-arity": { + "version": "7.10.4", + "resolved": "https://registry.npmjs.org/@babel/helper-get-function-arity/-/helper-get-function-arity-7.10.4.tgz", + "integrity": "sha512-EkN3YDB+SRDgiIUnNgcmiD361ti+AVbL3f3Henf6dqqUyr5dMsorno0lJWJuLhDhkI5sYEpgj6y9kB8AOU1I2A==", + "dev": true, + "requires": { + "@babel/types": "^7.10.4" + } + }, + "@babel/helper-member-expression-to-functions": { + "version": "7.11.0", + "resolved": "https://registry.npmjs.org/@babel/helper-member-expression-to-functions/-/helper-member-expression-to-functions-7.11.0.tgz", + "integrity": "sha512-JbFlKHFntRV5qKw3YC0CvQnDZ4XMwgzzBbld7Ly4Mj4cbFy3KywcR8NtNctRToMWJOVvLINJv525Gd6wwVEx/Q==", + "dev": true, + "requires": { + "@babel/types": "^7.11.0" + } + }, + "@babel/helper-module-imports": { + "version": "7.10.4", + "resolved": "https://registry.npmjs.org/@babel/helper-module-imports/-/helper-module-imports-7.10.4.tgz", + "integrity": "sha512-nEQJHqYavI217oD9+s5MUBzk6x1IlvoS9WTPfgG43CbMEeStE0v+r+TucWdx8KFGowPGvyOkDT9+7DHedIDnVw==", + "dev": true, + "requires": { + "@babel/types": "^7.10.4" + } + }, + "@babel/helper-module-transforms": { + "version": "7.11.0", + "resolved": "https://registry.npmjs.org/@babel/helper-module-transforms/-/helper-module-transforms-7.11.0.tgz", + "integrity": "sha512-02EVu8COMuTRO1TAzdMtpBPbe6aQ1w/8fePD2YgQmxZU4gpNWaL9gK3Jp7dxlkUlUCJOTaSeA+Hrm1BRQwqIhg==", + "dev": true, + "requires": { + "@babel/helper-module-imports": "^7.10.4", + "@babel/helper-replace-supers": "^7.10.4", + "@babel/helper-simple-access": "^7.10.4", + "@babel/helper-split-export-declaration": "^7.11.0", + "@babel/template": "^7.10.4", + "@babel/types": "^7.11.0", + "lodash": "^4.17.19" + }, + "dependencies": { + "lodash": { + "version": "4.17.20", + "resolved": "https://registry.npmjs.org/lodash/-/lodash-4.17.20.tgz", + "integrity": "sha512-PlhdFcillOINfeV7Ni6oF1TAEayyZBoZ8bcshTHqOYJYlrqzRK5hagpagky5o4HfCzzd1TRkXPMFq6cKk9rGmA==", + "dev": true + } + } + }, + "@babel/helper-optimise-call-expression": { + "version": "7.10.4", + "resolved": "https://registry.npmjs.org/@babel/helper-optimise-call-expression/-/helper-optimise-call-expression-7.10.4.tgz", + "integrity": "sha512-n3UGKY4VXwXThEiKrgRAoVPBMqeoPgHVqiHZOanAJCG9nQUL2pLRQirUzl0ioKclHGpGqRgIOkgcIJaIWLpygg==", + "dev": true, + "requires": { + "@babel/types": "^7.10.4" + } + }, + "@babel/helper-replace-supers": { + "version": "7.10.4", + "resolved": "https://registry.npmjs.org/@babel/helper-replace-supers/-/helper-replace-supers-7.10.4.tgz", + "integrity": "sha512-sPxZfFXocEymYTdVK1UNmFPBN+Hv5mJkLPsYWwGBxZAxaWfFu+xqp7b6qWD0yjNuNL2VKc6L5M18tOXUP7NU0A==", + "dev": true, + "requires": { + "@babel/helper-member-expression-to-functions": "^7.10.4", + "@babel/helper-optimise-call-expression": "^7.10.4", + "@babel/traverse": "^7.10.4", + "@babel/types": "^7.10.4" + } + }, + "@babel/helper-simple-access": { + "version": "7.10.4", + "resolved": "https://registry.npmjs.org/@babel/helper-simple-access/-/helper-simple-access-7.10.4.tgz", + "integrity": "sha512-0fMy72ej/VEvF8ULmX6yb5MtHG4uH4Dbd6I/aHDb/JVg0bbivwt9Wg+h3uMvX+QSFtwr5MeItvazbrc4jtRAXw==", + "dev": true, + "requires": { + "@babel/template": "^7.10.4", + "@babel/types": "^7.10.4" + } + }, + "@babel/helper-split-export-declaration": { + "version": "7.11.0", + "resolved": "https://registry.npmjs.org/@babel/helper-split-export-declaration/-/helper-split-export-declaration-7.11.0.tgz", + "integrity": "sha512-74Vejvp6mHkGE+m+k5vHY93FX2cAtrw1zXrZXRlG4l410Nm9PxfEiVTn1PjDPV5SnmieiueY4AFg2xqhNFuuZg==", + "dev": true, + "requires": { + "@babel/types": "^7.11.0" + } + }, + "@babel/helper-validator-identifier": { + "version": "7.10.4", + "resolved": "https://registry.npmjs.org/@babel/helper-validator-identifier/-/helper-validator-identifier-7.10.4.tgz", + "integrity": "sha512-3U9y+43hz7ZM+rzG24Qe2mufW5KhvFg/NhnNph+i9mgCtdTCtMJuI1TMkrIUiK7Ix4PYlRF9I5dhqaLYA/ADXw==", + "dev": true + }, + "@babel/helpers": { + "version": "7.10.4", + "resolved": "https://registry.npmjs.org/@babel/helpers/-/helpers-7.10.4.tgz", + "integrity": "sha512-L2gX/XeUONeEbI78dXSrJzGdz4GQ+ZTA/aazfUsFaWjSe95kiCuOZ5HsXvkiw3iwF+mFHSRUfJU8t6YavocdXA==", + "dev": true, + "requires": { + "@babel/template": "^7.10.4", + "@babel/traverse": "^7.10.4", + "@babel/types": "^7.10.4" + } + }, + "@babel/highlight": { + "version": "7.10.4", + "resolved": "https://registry.npmjs.org/@babel/highlight/-/highlight-7.10.4.tgz", + "integrity": "sha512-i6rgnR/YgPEQzZZnbTHHuZdlE8qyoBNalD6F+q4vAFlcMEcqmkoG+mPqJYJCo63qPf74+Y1UZsl3l6f7/RIkmA==", + "dev": true, + "requires": { + "@babel/helper-validator-identifier": "^7.10.4", + "chalk": "^2.0.0", + "js-tokens": "^4.0.0" + } + }, + "@babel/parser": { + "version": "7.11.3", + "resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.11.3.tgz", + "integrity": "sha512-REo8xv7+sDxkKvoxEywIdsNFiZLybwdI7hcT5uEPyQrSMB4YQ973BfC9OOrD/81MaIjh6UxdulIQXkjmiH3PcA==", + "dev": true + }, + "@babel/runtime": { + "version": "7.11.2", + "resolved": "https://registry.npmjs.org/@babel/runtime/-/runtime-7.11.2.tgz", + "integrity": "sha512-TeWkU52so0mPtDcaCTxNBI/IHiz0pZgr8VEFqXFtZWpYD08ZB6FaSwVAS8MKRQAP3bYKiVjwysOJgMFY28o6Tw==", + "dev": true, + "requires": { + "regenerator-runtime": "^0.13.4" + } + }, + "@babel/runtime-corejs3": { + "version": "7.11.2", + "resolved": "https://registry.npmjs.org/@babel/runtime-corejs3/-/runtime-corejs3-7.11.2.tgz", + "integrity": "sha512-qh5IR+8VgFz83VBa6OkaET6uN/mJOhHONuy3m1sgF0CV6mXdPSEBdA7e1eUbVvyNtANjMbg22JUv71BaDXLY6A==", + "dev": true, + "requires": { + "core-js-pure": "^3.0.0", + "regenerator-runtime": "^0.13.4" + } + }, + "@babel/template": { + "version": "7.10.4", + "resolved": "https://registry.npmjs.org/@babel/template/-/template-7.10.4.tgz", + "integrity": "sha512-ZCjD27cGJFUB6nmCB1Enki3r+L5kJveX9pq1SvAUKoICy6CZ9yD8xO086YXdYhvNjBdnekm4ZnaP5yC8Cs/1tA==", + "dev": true, + "requires": { + "@babel/code-frame": "^7.10.4", + "@babel/parser": "^7.10.4", + "@babel/types": "^7.10.4" + } + }, + "@babel/traverse": { + "version": "7.11.0", + "resolved": "https://registry.npmjs.org/@babel/traverse/-/traverse-7.11.0.tgz", + "integrity": "sha512-ZB2V+LskoWKNpMq6E5UUCrjtDUh5IOTAyIl0dTjIEoXum/iKWkoIEKIRDnUucO6f+2FzNkE0oD4RLKoPIufDtg==", + "dev": true, + "requires": { + "@babel/code-frame": "^7.10.4", + "@babel/generator": "^7.11.0", + "@babel/helper-function-name": "^7.10.4", + "@babel/helper-split-export-declaration": "^7.11.0", + "@babel/parser": "^7.11.0", + "@babel/types": "^7.11.0", + "debug": "^4.1.0", + "globals": "^11.1.0", + "lodash": "^4.17.19" + }, + "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 + }, + "lodash": { + "version": "4.17.20", + "resolved": "https://registry.npmjs.org/lodash/-/lodash-4.17.20.tgz", + "integrity": "sha512-PlhdFcillOINfeV7Ni6oF1TAEayyZBoZ8bcshTHqOYJYlrqzRK5hagpagky5o4HfCzzd1TRkXPMFq6cKk9rGmA==", + "dev": true + } + } + }, + "@babel/types": { + "version": "7.11.0", + "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.11.0.tgz", + "integrity": "sha512-O53yME4ZZI0jO1EVGtF1ePGl0LHirG4P1ibcD80XyzZcKhcMFeCXmh4Xb1ifGBIV233Qg12x4rBfQgA+tmOukA==", + "dev": true, + "requires": { + "@babel/helper-validator-identifier": "^7.10.4", + "lodash": "^4.17.19", + "to-fast-properties": "^2.0.0" + }, + "dependencies": { + "lodash": { + "version": "4.17.20", + "resolved": "https://registry.npmjs.org/lodash/-/lodash-4.17.20.tgz", + "integrity": "sha512-PlhdFcillOINfeV7Ni6oF1TAEayyZBoZ8bcshTHqOYJYlrqzRK5hagpagky5o4HfCzzd1TRkXPMFq6cKk9rGmA==", + "dev": true + } + } + }, + "@nodelib/fs.scandir": { + "version": "2.1.3", + "resolved": "https://registry.npmjs.org/@nodelib/fs.scandir/-/fs.scandir-2.1.3.tgz", + "integrity": "sha512-eGmwYQn3gxo4r7jdQnkrrN6bY478C3P+a/y72IJukF8LjB6ZHeB3c+Ehacj3sYeSmUXGlnA67/PmbM9CVwL7Dw==", + "dev": true, + "requires": { + "@nodelib/fs.stat": "2.0.3", + "run-parallel": "^1.1.9" + } + }, + "@nodelib/fs.stat": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/@nodelib/fs.stat/-/fs.stat-2.0.3.tgz", + "integrity": "sha512-bQBFruR2TAwoevBEd/NWMoAAtNGzTRgdrqnYCc7dhzfoNvqPzLyqlEQnzZ3kVnNrSp25iyxE00/3h2fqGAGArA==", + "dev": true + }, + "@nodelib/fs.walk": { + "version": "1.2.4", + "resolved": "https://registry.npmjs.org/@nodelib/fs.walk/-/fs.walk-1.2.4.tgz", + "integrity": "sha512-1V9XOY4rDW0rehzbrcqAmHnz8e7SKvX27gh8Gt2WgB0+pdzdiLV83p72kZPU+jvMbS1qU5mauP2iOvO8rhmurQ==", + "dev": true, + "requires": { + "@nodelib/fs.scandir": "2.1.3", + "fastq": "^1.6.0" + } + }, + "@stylelint/postcss-css-in-js": { + "version": "0.37.2", + "resolved": "https://registry.npmjs.org/@stylelint/postcss-css-in-js/-/postcss-css-in-js-0.37.2.tgz", + "integrity": "sha512-nEhsFoJurt8oUmieT8qy4nk81WRHmJynmVwn/Vts08PL9fhgIsMhk1GId5yAN643OzqEEb5S/6At2TZW7pqPDA==", + "dev": true, + "requires": { + "@babel/core": ">=7.9.0" + } + }, + "@stylelint/postcss-markdown": { + "version": "0.36.1", + "resolved": "https://registry.npmjs.org/@stylelint/postcss-markdown/-/postcss-markdown-0.36.1.tgz", + "integrity": "sha512-iDxMBWk9nB2BPi1VFQ+Dc5+XpvODBHw2n3tYpaBZuEAFQlbtF9If0Qh5LTTwSi/XwdbJ2jt+0dis3i8omyggpw==", + "dev": true, + "requires": { + "remark": "^12.0.0", + "unist-util-find-all-after": "^3.0.1" + } + }, + "@types/color-name": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/@types/color-name/-/color-name-1.1.1.tgz", + "integrity": "sha512-rr+OQyAjxze7GgWrSaJwydHStIhHq2lvY3BOC2Mj7KnzI7XK0Uw1TOOdI9lDoajEbSWLiYgoo4f1R51erQfhPQ==", + "dev": true + }, + "@types/json-schema": { + "version": "7.0.5", + "resolved": "https://registry.npmjs.org/@types/json-schema/-/json-schema-7.0.5.tgz", + "integrity": "sha512-7+2BITlgjgDhH0vvwZU/HZJVyk+2XUlvxXe8dFMedNX/aMkaOq++rMAFXc0tM7ij15QaWlbdQASBR9dihi+bDQ==", + "dev": true + }, + "@types/minimist": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/@types/minimist/-/minimist-1.2.0.tgz", + "integrity": "sha1-aaI6OtKcrwCX8G7aWbNh7i8GOfY=", + "dev": true + }, + "@types/normalize-package-data": { + "version": "2.4.0", + "resolved": "https://registry.npmjs.org/@types/normalize-package-data/-/normalize-package-data-2.4.0.tgz", + "integrity": "sha512-f5j5b/Gf71L+dbqxIpQ4Z2WlmI/mPJ0fOkGGmFgtb6sAu97EPczzbS3/tJKxmcYDj55OX6ssqwDAWOHIYDRDGA==", + "dev": true + }, + "@types/parse-json": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/@types/parse-json/-/parse-json-4.0.0.tgz", + "integrity": "sha512-//oorEZjL6sbPcKUaCdIGlIUeH26mgzimjBB77G6XRgnDl/L5wOnpyBGRe/Mmf5CVW3PwEBE1NjiMZ/ssFh4wA==", + "dev": true + }, + "@types/unist": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/@types/unist/-/unist-2.0.3.tgz", + "integrity": "sha512-FvUupuM3rlRsRtCN+fDudtmytGO6iHJuuRKS1Ss0pG5z8oX0diNEw94UEL7hgDbpN94rgaK5R7sWm6RrSkZuAQ==", + "dev": true + }, + "@typescript-eslint/experimental-utils": { + "version": "2.34.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/experimental-utils/-/experimental-utils-2.34.0.tgz", + "integrity": "sha512-eS6FTkq+wuMJ+sgtuNTtcqavWXqsflWcfBnlYhg/nS4aZ1leewkXGbvBhaapn1q6qf4M71bsR1tez5JTRMuqwA==", + "dev": true, + "requires": { + "@types/json-schema": "^7.0.3", + "@typescript-eslint/typescript-estree": "2.34.0", + "eslint-scope": "^5.0.0", + "eslint-utils": "^2.0.0" + } + }, + "@typescript-eslint/typescript-estree": { + "version": "2.34.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/typescript-estree/-/typescript-estree-2.34.0.tgz", + "integrity": "sha512-OMAr+nJWKdlVM9LOqCqh3pQQPwxHAN7Du8DR6dmwCrAmxtiXQnhHJ6tBNtf+cggqfo51SG/FCwnKhXCIM7hnVg==", + "dev": true, + "requires": { + "debug": "^4.1.1", + "eslint-visitor-keys": "^1.1.0", + "glob": "^7.1.6", + "is-glob": "^4.0.1", + "lodash": "^4.17.15", + "semver": "^7.3.2", + "tsutils": "^3.17.1" + }, + "dependencies": { + "glob": { + "version": "7.1.6", + "resolved": "https://registry.npmjs.org/glob/-/glob-7.1.6.tgz", + "integrity": "sha512-LwaxwyZ72Lk7vZINtNNrywX0ZuLyStrdDtabefZKAY5ZGJhVtgdznluResxNmPitE0SAO+O26sWTHeKSI2wMBA==", + "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" + } + }, + "lodash": { + "version": "4.17.20", + "resolved": "https://registry.npmjs.org/lodash/-/lodash-4.17.20.tgz", + "integrity": "sha512-PlhdFcillOINfeV7Ni6oF1TAEayyZBoZ8bcshTHqOYJYlrqzRK5hagpagky5o4HfCzzd1TRkXPMFq6cKk9rGmA==", + "dev": true + }, + "semver": { + "version": "7.3.2", + "resolved": "https://registry.npmjs.org/semver/-/semver-7.3.2.tgz", + "integrity": "sha512-OrOb32TeeambH6UrhtShmF7CRDqhL6/5XpPNp2DuRH6+9QLw/orhp72j87v8Qa1ScDkvrrBNpZcDejAirJmfXQ==", + "dev": true + } + } + }, + "@wordpress/eslint-plugin": { + "version": "7.1.0", + "resolved": "https://registry.npmjs.org/@wordpress/eslint-plugin/-/eslint-plugin-7.1.0.tgz", + "integrity": "sha512-FTrKkpEa8vZg7/7M6GBhd1YW24hnh5rFGzKgKX4MGyB0Jw8GGSwld9J23eRbQ5JQWGFP/tmOMeiu6W1/arxy7Q==", + "dev": true, + "requires": { + "@wordpress/prettier-config": "^0.3.0", + "babel-eslint": "^10.1.0", + "eslint-config-prettier": "^6.10.1", + "eslint-plugin-jest": "^23.8.2", + "eslint-plugin-jsdoc": "^26.0.0", + "eslint-plugin-jsx-a11y": "^6.2.3", + "eslint-plugin-prettier": "^3.1.2", + "eslint-plugin-react": "^7.20.0", + "eslint-plugin-react-hooks": "^4.0.4", + "globals": "^12.0.0", + "prettier": "npm:wp-prettier@2.0.5", + "requireindex": "^1.2.0" + } + }, + "@wordpress/prettier-config": { + "version": "0.3.0", + "resolved": "https://registry.npmjs.org/@wordpress/prettier-config/-/prettier-config-0.3.0.tgz", + "integrity": "sha512-wL1ztV+so5Ttwz23lDmb8ZmREmND96sf+Dh/kbP2nyAw/DWt3K8uj31qbczVmjwfoetTiRoH9Z1CasgPs4bccg==", + "dev": true + }, + "acorn": { + "version": "7.4.0", + "resolved": "https://registry.npmjs.org/acorn/-/acorn-7.4.0.tgz", + "integrity": "sha512-+G7P8jJmCHr+S+cLfQxygbWhXy+8YTVGzAkpEbcLo2mLoL7tij/VG41QSHACSf5QgYRhMZYHuNc6drJaO0Da+w==", + "dev": true + }, + "acorn-jsx": { + "version": "5.2.0", + "resolved": "https://registry.npmjs.org/acorn-jsx/-/acorn-jsx-5.2.0.tgz", + "integrity": "sha512-HiUX/+K2YpkpJ+SzBffkM/AQ2YE03S0U1kjTLVpoJdhZMOWy8qvXVN9JdLqv2QsaQ6MPYQIuNmwD8zOiYUofLQ==", + "dev": true + }, + "ajv": { + "version": "6.12.4", + "resolved": "https://registry.npmjs.org/ajv/-/ajv-6.12.4.tgz", + "integrity": "sha512-eienB2c9qVQs2KWexhkrdMLVDoIQCz5KSeLxwg9Lzk4DOfBtIK9PQwwufcsn1jjGuf9WZmqPMbGxOzfcuphJCQ==", + "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-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" + } + }, + "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" + }, + "dependencies": { + "sprintf-js": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/sprintf-js/-/sprintf-js-1.0.3.tgz", + "integrity": "sha1-BOaSb2YolTVPPdAVIDYzuFcpfiw=", + "dev": true + } + } + }, + "aria-query": { + "version": "4.2.2", + "resolved": "https://registry.npmjs.org/aria-query/-/aria-query-4.2.2.tgz", + "integrity": "sha512-o/HelwhuKpTj/frsOsbNLNgnNGVIFsVP/SW2BSF14gVl7kAfMOJ6/8wUAUvG1R1NHKrfG+2sHZTu0yauT1qBrA==", + "dev": true, + "requires": { + "@babel/runtime": "^7.10.2", + "@babel/runtime-corejs3": "^7.10.2" + } + }, + "array-includes": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/array-includes/-/array-includes-3.1.1.tgz", + "integrity": "sha512-c2VXaCHl7zPsvpkFsw4nxvFie4fh1ur9bpcgsVkIjqn0H/Xwdg+7fv3n2r/isyS8EBj5b06M9kHyZuIr4El6WQ==", + "dev": true, + "requires": { + "define-properties": "^1.1.3", + "es-abstract": "^1.17.0", + "is-string": "^1.0.5" + } + }, + "array.prototype.flatmap": { + "version": "1.2.3", + "resolved": "https://registry.npmjs.org/array.prototype.flatmap/-/array.prototype.flatmap-1.2.3.tgz", + "integrity": "sha512-OOEk+lkePcg+ODXIpvuU9PAryCikCJyo7GlDG1upleEpQRx6mzL9puEBkozQ5iAx20KV0l3DbyQwqciJtqe5Pg==", + "dev": true, + "requires": { + "define-properties": "^1.1.3", + "es-abstract": "^1.17.0-next.1", + "function-bind": "^1.1.1" + } + }, + "arrify": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/arrify/-/arrify-1.0.1.tgz", + "integrity": "sha1-iYUI2iIm84DfkEcoRWhJwVAaSw0=", + "dev": true + }, + "ast-types-flow": { + "version": "0.0.7", + "resolved": "https://registry.npmjs.org/ast-types-flow/-/ast-types-flow-0.0.7.tgz", + "integrity": "sha1-9wtzXGvKGlycItmCw+Oef+ujva0=", + "dev": true + }, + "astral-regex": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/astral-regex/-/astral-regex-1.0.0.tgz", + "integrity": "sha512-+Ryf6g3BKoRc7jfp7ad8tM4TtMiaWvbF/1/sQcZPkkS7ag3D5nMBCe2UfOTONtAkaG0tO0ij3C5Lwmf1EiyjHg==", + "dev": true + }, + "autoprefixer": { + "version": "9.8.6", + "resolved": "https://registry.npmjs.org/autoprefixer/-/autoprefixer-9.8.6.tgz", + "integrity": "sha512-XrvP4VVHdRBCdX1S3WXVD8+RyG9qeb1D5Sn1DeLiG2xfSpzellk5k54xbUERJ3M5DggQxes39UGOTP8CFrEGbg==", + "dev": true, + "requires": { + "browserslist": "^4.12.0", + "caniuse-lite": "^1.0.30001109", + "colorette": "^1.2.1", + "normalize-range": "^0.1.2", + "num2fraction": "^1.2.2", + "postcss": "^7.0.32", + "postcss-value-parser": "^4.1.0" + } + }, + "axe-core": { + "version": "3.5.5", + "resolved": "https://registry.npmjs.org/axe-core/-/axe-core-3.5.5.tgz", + "integrity": "sha512-5P0QZ6J5xGikH780pghEdbEKijCTrruK9KxtPZCFWUpef0f6GipO+xEZ5GKCb020mmqgbiNO6TcA55CriL784Q==", + "dev": true + }, + "axobject-query": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/axobject-query/-/axobject-query-2.2.0.tgz", + "integrity": "sha512-Td525n+iPOOyUQIeBfcASuG6uJsDOITl7Mds5gFyerkWiX7qhUTdYUBlSgNMyVqtSJqwpt1kXGLdUt6SykLMRA==", + "dev": true + }, + "babel-eslint": { + "version": "10.1.0", + "resolved": "https://registry.npmjs.org/babel-eslint/-/babel-eslint-10.1.0.tgz", + "integrity": "sha512-ifWaTHQ0ce+448CYop8AdrQiBsGrnC+bMgfyKFdi6EsPLTAWG+QfyDeM6OH+FmWnKvEq5NnBMLvlBUPKQZoDSg==", + "dev": true, + "requires": { + "@babel/code-frame": "^7.0.0", + "@babel/parser": "^7.7.0", + "@babel/traverse": "^7.7.0", + "@babel/types": "^7.7.0", + "eslint-visitor-keys": "^1.0.0", + "resolve": "^1.12.0" + }, + "dependencies": { + "resolve": { + "version": "1.17.0", + "resolved": "https://registry.npmjs.org/resolve/-/resolve-1.17.0.tgz", + "integrity": "sha512-ic+7JYiV8Vi2yzQGFWOkiZD5Z9z7O2Zhm9XMaTxdJExKasieFCr+yXZ/WmXsckHiKl12ar0y6XiXDx3m4RHn1w==", + "dev": true, + "requires": { + "path-parse": "^1.0.6" + } + } + } + }, + "bail": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/bail/-/bail-1.0.5.tgz", + "integrity": "sha512-xFbRxM1tahm08yHBP16MMjVUAvDaBMD38zsM9EMAUN61omwLmKlOpB/Zku5QkjZ8TZ4vn53pj+t518cH0S03RQ==", + "dev": true + }, + "balanced-match": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-1.0.0.tgz", + "integrity": "sha1-ibTRmasr7kneFk6gK4nORi1xt2c=", + "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.14.0", + "resolved": "https://registry.npmjs.org/browserslist/-/browserslist-4.14.0.tgz", + "integrity": "sha512-pUsXKAF2lVwhmtpeA3LJrZ76jXuusrNyhduuQs7CDFf9foT4Y38aQOserd2lMe5DSSrjf3fx34oHwryuvxAUgQ==", + "dev": true, + "requires": { + "caniuse-lite": "^1.0.30001111", + "electron-to-chromium": "^1.3.523", + "escalade": "^3.0.2", + "node-releases": "^1.1.60" + } + }, + "callsites": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/callsites/-/callsites-3.1.0.tgz", + "integrity": "sha512-P8BjAsXvZS+VIDUI11hHCQEv74YT67YUi5JJFNWIqL235sBmjX4+qx9Muvls5ivyNENctx46xQLQ3aTuE7ssaQ==", + "dev": true + }, + "caniuse-lite": { + "version": "1.0.30001116", + "resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001116.tgz", + "integrity": "sha512-f2lcYnmAI5Mst9+g0nkMIznFGsArRmZ0qU+dnq8l91hymdc2J3SFbiPhOJEeDqC1vtE8nc1qNQyklzB8veJefQ==", + "dev": true + }, + "ccount": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/ccount/-/ccount-1.0.5.tgz", + "integrity": "sha512-MOli1W+nfbPLlKEhInaxhRdp7KVLFxLN5ykwzHgLsLI3H3gs5jjFAK4Eoj3OzzcxCtumDaI8onoVDeQyWaNTkw==", + "dev": true + }, + "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" + } + }, + "character-entities": { + "version": "1.2.4", + "resolved": "https://registry.npmjs.org/character-entities/-/character-entities-1.2.4.tgz", + "integrity": "sha512-iBMyeEHxfVnIakwOuDXpVkc54HijNgCyQB2w0VfGQThle6NXn50zU6V/u+LDhxHcDUPojn6Kpga3PTAD8W1bQw==", + "dev": true + }, + "character-entities-html4": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/character-entities-html4/-/character-entities-html4-1.1.4.tgz", + "integrity": "sha512-HRcDxZuZqMx3/a+qrzxdBKBPUpxWEq9xw2OPZ3a/174ihfrQKVsFhqtthBInFy1zZ9GgZyFXOatNujm8M+El3g==", + "dev": true + }, + "character-entities-legacy": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/character-entities-legacy/-/character-entities-legacy-1.1.4.tgz", + "integrity": "sha512-3Xnr+7ZFS1uxeiUDvV02wQ+QDbc55o97tIV5zHScSPJpcLm/r0DFPcoY3tYRp+VZukxuMeKgXYmsXQHO05zQeA==", + "dev": true + }, + "character-reference-invalid": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/character-reference-invalid/-/character-reference-invalid-1.1.4.tgz", + "integrity": "sha512-mKKUkUbhPpQlCOfIuZkvSEgktjPFIsZKRRbC6KWVEMvlzblj3i3asQv5ODsrwt0N3pHAEvjP8KTQPHkp0+6jOg==", + "dev": true + }, + "clone-regexp": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/clone-regexp/-/clone-regexp-2.2.0.tgz", + "integrity": "sha512-beMpP7BOtTipFuW8hrJvREQ2DrRu3BE7by0ZpibtfBA+qfHYvMGTc2Yb1JMYPKg/JUw0CHYvpg796aNTSW9z7Q==", + "dev": true, + "requires": { + "is-regexp": "^2.0.0" + } + }, + "collapse-white-space": { + "version": "1.0.6", + "resolved": "https://registry.npmjs.org/collapse-white-space/-/collapse-white-space-1.0.6.tgz", + "integrity": "sha512-jEovNnrhMuqyCcjfEJA56v0Xq8SkIoPKDyaHahwo3POf4qcSXqMYuwNcOTzp74vTsR9Tn08z4MxWqAhcekogkQ==", + "dev": true + }, + "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 + }, + "colorette": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/colorette/-/colorette-1.2.1.tgz", + "integrity": "sha512-puCDz0CzydiSYOrnXpz/PKd69zRrribezjtE9yd4zvytoRc8+RY/KJPvtPFKZS3E3wP6neGyMe0vOTlHO5L3Pw==", + "dev": true + }, + "comment-parser": { + "version": "0.7.6", + "resolved": "https://registry.npmjs.org/comment-parser/-/comment-parser-0.7.6.tgz", + "integrity": "sha512-GKNxVA7/iuTnAqGADlTWX4tkhzxZKXp5fLJqKTlQLHkE65XDUKutZ3BHaJC5IGcper2tT3QRD1xr4o3jNpgXXg==", + "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 + }, + "convert-source-map": { + "version": "1.7.0", + "resolved": "https://registry.npmjs.org/convert-source-map/-/convert-source-map-1.7.0.tgz", + "integrity": "sha512-4FJkXzKXEDB1snCFZlLP4gpC3JILicCpGbzG9f9G7tGqGCzETQ2hWPrcinA9oU4wtf2biUaEH5065UnMeR33oA==", + "dev": true, + "requires": { + "safe-buffer": "~5.1.1" + } + }, + "core-js-pure": { + "version": "3.6.5", + "resolved": "https://registry.npmjs.org/core-js-pure/-/core-js-pure-3.6.5.tgz", + "integrity": "sha512-lacdXOimsiD0QyNf9BC/mxivNJ/ybBGJXQFKzRekp1WTHoVUWsUHEn+2T8GJAzzIhyOuXA+gOxCVN3l+5PLPUA==", + "dev": true + }, + "cosmiconfig": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/cosmiconfig/-/cosmiconfig-6.0.0.tgz", + "integrity": "sha512-xb3ZL6+L8b9JLLCx3ZdoZy4+2ECphCMo2PwqgP1tlfVq6M6YReyzBJtvWWtbDSpNr9hn96pkCiZqUcFEc+54Qg==", + "dev": true, + "requires": { + "@types/parse-json": "^4.0.0", + "import-fresh": "^3.1.0", + "parse-json": "^5.0.0", + "path-type": "^4.0.0", + "yaml": "^1.7.2" + }, + "dependencies": { + "parse-json": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/parse-json/-/parse-json-5.0.1.tgz", + "integrity": "sha512-ztoZ4/DYeXQq4E21v169sC8qWINGpcosGv9XhTDvg9/hWvx/zrFkc9BiWxR58OJLHGk28j5BL0SDLeV2WmFZlQ==", + "dev": true, + "requires": { + "@babel/code-frame": "^7.0.0", + "error-ex": "^1.3.1", + "json-parse-better-errors": "^1.0.1", + "lines-and-columns": "^1.1.6" + } + }, + "path-type": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/path-type/-/path-type-4.0.0.tgz", + "integrity": "sha512-gDKb8aZMDeD/tZWs9P6+q0J9Mwkdl6xMV8TjnGP3qJVJ06bdMgkbBlLU8IdfOsIsFz2BW1rNVT3XuNEl8zPAvw==", + "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" + }, + "dependencies": { + "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" + } + } + } + }, + "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 + }, + "damerau-levenshtein": { + "version": "1.0.6", + "resolved": "https://registry.npmjs.org/damerau-levenshtein/-/damerau-levenshtein-1.0.6.tgz", + "integrity": "sha512-JVrozIeElnj3QzfUIt8tB8YMluBJom4Vw9qTPpjGYQ9fYlB3D/rb6OordUxf3xeFB35LKWs0xqcO5U6ySvBtug==", + "dev": true + }, + "debug": { + "version": "4.1.1", + "resolved": "https://registry.npmjs.org/debug/-/debug-4.1.1.tgz", + "integrity": "sha512-pYAIzeRo8J6KPEaJ0VWOh5Pzkbw/RetuzehGM7QRRX5he4fPHx2rdKMB256ehJCkX+XRQm16eZLqLNS8RSZXZw==", + "dev": true, + "requires": { + "ms": "^2.1.1" + } + }, + "decamelize": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/decamelize/-/decamelize-1.2.0.tgz", + "integrity": "sha1-9lNNFRSCabIDUue+4m9QH5oZEpA=", + "dev": true + }, + "decamelize-keys": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/decamelize-keys/-/decamelize-keys-1.1.0.tgz", + "integrity": "sha1-0XGoeTMlKAfrPLYdwcFEXQeN8tk=", + "dev": true, + "requires": { + "decamelize": "^1.1.0", + "map-obj": "^1.0.0" + } + }, + "deep-is": { + "version": "0.1.3", + "resolved": "https://registry.npmjs.org/deep-is/-/deep-is-0.1.3.tgz", + "integrity": "sha1-s2nW+128E+7PUk+RsHD+7cNXzzQ=", + "dev": true + }, + "define-properties": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/define-properties/-/define-properties-1.1.3.tgz", + "integrity": "sha512-3MqfYKj2lLzdMSf8ZIZE/V+Zuy+BgD6f164e8K2w7dgnpKArBDerGYpM46IYYcjnkdPNMjPk9A6VFB8+3SKlXQ==", + "dev": true, + "requires": { + "object-keys": "^1.0.12" + } + }, + "dir-glob": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/dir-glob/-/dir-glob-3.0.1.tgz", + "integrity": "sha512-WkrWp9GR4KXfKGYzOLmTuGVi1UWFfws377n9cc55/tb6DuqyF6pcQ5AbiHEshaDpY9v6oaSr2XCDidGmMwdzIA==", + "dev": true, + "requires": { + "path-type": "^4.0.0" + }, + "dependencies": { + "path-type": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/path-type/-/path-type-4.0.0.tgz", + "integrity": "sha512-gDKb8aZMDeD/tZWs9P6+q0J9Mwkdl6xMV8TjnGP3qJVJ06bdMgkbBlLU8IdfOsIsFz2BW1rNVT3XuNEl8zPAvw==", + "dev": true + } + } + }, + "doctrine": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/doctrine/-/doctrine-2.1.0.tgz", + "integrity": "sha512-35mSku4ZXK0vfCuHEDAwt55dg2jNajHZ1odvF+8SSr82EsZY4QmXfuWso8oEd8zRhVObSN18aM0CjSdoBX7zIw==", + "dev": true, + "requires": { + "esutils": "^2.0.2" + } + }, + "dom-serializer": { + "version": "0.2.2", + "resolved": "https://registry.npmjs.org/dom-serializer/-/dom-serializer-0.2.2.tgz", + "integrity": "sha512-2/xPb3ORsQ42nHYiSunXkDjPLBaEj/xTwUO4B7XCZQTRk7EBtTOPaygh10YAAh2OI1Qrp6NWfpAhzswj0ydt9g==", + "dev": true, + "requires": { + "domelementtype": "^2.0.1", + "entities": "^2.0.0" + }, + "dependencies": { + "domelementtype": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/domelementtype/-/domelementtype-2.0.1.tgz", + "integrity": "sha512-5HOHUDsYZWV8FGWN0Njbr/Rn7f/eWSQi1v7+HsUVwXgn8nWWlL64zKDkS0n8ZmQ3mlWOMuXOnR+7Nx/5tMO5AQ==", + "dev": true + }, + "entities": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/entities/-/entities-2.0.3.tgz", + "integrity": "sha512-MyoZ0jgnLvB2X3Lg5HqpFmn1kybDiIfEQmKzTb5apr51Rb+T3KdmMiqa70T+bhGnyv7bQ6WMj2QMHpGMmlrUYQ==", + "dev": true + } + } + }, + "domelementtype": { + "version": "1.3.1", + "resolved": "https://registry.npmjs.org/domelementtype/-/domelementtype-1.3.1.tgz", + "integrity": "sha512-BSKB+TSpMpFI/HOxCNr1O8aMOTZ8hT3pM3GQ0w/mWRmkhEDSFJkkyzz4XQsBV44BChwGkrDfMyjVD0eA2aFV3w==", + "dev": true + }, + "domhandler": { + "version": "2.4.2", + "resolved": "https://registry.npmjs.org/domhandler/-/domhandler-2.4.2.tgz", + "integrity": "sha512-JiK04h0Ht5u/80fdLMCEmV4zkNh2BcoMFBmZ/91WtYZ8qVXSKjiw7fXMgFPnHcSZgOo3XdinHvmnDUeMf5R4wA==", + "dev": true, + "requires": { + "domelementtype": "1" + } + }, + "domutils": { + "version": "1.7.0", + "resolved": "https://registry.npmjs.org/domutils/-/domutils-1.7.0.tgz", + "integrity": "sha512-Lgd2XcJ/NjEw+7tFvfKxOzCYKZsdct5lczQ2ZaQY8Djz7pfAD3Gbp8ySJWtreII/vDlMVmxwa6pHmdxIYgttDg==", + "dev": true, + "requires": { + "dom-serializer": "0", + "domelementtype": "1" + } + }, + "electron-to-chromium": { + "version": "1.3.539", + "resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.3.539.tgz", + "integrity": "sha512-rM0LWDIstdqfaRUADZetNrL6+zd/0NBmavbMEhBXgc2u/CC1d1GaDyN5hho29fFvBiOVFwrSWZkzmNcZnCEDog==", + "dev": true + }, + "emoji-regex": { + "version": "9.0.0", + "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-9.0.0.tgz", + "integrity": "sha512-6p1NII1Vm62wni/VR/cUMauVQoxmLVb9csqQlvLz+hO2gk8U2UYDfXHQSUYIBKmZwAKz867IDqG7B+u0mj+M6w==", + "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" + } + }, + "entities": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/entities/-/entities-1.1.2.tgz", + "integrity": "sha512-f2LZMYl1Fzu7YSBKg+RoROelpOaNrcGmE9AZubeDfrCEia483oW4MI4VyFd5VNHIgQ/7qm1I0wUHK1eJnn2y2w==", + "dev": true + }, + "error-ex": { + "version": "1.3.2", + "resolved": "https://registry.npmjs.org/error-ex/-/error-ex-1.3.2.tgz", + "integrity": "sha512-7dFHNmqeFSEt2ZBsCriorKnn3Z2pj+fd9kmI6QoWw4//DL+icEBfc0U7qJCisqrTsKTjw4fNFy2pW9OqStD84g==", + "dev": true, + "requires": { + "is-arrayish": "^0.2.1" + } + }, + "es-abstract": { + "version": "1.17.6", + "resolved": "https://registry.npmjs.org/es-abstract/-/es-abstract-1.17.6.tgz", + "integrity": "sha512-Fr89bON3WFyUi5EvAeI48QTWX0AyekGgLA8H+c+7fbfCkJwRWRMLd8CQedNEyJuoYYhmtEqY92pgte1FAhBlhw==", + "dev": true, + "requires": { + "es-to-primitive": "^1.2.1", + "function-bind": "^1.1.1", + "has": "^1.0.3", + "has-symbols": "^1.0.1", + "is-callable": "^1.2.0", + "is-regex": "^1.1.0", + "object-inspect": "^1.7.0", + "object-keys": "^1.1.1", + "object.assign": "^4.1.0", + "string.prototype.trimend": "^1.0.1", + "string.prototype.trimstart": "^1.0.1" + } + }, + "es-to-primitive": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/es-to-primitive/-/es-to-primitive-1.2.1.tgz", + "integrity": "sha512-QCOllgZJtaUo9miYBcLChTUaHNjJF3PYs1VidD7AwiEj1kYxKeQTctLAezAOH5ZKRH0g2IgPn6KwB4IT8iRpvA==", + "dev": true, + "requires": { + "is-callable": "^1.1.4", + "is-date-object": "^1.0.1", + "is-symbol": "^1.0.2" + } + }, + "escalade": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/escalade/-/escalade-3.0.2.tgz", + "integrity": "sha512-gPYAU37hYCUhW5euPeR+Y74F7BL+IBsV93j5cvGriSaD1aG6MGsqsV1yamRdrWrb2j3aiZvb0X+UBOWpx3JWtQ==", + "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 + }, + "eslint": { + "version": "7.7.0", + "resolved": "https://registry.npmjs.org/eslint/-/eslint-7.7.0.tgz", + "integrity": "sha512-1KUxLzos0ZVsyL81PnRN335nDtQ8/vZUD6uMtWbF+5zDtjKcsklIi78XoE0MVL93QvWTu+E5y44VyyCsOMBrIg==", + "dev": true, + "requires": { + "@babel/code-frame": "^7.0.0", + "ajv": "^6.10.0", + "chalk": "^4.0.0", + "cross-spawn": "^7.0.2", + "debug": "^4.0.1", + "doctrine": "^3.0.0", + "enquirer": "^2.3.5", + "eslint-scope": "^5.1.0", + "eslint-utils": "^2.1.0", + "eslint-visitor-keys": "^1.3.0", + "espree": "^7.2.0", + "esquery": "^1.2.0", + "esutils": "^2.0.2", + "file-entry-cache": "^5.0.1", + "functional-red-black-tree": "^1.0.1", + "glob-parent": "^5.0.0", + "globals": "^12.1.0", + "ignore": "^4.0.6", + "import-fresh": "^3.0.0", + "imurmurhash": "^0.1.4", + "is-glob": "^4.0.0", + "js-yaml": "^3.13.1", + "json-stable-stringify-without-jsonify": "^1.0.1", + "levn": "^0.4.1", + "lodash": "^4.17.19", + "minimatch": "^3.0.4", + "natural-compare": "^1.4.0", + "optionator": "^0.9.1", + "progress": "^2.0.0", + "regexpp": "^3.1.0", + "semver": "^7.2.1", + "strip-ansi": "^6.0.0", + "strip-json-comments": "^3.1.0", + "table": "^5.2.3", + "text-table": "^0.2.0", + "v8-compile-cache": "^2.0.3" + }, + "dependencies": { + "ansi-regex": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.0.tgz", + "integrity": "sha512-bY6fj56OUQ0hU1KjFNDQuJFezqKdrAyFdIevADiqrWHwSlbmBNMHp5ak2f40Pm8JTFyM2mqxkG6ngkHO11f/lg==", + "dev": true + }, + "ansi-styles": { + "version": "4.2.1", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.2.1.tgz", + "integrity": "sha512-9VGjrMsG1vePxcSweQsN20KY/c4zN0h9fLjqAbwbPfahM3t+NL+M9HC8xeXG2I8pX5NoamTGNuomEUFI7fcUjA==", + "dev": true, + "requires": { + "@types/color-name": "^1.1.1", + "color-convert": "^2.0.1" + } + }, + "chalk": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.0.tgz", + "integrity": "sha512-qwx12AxXe2Q5xQ43Ac//I6v5aXTipYrSESdOgzrN+9XjgEpyjpKuvSGaN4qE93f7TQTlerQQ8S+EQ0EyDoVL1A==", + "dev": true, + "requires": { + "ansi-styles": "^4.1.0", + "supports-color": "^7.1.0" + } + }, + "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 + }, + "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" + } + }, + "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 + }, + "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 + }, + "js-yaml": { + "version": "3.14.0", + "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-3.14.0.tgz", + "integrity": "sha512-/4IbIeHcD9VMHFqDR/gQ7EdZdLimOvW2DdcxFjdyyZ9NsbS+ccrXqVWDtab/lRl5AlUqmpBx8EhPaWR+OtY17A==", + "dev": true, + "requires": { + "argparse": "^1.0.7", + "esprima": "^4.0.0" + } + }, + "lodash": { + "version": "4.17.20", + "resolved": "https://registry.npmjs.org/lodash/-/lodash-4.17.20.tgz", + "integrity": "sha512-PlhdFcillOINfeV7Ni6oF1TAEayyZBoZ8bcshTHqOYJYlrqzRK5hagpagky5o4HfCzzd1TRkXPMFq6cKk9rGmA==", + "dev": true + }, + "semver": { + "version": "7.3.2", + "resolved": "https://registry.npmjs.org/semver/-/semver-7.3.2.tgz", + "integrity": "sha512-OrOb32TeeambH6UrhtShmF7CRDqhL6/5XpPNp2DuRH6+9QLw/orhp72j87v8Qa1ScDkvrrBNpZcDejAirJmfXQ==", + "dev": true + }, + "strip-ansi": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.0.tgz", + "integrity": "sha512-AuvKTrTfQNYNIctbR1K/YGTR1756GycPsg7b9bdV9Duqur4gv6aKqHXah67Z8ImS7WEz5QVcOtlfW2rZEugt6w==", + "dev": true, + "requires": { + "ansi-regex": "^5.0.0" + } + }, + "supports-color": { + "version": "7.1.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.1.0.tgz", + "integrity": "sha512-oRSIpR8pxT1Wr2FquTNnGet79b3BWljqOuoW/h4oBhxJ/HUbX5nX6JSruTkvXDCFMwDPvsaTTbvMLKZWSy0R5g==", + "dev": true, + "requires": { + "has-flag": "^4.0.0" + } + } + } + }, + "eslint-config-prettier": { + "version": "6.11.0", + "resolved": "https://registry.npmjs.org/eslint-config-prettier/-/eslint-config-prettier-6.11.0.tgz", + "integrity": "sha512-oB8cpLWSAjOVFEJhhyMZh6NOEOtBVziaqdDQ86+qhDHFbZXoRTM7pNSvFRfW/W/L/LrQ38C99J5CGuRBBzBsdA==", + "dev": true, + "requires": { + "get-stdin": "^6.0.0" + }, + "dependencies": { + "get-stdin": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/get-stdin/-/get-stdin-6.0.0.tgz", + "integrity": "sha512-jp4tHawyV7+fkkSKyvjuLZswblUtz+SQKzSWnBbii16BuZksJlU1wuBYXY75r+duh/llF1ur6oNwi+2ZzjKZ7g==", + "dev": true + } + } + }, + "eslint-plugin-jest": { + "version": "23.20.0", + "resolved": "https://registry.npmjs.org/eslint-plugin-jest/-/eslint-plugin-jest-23.20.0.tgz", + "integrity": "sha512-+6BGQt85OREevBDWCvhqj1yYA4+BFK4XnRZSGJionuEYmcglMZYLNNBBemwzbqUAckURaHdJSBcjHPyrtypZOw==", + "dev": true, + "requires": { + "@typescript-eslint/experimental-utils": "^2.5.0" + } + }, + "eslint-plugin-jsdoc": { + "version": "26.0.2", + "resolved": "https://registry.npmjs.org/eslint-plugin-jsdoc/-/eslint-plugin-jsdoc-26.0.2.tgz", + "integrity": "sha512-KtZjqtM3Z8x84vQBFKGUyBbZRGXYHVWSJ2XyYSUTc8KhfFrvzQ/GXPp6f1M1/YCNzP3ImD5RuDNcr+OVvIZcBA==", + "dev": true, + "requires": { + "comment-parser": "^0.7.4", + "debug": "^4.1.1", + "jsdoctypeparser": "^6.1.0", + "lodash": "^4.17.15", + "regextras": "^0.7.1", + "semver": "^6.3.0", + "spdx-expression-parse": "^3.0.1" + }, + "dependencies": { + "lodash": { + "version": "4.17.20", + "resolved": "https://registry.npmjs.org/lodash/-/lodash-4.17.20.tgz", + "integrity": "sha512-PlhdFcillOINfeV7Ni6oF1TAEayyZBoZ8bcshTHqOYJYlrqzRK5hagpagky5o4HfCzzd1TRkXPMFq6cKk9rGmA==", + "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 + }, + "spdx-expression-parse": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/spdx-expression-parse/-/spdx-expression-parse-3.0.1.tgz", + "integrity": "sha512-cbqHunsQWnJNE6KhVSMsMeH5H/L9EpymbzqTQ3uLwNCLZ1Q481oWaofqH7nO6V07xlXwY6PhQdQ2IedWx/ZK4Q==", + "dev": true, + "requires": { + "spdx-exceptions": "^2.1.0", + "spdx-license-ids": "^3.0.0" + } + } + } + }, + "eslint-plugin-jsx-a11y": { + "version": "6.3.1", + "resolved": "https://registry.npmjs.org/eslint-plugin-jsx-a11y/-/eslint-plugin-jsx-a11y-6.3.1.tgz", + "integrity": "sha512-i1S+P+c3HOlBJzMFORRbC58tHa65Kbo8b52/TwCwSKLohwvpfT5rm2GjGWzOHTEuq4xxf2aRlHHTtmExDQOP+g==", + "dev": true, + "requires": { + "@babel/runtime": "^7.10.2", + "aria-query": "^4.2.2", + "array-includes": "^3.1.1", + "ast-types-flow": "^0.0.7", + "axe-core": "^3.5.4", + "axobject-query": "^2.1.2", + "damerau-levenshtein": "^1.0.6", + "emoji-regex": "^9.0.0", + "has": "^1.0.3", + "jsx-ast-utils": "^2.4.1", + "language-tags": "^1.0.5" + } + }, + "eslint-plugin-prettier": { + "version": "3.1.4", + "resolved": "https://registry.npmjs.org/eslint-plugin-prettier/-/eslint-plugin-prettier-3.1.4.tgz", + "integrity": "sha512-jZDa8z76klRqo+TdGDTFJSavwbnWK2ZpqGKNZ+VvweMW516pDUMmQ2koXvxEE4JhzNvTv+radye/bWGBmA6jmg==", + "dev": true, + "requires": { + "prettier-linter-helpers": "^1.0.0" + } + }, + "eslint-plugin-react": { + "version": "7.20.6", + "resolved": "https://registry.npmjs.org/eslint-plugin-react/-/eslint-plugin-react-7.20.6.tgz", + "integrity": "sha512-kidMTE5HAEBSLu23CUDvj8dc3LdBU0ri1scwHBZjI41oDv4tjsWZKU7MQccFzH1QYPYhsnTF2ovh7JlcIcmxgg==", + "dev": true, + "requires": { + "array-includes": "^3.1.1", + "array.prototype.flatmap": "^1.2.3", + "doctrine": "^2.1.0", + "has": "^1.0.3", + "jsx-ast-utils": "^2.4.1", + "object.entries": "^1.1.2", + "object.fromentries": "^2.0.2", + "object.values": "^1.1.1", + "prop-types": "^15.7.2", + "resolve": "^1.17.0", + "string.prototype.matchall": "^4.0.2" + }, + "dependencies": { + "resolve": { + "version": "1.17.0", + "resolved": "https://registry.npmjs.org/resolve/-/resolve-1.17.0.tgz", + "integrity": "sha512-ic+7JYiV8Vi2yzQGFWOkiZD5Z9z7O2Zhm9XMaTxdJExKasieFCr+yXZ/WmXsckHiKl12ar0y6XiXDx3m4RHn1w==", + "dev": true, + "requires": { + "path-parse": "^1.0.6" + } + } + } + }, + "eslint-plugin-react-hooks": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/eslint-plugin-react-hooks/-/eslint-plugin-react-hooks-4.1.0.tgz", + "integrity": "sha512-36zilUcDwDReiORXmcmTc6rRumu9JIM3WjSvV0nclHoUQ0CNrX866EwONvLR/UqaeqFutbAnVu8PEmctdo2SRQ==", + "dev": true + }, + "eslint-scope": { + "version": "5.1.0", + "resolved": "https://registry.npmjs.org/eslint-scope/-/eslint-scope-5.1.0.tgz", + "integrity": "sha512-iiGRvtxWqgtx5m8EyQUJihBloE4EnYeGE/bz1wSPwJE6tZuJUtHlhqDM4Xj2ukE8Dyy1+HCZ4hE0fzIVMzb58w==", + "dev": true, + "requires": { + "esrecurse": "^4.1.0", + "estraverse": "^4.1.1" + } + }, + "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 + }, + "espree": { + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/espree/-/espree-7.2.0.tgz", + "integrity": "sha512-H+cQ3+3JYRMEIOl87e7QdHX70ocly5iW4+dttuR8iYSPr/hXKFb+7dBsZ7+u1adC4VrnPlTkv0+OwuPnDop19g==", + "dev": true, + "requires": { + "acorn": "^7.3.1", + "acorn-jsx": "^5.2.0", + "eslint-visitor-keys": "^1.3.0" + } + }, + "esquery": { + "version": "1.3.1", + "resolved": "https://registry.npmjs.org/esquery/-/esquery-1.3.1.tgz", + "integrity": "sha512-olpvt9QG0vniUBZspVRN6lwB7hOZoTRtT+jzR+tS4ffYx2mzbw+z0XCOk44aaLYKApNX5nMm+E+P6o25ip/DHQ==", + "dev": true, + "requires": { + "estraverse": "^5.1.0" + }, + "dependencies": { + "estraverse": { + "version": "5.2.0", + "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-5.2.0.tgz", + "integrity": "sha512-BxbNGGNm0RyRYvUdHpIwv9IWzeM9XClbOxwoATuFdOE7ZE6wHL+HQ5T8hoPM+zHvmKzzsEqhgy0GrQ5X13afiQ==", + "dev": true + } + } + }, + "esrecurse": { + "version": "4.2.1", + "resolved": "https://registry.npmjs.org/esrecurse/-/esrecurse-4.2.1.tgz", + "integrity": "sha512-64RBB++fIOAXPw3P9cy89qfMlvZEXZkqqJkjqqXIvzP5ezRZjW+lPWjw35UX/3EhUPFYbg5ER4JYgDw4007/DQ==", + "dev": true, + "requires": { + "estraverse": "^4.1.0" + } + }, + "estraverse": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-4.3.0.tgz", + "integrity": "sha512-39nnKffWz8xN1BU/2c79n9nB9HDzo0niYUqx6xyqUnyoAnQyyWpOTdZEeiCch8BBu515t4wp9ZmgVfVhn9EBpw==", + "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 + }, + "execall": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/execall/-/execall-2.0.0.tgz", + "integrity": "sha512-0FU2hZ5Hh6iQnarpRtQurM/aAvp3RIbfvgLHrcqJYzhXyV2KFruhuChf9NC6waAhiUR7FFtlugkI4p7f2Fqlow==", + "dev": true, + "requires": { + "clone-regexp": "^2.1.0" + } + }, + "extend": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/extend/-/extend-3.0.2.tgz", + "integrity": "sha512-fjquC59cD7CyW6urNXK0FBufkZcoiGG80wTuPujX590cB5Ttln20E2UB4S/WARVqhXffZl2LNgS+gQdPIIim/g==", + "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-diff": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/fast-diff/-/fast-diff-1.2.0.tgz", + "integrity": "sha512-xJuoT5+L99XlZ8twedaRf6Ax2TgQVxvgZOYoPKqZufmJib0tL2tegPBOZb1pVNgIhlqDlA0eO0c3wBvQcmzx4w==", + "dev": true + }, + "fast-glob": { + "version": "3.2.4", + "resolved": "https://registry.npmjs.org/fast-glob/-/fast-glob-3.2.4.tgz", + "integrity": "sha512-kr/Oo6PX51265qeuCYsyGypiO5uJFgBS0jksyG7FUeCyQzNwYnzrNIMR1NXfkZXsMYXYLRAHgISHBz8gQcxKHQ==", + "dev": true, + "requires": { + "@nodelib/fs.stat": "^2.0.2", + "@nodelib/fs.walk": "^1.2.3", + "glob-parent": "^5.1.0", + "merge2": "^1.3.0", + "micromatch": "^4.0.2", + "picomatch": "^2.2.1" + } + }, + "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 + }, + "fastq": { + "version": "1.8.0", + "resolved": "https://registry.npmjs.org/fastq/-/fastq-1.8.0.tgz", + "integrity": "sha512-SMIZoZdLh/fgofivvIkmknUXyPnvxRE3DhtZ5Me3Mrsk5gyPL42F0xr51TdRXskBxHfMp+07bcYzfsYEsSQA9Q==", + "dev": true, + "requires": { + "reusify": "^1.0.4" + } + }, + "file-entry-cache": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/file-entry-cache/-/file-entry-cache-5.0.1.tgz", + "integrity": "sha512-bCg29ictuBaKUwwArK4ouCaqDgLZcysCFLmM/Yn/FDoqndh/9vNuQfXRDvTuXKLxfD/JtZQGKFT8MGcJBK644g==", + "dev": true, + "requires": { + "flat-cache": "^2.0.1" + } + }, + "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": "2.0.1", + "resolved": "https://registry.npmjs.org/flat-cache/-/flat-cache-2.0.1.tgz", + "integrity": "sha512-LoQe6yDuUMDzQAEH8sgmh4Md6oZnc/7PjtwjNFSzveXqSHt6ka9fPBuso7IGf9Rz4uqnSnWiFH2B/zj24a5ReA==", + "dev": true, + "requires": { + "flatted": "^2.0.0", + "rimraf": "2.6.3", + "write": "1.0.3" + } + }, + "flatted": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/flatted/-/flatted-2.0.2.tgz", + "integrity": "sha512-r5wGx7YeOwNWNlCA0wQ86zKyDLMQr+/RB8xy74M4hTphfmjlijTSSXGuH8rnvKZnfT9i+75zmd8jcKdMR4O6jA==", + "dev": true + }, + "fs.realpath": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/fs.realpath/-/fs.realpath-1.0.0.tgz", + "integrity": "sha1-FQStJSMVjKpA20onh8sBQRmU6k8=", + "dev": 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.1", + "resolved": "https://registry.npmjs.org/gensync/-/gensync-1.0.0-beta.1.tgz", + "integrity": "sha512-r8EC6NO1sngH/zdD9fiRDLdcgnbayXah+mLgManTaIZJqEC1MZstmnox8KpnI2/fxQwrp5OpCOYWLp4rBl4Jcg==", + "dev": true + }, + "glob-parent": { + "version": "5.1.1", + "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-5.1.1.tgz", + "integrity": "sha512-FnI+VGOpnlGHWZxthPGR+QhR78fuiK0sNLkHQv+bL9fQi57lNNdquIbna/WrfROrolq8GK5Ek6BiMwqL/voRYQ==", + "dev": true, + "requires": { + "is-glob": "^4.0.1" + } + }, + "global-modules": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/global-modules/-/global-modules-2.0.0.tgz", + "integrity": "sha512-NGbfmJBp9x8IxyJSd1P+otYK8vonoJactOogrVfFRIAEY1ukil8RSKDz2Yo7wh1oihl51l/r6W4epkeKJHqL8A==", + "dev": true, + "requires": { + "global-prefix": "^3.0.0" + } + }, + "global-prefix": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/global-prefix/-/global-prefix-3.0.0.tgz", + "integrity": "sha512-awConJSVCHVGND6x3tmMaKcQvwXLhjdkmomy2W+Goaui8YPgYgXJZewhg3fWC+DlfqqQuWg8AwqjGTD2nAPVWg==", + "dev": true, + "requires": { + "ini": "^1.3.5", + "kind-of": "^6.0.2", + "which": "^1.3.1" + } + }, + "globals": { + "version": "12.4.0", + "resolved": "https://registry.npmjs.org/globals/-/globals-12.4.0.tgz", + "integrity": "sha512-BWICuzzDvDoH54NHKCseDanAhE3CeDorgDL5MT6LMXXj2WCnd9UC2szdk4AWLfjdgNBCXLUanXYcpBBKOSWGwg==", + "dev": true, + "requires": { + "type-fest": "^0.8.1" + } + }, + "globby": { + "version": "11.0.1", + "resolved": "https://registry.npmjs.org/globby/-/globby-11.0.1.tgz", + "integrity": "sha512-iH9RmgwCmUJHi2z5o2l3eTtGBtXek1OYlHrbcxOYugyHLmAsZrPj43OtHThd62Buh/Vv6VyCBD2bdyWcGNQqoQ==", + "dev": true, + "requires": { + "array-union": "^2.1.0", + "dir-glob": "^3.0.1", + "fast-glob": "^3.1.1", + "ignore": "^5.1.4", + "merge2": "^1.3.0", + "slash": "^3.0.0" + }, + "dependencies": { + "array-union": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/array-union/-/array-union-2.1.0.tgz", + "integrity": "sha512-HGyxoOTYUyCM6stUe6EJgnd4EoewAI7zMdfqO+kGjnlZmBDz/cR5pf8r/cR4Wq60sL/p0IkcjUEEPwS3GFrIyw==", + "dev": true + }, + "ignore": { + "version": "5.1.8", + "resolved": "https://registry.npmjs.org/ignore/-/ignore-5.1.8.tgz", + "integrity": "sha512-BMpfD7PpiETpBl/A6S498BaIJ6Y/ABT93ETbby2fP00v4EbvPBXWEoaR1UBPKs3iR53pJY7EtZk5KACI57i1Uw==", + "dev": true + } + } + }, + "globjoin": { + "version": "0.1.4", + "resolved": "https://registry.npmjs.org/globjoin/-/globjoin-0.1.4.tgz", + "integrity": "sha1-L0SUrIkZ43Z8XLtpHp9GMyQoXUM=", + "dev": true + }, + "gonzales-pe": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/gonzales-pe/-/gonzales-pe-4.3.0.tgz", + "integrity": "sha512-otgSPpUmdWJ43VXyiNgEYE4luzHCL2pz4wQ0OnDluC6Eg4Ko3Vexy/SrSynglw/eR+OhkzmqFCZa/OFa/RgAOQ==", + "dev": true, + "requires": { + "minimist": "^1.2.5" + }, + "dependencies": { + "minimist": { + "version": "1.2.5", + "resolved": "https://registry.npmjs.org/minimist/-/minimist-1.2.5.tgz", + "integrity": "sha512-FM9nNUYrRBAELZQT3xeZQ7fmMOBg6nWNmJKTcgsJeaLstP/UODVpGsr5OhXhhXg6f+qtJ8uiZ+PUxkDWcgIXLw==", + "dev": true + } + } + }, + "hard-rejection": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/hard-rejection/-/hard-rejection-2.1.0.tgz", + "integrity": "sha512-VIZB+ibDhx7ObhAe7OVtoEbuP4h/MuOTHJ+J8h/eBXotJYl0fBgR72xDFCKgIh22OJZIOVNxBMWuhAr10r8HdA==", + "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-flag": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-3.0.0.tgz", + "integrity": "sha1-tdRU3CGZriJWmfNGfloH87lVuv0=", + "dev": true + }, + "has-symbols": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/has-symbols/-/has-symbols-1.0.1.tgz", + "integrity": "sha512-PLcsoqu++dmEIZB+6totNFKq/7Do+Z0u4oT0zKOJNl3lYK6vGwwu2hjHs+68OEZbTjiUE9bgOABXbP/GvrS0Kg==", + "dev": true + }, + "hosted-git-info": { + "version": "2.7.1", + "resolved": "https://registry.npmjs.org/hosted-git-info/-/hosted-git-info-2.7.1.tgz", + "integrity": "sha512-7T/BxH19zbcCTa8XkMlbK5lTo1WtgkFi3GvdWEyNuc4Vex7/9Dqbnpsf4JMydcfj9HCg4zUWFTL3Za6lapg5/w==", + "dev": true + }, + "html-tags": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/html-tags/-/html-tags-3.1.0.tgz", + "integrity": "sha512-1qYz89hW3lFDEazhjW0yVAV87lw8lVkrJocr72XmBkMKsoSVJCQx3W8BXsC7hO2qAt8BoVjYjtAcZ9perqGnNg==", + "dev": true + }, + "htmlparser2": { + "version": "3.10.1", + "resolved": "https://registry.npmjs.org/htmlparser2/-/htmlparser2-3.10.1.tgz", + "integrity": "sha512-IgieNijUMbkDovyoKObU1DUhm1iwNYE/fuifEoEHfd1oZKZDaONBSkal7Y01shxsM49R4XaMdGez3WnF9UfiCQ==", + "dev": true, + "requires": { + "domelementtype": "^1.3.1", + "domhandler": "^2.3.0", + "domutils": "^1.5.1", + "entities": "^1.1.1", + "inherits": "^2.0.1", + "readable-stream": "^3.1.1" + }, + "dependencies": { + "readable-stream": { + "version": "3.6.0", + "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-3.6.0.tgz", + "integrity": "sha512-BViHy7LKeTz4oNnkcLJ+lVSL6vpiFeX6/d3oSH8zCW7UxP2onchk+vTGB143xuFjHS3deTgkKoXXymXqymiIdA==", + "dev": true, + "requires": { + "inherits": "^2.0.3", + "string_decoder": "^1.1.1", + "util-deprecate": "^1.0.1" + } + } + } + }, + "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.2.1", + "resolved": "https://registry.npmjs.org/import-fresh/-/import-fresh-3.2.1.tgz", + "integrity": "sha512-6e1q1cnWP2RXD9/keSkxHScg508CdXqXWgWBaETNhyuBFz+kUZlKboh+ISK+bU++DmbHimVBrOz/zzPe0sZ3sQ==", + "dev": true, + "requires": { + "parent-module": "^1.0.0", + "resolve-from": "^4.0.0" + }, + "dependencies": { + "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 + } + } + }, + "import-lazy": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/import-lazy/-/import-lazy-4.0.0.tgz", + "integrity": "sha512-rKtvo6a868b5Hu3heneU+L4yEQ4jYKLtjpnPeUdK7h0yzXGmyBTypknlkCvHFBqfX9YlorEiMM6Dnq/5atfHkw==", + "dev": true + }, + "imurmurhash": { + "version": "0.1.4", + "resolved": "https://registry.npmjs.org/imurmurhash/-/imurmurhash-0.1.4.tgz", + "integrity": "sha1-khi5srkoojixPcT7a21XbyMUU+o=", + "dev": true + }, + "indexes-of": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/indexes-of/-/indexes-of-1.0.1.tgz", + "integrity": "sha1-8w9xbI4r00bHtn0985FVZqfAVgc=", + "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.3", + "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.3.tgz", + "integrity": "sha1-Yzwsg+PaQqUC9SRmAiSA9CCCYd4=", + "dev": true + }, + "ini": { + "version": "1.3.5", + "resolved": "https://registry.npmjs.org/ini/-/ini-1.3.5.tgz", + "integrity": "sha512-RZY5huIKCMRWDUqZlEi72f/lmXKMvuszcMBduliQ3nnWbx9X/ZBQO7DijMEYS9EhHBb2qacRUMtC7svLwe0lcw==", + "dev": true + }, + "internal-slot": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/internal-slot/-/internal-slot-1.0.2.tgz", + "integrity": "sha512-2cQNfwhAfJIkU4KZPkDI+Gj5yNNnbqi40W9Gge6dfnk4TocEVm00B3bdiL+JINrbGJil2TeHvM4rETGzk/f/0g==", + "dev": true, + "requires": { + "es-abstract": "^1.17.0-next.1", + "has": "^1.0.3", + "side-channel": "^1.0.2" + } + }, + "is-alphabetical": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/is-alphabetical/-/is-alphabetical-1.0.4.tgz", + "integrity": "sha512-DwzsA04LQ10FHTZuL0/grVDk4rFoVH1pjAToYwBrHSxcrBIGQuXrQMtD5U1b0U2XVgKZCTLLP8u2Qxqhy3l2Vg==", + "dev": true + }, + "is-alphanumeric": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/is-alphanumeric/-/is-alphanumeric-1.0.0.tgz", + "integrity": "sha1-Spzvcdr0wAHB2B1j0UDPU/1oifQ=", + "dev": true + }, + "is-alphanumerical": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/is-alphanumerical/-/is-alphanumerical-1.0.4.tgz", + "integrity": "sha512-UzoZUr+XfVz3t3v4KyGEniVL9BDRoQtY7tOyrRybkVNjDFWyo1yhXNGrrBTQxp3ib9BLAWs7k2YKBQsFRkZG9A==", + "dev": true, + "requires": { + "is-alphabetical": "^1.0.0", + "is-decimal": "^1.0.0" + } + }, + "is-arrayish": { + "version": "0.2.1", + "resolved": "https://registry.npmjs.org/is-arrayish/-/is-arrayish-0.2.1.tgz", + "integrity": "sha1-d8mYQFJ6qOyxqLppe4BkWnqSap0=", + "dev": true + }, + "is-buffer": { + "version": "2.0.4", + "resolved": "https://registry.npmjs.org/is-buffer/-/is-buffer-2.0.4.tgz", + "integrity": "sha512-Kq1rokWXOPXWuaMAqZiJW4XxsmD9zGx9q4aePabbn3qCRGedtH7Cm+zV8WETitMfu1wdh+Rvd6w5egwSngUX2A==", + "dev": true + }, + "is-callable": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/is-callable/-/is-callable-1.2.0.tgz", + "integrity": "sha512-pyVD9AaGLxtg6srb2Ng6ynWJqkHU9bEM087AKck0w8QwDarTfNcpIYoU8x8Hv2Icm8u6kFJM18Dag8lyqGkviw==", + "dev": true + }, + "is-date-object": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/is-date-object/-/is-date-object-1.0.2.tgz", + "integrity": "sha512-USlDT524woQ08aoZFzh3/Z6ch9Y/EWXEHQ/AaRN0SkKq4t2Jw2R2339tSXmwuVoY7LLlBCbOIlx2myP/L5zk0g==", + "dev": true + }, + "is-decimal": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/is-decimal/-/is-decimal-1.0.4.tgz", + "integrity": "sha512-RGdriMmQQvZ2aqaQq3awNA6dCGtKpiDFcOzrTWrDAT2MiWrKQVPmxLGHl7Y2nNu6led0kEyoX0enY0qXYsv9zw==", + "dev": true + }, + "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-fullwidth-code-point": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-2.0.0.tgz", + "integrity": "sha1-o7MKXE8ZkYMWeqq5O+764937ZU8=", + "dev": true + }, + "is-glob": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/is-glob/-/is-glob-4.0.1.tgz", + "integrity": "sha512-5G0tKtBTFImOqDnLB2hG6Bp2qcKEFduo4tZu9MT/H6NQv/ghhy30o55ufafxJ/LdH79LLs2Kfrn85TLKyA7BUg==", + "dev": true, + "requires": { + "is-extglob": "^2.1.1" + } + }, + "is-hexadecimal": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/is-hexadecimal/-/is-hexadecimal-1.0.4.tgz", + "integrity": "sha512-gyPJuv83bHMpocVYoqof5VDiZveEoGoFL8m3BXNb2VW8Xs+rz9kqO8LOQ5DH6EsuvilT1ApazU0pyl+ytbPtlw==", + "dev": true + }, + "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 + }, + "is-plain-obj": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/is-plain-obj/-/is-plain-obj-2.1.0.tgz", + "integrity": "sha512-YWnfyRwxL/+SsrWYfOpUtz5b3YD+nyfkHvjbcanzk8zgyO4ASD67uVMRt8k5bM4lLMDnXfriRhOpemw+NfT1eA==", + "dev": true + }, + "is-regex": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/is-regex/-/is-regex-1.1.1.tgz", + "integrity": "sha512-1+QkEcxiLlB7VEyFtyBg94e08OAsvq7FUBgApTq/w2ymCLyKJgDPsybBENVtA7XCQEgEXxKPonG+mvYRxh/LIg==", + "dev": true, + "requires": { + "has-symbols": "^1.0.1" + } + }, + "is-regexp": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/is-regexp/-/is-regexp-2.1.0.tgz", + "integrity": "sha512-OZ4IlER3zmRIoB9AqNhEggVxqIH4ofDns5nRrPS6yQxXE1TPCUpFznBfRQmQa8uC+pXqjMnukiJBxCisIxiLGA==", + "dev": true + }, + "is-string": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/is-string/-/is-string-1.0.5.tgz", + "integrity": "sha512-buY6VNRjhQMiF1qWDouloZlQbRhDPCebwxSjxMjxgemYT46YMd2NR0/H+fBhEfWX4A/w9TBJ+ol+okqJKFE6vQ==", + "dev": true + }, + "is-symbol": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/is-symbol/-/is-symbol-1.0.3.tgz", + "integrity": "sha512-OwijhaRSgqvhm/0ZdAcXNZt9lYdKFpcRDT5ULUuYXPoT794UNOdU+gpT6Rzo7b4V2HUl/op6GqY894AZwv9faQ==", + "dev": true, + "requires": { + "has-symbols": "^1.0.1" + } + }, + "is-typedarray": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/is-typedarray/-/is-typedarray-1.0.0.tgz", + "integrity": "sha1-5HnICFjfDBsR3dppQPlgEfzaSpo=", + "dev": true + }, + "is-whitespace-character": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/is-whitespace-character/-/is-whitespace-character-1.0.4.tgz", + "integrity": "sha512-SDweEzfIZM0SJV0EUga669UTKlmL0Pq8Lno0QDQsPnvECB3IM2aP0gdx5TrU0A01MAPfViaZiI2V1QMZLaKK5w==", + "dev": true + }, + "is-word-character": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/is-word-character/-/is-word-character-1.0.4.tgz", + "integrity": "sha512-5SMO8RVennx3nZrqtKwCGyyetPE9VDba5ugvKLaD4KopPG5kR4mQ7tNt/r7feL5yt5h3lpuBbIUmCOG2eSzXHA==", + "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 + }, + "jsdoctypeparser": { + "version": "6.1.0", + "resolved": "https://registry.npmjs.org/jsdoctypeparser/-/jsdoctypeparser-6.1.0.tgz", + "integrity": "sha512-UCQBZ3xCUBv/PLfwKAJhp6jmGOSLFNKzrotXGNgbKhWvz27wPsCsVeP7gIcHPElQw2agBmynAitXqhxR58XAmA==", + "dev": true + }, + "jsesc": { + "version": "2.5.2", + "resolved": "https://registry.npmjs.org/jsesc/-/jsesc-2.5.2.tgz", + "integrity": "sha512-OYu7XEzjkCQ3C5Ps3QIZsQfNpqoJyZZA99wd9aWd05NCtC5pWOkShK2mkL6HXQR6/Cy2lbNdPlZBpuQHXE63gA==", + "dev": true + }, + "json-parse-better-errors": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/json-parse-better-errors/-/json-parse-better-errors-1.0.2.tgz", + "integrity": "sha512-mrqyZKfX5EhL7hvqcV6WG1yYjnjeuYDzDhhcAAUrq8Po85NBQBJP+ZDUT75qZQ98IkUoBqdkExkukOU7Ts2wrw==", + "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.1.3", + "resolved": "https://registry.npmjs.org/json5/-/json5-2.1.3.tgz", + "integrity": "sha512-KXPvOm8K9IJKFM0bmdn8QXh7udDh1g/giieX0NLCaMnb4hEiVFqnop2ImTXCc5e0/oHz3LTqmHGtExn5hfMkOA==", + "dev": true, + "requires": { + "minimist": "^1.2.5" + }, + "dependencies": { + "minimist": { + "version": "1.2.5", + "resolved": "https://registry.npmjs.org/minimist/-/minimist-1.2.5.tgz", + "integrity": "sha512-FM9nNUYrRBAELZQT3xeZQ7fmMOBg6nWNmJKTcgsJeaLstP/UODVpGsr5OhXhhXg6f+qtJ8uiZ+PUxkDWcgIXLw==", + "dev": true + } + } + }, + "jsx-ast-utils": { + "version": "2.4.1", + "resolved": "https://registry.npmjs.org/jsx-ast-utils/-/jsx-ast-utils-2.4.1.tgz", + "integrity": "sha512-z1xSldJ6imESSzOjd3NNkieVJKRlKYSOtMG8SFyCj2FIrvSaSuli/WjpBkEzCBoR9bYYYFgqJw61Xhu7Lcgk+w==", + "dev": true, + "requires": { + "array-includes": "^3.1.1", + "object.assign": "^4.1.0" + } + }, + "kind-of": { + "version": "6.0.3", + "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-6.0.3.tgz", + "integrity": "sha512-dcS1ul+9tmeD95T+x28/ehLgd9mENa3LsvDTtzm3vyBEO7RPptvAD+t44WVXaUjTBRcrpFeFlC8WCruUR456hw==", + "dev": true + }, + "known-css-properties": { + "version": "0.19.0", + "resolved": "https://registry.npmjs.org/known-css-properties/-/known-css-properties-0.19.0.tgz", + "integrity": "sha512-eYboRV94Vco725nKMlpkn3nV2+96p9c3gKXRsYqAJSswSENvBhN7n5L+uDhY58xQa0UukWsDMTGELzmD8Q+wTA==", + "dev": true + }, + "language-subtag-registry": { + "version": "0.3.20", + "resolved": "https://registry.npmjs.org/language-subtag-registry/-/language-subtag-registry-0.3.20.tgz", + "integrity": "sha512-KPMwROklF4tEx283Xw0pNKtfTj1gZ4UByp4EsIFWLgBavJltF4TiYPc39k06zSTsLzxTVXXDSpbwaQXaFB4Qeg==", + "dev": true + }, + "language-tags": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/language-tags/-/language-tags-1.0.5.tgz", + "integrity": "sha1-0yHbxNowuovzAk4ED6XBRmH5GTo=", + "dev": true, + "requires": { + "language-subtag-registry": "~0.3.2" + } + }, + "leven": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/leven/-/leven-3.1.0.tgz", + "integrity": "sha512-qsda+H8jTaUaN/x5vzW2rzc+8Rw4TAQ/4KjB46IwK5VH+IlVeeeje/EoZRpiXvIqjFgK84QffqPztGI3VBLG1A==", + "dev": true + }, + "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" + } + }, + "lines-and-columns": { + "version": "1.1.6", + "resolved": "https://registry.npmjs.org/lines-and-columns/-/lines-and-columns-1.1.6.tgz", + "integrity": "sha1-HADHQ7QzzQpOgHWPe2SldEDZ/wA=", + "dev": true + }, + "locate-path": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-5.0.0.tgz", + "integrity": "sha512-t7hw9pI+WvuwNJXwk5zVHpyhIqzg2qTlklJOf0mVxGSbe3Fp2VieZcduNYjaLDoy6p9uGpQEGWG87WpMKlNq8g==", + "dev": true, + "requires": { + "p-locate": "^4.1.0" + } + }, + "lodash": { + "version": "4.17.20", + "resolved": "https://registry.npmjs.org/lodash/-/lodash-4.17.20.tgz", + "integrity": "sha512-PlhdFcillOINfeV7Ni6oF1TAEayyZBoZ8bcshTHqOYJYlrqzRK5hagpagky5o4HfCzzd1TRkXPMFq6cKk9rGmA==", + "dev": true + }, + "log-symbols": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/log-symbols/-/log-symbols-4.0.0.tgz", + "integrity": "sha512-FN8JBzLx6CzeMrB0tg6pqlGU1wCrXW+ZXGH481kfsBqer0hToTIiHdjH4Mq8xJUbvATujKCvaREGWpGUionraA==", + "dev": true, + "requires": { + "chalk": "^4.0.0" + }, + "dependencies": { + "ansi-styles": { + "version": "4.2.1", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.2.1.tgz", + "integrity": "sha512-9VGjrMsG1vePxcSweQsN20KY/c4zN0h9fLjqAbwbPfahM3t+NL+M9HC8xeXG2I8pX5NoamTGNuomEUFI7fcUjA==", + "dev": true, + "requires": { + "@types/color-name": "^1.1.1", + "color-convert": "^2.0.1" + } + }, + "chalk": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.0.tgz", + "integrity": "sha512-qwx12AxXe2Q5xQ43Ac//I6v5aXTipYrSESdOgzrN+9XjgEpyjpKuvSGaN4qE93f7TQTlerQQ8S+EQ0EyDoVL1A==", + "dev": true, + "requires": { + "ansi-styles": "^4.1.0", + "supports-color": "^7.1.0" + } + }, + "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 + }, + "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 + }, + "supports-color": { + "version": "7.1.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.1.0.tgz", + "integrity": "sha512-oRSIpR8pxT1Wr2FquTNnGet79b3BWljqOuoW/h4oBhxJ/HUbX5nX6JSruTkvXDCFMwDPvsaTTbvMLKZWSy0R5g==", + "dev": true, + "requires": { + "has-flag": "^4.0.0" + } + } + } + }, + "longest-streak": { + "version": "2.0.4", + "resolved": "https://registry.npmjs.org/longest-streak/-/longest-streak-2.0.4.tgz", + "integrity": "sha512-vM6rUVCVUJJt33bnmHiZEvr7wPT78ztX7rojL+LW51bHtLh6HTjx84LA5W4+oa6aKEJA7jJu5LR6vQRBpA5DVg==", + "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" + } + }, + "map-obj": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/map-obj/-/map-obj-1.0.1.tgz", + "integrity": "sha1-2TPOuSBdgr3PSIb2dCvcK03qFG0=", + "dev": true + }, + "markdown-escapes": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/markdown-escapes/-/markdown-escapes-1.0.4.tgz", + "integrity": "sha512-8z4efJYk43E0upd0NbVXwgSTQs6cT3T06etieCMEg7dRbzCbxUCK/GHlX8mhHRDcp+OLlHkPKsvqQTCvsRl2cg==", + "dev": true + }, + "markdown-table": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/markdown-table/-/markdown-table-2.0.0.tgz", + "integrity": "sha512-Ezda85ToJUBhM6WGaG6veasyym+Tbs3cMAw/ZhOPqXiYsr0jgocBV3j3nx+4lk47plLlIqjwuTm/ywVI+zjJ/A==", + "dev": true, + "requires": { + "repeat-string": "^1.0.0" + } + }, + "mathml-tag-names": { + "version": "2.1.3", + "resolved": "https://registry.npmjs.org/mathml-tag-names/-/mathml-tag-names-2.1.3.tgz", + "integrity": "sha512-APMBEanjybaPzUrfqU0IMU5I0AswKMH7k8OTLs0vvV4KZpExkTkY87nR/zpbuTPj+gARop7aGUbl11pnDfW6xg==", + "dev": true + }, + "mdast-util-compact": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/mdast-util-compact/-/mdast-util-compact-2.0.1.tgz", + "integrity": "sha512-7GlnT24gEwDrdAwEHrU4Vv5lLWrEer4KOkAiKT9nYstsTad7Oc1TwqT2zIMKRdZF7cTuaf+GA1E4Kv7jJh8mPA==", + "dev": true, + "requires": { + "unist-util-visit": "^2.0.0" + } + }, + "merge2": { + "version": "1.4.1", + "resolved": "https://registry.npmjs.org/merge2/-/merge2-1.4.1.tgz", + "integrity": "sha512-8q7VEgMJW4J8tcfVPy8g09NcQwZdbwFEqhe/WZkoIzjn/3TGDwtOCYtXGxA3O8tPzpczCCDgv+P2P5y00ZJOOg==", + "dev": true + }, + "micromatch": { + "version": "4.0.2", + "resolved": "https://registry.npmjs.org/micromatch/-/micromatch-4.0.2.tgz", + "integrity": "sha512-y7FpHSbMUMoyPbYUSzO6PaZ6FyRnQOpHuKwbo1G+Knck95XVU4QAiKdGEnj5wwoS7PlOgthX/09u5iFJ+aYf5Q==", + "dev": true, + "requires": { + "braces": "^3.0.1", + "picomatch": "^2.0.5" + } + }, + "min-indent": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/min-indent/-/min-indent-1.0.1.tgz", + "integrity": "sha512-I9jwMn07Sy/IwOj3zVkVik2JTvgpaykDZEigL6Rx6N9LbMywwUSMtxET+7lVoDLLd3O3IXwJwvuuns8UB/HeAg==", + "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 + }, + "minimist-options": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/minimist-options/-/minimist-options-4.1.0.tgz", + "integrity": "sha512-Q4r8ghd80yhO/0j1O3B2BjweX3fiHg9cdOwjJd2J76Q135c+NDxGCqdYKQ1SKBuFfgWbAUzBfvYjPUEeNgqN1A==", + "dev": true, + "requires": { + "arrify": "^1.0.1", + "is-plain-obj": "^1.1.0", + "kind-of": "^6.0.3" + }, + "dependencies": { + "is-plain-obj": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/is-plain-obj/-/is-plain-obj-1.1.0.tgz", + "integrity": "sha1-caUMhCnfync8kqOQpKA7OfzVHT4=", + "dev": true + } + } + }, + "mkdirp": { + "version": "0.5.5", + "resolved": "https://registry.npmjs.org/mkdirp/-/mkdirp-0.5.5.tgz", + "integrity": "sha512-NKmAlESf6jMGym1++R0Ra7wvhV+wFW63FaSOFPwRahvea0gMUcGUhVeAg/0BC0wiv9ih5NYPB1Wn1UEI1/L+xQ==", + "dev": true, + "requires": { + "minimist": "^1.2.5" + } + }, + "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 + }, + "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": "1.1.60", + "resolved": "https://registry.npmjs.org/node-releases/-/node-releases-1.1.60.tgz", + "integrity": "sha512-gsO4vjEdQaTusZAEebUWp2a5d7dF5DYoIpDG7WySnk7BuZDW+GPpHXoXXuYawRBr/9t5q54tirPz79kFIWg4dA==", + "dev": true + }, + "normalize-range": { + "version": "0.1.2", + "resolved": "https://registry.npmjs.org/normalize-range/-/normalize-range-0.1.2.tgz", + "integrity": "sha1-LRDAa9/TEuqXd2laTShDlFa3WUI=", + "dev": true + }, + "normalize-selector": { + "version": "0.2.0", + "resolved": "https://registry.npmjs.org/normalize-selector/-/normalize-selector-0.2.0.tgz", + "integrity": "sha1-0LFF62kRicY6eNIB3E/bEpPvDAM=", + "dev": true + }, + "num2fraction": { + "version": "1.2.2", + "resolved": "https://registry.npmjs.org/num2fraction/-/num2fraction-1.2.2.tgz", + "integrity": "sha1-b2gragJ6Tp3fpFZM0lidHU5mnt4=", + "dev": true + }, + "object-assign": { + "version": "4.1.1", + "resolved": "https://registry.npmjs.org/object-assign/-/object-assign-4.1.1.tgz", + "integrity": "sha1-IQmtx5ZYh8/AXLvUQsrIv7s2CGM=", + "dev": true + }, + "object-inspect": { + "version": "1.8.0", + "resolved": "https://registry.npmjs.org/object-inspect/-/object-inspect-1.8.0.tgz", + "integrity": "sha512-jLdtEOB112fORuypAyl/50VRVIBIdVQOSUUGQHzJ4xBSbit81zRarz7GThkEFZy1RceYrWYcPcBFPQwHyAc1gA==", + "dev": true + }, + "object-keys": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/object-keys/-/object-keys-1.1.1.tgz", + "integrity": "sha512-NuAESUOUMrlIXOfHKzD6bpPu3tYt3xvjNdRIQ+FeT0lNb4K8WR70CaDxhuNguS2XG+GjkyMwOzsN5ZktImfhLA==", + "dev": true + }, + "object.assign": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/object.assign/-/object.assign-4.1.0.tgz", + "integrity": "sha512-exHJeq6kBKj58mqGyTQ9DFvrZC/eR6OwxzoM9YRoGBqrXYonaFyGiFMuc9VZrXf7DarreEwMpurG3dd+CNyW5w==", + "dev": true, + "requires": { + "define-properties": "^1.1.2", + "function-bind": "^1.1.1", + "has-symbols": "^1.0.0", + "object-keys": "^1.0.11" + } + }, + "object.entries": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/object.entries/-/object.entries-1.1.2.tgz", + "integrity": "sha512-BQdB9qKmb/HyNdMNWVr7O3+z5MUIx3aiegEIJqjMBbBf0YT9RRxTJSim4mzFqtyr7PDAHigq0N9dO0m0tRakQA==", + "dev": true, + "requires": { + "define-properties": "^1.1.3", + "es-abstract": "^1.17.5", + "has": "^1.0.3" + } + }, + "object.fromentries": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/object.fromentries/-/object.fromentries-2.0.2.tgz", + "integrity": "sha512-r3ZiBH7MQppDJVLx6fhD618GKNG40CZYH9wgwdhKxBDDbQgjeWGGd4AtkZad84d291YxvWe7bJGuE65Anh0dxQ==", + "dev": true, + "requires": { + "define-properties": "^1.1.3", + "es-abstract": "^1.17.0-next.1", + "function-bind": "^1.1.1", + "has": "^1.0.3" + } + }, + "object.values": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/object.values/-/object.values-1.1.1.tgz", + "integrity": "sha512-WTa54g2K8iu0kmS/us18jEmdv1a4Wi//BZ/DTVYEcH0XhLM5NYdpDHja3gt57VrZLcNAO2WGA+KpWsDBaHt6eA==", + "dev": true, + "requires": { + "define-properties": "^1.1.3", + "es-abstract": "^1.17.0-next.1", + "function-bind": "^1.1.1", + "has": "^1.0.3" + } + }, + "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" + } + }, + "p-limit": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-2.3.0.tgz", + "integrity": "sha512-//88mFWSJx8lxCzwdAABTJL2MyWB12+eIY7MDL2SqLmAkeKU9qxRvWuSyTjm3FUmpBEMuFfckAIqEaVGUDxb6w==", + "dev": true, + "requires": { + "p-try": "^2.0.0" + } + }, + "p-locate": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-4.1.0.tgz", + "integrity": "sha512-R79ZZ/0wAxKGu3oYMlz8jy/kbhsNrS7SKZ7PxEHBgJ5+F2mtFW2fK2cOtBh1cHYkQsbzFV7I+EoRKe6Yt0oK7A==", + "dev": true, + "requires": { + "p-limit": "^2.2.0" + } + }, + "p-try": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/p-try/-/p-try-2.2.0.tgz", + "integrity": "sha512-R4nPAVTAU0B9D35/Gk3uJf/7XYbQcyohSKdvAxIRSNghFl4e71hVoGnBNQz9cWaXxO2I10KTC+3jMdvvoKw6dQ==", + "dev": true + }, + "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" + } + }, + "parse-entities": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/parse-entities/-/parse-entities-2.0.0.tgz", + "integrity": "sha512-kkywGpCcRYhqQIchaWqZ875wzpS/bMKhz5HnN3p7wveJTkTtyAB/AlnS0f8DFSqYW1T82t6yEAkEcB+A1I3MbQ==", + "dev": true, + "requires": { + "character-entities": "^1.0.0", + "character-entities-legacy": "^1.0.0", + "character-reference-invalid": "^1.0.0", + "is-alphanumerical": "^1.0.0", + "is-decimal": "^1.0.0", + "is-hexadecimal": "^1.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.6", + "resolved": "https://registry.npmjs.org/path-parse/-/path-parse-1.0.6.tgz", + "integrity": "sha512-GSmOT2EbHrINBf9SR7CDELwlJ8AENk3Qn7OikK4nFYAu3Ote2+JYNVvkpAEQm3/TLNEJFD/xZJjzyxg3KBWOzw==", + "dev": true + }, + "picomatch": { + "version": "2.2.2", + "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-2.2.2.tgz", + "integrity": "sha512-q0M/9eZHzmr0AulXyPwNfZjtwZ/RBZlbN3K3CErVrk50T2ASYI7Bye0EvekFY3IP1Nt2DHu0re+V2ZHIpMkuWg==", + "dev": true + }, + "postcss": { + "version": "7.0.32", + "resolved": "https://registry.npmjs.org/postcss/-/postcss-7.0.32.tgz", + "integrity": "sha512-03eXong5NLnNCD05xscnGKGDZ98CyzoqPSMjOe6SuoQY7Z2hIj0Ld1g/O/UQRuOle2aRtiIRDg9tDcTGAkLfKw==", + "dev": true, + "requires": { + "chalk": "^2.4.2", + "source-map": "^0.6.1", + "supports-color": "^6.1.0" + }, + "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 + }, + "supports-color": { + "version": "6.1.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-6.1.0.tgz", + "integrity": "sha512-qe1jfm1Mg7Nq/NSh6XE24gPXROEVsWHxC1LIx//XNlD9iw7YZQGjZNjYN7xGaEG6iKdA8EtNFW6R0gjnVXp+wQ==", + "dev": true, + "requires": { + "has-flag": "^3.0.0" + } + } + } + }, + "postcss-html": { + "version": "0.36.0", + "resolved": "https://registry.npmjs.org/postcss-html/-/postcss-html-0.36.0.tgz", + "integrity": "sha512-HeiOxGcuwID0AFsNAL0ox3mW6MHH5cstWN1Z3Y+n6H+g12ih7LHdYxWwEA/QmrebctLjo79xz9ouK3MroHwOJw==", + "dev": true, + "requires": { + "htmlparser2": "^3.10.0" + } + }, + "postcss-less": { + "version": "3.1.4", + "resolved": "https://registry.npmjs.org/postcss-less/-/postcss-less-3.1.4.tgz", + "integrity": "sha512-7TvleQWNM2QLcHqvudt3VYjULVB49uiW6XzEUFmvwHzvsOEF5MwBrIXZDJQvJNFGjJQTzSzZnDoCJ8h/ljyGXA==", + "dev": true, + "requires": { + "postcss": "^7.0.14" + } + }, + "postcss-media-query-parser": { + "version": "0.2.3", + "resolved": "https://registry.npmjs.org/postcss-media-query-parser/-/postcss-media-query-parser-0.2.3.tgz", + "integrity": "sha1-J7Ocb02U+Bsac7j3Y1HGCeXO8kQ=", + "dev": true + }, + "postcss-reporter": { + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/postcss-reporter/-/postcss-reporter-6.0.1.tgz", + "integrity": "sha512-LpmQjfRWyabc+fRygxZjpRxfhRf9u/fdlKf4VHG4TSPbV2XNsuISzYW1KL+1aQzx53CAppa1bKG4APIB/DOXXw==", + "dev": true, + "requires": { + "chalk": "^2.4.1", + "lodash": "^4.17.11", + "log-symbols": "^2.2.0", + "postcss": "^7.0.7" + }, + "dependencies": { + "log-symbols": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/log-symbols/-/log-symbols-2.2.0.tgz", + "integrity": "sha512-VeIAFslyIerEJLXHziedo2basKbMKtTw3vfn5IzG0XTjhAVEJyNHnL2p7vc+wBDSdQuUpNw3M2u6xb9QsAY5Eg==", + "dev": true, + "requires": { + "chalk": "^2.0.1" + } + } + } + }, + "postcss-resolve-nested-selector": { + "version": "0.1.1", + "resolved": "https://registry.npmjs.org/postcss-resolve-nested-selector/-/postcss-resolve-nested-selector-0.1.1.tgz", + "integrity": "sha1-Kcy8fDfe36wwTp//C/FZaz9qDk4=", + "dev": true + }, + "postcss-safe-parser": { + "version": "4.0.2", + "resolved": "https://registry.npmjs.org/postcss-safe-parser/-/postcss-safe-parser-4.0.2.tgz", + "integrity": "sha512-Uw6ekxSWNLCPesSv/cmqf2bY/77z11O7jZGPax3ycZMFU/oi2DMH9i89AdHc1tRwFg/arFoEwX0IS3LCUxJh1g==", + "dev": true, + "requires": { + "postcss": "^7.0.26" + } + }, + "postcss-sass": { + "version": "0.4.4", + "resolved": "https://registry.npmjs.org/postcss-sass/-/postcss-sass-0.4.4.tgz", + "integrity": "sha512-BYxnVYx4mQooOhr+zer0qWbSPYnarAy8ZT7hAQtbxtgVf8gy+LSLT/hHGe35h14/pZDTw1DsxdbrwxBN++H+fg==", + "dev": true, + "requires": { + "gonzales-pe": "^4.3.0", + "postcss": "^7.0.21" + } + }, + "postcss-scss": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/postcss-scss/-/postcss-scss-2.1.1.tgz", + "integrity": "sha512-jQmGnj0hSGLd9RscFw9LyuSVAa5Bl1/KBPqG1NQw9w8ND55nY4ZEsdlVuYJvLPpV+y0nwTV5v/4rHPzZRihQbA==", + "dev": true, + "requires": { + "postcss": "^7.0.6" + } + }, + "postcss-selector-parser": { + "version": "6.0.2", + "resolved": "https://registry.npmjs.org/postcss-selector-parser/-/postcss-selector-parser-6.0.2.tgz", + "integrity": "sha512-36P2QR59jDTOAiIkqEprfJDsoNrvwFei3eCqKd1Y0tUsBimsq39BLp7RD+JWny3WgB1zGhJX8XVePwm9k4wdBg==", + "dev": true, + "requires": { + "cssesc": "^3.0.0", + "indexes-of": "^1.0.1", + "uniq": "^1.0.1" + } + }, + "postcss-syntax": { + "version": "0.36.2", + "resolved": "https://registry.npmjs.org/postcss-syntax/-/postcss-syntax-0.36.2.tgz", + "integrity": "sha512-nBRg/i7E3SOHWxF3PpF5WnJM/jQ1YpY9000OaVXlAQj6Zp/kIqJxEDWIZ67tAd7NLuk7zqN4yqe9nc0oNAOs1w==", + "dev": true + }, + "postcss-value-parser": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/postcss-value-parser/-/postcss-value-parser-4.1.0.tgz", + "integrity": "sha512-97DXOFbQJhk71ne5/Mt6cOu6yxsSfM0QGQyl0L25Gca4yGWEGJaig7l7gbCX623VqTBNGLRLaVUCnNkcedlRSQ==", + "dev": true + }, + "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": "npm:wp-prettier@2.0.5", + "resolved": "https://registry.npmjs.org/wp-prettier/-/wp-prettier-2.0.5.tgz", + "integrity": "sha512-5GCgdeevIXwR3cW4Qj5XWC5MO1iSCz8+IPn0mMw6awAt/PBiey8yyO7MhePRsaMqghJAhg6Q3QLYWSnUHWkG6A==", + "dev": true + }, + "prettier-linter-helpers": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/prettier-linter-helpers/-/prettier-linter-helpers-1.0.0.tgz", + "integrity": "sha512-GbK2cP9nraSSUF9N2XwUwqfzlAFlMNYYl+ShE/V+H8a9uNl/oUqB1w2EL54Jh0OlyRSd8RfWYJ3coVS4TROP2w==", + "dev": true, + "requires": { + "fast-diff": "^1.1.2" + } + }, + "progress": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/progress/-/progress-2.0.3.tgz", + "integrity": "sha512-7PiHtLll5LdnKIMw100I+8xJXR5gW2QwWYkT6iJva0bXitZKa/XMrSbdmg3r2Xnaidz9Qumd0VPaMrZlF9V9sA==", + "dev": true + }, + "prop-types": { + "version": "15.7.2", + "resolved": "https://registry.npmjs.org/prop-types/-/prop-types-15.7.2.tgz", + "integrity": "sha512-8QQikdH7//R2vurIJSutZ1smHYTcLpRWEOlHnzcWHmBYrOGUysKwSsrC89BCiFj3CbrfJ/nXFdJepOVrY1GCHQ==", + "dev": true, + "requires": { + "loose-envify": "^1.4.0", + "object-assign": "^4.1.1", + "react-is": "^16.8.1" + } + }, + "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 + }, + "quick-lru": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/quick-lru/-/quick-lru-4.0.1.tgz", + "integrity": "sha512-ARhCpm70fzdcvNQfPoy49IaanKkTlRWF2JMzqhcJbhSFRZv7nPTvZJdcY7301IPmvW+/p0RgIWnQDLJxifsQ7g==", + "dev": true + }, + "react-is": { + "version": "16.13.1", + "resolved": "https://registry.npmjs.org/react-is/-/react-is-16.13.1.tgz", + "integrity": "sha512-24e6ynE2H+OKt4kqsOvNd8kBpV65zoxbA4BVsEOB3ARVWQki/DHzaUoC5KuON/BiccDaCCTZBuOcfZs70kR8bQ==", + "dev": true + }, + "regenerator-runtime": { + "version": "0.13.7", + "resolved": "https://registry.npmjs.org/regenerator-runtime/-/regenerator-runtime-0.13.7.tgz", + "integrity": "sha512-a54FxoJDIr27pgf7IgeQGxmqUNYrcV338lf/6gH456HZ/PhX+5BcwHXG9ajESmwe6WRO0tAzRUrRmNONWgkrew==", + "dev": true + }, + "regexp.prototype.flags": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/regexp.prototype.flags/-/regexp.prototype.flags-1.3.0.tgz", + "integrity": "sha512-2+Q0C5g951OlYlJz6yu5/M33IcsESLlLfsyIaLJaG4FA2r4yP8MvVMJUUP/fVBkSpbbbZlS5gynbEWLipiiXiQ==", + "dev": true, + "requires": { + "define-properties": "^1.1.3", + "es-abstract": "^1.17.0-next.1" + } + }, + "regexpp": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/regexpp/-/regexpp-3.1.0.tgz", + "integrity": "sha512-ZOIzd8yVsQQA7j8GCSlPGXwg5PfmA1mrq0JP4nGhh54LaKN3xdai/vHUDu74pKwV8OxseMS65u2NImosQcSD0Q==", + "dev": true + }, + "regextras": { + "version": "0.7.1", + "resolved": "https://registry.npmjs.org/regextras/-/regextras-0.7.1.tgz", + "integrity": "sha512-9YXf6xtW+qzQ+hcMQXx95MOvfqXFgsKDZodX3qZB0x2n5Z94ioetIITsBtvJbiOyxa/6s9AtyweBLCdPmPko/w==", + "dev": true + }, + "remark": { + "version": "12.0.1", + "resolved": "https://registry.npmjs.org/remark/-/remark-12.0.1.tgz", + "integrity": "sha512-gS7HDonkdIaHmmP/+shCPejCEEW+liMp/t/QwmF0Xt47Rpuhl32lLtDV1uKWvGoq+kxr5jSgg5oAIpGuyULjUw==", + "dev": true, + "requires": { + "remark-parse": "^8.0.0", + "remark-stringify": "^8.0.0", + "unified": "^9.0.0" + } + }, + "remark-parse": { + "version": "8.0.3", + "resolved": "https://registry.npmjs.org/remark-parse/-/remark-parse-8.0.3.tgz", + "integrity": "sha512-E1K9+QLGgggHxCQtLt++uXltxEprmWzNfg+MxpfHsZlrddKzZ/hZyWHDbK3/Ap8HJQqYJRXP+jHczdL6q6i85Q==", + "dev": true, + "requires": { + "ccount": "^1.0.0", + "collapse-white-space": "^1.0.2", + "is-alphabetical": "^1.0.0", + "is-decimal": "^1.0.0", + "is-whitespace-character": "^1.0.0", + "is-word-character": "^1.0.0", + "markdown-escapes": "^1.0.0", + "parse-entities": "^2.0.0", + "repeat-string": "^1.5.4", + "state-toggle": "^1.0.0", + "trim": "0.0.1", + "trim-trailing-lines": "^1.0.0", + "unherit": "^1.0.4", + "unist-util-remove-position": "^2.0.0", + "vfile-location": "^3.0.0", + "xtend": "^4.0.1" + } + }, + "remark-stringify": { + "version": "8.1.1", + "resolved": "https://registry.npmjs.org/remark-stringify/-/remark-stringify-8.1.1.tgz", + "integrity": "sha512-q4EyPZT3PcA3Eq7vPpT6bIdokXzFGp9i85igjmhRyXWmPs0Y6/d2FYwUNotKAWyLch7g0ASZJn/KHHcHZQ163A==", + "dev": true, + "requires": { + "ccount": "^1.0.0", + "is-alphanumeric": "^1.0.0", + "is-decimal": "^1.0.0", + "is-whitespace-character": "^1.0.0", + "longest-streak": "^2.0.1", + "markdown-escapes": "^1.0.0", + "markdown-table": "^2.0.0", + "mdast-util-compact": "^2.0.0", + "parse-entities": "^2.0.0", + "repeat-string": "^1.5.4", + "state-toggle": "^1.0.0", + "stringify-entities": "^3.0.0", + "unherit": "^1.0.4", + "xtend": "^4.0.1" + } + }, + "repeat-string": { + "version": "1.6.1", + "resolved": "https://registry.npmjs.org/repeat-string/-/repeat-string-1.6.1.tgz", + "integrity": "sha1-jcrkcOHIirwtYA//Sndihtp15jc=", + "dev": true + }, + "replace-ext": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/replace-ext/-/replace-ext-1.0.0.tgz", + "integrity": "sha1-3mMSg3P8v3w8z6TeWkgMRaZ5WOs=", + "dev": true + }, + "requireindex": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/requireindex/-/requireindex-1.2.0.tgz", + "integrity": "sha512-L9jEkOi3ASd9PYit2cwRfyppc9NoABujTP8/5gFcbERmo5jUoAKovIC3fsF17pkTnGsrByysqX+Kxd2OTNI1ww==", + "dev": true + }, + "reusify": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/reusify/-/reusify-1.0.4.tgz", + "integrity": "sha512-U9nH88a3fc/ekCF1l0/UP1IosiuIjyTh7hBvXVMHYgVcfGvt897Xguj2UOLDeI5BG2m7/uwyaLVT6fbtCwTyzw==", + "dev": true + }, + "rimraf": { + "version": "2.6.3", + "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-2.6.3.tgz", + "integrity": "sha512-mwqeW5XsA2qAejG46gYdENaxXjx9onRNCfn7L0duuP4hCuTIi/QO7PDK07KJfp1d+izWPrzEJDcSqBa0OZQriA==", + "dev": true, + "requires": { + "glob": "^7.1.3" + }, + "dependencies": { + "glob": { + "version": "7.1.3", + "resolved": "https://registry.npmjs.org/glob/-/glob-7.1.3.tgz", + "integrity": "sha512-vcfuiIxogLV4DlGBHIUOwI0IbrJ8HWPc4MU7HzviGeNho/UJDfi6B5p3sHeWIQ0KGIU0Jpxi5ZHxemQfLkkAwQ==", + "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" + } + } + } + }, + "run-parallel": { + "version": "1.1.9", + "resolved": "https://registry.npmjs.org/run-parallel/-/run-parallel-1.1.9.tgz", + "integrity": "sha512-DEqnSRTDw/Tc3FXf49zedI638Z9onwUotBMiUFKmrO2sdFKIbXamXGQ3Axd4qgphxKB4kw/qP1w5kTxnfU1B9Q==", + "dev": true + }, + "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 + }, + "semver": { + "version": "5.6.0", + "resolved": "https://registry.npmjs.org/semver/-/semver-5.6.0.tgz", + "integrity": "sha512-RS9R6R35NYgQn++fkDWaOmqGoj4Ek9gGs+DPxNUZKuwE183xjJroKvyo1IzVFeXvUrvmALy6FWD5xrdJT25gMg==", + "dev": true + }, + "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 + }, + "side-channel": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/side-channel/-/side-channel-1.0.2.tgz", + "integrity": "sha512-7rL9YlPHg7Ancea1S96Pa8/QWb4BtXL/TZvS6B8XFetGBeuhAsfmUspK6DokBeZ64+Kj9TCNRD/30pVz1BvQNA==", + "dev": true, + "requires": { + "es-abstract": "^1.17.0-next.1", + "object-inspect": "^1.7.0" + } + }, + "signal-exit": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/signal-exit/-/signal-exit-3.0.2.tgz", + "integrity": "sha1-tf3AjxKH6hF4Yo5BXiUTK3NkbG0=", + "dev": true + }, + "slash": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/slash/-/slash-3.0.0.tgz", + "integrity": "sha512-g9Q1haeby36OSStwb4ntCGGGaKsaVSjQ68fBxoQcutl5fS1vuY18H3wSt3jFyFtrkx+Kz0V1G85A4MyAdDMi2Q==", + "dev": true + }, + "slice-ansi": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/slice-ansi/-/slice-ansi-2.1.0.tgz", + "integrity": "sha512-Qu+VC3EwYLldKa1fCxuuvULvSJOKEgk9pi8dZeCVK7TqBfUNTH4sFkk4joj8afVSfAYgJoSOetjx9QWOJ5mYoQ==", + "dev": true, + "requires": { + "ansi-styles": "^3.2.0", + "astral-regex": "^1.0.0", + "is-fullwidth-code-point": "^2.0.0" + } + }, + "spdx-correct": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/spdx-correct/-/spdx-correct-3.1.0.tgz", + "integrity": "sha512-lr2EZCctC2BNR7j7WzJ2FpDznxky1sjfxvvYEyzxNyb6lZXHODmEoJeFu4JupYlkfha1KZpJyoqiJ7pgA1qq8Q==", + "dev": true, + "requires": { + "spdx-expression-parse": "^3.0.0", + "spdx-license-ids": "^3.0.0" + } + }, + "spdx-exceptions": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/spdx-exceptions/-/spdx-exceptions-2.2.0.tgz", + "integrity": "sha512-2XQACfElKi9SlVb1CYadKDXvoajPgBVPn/gOQLrTvHdElaVhr7ZEbqJaRnJLVNeaI4cMEAgVCeBMKF6MWRDCRA==", + "dev": true + }, + "spdx-expression-parse": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/spdx-expression-parse/-/spdx-expression-parse-3.0.0.tgz", + "integrity": "sha512-Yg6D3XpRD4kkOmTpdgbUiEJFKghJH03fiC1OPll5h/0sO6neh2jqRDVHOQ4o/LMea0tgCkbMgea5ip/e+MkWyg==", + "dev": true, + "requires": { + "spdx-exceptions": "^2.1.0", + "spdx-license-ids": "^3.0.0" + } + }, + "spdx-license-ids": { + "version": "3.0.3", + "resolved": "https://registry.npmjs.org/spdx-license-ids/-/spdx-license-ids-3.0.3.tgz", + "integrity": "sha512-uBIcIl3Ih6Phe3XHK1NqboJLdGfwr1UN3k6wSD1dZpmPsIkb8AGNbZYJ1fOBk834+Gxy8rpfDxrS6XLEMZMY2g==", + "dev": true + }, + "specificity": { + "version": "0.4.1", + "resolved": "https://registry.npmjs.org/specificity/-/specificity-0.4.1.tgz", + "integrity": "sha512-1klA3Gi5PD1Wv9Q0wUoOQN1IWAuPu0D1U03ThXTr0cJ20+/iq2tHSDnK7Kk/0LXJ1ztUB2/1Os0wKmfyNgUQfg==", + "dev": true + }, + "state-toggle": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/state-toggle/-/state-toggle-1.0.3.tgz", + "integrity": "sha512-d/5Z4/2iiCnHw6Xzghyhb+GcmF89bxwgXG60wjIiZaxnymbyOmI8Hk4VqHXiVVp6u2ysaskFfXg3ekCj4WNftQ==", + "dev": true + }, + "string-width": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/string-width/-/string-width-3.1.0.tgz", + "integrity": "sha512-vafcv6KjVZKSgz06oM/H6GDBrAtz8vdhQakGjFIvNrHA6y3HCF1CInLy+QLq8dTJPQ1b+KDUqDFctkdRW44e1w==", + "dev": true, + "requires": { + "emoji-regex": "^7.0.1", + "is-fullwidth-code-point": "^2.0.0", + "strip-ansi": "^5.1.0" + }, + "dependencies": { + "ansi-regex": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-4.1.0.tgz", + "integrity": "sha512-1apePfXM1UOSqw0o9IiFAovVz9M5S1Dg+4TrDwfMewQ6p/rmMueb7tWZjQ1rx4Loy1ArBggoqGpfqqdI4rondg==", + "dev": true + }, + "emoji-regex": { + "version": "7.0.3", + "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-7.0.3.tgz", + "integrity": "sha512-CwBLREIQ7LvYFB0WyRvwhq5N5qPhc6PMjD6bYggFlI5YyDgl+0vxq5VHbMOFqLg7hfWzmu8T5Z1QofhmTIhItA==", + "dev": true + }, + "strip-ansi": { + "version": "5.2.0", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-5.2.0.tgz", + "integrity": "sha512-DuRs1gKbBqsMKIZlrffwlug8MHkcnpjs5VPmL1PAh+mA30U0DTotfDZ0d2UUsXpPmPmMMJ6W773MaA3J+lbiWA==", + "dev": true, + "requires": { + "ansi-regex": "^4.1.0" + } + } + } + }, + "string.prototype.matchall": { + "version": "4.0.2", + "resolved": "https://registry.npmjs.org/string.prototype.matchall/-/string.prototype.matchall-4.0.2.tgz", + "integrity": "sha512-N/jp6O5fMf9os0JU3E72Qhf590RSRZU/ungsL/qJUYVTNv7hTG0P/dbPjxINVN9jpscu3nzYwKESU3P3RY5tOg==", + "dev": true, + "requires": { + "define-properties": "^1.1.3", + "es-abstract": "^1.17.0", + "has-symbols": "^1.0.1", + "internal-slot": "^1.0.2", + "regexp.prototype.flags": "^1.3.0", + "side-channel": "^1.0.2" + } + }, + "string.prototype.trimend": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/string.prototype.trimend/-/string.prototype.trimend-1.0.1.tgz", + "integrity": "sha512-LRPxFUaTtpqYsTeNKaFOw3R4bxIzWOnbQ837QfBylo8jIxtcbK/A/sMV7Q+OAV/vWo+7s25pOE10KYSjaSO06g==", + "dev": true, + "requires": { + "define-properties": "^1.1.3", + "es-abstract": "^1.17.5" + } + }, + "string.prototype.trimstart": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/string.prototype.trimstart/-/string.prototype.trimstart-1.0.1.tgz", + "integrity": "sha512-XxZn+QpvrBI1FOcg6dIpxUPgWCPuNXvMD72aaRaUQv1eD4e/Qy8i/hFTe0BUmD60p/QA6bh1avmuPTfNjqVWRw==", + "dev": true, + "requires": { + "define-properties": "^1.1.3", + "es-abstract": "^1.17.5" + } + }, + "string_decoder": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.1.1.tgz", + "integrity": "sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg==", + "dev": true, + "requires": { + "safe-buffer": "~5.1.0" + } + }, + "stringify-entities": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/stringify-entities/-/stringify-entities-3.0.1.tgz", + "integrity": "sha512-Lsk3ISA2++eJYqBMPKcr/8eby1I6L0gP0NlxF8Zja6c05yr/yCYyb2c9PwXjd08Ib3If1vn1rbs1H5ZtVuOfvQ==", + "dev": true, + "requires": { + "character-entities-html4": "^1.0.0", + "character-entities-legacy": "^1.0.0", + "is-alphanumerical": "^1.0.0", + "is-decimal": "^1.0.2", + "is-hexadecimal": "^1.0.0" + } + }, + "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 + }, + "style-search": { + "version": "0.1.0", + "resolved": "https://registry.npmjs.org/style-search/-/style-search-0.1.0.tgz", + "integrity": "sha1-eVjHk+R+MuB9K1yv5cC/jhLneQI=", + "dev": true + }, + "stylelint": { + "version": "13.6.1", + "resolved": "https://registry.npmjs.org/stylelint/-/stylelint-13.6.1.tgz", + "integrity": "sha512-XyvKyNE7eyrqkuZ85Citd/Uv3ljGiuYHC6UiztTR6sWS9rza8j3UeQv/eGcQS9NZz/imiC4GKdk1EVL3wst5vw==", + "dev": true, + "requires": { + "@stylelint/postcss-css-in-js": "^0.37.1", + "@stylelint/postcss-markdown": "^0.36.1", + "autoprefixer": "^9.8.0", + "balanced-match": "^1.0.0", + "chalk": "^4.1.0", + "cosmiconfig": "^6.0.0", + "debug": "^4.1.1", + "execall": "^2.0.0", + "file-entry-cache": "^5.0.1", + "get-stdin": "^8.0.0", + "global-modules": "^2.0.0", + "globby": "^11.0.1", + "globjoin": "^0.1.4", + "html-tags": "^3.1.0", + "ignore": "^5.1.8", + "import-lazy": "^4.0.0", + "imurmurhash": "^0.1.4", + "known-css-properties": "^0.19.0", + "leven": "^3.1.0", + "lodash": "^4.17.15", + "log-symbols": "^4.0.0", + "mathml-tag-names": "^2.1.3", + "meow": "^7.0.1", + "micromatch": "^4.0.2", + "normalize-selector": "^0.2.0", + "postcss": "^7.0.32", + "postcss-html": "^0.36.0", + "postcss-less": "^3.1.4", + "postcss-media-query-parser": "^0.2.3", + "postcss-reporter": "^6.0.1", + "postcss-resolve-nested-selector": "^0.1.1", + "postcss-safe-parser": "^4.0.2", + "postcss-sass": "^0.4.4", + "postcss-scss": "^2.1.1", + "postcss-selector-parser": "^6.0.2", + "postcss-syntax": "^0.36.2", + "postcss-value-parser": "^4.1.0", + "resolve-from": "^5.0.0", + "slash": "^3.0.0", + "specificity": "^0.4.1", + "string-width": "^4.2.0", + "strip-ansi": "^6.0.0", + "style-search": "^0.1.0", + "sugarss": "^2.0.0", + "svg-tags": "^1.0.0", + "table": "^5.4.6", + "v8-compile-cache": "^2.1.1", + "write-file-atomic": "^3.0.3" + }, + "dependencies": { + "ansi-regex": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.0.tgz", + "integrity": "sha512-bY6fj56OUQ0hU1KjFNDQuJFezqKdrAyFdIevADiqrWHwSlbmBNMHp5ak2f40Pm8JTFyM2mqxkG6ngkHO11f/lg==", + "dev": true + }, + "ansi-styles": { + "version": "4.2.1", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.2.1.tgz", + "integrity": "sha512-9VGjrMsG1vePxcSweQsN20KY/c4zN0h9fLjqAbwbPfahM3t+NL+M9HC8xeXG2I8pX5NoamTGNuomEUFI7fcUjA==", + "dev": true, + "requires": { + "@types/color-name": "^1.1.1", + "color-convert": "^2.0.1" + } + }, + "camelcase": { + "version": "5.3.1", + "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-5.3.1.tgz", + "integrity": "sha512-L28STB170nwWS63UjtlEOE3dldQApaJXZkOI1uMFfzf3rRuPegHaHesyee+YxQ+W6SvRDQV6UrdOdRiR153wJg==", + "dev": true + }, + "camelcase-keys": { + "version": "6.2.2", + "resolved": "https://registry.npmjs.org/camelcase-keys/-/camelcase-keys-6.2.2.tgz", + "integrity": "sha512-YrwaA0vEKazPBkn0ipTiMpSajYDSe+KjQfrjhcBMxJt/znbvlHd8Pw/Vamaz5EB4Wfhs3SUR3Z9mwRu/P3s3Yg==", + "dev": true, + "requires": { + "camelcase": "^5.3.1", + "map-obj": "^4.0.0", + "quick-lru": "^4.0.1" + } + }, + "chalk": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.0.tgz", + "integrity": "sha512-qwx12AxXe2Q5xQ43Ac//I6v5aXTipYrSESdOgzrN+9XjgEpyjpKuvSGaN4qE93f7TQTlerQQ8S+EQ0EyDoVL1A==", + "dev": true, + "requires": { + "ansi-styles": "^4.1.0", + "supports-color": "^7.1.0" + } + }, + "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 + }, + "emoji-regex": { + "version": "8.0.0", + "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-8.0.0.tgz", + "integrity": "sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==", + "dev": true + }, + "find-up": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/find-up/-/find-up-4.1.0.tgz", + "integrity": "sha512-PpOwAdQ/YlXQ2vj8a3h8IipDuYRi3wceVQQGYWxNINccq40Anw7BlsEXCMbt1Zt+OLA6Fq9suIpIWD0OsnISlw==", + "dev": true, + "requires": { + "locate-path": "^5.0.0", + "path-exists": "^4.0.0" + } + }, + "get-stdin": { + "version": "8.0.0", + "resolved": "https://registry.npmjs.org/get-stdin/-/get-stdin-8.0.0.tgz", + "integrity": "sha512-sY22aA6xchAzprjyqmSEQv4UbAAzRN0L2dQB0NlN5acTTK9Don6nhoc3eAbUnpZiCANAMfd/+40kVdKfFygohg==", + "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 + }, + "ignore": { + "version": "5.1.8", + "resolved": "https://registry.npmjs.org/ignore/-/ignore-5.1.8.tgz", + "integrity": "sha512-BMpfD7PpiETpBl/A6S498BaIJ6Y/ABT93ETbby2fP00v4EbvPBXWEoaR1UBPKs3iR53pJY7EtZk5KACI57i1Uw==", + "dev": true + }, + "indent-string": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/indent-string/-/indent-string-4.0.0.tgz", + "integrity": "sha512-EdDDZu4A2OyIK7Lr/2zG+w5jmbuk1DVBnEwREQvBzspBJkCEbRa8GxU1lghYcaGJCnRWibjDXlq779X1/y5xwg==", + "dev": true + }, + "is-fullwidth-code-point": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-3.0.0.tgz", + "integrity": "sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg==", + "dev": true + }, + "lodash": { + "version": "4.17.20", + "resolved": "https://registry.npmjs.org/lodash/-/lodash-4.17.20.tgz", + "integrity": "sha512-PlhdFcillOINfeV7Ni6oF1TAEayyZBoZ8bcshTHqOYJYlrqzRK5hagpagky5o4HfCzzd1TRkXPMFq6cKk9rGmA==", + "dev": true + }, + "map-obj": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/map-obj/-/map-obj-4.1.0.tgz", + "integrity": "sha512-glc9y00wgtwcDmp7GaE/0b0OnxpNJsVf3ael/An6Fe2Q51LLwN1er6sdomLRzz5h0+yMpiYLhWYF5R7HeqVd4g==", + "dev": true + }, + "meow": { + "version": "7.1.0", + "resolved": "https://registry.npmjs.org/meow/-/meow-7.1.0.tgz", + "integrity": "sha512-kq5F0KVteskZ3JdfyQFivJEj2RaA8NFsS4+r9DaMKLcUHpk5OcHS3Q0XkCXONB1mZRPsu/Y/qImKri0nwSEZog==", + "dev": true, + "requires": { + "@types/minimist": "^1.2.0", + "camelcase-keys": "^6.2.2", + "decamelize-keys": "^1.1.0", + "hard-rejection": "^2.1.0", + "minimist-options": "4.1.0", + "normalize-package-data": "^2.5.0", + "read-pkg-up": "^7.0.1", + "redent": "^3.0.0", + "trim-newlines": "^3.0.0", + "type-fest": "^0.13.1", + "yargs-parser": "^18.1.3" + } + }, + "normalize-package-data": { + "version": "2.5.0", + "resolved": "https://registry.npmjs.org/normalize-package-data/-/normalize-package-data-2.5.0.tgz", + "integrity": "sha512-/5CMN3T0R4XTj4DcGaexo+roZSdSFW/0AOOTROrjxzCG1wrWXEsGbRKevjlIL+ZDE4sZlJr5ED4YW0yqmkK+eA==", + "dev": true, + "requires": { + "hosted-git-info": "^2.1.4", + "resolve": "^1.10.0", + "semver": "2 || 3 || 4 || 5", + "validate-npm-package-license": "^3.0.1" + } + }, + "parse-json": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/parse-json/-/parse-json-5.0.1.tgz", + "integrity": "sha512-ztoZ4/DYeXQq4E21v169sC8qWINGpcosGv9XhTDvg9/hWvx/zrFkc9BiWxR58OJLHGk28j5BL0SDLeV2WmFZlQ==", + "dev": true, + "requires": { + "@babel/code-frame": "^7.0.0", + "error-ex": "^1.3.1", + "json-parse-better-errors": "^1.0.1", + "lines-and-columns": "^1.1.6" + } + }, + "path-exists": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-4.0.0.tgz", + "integrity": "sha512-ak9Qy5Q7jYb2Wwcey5Fpvg2KoAc/ZIhLSLOSBmRmygPsGwkVVt0fZa0qrtMz+m6tJTAHfZQ8FnmB4MG4LWy7/w==", + "dev": true + }, + "read-pkg": { + "version": "5.2.0", + "resolved": "https://registry.npmjs.org/read-pkg/-/read-pkg-5.2.0.tgz", + "integrity": "sha512-Ug69mNOpfvKDAc2Q8DRpMjjzdtrnv9HcSMX+4VsZxD1aZ6ZzrIE7rlzXBtWTyhULSMKg076AW6WR5iZpD0JiOg==", + "dev": true, + "requires": { + "@types/normalize-package-data": "^2.4.0", + "normalize-package-data": "^2.5.0", + "parse-json": "^5.0.0", + "type-fest": "^0.6.0" + }, + "dependencies": { + "type-fest": { + "version": "0.6.0", + "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.6.0.tgz", + "integrity": "sha512-q+MB8nYR1KDLrgr4G5yemftpMC7/QLqVndBmEEdqzmNj5dcFOO4Oo8qlwZE3ULT3+Zim1F8Kq4cBnikNhlCMlg==", + "dev": true + } + } + }, + "read-pkg-up": { + "version": "7.0.1", + "resolved": "https://registry.npmjs.org/read-pkg-up/-/read-pkg-up-7.0.1.tgz", + "integrity": "sha512-zK0TB7Xd6JpCLmlLmufqykGE+/TlOePD6qKClNW7hHDKFh/J7/7gCWGR7joEQEW1bKq3a3yUZSObOoWLFQ4ohg==", + "dev": true, + "requires": { + "find-up": "^4.1.0", + "read-pkg": "^5.2.0", + "type-fest": "^0.8.1" + }, + "dependencies": { + "type-fest": { + "version": "0.8.1", + "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.8.1.tgz", + "integrity": "sha512-4dbzIzqvjtgiM5rw1k5rEHtBANKmdudhGyBEajN01fEyhaAIhsoKNy6y7+IN93IfpFtwY9iqi7kD+xwKhQsNJA==", + "dev": true + } + } + }, + "redent": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/redent/-/redent-3.0.0.tgz", + "integrity": "sha512-6tDA8g98We0zd0GvVeMT9arEOnTw9qM03L9cJXaCjrip1OO764RDBLBfrB4cwzNGDj5OA5ioymC9GkizgWJDUg==", + "dev": true, + "requires": { + "indent-string": "^4.0.0", + "strip-indent": "^3.0.0" + } + }, + "resolve": { + "version": "1.17.0", + "resolved": "https://registry.npmjs.org/resolve/-/resolve-1.17.0.tgz", + "integrity": "sha512-ic+7JYiV8Vi2yzQGFWOkiZD5Z9z7O2Zhm9XMaTxdJExKasieFCr+yXZ/WmXsckHiKl12ar0y6XiXDx3m4RHn1w==", + "dev": true, + "requires": { + "path-parse": "^1.0.6" + } + }, + "resolve-from": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/resolve-from/-/resolve-from-5.0.0.tgz", + "integrity": "sha512-qYg9KP24dD5qka9J47d0aVky0N+b4fTU89LN9iDnjB5waksiC49rvMB0PrUJQGoTmH50XPiqOvAjDfaijGxYZw==", + "dev": true + }, + "string-width": { + "version": "4.2.0", + "resolved": "https://registry.npmjs.org/string-width/-/string-width-4.2.0.tgz", + "integrity": "sha512-zUz5JD+tgqtuDjMhwIg5uFVV3dtqZ9yQJlZVfq4I01/K5Paj5UHj7VyrQOJvzawSVlKpObApbfD0Ed6yJc+1eg==", + "dev": true, + "requires": { + "emoji-regex": "^8.0.0", + "is-fullwidth-code-point": "^3.0.0", + "strip-ansi": "^6.0.0" + } + }, + "strip-ansi": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.0.tgz", + "integrity": "sha512-AuvKTrTfQNYNIctbR1K/YGTR1756GycPsg7b9bdV9Duqur4gv6aKqHXah67Z8ImS7WEz5QVcOtlfW2rZEugt6w==", + "dev": true, + "requires": { + "ansi-regex": "^5.0.0" + } + }, + "strip-indent": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/strip-indent/-/strip-indent-3.0.0.tgz", + "integrity": "sha512-laJTa3Jb+VQpaC6DseHhF7dXVqHTfJPCRDaEbid/drOhgitgYku/letMUqOXFoWV0zIIUbjpdH2t+tYj4bQMRQ==", + "dev": true, + "requires": { + "min-indent": "^1.0.0" + } + }, + "supports-color": { + "version": "7.1.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.1.0.tgz", + "integrity": "sha512-oRSIpR8pxT1Wr2FquTNnGet79b3BWljqOuoW/h4oBhxJ/HUbX5nX6JSruTkvXDCFMwDPvsaTTbvMLKZWSy0R5g==", + "dev": true, + "requires": { + "has-flag": "^4.0.0" + } + }, + "trim-newlines": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/trim-newlines/-/trim-newlines-3.0.0.tgz", + "integrity": "sha512-C4+gOpvmxaSMKuEf9Qc134F1ZuOHVXKRbtEflf4NTtuuJDEIJ9p5PXsalL8SkeRw+qit1Mo+yuvMPAKwWg/1hA==", + "dev": true + }, + "type-fest": { + "version": "0.13.1", + "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.13.1.tgz", + "integrity": "sha512-34R7HTnG0XIJcBSn5XhDd7nNFPRcXYRZrBB2O2jdKqYODldSzBAqzsWoZYYvduky73toYS/ESqxPvkDf/F0XMg==", + "dev": true + } + } + }, + "stylelint-config-recommended": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/stylelint-config-recommended/-/stylelint-config-recommended-3.0.0.tgz", + "integrity": "sha512-F6yTRuc06xr1h5Qw/ykb2LuFynJ2IxkKfCMf+1xqPffkxh0S09Zc902XCffcsw/XMFq/OzQ1w54fLIDtmRNHnQ==", + "dev": true + }, + "stylelint-config-recommended-scss": { + "version": "4.2.0", + "resolved": "https://registry.npmjs.org/stylelint-config-recommended-scss/-/stylelint-config-recommended-scss-4.2.0.tgz", + "integrity": "sha512-4bI5BYbabo/GCQ6LbRZx/ZlVkK65a1jivNNsD+ix/Lw0U3iAch+jQcvliGnnAX8SUPaZ0UqzNVNNAF3urswa7g==", + "dev": true, + "requires": { + "stylelint-config-recommended": "^3.0.0" + } + }, + "stylelint-config-wordpress": { + "version": "17.0.0", + "resolved": "https://registry.npmjs.org/stylelint-config-wordpress/-/stylelint-config-wordpress-17.0.0.tgz", + "integrity": "sha512-qUU2kVMd2ezIV9AzRdgietIfnavRRENt4180A1OMoVXIowRjjhohZgBiyVPV5EtNKo3GTO63l8g/QGNG27/h9g==", + "dev": true, + "requires": { + "stylelint-config-recommended": "^3.0.0", + "stylelint-config-recommended-scss": "^4.2.0", + "stylelint-scss": "^3.17.2" + } + }, + "stylelint-scss": { + "version": "3.18.0", + "resolved": "https://registry.npmjs.org/stylelint-scss/-/stylelint-scss-3.18.0.tgz", + "integrity": "sha512-LD7+hv/6/ApNGt7+nR/50ft7cezKP2HM5rI8avIdGaUWre3xlHfV4jKO/DRZhscfuN+Ewy9FMhcTq0CcS0C/SA==", + "dev": true, + "requires": { + "lodash": "^4.17.15", + "postcss-media-query-parser": "^0.2.3", + "postcss-resolve-nested-selector": "^0.1.1", + "postcss-selector-parser": "^6.0.2", + "postcss-value-parser": "^4.1.0" + }, + "dependencies": { + "lodash": { + "version": "4.17.20", + "resolved": "https://registry.npmjs.org/lodash/-/lodash-4.17.20.tgz", + "integrity": "sha512-PlhdFcillOINfeV7Ni6oF1TAEayyZBoZ8bcshTHqOYJYlrqzRK5hagpagky5o4HfCzzd1TRkXPMFq6cKk9rGmA==", + "dev": true + } + } + }, + "sugarss": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/sugarss/-/sugarss-2.0.0.tgz", + "integrity": "sha512-WfxjozUk0UVA4jm+U1d736AUpzSrNsQcIbyOkoE364GrtWmIrFdk5lksEupgWMD4VaT/0kVx1dobpiDumSgmJQ==", + "dev": true, + "requires": { + "postcss": "^7.0.2" + } + }, + "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" + } + }, + "svg-tags": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/svg-tags/-/svg-tags-1.0.0.tgz", + "integrity": "sha1-WPcc7jvVGbWdSyqEO2x95krAR2Q=", + "dev": true + }, + "table": { + "version": "5.4.6", + "resolved": "https://registry.npmjs.org/table/-/table-5.4.6.tgz", + "integrity": "sha512-wmEc8m4fjnob4gt5riFRtTu/6+4rSe12TpAELNSqHMfF3IqnA+CH37USM6/YR3qRZv7e56kAEAtd6nKZaxe0Ug==", + "dev": true, + "requires": { + "ajv": "^6.10.2", + "lodash": "^4.17.14", + "slice-ansi": "^2.1.0", + "string-width": "^3.0.0" + }, + "dependencies": { + "lodash": { + "version": "4.17.20", + "resolved": "https://registry.npmjs.org/lodash/-/lodash-4.17.20.tgz", + "integrity": "sha512-PlhdFcillOINfeV7Ni6oF1TAEayyZBoZ8bcshTHqOYJYlrqzRK5hagpagky5o4HfCzzd1TRkXPMFq6cKk9rGmA==", + "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" + } + }, + "trim": { + "version": "0.0.1", + "resolved": "https://registry.npmjs.org/trim/-/trim-0.0.1.tgz", + "integrity": "sha1-WFhUf2spB1fulczMZm+1AITEYN0=", + "dev": true + }, + "trim-trailing-lines": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/trim-trailing-lines/-/trim-trailing-lines-1.1.3.tgz", + "integrity": "sha512-4ku0mmjXifQcTVfYDfR5lpgV7zVqPg6zV9rdZmwOPqq0+Zq19xDqEgagqVbc4pOOShbncuAOIs59R3+3gcF3ZA==", + "dev": true + }, + "trough": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/trough/-/trough-1.0.5.tgz", + "integrity": "sha512-rvuRbTarPXmMb79SmzEp8aqXNKcK+y0XaB298IXueQ8I2PsrATcPBCSPyK/dDNa2iWOhKlfNnOjdAOTBU/nkFA==", + "dev": true + }, + "tslib": { + "version": "1.13.0", + "resolved": "https://registry.npmjs.org/tslib/-/tslib-1.13.0.tgz", + "integrity": "sha512-i/6DQjL8Xf3be4K/E6Wgpekn5Qasl1usyw++dAA35Ue5orEn65VIxOA+YvNNl9HV3qv70T7CNwjODHZrLwvd1Q==", + "dev": true + }, + "tsutils": { + "version": "3.17.1", + "resolved": "https://registry.npmjs.org/tsutils/-/tsutils-3.17.1.tgz", + "integrity": "sha512-kzeQ5B8H3w60nFY2g8cJIuH7JDpsALXySGtwGJ0p2LSjLgay3NdIpqq5SoOBe46bKDW2iq25irHCr8wjomUS2g==", + "dev": true, + "requires": { + "tslib": "^1.8.1" + } + }, + "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.8.1", + "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.8.1.tgz", + "integrity": "sha512-4dbzIzqvjtgiM5rw1k5rEHtBANKmdudhGyBEajN01fEyhaAIhsoKNy6y7+IN93IfpFtwY9iqi7kD+xwKhQsNJA==", + "dev": true + }, + "typedarray-to-buffer": { + "version": "3.1.5", + "resolved": "https://registry.npmjs.org/typedarray-to-buffer/-/typedarray-to-buffer-3.1.5.tgz", + "integrity": "sha512-zdu8XMNEDepKKR+XYOXAVPtWui0ly0NtohUscw+UmaHiAWT8hrV1rr//H6V+0DvJ3OQ19S979M0laLfX8rm82Q==", + "dev": true, + "requires": { + "is-typedarray": "^1.0.0" + } + }, + "unherit": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/unherit/-/unherit-1.1.3.tgz", + "integrity": "sha512-Ft16BJcnapDKp0+J/rqFC3Rrk6Y/Ng4nzsC028k2jdDII/rdZ7Wd3pPT/6+vIIxRagwRc9K0IUX0Ra4fKvw+WQ==", + "dev": true, + "requires": { + "inherits": "^2.0.0", + "xtend": "^4.0.0" + } + }, + "unified": { + "version": "9.1.0", + "resolved": "https://registry.npmjs.org/unified/-/unified-9.1.0.tgz", + "integrity": "sha512-VXOv7Ic6twsKGJDeZQ2wwPqXs2hM0KNu5Hkg9WgAZbSD1pxhZ7p8swqg583nw1Je2fhwHy6U8aEjiI79x1gvag==", + "dev": true, + "requires": { + "bail": "^1.0.0", + "extend": "^3.0.0", + "is-buffer": "^2.0.0", + "is-plain-obj": "^2.0.0", + "trough": "^1.0.0", + "vfile": "^4.0.0" + } + }, + "uniq": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/uniq/-/uniq-1.0.1.tgz", + "integrity": "sha1-sxxa6CVIRKOoKBVBzisEuGWnNP8=", + "dev": true + }, + "unist-util-find-all-after": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/unist-util-find-all-after/-/unist-util-find-all-after-3.0.1.tgz", + "integrity": "sha512-0GICgc++sRJesLwEYDjFVJPJttBpVQaTNgc6Jw0Jhzvfs+jtKePEMu+uD+PqkRUrAvGQqwhpDwLGWo1PK8PDEw==", + "dev": true, + "requires": { + "unist-util-is": "^4.0.0" + } + }, + "unist-util-is": { + "version": "4.0.2", + "resolved": "https://registry.npmjs.org/unist-util-is/-/unist-util-is-4.0.2.tgz", + "integrity": "sha512-Ofx8uf6haexJwI1gxWMGg6I/dLnF2yE+KibhD3/diOqY2TinLcqHXCV6OI5gFVn3xQqDH+u0M625pfKwIwgBKQ==", + "dev": true + }, + "unist-util-remove-position": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/unist-util-remove-position/-/unist-util-remove-position-2.0.1.tgz", + "integrity": "sha512-fDZsLYIe2uT+oGFnuZmy73K6ZxOPG/Qcm+w7jbEjaFcJgbQ6cqjs/eSPzXhsmGpAsWPkqZM9pYjww5QTn3LHMA==", + "dev": true, + "requires": { + "unist-util-visit": "^2.0.0" + } + }, + "unist-util-stringify-position": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/unist-util-stringify-position/-/unist-util-stringify-position-2.0.3.tgz", + "integrity": "sha512-3faScn5I+hy9VleOq/qNbAd6pAx7iH5jYBMS9I1HgQVijz/4mv5Bvw5iw1sC/90CODiKo81G/ps8AJrISn687g==", + "dev": true, + "requires": { + "@types/unist": "^2.0.2" + } + }, + "unist-util-visit": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/unist-util-visit/-/unist-util-visit-2.0.3.tgz", + "integrity": "sha512-iJ4/RczbJMkD0712mGktuGpm/U4By4FfDonL7N/9tATGIF4imikjOuagyMY53tnZq3NP6BcmlrHhEKAfGWjh7Q==", + "dev": true, + "requires": { + "@types/unist": "^2.0.0", + "unist-util-is": "^4.0.0", + "unist-util-visit-parents": "^3.0.0" + } + }, + "unist-util-visit-parents": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/unist-util-visit-parents/-/unist-util-visit-parents-3.1.0.tgz", + "integrity": "sha512-0g4wbluTF93npyPrp/ymd3tCDTMnP0yo2akFD2FIBAYXq/Sga3lwaU1D8OYKbtpioaI6CkDcQ6fsMnmtzt7htw==", + "dev": true, + "requires": { + "@types/unist": "^2.0.0", + "unist-util-is": "^4.0.0" + } + }, + "uri-js": { + "version": "4.2.2", + "resolved": "https://registry.npmjs.org/uri-js/-/uri-js-4.2.2.tgz", + "integrity": "sha512-KY9Frmirql91X2Qgjry0Wd4Y+YTdrdZheS8TFwvkbLWf/G5KNJDCh6pKL5OZctEW4+0Baa5idK2ZQuELRwPznQ==", + "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.1.1", + "resolved": "https://registry.npmjs.org/v8-compile-cache/-/v8-compile-cache-2.1.1.tgz", + "integrity": "sha512-8OQ9CL+VWyt3JStj7HX7/ciTL2V3Rl1Wf5OL+SNTm0yK1KvtReVulksyeRnCANHHuUxHlQig+JJDlUhBt1NQDQ==", + "dev": true + }, + "validate-npm-package-license": { + "version": "3.0.4", + "resolved": "https://registry.npmjs.org/validate-npm-package-license/-/validate-npm-package-license-3.0.4.tgz", + "integrity": "sha512-DpKm2Ui/xN7/HQKCtpZxoRWBhZ9Z0kqtygG8XCgNQ8ZlDnxuQmWhj566j8fN4Cu3/JmbhsDo7fcAJq4s9h27Ew==", + "dev": true, + "requires": { + "spdx-correct": "^3.0.0", + "spdx-expression-parse": "^3.0.0" + } + }, + "vfile": { + "version": "4.2.0", + "resolved": "https://registry.npmjs.org/vfile/-/vfile-4.2.0.tgz", + "integrity": "sha512-a/alcwCvtuc8OX92rqqo7PflxiCgXRFjdyoGVuYV+qbgCb0GgZJRvIgCD4+U/Kl1yhaRsaTwksF88xbPyGsgpw==", + "dev": true, + "requires": { + "@types/unist": "^2.0.0", + "is-buffer": "^2.0.0", + "replace-ext": "1.0.0", + "unist-util-stringify-position": "^2.0.0", + "vfile-message": "^2.0.0" + } + }, + "vfile-location": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/vfile-location/-/vfile-location-3.0.1.tgz", + "integrity": "sha512-yYBO06eeN/Ki6Kh1QAkgzYpWT1d3Qln+ZCtSbJqFExPl1S3y2qqotJQXoh6qEvl/jDlgpUJolBn3PItVnnZRqQ==", + "dev": true + }, + "vfile-message": { + "version": "2.0.4", + "resolved": "https://registry.npmjs.org/vfile-message/-/vfile-message-2.0.4.tgz", + "integrity": "sha512-DjssxRGkMvifUOJre00juHoP9DPWuzjxKuMDrhNbk2TdaYYBNMStsNhEOt3idrtI12VQYM/1+iM0KOzXi4pxwQ==", + "dev": true, + "requires": { + "@types/unist": "^2.0.0", + "unist-util-stringify-position": "^2.0.0" + } + }, + "which": { + "version": "1.3.1", + "resolved": "https://registry.npmjs.org/which/-/which-1.3.1.tgz", + "integrity": "sha512-HxJdYWq1MTIQbJ3nw0cqssHoTNU267KlrDuGZ1WYlxDStUtKUhOaJmh112/TZmHxxUfuJqPXSOm7tDyas0OSIQ==", + "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 + }, + "write": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/write/-/write-1.0.3.tgz", + "integrity": "sha512-/lg70HAjtkUgWPVZhZcm+T4hkL8Zbtp1nFNOn3lRrxnlv50SRBv7cR7RqR+GMsd3hUXy9hWBo4CHTbFTcOYwig==", + "dev": true, + "requires": { + "mkdirp": "^0.5.1" + } + }, + "write-file-atomic": { + "version": "3.0.3", + "resolved": "https://registry.npmjs.org/write-file-atomic/-/write-file-atomic-3.0.3.tgz", + "integrity": "sha512-AvHcyZ5JnSfq3ioSyjrBkH9yW4m7Ayk8/9My/DD9onKeu/94fwrMocemO2QAJFAlnnDN+ZDS+ZjAR5ua1/PV/Q==", + "dev": true, + "requires": { + "imurmurhash": "^0.1.4", + "is-typedarray": "^1.0.0", + "signal-exit": "^3.0.2", + "typedarray-to-buffer": "^3.1.5" + } + }, + "xtend": { + "version": "4.0.2", + "resolved": "https://registry.npmjs.org/xtend/-/xtend-4.0.2.tgz", + "integrity": "sha512-LKYU1iAXJXUgAXn9URjiu+MWhyUXHsvfp7mcuYm9dSUKK0/CjtrUwFAxD82/mCWbtLsGjFIad0wIsod4zrTAEQ==", + "dev": true + }, + "yaml": { + "version": "1.10.0", + "resolved": "https://registry.npmjs.org/yaml/-/yaml-1.10.0.tgz", + "integrity": "sha512-yr2icI4glYaNG+KWONODapy2/jDdMSDnrONSjblABjD9B4Z5LgiircSt8m8sRZFNi08kG9Sm0uSHtEmP3zaEGg==", + "dev": true + }, + "yargs-parser": { + "version": "18.1.3", + "resolved": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-18.1.3.tgz", + "integrity": "sha512-o50j0JeToy/4K6OZcaQmW6lyXXKhq7csREXcDwk2omFPJEwUNOVtJKvmDr9EI1fAJZUyZcRF7kxGBWmRXudrCQ==", + "dev": true, + "requires": { + "camelcase": "^5.0.0", + "decamelize": "^1.2.0" + }, + "dependencies": { + "camelcase": { + "version": "5.3.1", + "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-5.3.1.tgz", + "integrity": "sha512-L28STB170nwWS63UjtlEOE3dldQApaJXZkOI1uMFfzf3rRuPegHaHesyee+YxQ+W6SvRDQV6UrdOdRiR153wJg==", + "dev": true + } + } + } + } +} diff --git a/package.json b/package.json index 64f1489..83920e6 100644 --- a/package.json +++ b/package.json @@ -1,7 +1,9 @@ { "private": true, "devDependencies": { - "eslint": "^6", - "@wordpress/eslint-plugin": "^5" + "@wordpress/eslint-plugin": "^7.1.0", + "eslint": "^7.5.0", + "stylelint": "^13.6.1", + "stylelint-config-wordpress": "^17.0.0" } } From bec8fa953b7793ed83e80c52e9dbd3cc65a4f572 Mon Sep 17 00:00:00 2001 From: Patrick Robrecht Date: Sat, 17 Oct 2020 13:05:24 +0200 Subject: [PATCH 02/17] Remove PHP version switch from Travis build --- .travis.yml | 5 ----- 1 file changed, 5 deletions(-) diff --git a/.travis.yml b/.travis.yml index 8f5d2cd..c616aed 100644 --- a/.travis.yml +++ b/.travis.yml @@ -22,13 +22,8 @@ before_install: # Clones WordPress and configures our testing environment. before_script: - # Setup Coveralls - - phpenv local 5.5 - composer install --no-interaction - - phpenv local --unset - - npm install - - bash bin/install-wp-tests.sh wordpress_test root '' 127.0.0.1 $WP_VERSION script: From c482ab667af9a1aa68c474b6d21e90a3d67a6590 Mon Sep 17 00:00:00 2001 From: Stefan Kalscheuer Date: Sat, 17 Oct 2020 17:43:54 +0200 Subject: [PATCH 03/17] add MySQL to Travis environment, downgrade dev deps for PHP 5.6 compat --- .travis.yml | 3 + composer.json | 2 +- composer.lock | 758 ++++++++++++++++++++++---------------------------- 3 files changed, 334 insertions(+), 429 deletions(-) diff --git a/.travis.yml b/.travis.yml index c616aed..77a4011 100644 --- a/.travis.yml +++ b/.travis.yml @@ -9,6 +9,9 @@ php: - '7.4' - nightly +services: + - mysql + matrix: allow_failures: - php: nightly diff --git a/composer.json b/composer.json index bb9dc3d..50e146b 100644 --- a/composer.json +++ b/composer.json @@ -13,7 +13,7 @@ "lipemat/wp-unit": "^1.5", "matthiasmullie/minify": "^1.3", "phpcompatibility/php-compatibility": "^9.3", - "phpunit/phpunit": "^7.0", + "phpunit/phpunit": "^5", "squizlabs/php_codesniffer": "^3.5", "wp-coding-standards/wpcs": "^2.3" }, diff --git a/composer.lock b/composer.lock index 7fff0dc..0d93ef8 100644 --- a/composer.lock +++ b/composer.lock @@ -4,7 +4,7 @@ "Read more about it at https://getcomposer.org/doc/01-basic-usage.md#installing-dependencies", "This file is @generated automatically" ], - "content-hash": "95513f9aab1762eca4452b9b9d73a5d1", + "content-hash": "60e5af9e70d08c3d8c0986926f7f8699", "packages": [], "packages-dev": [ { @@ -75,34 +75,32 @@ }, { "name": "doctrine/instantiator", - "version": "1.3.1", + "version": "1.0.5", "source": { "type": "git", "url": "https://github.com/doctrine/instantiator.git", - "reference": "f350df0268e904597e3bd9c4685c53e0e333feea" + "reference": "8e884e78f9f0eb1329e445619e04456e64d8051d" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/doctrine/instantiator/zipball/f350df0268e904597e3bd9c4685c53e0e333feea", - "reference": "f350df0268e904597e3bd9c4685c53e0e333feea", + "url": "https://api.github.com/repos/doctrine/instantiator/zipball/8e884e78f9f0eb1329e445619e04456e64d8051d", + "reference": "8e884e78f9f0eb1329e445619e04456e64d8051d", "shasum": "" }, "require": { - "php": "^7.1 || ^8.0" + "php": ">=5.3,<8.0-DEV" }, "require-dev": { - "doctrine/coding-standard": "^6.0", + "athletic/athletic": "~0.1.8", "ext-pdo": "*", "ext-phar": "*", - "phpbench/phpbench": "^0.13", - "phpstan/phpstan-phpunit": "^0.11", - "phpstan/phpstan-shim": "^0.11", - "phpunit/phpunit": "^7.0" + "phpunit/phpunit": "~4.0", + "squizlabs/php_codesniffer": "~2.0" }, "type": "library", "extra": { "branch-alias": { - "dev-master": "1.2.x-dev" + "dev-master": "1.0.x-dev" } }, "autoload": { @@ -122,44 +120,27 @@ } ], "description": "A small, lightweight utility to instantiate objects in PHP without invoking their constructors", - "homepage": "https://www.doctrine-project.org/projects/instantiator.html", + "homepage": "https://github.com/doctrine/instantiator", "keywords": [ "constructor", "instantiate" ], - "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": "2020-05-29T17:27:14+00:00" + "time": "2015-06-14T21:17:01+00:00" }, { "name": "lipemat/wp-unit", - "version": "1.9.0", + "version": "1.8.0", "source": { "type": "git", "url": "https://github.com/lipemat/wp-unit.git", - "reference": "5cb0d6974df254950d77d075474d08b44352fc1c" + "reference": "722ae3c5f44ec0a01d37da48dc01d6bb86230a8b" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/lipemat/wp-unit/zipball/5cb0d6974df254950d77d075474d08b44352fc1c", - "reference": "5cb0d6974df254950d77d075474d08b44352fc1c", + "url": "https://api.github.com/repos/lipemat/wp-unit/zipball/722ae3c5f44ec0a01d37da48dc01d6bb86230a8b", + "reference": "722ae3c5f44ec0a01d37da48dc01d6bb86230a8b", "shasum": "" }, - "require": { - "php": ">=5.6.1" - }, "type": "library", "notification-url": "https://packagist.org/downloads/", "license": [ @@ -172,7 +153,7 @@ } ], "description": "Forked Wp-unit with support for testing against existing database and other environment enhancements", - "time": "2019-11-05T17:13:15+00:00" + "time": "2019-11-01T20:37:25+00:00" }, { "name": "matthiasmullie/minify", @@ -285,28 +266,25 @@ }, { "name": "myclabs/deep-copy", - "version": "1.10.1", + "version": "1.7.0", "source": { "type": "git", "url": "https://github.com/myclabs/DeepCopy.git", - "reference": "969b211f9a51aa1f6c01d1d2aef56d3bd91598e5" + "reference": "3b8a3a99ba1f6a3952ac2747d989303cbd6b7a3e" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/myclabs/DeepCopy/zipball/969b211f9a51aa1f6c01d1d2aef56d3bd91598e5", - "reference": "969b211f9a51aa1f6c01d1d2aef56d3bd91598e5", + "url": "https://api.github.com/repos/myclabs/DeepCopy/zipball/3b8a3a99ba1f6a3952ac2747d989303cbd6b7a3e", + "reference": "3b8a3a99ba1f6a3952ac2747d989303cbd6b7a3e", "shasum": "" }, "require": { - "php": "^7.1 || ^8.0" - }, - "replace": { - "myclabs/deep-copy": "self.version" + "php": "^5.6 || ^7.0" }, "require-dev": { "doctrine/collections": "^1.0", "doctrine/common": "^2.6", - "phpunit/phpunit": "^7.1" + "phpunit/phpunit": "^4.1" }, "type": "library", "autoload": { @@ -329,115 +307,7 @@ "object", "object graph" ], - "funding": [ - { - "url": "https://tidelift.com/funding/github/packagist/myclabs/deep-copy", - "type": "tidelift" - } - ], - "time": "2020-06-29T13:22:24+00:00" - }, - { - "name": "phar-io/manifest", - "version": "1.0.3", - "source": { - "type": "git", - "url": "https://github.com/phar-io/manifest.git", - "reference": "7761fcacf03b4d4f16e7ccb606d4879ca431fcf4" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/phar-io/manifest/zipball/7761fcacf03b4d4f16e7ccb606d4879ca431fcf4", - "reference": "7761fcacf03b4d4f16e7ccb606d4879ca431fcf4", - "shasum": "" - }, - "require": { - "ext-dom": "*", - "ext-phar": "*", - "phar-io/version": "^2.0", - "php": "^5.6 || ^7.0" - }, - "type": "library", - "extra": { - "branch-alias": { - "dev-master": "1.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)", - "time": "2018-07-08T19:23:20+00:00" - }, - { - "name": "phar-io/version", - "version": "2.0.1", - "source": { - "type": "git", - "url": "https://github.com/phar-io/version.git", - "reference": "45a2ec53a73c70ce41d55cedef9063630abaf1b6" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/phar-io/version/zipball/45a2ec53a73c70ce41d55cedef9063630abaf1b6", - "reference": "45a2ec53a73c70ce41d55cedef9063630abaf1b6", - "shasum": "" - }, - "require": { - "php": "^5.6 || ^7.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", - "time": "2018-07-08T19:19:57+00:00" + "time": "2017-10-19T19:58:43+00:00" }, { "name": "phpcompatibility/php-compatibility", @@ -499,30 +369,35 @@ }, { "name": "phpdocumentor/reflection-common", - "version": "2.2.0", + "version": "1.0.1", "source": { "type": "git", "url": "https://github.com/phpDocumentor/ReflectionCommon.git", - "reference": "1d01c49d4ed62f25aa84a747ad35d5a16924662b" + "reference": "21bdeb5f65d7ebf9f43b1b25d404f87deab5bfb6" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/phpDocumentor/ReflectionCommon/zipball/1d01c49d4ed62f25aa84a747ad35d5a16924662b", - "reference": "1d01c49d4ed62f25aa84a747ad35d5a16924662b", + "url": "https://api.github.com/repos/phpDocumentor/ReflectionCommon/zipball/21bdeb5f65d7ebf9f43b1b25d404f87deab5bfb6", + "reference": "21bdeb5f65d7ebf9f43b1b25d404f87deab5bfb6", "shasum": "" }, "require": { - "php": "^7.2 || ^8.0" + "php": ">=5.5" + }, + "require-dev": { + "phpunit/phpunit": "^4.6" }, "type": "library", "extra": { "branch-alias": { - "dev-2.x": "2.x-dev" + "dev-master": "1.0.x-dev" } }, "autoload": { "psr-4": { - "phpDocumentor\\Reflection\\": "src/" + "phpDocumentor\\Reflection\\": [ + "src" + ] } }, "notification-url": "https://packagist.org/downloads/", @@ -544,41 +419,38 @@ "reflection", "static analysis" ], - "time": "2020-06-27T09:03:43+00:00" + "time": "2017-09-11T18:02:19+00:00" }, { "name": "phpdocumentor/reflection-docblock", - "version": "5.2.1", + "version": "3.3.2", "source": { "type": "git", "url": "https://github.com/phpDocumentor/ReflectionDocBlock.git", - "reference": "d870572532cd70bc3fab58f2e23ad423c8404c44" + "reference": "bf329f6c1aadea3299f08ee804682b7c45b326a2" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/phpDocumentor/ReflectionDocBlock/zipball/d870572532cd70bc3fab58f2e23ad423c8404c44", - "reference": "d870572532cd70bc3fab58f2e23ad423c8404c44", + "url": "https://api.github.com/repos/phpDocumentor/ReflectionDocBlock/zipball/bf329f6c1aadea3299f08ee804682b7c45b326a2", + "reference": "bf329f6c1aadea3299f08ee804682b7c45b326a2", "shasum": "" }, "require": { - "ext-filter": "*", - "php": "^7.2 || ^8.0", - "phpdocumentor/reflection-common": "^2.2", - "phpdocumentor/type-resolver": "^1.3", - "webmozart/assert": "^1.9.1" + "php": "^5.6 || ^7.0", + "phpdocumentor/reflection-common": "^1.0.0", + "phpdocumentor/type-resolver": "^0.4.0", + "webmozart/assert": "^1.0" }, "require-dev": { - "mockery/mockery": "~1.3.2" + "mockery/mockery": "^0.9.4", + "phpunit/phpunit": "^4.4" }, "type": "library", - "extra": { - "branch-alias": { - "dev-master": "5.x-dev" - } - }, "autoload": { "psr-4": { - "phpDocumentor\\Reflection\\": "src" + "phpDocumentor\\Reflection\\": [ + "src/" + ] } }, "notification-url": "https://packagist.org/downloads/", @@ -589,45 +461,44 @@ { "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.", - "time": "2020-08-15T11:14:08+00:00" + "time": "2017-11-10T14:09:06+00:00" }, { "name": "phpdocumentor/type-resolver", - "version": "1.3.0", + "version": "0.4.0", "source": { "type": "git", "url": "https://github.com/phpDocumentor/TypeResolver.git", - "reference": "e878a14a65245fbe78f8080eba03b47c3b705651" + "reference": "9c977708995954784726e25d0cd1dddf4e65b0f7" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/phpDocumentor/TypeResolver/zipball/e878a14a65245fbe78f8080eba03b47c3b705651", - "reference": "e878a14a65245fbe78f8080eba03b47c3b705651", + "url": "https://api.github.com/repos/phpDocumentor/TypeResolver/zipball/9c977708995954784726e25d0cd1dddf4e65b0f7", + "reference": "9c977708995954784726e25d0cd1dddf4e65b0f7", "shasum": "" }, "require": { - "php": "^7.2 || ^8.0", - "phpdocumentor/reflection-common": "^2.0" + "php": "^5.5 || ^7.0", + "phpdocumentor/reflection-common": "^1.0" }, "require-dev": { - "ext-tokenizer": "*" + "mockery/mockery": "^0.9.4", + "phpunit/phpunit": "^5.2||^4.8.24" }, "type": "library", "extra": { "branch-alias": { - "dev-1.x": "1.x-dev" + "dev-master": "1.0.x-dev" } }, "autoload": { "psr-4": { - "phpDocumentor\\Reflection\\": "src" + "phpDocumentor\\Reflection\\": [ + "src/" + ] } }, "notification-url": "https://packagist.org/downloads/", @@ -640,38 +511,37 @@ "email": "me@mikevanriel.com" } ], - "description": "A PSR-5 based resolver of Class names, Types and Structural Element Names", - "time": "2020-06-27T10:12:23+00:00" + "time": "2017-07-14T14:27:02+00:00" }, { "name": "phpspec/prophecy", - "version": "1.11.1", + "version": "v1.10.3", "source": { "type": "git", "url": "https://github.com/phpspec/prophecy.git", - "reference": "b20034be5efcdab4fb60ca3a29cba2949aead160" + "reference": "451c3cd1418cf640de218914901e51b064abb093" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/phpspec/prophecy/zipball/b20034be5efcdab4fb60ca3a29cba2949aead160", - "reference": "b20034be5efcdab4fb60ca3a29cba2949aead160", + "url": "https://api.github.com/repos/phpspec/prophecy/zipball/451c3cd1418cf640de218914901e51b064abb093", + "reference": "451c3cd1418cf640de218914901e51b064abb093", "shasum": "" }, "require": { - "doctrine/instantiator": "^1.2", - "php": "^7.2", - "phpdocumentor/reflection-docblock": "^5.0", - "sebastian/comparator": "^3.0 || ^4.0", - "sebastian/recursion-context": "^3.0 || ^4.0" + "doctrine/instantiator": "^1.0.2", + "php": "^5.3|^7.0", + "phpdocumentor/reflection-docblock": "^2.0|^3.0.2|^4.0|^5.0", + "sebastian/comparator": "^1.2.3|^2.0|^3.0|^4.0", + "sebastian/recursion-context": "^1.0|^2.0|^3.0|^4.0" }, "require-dev": { - "phpspec/phpspec": "^6.0", - "phpunit/phpunit": "^8.0" + "phpspec/phpspec": "^2.5 || ^3.2", + "phpunit/phpunit": "^4.8.35 || ^5.7 || ^6.5 || ^7.1" }, "type": "library", "extra": { "branch-alias": { - "dev-master": "1.11.x-dev" + "dev-master": "1.10.x-dev" } }, "autoload": { @@ -704,44 +574,44 @@ "spy", "stub" ], - "time": "2020-07-08T12:44:21+00:00" + "time": "2020-03-05T15:02:03+00:00" }, { "name": "phpunit/php-code-coverage", - "version": "6.1.4", + "version": "4.0.8", "source": { "type": "git", "url": "https://github.com/sebastianbergmann/php-code-coverage.git", - "reference": "807e6013b00af69b6c5d9ceb4282d0393dbb9d8d" + "reference": "ef7b2f56815df854e66ceaee8ebe9393ae36a40d" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/sebastianbergmann/php-code-coverage/zipball/807e6013b00af69b6c5d9ceb4282d0393dbb9d8d", - "reference": "807e6013b00af69b6c5d9ceb4282d0393dbb9d8d", + "url": "https://api.github.com/repos/sebastianbergmann/php-code-coverage/zipball/ef7b2f56815df854e66ceaee8ebe9393ae36a40d", + "reference": "ef7b2f56815df854e66ceaee8ebe9393ae36a40d", "shasum": "" }, "require": { "ext-dom": "*", "ext-xmlwriter": "*", - "php": "^7.1", - "phpunit/php-file-iterator": "^2.0", - "phpunit/php-text-template": "^1.2.1", - "phpunit/php-token-stream": "^3.0", - "sebastian/code-unit-reverse-lookup": "^1.0.1", - "sebastian/environment": "^3.1 || ^4.0", - "sebastian/version": "^2.0.1", - "theseer/tokenizer": "^1.1" + "php": "^5.6 || ^7.0", + "phpunit/php-file-iterator": "^1.3", + "phpunit/php-text-template": "^1.2", + "phpunit/php-token-stream": "^1.4.2 || ^2.0", + "sebastian/code-unit-reverse-lookup": "^1.0", + "sebastian/environment": "^1.3.2 || ^2.0", + "sebastian/version": "^1.0 || ^2.0" }, "require-dev": { - "phpunit/phpunit": "^7.0" + "ext-xdebug": "^2.1.4", + "phpunit/phpunit": "^5.7" }, "suggest": { - "ext-xdebug": "^2.6.0" + "ext-xdebug": "^2.5.1" }, "type": "library", "extra": { "branch-alias": { - "dev-master": "6.1-dev" + "dev-master": "4.0.x-dev" } }, "autoload": { @@ -756,7 +626,7 @@ "authors": [ { "name": "Sebastian Bergmann", - "email": "sebastian@phpunit.de", + "email": "sb@sebastian-bergmann.de", "role": "lead" } ], @@ -767,32 +637,29 @@ "testing", "xunit" ], - "time": "2018-10-31T16:06:48+00:00" + "time": "2017-04-02T07:44:40+00:00" }, { "name": "phpunit/php-file-iterator", - "version": "2.0.2", + "version": "1.4.5", "source": { "type": "git", "url": "https://github.com/sebastianbergmann/php-file-iterator.git", - "reference": "050bedf145a257b1ff02746c31894800e5122946" + "reference": "730b01bc3e867237eaac355e06a36b85dd93a8b4" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/sebastianbergmann/php-file-iterator/zipball/050bedf145a257b1ff02746c31894800e5122946", - "reference": "050bedf145a257b1ff02746c31894800e5122946", + "url": "https://api.github.com/repos/sebastianbergmann/php-file-iterator/zipball/730b01bc3e867237eaac355e06a36b85dd93a8b4", + "reference": "730b01bc3e867237eaac355e06a36b85dd93a8b4", "shasum": "" }, "require": { - "php": "^7.1" - }, - "require-dev": { - "phpunit/phpunit": "^7.1" + "php": ">=5.3.3" }, "type": "library", "extra": { "branch-alias": { - "dev-master": "2.0.x-dev" + "dev-master": "1.4.x-dev" } }, "autoload": { @@ -807,7 +674,7 @@ "authors": [ { "name": "Sebastian Bergmann", - "email": "sebastian@phpunit.de", + "email": "sb@sebastian-bergmann.de", "role": "lead" } ], @@ -817,7 +684,7 @@ "filesystem", "iterator" ], - "time": "2018-09-13T20:33:42+00:00" + "time": "2017-11-27T13:52:08+00:00" }, { "name": "phpunit/php-text-template", @@ -862,28 +729,28 @@ }, { "name": "phpunit/php-timer", - "version": "2.1.2", + "version": "1.0.9", "source": { "type": "git", "url": "https://github.com/sebastianbergmann/php-timer.git", - "reference": "1038454804406b0b5f5f520358e78c1c2f71501e" + "reference": "3dcf38ca72b158baf0bc245e9184d3fdffa9c46f" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/sebastianbergmann/php-timer/zipball/1038454804406b0b5f5f520358e78c1c2f71501e", - "reference": "1038454804406b0b5f5f520358e78c1c2f71501e", + "url": "https://api.github.com/repos/sebastianbergmann/php-timer/zipball/3dcf38ca72b158baf0bc245e9184d3fdffa9c46f", + "reference": "3dcf38ca72b158baf0bc245e9184d3fdffa9c46f", "shasum": "" }, "require": { - "php": "^7.1" + "php": "^5.3.3 || ^7.0" }, "require-dev": { - "phpunit/phpunit": "^7.0" + "phpunit/phpunit": "^4.8.35 || ^5.7 || ^6.0" }, "type": "library", "extra": { "branch-alias": { - "dev-master": "2.1-dev" + "dev-master": "1.0-dev" } }, "autoload": { @@ -898,7 +765,7 @@ "authors": [ { "name": "Sebastian Bergmann", - "email": "sebastian@phpunit.de", + "email": "sb@sebastian-bergmann.de", "role": "lead" } ], @@ -907,33 +774,33 @@ "keywords": [ "timer" ], - "time": "2019-06-07T04:22:29+00:00" + "time": "2017-02-26T11:10:40+00:00" }, { "name": "phpunit/php-token-stream", - "version": "3.1.1", + "version": "1.4.12", "source": { "type": "git", "url": "https://github.com/sebastianbergmann/php-token-stream.git", - "reference": "995192df77f63a59e47f025390d2d1fdf8f425ff" + "reference": "1ce90ba27c42e4e44e6d8458241466380b51fa16" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/sebastianbergmann/php-token-stream/zipball/995192df77f63a59e47f025390d2d1fdf8f425ff", - "reference": "995192df77f63a59e47f025390d2d1fdf8f425ff", + "url": "https://api.github.com/repos/sebastianbergmann/php-token-stream/zipball/1ce90ba27c42e4e44e6d8458241466380b51fa16", + "reference": "1ce90ba27c42e4e44e6d8458241466380b51fa16", "shasum": "" }, "require": { "ext-tokenizer": "*", - "php": "^7.1" + "php": ">=5.3.3" }, "require-dev": { - "phpunit/phpunit": "^7.0" + "phpunit/phpunit": "~4.2" }, "type": "library", "extra": { "branch-alias": { - "dev-master": "3.1-dev" + "dev-master": "1.4-dev" } }, "autoload": { @@ -957,57 +824,55 @@ "tokenizer" ], "abandoned": true, - "time": "2019-09-17T06:23:10+00:00" + "time": "2017-12-04T08:55:13+00:00" }, { "name": "phpunit/phpunit", - "version": "7.5.20", + "version": "5.7.27", "source": { "type": "git", "url": "https://github.com/sebastianbergmann/phpunit.git", - "reference": "9467db479d1b0487c99733bb1e7944d32deded2c" + "reference": "b7803aeca3ccb99ad0a506fa80b64cd6a56bbc0c" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/sebastianbergmann/phpunit/zipball/9467db479d1b0487c99733bb1e7944d32deded2c", - "reference": "9467db479d1b0487c99733bb1e7944d32deded2c", + "url": "https://api.github.com/repos/sebastianbergmann/phpunit/zipball/b7803aeca3ccb99ad0a506fa80b64cd6a56bbc0c", + "reference": "b7803aeca3ccb99ad0a506fa80b64cd6a56bbc0c", "shasum": "" }, "require": { - "doctrine/instantiator": "^1.1", "ext-dom": "*", "ext-json": "*", "ext-libxml": "*", "ext-mbstring": "*", "ext-xml": "*", - "myclabs/deep-copy": "^1.7", - "phar-io/manifest": "^1.0.2", - "phar-io/version": "^2.0", - "php": "^7.1", - "phpspec/prophecy": "^1.7", - "phpunit/php-code-coverage": "^6.0.7", - "phpunit/php-file-iterator": "^2.0.1", - "phpunit/php-text-template": "^1.2.1", - "phpunit/php-timer": "^2.1", - "sebastian/comparator": "^3.0", - "sebastian/diff": "^3.0", - "sebastian/environment": "^4.0", - "sebastian/exporter": "^3.1", - "sebastian/global-state": "^2.0", - "sebastian/object-enumerator": "^3.0.3", - "sebastian/resource-operations": "^2.0", - "sebastian/version": "^2.0.1" + "myclabs/deep-copy": "~1.3", + "php": "^5.6 || ^7.0", + "phpspec/prophecy": "^1.6.2", + "phpunit/php-code-coverage": "^4.0.4", + "phpunit/php-file-iterator": "~1.4", + "phpunit/php-text-template": "~1.2", + "phpunit/php-timer": "^1.0.6", + "phpunit/phpunit-mock-objects": "^3.2", + "sebastian/comparator": "^1.2.4", + "sebastian/diff": "^1.4.3", + "sebastian/environment": "^1.3.4 || ^2.0", + "sebastian/exporter": "~2.0", + "sebastian/global-state": "^1.1", + "sebastian/object-enumerator": "~2.0", + "sebastian/resource-operations": "~1.0", + "sebastian/version": "^1.0.6|^2.0.1", + "symfony/yaml": "~2.1|~3.0|~4.0" }, "conflict": { - "phpunit/phpunit-mock-objects": "*" + "phpdocumentor/reflection-docblock": "3.0.2" }, "require-dev": { "ext-pdo": "*" }, "suggest": { - "ext-soap": "*", "ext-xdebug": "*", - "phpunit/php-invoker": "^2.0" + "phpunit/php-invoker": "~1.1" }, "bin": [ "phpunit" @@ -1015,7 +880,7 @@ "type": "library", "extra": { "branch-alias": { - "dev-master": "7.5-dev" + "dev-master": "5.7.x-dev" } }, "autoload": { @@ -1041,7 +906,67 @@ "testing", "xunit" ], - "time": "2020-01-08T08:45:45+00:00" + "time": "2018-02-01T05:50:59+00:00" + }, + { + "name": "phpunit/phpunit-mock-objects", + "version": "3.4.4", + "source": { + "type": "git", + "url": "https://github.com/sebastianbergmann/phpunit-mock-objects.git", + "reference": "a23b761686d50a560cc56233b9ecf49597cc9118" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/sebastianbergmann/phpunit-mock-objects/zipball/a23b761686d50a560cc56233b9ecf49597cc9118", + "reference": "a23b761686d50a560cc56233b9ecf49597cc9118", + "shasum": "" + }, + "require": { + "doctrine/instantiator": "^1.0.2", + "php": "^5.6 || ^7.0", + "phpunit/php-text-template": "^1.2", + "sebastian/exporter": "^1.2 || ^2.0" + }, + "conflict": { + "phpunit/phpunit": "<5.4.0" + }, + "require-dev": { + "phpunit/phpunit": "^5.4" + }, + "suggest": { + "ext-soap": "*" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "3.2.x-dev" + } + }, + "autoload": { + "classmap": [ + "src/" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "BSD-3-Clause" + ], + "authors": [ + { + "name": "Sebastian Bergmann", + "email": "sb@sebastian-bergmann.de", + "role": "lead" + } + ], + "description": "Mock Object library for PHPUnit", + "homepage": "https://github.com/sebastianbergmann/phpunit-mock-objects/", + "keywords": [ + "mock", + "xunit" + ], + "abandoned": true, + "time": "2017-06-30T09:13:00+00:00" }, { "name": "sebastian/code-unit-reverse-lookup", @@ -1090,30 +1015,30 @@ }, { "name": "sebastian/comparator", - "version": "3.0.2", + "version": "1.2.4", "source": { "type": "git", "url": "https://github.com/sebastianbergmann/comparator.git", - "reference": "5de4fc177adf9bce8df98d8d141a7559d7ccf6da" + "reference": "2b7424b55f5047b47ac6e5ccb20b2aea4011d9be" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/sebastianbergmann/comparator/zipball/5de4fc177adf9bce8df98d8d141a7559d7ccf6da", - "reference": "5de4fc177adf9bce8df98d8d141a7559d7ccf6da", + "url": "https://api.github.com/repos/sebastianbergmann/comparator/zipball/2b7424b55f5047b47ac6e5ccb20b2aea4011d9be", + "reference": "2b7424b55f5047b47ac6e5ccb20b2aea4011d9be", "shasum": "" }, "require": { - "php": "^7.1", - "sebastian/diff": "^3.0", - "sebastian/exporter": "^3.1" + "php": ">=5.3.3", + "sebastian/diff": "~1.2", + "sebastian/exporter": "~1.2 || ~2.0" }, "require-dev": { - "phpunit/phpunit": "^7.1" + "phpunit/phpunit": "~4.4" }, "type": "library", "extra": { "branch-alias": { - "dev-master": "3.0-dev" + "dev-master": "1.2.x-dev" } }, "autoload": { @@ -1144,39 +1069,38 @@ } ], "description": "Provides the functionality to compare PHP values for equality", - "homepage": "https://github.com/sebastianbergmann/comparator", + "homepage": "http://www.github.com/sebastianbergmann/comparator", "keywords": [ "comparator", "compare", "equality" ], - "time": "2018-07-12T15:12:46+00:00" + "time": "2017-01-29T09:50:25+00:00" }, { "name": "sebastian/diff", - "version": "3.0.2", + "version": "1.4.3", "source": { "type": "git", "url": "https://github.com/sebastianbergmann/diff.git", - "reference": "720fcc7e9b5cf384ea68d9d930d480907a0c1a29" + "reference": "7f066a26a962dbe58ddea9f72a4e82874a3975a4" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/sebastianbergmann/diff/zipball/720fcc7e9b5cf384ea68d9d930d480907a0c1a29", - "reference": "720fcc7e9b5cf384ea68d9d930d480907a0c1a29", + "url": "https://api.github.com/repos/sebastianbergmann/diff/zipball/7f066a26a962dbe58ddea9f72a4e82874a3975a4", + "reference": "7f066a26a962dbe58ddea9f72a4e82874a3975a4", "shasum": "" }, "require": { - "php": "^7.1" + "php": "^5.3.3 || ^7.0" }, "require-dev": { - "phpunit/phpunit": "^7.5 || ^8.0", - "symfony/process": "^2 || ^3.3 || ^4" + "phpunit/phpunit": "^4.8.35 || ^5.7 || ^6.0" }, "type": "library", "extra": { "branch-alias": { - "dev-master": "3.0-dev" + "dev-master": "1.4-dev" } }, "autoload": { @@ -1201,40 +1125,34 @@ "description": "Diff implementation", "homepage": "https://github.com/sebastianbergmann/diff", "keywords": [ - "diff", - "udiff", - "unidiff", - "unified diff" + "diff" ], - "time": "2019-02-04T06:01:07+00:00" + "time": "2017-05-22T07:24:03+00:00" }, { "name": "sebastian/environment", - "version": "4.2.3", + "version": "2.0.0", "source": { "type": "git", "url": "https://github.com/sebastianbergmann/environment.git", - "reference": "464c90d7bdf5ad4e8a6aea15c091fec0603d4368" + "reference": "5795ffe5dc5b02460c3e34222fee8cbe245d8fac" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/sebastianbergmann/environment/zipball/464c90d7bdf5ad4e8a6aea15c091fec0603d4368", - "reference": "464c90d7bdf5ad4e8a6aea15c091fec0603d4368", + "url": "https://api.github.com/repos/sebastianbergmann/environment/zipball/5795ffe5dc5b02460c3e34222fee8cbe245d8fac", + "reference": "5795ffe5dc5b02460c3e34222fee8cbe245d8fac", "shasum": "" }, "require": { - "php": "^7.1" + "php": "^5.6 || ^7.0" }, "require-dev": { - "phpunit/phpunit": "^7.5" - }, - "suggest": { - "ext-posix": "*" + "phpunit/phpunit": "^5.0" }, "type": "library", "extra": { "branch-alias": { - "dev-master": "4.2-dev" + "dev-master": "2.0.x-dev" } }, "autoload": { @@ -1259,34 +1177,34 @@ "environment", "hhvm" ], - "time": "2019-11-20T08:46:58+00:00" + "time": "2016-11-26T07:53:53+00:00" }, { "name": "sebastian/exporter", - "version": "3.1.2", + "version": "2.0.0", "source": { "type": "git", "url": "https://github.com/sebastianbergmann/exporter.git", - "reference": "68609e1261d215ea5b21b7987539cbfbe156ec3e" + "reference": "ce474bdd1a34744d7ac5d6aad3a46d48d9bac4c4" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/sebastianbergmann/exporter/zipball/68609e1261d215ea5b21b7987539cbfbe156ec3e", - "reference": "68609e1261d215ea5b21b7987539cbfbe156ec3e", + "url": "https://api.github.com/repos/sebastianbergmann/exporter/zipball/ce474bdd1a34744d7ac5d6aad3a46d48d9bac4c4", + "reference": "ce474bdd1a34744d7ac5d6aad3a46d48d9bac4c4", "shasum": "" }, "require": { - "php": "^7.0", - "sebastian/recursion-context": "^3.0" + "php": ">=5.3.3", + "sebastian/recursion-context": "~2.0" }, "require-dev": { "ext-mbstring": "*", - "phpunit/phpunit": "^6.0" + "phpunit/phpunit": "~4.4" }, "type": "library", "extra": { "branch-alias": { - "dev-master": "3.1.x-dev" + "dev-master": "2.0.x-dev" } }, "autoload": { @@ -1299,10 +1217,6 @@ "BSD-3-Clause" ], "authors": [ - { - "name": "Sebastian Bergmann", - "email": "sebastian@phpunit.de" - }, { "name": "Jeff Welch", "email": "whatthejeff@gmail.com" @@ -1312,12 +1226,16 @@ "email": "github@wallbash.com" }, { - "name": "Adam Harvey", - "email": "aharvey@php.net" + "name": "Bernhard Schussek", + "email": "bschussek@2bepublished.at" }, { - "name": "Bernhard Schussek", - "email": "bschussek@gmail.com" + "name": "Sebastian Bergmann", + "email": "sebastian@phpunit.de" + }, + { + "name": "Adam Harvey", + "email": "aharvey@php.net" } ], "description": "Provides the functionality to export PHP variables for visualization", @@ -1326,27 +1244,27 @@ "export", "exporter" ], - "time": "2019-09-14T09:02:43+00:00" + "time": "2016-11-19T08:54:04+00:00" }, { "name": "sebastian/global-state", - "version": "2.0.0", + "version": "1.1.1", "source": { "type": "git", "url": "https://github.com/sebastianbergmann/global-state.git", - "reference": "e8ba02eed7bbbb9e59e43dedd3dddeff4a56b0c4" + "reference": "bc37d50fea7d017d3d340f230811c9f1d7280af4" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/sebastianbergmann/global-state/zipball/e8ba02eed7bbbb9e59e43dedd3dddeff4a56b0c4", - "reference": "e8ba02eed7bbbb9e59e43dedd3dddeff4a56b0c4", + "url": "https://api.github.com/repos/sebastianbergmann/global-state/zipball/bc37d50fea7d017d3d340f230811c9f1d7280af4", + "reference": "bc37d50fea7d017d3d340f230811c9f1d7280af4", "shasum": "" }, "require": { - "php": "^7.0" + "php": ">=5.3.3" }, "require-dev": { - "phpunit/phpunit": "^6.0" + "phpunit/phpunit": "~4.2" }, "suggest": { "ext-uopz": "*" @@ -1354,7 +1272,7 @@ "type": "library", "extra": { "branch-alias": { - "dev-master": "2.0-dev" + "dev-master": "1.0-dev" } }, "autoload": { @@ -1377,34 +1295,33 @@ "keywords": [ "global state" ], - "time": "2017-04-27T15:39:26+00:00" + "time": "2015-10-12T03:26:01+00:00" }, { "name": "sebastian/object-enumerator", - "version": "3.0.3", + "version": "2.0.1", "source": { "type": "git", "url": "https://github.com/sebastianbergmann/object-enumerator.git", - "reference": "7cfd9e65d11ffb5af41198476395774d4c8a84c5" + "reference": "1311872ac850040a79c3c058bea3e22d0f09cbb7" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/sebastianbergmann/object-enumerator/zipball/7cfd9e65d11ffb5af41198476395774d4c8a84c5", - "reference": "7cfd9e65d11ffb5af41198476395774d4c8a84c5", + "url": "https://api.github.com/repos/sebastianbergmann/object-enumerator/zipball/1311872ac850040a79c3c058bea3e22d0f09cbb7", + "reference": "1311872ac850040a79c3c058bea3e22d0f09cbb7", "shasum": "" }, "require": { - "php": "^7.0", - "sebastian/object-reflector": "^1.1.1", - "sebastian/recursion-context": "^3.0" + "php": ">=5.6", + "sebastian/recursion-context": "~2.0" }, "require-dev": { - "phpunit/phpunit": "^6.0" + "phpunit/phpunit": "~5" }, "type": "library", "extra": { "branch-alias": { - "dev-master": "3.0.x-dev" + "dev-master": "2.0.x-dev" } }, "autoload": { @@ -1424,77 +1341,32 @@ ], "description": "Traverses array structures and object graphs to enumerate all referenced objects", "homepage": "https://github.com/sebastianbergmann/object-enumerator/", - "time": "2017-08-03T12:35:26+00:00" - }, - { - "name": "sebastian/object-reflector", - "version": "1.1.1", - "source": { - "type": "git", - "url": "https://github.com/sebastianbergmann/object-reflector.git", - "reference": "773f97c67f28de00d397be301821b06708fca0be" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/sebastianbergmann/object-reflector/zipball/773f97c67f28de00d397be301821b06708fca0be", - "reference": "773f97c67f28de00d397be301821b06708fca0be", - "shasum": "" - }, - "require": { - "php": "^7.0" - }, - "require-dev": { - "phpunit/phpunit": "^6.0" - }, - "type": "library", - "extra": { - "branch-alias": { - "dev-master": "1.1-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/", - "time": "2017-03-29T09:07:27+00:00" + "time": "2017-02-18T15:18:39+00:00" }, { "name": "sebastian/recursion-context", - "version": "3.0.0", + "version": "2.0.0", "source": { "type": "git", "url": "https://github.com/sebastianbergmann/recursion-context.git", - "reference": "5b0cd723502bac3b006cbf3dbf7a1e3fcefe4fa8" + "reference": "2c3ba150cbec723aa057506e73a8d33bdb286c9a" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/sebastianbergmann/recursion-context/zipball/5b0cd723502bac3b006cbf3dbf7a1e3fcefe4fa8", - "reference": "5b0cd723502bac3b006cbf3dbf7a1e3fcefe4fa8", + "url": "https://api.github.com/repos/sebastianbergmann/recursion-context/zipball/2c3ba150cbec723aa057506e73a8d33bdb286c9a", + "reference": "2c3ba150cbec723aa057506e73a8d33bdb286c9a", "shasum": "" }, "require": { - "php": "^7.0" + "php": ">=5.3.3" }, "require-dev": { - "phpunit/phpunit": "^6.0" + "phpunit/phpunit": "~4.4" }, "type": "library", "extra": { "branch-alias": { - "dev-master": "3.0.x-dev" + "dev-master": "2.0.x-dev" } }, "autoload": { @@ -1522,29 +1394,29 @@ ], "description": "Provides functionality to recursively process PHP variables", "homepage": "http://www.github.com/sebastianbergmann/recursion-context", - "time": "2017-03-03T06:23:57+00:00" + "time": "2016-11-19T07:33:16+00:00" }, { "name": "sebastian/resource-operations", - "version": "2.0.1", + "version": "1.0.0", "source": { "type": "git", "url": "https://github.com/sebastianbergmann/resource-operations.git", - "reference": "4d7a795d35b889bf80a0cc04e08d77cedfa917a9" + "reference": "ce990bb21759f94aeafd30209e8cfcdfa8bc3f52" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/sebastianbergmann/resource-operations/zipball/4d7a795d35b889bf80a0cc04e08d77cedfa917a9", - "reference": "4d7a795d35b889bf80a0cc04e08d77cedfa917a9", + "url": "https://api.github.com/repos/sebastianbergmann/resource-operations/zipball/ce990bb21759f94aeafd30209e8cfcdfa8bc3f52", + "reference": "ce990bb21759f94aeafd30209e8cfcdfa8bc3f52", "shasum": "" }, "require": { - "php": "^7.1" + "php": ">=5.6.0" }, "type": "library", "extra": { "branch-alias": { - "dev-master": "2.0-dev" + "dev-master": "1.0.x-dev" } }, "autoload": { @@ -1564,7 +1436,7 @@ ], "description": "Provides a list of PHP built-in functions that operate on resources", "homepage": "https://www.github.com/sebastianbergmann/resource-operations", - "time": "2018-10-04T04:07:39+00:00" + "time": "2015-07-28T20:34:47+00:00" }, { "name": "sebastian/version", @@ -1737,50 +1609,77 @@ "time": "2020-07-14T12:35:20+00:00" }, { - "name": "theseer/tokenizer", - "version": "1.2.0", + "name": "symfony/yaml", + "version": "v3.4.45", "source": { "type": "git", - "url": "https://github.com/theseer/tokenizer.git", - "reference": "75a63c33a8577608444246075ea0af0d052e452a" + "url": "https://github.com/symfony/yaml.git", + "reference": "ec3c2ac4d881a4684c1f0317d2107f1a4152bad9" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/theseer/tokenizer/zipball/75a63c33a8577608444246075ea0af0d052e452a", - "reference": "75a63c33a8577608444246075ea0af0d052e452a", + "url": "https://api.github.com/repos/symfony/yaml/zipball/ec3c2ac4d881a4684c1f0317d2107f1a4152bad9", + "reference": "ec3c2ac4d881a4684c1f0317d2107f1a4152bad9", "shasum": "" }, "require": { - "ext-dom": "*", - "ext-tokenizer": "*", - "ext-xmlwriter": "*", - "php": "^7.2 || ^8.0" + "php": "^5.5.9|>=7.0.8", + "symfony/polyfill-ctype": "~1.8" + }, + "conflict": { + "symfony/console": "<3.4" + }, + "require-dev": { + "symfony/console": "~3.4|~4.0" + }, + "suggest": { + "symfony/console": "For validating YAML files using the lint command" }, "type": "library", + "extra": { + "branch-alias": { + "dev-master": "3.4-dev" + } + }, "autoload": { - "classmap": [ - "src/" + "psr-4": { + "Symfony\\Component\\Yaml\\": "" + }, + "exclude-from-classmap": [ + "/Tests/" ] }, "notification-url": "https://packagist.org/downloads/", "license": [ - "BSD-3-Clause" + "MIT" ], "authors": [ { - "name": "Arne Blankerts", - "email": "arne@blankerts.de", - "role": "Developer" + "name": "Fabien Potencier", + "email": "fabien@symfony.com" + }, + { + "name": "Symfony Community", + "homepage": "https://symfony.com/contributors" } ], - "description": "A small library for converting tokenized PHP source code into XML and potentially other formats", + "description": "Symfony Yaml Component", + "homepage": "https://symfony.com", "funding": [ { - "url": "https://github.com/theseer", + "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": "2020-07-12T23:59:07+00:00" + "time": "2020-09-18T15:58:55+00:00" }, { "name": "webmozart/assert", @@ -1888,5 +1787,8 @@ "ext-json": "*" }, "platform-dev": [], + "platform-overrides": { + "php": "5.6" + }, "plugin-api-version": "1.1.0" } From aaff84f1971ca96ab5a66ad80c4af7182c0d30c6 Mon Sep 17 00:00:00 2001 From: Stefan Kalscheuer Date: Sat, 17 Oct 2020 17:54:48 +0200 Subject: [PATCH 04/17] run phpunit from composer in ci builds --- .travis.yml | 2 +- composer.json | 3 +++ 2 files changed, 4 insertions(+), 1 deletion(-) diff --git a/.travis.yml b/.travis.yml index 77a4011..094790f 100644 --- a/.travis.yml +++ b/.travis.yml @@ -32,7 +32,7 @@ before_script: script: - composer build - composer lint-all - - phpunit --coverage-clover clover.xml + - composer test after_script: # Push coverage off to Codecov diff --git a/composer.json b/composer.json index 50e146b..a0f1447 100644 --- a/composer.json +++ b/composer.json @@ -50,6 +50,9 @@ "minify": [ "minifycss css/style.css > css/style.min.css", "minifyjs js/script.js > js/script.min.js" + ], + "test": [ + "phpunit --coverage-clover clover.xml" ] } } From f83bae6750253e30497ae2652debff5adf86b81f Mon Sep 17 00:00:00 2001 From: Stefan Kalscheuer Date: Sun, 18 Oct 2020 14:49:50 +0200 Subject: [PATCH 05/17] rework unit tests using WP_Mock Split tests into separate classes for the plugin itself and the modules. Mock WP environment instead of installing it. Update PHPUnit to 7.x again and use PHP 7.1+ only for CI. --- .distignore | 1 + .gitignore | 1 + .travis.yml | 10 - composer.json | 5 +- composer.lock | 917 +++++++++++++++++++++++------------- phpunit.xml | 21 +- tests/antivirustestcase.php | 69 +++ tests/bootstrap.php | 23 +- tests/test-plugin.php | 271 +++++------ tests/test-safebrowsing.php | 160 +++++++ 10 files changed, 950 insertions(+), 528 deletions(-) create mode 100644 tests/antivirustestcase.php create mode 100644 tests/test-safebrowsing.php diff --git a/.distignore b/.distignore index de93c6d..4797e2a 100644 --- a/.distignore +++ b/.distignore @@ -12,6 +12,7 @@ /.gitignore /.stylelintrc.json /.travis.yml +/clover.xml /composer.json /package.json /package-lock.json diff --git a/.gitignore b/.gitignore index 87c14fc..d0ef9ce 100644 --- a/.gitignore +++ b/.gitignore @@ -3,3 +3,4 @@ css/*.min.css js/*.min.js vendor/ node_modules/ +clover.xml diff --git a/.travis.yml b/.travis.yml index 094790f..62f31d0 100644 --- a/.travis.yml +++ b/.travis.yml @@ -1,25 +1,16 @@ language: php php: - - '5.6' - - '7.0' - '7.1' - '7.2' - '7.3' - '7.4' - nightly -services: - - mysql - matrix: allow_failures: - php: nightly -env: - - WP_VERSION=nightly WP_MULTISITE=0 - - WP_VERSION=nightly WP_MULTISITE=1 - before_install: - nvm install 12 @@ -27,7 +18,6 @@ before_install: before_script: - composer install --no-interaction - npm install - - bash bin/install-wp-tests.sh wordpress_test root '' 127.0.0.1 $WP_VERSION script: - composer build diff --git a/composer.json b/composer.json index a0f1447..ca61a99 100644 --- a/composer.json +++ b/composer.json @@ -9,11 +9,12 @@ "ext-json": "*" }, "require-dev": { + "php": "^7.1", "dealerdirect/phpcodesniffer-composer-installer": "^0.7", - "lipemat/wp-unit": "^1.5", + "10up/wp_mock": "^0.4", "matthiasmullie/minify": "^1.3", "phpcompatibility/php-compatibility": "^9.3", - "phpunit/phpunit": "^5", + "phpunit/phpunit": "^7", "squizlabs/php_codesniffer": "^3.5", "wp-coding-standards/wpcs": "^2.3" }, diff --git a/composer.lock b/composer.lock index 0d93ef8..f148005 100644 --- a/composer.lock +++ b/composer.lock @@ -4,9 +4,94 @@ "Read more about it at https://getcomposer.org/doc/01-basic-usage.md#installing-dependencies", "This file is @generated automatically" ], - "content-hash": "60e5af9e70d08c3d8c0986926f7f8699", + "content-hash": "55e64d1dabae4fcafa9d9f9bf58df365", "packages": [], "packages-dev": [ + { + "name": "10up/wp_mock", + "version": "0.4.2", + "source": { + "type": "git", + "url": "https://github.com/10up/wp_mock.git", + "reference": "9019226eb50df275aa86bb15bfc98a619601ee49" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/10up/wp_mock/zipball/9019226eb50df275aa86bb15bfc98a619601ee49", + "reference": "9019226eb50df275aa86bb15bfc98a619601ee49", + "shasum": "" + }, + "require": { + "antecedent/patchwork": "^2.1", + "mockery/mockery": "^1.0", + "php": ">=7.1", + "phpunit/phpunit": ">=7.0" + }, + "require-dev": { + "behat/behat": "^3.0", + "php-coveralls/php-coveralls": "^2.1", + "sebastian/comparator": ">=1.2.3" + }, + "type": "library", + "autoload": { + "psr-4": { + "WP_Mock\\": "./php/WP_Mock" + }, + "classmap": [ + "php/WP_Mock.php" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "GPL-2.0-or-later" + ], + "description": "A mocking library to take the pain out of unit testing for WordPress", + "time": "2019-03-16T03:44:39+00:00" + }, + { + "name": "antecedent/patchwork", + "version": "2.1.12", + "source": { + "type": "git", + "url": "https://github.com/antecedent/patchwork.git", + "reference": "b98e046dd4c0acc34a0846604f06f6111654d9ea" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/antecedent/patchwork/zipball/b98e046dd4c0acc34a0846604f06f6111654d9ea", + "reference": "b98e046dd4c0acc34a0846604f06f6111654d9ea", + "shasum": "" + }, + "require": { + "php": ">=5.4.0" + }, + "require-dev": { + "phpunit/phpunit": ">=4" + }, + "type": "library", + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Ignas Rudaitis", + "email": "ignas.rudaitis@gmail.com" + } + ], + "description": "Method redefinition (monkey-patching) functionality for PHP.", + "homepage": "http://patchwork2.org/", + "keywords": [ + "aop", + "aspect", + "interception", + "monkeypatching", + "redefinition", + "runkit", + "testing" + ], + "time": "2019-12-22T17:52:09+00:00" + }, { "name": "dealerdirect/phpcodesniffer-composer-installer", "version": "v0.7.0", @@ -75,32 +160,34 @@ }, { "name": "doctrine/instantiator", - "version": "1.0.5", + "version": "1.3.1", "source": { "type": "git", "url": "https://github.com/doctrine/instantiator.git", - "reference": "8e884e78f9f0eb1329e445619e04456e64d8051d" + "reference": "f350df0268e904597e3bd9c4685c53e0e333feea" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/doctrine/instantiator/zipball/8e884e78f9f0eb1329e445619e04456e64d8051d", - "reference": "8e884e78f9f0eb1329e445619e04456e64d8051d", + "url": "https://api.github.com/repos/doctrine/instantiator/zipball/f350df0268e904597e3bd9c4685c53e0e333feea", + "reference": "f350df0268e904597e3bd9c4685c53e0e333feea", "shasum": "" }, "require": { - "php": ">=5.3,<8.0-DEV" + "php": "^7.1 || ^8.0" }, "require-dev": { - "athletic/athletic": "~0.1.8", + "doctrine/coding-standard": "^6.0", "ext-pdo": "*", "ext-phar": "*", - "phpunit/phpunit": "~4.0", - "squizlabs/php_codesniffer": "~2.0" + "phpbench/phpbench": "^0.13", + "phpstan/phpstan-phpunit": "^0.11", + "phpstan/phpstan-shim": "^0.11", + "phpunit/phpunit": "^7.0" }, "type": "library", "extra": { "branch-alias": { - "dev-master": "1.0.x-dev" + "dev-master": "1.2.x-dev" } }, "autoload": { @@ -120,40 +207,73 @@ } ], "description": "A small, lightweight utility to instantiate objects in PHP without invoking their constructors", - "homepage": "https://github.com/doctrine/instantiator", + "homepage": "https://www.doctrine-project.org/projects/instantiator.html", "keywords": [ "constructor", "instantiate" ], - "time": "2015-06-14T21:17:01+00:00" + "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": "2020-05-29T17:27:14+00:00" }, { - "name": "lipemat/wp-unit", - "version": "1.8.0", + "name": "hamcrest/hamcrest-php", + "version": "v2.0.1", "source": { "type": "git", - "url": "https://github.com/lipemat/wp-unit.git", - "reference": "722ae3c5f44ec0a01d37da48dc01d6bb86230a8b" + "url": "https://github.com/hamcrest/hamcrest-php.git", + "reference": "8c3d0a3f6af734494ad8f6fbbee0ba92422859f3" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/lipemat/wp-unit/zipball/722ae3c5f44ec0a01d37da48dc01d6bb86230a8b", - "reference": "722ae3c5f44ec0a01d37da48dc01d6bb86230a8b", + "url": "https://api.github.com/repos/hamcrest/hamcrest-php/zipball/8c3d0a3f6af734494ad8f6fbbee0ba92422859f3", + "reference": "8c3d0a3f6af734494ad8f6fbbee0ba92422859f3", "shasum": "" }, + "require": { + "php": "^5.3|^7.0|^8.0" + }, + "replace": { + "cordoval/hamcrest-php": "*", + "davedevelopment/hamcrest-php": "*", + "kodova/hamcrest-php": "*" + }, + "require-dev": { + "phpunit/php-file-iterator": "^1.4 || ^2.0", + "phpunit/phpunit": "^4.8.36 || ^5.7 || ^6.5 || ^7.0" + }, "type": "library", + "extra": { + "branch-alias": { + "dev-master": "2.1-dev" + } + }, + "autoload": { + "classmap": [ + "hamcrest" + ] + }, "notification-url": "https://packagist.org/downloads/", "license": [ - "MIT" + "BSD-3-Clause" ], - "authors": [ - { - "name": "lipemat", - "email": "mat@matlipe.com" - } + "description": "This is the PHP port of Hamcrest Matchers", + "keywords": [ + "test" ], - "description": "Forked Wp-unit with support for testing against existing database and other environment enhancements", - "time": "2019-11-01T20:37:25+00:00" + "time": "2020-07-09T08:09:16+00:00" }, { "name": "matthiasmullie/minify", @@ -264,27 +384,95 @@ ], "time": "2019-02-05T23:41:09+00:00" }, + { + "name": "mockery/mockery", + "version": "1.3.3", + "source": { + "type": "git", + "url": "https://github.com/mockery/mockery.git", + "reference": "60fa2f67f6e4d3634bb4a45ff3171fa52215800d" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/mockery/mockery/zipball/60fa2f67f6e4d3634bb4a45ff3171fa52215800d", + "reference": "60fa2f67f6e4d3634bb4a45ff3171fa52215800d", + "shasum": "" + }, + "require": { + "hamcrest/hamcrest-php": "^2.0.1", + "lib-pcre": ">=7.0", + "php": ">=5.6.0" + }, + "require-dev": { + "phpunit/phpunit": "^5.7.10|^6.5|^7.5|^8.5|^9.3" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "1.3.x-dev" + } + }, + "autoload": { + "psr-0": { + "Mockery": "library/" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "BSD-3-Clause" + ], + "authors": [ + { + "name": "Pádraic Brady", + "email": "padraic.brady@gmail.com", + "homepage": "http://blog.astrumfutura.com" + }, + { + "name": "Dave Marshall", + "email": "dave.marshall@atstsolutions.co.uk", + "homepage": "http://davedevelopment.co.uk" + } + ], + "description": "Mockery is a simple yet flexible PHP mock object framework", + "homepage": "https://github.com/mockery/mockery", + "keywords": [ + "BDD", + "TDD", + "library", + "mock", + "mock objects", + "mockery", + "stub", + "test", + "test double", + "testing" + ], + "time": "2020-08-11T18:10:21+00:00" + }, { "name": "myclabs/deep-copy", - "version": "1.7.0", + "version": "1.10.1", "source": { "type": "git", "url": "https://github.com/myclabs/DeepCopy.git", - "reference": "3b8a3a99ba1f6a3952ac2747d989303cbd6b7a3e" + "reference": "969b211f9a51aa1f6c01d1d2aef56d3bd91598e5" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/myclabs/DeepCopy/zipball/3b8a3a99ba1f6a3952ac2747d989303cbd6b7a3e", - "reference": "3b8a3a99ba1f6a3952ac2747d989303cbd6b7a3e", + "url": "https://api.github.com/repos/myclabs/DeepCopy/zipball/969b211f9a51aa1f6c01d1d2aef56d3bd91598e5", + "reference": "969b211f9a51aa1f6c01d1d2aef56d3bd91598e5", "shasum": "" }, "require": { - "php": "^5.6 || ^7.0" + "php": "^7.1 || ^8.0" + }, + "replace": { + "myclabs/deep-copy": "self.version" }, "require-dev": { "doctrine/collections": "^1.0", "doctrine/common": "^2.6", - "phpunit/phpunit": "^4.1" + "phpunit/phpunit": "^7.1" }, "type": "library", "autoload": { @@ -307,7 +495,115 @@ "object", "object graph" ], - "time": "2017-10-19T19:58:43+00:00" + "funding": [ + { + "url": "https://tidelift.com/funding/github/packagist/myclabs/deep-copy", + "type": "tidelift" + } + ], + "time": "2020-06-29T13:22:24+00:00" + }, + { + "name": "phar-io/manifest", + "version": "1.0.3", + "source": { + "type": "git", + "url": "https://github.com/phar-io/manifest.git", + "reference": "7761fcacf03b4d4f16e7ccb606d4879ca431fcf4" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/phar-io/manifest/zipball/7761fcacf03b4d4f16e7ccb606d4879ca431fcf4", + "reference": "7761fcacf03b4d4f16e7ccb606d4879ca431fcf4", + "shasum": "" + }, + "require": { + "ext-dom": "*", + "ext-phar": "*", + "phar-io/version": "^2.0", + "php": "^5.6 || ^7.0" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "1.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)", + "time": "2018-07-08T19:23:20+00:00" + }, + { + "name": "phar-io/version", + "version": "2.0.1", + "source": { + "type": "git", + "url": "https://github.com/phar-io/version.git", + "reference": "45a2ec53a73c70ce41d55cedef9063630abaf1b6" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/phar-io/version/zipball/45a2ec53a73c70ce41d55cedef9063630abaf1b6", + "reference": "45a2ec53a73c70ce41d55cedef9063630abaf1b6", + "shasum": "" + }, + "require": { + "php": "^5.6 || ^7.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", + "time": "2018-07-08T19:19:57+00:00" }, { "name": "phpcompatibility/php-compatibility", @@ -369,35 +665,30 @@ }, { "name": "phpdocumentor/reflection-common", - "version": "1.0.1", + "version": "2.1.0", "source": { "type": "git", "url": "https://github.com/phpDocumentor/ReflectionCommon.git", - "reference": "21bdeb5f65d7ebf9f43b1b25d404f87deab5bfb6" + "reference": "6568f4687e5b41b054365f9ae03fcb1ed5f2069b" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/phpDocumentor/ReflectionCommon/zipball/21bdeb5f65d7ebf9f43b1b25d404f87deab5bfb6", - "reference": "21bdeb5f65d7ebf9f43b1b25d404f87deab5bfb6", + "url": "https://api.github.com/repos/phpDocumentor/ReflectionCommon/zipball/6568f4687e5b41b054365f9ae03fcb1ed5f2069b", + "reference": "6568f4687e5b41b054365f9ae03fcb1ed5f2069b", "shasum": "" }, "require": { - "php": ">=5.5" - }, - "require-dev": { - "phpunit/phpunit": "^4.6" + "php": ">=7.1" }, "type": "library", "extra": { "branch-alias": { - "dev-master": "1.0.x-dev" + "dev-master": "2.x-dev" } }, "autoload": { "psr-4": { - "phpDocumentor\\Reflection\\": [ - "src" - ] + "phpDocumentor\\Reflection\\": "src/" } }, "notification-url": "https://packagist.org/downloads/", @@ -419,33 +710,40 @@ "reflection", "static analysis" ], - "time": "2017-09-11T18:02:19+00:00" + "time": "2020-04-27T09:25:28+00:00" }, { "name": "phpdocumentor/reflection-docblock", - "version": "3.3.2", + "version": "4.3.4", "source": { "type": "git", "url": "https://github.com/phpDocumentor/ReflectionDocBlock.git", - "reference": "bf329f6c1aadea3299f08ee804682b7c45b326a2" + "reference": "da3fd972d6bafd628114f7e7e036f45944b62e9c" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/phpDocumentor/ReflectionDocBlock/zipball/bf329f6c1aadea3299f08ee804682b7c45b326a2", - "reference": "bf329f6c1aadea3299f08ee804682b7c45b326a2", + "url": "https://api.github.com/repos/phpDocumentor/ReflectionDocBlock/zipball/da3fd972d6bafd628114f7e7e036f45944b62e9c", + "reference": "da3fd972d6bafd628114f7e7e036f45944b62e9c", "shasum": "" }, "require": { - "php": "^5.6 || ^7.0", - "phpdocumentor/reflection-common": "^1.0.0", - "phpdocumentor/type-resolver": "^0.4.0", + "php": "^7.0", + "phpdocumentor/reflection-common": "^1.0.0 || ^2.0.0", + "phpdocumentor/type-resolver": "~0.4 || ^1.0.0", "webmozart/assert": "^1.0" }, "require-dev": { - "mockery/mockery": "^0.9.4", - "phpunit/phpunit": "^4.4" + "doctrine/instantiator": "^1.0.5", + "mockery/mockery": "^1.0", + "phpdocumentor/type-resolver": "0.4.*", + "phpunit/phpunit": "^6.4" }, "type": "library", + "extra": { + "branch-alias": { + "dev-master": "4.x-dev" + } + }, "autoload": { "psr-4": { "phpDocumentor\\Reflection\\": [ @@ -464,41 +762,40 @@ } ], "description": "With this component, a library can provide support for annotations via DocBlocks or otherwise retrieve information that is embedded in a DocBlock.", - "time": "2017-11-10T14:09:06+00:00" + "time": "2019-12-28T18:55:12+00:00" }, { "name": "phpdocumentor/type-resolver", - "version": "0.4.0", + "version": "1.0.1", "source": { "type": "git", "url": "https://github.com/phpDocumentor/TypeResolver.git", - "reference": "9c977708995954784726e25d0cd1dddf4e65b0f7" + "reference": "2e32a6d48972b2c1976ed5d8967145b6cec4a4a9" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/phpDocumentor/TypeResolver/zipball/9c977708995954784726e25d0cd1dddf4e65b0f7", - "reference": "9c977708995954784726e25d0cd1dddf4e65b0f7", + "url": "https://api.github.com/repos/phpDocumentor/TypeResolver/zipball/2e32a6d48972b2c1976ed5d8967145b6cec4a4a9", + "reference": "2e32a6d48972b2c1976ed5d8967145b6cec4a4a9", "shasum": "" }, "require": { - "php": "^5.5 || ^7.0", - "phpdocumentor/reflection-common": "^1.0" + "php": "^7.1", + "phpdocumentor/reflection-common": "^2.0" }, "require-dev": { - "mockery/mockery": "^0.9.4", - "phpunit/phpunit": "^5.2||^4.8.24" + "ext-tokenizer": "^7.1", + "mockery/mockery": "~1", + "phpunit/phpunit": "^7.0" }, "type": "library", "extra": { "branch-alias": { - "dev-master": "1.0.x-dev" + "dev-master": "1.x-dev" } }, "autoload": { "psr-4": { - "phpDocumentor\\Reflection\\": [ - "src/" - ] + "phpDocumentor\\Reflection\\": "src" } }, "notification-url": "https://packagist.org/downloads/", @@ -511,7 +808,8 @@ "email": "me@mikevanriel.com" } ], - "time": "2017-07-14T14:27:02+00:00" + "description": "A PSR-5 based resolver of Class names, Types and Structural Element Names", + "time": "2019-08-22T18:11:29+00:00" }, { "name": "phpspec/prophecy", @@ -578,40 +876,40 @@ }, { "name": "phpunit/php-code-coverage", - "version": "4.0.8", + "version": "6.1.4", "source": { "type": "git", "url": "https://github.com/sebastianbergmann/php-code-coverage.git", - "reference": "ef7b2f56815df854e66ceaee8ebe9393ae36a40d" + "reference": "807e6013b00af69b6c5d9ceb4282d0393dbb9d8d" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/sebastianbergmann/php-code-coverage/zipball/ef7b2f56815df854e66ceaee8ebe9393ae36a40d", - "reference": "ef7b2f56815df854e66ceaee8ebe9393ae36a40d", + "url": "https://api.github.com/repos/sebastianbergmann/php-code-coverage/zipball/807e6013b00af69b6c5d9ceb4282d0393dbb9d8d", + "reference": "807e6013b00af69b6c5d9ceb4282d0393dbb9d8d", "shasum": "" }, "require": { "ext-dom": "*", "ext-xmlwriter": "*", - "php": "^5.6 || ^7.0", - "phpunit/php-file-iterator": "^1.3", - "phpunit/php-text-template": "^1.2", - "phpunit/php-token-stream": "^1.4.2 || ^2.0", - "sebastian/code-unit-reverse-lookup": "^1.0", - "sebastian/environment": "^1.3.2 || ^2.0", - "sebastian/version": "^1.0 || ^2.0" + "php": "^7.1", + "phpunit/php-file-iterator": "^2.0", + "phpunit/php-text-template": "^1.2.1", + "phpunit/php-token-stream": "^3.0", + "sebastian/code-unit-reverse-lookup": "^1.0.1", + "sebastian/environment": "^3.1 || ^4.0", + "sebastian/version": "^2.0.1", + "theseer/tokenizer": "^1.1" }, "require-dev": { - "ext-xdebug": "^2.1.4", - "phpunit/phpunit": "^5.7" + "phpunit/phpunit": "^7.0" }, "suggest": { - "ext-xdebug": "^2.5.1" + "ext-xdebug": "^2.6.0" }, "type": "library", "extra": { "branch-alias": { - "dev-master": "4.0.x-dev" + "dev-master": "6.1-dev" } }, "autoload": { @@ -626,7 +924,7 @@ "authors": [ { "name": "Sebastian Bergmann", - "email": "sb@sebastian-bergmann.de", + "email": "sebastian@phpunit.de", "role": "lead" } ], @@ -637,29 +935,32 @@ "testing", "xunit" ], - "time": "2017-04-02T07:44:40+00:00" + "time": "2018-10-31T16:06:48+00:00" }, { "name": "phpunit/php-file-iterator", - "version": "1.4.5", + "version": "2.0.2", "source": { "type": "git", "url": "https://github.com/sebastianbergmann/php-file-iterator.git", - "reference": "730b01bc3e867237eaac355e06a36b85dd93a8b4" + "reference": "050bedf145a257b1ff02746c31894800e5122946" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/sebastianbergmann/php-file-iterator/zipball/730b01bc3e867237eaac355e06a36b85dd93a8b4", - "reference": "730b01bc3e867237eaac355e06a36b85dd93a8b4", + "url": "https://api.github.com/repos/sebastianbergmann/php-file-iterator/zipball/050bedf145a257b1ff02746c31894800e5122946", + "reference": "050bedf145a257b1ff02746c31894800e5122946", "shasum": "" }, "require": { - "php": ">=5.3.3" + "php": "^7.1" + }, + "require-dev": { + "phpunit/phpunit": "^7.1" }, "type": "library", "extra": { "branch-alias": { - "dev-master": "1.4.x-dev" + "dev-master": "2.0.x-dev" } }, "autoload": { @@ -674,7 +975,7 @@ "authors": [ { "name": "Sebastian Bergmann", - "email": "sb@sebastian-bergmann.de", + "email": "sebastian@phpunit.de", "role": "lead" } ], @@ -684,7 +985,7 @@ "filesystem", "iterator" ], - "time": "2017-11-27T13:52:08+00:00" + "time": "2018-09-13T20:33:42+00:00" }, { "name": "phpunit/php-text-template", @@ -729,28 +1030,28 @@ }, { "name": "phpunit/php-timer", - "version": "1.0.9", + "version": "2.1.2", "source": { "type": "git", "url": "https://github.com/sebastianbergmann/php-timer.git", - "reference": "3dcf38ca72b158baf0bc245e9184d3fdffa9c46f" + "reference": "1038454804406b0b5f5f520358e78c1c2f71501e" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/sebastianbergmann/php-timer/zipball/3dcf38ca72b158baf0bc245e9184d3fdffa9c46f", - "reference": "3dcf38ca72b158baf0bc245e9184d3fdffa9c46f", + "url": "https://api.github.com/repos/sebastianbergmann/php-timer/zipball/1038454804406b0b5f5f520358e78c1c2f71501e", + "reference": "1038454804406b0b5f5f520358e78c1c2f71501e", "shasum": "" }, "require": { - "php": "^5.3.3 || ^7.0" + "php": "^7.1" }, "require-dev": { - "phpunit/phpunit": "^4.8.35 || ^5.7 || ^6.0" + "phpunit/phpunit": "^7.0" }, "type": "library", "extra": { "branch-alias": { - "dev-master": "1.0-dev" + "dev-master": "2.1-dev" } }, "autoload": { @@ -765,7 +1066,7 @@ "authors": [ { "name": "Sebastian Bergmann", - "email": "sb@sebastian-bergmann.de", + "email": "sebastian@phpunit.de", "role": "lead" } ], @@ -774,33 +1075,33 @@ "keywords": [ "timer" ], - "time": "2017-02-26T11:10:40+00:00" + "time": "2019-06-07T04:22:29+00:00" }, { "name": "phpunit/php-token-stream", - "version": "1.4.12", + "version": "3.1.1", "source": { "type": "git", "url": "https://github.com/sebastianbergmann/php-token-stream.git", - "reference": "1ce90ba27c42e4e44e6d8458241466380b51fa16" + "reference": "995192df77f63a59e47f025390d2d1fdf8f425ff" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/sebastianbergmann/php-token-stream/zipball/1ce90ba27c42e4e44e6d8458241466380b51fa16", - "reference": "1ce90ba27c42e4e44e6d8458241466380b51fa16", + "url": "https://api.github.com/repos/sebastianbergmann/php-token-stream/zipball/995192df77f63a59e47f025390d2d1fdf8f425ff", + "reference": "995192df77f63a59e47f025390d2d1fdf8f425ff", "shasum": "" }, "require": { "ext-tokenizer": "*", - "php": ">=5.3.3" + "php": "^7.1" }, "require-dev": { - "phpunit/phpunit": "~4.2" + "phpunit/phpunit": "^7.0" }, "type": "library", "extra": { "branch-alias": { - "dev-master": "1.4-dev" + "dev-master": "3.1-dev" } }, "autoload": { @@ -824,55 +1125,57 @@ "tokenizer" ], "abandoned": true, - "time": "2017-12-04T08:55:13+00:00" + "time": "2019-09-17T06:23:10+00:00" }, { "name": "phpunit/phpunit", - "version": "5.7.27", + "version": "7.5.20", "source": { "type": "git", "url": "https://github.com/sebastianbergmann/phpunit.git", - "reference": "b7803aeca3ccb99ad0a506fa80b64cd6a56bbc0c" + "reference": "9467db479d1b0487c99733bb1e7944d32deded2c" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/sebastianbergmann/phpunit/zipball/b7803aeca3ccb99ad0a506fa80b64cd6a56bbc0c", - "reference": "b7803aeca3ccb99ad0a506fa80b64cd6a56bbc0c", + "url": "https://api.github.com/repos/sebastianbergmann/phpunit/zipball/9467db479d1b0487c99733bb1e7944d32deded2c", + "reference": "9467db479d1b0487c99733bb1e7944d32deded2c", "shasum": "" }, "require": { + "doctrine/instantiator": "^1.1", "ext-dom": "*", "ext-json": "*", "ext-libxml": "*", "ext-mbstring": "*", "ext-xml": "*", - "myclabs/deep-copy": "~1.3", - "php": "^5.6 || ^7.0", - "phpspec/prophecy": "^1.6.2", - "phpunit/php-code-coverage": "^4.0.4", - "phpunit/php-file-iterator": "~1.4", - "phpunit/php-text-template": "~1.2", - "phpunit/php-timer": "^1.0.6", - "phpunit/phpunit-mock-objects": "^3.2", - "sebastian/comparator": "^1.2.4", - "sebastian/diff": "^1.4.3", - "sebastian/environment": "^1.3.4 || ^2.0", - "sebastian/exporter": "~2.0", - "sebastian/global-state": "^1.1", - "sebastian/object-enumerator": "~2.0", - "sebastian/resource-operations": "~1.0", - "sebastian/version": "^1.0.6|^2.0.1", - "symfony/yaml": "~2.1|~3.0|~4.0" + "myclabs/deep-copy": "^1.7", + "phar-io/manifest": "^1.0.2", + "phar-io/version": "^2.0", + "php": "^7.1", + "phpspec/prophecy": "^1.7", + "phpunit/php-code-coverage": "^6.0.7", + "phpunit/php-file-iterator": "^2.0.1", + "phpunit/php-text-template": "^1.2.1", + "phpunit/php-timer": "^2.1", + "sebastian/comparator": "^3.0", + "sebastian/diff": "^3.0", + "sebastian/environment": "^4.0", + "sebastian/exporter": "^3.1", + "sebastian/global-state": "^2.0", + "sebastian/object-enumerator": "^3.0.3", + "sebastian/resource-operations": "^2.0", + "sebastian/version": "^2.0.1" }, "conflict": { - "phpdocumentor/reflection-docblock": "3.0.2" + "phpunit/phpunit-mock-objects": "*" }, "require-dev": { "ext-pdo": "*" }, "suggest": { + "ext-soap": "*", "ext-xdebug": "*", - "phpunit/php-invoker": "~1.1" + "phpunit/php-invoker": "^2.0" }, "bin": [ "phpunit" @@ -880,7 +1183,7 @@ "type": "library", "extra": { "branch-alias": { - "dev-master": "5.7.x-dev" + "dev-master": "7.5-dev" } }, "autoload": { @@ -906,67 +1209,7 @@ "testing", "xunit" ], - "time": "2018-02-01T05:50:59+00:00" - }, - { - "name": "phpunit/phpunit-mock-objects", - "version": "3.4.4", - "source": { - "type": "git", - "url": "https://github.com/sebastianbergmann/phpunit-mock-objects.git", - "reference": "a23b761686d50a560cc56233b9ecf49597cc9118" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/sebastianbergmann/phpunit-mock-objects/zipball/a23b761686d50a560cc56233b9ecf49597cc9118", - "reference": "a23b761686d50a560cc56233b9ecf49597cc9118", - "shasum": "" - }, - "require": { - "doctrine/instantiator": "^1.0.2", - "php": "^5.6 || ^7.0", - "phpunit/php-text-template": "^1.2", - "sebastian/exporter": "^1.2 || ^2.0" - }, - "conflict": { - "phpunit/phpunit": "<5.4.0" - }, - "require-dev": { - "phpunit/phpunit": "^5.4" - }, - "suggest": { - "ext-soap": "*" - }, - "type": "library", - "extra": { - "branch-alias": { - "dev-master": "3.2.x-dev" - } - }, - "autoload": { - "classmap": [ - "src/" - ] - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "BSD-3-Clause" - ], - "authors": [ - { - "name": "Sebastian Bergmann", - "email": "sb@sebastian-bergmann.de", - "role": "lead" - } - ], - "description": "Mock Object library for PHPUnit", - "homepage": "https://github.com/sebastianbergmann/phpunit-mock-objects/", - "keywords": [ - "mock", - "xunit" - ], - "abandoned": true, - "time": "2017-06-30T09:13:00+00:00" + "time": "2020-01-08T08:45:45+00:00" }, { "name": "sebastian/code-unit-reverse-lookup", @@ -1015,30 +1258,30 @@ }, { "name": "sebastian/comparator", - "version": "1.2.4", + "version": "3.0.2", "source": { "type": "git", "url": "https://github.com/sebastianbergmann/comparator.git", - "reference": "2b7424b55f5047b47ac6e5ccb20b2aea4011d9be" + "reference": "5de4fc177adf9bce8df98d8d141a7559d7ccf6da" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/sebastianbergmann/comparator/zipball/2b7424b55f5047b47ac6e5ccb20b2aea4011d9be", - "reference": "2b7424b55f5047b47ac6e5ccb20b2aea4011d9be", + "url": "https://api.github.com/repos/sebastianbergmann/comparator/zipball/5de4fc177adf9bce8df98d8d141a7559d7ccf6da", + "reference": "5de4fc177adf9bce8df98d8d141a7559d7ccf6da", "shasum": "" }, "require": { - "php": ">=5.3.3", - "sebastian/diff": "~1.2", - "sebastian/exporter": "~1.2 || ~2.0" + "php": "^7.1", + "sebastian/diff": "^3.0", + "sebastian/exporter": "^3.1" }, "require-dev": { - "phpunit/phpunit": "~4.4" + "phpunit/phpunit": "^7.1" }, "type": "library", "extra": { "branch-alias": { - "dev-master": "1.2.x-dev" + "dev-master": "3.0-dev" } }, "autoload": { @@ -1069,38 +1312,39 @@ } ], "description": "Provides the functionality to compare PHP values for equality", - "homepage": "http://www.github.com/sebastianbergmann/comparator", + "homepage": "https://github.com/sebastianbergmann/comparator", "keywords": [ "comparator", "compare", "equality" ], - "time": "2017-01-29T09:50:25+00:00" + "time": "2018-07-12T15:12:46+00:00" }, { "name": "sebastian/diff", - "version": "1.4.3", + "version": "3.0.2", "source": { "type": "git", "url": "https://github.com/sebastianbergmann/diff.git", - "reference": "7f066a26a962dbe58ddea9f72a4e82874a3975a4" + "reference": "720fcc7e9b5cf384ea68d9d930d480907a0c1a29" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/sebastianbergmann/diff/zipball/7f066a26a962dbe58ddea9f72a4e82874a3975a4", - "reference": "7f066a26a962dbe58ddea9f72a4e82874a3975a4", + "url": "https://api.github.com/repos/sebastianbergmann/diff/zipball/720fcc7e9b5cf384ea68d9d930d480907a0c1a29", + "reference": "720fcc7e9b5cf384ea68d9d930d480907a0c1a29", "shasum": "" }, "require": { - "php": "^5.3.3 || ^7.0" + "php": "^7.1" }, "require-dev": { - "phpunit/phpunit": "^4.8.35 || ^5.7 || ^6.0" + "phpunit/phpunit": "^7.5 || ^8.0", + "symfony/process": "^2 || ^3.3 || ^4" }, "type": "library", "extra": { "branch-alias": { - "dev-master": "1.4-dev" + "dev-master": "3.0-dev" } }, "autoload": { @@ -1125,34 +1369,40 @@ "description": "Diff implementation", "homepage": "https://github.com/sebastianbergmann/diff", "keywords": [ - "diff" + "diff", + "udiff", + "unidiff", + "unified diff" ], - "time": "2017-05-22T07:24:03+00:00" + "time": "2019-02-04T06:01:07+00:00" }, { "name": "sebastian/environment", - "version": "2.0.0", + "version": "4.2.3", "source": { "type": "git", "url": "https://github.com/sebastianbergmann/environment.git", - "reference": "5795ffe5dc5b02460c3e34222fee8cbe245d8fac" + "reference": "464c90d7bdf5ad4e8a6aea15c091fec0603d4368" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/sebastianbergmann/environment/zipball/5795ffe5dc5b02460c3e34222fee8cbe245d8fac", - "reference": "5795ffe5dc5b02460c3e34222fee8cbe245d8fac", + "url": "https://api.github.com/repos/sebastianbergmann/environment/zipball/464c90d7bdf5ad4e8a6aea15c091fec0603d4368", + "reference": "464c90d7bdf5ad4e8a6aea15c091fec0603d4368", "shasum": "" }, "require": { - "php": "^5.6 || ^7.0" + "php": "^7.1" }, "require-dev": { - "phpunit/phpunit": "^5.0" + "phpunit/phpunit": "^7.5" + }, + "suggest": { + "ext-posix": "*" }, "type": "library", "extra": { "branch-alias": { - "dev-master": "2.0.x-dev" + "dev-master": "4.2-dev" } }, "autoload": { @@ -1177,34 +1427,34 @@ "environment", "hhvm" ], - "time": "2016-11-26T07:53:53+00:00" + "time": "2019-11-20T08:46:58+00:00" }, { "name": "sebastian/exporter", - "version": "2.0.0", + "version": "3.1.2", "source": { "type": "git", "url": "https://github.com/sebastianbergmann/exporter.git", - "reference": "ce474bdd1a34744d7ac5d6aad3a46d48d9bac4c4" + "reference": "68609e1261d215ea5b21b7987539cbfbe156ec3e" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/sebastianbergmann/exporter/zipball/ce474bdd1a34744d7ac5d6aad3a46d48d9bac4c4", - "reference": "ce474bdd1a34744d7ac5d6aad3a46d48d9bac4c4", + "url": "https://api.github.com/repos/sebastianbergmann/exporter/zipball/68609e1261d215ea5b21b7987539cbfbe156ec3e", + "reference": "68609e1261d215ea5b21b7987539cbfbe156ec3e", "shasum": "" }, "require": { - "php": ">=5.3.3", - "sebastian/recursion-context": "~2.0" + "php": "^7.0", + "sebastian/recursion-context": "^3.0" }, "require-dev": { "ext-mbstring": "*", - "phpunit/phpunit": "~4.4" + "phpunit/phpunit": "^6.0" }, "type": "library", "extra": { "branch-alias": { - "dev-master": "2.0.x-dev" + "dev-master": "3.1.x-dev" } }, "autoload": { @@ -1217,6 +1467,10 @@ "BSD-3-Clause" ], "authors": [ + { + "name": "Sebastian Bergmann", + "email": "sebastian@phpunit.de" + }, { "name": "Jeff Welch", "email": "whatthejeff@gmail.com" @@ -1225,17 +1479,13 @@ "name": "Volker Dusch", "email": "github@wallbash.com" }, - { - "name": "Bernhard Schussek", - "email": "bschussek@2bepublished.at" - }, - { - "name": "Sebastian Bergmann", - "email": "sebastian@phpunit.de" - }, { "name": "Adam Harvey", "email": "aharvey@php.net" + }, + { + "name": "Bernhard Schussek", + "email": "bschussek@gmail.com" } ], "description": "Provides the functionality to export PHP variables for visualization", @@ -1244,27 +1494,27 @@ "export", "exporter" ], - "time": "2016-11-19T08:54:04+00:00" + "time": "2019-09-14T09:02:43+00:00" }, { "name": "sebastian/global-state", - "version": "1.1.1", + "version": "2.0.0", "source": { "type": "git", "url": "https://github.com/sebastianbergmann/global-state.git", - "reference": "bc37d50fea7d017d3d340f230811c9f1d7280af4" + "reference": "e8ba02eed7bbbb9e59e43dedd3dddeff4a56b0c4" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/sebastianbergmann/global-state/zipball/bc37d50fea7d017d3d340f230811c9f1d7280af4", - "reference": "bc37d50fea7d017d3d340f230811c9f1d7280af4", + "url": "https://api.github.com/repos/sebastianbergmann/global-state/zipball/e8ba02eed7bbbb9e59e43dedd3dddeff4a56b0c4", + "reference": "e8ba02eed7bbbb9e59e43dedd3dddeff4a56b0c4", "shasum": "" }, "require": { - "php": ">=5.3.3" + "php": "^7.0" }, "require-dev": { - "phpunit/phpunit": "~4.2" + "phpunit/phpunit": "^6.0" }, "suggest": { "ext-uopz": "*" @@ -1272,7 +1522,7 @@ "type": "library", "extra": { "branch-alias": { - "dev-master": "1.0-dev" + "dev-master": "2.0-dev" } }, "autoload": { @@ -1295,33 +1545,34 @@ "keywords": [ "global state" ], - "time": "2015-10-12T03:26:01+00:00" + "time": "2017-04-27T15:39:26+00:00" }, { "name": "sebastian/object-enumerator", - "version": "2.0.1", + "version": "3.0.3", "source": { "type": "git", "url": "https://github.com/sebastianbergmann/object-enumerator.git", - "reference": "1311872ac850040a79c3c058bea3e22d0f09cbb7" + "reference": "7cfd9e65d11ffb5af41198476395774d4c8a84c5" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/sebastianbergmann/object-enumerator/zipball/1311872ac850040a79c3c058bea3e22d0f09cbb7", - "reference": "1311872ac850040a79c3c058bea3e22d0f09cbb7", + "url": "https://api.github.com/repos/sebastianbergmann/object-enumerator/zipball/7cfd9e65d11ffb5af41198476395774d4c8a84c5", + "reference": "7cfd9e65d11ffb5af41198476395774d4c8a84c5", "shasum": "" }, "require": { - "php": ">=5.6", - "sebastian/recursion-context": "~2.0" + "php": "^7.0", + "sebastian/object-reflector": "^1.1.1", + "sebastian/recursion-context": "^3.0" }, "require-dev": { - "phpunit/phpunit": "~5" + "phpunit/phpunit": "^6.0" }, "type": "library", "extra": { "branch-alias": { - "dev-master": "2.0.x-dev" + "dev-master": "3.0.x-dev" } }, "autoload": { @@ -1341,32 +1592,77 @@ ], "description": "Traverses array structures and object graphs to enumerate all referenced objects", "homepage": "https://github.com/sebastianbergmann/object-enumerator/", - "time": "2017-02-18T15:18:39+00:00" + "time": "2017-08-03T12:35:26+00:00" + }, + { + "name": "sebastian/object-reflector", + "version": "1.1.1", + "source": { + "type": "git", + "url": "https://github.com/sebastianbergmann/object-reflector.git", + "reference": "773f97c67f28de00d397be301821b06708fca0be" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/sebastianbergmann/object-reflector/zipball/773f97c67f28de00d397be301821b06708fca0be", + "reference": "773f97c67f28de00d397be301821b06708fca0be", + "shasum": "" + }, + "require": { + "php": "^7.0" + }, + "require-dev": { + "phpunit/phpunit": "^6.0" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "1.1-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/", + "time": "2017-03-29T09:07:27+00:00" }, { "name": "sebastian/recursion-context", - "version": "2.0.0", + "version": "3.0.0", "source": { "type": "git", "url": "https://github.com/sebastianbergmann/recursion-context.git", - "reference": "2c3ba150cbec723aa057506e73a8d33bdb286c9a" + "reference": "5b0cd723502bac3b006cbf3dbf7a1e3fcefe4fa8" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/sebastianbergmann/recursion-context/zipball/2c3ba150cbec723aa057506e73a8d33bdb286c9a", - "reference": "2c3ba150cbec723aa057506e73a8d33bdb286c9a", + "url": "https://api.github.com/repos/sebastianbergmann/recursion-context/zipball/5b0cd723502bac3b006cbf3dbf7a1e3fcefe4fa8", + "reference": "5b0cd723502bac3b006cbf3dbf7a1e3fcefe4fa8", "shasum": "" }, "require": { - "php": ">=5.3.3" + "php": "^7.0" }, "require-dev": { - "phpunit/phpunit": "~4.4" + "phpunit/phpunit": "^6.0" }, "type": "library", "extra": { "branch-alias": { - "dev-master": "2.0.x-dev" + "dev-master": "3.0.x-dev" } }, "autoload": { @@ -1394,29 +1690,29 @@ ], "description": "Provides functionality to recursively process PHP variables", "homepage": "http://www.github.com/sebastianbergmann/recursion-context", - "time": "2016-11-19T07:33:16+00:00" + "time": "2017-03-03T06:23:57+00:00" }, { "name": "sebastian/resource-operations", - "version": "1.0.0", + "version": "2.0.1", "source": { "type": "git", "url": "https://github.com/sebastianbergmann/resource-operations.git", - "reference": "ce990bb21759f94aeafd30209e8cfcdfa8bc3f52" + "reference": "4d7a795d35b889bf80a0cc04e08d77cedfa917a9" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/sebastianbergmann/resource-operations/zipball/ce990bb21759f94aeafd30209e8cfcdfa8bc3f52", - "reference": "ce990bb21759f94aeafd30209e8cfcdfa8bc3f52", + "url": "https://api.github.com/repos/sebastianbergmann/resource-operations/zipball/4d7a795d35b889bf80a0cc04e08d77cedfa917a9", + "reference": "4d7a795d35b889bf80a0cc04e08d77cedfa917a9", "shasum": "" }, "require": { - "php": ">=5.6.0" + "php": "^7.1" }, "type": "library", "extra": { "branch-alias": { - "dev-master": "1.0.x-dev" + "dev-master": "2.0-dev" } }, "autoload": { @@ -1436,7 +1732,7 @@ ], "description": "Provides a list of PHP built-in functions that operate on resources", "homepage": "https://www.github.com/sebastianbergmann/resource-operations", - "time": "2015-07-28T20:34:47+00:00" + "time": "2018-10-04T04:07:39+00:00" }, { "name": "sebastian/version", @@ -1609,77 +1905,44 @@ "time": "2020-07-14T12:35:20+00:00" }, { - "name": "symfony/yaml", - "version": "v3.4.45", + "name": "theseer/tokenizer", + "version": "1.1.3", "source": { "type": "git", - "url": "https://github.com/symfony/yaml.git", - "reference": "ec3c2ac4d881a4684c1f0317d2107f1a4152bad9" + "url": "https://github.com/theseer/tokenizer.git", + "reference": "11336f6f84e16a720dae9d8e6ed5019efa85a0f9" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/yaml/zipball/ec3c2ac4d881a4684c1f0317d2107f1a4152bad9", - "reference": "ec3c2ac4d881a4684c1f0317d2107f1a4152bad9", + "url": "https://api.github.com/repos/theseer/tokenizer/zipball/11336f6f84e16a720dae9d8e6ed5019efa85a0f9", + "reference": "11336f6f84e16a720dae9d8e6ed5019efa85a0f9", "shasum": "" }, "require": { - "php": "^5.5.9|>=7.0.8", - "symfony/polyfill-ctype": "~1.8" - }, - "conflict": { - "symfony/console": "<3.4" - }, - "require-dev": { - "symfony/console": "~3.4|~4.0" - }, - "suggest": { - "symfony/console": "For validating YAML files using the lint command" + "ext-dom": "*", + "ext-tokenizer": "*", + "ext-xmlwriter": "*", + "php": "^7.0" }, "type": "library", - "extra": { - "branch-alias": { - "dev-master": "3.4-dev" - } - }, "autoload": { - "psr-4": { - "Symfony\\Component\\Yaml\\": "" - }, - "exclude-from-classmap": [ - "/Tests/" + "classmap": [ + "src/" ] }, "notification-url": "https://packagist.org/downloads/", "license": [ - "MIT" + "BSD-3-Clause" ], "authors": [ { - "name": "Fabien Potencier", - "email": "fabien@symfony.com" - }, - { - "name": "Symfony Community", - "homepage": "https://symfony.com/contributors" - } - ], - "description": "Symfony Yaml Component", - "homepage": "https://symfony.com", - "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" + "name": "Arne Blankerts", + "email": "arne@blankerts.de", + "role": "Developer" } ], - "time": "2020-09-18T15:58:55+00:00" + "description": "A small library for converting tokenized PHP source code into XML and potentially other formats", + "time": "2019-06-13T22:48:21+00:00" }, { "name": "webmozart/assert", @@ -1786,9 +2049,11 @@ "php": "^5.2|^7", "ext-json": "*" }, - "platform-dev": [], + "platform-dev": { + "php": "^7.1" + }, "platform-overrides": { - "php": "5.6" + "php": "7.1" }, "plugin-api-version": "1.1.0" } diff --git a/phpunit.xml b/phpunit.xml index f48f6fd..d568a30 100644 --- a/phpunit.xml +++ b/phpunit.xml @@ -1,23 +1,20 @@ - + - + tests/ - - . - ./antivirus.php + ./inc/ diff --git a/tests/antivirustestcase.php b/tests/antivirustestcase.php new file mode 100644 index 0000000..c22904d --- /dev/null +++ b/tests/antivirustestcase.php @@ -0,0 +1,69 @@ + 0, + 'cronjob_alert' => 0, + 'safe_browsing' => 0, + 'safe_browsing_key' => '', + 'checksum_verifier' => 0, + 'notify_email' => '', + 'white_list' => '', + ); + + /** + * Set up tests. + * + * Initialize WP_Mock and add some common mocks like options override and blog info. + */ + public function setUp(): void { + WP_Mock::setUp(); + + WP_Mock::passthruFunction( 'wp_parse_args' ); + WP_Mock::userFunction( 'get_option' )->with( 'antivirus' )->andReturnUsing( + function () { + return $this->options; + } + ); + WP_Mock::userFunction( 'is_email' )->withAnyArgs()->andReturnUsing( + function ( $e ) { + return boolval( filter_var( $e, FILTER_VALIDATE_EMAIL ) ); + } + ); + WP_Mock::userFunction( 'get_bloginfo' )->with( 'name' )->andReturn( 'AntiVirus Test Blog' ); + WP_Mock::userFunction( 'get_bloginfo' )->with( 'admin_email' )->andReturn( 'admin@example.com' ); + } + + /** + * Tear down tests. + * + * Tear down (verify) WP_Mock. + */ + public function tearDown(): void { + WP_Mock::tearDown(); + } + + /** + * Update mocked options. + * + * @param array $overrides Associative array of overridden options. + */ + protected function update_options( $overrides ) { + foreach ( $this->options as $k => &$v ) { + if ( isset( $overrides[ $k ] ) ) { + $v = $overrides[ $k ]; + } + } + } +} diff --git a/tests/bootstrap.php b/tests/bootstrap.php index b054c52..a72e45f 100644 --- a/tests/bootstrap.php +++ b/tests/bootstrap.php @@ -1,22 +1,13 @@ assertTrue( class_exists( 'AntiVirus' ) ); - } + public function setUp(): void { + parent::setUp(); + if ( ! defined( 'ANTIVIRUS_FILE' ) ) { + define( 'ANTIVIRUS_FILE', 'antivirus.php' ); + } + WP_Mock::passthruFunction( 'plugin_basename' ); + } /** - * Test the Safe Browsing check. + * Tear down test. + * + * @inheritdoc */ - function test_safe_browsing() { - /* - * Case 1: cron job disabled, Safe Browsing enabled. - */ - update_option( - 'antivirus', - array( - 'cronjob_enable' => 1, - 'notify_email' => '', - 'safe_browsing' => 1, - 'safe_browsing_key' => '', - ) - ); + public function tearDown(): void { + parent::tearDown(); + } - AntiVirus::do_daily_cronjob(); + /** + * Test plugin construction for normal visitors (no cron, no admin). + */ + public function test_construction_normal() { + WP_Mock::userFunction( 'is_admin' )->andReturnFalse(); + WP_Mock::expectActionNotAdded( 'antivirus_daily_cronjob', array( AntiVirus::class, 'do_daily_cronjob' ) ); + WP_Mock::expectActionNotAdded( 'wp_ajax_get_ajax_response', array( AntiVirus::class, 'get_ajax_response' ) ); + WP_Mock::expectActionNotAdded( 'admin_menu', array( AntiVirus::class, 'add_sidebar_menu' ) ); + WP_Mock::expectActionNotAdded( 'admin_notices', array( AntiVirus::class, 'show_dashboard_notice' ) ); + WP_Mock::expectActionNotAdded( 'plugin_row_meta', array( AntiVirus::class, 'init_row_meta' ), 10, 2 ); + WP_Mock::expectActionNotAdded( 'plugin_action_links_antivirus.php', array( AntiVirus::class, 'init_action_links' ) ); + new AntiVirus(); + self::assertTrue( true ); + } - $this->assertNotNull( get_wp_remote_post_request(), 'Remote POST should have been called (Safe Browsing check executed)' ); - $this->assertNull( get_wp_mail(), 'No mail should have been sent' ); + /** + * Test plugin construction for admin visitors. + */ + public function test_construction_admin() { + WP_Mock::userFunction( 'is_admin' )->andReturnTrue(); + WP_Mock::expectActionNotAdded( 'antivirus_daily_cronjob', array( AntiVirus::class, 'do_daily_cronjob' ) ); + WP_Mock::expectActionNotAdded( 'wp_ajax_get_ajax_response', array( AntiVirus::class, 'get_ajax_response' ) ); + WP_Mock::expectActionAdded( 'admin_menu', array( AntiVirus::class, 'add_sidebar_menu' ) ); + WP_Mock::expectActionAdded( 'admin_notices', array( AntiVirus::class, 'show_dashboard_notice' ) ); + WP_Mock::expectActionAdded( 'deactivate_antivirus.php', array( AntiVirus::class, 'clear_scheduled_hook' ) ); + WP_Mock::expectActionAdded( 'plugin_row_meta', array( AntiVirus::class, 'init_row_meta' ), 10, 2 ); + WP_Mock::expectActionAdded( 'plugin_action_links_antivirus.php', array( AntiVirus::class, 'init_action_links' ) ); + new AntiVirus(); + self::assertTrue( true ); + } - /* - * Case 2: cron job ensabled, Safe Browsing disabled. - */ - update_option( - 'antivirus', - array( - 'cronjob_enable' => 1, - 'notify_email' => '', - 'safe_browsing' => 0, - 'safe_browsing_key' => '', - ) - ); + /** + * Test plugin construction for AJAX calls. + */ + public function test_construction_ajax() { + WP_Mock::userFunction( 'is_admin' )->andReturnTrue(); + define( 'DOING_AJAX', true ); + WP_Mock::expectActionNotAdded( 'antivirus_daily_cronjob', array( AntiVirus::class, 'do_daily_cronjob' ) ); + WP_Mock::expectActionAdded( 'wp_ajax_get_ajax_response', array( AntiVirus::class, 'get_ajax_response' ) ); + WP_Mock::expectActionNotAdded( 'admin_menu', array( AntiVirus::class, 'add_sidebar_menu' ) ); + WP_Mock::expectActionNotAdded( 'admin_notices', array( AntiVirus::class, 'show_dashboard_notice' ) ); + WP_Mock::expectActionNotAdded( 'deactivate_antivirus.php', array( AntiVirus::class, 'clear_scheduled_hook' ) ); + WP_Mock::expectActionNotAdded( 'plugin_row_meta', array( AntiVirus::class, 'init_row_meta' ), 10, 2 ); + WP_Mock::expectActionNotAdded( 'plugin_action_links_antivirus.php', array( AntiVirus::class, 'init_action_links' ) ); + new AntiVirus(); + self::assertTrue( true ); + } - AntiVirus::do_daily_cronjob(); + /** + * Test daily cron execution. + */ + public function test_do_daily_cronjob() { + $mock_ci = Mockery::mock( 'overload:AntiVirus_CheckInternals' ); + $mock_sb = Mockery::mock( 'overload:AntiVirus_SafeBrowsing' ); + $mock_cv = Mockery::mock( 'overload:AntiVirus_ChecksumVerifier' ); - $this->assertNotNull( get_wp_remote_post_request(), 'Remote POST should have been called (Safe Browsing check executed)' ); - $this->assertNull( get_wp_mail(), 'No mail should have been sent' ); + $mock_ci->allows( 'check_blog_internals' ); + $mock_sb->allows( 'check_safe_browsing' ); + $mock_cv->allows( 'verify_files' ); /* - * Case 3: cron job enabled, Safe Browsing enabled, default key. + * Case 1: Default configuration, all modules disabled. */ - update_option( - 'antivirus', - array( - 'cronjob_enable' => 1, - 'notify_email' => '', - 'safe_browsing' => 1, - 'safe_browsing_key' => '', - ) - ); - AntiVirus::do_daily_cronjob(); - - $request = get_wp_remote_post_request(); - $this->assertNotNull( $request, 'Remote POST should have been called (Safe Browsing check executed)' ); - $this->assertNull( get_wp_mail(), 'No mail should have been sent' ); - $this->assertStringEndsWith( '?key=AIzaSyCGHXUd7vQAySRLNiC5y1M_wzR2W0kCVKI', $request[0], 'Default API key should have been used' ); - - // Check if JSON request is correct. - $this->assertEquals( 'application/json', $request[1]['headers']['Content-Type'], 'Content-Type header not correct' ); - $json_request = json_decode( $request[1]['body'] ); - $this->assertNotNull( $json_request, 'Invalid JSON in body' ); - $this->assertEquals( 1, count( $json_request->threatInfo->threatEntries ), 'Unexpected number of site URLs' ); - $this->assertEquals( urlencode( 'http://example.org' ), $json_request->threatInfo->threatEntries[0]->url, 'Invalid site URL in request' ); + $mock_ci->shouldNotHaveReceived( 'check_blog_internals' ); + $mock_sb->shouldNotHaveReceived( 'check_safe_browsing' ); + $mock_cv->shouldNotHaveReceived( 'verify_files' ); /* - * Case 4: with custom API key. + * Case 2: Check Internals enabled. */ - update_option( - 'antivirus', + $this->update_options( array( 'cronjob_enable' => 1, - 'notify_email' => '', - 'safe_browsing' => 1, - 'safe_browsing_key' => 'my-custom-key', + 'safe_browsing' => 0, + 'checksum_verifier' => 0, ) ); AntiVirus::do_daily_cronjob(); - $request = get_wp_remote_post_request(); - $this->assertNotNull( $request, 'Remote POST should have been called (Safe Browsing check executed)' ); - $this->assertNull( get_wp_mail(), 'No mail should have been sent' ); - $this->assertStringEndsWith( '?key=my-custom-key', $request[0], 'Custom API key should have been used' ); - $this->assertEquals( $json_request, json_decode( $request[1]['body'] ), 'Request body should not differ from previous request with default key' ); + $mock_ci->shouldHaveReceived( 'check_blog_internals' )->once(); + $mock_sb->shouldNotHaveReceived( 'check_safe_browsing' ); + $mock_cv->shouldNotHaveReceived( 'verify_files' ); /* - * Case 5: Until now all checks have failed with WP_Error. Assume a correct 200 empty-body response. + * Case 3: Safe Browsing enabled. */ - mock_wp_remote_post_response( + $this->update_options( array( - 'headers' => array(), - 'body' => '', - 'response' => array( - 'code' => 200, - 'message' => 'OK' - ) + 'cronjob_enable' => 0, + 'safe_browsing' => 1, + 'checksum_verifier' => 0, ) ); - AntiVirus::do_daily_cronjob(); - $request = get_wp_remote_post_request(); - $this->assertNotNull( $request, 'Remote POST should have been called (Safe Browsing check executed)' ); - $this->assertNull( get_wp_mail(), 'No mail should have been sent' ); - $this->assertStringEndsWith( '?key=my-custom-key', $request[0], 'Custom API key should have been used' ); - $this->assertEquals( $json_request, json_decode( $request[1]['body'] ), 'Request body should not differ from previous request with default key' ); + $mock_ci->shouldHaveReceived( 'check_blog_internals' )->once(); + $mock_sb->shouldHaveReceived( 'check_safe_browsing' )->once(); + $mock_cv->shouldNotHaveReceived( 'verify_files' ); /* - * Case 6: Successful request with threat content. + * Case 4: Checksum Verifier enabled. */ - clear_wp_remote_post_request(); - clear_wp_remote_post_response(); - mock_wp_remote_post_response( + $this->update_options( array( - 'headers' => array(), - 'body' => '{"matches":[{"threatType":"MALWARE","platformType":"WINDOWS","threatEntryType":"URL","threat":{"url":"http://www.urltocheck1.org/"},"threatEntryMetadata":{"entries":[{"key":"malware_threat_type","value":"landing"}]},"cacheDuration":"300.000s"},{"threatType":"MALWARE","platformType":"WINDOWS","threatEntryType":"URL","threat":{"url":"http://www.urltocheck2.org/"},"threatEntryMetadata":{"entries":[{"key":"malware_threat_type","value":"landing"}]},"cacheDuration":"300.000s"}]}', - 'response' => array( - 'code' => 200, - 'message' => 'OK' - ) + 'cronjob_enable' => 0, + 'safe_browsing' => 0, + 'checksum_verifier' => 1, ) ); - AntiVirus::do_daily_cronjob(); - $request = get_wp_remote_post_request(); - $this->assertNotNull( $request, 'Remote POST should have been called (Safe Browsing check executed)' ); - $mail = get_wp_mail(); - $this->assertNotNull( $mail, 'Mail should have been sent' ); - $this->assertEquals('admin@example.org', $mail[0], 'Recipient should be default site admin'); - $this->assertEquals('[Test Blog] Safe Browsing Alert', $mail[1], 'Not an alert message'); + $mock_ci->shouldHaveReceived( 'check_blog_internals' )->once(); + $mock_sb->shouldHaveReceived( 'check_safe_browsing' )->once(); + $mock_cv->shouldHaveReceived( 'verify_files' )->once(); /* - * Case 7: Same for configured noticifation address. + * Case 5: All modules enabled. */ - update_option( - 'antivirus', + $this->update_options( array( 'cronjob_enable' => 1, - 'notify_email' => 'testme@example.org', 'safe_browsing' => 1, - 'safe_browsing_key' => 'my-custom-key', + 'checksum_verifier' => 1, ) ); - - clear_wp_remote_post_request(); AntiVirus::do_daily_cronjob(); - $request = get_wp_remote_post_request(); - $this->assertNotNull( $request, 'Remote POST should have been called (Safe Browsing check executed)' ); - $mail = get_wp_mail(); - $this->assertNotNull( $mail, 'Mail should have been sent' ); - $this->assertEquals('testme@example.org', $mail[0], 'Recipient should be configured address'); - $this->assertEquals('[Test Blog] Safe Browsing Alert', $mail[1], 'Not an alert message'); + $mock_ci->shouldHaveReceived( 'check_blog_internals' )->twice(); + $mock_sb->shouldHaveReceived( 'check_safe_browsing' )->twice(); + $mock_cv->shouldHaveReceived( 'verify_files' )->twice(); - /* - * Case 8: Assume code 403 for an expired key. - */ - mock_wp_remote_post_response( - array( - 'headers' => array(), - 'body' => '{"error":{"message":"Quota exceeded"}}', - 'response' => array( - 'code' => 403, - 'message' => 'Forbidden' - ) - ) - ); - - clear_wp_remote_post_request(); - AntiVirus::do_daily_cronjob(); - $request = get_wp_remote_post_request(); - $this->assertNotNull( $request, 'Remote POST should have been called (Safe Browsing check executed)' ); - $mail = get_wp_mail(); - $this->assertNotNull( $mail, 'Mail should have been sent' ); - $this->assertEquals('testme@example.org', $mail[0], 'Recipient should be configured address'); - $this->assertEquals('[Test Blog] Safe Browsing check failed', $mail[1], 'Not a "check-failed" message'); - $this->assertContains("\r\n Quota exceeded\r\n", $mail[2], 'Message from response not transported to mail'); - - /* - * Case 9: Assume code 400 for invalid key. - */ - mock_wp_remote_post_response( - array( - 'headers' => array(), - 'body' => '{"error":{"message":"Invalid API key"}}', - 'response' => array( - 'code' => 400, - 'message' => 'Forbidden' - ) - ) - ); - - clear_wp_remote_post_request(); - AntiVirus::do_daily_cronjob(); - $request = get_wp_remote_post_request(); - $this->assertNotNull( $request, 'Remote POST should have been called (Safe Browsing check executed)' ); - $mail = get_wp_mail(); - $this->assertNotNull( $mail, 'Mail should have been sent' ); - $this->assertEquals('testme@example.org', $mail[0], 'Recipient should be configured address'); - $this->assertEquals('[Test Blog] Safe Browsing check failed', $mail[1], 'Not a "check-failed" message'); - $this->assertContains("\r\n Invalid API key\r\n", $mail[2], 'Message from response not transported to mail'); + self::assertTrue( true ); } } diff --git a/tests/test-safebrowsing.php b/tests/test-safebrowsing.php new file mode 100644 index 0000000..cb27ff5 --- /dev/null +++ b/tests/test-safebrowsing.php @@ -0,0 +1,160 @@ +with( 'url' ) + ->andReturn( 'https://antivirus.pluginkollektiv.org/test/' ); + WP_Mock::userFunction( 'get_locale' ) + ->andReturn( 'de_DE' ); + + // We capture the remote call to SafeBrowsing API and mock the response. + $response = new stdClass(); + $request_url = null; + $request_data = null; + WP_Mock::userFunction( 'wp_remote_post' ) + ->with( Mockery::capture( $request_url ), Mockery::capture( $request_data ) ) + ->atLeast() + ->once() + ->andReturn( $response ); + WP_Mock::userFunction( 'is_wp_error' ) + ->with( $response ) + ->andReturnFalse(); + + /* + * Case 1: Everything fine, receiving code 200 with empty JSON body on first call and threat response on second. + */ + WP_Mock::userFunction( 'wp_remote_retrieve_response_code' ) + ->with( $response ) + ->andReturn( 200, 200, 200, 403, 400 ); + WP_Mock::userFunction( 'wp_remote_retrieve_body' ) + ->with( $response ) + ->andReturn( + '{}', + '{"threatType":"MALWARE","platformType":"WINDOWS","threatEntryType": "URL","threat":{"url":"https://antivirus.pluginkollektiv.org/test/"},"threatEntryMetadata":{"entries":[{"key":"malware_threat_type","value":"landing"}]},"cacheDuration":"300.000s"}', + '{"threatType":"MALWARE","platformType":"WINDOWS","threatEntryType": "URL","threat":{"url":"https://antivirus.pluginkollektiv.org/test/"},"threatEntryMetadata":{"entries":[{"key":"malware_threat_type","value":"landing"}]},"cacheDuration":"300.000s"}', + '{"error":{"message":"Quota exceeded"}}', + '{"error":{"message":"Invalid API key"}}' + ); + + AntiVirus_SafeBrowsing::check_safe_browsing(); + + // Validate the request. + self::assertEquals( + 'https://safebrowsing.googleapis.com/v4/threatMatches:find?key=AIzaSyCGHXUd7vQAySRLNiC5y1M_wzR2W0kCVKI', + $request_url, + 'expected call to Safe Browsing API with default key' + ); + self::assertIsArray( $request_data, 'unexpected request' ); + $request_body = json_decode( $request_data['body'] ); + + self::assertEquals( 1, count( $request_body->threatInfo->threatEntries ), 'unexpected number of requested threat entries' ); + self::assertEquals( + urlencode( 'https://antivirus.pluginkollektiv.org/test/' ), + $request_body->threatInfo->threatEntries[0]->url, + 'unexpected blog URL in requested threat entries' + ); + + /* + * Case 2: Emulated threat response. + */ + $mail_recipient = null; + $mail_subject = null; + $mail_body = null; + WP_Mock::userFunction( 'wp_mail' ) + ->with( Mockery::capture( $mail_recipient ), Mockery::capture( $mail_subject ), Mockery::capture( $mail_body ) ) + ->atLeast() + ->once(); + + AntiVirus_SafeBrowsing::check_safe_browsing(); + + self::assertEquals( 'admin@example.com', $mail_recipient, 'Mail should have been sent to site admin' ); + self::assertEquals( '[AntiVirus Test Blog] Safe Browsing Alert', $mail_subject, 'Unexpected mail subject' ); + self::assertContains( + 'https://transparencyreport.google.com/safe-browsing/search?url=https%3A%2F%2Fantivirus.pluginkollektiv.org%2Ftest%2F&hl=de', + $mail_body, + 'Mail body does not contain expected link to transparency report' + ); + + /* + * Case 3: With custom API key and notification address. + */ + $this->update_options( + array( + 'notify_email' => 'notification@example.com', + 'safe_browsing_key' => 'custom-api-key', + ) + ); + + AntiVirus_SafeBrowsing::check_safe_browsing(); + + self::assertEquals( + 'https://safebrowsing.googleapis.com/v4/threatMatches:find?key=custom-api-key', + $request_url, + 'expected call to Safe Browsing API with custom key' + ); + self::assertEquals( + 'notification@example.com', + $mail_recipient, + 'Mail should have been sent to specified notification address' + ); + + /* + * Case 4: Assume code 403 for an expired key. + */ + AntiVirus_SafeBrowsing::check_safe_browsing(); + + self::assertEquals( + '[AntiVirus Test Blog] Safe Browsing check failed', + $mail_subject, + 'expected different subject for Safe Browsing check failing with 403' + ); + self::assertContains( "\r\n Quota exceeded\r\n", $mail_body, 'Message from response not transported to mail' ); + + /* + * Case 5: Assume code 400 for invalid key. + */ + AntiVirus_SafeBrowsing::check_safe_browsing(); + self::assertEquals( + '[AntiVirus Test Blog] Safe Browsing check failed', + $mail_subject, + 'expected different subject for Safe Browsing check failing with 400' + ); + self::assertContains( "\r\n Invalid API key\r\n", $mail_body, 'Message from response not transported to mail' ); + } +} From 4de24b0c3012c02bd64226b8bba4703ac2beffc0 Mon Sep 17 00:00:00 2001 From: Stefan Kalscheuer Date: Mon, 19 Oct 2020 17:30:57 +0200 Subject: [PATCH 06/17] add unit test for Checksum Verifier module --- tests/antivirustestcase.php | 24 ++++ tests/test-checksumverifier.php | 198 ++++++++++++++++++++++++++++++++ tests/test-safebrowsing.php | 2 +- tests/testfile1 | 1 + tests/testfile2 | 1 + tests/wp_mocks.php | 127 -------------------- 6 files changed, 225 insertions(+), 128 deletions(-) create mode 100644 tests/test-checksumverifier.php create mode 100644 tests/testfile1 create mode 100644 tests/testfile2 delete mode 100644 tests/wp_mocks.php diff --git a/tests/antivirustestcase.php b/tests/antivirustestcase.php index c22904d..8b802a4 100644 --- a/tests/antivirustestcase.php +++ b/tests/antivirustestcase.php @@ -43,6 +43,30 @@ function ( $e ) { ); WP_Mock::userFunction( 'get_bloginfo' )->with( 'name' )->andReturn( 'AntiVirus Test Blog' ); WP_Mock::userFunction( 'get_bloginfo' )->with( 'admin_email' )->andReturn( 'admin@example.com' ); + + WP_Mock::userFunction( 'add_query_arg' ) + ->withAnyArgs() + ->andReturnUsing( + function ( $args, $url ) { + if ( false === strpos( $url, '?' )) { + $url .= '?'; + } else { + $url .= '&'; + } + + return $url . + implode( + '&', + array_map( + function( $k, $v ) { + return urlencode( $k ) . '=' . urlencode( $v ); + }, + array_keys( $args ), + $args + ) + ); + } + ); } /** diff --git a/tests/test-checksumverifier.php b/tests/test-checksumverifier.php new file mode 100644 index 0000000..20ee340 --- /dev/null +++ b/tests/test-checksumverifier.php @@ -0,0 +1,198 @@ +with( 'version' ) + ->andReturn( '5.5.1' ); + WP_Mock::userFunction( 'get_locale' ) + ->andReturn( 'de_DE' ); + + // We capture the remote call to SafeBrowsing API and mock the response. + $response = new stdClass(); + $request_url = null; + WP_Mock::userFunction( 'wp_remote_get' ) + ->with( Mockery::capture( $request_url ) ) + ->atLeast() + ->once() + ->andReturn( $response ); + WP_Mock::userFunction( 'get_site_transient' ) + ->with( 'checksums_NS41LjFkZV9ERQ==' ) + ->andReturn( + null, + null, + null, + null, + null, + json_decode( '{"' . $testfile1 . '":"a8b7bcbb15f9804a905c33127aca0ade","' . $testfile2 . '":"0123456789abcdef0123456789abcdef"}' ) + ) + ->atLeast() + ->once(); + $transient = null; + $transient_expiration = null; + WP_Mock::userFunction( 'set_site_transient' ) + ->with( + 'checksums_NS41LjFkZV9ERQ==', + Mockery::capture( $transient ), + Mockery::capture( $transient_expiration ) + ); + + WP_Mock::userFunction( 'wp_remote_retrieve_response_code' ) + ->with( $response ) + ->andReturn( + 500, + 200, + 200, + 200, + 200, + 404 // Should never be hit, because of the cache. + ); + WP_Mock::userFunction( 'wp_remote_retrieve_body' ) + ->with( $response ) + ->andReturn( + '{nonsense:', + '{"checksums":{"' . $testfile1 . '":"a8b7bcbb15f9804a905c33127aca0ade","' . $testfile2 . '":"0123456789abcdef0123456789abcdef"}}', + '{"checksums":{"' . $testfile1 . '":"a8b7bcbb15f9804a905c33127aca0ade","' . $testfile3 . '":"0123456789abcdef0123456789abcdef"}}', + '{"checksums":{"' . $testfile1 . '":"a8b7bcbb15f9804a905c33127aca0ade","' . $testfile2 . '":"0123456789abcdef0123456789abcdef"}}' + ); + WP_Mock::userFunction( 'validate_file' ) + ->withAnyArgs() + ->andReturn( + 0, // Only first file is valid. + 3, + 0, // Both files are valid. + 0 + ); + + $mail_recipient = null; + $mail_subject = null; + $mail_body = null; + WP_Mock::userFunction( 'wp_mail' ) + ->with( Mockery::capture( $mail_recipient ), Mockery::capture( $mail_subject ), Mockery::capture( $mail_body ) ) + ->atLeast() + ->once(); + + /* + * Case 1: Empty cache, error response. + */ + AntiVirus_ChecksumVerifier::verify_files(); + + // Validate the request. + self::assertEquals( + 'https://api.wordpress.org/core/checksums/1.0/?version=5.5.1&locale=de_DE', + $request_url, + 'expected call to checksum API with version and locale' + ); + self::assertNull( $transient, 'checksums unexpectedly cached with error response' ); + self::assertNull( $mail_recipient, 'no mail should be sent for error response' ); + + /* + * Case 2: Empty cache, invalid JSON response. + */ + AntiVirus_ChecksumVerifier::verify_files(); + + self::assertEquals( + 'https://api.wordpress.org/core/checksums/1.0/?version=5.5.1&locale=de_DE', + $request_url, + 'expected call to checksum API with version and locale' + ); + self::assertNull( $transient, 'checksums unexpectedly cached with invalid response' ); + self::assertNull( $mail_recipient, 'no mail should be sent for invalid response' ); + + /* + * Case 3: Empty cache, retrieve valid API response. One match, one invalid file. + */ + AntiVirus_ChecksumVerifier::verify_files(); + + self::assertIsObject( $transient, 'checksums not cached' ); + self::assertEquals( 86400, $transient_expiration, 'transient should be valid for 1 day' ); + self::assertNull( $mail_recipient, 'no mail should be sent for invalid file path' ); + + /* + * Case 4: Empty cache, retrieve valid API response. One match, one non-existing file. + */ + AntiVirus_ChecksumVerifier::verify_files(); + self::assertNull( $mail_recipient, 'no mail should be sent for non-existing file' ); + + /* + * Case 5: Empty cache, retrieve valid API response. One match, one mismatch. + */ + AntiVirus_ChecksumVerifier::verify_files(); + + self::assertEquals( 'admin@example.com', $mail_recipient, 'Mail should have been sent to site admin' ); + self::assertEquals( '[AntiVirus Test Blog] Checksum Verifier Alert', $mail_subject, 'Unexpected mail subject' ); + self::assertContains( 'testfile2', $mail_body, 'Mail body does not contain expected filename' ); + + /* + * Case 6: Cached checksums, so invalid response will not be used. + */ + $request_url = null; + $mail_recipient = null; + + AntiVirus_ChecksumVerifier::verify_files(); + + self::assertNull( $request_url, 'no request expected with transient present' ); + self::assertNotNull( $mail_recipient, 'no mail sent for ignored file' ); + + /* + * Case 7: Filter application ignores invalid file. + */ + WP_Mock::onFilter( 'antivirus_checksum_verifier_ignore_files' ) + ->with( + array( + 'wp-config-sample.php', + 'wp-includes/version.php', + 'readme.html', + 'readme-ja.html', + 'liesmich.html', + 'olvasdel.html', + 'procitajme.html', + ) + )->reply( array( $testfile2 ) ); + $mail_recipient = null; + + AntiVirus_ChecksumVerifier::verify_files(); + + self::assertNull( $mail_recipient, 'no mail should be sent for ignored file' ); + } +} diff --git a/tests/test-safebrowsing.php b/tests/test-safebrowsing.php index cb27ff5..6268a86 100644 --- a/tests/test-safebrowsing.php +++ b/tests/test-safebrowsing.php @@ -10,7 +10,7 @@ * * Unit tests for the Safe Browsing module. */ -class AntiVirus_Test_Safebrowsing extends AntiVirus_TestCase { +class AntiVirus_Safebrowsing_Test extends AntiVirus_TestCase { /** * Set up test. diff --git a/tests/testfile1 b/tests/testfile1 new file mode 100644 index 0000000..c759687 --- /dev/null +++ b/tests/testfile1 @@ -0,0 +1 @@ +dummy test file #1 diff --git a/tests/testfile2 b/tests/testfile2 new file mode 100644 index 0000000..6f6aa66 --- /dev/null +++ b/tests/testfile2 @@ -0,0 +1 @@ +dummy test file #2 diff --git a/tests/wp_mocks.php b/tests/wp_mocks.php deleted file mode 100644 index fd43f62..0000000 --- a/tests/wp_mocks.php +++ /dev/null @@ -1,127 +0,0 @@ - Date: Sun, 29 Nov 2020 18:29:52 +0100 Subject: [PATCH 07/17] update devenv for Composer 2 and PHP 8 compatibility --- .travis.yml | 2 - composer.json | 8 +- composer.lock | 1373 ++++++++++++++++++++++++------- phpunit.xml | 19 +- tests/test-checksumverifier.php | 2 +- tests/test-safebrowsing.php | 6 +- 6 files changed, 1072 insertions(+), 338 deletions(-) diff --git a/.travis.yml b/.travis.yml index 62f31d0..4c73fd5 100644 --- a/.travis.yml +++ b/.travis.yml @@ -1,8 +1,6 @@ language: php php: - - '7.1' - - '7.2' - '7.3' - '7.4' - nightly diff --git a/composer.json b/composer.json index ca61a99..3afa133 100644 --- a/composer.json +++ b/composer.json @@ -5,16 +5,16 @@ "type": "wordpress-plugin", "license": "GPL-2.0+", "require": { - "php": "^5.2|^7", + "php": ">=5.2", "ext-json": "*" }, "require-dev": { - "php": "^7.1", + "php": ">=7.3", "dealerdirect/phpcodesniffer-composer-installer": "^0.7", "10up/wp_mock": "^0.4", "matthiasmullie/minify": "^1.3", - "phpcompatibility/php-compatibility": "^9.3", - "phpunit/phpunit": "^7", + "phpcompatibility/phpcompatibility-wp": "^2.1", + "phpunit/phpunit": "^9", "squizlabs/php_codesniffer": "^3.5", "wp-coding-standards/wpcs": "^2.3" }, diff --git a/composer.lock b/composer.lock index f148005..f00e235 100644 --- a/composer.lock +++ b/composer.lock @@ -4,7 +4,7 @@ "Read more about it at https://getcomposer.org/doc/01-basic-usage.md#installing-dependencies", "This file is @generated automatically" ], - "content-hash": "55e64d1dabae4fcafa9d9f9bf58df365", + "content-hash": "f701cf16dab144acc7ae2c9fdf941f78", "packages": [], "packages-dev": [ { @@ -46,6 +46,10 @@ "GPL-2.0-or-later" ], "description": "A mocking library to take the pain out of unit testing for WordPress", + "support": { + "issues": "https://github.com/10up/wp_mock/issues", + "source": "https://github.com/10up/wp_mock/tree/master" + }, "time": "2019-03-16T03:44:39+00:00" }, { @@ -90,6 +94,10 @@ "runkit", "testing" ], + "support": { + "issues": "https://github.com/antecedent/patchwork/issues", + "source": "https://github.com/antecedent/patchwork/tree/2.1.12" + }, "time": "2019-12-22T17:52:09+00:00" }, { @@ -156,40 +164,39 @@ "stylecheck", "tests" ], + "support": { + "issues": "https://github.com/dealerdirect/phpcodesniffer-composer-installer/issues", + "source": "https://github.com/dealerdirect/phpcodesniffer-composer-installer" + }, "time": "2020-06-25T14:57:39+00:00" }, { "name": "doctrine/instantiator", - "version": "1.3.1", + "version": "1.4.0", "source": { "type": "git", "url": "https://github.com/doctrine/instantiator.git", - "reference": "f350df0268e904597e3bd9c4685c53e0e333feea" + "reference": "d56bf6102915de5702778fe20f2de3b2fe570b5b" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/doctrine/instantiator/zipball/f350df0268e904597e3bd9c4685c53e0e333feea", - "reference": "f350df0268e904597e3bd9c4685c53e0e333feea", + "url": "https://api.github.com/repos/doctrine/instantiator/zipball/d56bf6102915de5702778fe20f2de3b2fe570b5b", + "reference": "d56bf6102915de5702778fe20f2de3b2fe570b5b", "shasum": "" }, "require": { "php": "^7.1 || ^8.0" }, "require-dev": { - "doctrine/coding-standard": "^6.0", + "doctrine/coding-standard": "^8.0", "ext-pdo": "*", "ext-phar": "*", - "phpbench/phpbench": "^0.13", - "phpstan/phpstan-phpunit": "^0.11", - "phpstan/phpstan-shim": "^0.11", - "phpunit/phpunit": "^7.0" + "phpbench/phpbench": "^0.13 || 1.0.0-alpha2", + "phpstan/phpstan": "^0.12", + "phpstan/phpstan-phpunit": "^0.12", + "phpunit/phpunit": "^7.0 || ^8.0 || ^9.0" }, "type": "library", - "extra": { - "branch-alias": { - "dev-master": "1.2.x-dev" - } - }, "autoload": { "psr-4": { "Doctrine\\Instantiator\\": "src/Doctrine/Instantiator/" @@ -203,7 +210,7 @@ { "name": "Marco Pivetta", "email": "ocramius@gmail.com", - "homepage": "http://ocramius.github.com/" + "homepage": "https://ocramius.github.io/" } ], "description": "A small, lightweight utility to instantiate objects in PHP without invoking their constructors", @@ -212,6 +219,10 @@ "constructor", "instantiate" ], + "support": { + "issues": "https://github.com/doctrine/instantiator/issues", + "source": "https://github.com/doctrine/instantiator/tree/1.4.0" + }, "funding": [ { "url": "https://www.doctrine-project.org/sponsorship.html", @@ -226,7 +237,7 @@ "type": "tidelift" } ], - "time": "2020-05-29T17:27:14+00:00" + "time": "2020-11-10T18:47:58+00:00" }, { "name": "hamcrest/hamcrest-php", @@ -273,6 +284,10 @@ "keywords": [ "test" ], + "support": { + "issues": "https://github.com/hamcrest/hamcrest-php/issues", + "source": "https://github.com/hamcrest/hamcrest-php/tree/v2.0.1" + }, "time": "2020-07-09T08:09:16+00:00" }, { @@ -333,6 +348,10 @@ "minifier", "minify" ], + "support": { + "issues": "https://github.com/matthiasmullie/minify/issues", + "source": "https://github.com/matthiasmullie/minify/tree/1.3.63" + }, "time": "2020-01-21T20:21:08+00:00" }, { @@ -382,34 +401,41 @@ "paths", "relative" ], + "support": { + "issues": "https://github.com/matthiasmullie/path-converter/issues", + "source": "https://github.com/matthiasmullie/path-converter/tree/1.1.3" + }, "time": "2019-02-05T23:41:09+00:00" }, { "name": "mockery/mockery", - "version": "1.3.3", + "version": "1.4.2", "source": { "type": "git", "url": "https://github.com/mockery/mockery.git", - "reference": "60fa2f67f6e4d3634bb4a45ff3171fa52215800d" + "reference": "20cab678faed06fac225193be281ea0fddb43b93" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/mockery/mockery/zipball/60fa2f67f6e4d3634bb4a45ff3171fa52215800d", - "reference": "60fa2f67f6e4d3634bb4a45ff3171fa52215800d", + "url": "https://api.github.com/repos/mockery/mockery/zipball/20cab678faed06fac225193be281ea0fddb43b93", + "reference": "20cab678faed06fac225193be281ea0fddb43b93", "shasum": "" }, "require": { "hamcrest/hamcrest-php": "^2.0.1", "lib-pcre": ">=7.0", - "php": ">=5.6.0" + "php": "^7.3 || ^8.0" + }, + "conflict": { + "phpunit/phpunit": "<8.0" }, "require-dev": { - "phpunit/phpunit": "^5.7.10|^6.5|^7.5|^8.5|^9.3" + "phpunit/phpunit": "^8.5 || ^9.3" }, "type": "library", "extra": { "branch-alias": { - "dev-master": "1.3.x-dev" + "dev-master": "1.4.x-dev" } }, "autoload": { @@ -447,20 +473,24 @@ "test double", "testing" ], - "time": "2020-08-11T18:10:21+00:00" + "support": { + "issues": "https://github.com/mockery/mockery/issues", + "source": "https://github.com/mockery/mockery/tree/master" + }, + "time": "2020-08-11T18:10:13+00:00" }, { "name": "myclabs/deep-copy", - "version": "1.10.1", + "version": "1.10.2", "source": { "type": "git", "url": "https://github.com/myclabs/DeepCopy.git", - "reference": "969b211f9a51aa1f6c01d1d2aef56d3bd91598e5" + "reference": "776f831124e9c62e1a2c601ecc52e776d8bb7220" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/myclabs/DeepCopy/zipball/969b211f9a51aa1f6c01d1d2aef56d3bd91598e5", - "reference": "969b211f9a51aa1f6c01d1d2aef56d3bd91598e5", + "url": "https://api.github.com/repos/myclabs/DeepCopy/zipball/776f831124e9c62e1a2c601ecc52e776d8bb7220", + "reference": "776f831124e9c62e1a2c601ecc52e776d8bb7220", "shasum": "" }, "require": { @@ -495,38 +525,99 @@ "object", "object graph" ], + "support": { + "issues": "https://github.com/myclabs/DeepCopy/issues", + "source": "https://github.com/myclabs/DeepCopy/tree/1.10.2" + }, "funding": [ { "url": "https://tidelift.com/funding/github/packagist/myclabs/deep-copy", "type": "tidelift" } ], - "time": "2020-06-29T13:22:24+00:00" + "time": "2020-11-13T09:40:50+00:00" + }, + { + "name": "nikic/php-parser", + "version": "v4.10.2", + "source": { + "type": "git", + "url": "https://github.com/nikic/PHP-Parser.git", + "reference": "658f1be311a230e0907f5dfe0213742aff0596de" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/nikic/PHP-Parser/zipball/658f1be311a230e0907f5dfe0213742aff0596de", + "reference": "658f1be311a230e0907f5dfe0213742aff0596de", + "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.10.2" + }, + "time": "2020-09-26T10:30:38+00:00" }, { "name": "phar-io/manifest", - "version": "1.0.3", + "version": "2.0.1", "source": { "type": "git", "url": "https://github.com/phar-io/manifest.git", - "reference": "7761fcacf03b4d4f16e7ccb606d4879ca431fcf4" + "reference": "85265efd3af7ba3ca4b2a2c34dbfc5788dd29133" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/phar-io/manifest/zipball/7761fcacf03b4d4f16e7ccb606d4879ca431fcf4", - "reference": "7761fcacf03b4d4f16e7ccb606d4879ca431fcf4", + "url": "https://api.github.com/repos/phar-io/manifest/zipball/85265efd3af7ba3ca4b2a2c34dbfc5788dd29133", + "reference": "85265efd3af7ba3ca4b2a2c34dbfc5788dd29133", "shasum": "" }, "require": { "ext-dom": "*", "ext-phar": "*", - "phar-io/version": "^2.0", - "php": "^5.6 || ^7.0" + "ext-xmlwriter": "*", + "phar-io/version": "^3.0.1", + "php": "^7.2 || ^8.0" }, "type": "library", "extra": { "branch-alias": { - "dev-master": "1.0.x-dev" + "dev-master": "2.0.x-dev" } }, "autoload": { @@ -556,24 +647,28 @@ } ], "description": "Component for reading phar.io manifest information from a PHP Archive (PHAR)", - "time": "2018-07-08T19:23:20+00:00" + "support": { + "issues": "https://github.com/phar-io/manifest/issues", + "source": "https://github.com/phar-io/manifest/tree/master" + }, + "time": "2020-06-27T14:33:11+00:00" }, { "name": "phar-io/version", - "version": "2.0.1", + "version": "3.0.2", "source": { "type": "git", "url": "https://github.com/phar-io/version.git", - "reference": "45a2ec53a73c70ce41d55cedef9063630abaf1b6" + "reference": "c6bb6825def89e0a32220f88337f8ceaf1975fa0" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/phar-io/version/zipball/45a2ec53a73c70ce41d55cedef9063630abaf1b6", - "reference": "45a2ec53a73c70ce41d55cedef9063630abaf1b6", + "url": "https://api.github.com/repos/phar-io/version/zipball/c6bb6825def89e0a32220f88337f8ceaf1975fa0", + "reference": "c6bb6825def89e0a32220f88337f8ceaf1975fa0", "shasum": "" }, "require": { - "php": "^5.6 || ^7.0" + "php": "^7.2 || ^8.0" }, "type": "library", "autoload": { @@ -603,7 +698,11 @@ } ], "description": "Library for handling version information and constraints", - "time": "2018-07-08T19:19:57+00:00" + "support": { + "issues": "https://github.com/phar-io/version/issues", + "source": "https://github.com/phar-io/version/tree/master" + }, + "time": "2020-06-27T14:39:04+00:00" }, { "name": "phpcompatibility/php-compatibility", @@ -661,29 +760,143 @@ "phpcs", "standards" ], + "support": { + "issues": "https://github.com/PHPCompatibility/PHPCompatibility/issues", + "source": "https://github.com/PHPCompatibility/PHPCompatibility" + }, "time": "2019-12-27T09:44:58+00:00" }, { - "name": "phpdocumentor/reflection-common", + "name": "phpcompatibility/phpcompatibility-paragonie", + "version": "1.3.0", + "source": { + "type": "git", + "url": "https://github.com/PHPCompatibility/PHPCompatibilityParagonie.git", + "reference": "b862bc32f7e860d0b164b199bd995e690b4b191c" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/PHPCompatibility/PHPCompatibilityParagonie/zipball/b862bc32f7e860d0b164b199bd995e690b4b191c", + "reference": "b862bc32f7e860d0b164b199bd995e690b4b191c", + "shasum": "" + }, + "require": { + "phpcompatibility/php-compatibility": "^9.0" + }, + "require-dev": { + "dealerdirect/phpcodesniffer-composer-installer": "^0.5", + "paragonie/random_compat": "dev-master", + "paragonie/sodium_compat": "dev-master" + }, + "suggest": { + "dealerdirect/phpcodesniffer-composer-installer": "^0.5 || This Composer plugin will sort out the PHP_CodeSniffer 'installed_paths' automatically.", + "roave/security-advisories": "dev-master || Helps prevent installing dependencies with known security issues." + }, + "type": "phpcodesniffer-standard", + "notification-url": "https://packagist.org/downloads/", + "license": [ + "LGPL-3.0-or-later" + ], + "authors": [ + { + "name": "Wim Godden", + "role": "lead" + }, + { + "name": "Juliette Reinders Folmer", + "role": "lead" + } + ], + "description": "A set of rulesets for PHP_CodeSniffer to check for PHP cross-version compatibility issues in projects, while accounting for polyfills provided by the Paragonie polyfill libraries.", + "homepage": "http://phpcompatibility.com/", + "keywords": [ + "compatibility", + "paragonie", + "phpcs", + "polyfill", + "standards" + ], + "support": { + "issues": "https://github.com/PHPCompatibility/PHPCompatibilityParagonie/issues", + "source": "https://github.com/PHPCompatibility/PHPCompatibilityParagonie" + }, + "time": "2019-11-04T15:17:54+00:00" + }, + { + "name": "phpcompatibility/phpcompatibility-wp", "version": "2.1.0", + "source": { + "type": "git", + "url": "https://github.com/PHPCompatibility/PHPCompatibilityWP.git", + "reference": "41bef18ba688af638b7310666db28e1ea9158b2f" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/PHPCompatibility/PHPCompatibilityWP/zipball/41bef18ba688af638b7310666db28e1ea9158b2f", + "reference": "41bef18ba688af638b7310666db28e1ea9158b2f", + "shasum": "" + }, + "require": { + "phpcompatibility/php-compatibility": "^9.0", + "phpcompatibility/phpcompatibility-paragonie": "^1.0" + }, + "require-dev": { + "dealerdirect/phpcodesniffer-composer-installer": "^0.5" + }, + "suggest": { + "dealerdirect/phpcodesniffer-composer-installer": "^0.5 || This Composer plugin will sort out the PHP_CodeSniffer 'installed_paths' automatically.", + "roave/security-advisories": "dev-master || Helps prevent installing dependencies with known security issues." + }, + "type": "phpcodesniffer-standard", + "notification-url": "https://packagist.org/downloads/", + "license": [ + "LGPL-3.0-or-later" + ], + "authors": [ + { + "name": "Wim Godden", + "role": "lead" + }, + { + "name": "Juliette Reinders Folmer", + "role": "lead" + } + ], + "description": "A ruleset for PHP_CodeSniffer to check for PHP cross-version compatibility issues in projects, while accounting for polyfills provided by WordPress.", + "homepage": "http://phpcompatibility.com/", + "keywords": [ + "compatibility", + "phpcs", + "standards", + "wordpress" + ], + "support": { + "issues": "https://github.com/PHPCompatibility/PHPCompatibilityWP/issues", + "source": "https://github.com/PHPCompatibility/PHPCompatibilityWP" + }, + "time": "2019-08-28T14:22:28+00:00" + }, + { + "name": "phpdocumentor/reflection-common", + "version": "2.2.0", "source": { "type": "git", "url": "https://github.com/phpDocumentor/ReflectionCommon.git", - "reference": "6568f4687e5b41b054365f9ae03fcb1ed5f2069b" + "reference": "1d01c49d4ed62f25aa84a747ad35d5a16924662b" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/phpDocumentor/ReflectionCommon/zipball/6568f4687e5b41b054365f9ae03fcb1ed5f2069b", - "reference": "6568f4687e5b41b054365f9ae03fcb1ed5f2069b", + "url": "https://api.github.com/repos/phpDocumentor/ReflectionCommon/zipball/1d01c49d4ed62f25aa84a747ad35d5a16924662b", + "reference": "1d01c49d4ed62f25aa84a747ad35d5a16924662b", "shasum": "" }, "require": { - "php": ">=7.1" + "php": "^7.2 || ^8.0" }, "type": "library", "extra": { "branch-alias": { - "dev-master": "2.x-dev" + "dev-2.x": "2.x-dev" } }, "autoload": { @@ -710,45 +923,45 @@ "reflection", "static analysis" ], - "time": "2020-04-27T09:25:28+00:00" + "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": "4.3.4", + "version": "5.2.2", "source": { "type": "git", "url": "https://github.com/phpDocumentor/ReflectionDocBlock.git", - "reference": "da3fd972d6bafd628114f7e7e036f45944b62e9c" + "reference": "069a785b2141f5bcf49f3e353548dc1cce6df556" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/phpDocumentor/ReflectionDocBlock/zipball/da3fd972d6bafd628114f7e7e036f45944b62e9c", - "reference": "da3fd972d6bafd628114f7e7e036f45944b62e9c", + "url": "https://api.github.com/repos/phpDocumentor/ReflectionDocBlock/zipball/069a785b2141f5bcf49f3e353548dc1cce6df556", + "reference": "069a785b2141f5bcf49f3e353548dc1cce6df556", "shasum": "" }, "require": { - "php": "^7.0", - "phpdocumentor/reflection-common": "^1.0.0 || ^2.0.0", - "phpdocumentor/type-resolver": "~0.4 || ^1.0.0", - "webmozart/assert": "^1.0" + "ext-filter": "*", + "php": "^7.2 || ^8.0", + "phpdocumentor/reflection-common": "^2.2", + "phpdocumentor/type-resolver": "^1.3", + "webmozart/assert": "^1.9.1" }, "require-dev": { - "doctrine/instantiator": "^1.0.5", - "mockery/mockery": "^1.0", - "phpdocumentor/type-resolver": "0.4.*", - "phpunit/phpunit": "^6.4" + "mockery/mockery": "~1.3.2" }, "type": "library", "extra": { "branch-alias": { - "dev-master": "4.x-dev" + "dev-master": "5.x-dev" } }, "autoload": { "psr-4": { - "phpDocumentor\\Reflection\\": [ - "src/" - ] + "phpDocumentor\\Reflection\\": "src" } }, "notification-url": "https://packagist.org/downloads/", @@ -759,38 +972,44 @@ { "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.", - "time": "2019-12-28T18:55:12+00:00" + "support": { + "issues": "https://github.com/phpDocumentor/ReflectionDocBlock/issues", + "source": "https://github.com/phpDocumentor/ReflectionDocBlock/tree/master" + }, + "time": "2020-09-03T19:13:55+00:00" }, { "name": "phpdocumentor/type-resolver", - "version": "1.0.1", + "version": "1.4.0", "source": { "type": "git", "url": "https://github.com/phpDocumentor/TypeResolver.git", - "reference": "2e32a6d48972b2c1976ed5d8967145b6cec4a4a9" + "reference": "6a467b8989322d92aa1c8bf2bebcc6e5c2ba55c0" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/phpDocumentor/TypeResolver/zipball/2e32a6d48972b2c1976ed5d8967145b6cec4a4a9", - "reference": "2e32a6d48972b2c1976ed5d8967145b6cec4a4a9", + "url": "https://api.github.com/repos/phpDocumentor/TypeResolver/zipball/6a467b8989322d92aa1c8bf2bebcc6e5c2ba55c0", + "reference": "6a467b8989322d92aa1c8bf2bebcc6e5c2ba55c0", "shasum": "" }, "require": { - "php": "^7.1", + "php": "^7.2 || ^8.0", "phpdocumentor/reflection-common": "^2.0" }, "require-dev": { - "ext-tokenizer": "^7.1", - "mockery/mockery": "~1", - "phpunit/phpunit": "^7.0" + "ext-tokenizer": "*" }, "type": "library", "extra": { "branch-alias": { - "dev-master": "1.x-dev" + "dev-1.x": "1.x-dev" } }, "autoload": { @@ -809,37 +1028,41 @@ } ], "description": "A PSR-5 based resolver of Class names, Types and Structural Element Names", - "time": "2019-08-22T18:11:29+00:00" + "support": { + "issues": "https://github.com/phpDocumentor/TypeResolver/issues", + "source": "https://github.com/phpDocumentor/TypeResolver/tree/1.4.0" + }, + "time": "2020-09-17T18:55:26+00:00" }, { "name": "phpspec/prophecy", - "version": "v1.10.3", + "version": "1.12.1", "source": { "type": "git", "url": "https://github.com/phpspec/prophecy.git", - "reference": "451c3cd1418cf640de218914901e51b064abb093" + "reference": "8ce87516be71aae9b956f81906aaf0338e0d8a2d" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/phpspec/prophecy/zipball/451c3cd1418cf640de218914901e51b064abb093", - "reference": "451c3cd1418cf640de218914901e51b064abb093", + "url": "https://api.github.com/repos/phpspec/prophecy/zipball/8ce87516be71aae9b956f81906aaf0338e0d8a2d", + "reference": "8ce87516be71aae9b956f81906aaf0338e0d8a2d", "shasum": "" }, "require": { - "doctrine/instantiator": "^1.0.2", - "php": "^5.3|^7.0", - "phpdocumentor/reflection-docblock": "^2.0|^3.0.2|^4.0|^5.0", - "sebastian/comparator": "^1.2.3|^2.0|^3.0|^4.0", - "sebastian/recursion-context": "^1.0|^2.0|^3.0|^4.0" + "doctrine/instantiator": "^1.2", + "php": "^7.2 || ~8.0, <8.1", + "phpdocumentor/reflection-docblock": "^5.2", + "sebastian/comparator": "^3.0 || ^4.0", + "sebastian/recursion-context": "^3.0 || ^4.0" }, "require-dev": { - "phpspec/phpspec": "^2.5 || ^3.2", - "phpunit/phpunit": "^4.8.35 || ^5.7 || ^6.5 || ^7.1" + "phpspec/phpspec": "^6.0", + "phpunit/phpunit": "^8.0 || ^9.0 <9.3" }, "type": "library", "extra": { "branch-alias": { - "dev-master": "1.10.x-dev" + "dev-master": "1.11.x-dev" } }, "autoload": { @@ -872,44 +1095,52 @@ "spy", "stub" ], - "time": "2020-03-05T15:02:03+00:00" + "support": { + "issues": "https://github.com/phpspec/prophecy/issues", + "source": "https://github.com/phpspec/prophecy/tree/1.12.1" + }, + "time": "2020-09-29T09:10:42+00:00" }, { "name": "phpunit/php-code-coverage", - "version": "6.1.4", + "version": "9.2.5", "source": { "type": "git", "url": "https://github.com/sebastianbergmann/php-code-coverage.git", - "reference": "807e6013b00af69b6c5d9ceb4282d0393dbb9d8d" + "reference": "f3e026641cc91909d421802dd3ac7827ebfd97e1" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/sebastianbergmann/php-code-coverage/zipball/807e6013b00af69b6c5d9ceb4282d0393dbb9d8d", - "reference": "807e6013b00af69b6c5d9ceb4282d0393dbb9d8d", + "url": "https://api.github.com/repos/sebastianbergmann/php-code-coverage/zipball/f3e026641cc91909d421802dd3ac7827ebfd97e1", + "reference": "f3e026641cc91909d421802dd3ac7827ebfd97e1", "shasum": "" }, "require": { "ext-dom": "*", + "ext-libxml": "*", "ext-xmlwriter": "*", - "php": "^7.1", - "phpunit/php-file-iterator": "^2.0", - "phpunit/php-text-template": "^1.2.1", - "phpunit/php-token-stream": "^3.0", - "sebastian/code-unit-reverse-lookup": "^1.0.1", - "sebastian/environment": "^3.1 || ^4.0", - "sebastian/version": "^2.0.1", - "theseer/tokenizer": "^1.1" + "nikic/php-parser": "^4.10.2", + "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": "^7.0" + "phpunit/phpunit": "^9.3" }, "suggest": { - "ext-xdebug": "^2.6.0" + "ext-pcov": "*", + "ext-xdebug": "*" }, "type": "library", "extra": { "branch-alias": { - "dev-master": "6.1-dev" + "dev-master": "9.2-dev" } }, "autoload": { @@ -935,32 +1166,42 @@ "testing", "xunit" ], - "time": "2018-10-31T16:06:48+00:00" + "support": { + "issues": "https://github.com/sebastianbergmann/php-code-coverage/issues", + "source": "https://github.com/sebastianbergmann/php-code-coverage/tree/9.2.5" + }, + "funding": [ + { + "url": "https://github.com/sebastianbergmann", + "type": "github" + } + ], + "time": "2020-11-28T06:44:49+00:00" }, { "name": "phpunit/php-file-iterator", - "version": "2.0.2", + "version": "3.0.5", "source": { "type": "git", "url": "https://github.com/sebastianbergmann/php-file-iterator.git", - "reference": "050bedf145a257b1ff02746c31894800e5122946" + "reference": "aa4be8575f26070b100fccb67faabb28f21f66f8" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/sebastianbergmann/php-file-iterator/zipball/050bedf145a257b1ff02746c31894800e5122946", - "reference": "050bedf145a257b1ff02746c31894800e5122946", + "url": "https://api.github.com/repos/sebastianbergmann/php-file-iterator/zipball/aa4be8575f26070b100fccb67faabb28f21f66f8", + "reference": "aa4be8575f26070b100fccb67faabb28f21f66f8", "shasum": "" }, "require": { - "php": "^7.1" + "php": ">=7.3" }, "require-dev": { - "phpunit/phpunit": "^7.1" + "phpunit/phpunit": "^9.3" }, "type": "library", "extra": { "branch-alias": { - "dev-master": "2.0.x-dev" + "dev-master": "3.0-dev" } }, "autoload": { @@ -985,26 +1226,48 @@ "filesystem", "iterator" ], - "time": "2018-09-13T20:33:42+00:00" + "support": { + "issues": "https://github.com/sebastianbergmann/php-file-iterator/issues", + "source": "https://github.com/sebastianbergmann/php-file-iterator/tree/3.0.5" + }, + "funding": [ + { + "url": "https://github.com/sebastianbergmann", + "type": "github" + } + ], + "time": "2020-09-28T05:57:25+00:00" }, { - "name": "phpunit/php-text-template", - "version": "1.2.1", + "name": "phpunit/php-invoker", + "version": "3.1.1", "source": { "type": "git", - "url": "https://github.com/sebastianbergmann/php-text-template.git", - "reference": "31f8b717e51d9a2afca6c9f046f5d69fc27c8686" + "url": "https://github.com/sebastianbergmann/php-invoker.git", + "reference": "5a10147d0aaf65b58940a0b72f71c9ac0423cc67" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/sebastianbergmann/php-text-template/zipball/31f8b717e51d9a2afca6c9f046f5d69fc27c8686", - "reference": "31f8b717e51d9a2afca6c9f046f5d69fc27c8686", + "url": "https://api.github.com/repos/sebastianbergmann/php-invoker/zipball/5a10147d0aaf65b58940a0b72f71c9ac0423cc67", + "reference": "5a10147d0aaf65b58940a0b72f71c9ac0423cc67", "shasum": "" }, "require": { - "php": ">=5.3.3" + "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/" @@ -1021,37 +1284,47 @@ "role": "lead" } ], - "description": "Simple template engine.", - "homepage": "https://github.com/sebastianbergmann/php-text-template/", + "description": "Invoke callables with a timeout", + "homepage": "https://github.com/sebastianbergmann/php-invoker/", "keywords": [ - "template" + "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": "2015-06-21T13:50:34+00:00" + "time": "2020-09-28T05:58:55+00:00" }, { - "name": "phpunit/php-timer", - "version": "2.1.2", + "name": "phpunit/php-text-template", + "version": "2.0.4", "source": { "type": "git", - "url": "https://github.com/sebastianbergmann/php-timer.git", - "reference": "1038454804406b0b5f5f520358e78c1c2f71501e" + "url": "https://github.com/sebastianbergmann/php-text-template.git", + "reference": "5da5f67fc95621df9ff4c4e5a84d6a8a2acf7c28" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/sebastianbergmann/php-timer/zipball/1038454804406b0b5f5f520358e78c1c2f71501e", - "reference": "1038454804406b0b5f5f520358e78c1c2f71501e", + "url": "https://api.github.com/repos/sebastianbergmann/php-text-template/zipball/5da5f67fc95621df9ff4c4e5a84d6a8a2acf7c28", + "reference": "5da5f67fc95621df9ff4c4e5a84d6a8a2acf7c28", "shasum": "" }, "require": { - "php": "^7.1" + "php": ">=7.3" }, "require-dev": { - "phpunit/phpunit": "^7.0" + "phpunit/phpunit": "^9.3" }, "type": "library", "extra": { "branch-alias": { - "dev-master": "2.1-dev" + "dev-master": "2.0-dev" } }, "autoload": { @@ -1070,38 +1343,47 @@ "role": "lead" } ], - "description": "Utility class for timing", - "homepage": "https://github.com/sebastianbergmann/php-timer/", + "description": "Simple template engine.", + "homepage": "https://github.com/sebastianbergmann/php-text-template/", "keywords": [ - "timer" + "template" ], - "time": "2019-06-07T04:22:29+00:00" + "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-token-stream", - "version": "3.1.1", + "name": "phpunit/php-timer", + "version": "5.0.3", "source": { "type": "git", - "url": "https://github.com/sebastianbergmann/php-token-stream.git", - "reference": "995192df77f63a59e47f025390d2d1fdf8f425ff" + "url": "https://github.com/sebastianbergmann/php-timer.git", + "reference": "5a63ce20ed1b5bf577850e2c4e87f4aa902afbd2" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/sebastianbergmann/php-token-stream/zipball/995192df77f63a59e47f025390d2d1fdf8f425ff", - "reference": "995192df77f63a59e47f025390d2d1fdf8f425ff", + "url": "https://api.github.com/repos/sebastianbergmann/php-timer/zipball/5a63ce20ed1b5bf577850e2c4e87f4aa902afbd2", + "reference": "5a63ce20ed1b5bf577850e2c4e87f4aa902afbd2", "shasum": "" }, "require": { - "ext-tokenizer": "*", - "php": "^7.1" + "php": ">=7.3" }, "require-dev": { - "phpunit/phpunit": "^7.0" + "phpunit/phpunit": "^9.3" }, "type": "library", "extra": { "branch-alias": { - "dev-master": "3.1-dev" + "dev-master": "5.0-dev" } }, "autoload": { @@ -1116,66 +1398,78 @@ "authors": [ { "name": "Sebastian Bergmann", - "email": "sebastian@phpunit.de" + "email": "sebastian@phpunit.de", + "role": "lead" } ], - "description": "Wrapper around PHP's tokenizer extension.", - "homepage": "https://github.com/sebastianbergmann/php-token-stream/", + "description": "Utility class for timing", + "homepage": "https://github.com/sebastianbergmann/php-timer/", "keywords": [ - "tokenizer" + "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" + } ], - "abandoned": true, - "time": "2019-09-17T06:23:10+00:00" + "time": "2020-10-26T13:16:10+00:00" }, { "name": "phpunit/phpunit", - "version": "7.5.20", + "version": "9.4.3", "source": { "type": "git", "url": "https://github.com/sebastianbergmann/phpunit.git", - "reference": "9467db479d1b0487c99733bb1e7944d32deded2c" + "reference": "9fa359ff5ddaa5eb2be2bedb08a6a5787a5807ab" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/sebastianbergmann/phpunit/zipball/9467db479d1b0487c99733bb1e7944d32deded2c", - "reference": "9467db479d1b0487c99733bb1e7944d32deded2c", + "url": "https://api.github.com/repos/sebastianbergmann/phpunit/zipball/9fa359ff5ddaa5eb2be2bedb08a6a5787a5807ab", + "reference": "9fa359ff5ddaa5eb2be2bedb08a6a5787a5807ab", "shasum": "" }, "require": { - "doctrine/instantiator": "^1.1", + "doctrine/instantiator": "^1.3.1", "ext-dom": "*", "ext-json": "*", "ext-libxml": "*", "ext-mbstring": "*", "ext-xml": "*", - "myclabs/deep-copy": "^1.7", - "phar-io/manifest": "^1.0.2", - "phar-io/version": "^2.0", - "php": "^7.1", - "phpspec/prophecy": "^1.7", - "phpunit/php-code-coverage": "^6.0.7", - "phpunit/php-file-iterator": "^2.0.1", - "phpunit/php-text-template": "^1.2.1", - "phpunit/php-timer": "^2.1", - "sebastian/comparator": "^3.0", - "sebastian/diff": "^3.0", - "sebastian/environment": "^4.0", - "sebastian/exporter": "^3.1", - "sebastian/global-state": "^2.0", - "sebastian/object-enumerator": "^3.0.3", - "sebastian/resource-operations": "^2.0", - "sebastian/version": "^2.0.1" - }, - "conflict": { - "phpunit/phpunit-mock-objects": "*" + "ext-xmlwriter": "*", + "myclabs/deep-copy": "^1.10.1", + "phar-io/manifest": "^2.0.1", + "phar-io/version": "^3.0.2", + "php": ">=7.3", + "phpspec/prophecy": "^1.12.1", + "phpunit/php-code-coverage": "^9.2", + "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": "^2.3", + "sebastian/version": "^3.0.2" }, "require-dev": { - "ext-pdo": "*" + "ext-pdo": "*", + "phpspec/prophecy-phpunit": "^2.0.1" }, "suggest": { "ext-soap": "*", - "ext-xdebug": "*", - "phpunit/php-invoker": "^2.0" + "ext-xdebug": "*" }, "bin": [ "phpunit" @@ -1183,12 +1477,15 @@ "type": "library", "extra": { "branch-alias": { - "dev-master": "7.5-dev" + "dev-master": "9.4-dev" } }, "autoload": { "classmap": [ "src/" + ], + "files": [ + "src/Framework/Assert/Functions.php" ] }, "notification-url": "https://packagist.org/downloads/", @@ -1209,32 +1506,46 @@ "testing", "xunit" ], - "time": "2020-01-08T08:45:45+00:00" + "support": { + "issues": "https://github.com/sebastianbergmann/phpunit/issues", + "source": "https://github.com/sebastianbergmann/phpunit/tree/9.4.3" + }, + "funding": [ + { + "url": "https://phpunit.de/donate.html", + "type": "custom" + }, + { + "url": "https://github.com/sebastianbergmann", + "type": "github" + } + ], + "time": "2020-11-10T12:53:30+00:00" }, { - "name": "sebastian/code-unit-reverse-lookup", + "name": "sebastian/cli-parser", "version": "1.0.1", "source": { "type": "git", - "url": "https://github.com/sebastianbergmann/code-unit-reverse-lookup.git", - "reference": "4419fcdb5eabb9caa61a27c7a1db532a6b55dd18" + "url": "https://github.com/sebastianbergmann/cli-parser.git", + "reference": "442e7c7e687e42adc03470c7b668bc4b2402c0b2" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/sebastianbergmann/code-unit-reverse-lookup/zipball/4419fcdb5eabb9caa61a27c7a1db532a6b55dd18", - "reference": "4419fcdb5eabb9caa61a27c7a1db532a6b55dd18", + "url": "https://api.github.com/repos/sebastianbergmann/cli-parser/zipball/442e7c7e687e42adc03470c7b668bc4b2402c0b2", + "reference": "442e7c7e687e42adc03470c7b668bc4b2402c0b2", "shasum": "" }, "require": { - "php": "^5.6 || ^7.0" + "php": ">=7.3" }, "require-dev": { - "phpunit/phpunit": "^5.7 || ^6.0" + "phpunit/phpunit": "^9.3" }, "type": "library", "extra": { "branch-alias": { - "dev-master": "1.0.x-dev" + "dev-master": "1.0-dev" } }, "autoload": { @@ -1249,39 +1560,48 @@ "authors": [ { "name": "Sebastian Bergmann", - "email": "sebastian@phpunit.de" + "email": "sebastian@phpunit.de", + "role": "lead" } ], - "description": "Looks up which function or method a line of code belongs to", - "homepage": "https://github.com/sebastianbergmann/code-unit-reverse-lookup/", - "time": "2017-03-04T06:30:41+00:00" + "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/comparator", - "version": "3.0.2", + "name": "sebastian/code-unit", + "version": "1.0.8", "source": { "type": "git", - "url": "https://github.com/sebastianbergmann/comparator.git", - "reference": "5de4fc177adf9bce8df98d8d141a7559d7ccf6da" + "url": "https://github.com/sebastianbergmann/code-unit.git", + "reference": "1fc9f64c0927627ef78ba436c9b17d967e68e120" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/sebastianbergmann/comparator/zipball/5de4fc177adf9bce8df98d8d141a7559d7ccf6da", - "reference": "5de4fc177adf9bce8df98d8d141a7559d7ccf6da", + "url": "https://api.github.com/repos/sebastianbergmann/code-unit/zipball/1fc9f64c0927627ef78ba436c9b17d967e68e120", + "reference": "1fc9f64c0927627ef78ba436c9b17d967e68e120", "shasum": "" }, "require": { - "php": "^7.1", - "sebastian/diff": "^3.0", - "sebastian/exporter": "^3.1" + "php": ">=7.3" }, "require-dev": { - "phpunit/phpunit": "^7.1" + "phpunit/phpunit": "^9.3" }, "type": "library", "extra": { "branch-alias": { - "dev-master": "3.0-dev" + "dev-master": "1.0-dev" } }, "autoload": { @@ -1295,7 +1615,124 @@ ], "authors": [ { - "name": "Jeff Welch", + "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" }, { @@ -1305,10 +1742,6 @@ { "name": "Bernhard Schussek", "email": "bschussek@2bepublished.at" - }, - { - "name": "Sebastian Bergmann", - "email": "sebastian@phpunit.de" } ], "description": "Provides the functionality to compare PHP values for equality", @@ -1318,33 +1751,100 @@ "compare", "equality" ], - "time": "2018-07-12T15:12:46+00:00" + "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": "3.0.2", + "version": "4.0.4", "source": { "type": "git", "url": "https://github.com/sebastianbergmann/diff.git", - "reference": "720fcc7e9b5cf384ea68d9d930d480907a0c1a29" + "reference": "3461e3fccc7cfdfc2720be910d3bd73c69be590d" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/sebastianbergmann/diff/zipball/720fcc7e9b5cf384ea68d9d930d480907a0c1a29", - "reference": "720fcc7e9b5cf384ea68d9d930d480907a0c1a29", + "url": "https://api.github.com/repos/sebastianbergmann/diff/zipball/3461e3fccc7cfdfc2720be910d3bd73c69be590d", + "reference": "3461e3fccc7cfdfc2720be910d3bd73c69be590d", "shasum": "" }, "require": { - "php": "^7.1" + "php": ">=7.3" }, "require-dev": { - "phpunit/phpunit": "^7.5 || ^8.0", - "symfony/process": "^2 || ^3.3 || ^4" + "phpunit/phpunit": "^9.3", + "symfony/process": "^4.2 || ^5" }, "type": "library", "extra": { "branch-alias": { - "dev-master": "3.0-dev" + "dev-master": "4.0-dev" } }, "autoload": { @@ -1357,13 +1857,13 @@ "BSD-3-Clause" ], "authors": [ - { - "name": "Kore Nordmann", - "email": "mail@kore-nordmann.de" - }, { "name": "Sebastian Bergmann", "email": "sebastian@phpunit.de" + }, + { + "name": "Kore Nordmann", + "email": "mail@kore-nordmann.de" } ], "description": "Diff implementation", @@ -1374,27 +1874,37 @@ "unidiff", "unified diff" ], - "time": "2019-02-04T06:01:07+00:00" + "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": "4.2.3", + "version": "5.1.3", "source": { "type": "git", "url": "https://github.com/sebastianbergmann/environment.git", - "reference": "464c90d7bdf5ad4e8a6aea15c091fec0603d4368" + "reference": "388b6ced16caa751030f6a69e588299fa09200ac" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/sebastianbergmann/environment/zipball/464c90d7bdf5ad4e8a6aea15c091fec0603d4368", - "reference": "464c90d7bdf5ad4e8a6aea15c091fec0603d4368", + "url": "https://api.github.com/repos/sebastianbergmann/environment/zipball/388b6ced16caa751030f6a69e588299fa09200ac", + "reference": "388b6ced16caa751030f6a69e588299fa09200ac", "shasum": "" }, "require": { - "php": "^7.1" + "php": ">=7.3" }, "require-dev": { - "phpunit/phpunit": "^7.5" + "phpunit/phpunit": "^9.3" }, "suggest": { "ext-posix": "*" @@ -1402,7 +1912,7 @@ "type": "library", "extra": { "branch-alias": { - "dev-master": "4.2-dev" + "dev-master": "5.1-dev" } }, "autoload": { @@ -1427,34 +1937,44 @@ "environment", "hhvm" ], - "time": "2019-11-20T08:46:58+00:00" + "support": { + "issues": "https://github.com/sebastianbergmann/environment/issues", + "source": "https://github.com/sebastianbergmann/environment/tree/5.1.3" + }, + "funding": [ + { + "url": "https://github.com/sebastianbergmann", + "type": "github" + } + ], + "time": "2020-09-28T05:52:38+00:00" }, { "name": "sebastian/exporter", - "version": "3.1.2", + "version": "4.0.3", "source": { "type": "git", "url": "https://github.com/sebastianbergmann/exporter.git", - "reference": "68609e1261d215ea5b21b7987539cbfbe156ec3e" + "reference": "d89cc98761b8cb5a1a235a6b703ae50d34080e65" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/sebastianbergmann/exporter/zipball/68609e1261d215ea5b21b7987539cbfbe156ec3e", - "reference": "68609e1261d215ea5b21b7987539cbfbe156ec3e", + "url": "https://api.github.com/repos/sebastianbergmann/exporter/zipball/d89cc98761b8cb5a1a235a6b703ae50d34080e65", + "reference": "d89cc98761b8cb5a1a235a6b703ae50d34080e65", "shasum": "" }, "require": { - "php": "^7.0", - "sebastian/recursion-context": "^3.0" + "php": ">=7.3", + "sebastian/recursion-context": "^4.0" }, "require-dev": { "ext-mbstring": "*", - "phpunit/phpunit": "^6.0" + "phpunit/phpunit": "^9.3" }, "type": "library", "extra": { "branch-alias": { - "dev-master": "3.1.x-dev" + "dev-master": "4.0-dev" } }, "autoload": { @@ -1494,27 +2014,40 @@ "export", "exporter" ], - "time": "2019-09-14T09:02:43+00:00" + "support": { + "issues": "https://github.com/sebastianbergmann/exporter/issues", + "source": "https://github.com/sebastianbergmann/exporter/tree/4.0.3" + }, + "funding": [ + { + "url": "https://github.com/sebastianbergmann", + "type": "github" + } + ], + "time": "2020-09-28T05:24:23+00:00" }, { "name": "sebastian/global-state", - "version": "2.0.0", + "version": "5.0.2", "source": { "type": "git", "url": "https://github.com/sebastianbergmann/global-state.git", - "reference": "e8ba02eed7bbbb9e59e43dedd3dddeff4a56b0c4" + "reference": "a90ccbddffa067b51f574dea6eb25d5680839455" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/sebastianbergmann/global-state/zipball/e8ba02eed7bbbb9e59e43dedd3dddeff4a56b0c4", - "reference": "e8ba02eed7bbbb9e59e43dedd3dddeff4a56b0c4", + "url": "https://api.github.com/repos/sebastianbergmann/global-state/zipball/a90ccbddffa067b51f574dea6eb25d5680839455", + "reference": "a90ccbddffa067b51f574dea6eb25d5680839455", "shasum": "" }, "require": { - "php": "^7.0" + "php": ">=7.3", + "sebastian/object-reflector": "^2.0", + "sebastian/recursion-context": "^4.0" }, "require-dev": { - "phpunit/phpunit": "^6.0" + "ext-dom": "*", + "phpunit/phpunit": "^9.3" }, "suggest": { "ext-uopz": "*" @@ -1522,7 +2055,7 @@ "type": "library", "extra": { "branch-alias": { - "dev-master": "2.0-dev" + "dev-master": "5.0-dev" } }, "autoload": { @@ -1545,34 +2078,101 @@ "keywords": [ "global state" ], - "time": "2017-04-27T15:39:26+00:00" + "support": { + "issues": "https://github.com/sebastianbergmann/global-state/issues", + "source": "https://github.com/sebastianbergmann/global-state/tree/5.0.2" + }, + "funding": [ + { + "url": "https://github.com/sebastianbergmann", + "type": "github" + } + ], + "time": "2020-10-26T15:55:19+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": "3.0.3", + "version": "4.0.4", "source": { "type": "git", "url": "https://github.com/sebastianbergmann/object-enumerator.git", - "reference": "7cfd9e65d11ffb5af41198476395774d4c8a84c5" + "reference": "5c9eeac41b290a3712d88851518825ad78f45c71" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/sebastianbergmann/object-enumerator/zipball/7cfd9e65d11ffb5af41198476395774d4c8a84c5", - "reference": "7cfd9e65d11ffb5af41198476395774d4c8a84c5", + "url": "https://api.github.com/repos/sebastianbergmann/object-enumerator/zipball/5c9eeac41b290a3712d88851518825ad78f45c71", + "reference": "5c9eeac41b290a3712d88851518825ad78f45c71", "shasum": "" }, "require": { - "php": "^7.0", - "sebastian/object-reflector": "^1.1.1", - "sebastian/recursion-context": "^3.0" + "php": ">=7.3", + "sebastian/object-reflector": "^2.0", + "sebastian/recursion-context": "^4.0" }, "require-dev": { - "phpunit/phpunit": "^6.0" + "phpunit/phpunit": "^9.3" }, "type": "library", "extra": { "branch-alias": { - "dev-master": "3.0.x-dev" + "dev-master": "4.0-dev" } }, "autoload": { @@ -1592,32 +2192,42 @@ ], "description": "Traverses array structures and object graphs to enumerate all referenced objects", "homepage": "https://github.com/sebastianbergmann/object-enumerator/", - "time": "2017-08-03T12:35:26+00:00" + "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": "1.1.1", + "version": "2.0.4", "source": { "type": "git", "url": "https://github.com/sebastianbergmann/object-reflector.git", - "reference": "773f97c67f28de00d397be301821b06708fca0be" + "reference": "b4f479ebdbf63ac605d183ece17d8d7fe49c15c7" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/sebastianbergmann/object-reflector/zipball/773f97c67f28de00d397be301821b06708fca0be", - "reference": "773f97c67f28de00d397be301821b06708fca0be", + "url": "https://api.github.com/repos/sebastianbergmann/object-reflector/zipball/b4f479ebdbf63ac605d183ece17d8d7fe49c15c7", + "reference": "b4f479ebdbf63ac605d183ece17d8d7fe49c15c7", "shasum": "" }, "require": { - "php": "^7.0" + "php": ">=7.3" }, "require-dev": { - "phpunit/phpunit": "^6.0" + "phpunit/phpunit": "^9.3" }, "type": "library", "extra": { "branch-alias": { - "dev-master": "1.1-dev" + "dev-master": "2.0-dev" } }, "autoload": { @@ -1637,32 +2247,42 @@ ], "description": "Allows reflection of object attributes, including inherited and non-public ones", "homepage": "https://github.com/sebastianbergmann/object-reflector/", - "time": "2017-03-29T09:07:27+00:00" + "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": "3.0.0", + "version": "4.0.4", "source": { "type": "git", "url": "https://github.com/sebastianbergmann/recursion-context.git", - "reference": "5b0cd723502bac3b006cbf3dbf7a1e3fcefe4fa8" + "reference": "cd9d8cf3c5804de4341c283ed787f099f5506172" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/sebastianbergmann/recursion-context/zipball/5b0cd723502bac3b006cbf3dbf7a1e3fcefe4fa8", - "reference": "5b0cd723502bac3b006cbf3dbf7a1e3fcefe4fa8", + "url": "https://api.github.com/repos/sebastianbergmann/recursion-context/zipball/cd9d8cf3c5804de4341c283ed787f099f5506172", + "reference": "cd9d8cf3c5804de4341c283ed787f099f5506172", "shasum": "" }, "require": { - "php": "^7.0" + "php": ">=7.3" }, "require-dev": { - "phpunit/phpunit": "^6.0" + "phpunit/phpunit": "^9.3" }, "type": "library", "extra": { "branch-alias": { - "dev-master": "3.0.x-dev" + "dev-master": "4.0-dev" } }, "autoload": { @@ -1675,14 +2295,14 @@ "BSD-3-Clause" ], "authors": [ - { - "name": "Jeff Welch", - "email": "whatthejeff@gmail.com" - }, { "name": "Sebastian Bergmann", "email": "sebastian@phpunit.de" }, + { + "name": "Jeff Welch", + "email": "whatthejeff@gmail.com" + }, { "name": "Adam Harvey", "email": "aharvey@php.net" @@ -1690,29 +2310,42 @@ ], "description": "Provides functionality to recursively process PHP variables", "homepage": "http://www.github.com/sebastianbergmann/recursion-context", - "time": "2017-03-03T06:23:57+00:00" + "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": "2.0.1", + "version": "3.0.3", "source": { "type": "git", "url": "https://github.com/sebastianbergmann/resource-operations.git", - "reference": "4d7a795d35b889bf80a0cc04e08d77cedfa917a9" + "reference": "0f4443cb3a1d92ce809899753bc0d5d5a8dd19a8" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/sebastianbergmann/resource-operations/zipball/4d7a795d35b889bf80a0cc04e08d77cedfa917a9", - "reference": "4d7a795d35b889bf80a0cc04e08d77cedfa917a9", + "url": "https://api.github.com/repos/sebastianbergmann/resource-operations/zipball/0f4443cb3a1d92ce809899753bc0d5d5a8dd19a8", + "reference": "0f4443cb3a1d92ce809899753bc0d5d5a8dd19a8", "shasum": "" }, "require": { - "php": "^7.1" + "php": ">=7.3" + }, + "require-dev": { + "phpunit/phpunit": "^9.0" }, "type": "library", "extra": { "branch-alias": { - "dev-master": "2.0-dev" + "dev-master": "3.0-dev" } }, "autoload": { @@ -1732,29 +2365,95 @@ ], "description": "Provides a list of PHP built-in functions that operate on resources", "homepage": "https://www.github.com/sebastianbergmann/resource-operations", - "time": "2018-10-04T04:07:39+00:00" + "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": "2.3.1", + "source": { + "type": "git", + "url": "https://github.com/sebastianbergmann/type.git", + "reference": "81cd61ab7bbf2de744aba0ea61fae32f721df3d2" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/sebastianbergmann/type/zipball/81cd61ab7bbf2de744aba0ea61fae32f721df3d2", + "reference": "81cd61ab7bbf2de744aba0ea61fae32f721df3d2", + "shasum": "" + }, + "require": { + "php": ">=7.3" + }, + "require-dev": { + "phpunit/phpunit": "^9.3" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "2.3-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/2.3.1" + }, + "funding": [ + { + "url": "https://github.com/sebastianbergmann", + "type": "github" + } + ], + "time": "2020-10-26T13:18:59+00:00" }, { "name": "sebastian/version", - "version": "2.0.1", + "version": "3.0.2", "source": { "type": "git", "url": "https://github.com/sebastianbergmann/version.git", - "reference": "99732be0ddb3361e16ad77b68ba41efc8e979019" + "reference": "c6c1022351a901512170118436c764e473f6de8c" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/sebastianbergmann/version/zipball/99732be0ddb3361e16ad77b68ba41efc8e979019", - "reference": "99732be0ddb3361e16ad77b68ba41efc8e979019", + "url": "https://api.github.com/repos/sebastianbergmann/version/zipball/c6c1022351a901512170118436c764e473f6de8c", + "reference": "c6c1022351a901512170118436c764e473f6de8c", "shasum": "" }, "require": { - "php": ">=5.6" + "php": ">=7.3" }, "type": "library", "extra": { "branch-alias": { - "dev-master": "2.0.x-dev" + "dev-master": "3.0-dev" } }, "autoload": { @@ -1775,20 +2474,30 @@ ], "description": "Library that helps with managing the version number of Git-hosted PHP projects", "homepage": "https://github.com/sebastianbergmann/version", - "time": "2016-10-03T07:35:21+00:00" + "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": "squizlabs/php_codesniffer", - "version": "3.5.6", + "version": "3.5.8", "source": { "type": "git", "url": "https://github.com/squizlabs/PHP_CodeSniffer.git", - "reference": "e97627871a7eab2f70e59166072a6b767d5834e0" + "reference": "9d583721a7157ee997f235f327de038e7ea6dac4" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/squizlabs/PHP_CodeSniffer/zipball/e97627871a7eab2f70e59166072a6b767d5834e0", - "reference": "e97627871a7eab2f70e59166072a6b767d5834e0", + "url": "https://api.github.com/repos/squizlabs/PHP_CodeSniffer/zipball/9d583721a7157ee997f235f327de038e7ea6dac4", + "reference": "9d583721a7157ee997f235f327de038e7ea6dac4", "shasum": "" }, "require": { @@ -1826,24 +2535,29 @@ "phpcs", "standards" ], - "time": "2020-08-10T04:50:15+00:00" + "support": { + "issues": "https://github.com/squizlabs/PHP_CodeSniffer/issues", + "source": "https://github.com/squizlabs/PHP_CodeSniffer", + "wiki": "https://github.com/squizlabs/PHP_CodeSniffer/wiki" + }, + "time": "2020-10-23T02:01:07+00:00" }, { "name": "symfony/polyfill-ctype", - "version": "v1.18.1", + "version": "v1.20.0", "source": { "type": "git", "url": "https://github.com/symfony/polyfill-ctype.git", - "reference": "1c302646f6efc070cd46856e600e5e0684d6b454" + "reference": "f4ba089a5b6366e453971d3aad5fe8e897b37f41" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/polyfill-ctype/zipball/1c302646f6efc070cd46856e600e5e0684d6b454", - "reference": "1c302646f6efc070cd46856e600e5e0684d6b454", + "url": "https://api.github.com/repos/symfony/polyfill-ctype/zipball/f4ba089a5b6366e453971d3aad5fe8e897b37f41", + "reference": "f4ba089a5b6366e453971d3aad5fe8e897b37f41", "shasum": "" }, "require": { - "php": ">=5.3.3" + "php": ">=7.1" }, "suggest": { "ext-ctype": "For best performance" @@ -1851,7 +2565,7 @@ "type": "library", "extra": { "branch-alias": { - "dev-master": "1.18-dev" + "dev-main": "1.20-dev" }, "thanks": { "name": "symfony/polyfill", @@ -1888,6 +2602,9 @@ "polyfill", "portable" ], + "support": { + "source": "https://github.com/symfony/polyfill-ctype/tree/v1.20.0" + }, "funding": [ { "url": "https://symfony.com/sponsor", @@ -1902,27 +2619,27 @@ "type": "tidelift" } ], - "time": "2020-07-14T12:35:20+00:00" + "time": "2020-10-23T14:02:19+00:00" }, { "name": "theseer/tokenizer", - "version": "1.1.3", + "version": "1.2.0", "source": { "type": "git", "url": "https://github.com/theseer/tokenizer.git", - "reference": "11336f6f84e16a720dae9d8e6ed5019efa85a0f9" + "reference": "75a63c33a8577608444246075ea0af0d052e452a" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/theseer/tokenizer/zipball/11336f6f84e16a720dae9d8e6ed5019efa85a0f9", - "reference": "11336f6f84e16a720dae9d8e6ed5019efa85a0f9", + "url": "https://api.github.com/repos/theseer/tokenizer/zipball/75a63c33a8577608444246075ea0af0d052e452a", + "reference": "75a63c33a8577608444246075ea0af0d052e452a", "shasum": "" }, "require": { "ext-dom": "*", "ext-tokenizer": "*", "ext-xmlwriter": "*", - "php": "^7.0" + "php": "^7.2 || ^8.0" }, "type": "library", "autoload": { @@ -1942,7 +2659,17 @@ } ], "description": "A small library for converting tokenized PHP source code into XML and potentially other formats", - "time": "2019-06-13T22:48:21+00:00" + "support": { + "issues": "https://github.com/theseer/tokenizer/issues", + "source": "https://github.com/theseer/tokenizer/tree/master" + }, + "funding": [ + { + "url": "https://github.com/theseer", + "type": "github" + } + ], + "time": "2020-07-12T23:59:07+00:00" }, { "name": "webmozart/assert", @@ -1991,6 +2718,10 @@ "check", "validate" ], + "support": { + "issues": "https://github.com/webmozart/assert/issues", + "source": "https://github.com/webmozart/assert/tree/master" + }, "time": "2020-07-08T17:02:28+00:00" }, { @@ -2037,6 +2768,11 @@ "standards", "wordpress" ], + "support": { + "issues": "https://github.com/WordPress/WordPress-Coding-Standards/issues", + "source": "https://github.com/WordPress/WordPress-Coding-Standards", + "wiki": "https://github.com/WordPress/WordPress-Coding-Standards/wiki" + }, "time": "2020-05-13T23:57:56+00:00" } ], @@ -2046,14 +2782,11 @@ "prefer-stable": false, "prefer-lowest": false, "platform": { - "php": "^5.2|^7", + "php": ">=5.2", "ext-json": "*" }, "platform-dev": { - "php": "^7.1" - }, - "platform-overrides": { - "php": "7.1" + "php": ">=7.3" }, - "plugin-api-version": "1.1.0" + "plugin-api-version": "2.0.0" } diff --git a/phpunit.xml b/phpunit.xml index d568a30..1dd1854 100644 --- a/phpunit.xml +++ b/phpunit.xml @@ -1,20 +1,23 @@ - + + + + ./antivirus.php + ./inc/ + + + tests/ - - - - ./antivirus.php - ./inc/ - - diff --git a/tests/test-checksumverifier.php b/tests/test-checksumverifier.php index 20ee340..7b0d167 100644 --- a/tests/test-checksumverifier.php +++ b/tests/test-checksumverifier.php @@ -161,7 +161,7 @@ public function test() { self::assertEquals( 'admin@example.com', $mail_recipient, 'Mail should have been sent to site admin' ); self::assertEquals( '[AntiVirus Test Blog] Checksum Verifier Alert', $mail_subject, 'Unexpected mail subject' ); - self::assertContains( 'testfile2', $mail_body, 'Mail body does not contain expected filename' ); + self::assertStringContainsString( 'testfile2', $mail_body, 'Mail body does not contain expected filename' ); /* * Case 6: Cached checksums, so invalid response will not be used. diff --git a/tests/test-safebrowsing.php b/tests/test-safebrowsing.php index 6268a86..ba4587d 100644 --- a/tests/test-safebrowsing.php +++ b/tests/test-safebrowsing.php @@ -105,7 +105,7 @@ public function test() { self::assertEquals( 'admin@example.com', $mail_recipient, 'Mail should have been sent to site admin' ); self::assertEquals( '[AntiVirus Test Blog] Safe Browsing Alert', $mail_subject, 'Unexpected mail subject' ); - self::assertContains( + self::assertStringContainsString( 'https://transparencyreport.google.com/safe-browsing/search?url=https%3A%2F%2Fantivirus.pluginkollektiv.org%2Ftest%2F&hl=de', $mail_body, 'Mail body does not contain expected link to transparency report' @@ -144,7 +144,7 @@ public function test() { $mail_subject, 'expected different subject for Safe Browsing check failing with 403' ); - self::assertContains( "\r\n Quota exceeded\r\n", $mail_body, 'Message from response not transported to mail' ); + self::assertStringContainsString( "\r\n Quota exceeded\r\n", $mail_body, 'Message from response not transported to mail' ); /* * Case 5: Assume code 400 for invalid key. @@ -155,6 +155,6 @@ public function test() { $mail_subject, 'expected different subject for Safe Browsing check failing with 400' ); - self::assertContains( "\r\n Invalid API key\r\n", $mail_body, 'Message from response not transported to mail' ); + self::assertStringContainsString( "\r\n Invalid API key\r\n", $mail_body, 'Message from response not transported to mail' ); } } From 6b2e8adbbf9a014292d459975118b6b9b4e6d668 Mon Sep 17 00:00:00 2001 From: Stefan Kalscheuer Date: Sat, 12 Dec 2020 21:34:58 +0100 Subject: [PATCH 08/17] Restore custom Safe Browsing API key and error handling (#69) * restore use of custom Safe Browsing API key fix regression from 1eb8b5b93be797c9b3dabc04ee004e72fd715056 * restore behavior for Safe Browsing 40x responses fix regression from 1eb8b5b93be797c9b3dabc04ee004e72fd715056 * fix echo of safe browsing key and notification address * Fix code style issues Co-authored-by: Patrick Robrecht --- inc/class-antivirus-safebrowsing.php | 76 ++++++++++++++++++++++------ inc/class-antivirus.php | 7 ++- 2 files changed, 63 insertions(+), 20 deletions(-) diff --git a/inc/class-antivirus-safebrowsing.php b/inc/class-antivirus-safebrowsing.php index fd42f93..0f7b997 100644 --- a/inc/class-antivirus-safebrowsing.php +++ b/inc/class-antivirus-safebrowsing.php @@ -21,11 +21,20 @@ class AntiVirus_SafeBrowsing extends AntiVirus { * Pings the Safe Browsing API to see if the website is infected. */ public static function check_safe_browsing() { + // Check if API key is provided in config. + $key = parent::_get_option( 'safe_browsing_key' ); + $custom_key = true; + // Fallback to default key if not. + if ( empty( $key ) ) { + $key = 'AIzaSyCGHXUd7vQAySRLNiC5y1M_wzR2W0kCVKI'; + $custom_key = false; + } + // Request the API. $response = wp_remote_post( sprintf( 'https://safebrowsing.googleapis.com/v4/threatMatches:find?key=%s', - 'AIzaSyCGHXUd7vQAySRLNiC5y1M_wzR2W0kCVKI' + $key ), array( 'headers' => array( @@ -61,23 +70,58 @@ public static function check_safe_browsing() { return; } - // Get the JSON response of the API request. + // Get the response code and JSON response of the API request. + $response_code = wp_remote_retrieve_response_code( $response ); $response_json = json_decode( wp_remote_retrieve_body( $response ), true ); - // All clear, nothing bad detected. - if ( wp_remote_retrieve_response_code( $response ) === 200 && empty( $response_json ) ) { - return; - } + if ( 200 === $response_code ) { + // Successful request. + if ( ! empty( $response_json ) ) { + // Send notification. + self::_send_warning_notification( + esc_html__( 'Safe Browsing Alert', 'antivirus' ), + sprintf( + "%s\r\nhttps://transparencyreport.google.com/safe-browsing/search?url=%s&hl=%s", + esc_html__( 'Google has found a problem on your page and probably listed it on a blacklist. It is likely that your website or your hosting account has been hacked and malware or phishing code was installed. We recommend to check your site. For more details please check the Google Safe Browsing diagnostic page:', 'antivirus' ), + urlencode( get_bloginfo( 'url' ) ), + substr( get_locale(), 0, 2 ) + ) + ); + } + } elseif ( 400 === $response_code || 403 === $response_code ) { + // Invalid request (most likely invalid key) or expired/exceeded key. + $mail_body = sprintf( + "%s\r\n\r\n%s", + esc_html__( 'Checking yout site against the Google Safe Browsing API has failed.', 'antivirus' ), + esc_html__( 'This does not mean that your site has been infected, but that the status could not be determinined.', 'antivirus' ) + ); - // Send notification. - self::_send_warning_notification( - esc_html__( 'Safe Browsing Alert', 'antivirus' ), - sprintf( - "%s\r\nhttps://transparencyreport.google.com/safe-browsing/search?url=%s&hl=%s", - esc_html__( 'Google has found a problem on your page and probably listed it on a blacklist. It is likely that your website or your hosting account has been hacked and malware or phishing code was installed. We recommend to check your site. For more details please check the Google Safe Browsing diagnostic page:', 'antivirus' ), - urlencode( get_bloginfo( 'url' ) ), - substr( get_locale(), 0, 2 ) - ) - ); + // Add (sanitized) error message, if available. + if ( isset( $response_json['error']['message'] ) ) { + $mail_body .= sprintf( + "\r\n\r\n%s:\r\n %s\r\n", + esc_html__( 'Error message from API', 'antivirus' ), + filter_var( $response_json['error']['message'], FILTER_SANITIZE_STRING ) + ); + } + + // Add advice to solve the problem, depending on the key (custom or default). + if ( $custom_key ) { + $mail_body .= sprintf( + "\r\n%s", + esc_html__( 'Please check if your API key is correct and its limit not exceeded. If everything is correct and the error persists for the next requests, please contact the Plugin support.', 'antivirus' ) + ); + } else { + $mail_body .= sprintf( + "\r\n%s", + esc_html__( 'This might be due to an exceeded rate limit on the shared API key. To ensure this does not happen please consider providing your own key using the Plugin settings page.', 'antivirus' ) + ); + } + + self::_send_warning_notification( + esc_html__( 'Safe Browsing check failed', 'antivirus' ), + $mail_body + ); + } } } diff --git a/inc/class-antivirus.php b/inc/class-antivirus.php index c03a7ea..7b355a3 100644 --- a/inc/class-antivirus.php +++ b/inc/class-antivirus.php @@ -175,7 +175,7 @@ private static function _get_options() { * * @return string The option value. */ - private static function _get_option( $field ) { + protected static function _get_option( $field ) { $options = self::_get_options(); return ( empty( $options[ $field ] ) ? '' : $options[ $field ] ); @@ -725,7 +725,7 @@ public static function show_admin_menu() {
+ value="" />

-

From 8b3e1045c48ac4cd2c088003b1d3e61f041940bb Mon Sep 17 00:00:00 2001 From: Patrick Robrecht Date: Sat, 12 Dec 2020 21:47:31 +0100 Subject: [PATCH 09/17] Update dependencies and Travis build (PHP 8, node 14, disable email notifications) --- .travis.yml | 6 +- composer.lock | 52 +- package-lock.json | 2065 +++++++++++++++++++++------------------------ package.json | 6 +- 4 files changed, 979 insertions(+), 1150 deletions(-) diff --git a/.travis.yml b/.travis.yml index 4c73fd5..7875c26 100644 --- a/.travis.yml +++ b/.travis.yml @@ -3,6 +3,7 @@ language: php php: - '7.3' - '7.4' + - '8.0' - nightly matrix: @@ -10,7 +11,7 @@ matrix: - php: nightly before_install: - - nvm install 12 + - nvm install 14 # Clones WordPress and configures our testing environment. before_script: @@ -25,3 +26,6 @@ script: after_script: # Push coverage off to Codecov - bash <(curl -s https://codecov.io/bash) + +notifications: + email: false diff --git a/composer.lock b/composer.lock index f00e235..d6dbb8f 100644 --- a/composer.lock +++ b/composer.lock @@ -102,22 +102,22 @@ }, { "name": "dealerdirect/phpcodesniffer-composer-installer", - "version": "v0.7.0", + "version": "v0.7.1", "source": { "type": "git", "url": "https://github.com/Dealerdirect/phpcodesniffer-composer-installer.git", - "reference": "e8d808670b8f882188368faaf1144448c169c0b7" + "reference": "fe390591e0241955f22eb9ba327d137e501c771c" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/Dealerdirect/phpcodesniffer-composer-installer/zipball/e8d808670b8f882188368faaf1144448c169c0b7", - "reference": "e8d808670b8f882188368faaf1144448c169c0b7", + "url": "https://api.github.com/repos/Dealerdirect/phpcodesniffer-composer-installer/zipball/fe390591e0241955f22eb9ba327d137e501c771c", + "reference": "fe390591e0241955f22eb9ba327d137e501c771c", "shasum": "" }, "require": { "composer-plugin-api": "^1.0 || ^2.0", "php": ">=5.3", - "squizlabs/php_codesniffer": "^2 || ^3 || 4.0.x-dev" + "squizlabs/php_codesniffer": "^2.0 || ^3.0 || ^4.0" }, "require-dev": { "composer/composer": "*", @@ -168,7 +168,7 @@ "issues": "https://github.com/dealerdirect/phpcodesniffer-composer-installer/issues", "source": "https://github.com/dealerdirect/phpcodesniffer-composer-installer" }, - "time": "2020-06-25T14:57:39+00:00" + "time": "2020-12-07T18:04:37+00:00" }, { "name": "doctrine/instantiator", @@ -539,16 +539,16 @@ }, { "name": "nikic/php-parser", - "version": "v4.10.2", + "version": "v4.10.3", "source": { "type": "git", "url": "https://github.com/nikic/PHP-Parser.git", - "reference": "658f1be311a230e0907f5dfe0213742aff0596de" + "reference": "dbe56d23de8fcb157bbc0cfb3ad7c7de0cfb0984" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/nikic/PHP-Parser/zipball/658f1be311a230e0907f5dfe0213742aff0596de", - "reference": "658f1be311a230e0907f5dfe0213742aff0596de", + "url": "https://api.github.com/repos/nikic/PHP-Parser/zipball/dbe56d23de8fcb157bbc0cfb3ad7c7de0cfb0984", + "reference": "dbe56d23de8fcb157bbc0cfb3ad7c7de0cfb0984", "shasum": "" }, "require": { @@ -589,9 +589,9 @@ ], "support": { "issues": "https://github.com/nikic/PHP-Parser/issues", - "source": "https://github.com/nikic/PHP-Parser/tree/v4.10.2" + "source": "https://github.com/nikic/PHP-Parser/tree/v4.10.3" }, - "time": "2020-09-26T10:30:38+00:00" + "time": "2020-12-03T17:45:45+00:00" }, { "name": "phar-io/manifest", @@ -655,16 +655,16 @@ }, { "name": "phar-io/version", - "version": "3.0.2", + "version": "3.0.3", "source": { "type": "git", "url": "https://github.com/phar-io/version.git", - "reference": "c6bb6825def89e0a32220f88337f8ceaf1975fa0" + "reference": "726c026815142e4f8677b7cb7f2249c9ffb7ecae" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/phar-io/version/zipball/c6bb6825def89e0a32220f88337f8ceaf1975fa0", - "reference": "c6bb6825def89e0a32220f88337f8ceaf1975fa0", + "url": "https://api.github.com/repos/phar-io/version/zipball/726c026815142e4f8677b7cb7f2249c9ffb7ecae", + "reference": "726c026815142e4f8677b7cb7f2249c9ffb7ecae", "shasum": "" }, "require": { @@ -700,9 +700,9 @@ "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/master" + "source": "https://github.com/phar-io/version/tree/3.0.3" }, - "time": "2020-06-27T14:39:04+00:00" + "time": "2020-11-30T09:21:21+00:00" }, { "name": "phpcompatibility/php-compatibility", @@ -1421,16 +1421,16 @@ }, { "name": "phpunit/phpunit", - "version": "9.4.3", + "version": "9.5.0", "source": { "type": "git", "url": "https://github.com/sebastianbergmann/phpunit.git", - "reference": "9fa359ff5ddaa5eb2be2bedb08a6a5787a5807ab" + "reference": "8e16c225d57c3d6808014df6b1dd7598d0a5bbbe" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/sebastianbergmann/phpunit/zipball/9fa359ff5ddaa5eb2be2bedb08a6a5787a5807ab", - "reference": "9fa359ff5ddaa5eb2be2bedb08a6a5787a5807ab", + "url": "https://api.github.com/repos/sebastianbergmann/phpunit/zipball/8e16c225d57c3d6808014df6b1dd7598d0a5bbbe", + "reference": "8e16c225d57c3d6808014df6b1dd7598d0a5bbbe", "shasum": "" }, "require": { @@ -1446,7 +1446,7 @@ "phar-io/version": "^3.0.2", "php": ">=7.3", "phpspec/prophecy": "^1.12.1", - "phpunit/php-code-coverage": "^9.2", + "phpunit/php-code-coverage": "^9.2.3", "phpunit/php-file-iterator": "^3.0.5", "phpunit/php-invoker": "^3.1.1", "phpunit/php-text-template": "^2.0.3", @@ -1477,7 +1477,7 @@ "type": "library", "extra": { "branch-alias": { - "dev-master": "9.4-dev" + "dev-master": "9.5-dev" } }, "autoload": { @@ -1508,7 +1508,7 @@ ], "support": { "issues": "https://github.com/sebastianbergmann/phpunit/issues", - "source": "https://github.com/sebastianbergmann/phpunit/tree/9.4.3" + "source": "https://github.com/sebastianbergmann/phpunit/tree/9.5.0" }, "funding": [ { @@ -1520,7 +1520,7 @@ "type": "github" } ], - "time": "2020-11-10T12:53:30+00:00" + "time": "2020-12-04T05:05:53+00:00" }, { "name": "sebastian/cli-parser", diff --git a/package-lock.json b/package-lock.json index 6afc9a7..2190294 100644 --- a/package-lock.json +++ b/package-lock.json @@ -12,69 +12,45 @@ } }, "@babel/core": { - "version": "7.11.1", - "resolved": "https://registry.npmjs.org/@babel/core/-/core-7.11.1.tgz", - "integrity": "sha512-XqF7F6FWQdKGGWAzGELL+aCO1p+lRY5Tj5/tbT3St1G8NaH70jhhDIKknIZaDans0OQBG5wRAldROLHSt44BgQ==", + "version": "7.12.10", + "resolved": "https://registry.npmjs.org/@babel/core/-/core-7.12.10.tgz", + "integrity": "sha512-eTAlQKq65zHfkHZV0sIVODCPGVgoo1HdBlbSLi9CqOzuZanMv2ihzY+4paiKr1mH+XmYESMAmJ/dpZ68eN6d8w==", "dev": true, "requires": { "@babel/code-frame": "^7.10.4", - "@babel/generator": "^7.11.0", - "@babel/helper-module-transforms": "^7.11.0", - "@babel/helpers": "^7.10.4", - "@babel/parser": "^7.11.1", - "@babel/template": "^7.10.4", - "@babel/traverse": "^7.11.0", - "@babel/types": "^7.11.0", + "@babel/generator": "^7.12.10", + "@babel/helper-module-transforms": "^7.12.1", + "@babel/helpers": "^7.12.5", + "@babel/parser": "^7.12.10", + "@babel/template": "^7.12.7", + "@babel/traverse": "^7.12.10", + "@babel/types": "^7.12.10", "convert-source-map": "^1.7.0", "debug": "^4.1.0", "gensync": "^1.0.0-beta.1", "json5": "^2.1.2", "lodash": "^4.17.19", - "resolve": "^1.3.2", "semver": "^5.4.1", "source-map": "^0.5.0" }, "dependencies": { - "lodash": { - "version": "4.17.20", - "resolved": "https://registry.npmjs.org/lodash/-/lodash-4.17.20.tgz", - "integrity": "sha512-PlhdFcillOINfeV7Ni6oF1TAEayyZBoZ8bcshTHqOYJYlrqzRK5hagpagky5o4HfCzzd1TRkXPMFq6cKk9rGmA==", - "dev": true - }, - "resolve": { - "version": "1.17.0", - "resolved": "https://registry.npmjs.org/resolve/-/resolve-1.17.0.tgz", - "integrity": "sha512-ic+7JYiV8Vi2yzQGFWOkiZD5Z9z7O2Zhm9XMaTxdJExKasieFCr+yXZ/WmXsckHiKl12ar0y6XiXDx3m4RHn1w==", - "dev": true, - "requires": { - "path-parse": "^1.0.6" - } - }, - "source-map": { - "version": "0.5.7", - "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.5.7.tgz", - "integrity": "sha1-igOdLRAh0i0eoUyA2OpGi6LvP8w=", + "semver": { + "version": "5.7.1", + "resolved": "https://registry.npmjs.org/semver/-/semver-5.7.1.tgz", + "integrity": "sha512-sauaDf/PZdVgrLTNYHRtpXa1iRiKcaebiKQ1BJdpQlWH2lCvexQdX55snPFyK7QzpudqbCI0qXFfOasHdyNDGQ==", "dev": true } } }, "@babel/generator": { - "version": "7.11.0", - "resolved": "https://registry.npmjs.org/@babel/generator/-/generator-7.11.0.tgz", - "integrity": "sha512-fEm3Uzw7Mc9Xi//qU20cBKatTfs2aOtKqmvy/Vm7RkJEGFQ4xc9myCfbXxqK//ZS8MR/ciOHw6meGASJuKmDfQ==", + "version": "7.12.10", + "resolved": "https://registry.npmjs.org/@babel/generator/-/generator-7.12.10.tgz", + "integrity": "sha512-6mCdfhWgmqLdtTkhXjnIz0LcdVCd26wS2JXRtj2XY0u5klDsXBREA/pG5NVOuVnF2LUrBGNFtQkIqqTbblg0ww==", "dev": true, "requires": { - "@babel/types": "^7.11.0", + "@babel/types": "^7.12.10", "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-function-name": { @@ -89,84 +65,77 @@ } }, "@babel/helper-get-function-arity": { - "version": "7.10.4", - "resolved": "https://registry.npmjs.org/@babel/helper-get-function-arity/-/helper-get-function-arity-7.10.4.tgz", - "integrity": "sha512-EkN3YDB+SRDgiIUnNgcmiD361ti+AVbL3f3Henf6dqqUyr5dMsorno0lJWJuLhDhkI5sYEpgj6y9kB8AOU1I2A==", + "version": "7.12.10", + "resolved": "https://registry.npmjs.org/@babel/helper-get-function-arity/-/helper-get-function-arity-7.12.10.tgz", + "integrity": "sha512-mm0n5BPjR06wh9mPQaDdXWDoll/j5UpCAPl1x8fS71GHm7HA6Ua2V4ylG1Ju8lvcTOietbPNNPaSilKj+pj+Ag==", "dev": true, "requires": { - "@babel/types": "^7.10.4" + "@babel/types": "^7.12.10" } }, "@babel/helper-member-expression-to-functions": { - "version": "7.11.0", - "resolved": "https://registry.npmjs.org/@babel/helper-member-expression-to-functions/-/helper-member-expression-to-functions-7.11.0.tgz", - "integrity": "sha512-JbFlKHFntRV5qKw3YC0CvQnDZ4XMwgzzBbld7Ly4Mj4cbFy3KywcR8NtNctRToMWJOVvLINJv525Gd6wwVEx/Q==", + "version": "7.12.7", + "resolved": "https://registry.npmjs.org/@babel/helper-member-expression-to-functions/-/helper-member-expression-to-functions-7.12.7.tgz", + "integrity": "sha512-DCsuPyeWxeHgh1Dus7APn7iza42i/qXqiFPWyBDdOFtvS581JQePsc1F/nD+fHrcswhLlRc2UpYS1NwERxZhHw==", "dev": true, "requires": { - "@babel/types": "^7.11.0" + "@babel/types": "^7.12.7" } }, "@babel/helper-module-imports": { - "version": "7.10.4", - "resolved": "https://registry.npmjs.org/@babel/helper-module-imports/-/helper-module-imports-7.10.4.tgz", - "integrity": "sha512-nEQJHqYavI217oD9+s5MUBzk6x1IlvoS9WTPfgG43CbMEeStE0v+r+TucWdx8KFGowPGvyOkDT9+7DHedIDnVw==", + "version": "7.12.5", + "resolved": "https://registry.npmjs.org/@babel/helper-module-imports/-/helper-module-imports-7.12.5.tgz", + "integrity": "sha512-SR713Ogqg6++uexFRORf/+nPXMmWIn80TALu0uaFb+iQIUoR7bOC7zBWyzBs5b3tBBJXuyD0cRu1F15GyzjOWA==", "dev": true, "requires": { - "@babel/types": "^7.10.4" + "@babel/types": "^7.12.5" } }, "@babel/helper-module-transforms": { - "version": "7.11.0", - "resolved": "https://registry.npmjs.org/@babel/helper-module-transforms/-/helper-module-transforms-7.11.0.tgz", - "integrity": "sha512-02EVu8COMuTRO1TAzdMtpBPbe6aQ1w/8fePD2YgQmxZU4gpNWaL9gK3Jp7dxlkUlUCJOTaSeA+Hrm1BRQwqIhg==", + "version": "7.12.1", + "resolved": "https://registry.npmjs.org/@babel/helper-module-transforms/-/helper-module-transforms-7.12.1.tgz", + "integrity": "sha512-QQzehgFAZ2bbISiCpmVGfiGux8YVFXQ0abBic2Envhej22DVXV9nCFaS5hIQbkyo1AdGb+gNME2TSh3hYJVV/w==", "dev": true, "requires": { - "@babel/helper-module-imports": "^7.10.4", - "@babel/helper-replace-supers": "^7.10.4", - "@babel/helper-simple-access": "^7.10.4", + "@babel/helper-module-imports": "^7.12.1", + "@babel/helper-replace-supers": "^7.12.1", + "@babel/helper-simple-access": "^7.12.1", "@babel/helper-split-export-declaration": "^7.11.0", + "@babel/helper-validator-identifier": "^7.10.4", "@babel/template": "^7.10.4", - "@babel/types": "^7.11.0", + "@babel/traverse": "^7.12.1", + "@babel/types": "^7.12.1", "lodash": "^4.17.19" - }, - "dependencies": { - "lodash": { - "version": "4.17.20", - "resolved": "https://registry.npmjs.org/lodash/-/lodash-4.17.20.tgz", - "integrity": "sha512-PlhdFcillOINfeV7Ni6oF1TAEayyZBoZ8bcshTHqOYJYlrqzRK5hagpagky5o4HfCzzd1TRkXPMFq6cKk9rGmA==", - "dev": true - } } }, "@babel/helper-optimise-call-expression": { - "version": "7.10.4", - "resolved": "https://registry.npmjs.org/@babel/helper-optimise-call-expression/-/helper-optimise-call-expression-7.10.4.tgz", - "integrity": "sha512-n3UGKY4VXwXThEiKrgRAoVPBMqeoPgHVqiHZOanAJCG9nQUL2pLRQirUzl0ioKclHGpGqRgIOkgcIJaIWLpygg==", + "version": "7.12.10", + "resolved": "https://registry.npmjs.org/@babel/helper-optimise-call-expression/-/helper-optimise-call-expression-7.12.10.tgz", + "integrity": "sha512-4tpbU0SrSTjjt65UMWSrUOPZTsgvPgGG4S8QSTNHacKzpS51IVWGDj0yCwyeZND/i+LSN2g/O63jEXEWm49sYQ==", "dev": true, "requires": { - "@babel/types": "^7.10.4" + "@babel/types": "^7.12.10" } }, "@babel/helper-replace-supers": { - "version": "7.10.4", - "resolved": "https://registry.npmjs.org/@babel/helper-replace-supers/-/helper-replace-supers-7.10.4.tgz", - "integrity": "sha512-sPxZfFXocEymYTdVK1UNmFPBN+Hv5mJkLPsYWwGBxZAxaWfFu+xqp7b6qWD0yjNuNL2VKc6L5M18tOXUP7NU0A==", + "version": "7.12.5", + "resolved": "https://registry.npmjs.org/@babel/helper-replace-supers/-/helper-replace-supers-7.12.5.tgz", + "integrity": "sha512-5YILoed0ZyIpF4gKcpZitEnXEJ9UoDRki1Ey6xz46rxOzfNMAhVIJMoune1hmPVxh40LRv1+oafz7UsWX+vyWA==", "dev": true, "requires": { - "@babel/helper-member-expression-to-functions": "^7.10.4", + "@babel/helper-member-expression-to-functions": "^7.12.1", "@babel/helper-optimise-call-expression": "^7.10.4", - "@babel/traverse": "^7.10.4", - "@babel/types": "^7.10.4" + "@babel/traverse": "^7.12.5", + "@babel/types": "^7.12.5" } }, "@babel/helper-simple-access": { - "version": "7.10.4", - "resolved": "https://registry.npmjs.org/@babel/helper-simple-access/-/helper-simple-access-7.10.4.tgz", - "integrity": "sha512-0fMy72ej/VEvF8ULmX6yb5MtHG4uH4Dbd6I/aHDb/JVg0bbivwt9Wg+h3uMvX+QSFtwr5MeItvazbrc4jtRAXw==", + "version": "7.12.1", + "resolved": "https://registry.npmjs.org/@babel/helper-simple-access/-/helper-simple-access-7.12.1.tgz", + "integrity": "sha512-OxBp7pMrjVewSSC8fXDFrHrBcJATOOFssZwv16F3/6Xtc138GHybBfPbm9kfiqQHKhYQrlamWILwlDCeyMFEaA==", "dev": true, "requires": { - "@babel/template": "^7.10.4", - "@babel/types": "^7.10.4" + "@babel/types": "^7.12.1" } }, "@babel/helper-split-export-declaration": { @@ -185,14 +154,14 @@ "dev": true }, "@babel/helpers": { - "version": "7.10.4", - "resolved": "https://registry.npmjs.org/@babel/helpers/-/helpers-7.10.4.tgz", - "integrity": "sha512-L2gX/XeUONeEbI78dXSrJzGdz4GQ+ZTA/aazfUsFaWjSe95kiCuOZ5HsXvkiw3iwF+mFHSRUfJU8t6YavocdXA==", + "version": "7.12.5", + "resolved": "https://registry.npmjs.org/@babel/helpers/-/helpers-7.12.5.tgz", + "integrity": "sha512-lgKGMQlKqA8meJqKsW6rUnc4MdUk35Ln0ATDqdM1a/UpARODdI4j5Y5lVfUScnSNkJcdCRAaWkspykNoFg9sJA==", "dev": true, "requires": { "@babel/template": "^7.10.4", - "@babel/traverse": "^7.10.4", - "@babel/types": "^7.10.4" + "@babel/traverse": "^7.12.5", + "@babel/types": "^7.12.5" } }, "@babel/highlight": { @@ -207,24 +176,24 @@ } }, "@babel/parser": { - "version": "7.11.3", - "resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.11.3.tgz", - "integrity": "sha512-REo8xv7+sDxkKvoxEywIdsNFiZLybwdI7hcT5uEPyQrSMB4YQ973BfC9OOrD/81MaIjh6UxdulIQXkjmiH3PcA==", + "version": "7.12.10", + "resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.12.10.tgz", + "integrity": "sha512-PJdRPwyoOqFAWfLytxrWwGrAxghCgh/yTNCYciOz8QgjflA7aZhECPZAa2VUedKg2+QMWkI0L9lynh2SNmNEgA==", "dev": true }, "@babel/runtime": { - "version": "7.11.2", - "resolved": "https://registry.npmjs.org/@babel/runtime/-/runtime-7.11.2.tgz", - "integrity": "sha512-TeWkU52so0mPtDcaCTxNBI/IHiz0pZgr8VEFqXFtZWpYD08ZB6FaSwVAS8MKRQAP3bYKiVjwysOJgMFY28o6Tw==", + "version": "7.12.5", + "resolved": "https://registry.npmjs.org/@babel/runtime/-/runtime-7.12.5.tgz", + "integrity": "sha512-plcc+hbExy3McchJCEQG3knOsuh3HH+Prx1P6cLIkET/0dLuQDEnrT+s27Axgc9bqfsmNUNHfscgMUdBpC9xfg==", "dev": true, "requires": { "regenerator-runtime": "^0.13.4" } }, "@babel/runtime-corejs3": { - "version": "7.11.2", - "resolved": "https://registry.npmjs.org/@babel/runtime-corejs3/-/runtime-corejs3-7.11.2.tgz", - "integrity": "sha512-qh5IR+8VgFz83VBa6OkaET6uN/mJOhHONuy3m1sgF0CV6mXdPSEBdA7e1eUbVvyNtANjMbg22JUv71BaDXLY6A==", + "version": "7.12.5", + "resolved": "https://registry.npmjs.org/@babel/runtime-corejs3/-/runtime-corejs3-7.12.5.tgz", + "integrity": "sha512-roGr54CsTmNPPzZoCP1AmDXuBoNao7tnSA83TXTwt+UK5QVyh1DIJnrgYRPWKCF2flqZQXwa7Yr8v7VmLzF0YQ==", "dev": true, "requires": { "core-js-pure": "^3.0.0", @@ -232,28 +201,28 @@ } }, "@babel/template": { - "version": "7.10.4", - "resolved": "https://registry.npmjs.org/@babel/template/-/template-7.10.4.tgz", - "integrity": "sha512-ZCjD27cGJFUB6nmCB1Enki3r+L5kJveX9pq1SvAUKoICy6CZ9yD8xO086YXdYhvNjBdnekm4ZnaP5yC8Cs/1tA==", + "version": "7.12.7", + "resolved": "https://registry.npmjs.org/@babel/template/-/template-7.12.7.tgz", + "integrity": "sha512-GkDzmHS6GV7ZeXfJZ0tLRBhZcMcY0/Lnb+eEbXDBfCAcZCjrZKe6p3J4we/D24O9Y8enxWAg1cWwof59yLh2ow==", "dev": true, "requires": { "@babel/code-frame": "^7.10.4", - "@babel/parser": "^7.10.4", - "@babel/types": "^7.10.4" + "@babel/parser": "^7.12.7", + "@babel/types": "^7.12.7" } }, "@babel/traverse": { - "version": "7.11.0", - "resolved": "https://registry.npmjs.org/@babel/traverse/-/traverse-7.11.0.tgz", - "integrity": "sha512-ZB2V+LskoWKNpMq6E5UUCrjtDUh5IOTAyIl0dTjIEoXum/iKWkoIEKIRDnUucO6f+2FzNkE0oD4RLKoPIufDtg==", + "version": "7.12.10", + "resolved": "https://registry.npmjs.org/@babel/traverse/-/traverse-7.12.10.tgz", + "integrity": "sha512-6aEtf0IeRgbYWzta29lePeYSk+YAFIC3kyqESeft8o5CkFlYIMX+EQDDWEiAQ9LHOA3d0oHdgrSsID/CKqXJlg==", "dev": true, "requires": { "@babel/code-frame": "^7.10.4", - "@babel/generator": "^7.11.0", + "@babel/generator": "^7.12.10", "@babel/helper-function-name": "^7.10.4", "@babel/helper-split-export-declaration": "^7.11.0", - "@babel/parser": "^7.11.0", - "@babel/types": "^7.11.0", + "@babel/parser": "^7.12.10", + "@babel/types": "^7.12.10", "debug": "^4.1.0", "globals": "^11.1.0", "lodash": "^4.17.19" @@ -264,32 +233,36 @@ "resolved": "https://registry.npmjs.org/globals/-/globals-11.12.0.tgz", "integrity": "sha512-WOBp/EEGUiIsJSp7wcv/y6MO+lV9UoncWqxuFfm8eBwzWNgyfBd6Gz+IeKQ9jCmyhoH99g15M3T+QaVHFjizVA==", "dev": true - }, - "lodash": { - "version": "4.17.20", - "resolved": "https://registry.npmjs.org/lodash/-/lodash-4.17.20.tgz", - "integrity": "sha512-PlhdFcillOINfeV7Ni6oF1TAEayyZBoZ8bcshTHqOYJYlrqzRK5hagpagky5o4HfCzzd1TRkXPMFq6cKk9rGmA==", - "dev": true } } }, "@babel/types": { - "version": "7.11.0", - "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.11.0.tgz", - "integrity": "sha512-O53yME4ZZI0jO1EVGtF1ePGl0LHirG4P1ibcD80XyzZcKhcMFeCXmh4Xb1ifGBIV233Qg12x4rBfQgA+tmOukA==", + "version": "7.12.10", + "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.12.10.tgz", + "integrity": "sha512-sf6wboJV5mGyip2hIpDSKsr80RszPinEFjsHTalMxZAZkoQ2/2yQzxlcFN52SJqsyPfLtPmenL4g2KB3KJXPDw==", "dev": true, "requires": { "@babel/helper-validator-identifier": "^7.10.4", "lodash": "^4.17.19", "to-fast-properties": "^2.0.0" - }, - "dependencies": { - "lodash": { - "version": "4.17.20", - "resolved": "https://registry.npmjs.org/lodash/-/lodash-4.17.20.tgz", - "integrity": "sha512-PlhdFcillOINfeV7Ni6oF1TAEayyZBoZ8bcshTHqOYJYlrqzRK5hagpagky5o4HfCzzd1TRkXPMFq6cKk9rGmA==", - "dev": true - } + } + }, + "@eslint/eslintrc": { + "version": "0.2.2", + "resolved": "https://registry.npmjs.org/@eslint/eslintrc/-/eslintrc-0.2.2.tgz", + "integrity": "sha512-EfB5OHNYp1F4px/LI/FEnGylop7nOqkQ1LRzCM0KccA2U8tvV8w01KBv37LbO7nW4H+YhKyo2LcJhRwjjV17QQ==", + "dev": true, + "requires": { + "ajv": "^6.12.4", + "debug": "^4.1.1", + "espree": "^7.3.0", + "globals": "^12.1.0", + "ignore": "^4.0.6", + "import-fresh": "^3.2.1", + "js-yaml": "^3.13.1", + "lodash": "^4.17.19", + "minimatch": "^3.0.4", + "strip-json-comments": "^3.1.1" } }, "@nodelib/fs.scandir": { @@ -328,31 +301,34 @@ } }, "@stylelint/postcss-markdown": { - "version": "0.36.1", - "resolved": "https://registry.npmjs.org/@stylelint/postcss-markdown/-/postcss-markdown-0.36.1.tgz", - "integrity": "sha512-iDxMBWk9nB2BPi1VFQ+Dc5+XpvODBHw2n3tYpaBZuEAFQlbtF9If0Qh5LTTwSi/XwdbJ2jt+0dis3i8omyggpw==", + "version": "0.36.2", + "resolved": "https://registry.npmjs.org/@stylelint/postcss-markdown/-/postcss-markdown-0.36.2.tgz", + "integrity": "sha512-2kGbqUVJUGE8dM+bMzXG/PYUWKkjLIkRLWNh39OaADkiabDRdw8ATFCgbMz5xdIcvwspPAluSL7uY+ZiTWdWmQ==", "dev": true, "requires": { - "remark": "^12.0.0", - "unist-util-find-all-after": "^3.0.1" + "remark": "^13.0.0", + "unist-util-find-all-after": "^3.0.2" } }, - "@types/color-name": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/@types/color-name/-/color-name-1.1.1.tgz", - "integrity": "sha512-rr+OQyAjxze7GgWrSaJwydHStIhHq2lvY3BOC2Mj7KnzI7XK0Uw1TOOdI9lDoajEbSWLiYgoo4f1R51erQfhPQ==", - "dev": true - }, "@types/json-schema": { - "version": "7.0.5", - "resolved": "https://registry.npmjs.org/@types/json-schema/-/json-schema-7.0.5.tgz", - "integrity": "sha512-7+2BITlgjgDhH0vvwZU/HZJVyk+2XUlvxXe8dFMedNX/aMkaOq++rMAFXc0tM7ij15QaWlbdQASBR9dihi+bDQ==", + "version": "7.0.6", + "resolved": "https://registry.npmjs.org/@types/json-schema/-/json-schema-7.0.6.tgz", + "integrity": "sha512-3c+yGKvVP5Y9TYBEibGNR+kLtijnj7mYrXRg+WpFb2X9xm04g/DXYkfg4hmzJQosc9snFNUPkbYIhu+KAm6jJw==", "dev": true }, + "@types/mdast": { + "version": "3.0.3", + "resolved": "https://registry.npmjs.org/@types/mdast/-/mdast-3.0.3.tgz", + "integrity": "sha512-SXPBMnFVQg1s00dlMCc/jCdvPqdE4mXaMMCeRlxLDmTAEoegHT53xKtkDnzDTOcmMHUfcjyf36/YYZ6SxRdnsw==", + "dev": true, + "requires": { + "@types/unist": "*" + } + }, "@types/minimist": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/@types/minimist/-/minimist-1.2.0.tgz", - "integrity": "sha1-aaI6OtKcrwCX8G7aWbNh7i8GOfY=", + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/@types/minimist/-/minimist-1.2.1.tgz", + "integrity": "sha512-fZQQafSREFyuZcdWFAExYjBiCL7AUCdgsk80iO0q4yihYYdcIiH28CcuPTGFgLOCC8RlW49GSQxdHwZP+I7CNg==", "dev": true }, "@types/normalize-package-data": { @@ -398,47 +374,20 @@ "lodash": "^4.17.15", "semver": "^7.3.2", "tsutils": "^3.17.1" - }, - "dependencies": { - "glob": { - "version": "7.1.6", - "resolved": "https://registry.npmjs.org/glob/-/glob-7.1.6.tgz", - "integrity": "sha512-LwaxwyZ72Lk7vZINtNNrywX0ZuLyStrdDtabefZKAY5ZGJhVtgdznluResxNmPitE0SAO+O26sWTHeKSI2wMBA==", - "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" - } - }, - "lodash": { - "version": "4.17.20", - "resolved": "https://registry.npmjs.org/lodash/-/lodash-4.17.20.tgz", - "integrity": "sha512-PlhdFcillOINfeV7Ni6oF1TAEayyZBoZ8bcshTHqOYJYlrqzRK5hagpagky5o4HfCzzd1TRkXPMFq6cKk9rGmA==", - "dev": true - }, - "semver": { - "version": "7.3.2", - "resolved": "https://registry.npmjs.org/semver/-/semver-7.3.2.tgz", - "integrity": "sha512-OrOb32TeeambH6UrhtShmF7CRDqhL6/5XpPNp2DuRH6+9QLw/orhp72j87v8Qa1ScDkvrrBNpZcDejAirJmfXQ==", - "dev": true - } } }, "@wordpress/eslint-plugin": { - "version": "7.1.0", - "resolved": "https://registry.npmjs.org/@wordpress/eslint-plugin/-/eslint-plugin-7.1.0.tgz", - "integrity": "sha512-FTrKkpEa8vZg7/7M6GBhd1YW24hnh5rFGzKgKX4MGyB0Jw8GGSwld9J23eRbQ5JQWGFP/tmOMeiu6W1/arxy7Q==", + "version": "7.3.0", + "resolved": "https://registry.npmjs.org/@wordpress/eslint-plugin/-/eslint-plugin-7.3.0.tgz", + "integrity": "sha512-7wIFzzc14E1XuuT9haBuhoA9FRUGWlbD4Oek+XkiZlzNVqZI3slgbtIFJ6/Mfij1V18rv6Ns9a1cPJLtCU8JHQ==", "dev": true, "requires": { - "@wordpress/prettier-config": "^0.3.0", + "@wordpress/prettier-config": "^0.4.0", "babel-eslint": "^10.1.0", + "cosmiconfig": "^7.0.0", "eslint-config-prettier": "^6.10.1", "eslint-plugin-jest": "^23.8.2", - "eslint-plugin-jsdoc": "^26.0.0", + "eslint-plugin-jsdoc": "^30.2.2", "eslint-plugin-jsx-a11y": "^6.2.3", "eslint-plugin-prettier": "^3.1.2", "eslint-plugin-react": "^7.20.0", @@ -449,27 +398,27 @@ } }, "@wordpress/prettier-config": { - "version": "0.3.0", - "resolved": "https://registry.npmjs.org/@wordpress/prettier-config/-/prettier-config-0.3.0.tgz", - "integrity": "sha512-wL1ztV+so5Ttwz23lDmb8ZmREmND96sf+Dh/kbP2nyAw/DWt3K8uj31qbczVmjwfoetTiRoH9Z1CasgPs4bccg==", + "version": "0.4.0", + "resolved": "https://registry.npmjs.org/@wordpress/prettier-config/-/prettier-config-0.4.0.tgz", + "integrity": "sha512-7c4VeugkCwDkaHSD7ffxoP0VC5c///gCTEAT032OhI5Rik2dPxE3EkNAB2NhotGE8M4dMAg4g5Wj2OWZIn8TFw==", "dev": true }, "acorn": { - "version": "7.4.0", - "resolved": "https://registry.npmjs.org/acorn/-/acorn-7.4.0.tgz", - "integrity": "sha512-+G7P8jJmCHr+S+cLfQxygbWhXy+8YTVGzAkpEbcLo2mLoL7tij/VG41QSHACSf5QgYRhMZYHuNc6drJaO0Da+w==", + "version": "7.4.1", + "resolved": "https://registry.npmjs.org/acorn/-/acorn-7.4.1.tgz", + "integrity": "sha512-nQyp0o1/mNdbTO1PO6kHkwSrmgZ0MT/jCCpNiwbUjGoRN4dlBhqJtoQuCnEOKzgTVwg0ZWiCoQy6SxMebQVh8A==", "dev": true }, "acorn-jsx": { - "version": "5.2.0", - "resolved": "https://registry.npmjs.org/acorn-jsx/-/acorn-jsx-5.2.0.tgz", - "integrity": "sha512-HiUX/+K2YpkpJ+SzBffkM/AQ2YE03S0U1kjTLVpoJdhZMOWy8qvXVN9JdLqv2QsaQ6MPYQIuNmwD8zOiYUofLQ==", + "version": "5.3.1", + "resolved": "https://registry.npmjs.org/acorn-jsx/-/acorn-jsx-5.3.1.tgz", + "integrity": "sha512-K0Ptm/47OKfQRpNQ2J/oIN/3QYiK6FwW+eJbILhsdxh2WTLdl+30o8aGdTbm5JbffpFFAg/g+zi1E+jvJha5ng==", "dev": true }, "ajv": { - "version": "6.12.4", - "resolved": "https://registry.npmjs.org/ajv/-/ajv-6.12.4.tgz", - "integrity": "sha512-eienB2c9qVQs2KWexhkrdMLVDoIQCz5KSeLxwg9Lzk4DOfBtIK9PQwwufcsn1jjGuf9WZmqPMbGxOzfcuphJCQ==", + "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", @@ -484,6 +433,12 @@ "integrity": "sha512-JoX0apGbHaUJBNl6yF+p6JAFYZ666/hhCGKN5t9QFjbJQKUU/g8MNbFDbvfrgKXvI1QpZplPOnwIo99lX/AAmA==", "dev": true }, + "ansi-regex": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.0.tgz", + "integrity": "sha512-bY6fj56OUQ0hU1KjFNDQuJFezqKdrAyFdIevADiqrWHwSlbmBNMHp5ak2f40Pm8JTFyM2mqxkG6ngkHO11f/lg==", + "dev": true + }, "ansi-styles": { "version": "3.2.1", "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-3.2.1.tgz", @@ -500,14 +455,6 @@ "dev": true, "requires": { "sprintf-js": "~1.0.2" - }, - "dependencies": { - "sprintf-js": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/sprintf-js/-/sprintf-js-1.0.3.tgz", - "integrity": "sha1-BOaSb2YolTVPPdAVIDYzuFcpfiw=", - "dev": true - } } }, "aria-query": { @@ -521,24 +468,33 @@ } }, "array-includes": { - "version": "3.1.1", - "resolved": "https://registry.npmjs.org/array-includes/-/array-includes-3.1.1.tgz", - "integrity": "sha512-c2VXaCHl7zPsvpkFsw4nxvFie4fh1ur9bpcgsVkIjqn0H/Xwdg+7fv3n2r/isyS8EBj5b06M9kHyZuIr4El6WQ==", + "version": "3.1.2", + "resolved": "https://registry.npmjs.org/array-includes/-/array-includes-3.1.2.tgz", + "integrity": "sha512-w2GspexNQpx+PutG3QpT437/BenZBj0M/MZGn5mzv/MofYqo0xmRHzn4lFsoDlWJ+THYsGJmFlW68WlDFx7VRw==", "dev": true, "requires": { + "call-bind": "^1.0.0", "define-properties": "^1.1.3", - "es-abstract": "^1.17.0", + "es-abstract": "^1.18.0-next.1", + "get-intrinsic": "^1.0.1", "is-string": "^1.0.5" } }, + "array-union": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/array-union/-/array-union-2.1.0.tgz", + "integrity": "sha512-HGyxoOTYUyCM6stUe6EJgnd4EoewAI7zMdfqO+kGjnlZmBDz/cR5pf8r/cR4Wq60sL/p0IkcjUEEPwS3GFrIyw==", + "dev": true + }, "array.prototype.flatmap": { - "version": "1.2.3", - "resolved": "https://registry.npmjs.org/array.prototype.flatmap/-/array.prototype.flatmap-1.2.3.tgz", - "integrity": "sha512-OOEk+lkePcg+ODXIpvuU9PAryCikCJyo7GlDG1upleEpQRx6mzL9puEBkozQ5iAx20KV0l3DbyQwqciJtqe5Pg==", + "version": "1.2.4", + "resolved": "https://registry.npmjs.org/array.prototype.flatmap/-/array.prototype.flatmap-1.2.4.tgz", + "integrity": "sha512-r9Z0zYoxqHz60vvQbWEdXIEtCwHF0yxaWfno9qzXeNHvfyl3BZqygmGzb84dsubyaXLH4husF+NFgMSdpZhk2Q==", "dev": true, "requires": { + "call-bind": "^1.0.0", "define-properties": "^1.1.3", - "es-abstract": "^1.17.0-next.1", + "es-abstract": "^1.18.0-next.1", "function-bind": "^1.1.1" } }, @@ -576,9 +532,9 @@ } }, "axe-core": { - "version": "3.5.5", - "resolved": "https://registry.npmjs.org/axe-core/-/axe-core-3.5.5.tgz", - "integrity": "sha512-5P0QZ6J5xGikH780pghEdbEKijCTrruK9KxtPZCFWUpef0f6GipO+xEZ5GKCb020mmqgbiNO6TcA55CriL784Q==", + "version": "4.1.1", + "resolved": "https://registry.npmjs.org/axe-core/-/axe-core-4.1.1.tgz", + "integrity": "sha512-5Kgy8Cz6LPC9DJcNb3yjAXTu3XihQgEdnIg50c//zOC/MyLP0Clg+Y8Sh9ZjjnvBrDZU4DgXS9C3T9r4/scGZQ==", "dev": true }, "axobject-query": { @@ -599,17 +555,6 @@ "@babel/types": "^7.7.0", "eslint-visitor-keys": "^1.0.0", "resolve": "^1.12.0" - }, - "dependencies": { - "resolve": { - "version": "1.17.0", - "resolved": "https://registry.npmjs.org/resolve/-/resolve-1.17.0.tgz", - "integrity": "sha512-ic+7JYiV8Vi2yzQGFWOkiZD5Z9z7O2Zhm9XMaTxdJExKasieFCr+yXZ/WmXsckHiKl12ar0y6XiXDx3m4RHn1w==", - "dev": true, - "requires": { - "path-parse": "^1.0.6" - } - } } }, "bail": { @@ -644,15 +589,26 @@ } }, "browserslist": { - "version": "4.14.0", - "resolved": "https://registry.npmjs.org/browserslist/-/browserslist-4.14.0.tgz", - "integrity": "sha512-pUsXKAF2lVwhmtpeA3LJrZ76jXuusrNyhduuQs7CDFf9foT4Y38aQOserd2lMe5DSSrjf3fx34oHwryuvxAUgQ==", + "version": "4.16.0", + "resolved": "https://registry.npmjs.org/browserslist/-/browserslist-4.16.0.tgz", + "integrity": "sha512-/j6k8R0p3nxOC6kx5JGAxsnhc9ixaWJfYc+TNTzxg6+ARaESAvQGV7h0uNOB4t+pLQJZWzcrMxXOxjgsCj3dqQ==", + "dev": true, + "requires": { + "caniuse-lite": "^1.0.30001165", + "colorette": "^1.2.1", + "electron-to-chromium": "^1.3.621", + "escalade": "^3.1.1", + "node-releases": "^1.1.67" + } + }, + "call-bind": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/call-bind/-/call-bind-1.0.0.tgz", + "integrity": "sha512-AEXsYIyyDY3MCzbwdhzG3Jx1R0J2wetQyUynn6dYHAO+bg8l1k7jwZtRv4ryryFs7EP+NDlikJlVe59jr0cM2w==", "dev": true, "requires": { - "caniuse-lite": "^1.0.30001111", - "electron-to-chromium": "^1.3.523", - "escalade": "^3.0.2", - "node-releases": "^1.1.60" + "function-bind": "^1.1.1", + "get-intrinsic": "^1.0.0" } }, "callsites": { @@ -661,16 +617,27 @@ "integrity": "sha512-P8BjAsXvZS+VIDUI11hHCQEv74YT67YUi5JJFNWIqL235sBmjX4+qx9Muvls5ivyNENctx46xQLQ3aTuE7ssaQ==", "dev": true }, - "caniuse-lite": { - "version": "1.0.30001116", - "resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001116.tgz", - "integrity": "sha512-f2lcYnmAI5Mst9+g0nkMIznFGsArRmZ0qU+dnq8l91hymdc2J3SFbiPhOJEeDqC1vtE8nc1qNQyklzB8veJefQ==", + "camelcase": { + "version": "5.3.1", + "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-5.3.1.tgz", + "integrity": "sha512-L28STB170nwWS63UjtlEOE3dldQApaJXZkOI1uMFfzf3rRuPegHaHesyee+YxQ+W6SvRDQV6UrdOdRiR153wJg==", "dev": true }, - "ccount": { - "version": "1.0.5", - "resolved": "https://registry.npmjs.org/ccount/-/ccount-1.0.5.tgz", - "integrity": "sha512-MOli1W+nfbPLlKEhInaxhRdp7KVLFxLN5ykwzHgLsLI3H3gs5jjFAK4Eoj3OzzcxCtumDaI8onoVDeQyWaNTkw==", + "camelcase-keys": { + "version": "6.2.2", + "resolved": "https://registry.npmjs.org/camelcase-keys/-/camelcase-keys-6.2.2.tgz", + "integrity": "sha512-YrwaA0vEKazPBkn0ipTiMpSajYDSe+KjQfrjhcBMxJt/znbvlHd8Pw/Vamaz5EB4Wfhs3SUR3Z9mwRu/P3s3Yg==", + "dev": true, + "requires": { + "camelcase": "^5.3.1", + "map-obj": "^4.0.0", + "quick-lru": "^4.0.1" + } + }, + "caniuse-lite": { + "version": "1.0.30001165", + "resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001165.tgz", + "integrity": "sha512-8cEsSMwXfx7lWSUMA2s08z9dIgsnR5NAqjXP23stdsU3AUWkCr/rr4s4OFtHXn5XXr6+7kam3QFVoYyXNPdJPA==", "dev": true }, "chalk": { @@ -690,12 +657,6 @@ "integrity": "sha512-iBMyeEHxfVnIakwOuDXpVkc54HijNgCyQB2w0VfGQThle6NXn50zU6V/u+LDhxHcDUPojn6Kpga3PTAD8W1bQw==", "dev": true }, - "character-entities-html4": { - "version": "1.1.4", - "resolved": "https://registry.npmjs.org/character-entities-html4/-/character-entities-html4-1.1.4.tgz", - "integrity": "sha512-HRcDxZuZqMx3/a+qrzxdBKBPUpxWEq9xw2OPZ3a/174ihfrQKVsFhqtthBInFy1zZ9GgZyFXOatNujm8M+El3g==", - "dev": true - }, "character-entities-legacy": { "version": "1.1.4", "resolved": "https://registry.npmjs.org/character-entities-legacy/-/character-entities-legacy-1.1.4.tgz", @@ -717,12 +678,6 @@ "is-regexp": "^2.0.0" } }, - "collapse-white-space": { - "version": "1.0.6", - "resolved": "https://registry.npmjs.org/collapse-white-space/-/collapse-white-space-1.0.6.tgz", - "integrity": "sha512-jEovNnrhMuqyCcjfEJA56v0Xq8SkIoPKDyaHahwo3POf4qcSXqMYuwNcOTzp74vTsR9Tn08z4MxWqAhcekogkQ==", - "dev": true - }, "color-convert": { "version": "1.9.3", "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-1.9.3.tgz", @@ -766,42 +721,22 @@ } }, "core-js-pure": { - "version": "3.6.5", - "resolved": "https://registry.npmjs.org/core-js-pure/-/core-js-pure-3.6.5.tgz", - "integrity": "sha512-lacdXOimsiD0QyNf9BC/mxivNJ/ybBGJXQFKzRekp1WTHoVUWsUHEn+2T8GJAzzIhyOuXA+gOxCVN3l+5PLPUA==", + "version": "3.8.1", + "resolved": "https://registry.npmjs.org/core-js-pure/-/core-js-pure-3.8.1.tgz", + "integrity": "sha512-Se+LaxqXlVXGvmexKGPvnUIYC1jwXu1H6Pkyb3uBM5d8/NELMYCHs/4/roD7721NxrTLyv7e5nXd5/QLBO+10g==", "dev": true }, "cosmiconfig": { - "version": "6.0.0", - "resolved": "https://registry.npmjs.org/cosmiconfig/-/cosmiconfig-6.0.0.tgz", - "integrity": "sha512-xb3ZL6+L8b9JLLCx3ZdoZy4+2ECphCMo2PwqgP1tlfVq6M6YReyzBJtvWWtbDSpNr9hn96pkCiZqUcFEc+54Qg==", + "version": "7.0.0", + "resolved": "https://registry.npmjs.org/cosmiconfig/-/cosmiconfig-7.0.0.tgz", + "integrity": "sha512-pondGvTuVYDk++upghXJabWzL6Kxu6f26ljFw64Swq9v6sQPUL3EUlVDV56diOjpCayKihL6hVe8exIACU4XcA==", "dev": true, "requires": { "@types/parse-json": "^4.0.0", - "import-fresh": "^3.1.0", + "import-fresh": "^3.2.1", "parse-json": "^5.0.0", "path-type": "^4.0.0", - "yaml": "^1.7.2" - }, - "dependencies": { - "parse-json": { - "version": "5.0.1", - "resolved": "https://registry.npmjs.org/parse-json/-/parse-json-5.0.1.tgz", - "integrity": "sha512-ztoZ4/DYeXQq4E21v169sC8qWINGpcosGv9XhTDvg9/hWvx/zrFkc9BiWxR58OJLHGk28j5BL0SDLeV2WmFZlQ==", - "dev": true, - "requires": { - "@babel/code-frame": "^7.0.0", - "error-ex": "^1.3.1", - "json-parse-better-errors": "^1.0.1", - "lines-and-columns": "^1.1.6" - } - }, - "path-type": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/path-type/-/path-type-4.0.0.tgz", - "integrity": "sha512-gDKb8aZMDeD/tZWs9P6+q0J9Mwkdl6xMV8TjnGP3qJVJ06bdMgkbBlLU8IdfOsIsFz2BW1rNVT3XuNEl8zPAvw==", - "dev": true - } + "yaml": "^1.10.0" } }, "cross-spawn": { @@ -813,17 +748,6 @@ "path-key": "^3.1.0", "shebang-command": "^2.0.0", "which": "^2.0.1" - }, - "dependencies": { - "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" - } - } } }, "cssesc": { @@ -839,12 +763,12 @@ "dev": true }, "debug": { - "version": "4.1.1", - "resolved": "https://registry.npmjs.org/debug/-/debug-4.1.1.tgz", - "integrity": "sha512-pYAIzeRo8J6KPEaJ0VWOh5Pzkbw/RetuzehGM7QRRX5he4fPHx2rdKMB256ehJCkX+XRQm16eZLqLNS8RSZXZw==", + "version": "4.3.1", + "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.1.tgz", + "integrity": "sha512-doEwdvm4PCeK4K3RQN2ZC2BYUBaxwLARCqZmMjtF8a51J2Rb0xpVloFRnCODwqjpwnAoao4pelN8l3RJdv3gRQ==", "dev": true, "requires": { - "ms": "^2.1.1" + "ms": "2.1.2" } }, "decamelize": { @@ -861,6 +785,14 @@ "requires": { "decamelize": "^1.1.0", "map-obj": "^1.0.0" + }, + "dependencies": { + "map-obj": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/map-obj/-/map-obj-1.0.1.tgz", + "integrity": "sha1-2TPOuSBdgr3PSIb2dCvcK03qFG0=", + "dev": true + } } }, "deep-is": { @@ -885,14 +817,6 @@ "dev": true, "requires": { "path-type": "^4.0.0" - }, - "dependencies": { - "path-type": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/path-type/-/path-type-4.0.0.tgz", - "integrity": "sha512-gDKb8aZMDeD/tZWs9P6+q0J9Mwkdl6xMV8TjnGP3qJVJ06bdMgkbBlLU8IdfOsIsFz2BW1rNVT3XuNEl8zPAvw==", - "dev": true - } } }, "doctrine": { @@ -915,15 +839,15 @@ }, "dependencies": { "domelementtype": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/domelementtype/-/domelementtype-2.0.1.tgz", - "integrity": "sha512-5HOHUDsYZWV8FGWN0Njbr/Rn7f/eWSQi1v7+HsUVwXgn8nWWlL64zKDkS0n8ZmQ3mlWOMuXOnR+7Nx/5tMO5AQ==", + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/domelementtype/-/domelementtype-2.1.0.tgz", + "integrity": "sha512-LsTgx/L5VpD+Q8lmsXSHW2WpA+eBlZ9HPf3erD1IoPF00/3JKHZ3BknUVA2QGDNu69ZNmyFmCWBSO45XjYKC5w==", "dev": true }, "entities": { - "version": "2.0.3", - "resolved": "https://registry.npmjs.org/entities/-/entities-2.0.3.tgz", - "integrity": "sha512-MyoZ0jgnLvB2X3Lg5HqpFmn1kybDiIfEQmKzTb5apr51Rb+T3KdmMiqa70T+bhGnyv7bQ6WMj2QMHpGMmlrUYQ==", + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/entities/-/entities-2.1.0.tgz", + "integrity": "sha512-hCx1oky9PFrJ611mf0ifBLBRW8lUUVRlFolb5gWRfIELabBlbp9xZvrqZLZAs+NxFnbfQoeGd8wDkygjg7U85w==", "dev": true } } @@ -954,15 +878,15 @@ } }, "electron-to-chromium": { - "version": "1.3.539", - "resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.3.539.tgz", - "integrity": "sha512-rM0LWDIstdqfaRUADZetNrL6+zd/0NBmavbMEhBXgc2u/CC1d1GaDyN5hho29fFvBiOVFwrSWZkzmNcZnCEDog==", + "version": "1.3.625", + "resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.3.625.tgz", + "integrity": "sha512-CsLk/r0C9dAzVPa9QF74HIXduxaucsaRfqiOYvIv2PRhvyC6EOqc/KbpgToQuDVgPf3sNAFZi3iBu4vpGOwGag==", "dev": true }, "emoji-regex": { - "version": "9.0.0", - "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-9.0.0.tgz", - "integrity": "sha512-6p1NII1Vm62wni/VR/cUMauVQoxmLVb9csqQlvLz+hO2gk8U2UYDfXHQSUYIBKmZwAKz867IDqG7B+u0mj+M6w==", + "version": "9.2.0", + "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-9.2.0.tgz", + "integrity": "sha512-DNc3KFPK18bPdElMJnf/Pkv5TXhxFU3YFDEuGLDRtPmV4rkmCjBkCSEp22u6rBHdSN9Vlp/GK7k98prmE1Jgug==", "dev": true }, "enquirer": { @@ -990,20 +914,21 @@ } }, "es-abstract": { - "version": "1.17.6", - "resolved": "https://registry.npmjs.org/es-abstract/-/es-abstract-1.17.6.tgz", - "integrity": "sha512-Fr89bON3WFyUi5EvAeI48QTWX0AyekGgLA8H+c+7fbfCkJwRWRMLd8CQedNEyJuoYYhmtEqY92pgte1FAhBlhw==", + "version": "1.18.0-next.1", + "resolved": "https://registry.npmjs.org/es-abstract/-/es-abstract-1.18.0-next.1.tgz", + "integrity": "sha512-I4UGspA0wpZXWENrdA0uHbnhte683t3qT/1VFH9aX2dA5PPSf6QW5HHXf5HImaqPmjXaVeVk4RGWnaylmV7uAA==", "dev": true, "requires": { "es-to-primitive": "^1.2.1", "function-bind": "^1.1.1", "has": "^1.0.3", "has-symbols": "^1.0.1", - "is-callable": "^1.2.0", - "is-regex": "^1.1.0", - "object-inspect": "^1.7.0", + "is-callable": "^1.2.2", + "is-negative-zero": "^2.0.0", + "is-regex": "^1.1.1", + "object-inspect": "^1.8.0", "object-keys": "^1.1.1", - "object.assign": "^4.1.0", + "object.assign": "^4.1.1", "string.prototype.trimend": "^1.0.1", "string.prototype.trimstart": "^1.0.1" } @@ -1020,9 +945,9 @@ } }, "escalade": { - "version": "3.0.2", - "resolved": "https://registry.npmjs.org/escalade/-/escalade-3.0.2.tgz", - "integrity": "sha512-gPYAU37hYCUhW5euPeR+Y74F7BL+IBsV93j5cvGriSaD1aG6MGsqsV1yamRdrWrb2j3aiZvb0X+UBOWpx3JWtQ==", + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/escalade/-/escalade-3.1.1.tgz", + "integrity": "sha512-k0er2gUkLf8O0zKJiAhmkTnJlTvINGv7ygDNPbeIsX/TJjGJZHuh9B2UxbsaEkmlEo9MfhrSzmhIlhRlI2GXnw==", "dev": true }, "escape-string-regexp": { @@ -1032,25 +957,26 @@ "dev": true }, "eslint": { - "version": "7.7.0", - "resolved": "https://registry.npmjs.org/eslint/-/eslint-7.7.0.tgz", - "integrity": "sha512-1KUxLzos0ZVsyL81PnRN335nDtQ8/vZUD6uMtWbF+5zDtjKcsklIi78XoE0MVL93QvWTu+E5y44VyyCsOMBrIg==", + "version": "7.15.0", + "resolved": "https://registry.npmjs.org/eslint/-/eslint-7.15.0.tgz", + "integrity": "sha512-Vr64xFDT8w30wFll643e7cGrIkPEU50yIiI36OdSIDoSGguIeaLzBo0vpGvzo9RECUqq7htURfwEtKqwytkqzA==", "dev": true, "requires": { "@babel/code-frame": "^7.0.0", + "@eslint/eslintrc": "^0.2.2", "ajv": "^6.10.0", "chalk": "^4.0.0", "cross-spawn": "^7.0.2", "debug": "^4.0.1", "doctrine": "^3.0.0", "enquirer": "^2.3.5", - "eslint-scope": "^5.1.0", + "eslint-scope": "^5.1.1", "eslint-utils": "^2.1.0", - "eslint-visitor-keys": "^1.3.0", - "espree": "^7.2.0", + "eslint-visitor-keys": "^2.0.0", + "espree": "^7.3.1", "esquery": "^1.2.0", "esutils": "^2.0.2", - "file-entry-cache": "^5.0.1", + "file-entry-cache": "^6.0.0", "functional-red-black-tree": "^1.0.1", "glob-parent": "^5.0.0", "globals": "^12.1.0", @@ -1075,19 +1001,12 @@ "v8-compile-cache": "^2.0.3" }, "dependencies": { - "ansi-regex": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.0.tgz", - "integrity": "sha512-bY6fj56OUQ0hU1KjFNDQuJFezqKdrAyFdIevADiqrWHwSlbmBNMHp5ak2f40Pm8JTFyM2mqxkG6ngkHO11f/lg==", - "dev": true - }, "ansi-styles": { - "version": "4.2.1", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.2.1.tgz", - "integrity": "sha512-9VGjrMsG1vePxcSweQsN20KY/c4zN0h9fLjqAbwbPfahM3t+NL+M9HC8xeXG2I8pX5NoamTGNuomEUFI7fcUjA==", + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", + "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", "dev": true, "requires": { - "@types/color-name": "^1.1.1", "color-convert": "^2.0.1" } }, @@ -1125,10 +1044,10 @@ "esutils": "^2.0.2" } }, - "esprima": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/esprima/-/esprima-4.0.1.tgz", - "integrity": "sha512-eGuFFw7Upda+g4p+QHvnW0RyTX/SVeJBDM/gCtMARO0cLuT2HcEKnTPvhjV6aGeqrCB/sbNop0Kszm0jsaWU4A==", + "eslint-visitor-keys": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-2.0.0.tgz", + "integrity": "sha512-QudtT6av5WXels9WjIM7qz1XD1cWGvX4gGXvp/zBn9nXG02D0utdU3Em2m/QjTnrsk6bBjmCygl3rmj118msQQ==", "dev": true }, "has-flag": { @@ -1137,41 +1056,10 @@ "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", "dev": true }, - "js-yaml": { - "version": "3.14.0", - "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-3.14.0.tgz", - "integrity": "sha512-/4IbIeHcD9VMHFqDR/gQ7EdZdLimOvW2DdcxFjdyyZ9NsbS+ccrXqVWDtab/lRl5AlUqmpBx8EhPaWR+OtY17A==", - "dev": true, - "requires": { - "argparse": "^1.0.7", - "esprima": "^4.0.0" - } - }, - "lodash": { - "version": "4.17.20", - "resolved": "https://registry.npmjs.org/lodash/-/lodash-4.17.20.tgz", - "integrity": "sha512-PlhdFcillOINfeV7Ni6oF1TAEayyZBoZ8bcshTHqOYJYlrqzRK5hagpagky5o4HfCzzd1TRkXPMFq6cKk9rGmA==", - "dev": true - }, - "semver": { - "version": "7.3.2", - "resolved": "https://registry.npmjs.org/semver/-/semver-7.3.2.tgz", - "integrity": "sha512-OrOb32TeeambH6UrhtShmF7CRDqhL6/5XpPNp2DuRH6+9QLw/orhp72j87v8Qa1ScDkvrrBNpZcDejAirJmfXQ==", - "dev": true - }, - "strip-ansi": { - "version": "6.0.0", - "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.0.tgz", - "integrity": "sha512-AuvKTrTfQNYNIctbR1K/YGTR1756GycPsg7b9bdV9Duqur4gv6aKqHXah67Z8ImS7WEz5QVcOtlfW2rZEugt6w==", - "dev": true, - "requires": { - "ansi-regex": "^5.0.0" - } - }, "supports-color": { - "version": "7.1.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.1.0.tgz", - "integrity": "sha512-oRSIpR8pxT1Wr2FquTNnGet79b3BWljqOuoW/h4oBhxJ/HUbX5nX6JSruTkvXDCFMwDPvsaTTbvMLKZWSy0R5g==", + "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" @@ -1180,20 +1068,12 @@ } }, "eslint-config-prettier": { - "version": "6.11.0", - "resolved": "https://registry.npmjs.org/eslint-config-prettier/-/eslint-config-prettier-6.11.0.tgz", - "integrity": "sha512-oB8cpLWSAjOVFEJhhyMZh6NOEOtBVziaqdDQ86+qhDHFbZXoRTM7pNSvFRfW/W/L/LrQ38C99J5CGuRBBzBsdA==", + "version": "6.15.0", + "resolved": "https://registry.npmjs.org/eslint-config-prettier/-/eslint-config-prettier-6.15.0.tgz", + "integrity": "sha512-a1+kOYLR8wMGustcgAjdydMsQ2A/2ipRPwRKUmfYaSxc9ZPcrku080Ctl6zrZzZNs/U82MjSv+qKREkoq3bJaw==", "dev": true, "requires": { "get-stdin": "^6.0.0" - }, - "dependencies": { - "get-stdin": { - "version": "6.0.0", - "resolved": "https://registry.npmjs.org/get-stdin/-/get-stdin-6.0.0.tgz", - "integrity": "sha512-jp4tHawyV7+fkkSKyvjuLZswblUtz+SQKzSWnBbii16BuZksJlU1wuBYXY75r+duh/llF1ur6oNwi+2ZzjKZ7g==", - "dev": true - } } }, "eslint-plugin-jest": { @@ -1206,115 +1086,80 @@ } }, "eslint-plugin-jsdoc": { - "version": "26.0.2", - "resolved": "https://registry.npmjs.org/eslint-plugin-jsdoc/-/eslint-plugin-jsdoc-26.0.2.tgz", - "integrity": "sha512-KtZjqtM3Z8x84vQBFKGUyBbZRGXYHVWSJ2XyYSUTc8KhfFrvzQ/GXPp6f1M1/YCNzP3ImD5RuDNcr+OVvIZcBA==", + "version": "30.7.8", + "resolved": "https://registry.npmjs.org/eslint-plugin-jsdoc/-/eslint-plugin-jsdoc-30.7.8.tgz", + "integrity": "sha512-OWm2AYvXjCl7nRbpcw5xisfSVkpVAyp4lGqL9T+DeK4kaPm6ecnmTc/G5s1PtcRrwbaI8bIWGzwScqv5CdGyxA==", "dev": true, "requires": { - "comment-parser": "^0.7.4", - "debug": "^4.1.1", - "jsdoctypeparser": "^6.1.0", - "lodash": "^4.17.15", + "comment-parser": "^0.7.6", + "debug": "^4.2.0", + "jsdoctypeparser": "^9.0.0", + "lodash": "^4.17.20", "regextras": "^0.7.1", - "semver": "^6.3.0", + "semver": "^7.3.2", "spdx-expression-parse": "^3.0.1" - }, - "dependencies": { - "lodash": { - "version": "4.17.20", - "resolved": "https://registry.npmjs.org/lodash/-/lodash-4.17.20.tgz", - "integrity": "sha512-PlhdFcillOINfeV7Ni6oF1TAEayyZBoZ8bcshTHqOYJYlrqzRK5hagpagky5o4HfCzzd1TRkXPMFq6cKk9rGmA==", - "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 - }, - "spdx-expression-parse": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/spdx-expression-parse/-/spdx-expression-parse-3.0.1.tgz", - "integrity": "sha512-cbqHunsQWnJNE6KhVSMsMeH5H/L9EpymbzqTQ3uLwNCLZ1Q481oWaofqH7nO6V07xlXwY6PhQdQ2IedWx/ZK4Q==", - "dev": true, - "requires": { - "spdx-exceptions": "^2.1.0", - "spdx-license-ids": "^3.0.0" - } - } } }, "eslint-plugin-jsx-a11y": { - "version": "6.3.1", - "resolved": "https://registry.npmjs.org/eslint-plugin-jsx-a11y/-/eslint-plugin-jsx-a11y-6.3.1.tgz", - "integrity": "sha512-i1S+P+c3HOlBJzMFORRbC58tHa65Kbo8b52/TwCwSKLohwvpfT5rm2GjGWzOHTEuq4xxf2aRlHHTtmExDQOP+g==", + "version": "6.4.1", + "resolved": "https://registry.npmjs.org/eslint-plugin-jsx-a11y/-/eslint-plugin-jsx-a11y-6.4.1.tgz", + "integrity": "sha512-0rGPJBbwHoGNPU73/QCLP/vveMlM1b1Z9PponxO87jfr6tuH5ligXbDT6nHSSzBC8ovX2Z+BQu7Bk5D/Xgq9zg==", "dev": true, "requires": { - "@babel/runtime": "^7.10.2", + "@babel/runtime": "^7.11.2", "aria-query": "^4.2.2", "array-includes": "^3.1.1", "ast-types-flow": "^0.0.7", - "axe-core": "^3.5.4", - "axobject-query": "^2.1.2", + "axe-core": "^4.0.2", + "axobject-query": "^2.2.0", "damerau-levenshtein": "^1.0.6", "emoji-regex": "^9.0.0", "has": "^1.0.3", - "jsx-ast-utils": "^2.4.1", + "jsx-ast-utils": "^3.1.0", "language-tags": "^1.0.5" } }, "eslint-plugin-prettier": { - "version": "3.1.4", - "resolved": "https://registry.npmjs.org/eslint-plugin-prettier/-/eslint-plugin-prettier-3.1.4.tgz", - "integrity": "sha512-jZDa8z76klRqo+TdGDTFJSavwbnWK2ZpqGKNZ+VvweMW516pDUMmQ2koXvxEE4JhzNvTv+radye/bWGBmA6jmg==", + "version": "3.2.0", + "resolved": "https://registry.npmjs.org/eslint-plugin-prettier/-/eslint-plugin-prettier-3.2.0.tgz", + "integrity": "sha512-kOUSJnFjAUFKwVxuzy6sA5yyMx6+o9ino4gCdShzBNx4eyFRudWRYKCFolKjoM40PEiuU6Cn7wBLfq3WsGg7qg==", "dev": true, "requires": { "prettier-linter-helpers": "^1.0.0" } }, "eslint-plugin-react": { - "version": "7.20.6", - "resolved": "https://registry.npmjs.org/eslint-plugin-react/-/eslint-plugin-react-7.20.6.tgz", - "integrity": "sha512-kidMTE5HAEBSLu23CUDvj8dc3LdBU0ri1scwHBZjI41oDv4tjsWZKU7MQccFzH1QYPYhsnTF2ovh7JlcIcmxgg==", + "version": "7.21.5", + "resolved": "https://registry.npmjs.org/eslint-plugin-react/-/eslint-plugin-react-7.21.5.tgz", + "integrity": "sha512-8MaEggC2et0wSF6bUeywF7qQ46ER81irOdWS4QWxnnlAEsnzeBevk1sWh7fhpCghPpXb+8Ks7hvaft6L/xsR6g==", "dev": true, "requires": { "array-includes": "^3.1.1", "array.prototype.flatmap": "^1.2.3", "doctrine": "^2.1.0", "has": "^1.0.3", - "jsx-ast-utils": "^2.4.1", + "jsx-ast-utils": "^2.4.1 || ^3.0.0", "object.entries": "^1.1.2", "object.fromentries": "^2.0.2", "object.values": "^1.1.1", "prop-types": "^15.7.2", - "resolve": "^1.17.0", + "resolve": "^1.18.1", "string.prototype.matchall": "^4.0.2" - }, - "dependencies": { - "resolve": { - "version": "1.17.0", - "resolved": "https://registry.npmjs.org/resolve/-/resolve-1.17.0.tgz", - "integrity": "sha512-ic+7JYiV8Vi2yzQGFWOkiZD5Z9z7O2Zhm9XMaTxdJExKasieFCr+yXZ/WmXsckHiKl12ar0y6XiXDx3m4RHn1w==", - "dev": true, - "requires": { - "path-parse": "^1.0.6" - } - } } }, "eslint-plugin-react-hooks": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/eslint-plugin-react-hooks/-/eslint-plugin-react-hooks-4.1.0.tgz", - "integrity": "sha512-36zilUcDwDReiORXmcmTc6rRumu9JIM3WjSvV0nclHoUQ0CNrX866EwONvLR/UqaeqFutbAnVu8PEmctdo2SRQ==", + "version": "4.2.0", + "resolved": "https://registry.npmjs.org/eslint-plugin-react-hooks/-/eslint-plugin-react-hooks-4.2.0.tgz", + "integrity": "sha512-623WEiZJqxR7VdxFCKLI6d6LLpwJkGPYKODnkH3D7WpOG5KM8yWueBd8TLsNAetEJNF5iJmolaAKO3F8yzyVBQ==", "dev": true }, "eslint-scope": { - "version": "5.1.0", - "resolved": "https://registry.npmjs.org/eslint-scope/-/eslint-scope-5.1.0.tgz", - "integrity": "sha512-iiGRvtxWqgtx5m8EyQUJihBloE4EnYeGE/bz1wSPwJE6tZuJUtHlhqDM4Xj2ukE8Dyy1+HCZ4hE0fzIVMzb58w==", + "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.1.0", + "esrecurse": "^4.3.0", "estraverse": "^4.1.1" } }, @@ -1334,16 +1179,22 @@ "dev": true }, "espree": { - "version": "7.2.0", - "resolved": "https://registry.npmjs.org/espree/-/espree-7.2.0.tgz", - "integrity": "sha512-H+cQ3+3JYRMEIOl87e7QdHX70ocly5iW4+dttuR8iYSPr/hXKFb+7dBsZ7+u1adC4VrnPlTkv0+OwuPnDop19g==", + "version": "7.3.1", + "resolved": "https://registry.npmjs.org/espree/-/espree-7.3.1.tgz", + "integrity": "sha512-v3JCNCE64umkFpmkFGqzVKsOT0tN1Zr+ueqLZfpV1Ob8e+CEgPWa+OxCoGH3tnhimMKIaBm4m/vaRpJ/krRz2g==", "dev": true, "requires": { - "acorn": "^7.3.1", - "acorn-jsx": "^5.2.0", + "acorn": "^7.4.0", + "acorn-jsx": "^5.3.1", "eslint-visitor-keys": "^1.3.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.3.1", "resolved": "https://registry.npmjs.org/esquery/-/esquery-1.3.1.tgz", @@ -1362,12 +1213,20 @@ } }, "esrecurse": { - "version": "4.2.1", - "resolved": "https://registry.npmjs.org/esrecurse/-/esrecurse-4.2.1.tgz", - "integrity": "sha512-64RBB++fIOAXPw3P9cy89qfMlvZEXZkqqJkjqqXIvzP5ezRZjW+lPWjw35UX/3EhUPFYbg5ER4JYgDw4007/DQ==", + "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": "^4.1.0" + "estraverse": "^5.2.0" + }, + "dependencies": { + "estraverse": { + "version": "5.2.0", + "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-5.2.0.tgz", + "integrity": "sha512-BxbNGGNm0RyRYvUdHpIwv9IWzeM9XClbOxwoATuFdOE7ZE6wHL+HQ5T8hoPM+zHvmKzzsEqhgy0GrQ5X13afiQ==", + "dev": true + } } }, "estraverse": { @@ -1435,22 +1294,28 @@ "integrity": "sha1-PYpcZog6FqMMqGQ+hR8Zuqd5eRc=", "dev": true }, + "fastest-levenshtein": { + "version": "1.0.12", + "resolved": "https://registry.npmjs.org/fastest-levenshtein/-/fastest-levenshtein-1.0.12.tgz", + "integrity": "sha512-On2N+BpYJ15xIC974QNVuYGMOlEVt4s0EOI3wwMqOmK1fdDY+FN/zltPV8vosq4ad4c/gJ1KHScUn/6AWIgiow==", + "dev": true + }, "fastq": { - "version": "1.8.0", - "resolved": "https://registry.npmjs.org/fastq/-/fastq-1.8.0.tgz", - "integrity": "sha512-SMIZoZdLh/fgofivvIkmknUXyPnvxRE3DhtZ5Me3Mrsk5gyPL42F0xr51TdRXskBxHfMp+07bcYzfsYEsSQA9Q==", + "version": "1.9.0", + "resolved": "https://registry.npmjs.org/fastq/-/fastq-1.9.0.tgz", + "integrity": "sha512-i7FVWL8HhVY+CTkwFxkN2mk3h+787ixS5S63eb78diVRc1MCssarHq3W5cj0av7YDSwmaV928RNag+U1etRQ7w==", "dev": true, "requires": { "reusify": "^1.0.4" } }, "file-entry-cache": { - "version": "5.0.1", - "resolved": "https://registry.npmjs.org/file-entry-cache/-/file-entry-cache-5.0.1.tgz", - "integrity": "sha512-bCg29ictuBaKUwwArK4ouCaqDgLZcysCFLmM/Yn/FDoqndh/9vNuQfXRDvTuXKLxfD/JtZQGKFT8MGcJBK644g==", + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/file-entry-cache/-/file-entry-cache-6.0.0.tgz", + "integrity": "sha512-fqoO76jZ3ZnYrXLDRxBR1YvOvc0k844kcOg40bgsPrE25LAb/PDqTY+ho64Xh2c8ZXgIKldchCFHczG2UVRcWA==", "dev": true, "requires": { - "flat-cache": "^2.0.1" + "flat-cache": "^3.0.4" } }, "fill-range": { @@ -1462,21 +1327,30 @@ "to-regex-range": "^5.0.1" } }, - "flat-cache": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/flat-cache/-/flat-cache-2.0.1.tgz", - "integrity": "sha512-LoQe6yDuUMDzQAEH8sgmh4Md6oZnc/7PjtwjNFSzveXqSHt6ka9fPBuso7IGf9Rz4uqnSnWiFH2B/zj24a5ReA==", + "find-up": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/find-up/-/find-up-4.1.0.tgz", + "integrity": "sha512-PpOwAdQ/YlXQ2vj8a3h8IipDuYRi3wceVQQGYWxNINccq40Anw7BlsEXCMbt1Zt+OLA6Fq9suIpIWD0OsnISlw==", "dev": true, "requires": { - "flatted": "^2.0.0", - "rimraf": "2.6.3", - "write": "1.0.3" + "locate-path": "^5.0.0", + "path-exists": "^4.0.0" + } + }, + "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": "2.0.2", - "resolved": "https://registry.npmjs.org/flatted/-/flatted-2.0.2.tgz", - "integrity": "sha512-r5wGx7YeOwNWNlCA0wQ86zKyDLMQr+/RB8xy74M4hTphfmjlijTSSXGuH8rnvKZnfT9i+75zmd8jcKdMR4O6jA==", + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/flatted/-/flatted-3.1.0.tgz", + "integrity": "sha512-tW+UkmtNg/jv9CSofAKvgVcO7c2URjhTdW1ZTkcAritblu8tajiYy7YisnIflEwtKssCtOxpnBRoCB7iap0/TA==", "dev": true }, "fs.realpath": { @@ -1498,11 +1372,42 @@ "dev": true }, "gensync": { - "version": "1.0.0-beta.1", - "resolved": "https://registry.npmjs.org/gensync/-/gensync-1.0.0-beta.1.tgz", - "integrity": "sha512-r8EC6NO1sngH/zdD9fiRDLdcgnbayXah+mLgManTaIZJqEC1MZstmnox8KpnI2/fxQwrp5OpCOYWLp4rBl4Jcg==", + "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 }, + "get-intrinsic": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/get-intrinsic/-/get-intrinsic-1.0.1.tgz", + "integrity": "sha512-ZnWP+AmS1VUaLgTRy47+zKtjTxz+0xMpx3I52i+aalBK1QP19ggLF3Db89KJX7kjfOfP2eoa01qc++GwPgufPg==", + "dev": true, + "requires": { + "function-bind": "^1.1.1", + "has": "^1.0.3", + "has-symbols": "^1.0.1" + } + }, + "get-stdin": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/get-stdin/-/get-stdin-6.0.0.tgz", + "integrity": "sha512-jp4tHawyV7+fkkSKyvjuLZswblUtz+SQKzSWnBbii16BuZksJlU1wuBYXY75r+duh/llF1ur6oNwi+2ZzjKZ7g==", + "dev": true + }, + "glob": { + "version": "7.1.6", + "resolved": "https://registry.npmjs.org/glob/-/glob-7.1.6.tgz", + "integrity": "sha512-LwaxwyZ72Lk7vZINtNNrywX0ZuLyStrdDtabefZKAY5ZGJhVtgdznluResxNmPitE0SAO+O26sWTHeKSI2wMBA==", + "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": "5.1.1", "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-5.1.1.tgz", @@ -1530,6 +1435,17 @@ "ini": "^1.3.5", "kind-of": "^6.0.2", "which": "^1.3.1" + }, + "dependencies": { + "which": { + "version": "1.3.1", + "resolved": "https://registry.npmjs.org/which/-/which-1.3.1.tgz", + "integrity": "sha512-HxJdYWq1MTIQbJ3nw0cqssHoTNU267KlrDuGZ1WYlxDStUtKUhOaJmh112/TZmHxxUfuJqPXSOm7tDyas0OSIQ==", + "dev": true, + "requires": { + "isexe": "^2.0.0" + } + } } }, "globals": { @@ -1555,12 +1471,6 @@ "slash": "^3.0.0" }, "dependencies": { - "array-union": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/array-union/-/array-union-2.1.0.tgz", - "integrity": "sha512-HGyxoOTYUyCM6stUe6EJgnd4EoewAI7zMdfqO+kGjnlZmBDz/cR5pf8r/cR4Wq60sL/p0IkcjUEEPwS3GFrIyw==", - "dev": true - }, "ignore": { "version": "5.1.8", "resolved": "https://registry.npmjs.org/ignore/-/ignore-5.1.8.tgz", @@ -1582,14 +1492,6 @@ "dev": true, "requires": { "minimist": "^1.2.5" - }, - "dependencies": { - "minimist": { - "version": "1.2.5", - "resolved": "https://registry.npmjs.org/minimist/-/minimist-1.2.5.tgz", - "integrity": "sha512-FM9nNUYrRBAELZQT3xeZQ7fmMOBg6nWNmJKTcgsJeaLstP/UODVpGsr5OhXhhXg6f+qtJ8uiZ+PUxkDWcgIXLw==", - "dev": true - } } }, "hard-rejection": { @@ -1620,10 +1522,13 @@ "dev": true }, "hosted-git-info": { - "version": "2.7.1", - "resolved": "https://registry.npmjs.org/hosted-git-info/-/hosted-git-info-2.7.1.tgz", - "integrity": "sha512-7T/BxH19zbcCTa8XkMlbK5lTo1WtgkFi3GvdWEyNuc4Vex7/9Dqbnpsf4JMydcfj9HCg4zUWFTL3Za6lapg5/w==", - "dev": true + "version": "3.0.7", + "resolved": "https://registry.npmjs.org/hosted-git-info/-/hosted-git-info-3.0.7.tgz", + "integrity": "sha512-fWqc0IcuXs+BmE9orLDyVykAG9GJtGLGuZAAqgcckPgv5xad4AcXGIv8galtQvlwutxSlaMcdw7BUtq2EIvqCQ==", + "dev": true, + "requires": { + "lru-cache": "^6.0.0" + } }, "html-tags": { "version": "3.1.0", @@ -1643,19 +1548,6 @@ "entities": "^1.1.1", "inherits": "^2.0.1", "readable-stream": "^3.1.1" - }, - "dependencies": { - "readable-stream": { - "version": "3.6.0", - "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-3.6.0.tgz", - "integrity": "sha512-BViHy7LKeTz4oNnkcLJ+lVSL6vpiFeX6/d3oSH8zCW7UxP2onchk+vTGB143xuFjHS3deTgkKoXXymXqymiIdA==", - "dev": true, - "requires": { - "inherits": "^2.0.3", - "string_decoder": "^1.1.1", - "util-deprecate": "^1.0.1" - } - } } }, "ignore": { @@ -1665,21 +1557,13 @@ "dev": true }, "import-fresh": { - "version": "3.2.1", - "resolved": "https://registry.npmjs.org/import-fresh/-/import-fresh-3.2.1.tgz", - "integrity": "sha512-6e1q1cnWP2RXD9/keSkxHScg508CdXqXWgWBaETNhyuBFz+kUZlKboh+ISK+bU++DmbHimVBrOz/zzPe0sZ3sQ==", + "version": "3.2.2", + "resolved": "https://registry.npmjs.org/import-fresh/-/import-fresh-3.2.2.tgz", + "integrity": "sha512-cTPNrlvJT6twpYy+YmKUKrTSjWFs3bjYjAhCwm+z4EOCubZxAuO+hHpRN64TqjEaYSHs7tJAE0w1CKMGmsG/lw==", "dev": true, "requires": { "parent-module": "^1.0.0", "resolve-from": "^4.0.0" - }, - "dependencies": { - "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 - } } }, "import-lazy": { @@ -1694,6 +1578,12 @@ "integrity": "sha1-khi5srkoojixPcT7a21XbyMUU+o=", "dev": true }, + "indent-string": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/indent-string/-/indent-string-4.0.0.tgz", + "integrity": "sha512-EdDDZu4A2OyIK7Lr/2zG+w5jmbuk1DVBnEwREQvBzspBJkCEbRa8GxU1lghYcaGJCnRWibjDXlq779X1/y5xwg==", + "dev": true + }, "indexes-of": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/indexes-of/-/indexes-of-1.0.1.tgz", @@ -1711,15 +1601,15 @@ } }, "inherits": { - "version": "2.0.3", - "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.3.tgz", - "integrity": "sha1-Yzwsg+PaQqUC9SRmAiSA9CCCYd4=", + "version": "2.0.4", + "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.4.tgz", + "integrity": "sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ==", "dev": true }, "ini": { - "version": "1.3.5", - "resolved": "https://registry.npmjs.org/ini/-/ini-1.3.5.tgz", - "integrity": "sha512-RZY5huIKCMRWDUqZlEi72f/lmXKMvuszcMBduliQ3nnWbx9X/ZBQO7DijMEYS9EhHBb2qacRUMtC7svLwe0lcw==", + "version": "1.3.8", + "resolved": "https://registry.npmjs.org/ini/-/ini-1.3.8.tgz", + "integrity": "sha512-JV/yugV2uzW5iMRSiZAyDtQd+nxtUnjeLt0acNdw98kKLrvuRVyB80tsREOE7yvGVgalhZ6RNXCmEHkUKBKxew==", "dev": true }, "internal-slot": { @@ -1731,6 +1621,27 @@ "es-abstract": "^1.17.0-next.1", "has": "^1.0.3", "side-channel": "^1.0.2" + }, + "dependencies": { + "es-abstract": { + "version": "1.17.7", + "resolved": "https://registry.npmjs.org/es-abstract/-/es-abstract-1.17.7.tgz", + "integrity": "sha512-VBl/gnfcJ7OercKA9MVaegWsBHFjV492syMudcnQZvt/Dw8ezpcOHYZXa/J96O8vx+g4x65YKhxOwDUh63aS5g==", + "dev": true, + "requires": { + "es-to-primitive": "^1.2.1", + "function-bind": "^1.1.1", + "has": "^1.0.3", + "has-symbols": "^1.0.1", + "is-callable": "^1.2.2", + "is-regex": "^1.1.1", + "object-inspect": "^1.8.0", + "object-keys": "^1.1.1", + "object.assign": "^4.1.1", + "string.prototype.trimend": "^1.0.1", + "string.prototype.trimstart": "^1.0.1" + } + } } }, "is-alphabetical": { @@ -1739,12 +1650,6 @@ "integrity": "sha512-DwzsA04LQ10FHTZuL0/grVDk4rFoVH1pjAToYwBrHSxcrBIGQuXrQMtD5U1b0U2XVgKZCTLLP8u2Qxqhy3l2Vg==", "dev": true }, - "is-alphanumeric": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/is-alphanumeric/-/is-alphanumeric-1.0.0.tgz", - "integrity": "sha1-Spzvcdr0wAHB2B1j0UDPU/1oifQ=", - "dev": true - }, "is-alphanumerical": { "version": "1.0.4", "resolved": "https://registry.npmjs.org/is-alphanumerical/-/is-alphanumerical-1.0.4.tgz", @@ -1762,17 +1667,26 @@ "dev": true }, "is-buffer": { - "version": "2.0.4", - "resolved": "https://registry.npmjs.org/is-buffer/-/is-buffer-2.0.4.tgz", - "integrity": "sha512-Kq1rokWXOPXWuaMAqZiJW4XxsmD9zGx9q4aePabbn3qCRGedtH7Cm+zV8WETitMfu1wdh+Rvd6w5egwSngUX2A==", + "version": "2.0.5", + "resolved": "https://registry.npmjs.org/is-buffer/-/is-buffer-2.0.5.tgz", + "integrity": "sha512-i2R6zNFDwgEHJyQUtJEk0XFi1i0dPFn/oqjK3/vPCcDeJvW5NQ83V8QbicfF1SupOaB0h8ntgBC2YiE7dfyctQ==", "dev": true }, "is-callable": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/is-callable/-/is-callable-1.2.0.tgz", - "integrity": "sha512-pyVD9AaGLxtg6srb2Ng6ynWJqkHU9bEM087AKck0w8QwDarTfNcpIYoU8x8Hv2Icm8u6kFJM18Dag8lyqGkviw==", + "version": "1.2.2", + "resolved": "https://registry.npmjs.org/is-callable/-/is-callable-1.2.2.tgz", + "integrity": "sha512-dnMqspv5nU3LoewK2N/y7KLtxtakvTuaCsU9FU50/QDmdbHNy/4/JuRtMHqRU22o3q+W89YQndQEeCVwK+3qrA==", "dev": true }, + "is-core-module": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/is-core-module/-/is-core-module-2.2.0.tgz", + "integrity": "sha512-XRAfAdyyY5F5cOXn7hYQDqh2Xmii+DEfIcQGxK/uNwMHhIkPWO0g8msXcbzLe+MpGoR951MlqM/2iIlU4vKDdQ==", + "dev": true, + "requires": { + "has": "^1.0.3" + } + }, "is-date-object": { "version": "1.0.2", "resolved": "https://registry.npmjs.org/is-date-object/-/is-date-object-1.0.2.tgz", @@ -1812,6 +1726,12 @@ "integrity": "sha512-gyPJuv83bHMpocVYoqof5VDiZveEoGoFL8m3BXNb2VW8Xs+rz9kqO8LOQ5DH6EsuvilT1ApazU0pyl+ytbPtlw==", "dev": true }, + "is-negative-zero": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/is-negative-zero/-/is-negative-zero-2.0.1.tgz", + "integrity": "sha512-2z6JzQvZRa9A2Y7xC6dQQm4FSTSTNWjKIYYTt4246eMTJmIo0Q+ZyOsU66X8lxK1AbB92dFeglPLrhwpeRKO6w==", + "dev": true + }, "is-number": { "version": "7.0.0", "resolved": "https://registry.npmjs.org/is-number/-/is-number-7.0.0.tgz", @@ -1860,18 +1780,6 @@ "integrity": "sha1-5HnICFjfDBsR3dppQPlgEfzaSpo=", "dev": true }, - "is-whitespace-character": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/is-whitespace-character/-/is-whitespace-character-1.0.4.tgz", - "integrity": "sha512-SDweEzfIZM0SJV0EUga669UTKlmL0Pq8Lno0QDQsPnvECB3IM2aP0gdx5TrU0A01MAPfViaZiI2V1QMZLaKK5w==", - "dev": true - }, - "is-word-character": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/is-word-character/-/is-word-character-1.0.4.tgz", - "integrity": "sha512-5SMO8RVennx3nZrqtKwCGyyetPE9VDba5ugvKLaD4KopPG5kR4mQ7tNt/r7feL5yt5h3lpuBbIUmCOG2eSzXHA==", - "dev": true - }, "isexe": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/isexe/-/isexe-2.0.0.tgz", @@ -1884,10 +1792,20 @@ "integrity": "sha512-RdJUflcE3cUzKiMqQgsCu06FPu9UdIJO0beYbPhHN4k6apgJtifcoCtT9bcxOpYBtpD2kCM6Sbzg4CausW/PKQ==", "dev": true }, + "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" + } + }, "jsdoctypeparser": { - "version": "6.1.0", - "resolved": "https://registry.npmjs.org/jsdoctypeparser/-/jsdoctypeparser-6.1.0.tgz", - "integrity": "sha512-UCQBZ3xCUBv/PLfwKAJhp6jmGOSLFNKzrotXGNgbKhWvz27wPsCsVeP7gIcHPElQw2agBmynAitXqhxR58XAmA==", + "version": "9.0.0", + "resolved": "https://registry.npmjs.org/jsdoctypeparser/-/jsdoctypeparser-9.0.0.tgz", + "integrity": "sha512-jrTA2jJIL6/DAEILBEh2/w9QxCuwmvNXIry39Ay/HVfhE3o2yVV0U44blYkqdHA/OKloJEqvJy0xU+GSdE2SIw==", "dev": true }, "jsesc": { @@ -1896,10 +1814,10 @@ "integrity": "sha512-OYu7XEzjkCQ3C5Ps3QIZsQfNpqoJyZZA99wd9aWd05NCtC5pWOkShK2mkL6HXQR6/Cy2lbNdPlZBpuQHXE63gA==", "dev": true }, - "json-parse-better-errors": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/json-parse-better-errors/-/json-parse-better-errors-1.0.2.tgz", - "integrity": "sha512-mrqyZKfX5EhL7hvqcV6WG1yYjnjeuYDzDhhcAAUrq8Po85NBQBJP+ZDUT75qZQ98IkUoBqdkExkukOU7Ts2wrw==", + "json-parse-even-better-errors": { + "version": "2.3.1", + "resolved": "https://registry.npmjs.org/json-parse-even-better-errors/-/json-parse-even-better-errors-2.3.1.tgz", + "integrity": "sha512-xyFwyhro/JEof6Ghe2iz2NcXoj2sloNsWr/XsERDK/oiPCfaNhl5ONfp+jQdAZRQQ0IJWNzH9zIZF7li91kh2w==", "dev": true }, "json-schema-traverse": { @@ -1921,24 +1839,16 @@ "dev": true, "requires": { "minimist": "^1.2.5" - }, - "dependencies": { - "minimist": { - "version": "1.2.5", - "resolved": "https://registry.npmjs.org/minimist/-/minimist-1.2.5.tgz", - "integrity": "sha512-FM9nNUYrRBAELZQT3xeZQ7fmMOBg6nWNmJKTcgsJeaLstP/UODVpGsr5OhXhhXg6f+qtJ8uiZ+PUxkDWcgIXLw==", - "dev": true - } } }, "jsx-ast-utils": { - "version": "2.4.1", - "resolved": "https://registry.npmjs.org/jsx-ast-utils/-/jsx-ast-utils-2.4.1.tgz", - "integrity": "sha512-z1xSldJ6imESSzOjd3NNkieVJKRlKYSOtMG8SFyCj2FIrvSaSuli/WjpBkEzCBoR9bYYYFgqJw61Xhu7Lcgk+w==", + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/jsx-ast-utils/-/jsx-ast-utils-3.1.0.tgz", + "integrity": "sha512-d4/UOjg+mxAWxCiF0c5UTSwyqbchkbqCvK87aBovhnh8GtysTjWmgC63tY0cJx/HzGgm9qnA147jVBdpOiQ2RA==", "dev": true, "requires": { "array-includes": "^3.1.1", - "object.assign": "^4.1.0" + "object.assign": "^4.1.1" } }, "kind-of": { @@ -1948,15 +1858,15 @@ "dev": true }, "known-css-properties": { - "version": "0.19.0", - "resolved": "https://registry.npmjs.org/known-css-properties/-/known-css-properties-0.19.0.tgz", - "integrity": "sha512-eYboRV94Vco725nKMlpkn3nV2+96p9c3gKXRsYqAJSswSENvBhN7n5L+uDhY58xQa0UukWsDMTGELzmD8Q+wTA==", + "version": "0.20.0", + "resolved": "https://registry.npmjs.org/known-css-properties/-/known-css-properties-0.20.0.tgz", + "integrity": "sha512-URvsjaA9ypfreqJ2/ylDr5MUERhJZ+DhguoWRr2xgS5C7aGCalXo+ewL+GixgKBfhT2vuL02nbIgNGqVWgTOYw==", "dev": true }, "language-subtag-registry": { - "version": "0.3.20", - "resolved": "https://registry.npmjs.org/language-subtag-registry/-/language-subtag-registry-0.3.20.tgz", - "integrity": "sha512-KPMwROklF4tEx283Xw0pNKtfTj1gZ4UByp4EsIFWLgBavJltF4TiYPc39k06zSTsLzxTVXXDSpbwaQXaFB4Qeg==", + "version": "0.3.21", + "resolved": "https://registry.npmjs.org/language-subtag-registry/-/language-subtag-registry-0.3.21.tgz", + "integrity": "sha512-L0IqwlIXjilBVVYKFT37X9Ih11Um5NEl9cbJIuU/SwP/zEEAbBPOnEeeuxVMf45ydWQRDQN3Nqc96OgbH1K+Pg==", "dev": true }, "language-tags": { @@ -1968,12 +1878,6 @@ "language-subtag-registry": "~0.3.2" } }, - "leven": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/leven/-/leven-3.1.0.tgz", - "integrity": "sha512-qsda+H8jTaUaN/x5vzW2rzc+8Rw4TAQ/4KjB46IwK5VH+IlVeeeje/EoZRpiXvIqjFgK84QffqPztGI3VBLG1A==", - "dev": true - }, "levn": { "version": "0.4.1", "resolved": "https://registry.npmjs.org/levn/-/levn-0.4.1.tgz", @@ -2015,12 +1919,11 @@ }, "dependencies": { "ansi-styles": { - "version": "4.2.1", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.2.1.tgz", - "integrity": "sha512-9VGjrMsG1vePxcSweQsN20KY/c4zN0h9fLjqAbwbPfahM3t+NL+M9HC8xeXG2I8pX5NoamTGNuomEUFI7fcUjA==", + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", + "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", "dev": true, "requires": { - "@types/color-name": "^1.1.1", "color-convert": "^2.0.1" } }, @@ -2056,9 +1959,9 @@ "dev": true }, "supports-color": { - "version": "7.1.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.1.0.tgz", - "integrity": "sha512-oRSIpR8pxT1Wr2FquTNnGet79b3BWljqOuoW/h4oBhxJ/HUbX5nX6JSruTkvXDCFMwDPvsaTTbvMLKZWSy0R5g==", + "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" @@ -2081,40 +1984,85 @@ "js-tokens": "^3.0.0 || ^4.0.0" } }, - "map-obj": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/map-obj/-/map-obj-1.0.1.tgz", - "integrity": "sha1-2TPOuSBdgr3PSIb2dCvcK03qFG0=", - "dev": true - }, - "markdown-escapes": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/markdown-escapes/-/markdown-escapes-1.0.4.tgz", - "integrity": "sha512-8z4efJYk43E0upd0NbVXwgSTQs6cT3T06etieCMEg7dRbzCbxUCK/GHlX8mhHRDcp+OLlHkPKsvqQTCvsRl2cg==", - "dev": true - }, - "markdown-table": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/markdown-table/-/markdown-table-2.0.0.tgz", - "integrity": "sha512-Ezda85ToJUBhM6WGaG6veasyym+Tbs3cMAw/ZhOPqXiYsr0jgocBV3j3nx+4lk47plLlIqjwuTm/ywVI+zjJ/A==", + "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": { - "repeat-string": "^1.0.0" + "yallist": "^4.0.0" } }, + "map-obj": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/map-obj/-/map-obj-4.1.0.tgz", + "integrity": "sha512-glc9y00wgtwcDmp7GaE/0b0OnxpNJsVf3ael/An6Fe2Q51LLwN1er6sdomLRzz5h0+yMpiYLhWYF5R7HeqVd4g==", + "dev": true + }, "mathml-tag-names": { "version": "2.1.3", "resolved": "https://registry.npmjs.org/mathml-tag-names/-/mathml-tag-names-2.1.3.tgz", "integrity": "sha512-APMBEanjybaPzUrfqU0IMU5I0AswKMH7k8OTLs0vvV4KZpExkTkY87nR/zpbuTPj+gARop7aGUbl11pnDfW6xg==", "dev": true }, - "mdast-util-compact": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/mdast-util-compact/-/mdast-util-compact-2.0.1.tgz", - "integrity": "sha512-7GlnT24gEwDrdAwEHrU4Vv5lLWrEer4KOkAiKT9nYstsTad7Oc1TwqT2zIMKRdZF7cTuaf+GA1E4Kv7jJh8mPA==", + "mdast-util-from-markdown": { + "version": "0.8.4", + "resolved": "https://registry.npmjs.org/mdast-util-from-markdown/-/mdast-util-from-markdown-0.8.4.tgz", + "integrity": "sha512-jj891B5pV2r63n2kBTFh8cRI2uR9LQHsXG1zSDqfhXkIlDzrTcIlbB5+5aaYEkl8vOPIOPLf8VT7Ere1wWTMdw==", "dev": true, "requires": { - "unist-util-visit": "^2.0.0" + "@types/mdast": "^3.0.0", + "mdast-util-to-string": "^2.0.0", + "micromark": "~2.11.0", + "parse-entities": "^2.0.0", + "unist-util-stringify-position": "^2.0.0" + } + }, + "mdast-util-to-markdown": { + "version": "0.6.1", + "resolved": "https://registry.npmjs.org/mdast-util-to-markdown/-/mdast-util-to-markdown-0.6.1.tgz", + "integrity": "sha512-4qJtZ0qdyYeexAXoOZiU0uHIFVncJAmCkHkSluAsvDaVWODtPyNEo9I1ns0T4ulxu2EHRH5u/bt1cV0pdHCX+A==", + "dev": true, + "requires": { + "@types/unist": "^2.0.0", + "longest-streak": "^2.0.0", + "mdast-util-to-string": "^2.0.0", + "parse-entities": "^2.0.0", + "repeat-string": "^1.0.0", + "zwitch": "^1.0.0" + } + }, + "mdast-util-to-string": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/mdast-util-to-string/-/mdast-util-to-string-2.0.0.tgz", + "integrity": "sha512-AW4DRS3QbBayY/jJmD8437V1Gombjf8RSOUCMFBuo5iHi58AGEgVCKQ+ezHkZZDpAQS75hcBMpLqjpJTjtUL7w==", + "dev": true + }, + "meow": { + "version": "8.0.0", + "resolved": "https://registry.npmjs.org/meow/-/meow-8.0.0.tgz", + "integrity": "sha512-nbsTRz2fwniJBFgUkcdISq8y/q9n9VbiHYbfwklFh5V4V2uAcxtKQkDc0yCLPM/kP0d+inZBewn3zJqewHE7kg==", + "dev": true, + "requires": { + "@types/minimist": "^1.2.0", + "camelcase-keys": "^6.2.2", + "decamelize-keys": "^1.1.0", + "hard-rejection": "^2.1.0", + "minimist-options": "4.1.0", + "normalize-package-data": "^3.0.0", + "read-pkg-up": "^7.0.1", + "redent": "^3.0.0", + "trim-newlines": "^3.0.0", + "type-fest": "^0.18.0", + "yargs-parser": "^20.2.3" + }, + "dependencies": { + "type-fest": { + "version": "0.18.1", + "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.18.1.tgz", + "integrity": "sha512-OIAYXk8+ISY+qTOwkHtKqzAuxchoMiD9Udx+FSGQDuiRR+PJKJHc2NJAXlbhkGwTt/4/nKZxELY1w3ReWOL8mw==", + "dev": true + } } }, "merge2": { @@ -2123,6 +2071,16 @@ "integrity": "sha512-8q7VEgMJW4J8tcfVPy8g09NcQwZdbwFEqhe/WZkoIzjn/3TGDwtOCYtXGxA3O8tPzpczCCDgv+P2P5y00ZJOOg==", "dev": true }, + "micromark": { + "version": "2.11.2", + "resolved": "https://registry.npmjs.org/micromark/-/micromark-2.11.2.tgz", + "integrity": "sha512-IXuP76p2uj8uMg4FQc1cRE7lPCLsfAXuEfdjtdO55VRiFO1asrCSQ5g43NmPqFtRwzEnEhafRVzn2jg0UiKArQ==", + "dev": true, + "requires": { + "debug": "^4.0.0", + "parse-entities": "^2.0.0" + } + }, "micromatch": { "version": "4.0.2", "resolved": "https://registry.npmjs.org/micromatch/-/micromatch-4.0.2.tgz", @@ -2173,15 +2131,6 @@ } } }, - "mkdirp": { - "version": "0.5.5", - "resolved": "https://registry.npmjs.org/mkdirp/-/mkdirp-0.5.5.tgz", - "integrity": "sha512-NKmAlESf6jMGym1++R0Ra7wvhV+wFW63FaSOFPwRahvea0gMUcGUhVeAg/0BC0wiv9ih5NYPB1Wn1UEI1/L+xQ==", - "dev": true, - "requires": { - "minimist": "^1.2.5" - } - }, "ms": { "version": "2.1.2", "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz", @@ -2195,11 +2144,23 @@ "dev": true }, "node-releases": { - "version": "1.1.60", - "resolved": "https://registry.npmjs.org/node-releases/-/node-releases-1.1.60.tgz", - "integrity": "sha512-gsO4vjEdQaTusZAEebUWp2a5d7dF5DYoIpDG7WySnk7BuZDW+GPpHXoXXuYawRBr/9t5q54tirPz79kFIWg4dA==", + "version": "1.1.67", + "resolved": "https://registry.npmjs.org/node-releases/-/node-releases-1.1.67.tgz", + "integrity": "sha512-V5QF9noGFl3EymEwUYzO+3NTDpGfQB4ve6Qfnzf3UNydMhjQRVPR1DZTuvWiLzaFJYw2fmDwAfnRNEVb64hSIg==", "dev": true }, + "normalize-package-data": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/normalize-package-data/-/normalize-package-data-3.0.0.tgz", + "integrity": "sha512-6lUjEI0d3v6kFrtgA/lOx4zHCWULXsFNIjHolnZCKCTLA6m/G625cdn3O7eNmT0iD3jfo6HZ9cdImGZwf21prw==", + "dev": true, + "requires": { + "hosted-git-info": "^3.0.6", + "resolve": "^1.17.0", + "semver": "^7.3.2", + "validate-npm-package-license": "^3.0.1" + } + }, "normalize-range": { "version": "0.1.2", "resolved": "https://registry.npmjs.org/normalize-range/-/normalize-range-0.1.2.tgz", @@ -2225,9 +2186,9 @@ "dev": true }, "object-inspect": { - "version": "1.8.0", - "resolved": "https://registry.npmjs.org/object-inspect/-/object-inspect-1.8.0.tgz", - "integrity": "sha512-jLdtEOB112fORuypAyl/50VRVIBIdVQOSUUGQHzJ4xBSbit81zRarz7GThkEFZy1RceYrWYcPcBFPQwHyAc1gA==", + "version": "1.9.0", + "resolved": "https://registry.npmjs.org/object-inspect/-/object-inspect-1.9.0.tgz", + "integrity": "sha512-i3Bp9iTqwhaLZBxGkRfo5ZbE07BQRT7MGu8+nNgwW9ItGp1TzCTw2DLEoWwjClxBjOFI/hWljTAmYGCEwmtnOw==", "dev": true }, "object-keys": { @@ -2237,49 +2198,50 @@ "dev": true }, "object.assign": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/object.assign/-/object.assign-4.1.0.tgz", - "integrity": "sha512-exHJeq6kBKj58mqGyTQ9DFvrZC/eR6OwxzoM9YRoGBqrXYonaFyGiFMuc9VZrXf7DarreEwMpurG3dd+CNyW5w==", + "version": "4.1.2", + "resolved": "https://registry.npmjs.org/object.assign/-/object.assign-4.1.2.tgz", + "integrity": "sha512-ixT2L5THXsApyiUPYKmW+2EHpXXe5Ii3M+f4e+aJFAHao5amFRW6J0OO6c/LU8Be47utCx2GL89hxGB6XSmKuQ==", "dev": true, "requires": { - "define-properties": "^1.1.2", - "function-bind": "^1.1.1", - "has-symbols": "^1.0.0", - "object-keys": "^1.0.11" + "call-bind": "^1.0.0", + "define-properties": "^1.1.3", + "has-symbols": "^1.0.1", + "object-keys": "^1.1.1" } }, "object.entries": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/object.entries/-/object.entries-1.1.2.tgz", - "integrity": "sha512-BQdB9qKmb/HyNdMNWVr7O3+z5MUIx3aiegEIJqjMBbBf0YT9RRxTJSim4mzFqtyr7PDAHigq0N9dO0m0tRakQA==", + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/object.entries/-/object.entries-1.1.3.tgz", + "integrity": "sha512-ym7h7OZebNS96hn5IJeyUmaWhaSM4SVtAPPfNLQEI2MYWCO2egsITb9nab2+i/Pwibx+R0mtn+ltKJXRSeTMGg==", "dev": true, "requires": { + "call-bind": "^1.0.0", "define-properties": "^1.1.3", - "es-abstract": "^1.17.5", + "es-abstract": "^1.18.0-next.1", "has": "^1.0.3" } }, "object.fromentries": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/object.fromentries/-/object.fromentries-2.0.2.tgz", - "integrity": "sha512-r3ZiBH7MQppDJVLx6fhD618GKNG40CZYH9wgwdhKxBDDbQgjeWGGd4AtkZad84d291YxvWe7bJGuE65Anh0dxQ==", + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/object.fromentries/-/object.fromentries-2.0.3.tgz", + "integrity": "sha512-IDUSMXs6LOSJBWE++L0lzIbSqHl9KDCfff2x/JSEIDtEUavUnyMYC2ZGay/04Zq4UT8lvd4xNhU4/YHKibAOlw==", "dev": true, "requires": { + "call-bind": "^1.0.0", "define-properties": "^1.1.3", - "es-abstract": "^1.17.0-next.1", - "function-bind": "^1.1.1", + "es-abstract": "^1.18.0-next.1", "has": "^1.0.3" } }, "object.values": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/object.values/-/object.values-1.1.1.tgz", - "integrity": "sha512-WTa54g2K8iu0kmS/us18jEmdv1a4Wi//BZ/DTVYEcH0XhLM5NYdpDHja3gt57VrZLcNAO2WGA+KpWsDBaHt6eA==", + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/object.values/-/object.values-1.1.2.tgz", + "integrity": "sha512-MYC0jvJopr8EK6dPBiO8Nb9mvjdypOachO5REGk6MXzujbBrAisKo3HmdEI6kZDL6fC31Mwee/5YbtMebixeag==", "dev": true, "requires": { + "call-bind": "^1.0.0", "define-properties": "^1.1.3", - "es-abstract": "^1.17.0-next.1", - "function-bind": "^1.1.1", + "es-abstract": "^1.18.0-next.1", "has": "^1.0.3" } }, @@ -2353,6 +2315,24 @@ "is-hexadecimal": "^1.0.0" } }, + "parse-json": { + "version": "5.1.0", + "resolved": "https://registry.npmjs.org/parse-json/-/parse-json-5.1.0.tgz", + "integrity": "sha512-+mi/lmVVNKFNVyLXV31ERiy2CY5E1/F6QtJFEzoChPRwwngMNXRDQ9GJ5WdE2Z2P4AujsOi0/+2qHID68KwfIQ==", + "dev": true, + "requires": { + "@babel/code-frame": "^7.0.0", + "error-ex": "^1.3.1", + "json-parse-even-better-errors": "^2.3.0", + "lines-and-columns": "^1.1.6" + } + }, + "path-exists": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-4.0.0.tgz", + "integrity": "sha512-ak9Qy5Q7jYb2Wwcey5Fpvg2KoAc/ZIhLSLOSBmRmygPsGwkVVt0fZa0qrtMz+m6tJTAHfZQ8FnmB4MG4LWy7/w==", + "dev": true + }, "path-is-absolute": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/path-is-absolute/-/path-is-absolute-1.0.1.tgz", @@ -2371,6 +2351,12 @@ "integrity": "sha512-GSmOT2EbHrINBf9SR7CDELwlJ8AENk3Qn7OikK4nFYAu3Ote2+JYNVvkpAEQm3/TLNEJFD/xZJjzyxg3KBWOzw==", "dev": true }, + "path-type": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/path-type/-/path-type-4.0.0.tgz", + "integrity": "sha512-gDKb8aZMDeD/tZWs9P6+q0J9Mwkdl6xMV8TjnGP3qJVJ06bdMgkbBlLU8IdfOsIsFz2BW1rNVT3XuNEl8zPAvw==", + "dev": true + }, "picomatch": { "version": "2.2.2", "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-2.2.2.tgz", @@ -2378,9 +2364,9 @@ "dev": true }, "postcss": { - "version": "7.0.32", - "resolved": "https://registry.npmjs.org/postcss/-/postcss-7.0.32.tgz", - "integrity": "sha512-03eXong5NLnNCD05xscnGKGDZ98CyzoqPSMjOe6SuoQY7Z2hIj0Ld1g/O/UQRuOle2aRtiIRDg9tDcTGAkLfKw==", + "version": "7.0.35", + "resolved": "https://registry.npmjs.org/postcss/-/postcss-7.0.35.tgz", + "integrity": "sha512-3QT8bBJeX/S5zKTTjTCIjRF3If4avAT6kqxcASlTWEtAFCb9NH0OUxNDfgZSWdP5fJnBYCMEWkIFfWeugjzYMg==", "dev": true, "requires": { "chalk": "^2.4.2", @@ -2429,29 +2415,6 @@ "integrity": "sha1-J7Ocb02U+Bsac7j3Y1HGCeXO8kQ=", "dev": true }, - "postcss-reporter": { - "version": "6.0.1", - "resolved": "https://registry.npmjs.org/postcss-reporter/-/postcss-reporter-6.0.1.tgz", - "integrity": "sha512-LpmQjfRWyabc+fRygxZjpRxfhRf9u/fdlKf4VHG4TSPbV2XNsuISzYW1KL+1aQzx53CAppa1bKG4APIB/DOXXw==", - "dev": true, - "requires": { - "chalk": "^2.4.1", - "lodash": "^4.17.11", - "log-symbols": "^2.2.0", - "postcss": "^7.0.7" - }, - "dependencies": { - "log-symbols": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/log-symbols/-/log-symbols-2.2.0.tgz", - "integrity": "sha512-VeIAFslyIerEJLXHziedo2basKbMKtTw3vfn5IzG0XTjhAVEJyNHnL2p7vc+wBDSdQuUpNw3M2u6xb9QsAY5Eg==", - "dev": true, - "requires": { - "chalk": "^2.0.1" - } - } - } - }, "postcss-resolve-nested-selector": { "version": "0.1.1", "resolved": "https://registry.npmjs.org/postcss-resolve-nested-selector/-/postcss-resolve-nested-selector-0.1.1.tgz", @@ -2565,6 +2528,82 @@ "integrity": "sha512-24e6ynE2H+OKt4kqsOvNd8kBpV65zoxbA4BVsEOB3ARVWQki/DHzaUoC5KuON/BiccDaCCTZBuOcfZs70kR8bQ==", "dev": true }, + "read-pkg": { + "version": "5.2.0", + "resolved": "https://registry.npmjs.org/read-pkg/-/read-pkg-5.2.0.tgz", + "integrity": "sha512-Ug69mNOpfvKDAc2Q8DRpMjjzdtrnv9HcSMX+4VsZxD1aZ6ZzrIE7rlzXBtWTyhULSMKg076AW6WR5iZpD0JiOg==", + "dev": true, + "requires": { + "@types/normalize-package-data": "^2.4.0", + "normalize-package-data": "^2.5.0", + "parse-json": "^5.0.0", + "type-fest": "^0.6.0" + }, + "dependencies": { + "hosted-git-info": { + "version": "2.8.8", + "resolved": "https://registry.npmjs.org/hosted-git-info/-/hosted-git-info-2.8.8.tgz", + "integrity": "sha512-f/wzC2QaWBs7t9IYqB4T3sR1xviIViXJRJTWBlx2Gf3g0Xi5vI7Yy4koXQ1c9OYDGHN9sBy1DQ2AB8fqZBWhUg==", + "dev": true + }, + "normalize-package-data": { + "version": "2.5.0", + "resolved": "https://registry.npmjs.org/normalize-package-data/-/normalize-package-data-2.5.0.tgz", + "integrity": "sha512-/5CMN3T0R4XTj4DcGaexo+roZSdSFW/0AOOTROrjxzCG1wrWXEsGbRKevjlIL+ZDE4sZlJr5ED4YW0yqmkK+eA==", + "dev": true, + "requires": { + "hosted-git-info": "^2.1.4", + "resolve": "^1.10.0", + "semver": "2 || 3 || 4 || 5", + "validate-npm-package-license": "^3.0.1" + } + }, + "semver": { + "version": "5.7.1", + "resolved": "https://registry.npmjs.org/semver/-/semver-5.7.1.tgz", + "integrity": "sha512-sauaDf/PZdVgrLTNYHRtpXa1iRiKcaebiKQ1BJdpQlWH2lCvexQdX55snPFyK7QzpudqbCI0qXFfOasHdyNDGQ==", + "dev": true + }, + "type-fest": { + "version": "0.6.0", + "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.6.0.tgz", + "integrity": "sha512-q+MB8nYR1KDLrgr4G5yemftpMC7/QLqVndBmEEdqzmNj5dcFOO4Oo8qlwZE3ULT3+Zim1F8Kq4cBnikNhlCMlg==", + "dev": true + } + } + }, + "read-pkg-up": { + "version": "7.0.1", + "resolved": "https://registry.npmjs.org/read-pkg-up/-/read-pkg-up-7.0.1.tgz", + "integrity": "sha512-zK0TB7Xd6JpCLmlLmufqykGE+/TlOePD6qKClNW7hHDKFh/J7/7gCWGR7joEQEW1bKq3a3yUZSObOoWLFQ4ohg==", + "dev": true, + "requires": { + "find-up": "^4.1.0", + "read-pkg": "^5.2.0", + "type-fest": "^0.8.1" + } + }, + "readable-stream": { + "version": "3.6.0", + "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-3.6.0.tgz", + "integrity": "sha512-BViHy7LKeTz4oNnkcLJ+lVSL6vpiFeX6/d3oSH8zCW7UxP2onchk+vTGB143xuFjHS3deTgkKoXXymXqymiIdA==", + "dev": true, + "requires": { + "inherits": "^2.0.3", + "string_decoder": "^1.1.1", + "util-deprecate": "^1.0.1" + } + }, + "redent": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/redent/-/redent-3.0.0.tgz", + "integrity": "sha512-6tDA8g98We0zd0GvVeMT9arEOnTw9qM03L9cJXaCjrip1OO764RDBLBfrB4cwzNGDj5OA5ioymC9GkizgWJDUg==", + "dev": true, + "requires": { + "indent-string": "^4.0.0", + "strip-indent": "^3.0.0" + } + }, "regenerator-runtime": { "version": "0.13.7", "resolved": "https://registry.npmjs.org/regenerator-runtime/-/regenerator-runtime-0.13.7.tgz", @@ -2579,6 +2618,27 @@ "requires": { "define-properties": "^1.1.3", "es-abstract": "^1.17.0-next.1" + }, + "dependencies": { + "es-abstract": { + "version": "1.17.7", + "resolved": "https://registry.npmjs.org/es-abstract/-/es-abstract-1.17.7.tgz", + "integrity": "sha512-VBl/gnfcJ7OercKA9MVaegWsBHFjV492syMudcnQZvt/Dw8ezpcOHYZXa/J96O8vx+g4x65YKhxOwDUh63aS5g==", + "dev": true, + "requires": { + "es-to-primitive": "^1.2.1", + "function-bind": "^1.1.1", + "has": "^1.0.3", + "has-symbols": "^1.0.1", + "is-callable": "^1.2.2", + "is-regex": "^1.1.1", + "object-inspect": "^1.8.0", + "object-keys": "^1.1.1", + "object.assign": "^4.1.1", + "string.prototype.trimend": "^1.0.1", + "string.prototype.trimstart": "^1.0.1" + } + } } }, "regexpp": { @@ -2594,60 +2654,32 @@ "dev": true }, "remark": { - "version": "12.0.1", - "resolved": "https://registry.npmjs.org/remark/-/remark-12.0.1.tgz", - "integrity": "sha512-gS7HDonkdIaHmmP/+shCPejCEEW+liMp/t/QwmF0Xt47Rpuhl32lLtDV1uKWvGoq+kxr5jSgg5oAIpGuyULjUw==", + "version": "13.0.0", + "resolved": "https://registry.npmjs.org/remark/-/remark-13.0.0.tgz", + "integrity": "sha512-HDz1+IKGtOyWN+QgBiAT0kn+2s6ovOxHyPAFGKVE81VSzJ+mq7RwHFledEvB5F1p4iJvOah/LOKdFuzvRnNLCA==", "dev": true, "requires": { - "remark-parse": "^8.0.0", - "remark-stringify": "^8.0.0", - "unified": "^9.0.0" + "remark-parse": "^9.0.0", + "remark-stringify": "^9.0.0", + "unified": "^9.1.0" } }, "remark-parse": { - "version": "8.0.3", - "resolved": "https://registry.npmjs.org/remark-parse/-/remark-parse-8.0.3.tgz", - "integrity": "sha512-E1K9+QLGgggHxCQtLt++uXltxEprmWzNfg+MxpfHsZlrddKzZ/hZyWHDbK3/Ap8HJQqYJRXP+jHczdL6q6i85Q==", + "version": "9.0.0", + "resolved": "https://registry.npmjs.org/remark-parse/-/remark-parse-9.0.0.tgz", + "integrity": "sha512-geKatMwSzEXKHuzBNU1z676sGcDcFoChMK38TgdHJNAYfFtsfHDQG7MoJAjs6sgYMqyLduCYWDIWZIxiPeafEw==", "dev": true, "requires": { - "ccount": "^1.0.0", - "collapse-white-space": "^1.0.2", - "is-alphabetical": "^1.0.0", - "is-decimal": "^1.0.0", - "is-whitespace-character": "^1.0.0", - "is-word-character": "^1.0.0", - "markdown-escapes": "^1.0.0", - "parse-entities": "^2.0.0", - "repeat-string": "^1.5.4", - "state-toggle": "^1.0.0", - "trim": "0.0.1", - "trim-trailing-lines": "^1.0.0", - "unherit": "^1.0.4", - "unist-util-remove-position": "^2.0.0", - "vfile-location": "^3.0.0", - "xtend": "^4.0.1" + "mdast-util-from-markdown": "^0.8.0" } }, "remark-stringify": { - "version": "8.1.1", - "resolved": "https://registry.npmjs.org/remark-stringify/-/remark-stringify-8.1.1.tgz", - "integrity": "sha512-q4EyPZT3PcA3Eq7vPpT6bIdokXzFGp9i85igjmhRyXWmPs0Y6/d2FYwUNotKAWyLch7g0ASZJn/KHHcHZQ163A==", + "version": "9.0.1", + "resolved": "https://registry.npmjs.org/remark-stringify/-/remark-stringify-9.0.1.tgz", + "integrity": "sha512-mWmNg3ZtESvZS8fv5PTvaPckdL4iNlCHTt8/e/8oN08nArHRHjNZMKzA/YW3+p7/lYqIw4nx1XsjCBo/AxNChg==", "dev": true, "requires": { - "ccount": "^1.0.0", - "is-alphanumeric": "^1.0.0", - "is-decimal": "^1.0.0", - "is-whitespace-character": "^1.0.0", - "longest-streak": "^2.0.1", - "markdown-escapes": "^1.0.0", - "markdown-table": "^2.0.0", - "mdast-util-compact": "^2.0.0", - "parse-entities": "^2.0.0", - "repeat-string": "^1.5.4", - "state-toggle": "^1.0.0", - "stringify-entities": "^3.0.0", - "unherit": "^1.0.4", - "xtend": "^4.0.1" + "mdast-util-to-markdown": "^0.6.0" } }, "repeat-string": { @@ -2656,18 +2688,28 @@ "integrity": "sha1-jcrkcOHIirwtYA//Sndihtp15jc=", "dev": true }, - "replace-ext": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/replace-ext/-/replace-ext-1.0.0.tgz", - "integrity": "sha1-3mMSg3P8v3w8z6TeWkgMRaZ5WOs=", - "dev": true - }, "requireindex": { "version": "1.2.0", "resolved": "https://registry.npmjs.org/requireindex/-/requireindex-1.2.0.tgz", "integrity": "sha512-L9jEkOi3ASd9PYit2cwRfyppc9NoABujTP8/5gFcbERmo5jUoAKovIC3fsF17pkTnGsrByysqX+Kxd2OTNI1ww==", "dev": true }, + "resolve": { + "version": "1.19.0", + "resolved": "https://registry.npmjs.org/resolve/-/resolve-1.19.0.tgz", + "integrity": "sha512-rArEXAgsBG4UgRGcynxWIWKFvh/XZCcS8UJdHhwy91zwAvCZIbcs+vAbflgBnNjYMs/i/i+/Ux6IZhML1yPvxg==", + "dev": true, + "requires": { + "is-core-module": "^2.1.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 + }, "reusify": { "version": "1.0.4", "resolved": "https://registry.npmjs.org/reusify/-/reusify-1.0.4.tgz", @@ -2675,34 +2717,18 @@ "dev": true }, "rimraf": { - "version": "2.6.3", - "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-2.6.3.tgz", - "integrity": "sha512-mwqeW5XsA2qAejG46gYdENaxXjx9onRNCfn7L0duuP4hCuTIi/QO7PDK07KJfp1d+izWPrzEJDcSqBa0OZQriA==", + "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" - }, - "dependencies": { - "glob": { - "version": "7.1.3", - "resolved": "https://registry.npmjs.org/glob/-/glob-7.1.3.tgz", - "integrity": "sha512-vcfuiIxogLV4DlGBHIUOwI0IbrJ8HWPc4MU7HzviGeNho/UJDfi6B5p3sHeWIQ0KGIU0Jpxi5ZHxemQfLkkAwQ==", - "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" - } - } } }, "run-parallel": { - "version": "1.1.9", - "resolved": "https://registry.npmjs.org/run-parallel/-/run-parallel-1.1.9.tgz", - "integrity": "sha512-DEqnSRTDw/Tc3FXf49zedI638Z9onwUotBMiUFKmrO2sdFKIbXamXGQ3Axd4qgphxKB4kw/qP1w5kTxnfU1B9Q==", + "version": "1.1.10", + "resolved": "https://registry.npmjs.org/run-parallel/-/run-parallel-1.1.10.tgz", + "integrity": "sha512-zb/1OuZ6flOlH6tQyMPUrE3x3Ulxjlo9WIVXR4yVYi4H9UXQaeIsPbLn2R3O3vQCnDKkAl2qHiuocKKX4Tz/Sw==", "dev": true }, "safe-buffer": { @@ -2712,10 +2738,13 @@ "dev": true }, "semver": { - "version": "5.6.0", - "resolved": "https://registry.npmjs.org/semver/-/semver-5.6.0.tgz", - "integrity": "sha512-RS9R6R35NYgQn++fkDWaOmqGoj4Ek9gGs+DPxNUZKuwE183xjJroKvyo1IzVFeXvUrvmALy6FWD5xrdJT25gMg==", - "dev": true + "version": "7.3.4", + "resolved": "https://registry.npmjs.org/semver/-/semver-7.3.4.tgz", + "integrity": "sha512-tCfb2WLjqFAtXn4KEdxIhalnRtoKFN7nAwj0B3ZXCbQloV2tq5eDbcTmT68JJD3nRJq24/XgxtQKFIpQdtvmVw==", + "dev": true, + "requires": { + "lru-cache": "^6.0.0" + } }, "shebang-command": { "version": "2.0.0", @@ -2733,19 +2762,19 @@ "dev": true }, "side-channel": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/side-channel/-/side-channel-1.0.2.tgz", - "integrity": "sha512-7rL9YlPHg7Ancea1S96Pa8/QWb4BtXL/TZvS6B8XFetGBeuhAsfmUspK6DokBeZ64+Kj9TCNRD/30pVz1BvQNA==", + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/side-channel/-/side-channel-1.0.3.tgz", + "integrity": "sha512-A6+ByhlLkksFoUepsGxfj5x1gTSrs+OydsRptUxeNCabQpCFUvcwIczgOigI8vhY/OJCnPnyE9rGiwgvr9cS1g==", "dev": true, "requires": { - "es-abstract": "^1.17.0-next.1", - "object-inspect": "^1.7.0" + "es-abstract": "^1.18.0-next.0", + "object-inspect": "^1.8.0" } }, "signal-exit": { - "version": "3.0.2", - "resolved": "https://registry.npmjs.org/signal-exit/-/signal-exit-3.0.2.tgz", - "integrity": "sha1-tf3AjxKH6hF4Yo5BXiUTK3NkbG0=", + "version": "3.0.3", + "resolved": "https://registry.npmjs.org/signal-exit/-/signal-exit-3.0.3.tgz", + "integrity": "sha512-VUJ49FC8U1OxwZLxIbTTrDvLnf/6TDgxZcK8wxR8zs13xpx7xbG60ndBlhNrFi2EMuFRoeDoJO7wthSLq42EjA==", "dev": true }, "slash": { @@ -2765,10 +2794,16 @@ "is-fullwidth-code-point": "^2.0.0" } }, + "source-map": { + "version": "0.5.7", + "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.5.7.tgz", + "integrity": "sha1-igOdLRAh0i0eoUyA2OpGi6LvP8w=", + "dev": true + }, "spdx-correct": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/spdx-correct/-/spdx-correct-3.1.0.tgz", - "integrity": "sha512-lr2EZCctC2BNR7j7WzJ2FpDznxky1sjfxvvYEyzxNyb6lZXHODmEoJeFu4JupYlkfha1KZpJyoqiJ7pgA1qq8Q==", + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/spdx-correct/-/spdx-correct-3.1.1.tgz", + "integrity": "sha512-cOYcUWwhCuHCXi49RhFRCyJEK3iPj1Ziz9DpViV3tbZOwXD49QzIN3MpOLJNxh2qwq2lJJZaKMVw9qNi4jTC0w==", "dev": true, "requires": { "spdx-expression-parse": "^3.0.0", @@ -2776,15 +2811,15 @@ } }, "spdx-exceptions": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/spdx-exceptions/-/spdx-exceptions-2.2.0.tgz", - "integrity": "sha512-2XQACfElKi9SlVb1CYadKDXvoajPgBVPn/gOQLrTvHdElaVhr7ZEbqJaRnJLVNeaI4cMEAgVCeBMKF6MWRDCRA==", + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/spdx-exceptions/-/spdx-exceptions-2.3.0.tgz", + "integrity": "sha512-/tTrYOC7PPI1nUAgx34hUpqXuyJG+DTHJTnIULG4rDygi4xu/tfgmq1e1cIRwRzwZgo4NLySi+ricLkZkw4i5A==", "dev": true }, "spdx-expression-parse": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/spdx-expression-parse/-/spdx-expression-parse-3.0.0.tgz", - "integrity": "sha512-Yg6D3XpRD4kkOmTpdgbUiEJFKghJH03fiC1OPll5h/0sO6neh2jqRDVHOQ4o/LMea0tgCkbMgea5ip/e+MkWyg==", + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/spdx-expression-parse/-/spdx-expression-parse-3.0.1.tgz", + "integrity": "sha512-cbqHunsQWnJNE6KhVSMsMeH5H/L9EpymbzqTQ3uLwNCLZ1Q481oWaofqH7nO6V07xlXwY6PhQdQ2IedWx/ZK4Q==", "dev": true, "requires": { "spdx-exceptions": "^2.1.0", @@ -2792,9 +2827,9 @@ } }, "spdx-license-ids": { - "version": "3.0.3", - "resolved": "https://registry.npmjs.org/spdx-license-ids/-/spdx-license-ids-3.0.3.tgz", - "integrity": "sha512-uBIcIl3Ih6Phe3XHK1NqboJLdGfwr1UN3k6wSD1dZpmPsIkb8AGNbZYJ1fOBk834+Gxy8rpfDxrS6XLEMZMY2g==", + "version": "3.0.7", + "resolved": "https://registry.npmjs.org/spdx-license-ids/-/spdx-license-ids-3.0.7.tgz", + "integrity": "sha512-U+MTEOO0AiDzxwFvoa4JVnMV6mZlJKk2sBLt90s7G0Gd0Mlknc7kxEn3nuDPNZRta7O2uy8oLcZLVT+4sqNZHQ==", "dev": true }, "specificity": { @@ -2803,10 +2838,10 @@ "integrity": "sha512-1klA3Gi5PD1Wv9Q0wUoOQN1IWAuPu0D1U03ThXTr0cJ20+/iq2tHSDnK7Kk/0LXJ1ztUB2/1Os0wKmfyNgUQfg==", "dev": true }, - "state-toggle": { + "sprintf-js": { "version": "1.0.3", - "resolved": "https://registry.npmjs.org/state-toggle/-/state-toggle-1.0.3.tgz", - "integrity": "sha512-d/5Z4/2iiCnHw6Xzghyhb+GcmF89bxwgXG60wjIiZaxnymbyOmI8Hk4VqHXiVVp6u2ysaskFfXg3ekCj4WNftQ==", + "resolved": "https://registry.npmjs.org/sprintf-js/-/sprintf-js-1.0.3.tgz", + "integrity": "sha1-BOaSb2YolTVPPdAVIDYzuFcpfiw=", "dev": true }, "string-width": { @@ -2844,59 +2879,73 @@ } }, "string.prototype.matchall": { - "version": "4.0.2", - "resolved": "https://registry.npmjs.org/string.prototype.matchall/-/string.prototype.matchall-4.0.2.tgz", - "integrity": "sha512-N/jp6O5fMf9os0JU3E72Qhf590RSRZU/ungsL/qJUYVTNv7hTG0P/dbPjxINVN9jpscu3nzYwKESU3P3RY5tOg==", + "version": "4.0.3", + "resolved": "https://registry.npmjs.org/string.prototype.matchall/-/string.prototype.matchall-4.0.3.tgz", + "integrity": "sha512-OBxYDA2ifZQ2e13cP82dWFMaCV9CGF8GzmN4fljBVw5O5wep0lu4gacm1OL6MjROoUnB8VbkWRThqkV2YFLNxw==", "dev": true, "requires": { + "call-bind": "^1.0.0", "define-properties": "^1.1.3", - "es-abstract": "^1.17.0", + "es-abstract": "^1.18.0-next.1", "has-symbols": "^1.0.1", "internal-slot": "^1.0.2", "regexp.prototype.flags": "^1.3.0", - "side-channel": "^1.0.2" + "side-channel": "^1.0.3" } }, "string.prototype.trimend": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/string.prototype.trimend/-/string.prototype.trimend-1.0.1.tgz", - "integrity": "sha512-LRPxFUaTtpqYsTeNKaFOw3R4bxIzWOnbQ837QfBylo8jIxtcbK/A/sMV7Q+OAV/vWo+7s25pOE10KYSjaSO06g==", + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/string.prototype.trimend/-/string.prototype.trimend-1.0.3.tgz", + "integrity": "sha512-ayH0pB+uf0U28CtjlLvL7NaohvR1amUvVZk+y3DYb0Ey2PUV5zPkkKy9+U1ndVEIXO8hNg18eIv9Jntbii+dKw==", "dev": true, "requires": { - "define-properties": "^1.1.3", - "es-abstract": "^1.17.5" + "call-bind": "^1.0.0", + "define-properties": "^1.1.3" } }, "string.prototype.trimstart": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/string.prototype.trimstart/-/string.prototype.trimstart-1.0.1.tgz", - "integrity": "sha512-XxZn+QpvrBI1FOcg6dIpxUPgWCPuNXvMD72aaRaUQv1eD4e/Qy8i/hFTe0BUmD60p/QA6bh1avmuPTfNjqVWRw==", + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/string.prototype.trimstart/-/string.prototype.trimstart-1.0.3.tgz", + "integrity": "sha512-oBIBUy5lea5tt0ovtOFiEQaBkoBBkyJhZXzJYrSmDo5IUUqbOPvVezuRs/agBIdZ2p2Eo1FD6bD9USyBLfl3xg==", "dev": true, "requires": { - "define-properties": "^1.1.3", - "es-abstract": "^1.17.5" + "call-bind": "^1.0.0", + "define-properties": "^1.1.3" } }, "string_decoder": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.1.1.tgz", - "integrity": "sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg==", + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.3.0.tgz", + "integrity": "sha512-hkRX8U1WjJFd8LsDJ2yQ/wWWxaopEsABU1XfkM8A+j0+85JAGppt16cr1Whg6KIbb4okU6Mql6BOj+uup/wKeA==", "dev": true, "requires": { - "safe-buffer": "~5.1.0" + "safe-buffer": "~5.2.0" + }, + "dependencies": { + "safe-buffer": { + "version": "5.2.1", + "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.2.1.tgz", + "integrity": "sha512-rp3So07KcdmmKbGvgaNxQSJr7bGVSVk5S9Eq1F+ppbRo70+YeaDxkw5Dd8NPN+GD6bjnYm2VuPuCXmpuYvmCXQ==", + "dev": true + } } }, - "stringify-entities": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/stringify-entities/-/stringify-entities-3.0.1.tgz", - "integrity": "sha512-Lsk3ISA2++eJYqBMPKcr/8eby1I6L0gP0NlxF8Zja6c05yr/yCYyb2c9PwXjd08Ib3If1vn1rbs1H5ZtVuOfvQ==", + "strip-ansi": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.0.tgz", + "integrity": "sha512-AuvKTrTfQNYNIctbR1K/YGTR1756GycPsg7b9bdV9Duqur4gv6aKqHXah67Z8ImS7WEz5QVcOtlfW2rZEugt6w==", "dev": true, "requires": { - "character-entities-html4": "^1.0.0", - "character-entities-legacy": "^1.0.0", - "is-alphanumerical": "^1.0.0", - "is-decimal": "^1.0.2", - "is-hexadecimal": "^1.0.0" + "ansi-regex": "^5.0.0" + } + }, + "strip-indent": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/strip-indent/-/strip-indent-3.0.0.tgz", + "integrity": "sha512-laJTa3Jb+VQpaC6DseHhF7dXVqHTfJPCRDaEbid/drOhgitgYku/letMUqOXFoWV0zIIUbjpdH2t+tYj4bQMRQ==", + "dev": true, + "requires": { + "min-indent": "^1.0.0" } }, "strip-json-comments": { @@ -2912,20 +2961,22 @@ "dev": true }, "stylelint": { - "version": "13.6.1", - "resolved": "https://registry.npmjs.org/stylelint/-/stylelint-13.6.1.tgz", - "integrity": "sha512-XyvKyNE7eyrqkuZ85Citd/Uv3ljGiuYHC6UiztTR6sWS9rza8j3UeQv/eGcQS9NZz/imiC4GKdk1EVL3wst5vw==", + "version": "13.8.0", + "resolved": "https://registry.npmjs.org/stylelint/-/stylelint-13.8.0.tgz", + "integrity": "sha512-iHH3dv3UI23SLDrH4zMQDjLT9/dDIz/IpoFeuNxZmEx86KtfpjDOscxLTFioQyv+2vQjPlRZnK0UoJtfxLICXQ==", "dev": true, "requires": { - "@stylelint/postcss-css-in-js": "^0.37.1", - "@stylelint/postcss-markdown": "^0.36.1", - "autoprefixer": "^9.8.0", + "@stylelint/postcss-css-in-js": "^0.37.2", + "@stylelint/postcss-markdown": "^0.36.2", + "autoprefixer": "^9.8.6", "balanced-match": "^1.0.0", "chalk": "^4.1.0", - "cosmiconfig": "^6.0.0", - "debug": "^4.1.1", + "cosmiconfig": "^7.0.0", + "debug": "^4.2.0", "execall": "^2.0.0", - "file-entry-cache": "^5.0.1", + "fast-glob": "^3.2.4", + "fastest-levenshtein": "^1.0.12", + "file-entry-cache": "^6.0.0", "get-stdin": "^8.0.0", "global-modules": "^2.0.0", "globby": "^11.0.1", @@ -2934,24 +2985,22 @@ "ignore": "^5.1.8", "import-lazy": "^4.0.0", "imurmurhash": "^0.1.4", - "known-css-properties": "^0.19.0", - "leven": "^3.1.0", - "lodash": "^4.17.15", + "known-css-properties": "^0.20.0", + "lodash": "^4.17.20", "log-symbols": "^4.0.0", "mathml-tag-names": "^2.1.3", - "meow": "^7.0.1", + "meow": "^8.0.0", "micromatch": "^4.0.2", "normalize-selector": "^0.2.0", - "postcss": "^7.0.32", + "postcss": "^7.0.35", "postcss-html": "^0.36.0", "postcss-less": "^3.1.4", "postcss-media-query-parser": "^0.2.3", - "postcss-reporter": "^6.0.1", "postcss-resolve-nested-selector": "^0.1.1", "postcss-safe-parser": "^4.0.2", "postcss-sass": "^0.4.4", "postcss-scss": "^2.1.1", - "postcss-selector-parser": "^6.0.2", + "postcss-selector-parser": "^6.0.4", "postcss-syntax": "^0.36.2", "postcss-value-parser": "^4.1.0", "resolve-from": "^5.0.0", @@ -2962,44 +3011,26 @@ "style-search": "^0.1.0", "sugarss": "^2.0.0", "svg-tags": "^1.0.0", - "table": "^5.4.6", - "v8-compile-cache": "^2.1.1", + "table": "^6.0.3", + "v8-compile-cache": "^2.2.0", "write-file-atomic": "^3.0.3" }, "dependencies": { - "ansi-regex": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.0.tgz", - "integrity": "sha512-bY6fj56OUQ0hU1KjFNDQuJFezqKdrAyFdIevADiqrWHwSlbmBNMHp5ak2f40Pm8JTFyM2mqxkG6ngkHO11f/lg==", - "dev": true - }, "ansi-styles": { - "version": "4.2.1", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.2.1.tgz", - "integrity": "sha512-9VGjrMsG1vePxcSweQsN20KY/c4zN0h9fLjqAbwbPfahM3t+NL+M9HC8xeXG2I8pX5NoamTGNuomEUFI7fcUjA==", + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", + "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", "dev": true, "requires": { - "@types/color-name": "^1.1.1", "color-convert": "^2.0.1" } }, - "camelcase": { - "version": "5.3.1", - "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-5.3.1.tgz", - "integrity": "sha512-L28STB170nwWS63UjtlEOE3dldQApaJXZkOI1uMFfzf3rRuPegHaHesyee+YxQ+W6SvRDQV6UrdOdRiR153wJg==", + "astral-regex": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/astral-regex/-/astral-regex-2.0.0.tgz", + "integrity": "sha512-Z7tMw1ytTXt5jqMcOP+OQteU1VuNK9Y02uuJtKQ1Sv69jXQKKg5cibLwGJow8yzZP+eAc18EmLGPal0bp36rvQ==", "dev": true }, - "camelcase-keys": { - "version": "6.2.2", - "resolved": "https://registry.npmjs.org/camelcase-keys/-/camelcase-keys-6.2.2.tgz", - "integrity": "sha512-YrwaA0vEKazPBkn0ipTiMpSajYDSe+KjQfrjhcBMxJt/znbvlHd8Pw/Vamaz5EB4Wfhs3SUR3Z9mwRu/P3s3Yg==", - "dev": true, - "requires": { - "camelcase": "^5.3.1", - "map-obj": "^4.0.0", - "quick-lru": "^4.0.1" - } - }, "chalk": { "version": "4.1.0", "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.0.tgz", @@ -3031,16 +3062,6 @@ "integrity": "sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==", "dev": true }, - "find-up": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/find-up/-/find-up-4.1.0.tgz", - "integrity": "sha512-PpOwAdQ/YlXQ2vj8a3h8IipDuYRi3wceVQQGYWxNINccq40Anw7BlsEXCMbt1Zt+OLA6Fq9suIpIWD0OsnISlw==", - "dev": true, - "requires": { - "locate-path": "^5.0.0", - "path-exists": "^4.0.0" - } - }, "get-stdin": { "version": "8.0.0", "resolved": "https://registry.npmjs.org/get-stdin/-/get-stdin-8.0.0.tgz", @@ -3059,135 +3080,22 @@ "integrity": "sha512-BMpfD7PpiETpBl/A6S498BaIJ6Y/ABT93ETbby2fP00v4EbvPBXWEoaR1UBPKs3iR53pJY7EtZk5KACI57i1Uw==", "dev": true }, - "indent-string": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/indent-string/-/indent-string-4.0.0.tgz", - "integrity": "sha512-EdDDZu4A2OyIK7Lr/2zG+w5jmbuk1DVBnEwREQvBzspBJkCEbRa8GxU1lghYcaGJCnRWibjDXlq779X1/y5xwg==", - "dev": true - }, "is-fullwidth-code-point": { "version": "3.0.0", "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-3.0.0.tgz", "integrity": "sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg==", "dev": true }, - "lodash": { - "version": "4.17.20", - "resolved": "https://registry.npmjs.org/lodash/-/lodash-4.17.20.tgz", - "integrity": "sha512-PlhdFcillOINfeV7Ni6oF1TAEayyZBoZ8bcshTHqOYJYlrqzRK5hagpagky5o4HfCzzd1TRkXPMFq6cKk9rGmA==", - "dev": true - }, - "map-obj": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/map-obj/-/map-obj-4.1.0.tgz", - "integrity": "sha512-glc9y00wgtwcDmp7GaE/0b0OnxpNJsVf3ael/An6Fe2Q51LLwN1er6sdomLRzz5h0+yMpiYLhWYF5R7HeqVd4g==", - "dev": true - }, - "meow": { - "version": "7.1.0", - "resolved": "https://registry.npmjs.org/meow/-/meow-7.1.0.tgz", - "integrity": "sha512-kq5F0KVteskZ3JdfyQFivJEj2RaA8NFsS4+r9DaMKLcUHpk5OcHS3Q0XkCXONB1mZRPsu/Y/qImKri0nwSEZog==", - "dev": true, - "requires": { - "@types/minimist": "^1.2.0", - "camelcase-keys": "^6.2.2", - "decamelize-keys": "^1.1.0", - "hard-rejection": "^2.1.0", - "minimist-options": "4.1.0", - "normalize-package-data": "^2.5.0", - "read-pkg-up": "^7.0.1", - "redent": "^3.0.0", - "trim-newlines": "^3.0.0", - "type-fest": "^0.13.1", - "yargs-parser": "^18.1.3" - } - }, - "normalize-package-data": { - "version": "2.5.0", - "resolved": "https://registry.npmjs.org/normalize-package-data/-/normalize-package-data-2.5.0.tgz", - "integrity": "sha512-/5CMN3T0R4XTj4DcGaexo+roZSdSFW/0AOOTROrjxzCG1wrWXEsGbRKevjlIL+ZDE4sZlJr5ED4YW0yqmkK+eA==", + "postcss-selector-parser": { + "version": "6.0.4", + "resolved": "https://registry.npmjs.org/postcss-selector-parser/-/postcss-selector-parser-6.0.4.tgz", + "integrity": "sha512-gjMeXBempyInaBqpp8gODmwZ52WaYsVOsfr4L4lDQ7n3ncD6mEyySiDtgzCT+NYC0mmeOLvtsF8iaEf0YT6dBw==", "dev": true, "requires": { - "hosted-git-info": "^2.1.4", - "resolve": "^1.10.0", - "semver": "2 || 3 || 4 || 5", - "validate-npm-package-license": "^3.0.1" - } - }, - "parse-json": { - "version": "5.0.1", - "resolved": "https://registry.npmjs.org/parse-json/-/parse-json-5.0.1.tgz", - "integrity": "sha512-ztoZ4/DYeXQq4E21v169sC8qWINGpcosGv9XhTDvg9/hWvx/zrFkc9BiWxR58OJLHGk28j5BL0SDLeV2WmFZlQ==", - "dev": true, - "requires": { - "@babel/code-frame": "^7.0.0", - "error-ex": "^1.3.1", - "json-parse-better-errors": "^1.0.1", - "lines-and-columns": "^1.1.6" - } - }, - "path-exists": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-4.0.0.tgz", - "integrity": "sha512-ak9Qy5Q7jYb2Wwcey5Fpvg2KoAc/ZIhLSLOSBmRmygPsGwkVVt0fZa0qrtMz+m6tJTAHfZQ8FnmB4MG4LWy7/w==", - "dev": true - }, - "read-pkg": { - "version": "5.2.0", - "resolved": "https://registry.npmjs.org/read-pkg/-/read-pkg-5.2.0.tgz", - "integrity": "sha512-Ug69mNOpfvKDAc2Q8DRpMjjzdtrnv9HcSMX+4VsZxD1aZ6ZzrIE7rlzXBtWTyhULSMKg076AW6WR5iZpD0JiOg==", - "dev": true, - "requires": { - "@types/normalize-package-data": "^2.4.0", - "normalize-package-data": "^2.5.0", - "parse-json": "^5.0.0", - "type-fest": "^0.6.0" - }, - "dependencies": { - "type-fest": { - "version": "0.6.0", - "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.6.0.tgz", - "integrity": "sha512-q+MB8nYR1KDLrgr4G5yemftpMC7/QLqVndBmEEdqzmNj5dcFOO4Oo8qlwZE3ULT3+Zim1F8Kq4cBnikNhlCMlg==", - "dev": true - } - } - }, - "read-pkg-up": { - "version": "7.0.1", - "resolved": "https://registry.npmjs.org/read-pkg-up/-/read-pkg-up-7.0.1.tgz", - "integrity": "sha512-zK0TB7Xd6JpCLmlLmufqykGE+/TlOePD6qKClNW7hHDKFh/J7/7gCWGR7joEQEW1bKq3a3yUZSObOoWLFQ4ohg==", - "dev": true, - "requires": { - "find-up": "^4.1.0", - "read-pkg": "^5.2.0", - "type-fest": "^0.8.1" - }, - "dependencies": { - "type-fest": { - "version": "0.8.1", - "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.8.1.tgz", - "integrity": "sha512-4dbzIzqvjtgiM5rw1k5rEHtBANKmdudhGyBEajN01fEyhaAIhsoKNy6y7+IN93IfpFtwY9iqi7kD+xwKhQsNJA==", - "dev": true - } - } - }, - "redent": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/redent/-/redent-3.0.0.tgz", - "integrity": "sha512-6tDA8g98We0zd0GvVeMT9arEOnTw9qM03L9cJXaCjrip1OO764RDBLBfrB4cwzNGDj5OA5ioymC9GkizgWJDUg==", - "dev": true, - "requires": { - "indent-string": "^4.0.0", - "strip-indent": "^3.0.0" - } - }, - "resolve": { - "version": "1.17.0", - "resolved": "https://registry.npmjs.org/resolve/-/resolve-1.17.0.tgz", - "integrity": "sha512-ic+7JYiV8Vi2yzQGFWOkiZD5Z9z7O2Zhm9XMaTxdJExKasieFCr+yXZ/WmXsckHiKl12ar0y6XiXDx3m4RHn1w==", - "dev": true, - "requires": { - "path-parse": "^1.0.6" + "cssesc": "^3.0.0", + "indexes-of": "^1.0.1", + "uniq": "^1.0.1", + "util-deprecate": "^1.0.2" } }, "resolve-from": { @@ -3196,6 +3104,17 @@ "integrity": "sha512-qYg9KP24dD5qka9J47d0aVky0N+b4fTU89LN9iDnjB5waksiC49rvMB0PrUJQGoTmH50XPiqOvAjDfaijGxYZw==", "dev": true }, + "slice-ansi": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/slice-ansi/-/slice-ansi-4.0.0.tgz", + "integrity": "sha512-qMCMfhY040cVHT43K9BFygqYbUPFZKHOg7K73mtTWJRb8pyP3fzf4Ixd5SzdEJQ6MRUg/WBnOLxghZtKKurENQ==", + "dev": true, + "requires": { + "ansi-styles": "^4.0.0", + "astral-regex": "^2.0.0", + "is-fullwidth-code-point": "^3.0.0" + } + }, "string-width": { "version": "4.2.0", "resolved": "https://registry.npmjs.org/string-width/-/string-width-4.2.0.tgz", @@ -3207,44 +3126,26 @@ "strip-ansi": "^6.0.0" } }, - "strip-ansi": { - "version": "6.0.0", - "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.0.tgz", - "integrity": "sha512-AuvKTrTfQNYNIctbR1K/YGTR1756GycPsg7b9bdV9Duqur4gv6aKqHXah67Z8ImS7WEz5QVcOtlfW2rZEugt6w==", - "dev": true, - "requires": { - "ansi-regex": "^5.0.0" - } - }, - "strip-indent": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/strip-indent/-/strip-indent-3.0.0.tgz", - "integrity": "sha512-laJTa3Jb+VQpaC6DseHhF7dXVqHTfJPCRDaEbid/drOhgitgYku/letMUqOXFoWV0zIIUbjpdH2t+tYj4bQMRQ==", + "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": { - "min-indent": "^1.0.0" + "has-flag": "^4.0.0" } }, - "supports-color": { - "version": "7.1.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.1.0.tgz", - "integrity": "sha512-oRSIpR8pxT1Wr2FquTNnGet79b3BWljqOuoW/h4oBhxJ/HUbX5nX6JSruTkvXDCFMwDPvsaTTbvMLKZWSy0R5g==", + "table": { + "version": "6.0.4", + "resolved": "https://registry.npmjs.org/table/-/table-6.0.4.tgz", + "integrity": "sha512-sBT4xRLdALd+NFBvwOz8bw4b15htyythha+q+DVZqy2RS08PPC8O2sZFgJYEY7bJvbCFKccs+WIZ/cd+xxTWCw==", "dev": true, "requires": { - "has-flag": "^4.0.0" + "ajv": "^6.12.4", + "lodash": "^4.17.20", + "slice-ansi": "^4.0.0", + "string-width": "^4.2.0" } - }, - "trim-newlines": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/trim-newlines/-/trim-newlines-3.0.0.tgz", - "integrity": "sha512-C4+gOpvmxaSMKuEf9Qc134F1ZuOHVXKRbtEflf4NTtuuJDEIJ9p5PXsalL8SkeRw+qit1Mo+yuvMPAKwWg/1hA==", - "dev": true - }, - "type-fest": { - "version": "0.13.1", - "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.13.1.tgz", - "integrity": "sha512-34R7HTnG0XIJcBSn5XhDd7nNFPRcXYRZrBB2O2jdKqYODldSzBAqzsWoZYYvduky73toYS/ESqxPvkDf/F0XMg==", - "dev": true } } }, @@ -3329,14 +3230,6 @@ "lodash": "^4.17.14", "slice-ansi": "^2.1.0", "string-width": "^3.0.0" - }, - "dependencies": { - "lodash": { - "version": "4.17.20", - "resolved": "https://registry.npmjs.org/lodash/-/lodash-4.17.20.tgz", - "integrity": "sha512-PlhdFcillOINfeV7Ni6oF1TAEayyZBoZ8bcshTHqOYJYlrqzRK5hagpagky5o4HfCzzd1TRkXPMFq6cKk9rGmA==", - "dev": true - } } }, "text-table": { @@ -3360,16 +3253,10 @@ "is-number": "^7.0.0" } }, - "trim": { - "version": "0.0.1", - "resolved": "https://registry.npmjs.org/trim/-/trim-0.0.1.tgz", - "integrity": "sha1-WFhUf2spB1fulczMZm+1AITEYN0=", - "dev": true - }, - "trim-trailing-lines": { - "version": "1.1.3", - "resolved": "https://registry.npmjs.org/trim-trailing-lines/-/trim-trailing-lines-1.1.3.tgz", - "integrity": "sha512-4ku0mmjXifQcTVfYDfR5lpgV7zVqPg6zV9rdZmwOPqq0+Zq19xDqEgagqVbc4pOOShbncuAOIs59R3+3gcF3ZA==", + "trim-newlines": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/trim-newlines/-/trim-newlines-3.0.0.tgz", + "integrity": "sha512-C4+gOpvmxaSMKuEf9Qc134F1ZuOHVXKRbtEflf4NTtuuJDEIJ9p5PXsalL8SkeRw+qit1Mo+yuvMPAKwWg/1hA==", "dev": true }, "trough": { @@ -3379,9 +3266,9 @@ "dev": true }, "tslib": { - "version": "1.13.0", - "resolved": "https://registry.npmjs.org/tslib/-/tslib-1.13.0.tgz", - "integrity": "sha512-i/6DQjL8Xf3be4K/E6Wgpekn5Qasl1usyw++dAA35Ue5orEn65VIxOA+YvNNl9HV3qv70T7CNwjODHZrLwvd1Q==", + "version": "1.14.1", + "resolved": "https://registry.npmjs.org/tslib/-/tslib-1.14.1.tgz", + "integrity": "sha512-Xni35NKzjgMrwevysHTCArtLDpPvye8zV/0E4EyYn43P7/7qvQwPh9BGkHewbMulVntbigmcT7rdX3BNo9wRJg==", "dev": true }, "tsutils": { @@ -3417,20 +3304,10 @@ "is-typedarray": "^1.0.0" } }, - "unherit": { - "version": "1.1.3", - "resolved": "https://registry.npmjs.org/unherit/-/unherit-1.1.3.tgz", - "integrity": "sha512-Ft16BJcnapDKp0+J/rqFC3Rrk6Y/Ng4nzsC028k2jdDII/rdZ7Wd3pPT/6+vIIxRagwRc9K0IUX0Ra4fKvw+WQ==", - "dev": true, - "requires": { - "inherits": "^2.0.0", - "xtend": "^4.0.0" - } - }, "unified": { - "version": "9.1.0", - "resolved": "https://registry.npmjs.org/unified/-/unified-9.1.0.tgz", - "integrity": "sha512-VXOv7Ic6twsKGJDeZQ2wwPqXs2hM0KNu5Hkg9WgAZbSD1pxhZ7p8swqg583nw1Je2fhwHy6U8aEjiI79x1gvag==", + "version": "9.2.0", + "resolved": "https://registry.npmjs.org/unified/-/unified-9.2.0.tgz", + "integrity": "sha512-vx2Z0vY+a3YoTj8+pttM3tiJHCwY5UFbYdiWrwBEbHmK8pvsPj2rtAX2BFfgXen8T39CJWblWRDT4L5WGXtDdg==", "dev": true, "requires": { "bail": "^1.0.0", @@ -3448,29 +3325,20 @@ "dev": true }, "unist-util-find-all-after": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/unist-util-find-all-after/-/unist-util-find-all-after-3.0.1.tgz", - "integrity": "sha512-0GICgc++sRJesLwEYDjFVJPJttBpVQaTNgc6Jw0Jhzvfs+jtKePEMu+uD+PqkRUrAvGQqwhpDwLGWo1PK8PDEw==", + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/unist-util-find-all-after/-/unist-util-find-all-after-3.0.2.tgz", + "integrity": "sha512-xaTC/AGZ0rIM2gM28YVRAFPIZpzbpDtU3dRmp7EXlNVA8ziQc4hY3H7BHXM1J49nEmiqc3svnqMReW+PGqbZKQ==", "dev": true, "requires": { "unist-util-is": "^4.0.0" } }, "unist-util-is": { - "version": "4.0.2", - "resolved": "https://registry.npmjs.org/unist-util-is/-/unist-util-is-4.0.2.tgz", - "integrity": "sha512-Ofx8uf6haexJwI1gxWMGg6I/dLnF2yE+KibhD3/diOqY2TinLcqHXCV6OI5gFVn3xQqDH+u0M625pfKwIwgBKQ==", + "version": "4.0.4", + "resolved": "https://registry.npmjs.org/unist-util-is/-/unist-util-is-4.0.4.tgz", + "integrity": "sha512-3dF39j/u423v4BBQrk1AQ2Ve1FxY5W3JKwXxVFzBODQ6WEvccguhgp802qQLKSnxPODE6WuRZtV+ohlUg4meBA==", "dev": true }, - "unist-util-remove-position": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/unist-util-remove-position/-/unist-util-remove-position-2.0.1.tgz", - "integrity": "sha512-fDZsLYIe2uT+oGFnuZmy73K6ZxOPG/Qcm+w7jbEjaFcJgbQ6cqjs/eSPzXhsmGpAsWPkqZM9pYjww5QTn3LHMA==", - "dev": true, - "requires": { - "unist-util-visit": "^2.0.0" - } - }, "unist-util-stringify-position": { "version": "2.0.3", "resolved": "https://registry.npmjs.org/unist-util-stringify-position/-/unist-util-stringify-position-2.0.3.tgz", @@ -3480,31 +3348,10 @@ "@types/unist": "^2.0.2" } }, - "unist-util-visit": { - "version": "2.0.3", - "resolved": "https://registry.npmjs.org/unist-util-visit/-/unist-util-visit-2.0.3.tgz", - "integrity": "sha512-iJ4/RczbJMkD0712mGktuGpm/U4By4FfDonL7N/9tATGIF4imikjOuagyMY53tnZq3NP6BcmlrHhEKAfGWjh7Q==", - "dev": true, - "requires": { - "@types/unist": "^2.0.0", - "unist-util-is": "^4.0.0", - "unist-util-visit-parents": "^3.0.0" - } - }, - "unist-util-visit-parents": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/unist-util-visit-parents/-/unist-util-visit-parents-3.1.0.tgz", - "integrity": "sha512-0g4wbluTF93npyPrp/ymd3tCDTMnP0yo2akFD2FIBAYXq/Sga3lwaU1D8OYKbtpioaI6CkDcQ6fsMnmtzt7htw==", - "dev": true, - "requires": { - "@types/unist": "^2.0.0", - "unist-util-is": "^4.0.0" - } - }, "uri-js": { - "version": "4.2.2", - "resolved": "https://registry.npmjs.org/uri-js/-/uri-js-4.2.2.tgz", - "integrity": "sha512-KY9Frmirql91X2Qgjry0Wd4Y+YTdrdZheS8TFwvkbLWf/G5KNJDCh6pKL5OZctEW4+0Baa5idK2ZQuELRwPznQ==", + "version": "4.4.0", + "resolved": "https://registry.npmjs.org/uri-js/-/uri-js-4.4.0.tgz", + "integrity": "sha512-B0yRTzYdUCCn9n+F4+Gh4yIDtMQcaJsmYBDsTSG8g/OejKBodLQ2IHfN3bM7jUsRXndopT7OIXWdYqc1fjmV6g==", "dev": true, "requires": { "punycode": "^2.1.0" @@ -3517,9 +3364,9 @@ "dev": true }, "v8-compile-cache": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/v8-compile-cache/-/v8-compile-cache-2.1.1.tgz", - "integrity": "sha512-8OQ9CL+VWyt3JStj7HX7/ciTL2V3Rl1Wf5OL+SNTm0yK1KvtReVulksyeRnCANHHuUxHlQig+JJDlUhBt1NQDQ==", + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/v8-compile-cache/-/v8-compile-cache-2.2.0.tgz", + "integrity": "sha512-gTpR5XQNKFwOd4clxfnhaqvfqMpqEwr4tOtCyz4MtYZX2JYhfr1JvBFKdS+7K/9rfpZR3VLX+YWBbKoxCgS43Q==", "dev": true }, "validate-npm-package-license": { @@ -3533,24 +3380,17 @@ } }, "vfile": { - "version": "4.2.0", - "resolved": "https://registry.npmjs.org/vfile/-/vfile-4.2.0.tgz", - "integrity": "sha512-a/alcwCvtuc8OX92rqqo7PflxiCgXRFjdyoGVuYV+qbgCb0GgZJRvIgCD4+U/Kl1yhaRsaTwksF88xbPyGsgpw==", + "version": "4.2.1", + "resolved": "https://registry.npmjs.org/vfile/-/vfile-4.2.1.tgz", + "integrity": "sha512-O6AE4OskCG5S1emQ/4gl8zK586RqA3srz3nfK/Viy0UPToBc5Trp9BVFb1u0CjsKrAWwnpr4ifM/KBXPWwJbCA==", "dev": true, "requires": { "@types/unist": "^2.0.0", "is-buffer": "^2.0.0", - "replace-ext": "1.0.0", "unist-util-stringify-position": "^2.0.0", "vfile-message": "^2.0.0" } }, - "vfile-location": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/vfile-location/-/vfile-location-3.0.1.tgz", - "integrity": "sha512-yYBO06eeN/Ki6Kh1QAkgzYpWT1d3Qln+ZCtSbJqFExPl1S3y2qqotJQXoh6qEvl/jDlgpUJolBn3PItVnnZRqQ==", - "dev": true - }, "vfile-message": { "version": "2.0.4", "resolved": "https://registry.npmjs.org/vfile-message/-/vfile-message-2.0.4.tgz", @@ -3562,9 +3402,9 @@ } }, "which": { - "version": "1.3.1", - "resolved": "https://registry.npmjs.org/which/-/which-1.3.1.tgz", - "integrity": "sha512-HxJdYWq1MTIQbJ3nw0cqssHoTNU267KlrDuGZ1WYlxDStUtKUhOaJmh112/TZmHxxUfuJqPXSOm7tDyas0OSIQ==", + "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" @@ -3582,15 +3422,6 @@ "integrity": "sha1-tSQ9jz7BqjXxNkYFvA0QNuMKtp8=", "dev": true }, - "write": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/write/-/write-1.0.3.tgz", - "integrity": "sha512-/lg70HAjtkUgWPVZhZcm+T4hkL8Zbtp1nFNOn3lRrxnlv50SRBv7cR7RqR+GMsd3hUXy9hWBo4CHTbFTcOYwig==", - "dev": true, - "requires": { - "mkdirp": "^0.5.1" - } - }, "write-file-atomic": { "version": "3.0.3", "resolved": "https://registry.npmjs.org/write-file-atomic/-/write-file-atomic-3.0.3.tgz", @@ -3603,10 +3434,10 @@ "typedarray-to-buffer": "^3.1.5" } }, - "xtend": { - "version": "4.0.2", - "resolved": "https://registry.npmjs.org/xtend/-/xtend-4.0.2.tgz", - "integrity": "sha512-LKYU1iAXJXUgAXn9URjiu+MWhyUXHsvfp7mcuYm9dSUKK0/CjtrUwFAxD82/mCWbtLsGjFIad0wIsod4zrTAEQ==", + "yallist": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/yallist/-/yallist-4.0.0.tgz", + "integrity": "sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==", "dev": true }, "yaml": { @@ -3616,22 +3447,16 @@ "dev": true }, "yargs-parser": { - "version": "18.1.3", - "resolved": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-18.1.3.tgz", - "integrity": "sha512-o50j0JeToy/4K6OZcaQmW6lyXXKhq7csREXcDwk2omFPJEwUNOVtJKvmDr9EI1fAJZUyZcRF7kxGBWmRXudrCQ==", - "dev": true, - "requires": { - "camelcase": "^5.0.0", - "decamelize": "^1.2.0" - }, - "dependencies": { - "camelcase": { - "version": "5.3.1", - "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-5.3.1.tgz", - "integrity": "sha512-L28STB170nwWS63UjtlEOE3dldQApaJXZkOI1uMFfzf3rRuPegHaHesyee+YxQ+W6SvRDQV6UrdOdRiR153wJg==", - "dev": true - } - } + "version": "20.2.4", + "resolved": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-20.2.4.tgz", + "integrity": "sha512-WOkpgNhPTlE73h4VFAFsOnomJVaovO8VqLDzy5saChRBFQFBoMYirowyW+Q9HB4HFF4Z7VZTiG3iSzJJA29yRA==", + "dev": true + }, + "zwitch": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/zwitch/-/zwitch-1.0.5.tgz", + "integrity": "sha512-V50KMwwzqJV0NpZIZFwfOD5/lyny3WlSzRiXgA0G7VUnRlqttta1L6UQIHzd6EuBY/cHGfwTIck7w1yH6Q5zUw==", + "dev": true } } } diff --git a/package.json b/package.json index 83920e6..c446b1f 100644 --- a/package.json +++ b/package.json @@ -1,9 +1,9 @@ { "private": true, "devDependencies": { - "@wordpress/eslint-plugin": "^7.1.0", - "eslint": "^7.5.0", - "stylelint": "^13.6.1", + "@wordpress/eslint-plugin": "^7.3.0", + "eslint": "^7.15.0", + "stylelint": "^13.8.0", "stylelint-config-wordpress": "^17.0.0" } } From 3747989c38d8171ed03c6bf05c0d51abb4aa72c1 Mon Sep 17 00:00:00 2001 From: Stefan Kalscheuer Date: Sun, 13 Dec 2020 12:31:53 +0100 Subject: [PATCH 10/17] enable clover coverage report for PHPUnit --- phpunit.xml | 3 +++ 1 file changed, 3 insertions(+) diff --git a/phpunit.xml b/phpunit.xml index 1dd1854..f49eac2 100644 --- a/phpunit.xml +++ b/phpunit.xml @@ -13,6 +13,9 @@ ./antivirus.php ./inc/ + + + From 94d0c3ea13b274a40926cbf5c5bfdaee75e2eca7 Mon Sep 17 00:00:00 2001 From: Stefan Kalscheuer Date: Sun, 13 Dec 2020 12:39:40 +0100 Subject: [PATCH 11/17] add XDEBUG_MODE=coverage to CI environment to restore coverage report --- .travis.yml | 6 +++++- phpunit.xml | 3 --- 2 files changed, 5 insertions(+), 4 deletions(-) diff --git a/.travis.yml b/.travis.yml index 7875c26..b823eae 100644 --- a/.travis.yml +++ b/.travis.yml @@ -6,7 +6,11 @@ php: - '8.0' - nightly -matrix: +env: + global: + - XDEBUG_MODE=coverage + +jobs: allow_failures: - php: nightly diff --git a/phpunit.xml b/phpunit.xml index f49eac2..1dd1854 100644 --- a/phpunit.xml +++ b/phpunit.xml @@ -13,9 +13,6 @@ ./antivirus.php ./inc/ - - - From e5c1a478afbfed88285104756416982ab96028c9 Mon Sep 17 00:00:00 2001 From: Stefan Kalscheuer Date: Sun, 13 Dec 2020 14:42:31 +0100 Subject: [PATCH 12/17] update screenshots (#76) --- .wordpress-org/screenshot-1.png | Bin 66172 -> 71655 bytes .wordpress-org/screenshot-2.png | Bin 0 -> 83641 bytes README.md | 1 + 3 files changed, 1 insertion(+) create mode 100644 .wordpress-org/screenshot-2.png diff --git a/.wordpress-org/screenshot-1.png b/.wordpress-org/screenshot-1.png index 42a41536c76f1338f1aae0ffb73360997d1083c7..227b3d627cfcb107cc7c8b6b37c8655a1b04a6dd 100644 GIT binary patch literal 71655 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 QTme6FQp%FW;zmCI2fW2ifB*mh literal 66172 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
&{6Vm3URa13_M>le%Ri&hLg5Zxn9+}+m3vI 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 H@~?jb#ziXG diff --git a/.wordpress-org/screenshot-2.png b/.wordpress-org/screenshot-2.png new file mode 100644 index 0000000000000000000000000000000000000000..f0ffa3049f8a1de75735c87030b6a428921842db GIT binary patch literal 83641 zcmcG#WmH_jwk@0l0wh3y;O^3BXx!c19TK2%2p%LrumA~81Hs+h9fCvS?j9hxL-4oB zIp^Lx?z`vv#{Kce0E$t&cgd<%YtEXrIz(Af3iUO?>u1lNp~^^$t3G@7;_%rsxGSU= zK+WBlz6VgevX|CzdiD$%^Xd2bv&3XPpc2tpMnMAc7YZs09O+#4hen_Z!B|d8{2Apl zx@Sx%Svg;yJ(rY}5f@Q+o8LD;)W*@8Us~EXtD^3w(W|^YqM0)=$&_T&&gvm(s*sAo z3*%5RDXZ{DCB(r}QDM|>H^fj8E@vQn!P!VBi|F}?)_P**+8UAZn$&IBi6r&f>~OKc zX}jgf(=K5RHwUI2MI{qWC4-~(;HM!B{1Z);gYs1If0a=1-w#Irn^F}P`ScnpapaM6}{Ie-S!%r|Ir$TBM- z;JD>SD_*I0zlKfegaJ)L!Py!I2nu9IIDBP}4oen43#ztUA9Bs{i(thScU6!D7NX?j zFa~}-W}_DG)$%dY*fN_6-681bbKvDbdI$_!$4rEyVW3`S@Ywq*hMJjKySaEJeXWG= zvrd+x|LOFUTzrxCG^|mzMi;Ek_Mwva1#L7BH&al02L5J{f^LmLg_)S3ODIKZI%IhZ ziti*Zhb)%)9GERmG*kqwGTkqXHNIHefC~G>*&vU;|YUgh&iH4J#%HJ#Gi^RnJwJsFQ5(T}^ z|GXJxLJN6Q!KgDJ}slJjxoAI}B~dD>C1cw4V9M@9@o_ zb~E5`XS^i>De*F;k-JP6k@L2>rF$1I1872a$_l&w)x{xK@P9S|&INlkGl>cwR(yIC zY5ag^GMreKFPVbSm#0#tDW|XB-iVr{QykteJA}0+sxFIvLk9ShY(jID+?8N`Cg1`{ z*ASRqL|x5*ttD}CoX=8A9o?6$5@Pa1w?IO?X{RRf?czWlGCI zwazTb!v_2v6#h@aK$UaDH`l7|4ds-t3QP*UbUW#4|7sHo?v8LF@i=%MHStGbLMz-?RhaVAPEmznvAx0P!ST%oY?d>i zF?sk{`WU$;q!@`dIA~C9x|m&%_IX}9DIGAe6E3q#T71c=j6q6x`%1s-CAV(QR$g3| z$=7g#`0JkfGkSdH@j`qi5QGjQ9Zdy-e0wfLZ!~9ly?gyV?n9GClj22EwQ`VTSk>6e zqz8W~s}W*;~v!#b!7!dKOM=PtRqI^}rZGWuKwk4b5Npk5|eqa>e72h8_RR<9xLzavUmt_%RI3!lE~Y+TJiZ3U_r4*@ z{mx}Vt1y+iyd6Y7pH(|yKJY-#A=Eu`bb|)ExEt^co{-2lkqk|+KtD=}D=Rh6G>gN& zsrw@L1v=LH;?hsM&B3XWKANikMI@Md3)8)lEY~e@W z7QGDE$gAB4B|n}wij{4^qU>gY;l7%+E*YFne3i&C5tqYfQycm`-K>tYl9U0>fRf8Z zXG1HLL2Mr!x3s(lpmn7>d232p7z{I3k9##K_b-+hzc3@(`th9MKAvk%=2ysKd(8+r z{gMpugY4pIEWD-pF8iO0_$yIJ@kc1Kjz+0rgNLol5=-mD<#spw%H=pt!O@qDMxxf8 zhZNp#i{*$NNYq+cU?G%#qSykBvN7bAsMFY@k@8P{RpBbwhGh=OC5bvfNCdn_Q1ZOqJ_OlRzsNO(fYUN(Nc?_; z=6YmyH?O%pz$U)F9%oo6@hcf7F`GxTtsvH~L<9xBg2mTi5PEgc@y|zvtD}GJB3UqD zolQ|L`3)*b#*3c1mfHgM%CERYz}9JwVt4zcZA){&_eld8QaG8Pg8bBt z3z>{Ft;S;4e2*{b8a7L-V^Pb1sp8I1Gib(xK9;pL(FGaC7Qg~ zYYO`|hzO1hkk^lx?m`6#BZ*2$94u)RJq~m92lWJhIYW-Tj9E|YrgVJh&YL;Tb_9MdcWS&nS3bxa75_qeWgSfsmL9cfL8TWQItfxy( z`<2)YZ`dsUM9@=f7kC_W=p=}P!~g&Rneb$Edv_Q>lZYh6}nh0 zh3p`H-t?j)iY_MmbX+B~=FL`TDveKE^Y~ItO6RBg;(pjaZ7!_SCW9=UFn2}_gvbVY zck2sZoFxWz;@17bFoDzgvylP2;$i^KvmVfD@04toR#9{0+hr5h^G*JG1(PU@Y#H|r z^1;^a8@zA!V4L$lsw1t`Z05d{-r;y`DoJJ?Q2hB>Hm7CLgE0V``;+4c_+KmlEI?;{ zefL*$;ql}3$^a$gTS55W4bJERQi~Rh%KM{o4Xbrcc%FOobMR;$*raxBwp*&WS{J18 z^x8A*ULPA={b}ffLe%yfFJVLx1%`PK9n=hw+JahQpfieW`I9Nue=!G}0?W|hY7R)?+Y&T<|QZ5*r5xCG?o^5YQVD+(Du@^e_s!+^CT+Fi`?94j{Vew8g>G5sHn zL~2fRPz?^2e;V~N7&@m;gfN%RFraeTU8&4iiK4(XTCW zSbB2qU9tO~F%?Ai%RelW4Fyq&ki{sVvvW?EJ@Gw&13Ev(pe6g_X zw#Ht0$@H{#BD9~0Nf`!3Ar^b`7E6qe@4Nu^+3^8G6A?>q?~RdSZI#xe+N(;yVGA3+ z$1!T}H&1qJyv&f0)4C)DcihZroqkKE)__6r{?&r&R*v!JZVjLJlF ztG`e|ksY`4*cJo|5i z=y>W)59T$yoV+eKDBd)*v|9Js%&(PO9WMyE?C{bSZf_q{bw83C-N{Q!TRe7aVHZv6 z*L}b|_(F!{M`kDqQUeei15r#Wl=&yvpxIfcGEjY-II-z{22mpGg5hOo(tAqJTAKyC z$n7cX8Q_@WXX--0t|%whncC_7;JA)!S_l;D8H4srz4yHbxitPGrBq3A zQGA*H(p7odK9A%152{11_vIp~gq#g>l{;)^k5qQ0h9xukpi6FErmX*HMDl_A4R5+# zXD&bsyLxWI>;lOkU$V1Jg`4t3VsPe$Suge{lul8235#8Gb8@Jus78^1nINs_#DJBb zVHbJ7fRw+_Fqt`QsW{P?Aqk{}$g?hZx1JEGZS6&Cq(3JO>*w`hi)0U&! z3c8jJ?t7dvhuA=9VeWkk zbx!ein$uG!m?0BsXyU%P@y90uj6wP{wxh(SXF~HnqocYmgaC(d?55|?t2<&}X+P2Z z%pVr?Sus-R*c!SpN%Zt4k>g5rG@=;;f=QG`Zd9chXE_ zEvG0lGW|WOW(@;{#allj^9Gq+_Qs@|RIy z)j!xh*!aHga&+Iae^;!-;9~T5=V7Hnb;?IEqUr%+p!}-Rye%(2V7v1{sxlhRqd!r z)$j(IB^j^Y0&@}1kWDb@RgxZDuGsTIV6w@T$80ga@u-qc*h;Ho8&W`U6F%sOYL-bD z(yL1tX6^3oj;(+ZmEiN+WHYx^K-&XPSsDvR|ulmY_7Bm)luqd}>$o49zCG=7=b@;nbs-^&Dp z$^`HbyTh6^{+Q2UQr*Kl3vFQ4)R{EyvrB`vpU;y%y^mE0RY`l~%Jt7ui;_;LuCAWH zASmFW$$u^LdHq)b1r)3c509Wwm2}~dV+G#pQW|)QG~#PA3BP|^xUab%mq#^S?sE*p z+47PB;(_fqao97p+!19b`6Z8YRwjAx?7`XX$H0YiAM-@ngzW5J)+Z4?EWY6z5dBA2Zaol4mb<-K-|aW zMkX?{ciXCFYwOfjQ{i{<`F_#hQSDQAWBb`Y(j~5sOTSv@%wW~9DeD3Ts~K3Rry%)M zv4&o}hV>hd+x>+jORfP!LjvHyCM#`$rx5uRd|r#e;DB*k zWy%iW01lWRMSkEDLXQrjd>L7RLwt*hXG0H(j)_4;CH~+FIq!`vOi<*ByL_BNk6Z$qnm9VSaxpia5CFfj1nOQ!`)KV4CS^e!kUG2V@DM5NPI!Y*cDaE5B3Ft@UN*_gQ=KkEr=t z=AVq<-{I-M0q=hU+W%q>|BWI13$*`L{x3WGf5R01HHiP+47&h!-nu7Lu8v;>L@G~* zcy3H|;IzN+X+Lx4@8)xe1~X_i$zmaP4yVl!+fG*J5Z%oA5$JRTaz>{p41L=}?ef#_Qm)$Vg=uK>ow|8>vg6A>kqT zTKP~Xdr44Ig`^-PXEb~>#Jt2z=ddx*-HDspPpsYz8 zkdOUGQYK^)zWgMcd&5f@D(3$+{HH5GEHcQ)(^yFSe!Lr2&JLYNGw@4^aG9E^9B_!v~n$Oa~mKy&Rm<##?+UT zbpvZ_bc3T9S&&&2U0Cl`xhbFbxTz`FeIDgH#B<~<>w_9O;ES@sfZK(~8G61S)xo|) z_vibxlbby_Rip*@xfTnr2t{8*c&M06k zkO{;%QvBDFm6V7d6FzL1&qjT1IAvrqsM#mIE82;bEUXNNk}zNChD_^cS2Wqk$c$&j6981F?@G}!w=s=}aV zD^I}Vs=H@y)d^r=0fLdyvx*7Kz?eqWVSW5#Qkx7}gSwd{@<)3;VT8yyyoJ}`D79G@ z4wG8?)4Ts1%!?QP(b3V61nKU=wACZ>qrp!;yPP(K*(hD8wHQ?pKa-i%7M{>}6_v5d zmU)+y0x0Wnt?-k@p{|uODb|{>biB&roZ{FTsQse2UQM#5<}#kS1wF)UVWc+|@Y;GJ zlG0d4GeoURPmli0jo{!ufO$sCZMcdXYZhwCO_Ra7R_#|{=KZ=JD=&Bo3Dn}SzRcGg zXsShaS=H6-`yz~5s*>Rp&{R}GTml>#e;l5W_&(V#k!|KBU?9Th<5 zZIsFr95-RuSi&$9P1v(aQ6#8JjDV-W z)V`Xq{i}0u(`x5cxl!$jW8bk#F73A`6Q$Gq09Z`)lq$9w$b`!&e1ERd7SY?V&AX*I zmc!e7x;VD6QRHi`DuVJyb&zQK{>5xr69}sZ*4Wrwlf9fq!0sGCq`@Zj?Q|&Vj-TK! zbLUZ|;o#8d*sj>1mCp$kZ>M3>_0ccT9pEIMww3;T+_M(z-z74XkGRp}CDCylDz~WB9Y|p|n5iH>m z@DpRfj!Cw>PggQlK-_Hlyr6b_Eyx6T%FQ{UGH|3&m!62TB~FPe7#Xn;iVB+d|J7l; zb@q>d&KmbWiwXa4DFTZ>l!pXk#o9^P9r4j9^omLbtf$NKC##`f*+l) zYVP@BCyF#x0+%=Uk-egBg47SGd4=#^tovCM5_l6h5vVYz(?UG@`UCL#&6f-Hw{g$@ zzMB4|1gQe58W|EG9RYd}9R$hmsZti-52⪻Dt&5*XJORDh)`W|ElsRu1at5#nNTk z3TX!i$5u9FD8tuBfr)sEU0H1+dBfDl4kMSi8)==Doc$88 z-yt#+jXqHJ6!mM>z$6RMv7Tx528N3h$+RUfZ>N6e3(A^ND;pRA2AMV>SeQH$U1pgx z*!}1G!`ee`f~j}hmDzknpNS)GDlWeY!U3+QgJqpCS8{Ne+F0Jx(mX8{6_Xsy&FFL) zub!2eXZUXB>SM00P#v)^k;>hEY*i$8@LnbV=2l5klc?*Ovaq~x-xT^a%OYzCt1Qgs z%{+>iJ@3tV!Vk8}Y%UH;jd&k@RU*aS5NU)V-+=_#gduY-G3=KHuS8W&FsWH%!I3lz z{&iw;FMALWx)DCWy^Lv~?S~f{GV^QtGAOE|B2Cmil$ji28KRrB={biRRNg}V9u6R* zf3NhiAu{*@2PNip6w56$qZFg?QWW9u`FL3gcAtxiyb+PN zdA&##Bo156(~Uv4^!vr8viC&+Z~=HW~blgo_3*( z^zofYdU7al1CNE%7P|E4*2Gxe)ZM`0=u+cO9`XrpM`<8niS33IU^SIhB|RzNF~LHf zn>Hlbp{@zv<*$CoCj98avq=l)&Cp~pUxcCSm?ekwx}(u0{W>?5z#EDtvKc2N2J+u22(9v$*sp}S2RbV&)4>vc~sfdf295#ao3rc ztV-$tsvA_~k5(tubrcvd?W(TX3?Sk2Gh@mK#(!q+F;Y+L;f`T4ud~42L#jjkh}&HS zvd4_Se+!=@?<Ci0mVEV7g$dFfaRgZz5=jC* z*)I2I_8`^~Qa}-owKqu%-I4wIa%b<}NRJwDAE*rbr2y-q?zTl+_9lPuvlF6dxuX7P zv;TT-6Jsmm7A3Tp@l_~lSK#DposCzyxJ-~pAJN?r(jOrT-?}qm#%QaCOh5J61(Q_8 z`cJUc1aBG8{&kuDc&HAs8|vEbCr-opltc2FdlS{Ek;)46mPfPo z=W`LLcg@LA9yXWjxeOyAA@*LOn@fKwWr-k)Xa{3cSjyThb0TVy5{E?-v$AEl>z?1R z!AP@(@@L77*t{C^8huQAFf%c3m_ifZ9N&8EtCx`nEWMs@7Cc$`uiuywz5Uz((k2## zrEFu~93pidY*-v$BypdV6a?uH>nk*zq1OcsSZ>@Wsl9nxs-BYDd|!Wz{^{^u=WekY zi|;{qVFSl`1woNEi@pPA;a$Rk>Boj^{g0_mc-QaYv>KwlKgJnN7R7j%-eoVKwa#M^ zIc@;!t(2*Hc)o%k7Yi+@{ylq$9I|sovTn%FOs%2q#*Rh}|Hyq!R!W%SaW#D}WnOCL zyoe5+`j#Vri@8uXa=KRQi2Bo{gB)x8#EtRL;IcFFMJXiT6tlS_jo@+9ls4^j8R)r>-hlYBz@{Iq2S| zy=7rx!wmr-*Zs5DPXubPJ)bm9-TUN_#nqg>_{p)zdh~{s-(40cvcD%HO%;oPuS-(3pA zzam)+k3^|M5b;MoXpAHa$)L4IxL7Gga3-?> z4u*>0A7e>+=Yq|yWl9I$RP&`jHH0Fm=f;<;<`g0J3B z?}&G3P$o_g=Ysq=c-$W6t=Lt7J}M89H(p4TKhZ_wY9Q3N!Z(VGB1%|u{7GiXktY%O z^O1&xn2+%V2u=0_$G{a@Eh0u9Mx?s&;}7)! zC0lk0It>O#5W_tz>4thaVcD{no-s9m{n{F8@z%9G8l z58UL7w!Jyp*^YI4=Kdtf!pPQJc{cONzLg5SrCfa2y|zFX70fIa*Y9%EuRA@9!c)g$ zZd|pHubtpRfS`k_j#Q&PUZV%k!Yz>r86~XZ$2xBJo%ymC+@Wn>7fFR~zdgAdv&ca? ze@>EF*fOG-igOUX@U}xSoyzQ5qMuy7dn(kEBtCjjHlaAR!ur7~Slv<3gDW!=SR2M`IZ`EVNXj(Ej^{eRAp+Uhn34JC*u6m3Y#B}B( z01&E;-@eF*lSpCt0RkDG;76y4hLlM0Udjlu);>?Mz&1^UmuHQ?H*tO;9167=r9hHp zwt^nU)$ST{RHp*rx!qorp=*1anGM-8kb+4B= z(>ha?;!@wmf-mCI<~>^nKuMO`*0F%&21bDEbP%Ka5cb0js8zU}3 z!b&C!yK~0G-Nf6N>uK?>a=*hcM}`eB-G&YpUFg`drLG5_lIH3MOinQZ-H z@gk|}F0*w7!}Vy*WNF;xpW}WFg5!A+_@OZX^0-MAKw$$QR<>U0ZEru~9wXoNWwlsM zT{_Y_?H8XrO8A?1ZIr*>$tBEr zCwQ7>i!(s@S!gA47FFczA0BM{Knx%g<&L^sl8%ESeClLJ>U$EXU1_%bUQNQD*}OFl za@Ko{5!xR=(Y9{L+qFjqB8^m0_*VKN3AqgXOWgx$^&UP!fKwPiTiwaCz^y7EWhPRK z=~m%fvPp8$zRRVch&rpdxi>zw%BhWHAI6ayeM6a_ks+z8IqbKP{U8_ z1E5EOq)K2qvE^)ej=YWC&Er2wS5wGSx*#Vy3LfVBRF9_C?dd@qT7Dl?rfq7QM|oqb zl|VtFl-C;Z3?R7J{ z<0DdNyk7;l#&90E?ehB}-_3+F)vkgr{44SAEx4G7hk|Xt=WZ*kUzB}#JhE*u9zR^~ zdMRZBM8)phrIxGX3SIgnphwGSx7+r5xOfI;UMr%5$#1XW&4OR;i{n$M9p-;>K1(k7 z{LO6pI^cQJ@P;ed59pTxfE>%%=bbjF*s@(OMjlrYyW|<=qkf9i|7cqWNpd%cYYEgGUQR zLp-5C!v!#H2Y{2POP(JNqki8;q{15x{3$WJepih3ipEnazb^kcxT1GHSv&hFA|jZAa0h^pVR^^F7j3@w{b;cmtQj0cP&XM@QA37OCIo zN@pSBX(TE}l4Oq5kkN+TDGVf`PpE^O^Zj{{Vf`UtON^fMqRJa0+tSKz1%>n1Qa6Yr zc9`v|3h}>WVPB4BuZy{f5vhIOuIpb&Hty^%H&&hGYwEX}gu+W9%&X&Bdbf`b(SyVDr&BzTYb*;%6CUKsR*8ASeFynS@)*$iVYV7E0x~xQ9#yt%6|Tv1pSn$ zm4gDvNaIc_Pf5{F!RUW{{$DBua2Hr)#>tgoquBrWio#QJ_gux)jV5sJwXLniFNtK7 zx!X7w>L@q=GeUO)C=E3ey&K_YAu%krY>c_UC}?K(e=YAEb~b&SZSg&5WZ0YkGrQV= z!w15Q!{aW>{0<_bawYsdQkQMwtr99HXNOb3{Mr2E z%ob4!W<18H$Fci?{`epd6po}d7F+Kf(!B_$BIcr-Xt{*$JRH&x0psaE-@ijyk3|E2 z+ATDq&hn+dSHtn1Gi0wZ(?oi)-iG{;(r3qc-^ezO`?JR5h*1SCZ3k;(Ne?SoHwNpn_DdZWqfLk2g(E<60{Ia#FCy=4)Yn5 z1))K<4$K9!slmF1R<9crmImnc(61G$C7Io}yf&Q;7G~9+pUBuRS}0nWsSN05p@BxV zxUwk;*nVH!J{>k;fG~)cc%N3xbfnI_^?volf0|Gi*BWHvGbu?3|xTa-YrXBK?~+;6&epfPuMu?J<%SsA9N7l!u@< zJ}}hnIDp?~8}|8eiRj`nCjl8tk!_0)mmdv#*eh;>JzV#0n=g*!H&rq({$2|DRF-Wd zf_96&pw&Z6gquX-xz}Ejr4_FE3CQ@68E|1zG872ul72V$3H-K5%!?ohnA42gRB!5GL$_S< zsfJdc`JBRs+ox0{f->JMxx3MVIaHYuGxIWA*3-=HUU7LI_VCzJHaz}*xN+K3P@~`~ zd68sq@gnojirJ%r_q2T}dF)4hpYiQF$wVm>qRb6$5{pT04-YPE!}pWEDhtCOJC)dNc&<7FN!QUAVbUW}uHLTbbnoholpboN@!5IU z>3{3@;hxjmQ|$9mP`{}4ODRA7lXOB)u$Mi%oy;asLr*K_gC6B;f>8=fg(I+|i`23UXe$T*ig0ve_x-PHZJ>Ju&wS ztXD53_W~!{y^~)OlUY6Epd5OpCGN4v=N+f3EX(XG$(%aIPMyg9tq=>Y`E9s&(}CXg zD`1jgBKPTDna?Q$Pue^8=>}I*@-}=&hgo4-Riuw0bwSC;x3%k375XIxAOY*Pg^C zVIZkiszyr%!=o~18z=dqHh;L1bk=3>fZN4K!`%w1E%OssY)1Ecof%$h@+IqN#M9_9 z9YuETS4P6mJ9~*mM%iFgx~;asn}N<=G!+C5{;v1IXcN%j-s88IQU^7}a7ac|-5n|P z5I8>Q^QsIIF_j?LK`q^rE#COF!mjuUe$1xTyqBM$D>Dm(<#2oBge5 zg0m*c;Os?0VnQ(IITN`&t-F#RiiBm9`@P16hQ?(~g+o`+5!wnGYY4HSAwLS@fN-Zu_GAb*&9e4ENSIJ;=wP?Sj({1ymgvrHT`T0 z`6$;>(pvn*4qiK2W^XOE&G*LF>@3Y80orb?=kF%Tsr+Rudu>*$-lxppj)zxt=B~lU zqBX9^QpXY^y;1Z@USD1g)`fkPGEUO{f-n`a-kv_BNH}GvLMWt>hp2#yiV(HH4yl1m z9joD3W}?t>!g4iH(&2o^&GdvU()u2=0!jPH9b937J0x_b)ZP?Z{UZQUuW59nb&QGi zuIf4>1*(5n4;^}Dsq8p4)l((uP8N+ah!Qa2yCJNwn~h?efud6YwU3%N1d}XA%~B$H z&kh53-MB@U=d;Ujo~s>`W2=Pir~1%tSsz6bF8yo*s-R-u*LA`me*)pEo2AJW2uG9E zdy*d4K%{SOkGV@p^J8G`;KUuVa;XIjON;k#NQB%K-HkZ&WC49pCzb&8K;-^!tDJ=M zi{AExOu9Y&?@^HQ&%%cW%-O~i)`goX^j-zk<7NlkuqM4-C*c|3{N{UEB#F+zR1jc` zrOmV@W-ebqR82+~VWXh(NupYf-!6wN<1$i}9o|ZYPaHnxC-pJ>=5u_{cW^W2(}M)1 zc1Z4pH$iUf`Fh;EC01B@^in5%_OBco3d6FD!;TCXAn9HeC2>MxhMmj5`pxv*Z1sdI zV!z-1T!Wj%7I&{z5+O<_Xo-b0#u|GW`9 z?0HDwZ<#FjU<-7$hqez#O{)skD3FG1vRW3kuczMTZuSVWTYc^7Ag zxSFDsAlsraF)@HBYnhFIlR7;-zm3_h*u`=Chi99 zLj6g}c3q;vs|bV$p1nTCs5eLlzgyF3gFL%Je&_d-Z`_PAeMN_)2S5*fVMG&HE1=o0 zdcBwFUjF4_(*6gEhbh%l!GD;(wf{sBMndLR(BM3tjWvO_C2_Fj!=IOQSM6mFPIjsd z$>MX+B1!mdf9HR{(= zDH-I~jx`gas`f!UWhY4&oC#rMuer~pVIaDC@id$1USN786tAP?ptX8IV3OD;_Fc5t zwIvO&@3^@+DUoe;BSvl8%7s8J1GmPzBvtn0KF0l^RADZeQ2Z@aM2etX;?%GCA&sgK zu|To~09Wj6zU6A^<2D}xL>HXevbKoe_G)LQJtC0$t0j|2z_7WsAlv2po>CSDwuuwt zaf!`k7Y(M)aor=|J91PxCOXLHBV7=sm+llq;sGEso8`v{dp!V^qg11;azV;{Q@#xI zC^QlWshz8CeO`ALf8(!_nHzyVeha|;EL~Oppqdlz^8NQ3EmGDKg>7%Uz}>|Om>mbw*)!_ zDs=}L&a9Qs#|iyChv=!RCqwEnXSJPN!}RhA{ixrjr=*+YNtT4}NzDl6U>10^MlMCtG;C#n6f~3T+;Ly$sf=hq^o4Sg+ z==pJ<`bRL3XtFhP6?DYqseacQN|`8V_lI%++Vq+hhZ;gQ^ug?Hks}?Xdh3IY7B48v zQy!cdA}~&ZYV&MpXe|JaQ9)BNorz8%MvR53(mVH2-lh}#d}V^P1*6)-*#z)18V3QP zA#qw<({LFYJ6FR+cb;oU&F}USavVkrcS2{6lpCxJa9R|?>*$G99xm=CeUeoWu@ZtL z00toZujo;S5Q)hF>RTyvtyt+QE-ND}&1!;XwtrIzWRo zu)%JZJ?}XqlQ4!TxslP#u~G8LtPRd-x30-Z@%2YW$Y_Pgbrn-c0UVZ;K#w&_j{KM$ zz7CD5tI8Z8J$zHdcIexIVuo9Rmg0d_yabs*%iT&|r_yhleVJpMgehf|MK&!+Rea}oEHE`Gv{k+Y*p&ppa7nr+#k)qX2nQ3B}% zYpyaGCH6X1$vD5l@XA2xgtgnCjd159S0Hm2Z$YCpJG26|kDDl!(U^aprTV)^E6<52 z#mjI5p391j-nS29GQxsP(>1g9cK#o$%Uo3qmJ>sE^hA{xDt0Q$eHYN|tPi@_sgvI} zY76aOi)0guBj~ax@{^zz>yF#-wH<8TCpG%{wxwO(F3KjXC|)xqe%aH}a`zXhk)@NE zjIMn@l~P10l9u8XD)6IXkImW)>6hF3?=azYv6apQsT@fNHRP)Yio`<>vFx@Qtd9uu z?a#9HodMNy8)RVlrqlFTvIZJr!R6)$`6M~=DzXU;y<3Id&Vcy%yFM5-VTd2_<{sav zL@?8s-5P@iDY4L%{yb%>sAfxsQf{sds$oxSwD-%KXG2O`%IJ6Ldl-{zd8W*Be_Vkt z`Zrz zmw)b5qObuge;GA58?(TrVpI)%6^y2At#}3q%?I>a!1)y6!SYclAz+;Ic>>Q+2JQ>b zqx~>Vp?=TkL^0pW_AGG*vGqGHOf_E$C;7@+`P+M?L9Hc}3efc}1 znub|uE2g(B+=vD@muI(2`=07y?&?_Q{uDZHDES}B@|~dg%Eb4of5{XF+s>PIs!0;) zI{?eICy05al44WZg*`k+^9G|S9z=cwvt0&?2j1?jM*>VYO44df1rxpL&A zWD>M&jC@B)YJGm#wKW@OEt9f_f3Wxoq)`TQ$&JHo zx9x^>iRhAZ8LY_R5TPvcDaUdAkVGo!?{|x6&P>JxsoCmqTqLr3ET6i+7>EKxaAPIN z6;?cF@Y{Ud|FO$_QMr@tf5K@{7LR5HpMyUE5fZ*t=*SDB*a{V19AO^G6*&AxJ(~GF ze6`czA`o1BNzcY9pxG4O%TA4g*YZMN*UR)8pzH2yay2yW4Kjoddu4@aF#{n`))wO= zRNKgBkcn0^jmC+bB1@uB@y9j1+!4dOoWvlzda=x31(psZ=DpPn6B z9c^9N-Qu~D-}ZlEr}2BOzy0mk#ddGL{%szIPJn#E4u1Y!vH@^#smvRQWA1yjAN&w2 zxlA|RsN%oC>Ix6$hVNzVu?|g?i{_zmj;b+muL5BJniL(qTh=k})dyvv9zoqJ;hGeB z1Dm){F#8!Xfv=fmp`JnOW38dUc`6+*AJv^abLG(cw4=G0W*9c;TsF32Oa*1QBqKF_ zQ4(@cEV!4c$KdZs5zrT!@rTBp4L`3_u{_MKC?F?U8ehAE>PW`E>37{`2I6IA4$7pz zT|%DD1{Wt9ToWu7%3A)MO88H^N*B4MrZi0_HqW`}t}WlbO?_jA2e}be+a;ujp9>SO z`7^c1Ew4a=7-W`-Ujdg;JJ@6N z6Gu4=2Bp=vz%h&tp%~ZhKz#94y#mLxWLtAah9?5M+H!)fQm2NdBw;O4hrTQvR+{j} zTbkts69$^aSii)vuk~j&{{WCPpLzK zd7{7voVA@PFkQHvbwPD} zzL^D5_M0U8&o*ty_@S;#4xFGxZ-NxGeg+6?DUmmoyyGpuDfj&>?IGO7g0j^||j{k?aw+@Q4 ziS~7a1Shz=2MC1V7Tnz-xDD560w zwo$DOL`5I_IQ1y1mkXVkbgG#|Se5bQi;^n?(JYjh7ZDY4^m^M+{GwkL=Rxz0`{C~8 z$*J&0V|-Q?FrQ!gHskaGAMlL?3&=_-BiS7d-oS0rH=k z#y=~U|L!aDXI1i_lfN71yd?j~`DM|6)-?Zp2LQCZFqW6K&Mym{|DJsL?S&t_{QgqY znx`R!M=wslfFP*}H%{z0Ju?6It*AZIR(O9P{?BJI7-@7$QcLub&+rd}D8mBGJk9*+ z<;wbnmH$By|3C1SkZ>b7@oD&d4J@h=wXd4ZPO9T}zKL@kX-{lVgC4+6iBFK4H`+Ti}WUDBCR$`Q! zW5*}mmYncQCCj+#6eF(N+uea|s{91Zh3Wl|$E#K3+LvS~^|XSpXiLyIgcUMDw#`^cqXwQ-gF79^-78D2_Y zjURfGNuN&RnYpF2fkp;AKP&Bd@<98`;fGPL=6k9Y$)M1XbJhP7d{~rwfe$k&I_I;W zyyG9wqee#?(iL4m%NzE6$9ygBRF7aF71ad>@=}LAkT%p4FLAqVnSI{bTliL^J$tq} z9V-zI9qUO$QOO+;jrs%C?Y`qsdLW^fn6Q{-S8x7l4@iN4tVNo1>X+zZgf)$uyvM`l zDG)k->rQX-`1%MC8nC=JP#KymE&raajcD#;StK1d=I7m!E}ode7zZx%*aiA0^WJp3 z>K&UD<(_*0kp1#@@_uZ*%%hD-W@nV+WL+DWr14IEs-3N0s9 z1&fD%bR;|5GV;~l^p+A7%&&8ozmU_q zDD!rHq~lZ_Q+t;t4QQ)FzlUmB_LA^P=-x_WJf%NAH>Q0S4b1r^yG+uihb2z~ibip0 zPVvCQ>Cv-#b~`IqrM^_3z79JTb`Kp4(L$>b!t*&LvsUSk(%G8XKG#=Y;2uwdd-g%5 zvhxN|L&JJjY}gd-J>zk6qLX5sxB0pBP4r3J3E*Wrrs8e7s>P_YQNnwzv%V{+r=g`i z>zwEj;#au%Tz$2ZdW+7^ZMB!d_+i5nQv21V6+%PxZ$b@RUZiTr*XPq?Fo*4}0Dy%k4=T{WM!Dv<@cD(pGI8W*Jd*+D_A z$7gV{vPb?))P@PAD^Wi+QNj;Yd;{cfZDuS)0e6bPLY~Oa`#j<*)!mAb7bQiwu2idj ztor`y=q%h$G#KNJRC7pNVO0&nL;P=yZc#BXc57jIl zqo5x`%qe@&_vvJIy;hOshHKKBx-8_P!R6syZAP4S7J!=8KLQLbC$pd^u*-6F7eJix z>1LXAka$xlnnX)f#@#htlU5#96%h7UJ4xQ`_X2CnW1Onf44iGRUPnti%}>0Z@4Q^S zT5}=h_3}wU(~0|sKiHWTpvFN|y^4p*f8~9Ve*65v(qzH(>l{jZBdYn@CEa!h`H21|Q~BiLLnRopa6H$d6vD z*YI1EV+j-}Q4y|D#Z?I&4w&sLL}l`g^A*j1jq|l%XYBnF(Lv$=d;Pop?#lUd1bvoO z$k?1fOTa0w#{()zA=fW$#+err?c5Hol4SUk4N2{3;35tks>v2=xTUIizZ5RrJ3^{- zw=Z-@I5_cQrtd&Qnho>fP+8G)8`yh6+d+giL8)5er5iKnTK3%B>}IkG(VC%FtMX1t zFrBZ}J6L{feuUqH7$$lA4k!f*Psq0!mcGIJ( zuV>xBhlc(fx7OmgVeKbsppe2t1jNFs++w&|NovDXdh^|vWs3Q zECI7Wb(Mn_t?vl%1v#b;{|sB`F4ZmZK@rOsFL+JTfBC{e8$jP3;5^@9qF8qwoOm5# z)t)Mwdjx!7^K~BmnewgDOknHGQ9Pj6g00cC8^=wd>-$N+Ef6%a!meN zV-qZbEtMzQZ73stmLI2$8QKkzw)C6KXo=8@m{L4aWGP)&Nzi49A~AGz$u1O#QauIK)XqNY@N6R;b?J-16X{xC_XLktXSp>2<_AKtLM1%7iY?eI+a;hOwGu>=nlxl z3z;3$g2nbn_vgPxUwX&5`FPREm}&ubf&dT)0bPU1?ZQ_@WMDuO?~9{TT#ulz*~UCY z<;im6aVNeAs|4b>vxvT(9r+%OTZ+V(yQ!^JcB%xF+9yE}y&h6J9LgD>ky3b@i^h$OMf-kgv@DVO|o3~3}zf3+;Hmx5-XGi4!A`? zHT>yJb1k=EA<`f^#>NhXN<{I+^)FJO;{$LVlCrs@uqs7LKj-%jO*~${l#l}2QKF|e zb*F%@Qu7yHcSCxERgy~4hB$bh_v)@?2lTUbG#h*VtyW094)Bw@v-cs9@9JMo2Y(vK4JNIBuYfypyWX>49#S=v^=k3cd$T$(-eQ5Mf#89^!U_=QH^ zaa_@8()#a&fj@azRI*bwc^3#T?o zTzR#-sYc!2OkzCqN$4C@!mOjXJYJNqV%ES~^w6NOJ5Qc-lu2O|WL_8}XbxLS&nw3AYv-i2BBFhEsR)uGLg?5S2#8(OOxU}PB-DyAWO9*;41uZ8uDn2g0M8{yXb?!v z*3RCD68SkPW5~kx^jJ{)$!taaSiqPTip>C)L9~S+%w5$S)NS*@5Hq|{ zZ*UIeYi6l9j%IMw@XlD7f+(F9-uKB=xY(}IZOi0m(+h8bHRCG|>P^18p|kdSp!$^$R$-cvI4n!yGB}h^rncSh`1?qODS& zCBfnRZ5le(_jKO^*TvU;Jb2FiH^GQ?{~vQ=ZZ8a5njqR9$k!-|Aqhm()B1*`GEZ0) z(IFizYk(!_aW~kgwa(dF3#2m!AH}a}LGKj7{mf{Gkj2{n14^JLahw)1ju2{Jesua2 z%7MAO?4|4u5DhbUIP(c}3?Xq_g!!Ciw$wPZor$U1Lid8^26Im4i>93WIek@sD_cOX z6T{xk@aF@RK2{$fi5jA#vUnAV1%aL=1xdFK!L4+XSYY})0e4p3CU)tuo+~Ytj14@e4(kSpm`FD0rw_e&7eX5$&XjFafma7a1!REj3w~n)o<~aTa09 z=p@pcPp)x)tc8j)^SXQx07bC~M*hdW5yCP*&kTa4zy(JKGS5k5@MN5bpqUYiBw{!3 zU-w0u%ngbEnhc;ybyd!N7a}Tb0UIdpUZ}T=2FkE;gt9OO6F?OU19GG5b6#1>>T&)f zA0S3vgr9`VM)j1Ek%L1E-p1#@OY|Au)vYW%(k7a}nxF6cXAFuENCpAQKTL0Vu|bL< z_fRMS&g5|X%gB?!I7P{0eHn7u!+MG{UZG)3s#v|qD+1t*`y8gdbH$CZIOgwE zpl#x0_w5C|jU+37To{IT3^P{SjTU6g{ZYE*=6vm`XIeF|wLWNnp@AF{{(?5cZ?-RZ z1dp0G_Rux;Q{BOvEK)5Hx>s<<6^j|q4{fIS@r!BO!)0?Ub!ov$BD!EuFas; zYmYV+f$#t+8kUyA5rUnMy@0y`X@1^K*z#bi&BsS8L?X1`!cUSOgi0|=lQ!D;LU{^w z3}^<46j+#v%Ho;fxE7LVmjb^r+YWz049bN0ZV!jW=ot9NI46n5u7y{kNVs)!;E=NE z5t$Co__&S@h5eA}tXS-QO(>7)68|n$t>3MO){c^54D5rMGbi z^?b4yRDVfnl2~0l|3+f;v zIyd!f8SgA&kCuPz@X$1h$)2@K*Kw^ePQl)Sw3`s4|-$OfR5l zG-*^z|GG9H$vluEhXK=d{ZIrxt2f?Ap_n@@gvVE+1RHJ;HE+m3GP|Izjkm*RjGG92T2<$rLc-vRB;lH=45%k zmx)uM!9QRTzK*XBD0CBm5;KaeOIXAvcPtj1^%wgRDS#U(85SxNfjRF>Pp;np-9-Aq z54Nn}GhWlBVUhUje1Bba03YlP3v8lftDA2|7+S}%H4qs!CouBxF5{MeuwazDTi^At z%y$^hbK=_wkAq9G7^X%j*Zt66=M|nCe&lPh136_%Q&Ud2S_YJ{ipsyaj_l9z#N(l7 z5%{1$Q1wItp{2|IT{Znv5?&VV1ZnST+p2~l4Ir+6NY(eF6k=}2<>y6{Ab}%&h;wm4 zQ$*bcl>5co`3|PdEQi^@1C$jlc$47*C`rrUwfWdUwGUOJ1d}SQ{dxlL(Mkj}Kwc&F z-6vIhoGfH&nk`@AZxD3;!g*8!$vRu}+m1Hsy~JWulvk^3MXz(1Q40K$n33i~9l*uE zvx0zO!Tin_w&+nPyM@aNH6{A+g%)7#LFhvMfU3*vZLK<7G*&I<7BXG!AVa5E7gE}Q zSj#%wW{E>xh-<-&&=NQZWsLDeq`^aNo@Xs_Qmvy=R^d&u8N~~ zKfv~9Jb!xjjSj*s>HRrAGER*a>;z(wogZk8J)+WD;``B5)}E;P2-LHxT_rYKIwWaxq%}M`B%ZXEiGO(DzX5JR4&IM{I071;R>=%%X z>$?|F#p7;qeZIu}3ar3FUTSj|tN|QBRdLI_N7(`RXIFu@Wv;bs$hs7=W&6d~l<_jO zloKb?abq7!En28T$}Y-2jdNP^!C~w}nXEOoT#^Dw{*!7Zi&|aXE8}XgI*cGFV@e zFkFTZ02CODzKcuvHGn?w@GwhMZ5aWCO>*D|_osGi4=bnlOgKD1@#wNsNBLI8Y@{v< z2|sJ9RwZ;(+Gkag26y{+cqS&d-><6XRiAG6;?&1qtFH)CyePn5ANd(c5mS)W*fi`s zI!a;d&rUw~;|voox|i_R>w40BrPQNqcI&x{2MU=VjUJCbHYH5&ypniPk)`mM&vWO2 zx`yV!ra~Nycfo-81xRy4UWKWY(k(iz+*{M(_jrnhif7NL|2*&_H~**b{328T-J|q> zr9}g)7ygI4|CP6&(_7DdCW@LC+Jm6SaYOOhEJS2w#-S0#WGj0q>oojeHkk3V#=GY# zU@=e$?cR2dDS~}2vRDg+O?M@ZiGuhx6oT;dgVvv~J>5Nbyk|UDu3IL%@xENS&6Kzw zH(oC}Ud@{x@5J3ll7@goz<<_T6okM0ysV}8k5i;{%Ju~^!;x$t?w6GsC-MFv@9vcF z>0-YpQSZO(;1*C$C}KRGFrk1)>1pFuI#OGds}hU%vX@?`JWxP-k z@)!w9bjAPeK^8Om-+TVsfe485@1_6!K?oRl@0Z8_+W}hq%f|wjxYi0~t{ayvKbNU8 zi&?4u&-#kgl^a$psco};+^_X&ADPD-Y#IooRcN+a@ExzAf!=!xP##Z+hguE}#=vU3oY z@>p(ursqHv4fNZksQ@b?Nl87@&$##@=7gNrW|asK>(d^V6N-^O$o7)!J1;fl{! zJ6;1>6e$|-Ehm}D9Ljp;qkloBKQ~d0k$Ub31E?TrG5%YQpW0iE2K15i4}Y2sxou(JkWsT;Jha?oTz2G1<&fo(~#Pfgi7k7m{_Nmp^;W z+Oj|9xj%s4s53A8axo)Gy3kzOZ^7P~zhtjo+{D^mUf7tK*D@vH^{^XkV1^GWwY&9_B{tlnCNJx1W>72vu*c@bfr;tjaDC27=cPEzN5lLUkoVdX3jaNm zcIvfh+vuX=cuqv@8$!McgHagw)XTTe5i2%V)^yEIvr6hMEGs~x#zh3(>y)oFn(cAyqAWf}`(HUO zG;=()T^~1|9psO4Z%etyz#C_6EJenRnbx>mwiWMWrP&W>xLI7vopT?8R|3CN+azl2 zcWH(K|Bb=bupcALg>hRahCMS{WWJ`1AE<{SZk!_-L_C_ zvno7usOz%ZPbRZ`%D(VJ<`@1m_OyufE}fBQ@AaZrdJc|Q`)WH{zDNw`moKYbM_9+8 zw!V0h+GoWQ!*R-1{rjiG8hjZ4`Gy=HVK_@R?DpL&#D46a-Ws#@dD9aAQ;jt8E? z}QG!fyysJ)CRr3hWYx<^Nhw)avZiT6r0gK*%$CbC#IkT6g@d?R}(I z<>)s)w0wB4#r^u0u#C>rOA=lABrYoYH;iVk9pz2WU&W7(UD}Tu^-Y|?kCF4xMgFrH z5}3FX{*#;B@@wV8mf3i6$?~=%1dZuUj(7fb{1xgC_CHC6-FtsYN@N$5d9SlcJnoOR zFVK#Ri)Q$E?G`jhn~6-C%M!?%cSCF*EN$=fS}U{=0Ag&};XxhdPuXRer@eAEq~H7IlaPW(M%NPK){kXQ^anj3mi_EDkC%`$zg06 zXVAcf5Xz0@T&E(e7IbG{yaUgv=UM$&Zz@&93y;;DN>@my?s6(*mQ1K^4Chc{CufBf z;R)Y48Sjegh)3W%MBybYVk;Cwk4ZeTniePU#=oEu2cdHXRH#w-s2LV$a8lVam%?9e z<<9)>RG}^l?6bxfAZuhcyCrQR;JOLYQ4&9dgZA%gkGg3F%BG2(S~(SsdJOx)WSBmE zzoYCF(v4wxl>)#5+HYw}A4WD^NX0l&#rV`~nmb)3&J65?^1BGa;!=E6g39CwR#Lni zvj!x?48pONkP%(p8P8etb*Uq-w766+>cM1gn^a>V?jUi#`|V!Z9^8t)radB$;{Aib z>d8l=zu_ttE4`tB1Ql|4aO2ZWSax*+|;W?5FVNZx5Rs!Be#qq1A&pGW^J1LJn={@{ZSYh>`|!tY=@bvOD6D>_Tg3#)RJfqp87wMIBCU=`51Aj_!b-&41Lp) zE(zn>*`O98N0ix^jml37*U)!Z8hAxoml7cF-Mf21oqsNtSQ9u=;Q*-_LF(v84c)_b zYRh+r?1J9er9!R0R*BDUWcIPRcCgQ(u5c2aYfog5dkWLNx4)F!xA*JnNYv4$9NhQh zL0?e=UdfM2Ig}b`ptgqT9_PEqx|P1y;|NdsqbV(RhDvzhX&<7)-uBGX`*WCPSiQmj zA#=QC(nVGJK9iroyn=WgMP%2C6U_x25=)SAPB;o1KzIOGO&ml*)u!QK=k2K&XY-io3 ziab7af8X~RX7+SC#GQOMX!sS=+iumyDqmozHr`-bny|}m?F1FU)38Tj&Cv^=pOPw0 zE)dxUTBj^NXmfBG>%NaxY5N}Ja>Zs_Y|`+Q;|{`YG1PRH>3RG>Pu(GXOCUjR(tNfE zHvfH4^p0ImrrD38X~>$7_AKL6|Go^l6T&y+Qg8IjasfeLC1nUH*?0T8LF6=XzHYf} zX2AJ6ZskOH=wf9ukA{BjIgdoknajT8L^gE{0MldBRAa8yYr!s1X`r^mv!>)& zH?o#7yRI9aY?(8?8no!P)cbP^IjHk4)Jf%B`8n<6Sj7Dm&Y`w3%N|nDNe(-XA;r^= zREs-{07z!3H^~qJxs{;oMvSCSz&wS1C>N5;Twr*yFy5ekVa}yYfuo7=6~Rs;mR-)T zsWC8LK9EQ;&mCWc{2p0*_`UdY(j1gEXKV?nK ztA4U-OLPwWs$Ivy2OFF?K4pfgJ8 z8fFzK2rvCGk1!ZAO=0!s=TgiHYxu_FJdfQn>}(9eJv=>4#y@CxTJjXY~`5Z3lkP%pwutn9L&sPo8DDIT)lqNzp=>3Yu zj0@VIyM-6fwYrnw;uFDh>}cNZDxn2KY^mjBh373JId>JQQB-?mb>eG4Tq|0|Y-?r| zxd3J9lDdM$L!C39G5k})Y_-Zarbx6PoGYQ(ZH4X2t-j+VC$pFiyGKj*4v}QBvJ#yU zffH^9N8(fl5I0^RNs;6nQ)^Y{nye@~$AO{4 z`Lhg&LsPeN)=io~Im`-gnf0nHLz6KOIMlj{GpM%>4AHJ6yd=q~Sm%yDI5MN5gf8gd zS-CeTG#1M2e=6OvO()SEc+<@kKIdk&G$cJGZ1pW&(bkGDKQ|?atrMku>55n!{W2*GdK;p}q2kh;hIG_4Hq1cT-d-%|mthDltL&nO3LSpD0)v#BF zi198$+Qlbk7RJLFOzu^JqBqKA6cNQiBR0CEqU1ApEfgYpnJAOaAPi6%;DH zUrO7V1MRu#gdH0^yKN>1T0M`EX{a7?n>n3Tv6J8D>0s?BuklIWWr(Htm!kco(|^XT zNbaw!6gQ6V=12p&gO(Aqr&wFIlSYLR1lmHoA>t&^{Zkw|H7^ZZnhwu{^qlW=t&?nd zni&e87;VKtK*(Hdz)hNOLyPdU01{CKkmFHl@duyFn3goqoDvs(A^g!SyLw6)^TyZq z4Wc#^0{FsW>XRo&MjQJ&iRUsIbVPY`?1U8YtO5n27HzS}suOD3C~4y>-&15jM$S#_ zE9K>Bq|+**WSV|MY3pi)L26pt48lAEa=P2}`UZw9_RPC-#plipqxRpNb~irl;?wVv zeGy{@46$^5?4gECh88{?r3rlQv{??av_Z*O>EOu%-VZB(YfPF=P@J zORm2z4EJ<+SnA(dGQ^1UbD5_-b#T3M;6OGa;6HRP7EprDtuC&b^Z0N`hh2#xgcib$ z+4U%NeRH{SSge_Eci%9u16zOHvdr#7lgk`V1?TI9S3p|klVx%^c;;2U zc#E-^(ppdvSREfdkJd&K`dSX2qw^TZ0$<_{3=WyiZN!!Klep*mQ_Bl^HG5e1PIysJ z1$#=Nr913KX8?wW%LHx^R1c9cjxk5t#7*G%`!V0&Rx{U93&K_)r|}Wda?=($++Qs& z=RqF{!ktgVAjR%FoouMToQSP}M4a6l(Xix#6=wk#X}@wA!%y@p{q-e}SOd4gC`j0u zSLYG_a#{0RL=T?F{otJaam_I^Jc2gqiGmv}d5Mt<}dwaWBQT(j#DGW|GbrXKn^+2c$E4SaH46=oO2lK9FX34|R}?0O!}2=2H>vD%sT%UAMRuuhr%ctJWj zDOcuAm1{XFy?In-3ePzBhs}CRDp?NS4#6q$aR?t*sa6T+f|9SLxa%Zyrr}ocSP9>4 zMuc-@OtGTAuWc=0BD;(8#FWJfS>nXVW;Q^Kny&CnLmtRef1}A4Vq`j$o5ze(+tlxM z7zzQC(%X@zfzCEV`{5ZLg2pGz=Xz|uF+IPZsZji@LQ*l0p6qP4e+K=%D_KFseSxyd zwn!c`3Bz5;2%$?|9*|Tf_Dsnt$M!PaAK3t7s==JeperD`>6c0qvEd@!X^*j-H+4lL zypjeN%-8&%aRZdrYCpIv7ir*(LP}rzzgoxmI9v*+J$44k8?%3C6GD=NFRPMTu~YR( z62NL$k*t=RFp(W198=Zv>yxQnYQK1$N_r$d-h1ka|1_)h`uoS9kgl)EsvlFX7~fK} zLG4WdVuA+;PN=bs8);0^JSG3p+ydq?#x>2^*sC1VjkE|6OtZHgK8in*Il0=mZZZ9n zC8_8+zfNk97J4v5oRU0Ywue^d^JsI~EH|`t@`|O%=Ck!&jeToQIvZMK zkIFg%uZUhgB9Hs#oK+Q1%zK0$(5)KC-L`vMZe3GnH5he09oKwgdHgXazb`Ou&wUrf_$Omk z2cWBF=Q;H7zQcHUjV~oZr(L-0MHI!V>E)d&59$4Y;MdXDyS!-GN(&@~kb6+G9jZ#~ ziBg-fxgx~0&V^wPS>6`1rpAeTwpD2HTn2!jQQPxkF8=0sBd%Up(bF}YX&i))Rbj<$ zwAse}^v%vN@l#KIP3&+P__eLP2LZ7@Nh_kC0&U?C$ePiTHCJ&HYFi4}xni%^=BAYM zi`&g)a1?Q*j#eSuZfisRy>Ih-6q=wURS#*N`GcZ^f*(qsmybRl;T%E>7A&>XQ+VJt z05OWSY5nkfu)JQP?l}0W-oSgmzJ^42hbEY>@H@I3dvno5gH+c5a=xi7ztg5dRyq`* zz^aJdq(_+`eno&`Alc-TDd6naNUywKJ!)v5VuYh<(NUEx{Gpy$Z$Bz_@BK&8{#TIw zS7-f4>;6}Y1zte{OWx$^n3e5o)PHU+kTD+vG}G&L6%o*j2rQ_Q_f0Wr?pccA?|Wo1 z(?G_DKH|*$qw3NrOVKH_-@Y}juK4@K`NSq^_GtZdLwO7|a2kmWULZGCcwLgO`|0+bk+|Ax|1hAke;8DNL>J_t^%SWgeXjD4CR}2%7%t%GYv*#>QjlBb@1*jU1N2@y@Amt2!n;ktyORn( zwaa1sQP_c|<>7CN-F@0?P(Qqw63drcX8mk^w4nTSt;fAX+#hJs;63=X6ZJeaTpsS( zqnJe1{5@s-0!g~o8{_zi!_(Lo9$(OAhn2rit}6+c^+vt!N}A8cv!XIY67qERl$zh~ z9x34*Y3x2#6M^PxTw>iffauG|R`sWMH06uEvzU8C7w4_vcOoNwv?gp_P0x5#@zopa zk6Xw50CD~1x_q(K#%;z)9P~rhcKh4jo8rOvef}0cw0Pf!hDp0^$-?k=zwQW@L#riHz=4&>d>5KPo^w>Q5 zo`~!VhhB6)dO&^*TUSW3+Xf;fwh0TnT)+_a%FPVB&b$4YA}Z9L25xIHLZ9+qz=Mh! z9hCdr_j(2!CBUv3uVYFnvu7jg?gu46ok_8sD?AZFj9h`JBGuZZL2?hxxhmu zuWRXzcofmc)`8zgU?BQx<9ghtizwzDdxkLceHNT7jF8i5clXSCorkXY_iwqrY>lFi zLUPN&R5AHg=L%qf0q)l?c%(`x$^C9g_`utBXz&OOWK2uw6TgJrO^t``_@SV5?A!xl zm6CuFaIGZ|DNj?r18hXHTh3_lU?cCPC(xT`a|wz$xNU)!i#;q!-+DO z0anmY+kZRS{j5EC`=fz{+;@mVg_@0p%~Efsad`Bzaqg~}VqYT>EmPo54KP!LZd;M7 z1pQzf)dlA5RxxG#L%xRQjDid?P2~S26T?@ql+8|^A*QqZTI)fBne<><|u_EfNC5Lt(d2~5`1#CzX*%Q4UstV zU2=9@;DS_1d7U@g+gfLSOno2P0`$BXa|Gav3vJ~w$0LGnXQAzX$NeEpSw^Bv$v;l({{}hzfqrm)f8if64*vO=lx~$glfEDS@-4Wzp3`h*^Ca_$hQGk;?+J;! zr3=keOI7JY>ghl5OTpqNl|JV3j`NB-u>+XzFV*`dMgK3@`@g|>{{i;?gXjJC13HR- zP~U$$P&!h{yI(r0<(@72u5=hDmjAb<;@;T7?PY+Xg3&6%HpD>| z&Ly-Ff4@(pj}9R}o$|-pCRWCmCxy5monxA5t~nL)3bkGy32^8;O^%N#dl?FXsPTWv z;=iu|G!uI{4Xudx=kmX=BA|a}72w8y9#Nsjdm1}N(epU%S@t|q6GrHRB`Lr8V)`@! z)(uPle1}K0lTPtm2m?4wmF+JIN&nv?zg)j5*7Y5p;r$wB)2&&2Z`qm+%3Nj&wJ6*g zk7%N2mkDqCjup@6=J+u1)LjMkR!h-_swP-^lOxx!Pr4zj zyXtT&Lv-)sLp3yCXEMk4mqoS<%FQtuOz#xSrA43TT6|g9HZL`)D?c8GxzP^&@;=ZdSj0YUvVPTg3OOKCztg19R+I*qNzKlB>}y z!Q;23+3U8(#cc-`juxIv9UEuKfPk&}K_EZ@rb$=#^~Jau?-R?2_BsaJMavD{YJuI^ zbzrV%OIbSEt;{y%;90b3qk6t_2C9g`_h2e7#4*+@*qcE?u7T#aUIh=18`b#25dfFd6eBW98EvsY8 zycK+TK7TbTR*I+Uu5Ya?HE-6ia(R~;mgnXFRI!Z0WyYW1>b`O8{+vetGHn`_)!-xv zP;-wQO2B)HxvL*HyD{$J%_0FV?wGZFvg|>}%zQm4w3e?VzJF*bo+gO5^2?6lFD&y( zxcJ5^e@j4MlnguIYj8hks#JGrTTp*@SOs{uA@irJ+cMcM$t{q1P?)C9l)JqxX4TGW zn*Dxn##Ds9qAU4Y$XXlPvHLy{g^s{@i9)1i*>pRUeB3vREr+|c z+4~Wt!JixtcsB-(bhqaLL9UJSt_P5IL{g}4tjkx<7?Bb-fEXr?*-=W35J+sgtXfZ`1qo0=1ce9z^waO{kVFD130wB8tr@_3*AM8ISLZJHRf$2A5G2;sd zZ=A9Y5O2}?w5|hTD2)~`{&b%wCJ_Uc9SPL!? zP;&kBgR48jo!yY705TVit^#k}?Ol8&ch)qZ5*l%JRWSVC(eZjSnOY0Nwzd6`{kko_ z-x!lFdNcc-vnoRJ`$8SAZaxW}FWFiZOppOmME2d%oF@KPR+vx!XYi-~xdmZ^%j1Fx zWS8qFe-DKcY$00|BSM+Sqjfpnn-23hpqM1`hOA^7E+Zb74qI*@S;kVx)3xw(6H|Ps z<(hpmjDkcNP;L=&B=)AwAYn?8hpub&L8Z>T9@8ho?i|gJpqJVJ6Y}~?)JQx# zjfrbbZ;_nVw0qrJTZlJXABetbw26p!ZbHfAHPDUTeHC|!;Awr{KWg8eikN^i3SS&Ca}zsA z<#1~BRbFfq!+XmPawL$l>0pr$%kXpt(7e(tH2R0#M*r*>v(_rX&J z;v{}GR|i$z8ZM|#Y@rz9!dUg0S5LgnU;OHH2s`WWp#KcJj7`P5s_{mZbcBnp+ISXy z-*Du%AvC%lauQJD%&94`6A4|IUxhHxoQ|e{;0EIC7Bp&WUW$?wA2o{pr4)EUd)bHN zD6g(mBsu`}{!er-1f9zw9ek6KH^(Aog9Xp}*UkaSq|UwrE=0a3(3~$y^H)l+u&k0|DMRR#w(tG)f4o|{y0E-c%D1hUpLJCgH2hCnm>WfzC8hyG6ycgK8+A) zNdD2ivmN6QLK~={8ZKz(K2qf^91ffdX*bFL(T1Pt6aEb_oPxR4yxEb6i5ieHi8Nyv z79thl0`kBSmZ#>(RR3+QUlwF%FHp#oVPmsK`@&ygxOVGn^z7>%(W5Fkf|7w^sw*+1 zi9?vgCUZLVjP?L%M58rI<&4l_^!R^mr?Od9Yu?!JpGcU0ebKmc#-6a~Ap=x%QQM}- zp!ZPk%~=PGHi!l`0CgOQUu^Qogg{mi18N##CB&8NE~Sp*UXz=|{gUg!vFr}aKF9A8!(kNozY0%V`K5Pj(-9QJ4XbC|JmZnX=IuUWvLt>A6SnW zppNM)`FBzTPAeDFG+`jGYQRTF(;*ggL%}FHsb378&=-11Nr8T)-PBocB{djixsRn- zQGOu^mXHGBUSK$ogPL1+4nv2+eL2;wmbqm>#0Sr$f@s&n9mqO1q~GsVV3_Er(C4I3 zM+Sc|zgR?!cegpmR*6nI*B&c80#~4i3`2v@8TT|k+zcKD$nQ@vL09UvhOvyY%~SD9 z)Hu?ne_bM$>~>XcD^Dd#mPN?Md3GAd-8~RT(Q@gS0HstB`K-=b!nh>>r+e}Dl7&cs zI2TjUw1h0Z17i&=eSx7h}WDf_@^0S9~f zq>>y(Tho7|a}*z6=v?^Rj6w!mw?xW&odq@Bu4!6;DX~%ek?;`-q28EXeRWp13;d=) zoIKrKic#PaqNiBsr!Y(l|VE88=!uc%(h1H@e&g@XeJ6IGFr~BZ8WPA>q&HHRg z0-CipotQNIC(L@b#HpXwxlVeRi%~A~km4_*e zMi|)FOkERF*Gm#i-@8mQ)tyeZ)gw@fD*Q{Y4bkpNPvNhGKPJLSP>n7@Xqczg(0q(I^xI$XU%j}HXTrR8WW;G31asB{?Jcdjd+ zq3=w7{tXVSIVS-a$KFrE+ueq60hwpSH-9rwiHEJBk z_wmXxf;f(sTY$3DY@!ylY#F`8kzw4owih}<5u1kMDjK}mWq{8!QYU`iv_H%5y06Y) zRG}%An{%9xPPI|<7V@nBZfs=Vi~Pjwyu@?JBLOami%iIK+~19LeGxil(w zlTN3wuio3%DG}L(k@OH%iID`+BS3KV8Wv)akG)PO9q?dg;E&z7dx1uxG_BazUoXWQ zaBT*cQY6FvAMV~dtg3a<|5XtXrMr<1r6%1V-4cQdh{Ocx4oMNDL%O>KQMx6iySrN& zrQ^O6m+rOKUi+N=JNMjspXWaQF?CQf#vE^azA=Pd?+YhPlvh`>JoQ6DIjr}!vwqc>&#CAo!u&CSd#564{B6J)G3#c|1g z)tjguY^)4eWiT;yb^Nxq({jqPC%1izrZIz!QeMF3XcGR*dLv@fEr^m{q;CgU=8g28 z6;SqZ!ClG#R=biePSzj0*fa87Yam)Jxyr~`S*3VqyCt6l1ZA)|AKZxr0)c}FYc9cKJa5Tkb0*C8sqexRY{k-UQ-!7UO`j^jqfim<3lJTdHYbXR zA|bF98C3X%A7~^gvR1^Z7QId94uXe`fW{fa^~F0p6^MrN^3!8XMO#O}pB=2h#q^2A z0+8|lBdN{N)Hcs3^YZCQ+|PYd5m!IqkuUI_77kU&=JQ+>J9U( zD~SfZ%LB%mz!RDx$WF#Sam8BegTP<%&^h*^fTZm9qLuT{72P?DchE+gF@RMpI9Ig$ zGLq2ULaU?0=N2+UPXVZ(r}6!95Xy{z`J?+y9VP=oWMQw&w4%WiW%R4hi+45nr-)_T z+=dSRt+W>ZIon-;4(0;V99by>2wGh5Wr1xDSd?#i&-#02`v|!nug#B@M*6>*32?5S zO+DTJlQ141VE%-bhDB)mI?FVLn!T6Y@PARVdW%T26pwLLA&| zY5OmRtv*ex18pa<%4h@Nw(RqrI@=zB_xFY^ucBaKjo5f#ittZ|$l5dVq^}c18DG)N zTv(j8-NIsjJJn<47M$qK2JWb&i|@}Imcg(j;s;wCX4-4_O=mJq74}^i@^yR$xbLXt z!GzY$*$;27?o0o?#{L0i#gmvlBqTRM@?jqslRvN*z!o>D@GxWNj&`~8G(cj(9qjQl zUDU%QYS9ly-5p&i7~rg|vgfZ?go~-M+6Pjiej@Cx z_4rwC7cl9U?aY#Lt$*!jess^+{=>R9@fYJ`K*ko7V_}F*9ftG1rb6bsWW}Ih;F*&F zo{_~YdyT#=fDHX|_>?k_4!;6g>Bl1M) zjLd4e)ap~@+m7!V6TRKz*Kc~j_vCykNrFlFoSec3ry~P2v|Kx788Ia_s5z6$KBFg%F#xEuI_?-WpI03%@|)GmJ78E`2T4S^x2d%cU14ZI&@fCCO7 zX4v(;!sio);%+{Duk!vN+3%_{>wv?`Q0!K$WR9G%f$_+fe4F^>Z*4OD{b|8Ae9ABH z_8Oh>Y+-eei{&75XeHIw%#1mK#q)%#rGto)NKgskKTdPP%+hz@x(E3WnKmCeu`dix z`hAq|F~dNF#*k^4B!h8ZUpZ!-r;sE2p^{W!WA9~I&73bIMKh&K6K=^^_LLxbV|G(DR&~K853C9X@X?;%v;jxk~ z_VFCp9Dt2@Tb?!W?oXxd=M`CalS1#UG@l~}EUFNB*r}mIy%SgIY%LC9z>N&mx*o^& z$i2ybiJxGba((4s=lrLJ_WQC#0?F|DM$8Em`^UAsKHt9uHzfk;%yfwR+K~@4$lHOD zwR7R!qGyP@OAVX5A@tMNUfzqq;Dg@KD^<_CkJfiDyN=eyhT~MRzz?Ix-9Rp|+1+g@ zR_Wc6@xgN zi)`L~)hx{M;XST4V01ZYT*Ff!Mc7?7ItJDUrp^~5fEI!OpLoVUscnTx|4VT@w8%fl z?W7opBYCnm8+~&CF<;DoCQjfv; z4*|okeR1*D3Xs+3Pbob~3sq){>MXB(l3no&P!s*j)6>9Kkc8XiC2(jQ^6s8^^j>hm zT=cn{16s0Ldp#~YU0^1-h&l|Y4WBx%7z2w6J#At>U=y==2ID8O2b zwAy@gIPudVj%>B*L^YC4T%GF|lR-jygkKhMSeP8aPbc2=3McM(rA}RXqC6J)3F}Ja91byfE-A{I z&|;IN+|yYfxcTygw71l_cFDilf8w)ULeJWEBr=ny0k+rx<1}j9$U?!zGqXCyfqUuN zyR*J3X;Q@e{JT0w{zs76#g34PD>}8pS79$cyI$EpNAYYhJ*SIrBljvL4A8bcgVztx z)qBpq=kVO6wSWyj{ohDyi4QVuhVUmr;#GGRTJ+HQSw*34`&|NEe}3QasS3lzI*E%1 z;51$BI%&#?wU4aX&H$xrjzH=Hq)&j021G?`R1LsN7uZN_c0V3{5pQl})}wGI*vEVH zB|xXb=^yz>udpB$Gi-Hy(Z?im^i*fOGRHgs;`}sR8ey>Uip_Rs!;Q*{DQ<)xEtJQ#9PKn2ZZ2O*3 z732hqP6EbuGhl`m5(68$&Vj)Cd6z;0RgZx?IAh3G0#O}LN%}X~D3b~kbjG5-A212E z`t?pg0?Nx{`rqD=)`$F`1?|K+{!P&Czt`Ku$Ny(~Tm6_fq878l&{L~bt(W}Brug=N z@XTQphIfPAB)|9MM}OzTZ`M zbE0V&XrXRq`y*gis37iMOx5xfJLCnngVWXMw0n0hkuZA8nt>s^0Oes1QPos^?$+Zh zWbF8&N)&2t5}9~aA#~LJE2}dy4NOuG{>0uOcDk7k1YY|NbQDRwU?QelA@f>MV&s)r ziV;J|6+U6wM-6rbAL-E=9)`w(l_jncfmwAbIkE5gYZjoYwWCwwVd!A4q%&geQ`J}B z6!4rV{MOB?l31&X&wU)_L>%nC~6AeT7B2?mKu)uT5;+WnP8*^fmRW za(`q(!kFBJgIQnlDa1!g@Jy>^fY5Q&BI23QS{YsH%~tE2TS~Lyr2r8>#k1*YmG=_E zjq#0U568GC7tBX+qd5u-ccB+Qac0SO=1zFoO9EIb1Vi7v$1A0R=CWI|Ze9TaN9U)_ zJ)X5BX?S8;k7sho$d9;G5$f_-Ws`ui-2XP=1ExqT72U@g`yS#axmJ;;K{FOcLeays z-WNd+6j5E3Raf*gAov1$_wkhci`5Y-;Z>fj;|JDVmm zYTcF>(nlRE9nB@1G5%+IYI1L*_qpDSb=fbMM-Ki9V8Kh;#!k8@FNrKR9BL7H!QB%1 zR+qF_rNnhtPa0k15iAU2S=n&V<}+rb^l|*VK|w-EXm1{c>Pjp|?|Y|JNeAom5XGy8 zJuvY}uraOPd;UTg(_BZq=WgBbT;CLOGV0GrmQHd7W!+L1*#nI?9k(Cyt2LEyWUJA) zs#gr?KMxP%-4IjF>O5yE368&gmtAdOngy1pdr+o|{n*+xUF8DI_Urcs#i0rk48;(` zOaj}zT)A@iX;cy({qQU8W~{fGQ>1Tkf;HI&X5r>t1l$)5pgNv>1PhijOH$o(%e8JE zWF+TwwY&q;6sicxZ8-T?z^XXzf(&=(6j{2ADZGTYFwvi7$6KT@p2=(?O2-T3v1ts> zkwV2#!bcnKwbBZ_MT1iouBnklPJ}FT7VHs4ua21H(<3i;+6lM{;9!bZa<`kxb5xGM zSBT->t-#^R@#rQ2wNLkrl!39L{wcq%e6Ydtv!`uVCQxN{+Ilth;It$mH}oDOC?@a< z0;?U7>8VB)80AK>o(s7LH|gfrIyMQ43;s~!%-a6PYMeLq>!gJb$R>O zU$>Zec%`Y?j>4vA4&lP_dCqFkr65>@$tXmRe{pwSqz{@Nc@IpwG>j`sYQyR=-i%loWaY43)*q=Go1S`tU&l$jRZPGP4*UVYiWpjjG$9meX%vtI7d~_2HBU9m^Jld+dCq2>Ei$^HQ>lRdTok{ zU#>8<0b&M|Q5b!S^dPSZ&mK2$XSkNnBuUC*AmusH*& za7ij{BloJs{^7}gmzuMy0G>vCd#?`sPe0VNSQI3ouTaZF#>{wO&hYt+3^F~u)}KCu zyagAADMM+pAzzy{_D|u3cgKVfHfgL)H!+@3?*;w*CFGJrcj!m}JrVXg{4~~Rn+8vl zo$y)Bbu7{RtY$uX+RaE~WfH8>KGbziD#gBe*J>Pt+Lo)~e~aZq{Vf&09Aq*7mi@X1 z$Xsg5L@eOXhvT(tl<0(_*7DWZ=n7$ZWz9nv?0KsOM{HaqX+ym38x z6<_wxQMqSZ!1ry=T}l3q|I^pkm#d8C0XgHRU?Ck)fO96_>d}OFF7TmVkcJlWEWhy{ zi}{=Jz-N3d(^xqQV;?6iyUi4Bobi>g-<5Y`dGPs-M0A@m6>2p_Y<=9b7>|782I8br zo>lVIIlkX+^W&k>HGvuig;)vhu1AdqFUj7WoWH>++qxBOV(>T$Yyqn-L=WYI;<5H~ zyMSlFa<)K95yjnql2Fcgu1vX#*?+6G+SG#*Ci9HAINA8VwZaQ%06V_%np#EZX87W& zgy5U5m%xQDud+Tu?4}rdyO9c_Km{>*P z)H0U+gtx?$=+{zp0~o7clAC*eme-jejI#3wtEsuHC~_2upF+Xe2~xQvKKjmdm*lgY zz%6P2%#R?PFALQqA>iBuwH&UZNf8~#%grCQM!CS2nu)=)bY70x<*KpGjwlgJVe{wQe$GQ7vu2m>QruGyDkdz?d-7MjXOi&gMRu4RH@3}a1I);9Q}vbnjQ^=h_ullsQt8IkZz(8k+kA7N zse`jCexh35D*)^RWYZ~esy=$WFDY~x7;GAqV?%IV#SDY_GzJ}{wfXn|qj+2kyRAVW zzJo9g@SAl#n-mnm7d2(Xzm1-}W@Ii7+ceJkX<9glp0^FXO55-fh~B!opMl{yUBZxP z4Ax=`k26dQ9YzQ=Y4<}Jhg+dyRZxlxAl_$)T$J888l<@#KzsOJ9UU?W(8OC^WwsP1 z;H_W+|5Dj zMhrT1m)ik`YK-YEhpo@l_#u-Iu9K^aKCGsyl4^N^+V66Yg+kSN89YORs>?^6RMJ`? z?#nf4xuM1j_W6S+8028G#`fY8wg8mayfr?jtNjslvsn2^RxA>`S*S|p9V4j#IyDHO zoZNlN8P961P2w)i&Dxc}pfS;IpuYSTfG8BS&mlAKWR3t+Ha{B{V&Y!U`4yAfRKJY8 z2bT3g)4Lj0yWe-S(Z~ddtIL!z`hW}i2+l#9Q~{YS?>Nf7X#B~z67an)Iv)kt192_G z`l=vs7di)ALM4gQoON_{*ma}dp^Fwxmm?NNbpsaHzszy6)2$&>yTbYC;6(2uZn9UbAe6p%ZnGpbobt%e5=6`Z z>xo=w08L~e?N3bhajux>!QQ=KvbMnG;N0}g5NNKrfPqWHVsZbwopbOoey|Rf=lfO9URBCNB_>#k|%DctZaYCNbhD9)3%5Zz?xOPCOlg z@y8d#Vo=&Vk+}mE9kAfbb+#nye~WtiBa!}Ymy2XN0y0|rM0BKfgpf^V7g6=hTJ+MF zFGt^V7LI*2S_ER1ZNm?Xl`-8i(#ltl6xROHbQHv)7X^h>qgmAJyTap*ZG% z(gRqYuX=pk{(y14-0~t+B!rv!^Kag5{`P-^clY&5{=b|fA!2_0zuYV51DSXtZT1D* ze)(IoJNi|<2W17Q@n|991D+~Uf@1rwjb8Q1Js^^Q^+BgWI{d$xBH7CpzHax@+iSh) z-n?Xq0gRObV^fShRamrzMM zq87ixD6gx(6&8GVeX}u!frR{!8J5{QSBSUR{Hbh#$(?%C$fMsLj z9z~1ce1}DVft8t#VPPSG6l7LSP(-v}ab;`KA163UWM)GKi?bY(Mq@oKYL6JZZq)@s z&!KJFcTRd9TMpjt{1x3@KRef zLqDoV^|m#sD7OEfsGf`eNA+B6{2cRNk@)I|u0Lw$f?0)k{-~XE>$t9+TXiH$5dW9j zxf?x=|6DuA1Zw9h|G9P!5o0A$e@LJ%406lTOH(wA{&iF8r`PLSoc*od?{ZvvJ#aT7JmfES7=8TeZeGQ zWCM4uIIuAoLFA$t!fl_$cREr+^=um&o{)TMbiA|syLs-84;9AxdXJiG$zHaIyR|A! zD6H|&o)<;DAG*fJP8J$tN)jm|s~_<3a&gf8JsORC{h=uL-3D(X*PJj#=wtd;d=1Uy zkVn3!po2!2wnEom#wXM3Rb-X$E4l%&w_pq=UAwjG_%K}coL}n=1rLJ?aqnCLK77(= zom;`Dz?fo9OPz66ttzFHA7JAo-1PJZ$U3%2xg0Su*nn=4DqeeO2O0JY6YoaLzU$CR z3;OTS3W>`fp%o>9V0Yl*i27bTGMn!FvXyBS=2bwEC@6G1ZK8c3Xl3E?Z1Fm@LU6Z& z%Df2-h3tv3f^(yt+AkYD`%u$K%vkK)17N|Qb9 zmCw7}yZAFuY3wjQBqHhVH_mh?0DY}a#O%Qc)o>nr29Sw9#mgeH-LT!5Rs zLO~(dn3e*4lyuvXE5&e(*B-XD0gYFlQrfXz(g>wms}4br366P7cOCAEZYEUIZoKsH zdd>GvyfPR|>Mk=2&fp(BBIBOidp+c_;6Z~-C53XF^$E0sRK+Oss=ko;gRrli zszG}J^~l$R11l`@Q24C9Z>@uJ5)WB;wyAhq{shjY&^fHhVBowkK)a7aLNj>uRMnt) z10!O@E}UjCuEJbbYk;{j9b!Oh86jp)#vm&GlHC4utTn_+$d&Bl1WpdAw;>10w}$5j z1v3sj25=^}Wr;&<$EpUvl+kmd*}r}F?u}gQTtCf(^@ilDvse9+Yr6v_vH-(UFnE$f z5UjN_xt*cAD=fM;eSvOkwNs`r*YS5lN|Y7(bB{aoUgqlx>m^gWM;Pv__>Y?Q7L)n6 zi*%8k~VilPilJKfRL zbw~3#OeCtc@XLfsp26VUX}YE{h;YF z=^!Z0+y3OJi&-=DR_5QwTS|&y@s`^P{}gYT^tEK-ig$doN)Wk6$z`^5@ZnD6Yv8%h zm^tZBB)$UoxTOo2UHbz&$9>`d!0D#Jw*^Ulwr7cwt9}5u{Oi;My#&uty^$ckcEihIW<(;{NVR8Ev^8%6x6H{brUdX>8>vqM#=CyAsmL&@Q zxth*44D7!}!{ndSd{oF^O{<;|7TV5|)zH?JOoBl6my>j5DLQU%WGbm>#~-WG@)y+c8G^4nR1(_Kup=pbx;E396RWDISn_@7M); zA^a_7FVXoM%)a*CoQdo3pC~)~B7NV%y1atohrd+ReNT+`wDQeR^%fB#r&TV4*&5oq z@O^E*9!7ZOc7gs)DmqjRjzCWU=!730hZ8__M9dz^6Y`^i?oN76Z)yvTT!a!n-Bj_-}@YNaQ);~fqrk;-gzc2K0S!3(r(45*>0PbGpHcOQkj<~tGA0ORfr z=9^q36*t^N7(R!zug~M=`Pw{oi|GbU*HZ!>8(z~@C@NE=!sR{~;!2K_{1_GCujI$4 zFpFRfb;ymIGQvV2K$Rgfou#F^6xGB?`WV6c@xLJV9|8Y_+-(vCBV$Xf20+UGugtxn zqAM*-d`H-5%bgKk5{Qw}Qt81uao^Dt(9sD_D{_ zjDh^w_gm?#pTh2qH&FAL>hXT_r|{l7stBt{nKoD+5eLA4yr+CMIRFMmaVJpOLp-S6 zp#ZK`N=P64RKf%3i;ELu&_I|3#%&mSzre1zcyU7{BSy7_aUhji;(kR|*rjEtqXe)= zS0J2rz1z{ouQX4$X+-+MXY?-+{(CJLNFFOQEFK#7wXP|R(M>x8-YN<^R8!~7y)ZKl2FvYc z`U-gKyS+G9T==(sgZRTi5!6F@f>Jl=<^#|fp0zDTbEUT_W+2Sk=k3}cQePGlWHxFD zA{V*Vy2w8^SjypeL4}3-<}Iw?kVy!a;Q+;BvODP6hg(cZ5iE6}mIeezk(*u^m!iUI z2m9kR4$TTJti&bYI;{ea7?;jBLl0#j#&e)bp3C*F$m0L zU9xA4TauK@H`s{c36WI@h?xa%GTo7$KWTH?}O9g zw-I%@q8+_8jO5HTc_ku6iBQdB*@CEXP*yeTacAmRZQa!YT(V?KfZzAup(w@pV_Bik z!Y@SHnn@~BVup}&WPvenZ(6fiscPLr%)lW0{IK(72|Z=qpAt3UkN%59&2Aa!pcu2U zL`#Z}tHLnUpJZ+t0Zkhi&v(!MlBSvHfpZtNy`NjN`N5V`o1*%zBmR-a$MYHeGabei zo<80sxjGv2eqJ$$czlpEy^hkjA+>*GZJ+|rz5G`sf6oP*MkW(hdvZ8vmDd}Jfp%f~`AnSq%F8NtocKk~C%&yjnIR)&SaENRhrxCViXM)~ee!5nH>FW;a( z)w;CO4EPoyqlr+cVYni=hPIYc$Y0a%fyVJ3gqJ|<6#P@jW@^+42mKg3qDwgSR#dk^ z;FNl+Hs(K|dga`fp9PkaUQ^9(WXjN0TuRMlX)r(_8IV59HOv2Li=7g|Uf^HTHZDgd zkvNEdgl!@hXftll-~RkJNgDvC87R+tC5wSG!!ruax=!LxJuI1+0$JH5zMxfs{GT& zFY<3*rT-{v`pfIDAENM@e(<&0s_|Cd6PW_r=L1Ht6Y?}vnw^R!t6L^KjE+kgl#M;{ zegHdDxf5j{HlKiB6ktMNR1Ee(WeM;r{`wF>9_%#1t|aU_g6m;v zEEQY#{j{?`UGi#ZQIQZ~!B6Lk`l5V$^7)L3l}WV*0rw|V=O-i#{!pquDY=9N<&}0f zMOWCtJ!JIe z{Z0jWWw89b<2K{RK&e=3eRbNI`^f~yT||^KIWd^2)0_6P4i5#=F9~38jqEQG1Vt`V zPHI(V?s0qcG(RqSzi5BSkSj$Urdwq+vnZSfsWjJD6x|vE5Znp**^3`MNyGgOIbpB1v?rN&0d?a zYdPOkOU5*+ob|N?*QUJ7t~v|?mGAKC%0HKheV-`}J6&Or#`b7PsrT?isr%?Nlpe_H zHx~DAE`~aaNA6XfHB8lLn=?suwSx%?t6aRZT5bn;Tx^pwHZRd)Z9#l!-ynK&uh-Be z$$@1jiRq|oj5{5;)WI5|RB}|X_%b#*@Jjz8>BrgKBl$^|tsVsj1lj$^y*>tJapJm| z>@h=cnzymZ$xWQq+;lGewH^qPUa@APyl|AbVB=gib8`4zjeEzl)Ul*D-Hvuhz-4Lo zt2|R#bDjJdV{5XMd!v12=ZvQ_pUY%}c4BXqYs<7zTHt2jh4|U%QbFNlL*khO!p`wD z&1_~-KpCU;*Xoo#ctkXk&C(ooeHrU}Enj&F?1G5}_G?#Wi>Ir3r=dYR7ReS|?tCs^ zcUw;dTjc49NRE8W-7Wjs$5OeVpPf3mnNefjOyHqOT2`-qeAXd$99 zU3`HsmG^AM!#R@^v$&>DPoZ1er7?pE-8P!Zr;3qLnFQ{A3y46k&K9x0XD#`OaLXSr z46-C@{=nhmQr0>2j1T3@A|!XF)M=$kuBEf3CMa>$-X392XxTB)J~F2}y1wA88Dt5nHNBy}-A-c{=_b%b_0FqLl&hAXuCJj^+b^i~OmN%0pSze<(%jfaMZakvEbuKT*BLayM>begcuoAa z?g=Hq@X~Vy3%~CUaOevjtSdG|NhVlu`&2dvi=zj129`?i$XqYeE3iDDu583bk7T`O z?LTU%Sxs7QCb_&+!rG+q)&Ol6_?_$%eaoVG8EQx~6ly7{rL5LHOfz5bwc`@wFD7TN%SVd9hJe=+4tc4gqW<*{1^U%1H{X zne$5yTXwFRg9)3M#E zwoSXX^99FRB|b};tW&lr|FF(OC91oDYYj%$33wU`8Z+!URWE+&z0v26Sc!ctK` zvSy1>+m8k%X*cWx2;q$1Gb(#;EH>;9Vc0r&n?hFTNX$)C&ao_){n9~_XB6}&YKU;#};Xk1@vI*gnW%Xt4&gP^o z&;6E-AR4i%YV<4)iMxh@Q&gqzmDf#E?+Q|SXnt_XhOFp|q6DQe`;BN4cRz=uFFL#q z7M!I7dpEYA4fQq*ZF+@ym}4$!_RILM$?fKY8M8|7+`S(+gd|zxrNUW~Bw*%hIK+oF zs$knRqD$2x%_vBCgrViVt_)Scn63mw-@c&*42%tq{-}6L2Mue{JuA;5HAIp)>P_d|il^0PeHL#Po}- z>QdruR00nY$$4Ilr=;wi`M6IhVMRdL2`{8Xb-b|SE6~5Q6y8Gl*v-Tcb%Iu`@`1R- z5KKO?R}MLP8emK&`L_4z8UCP1^vjv3*LN%@No!1ZtERtA-TeZF3<+I|a%qAxg7@|t zK8)_ZCX|hp2_~oo(zl%5gdggspgx7vPiOw<8gV4Hc~@bPCAN*-j_=VB%YM_ZkR)Gy z7aoh$YyF;QLnIku^KKar;$Gle*3Lck))q{-b_LefG{?a9oRA~;!4s~{s%L~cfg;W? z(hn$9X8QL~?akgnpebV!-Hdb%sgEZrwmj$VUy+rc6ejBCgl8XArlN|g6$QL0*2>Zr zgSVM_g<*?)RHT9(7U30CVIWK>b9un*zI_U#^t!R*;`DeJkw#`*TcU8GLU`T@%;W?* zOB56`jVBHea>ZLU@qHE@lkCRBbXU0pr6o(!?F}u!-af6*2`0HUJ7Ww@`oPbia)V3l z>3y9Udp|_;IY)&PZ5XEyzJ7R&l{O1T70b&>g~TKoo@wQbWY-h6GP3mxUyU@edlh{O zIPVFWB$%ek`n+Ro1h++`*5I)`-kU>oJlaFUkc9PlkPaJYC0054qxsS@7{8wqwGMtD zcajSx#=mDjwW3GU+Fi>+WUHuB@qt^pMX$hsg)zI_7H>g_M>j5FZ78-n(Tvaa%id{KVJ>l^K*QkTy~Kge%&<1gz)bB zRLZKZG{M0`&ar~?O_{gE)=6FTZ&3L8mOljtWzM;dZolBOJ?YEw@H*7Tjj3cBEXzIS zlCATL!wd=JDop7Vp`n(uit$sHWYQ z24@XPXhj$Lb+n${zIFH4PP=a?XbIueEp{MeTf}THsAR;B>wS1>&dxF4oTT@9q@&MO zQ);NhO_D{2D4Mf&NPrkZvcmJEDoTP5rL3lwLo~fr>p>GT{$Pp>HX+_6$+zNyqE7skT{dE_P^L@m;ium`I z8Nd}_Dbd~0h(I5k^11V|T)W)-mxfzH!#nf~QSp@$ zk&t7tV3w#C_~&m0LUf|KUd~0-M*C?bwiSxSl>502iANv01y#m%)A%J8DyL-{m?yML z0Aqa&7aO;V zg3vczVHXBBj0W0@`lk!KHn)^4TAwGP(?ehRV?2<&k7%UW8B18%7p5JfIM&wIBV1L9 zri#$ht5o@Yy@3g7Vv$Sxgu(tt`BxDfDGf=OkzIe> znCzjQBcz@0n3|WyE^I=Cw9igT5BameDiEuP*3w@$J&f^L@>kb1+{j}R0!n$CidJ=U zdcB>PP3pGy%c5%A&)27vKAYHY&EmK?A-Z2K_wods?)|=cWf|>aoKb@gR@&vS5crUB zyQE{=&OOuH^$La}PQBr-JOpa-egyNKU!=ECLhrjde*e&KWq~n10d7!l%BzFnE7&&e z+#$BDTYE|qLT}@IHpw##rvDxUBiVM$Fvww9>B#5jsrg+*ac=JUJ9>#LwiHE}1EvE8 z`ZP-juOHIu^(=dAqkZq(Ff=EWY{~D;3OTZ?Wj43NjD#Et#}Ftc2J&|CGi0jMWc!K-b4^b{`H>RZcG;vU(ga?+kjOZB~OB=4#BM!prn-qHZZtCnqO z<+VcCXcmaAnAZiAS3+k((6JF2iJDtTNOtZ=A!Z`il&ohmqq&YJ87=01d?1i5Gdi&Q zLjdnE@By?Z-<_tV%;rjgAvgx+e5Zv@8Gp}Gi34k%m^?b0-4mCkTodI_R@CJ_0o28L zda#y094$~uRmvBNH!$Q?Kk8FwzJIj$B}B#AyKAL3{+nX{4z3WZBw8d^(&$=^SSB)Y zu~XNnz_(mNr%|SiRL!KaCHQzN6O}**`>JqLZNmMqIxGHr8>k`$cW`hZJ@s5f_F2m9@e@apXJR(Lu?BLI%HHk#`evQ=H!*L9?8Z=4Qlj^ z^S55nOzP>#nVU9Cbn}BZ2-->P4~Z2Ug?*l8_3}5N)AJ9!_XwAz7igw(t`7jujj;pO3yht+ zC5lKHfwlLf;$p-GU0Dv{_>L`ie0Y3??yBk7^=v$4j(HpGjbCZoIjy@7|l0psJ{g=In7ugGLfm+1Xynj4AMsE}J>-Gh5`+!A%><8fsz4~pD;BJ9O z7Q+0jkb;Op2f2}?RN#VNHIJ>foNS!KaAqa>1|M!h?4E}^yR^wPc~D-*cd9iNarUT@ zkYx;8q2rhq0i5plVV=(9_msqw@Z`*oTR*?r%A7;Ey2>VSuLp%6v@EFxF9}Juyw!Nyb z_rcx`QOLqdR;=4so9L1-e7eno_YiLjt>Aufc9C2$z8>d>uT7WfV@^u-U|S>p;k|0R z_<~A~H|8jmDB|;5W+k-L{c%N=U#ZLTLyBCv4@LPFjFKyqX@*kGr4wC$2-n*Ldqd>3 zgoZh?kWh=!>j=gqbwph2ktfw|N^-DK$%-g>Xb9=g4pkUF5?PH8O)O-!NPjSJ&r|#U zGjJ!G(`TNg;VZo08h>Hws1R9@$&omKo%*t&UUxUEM*dJvkPe39pEnuvpea0_e^Dk| z(>0N_Oxkq5{cW}qJ}F6sJnGk|78+QC?)T<26@MGAswGbiqq&u z*$w`J2puMj=M*w9Aa4iutA%cYsBHJ{O1@?HcagkA4R5<_*())A?-p(|U1c^~=JxF3 zk>cR=s6d4KZc)S6Pzb3_X>yL`gJtr&O#+9z$X69l?nuYJyiA+}QntH?LbEN3lr0@#uY~$M!aE1pYD9zi(*iFw|+Vd&v38U=OW>m5t z)@rkKIDJ?=(&U7;4!W{$Q*x0MR&oyp&*cQi6@k6{VZc4}ZrCGY(3;K2>LQTrUhQfL zx8aR(L5EHgm3CNU)3?R4=CZ>IyWZ&b5&rC{YAbn?T-eoBgAa4Svm1p2)1)}BHWfxY zWE46;DMfZ0y&5ogjCU+`tMy3{UD(J?=EkLm2@G1Y>0F>7{-t(moxp}!MC+GE*RmNp zI%toHEvbVDZ+Tq5|0|K>jCIrY4*}J_oN_%KqHhWjRg+Xgsp(_2BF9z&EY#i5^o+wO zZ41tBx6i<#J`<$Ej@-JxT%tHAkJ1W8?=}xql*>npF~fSm1+NQS@X^~(WpZC3)--no zu@#~mO+DD2qEXB9USs9SmZThAMAK$X@N~sJO0A~VSFCTxmh5os!kLiVrz4UucT(e> z?3uf0npJ^ExIbb}*i+T+M&nsPYg0z=Dc!yxMKDo3}h-F5T-$vzpE=24#>{6Cp!jXB5TB5lT zq!Ar(V){IS2FUp(-*wfO{o$}ZOAyE0V*Kk;g1)NoxjZt}`{nob%VNh{;J<=Jz7}uq zR^X@k`=MO|q`pvt!}nwjI<6ha+#8BZ{kMEcYj`l=31nDes@y)r-*WqOazuyV$0Muu z3VT%ddNuJxIS*Y4KnTD5p&{2$(&vZH00o7-;NabPNm|@45l*DzToNWL_u9ZBPF^Y2 zUFBl#?JF>z7UhMFyF3D_5X<)Lb9l+{kEpC1n^HUP*%k@=C3et5wr)ym(tD~FwNhi=i`UkSFT;HArAz28rFf&{&Bnv%da;_j@^=^RA3NJ}zJ95%qfo(pIz$@q zBHT%SO8k3a*YFqqG%9xHMcwfpXpG7l?Y=IGyCP1Eou$JW!%UUm>wAlMqNT}gHYP*< zlu**G1G<^^ZRMib{-_x4;SBIlnCEYk@flR8E?IXwO!q8p*!RCRX)}95i)kgc&)OH8 zRhqgwzGOaOuV%n;8 zUbJP=snJ#Q0^kNXSz?h}hlePl?gg)r6ZF9Hpcs^GE>l_Ajk(UEpPoL*(081wCCq32U9(h zhh}_^YjabKHnN{@sQp5)U#%tlz&iFPvi%321tjthp8K!J7I5gFsFw<=pASQ}zd3st z-QMe4Ahg&cZJ$EqZlfh-jtsrJ#eRHi*r zzXE(OU3l95_c3Dtm(%<0|03A`=Jl_b{MWz#4JQAE&;NqS0k6L9W%>0({tlOiHVe&B z1F#=iPte}vtNV^{pH>9M{y+4JDLtgw!$*2e@fu$#|FP)h()DlsA@6UFchE-;KS`s* z4R;LGs;u^3e_?IE+6KPcSAu<7`Hq}qF(o-)zt(bfUGn@Nt8_B6zIep42%(a)+-`Dzu zejJBC6vkGhVt(avQ}h#nYS}drC-w*BY@9uhLjp2;z}oc7YCUO-(#CgHloJ*04*v0- z_P1$o1C*I`&j2;1l9x-9?@Ww%R-`AL-X3IH4VEVn=Ro?GF~%X>8nG{r((M?~%@I|k z@HDXZ-;4F=tpQV{Gy&RVw>g*H#ZXRDag7u~Nb*A!PJ90R!u;t%ZUeQCqNS9QA^HWK z`K&1|y>;iW$3LZKbQSW(k$3uJ7-mi$W)mb2#LZr9o-NCEyey44h$<@|+Xg+vUx4n2 zWq(vXxV^G{wRRPvEcfg=vfY}reqWaYYp@2JIT&BUAcc-(4(?qqZgULv*I|aCN!NmYiS{NeLig&xvKd1e6ls~IpVKL!t z1U3h3Ps4ni1ldgnA7X~5G-M!9*=N5XIW!(Q%s+2D$Ej9x0i&S|Q4PArctrX7bpKA# zw7c}xOGYrlzM4j|LnGsHu?i1h+_M;T>)fLqNVd!>JDQt8oweUpUoAFDwsMH0qvX?b z@4w`zG}*L&|5|uAIFOj3`qgAwiU%pb?dQ?77oqg+j5+li`a?X{-`kGj+UP=bn@PCJ9Ypydx#;Yt$ zCZCxl;<2zfrkugSY^BBsktz)3@zds$U(8AdjyV?d>~e5ByQV_jT@OCNYv5UaY7?x@ z++y^MLg`>^`|7oZ%KJ4j4VSoqv|^(^74BX+V@8p!`9w_#$V!@f+^o0}o`aE;WXp@B zwwzC4NH|EZV8coleDNN2BBnf)zcruKMl0_d_m37|uD3y5BwJx%&uCcCNkzTR*SocO z%06JzA1Q!)n6k_M^$+@;WX79GuM{4JXkiSdV;!P^a^{w*BAeoA{SsuE*e?NR%B49? zgVM2pAZxU}S#Cs+bh+g8J2*r#4eoZsmKx1e+6!Xbs{Pv3HvGK(-x3#-Y8@0Htm)n;4qNCF;7T0#mMLZ27 z=9AkK%rx%?LqR4}HCZBsUK0`$@`GR7Bsf=3X&Cspybgn?j3^ojRSOW|aejF( zxb`K5@8e0Y#iewcL+zu-I)PxD=jkDfSk(Es(8R*n1}pp3_)%+3$ZZ-<^q9KA|BJP^ zj*7Bf)c;XQL6DG;l6IuK1f;u>MsnzGNh#^hp_C4h?i8dPLJ*{p4oL;2<9m<#?){#< z_gUwx^ZWfHYYig|Puy``pX+)S1qmhDEENc&WmlhkbY9A@OVr#bD}2QV8f$>6j~S}` z(>vm!u*q6jgLIo>tJ$pNT!U15PaW8T`?z#x@Lj5~y*&14dF6fix(8?KN;1??#oYZv zL^NZ%;rH#~j&(d_Z^yyBLEF?HO4FXDK_tIaePbDy%r_%93Q;XdI7Rnlytan-e!eYl z&|AzK+LtJ#4OZ7EA|^h}^mSjXsUI+Mg!hgKN8Rb=p(!0*m6F9zoO+UJF!SS6F*$tG z1ih)yhC46$P>>sS{DEHJ?azJlY#metd>Sd2YLy3wJqvKT}hJn83W zr@@JN^mX%T-gk1tq00yk=n@mg9>0juFLV@Z0C#`Eqv z{3dSpsIp8!`Em4;Iw3YsAitY!V!hYL`rOBZ5Z{@VS4MO)&qg;ya-AODLot8<%;~Cn zh4nl47_UN6`cNUy`>~};v9npIe1?mmZO~q!HNmHux#4utm-g1EA9QlDBkqc_x&NGc zy_N)l1d*$;f)(aBu3PlNlJ_0;KgPwedzSskO^Te@dnS+bX&5M9l&I)0m&9b8E@-Jj zS+JE1_`DUjxZQ&}_@L^60c2LDsoX7Pn~u0p#~xG77bjr~;h&fKbQNrHGn?yjEvHW3eNnMuUk03Y70;7XVMH|2~Qo0)JmvCc`<*h}%d6{llkM!$>c}RkBU#A6+HdYEQ z@BuJ*)?@OzvGq?$n2}}F=lBS2yUUKrUwmfg?0UIFFd_S$_*B)9^s?~KK_PjTCFj1W zP{ru;c*y>yCt6EAasr2nEqwh;A7|!6ySXD{+qe#II@|JY{xFqLywPd8+$oks9G{fu zBroX%UV2YMZp+GL>gsboxI^cGuLB%_2MH!HlK7xaC7Tuq?%s=wrZ~HCJa^}(k#FW) zVRJG&xkN14r*XR+(%`7+;U?Q4UQE59JaJ+Bjm z)kUcj%~`sSM(jX?&?yrzBy!6`;1-f@Usm+J zxJ-G4xKff{cZDE}2tKVdcseQx6rSD|k z6y1K%5&M&GL)-ji^PP4h4hvEr&zHE)-PwgFAEoL``!Wahn)kvkp5e^z%rPZ$F`-Qx z{Js#dWC*;zQRxAXU=wxywk=z#B&UfrEzh(01M8@d5QF-Br%wswxVxe{9q_q1F_7nK9J73i_1D1R;|VuD2cQFLMtn|}*|-C$pYMCu z4I!GLK?-#gm%I{^)5(VBY@;U`U~Xj5#;Sc_V5$_c36;F9iRQZ=Go>ry9g!G^%WYKmM5fJ5-> z1n(43u{s?c8(wGcYQ1dlI#GrTG+js9+=sU}DVdBJ;CGml@96cEMiW37Gf!X$^`vtrPKXkm~ za)wR??_k(CPbLjf8QSL$ej=AQ(7LA%zpI5!Ch)FTx&7qBs3n_sL=^Q@L9|_-B05+O zl`@Bfrzc|&sO9!eLnGo6U?v}z$zE+86F5%|y~sP0lVXx)OCmz;F#2f9M!xex{fLj( z-i>-Fj7dqzur+O$1*$jJw_m)heR7&(-4Ak5q)=QAD4gJ$a zd&YeM!<}{sbV*j15PP2^y&Z=5rWP?>(yhG6Fa zTQds99QQKyhefS`qPl{J6@DyGu&bkMyzEYF22;PuZ#vXtyeFKDMck}|U)ZNfO;`5AUIoMpFKAB0e?U4+BDGbJC zj7@HpDEh{+7DX!M>O>X>);N1Yjl3F|p1|S7b6c|y;IFd#e$OwD|x zT68lu&i9im!sGDfsg9v=0d~O;AXsEOrgl;p3g;^fd}W?jtHYBaDMT@Urpl@OFk(tw zv%!Q>MhYdnA4byxmiG-#mNxLT?~QbA*|AkH$~>G(5%18zGGja`l|JoV#kU;-;c_J2 zeG&>?*0{*vEe@8xx1=9ptX1`8@R2W5#=K)jI{4)j2!$#moPr#@okc)Jtv~Q$*A4;H zhiRM9Z8?%!qVkRt^CO8f{7w{Ko|jfI`SfRE(qq^P@j+i<5^5UW{yrD^SX(?lf~WKN zFUm6s>m@fkf6CfJUNX#reQcMj9f^6a-`msibuuTz+!S00r^kSP!+I^UTCc+?21!t# zT!pn$vYyr+YDwEHbK$FCR_y1v9U8!pJjO?<{Cfh&EctTcTB$Q0Cv@Izk~QM z%RsfxvHx|~WEzyS`EJ+4jCe+ARFV5pPsuxys+vOdD%UlqMpX#DFt5iZa|rT+20maK zSf^F9OV`q5ABAt<5GUUv-2EhBPZAJK4S)Ce{ofq}w4sZSgx!+=bPN(75jpo(kSNQ} zWi|qZU`yESG!9RqA~>QadJe-A?4SihKSbFcr!4`ABR$y|AYKoU!=fDD`8klew20cwcwt z71=NIBYo1!_1*>a8xgpCD_8O$KYxNfou;_zXvwt>thJzRPipmC;xsHrn`4>*Q?1xK zoc1|SR>|{*x{tK4Z96}ffjumSwby!_Wj9#RD{PLe-cs zJG)>nZH-kddX+e-=x((Wx%@iuK%-A&aA)c6`-40u$|eulqnL0EOBHTu#c3-ghI3!s z2DzlJP}HI#-wO)1@tjT%g&bp}SBEOw9#U=Z$wHd*JOe3B`#5ezh}ukTpaQP28fV>( z+lh&@CN0|I^|MB-nS3y{xo_1UHS99ZNu$69X7;rgUFI#w`;_60hC-q|qvuDsbzk2$ zmd_Qs5*PVq8C!5xbN2TM*rpNR zC--U4UJf9uW2%c z0wc9po|>oGY8>m){yhst`HuF+e~I)O+XwTuE!z9gYujQl;@y5euo&0ytT#7p%P13U z_?&M$TUzKf>!F7F@W*i&e!NaMzWdWk5v*BArjGn3Dc|qlw}aaUjQ&JGY#JUC!HcG@ zf00V8yxz!vGsD|65{aSIn0JZ=manADjcfE~N(C#v&PX^Q$cU-QLs^TfBhVQC;@v?= zCo6L5<@uWxO7r?F)5$9Xy<Pp- zZmMK<-h15l6t03ggFGOr8;|E?b=cEbo~dG7BXz7N=sK~ZSo3`bXvZ{Sjoicj+lRbc z&^JxYdP(}B4uVE_pnqm>`iaxUeW$>yY91_RHi55dsM|xsLsDFQk9C+ zjy{7_ab2y!<F6%^*(Z0bkpfQE9TO)?4S6P#K$GgX2~ zcMokZh7$aO#3TqT34wlY=AAkBaoE4JV0hK`$Rhb1w~3>NRByraq~G}X+^;WoZFrCt z8nfargDam3h=+>LQJMhAop#7dh6syno+41FS4sEipi1wqjqv1CEha>2fC3AI7=Fji zC*zddeBrHtQUuSh&~NeH1(a^!zB_`)hB@~t_xc0u((o6xI#!=&wB97?%lgtsm}o3he#6VMaAOJJ zObEs8xy`+*9PO#ftmXqX9# z$4v%9xQ0?mnLWPbDDJCDMh`7^a+%@1OiWV4Vk!Kd+uO+S;3U;o;km>nChbzp^bz-F zG5&Ux|9R+vaqthL;orOmUfRD5iQI?q$Pb}mxtTA(n^I6&t-L<)f7mD{M>s`EN&L_3 zH~;1?l!-DKe3@PQ0#<8P<Xw0$jI74e%YRpH~r_?yfsn z*k(Gl?jO8zy6*JypE?L#Yo@*@`5#<|uJa^8NDUy(fO|RZ4%BMMDMpK1^7tdJnYX+4 z%soj3Ju0Eu5~xEvU=3hD-2yfJ(n}QDdh+BLEoMPcJY~e*y`?}fC0q3xOBVL&Cl$g? z2#p~-6K@caxc{6#fg`OCK>2p(za5Kc{O8BZ-fua!7h-sW%z?QA!Cwd1)Tf$HcIRVJ z%3t}J3Vmc@*5swC!+JAcOj^>;Qy2W6ckTHBv1#s-^72|W0wN!ogDn(}l|IcXc$J{m z#_=P0#dj=@?ygGs(;|i}7KnPYaQ@NejO7^T_A3&r)ip_Y=I6yS0K&KPTyW2l|IQ02 zncaxkuY;HQ3x2^$hXLGC!Lv&2U#$tfqfoDqWDY7$Zy=Q?ZH)@YreuA40C8bbGap{( z2SjC*HR8u#)J+<)j}D|8&_mSC3lv5M;nhi}N{S$oyJ#|=0%#wQU=u|IvIGSqkkhAG}j{g3_x#8_oCSEPA(|Ndtz zK%?37w#?W2&RP}#=uB%{g*gSL6NgTSl@s;JgvQDwLH-&DOZ*2ltp1vrE!RM}Zf4ya z{yrBt2lnm@6Ib=cDMn}|=`C@$)rJtHerYW;Gub#vl~*et4~cEV2C9$+%m@ick?u1+ z`Gc$i7lDM4ttj&X0FDM+uPg6S5PnC)KpRvYez6+)N?S4)8!eGTv4~6ZDJPdBrm1FZ zQ~77Ny#qv!fd5a9z;-G`p?pp3u@tcTyrSv5oc(^B#%>buSUz{Q;i;PjvqGPnbR__9 zVA~u`=YJv#d4pB^%kAQ+IM9`7TnFSgFBsp)RxJgefI-3WnAO~OshqsYdG#P`;L@~n zX6bzuCC4B{ypo*S?w&`$kks#y11`|(C+9%K^=zi9+a$b3-1kR$QmFu_Z^ z`xe)W`zz%@cEkyJ7(jxTl76bse6;`A8xqZ$zl4raJ1^34${^mwO_vpc;rGXwnB}Xf zGVoT<$l$BA~|XdKDET}mtd=gQmYze-W(2F(GS69<9;%bRX23#g!H3!rTe=mnpvt( znxhYC%lR7%=L44pby)Zbuh$_N7Gd`mI$%lp5X%NH{4Lxj5*yHCz+2nixnFW&e)sbr z6EBxd+1z7nd<&WNOfTpr;}nK2TFzp%q@i>Daqbr`+`L$7eh7YpOB3eVy2#2^P+LfT zlm(Obqh*f=fG&|oWq#}b$AM5^me3CbQzAP_-EQXqD!{~snIV$)iNpgukoQLw?PtkZ zT?E8_uB`(wRk@pquhP)5eSf(RmLGH9OA?wm2|Tp)h%j@tQ!z0u(UvVktBexD3aMOz zEBly4O$TCNWd$01`hn-~#@o#8(X$z|<%UzscX;!<&A0a=Ktl=A)G&4<9)U*-d0 z(u39AZ3_Q$HoX4pK080#qCt%2II=AjGpM6^jq{{j>&qUumk$Mchnyg^5GO{bp%+|9 z7aN9Gb3eJ)L}{N7Mj4a%bZU@6@VECo2aTfBjFyC8>QcT0lt~=Ot&1AxU_MS@_Uj(c z=;&LSF>^d=41E@dL8<5j6b~l{(T4K*wh1@1??~c`8L65R`B*FHlTol9FG}NQeoOTs zJjj_YmD2R}@H>*5W;fbibi1mVgFuwM9e#Q&4d5z0V#!AE?Q_a4E^@^zg?>b2ExU{E zBg0OXvnp?R(EbPvCsvLHftMc|y(M~?p~=;kGW*gOrkxAeRC>_IY82jbtGNz8%Rk5V zbUcTzQ=0S~JJjO!w3qfgb>C{%oOFutbD}37P=7x7AO-f^`A~2WsGtu5vs829GPSEp za~$RrA+3U>4KDE#s*_8nebq(OerVK?Lw`cGMa;mrlpb%fnr{sC_X1SFA#J^p2=B{+0?5;!Z3wI^Q34NMB{_qInDVA0=L9WAUt% zW zPTq44iP;MrjbI8QGd4#+{0<`sWG^F?8)8aN?t@MQ4oBYS5@qw;Mz_osP6{(Li+FN+ zXc*UC7Z4-6ahIb7Ic$3>0R*)YW2nH$H()V0y3>g>eV2v!Y2`BjCmRp8cdYOU5Q}>` z40_W?HO6NhM4|W#O3YaQu@Rcw5H-qe0o=LpU@DVW>ySXZgUx-b|}RPJZ|Sd3Yk{>btyV;)Ie( zD)F3?Qs09A<+)LSDpHhYVr5l6mUz&>_1wxw33YFZG3Ya*n|MXU^?M)UESOFZ1FxOC z5|&gaG9_2a;6F~xgv8#5h{P9UwbIysKPmB*h^UWE(7=lw7`qZ*2b;)5^+K?~Br7z~ zbXpy^;}!sFm{0C=H!?9&{SFp{ggEiY=()mxG?$D9RIJ<3HA20tET1D&UrJLpd>s-o z9uf|Y$laF43XvDE48$V&vib~WW5Zc|#NArG5gkH5gV zEU6Yrog|-FsZZ*@K;HDYIkLvgv^nS15dhv1B#rlHA-^F{k0p>hTsL}13swYy5G{S> zRK2)JMx5j!A*@(y^MZ#^fbzV*s6$pmy%T)v4t;ygSk_!viT~X1Gch;5PS3jrr1sZS za}rHaG9>3ONCudyl1Lg|A0*!x43WtmDhkv z{B#ga-Lu@bwYT-nTlnYbrrziFBqMsV)96RHHiE7z#X1W8ocI4e+aWMZI&24YL7 zt#{b+x2=KD>&3#Jm%;@ApkVu9>CeT~db6*l(_8M6e8kddU`zQG96+o3>=+V?IiJA$ zu`lAN>Q=qwz6$XXSawqt=XKiI1^>1KP$LJsq<|gp@%}&TfP#`n`Br9@!N2T)Hd8U) z5m&zZzf%J;w%Gqj4P;~Q-qVlKA_E>FEHXoXuslPUo)&8PX7Rq-`O7YrAM&s!y>$>z zWAn@rg2ny}{P44Jf&Nl$9qdAyc*(=%VAC1q>eC!_P&U%C{-;vHO67O!(hIzlIC}}hk3lo%_zGnt{4#<0PBXNJJaMB zDsPalh79W^3KTT1rTm@7COGxbTma~WNoW$$y;Abn{O-Wu!y9j@;)grbfT{1Vm?N^AzZSd&a`3N>9fNk*8)A_bZHdJ&22X})91(uy4P3pj&HjBO_K8J2 z9#YlDTg%as4=!%zrp1c@VrX$ArmA!$R)8nNW1Dw==E?ntt`;}aDmC*BbMR2>#%{1{ z<|)Kv`P66qCo`Z(so3pw>~upso`Y?}G5UigRe(;|0@hAm`0Ev;b?e9#6PS(+{0aSQ z^qUQ{cA^a?awO~1d@4l-=xiAWJU^d}3zpI$7hvJTjUK;Wp=oko-LFhr`s&o7C?ypJ z*5Ug%k=*iE3z=5rV9eePQ@62>p~CM=6=Y#Q%6@g|8vb*SQdt=B6!6vA>nzt(sv(#Q;J}fC6Ww#5}J_>AHbdmeV@fqo}oZ9Qko#;f| z&?5dU8CgD88$5_lf1B4#A1hRh{Ju}0nF#r+zjEDAD-TO>4g4 zX<;Hh9naBduFG1h@%U5!%1g)dw*)5lf`;3Z>Y@3-Bm4+FA9FJc$GMj{UX$(HRKg*e z{w+n}M<~_jz0r>SxTQP7qSZtsoe#H3FrB~zW5a$1hFSbm(*(LhhwSPea>UHvP}dPX zDt+je{=MYV2iqC$o3V1NQH5B_ow^+I4T59{acdjl&n{E8trGKZHb-C=?h>5N@xiz_ z;gc+E*@K0`0icGiDo(x5`Vjm9#FF4Rqa0YT627`)F2>4(P9UG>q&O#>D}KUx>&41M zl(<96B1)p(y8%lo7b!@hGs9!pcQ&?4Dl&W+8)@Z|+4erMYJA<3QPW1x8y2sD0dO$^cYN>5{mKoTm9uJ|pM<&= ziwEter44HZ{Gz~*SQ%b zL<}Yw&)$kVufXVvPY}+Y)~RS`Uo8p>0ivs8%Wih{P#iWIvI*>7pG!M*s`>-YQlBkS zkZ`$PJb$v1hXL!B3ZU;B!S8a<(IPOgt@= zkr2Jn_|XjhAbuSzAD)_ByWdXJ3GZ{Zx?Fj!t_f#z#f|!vB7o&evYaprmhm^5k1pl* zdoV%+Kq-Vrhrio}r*#^jhs%202kFEN_frKm_jQGSe0PK`0}S@D&uZm))4=V`1to-E zzz>3^dO%8@{MoL_sSE5kt-u9yp)WpuBZuIcebgDt6rRAbjIja$MhCv8rI~pftsUL? zk!$+0#VbXGHqXTE$8nVixL+`6E=v1CH=etFqbmncIi(uv^WXY@ACj0zKkYR_-lT~z z3CRQUF8n_$#r=1}fAi=FnfSm2$kPuQK-S?eh4>#FI)vu$vhg2r`JeB@kVj+$5EQ*@ zHv{de&0p#_>o4`&?%&n#2X>mebw{5c(P^n&hns}ZQ6PzofNmSSM$*%}s%48xi>va# zY5w49)PLdn|CjpwUwZw26C(I;%z$9ER1RP-luxwl7Oct@(PaV8fuH()N@oTSqaus) z-QWmD#GiBzN201VF@ULp0bLA4{}5U}@!g&SCDiKH><8%gG=9nWY!4#VvanV`Mqu>> zJa9KmO^O{5`gh>l7=eEdF?e{vZ+RY6`TsuD;OViyP8tYc{OzSbBLA;%B2EqBTZs2V zXb>;qC;NZ>nVKgZdsWi+ioieu*NZ^+F;LZ;1-@yN`qn_GHu3 zTt!zf;r|=jKMR(X?RvJn8wrS{U-1y|krlqm!2U+?FPC&&PahAYCY4O&++S-2q;|bG z=<^2&(u3gn%e~r`rgM?A>pTMW6hd)wFFX>inh)Fb4QUggX$Wz0WMOJ?|FtRSWg{N~ z++c*LgY8TI;EzDrKkrNYTSrdw|3^9d|5B4P{=d?+mw`?{k)?9{E&e@VH>U8ed3GDf z{HZT7X4hD}arSn<*`fKnp&QL*(ZlUe6Gpg;-9iMwN@+UeM84@Bb~q* zlq{reczyFtqUuKfD9wV+mC$V4n=yllldB^{!sGuy-y_s*;gQP#@Juo(?jVq70U?eC zy9FLytBdsSp9M4`q2}eIXH0vhvjkB*MUh|UZiQkq&DF;pj2Qxi0l4Rl5yE%msz7B# zjWOfPQRz(bI_q&j0%Gcl0lbh6RX4o84JZc$=S`v?@AdVHZNG1XpQY#4XHU;q5hZeT zY<|NmC8iPaUy?Xis z!<1e9-Vm_I)y=9o13nM`|BglnF#vQFQk`NjTw zgRs9TA|x(dD3PKH!1Oqe-(b3Ylq&*E4_00l;>i6MFg?Ql0lXOjrr$%U)Eg&O39^mn z(4Zt&_iT*I{3t8j2kVTvAXgn)+*z%$x(k27_u46JuXqZOd_1Kv$z%@8K;V#lx=)O1 z@NUhF&uLe}S$ssLD`y~7clnjicYNyxV88jtUhwYLushKFY%80Fc1o+vA(ULV>{%EE zmK=#PsgxW^Io&nL8R0A9auFwTgf+>?SGF5@%%wX`%>q6<2U2_=nu73R)z&>_VW41$ zhU{$K%A*e`e)d_#i+F>x9ISu@vcq}C;|ZV`d)cpG8&AU?Kbwy=+i|v~^{cK$<_WdL z-|AXud9V<5Eg{bxN0+EEs}$^DvMuVgG=s<+W5INR(v{CTi4-29ntzjcpyfyKVZv7r zly7AjT#A5FZ@Ap$Q@z2C2RmmoT5%VKKV$c(_L#%H{8T157?gnEO6P6@?t0_iF=uFeKGK= zrM>WR7;P*9igeC*mV?gv0ySzbG9eRKl!Afx^I{b=s60l{_BxY=JVcA9$0{-dGY8#Z zg~C+MfIsj@9O>iy+kQgVHgJE0mdYH^uHEAO*5*B_?!uD~s-}p!K?Y973K7plwCBBk zHi&?q3wvxc7dAnS3ZD}mX@&iBZu@zOAXyS3jYSaE1{{=IOUKTMJYFl`s$@Mbm+d66 z%6sTf&xJmND255VEx(zgBBgX>tw))&-}DL8zR`)T>XL9pgy(>ObVAw>;7x$W@-((; z^{Xw3^0)^kP0}b-0b<_vQ#Ao;)_*CJvbFSQJQ*{C`QrAXd!Van#@C3~ZM6$vRtS9( z{T1@nYkTzDB`Tpaf`!1?vd#0GqW@BJ2{z%=eqe^`G}lkAv4)>P{5W5zPby1JH&%Ck zB`s8cggBH@^K{x`w5fszU($~G0-3_Nj0DE%%6}o`{k?-c7j~Q1Hv&O|Wgy-HRTzH~ zPt5lQ&?ujH%OW1g4smJyg%Fb}*>CF5-TyiPs+T?k2wL~p&7&4>#klRz++dm!BA%hC);d3X;F(m)j= zs0`=gL5gMwcXFR=I4qgwZdh&Qe58Q$9KjZFJ|iAM!BI)&n1E15pFb?8laPbeKDPo* zEP(Pr+@y^%BzpADAU~X{0G|WNb)`Bm;MR!Fa14UT``ec#++~^%86&HY+!w3bW8Kon z!u#crFnjswyMKeZpq8N!fVlx+x22F?3!65dDAf6na4t2>+Zzv-K=@EVKbSyVLq}WE zf-7TYCpo8LWEk`Z@!FpQK?{`5RWYxTbeOlcu+b7l6%zlVbLT+u)l0Z$n~hs6ELj`= z_|rM=>f~!^&{SjI3VFx%*|8G*HBr$1Fi=#=qo3ywg3X9CPBW+y0V`?e*b2n*CoTyB zg@8@*0Ds2DNyq%p?n>a3n^%cguLJeXd;D6Xqlo&DpW&3uBu$TaVDH<#_u-fH*a*vQ zX-TXhfAWz1=%ou5jvrDr@H|$9aC(o~da3_j4}D7I0GyBu z&Hx2?x#yM zq4Ry8DnY1F-;(leD?k(iO*Ut38#^rh9it!B#(o%mQWybp$Qex>aD+p{5?v&4h2(Bg zBp4(w8eKA`ZuRiCp^KxU2b;B=2`AJgQr`A68x$clx_6HWI~6Dti_hm8q(5v#S_|wY zQh5nZX>%{FbK*OuZU@vORc#fzRv>Zep#WT2jtR<9&B?QF=NjSz)b-5LMAbe`MIf;V z18u~@ZEo`S=mt%*qHu5ghBlgzK1UHwdLJ$C+DCaLY9hEcrl zH>#;2Hb*RFL{E(;0@8KYAo~}06Wj`|;5q`TM1y8fu@n}~-wGbSgO%1lXw6M(G!I+e z76Y^0Fm1sD4jUZY!YJJi&aEua+oI+{p#05rM;p{E zTi!X3D*{zIN1d&2!KU1tE`=kEww@ETJV=AgN#X0_7Y4`gJ2!FMam`+t`<(r}sIb~v zv?f+2Ei@|x1o;=UH%})fUbwV?b|U1C>sUr;vBSg>6FifP9a8iF?NWoTF5>q-qJS0Z z_yaHm;b*ml!0AS`MCuAc?6GRDiP?aJ*oJo81=4Nm!Tw?NWM+;vghl1oXfOW)G>a+wJ>FeO<;cMX%eYd(9Q$Hh z<$RHV+pB~?WyEdGnu@SN9WMY;_~Iwnx%cKwi?q!(O(5bKVBPh8XU<1$Y95>sBi3L7?oGIAMWU*$UV{S2NIiQKm*ChXI#fD^pNg|%$Wgz z;m6ZI*AZN;SJ()<`Q)HqfW%Gi8*CecW;901T-OkY3d&J)$Gd&u4D*9K;YpVqBjKkG z-{NhcKVmV#qtap`lZ=-$z@h$e!=-7(B`7;m|C^q>wu|Es@O$I;HQ_f~SU30l7WYoR zcV|q4wv|evz+Ql@QVKis9gxx?_NKw=ODKt+7oNbv&>ga@t8g^L@LT`sdH7e`z~U^V z7wo}Cb`%S_o&)##RtnbZbh?v@+&??Vds(3NlNOjPLX7j5IKkELfxNX!unJ<{0(5%q zVDSQGEWPBK(r=E&?)Hcrw$x>4{6BV`6w?2{?^1th3V+}5(k1-bH)H*meKW}7Kf($# zdCqW4=NZ^--+lyrGE-LjyYe>Q6Ktp>vGh^6vUsJ z%n0g*FYp-XV_DJf=^`WoCM{5ua7w3StF_0%?<-o|s3zs7LI8Ax=RRQK0xah5sT$GJ z@N2|Jv^yaFrr&@bViy08-$Io4f^Q+d`TO0EFXSsa$b`IpC<|TD;xMLQ`n8#^A-HS5cNKee{qUazpzT5P2hd&l@NFijXKRD*rvShX0&&r21_bNfV2(%7 z{}S)Va&p>BX|mT+D=d?RfvJ^c!!{eCj<*>lfCW%apd1Vo7wyh;Y?q;0%+Ksi$eX=Db>ZlAw0RH2!9)BSnP!0yQgr|?I? zG!M|062|zOjWgOBY&`{y9$*CaGhAx7A}ySs{yJZ&N5Tqe{Ub0KC=HQ#E<^v?=r$sDP6U=gRL(OshxSflgEYWv552PS`KSV znxcO^Vw*KPY%PxwRCNKW++4F3xJyaE#XJYhc)RoZQ90nYR7~XPGI6>@Pgpon`k#_t z{~YQ7fYG~>;qLb%(Eh zvvf+kzl(Q$_0DH=V>9oHDkTZ6%HtZe1-Yf{17Md~xosL0^ZC^ZI6cJOzO`}_2 z_udcb&w;*Vq0|M_T??*zr0iI@E1JN*gYOmLfF@1PZ7a4WaJib+0wSv7jz2Rn7_FQ6 zxNa{KA`~aUYv(1ws{Q1EgFf9@`8}l3wv~u((*lTQg|bl5qCgUUkQZ@)6w>%I$C zpUVW#_AlA@i_8ia9mB~8NgapK!vOKe3;TrZ(Q3QF@fUOkrfj$<^>Rv^o<5&X>4Lh% zcQ8-4f@Y>=x>=UxcJ2e_^4+G&4Y0}RR(%=B-U`H&xyZX+Jbo!0HS(Ia`lA;Sh8|bk zsR;6unLWgU2x{Jv?*Z>s2bY6n?mLMvoIbyPr*bj0wEM52;IZKa5D!`*H;dyl&ByAQ?~YGcSOKk{-HrpZ`d3$($8F!yJW;K42Y9BVt@Dr zlYysTSss|(gz%q&?hy4?pbxvJS4Z7yDT{SNuMLDpd^*->2R^f za{3Lcho_*2rD@v+9wc*+2E5$vN7tZf77RpVtb1Qktix;Ox`Z~K@T>N{PReOP#N~Fc z5b5YMQM9Xcf>UUIQYX=f5Cm~U8m9p8;S5>-O^ zC`FEPMUB|AJCYS(vA>YbkHqiMVGOc2`eYjr5H1)K)!q9>?^(1B=crLRKi}?bQbV|G z_Ut9J&oE)Jhl;g2I>@{QxT!2}5G~mzkE>E(0_-1T6BlRCK&m~m&)YRH@Z7sL|H`YXj-boM3~EY-6a?5Z z{B2hC20Kb#dQC!n|1q*sw?0^JJk;rI|3WR6#R5fpUy>(On>++uf$+K=kE@B(`lKQN)1wP|cZuT1msz)zcA87v z1UY~n2h=$FXeQG6U3SjcB#e}60PUht;z?A4a4~)TW3@uiut)GYcpO~aqx(9uHAnaM zYMf1oQ?O7-e2VWj?W7`K+-axhB*k7|`4Aif_9R+-wv-1?A&)+{o@`sS5vBB-|? z1Vaaf{8Y7yKcW`3{z>RpPe8SU$8$iEO$+i-Knpij&)ui=iX$Y0i-sg;w|9N)-@B~T z|4TKhB3H24GEjv;i9ax{zyw-U{_6gt4CZ0bJJ*xM0VK;%yM_tc?wb3VlEPe(hHymW zo8<{SQ|DSiAWOcVuqq721P3TAk3gf|*LaT8kW-RrlCTcIhj|MsRWzN=B;YF3gHj%` z!w~F*q5=_jNX_$obMGgC_Y0**E{pHdq7wnoBvl)ZDE~QzGpRyWB7Tjz-xD}Mb|JIo zdCc{!fihML7)f$ut>ZA7%)Jc`{vpULzxfY>4AZ;61er$9UxExh?szy|J;$hF7NAAi zOuJ(7H34#@Z2S-8r~wCDt)Q`Iul;okrpRwG#zWyhh%sz$0Y(IQ2pxIW8Pd?hUSlE$ zLsTVU%Fm~A)aJA;=L~9eGT)7%gVI-I*s`W67@{snn$Ut$()BSO1~1PCOu=jA?KjA=t>pBxizC#Q?20Ac zrEGD%v9)&$kG`)t{p{=;ogTi5i0a#@{lI3?mQw1ssqxN)qEPL657--p8eBrEPGh6Q zu2!Wt+nMD&xB1l4o{qu$tCO^nTjHg7-VDqO$qguG)VXOES2316bPB&XQf(NZNf);h zsc)N~b8gZc7ANW##y+!*tLK_E_Rv3&KiK^md;CK%X1jQ(w}O=N$l_ilzBlHJJANFH zp%zk#x=M~O4)-1%ZQbzxTzAYf^_IrrbKUUZ09M$OSIJE-gIV@snw{Todb5hVl_}&? z8$*#^E0slgHCuOA_^#+Kcx`7X&vFfYVZhCNKh9K|%*4dF(@?x{=<+J{UNPTO<6WcZ zbaP%!@o4jpQQ2~)-Z6V07>7A$b7&q3<(JET?v=YIkb8JnV7dP(jrd0;osQzNVl8u4 zD2LwRrgyCM_15baJ6owL-T~B1rOM>03~_!m=V#BpRc}|!3L&{E47s7$!ZH(W_g5WF z1D<;FHqcpLBI}VXp!^gzb%wwNrKK$9ef^Gu*DwS;_$l_yc4UlSn-ufdazsW2DmvGX zcE@*>rEB&=yPIY=N>P)}pL(0qm`SWU`>Z5oC9B>{=}d4K32;>$%H|2T$@NMMQPhpk zuQ;NZeWN}yZ1*~uWvJcs+*a;+!|D74rLLi_j&)F|Pmx3Ch?QK?$UDrba5MasHCqk- z17ltHQ9VpXQwOpU=x3$cGSg|#2X-YkIo~!r@;lCu1PrqZTi6Nj2OLzeB+R>RYZ0|S zntb?X!xuwcgAu>v&!v1gJmbOPZXVpG$LVw_QP&aa!5WkPe#ajxt-&`tUEWIcOJGaF zeyQZx4(hkkkk7-({mJEXobmF{zzSN^fjeEUd`5QpK*A=_fy^uK=t19IFGBKOHx+fi zomKYZoszZ1lml@VQ90#7A2I(u-yofLU%{ay{hWjBUiss7MsBW@kN=0OG6S9V>Ja-9 zpPj5Q8}S#(LB3WG)W9*n@%xxpXgH~TO28ba0@q!r1&)U~qc!oSzM5vyLlo-*vV`p) z(zk22^hmyb&{19|T%Y;8pZK|NkJK%DRA-X+$5748?2n-7iKsjR6e2FYq_ z^}5=%G3E&5eZ~W8YpB`Iss@4lk+1-7<=|~5(noKK^7^}R1}IY6L}qvAhyqI4i3$ie zaFqO1ewyFgy9|-4!$|X8h(4j?)&)in}n9(uU-@>Lwm$c zr@L0QaW<@b@& z4K`h{<@$89Cizele?rlbwegMMXM;5Etw|ZF30^lc#-QXIFEF=n;Fk)zkxjB&Nvc^v zt(d>yXijcD&O6M%lW2W>Uo$wl6OM$WxgMxeG58Fc47F;q+Pi+j=bu!?xgv8KpC-w! zPhWFCGu}edCJDX^{zN2ARI1?Q8%SkXV(8%3 zMq&)QD+UJ6cklMSD2RV6Ilw>v z{xbN8|Erh5heSepy`%?AN`}};*V&QHp2)Ksih<9^QfF>GrlwVxfPut<&Y0N975@^4 zYWzXLQM4J-$hWr&8Mt*!OddsfkcjJQ_Pi{4EaJi%B zpfV-g_;sMbXZ@Gs_yU}W2f_dT`d`QQABP*Zpm;XF@yh>d+rwXxGh!=5nE%^{h)YIl z-}A5G$_x&f7brO2d;1(VrAHe@uB~kDSW__GdXZeB$9UL3E)9PJ&%m}UT{|+J?PH2) zTK>tnm6bfLQ46t`&160{n9`yXu?e-$n$k^n-|pA@xR_!g*N*9hz1Fppn-hoqx zGaI5BdxRfVwf+2{XR*6^oc|>+@A~=7tAGB6J2iCPDOjhT{jeFA*dG)qeVF%u+Kk7Q zMX|p8=(h?^@#`XjG?BORY`P06cO5*$CTC(8qTNt z?z7H4>#n=*TKE4<>&ut-eV$*kzAzJefz$W7t*B!f!Ddpt%kXB_`xXghf*i!F`+n-~ z-5%MdyXg3@eT{BMb1K6fl=M>18=TFIF~iPUQ2??2|k$^4cIoMPtJ|xzXDj1|2A+9EF`- zdGc++Jq6TgK=b^B*BBCtQmg%9zq~0TQYbIumL^=Ezc%G_3s<=rw8nLD6#JpN<&Rjg zhjUw3iNY!_tmjb$m-E7kAJn_A6-j@89DIMUrb_v8V6EntGMOJn_p^YZ=~Y_qFx=hR z8zu>lw-9KIU)vT~Pq5WgdT;_bwI56rCq@|^B&Dc)Q(?tp#N>K(74`B~G689;bI)2_BzzsJL-Eg-J+eyY;FP)g`MJRL zALBJ4v{TqeO_tvI6tg;+?FCJbxL0IBfN>w=;J%zF#rrON>6%) z3V4xsufG_I+?bnpgmq?=V;-L*G@I>^Et?ol=y~QJ+tckkv}P_27lfOgU#l6D*mlF^ z`!2qUJ-$x?bSf;j$LUQ4CH6qaqw#%vgD+UDp%{g>-=okDeiB1Nn&cXIaiZcyhflqq zvkSHjZGx88>ey3$R!#ktjM{TOfmcH`J$M}DpLBhdvuo7+`QwrC0jG`-1G`hHljttr_**)ayw4uA_E^4EcCoJ57)UaE22V@iIM7A-(2c@#V5@+7%fKduHI?Ig z^-y|F?VoxFjbW$d!#wfw2HNJcJDoY|kwVmRxXc4?BSHsfP*3^FB9Fmc37iY7j=dpX zADpqes`DdQsE+;hd>34D)PAkf*qFx_woUb4VRb@v>Zqa2DE2~7-nP5dhl14OG|IJm z#zS&sp)$Pa%JLya#wERaXbyHVN;o*7aVHI}Z(}#gXsYgm!sg#8mZKWlJKgV1To)3+ zC4cMtLnOErKjM9*k8R*bmhdjvvH$8A5oHFSlIdNP4Y;0eEJ``(7d#_`0O{gF%cGPb z#51#ZeUtMeic_X=|KYPF+pHF0=_$uPJ?0D5L=+;H@ zv1LW;%he1g?Do!u$->PU3`_P7=`-fYM=5WH=Iaqsf?B;5%Ax|MrvBnO=pkMW4ZO4W zcE&`vL0d+b^tXQ883wmISPU6)v|<;dYR(Ne-q>%{W8|}PULysUuZw0ZeQPif;&&q^ zHI&jytLc)@gbz7u1G(}Cy%NX{^-8`KQgzZe^0h&Ol2o1dmmadil>Er2OBTl04T8qz zgK4kvidI+Z74bCK0T4r5iB0tm=?)&cy0t;|3oaO^F9wvv(yEV5F!;0Tx}X5pMb~KNtjL+<@!HkFjBv zkC>ODAO22Nd8TIK*#Lwc>Oj{hkV(o_9Q*0A`xfL!Cs(ffbke)ji>N5K3XLVB>ES_d zT-z$z){rRLE&9?eXPMkG*tr=g3l^%1m0XN>+P`w8SRjM1nMO+9i{7ov{Rv+M6P6=4+Tz z6^gI{gwu9RfJbu-Fq)zrk6{OLYH1r00q2U$DPH~HV|bAvMCAVbEwB7(H1t;Yp*20wFllZ_F?w%FuCI@`4w`ZA7uSxtqXB>S6wM?7Qd>l!ixut1gE^b8{}4yy10Q zon@bhut=V0LyAsrAAE`Xq`m#A1bi>dMccnKvMrpA7ZrA^o1T%t+4;G%L-YAZcmeBo zjc`{1A}A2@Kbx)A6XZA-6Z2}L3U2w$DcbF<-UUyQze^Xo~tAk~*uR{amGlNFhw z4)!$;AT98QkSCfkw3Xb-$7;3M1>9~XVOI;5f*l3xls;=<%QU+RS zWIO2NlGY5R(bhM6%pNlNRpBE0P;R-XeZ19<{Ev}MQCsKQz8W#ToCxR&T(AZ;B=?&W z#tGw!BJuFKRT=OC{nLl-x{K4DhT4S%)XMcM<}RCBL%t1eCAhv}W5+;2|FD2a&Z+}# z2DF>&xVrGp$moqo4fq&+M0?H`mv5JgZLD|ecT=raQIq&GbTDgmk*;N6!Pp^q4Rg|t@K8pwd6Rf$1Wjhrgb50JS(rl3{}xAtsvC4QG=pWyKb0yVFA2z?~FIl zGtA-O{8DHB4837X)fY{*lr$6ka0nphebhjfrwT z8KmX`>@u!27g}QC5wKj@$OuANIqID1DRxEm*w!X0<#>5jfnmnwc+m!DiqfNZbpQ5u z-JQf4cR!ksLCfza_D7avW7xj_won@=qgBzZahpzPic=L(>;dY_0tQYDjuU<)pYRs? z7B&fW2aZ6$tW@saXd&Ui+4j_9OURPX7j3Gpt0tOl{C?WNJpot`0sgpXbH!A1}4zK^q&gN$THcFRrNbE;dsXLEWOu=nf( z>U)J|h0pqWGg=V@17H1zEfdu$ zD-NTNYM264G%`J^Pr|pI%(gqh%!%6rP4^MRgt|*XsCVBbz29f@L>9IItPSlxA_(Ax z+pV8ERWp}@w=jW8sMb^G29@dvx*vqfNN;~kz_?^@55mx@_6blL%jwz>V zKGhnE-GrQ=Jt!X-94S3%lU~4|G57139amu#Q{s>IEu-)M{laLnZJ?kA*88lPFs`w-I$GIO@RBWz;TNR^GPON8@s(vu`$f8PRQ!9EQNF5^26{eS!#=S0O40Wfqj1m`}Kh76AVVz#GMM z_D=j~MQg-E%@K=;8MnLtWnm|FEsR#&3KW!oS(t_7Jw^LCN~{<;$GO5q-&{51-zZEh zf0x3-v`^+qY8=dw+|%TY@=cuY{|sr4An%&EH?nKaL!o^FFI9ZKWT&sZ zW$btGeV0UGm6R3+f(`Q&pLr!MmWW{#$_2|*M{B6R_M4aEm+dV$f6AnW)4b^31MF!( z^P5>Oyi&)P%{t?S_sU12+Y7wq)LFFKVy5D9yB~48x0wyNQuGyqKXY`$XIyceF}cwx zrwJhnL&8Lw6&&{Us`{+;2ad4x*>I#yamE6H*BM6>8$cUvGED zRQ_InCNoBjb;|*(EZYY2FAG=^(J#!lO=GzQ*8oUiKu_oj89X&4<6-K3k2{+uVkkd7 zdM6N;JzOHTIvMl%eHSVC#;=IVpq#m@2#eB>Z4Rlu1(~yLAOH_l{7YhkPpP=CBmd4kg*~bHCm+Abv`^xFUkYd zPXTKN^k@a5FV*J%cAvXJ9gY!3gd$o+&N44B!wxo|vX)W(Nt5bxmW_;%H044LxCF+Ql zSd}9t>b9=zwk{JlO04NEU(UlrUZ(c=2$L|U)B{k1l;nJ-M*J>^wM49j3NQ&8@$+d_XGm3*RR!2zH243FX3M#- zztKz=`Y$xYY%{n-;OrRvaPaqCc>C#K1fj$OKjG|ufU#Xv``^LrzxmlNzX6ZZLcdM~ z*zBhz$yH;e_(LPHs3WN|y`!hYPv-SE0nc}`34fRbv0}vo7cqEwUI?sP#CM}4eYgr> zt-E_d_rLm2F#~`JfUo}pr2RjA?JuPJPmODd=-%OLDxa*m@017vUdJzndS=&4b#FcX ECwd5EUH||9 literal 0 HcmV?d00001 diff --git a/README.md b/README.md index b8237e7..94a8c98 100644 --- a/README.md +++ b/README.md @@ -114,3 +114,4 @@ This is a maintenance release, fixing our Google Safe Browsing lookup and some m ## Screenshots ## 1. WordPress AntiVirus settings +2. Theme scan results From 0342f4fcd163b8f84bf492b880ceaa3dac9dc1f6 Mon Sep 17 00:00:00 2001 From: Stefan Kalscheuer Date: Sat, 19 Dec 2020 12:08:02 +0100 Subject: [PATCH 13/17] Fix transparency report link (#74) --- inc/class-antivirus.php | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/inc/class-antivirus.php b/inc/class-antivirus.php index 7b355a3..444e271 100644 --- a/inc/class-antivirus.php +++ b/inc/class-antivirus.php @@ -713,7 +713,7 @@ public static function show_admin_menu() { echo wp_kses( /* translators: First placeholder (%s) starting link tag to transparency report, second placeholder closing link tag */ sprintf( __( 'Diagnosis and notification in suspicion case. For more details read %1$s the transparency report %2$s.', 'antivirus' ), $start_tag, $end_tag ), - array( 'a' => array( 'href' ) ) + array( 'a' => array( 'href' => array() ) ) ); ?>

From 7473f26902040857073fe49414a22f16f1632b9a Mon Sep 17 00:00:00 2001 From: Stefan Kalscheuer Date: Sat, 19 Dec 2020 12:12:33 +0100 Subject: [PATCH 14/17] Always register the cron job (#75) --- inc/class-antivirus.php | 6 ++---- tests/test-plugin.php | 6 +++--- 2 files changed, 5 insertions(+), 7 deletions(-) diff --git a/inc/class-antivirus.php b/inc/class-antivirus.php index 444e271..1c883f3 100644 --- a/inc/class-antivirus.php +++ b/inc/class-antivirus.php @@ -43,10 +43,8 @@ public function __construct() { // Save the plugin basename. self::$base = plugin_basename( ANTIVIRUS_FILE ); - // Run the daily cronjob. - if ( defined( 'DOING_CRON' ) ) { - add_action( 'antivirus_daily_cronjob', array( __CLASS__, 'do_daily_cronjob' ) ); - } + // Register the daily cronjob. + add_action( 'antivirus_daily_cronjob', array( __CLASS__, 'do_daily_cronjob' ) ); if ( is_admin() ) { /* AJAX */ diff --git a/tests/test-plugin.php b/tests/test-plugin.php index e26b579..5505b5a 100644 --- a/tests/test-plugin.php +++ b/tests/test-plugin.php @@ -40,7 +40,7 @@ public function tearDown(): void { */ public function test_construction_normal() { WP_Mock::userFunction( 'is_admin' )->andReturnFalse(); - WP_Mock::expectActionNotAdded( 'antivirus_daily_cronjob', array( AntiVirus::class, 'do_daily_cronjob' ) ); + WP_Mock::expectActionAdded( 'antivirus_daily_cronjob', array( AntiVirus::class, 'do_daily_cronjob' ) ); WP_Mock::expectActionNotAdded( 'wp_ajax_get_ajax_response', array( AntiVirus::class, 'get_ajax_response' ) ); WP_Mock::expectActionNotAdded( 'admin_menu', array( AntiVirus::class, 'add_sidebar_menu' ) ); WP_Mock::expectActionNotAdded( 'admin_notices', array( AntiVirus::class, 'show_dashboard_notice' ) ); @@ -55,7 +55,7 @@ public function test_construction_normal() { */ public function test_construction_admin() { WP_Mock::userFunction( 'is_admin' )->andReturnTrue(); - WP_Mock::expectActionNotAdded( 'antivirus_daily_cronjob', array( AntiVirus::class, 'do_daily_cronjob' ) ); + WP_Mock::expectActionAdded( 'antivirus_daily_cronjob', array( AntiVirus::class, 'do_daily_cronjob' ) ); WP_Mock::expectActionNotAdded( 'wp_ajax_get_ajax_response', array( AntiVirus::class, 'get_ajax_response' ) ); WP_Mock::expectActionAdded( 'admin_menu', array( AntiVirus::class, 'add_sidebar_menu' ) ); WP_Mock::expectActionAdded( 'admin_notices', array( AntiVirus::class, 'show_dashboard_notice' ) ); @@ -72,7 +72,7 @@ public function test_construction_admin() { public function test_construction_ajax() { WP_Mock::userFunction( 'is_admin' )->andReturnTrue(); define( 'DOING_AJAX', true ); - WP_Mock::expectActionNotAdded( 'antivirus_daily_cronjob', array( AntiVirus::class, 'do_daily_cronjob' ) ); + WP_Mock::expectActionAdded( 'antivirus_daily_cronjob', array( AntiVirus::class, 'do_daily_cronjob' ) ); WP_Mock::expectActionAdded( 'wp_ajax_get_ajax_response', array( AntiVirus::class, 'get_ajax_response' ) ); WP_Mock::expectActionNotAdded( 'admin_menu', array( AntiVirus::class, 'add_sidebar_menu' ) ); WP_Mock::expectActionNotAdded( 'admin_notices', array( AntiVirus::class, 'show_dashboard_notice' ) ); From de4f3c7810e8bc426cba1d47d8c42541c18b7e21 Mon Sep 17 00:00:00 2001 From: Patrick Robrecht Date: Sat, 19 Dec 2020 13:34:21 +0000 Subject: [PATCH 15/17] Add code style check for tests (with some exceptions) (#77) --- .gitignore | 1 + inc/class-antivirus-checksumverifier.php | 1 - phpcs.xml | 10 ++++++- tests/antivirustestcase.php | 33 ++++++++++++++---------- tests/bootstrap.php | 1 + tests/test-checksumverifier.php | 12 ++------- tests/test-plugin.php | 21 +++++---------- tests/test-safebrowsing.php | 17 ++++-------- 8 files changed, 43 insertions(+), 53 deletions(-) diff --git a/.gitignore b/.gitignore index d0ef9ce..e67662c 100644 --- a/.gitignore +++ b/.gitignore @@ -3,4 +3,5 @@ css/*.min.css js/*.min.js vendor/ node_modules/ +.phpunit.result.cache clover.xml diff --git a/inc/class-antivirus-checksumverifier.php b/inc/class-antivirus-checksumverifier.php index 1a2bb43..0eeb5a4 100644 --- a/inc/class-antivirus-checksumverifier.php +++ b/inc/class-antivirus-checksumverifier.php @@ -43,7 +43,6 @@ public static function verify_files() { // Write to log. if ( defined( 'WP_DEBUG_LOG' ) && WP_DEBUG_LOG ) { - // @codingStandardsIgnoreLine Ignore this call for now... error_log( sprintf( '%s: %s', diff --git a/phpcs.xml b/phpcs.xml index bc6956e..673f4ea 100644 --- a/phpcs.xml +++ b/phpcs.xml @@ -8,6 +8,7 @@ antivirus.php inc + tests @@ -19,7 +20,14 @@ + + + tests + + - + + tests + diff --git a/tests/antivirustestcase.php b/tests/antivirustestcase.php index 8b802a4..c492098 100644 --- a/tests/antivirustestcase.php +++ b/tests/antivirustestcase.php @@ -7,10 +7,15 @@ /** * Class AntiVirus_TestCase. + * + * Setup for unit test cases. */ abstract class AntiVirus_TestCase extends WP_Mock\Tools\TestCase { + /** - * @var array Plugin options. + * Plugin options. + * + * @var array */ private $options = array( 'cronjob_enable' => 0, @@ -38,7 +43,7 @@ function () { ); WP_Mock::userFunction( 'is_email' )->withAnyArgs()->andReturnUsing( function ( $e ) { - return boolval( filter_var( $e, FILTER_VALIDATE_EMAIL ) ); + return (bool) filter_var( $e, FILTER_VALIDATE_EMAIL ); } ); WP_Mock::userFunction( 'get_bloginfo' )->with( 'name' )->andReturn( 'AntiVirus Test Blog' ); @@ -48,23 +53,23 @@ function ( $e ) { ->withAnyArgs() ->andReturnUsing( function ( $args, $url ) { - if ( false === strpos( $url, '?' )) { + if ( false === strpos( $url, '?' ) ) { $url .= '?'; } else { $url .= '&'; } return $url . - implode( - '&', - array_map( - function( $k, $v ) { - return urlencode( $k ) . '=' . urlencode( $v ); - }, - array_keys( $args ), - $args - ) - ); + implode( + '&', + array_map( + function( $k, $v ) { + return urlencode( $k ) . '=' . urlencode( $v ); + }, + array_keys( $args ), + $args + ) + ); } ); } @@ -83,7 +88,7 @@ public function tearDown(): void { * * @param array $overrides Associative array of overridden options. */ - protected function update_options( $overrides ) { + protected function update_options( $overrides ): void { foreach ( $this->options as $k => &$v ) { if ( isset( $overrides[ $k ] ) ) { $v = $overrides[ $k ]; diff --git a/tests/bootstrap.php b/tests/bootstrap.php index a72e45f..cf0edaf 100644 --- a/tests/bootstrap.php +++ b/tests/bootstrap.php @@ -5,6 +5,7 @@ * @package AntiVirus */ +// phpcs:ignore Squiz.Commenting.FileComment.Missing require_once __DIR__ . '/../vendor/autoload.php'; WP_Mock::bootstrap(); diff --git a/tests/test-checksumverifier.php b/tests/test-checksumverifier.php index 7b0d167..990b924 100644 --- a/tests/test-checksumverifier.php +++ b/tests/test-checksumverifier.php @@ -23,19 +23,10 @@ public function setUp(): void { require_once __DIR__ . '/../inc/class-antivirus-checksumverifier.php'; } - /** - * Tear down test. - * - * @inheritdoc - */ - public function tearDown(): void { - parent::tearDown(); - } - /** * Test SafeBrowsing check. */ - public function test() { + public function test(): void { $testfile1 = __DIR__ . '/testfile1'; $testfile2 = __DIR__ . '/testfile2'; $testfile3 = __DIR__ . '/testfile3'; @@ -152,6 +143,7 @@ public function test() { * Case 4: Empty cache, retrieve valid API response. One match, one non-existing file. */ AntiVirus_ChecksumVerifier::verify_files(); + self::assertNull( $mail_recipient, 'no mail should be sent for non-existing file' ); /* diff --git a/tests/test-plugin.php b/tests/test-plugin.php index 5505b5a..e52fd07 100644 --- a/tests/test-plugin.php +++ b/tests/test-plugin.php @@ -26,25 +26,16 @@ public function setUp(): void { WP_Mock::passthruFunction( 'plugin_basename' ); } - /** - * Tear down test. - * - * @inheritdoc - */ - public function tearDown(): void { - parent::tearDown(); - } - /** * Test plugin construction for normal visitors (no cron, no admin). */ - public function test_construction_normal() { + public function test_construction_normal(): void { WP_Mock::userFunction( 'is_admin' )->andReturnFalse(); WP_Mock::expectActionAdded( 'antivirus_daily_cronjob', array( AntiVirus::class, 'do_daily_cronjob' ) ); WP_Mock::expectActionNotAdded( 'wp_ajax_get_ajax_response', array( AntiVirus::class, 'get_ajax_response' ) ); WP_Mock::expectActionNotAdded( 'admin_menu', array( AntiVirus::class, 'add_sidebar_menu' ) ); WP_Mock::expectActionNotAdded( 'admin_notices', array( AntiVirus::class, 'show_dashboard_notice' ) ); - WP_Mock::expectActionNotAdded( 'plugin_row_meta', array( AntiVirus::class, 'init_row_meta' ), 10, 2 ); + WP_Mock::expectActionNotAdded( 'plugin_row_meta', array( AntiVirus::class, 'init_row_meta' ) ); WP_Mock::expectActionNotAdded( 'plugin_action_links_antivirus.php', array( AntiVirus::class, 'init_action_links' ) ); new AntiVirus(); self::assertTrue( true ); @@ -53,7 +44,7 @@ public function test_construction_normal() { /** * Test plugin construction for admin visitors. */ - public function test_construction_admin() { + public function test_construction_admin(): void { WP_Mock::userFunction( 'is_admin' )->andReturnTrue(); WP_Mock::expectActionAdded( 'antivirus_daily_cronjob', array( AntiVirus::class, 'do_daily_cronjob' ) ); WP_Mock::expectActionNotAdded( 'wp_ajax_get_ajax_response', array( AntiVirus::class, 'get_ajax_response' ) ); @@ -69,7 +60,7 @@ public function test_construction_admin() { /** * Test plugin construction for AJAX calls. */ - public function test_construction_ajax() { + public function test_construction_ajax(): void { WP_Mock::userFunction( 'is_admin' )->andReturnTrue(); define( 'DOING_AJAX', true ); WP_Mock::expectActionAdded( 'antivirus_daily_cronjob', array( AntiVirus::class, 'do_daily_cronjob' ) ); @@ -77,7 +68,7 @@ public function test_construction_ajax() { WP_Mock::expectActionNotAdded( 'admin_menu', array( AntiVirus::class, 'add_sidebar_menu' ) ); WP_Mock::expectActionNotAdded( 'admin_notices', array( AntiVirus::class, 'show_dashboard_notice' ) ); WP_Mock::expectActionNotAdded( 'deactivate_antivirus.php', array( AntiVirus::class, 'clear_scheduled_hook' ) ); - WP_Mock::expectActionNotAdded( 'plugin_row_meta', array( AntiVirus::class, 'init_row_meta' ), 10, 2 ); + WP_Mock::expectActionNotAdded( 'plugin_row_meta', array( AntiVirus::class, 'init_row_meta' ) ); WP_Mock::expectActionNotAdded( 'plugin_action_links_antivirus.php', array( AntiVirus::class, 'init_action_links' ) ); new AntiVirus(); self::assertTrue( true ); @@ -86,7 +77,7 @@ public function test_construction_ajax() { /** * Test daily cron execution. */ - public function test_do_daily_cronjob() { + public function test_do_daily_cronjob(): void { $mock_ci = Mockery::mock( 'overload:AntiVirus_CheckInternals' ); $mock_sb = Mockery::mock( 'overload:AntiVirus_SafeBrowsing' ); $mock_cv = Mockery::mock( 'overload:AntiVirus_ChecksumVerifier' ); diff --git a/tests/test-safebrowsing.php b/tests/test-safebrowsing.php index ba4587d..56ec23c 100644 --- a/tests/test-safebrowsing.php +++ b/tests/test-safebrowsing.php @@ -23,19 +23,10 @@ public function setUp(): void { require_once __DIR__ . '/../inc/class-antivirus-safebrowsing.php'; } - /** - * Tear down test. - * - * @inheritdoc - */ - public function tearDown(): void { - parent::tearDown(); - } - /** * Test SafeBrowsing check. */ - public function test() { + public function test(): void { // Emulate blog URL and non-default locale. WP_Mock::userFunction( 'get_bloginfo' ) ->with( 'url' ) @@ -83,10 +74,12 @@ public function test() { self::assertIsArray( $request_data, 'unexpected request' ); $request_body = json_decode( $request_data['body'] ); - self::assertEquals( 1, count( $request_body->threatInfo->threatEntries ), 'unexpected number of requested threat entries' ); + // phpcs:ignore WordPress.NamingConventions.ValidVariableName.UsedPropertyNotSnakeCase + $entries = $request_body->threatInfo->threatEntries; + self::assertCount( 1, $entries, 'unexpected number of requested threat entries' ); self::assertEquals( urlencode( 'https://antivirus.pluginkollektiv.org/test/' ), - $request_body->threatInfo->threatEntries[0]->url, + $entries[0]->url, 'unexpected blog URL in requested threat entries' ); From 266215d24be77d1863620d26eba85c3ee5b3610f Mon Sep 17 00:00:00 2001 From: Stefan Kalscheuer Date: Sat, 19 Dec 2020 15:17:43 +0100 Subject: [PATCH 16/17] Deprecate pseudo-constructor and add init() method (#79) The constructor only does static intiialization. The instance() method indicates some kind of singleton pattern, but actually only triggers the constructor without returning anything. Deprecate both in favor of a semantically more precise init() method. --- antivirus.php | 2 +- inc/class-antivirus.php | 26 ++++++++++++++++++++------ tests/test-plugin.php | 6 +++--- 3 files changed, 24 insertions(+), 10 deletions(-) diff --git a/antivirus.php b/antivirus.php index c825afd..9590890 100644 --- a/antivirus.php +++ b/antivirus.php @@ -63,7 +63,7 @@ function antivirus_autoload( $class ) { // Initialize the plugin. -add_action( 'plugins_loaded', array( 'AntiVirus', 'instance' ), 99 ); +add_action( 'plugins_loaded', array( 'AntiVirus', 'init' ), 99 ); /* Hooks */ register_activation_hook( __FILE__, array( 'AntiVirus', 'activation' ) ); diff --git a/inc/class-antivirus.php b/inc/class-antivirus.php index 1c883f3..7cac36f 100644 --- a/inc/class-antivirus.php +++ b/inc/class-antivirus.php @@ -22,19 +22,20 @@ class AntiVirus { /** * Pseudo constructor. + * + * @deprecated Since 1.4, use init() instead. + * @see AntiVirus::init() */ public static function instance() { - new self(); + self::init(); } /** - * Constructor. - * - * Should not be called directly, + * Initialize the plugin. * - * @see AntiVirus::instance() + * @since 1.4 */ - public function __construct() { + public static function init() { // Don't run during autosave or XML-RPC request. if ( ( defined( 'DOING_AUTOSAVE' ) && DOING_AUTOSAVE ) || ( defined( 'XMLRPC_REQUEST' ) && XMLRPC_REQUEST ) ) { return; @@ -61,6 +62,19 @@ public function __construct() { } } + /** + * Constructor. + * + * Should not be called directly, + * + * @deprecated Since 1.4, use init() instead. + * @see AntiVirus::init() + */ + public function __construct() { + // Nothing to construct, just run the initialization for backwards compatibility. + self::init(); + } + /** * Adds a link to the plugin settings in the plugin list table. * diff --git a/tests/test-plugin.php b/tests/test-plugin.php index e52fd07..dfc333c 100644 --- a/tests/test-plugin.php +++ b/tests/test-plugin.php @@ -37,7 +37,7 @@ public function test_construction_normal(): void { WP_Mock::expectActionNotAdded( 'admin_notices', array( AntiVirus::class, 'show_dashboard_notice' ) ); WP_Mock::expectActionNotAdded( 'plugin_row_meta', array( AntiVirus::class, 'init_row_meta' ) ); WP_Mock::expectActionNotAdded( 'plugin_action_links_antivirus.php', array( AntiVirus::class, 'init_action_links' ) ); - new AntiVirus(); + AntiVirus::init(); self::assertTrue( true ); } @@ -53,7 +53,7 @@ public function test_construction_admin(): void { WP_Mock::expectActionAdded( 'deactivate_antivirus.php', array( AntiVirus::class, 'clear_scheduled_hook' ) ); WP_Mock::expectActionAdded( 'plugin_row_meta', array( AntiVirus::class, 'init_row_meta' ), 10, 2 ); WP_Mock::expectActionAdded( 'plugin_action_links_antivirus.php', array( AntiVirus::class, 'init_action_links' ) ); - new AntiVirus(); + AntiVirus::init(); self::assertTrue( true ); } @@ -70,7 +70,7 @@ public function test_construction_ajax(): void { WP_Mock::expectActionNotAdded( 'deactivate_antivirus.php', array( AntiVirus::class, 'clear_scheduled_hook' ) ); WP_Mock::expectActionNotAdded( 'plugin_row_meta', array( AntiVirus::class, 'init_row_meta' ) ); WP_Mock::expectActionNotAdded( 'plugin_action_links_antivirus.php', array( AntiVirus::class, 'init_action_links' ) ); - new AntiVirus(); + AntiVirus::init(); self::assertTrue( true ); } From 2191d79e91707264bd145cdcfadeb43caf4e4279 Mon Sep 17 00:00:00 2001 From: Patrick Robrecht Date: Sat, 19 Dec 2020 18:59:50 +0000 Subject: [PATCH 17/17] Prepare the release of version 1.4.0 (#78) * Prepare the release of version 1.4.0, declare WP 5.6 compatibility, update links to link pluginkollektiv.org * update plugin version for SafeBrowsing call to 1.4.0 * remove version from composer.json, fix license string, update dev-deps * update link in email signature * Harmonize plugin URI (without trailing slash) * update composer action for GH workflows * add test code to .distignore * remove export-ignore from distignore Co-authored-by: Stefan Kalscheuer --- .distignore | 6 +- .../wordpress-plugin-asset-update.yml | 2 +- .github/workflows/wordpress-plugin-deploy.yml | 2 +- CHANGELOG.md | 16 +- README.md | 48 ++---- antivirus.php | 4 +- composer.json | 3 +- composer.lock | 28 ++-- inc/class-antivirus-safebrowsing.php | 2 +- inc/class-antivirus.php | 6 +- package-lock.json | 151 ++++++++++-------- package.json | 4 +- 12 files changed, 131 insertions(+), 141 deletions(-) diff --git a/.distignore b/.distignore index 4797e2a..ed8d3b5 100644 --- a/.distignore +++ b/.distignore @@ -2,11 +2,14 @@ /.git /.github /.wordpress-org +/bin /node_modules +/tests /vendor # Files /.distignore +/.editorconfig /.eslintrc.json /.gitattributes /.gitignore @@ -18,4 +21,5 @@ /package-lock.json /composer.lock /phpcs.xml -/phpunit.xml export-ignore +/phpunit.xml + diff --git a/.github/workflows/wordpress-plugin-asset-update.yml b/.github/workflows/wordpress-plugin-asset-update.yml index 951d0e0..4d8efa3 100644 --- a/.github/workflows/wordpress-plugin-asset-update.yml +++ b/.github/workflows/wordpress-plugin-asset-update.yml @@ -9,7 +9,7 @@ jobs: runs-on: ubuntu-latest steps: - uses: actions/checkout@v2 - - uses: php-actions/composer@v1 + - uses: php-actions/composer@v4 - name: WordPress.org plugin asset/readme update uses: 10up/action-wordpress-plugin-asset-update@stable env: diff --git a/.github/workflows/wordpress-plugin-deploy.yml b/.github/workflows/wordpress-plugin-deploy.yml index d25468d..fd0ff34 100644 --- a/.github/workflows/wordpress-plugin-deploy.yml +++ b/.github/workflows/wordpress-plugin-deploy.yml @@ -10,7 +10,7 @@ jobs: runs-on: ubuntu-latest steps: - uses: actions/checkout@v2 - - uses: php-actions/composer@v1 + - uses: php-actions/composer@v4 - name: WordPress Plugin Deploy uses: 10up/action-wordpress-plugin-deploy@stable env: diff --git a/CHANGELOG.md b/CHANGELOG.md index f4b7413..0811764 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -1,6 +1,6 @@ # Changelog -### unreleased ### +### 1.4.0 ### * **English** * Option to provide a custom key for the Google Safe Browsing API * Scan files of parent theme if a child theme is active @@ -39,13 +39,13 @@ * added German formal translation * updated, translated + formatted README.md * updated expired link URLs in plugin and languages files - * updated [plugin authors](https://gist.github.com/glueckpress/f058c0ab973d45a72720) + * updated [plugin authors](https://pluginkollektiv.org/hello-world/) * **Deutsch** * Eine POT-Datei erstellt * formale deutsche Übersetzung (Sie) hinzugefügt * README.md aktualisiert, übersetzt und formatiert * Abgelaufene Link-Adressen in dem Plug-in und in den Sprachdateien aktualisiert - * [Plugin Author](https://gist.github.com/glueckpress/f058c0ab973d45a72720) aktualisiert + * [Plugin Author](https://pluginkollektiv.org/de/hallo-welt/) aktualisiert ### 1.3.8 ### * **English** @@ -73,9 +73,11 @@ ### 1.3.4 ### * **English** - * [Google Safe Browsing](http://en.wikipedia.org/wiki/Google_Safe_Browsing) for malware and phishing monitoring with e-mail notification. [Additional information on Google+](https://plus.google.com/110569673423509816572/posts/H72FFwvna1i) (only German) + * [Google Safe Browsing](http://en.wikipedia.org/wiki/Google_Safe_Browsing) for malware and phishing monitoring with e-mail notification. + [Additional information](https://antivirus.pluginkollektiv.org/2013/05/08/new-features-in-antivirus-for-wordpress/) * **Deutsch** - * Benachrichtigung per E-Mail, sobald [Google Safe Browsing](http://en.wikipedia.org/wiki/Google_Safe_Browsing) Malware im Blog erkennt. [Mehr auf Google+](https://plus.google.com/110569673423509816572/posts/H72FFwvna1i) + * Benachrichtigung per E-Mail, sobald [Google Safe Browsing](http://en.wikipedia.org/wiki/Google_Safe_Browsing) Malware im Blog erkennt. + [Mehr](https://antivirus.pluginkollektiv.org/de/2013/05/08/neue-funktion-im-antivirus-fuer-wordpress/) ### 1.3.3 ### * **English** @@ -169,10 +171,10 @@ ### 0.5 ### * **English** - * Add security scan for the current [WordPress permalink back door](http://mashable.com/2009/09/05/wordpress-attack/ "WordPress permalink back door") + * Add security scan for the current [WordPress permalink back door](http://mashable.com/2009/09/05/wordpress-attack/) * Software architecture changes * **Deutsch** - * Sicherheits-Überprüfung für die aktuelle [Wordpress Permalink Hintertür](http://mashable.com/2009/09/05/wordpress-attack/ "WordPress Permalink Hintertür") hinzugefügt + * Sicherheits-Überprüfung für die aktuelle [Wordpress Permalink Hintertür](http://mashable.com/2009/09/05/wordpress-attack/) hinzugefügt * Software-Architektur Änderungen ### 0.4 ### diff --git a/README.md b/README.md index 94a8c98..fc53418 100644 --- a/README.md +++ b/README.md @@ -4,8 +4,8 @@ * Donate link: https://www.paypal.com/cgi-bin/webscr?cmd=_donations&business=TD4AMD2D8EMZW * Requires at least: 3.8 * Requires PHP: 5.2 -* Tested up to: 5.4 -* Stable tag: 1.3.10 +* Tested up to: 5.6 +* Stable tag: 1.4.0 * License: GPLv2 or later * License URI: http://www.gnu.org/licenses/gpl-2.0.html @@ -52,12 +52,17 @@ In case your WordPress site has been hacked, *AntiVirus* will help you to become ### Will AntiVirus protect my site from being hacked? ### Not literally "protect from". The plugin’s purpose is to *detect* any "hack" that has already happened and enable you to take immediate action upon it. -A complete documentation is available in the [GitHub repository Wiki](https://github.com/pluginkollektiv/antivirus/wiki). +A complete documentation is available on the [AntiVirus website](https://antivirus.pluginkollektiv.org/documentation/). ## Changelog ## -### 1.3.10 ### +### 1.4.0 ### +* Option to provide a custom key for the Google Safe Browsing API +* Scan files of parent theme if a child theme is active +* Verify checksums of WP core files (integrated functionality from _Checksum Verifier_ plugin) +* Ability to enable _Safe Browsing_ and _Checksum Verifier_ as cronjob without Theme scan +### 1.3.10 ### * Updated PayPal link for donations * Improve coding standards * Translation fixes, improvements and cleanups @@ -74,43 +79,12 @@ A complete documentation is available in the [GitHub repository Wiki](https://gi * updated expired link URLs in plugin and languages files * updated [plugin authors](https://gist.github.com/glueckpress/f058c0ab973d45a72720) -### 1.3.8 ### -* Detection and warning for the [MailPoet Vulnerability](http://blog.sucuri.net/2014/07/mailpoet-vulnerability-exploited-in-the-wild-breaking-thousands-of-wordpress-sites.html) - -### 1.3.7 ### -* Update the Google Safe Browsing Lookup API to v3.1 - -### 1.3.6 ### -* Code revision and data validation - -### 1.3.5 ### -* Optimizations for WordPress 3.8 - -### 1.3.4 ### -* [Google Safe Browsing](http://en.wikipedia.org/wiki/Google_Safe_Browsing) for malware and phishing monitoring with e-mail notification. [Additional information on Google+](https://plus.google.com/110569673423509816572/posts/H72FFwvna1i) (only german) - -### 1.3.3 ### -* Add inspection for iFrames -* Retina support for teaser and screenshot - -### 1.3.2 ### -* Remove the check for include and require commands (#wpforce) - -### 1.3.1 ### -* Compatibility with WordPress 3.4 -* High-resolution plugin icon for retina displays -* Remove icon from the admin sidebar -* System requirements: From PHP 5.0 to PHP 5.1 - -### 1.3 ### -* Xmas Edition - For the complete changelog, check out our [GitHub repository](https://github.com/pluginkollektiv/antivirus). ## Upgrade Notice ## -### 1.3.10 ### -This is a maintenance release, fixing our Google Safe Browsing lookup and some minor issues. +### 1.4.0 ### +This is a feature release which integrates the functionality from _Checksum Verifier_ plugin. ## Screenshots ## 1. WordPress AntiVirus settings diff --git a/antivirus.php b/antivirus.php index 9590890..8adf6f8 100644 --- a/antivirus.php +++ b/antivirus.php @@ -4,11 +4,11 @@ * Description: Security plugin to protect your blog or website against exploits and spam injections. * Author: pluginkollektiv * Author URI: https://pluginkollektiv.org - * Plugin URI: https://wordpress.org/plugins/antivirus/ + * Plugin URI: https://antivirus.pluginkollektiv.org * Text Domain: antivirus * License: GPLv2 or later * License URI: http://www.gnu.org/licenses/gpl-2.0.html - * Version: 1.3.10 + * Version: 1.4.0 * * [](http://coderisk.com/wp/plugin/antivirus/RIPS-x1EDAuZC-C) * diff --git a/composer.json b/composer.json index 3afa133..ef1adb1 100644 --- a/composer.json +++ b/composer.json @@ -1,9 +1,8 @@ { "name": "pluginkollektiv/antivirus", "description": "Security plugin to protect your blog or website against exploits and spam injections.", - "version": "1.3.10", "type": "wordpress-plugin", - "license": "GPL-2.0+", + "license": "GPL-2.0-or-later", "require": { "php": ">=5.2", "ext-json": "*" diff --git a/composer.lock b/composer.lock index d6dbb8f..168db8a 100644 --- a/composer.lock +++ b/composer.lock @@ -4,7 +4,7 @@ "Read more about it at https://getcomposer.org/doc/01-basic-usage.md#installing-dependencies", "This file is @generated automatically" ], - "content-hash": "f701cf16dab144acc7ae2c9fdf941f78", + "content-hash": "28ca1386a7bf29dc8ff66804d0b912ba", "packages": [], "packages-dev": [ { @@ -655,16 +655,16 @@ }, { "name": "phar-io/version", - "version": "3.0.3", + "version": "3.0.4", "source": { "type": "git", "url": "https://github.com/phar-io/version.git", - "reference": "726c026815142e4f8677b7cb7f2249c9ffb7ecae" + "reference": "e4782611070e50613683d2b9a57730e9a3ba5451" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/phar-io/version/zipball/726c026815142e4f8677b7cb7f2249c9ffb7ecae", - "reference": "726c026815142e4f8677b7cb7f2249c9ffb7ecae", + "url": "https://api.github.com/repos/phar-io/version/zipball/e4782611070e50613683d2b9a57730e9a3ba5451", + "reference": "e4782611070e50613683d2b9a57730e9a3ba5451", "shasum": "" }, "require": { @@ -700,9 +700,9 @@ "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.0.3" + "source": "https://github.com/phar-io/version/tree/3.0.4" }, - "time": "2020-11-30T09:21:21+00:00" + "time": "2020-12-13T23:18:30+00:00" }, { "name": "phpcompatibility/php-compatibility", @@ -1036,16 +1036,16 @@ }, { "name": "phpspec/prophecy", - "version": "1.12.1", + "version": "1.12.2", "source": { "type": "git", "url": "https://github.com/phpspec/prophecy.git", - "reference": "8ce87516be71aae9b956f81906aaf0338e0d8a2d" + "reference": "245710e971a030f42e08f4912863805570f23d39" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/phpspec/prophecy/zipball/8ce87516be71aae9b956f81906aaf0338e0d8a2d", - "reference": "8ce87516be71aae9b956f81906aaf0338e0d8a2d", + "url": "https://api.github.com/repos/phpspec/prophecy/zipball/245710e971a030f42e08f4912863805570f23d39", + "reference": "245710e971a030f42e08f4912863805570f23d39", "shasum": "" }, "require": { @@ -1057,7 +1057,7 @@ }, "require-dev": { "phpspec/phpspec": "^6.0", - "phpunit/phpunit": "^8.0 || ^9.0 <9.3" + "phpunit/phpunit": "^8.0 || ^9.0" }, "type": "library", "extra": { @@ -1097,9 +1097,9 @@ ], "support": { "issues": "https://github.com/phpspec/prophecy/issues", - "source": "https://github.com/phpspec/prophecy/tree/1.12.1" + "source": "https://github.com/phpspec/prophecy/tree/1.12.2" }, - "time": "2020-09-29T09:10:42+00:00" + "time": "2020-12-19T10:15:11+00:00" }, { "name": "phpunit/php-code-coverage", diff --git a/inc/class-antivirus-safebrowsing.php b/inc/class-antivirus-safebrowsing.php index 0f7b997..1f11eb0 100644 --- a/inc/class-antivirus-safebrowsing.php +++ b/inc/class-antivirus-safebrowsing.php @@ -44,7 +44,7 @@ public static function check_safe_browsing() { array( 'client' => array( 'clientId' => 'wpantivirus', - 'clientVersion' => '1.3.10', + 'clientVersion' => '1.4.0', ), 'threatInfo' => array( 'threatTypes' => array( diff --git a/inc/class-antivirus.php b/inc/class-antivirus.php index 7cac36f..012e9e3 100644 --- a/inc/class-antivirus.php +++ b/inc/class-antivirus.php @@ -307,7 +307,7 @@ protected static function _send_warning_notification( $subject, $body ) { "%s\r\n\r\n\r\n%s\r\n%s\r\n", $body, esc_html__( 'Notify message by AntiVirus for WordPress', 'antivirus' ), - esc_html__( 'http://wpantivirus.com', 'antivirus' ) + esc_html__( 'https://antivirus.pluginkollektiv.org', 'antivirus' ) ) ); } @@ -802,8 +802,8 @@ class="regular-text" %s', - 'https://github.com/pluginkollektiv/antivirus/wiki', - esc_html__( 'Manual', 'antivirus' ) + 'https://antivirus.pluginkollektiv.org/documentation/', + esc_html__( 'Documentation', 'antivirus' ) ); ?> • diff --git a/package-lock.json b/package-lock.json index 2190294..651ca79 100644 --- a/package-lock.json +++ b/package-lock.json @@ -377,9 +377,9 @@ } }, "@wordpress/eslint-plugin": { - "version": "7.3.0", - "resolved": "https://registry.npmjs.org/@wordpress/eslint-plugin/-/eslint-plugin-7.3.0.tgz", - "integrity": "sha512-7wIFzzc14E1XuuT9haBuhoA9FRUGWlbD4Oek+XkiZlzNVqZI3slgbtIFJ6/Mfij1V18rv6Ns9a1cPJLtCU8JHQ==", + "version": "7.4.0", + "resolved": "http://nexus/repository/npm-registry/@wordpress/eslint-plugin/-/eslint-plugin-7.4.0.tgz", + "integrity": "sha512-HJpDYz2drtC9rY8MiYtYJ3cimioEIweGyb3P2DQTjUZ3sC4AGg+97PhXLHUdKfsFQ31JRxyLS9kKuGdDVBwWww==", "dev": true, "requires": { "@wordpress/prettier-config": "^0.4.0", @@ -393,7 +393,7 @@ "eslint-plugin-react": "^7.20.0", "eslint-plugin-react-hooks": "^4.0.4", "globals": "^12.0.0", - "prettier": "npm:wp-prettier@2.0.5", + "prettier": "npm:wp-prettier@2.2.1-beta-1", "requireindex": "^1.2.0" } }, @@ -511,9 +511,9 @@ "dev": true }, "astral-regex": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/astral-regex/-/astral-regex-1.0.0.tgz", - "integrity": "sha512-+Ryf6g3BKoRc7jfp7ad8tM4TtMiaWvbF/1/sQcZPkkS7ag3D5nMBCe2UfOTONtAkaG0tO0ij3C5Lwmf1EiyjHg==", + "version": "2.0.0", + "resolved": "http://nexus/repository/npm-registry/astral-regex/-/astral-regex-2.0.0.tgz", + "integrity": "sha512-Z7tMw1ytTXt5jqMcOP+OQteU1VuNK9Y02uuJtKQ1Sv69jXQKKg5cibLwGJow8yzZP+eAc18EmLGPal0bp36rvQ==", "dev": true }, "autoprefixer": { @@ -957,9 +957,9 @@ "dev": true }, "eslint": { - "version": "7.15.0", - "resolved": "https://registry.npmjs.org/eslint/-/eslint-7.15.0.tgz", - "integrity": "sha512-Vr64xFDT8w30wFll643e7cGrIkPEU50yIiI36OdSIDoSGguIeaLzBo0vpGvzo9RECUqq7htURfwEtKqwytkqzA==", + "version": "7.16.0", + "resolved": "http://nexus/repository/npm-registry/eslint/-/eslint-7.16.0.tgz", + "integrity": "sha512-iVWPS785RuDA4dWuhhgXTNrGxHHK3a8HLSMBgbbU59ruJDubUraXN8N5rn7kb8tG6sjg74eE0RA3YWT51eusEw==", "dev": true, "requires": { "@babel/code-frame": "^7.0.0", @@ -996,7 +996,7 @@ "semver": "^7.2.1", "strip-ansi": "^6.0.0", "strip-json-comments": "^3.1.0", - "table": "^5.2.3", + "table": "^6.0.4", "text-table": "^0.2.0", "v8-compile-cache": "^2.0.3" }, @@ -1086,17 +1086,17 @@ } }, "eslint-plugin-jsdoc": { - "version": "30.7.8", - "resolved": "https://registry.npmjs.org/eslint-plugin-jsdoc/-/eslint-plugin-jsdoc-30.7.8.tgz", - "integrity": "sha512-OWm2AYvXjCl7nRbpcw5xisfSVkpVAyp4lGqL9T+DeK4kaPm6ecnmTc/G5s1PtcRrwbaI8bIWGzwScqv5CdGyxA==", + "version": "30.7.9", + "resolved": "http://nexus/repository/npm-registry/eslint-plugin-jsdoc/-/eslint-plugin-jsdoc-30.7.9.tgz", + "integrity": "sha512-qMM0fNx7/6OCnIh3jRpIrEBAhTG1THNXXbr3yfJ8yqLrDbzJR98xsstX25xt9GCPlrjNc/bBpTHfJQOvn7nVMA==", "dev": true, "requires": { "comment-parser": "^0.7.6", - "debug": "^4.2.0", + "debug": "^4.3.1", "jsdoctypeparser": "^9.0.0", "lodash": "^4.17.20", "regextras": "^0.7.1", - "semver": "^7.3.2", + "semver": "^7.3.4", "spdx-expression-parse": "^3.0.1" } }, @@ -1120,9 +1120,9 @@ } }, "eslint-plugin-prettier": { - "version": "3.2.0", - "resolved": "https://registry.npmjs.org/eslint-plugin-prettier/-/eslint-plugin-prettier-3.2.0.tgz", - "integrity": "sha512-kOUSJnFjAUFKwVxuzy6sA5yyMx6+o9ino4gCdShzBNx4eyFRudWRYKCFolKjoM40PEiuU6Cn7wBLfq3WsGg7qg==", + "version": "3.3.0", + "resolved": "http://nexus/repository/npm-registry/eslint-plugin-prettier/-/eslint-plugin-prettier-3.3.0.tgz", + "integrity": "sha512-tMTwO8iUWlSRZIwS9k7/E4vrTsfvsrcM5p1eftyuqWH25nKsz/o6/54I7jwQ/3zobISyC7wMy9ZsFwgTxOcOpQ==", "dev": true, "requires": { "prettier-linter-helpers": "^1.0.0" @@ -1378,9 +1378,9 @@ "dev": true }, "get-intrinsic": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/get-intrinsic/-/get-intrinsic-1.0.1.tgz", - "integrity": "sha512-ZnWP+AmS1VUaLgTRy47+zKtjTxz+0xMpx3I52i+aalBK1QP19ggLF3Db89KJX7kjfOfP2eoa01qc++GwPgufPg==", + "version": "1.0.2", + "resolved": "http://nexus/repository/npm-registry/get-intrinsic/-/get-intrinsic-1.0.2.tgz", + "integrity": "sha512-aeX0vrFm21ILl3+JpFFRNe9aUvp6VFZb2/CTbgLb8j75kOhvoNYjt9d8KA/tJG4gSo8nzEDedRl0h7vDmBYRVg==", "dev": true, "requires": { "function-bind": "^1.1.1", @@ -1706,9 +1706,9 @@ "dev": true }, "is-fullwidth-code-point": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-2.0.0.tgz", - "integrity": "sha1-o7MKXE8ZkYMWeqq5O+764937ZU8=", + "version": "3.0.0", + "resolved": "http://nexus/repository/npm-registry/is-fullwidth-code-point/-/is-fullwidth-code-point-3.0.0.tgz", + "integrity": "sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg==", "dev": true }, "is-glob": { @@ -1842,13 +1842,13 @@ } }, "jsx-ast-utils": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/jsx-ast-utils/-/jsx-ast-utils-3.1.0.tgz", - "integrity": "sha512-d4/UOjg+mxAWxCiF0c5UTSwyqbchkbqCvK87aBovhnh8GtysTjWmgC63tY0cJx/HzGgm9qnA147jVBdpOiQ2RA==", + "version": "3.2.0", + "resolved": "http://nexus/repository/npm-registry/jsx-ast-utils/-/jsx-ast-utils-3.2.0.tgz", + "integrity": "sha512-EIsmt3O3ljsU6sot/J4E1zDRxfBNrhjyf/OKjlydwgEimQuznlM4Wv7U+ueONJMyEn1WRE0K8dhi3dVAXYT24Q==", "dev": true, "requires": { - "array-includes": "^3.1.1", - "object.assign": "^4.1.1" + "array-includes": "^3.1.2", + "object.assign": "^4.1.2" } }, "kind-of": { @@ -2479,9 +2479,9 @@ "dev": true }, "prettier": { - "version": "npm:wp-prettier@2.0.5", - "resolved": "https://registry.npmjs.org/wp-prettier/-/wp-prettier-2.0.5.tgz", - "integrity": "sha512-5GCgdeevIXwR3cW4Qj5XWC5MO1iSCz8+IPn0mMw6awAt/PBiey8yyO7MhePRsaMqghJAhg6Q3QLYWSnUHWkG6A==", + "version": "npm:wp-prettier@2.2.1-beta-1", + "resolved": "http://nexus/repository/npm-registry/wp-prettier/-/wp-prettier-2.2.1-beta-1.tgz", + "integrity": "sha512-+JHkqs9LC/JPp51yy1hzs3lQ7qeuWCwOcSzpQNeeY/G7oSpnF61vxt7hRh87zNRTr6ob2ndy0W8rVzhgrcA+Gw==", "dev": true }, "prettier-linter-helpers": { @@ -2784,14 +2784,40 @@ "dev": true }, "slice-ansi": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/slice-ansi/-/slice-ansi-2.1.0.tgz", - "integrity": "sha512-Qu+VC3EwYLldKa1fCxuuvULvSJOKEgk9pi8dZeCVK7TqBfUNTH4sFkk4joj8afVSfAYgJoSOetjx9QWOJ5mYoQ==", + "version": "4.0.0", + "resolved": "http://nexus/repository/npm-registry/slice-ansi/-/slice-ansi-4.0.0.tgz", + "integrity": "sha512-qMCMfhY040cVHT43K9BFygqYbUPFZKHOg7K73mtTWJRb8pyP3fzf4Ixd5SzdEJQ6MRUg/WBnOLxghZtKKurENQ==", "dev": true, "requires": { - "ansi-styles": "^3.2.0", - "astral-regex": "^1.0.0", - "is-fullwidth-code-point": "^2.0.0" + "ansi-styles": "^4.0.0", + "astral-regex": "^2.0.0", + "is-fullwidth-code-point": "^3.0.0" + }, + "dependencies": { + "ansi-styles": { + "version": "4.3.0", + "resolved": "http://nexus/repository/npm-registry/ansi-styles/-/ansi-styles-4.3.0.tgz", + "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", + "dev": true, + "requires": { + "color-convert": "^2.0.1" + } + }, + "color-convert": { + "version": "2.0.1", + "resolved": "http://nexus/repository/npm-registry/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": "http://nexus/repository/npm-registry/color-name/-/color-name-1.1.4.tgz", + "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", + "dev": true + } } }, "source-map": { @@ -2845,36 +2871,21 @@ "dev": true }, "string-width": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/string-width/-/string-width-3.1.0.tgz", - "integrity": "sha512-vafcv6KjVZKSgz06oM/H6GDBrAtz8vdhQakGjFIvNrHA6y3HCF1CInLy+QLq8dTJPQ1b+KDUqDFctkdRW44e1w==", + "version": "4.2.0", + "resolved": "http://nexus/repository/npm-registry/string-width/-/string-width-4.2.0.tgz", + "integrity": "sha512-zUz5JD+tgqtuDjMhwIg5uFVV3dtqZ9yQJlZVfq4I01/K5Paj5UHj7VyrQOJvzawSVlKpObApbfD0Ed6yJc+1eg==", "dev": true, "requires": { - "emoji-regex": "^7.0.1", - "is-fullwidth-code-point": "^2.0.0", - "strip-ansi": "^5.1.0" + "emoji-regex": "^8.0.0", + "is-fullwidth-code-point": "^3.0.0", + "strip-ansi": "^6.0.0" }, "dependencies": { - "ansi-regex": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-4.1.0.tgz", - "integrity": "sha512-1apePfXM1UOSqw0o9IiFAovVz9M5S1Dg+4TrDwfMewQ6p/rmMueb7tWZjQ1rx4Loy1ArBggoqGpfqqdI4rondg==", - "dev": true - }, "emoji-regex": { - "version": "7.0.3", - "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-7.0.3.tgz", - "integrity": "sha512-CwBLREIQ7LvYFB0WyRvwhq5N5qPhc6PMjD6bYggFlI5YyDgl+0vxq5VHbMOFqLg7hfWzmu8T5Z1QofhmTIhItA==", + "version": "8.0.0", + "resolved": "http://nexus/repository/npm-registry/emoji-regex/-/emoji-regex-8.0.0.tgz", + "integrity": "sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==", "dev": true - }, - "strip-ansi": { - "version": "5.2.0", - "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-5.2.0.tgz", - "integrity": "sha512-DuRs1gKbBqsMKIZlrffwlug8MHkcnpjs5VPmL1PAh+mA30U0DTotfDZ0d2UUsXpPmPmMMJ6W773MaA3J+lbiWA==", - "dev": true, - "requires": { - "ansi-regex": "^4.1.0" - } } } }, @@ -3221,15 +3232,15 @@ "dev": true }, "table": { - "version": "5.4.6", - "resolved": "https://registry.npmjs.org/table/-/table-5.4.6.tgz", - "integrity": "sha512-wmEc8m4fjnob4gt5riFRtTu/6+4rSe12TpAELNSqHMfF3IqnA+CH37USM6/YR3qRZv7e56kAEAtd6nKZaxe0Ug==", + "version": "6.0.4", + "resolved": "http://nexus/repository/npm-registry/table/-/table-6.0.4.tgz", + "integrity": "sha512-sBT4xRLdALd+NFBvwOz8bw4b15htyythha+q+DVZqy2RS08PPC8O2sZFgJYEY7bJvbCFKccs+WIZ/cd+xxTWCw==", "dev": true, "requires": { - "ajv": "^6.10.2", - "lodash": "^4.17.14", - "slice-ansi": "^2.1.0", - "string-width": "^3.0.0" + "ajv": "^6.12.4", + "lodash": "^4.17.20", + "slice-ansi": "^4.0.0", + "string-width": "^4.2.0" } }, "text-table": { diff --git a/package.json b/package.json index c446b1f..2acef8b 100644 --- a/package.json +++ b/package.json @@ -1,8 +1,8 @@ { "private": true, "devDependencies": { - "@wordpress/eslint-plugin": "^7.3.0", - "eslint": "^7.15.0", + "@wordpress/eslint-plugin": "^7.4.0", + "eslint": "^7.16.0", "stylelint": "^13.8.0", "stylelint-config-wordpress": "^17.0.0" }