From 26c67dba776e1e6f8ac40eed70fe79995325863d Mon Sep 17 00:00:00 2001
From: Andrew Dolgov
Date: Sun, 31 Jul 2022 13:55:09 +0300
Subject: [PATCH] update phpstan to 1.8.2
---
classes/feeditem/atom.php | 6 +-
classes/feeds.php | 6 +-
classes/pref/filters.php | 1 +
classes/rssutils.php | 2 +-
composer.json | 2 +-
composer.lock | 49 +-
.../php-qrcode/.github/workflows/tests.yml | 8 +-
vendor/chillerlan/php-qrcode/README.md | 383 ++++++++-
vendor/chillerlan/php-qrcode/composer.json | 2 +-
vendor/chillerlan/php-qrcode/src/QRCode.php | 2 +-
.../php-qrcode/tests/QRCodeTest.php | 1 +
vendor/composer/ClassLoader.php | 123 +--
vendor/composer/InstalledVersions.php | 517 ++++++++---
vendor/composer/LICENSE | 2 -
vendor/composer/autoload_real.php | 2 +
vendor/composer/installed.json | 51 +-
vendor/composer/installed.php | 800 +++++++++---------
vendor/composer/platform_check.php | 26 +
vendor/phpstan/phpstan/README.md | 19 +-
vendor/phpstan/phpstan/composer.json | 7 +-
vendor/phpstan/phpstan/phpstan.phar | Bin 19215905 -> 21218944 bytes
vendor/phpstan/phpstan/phpstan.phar.asc | 26 +-
.../safe/deprecated/array.php | 73 ++
.../safe/deprecated/functionsList.php | 2 +
.../thecodingmachine/safe/generated/array.php | 75 --
.../thecodingmachine/safe/generated/curl.php | 34 +-
.../thecodingmachine/safe/generated/exec.php | 6 +-
.../safe/generated/filesystem.php | 11 +-
.../safe/generated/functionsList.php | 2 -
.../thecodingmachine/safe/generated/json.php | 7 +-
.../thecodingmachine/safe/generated/ldap.php | 40 +-
.../thecodingmachine/safe/generated/pcntl.php | 10 +-
.../safe/lib/Exceptions/CurlException.php | 4 +-
.../thecodingmachine/safe/rector-migrate.php | 2 -
34 files changed, 1442 insertions(+), 859 deletions(-)
create mode 100644 vendor/composer/platform_check.php
diff --git a/classes/feeditem/atom.php b/classes/feeditem/atom.php
index cac6d8c54..6de790ff9 100755
--- a/classes/feeditem/atom.php
+++ b/classes/feeditem/atom.php
@@ -43,7 +43,8 @@ class FeedItem_Atom extends FeedItem_Common {
$links = $this->elem->getElementsByTagName("link");
foreach ($links as $link) {
- if ($link && $link->hasAttribute("href") &&
+ /** @phpstan-ignore-next-line */
+ if ($link->hasAttribute("href") &&
(!$link->hasAttribute("rel")
|| $link->getAttribute("rel") == "alternate"
|| $link->getAttribute("rel") == "standout")) {
@@ -180,7 +181,8 @@ class FeedItem_Atom extends FeedItem_Common {
$encs = [];
foreach ($links as $link) {
- if ($link && $link->hasAttribute("href") && $link->hasAttribute("rel")) {
+ /** @phpstan-ignore-next-line */
+ if ($link->hasAttribute("href") && $link->hasAttribute("rel")) {
$base = $this->xpath->evaluate("string(ancestor-or-self::*[@xml:base][1]/@xml:base)", $link);
if ($link->getAttribute("rel") == "enclosure") {
diff --git a/classes/feeds.php b/classes/feeds.php
index fee0a7708..8981d6f14 100755
--- a/classes/feeds.php
+++ b/classes/feeds.php
@@ -248,11 +248,12 @@ class Feeds extends Handler_Protected {
function ($result, $plugin) use (&$line, &$button_doc) {
if ($result && $button_doc->loadXML($result)) {
- /** @var DOMElement|null */
+ /** @var DOMElement|null $child */
$child = $button_doc->firstChild;
if ($child) {
do {
+ /** @var DOMElement|null $child */
$child->setAttribute('data-plugin-name', get_class($plugin));
} while ($child = $child->nextSibling);
@@ -271,11 +272,12 @@ class Feeds extends Handler_Protected {
function ($result, $plugin) use (&$line, &$button_doc) {
if ($result && $button_doc->loadXML($result)) {
- /** @var DOMElement|null */
+ /** @var DOMElement|null $child */
$child = $button_doc->firstChild;
if ($child) {
do {
+ /** @var DOMElement|null $child */
$child->setAttribute('data-plugin-name', get_class($plugin));
} while ($child = $child->nextSibling);
diff --git a/classes/pref/filters.php b/classes/pref/filters.php
index 8f1c578b6..e7c7877a7 100755
--- a/classes/pref/filters.php
+++ b/classes/pref/filters.php
@@ -115,6 +115,7 @@ class Pref_Filters extends Handler_Protected {
$glue = $filter['match_any_rule'] ? " OR " : " AND ";
$scope_qpart = join($glue, $scope_qparts);
+ /** @phpstan-ignore-next-line */
if (!$scope_qpart) $scope_qpart = "true";
$rv = array();
diff --git a/classes/rssutils.php b/classes/rssutils.php
index 384830556..e039284f2 100755
--- a/classes/rssutils.php
+++ b/classes/rssutils.php
@@ -662,7 +662,7 @@ class RSSUtils {
print_r($item);
}
- if (ini_get("max_execution_time") > 0 && time() - $tstart >= ini_get("max_execution_time") * 0.7) {
+ if (ini_get("max_execution_time") > 0 && time() - $tstart >= ((float)ini_get("max_execution_time") * 0.7)) {
Debug::log("looks like there's too many articles to process at once, breaking out.", Debug::LOG_VERBOSE);
$pdo->commit();
break;
diff --git a/composer.json b/composer.json
index 8d00077dc..4c93039ee 100644
--- a/composer.json
+++ b/composer.json
@@ -13,7 +13,7 @@
"j4mie/idiorm": "dev-master"
},
"require-dev": {
- "phpstan/phpstan": "1.1.2",
+ "phpstan/phpstan": "1.8.2",
"phpunit/phpunit": "9.5.16"
}
}
diff --git a/composer.lock b/composer.lock
index df4c441c9..aa18e8ebc 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": "26f1906259c39e542432c57d76f16369",
+ "content-hash": "6beda4561e770d2f0c7c532c5e3693d3",
"packages": [
{
"name": "beberlei/assert",
@@ -75,20 +75,20 @@
},
{
"name": "chillerlan/php-qrcode",
- "version": "4.3.3",
+ "version": "4.3.4",
"source": {
"type": "git",
"url": "https://github.com/chillerlan/php-qrcode.git",
- "reference": "6356b246948ac1025882b3f55e7c68ebd4515ae3"
+ "reference": "2ca4bf5ae048af1981d1023ee42a0a2a9d51e51d"
},
"dist": {
"type": "zip",
- "url": "https://api.github.com/repos/chillerlan/php-qrcode/zipball/6356b246948ac1025882b3f55e7c68ebd4515ae3",
- "reference": "6356b246948ac1025882b3f55e7c68ebd4515ae3",
+ "url": "https://api.github.com/repos/chillerlan/php-qrcode/zipball/2ca4bf5ae048af1981d1023ee42a0a2a9d51e51d",
+ "reference": "2ca4bf5ae048af1981d1023ee42a0a2a9d51e51d",
"shasum": ""
},
"require": {
- "chillerlan/php-settings-container": "^2.1",
+ "chillerlan/php-settings-container": "^2.1.4",
"ext-mbstring": "*",
"php": "^7.4 || ^8.0"
},
@@ -137,7 +137,7 @@
],
"support": {
"issues": "https://github.com/chillerlan/php-qrcode/issues",
- "source": "https://github.com/chillerlan/php-qrcode/tree/4.3.3"
+ "source": "https://github.com/chillerlan/php-qrcode/tree/4.3.4"
},
"funding": [
{
@@ -149,7 +149,7 @@
"type": "ko_fi"
}
],
- "time": "2021-11-25T22:38:09+00:00"
+ "time": "2022-07-25T09:12:45+00:00"
},
{
"name": "chillerlan/php-settings-container",
@@ -467,16 +467,16 @@
},
{
"name": "thecodingmachine/safe",
- "version": "v2.2.1",
+ "version": "v2.2.2",
"source": {
"type": "git",
"url": "https://github.com/thecodingmachine/safe.git",
- "reference": "2a8d758fd17763faf86e4aa798193e17b9fac38c"
+ "reference": "440284f9592c9df402832452a6871a8b3c48d97e"
},
"dist": {
"type": "zip",
- "url": "https://api.github.com/repos/thecodingmachine/safe/zipball/2a8d758fd17763faf86e4aa798193e17b9fac38c",
- "reference": "2a8d758fd17763faf86e4aa798193e17b9fac38c",
+ "url": "https://api.github.com/repos/thecodingmachine/safe/zipball/440284f9592c9df402832452a6871a8b3c48d97e",
+ "reference": "440284f9592c9df402832452a6871a8b3c48d97e",
"shasum": ""
},
"require": {
@@ -599,9 +599,9 @@
"description": "PHP core functions that throw exceptions instead of returning FALSE on error",
"support": {
"issues": "https://github.com/thecodingmachine/safe/issues",
- "source": "https://github.com/thecodingmachine/safe/tree/v2.2.1"
+ "source": "https://github.com/thecodingmachine/safe/tree/v2.2.2"
},
- "time": "2022-06-09T15:36:45+00:00"
+ "time": "2022-07-20T17:46:34+00:00"
}
],
"packages-dev": [
@@ -1130,20 +1130,20 @@
},
{
"name": "phpstan/phpstan",
- "version": "1.1.2",
+ "version": "1.8.2",
"source": {
"type": "git",
"url": "https://github.com/phpstan/phpstan.git",
- "reference": "bcea0ae85868a89d5789c75f012c93129f842934"
+ "reference": "c53312ecc575caf07b0e90dee43883fdf90ca67c"
},
"dist": {
"type": "zip",
- "url": "https://api.github.com/repos/phpstan/phpstan/zipball/bcea0ae85868a89d5789c75f012c93129f842934",
- "reference": "bcea0ae85868a89d5789c75f012c93129f842934",
+ "url": "https://api.github.com/repos/phpstan/phpstan/zipball/c53312ecc575caf07b0e90dee43883fdf90ca67c",
+ "reference": "c53312ecc575caf07b0e90dee43883fdf90ca67c",
"shasum": ""
},
"require": {
- "php": "^7.1|^8.0"
+ "php": "^7.2|^8.0"
},
"conflict": {
"phpstan/phpstan-shim": "*"
@@ -1153,11 +1153,6 @@
"phpstan.phar"
],
"type": "library",
- "extra": {
- "branch-alias": {
- "dev-master": "1.0-dev"
- }
- },
"autoload": {
"files": [
"bootstrap.php"
@@ -1170,7 +1165,7 @@
"description": "PHPStan - PHP Static Analysis Tool",
"support": {
"issues": "https://github.com/phpstan/phpstan/issues",
- "source": "https://github.com/phpstan/phpstan/tree/1.1.2"
+ "source": "https://github.com/phpstan/phpstan/tree/1.8.2"
},
"funding": [
{
@@ -1190,7 +1185,7 @@
"type": "tidelift"
}
],
- "time": "2021-11-09T12:41:09+00:00"
+ "time": "2022-07-20T09:57:31+00:00"
},
{
"name": "phpunit/php-code-coverage",
@@ -2695,5 +2690,5 @@
"prefer-lowest": false,
"platform": [],
"platform-dev": [],
- "plugin-api-version": "2.1.0"
+ "plugin-api-version": "2.0.0"
}
diff --git a/vendor/chillerlan/php-qrcode/.github/workflows/tests.yml b/vendor/chillerlan/php-qrcode/.github/workflows/tests.yml
index 07cf16cb7..9b26bb201 100644
--- a/vendor/chillerlan/php-qrcode/.github/workflows/tests.yml
+++ b/vendor/chillerlan/php-qrcode/.github/workflows/tests.yml
@@ -24,7 +24,7 @@ jobs:
steps:
- name: "Checkout"
- uses: actions/checkout@v2
+ uses: actions/checkout@v3
- name: "Install PHP"
uses: shivammathur/setup-php@v2
@@ -62,7 +62,7 @@ jobs:
# run: git config --global core.autocrlf false
- name: "Checkout"
- uses: actions/checkout@v2
+ uses: actions/checkout@v3
- name: "Install PHP with extensions"
uses: shivammathur/setup-php@v2
@@ -79,6 +79,4 @@ jobs:
run: php vendor/bin/phpunit --configuration=phpunit.xml
- name: "Send code coverage report to Codecov.io"
- uses: codecov/codecov-action@v1
- with:
- token: ${{ secrets.CODECOV_TOKEN }}
+ uses: codecov/codecov-action@v3
diff --git a/vendor/chillerlan/php-qrcode/README.md b/vendor/chillerlan/php-qrcode/README.md
index 21df49dee..f266e9bd5 100644
--- a/vendor/chillerlan/php-qrcode/README.md
+++ b/vendor/chillerlan/php-qrcode/README.md
@@ -3,17 +3,19 @@
A PHP 7.4+ QR Code library based on the [implementation](https://github.com/kazuhikoarase/qrcode-generator) by [Kazuhiko Arase](https://github.com/kazuhikoarase),
namespaced, cleaned up, improved and other stuff.
+**Attention:** there is now also a javascript port: [chillerlan/js-qrcode](https://github.com/chillerlan/js-qrcode).
+
[![PHP Version Support][php-badge]][php]
[![Packagist version][packagist-badge]][packagist]
[![License][license-badge]][license]
[![CodeCov][coverage-badge]][coverage]
[![Scrunitizer CI][scrutinizer-badge]][scrutinizer]
[![Packagist downloads][downloads-badge]][downloads]
-[![Continuous Integration][gh-action-badge]][gh-action]
+[![Continuous Integration][gh-action-badge]][gh-action]
[php-badge]: https://img.shields.io/packagist/php-v/chillerlan/php-qrcode?logo=php&color=8892BF
[php]: https://www.php.net/supported-versions.php
-[packagist-badge]: https://img.shields.io/packagist/v/chillerlan/php-qrcode.svg
+[packagist-badge]: https://img.shields.io/packagist/v/chillerlan/php-qrcode.svg?logo=packagist
[packagist]: https://packagist.org/packages/chillerlan/php-qrcode
[license-badge]: https://img.shields.io/github/license/chillerlan/php-qrcode.svg
[license]: https://github.com/chillerlan/php-qrcode/blob/main/LICENSE
@@ -21,47 +23,48 @@ namespaced, cleaned up, improved and other stuff.
[coverage]: https://codecov.io/github/chillerlan/php-qrcode
[scrutinizer-badge]: https://img.shields.io/scrutinizer/g/chillerlan/php-qrcode.svg?logo=scrutinizer
[scrutinizer]: https://scrutinizer-ci.com/g/chillerlan/php-qrcode
-[downloads-badge]: https://img.shields.io/packagist/dt/chillerlan/php-qrcode.svg
+[downloads-badge]: https://img.shields.io/packagist/dt/chillerlan/php-qrcode.svg?logo=packagist
[downloads]: https://packagist.org/packages/chillerlan/php-qrcode/stats
[gh-action-badge]: https://github.com/chillerlan/php-qrcode/workflows/Continuous%20Integration/badge.svg
[gh-action]: https://github.com/chillerlan/php-qrcode/actions?query=workflow%3A%22Continuous+Integration%22+branch%3Av4.3.x
-## Documentation
+# Documentation
-See [the wiki](https://github.com/chillerlan/php-qrcode/wiki) for advanced documentation.
-An API documentation created with [phpDocumentor](https://www.phpdoc.org/) can be found at https://chillerlan.github.io/php-qrcode/ (WIP).
-
-### Requirements
+## Requirements
- PHP 7.4+
- `ext-mbstring`
- - optional:
+ - optional:
- `ext-json`, `ext-gd`
- `ext-imagick` with [ImageMagick](https://imagemagick.org) installed
- [`setasign/fpdf`](https://github.com/setasign/fpdf) for the PDF output module
-### Installation
+## Installation
**requires [composer](https://getcomposer.org)**
via terminal: `composer require chillerlan/php-qrcode`
-*composer.json*
+*composer.json*
```json
{
"require": {
- "php": "^7.4",
- "chillerlan/php-qrcode": "dev-main"
+ "php": "^7.4 || ^8.0",
+ "chillerlan/php-qrcode": "v4.3.x-dev"
}
}
```
-Note: replace `dev-main` with a [version constraint](https://getcomposer.org/doc/articles/versions.md#writing-version-constraints), e.g. `^3.2` - see [releases](https://github.com/chillerlan/php-qrcode/releases) for valid versions.
-For PHP version ...
+Note: replace `v4.3.x-dev` with a [version constraint](https://getcomposer.org/doc/articles/versions.md#writing-version-constraints), e.g. `^4.3` - see [releases](https://github.com/chillerlan/php-qrcode/releases) for valid versions.
+For PHP version ...
- 7.4+ use `^4.3`
- - 7.2+ use `^3.4.1` (PHP 7.2 is EOL and 7.3 soon! v3.4.1 also supports PHP8 - however, it's no longer supported)
- - 7.0+ use `^2.0` (PHP 7.0 and 7.1 are EOL!)
+ - 7.2+ use `^3.4.1` (v3.4.1 also supports PHP8)
+ - 7.0+ use `^2.0`
- 5.6+ use `^1.0` (please let PHP 5 die!)
-### Quickstart
+In case you want to keep using `v4.3.x-dev`, specify the hash of a commit to avoid running into unforseen issues like so: `v4.3.x-dev#c115f7bc51d466ccb24c544e88329804aad8c2a0`
+
+PSA: [PHP 7.0 - 7.3 are EOL](https://www.php.net/supported-versions.php) and therefore the respective `QRCode` versions are also no longer supported!
+
+## Quickstart
We want to encode this URI for a mobile authenticator into a QRcode image:
```php
$data = 'otpauth://totp/test?secret=B3JX4VCVJDVNXNZ5&issuer=chillerlan.net';
@@ -71,33 +74,349 @@ echo '';
```
-
-
+
+
-Wait, what was that? Please again, slower! See [Advanced usage](https://github.com/chillerlan/php-qrcode/wiki/Advanced-usage) on the wiki.
+Wait, what was that? Please again, slower!
-### Framework Integration
-- Drupal [Google Authenticator Login `ga_login`](https://www.drupal.org/project/ga_login)
-- WordPress [`wp-two-factor-auth`](https://github.com/sjinks/wp-two-factor-auth)
-- WordPress [Simple 2FA `simple-2fa`](https://wordpress.org/plugins/simple-2fa/)
-- WoltLab Suite [two-step-verification](http://pluginstore.woltlab.com/file/3007-two-step-verification/)
-- [Cachet](https://github.com/CachetHQ/Cachet)
+
+## Advanced usage
+
+Ok, step by step. First you'll need a `QRCode` instance, which can be optionally invoked with a `QROptions` (or a [`SettingsContainerInterface`](https://github.com/chillerlan/php-settings-container/blob/master/src/SettingsContainerInterface.php), respectively) object as the only parameter.
+
+```php
+$options = new QROptions([
+ 'version' => 5,
+ 'outputType' => QRCode::OUTPUT_MARKUP_SVG,
+ 'eccLevel' => QRCode::ECC_L,
+]);
+
+// invoke a fresh QRCode instance
+$qrcode = new QRCode($options);
+
+// and dump the output
+$qrcode->render($data);
+
+// ...with additional cache file
+$qrcode->render($data, '/path/to/file.svg');
+```
+
+In case you just want the raw QR code matrix, call `QRCode::getMatrix()` - this method is also called internally from `QRCode::render()`. See also [[Custom output interface]].
+
+```php
+$matrix = $qrcode->getMatrix($data);
+
+foreach($matrix->matrix() as $y => $row){
+ foreach($row as $x => $module){
+
+ // get a module's value
+ $value = $module;
+
+ // or via the matrix's getter method
+ $value = $matrix->get($x, $y);
+
+ // boolean check a module
+ if($matrix->check($x, $y)){ // if($module >> 8 > 0)
+ // do stuff, the module is dark
+ }
+ else{
+ // do other stuff, the module is light
+ }
+
+ }
+}
+```
+
+Have a look [in the examples folder](https://github.com/chillerlan/php-qrcode/tree/main/examples) for some more usage examples.
+
+### Notes
+The QR encoder, especially the subroutines for mask pattern testing, can cause high CPU load on increased matrix size.
+You can avoid a part of this load by choosing a fast output module, like `OUTPUT_IMAGE_*` and maybe setting the mask pattern manually (which may result in unreadable QR Codes).
+Oh hey and don't forget to sanitize any user input!
+
+
+## Custom output interface
+
+Instead of bloating your code you can simply create your own output interface by creating a `QROutputInterface` (i.e. extending `QROutputAbstract`).
+
+```php
+class MyCustomOutput extends QROutputAbstract{
+
+ // inherited from QROutputAbstract
+ protected QRMatrix $matrix; // QRMatrix
+ protected int $moduleCount; // modules QRMatrix::size()
+ protected QROptions $options; // MyCustomOptions or QROptions
+ protected int $scale; // scale factor from options
+ protected int $length; // length of the matrix ($moduleCount * $scale)
+
+ // ...check/set default module values (abstract method, called by the constructor)
+ protected function setModuleValues():void{
+ // $this->moduleValues = ...
+ }
+
+ // QROutputInterface::dump()
+ public function dump(string $file = null):string{
+ $output = '';
+
+ for($row = 0; $row < $this->moduleCount; $row++){
+ for($col = 0; $col < $this->moduleCount; $col++){
+ $output .= (int)$this->matrix->check($col, $row);
+ }
+ }
+
+ return $output;
+ }
+
+}
+```
+For more examples, have a look at the [built-in output modules](https://github.com/chillerlan/php-qrcode/tree/main/src/Output).
+
+In case you need additional settings for your output module, just extend `QROptions`...
+```
+class MyCustomOptions extends QROptions{
+ protected string $myParam = 'defaultValue';
+
+ // ...
+}
+```
+...or use the [`SettingsContainerInterface`](https://github.com/chillerlan/php-settings-container/blob/main/src/SettingsContainerInterface.php), which is the more flexible approach.
+
+```php
+trait MyCustomOptionsTrait{
+ protected string $myParam = 'defaultValue';
+
+ // ...
+}
+```
+set the options:
+```php
+$myOptions = [
+ 'version' => 5,
+ 'eccLevel' => QRCode::ECC_L,
+ 'outputType' => QRCode::OUTPUT_CUSTOM,
+ 'outputInterface' => MyCustomOutput::class,
+ // your custom settings
+ 'myParam' => 'whatever value',
+ ];
+
+// extends QROptions
+$myCustomOptions = new MyCustomOptions($myOptions);
+
+// using the SettingsContainerInterface
+$myCustomOptions = new class($myOptions) extends SettingsContainerAbstract{
+ use QROptionsTrait, MyCustomOptionsTrait;
+};
+
+```
+
+You can then call `QRCode` with the custom modules...
+```php
+(new QRCode($myCustomOptions))->render($data);
+```
+...or invoke the `QROutputInterface` manually.
+```php
+$qrOutputInterface = new MyCustomOutput($myCustomOptions, (new QRCode($myCustomOptions))->getMatrix($data));
+
+//dump the output, which is equivalent to QRCode::render()
+$qrOutputInterface->dump();
+```
+
+### Custom module values
+
+You can distinguish between different parts of the matrix, namely the several required patterns from the QR Code specification, and use them in different ways, i.e. to assign different colors for each part of the matrix (see the [image example](https://github.com/chillerlan/php-qrcode/blob/main/examples/image.php)).
+The dark value is the module value (light) shifted by 8 bits to the left: `$value = $M_TYPE << ($bool ? 8 : 0);`, where `$M_TYPE` is one of the `QRMatrix::M_*` constants.
+You can check the value for a type explicitly like...
+```php
+// for true (dark)
+($value >> 8) === $M_TYPE;
+
+// for false (light)
+$value === $M_TYPE;
+```
+...or you can perform a loose check, ignoring the module value
+```php
+// for true
+($value >> 8) > 0;
+
+// for false
+($value >> 8) === 0;
+```
+
+See also `QRMatrix::set()`, `QRMatrix::check()` and [`QRMatrix` constants](#qrmatrix-constants).
+
+To map the values and properly render the modules for the given `QROutputInterface`, it's necessary to overwrite the default values:
+```php
+$options = new QROptions;
+
+// for HTML, SVG and ImageMagick
+$options->moduleValues = [
+ // finder
+ 1536 => '#A71111', // dark (true)
+ 6 => '#FFBFBF', // light (false)
+ // alignment
+ 2560 => '#A70364',
+ 10 => '#FFC9C9',
+ // timing
+ 3072 => '#98005D',
+ 12 => '#FFB8E9',
+ // format
+ 3584 => '#003804',
+ 14 => '#00FB12',
+ // version
+ 4096 => '#650098',
+ 16 => '#E0B8FF',
+ // data
+ 1024 => '#4A6000',
+ 4 => '#ECF9BE',
+ // darkmodule
+ 512 => '#080063',
+ // separator
+ 8 => '#AFBFBF',
+ // quietzone
+ 18 => '#FFFFFF',
+];
+
+// for the image output types
+$options->moduleValues = [
+ 512 => [0, 0, 0],
+ // ...
+];
+
+// for string/text output
+$options->moduleValues = [
+ 512 => '#',
+ // ...
+];
+```
+
+
+## Public API
+
+### `QRCode` API
+#### Methods
+method | return | description
+------ | ------ | -----------
+`__construct(QROptions $options = null)` | - | see [`SettingsContainerInterface`](https://github.com/chillerlan/php-settings-container/blob/main/src/SettingsContainerInterface.php)
+`render(string $data, string $file = null)` | mixed, `QROutputInterface::dump()` | renders a QR Code for the given `$data` and `QROptions`, saves `$file` optional
+`getMatrix(string $data)` | `QRMatrix` | returns a `QRMatrix` object for the given `$data` and current `QROptions`
+`initDataInterface(string $data)` | `QRDataInterface` | returns a fresh `QRDataInterface` for the given `$data`
+`isNumber(string $string)` | bool | checks if a string qualifies for `Number`
+`isAlphaNum(string $string)` | bool | checks if a string qualifies for `AlphaNum`
+`isKanji(string $string)` | bool | checks if a string qualifies for `Kanji`
+`isByte(string $string)` | bool | checks if a string is non-empty
+
+#### Constants
+name | description
+---- | -----------
+`VERSION_AUTO` | `QROptions::$version`
+`MASK_PATTERN_AUTO` | `QROptions::$maskPattern`
+`OUTPUT_MARKUP_SVG`, `OUTPUT_MARKUP_HTML` | `QROptions::$outputType` markup
+`OUTPUT_IMAGE_PNG`, `OUTPUT_IMAGE_JPG`, `OUTPUT_IMAGE_GIF` | `QROptions::$outputType` image
+`OUTPUT_STRING_JSON`, `OUTPUT_STRING_TEXT` | `QROptions::$outputType` string
+`OUTPUT_IMAGICK` | `QROptions::$outputType` ImageMagick
+`OUTPUT_FPDF` | `QROptions::$outputType` PDF, using [FPDF](https://github.com/setasign/fpdf)
+`OUTPUT_CUSTOM` | `QROptions::$outputType`, requires `QROptions::$outputInterface`
+`ECC_L`, `ECC_M`, `ECC_Q`, `ECC_H`, | ECC-Level: 7%, 15%, 25%, 30% in `QROptions::$eccLevel`
+`DATA_NUMBER`, `DATA_ALPHANUM`, `DATA_BYTE`, `DATA_KANJI` | `QRDataInterface::$datamode`
+
+
+### `QRMatrix` API
+
+#### Methods
+method | return | description
+------ | ------ | -----------
+`__construct(int $version, int $eclevel)` | - | -
+`init(int $maskPattern, bool $test = null)` | `QRMatrix` |
+`matrix()` | array | the internal matrix representation as a 2 dimensional array
+`version()` | int | the current QR Code version
+`eccLevel()` | int | current ECC level
+`maskPattern()` | int | the used mask pattern
+`size()` | int | the absoulute size of the matrix, including quiet zone (if set). `$version * 4 + 17 + 2 * $quietzone`
+`get(int $x, int $y)` | int | returns the value of the module
+`set(int $x, int $y, bool $value, int $M_TYPE)` | `QRMatrix` | sets the `$M_TYPE` value for the module
+`check(int $x, int $y)` | bool | checks whether a module is true (dark) or false (light)
+
+#### Constants
+name | light (false) | dark (true) | description
+---- | ------------- | ----------- | -----------
+`M_NULL` | 0 | - | module not set (should never appear. if so, there's an error)
+`M_DARKMODULE` | - | 512 | once per matrix at `$xy = [8, 4 * $version + 9]`
+`M_DATA` | 4 | 1024 | the actual encoded data
+`M_FINDER` | 6 | 1536 | the 7x7 finder patterns
+`M_SEPARATOR` | 8 | - | separator lines around the finder patterns
+`M_ALIGNMENT` | 10 | 2560 | the 5x5 alignment patterns
+`M_TIMING` | 12 | 3072 | the timing pattern lines
+`M_FORMAT` | 14 | 3584 | format information pattern
+`M_VERSION` | 16 | 4096 | version information pattern
+`M_QUIETZONE` | 18 | - | margin around the QR Code
+`M_LOGO` | 20 | - | space for a logo image (not used yet)
+`M_TEST` | 255 | 65280 | test value
+
+### `QROptions` API
+
+#### Properties
+property | type | default | allowed | description
+-------- | ---- | ------- | ------- | -----------
+`$version` | int | `QRCode::VERSION_AUTO` | 1...40 | the [QR Code version number](http://www.qrcode.com/en/about/version.html)
+`$versionMin` | int | 1 | 1...40 | Minimum QR version (if `$version = QRCode::VERSION_AUTO`)
+`$versionMax` | int | 40 | 1...40 | Maximum QR version (if `$version = QRCode::VERSION_AUTO`)
+`$eccLevel` | int | `QRCode::ECC_L` | `QRCode::ECC_X` | Error correct level, where X = L (7%), M (15%), Q (25%), H (30%)
+`$maskPattern` | int | `QRCode::MASK_PATTERN_AUTO` | 0...7 | Mask Pattern to use
+`$addQuietzone` | bool | `true` | - | Add a "quiet zone" (margin) according to the QR code spec
+`$quietzoneSize` | int | 4 | clamped to 0 ... `$matrixSize / 2` | Size of the quiet zone
+`$dataModeOverride` | string | `null` | `Number`, `AlphaNum`, `Kanji`, `Byte` | allows overriding the data type detection
+`$outputType` | string | `QRCode::OUTPUT_IMAGE_PNG` | `QRCode::OUTPUT_*` | built-in output type
+`$outputInterface` | string | `null` | * | FQCN of the custom `QROutputInterface` if `QROptions::$outputType` is set to `QRCode::OUTPUT_CUSTOM`
+`$cachefile` | string | `null` | * | optional cache file path
+`$eol` | string | `PHP_EOL` | * | newline string (HTML, SVG, TEXT)
+`$scale` | int | 5 | * | size of a QR code pixel (SVG, IMAGE_*), HTML -> via CSS
+`$cssClass` | string | `null` | * | a common css class
+`$svgOpacity` | float | 1.0 | 0...1 |
+`$svgDefs` | string | * | * | anything between [``](https://developer.mozilla.org/docs/Web/SVG/Element/defs)
+`$svgViewBoxSize` | int | `null` | * | a positive integer which defines width/height of the [viewBox attribute](https://css-tricks.com/scale-svg/#article-header-id-3)
+`$textDark` | string | '🔴' | * | string substitute for dark
+`$textLight` | string | 'â•' | * | string substitute for light
+`$markupDark` | string | '#000' | * | markup substitute for dark (CSS value)
+`$markupLight` | string | '#fff' | * | markup substitute for light (CSS value)
+`$imageBase64` | bool | `true` | - | whether to return the image data as base64 or raw like from `file_get_contents()`
+`$imageTransparent` | bool | `true` | - | toggle transparency (no jpeg support)
+`$imageTransparencyBG` | array | `[255, 255, 255]` | `[R, G, B]` | the RGB values for the transparent color, see [`imagecolortransparent()`](http://php.net/manual/function.imagecolortransparent.php)
+`$pngCompression` | int | -1 | -1 ... 9 | `imagepng()` compression level, -1 = auto
+`$jpegQuality` | int | 85 | 0 - 100 | `imagejpeg()` quality
+`$imagickFormat` | string | 'png' | * | ImageMagick output type, see `Imagick::setType()`
+`$imagickBG` | string | `null` | * | ImageMagick background color, see `ImagickPixel::__construct()`
+`$moduleValues` | array | `null` | * | Module values map, see [[Custom output interface]] and `QROutputInterface::DEFAULT_MODULE_VALUES`
+
+
+## Framework Integration
+- Drupal:
+ - [Google Authenticator Login `ga_login`](https://www.drupal.org/project/ga_login)
+- Symfony
+ - [phpqrcode-bundle](https://github.com/jonasarts/phpqrcode-bundle)
+- WordPress:
+ - [`wp-two-factor-auth`](https://github.com/sjinks/wp-two-factor-auth)
+ - [`simple-2fa`](https://wordpress.org/plugins/simple-2fa/)
+ - [`wordpress-seo`](https://github.com/Yoast/wordpress-seo)
+ - [`floating-share-button`](https://github.com/qriouslad/floating-share-button)
+- WoltLab Suite
+ - [two-step-verification](http://pluginstore.woltlab.com/file/3007-two-step-verification/)
- [Appwrite](https://github.com/appwrite/appwrite)
+- [Cachet](https://github.com/CachetHQ/Cachet)
- [twill](https://github.com/area17/twill)
- other uses: [dependents](https://github.com/chillerlan/php-qrcode/network/dependents) / [packages](https://github.com/chillerlan/php-qrcode/network/dependents?dependent_type=PACKAGE)
-### Shameless advertising
+## Shameless advertising
Hi, please check out my other projects that are way cooler than qrcodes!
- [php-oauth-core](https://github.com/chillerlan/php-oauth-core) - an OAuth 1/2 client library along with a bunch of [providers](https://github.com/chillerlan/php-oauth-providers)
- [php-httpinterface](https://github.com/chillerlan/php-httpinterface) - a PSR-7/15/17/18 implemetation
- [php-database](https://github.com/chillerlan/php-database) - a database client & querybuilder for MySQL, Postgres, SQLite, MSSQL, Firebird
-### Disclaimer!
+## Disclaimer!
I don't take responsibility for molten CPUs, misled applications, failed log-ins etc.. Use at your own risk!
-#### Trademark Notice
+### Trademark Notice
-The word "QR Code" is registered trademark of *DENSO WAVE INCORPORATED*
-http://www.denso-wave.com/qrcode/faqpatent-e.html
+The word "QR Code" is a registered trademark of *DENSO WAVE INCORPORATED*
+https://www.qrcode.com/en/faq.html#patentH2Title
diff --git a/vendor/chillerlan/php-qrcode/composer.json b/vendor/chillerlan/php-qrcode/composer.json
index 86a12379b..afe5bf68e 100644
--- a/vendor/chillerlan/php-qrcode/composer.json
+++ b/vendor/chillerlan/php-qrcode/composer.json
@@ -26,7 +26,7 @@
"require": {
"php": "^7.4 || ^8.0",
"ext-mbstring": "*",
- "chillerlan/php-settings-container": "^2.1"
+ "chillerlan/php-settings-container": "^2.1.4"
},
"require-dev": {
"phpunit/phpunit": "^9.5",
diff --git a/vendor/chillerlan/php-qrcode/src/QRCode.php b/vendor/chillerlan/php-qrcode/src/QRCode.php
index 294a20d83..908030feb 100755
--- a/vendor/chillerlan/php-qrcode/src/QRCode.php
+++ b/vendor/chillerlan/php-qrcode/src/QRCode.php
@@ -307,7 +307,7 @@ class QRCode{
* a dummy
*/
public function isByte(string $data):bool{
- return !empty($data);
+ return $data !== '';
}
}
diff --git a/vendor/chillerlan/php-qrcode/tests/QRCodeTest.php b/vendor/chillerlan/php-qrcode/tests/QRCodeTest.php
index 523d7eb8c..56936a745 100755
--- a/vendor/chillerlan/php-qrcode/tests/QRCodeTest.php
+++ b/vendor/chillerlan/php-qrcode/tests/QRCodeTest.php
@@ -74,6 +74,7 @@ class QRCodeTest extends TestCase{
public function testIsByte():void{
$this::assertTrue($this->qrcode->isByte("\x01\x02\x03"));
$this::assertTrue($this->qrcode->isByte(' ')); // not empty!
+ $this::assertTrue($this->qrcode->isByte('0'));
$this::assertFalse($this->qrcode->isByte(''));
}
diff --git a/vendor/composer/ClassLoader.php b/vendor/composer/ClassLoader.php
index 0cd6055d1..4d989a212 100644
--- a/vendor/composer/ClassLoader.php
+++ b/vendor/composer/ClassLoader.php
@@ -42,75 +42,30 @@ namespace Composer\Autoload;
*/
class ClassLoader
{
- /** @var ?string */
private $vendorDir;
// PSR-4
- /**
- * @var array[]
- * @psalm-var array>
- */
private $prefixLengthsPsr4 = array();
- /**
- * @var array[]
- * @psalm-var array>
- */
private $prefixDirsPsr4 = array();
- /**
- * @var array[]
- * @psalm-var array
- */
private $fallbackDirsPsr4 = array();
// PSR-0
- /**
- * @var array[]
- * @psalm-var array>
- */
private $prefixesPsr0 = array();
- /**
- * @var array[]
- * @psalm-var array
- */
private $fallbackDirsPsr0 = array();
- /** @var bool */
private $useIncludePath = false;
-
- /**
- * @var string[]
- * @psalm-var array
- */
private $classMap = array();
-
- /** @var bool */
private $classMapAuthoritative = false;
-
- /**
- * @var bool[]
- * @psalm-var array
- */
private $missingClasses = array();
-
- /** @var ?string */
private $apcuPrefix;
- /**
- * @var self[]
- */
private static $registeredLoaders = array();
- /**
- * @param ?string $vendorDir
- */
public function __construct($vendorDir = null)
{
$this->vendorDir = $vendorDir;
}
- /**
- * @return string[]
- */
public function getPrefixes()
{
if (!empty($this->prefixesPsr0)) {
@@ -120,47 +75,28 @@ class ClassLoader
return array();
}
- /**
- * @return array[]
- * @psalm-return array>
- */
public function getPrefixesPsr4()
{
return $this->prefixDirsPsr4;
}
- /**
- * @return array[]
- * @psalm-return array
- */
public function getFallbackDirs()
{
return $this->fallbackDirsPsr0;
}
- /**
- * @return array[]
- * @psalm-return array
- */
public function getFallbackDirsPsr4()
{
return $this->fallbackDirsPsr4;
}
- /**
- * @return string[] Array of classname => path
- * @psalm-var array
- */
public function getClassMap()
{
return $this->classMap;
}
/**
- * @param string[] $classMap Class to filename map
- * @psalm-param array $classMap
- *
- * @return void
+ * @param array $classMap Class to filename map
*/
public function addClassMap(array $classMap)
{
@@ -175,11 +111,9 @@ class ClassLoader
* Registers a set of PSR-0 directories for a given prefix, either
* appending or prepending to the ones previously set for this prefix.
*
- * @param string $prefix The prefix
- * @param string[]|string $paths The PSR-0 root directories
- * @param bool $prepend Whether to prepend the directories
- *
- * @return void
+ * @param string $prefix The prefix
+ * @param array|string $paths The PSR-0 root directories
+ * @param bool $prepend Whether to prepend the directories
*/
public function add($prefix, $paths, $prepend = false)
{
@@ -222,13 +156,11 @@ class ClassLoader
* Registers a set of PSR-4 directories for a given namespace, either
* appending or prepending to the ones previously set for this namespace.
*
- * @param string $prefix The prefix/namespace, with trailing '\\'
- * @param string[]|string $paths The PSR-4 base directories
- * @param bool $prepend Whether to prepend the directories
+ * @param string $prefix The prefix/namespace, with trailing '\\'
+ * @param array|string $paths The PSR-4 base directories
+ * @param bool $prepend Whether to prepend the directories
*
* @throws \InvalidArgumentException
- *
- * @return void
*/
public function addPsr4($prefix, $paths, $prepend = false)
{
@@ -272,10 +204,8 @@ class ClassLoader
* Registers a set of PSR-0 directories for a given prefix,
* replacing any others previously set for this prefix.
*
- * @param string $prefix The prefix
- * @param string[]|string $paths The PSR-0 base directories
- *
- * @return void
+ * @param string $prefix The prefix
+ * @param array|string $paths The PSR-0 base directories
*/
public function set($prefix, $paths)
{
@@ -290,12 +220,10 @@ class ClassLoader
* Registers a set of PSR-4 directories for a given namespace,
* replacing any others previously set for this namespace.
*
- * @param string $prefix The prefix/namespace, with trailing '\\'
- * @param string[]|string $paths The PSR-4 base directories
+ * @param string $prefix The prefix/namespace, with trailing '\\'
+ * @param array|string $paths The PSR-4 base directories
*
* @throws \InvalidArgumentException
- *
- * @return void
*/
public function setPsr4($prefix, $paths)
{
@@ -315,8 +243,6 @@ class ClassLoader
* Turns on searching the include path for class files.
*
* @param bool $useIncludePath
- *
- * @return void
*/
public function setUseIncludePath($useIncludePath)
{
@@ -339,8 +265,6 @@ class ClassLoader
* that have not been registered with the class map.
*
* @param bool $classMapAuthoritative
- *
- * @return void
*/
public function setClassMapAuthoritative($classMapAuthoritative)
{
@@ -361,8 +285,6 @@ class ClassLoader
* APCu prefix to use to cache found/not-found classes, if the extension is enabled.
*
* @param string|null $apcuPrefix
- *
- * @return void
*/
public function setApcuPrefix($apcuPrefix)
{
@@ -383,18 +305,14 @@ class ClassLoader
* Registers this instance as an autoloader.
*
* @param bool $prepend Whether to prepend the autoloader or not
- *
- * @return void
*/
public function register($prepend = false)
{
spl_autoload_register(array($this, 'loadClass'), true, $prepend);
if (null === $this->vendorDir) {
- return;
- }
-
- if ($prepend) {
+ //no-op
+ } elseif ($prepend) {
self::$registeredLoaders = array($this->vendorDir => $this) + self::$registeredLoaders;
} else {
unset(self::$registeredLoaders[$this->vendorDir]);
@@ -404,8 +322,6 @@ class ClassLoader
/**
* Unregisters this instance as an autoloader.
- *
- * @return void
*/
public function unregister()
{
@@ -420,7 +336,7 @@ class ClassLoader
* Loads the given class or interface.
*
* @param string $class The name of the class
- * @return true|null True if loaded, null otherwise
+ * @return bool|null True if loaded, null otherwise
*/
public function loadClass($class)
{
@@ -429,8 +345,6 @@ class ClassLoader
return true;
}
-
- return null;
}
/**
@@ -485,11 +399,6 @@ class ClassLoader
return self::$registeredLoaders;
}
- /**
- * @param string $class
- * @param string $ext
- * @return string|false
- */
private function findFileWithExtension($class, $ext)
{
// PSR-4 lookup
@@ -561,10 +470,6 @@ class ClassLoader
* Scope isolated include.
*
* Prevents access to $this/self from included files.
- *
- * @param string $file
- * @return void
- * @private
*/
function includeFile($file)
{
diff --git a/vendor/composer/InstalledVersions.php b/vendor/composer/InstalledVersions.php
index d50e0c9fc..49c0e4988 100644
--- a/vendor/composer/InstalledVersions.php
+++ b/vendor/composer/InstalledVersions.php
@@ -18,27 +18,414 @@ use Composer\Semver\VersionParser;
/**
* This class is copied in every Composer installed project and available to all
*
- * See also https://getcomposer.org/doc/07-runtime.md#installed-versions
- *
- * To require its presence, you can require `composer-runtime-api ^2.0`
+ * To require it's presence, you can require `composer-runtime-api ^2.0`
*/
class InstalledVersions
{
- /**
- * @var mixed[]|null
- * @psalm-var array{root: array{name: string, version: string, reference: string, pretty_version: string, aliases: string[], dev: bool, install_path: string, type: string}, versions: array}|array{}|null
- */
- private static $installed;
-
- /**
- * @var bool|null
- */
+ private static $installed = array (
+ 'root' =>
+ array (
+ 'pretty_version' => 'dev-master',
+ 'version' => 'dev-master',
+ 'aliases' =>
+ array (
+ ),
+ 'reference' => 'd5c043e8467881c00b2cd836f2f37b8479cf0b96',
+ 'name' => '__root__',
+ ),
+ 'versions' =>
+ array (
+ '__root__' =>
+ array (
+ 'pretty_version' => 'dev-master',
+ 'version' => 'dev-master',
+ 'aliases' =>
+ array (
+ ),
+ 'reference' => 'd5c043e8467881c00b2cd836f2f37b8479cf0b96',
+ ),
+ 'beberlei/assert' =>
+ array (
+ 'pretty_version' => 'v3.3.2',
+ 'version' => '3.3.2.0',
+ 'aliases' =>
+ array (
+ ),
+ 'reference' => 'cb70015c04be1baee6f5f5c953703347c0ac1655',
+ ),
+ 'chillerlan/php-qrcode' =>
+ array (
+ 'pretty_version' => '4.3.4',
+ 'version' => '4.3.4.0',
+ 'aliases' =>
+ array (
+ ),
+ 'reference' => '2ca4bf5ae048af1981d1023ee42a0a2a9d51e51d',
+ ),
+ 'chillerlan/php-settings-container' =>
+ array (
+ 'pretty_version' => '2.1.4',
+ 'version' => '2.1.4.0',
+ 'aliases' =>
+ array (
+ ),
+ 'reference' => '1beb7df3c14346d4344b0b2e12f6f9a74feabd4a',
+ ),
+ 'doctrine/instantiator' =>
+ array (
+ 'pretty_version' => '1.4.1',
+ 'version' => '1.4.1.0',
+ 'aliases' =>
+ array (
+ ),
+ 'reference' => '10dcfce151b967d20fde1b34ae6640712c3891bc',
+ ),
+ 'j4mie/idiorm' =>
+ array (
+ 'pretty_version' => 'dev-master',
+ 'version' => 'dev-master',
+ 'aliases' =>
+ array (
+ 0 => '9999999-dev',
+ ),
+ 'reference' => 'efc8ea06698f53e2c479c7696f2b154c47c3a3cb',
+ ),
+ 'mervick/material-design-icons' =>
+ array (
+ 'pretty_version' => '2.2.0',
+ 'version' => '2.2.0.0',
+ 'aliases' =>
+ array (
+ ),
+ 'reference' => '635435c8d3df3a6da3241648caf8a65d1c07cc1a',
+ ),
+ 'myclabs/deep-copy' =>
+ array (
+ 'pretty_version' => '1.11.0',
+ 'version' => '1.11.0.0',
+ 'aliases' =>
+ array (
+ ),
+ 'reference' => '14daed4296fae74d9e3201d2c4925d1acb7aa614',
+ ),
+ 'nikic/php-parser' =>
+ array (
+ 'pretty_version' => 'v4.14.0',
+ 'version' => '4.14.0.0',
+ 'aliases' =>
+ array (
+ ),
+ 'reference' => '34bea19b6e03d8153165d8f30bba4c3be86184c1',
+ ),
+ 'paragonie/constant_time_encoding' =>
+ array (
+ 'pretty_version' => 'v2.6.3',
+ 'version' => '2.6.3.0',
+ 'aliases' =>
+ array (
+ ),
+ 'reference' => '58c3f47f650c94ec05a151692652a868995d2938',
+ ),
+ 'phar-io/manifest' =>
+ array (
+ 'pretty_version' => '2.0.3',
+ 'version' => '2.0.3.0',
+ 'aliases' =>
+ array (
+ ),
+ 'reference' => '97803eca37d319dfa7826cc2437fc020857acb53',
+ ),
+ 'phar-io/version' =>
+ array (
+ 'pretty_version' => '3.2.1',
+ 'version' => '3.2.1.0',
+ 'aliases' =>
+ array (
+ ),
+ 'reference' => '4f7fd7836c6f332bb2933569e566a0d6c4cbed74',
+ ),
+ 'phpdocumentor/reflection-common' =>
+ array (
+ 'pretty_version' => '2.2.0',
+ 'version' => '2.2.0.0',
+ 'aliases' =>
+ array (
+ ),
+ 'reference' => '1d01c49d4ed62f25aa84a747ad35d5a16924662b',
+ ),
+ 'phpdocumentor/reflection-docblock' =>
+ array (
+ 'pretty_version' => '5.3.0',
+ 'version' => '5.3.0.0',
+ 'aliases' =>
+ array (
+ ),
+ 'reference' => '622548b623e81ca6d78b721c5e029f4ce664f170',
+ ),
+ 'phpdocumentor/type-resolver' =>
+ array (
+ 'pretty_version' => '1.6.1',
+ 'version' => '1.6.1.0',
+ 'aliases' =>
+ array (
+ ),
+ 'reference' => '77a32518733312af16a44300404e945338981de3',
+ ),
+ 'phpspec/prophecy' =>
+ array (
+ 'pretty_version' => 'v1.15.0',
+ 'version' => '1.15.0.0',
+ 'aliases' =>
+ array (
+ ),
+ 'reference' => 'bbcd7380b0ebf3961ee21409db7b38bc31d69a13',
+ ),
+ 'phpstan/phpstan' =>
+ array (
+ 'pretty_version' => '1.8.2',
+ 'version' => '1.8.2.0',
+ 'aliases' =>
+ array (
+ ),
+ 'reference' => 'c53312ecc575caf07b0e90dee43883fdf90ca67c',
+ ),
+ 'phpunit/php-code-coverage' =>
+ array (
+ 'pretty_version' => '9.2.15',
+ 'version' => '9.2.15.0',
+ 'aliases' =>
+ array (
+ ),
+ 'reference' => '2e9da11878c4202f97915c1cb4bb1ca318a63f5f',
+ ),
+ 'phpunit/php-file-iterator' =>
+ array (
+ 'pretty_version' => '3.0.6',
+ 'version' => '3.0.6.0',
+ 'aliases' =>
+ array (
+ ),
+ 'reference' => 'cf1c2e7c203ac650e352f4cc675a7021e7d1b3cf',
+ ),
+ 'phpunit/php-invoker' =>
+ array (
+ 'pretty_version' => '3.1.1',
+ 'version' => '3.1.1.0',
+ 'aliases' =>
+ array (
+ ),
+ 'reference' => '5a10147d0aaf65b58940a0b72f71c9ac0423cc67',
+ ),
+ 'phpunit/php-text-template' =>
+ array (
+ 'pretty_version' => '2.0.4',
+ 'version' => '2.0.4.0',
+ 'aliases' =>
+ array (
+ ),
+ 'reference' => '5da5f67fc95621df9ff4c4e5a84d6a8a2acf7c28',
+ ),
+ 'phpunit/php-timer' =>
+ array (
+ 'pretty_version' => '5.0.3',
+ 'version' => '5.0.3.0',
+ 'aliases' =>
+ array (
+ ),
+ 'reference' => '5a63ce20ed1b5bf577850e2c4e87f4aa902afbd2',
+ ),
+ 'phpunit/phpunit' =>
+ array (
+ 'pretty_version' => '9.5.16',
+ 'version' => '9.5.16.0',
+ 'aliases' =>
+ array (
+ ),
+ 'reference' => '5ff8c545a50226c569310a35f4fa89d79f1ddfdc',
+ ),
+ 'sebastian/cli-parser' =>
+ array (
+ 'pretty_version' => '1.0.1',
+ 'version' => '1.0.1.0',
+ 'aliases' =>
+ array (
+ ),
+ 'reference' => '442e7c7e687e42adc03470c7b668bc4b2402c0b2',
+ ),
+ 'sebastian/code-unit' =>
+ array (
+ 'pretty_version' => '1.0.8',
+ 'version' => '1.0.8.0',
+ 'aliases' =>
+ array (
+ ),
+ 'reference' => '1fc9f64c0927627ef78ba436c9b17d967e68e120',
+ ),
+ 'sebastian/code-unit-reverse-lookup' =>
+ array (
+ 'pretty_version' => '2.0.3',
+ 'version' => '2.0.3.0',
+ 'aliases' =>
+ array (
+ ),
+ 'reference' => 'ac91f01ccec49fb77bdc6fd1e548bc70f7faa3e5',
+ ),
+ 'sebastian/comparator' =>
+ array (
+ 'pretty_version' => '4.0.6',
+ 'version' => '4.0.6.0',
+ 'aliases' =>
+ array (
+ ),
+ 'reference' => '55f4261989e546dc112258c7a75935a81a7ce382',
+ ),
+ 'sebastian/complexity' =>
+ array (
+ 'pretty_version' => '2.0.2',
+ 'version' => '2.0.2.0',
+ 'aliases' =>
+ array (
+ ),
+ 'reference' => '739b35e53379900cc9ac327b2147867b8b6efd88',
+ ),
+ 'sebastian/diff' =>
+ array (
+ 'pretty_version' => '4.0.4',
+ 'version' => '4.0.4.0',
+ 'aliases' =>
+ array (
+ ),
+ 'reference' => '3461e3fccc7cfdfc2720be910d3bd73c69be590d',
+ ),
+ 'sebastian/environment' =>
+ array (
+ 'pretty_version' => '5.1.4',
+ 'version' => '5.1.4.0',
+ 'aliases' =>
+ array (
+ ),
+ 'reference' => '1b5dff7bb151a4db11d49d90e5408e4e938270f7',
+ ),
+ 'sebastian/exporter' =>
+ array (
+ 'pretty_version' => '4.0.4',
+ 'version' => '4.0.4.0',
+ 'aliases' =>
+ array (
+ ),
+ 'reference' => '65e8b7db476c5dd267e65eea9cab77584d3cfff9',
+ ),
+ 'sebastian/global-state' =>
+ array (
+ 'pretty_version' => '5.0.5',
+ 'version' => '5.0.5.0',
+ 'aliases' =>
+ array (
+ ),
+ 'reference' => '0ca8db5a5fc9c8646244e629625ac486fa286bf2',
+ ),
+ 'sebastian/lines-of-code' =>
+ array (
+ 'pretty_version' => '1.0.3',
+ 'version' => '1.0.3.0',
+ 'aliases' =>
+ array (
+ ),
+ 'reference' => 'c1c2e997aa3146983ed888ad08b15470a2e22ecc',
+ ),
+ 'sebastian/object-enumerator' =>
+ array (
+ 'pretty_version' => '4.0.4',
+ 'version' => '4.0.4.0',
+ 'aliases' =>
+ array (
+ ),
+ 'reference' => '5c9eeac41b290a3712d88851518825ad78f45c71',
+ ),
+ 'sebastian/object-reflector' =>
+ array (
+ 'pretty_version' => '2.0.4',
+ 'version' => '2.0.4.0',
+ 'aliases' =>
+ array (
+ ),
+ 'reference' => 'b4f479ebdbf63ac605d183ece17d8d7fe49c15c7',
+ ),
+ 'sebastian/recursion-context' =>
+ array (
+ 'pretty_version' => '4.0.4',
+ 'version' => '4.0.4.0',
+ 'aliases' =>
+ array (
+ ),
+ 'reference' => 'cd9d8cf3c5804de4341c283ed787f099f5506172',
+ ),
+ 'sebastian/resource-operations' =>
+ array (
+ 'pretty_version' => '3.0.3',
+ 'version' => '3.0.3.0',
+ 'aliases' =>
+ array (
+ ),
+ 'reference' => '0f4443cb3a1d92ce809899753bc0d5d5a8dd19a8',
+ ),
+ 'sebastian/type' =>
+ array (
+ 'pretty_version' => '2.3.4',
+ 'version' => '2.3.4.0',
+ 'aliases' =>
+ array (
+ ),
+ 'reference' => 'b8cd8a1c753c90bc1a0f5372170e3e489136f914',
+ ),
+ 'sebastian/version' =>
+ array (
+ 'pretty_version' => '3.0.2',
+ 'version' => '3.0.2.0',
+ 'aliases' =>
+ array (
+ ),
+ 'reference' => 'c6c1022351a901512170118436c764e473f6de8c',
+ ),
+ 'spomky-labs/otphp' =>
+ array (
+ 'pretty_version' => 'v10.0.3',
+ 'version' => '10.0.3.0',
+ 'aliases' =>
+ array (
+ ),
+ 'reference' => '9784d9f7c790eed26e102d6c78f12c754036c366',
+ ),
+ 'thecodingmachine/safe' =>
+ array (
+ 'pretty_version' => 'v2.2.2',
+ 'version' => '2.2.2.0',
+ 'aliases' =>
+ array (
+ ),
+ 'reference' => '440284f9592c9df402832452a6871a8b3c48d97e',
+ ),
+ 'theseer/tokenizer' =>
+ array (
+ 'pretty_version' => '1.2.1',
+ 'version' => '1.2.1.0',
+ 'aliases' =>
+ array (
+ ),
+ 'reference' => '34a41e998c2183e22995f158c581e7b5e755ab9e',
+ ),
+ 'webmozart/assert' =>
+ array (
+ 'pretty_version' => '1.11.0',
+ 'version' => '1.11.0.0',
+ 'aliases' =>
+ array (
+ ),
+ 'reference' => '11cb2199493b2f8a3b53e7f19068fc6aac760991',
+ ),
+ ),
+);
private static $canGetVendors;
-
- /**
- * @var array[]
- * @psalm-var array}>
- */
private static $installedByVendor = array();
/**
@@ -54,6 +441,7 @@ class InstalledVersions
$packages[] = array_keys($installed['versions']);
}
+
if (1 === \count($packages)) {
return $packages[0];
}
@@ -61,42 +449,19 @@ class InstalledVersions
return array_keys(array_flip(\call_user_func_array('array_merge', $packages)));
}
- /**
- * Returns a list of all package names with a specific type e.g. 'library'
- *
- * @param string $type
- * @return string[]
- * @psalm-return list
- */
- public static function getInstalledPackagesByType($type)
- {
- $packagesByType = array();
-
- foreach (self::getInstalled() as $installed) {
- foreach ($installed['versions'] as $name => $package) {
- if (isset($package['type']) && $package['type'] === $type) {
- $packagesByType[] = $name;
- }
- }
- }
-
- return $packagesByType;
- }
-
/**
* Checks whether the given package is installed
*
* This also returns true if the package name is provided or replaced by another package
*
* @param string $packageName
- * @param bool $includeDevRequirements
* @return bool
*/
- public static function isInstalled($packageName, $includeDevRequirements = true)
+ public static function isInstalled($packageName)
{
foreach (self::getInstalled() as $installed) {
if (isset($installed['versions'][$packageName])) {
- return $includeDevRequirements || empty($installed['versions'][$packageName]['dev_requirement']);
+ return true;
}
}
@@ -110,9 +475,10 @@ class InstalledVersions
*
* Composer\InstalledVersions::satisfies(new VersionParser, 'foo/bar', '^2.3')
*
- * @param VersionParser $parser Install composer/semver to have access to this class and functionality
- * @param string $packageName
- * @param string|null $constraint A version constraint to check for, if you pass one you have to make sure composer/semver is required by your package
+ * @param VersionParser $parser Install composer/semver to have access to this class and functionality
+ * @param string $packageName
+ * @param string|null $constraint A version constraint to check for, if you pass one you have to make sure composer/semver is required by your package
+ *
* @return bool
*/
public static function satisfies(VersionParser $parser, $packageName, $constraint)
@@ -222,26 +588,9 @@ class InstalledVersions
throw new \OutOfBoundsException('Package "' . $packageName . '" is not installed');
}
- /**
- * @param string $packageName
- * @return string|null If the package is being replaced or provided but is not really installed, null will be returned as install path. Packages of type metapackages also have a null install path.
- */
- public static function getInstallPath($packageName)
- {
- foreach (self::getInstalled() as $installed) {
- if (!isset($installed['versions'][$packageName])) {
- continue;
- }
-
- return isset($installed['versions'][$packageName]['install_path']) ? $installed['versions'][$packageName]['install_path'] : null;
- }
-
- throw new \OutOfBoundsException('Package "' . $packageName . '" is not installed');
- }
-
/**
* @return array
- * @psalm-return array{name: string, version: string, reference: string, pretty_version: string, aliases: string[], dev: bool, install_path: string, type: string}
+ * @psalm-return array{name: string, version: string, reference: string, pretty_version: string, aliases: string[]}
*/
public static function getRootPackage()
{
@@ -253,38 +602,14 @@ class InstalledVersions
/**
* Returns the raw installed.php data for custom implementations
*
- * @deprecated Use getAllRawData() instead which returns all datasets for all autoloaders present in the process. getRawData only returns the first dataset loaded, which may not be what you expect.
* @return array[]
- * @psalm-return array{root: array{name: string, version: string, reference: string, pretty_version: string, aliases: string[], dev: bool, install_path: string, type: string}, versions: array}
+ * @psalm-return array{root: array{name: string, version: string, reference: string, pretty_version: string, aliases: string[]}, versions: list}
*/
public static function getRawData()
{
- @trigger_error('getRawData only returns the first dataset loaded, which may not be what you expect. Use getAllRawData() instead which returns all datasets for all autoloaders present in the process.', E_USER_DEPRECATED);
-
- if (null === self::$installed) {
- // only require the installed.php file if this file is loaded from its dumped location,
- // and not from its source location in the composer/composer package, see https://github.com/composer/composer/issues/9937
- if (substr(__DIR__, -8, 1) !== 'C') {
- self::$installed = include __DIR__ . '/installed.php';
- } else {
- self::$installed = array();
- }
- }
-
return self::$installed;
}
- /**
- * Returns the raw data of all installed.php which are currently loaded for custom implementations
- *
- * @return array[]
- * @psalm-return list}>
- */
- public static function getAllRawData()
- {
- return self::getInstalled();
- }
-
/**
* Lets you reload the static array from another file
*
@@ -301,7 +626,7 @@ class InstalledVersions
* @param array[] $data A vendor/composer/installed.php data set
* @return void
*
- * @psalm-param array{root: array{name: string, version: string, reference: string, pretty_version: string, aliases: string[], dev: bool, install_path: string, type: string}, versions: array} $data
+ * @psalm-param array{root: array{name: string, version: string, reference: string, pretty_version: string, aliases: string[]}, versions: list} $data
*/
public static function reload($data)
{
@@ -311,7 +636,6 @@ class InstalledVersions
/**
* @return array[]
- * @psalm-return list}>
*/
private static function getInstalled()
{
@@ -322,27 +646,16 @@ class InstalledVersions
$installed = array();
if (self::$canGetVendors) {
+ // @phpstan-ignore-next-line
foreach (ClassLoader::getRegisteredLoaders() as $vendorDir => $loader) {
if (isset(self::$installedByVendor[$vendorDir])) {
$installed[] = self::$installedByVendor[$vendorDir];
} elseif (is_file($vendorDir.'/composer/installed.php')) {
$installed[] = self::$installedByVendor[$vendorDir] = require $vendorDir.'/composer/installed.php';
- if (null === self::$installed && strtr($vendorDir.'/composer', '\\', '/') === strtr(__DIR__, '\\', '/')) {
- self::$installed = $installed[count($installed) - 1];
- }
}
}
}
- if (null === self::$installed) {
- // only require the installed.php file if this file is loaded from its dumped location,
- // and not from its source location in the composer/composer package, see https://github.com/composer/composer/issues/9937
- if (substr(__DIR__, -8, 1) !== 'C') {
- self::$installed = require __DIR__ . '/installed.php';
- } else {
- self::$installed = array();
- }
- }
$installed[] = self::$installed;
return $installed;
diff --git a/vendor/composer/LICENSE b/vendor/composer/LICENSE
index f27399a04..62ecfd8d0 100644
--- a/vendor/composer/LICENSE
+++ b/vendor/composer/LICENSE
@@ -1,4 +1,3 @@
-
Copyright (c) Nils Adermann, Jordi Boggiano
Permission is hereby granted, free of charge, to any person obtaining a copy
@@ -18,4 +17,3 @@ AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
THE SOFTWARE.
-
diff --git a/vendor/composer/autoload_real.php b/vendor/composer/autoload_real.php
index 51b54d2f0..34b3b7ad0 100644
--- a/vendor/composer/autoload_real.php
+++ b/vendor/composer/autoload_real.php
@@ -22,6 +22,8 @@ class ComposerAutoloaderInit19fc2ff1c0f9a92279c7979386bb2056
return self::$loader;
}
+ require __DIR__ . '/platform_check.php';
+
spl_autoload_register(array('ComposerAutoloaderInit19fc2ff1c0f9a92279c7979386bb2056', 'loadClassLoader'), true, true);
self::$loader = $loader = new \Composer\Autoload\ClassLoader(\dirname(\dirname(__FILE__)));
spl_autoload_unregister(array('ComposerAutoloaderInit19fc2ff1c0f9a92279c7979386bb2056', 'loadClassLoader'));
diff --git a/vendor/composer/installed.json b/vendor/composer/installed.json
index 917ad98ff..888e9a438 100644
--- a/vendor/composer/installed.json
+++ b/vendor/composer/installed.json
@@ -72,21 +72,21 @@
},
{
"name": "chillerlan/php-qrcode",
- "version": "4.3.3",
- "version_normalized": "4.3.3.0",
+ "version": "4.3.4",
+ "version_normalized": "4.3.4.0",
"source": {
"type": "git",
"url": "https://github.com/chillerlan/php-qrcode.git",
- "reference": "6356b246948ac1025882b3f55e7c68ebd4515ae3"
+ "reference": "2ca4bf5ae048af1981d1023ee42a0a2a9d51e51d"
},
"dist": {
"type": "zip",
- "url": "https://api.github.com/repos/chillerlan/php-qrcode/zipball/6356b246948ac1025882b3f55e7c68ebd4515ae3",
- "reference": "6356b246948ac1025882b3f55e7c68ebd4515ae3",
+ "url": "https://api.github.com/repos/chillerlan/php-qrcode/zipball/2ca4bf5ae048af1981d1023ee42a0a2a9d51e51d",
+ "reference": "2ca4bf5ae048af1981d1023ee42a0a2a9d51e51d",
"shasum": ""
},
"require": {
- "chillerlan/php-settings-container": "^2.1",
+ "chillerlan/php-settings-container": "^2.1.4",
"ext-mbstring": "*",
"php": "^7.4 || ^8.0"
},
@@ -99,7 +99,7 @@
"chillerlan/php-authenticator": "Yet another Google authenticator! Also creates URIs for mobile apps.",
"setasign/fpdf": "Required to use the QR FPDF output."
},
- "time": "2021-11-25T22:38:09+00:00",
+ "time": "2022-07-25T09:12:45+00:00",
"type": "library",
"installation-source": "dist",
"autoload": {
@@ -137,7 +137,7 @@
],
"support": {
"issues": "https://github.com/chillerlan/php-qrcode/issues",
- "source": "https://github.com/chillerlan/php-qrcode/tree/4.3.3"
+ "source": "https://github.com/chillerlan/php-qrcode/tree/4.3.4"
},
"funding": [
{
@@ -954,36 +954,31 @@
},
{
"name": "phpstan/phpstan",
- "version": "1.1.2",
- "version_normalized": "1.1.2.0",
+ "version": "1.8.2",
+ "version_normalized": "1.8.2.0",
"source": {
"type": "git",
"url": "https://github.com/phpstan/phpstan.git",
- "reference": "bcea0ae85868a89d5789c75f012c93129f842934"
+ "reference": "c53312ecc575caf07b0e90dee43883fdf90ca67c"
},
"dist": {
"type": "zip",
- "url": "https://api.github.com/repos/phpstan/phpstan/zipball/bcea0ae85868a89d5789c75f012c93129f842934",
- "reference": "bcea0ae85868a89d5789c75f012c93129f842934",
+ "url": "https://api.github.com/repos/phpstan/phpstan/zipball/c53312ecc575caf07b0e90dee43883fdf90ca67c",
+ "reference": "c53312ecc575caf07b0e90dee43883fdf90ca67c",
"shasum": ""
},
"require": {
- "php": "^7.1|^8.0"
+ "php": "^7.2|^8.0"
},
"conflict": {
"phpstan/phpstan-shim": "*"
},
- "time": "2021-11-09T12:41:09+00:00",
+ "time": "2022-07-20T09:57:31+00:00",
"bin": [
"phpstan",
"phpstan.phar"
],
"type": "library",
- "extra": {
- "branch-alias": {
- "dev-master": "1.0-dev"
- }
- },
"installation-source": "dist",
"autoload": {
"files": [
@@ -997,7 +992,7 @@
"description": "PHPStan - PHP Static Analysis Tool",
"support": {
"issues": "https://github.com/phpstan/phpstan/issues",
- "source": "https://github.com/phpstan/phpstan/tree/1.1.2"
+ "source": "https://github.com/phpstan/phpstan/tree/1.8.2"
},
"funding": [
{
@@ -2550,17 +2545,17 @@
},
{
"name": "thecodingmachine/safe",
- "version": "v2.2.1",
- "version_normalized": "2.2.1.0",
+ "version": "v2.2.2",
+ "version_normalized": "2.2.2.0",
"source": {
"type": "git",
"url": "https://github.com/thecodingmachine/safe.git",
- "reference": "2a8d758fd17763faf86e4aa798193e17b9fac38c"
+ "reference": "440284f9592c9df402832452a6871a8b3c48d97e"
},
"dist": {
"type": "zip",
- "url": "https://api.github.com/repos/thecodingmachine/safe/zipball/2a8d758fd17763faf86e4aa798193e17b9fac38c",
- "reference": "2a8d758fd17763faf86e4aa798193e17b9fac38c",
+ "url": "https://api.github.com/repos/thecodingmachine/safe/zipball/440284f9592c9df402832452a6871a8b3c48d97e",
+ "reference": "440284f9592c9df402832452a6871a8b3c48d97e",
"shasum": ""
},
"require": {
@@ -2572,7 +2567,7 @@
"squizlabs/php_codesniffer": "^3.2",
"thecodingmachine/phpstan-strict-rules": "^1.0"
},
- "time": "2022-06-09T15:36:45+00:00",
+ "time": "2022-07-20T17:46:34+00:00",
"type": "library",
"extra": {
"branch-alias": {
@@ -2685,7 +2680,7 @@
"description": "PHP core functions that throw exceptions instead of returning FALSE on error",
"support": {
"issues": "https://github.com/thecodingmachine/safe/issues",
- "source": "https://github.com/thecodingmachine/safe/tree/v2.2.1"
+ "source": "https://github.com/thecodingmachine/safe/tree/v2.2.2"
},
"install-path": "../thecodingmachine/safe"
},
diff --git a/vendor/composer/installed.php b/vendor/composer/installed.php
index e2f618c68..2113f9a11 100644
--- a/vendor/composer/installed.php
+++ b/vendor/composer/installed.php
@@ -1,403 +1,403 @@
- array(
- 'pretty_version' => 'dev-master',
- 'version' => 'dev-master',
- 'type' => 'library',
- 'install_path' => __DIR__ . '/../../',
- 'aliases' => array(),
- 'reference' => '96f704d157fcf20da130f37a31fbffd62a8a9892',
- 'name' => '__root__',
- 'dev' => true,
+
+ array (
+ 'pretty_version' => 'dev-master',
+ 'version' => 'dev-master',
+ 'aliases' =>
+ array (
),
- 'versions' => array(
- '__root__' => array(
- 'pretty_version' => 'dev-master',
- 'version' => 'dev-master',
- 'type' => 'library',
- 'install_path' => __DIR__ . '/../../',
- 'aliases' => array(),
- 'reference' => '96f704d157fcf20da130f37a31fbffd62a8a9892',
- 'dev_requirement' => false,
- ),
- 'beberlei/assert' => array(
- 'pretty_version' => 'v3.3.2',
- 'version' => '3.3.2.0',
- 'type' => 'library',
- 'install_path' => __DIR__ . '/../beberlei/assert',
- 'aliases' => array(),
- 'reference' => 'cb70015c04be1baee6f5f5c953703347c0ac1655',
- 'dev_requirement' => false,
- ),
- 'chillerlan/php-qrcode' => array(
- 'pretty_version' => '4.3.3',
- 'version' => '4.3.3.0',
- 'type' => 'library',
- 'install_path' => __DIR__ . '/../chillerlan/php-qrcode',
- 'aliases' => array(),
- 'reference' => '6356b246948ac1025882b3f55e7c68ebd4515ae3',
- 'dev_requirement' => false,
- ),
- 'chillerlan/php-settings-container' => array(
- 'pretty_version' => '2.1.4',
- 'version' => '2.1.4.0',
- 'type' => 'library',
- 'install_path' => __DIR__ . '/../chillerlan/php-settings-container',
- 'aliases' => array(),
- 'reference' => '1beb7df3c14346d4344b0b2e12f6f9a74feabd4a',
- 'dev_requirement' => false,
- ),
- 'doctrine/instantiator' => array(
- 'pretty_version' => '1.4.1',
- 'version' => '1.4.1.0',
- 'type' => 'library',
- 'install_path' => __DIR__ . '/../doctrine/instantiator',
- 'aliases' => array(),
- 'reference' => '10dcfce151b967d20fde1b34ae6640712c3891bc',
- 'dev_requirement' => true,
- ),
- 'j4mie/idiorm' => array(
- 'pretty_version' => 'dev-master',
- 'version' => 'dev-master',
- 'type' => 'library',
- 'install_path' => __DIR__ . '/../j4mie/idiorm',
- 'aliases' => array(
- 0 => '9999999-dev',
- ),
- 'reference' => 'efc8ea06698f53e2c479c7696f2b154c47c3a3cb',
- 'dev_requirement' => false,
- ),
- 'mervick/material-design-icons' => array(
- 'pretty_version' => '2.2.0',
- 'version' => '2.2.0.0',
- 'type' => 'library',
- 'install_path' => __DIR__ . '/../mervick/material-design-icons',
- 'aliases' => array(),
- 'reference' => '635435c8d3df3a6da3241648caf8a65d1c07cc1a',
- 'dev_requirement' => false,
- ),
- 'myclabs/deep-copy' => array(
- 'pretty_version' => '1.11.0',
- 'version' => '1.11.0.0',
- 'type' => 'library',
- 'install_path' => __DIR__ . '/../myclabs/deep-copy',
- 'aliases' => array(),
- 'reference' => '14daed4296fae74d9e3201d2c4925d1acb7aa614',
- 'dev_requirement' => true,
- ),
- 'nikic/php-parser' => array(
- 'pretty_version' => 'v4.14.0',
- 'version' => '4.14.0.0',
- 'type' => 'library',
- 'install_path' => __DIR__ . '/../nikic/php-parser',
- 'aliases' => array(),
- 'reference' => '34bea19b6e03d8153165d8f30bba4c3be86184c1',
- 'dev_requirement' => true,
- ),
- 'paragonie/constant_time_encoding' => array(
- 'pretty_version' => 'v2.6.3',
- 'version' => '2.6.3.0',
- 'type' => 'library',
- 'install_path' => __DIR__ . '/../paragonie/constant_time_encoding',
- 'aliases' => array(),
- 'reference' => '58c3f47f650c94ec05a151692652a868995d2938',
- 'dev_requirement' => false,
- ),
- 'phar-io/manifest' => array(
- 'pretty_version' => '2.0.3',
- 'version' => '2.0.3.0',
- 'type' => 'library',
- 'install_path' => __DIR__ . '/../phar-io/manifest',
- 'aliases' => array(),
- 'reference' => '97803eca37d319dfa7826cc2437fc020857acb53',
- 'dev_requirement' => true,
- ),
- 'phar-io/version' => array(
- 'pretty_version' => '3.2.1',
- 'version' => '3.2.1.0',
- 'type' => 'library',
- 'install_path' => __DIR__ . '/../phar-io/version',
- 'aliases' => array(),
- 'reference' => '4f7fd7836c6f332bb2933569e566a0d6c4cbed74',
- 'dev_requirement' => true,
- ),
- 'phpdocumentor/reflection-common' => array(
- 'pretty_version' => '2.2.0',
- 'version' => '2.2.0.0',
- 'type' => 'library',
- 'install_path' => __DIR__ . '/../phpdocumentor/reflection-common',
- 'aliases' => array(),
- 'reference' => '1d01c49d4ed62f25aa84a747ad35d5a16924662b',
- 'dev_requirement' => true,
- ),
- 'phpdocumentor/reflection-docblock' => array(
- 'pretty_version' => '5.3.0',
- 'version' => '5.3.0.0',
- 'type' => 'library',
- 'install_path' => __DIR__ . '/../phpdocumentor/reflection-docblock',
- 'aliases' => array(),
- 'reference' => '622548b623e81ca6d78b721c5e029f4ce664f170',
- 'dev_requirement' => true,
- ),
- 'phpdocumentor/type-resolver' => array(
- 'pretty_version' => '1.6.1',
- 'version' => '1.6.1.0',
- 'type' => 'library',
- 'install_path' => __DIR__ . '/../phpdocumentor/type-resolver',
- 'aliases' => array(),
- 'reference' => '77a32518733312af16a44300404e945338981de3',
- 'dev_requirement' => true,
- ),
- 'phpspec/prophecy' => array(
- 'pretty_version' => 'v1.15.0',
- 'version' => '1.15.0.0',
- 'type' => 'library',
- 'install_path' => __DIR__ . '/../phpspec/prophecy',
- 'aliases' => array(),
- 'reference' => 'bbcd7380b0ebf3961ee21409db7b38bc31d69a13',
- 'dev_requirement' => true,
- ),
- 'phpstan/phpstan' => array(
- 'pretty_version' => '1.1.2',
- 'version' => '1.1.2.0',
- 'type' => 'library',
- 'install_path' => __DIR__ . '/../phpstan/phpstan',
- 'aliases' => array(),
- 'reference' => 'bcea0ae85868a89d5789c75f012c93129f842934',
- 'dev_requirement' => true,
- ),
- 'phpunit/php-code-coverage' => array(
- 'pretty_version' => '9.2.15',
- 'version' => '9.2.15.0',
- 'type' => 'library',
- 'install_path' => __DIR__ . '/../phpunit/php-code-coverage',
- 'aliases' => array(),
- 'reference' => '2e9da11878c4202f97915c1cb4bb1ca318a63f5f',
- 'dev_requirement' => true,
- ),
- 'phpunit/php-file-iterator' => array(
- 'pretty_version' => '3.0.6',
- 'version' => '3.0.6.0',
- 'type' => 'library',
- 'install_path' => __DIR__ . '/../phpunit/php-file-iterator',
- 'aliases' => array(),
- 'reference' => 'cf1c2e7c203ac650e352f4cc675a7021e7d1b3cf',
- 'dev_requirement' => true,
- ),
- 'phpunit/php-invoker' => array(
- 'pretty_version' => '3.1.1',
- 'version' => '3.1.1.0',
- 'type' => 'library',
- 'install_path' => __DIR__ . '/../phpunit/php-invoker',
- 'aliases' => array(),
- 'reference' => '5a10147d0aaf65b58940a0b72f71c9ac0423cc67',
- 'dev_requirement' => true,
- ),
- 'phpunit/php-text-template' => array(
- 'pretty_version' => '2.0.4',
- 'version' => '2.0.4.0',
- 'type' => 'library',
- 'install_path' => __DIR__ . '/../phpunit/php-text-template',
- 'aliases' => array(),
- 'reference' => '5da5f67fc95621df9ff4c4e5a84d6a8a2acf7c28',
- 'dev_requirement' => true,
- ),
- 'phpunit/php-timer' => array(
- 'pretty_version' => '5.0.3',
- 'version' => '5.0.3.0',
- 'type' => 'library',
- 'install_path' => __DIR__ . '/../phpunit/php-timer',
- 'aliases' => array(),
- 'reference' => '5a63ce20ed1b5bf577850e2c4e87f4aa902afbd2',
- 'dev_requirement' => true,
- ),
- 'phpunit/phpunit' => array(
- 'pretty_version' => '9.5.16',
- 'version' => '9.5.16.0',
- 'type' => 'library',
- 'install_path' => __DIR__ . '/../phpunit/phpunit',
- 'aliases' => array(),
- 'reference' => '5ff8c545a50226c569310a35f4fa89d79f1ddfdc',
- 'dev_requirement' => true,
- ),
- 'sebastian/cli-parser' => array(
- 'pretty_version' => '1.0.1',
- 'version' => '1.0.1.0',
- 'type' => 'library',
- 'install_path' => __DIR__ . '/../sebastian/cli-parser',
- 'aliases' => array(),
- 'reference' => '442e7c7e687e42adc03470c7b668bc4b2402c0b2',
- 'dev_requirement' => true,
- ),
- 'sebastian/code-unit' => array(
- 'pretty_version' => '1.0.8',
- 'version' => '1.0.8.0',
- 'type' => 'library',
- 'install_path' => __DIR__ . '/../sebastian/code-unit',
- 'aliases' => array(),
- 'reference' => '1fc9f64c0927627ef78ba436c9b17d967e68e120',
- 'dev_requirement' => true,
- ),
- 'sebastian/code-unit-reverse-lookup' => array(
- 'pretty_version' => '2.0.3',
- 'version' => '2.0.3.0',
- 'type' => 'library',
- 'install_path' => __DIR__ . '/../sebastian/code-unit-reverse-lookup',
- 'aliases' => array(),
- 'reference' => 'ac91f01ccec49fb77bdc6fd1e548bc70f7faa3e5',
- 'dev_requirement' => true,
- ),
- 'sebastian/comparator' => array(
- 'pretty_version' => '4.0.6',
- 'version' => '4.0.6.0',
- 'type' => 'library',
- 'install_path' => __DIR__ . '/../sebastian/comparator',
- 'aliases' => array(),
- 'reference' => '55f4261989e546dc112258c7a75935a81a7ce382',
- 'dev_requirement' => true,
- ),
- 'sebastian/complexity' => array(
- 'pretty_version' => '2.0.2',
- 'version' => '2.0.2.0',
- 'type' => 'library',
- 'install_path' => __DIR__ . '/../sebastian/complexity',
- 'aliases' => array(),
- 'reference' => '739b35e53379900cc9ac327b2147867b8b6efd88',
- 'dev_requirement' => true,
- ),
- 'sebastian/diff' => array(
- 'pretty_version' => '4.0.4',
- 'version' => '4.0.4.0',
- 'type' => 'library',
- 'install_path' => __DIR__ . '/../sebastian/diff',
- 'aliases' => array(),
- 'reference' => '3461e3fccc7cfdfc2720be910d3bd73c69be590d',
- 'dev_requirement' => true,
- ),
- 'sebastian/environment' => array(
- 'pretty_version' => '5.1.4',
- 'version' => '5.1.4.0',
- 'type' => 'library',
- 'install_path' => __DIR__ . '/../sebastian/environment',
- 'aliases' => array(),
- 'reference' => '1b5dff7bb151a4db11d49d90e5408e4e938270f7',
- 'dev_requirement' => true,
- ),
- 'sebastian/exporter' => array(
- 'pretty_version' => '4.0.4',
- 'version' => '4.0.4.0',
- 'type' => 'library',
- 'install_path' => __DIR__ . '/../sebastian/exporter',
- 'aliases' => array(),
- 'reference' => '65e8b7db476c5dd267e65eea9cab77584d3cfff9',
- 'dev_requirement' => true,
- ),
- 'sebastian/global-state' => array(
- 'pretty_version' => '5.0.5',
- 'version' => '5.0.5.0',
- 'type' => 'library',
- 'install_path' => __DIR__ . '/../sebastian/global-state',
- 'aliases' => array(),
- 'reference' => '0ca8db5a5fc9c8646244e629625ac486fa286bf2',
- 'dev_requirement' => true,
- ),
- 'sebastian/lines-of-code' => array(
- 'pretty_version' => '1.0.3',
- 'version' => '1.0.3.0',
- 'type' => 'library',
- 'install_path' => __DIR__ . '/../sebastian/lines-of-code',
- 'aliases' => array(),
- 'reference' => 'c1c2e997aa3146983ed888ad08b15470a2e22ecc',
- 'dev_requirement' => true,
- ),
- 'sebastian/object-enumerator' => array(
- 'pretty_version' => '4.0.4',
- 'version' => '4.0.4.0',
- 'type' => 'library',
- 'install_path' => __DIR__ . '/../sebastian/object-enumerator',
- 'aliases' => array(),
- 'reference' => '5c9eeac41b290a3712d88851518825ad78f45c71',
- 'dev_requirement' => true,
- ),
- 'sebastian/object-reflector' => array(
- 'pretty_version' => '2.0.4',
- 'version' => '2.0.4.0',
- 'type' => 'library',
- 'install_path' => __DIR__ . '/../sebastian/object-reflector',
- 'aliases' => array(),
- 'reference' => 'b4f479ebdbf63ac605d183ece17d8d7fe49c15c7',
- 'dev_requirement' => true,
- ),
- 'sebastian/recursion-context' => array(
- 'pretty_version' => '4.0.4',
- 'version' => '4.0.4.0',
- 'type' => 'library',
- 'install_path' => __DIR__ . '/../sebastian/recursion-context',
- 'aliases' => array(),
- 'reference' => 'cd9d8cf3c5804de4341c283ed787f099f5506172',
- 'dev_requirement' => true,
- ),
- 'sebastian/resource-operations' => array(
- 'pretty_version' => '3.0.3',
- 'version' => '3.0.3.0',
- 'type' => 'library',
- 'install_path' => __DIR__ . '/../sebastian/resource-operations',
- 'aliases' => array(),
- 'reference' => '0f4443cb3a1d92ce809899753bc0d5d5a8dd19a8',
- 'dev_requirement' => true,
- ),
- 'sebastian/type' => array(
- 'pretty_version' => '2.3.4',
- 'version' => '2.3.4.0',
- 'type' => 'library',
- 'install_path' => __DIR__ . '/../sebastian/type',
- 'aliases' => array(),
- 'reference' => 'b8cd8a1c753c90bc1a0f5372170e3e489136f914',
- 'dev_requirement' => true,
- ),
- 'sebastian/version' => array(
- 'pretty_version' => '3.0.2',
- 'version' => '3.0.2.0',
- 'type' => 'library',
- 'install_path' => __DIR__ . '/../sebastian/version',
- 'aliases' => array(),
- 'reference' => 'c6c1022351a901512170118436c764e473f6de8c',
- 'dev_requirement' => true,
- ),
- 'spomky-labs/otphp' => array(
- 'pretty_version' => 'v10.0.3',
- 'version' => '10.0.3.0',
- 'type' => 'library',
- 'install_path' => __DIR__ . '/../spomky-labs/otphp',
- 'aliases' => array(),
- 'reference' => '9784d9f7c790eed26e102d6c78f12c754036c366',
- 'dev_requirement' => false,
- ),
- 'thecodingmachine/safe' => array(
- 'pretty_version' => 'v2.2.1',
- 'version' => '2.2.1.0',
- 'type' => 'library',
- 'install_path' => __DIR__ . '/../thecodingmachine/safe',
- 'aliases' => array(),
- 'reference' => '2a8d758fd17763faf86e4aa798193e17b9fac38c',
- 'dev_requirement' => false,
- ),
- 'theseer/tokenizer' => array(
- 'pretty_version' => '1.2.1',
- 'version' => '1.2.1.0',
- 'type' => 'library',
- 'install_path' => __DIR__ . '/../theseer/tokenizer',
- 'aliases' => array(),
- 'reference' => '34a41e998c2183e22995f158c581e7b5e755ab9e',
- 'dev_requirement' => true,
- ),
- 'webmozart/assert' => array(
- 'pretty_version' => '1.11.0',
- 'version' => '1.11.0.0',
- 'type' => 'library',
- 'install_path' => __DIR__ . '/../webmozart/assert',
- 'aliases' => array(),
- 'reference' => '11cb2199493b2f8a3b53e7f19068fc6aac760991',
- 'dev_requirement' => true,
- ),
+ 'reference' => 'd5c043e8467881c00b2cd836f2f37b8479cf0b96',
+ 'name' => '__root__',
+ ),
+ 'versions' =>
+ array (
+ '__root__' =>
+ array (
+ 'pretty_version' => 'dev-master',
+ 'version' => 'dev-master',
+ 'aliases' =>
+ array (
+ ),
+ 'reference' => 'd5c043e8467881c00b2cd836f2f37b8479cf0b96',
),
+ 'beberlei/assert' =>
+ array (
+ 'pretty_version' => 'v3.3.2',
+ 'version' => '3.3.2.0',
+ 'aliases' =>
+ array (
+ ),
+ 'reference' => 'cb70015c04be1baee6f5f5c953703347c0ac1655',
+ ),
+ 'chillerlan/php-qrcode' =>
+ array (
+ 'pretty_version' => '4.3.4',
+ 'version' => '4.3.4.0',
+ 'aliases' =>
+ array (
+ ),
+ 'reference' => '2ca4bf5ae048af1981d1023ee42a0a2a9d51e51d',
+ ),
+ 'chillerlan/php-settings-container' =>
+ array (
+ 'pretty_version' => '2.1.4',
+ 'version' => '2.1.4.0',
+ 'aliases' =>
+ array (
+ ),
+ 'reference' => '1beb7df3c14346d4344b0b2e12f6f9a74feabd4a',
+ ),
+ 'doctrine/instantiator' =>
+ array (
+ 'pretty_version' => '1.4.1',
+ 'version' => '1.4.1.0',
+ 'aliases' =>
+ array (
+ ),
+ 'reference' => '10dcfce151b967d20fde1b34ae6640712c3891bc',
+ ),
+ 'j4mie/idiorm' =>
+ array (
+ 'pretty_version' => 'dev-master',
+ 'version' => 'dev-master',
+ 'aliases' =>
+ array (
+ 0 => '9999999-dev',
+ ),
+ 'reference' => 'efc8ea06698f53e2c479c7696f2b154c47c3a3cb',
+ ),
+ 'mervick/material-design-icons' =>
+ array (
+ 'pretty_version' => '2.2.0',
+ 'version' => '2.2.0.0',
+ 'aliases' =>
+ array (
+ ),
+ 'reference' => '635435c8d3df3a6da3241648caf8a65d1c07cc1a',
+ ),
+ 'myclabs/deep-copy' =>
+ array (
+ 'pretty_version' => '1.11.0',
+ 'version' => '1.11.0.0',
+ 'aliases' =>
+ array (
+ ),
+ 'reference' => '14daed4296fae74d9e3201d2c4925d1acb7aa614',
+ ),
+ 'nikic/php-parser' =>
+ array (
+ 'pretty_version' => 'v4.14.0',
+ 'version' => '4.14.0.0',
+ 'aliases' =>
+ array (
+ ),
+ 'reference' => '34bea19b6e03d8153165d8f30bba4c3be86184c1',
+ ),
+ 'paragonie/constant_time_encoding' =>
+ array (
+ 'pretty_version' => 'v2.6.3',
+ 'version' => '2.6.3.0',
+ 'aliases' =>
+ array (
+ ),
+ 'reference' => '58c3f47f650c94ec05a151692652a868995d2938',
+ ),
+ 'phar-io/manifest' =>
+ array (
+ 'pretty_version' => '2.0.3',
+ 'version' => '2.0.3.0',
+ 'aliases' =>
+ array (
+ ),
+ 'reference' => '97803eca37d319dfa7826cc2437fc020857acb53',
+ ),
+ 'phar-io/version' =>
+ array (
+ 'pretty_version' => '3.2.1',
+ 'version' => '3.2.1.0',
+ 'aliases' =>
+ array (
+ ),
+ 'reference' => '4f7fd7836c6f332bb2933569e566a0d6c4cbed74',
+ ),
+ 'phpdocumentor/reflection-common' =>
+ array (
+ 'pretty_version' => '2.2.0',
+ 'version' => '2.2.0.0',
+ 'aliases' =>
+ array (
+ ),
+ 'reference' => '1d01c49d4ed62f25aa84a747ad35d5a16924662b',
+ ),
+ 'phpdocumentor/reflection-docblock' =>
+ array (
+ 'pretty_version' => '5.3.0',
+ 'version' => '5.3.0.0',
+ 'aliases' =>
+ array (
+ ),
+ 'reference' => '622548b623e81ca6d78b721c5e029f4ce664f170',
+ ),
+ 'phpdocumentor/type-resolver' =>
+ array (
+ 'pretty_version' => '1.6.1',
+ 'version' => '1.6.1.0',
+ 'aliases' =>
+ array (
+ ),
+ 'reference' => '77a32518733312af16a44300404e945338981de3',
+ ),
+ 'phpspec/prophecy' =>
+ array (
+ 'pretty_version' => 'v1.15.0',
+ 'version' => '1.15.0.0',
+ 'aliases' =>
+ array (
+ ),
+ 'reference' => 'bbcd7380b0ebf3961ee21409db7b38bc31d69a13',
+ ),
+ 'phpstan/phpstan' =>
+ array (
+ 'pretty_version' => '1.8.2',
+ 'version' => '1.8.2.0',
+ 'aliases' =>
+ array (
+ ),
+ 'reference' => 'c53312ecc575caf07b0e90dee43883fdf90ca67c',
+ ),
+ 'phpunit/php-code-coverage' =>
+ array (
+ 'pretty_version' => '9.2.15',
+ 'version' => '9.2.15.0',
+ 'aliases' =>
+ array (
+ ),
+ 'reference' => '2e9da11878c4202f97915c1cb4bb1ca318a63f5f',
+ ),
+ 'phpunit/php-file-iterator' =>
+ array (
+ 'pretty_version' => '3.0.6',
+ 'version' => '3.0.6.0',
+ 'aliases' =>
+ array (
+ ),
+ 'reference' => 'cf1c2e7c203ac650e352f4cc675a7021e7d1b3cf',
+ ),
+ 'phpunit/php-invoker' =>
+ array (
+ 'pretty_version' => '3.1.1',
+ 'version' => '3.1.1.0',
+ 'aliases' =>
+ array (
+ ),
+ 'reference' => '5a10147d0aaf65b58940a0b72f71c9ac0423cc67',
+ ),
+ 'phpunit/php-text-template' =>
+ array (
+ 'pretty_version' => '2.0.4',
+ 'version' => '2.0.4.0',
+ 'aliases' =>
+ array (
+ ),
+ 'reference' => '5da5f67fc95621df9ff4c4e5a84d6a8a2acf7c28',
+ ),
+ 'phpunit/php-timer' =>
+ array (
+ 'pretty_version' => '5.0.3',
+ 'version' => '5.0.3.0',
+ 'aliases' =>
+ array (
+ ),
+ 'reference' => '5a63ce20ed1b5bf577850e2c4e87f4aa902afbd2',
+ ),
+ 'phpunit/phpunit' =>
+ array (
+ 'pretty_version' => '9.5.16',
+ 'version' => '9.5.16.0',
+ 'aliases' =>
+ array (
+ ),
+ 'reference' => '5ff8c545a50226c569310a35f4fa89d79f1ddfdc',
+ ),
+ 'sebastian/cli-parser' =>
+ array (
+ 'pretty_version' => '1.0.1',
+ 'version' => '1.0.1.0',
+ 'aliases' =>
+ array (
+ ),
+ 'reference' => '442e7c7e687e42adc03470c7b668bc4b2402c0b2',
+ ),
+ 'sebastian/code-unit' =>
+ array (
+ 'pretty_version' => '1.0.8',
+ 'version' => '1.0.8.0',
+ 'aliases' =>
+ array (
+ ),
+ 'reference' => '1fc9f64c0927627ef78ba436c9b17d967e68e120',
+ ),
+ 'sebastian/code-unit-reverse-lookup' =>
+ array (
+ 'pretty_version' => '2.0.3',
+ 'version' => '2.0.3.0',
+ 'aliases' =>
+ array (
+ ),
+ 'reference' => 'ac91f01ccec49fb77bdc6fd1e548bc70f7faa3e5',
+ ),
+ 'sebastian/comparator' =>
+ array (
+ 'pretty_version' => '4.0.6',
+ 'version' => '4.0.6.0',
+ 'aliases' =>
+ array (
+ ),
+ 'reference' => '55f4261989e546dc112258c7a75935a81a7ce382',
+ ),
+ 'sebastian/complexity' =>
+ array (
+ 'pretty_version' => '2.0.2',
+ 'version' => '2.0.2.0',
+ 'aliases' =>
+ array (
+ ),
+ 'reference' => '739b35e53379900cc9ac327b2147867b8b6efd88',
+ ),
+ 'sebastian/diff' =>
+ array (
+ 'pretty_version' => '4.0.4',
+ 'version' => '4.0.4.0',
+ 'aliases' =>
+ array (
+ ),
+ 'reference' => '3461e3fccc7cfdfc2720be910d3bd73c69be590d',
+ ),
+ 'sebastian/environment' =>
+ array (
+ 'pretty_version' => '5.1.4',
+ 'version' => '5.1.4.0',
+ 'aliases' =>
+ array (
+ ),
+ 'reference' => '1b5dff7bb151a4db11d49d90e5408e4e938270f7',
+ ),
+ 'sebastian/exporter' =>
+ array (
+ 'pretty_version' => '4.0.4',
+ 'version' => '4.0.4.0',
+ 'aliases' =>
+ array (
+ ),
+ 'reference' => '65e8b7db476c5dd267e65eea9cab77584d3cfff9',
+ ),
+ 'sebastian/global-state' =>
+ array (
+ 'pretty_version' => '5.0.5',
+ 'version' => '5.0.5.0',
+ 'aliases' =>
+ array (
+ ),
+ 'reference' => '0ca8db5a5fc9c8646244e629625ac486fa286bf2',
+ ),
+ 'sebastian/lines-of-code' =>
+ array (
+ 'pretty_version' => '1.0.3',
+ 'version' => '1.0.3.0',
+ 'aliases' =>
+ array (
+ ),
+ 'reference' => 'c1c2e997aa3146983ed888ad08b15470a2e22ecc',
+ ),
+ 'sebastian/object-enumerator' =>
+ array (
+ 'pretty_version' => '4.0.4',
+ 'version' => '4.0.4.0',
+ 'aliases' =>
+ array (
+ ),
+ 'reference' => '5c9eeac41b290a3712d88851518825ad78f45c71',
+ ),
+ 'sebastian/object-reflector' =>
+ array (
+ 'pretty_version' => '2.0.4',
+ 'version' => '2.0.4.0',
+ 'aliases' =>
+ array (
+ ),
+ 'reference' => 'b4f479ebdbf63ac605d183ece17d8d7fe49c15c7',
+ ),
+ 'sebastian/recursion-context' =>
+ array (
+ 'pretty_version' => '4.0.4',
+ 'version' => '4.0.4.0',
+ 'aliases' =>
+ array (
+ ),
+ 'reference' => 'cd9d8cf3c5804de4341c283ed787f099f5506172',
+ ),
+ 'sebastian/resource-operations' =>
+ array (
+ 'pretty_version' => '3.0.3',
+ 'version' => '3.0.3.0',
+ 'aliases' =>
+ array (
+ ),
+ 'reference' => '0f4443cb3a1d92ce809899753bc0d5d5a8dd19a8',
+ ),
+ 'sebastian/type' =>
+ array (
+ 'pretty_version' => '2.3.4',
+ 'version' => '2.3.4.0',
+ 'aliases' =>
+ array (
+ ),
+ 'reference' => 'b8cd8a1c753c90bc1a0f5372170e3e489136f914',
+ ),
+ 'sebastian/version' =>
+ array (
+ 'pretty_version' => '3.0.2',
+ 'version' => '3.0.2.0',
+ 'aliases' =>
+ array (
+ ),
+ 'reference' => 'c6c1022351a901512170118436c764e473f6de8c',
+ ),
+ 'spomky-labs/otphp' =>
+ array (
+ 'pretty_version' => 'v10.0.3',
+ 'version' => '10.0.3.0',
+ 'aliases' =>
+ array (
+ ),
+ 'reference' => '9784d9f7c790eed26e102d6c78f12c754036c366',
+ ),
+ 'thecodingmachine/safe' =>
+ array (
+ 'pretty_version' => 'v2.2.2',
+ 'version' => '2.2.2.0',
+ 'aliases' =>
+ array (
+ ),
+ 'reference' => '440284f9592c9df402832452a6871a8b3c48d97e',
+ ),
+ 'theseer/tokenizer' =>
+ array (
+ 'pretty_version' => '1.2.1',
+ 'version' => '1.2.1.0',
+ 'aliases' =>
+ array (
+ ),
+ 'reference' => '34a41e998c2183e22995f158c581e7b5e755ab9e',
+ ),
+ 'webmozart/assert' =>
+ array (
+ 'pretty_version' => '1.11.0',
+ 'version' => '1.11.0.0',
+ 'aliases' =>
+ array (
+ ),
+ 'reference' => '11cb2199493b2f8a3b53e7f19068fc6aac760991',
+ ),
+ ),
);
diff --git a/vendor/composer/platform_check.php b/vendor/composer/platform_check.php
new file mode 100644
index 000000000..adfb472fb
--- /dev/null
+++ b/vendor/composer/platform_check.php
@@ -0,0 +1,26 @@
+= 80000)) {
+ $issues[] = 'Your Composer dependencies require a PHP version ">= 8.0.0". You are running ' . PHP_VERSION . '.';
+}
+
+if ($issues) {
+ if (!headers_sent()) {
+ header('HTTP/1.1 500 Internal Server Error');
+ }
+ if (!ini_get('display_errors')) {
+ if (PHP_SAPI === 'cli' || PHP_SAPI === 'phpdbg') {
+ fwrite(STDERR, 'Composer detected issues in your platform:' . PHP_EOL.PHP_EOL . implode(PHP_EOL, $issues) . PHP_EOL.PHP_EOL);
+ } elseif (!headers_sent()) {
+ echo 'Composer detected issues in your platform:' . PHP_EOL.PHP_EOL . str_replace('You are running '.PHP_VERSION.'.', '', implode(PHP_EOL, $issues)) . PHP_EOL.PHP_EOL;
+ }
+ }
+ trigger_error(
+ 'Composer detected issues in your platform: ' . implode(' ', $issues),
+ E_USER_ERROR
+ );
+}
diff --git a/vendor/phpstan/phpstan/README.md b/vendor/phpstan/phpstan/README.md
index e4953b4a4..a1e47fdb9 100644
--- a/vendor/phpstan/phpstan/README.md
+++ b/vendor/phpstan/phpstan/README.md
@@ -5,7 +5,7 @@
-
+
@@ -26,13 +26,13 @@ can be checked before you run the actual line.
-
+
-
+
@@ -40,9 +40,9 @@ can be checked before you run the actual line.
-
+
-
+
@@ -53,6 +53,14 @@ can be checked before you run the actual line.
+
+
+
+
+
+
+
+
[**You can now sponsor my open-source work on PHPStan through GitHub Sponsors.**](https://github.com/sponsors/ondrejmirtes)
@@ -69,6 +77,7 @@ All the documentation lives on the [phpstan.org website](https://phpstan.org/):
* [PHPDocs Basics](https://phpstan.org/writing-php-code/phpdocs-basics) &Â [PHPDoc Types](https://phpstan.org/writing-php-code/phpdoc-types)
* [Extension Library](https://phpstan.org/user-guide/extension-library)
* [Developing Extensions](https://phpstan.org/developing-extensions/extension-types)
+* [API Reference](https://apiref.phpstan.org/)
## PHPStan Pro
diff --git a/vendor/phpstan/phpstan/composer.json b/vendor/phpstan/phpstan/composer.json
index 2c9e27962..498cc3816 100644
--- a/vendor/phpstan/phpstan/composer.json
+++ b/vendor/phpstan/phpstan/composer.json
@@ -3,7 +3,7 @@
"description": "PHPStan - PHP Static Analysis Tool",
"license": ["MIT"],
"require": {
- "php": "^7.1|^8.0"
+ "php": "^7.2|^8.0"
},
"conflict": {
"phpstan/phpstan-shim": "*"
@@ -12,11 +12,6 @@
"phpstan",
"phpstan.phar"
],
- "extra": {
- "branch-alias": {
- "dev-master": "1.0-dev"
- }
- },
"autoload": {
"files": ["bootstrap.php"]
}
diff --git a/vendor/phpstan/phpstan/phpstan.phar b/vendor/phpstan/phpstan/phpstan.phar
index 306020e3a247dfcbbda6908dde13157bb933044a..d2a91a0d5f8f742a28b145f4b4e6e8ebe7da7fe5 100755
GIT binary patch
delta 2007456
zcmb4s2UwKH^S^hzC!Je3kS?I8U;|W&VgV5pREoU=0t!l#q9UkZiLs-ntQr+G8atxK
z*cGEjO`>8;G&XF}*juXYKeM~<-C^>5p5H&u6F>Uy?(EF$?96O=-&^x!iD~itg=VFb
zNkmiQdii$s>RH#TS5E=|Q;SKeV2gU^e;zp({`usuh`T~nxXrtfyXv?cXLOT@o^uL`Cw#;crySDHXIpojR)d9zn?OEo;s
z&C4H|>ywm~lhPXh>ZamV5${hnT1&4Ms#-C&_d~(*`o1G*LV?QJF-*zpAs%Yia|#
znQjv<@LTF{M>InFi1RP5*hifvsG2eU-U7Mxd!mNW_=&34?1?$l8Mk!K2Yli}hb^`+
zr3=4$sp@?IYGOZ#1GcW*CHLb2|KMXjA*u?|F6`hNY#XV
z3))7Kh?X}`?xx*~R4ur-v+5?oXF|cy~|JrAVg5El?$P=*K*n
zgg5<=E_vCu1`^@Hyg6d~&+cT(YF0rsYRK0j!fB&mUNMv?R!Org-7=dA1HC+h}WjhzM?%JWJ~9Dk!_nT7l{p4(y>V_7Rn>x=4?HI&
z6m0hS((cW;%(A)z-tHCE)6C`H`Z!R#Fv4wiZ`HV)ui
zzEk*4>oGZuJ;((Hx^+3c2**I9U0KMTfIn!nN#Ttc&?dHZrrT$zEy*BgjKhG~B`59z
zN(iMIdZv-al=Kp%h#3QNHfo)U+OsYkz=+~*-`S;oX^GVvP>avhrlc#FDiTAq-%-#*
zOA7h?hVW7^d&hzp?TRTp3gLra8a#MJU%pq`YKx}YYJG}b8RZxl*)8p^WYCupzz#mRNC1=X&)bvJ&s|;<3d%IyBRO|Ni>PL?&C|)CSrQQyQ@9r9f@G!@X*)
z!bcGE0A+Xc<9s4++?AO~vmGT{?b)fESbvxWUF_l+3gz=|&(YqKY}
zWRwd)g70Ir+1i&|Y_;kszT^j>iNYhM9xfYA7qwE@Y7b6s%c|p4^{8K1%Q!qR*+%O=
z#grDiYAhWa0U>OM82QVaSlOiAsC7dKtdqv8%o&9j5EIwmThbg%R6~PXs~Xc6c{UQ6
zj$ssoK^`e3e
z>ya;d!&~J>UyQXeCCF4pO^k{!ofKx{cWtOE3MjVWkyk&n+D`J!5yM)k3CiNoxAJ6HF0CVRRdblOvOFbPfhF9YuwJROuOR;4R!Yd
zuH0LwEoo(Qh{cB<^ASNbPfG;L$LR@^+MSl4va%wPUc4O9_d@<7d3JKwQw83xiDqO|
zH2H|~5$8M=8gfQ>YQ%PP53Z+*-9T|mQ&n49P;F&rVhlo}4bbo=suZS-hM=Bp**kkN
zD)fk_ibvM_Q1Qp|g;}y28c5ePRdu57N3C2*3z429sCVZJXJiK
z$N=SJR8HznyX7#$whU1qxAjPMy)Q*^7nsAE3$Y&*!z5J0H$F_i7{(+3{d`
zdmlzOGa$LoL*>faz6LAs>RPFi+X}{qX4$wpE)bpuvGPiwtz0LT({DHq%=9OrLBx%-
zCOhf+h-K=!1&^ii7cSD5d0^e(BvrISGnEzj9+Fg4ETWlR9vCkUC3s36H@ZQfTo|^m
z8(oyF(9qSPD!20TOP&g6vKVX;+acEeyk&)KCOk`-0lfv~&$81QMq_a4#w@@1Agms7
zaP_%2I9uA&Bk?xoGP7M@Q5Y2yRR3Ax%^3=CWo~jq0Mi7H1f2LkULldAmiwDFDtorq8P98Dq)cbOI
zKJo}S1=c`Aw+}3opSsbkR2xFt2(=^H_agUY*XK#2`>S~V`4?El@|~kAF|-AiyWjLw
zn9^qhRF;gHl~A~HLrqs%f8dG(R4RHVP36GK&p~;jy4yB7u8S&=#`>ykXoaQPj0_e1
zBC0PccI#}}lUMTn+Q!Ocw5UX_eN}Ok?6ff<1H~i6>lOK}={I~g9&P0flj
z=&s82lkQ^Q#EqeGKB`FSzUvc;uPr_Vp#SX0c<%?qF5Y~ct0z|8`kJT0j0_h{AkO$W
zzYzTs6V95MND|15x1jE9kO;?GSR#i!KmRU_-9&9geid~P
z9h&|5w*ea~E5TeBiin6f>4yg=We41tJ~aY!+A5kOre5`4iRKnqe#@?j!jh~KWr%5G
z!>y?G0999}voP>14=Nt~iY_^js@s4q9Q0EWZo)Nwsv)da6*xbS!x!B!CF#bVOa>;V
z?0)3{S+s^8@K^EWU@0gHHHA3L&%1!WOjGq?^_N1=tvlUoDaR6Fcbx~S_(CokhUTj;
zb`|MnuqS=rPi00vig}N?L$PIuuDm&&H%25?n7~iXkNb@K8fMQQm7vgv!igi!|Fz97
zUS2v_W#-sDD=&)$aR)&k@$jOFB|84fv(1|*)OM_rMubMhp~fAe^&?z52*R?jZ4-r+
z$q7M;&K|AmMzi+WSdv>p?T9;HHMFCOL8^{)*nTjG5>Xq`E~Du_{X8zVQ$yGsEz;N+
zC=Xn{{3#kkM`|@fWl6$?IU*X*2!dP>sn*1+2-9>mJig|UouZ%N)z)ft`2sKmGco}Z
zd>kOeAd^+E_1&T*bkzy4vlD`A#3WONQnoWMT97KZ3Wm{I-e~U!-gQeSwWV69s2SkT
zNjt~s^hjfe3D<)3j(Mzjq+PRGLkowfyjPPZ;0v-EsZCA#h)_vCj#Q;FF~$O+Cu(1N
zJs})8TGIr)LrJEh6!c&fPVhUP5W5a>L{ZzjKDgwp>Pa{$8vuM
zENS7zY8_1q^TSsCSa@+nlg($TLJ8SCbMkCvoEa^0-1R`d;jCTl(Y^AlyFIX-lc0Uc
zqRMJxT=*CZ(?Cqx|LtKuPhJdG5p(3Y7)HYD;Y(`$M8Q@Jp5?U`O(05Fr-)_dLC{aH
z2i3duL&ccz9Vtd380eO?_UK?>a#cw}e%$o<+&$++B27?=&gEUKz>%m8^Rc#8xm0ljM1dui8%9
zw+4tGJQWJW!E5|mew`w-@~mGmr6__zY>)WmkYHvGfi%0L%Csy!bSwNh3
zr`Kh<*tY`L|*6OhrYeEVG#WTT*hc=h+s24f=7krs3n(FEi6
zrM6vIKG>1^_E8c0(9C2M!7#Ji->A<7%#Oopue-3`>krcwIYX@9;L1U|C|bpr1wG(N
zyN8V_T@xviwitL47PNkdE}?8gr!KLvAtMA0#8qq8z?xF*Xz)pgkB9u#q$5tcaQoi*
z>Bv%d(FRf4R`!mwl)V6yg}EWJgxI>-kazTGHxLu#F)g3+yQji}^br*hcb1j3V;dTf
z*m$!_^irJ4mixmeajM?s(eFURWPoUcm=^faO1EkejaoglGEqm0N{II!+@VKjDs8FT
z5Xc@YdaJDLyQPi)l=bU>dlSZb`7L10lJpf65PRBO+lFNk^x0yFL55-t3SRLU>NOk{
z$QM7TT$CE|#p~ZLVrDF)M$*P~K`#+xaHw|OPw&K4R(#9K(nO|BJM>cZrl3XRvinxX
zbu#+Wi-~*Cne<_9ttZgvG4M;8*b0JW)hrtqS`{Ts5XrxIQLmF2t}JFjhQoF3+|(CH
zDV$c^wyL|6I@N6MQ|&mdrYuIq&k}kAv38}cPa&^7P9XWcJ%1Ufmyd!7#`JVgAs&uU
zck>~~42HeoU!M-U`?vx{-8n)@h{}pZqJ=mQ0$x$s?ReAdP?egAZ3WKEX~iO%*dCSz
zRS_!h@@Ka_74_+huV6E&sqle_OOC~i)K5~ZWJQJu*No^`+oA7PLATlCe^Ml?6As
z3V#T2fA&>DPcWF&v>*JlrlU&b5Sf|B64Zw<%vglDVL#cV>xEULA)Qs0ylGr#)gUI%
zGpO0*{A9@BqQD}67+*W$W3`KAmOgoOUuNS-DnNZmAJKmPfH(T$nx|HdELZ=qRniqL-45yAk8MPNMt?nQJV}yG
zDTococ1YW+J|vjvb;rc2F1Jxr-?m~Jr2$j@9S*NHa5R-~tgMNg3L(Dza^5!P#LHtp
zqJ{4i0wEUkifPBo7Cgr?L+fnYZ9oXOhT<^TxQm?$QSwhQu!yTqU)yd_zPX#2T3D9a
zZ0$Tg_gGusYgQ`yAVSEi0;Boz=a=VnOgE<$zgU^lAHr4U+$w(w2M6QI-l#(N*pxzFmTG*C28h_~+sky(Q9c#h(D-5-W10y)F(o4_QLfvR
z=xG>P)AH&!us=fH3PBOi7%v~96Nb=e5R|hyyqhYz0e4-7iup#dW}om+-eo^qnLA`A
zCFY?|e=mq4{_-0*XNWm`XH@}w44k;!OQ({~jJ?&c-?kuZ^#>dxo+vE@D;v1)+D5%0
zgH@Q*>+OVYgJ4i!nMWE%;AwTD-zWWAa9r1kG%(>Q-L-
z6sKpUm>Y-zYrenB9nq2Z5YCT?BE)CUywbV$O9NC5NUm^Sh$#u}0L9Em6?znh>|m7%
zbMi(|wlr@oU9(GJ3t40kdx*qRw7=8a$6&3%l3#E$miCdENjUt5LvW$YtQSt6!156a
zTp(CLOEg%-elOp(X1Ok`iM?p)ZrFJ=+((&GuxSq8wA}8kGA9YJ$Br!#*H2n=3aP?D
zP7AdYx$`wILi}RKq^G*QRdxzxMiac%DpC>*T|#@rW24G_Jap1#Pvkp5H(@eHq^;krP4v}ht0y?ocMUYwJ!8$+v
zZVnHN+%{zh&G9P;&q2sl$7waK4z%J;5X;uB+o4T2
z8cZsh@`s2~?(HAa+m6t!XyZ%$i(vO^xj5}aG+XacDs*7F=&Y$jPD&zM_nn5JN7)dk
zc^qxVu2~#WG-mvG13!%~1&@GRKShmX+|!<-4CRP
zC|&-;m)Qt3b?Td!n3vBc#Ui*DgH;e+rKyd$>3^a0c6=^$iWoMo%RE`9ZcL|#>#ND}
z&b%$+cm6#KK(Bt}D(tx
z6nz`R-K}bC_cWPR4_%YkoRrb%Ix<>t>WDX1&3}W3SvbA{x|)og(Dd|yX?dwJqekVX
zn4;N=r4&4VOl`KKi7LPML_+lz1%>sv%BYz4f**d$V910G)3CQ<6u5E5yY=O~{r<
z(3Kg*LWN~){#Tqhq8|xcE!Xgb$Kz8nle2PsMx~ARNzKd4Zk3Ueo0~W~rB!}jTDm;)
zctr@AL!3UFbitV0?Y~Rs0IconVToX
zK6f}A*dPV4r={Q}$4;~kVOat^ZB1h~NPMHY)~a5;K_62ev$?r6iibqFxma&zb#qwb
zC{=b^8s(~u?#WjU&w#$;irf<{C(_=GYQyM%0|Oq{KL+RrX=r?=xT+TbR0dACP>;r~
zkOFAc1j&ld|I)&wX=r*{Vs5W2$nH~;`)1|maD4>{eIdHsS{z5m&60+bMj|R89$r>)
zmcIQ=>c+@456#TVEXc^p|2HYabIM^=Yu#zw=TZt;Cptj%I^t_gtG+N`%Z<2#l5pe^
zhuhK)G_)BUt5nUA{HSlNrQ{rznvyh@Um;o|%n)(ryO9wzxQvs6+ipN14=C&ycG6WR
zxC10?k}XjR4iH_w$h4#jmq9a9Anph@fo5xWs;(F`+g4#=OV$HlNEY$;#Wh|uaWkCt
zJ5P{0dFgZzmY$fK89LAtm(@MQYs^T0GLa#
z@m+;nb)(sHBv%sU${9xdY4Gl3-MEF2mXH#nEQrs}WIL
z!i7v0!XeUEmtqXcE2c>q
z*vp~#4642xWxZZMV&P1V3o#IC~B05!ow_QW5ub^_tBm1*punY^#MQIVP4Gh<}GF4sa=}N{JO+wckQR
zx{GB2qI&$3&a`5RRK)ig+^0%#T@r?$u9_-M;(v24mJ(@?6~uy!7mOmVHOXI#2GET%
z!o&7hIFKDeJ%}x1ha^*{$%!t_br)EGiw?9tDY{6}v3jlJ}wrvHkLE>2!IK
zl+P@;6107yU6)_zm`T!fwqSVxbsnv|?IKTuESgvVbmEI7M_R0f3HnM9L)`84r46!B
zKrXoPabvjSUSE{B5A|6}nmYR1^CCo-j11j9`XWvl>NKM6%HD)s*SOb+S4Q0XwRR^r
zJybj`-V6#@Dm07uSI@N}2IWNyh%KXW!jIEHZ23*@d%B|rTvKU@)SVmx?~lqy{KNbA
zBsydP7)tdl;zB3QCeEbqC|-^@;$ZSDnmSGzK^ln(hIlQi*=9N@SIQ>aCh)q5Lz67K
zp(46b_gsi5*JqJtj($Q>h~KFlY-Ej&qKUcE0BY@Ots%FCn?SriHs6)roGk;*W|sLy^S+w99;{0qG~K
z5iwS-qp5rcvM$fR3!jeI@uy)PSU0_nAMJB$}vb
z0W^D&MLXgJn;B>qh<|KPKaSeSAftuoh(?_Q8*$O+EVQs;cD73tBWm6#yNgq-RZ7@lN%d47Srju$Wwz%!JkQ>@An#+hX9!y{KnnXH`x+F8}~zs0?d`*QF)+eIgc{%Pyo
zbZTu)YnDl7)NP7|h2sjKi9?L|oo2#wc@D(m90M4GfC0ls6f2JQq<3
z(LZ4HaGfe#%8HRx6Wl1_h7nJ6*v$9kGr@=Wu96(sG^rE}BL-f*d>{1?
zN`1#crnKeE6n3feBrGjZRfrQ!&zcsdx)N2EcIn~&v7tA
z!+C4Orjx#1kI4#Sp*8Ulp%igpzY==`!o4P1SdzzrFyfm7?|wjQ7V@KKcaBI*%FD_r
zz+MIlWg`Aslo@A0>R=&UM9UN|8_~JfeqRGckWx@Y-!RT4V(I5URT{Ksuh4~L5{Yyd
zegg6K)huvZpL0<(^g*e3b7&*b$zHb}B0XM>W-g6sYI_c7@<1cr3*rI`X{C;UEB$K{
zT+eh9ei5-v`L517U1_9<#IY%K+(eZv`aORk4dOq;(<}`X!`{|Zi*m$4o2Re95gAH?
z&3NyKwgc{`ed?aOtngPM^(}%6#6f0l7wh6+Ytzs?2&N=v3z6ydzcag*(rtIz903B!uUA0ECBZo!Gig+ZWXc^o$)nL$X-VF8;x}}Ut
zgzcX`DWlR;aIkT#JB#Rsn73TDfFH|%s+-g9W#9y-3F#3#MW!63Yt%3l@7GC6^rx
zTI)&}`f<>o`+8VOOgUj;N6?YuL`C$NuyhbtzWY~F2&ojo1<_=*$w-~eF(#X?HNEkk#Yk>iq}Jp3!-N`4Si
z2l2+D3$UTg_0Q_m_rgVQ_{6l_yp+tO6od8o0?`cd`?ZG_*C7pS%r(T`j_p{j7Q=z~
zI<67nMqQO<(V7gg=1M_4o1V9Y-?(O)gL2EVz97QSVzd$W|J1ICp3ag6lV{C%OGGE1
zmxuIBi-yKd$paG8^I1Hp7HUJ>(pPoc!0-=eShx~%!6D-Bvz^9q4xz}L&P%swtiLP1
zI$Ih@vc+g49?HMIf^GQ3uZPjTITpgmGqKx>=rp$3boy?D)XXKYjZbW9c3>N{-*zIJ
zAbzoMTwC09r)NhY>whiFq#XZn|9b{+)kucF_H<5O_WUOi;w1#TN|H|Sy_3x
zc{z#MNOr#93o+tX^HFT0=wpIp-6SnDFTK@hsFs?Nq1%4_R}XLkL#v}j56$bg=`I>$
zKY>j-YlvftF2go#q~y%lYE`$9j=LaVY&TlCAH?N{!wcCt;_wL3VT=FK7F*sI+ti5C
zKX)Ydu4YCYv@B18jh44b5QLft2ZZ?GhaF>NrHVS{Ns^kh6m%F`_n*y1u2Yi44`p_P
zb?h{)9ZTcFK^~yY-={tVk2@EoucQvi5wQm{>tY6lqewVGYZa^7NkfG$x)#i#NM61UrUdUmLkY%K@V}P
zGGY%G8(P`Ym8q~AYADJPNB*<6iXDu$NRb@q(^S~`C>O@4xZ*hsO4iO#EST!`js+GE;;1nyCx(7Ht26y5%
zfSB&}<3GBI)$U)-BXYot*KIvSBsGYS8ePn0FY$bU$rbpo*1BFJ4L9Kjh(Lg7WOddH
z&vE>63o=H**0GPE5jqn70@+$$CJ!>bFpe{gxVL8LZ|EkSy+rl?nQ2L|7SPx35XfsI
zHc05aL)M*1ecpo3kCK{^)56aqe$}OKFP$i&mNqWimPSW{w@4B-5r;o7{!yoKncj#T
zjT_k~Y9SW+8DG%ZI7CA>F0xqv;cSzti;(PjrHI
z5?#XS5!=qs^+`_5OZ1tLlsh3UIWIMyeRv`s{>~!aNii)DmpZI(^#4g_Qc6x14$>QO
ziiEi2#EZ!+q`38zOs4*en^9sN$4(sE2!lo}oMC)f7T^1SijRjfu~`rU`syrXZey-P
z#HEqt8)YJ`;jz}WoiUB=E}6&%);B$W^yrivpU~W-v^4P#l)zJ1H=^CRY590q&!U_x
zf!t7F9m{qVmW_C=Yvp*E1K6_pU!#~fsX#A57m>OkUij%mm|^>N|7`|c3-S!iJ~M=?
z0CDqz+b>uyL2JxlYjvdH4Kd1SMMpW_K@!pSzmkZr6H|Q>+72J}QclvElBeUK6Hp9dtw$Vu#3MpO
zK~yLC6CyFVu5jRB@88+s-I5~)~Nzap=Q6``5N?85~(9dQtC==_hM
zl5nwWfVek7y+yVRYuBW_g6#iHLz#`@@g~b!d9_cH$QEKjgQ#xQ^&MKFryH*thIDb*
zPCIh;5dZmM*`vC{*7y^`*uwB4ghD!7rt|c^**RHBaD?p>o0gp-{;cC89*L1h9Nha)
zxX#S^H*Hm?;XwE_Le_*_Mg=
z;b@|+LAXdu5F4E+NcfMQ;M+J8Q<_2<%;SG6
z79WT%R}Zd}T^(FD0gG%@w-qYD>k=O$L~r{ItMDESn!9OJQ8zL(J0GJ#N+Np;<%Jk{
z#L9mLyXnTXr7Zh@$zb>$ioKJ5GSa1xo%OB6bL;p&daC=p$qMl6@TqiL|vp{}+pTts5pr=mR&28?Jj`m_5iZI$`eXH1twh(LUI
z>tbt`Gt1Q|OP5**u@Ju~dsl?(BWE{R(f^U);37(P3#LtE8%fO;BY|eJUKk-_;zjR%
zECRX&w)2UFg=jmh@kZ1@Jl!^Uqf8J2VLLexVjRM8L0n}2ZHUfz3|7aM0WBHSUm
zcl&LVZYZhS7;tg%tKb_#e~UVZSGLcz#_K0EbByFiE{jQrD1Ez~GG}f-MslLJ#!CFA
z8oG0T$NLNUG69J;)$OjaD=%rV%0L0X6lz5r{bXbT0
z{ITLoRSK}1=>uk1(ZoTL^VH;&?3@(1bpkuxt&*}bS<;^?4})O@dp4W2k)4DejLs+N
z(0|jBlT1`g8!@JcarG8x7%}Z64TQlr}c@}{S_%BHQ`o)
zm=iehuFmPR#?3x${2vC4J2Q2|uxa;Co9PpF{*|@5JS-8@3UR@?lTBom^g+Mr9QnVA
zjO_T45-R;JOLu~eQ7=5`27WSAq!S$88O3^d;FPhy_
zlIl_|T*j#)?i`b{pKbaf)o%X>s#zKEF*iJl#Vth~fNtW14{?6+dvn}(V?n?=_WwjK
z8|-XkT6$Vu!M_;IQh`EY#v>-(Z3$-*xERO1GoMdMf0ALG6VnaxNy}3x8Sejw1|{QJAGyNYM)F(-yu`Atq7lpC${WtrrU~v4>I+a%!1@*J`iId?)r31
z%uUr3;}4OGV`A1JM%h29)>%Js(N~v==%3J%evp@r5)KLR^|n8vakHi|wfakK+ybg*
zBxWY-Tl52M@pG~_BFZ5Sf4aq+`9Bn#wQLiXl?jW{L>N_+9*IQe_RUYiq-_*`)zWaM
z%dTiphCI(X0lM`s_-5VLLO+Oo&i7s-yL(p0g%}2zvSuIc<%O^y5i%5#Vh54ZAr>U0
z4npa|$!B7y5x>~-(+~1a1EEzlusc|AP7Pm55&1fzznyytnoeV0J~do2V<&mdMMOdD
zIPdKr`bADnH<&c)(HbYRQ`AA+J>-j*n&Z9uqNQByb0?(c`>G%lo4SO%iv!aex325JDC)A+}*4jhCb0;V(Ku5Bxf%j!ZBH%)}
zS|(9>eeE^t8CcM&tUGUM=m@8_c&K9#5QCqeQKc^E#
z>O;nZ%@I#5Uiuxzmd3p0woI5}_|--%M=V?)0=p^j$v4o96YZU)F{V9xNc>v`5kR!E
z`@NHL_C=6}7x5H*BEElCmW#n5oXPYT5FD1=eke<8Ft>+2*Z}ZoW=W`Mso4F&%?W38-&p!4monagc)T;ABn#)gKqt5heJhjj1B=ofK!
z;E9>C)qor81NXfw`bs8bjR*>eGi&qa%U$}APNFs9+{dHV=nWvDk7Vh_mv`ZiZsuV;
z+bZH2;_`L(yX$>d!b!E7c%R}!iMZ>~@LMd8XRfU}1>RFKJYH=$zSjsmlW}GNwL!Xg
zMOSDZ@8SOv8c401!yENeqF`WZhJh^Ur_~PRs^A#0!*8%{jh~f+Z8~>)=oA!h6`~^E
zHF|F+7YC7P!fPUSU%KTxy{NT!)Mk|2Q`Fcgrai!%r*;@IyskFaJ+(-01;DIH*+h6#%tDBR*zRSQQ_NSDJyhE{b`hZq
zF)A|aik#sa4uE@a7y!f1lss#G`WM-E+tcz%aD;eR3^rn@>1OFT6q0!wXj3P2-i*xDhj8;pUDwp+M}n&m&qlxMeTY+~Uma
zI4_7N?K-aE{-@@d+R<^D=oQiZ%@09(oxbcRd0+={D||M@{H;PYh^c+O)8&9ipcfBP
zBgi05ZyVW&Igzt{B_C2Hf-~Z-9@Xo4=&9-t*Hvzad4f3Y+&`OH?oNIC!91GrT5V4>
zVkRJNYccq&u1i1edf*iuJU%M$srye(T-%An2m@v$5-WJ-WEXS
z4&eMFKK^R_6q%G`LpWkF=+aGi0mN5DgNO3WvSu*cLoChLz!$KusU@;qL?Fc7Ju4RL
zm4Owd==}6_`trJ3)P5#n0%G^8b1ur)1WZ`Sr7~?-vO!oE;?lU{^>xW&|7!Z;7x)x&
zk?`<{_r|ZEt=A_KYli*vB~}D(P~?eZFGiRH;)@mA{NZg)4gFz=6ih}74iS$po9m)m
zg>@l+ilIZCcD^!04y)i;g-+C6(LPRkaQz}qDXa;Wrx51yVlO5!KQAjiE0JwNU5C^I
z9Rp&QUN^OCzJ#l~-f+38(gieq$VqbM_eQTfN&GW>{h
zQnNnVL%G@~ehYjLLSJr6U$~05*5aVN{-iIn>XgGbyWJ%V);A|%MUpes-Lc~($AZS9{r(0J)3cjbQS8CH3Q4t)Ku62xS4uG
z_xi->xUEk|HWOxwn)uu#jcs-?cCamfV^`*;4q1!;=+^oh*|e@Vfptb>nJ*n}_=>C;
z2B_f1XVb?fQXId*kuV59AfkT#
zZW~?H2(Hm)H4>W9aS&Q8Pa=KeCSF1ZIzja_Nna~=i@%zr0eKvE#Fm}nuVXhoX!=%v
zbAt06ixB^?`U^gw-bfnA7#{&oY%D6`|BLaBjV19NtLnzma9#E1xlwm;`${N+adE~|
z;@=ZMqi^#~>mgeAMTX@}5gi+gvDRq|Uta%WniF04!N{Dw@Hqnl#M_G@B7uroLmx)
z8}Z7_iyNp%AGv*Yxxb0YC7_Fnq8|5+x>8c^Z$?InM~G*tlRMMI5V=X^YAAOQo*6OW
zw_i%TvC><&&BCh%vvX}ZLLQ(Av_zqO*4TTMpdkB>6
zd9|w@h41ILqA%_m8PhYR{-$K02-b*GzLYK)wC!*MzKGIDgha$|UJsu_6>E+B=&c(H
zW6UwxkFDT>1Z70LxY?tP_WXKy`?H&}KCNjK03Rw7#fXTk=spO1#z~i*v
zm4DN?ZpvuJD*Bk5Mqc7cVsbL0&|gqMe7r^jANk+HDL8)XZ$+?cq>mUMtSn%>
z${oO~F1X_#CF&r4UHLT~=c#N1RjlapLCb9HSQVUsNCt7o-i<+YQ70wr@W7K|crxJJ
zpC-C)d+!XiB9q`LmLj&kd-*iDLS)K~j1mQiE-U_iMZxRn1U99cZ~9x(iuOWaoO)KK
z@9}nQc8|Pvf%YrWc-*4DnKuY3g_LkU`pv|si^N&e-HXXR^Ae*S~~AR
z!6zM#fey(aC__4keRGx;Ks+&^bL1C)TM{d(Aoj1Z9V)6=(d{8h{;{uiP||YOgcWq$
zQKL3=MF%DS6z@`a+}v~IW4T`|8gnSnvd*}i|DftiOFAk8Xh;Oec9uYqszw4tkmp<-|sC6ALh^l_o(vsfQ`MbVQ*U;$Uf5(4qT?x1j@1d0(%dv;J-
zk~~p_=)cFc1pN~yTzcK#nWT$i#OwoihU~juK)Ggrd!E!&-kTmT^a=6-oXUu)y{k^rW0RSzYg$;%-
zC6}v>_4fF%5X`5a&@ke6tHKUz{gxmnR0w5*G8nMqJ~cdRG;kWNS8
zRxp1LB!+ASYd(i>&
zHA6GG3h7726@PPHy95ZK2#Cu0ci<~0KNwVwm8W_p6leXiGg>Cb=Cq1NM+kAUpxp86
z+pD=N2nZ9dpcg#8+aqul3n$>tY>BaOV2H6}oBzfP%coXhL7(4N@T48x$~4dEuKJ?+
zw-n;jh2^&t;q>#H1~sQTxt_=T(2oKYvEYfWRrF;VL{c4gM~>2yI&{w8%mg2!(DYp`
zkehlIBDVYpab$J$YJH0U=v+rEerFKkoZUK%XggLn)gN)&be?&ATNj2DiT~Fo-Ew{ktQ~U6u|wxkvVPU8(>{GmvgIe
zXJ$c>3ax%?q@wn3;WO?iRxS{De(R*9BVa+tzcUhP+k$sS5wzhuBQ8?`RGsfX1-|=<
z8sr@1<-nOWx~uVJGCMQ{soT8XMo)V($-#+rLn)-?X2nDrZ=>G|e8{h6QUWUJ2!
zgZ7288@=tW$jrcDK}m@PtvRn0(%d+&OlJ%fL(TF(zJaeB?*^Hn2Ms-VQOQL@zMG!f
zvtQ5m+Y3r-k_?Yg5r{5r4plPW$QcOf6G(_03K2)0n7`SeyhCw`n7JWPh(r)aolR|z
z>+KPYBXoAVO4L#Kx*Ow&f2^c4JZ|cK`!YJ1HrlEg#@ftjX5?oDJO(m|FFZmgVx(LA
znVCIYw#0
zc}5TnDA)vX#jOMsL
z9)c=j#xG;8%2c%pGtJ38QHa=SaoSLw{Iv5unE8fF(3}oEzR8+TcC=a?
zLd2x^Qg++
zX1jP-ACGQw)aCgYRFDSZ+taVzv}@i760wT{>r;oUt)(7)6>YH#$ftKH
z`O-5OiZ0>z${`q2JUQ}
zbKo`ue1sb(2c~OC1@YCK_7l+sM9`XjN@E&xVv{M?#5z$4vGu4&Z%|PF`ZwBiYt5F0
zERmxjdz4P}#dn*`=&%z?_&EfiOS4WWqiMocFoCMGo2+T}$+5RZmeAFMQAcy!`w9)nZ^Z;{VdRe?l~sB
z>11gAWN*g<^u>1N1m=el;K}#)un=JDbT;;&oBCXWp-_l2BF3M&IELP=0^Nazot*Rv
z#^n%JLOg!EBSbWvsi~I)n$UP{Anc(YQkt^wilD8nGWq(Lylo1vwO1zZqOgx+uuq`~m%
z@ZISSumiyietT7kidO6ug5jhppLRbNO=TD@o(yC4@u)D6g-|x|t6`mG14*Vks-cow
zDU3|%PSL|GsI=l$z?0AHKD(=k$wzfM`(hoiJh~Yrm)8Tm$!-0XML4Bn{o`=62DEXbOp>K=g%p
zz;Olq)|vFpI;gU#foZO~34S+ZuP^~L%g+x7T|!qDfdRvulCxu7ITwcfy4%o(CB4UCsm!wjBCeqWebCK$oq?Av-CFV=UUp3W^X3NA
z3|4mknr6KVTZQUI2EJ!Y18vE8!6V|P-3~pt7lDz3^25UUbbzwI6JnlxfQL1qwZn*My8`3a`%PW#2S%?Kz8Hnuv4VSBjaPoe?h^j4Sl%3=!t
zjLAjAQShrQ@u_g>iVZmC4cG-@;`qo8pSYsTFN00##~EP8DWW3cw!^=_l1aliMTF~j
zrXl6QV!daW`nL)`)|FbHR7N@G;wNm;n-3Pm5ZAOC3O^2XQaO-kk?ALS7RisLaIfoJ
zWZ)6*Z`{9A@}pghjps&Q*(oce0R_KdL2v96HiMb;-uT=&=E6XlxLXlSp90M~D+Q|^PSa$T_-8>wfrL}B-#Oe~=s8BN0kX6Ci%2W$t+-JmY3g~ugG5b@6G
zk4&^ehb>!t!g30-^RoITj!J>g0^nCkadH|mQfqYw&a;Y@ejV#JU4n#BzbNofg%Aj{C$Wt>x8Fl)L6w@GuWr8G=-e~is&2h_MBnx
z(?W|w=};x4Br8M-;y>f(EQ1s_l)kfo4W?pIf_SSW>oHw3)~Jn^tX9*Km~zbaolCuB}=CBCA0`tx2Gz
zwq`A75+mM+#fx+FI`>-6b>0>_d!6<+$B-2@!SxH0M%-am`zIWkMQD4j~-q6#!rPAj|kQ5?oMxS6h|LJe$q{s5_dfu}}iy`8$8W
z4|s!vz&cBB!O61WPrWrYTfYznCX}L`Ys=^J(HRD`pTFp%(5Z*2tpd%oXUn+hVcxL&
zdaKGbnUiTHeYtS$qZUuWirO*^rh-gwZB~s75j|5u)n7Csx
z;+OZ_?r;_2{9d_~AJ!~}5}%&}wO||km$m+e2iMKZtaMXLdu5>oDHa+)jBk0-3eq&e
z>ei~?#LCVvpG*w=1wNLDBZI7hw2oS`h}(S(bl~i`VVO+AzD{0sIk%#o-c~@1rZj8r
zU}IVi`m8ery6i6r2ZcpyZ!Y0`tvDks{C-eCj2X$25ACgGQA^7~N#mgewSahW`iqUw
z^Dvedl);0y4U%GHqqgJI^p+a>S}GbLhF9e#!qS&t3pff7_600lqO(?Q$QnM(XsGwD
zFP)~FgeL3xB=82U{Ta8^RPM)<^}Y+LFZSJ$C#u6+cMJV(==Ozh@{B7>DfdVP4PfML8a)Vn{%J&X2mXJG_g6e3}j+}tUNEUInRVC!`a2JHx
z`Zgmlb3?E2^i;)Du!$bD^x$v8siS3JYs8EXCMWf-52l!niHR@~?U8kn=<>Ah*O(D>
za@Yp()Zo`fFgN(75!&^Shg_e@9NKB0FXz`fmP3i<<6c8$WfAR!h5YbPyKrHoOHyu5
zd}a#2HgpH7B6URXopxtr>u0Jo*50V#$9FBExbX6lDm}w2Ts{B#H)E~)7kmz?f&0H&
z_=RGK*7llfMmzoi2Rnv4U(%3mi!mlcsS~%aF>}MT@8|G4NTJZjsqu=rh}Em28EhOpBw8+{glWf?OlIjlBIOoO!pQRXvU1cs^E~i?)CwI28UIITmGAaYkGk
zTzwS0h94}0GgDq>pT-l@u26!65mj>nf0hZmGLu1?5eq`U;wvcZ&p8QRjudCahQ4^-
zKRW~Uwdlkcaj@GCDBM%!pP@TGhmAzWF>qC%P8}9#ZWRfI*g0aLGp*=r)Rxvp84>%@
zd@HAwC`a6FcPx?Z;KfE8@r_?xmRWzkv68>;>)O*OjQyd;s_@yLVg`;3j{3m5F*F*zD0*K=pbadeQ1_^Dc
z<&=(=w78EEpKCjyg3)DL_-HKd?G8Pt@MZ>zOS*nnYJO%j1)f^dNBhMRvp*JX-*}cy
zaBM;7to;f*uDOc+ib&e?Lx7r$fojMBqS|815$g9jusQ6YLQNwNh-(zRq3qXLyAE;g
zfFbY08Z3XvlJ*lp#>G
z`QD?>%wb^}p{39LjU7kjr0^UHD?S5!2sgc!o&3c(e>4FRWHx`
zpK}hKM-(Lt>{bjwv9Me5+KK`;l7iR@>a|<0tSxpcb}M!(=C#GRcA(eJ-!r>&&Utgc
zuirmBdS+vGc6N4lHr@{ctqP@NP0DR)w1}N{nD>f%a$>@J`O`beK(vWjj~vIRvW9(r
ztl{JD)rtG$&j^MFIQ{4vl#RJX4a2K`S;rt-Y+ayrJ#^>HP{ZH>;
zXFJJC1pvu(Q%b_v+{Ze}X@X>5LaHT2Bd)AZ9GHWDTM;|`k(2nfh-DdrM16P1t7tp8
zbQg=B)Z|5$)-PJLVaFso>qZi@6T`>ifO~0VrRoV2E7X!lpcJ|0SU}U)6GvMtfaR=yt#|)Y#dY6Dt6@(y#~V{t0YGCK+F7k8hm606z+@9^ZqaCYAD*g
z-UhWI>i}BNo7)G(faNgSGkO`+p})rX`F!rP2nOSz6H2oeFM6`^q@C_J^Kunbp)^T*
z-OJ!6O?e7ve;vlx507HZOD2MPakdDM2Gwh^ON6JPqNE-$<)@b=A?VlJpnOt)B&d93
zPjNb|Ti
zb=Z{r83W&TBa;csy1!qhseS%Zy;>?of%c~I_KB)y$=UB^T(c3g>y|-dJIKg8NGhC7
zvb0MrTfxGQSQ3MPd^*=g*tJyPFinZwqOiqPgXx4RgA)Ukryy&*vxfJ0$%~k9C1sIx
z03@k&e;kP*U!255SY}XlFAKS1B*@w$?ccUf9H@@8%j`4z!*`v<*$MyXn)QfOwX%@(
zQET`#DXm3!Buvq({L=5t
zu@0JoAW&;Dd=*ElogmdcB@^aqvbMVflb6!_;Ya
zbh))>+g2@urB-aV1`*OCtYkfGlBS^AYk6O|DwtS#bxMhp@MA2A>ZCDKxp=~|^&Ea_
zB-wE}AHd0ttZ9Fo4bt@A`Dnynf;cbX+y|XMi&^C%<&2ej98HS}u(l&NpV$({W%}wO
zc>*Hi`^M_{G|7drx;Aobk#^ku{#PM!_&WSZ--(DnhfmQdXN~;OiPiSZAbTNcMzQFs
zAHJVFR;Pw4d5Ymn>zt+-vcGscNvDiPN&H+jr0QOCK6}yUPm_m`^rx=A_?e00RHOpL
zAmOkUjl!t`aLXs?ti{Xe_*Qv-gQ640TnwnEYKa|=$&YhVMPV6z!ps#JMS-d8Tl4^}
zL-y~c6u6emTZzwmagBEk=OrvT`4|Qpt~ba^qsH+jK?6#%H2-IfOy*tkGa9v1Zcy8)
zI#X7-1mn5Z!N~csNZkw497&na`y1!qnox;oD&fO^D|4v@$OO1fO)leVj&@4e6ZfSY
z#Sm4G`Ch^~v2mQ6uk76CN7N6=EdS_&QBP<(*^JC
zsU|yk#UskAOj|upLwNW4sJk>;n1@!Ab;@0)IbzF}mGY8>WY4oV-ldacK-)l%cXP7M
zEV_y*m(kZPxOl?fp2w$J~5=Y*MxNH`OcVb**@7{5;
zM(yy8e6=9OT%)~!P;7+L6z&qLa?#n%HPwVE`$Q%fKAxLJlR@5~j$>$#K}lUq)Twnx
zV~|!fiyuoo)kwX9t|E7idXjM0{Z1)n)#GZ@ucO2IaU#Nc%^h}Hx_iT9)-hU|B|dpP
zz}y$&?lfjN5TpwFyz@0(Q08xJd1=Q>@|a=U%q?~mGbeCfQiIBi77tUN2^wn@r}sX@
zd7SAwloS^PccV?t6Z+cDPL1^
zJgUep8xb62ur^lUtb{xMIx|k>3WoIqW6t7WW6VOkxe&rfJ|VlQ=tg4X$`^R9ya}d-
zGfXF(|E~2wxe`GgMU4lULfHA#HQY(8W2hrWHpYInQ{w=3$Io#h!f^|$-Byb)$z!W#
zm|%}Fop5$T4_q^aFDIq?qB&NFznDzebpB3!(wQz5fNonNxNThTsHln!BIMIF;rRFl
ztp>@nq;4SGSEwyQ^<7nSZHjOPywZg4GRnk>oS3lDI@?A$d&V;!pYW9FGB_RKkJ#TO
z%v`t#+qwo<<2I%fKB&L_x49!+#qY+5hi+gxp>M-qzG~?sTM2RH&LQIq&)qAU^Sg+}
z%@N+$=HKYGG)eW*y87_LwcWF+YnxqiWaCVh9lqV7Q?b^4s5N2s=w~8)gRZHxHiPiX
zq*m@pG@>h|&c{TUou*S^p6(!(n0g1_tX~F)Z{`f0ZN3C0*(#urWC=62Tl=ch?y4$3
zf4dyZ#NgxikD5!ctl>u|jlE0GaP|BH2lg4*dx)~f7r9`Gr81MrFRv+DY~*p?1ms$^
zBRk2KWiAA>W$NKR({|29_;Wzq0?JigG;QebY+S-5!s_}FhtzBgtMv4gGT-iSM~>*IJtLkikLtuEU@6
ztGF?-C@-);+t{2edE!&leWd=5Wu6F!dm5T3{gtf_t?%z{XKI?rwH!6yZiJY|49-Fr
zv}CrL2&MExNctz4O!#Wf^R?=-4sq6XE^87+JZkIqMLNx(32!B_AYcgP(_c
zr%j-Ms7T+eQ*l0;PoD4k`ABuAhZ9aXXs4K>2XEqC4d|uVU&r4m$HaH><(CGc(gKit
zg8Z!t42~_;>Ij<6z7T0yda+a-05Vl=>GhqQm2gPC
z>5e3+>LRtOznhWzhDs%zcCzOM)xzKae``^DrVh{W_@fiZ6i_08KVGn572a2%yI_rFi%3IP-#Dg+Q-z3S)G2`s-
z@17&nbfi;$Z*h2|uC+9Z%}`=Qo0y48ls?
zMB&$iLC59I408*W4@p+L)dt&iIoeEC)?WCwf5*q@Xc$n*gx_Q87|eZ(Bi<`?cCKHU
zPB-7y$lZ#k*ZHz
z%bgH}Y^WMkow7Ld|Wk79+an;luni45M5`W4;WUKvw=N&AwDEis|6F#oE~D&XL^{qk&7Z9^%Am^>
z{93Ld?A=my{@W!w7gzd)5)zg?n?SEyk*pj<_AE9!H9=W?^+so@NFJuTyKz3kd%6R$
z7EKh3X0fhOAD3J{>9g`urM)^^A2u?8^Adh4ZugC5DA_;L{a_-0GL4^$Pk
z*^D1ok3ZU8b%oDrUCxU`ZqtgrRto>BCZ<+Wc4{19kzLdJN#h1SlyMt|Unf?3^n->%
zGpWk7dU5>m!J3Lt%1zB1JYwq~nkHB`@OQN{4O9_9mR}lx%xb8S;xkkuVTVq625P&l
zcMsKV3y_4;5EiJ_=DKB8NnN2+0Uctv$L6_9)tI5~aIFTT)|zt?o{5;zTX6;Zkk2@c
zNrdHpJaac$el_KJ^c$>>mxgmP!UfJ-aJ-c4U)BtbSsZZoi)v9nlNF)rx$NoFn
zihv_-nvNR6%A_)ebp}cqlb;$V)ox`
z#iFLLgXH&7e!{y=(<@o(Z@yGBum7ytPH&m)R=UUY%K|+)JK-+M6_*cW*s|#285i+
zZN!gMHh;9dEw|(DeSsisvcJ=U4E&zZjdrLwU%&YWEmPKoCsr^
z?jX)ohq90+QD+mTZu+p)WO4A&%R(MwG?HGYXH{43dOE34bIwKBdCuu}IG)x>?OC6l
zP%ov^BsF!n1$FI!6$PaNri4zg7eDslJrAv?ll*LDTVxJQSvSc^6|i?wJ&!nkwu8(Y
zF-KUiNjD<}7O0$*R+H6=r#}c6yLuhE(vi
z+wv$T3U){do2Y^${vb3uVl_{hxYSB_w8_|7J45OJ;~OhxhWn{voSEhOCEKgrEhrh{1Ah>F3Jg!f(CfoQj--rm3~F6Vhd1mM9|W7oYa0L7B9_CtQ`E`i5$IGw_$b
zp}6^*6HxTLL;mT#%z3dm#&cY>;L#fMsSDaSlp%dte7WBo5+;RS6|`!Dg%r{kp$9rr
zK&>PUz0<~1o(~m;(y&Ewe-Yx^j`Q{Ejhm53uz&3!C~I)j&{SPxOE3eMa`r^S3dDgp(RU(x!cngT%MV+~r5e`Ta^va}?sL(pm~QELIW
znx?Sm|9uTmr`~0==U)jZX-vlNBvis>wQAN7m#QibaaE1P7POQfQ6b~8;={2ka#$dL
zL8Wwc)AU`X2SYy1l&tD_-5P^KmT!Flfs`QpOyv_UFZ&=#HQ;6%Uzjh9pEGLM*HvRe
zW@~ySz}4bKPM!~??te7^@5RjL1NB6>N(rB((-CEO8@w=-mTYG!-9E09$a
zhx)Wb;;(4C>!2H2N{Nu3era=QqiWlX_IUqbW(bdL8uS?t^6E6SzMTxb|1qqSp`rL*
z2jh*JN}Ll0pD1pnNj{|(BAlg}PMBHqaT}_k)UHN9J+ex(Sj<{?%=O(-tF=8zoAC}7Ij)r_nr_XdWw3D2MBGHRC&$e5t
zIMm6I^I@J@7mq)%Fe$opG^lBc=AGci$H%H38Q+%A+?2u3V`BQ#&!*n!N7B|#kYdvN
z*(zH=h{32>Y93-};*rP_(Dr)QF+F=|3Paaei(0j@1FJ2uShdp;s>EmJ5`Tn1$*y(L
z%rr51$J|q?D%OJn4FanqXTt42lAc)vIjjo=*^kMD^ZSh~qjK)Aft=Jx%1Ia!G(A?5
z@?)PmE{*1WWDBm5aLi(>0&+q*
zPyuE+rUGw@$APqW*{kgq(zkgCJoeV%cd$?Rvvt5@wc#PNwpwCkFQbmL98?;@LQCD;
z)tn>K;H&VqGRhcK%p7A>M>dcquh?*YlrhI)+rp~?_sR)VlJA`xWoOiWQRutq
zM$8hGP(G=lKjlbg?#Fk1TR`JQTRHn4=-R*sG^$ughFK0nGShn+c5V$5PW>&w!E
zE9>2i<7`yvgoT}x2AgshHEv}JVbi&18>p6{-ZI9#t|}AZ<$g;uOqtw8>>Vo?;|=aU
z!q+R8SF(_QRmA&N*Bw=E!u^>cHWspxa(i-a!WJv8s`E&a;jFt>ZpJ6vT*9|k1It=+
zXWc~ZSSAxrJe*QocInT``hv#STrOc$li?@jF(Z_lR}?%y%FXx&Op%xg|JfbzLC(V<
zyNL>St#Ymf$4r^OMK1UtjJzV~mX*En92ZWQ+T(3AQkBZ$PAX21EMDYiFJ3PC&mNzH
zLBCiXAweSLJzYS}H4o&SC5sLccv3EtB}JIo@o18~x{CC<#de|3tt{JFp$}F6sxTKv
z0n*!`%1&+c`Eu-&{M&Q*aq*y&KG3qM+nG5g^!j_`MX8iB_p}1=I}Wlq2(w#1elE#b
zee_1LZh+pw7|OW`2c-S;FU^jDVtzqv-Oz3!36ijAdb>4hi>U=%-1C3vJr%1j{?OMG
zK^^oqo(Z_=Bb{n(w!B3uzLIl>v8UeAt7lYff=aWHizbXeV%L~<_L>?W@~?yiwropK
zmdn^nk5`C`!iOvLhu+@k!weJtjGHbu1p`Hal9p$P*hTMZ%*!Og
zwdFR^r9kW?Qd?p=;~}``Tr;8DPRIVTslI*C0|)!#4Xjg4COrEkyezRBD9W`(!5^7K
zIPUV67xY48pjToXJ}ab}I-F}JtlI9qxYQBHe5vNtHW)&tdl!V|UNtUE*&7Vlb*bGiU*s1>11}bVIJAG;&z1n42>p1>P%C@g8W|zZEB^HWCwRc?nz$oTS+Xt;2
zpWYNpqtT$D%rD`lN=2G$c(N;mQ$Br|PPn?kgdH*VcQz+Ry0)x
ziUa-ie15{7>4Xc%I7w$9P^1^bp6=
zE}M2(4C?-Mizpnb5Auu&=Z83NbKeklua%r)Y5`9_SC~vVc(~sL#o^2ld_;OCGf#N=
zitRPCe8ubhsP_ctB#H30Ze?42Gt&4@6LzDk&=6HB$)P#MRd{^ab0-m7=uaEodDwHSc$w~EPxy~e&iqXt-uZWv%!nMCMt_F0G$
z?u9P;yg3H--I6n(io+fB%3qy?#921?a3{BezNYYx<#TB}@$>C@v8hUR;wr-R8N!Sc
zdWO{OAxZfYo
zuPI!^VAiua7vZl5{a2afZ7-9AKVkKDJ;b};@X=+9
zqf2A7-si#zuWyZ7A}1u_+Y;9K7?TJWf4VeRO(z&7cETw^@8C+8MyO=MH=DQ86Tw_^
zfwCxhJZC3tJk-Nc^#(qHH>h{Kifi`e0tojOFTpV+%xC$G?U_WlX3^p$nvQY~hZVoa
zg%d8=mBM=>vRNVJQF%AcPndctI@TmJ2k+iP=;J|hcC+F{giZ@K%~8Dxb+i>ey&!7L(`#imNm@
z_z}}v9u|>I4B@1NU4rZ@nQe(pVU-?Vqf3lZ3=ibAgw6AhJS;|s>FXJ9@~?#N#r?A8
zwu&Wj9GF@UlDpG757mXPh2aq-aW2B;1Gj!O*K03)3P6IU3r&QTy9`TI-ABjI5_vY<
z&Eg?6jIwJg>y^&I;P?nm^NMScc<3r#qk_L9f-1s>Yb{_}51)E8zJqgE_Bw;7NYmWR
zn8w8r>Zfc**q!E!g{}2YuG^VJcx#?s=(^*bdSiQiNpUBJ7c@^ndRKb^zNi6HD0O5*
z6Iix=HiW_c6+^T4)%6?b)o|d?B*=$%a3Ky5-MR}
z$Rt(aNUHELS4fyQ{?k^C@%~K4dmPgVZ5+PU7hBrHuZk-Kd1y_+mb;Hinksbgj=+Z$
zdCbt+UeavB_NyD-QdOr@)pNOM!V3ZMmz41|$qNtZb;RuOk`oag>@m7MX=DpyZ7!9t
z^Q(RR)MP2YUQDrF?R@*d(QTZ?#Jy^T7ag@G&f{BFK_%p{1ih2dnF}WTu`Q#Pnv8s7
zFd2C{;!k1evXkadFSPRW=)X3vW>VU4(bHx#R9jTXcTKu9#%BzVGSGloVwt
zX0*p@G@Wx1e*TeFO$jQZ0(AHRlL&9Tnbd$RXf07D8XdixNrbMSMwitX*SjrXT+6b6
z2(6xPs!pXgGEU-O3BUJ9⋘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