diff -Nru phpunit-9.6.3/build/scripts/phar-manifest.php phpunit-9.6.7/build/scripts/phar-manifest.php --- phpunit-9.6.3/build/scripts/phar-manifest.php 2023-02-04 13:37:15.000000000 +0000 +++ phpunit-9.6.7/build/scripts/phar-manifest.php 2023-04-14 08:58:40.000000000 +0000 @@ -51,7 +51,7 @@ $writer->startDocument(); $writer->startElement('bom'); - $writer->writeAttribute('xmlns', 'https://cyclonedx.org/schema/bom/1.4'); + $writer->writeAttribute('xmlns', 'http://cyclonedx.org/schema/bom/1.4'); $writer->startElement('components'); diff -Nru phpunit-9.6.3/build/templates/binary-phar-autoload.php.in phpunit-9.6.7/build/templates/binary-phar-autoload.php.in --- phpunit-9.6.3/build/templates/binary-phar-autoload.php.in 2023-02-04 13:37:15.000000000 +0000 +++ phpunit-9.6.7/build/templates/binary-phar-autoload.php.in 2023-04-14 08:58:40.000000000 +0000 @@ -30,22 +30,31 @@ die(1); } -foreach (['dom', 'json', 'libxml', 'mbstring', 'tokenizer', 'xml', 'xmlwriter'] as $extension) { - if (extension_loaded($extension)) { - continue; +$requiredExtensions = ['dom', 'json', 'libxml', 'mbstring', 'tokenizer', 'xml', 'xmlwriter']; + +$unavailableExtensions = array_filter( + $requiredExtensions, + static function ($extension) { + return !extension_loaded($extension); } +); +if ([] !== $unavailableExtensions) { fwrite( STDERR, sprintf( - 'PHPUnit requires the "%s" extension.' . PHP_EOL, - $extension + 'PHPUnit requires the "%s" extensions, but the "%s" %s not available.' . PHP_EOL, + implode('", "', $requiredExtensions), + implode('", "', $unavailableExtensions), + count($unavailableExtensions) === 1 ? 'extension is' : 'extensions are' ) ); die(1); } +unset($requiredExtensions, $unavailableExtensions); + if (__FILE__ === realpath($_SERVER['SCRIPT_NAME'])) { $execute = true; } else { diff -Nru phpunit-9.6.3/ChangeLog-8.5.md phpunit-9.6.7/ChangeLog-8.5.md --- phpunit-9.6.3/ChangeLog-8.5.md 2023-02-04 13:37:15.000000000 +0000 +++ phpunit-9.6.7/ChangeLog-8.5.md 1970-01-01 00:00:00.000000000 +0000 @@ -1,297 +0,0 @@ -# Changes in PHPUnit 8.5 - -All notable changes of the PHPUnit 8.5 release series are documented in this file using the [Keep a CHANGELOG](https://keepachangelog.com/) principles. - -## [8.5.32] - 2023-01-26 - -### Fixed - -* [#5120](https://github.com/sebastianbergmann/phpunit/issues/5120): Test Runner incorrectly treats `--testsuite` and `--list-tests` as not combinable options - -## [8.5.31] - 2022-10-28 - -### Fixed - -* [#5076](https://github.com/sebastianbergmann/phpunit/issues/5076): Test Runner does not warn about conflicting options - -## [8.5.30] - 2022-09-25 - -### Changed - -* The configuration generator now asks for a cache directory - -### Fixed - -* [#4913](https://github.com/sebastianbergmann/phpunit/issues/4913): Failed `assert()` should show a backtrace -* [#4966](https://github.com/sebastianbergmann/phpunit/issues/4966): `TestCase::assertSame()` (and related exact comparisons) must compare `float` exactly - -## [8.5.29] - 2022-08-22 - -### Changed - -* [#5033](https://github.com/sebastianbergmann/phpunit/issues/5033): Do not depend on phpspec/prophecy - -## [8.5.28] - 2022-07-29 - -### Fixed - -* [#5015](https://github.com/sebastianbergmann/phpunit/pull/5015): Ukraine banner unreadable on black background -* [#5016](https://github.com/sebastianbergmann/phpunit/issues/5016): PHPUnit 8.5.27 does not work on PHP 7.2.0-7.2.18 and PHP 7.3.0-7.3.5 - -## [8.5.27] - 2022-06-19 - -### Fixed - -* [#4950](https://github.com/sebastianbergmann/phpunit/issues/4950): False error on `atMost()` invocation rule without call -* [#4962](https://github.com/sebastianbergmann/phpunit/issues/4962): Ukraine banner unreadable on white background - -## [8.5.26] - 2022-04-01 - -### Fixed - -* [#4938](https://github.com/sebastianbergmann/phpunit/issues/4938): Test Double code generator does not handle `void` return type declaration on `__clone()` methods - -## [8.5.25] - 2022-03-16 - -### Fixed - -* [#4934](https://github.com/sebastianbergmann/phpunit/issues/4934): Code Coverage does not work with PHPUnit 8.5.24 PHAR on PHP 7 - -## [8.5.24] - 2022-03-05 - #StandWithUkraine - -### Changed - -* [#4874](https://github.com/sebastianbergmann/phpunit/pull/4874): `PHP_FLOAT_EPSILON` is now used instead of hardcoded `0.0000000001` in `PHPUnit\Framework\Constraint\IsIdentical` - -### Fixed - -* When the HTML code coverage report's configured low upper bound is larger than the high lower bound then the default values are used instead - -## [8.5.23] - 2022-01-21 - -### Fixed - -* [#4799](https://github.com/sebastianbergmann/phpunit/pull/4799): Memory leaks in `PHPUnit\Framework\TestSuite` class -* [#4857](https://github.com/sebastianbergmann/phpunit/pull/4857): Result of `debug_backtrace()` is not used correctly - -## [8.5.22] - 2021-12-25 - -### Changed - -* [#4812](https://github.com/sebastianbergmann/phpunit/issues/4812): Do not enforce time limits when a debugging session through DBGp is active -* [#4835](https://github.com/sebastianbergmann/phpunit/issues/4835): Support for `$GLOBALS['_composer_autoload_path']` introduced in Composer 2.2 - -### Fixed - -* [#4840](https://github.com/sebastianbergmann/phpunit/pull/4840): TestDox prettifying for class names does not correctly handle diacritics -* [#4846](https://github.com/sebastianbergmann/phpunit/pull/4846): Composer proxy script is not ignored - -## [8.5.21] - 2021-09-25 - -### Changed - -* PHPUnit no longer converts PHP deprecations to exceptions by default (configure `convertDeprecationsToExceptions="true"` to enable this) -* The PHPUnit XML configuration file generator now configures `convertDeprecationsToExceptions="true"` - -### Fixed - -* [#4772](https://github.com/sebastianbergmann/phpunit/pull/4772): TestDox HTML report not displayed correctly when browser has custom colour settings - -## [8.5.20] - 2021-08-31 - -### Fixed - -* [#4751](https://github.com/sebastianbergmann/phpunit/issues/4751): Configuration validation fails when using brackets in glob pattern - -## [8.5.19] - 2021-07-31 - -### Fixed - -* [#4740](https://github.com/sebastianbergmann/phpunit/issues/4740): `phpunit.phar` does not work with PHP 8.1 - -## [8.5.18] - 2021-07-19 - -### Fixed - -* [#4720](https://github.com/sebastianbergmann/phpunit/issues/4720): PHPUnit does not verify its own PHP extension requirements - -## [8.5.17] - 2021-06-23 - -### Changed - -* PHPUnit now errors out on startup when `PHP_VERSION` contains a value that is not compatible with `version_compare()`, for instance `X.Y.Z-(to be removed in future macOS)` - -## [8.5.16] - 2021-06-05 - -### Changed - -* The test result cache (the storage for which is implemented in `PHPUnit\Runner\DefaultTestResultCache`) no longer uses PHP's `serialize()` and `unserialize()` functions for persistence. It now uses a versioned JSON format instead that is independent of PHP implementation details (see [#3581](https://github.com/sebastianbergmann/phpunit/issues/3581) and [#4662](https://github.com/sebastianbergmann/phpunit/pull/4662) for examples why this is a problem). When PHPUnit tries to load the test result cache from a file that does not exist, or from a file that does not contain data in JSON format, or from a file that contains data in a JSON format version other than the one used by the currently running PHPUnit version, then this is considered to be a "cache miss". An empty `DefaultTestResultCache` object is created in this case. This should also prevent PHPUnit from crashing when trying to load a test result cache file created by a different version of PHPUnit (see [#4580](https://github.com/sebastianbergmann/phpunit/issues/4580) for example). - -### Fixed - -* [#4663](https://github.com/sebastianbergmann/phpunit/issues/4663): `TestCase::expectError()` works on PHP 7.3, but not on PHP >= 7.4 -* [#4678](https://github.com/sebastianbergmann/phpunit/pull/4678): Stubbed methods with `iterable` return types should return empty array by default -* [#4692](https://github.com/sebastianbergmann/phpunit/issues/4692): Annotations in single-line doc-comments are not handled correctly -* [#4694](https://github.com/sebastianbergmann/phpunit/issues/4694): `TestCase::getMockFromWsdl()` does not work with PHP 8.1-dev - -## [8.5.15] - 2021-03-17 - -### Fixed - -* [#4591](https://github.com/sebastianbergmann/phpunit/issues/4591): TeamCity logger logs warnings as test failures - -## [8.5.14] - 2021-01-17 - -### Fixed - -* [#4535](https://github.com/sebastianbergmann/phpunit/issues/4535): `getMockFromWsdl()` does not handle methods that do not have parameters correctly -* [#4572](https://github.com/sebastianbergmann/phpunit/issues/4572): Schema validation does not work with `%xx` sequences in path to `phpunit.xsd` -* [#4575](https://github.com/sebastianbergmann/phpunit/issues/4575): PHPUnit 8.5 incompatibility with PHP 8.1 - -## [8.5.13] - 2020-12-01 - -### Fixed - -* Running tests in isolated processes did not work with PHP 8 on Windows - -## [8.5.12] - 2020-11-30 - -### Changed - -* Changed PHP version constraint in `composer.json` from `^7.2` to `>=7.2` to allow the installation of PHPUnit 8.5 on PHP 8. Please note that the code coverage functionality is not available for PHPUnit 8.5 on PHP 8. - -### Fixed - -* [#4529](https://github.com/sebastianbergmann/phpunit/issues/4529): Debug mode of Xdebug 2 is not disabled for PHPT tests - -## [8.5.11] - 2020-11-27 - -### Changed - -* Bumped required version of `phpunit/php-code-coverage` - -## [8.5.10] - 2020-11-27 - -### Added - -* Support for Xdebug 3 - -### Fixed - -* [#4516](https://github.com/sebastianbergmann/phpunit/issues/4516): `phpunit/phpunit-selenium` does not work with PHPUnit 8.5.9 - -## [8.5.9] - 2020-11-10 - -### Fixed - -* [#3965](https://github.com/sebastianbergmann/phpunit/issues/3965): Process Isolation throws exceptions when PHPDBG is used -* [#4470](https://github.com/sebastianbergmann/phpunit/pull/4470): Infinite recursion when `--static-backup --strict-global-state` is used - -## [8.5.8] - 2020-06-22 - -### Fixed - -* [#4312](https://github.com/sebastianbergmann/phpunit/issues/4312): Fix for [#4299](https://github.com/sebastianbergmann/phpunit/issues/4299) breaks backward compatibility - -## [8.5.7] - 2020-06-21 - -### Fixed - -* [#4299](https://github.com/sebastianbergmann/phpunit/issues/4299): "No tests executed" does not always result in exit code `1` -* [#4306](https://github.com/sebastianbergmann/phpunit/issues/4306): Exceptions during code coverage driver initialization are not handled correctly - -## [8.5.6] - 2020-06-15 - -### Fixed - -* [#4211](https://github.com/sebastianbergmann/phpunit/issues/4211): `phpdbg_*()` functions are scoped to `PHPUnit\phpdbg_*()` - -## [8.5.5] - 2020-05-22 - -### Fixed - -* [#4033](https://github.com/sebastianbergmann/phpunit/issues/4033): Unexpected behaviour when `$GLOBALS` is deleted - -## [8.5.4] - 2020-04-23 - -### Changed - -* Changed how `PHPUnit\TextUI\Command` passes warnings to `PHPUnit\TextUI\TestRunner` - -## [8.5.3] - 2020-03-31 - -### Fixed - -* [#4017](https://github.com/sebastianbergmann/phpunit/issues/4017): Do not suggest refactoring to something that is also deprecated -* [#4133](https://github.com/sebastianbergmann/phpunit/issues/4133): `expectExceptionMessageRegExp()` has been removed in PHPUnit 9 without a deprecation warning being given in PHPUnit 8 -* [#4139](https://github.com/sebastianbergmann/phpunit/issues/4139): Cannot double interfaces that declare a constructor with PHP 8 -* [#4144](https://github.com/sebastianbergmann/phpunit/issues/4144): Empty objects are converted to empty arrays in JSON comparison failure diff - -## [8.5.2] - 2020-01-08 - -### Removed - -* `eval-stdin.php` has been removed, it was not used anymore since PHPUnit 7.2.7 - -## [8.5.1] - 2019-12-25 - -### Changed - -* `eval-stdin.php` can now only be executed with `cli` and `phpdbg` - -### Fixed - -* [#3983](https://github.com/sebastianbergmann/phpunit/issues/3983): Deprecation warning given too eagerly - -## [8.5.0] - 2019-12-06 - -### Added - -* [#3911](https://github.com/sebastianbergmann/phpunit/issues/3911): Support combined use of `addMethods()` and `onlyMethods()` -* [#3949](https://github.com/sebastianbergmann/phpunit/issues/3949): Introduce specialized assertions `assertFileEqualsCanonicalizing()`, `assertFileEqualsIgnoringCase()`, `assertStringEqualsFileCanonicalizing()`, `assertStringEqualsFileIgnoringCase()`, `assertFileNotEqualsCanonicalizing()`, `assertFileNotEqualsIgnoringCase()`, `assertStringNotEqualsFileCanonicalizing()`, and `assertStringNotEqualsFileIgnoringCase()` as alternative to using `assertFileEquals()` etc. with optional parameters - -### Changed - -* [#3860](https://github.com/sebastianbergmann/phpunit/pull/3860): Deprecate invoking PHPUnit commandline test runner with just a class name -* [#3950](https://github.com/sebastianbergmann/phpunit/issues/3950): Deprecate optional parameters of `assertFileEquals()` etc. -* [#3955](https://github.com/sebastianbergmann/phpunit/issues/3955): Deprecate support for doubling multiple interfaces - -### Fixed - -* [#3953](https://github.com/sebastianbergmann/phpunit/issues/3953): Code Coverage for test executed in isolation does not work when the PHAR is used -* [#3967](https://github.com/sebastianbergmann/phpunit/issues/3967): Cannot double interface that extends interface that extends `\Throwable` -* [#3968](https://github.com/sebastianbergmann/phpunit/pull/3968): Test class run in a separate PHP process are passing when `exit` called inside - -[8.5.32]: https://github.com/sebastianbergmann/phpunit/compare/8.5.31...8.5.32 -[8.5.31]: https://github.com/sebastianbergmann/phpunit/compare/8.5.30...8.5.31 -[8.5.30]: https://github.com/sebastianbergmann/phpunit/compare/8.5.29...8.5.30 -[8.5.29]: https://github.com/sebastianbergmann/phpunit/compare/8.5.28...8.5.29 -[8.5.28]: https://github.com/sebastianbergmann/phpunit/compare/8.5.27...8.5.28 -[8.5.27]: https://github.com/sebastianbergmann/phpunit/compare/8.5.26...8.5.27 -[8.5.26]: https://github.com/sebastianbergmann/phpunit/compare/8.5.25...8.5.26 -[8.5.25]: https://github.com/sebastianbergmann/phpunit/compare/8.5.24...8.5.25 -[8.5.24]: https://github.com/sebastianbergmann/phpunit/compare/8.5.23...8.5.24 -[8.5.23]: https://github.com/sebastianbergmann/phpunit/compare/8.5.22...8.5.23 -[8.5.22]: https://github.com/sebastianbergmann/phpunit/compare/8.5.21...8.5.22 -[8.5.21]: https://github.com/sebastianbergmann/phpunit/compare/8.5.20...8.5.21 -[8.5.20]: https://github.com/sebastianbergmann/phpunit/compare/8.5.19...8.5.20 -[8.5.19]: https://github.com/sebastianbergmann/phpunit/compare/8.5.18...8.5.19 -[8.5.18]: https://github.com/sebastianbergmann/phpunit/compare/8.5.17...8.5.18 -[8.5.17]: https://github.com/sebastianbergmann/phpunit/compare/8.5.16...8.5.17 -[8.5.16]: https://github.com/sebastianbergmann/phpunit/compare/8.5.15...8.5.16 -[8.5.15]: https://github.com/sebastianbergmann/phpunit/compare/8.5.14...8.5.15 -[8.5.14]: https://github.com/sebastianbergmann/phpunit/compare/8.5.13...8.5.14 -[8.5.13]: https://github.com/sebastianbergmann/phpunit/compare/8.5.12...8.5.13 -[8.5.12]: https://github.com/sebastianbergmann/phpunit/compare/8.5.11...8.5.12 -[8.5.11]: https://github.com/sebastianbergmann/phpunit/compare/8.5.10...8.5.11 -[8.5.10]: https://github.com/sebastianbergmann/phpunit/compare/8.5.9...8.5.10 -[8.5.9]: https://github.com/sebastianbergmann/phpunit/compare/8.5.8...8.5.9 -[8.5.8]: https://github.com/sebastianbergmann/phpunit/compare/8.5.7...8.5.8 -[8.5.7]: https://github.com/sebastianbergmann/phpunit/compare/8.5.6...8.5.7 -[8.5.6]: https://github.com/sebastianbergmann/phpunit/compare/8.5.5...8.5.6 -[8.5.5]: https://github.com/sebastianbergmann/phpunit/compare/8.5.4...8.5.5 -[8.5.4]: https://github.com/sebastianbergmann/phpunit/compare/8.5.3...8.5.4 -[8.5.3]: https://github.com/sebastianbergmann/phpunit/compare/8.5.2...8.5.3 -[8.5.2]: https://github.com/sebastianbergmann/phpunit/compare/8.5.1...8.5.2 -[8.5.1]: https://github.com/sebastianbergmann/phpunit/compare/8.5.0...8.5.1 -[8.5.0]: https://github.com/sebastianbergmann/phpunit/compare/8.4.3...8.5.0 diff -Nru phpunit-9.6.3/ChangeLog-9.6.md phpunit-9.6.7/ChangeLog-9.6.md --- phpunit-9.6.3/ChangeLog-9.6.md 2023-02-04 13:37:15.000000000 +0000 +++ phpunit-9.6.7/ChangeLog-9.6.md 2023-04-14 08:58:40.000000000 +0000 @@ -2,6 +2,34 @@ All notable changes of the PHPUnit 9.6 release series are documented in this file using the [Keep a CHANGELOG](https://keepachangelog.com/) principles. +## [9.6.7] - 2023-04-14 + +### Fixed + +* Tests that have `@doesNotPerformAssertions` do not contribute to code coverage + +## [9.6.6] - 2023-03-27 + +### Fixed + +* [#5270](https://github.com/sebastianbergmann/phpunit/issues/5270): `GlobalState::getIniSettingsAsString()` generates code that triggers warnings + +## [9.6.5] - 2023-03-09 + +### Changed + +* Backported the HTML and CSS improvements made to the `--testdox-html` from PHPUnit 10 + +### Fixed + +* [#5205](https://github.com/sebastianbergmann/phpunit/issues/5205): Wrong default value for optional parameter of `PHPUnit\Util\Test::parseTestMethodAnnotations()` causes `ReflectionException` + +## [9.6.4] - 2023-02-27 + +### Fixed + +* [#5186](https://github.com/sebastianbergmann/phpunit/issues/5186): SBOM does not validate + ## [9.6.3] - 2023-02-04 ### Fixed @@ -19,7 +47,7 @@ ### Fixed * [#5073](https://github.com/sebastianbergmann/phpunit/issues/5073): `--no-extensions` CLI option only prevents extension PHARs from being loaded -* [#5160](https://github.com/sebastianbergmann/phpunit/issues/5160): PHPUnit 9.6 misses deprecations for assertions and constraints removed in PHPUnit 10 +* [#5160](https://github.com/sebastianbergmann/phpunit/issues/5160): Deprecate `assertClassHasAttribute()`, `assertClassNotHasAttribute()`, `assertClassHasStaticAttribute()`, `assertClassNotHasStaticAttribute()`, `assertObjectHasAttribute()`, `assertObjectNotHasAttribute()`, `classHasAttribute()`, `classHasStaticAttribute()`, and `objectHasAttribute()` ## [9.6.0] - 2023-02-03 @@ -30,6 +58,10 @@ * [#5064](https://github.com/sebastianbergmann/phpunit/issues/5064): Deprecate `PHPUnit\Framework\TestCase::getMockClass()` * [#5132](https://github.com/sebastianbergmann/phpunit/issues/5132): Deprecate `Test` suffix for abstract test case classes +[9.6.7]: https://github.com/sebastianbergmann/phpunit/compare/9.6.6...9.6.7 +[9.6.6]: https://github.com/sebastianbergmann/phpunit/compare/9.6.5...9.6.6 +[9.6.5]: https://github.com/sebastianbergmann/phpunit/compare/9.6.4...9.6.5 +[9.6.4]: https://github.com/sebastianbergmann/phpunit/compare/9.6.3...9.6.4 [9.6.3]: https://github.com/sebastianbergmann/phpunit/compare/9.6.2...9.6.3 [9.6.2]: https://github.com/sebastianbergmann/phpunit/compare/9.6.1...9.6.2 [9.6.1]: https://github.com/sebastianbergmann/phpunit/compare/9.6.0...9.6.1 diff -Nru phpunit-9.6.3/composer.json phpunit-9.6.7/composer.json --- phpunit-9.6.3/composer.json 2023-02-04 13:37:15.000000000 +0000 +++ phpunit-9.6.7/composer.json 2023-04-14 08:58:40.000000000 +0000 @@ -17,7 +17,8 @@ } ], "support": { - "issues": "https://github.com/sebastianbergmann/phpunit/issues" + "issues": "https://github.com/sebastianbergmann/phpunit/issues", + "security": "https://github.com/sebastianbergmann/phpunit/security/policy" }, "prefer-stable": true, "require": { @@ -57,8 +58,8 @@ "sort-packages": true }, "suggest": { - "ext-soap": "*", - "ext-xdebug": "*" + "ext-soap": "To be able to generate mocks based on WSDL files", + "ext-xdebug": "PHP extension that provides line coverage as well as branch and path coverage" }, "bin": [ "phpunit" diff -Nru phpunit-9.6.3/debian/changelog phpunit-9.6.7/debian/changelog --- phpunit-9.6.3/debian/changelog 2023-02-07 12:40:51.000000000 +0000 +++ phpunit-9.6.7/debian/changelog 2023-04-15 06:00:46.000000000 +0000 @@ -1,3 +1,45 @@ +phpunit (9.6.7-1) unstable; urgency=medium + + [ Sebastian Bergmann ] + * Delete PHPUnit 8.5 ChangeLog + * Prepare release + + [ jrfnl ] + * PHPUnit 9 | Update deprecation notices for assertObject[Not]HasAttribute() + + [ Andreas Möller ] + * Fix: Adjust order of values when assembling error message + + -- David Prévot Sat, 15 Apr 2023 08:00:46 +0200 + +phpunit (9.6.6-1) unstable; urgency=medium + + [ Sebastian Bergmann ] + * Prepare release + + [ Andreas Möller ] + * Enhancement: Dump all required and unavailable extensions at once + + -- David Prévot Wed, 29 Mar 2023 08:08:28 +0200 + +phpunit (9.6.5-1) unstable; urgency=medium + + [ Sebastian Bergmann ] + * Backport TestDox HTML improvements + * Prepare release + + -- David Prévot Thu, 09 Mar 2023 19:38:36 +0100 + +phpunit (9.6.4-1) unstable; urgency=medium + + [ Sebastian Bergmann ] + * Prepare release + + [ John Blackbourn ] + * Detail deprecations for 9.6.1 in the changelog + + -- David Prévot Tue, 28 Feb 2023 01:13:21 +0100 + phpunit (9.6.3-1) unstable; urgency=medium [ Sebastian Bergmann ] diff -Nru phpunit-9.6.3/debian/patches/0001-Remove-Composer-autoload.patch phpunit-9.6.7/debian/patches/0001-Remove-Composer-autoload.patch --- phpunit-9.6.3/debian/patches/0001-Remove-Composer-autoload.patch 2023-02-07 12:39:27.000000000 +0000 +++ phpunit-9.6.7/debian/patches/0001-Remove-Composer-autoload.patch 2023-04-15 05:58:07.000000000 +0000 @@ -8,7 +8,7 @@ 1 file changed, 2 insertions(+), 27 deletions(-) diff --git a/phpunit b/phpunit -index c802956..419b1d9 100755 +index b9f5cf2..9f4fbf3 100755 --- a/phpunit +++ b/phpunit @@ -1,4 +1,4 @@ @@ -17,7 +17,7 @@ filename(); } else { diff -Nru phpunit-9.6.3/.github/ISSUE_TEMPLATE/1_BUG.md phpunit-9.6.7/.github/ISSUE_TEMPLATE/1_BUG.md --- phpunit-9.6.3/.github/ISSUE_TEMPLATE/1_BUG.md 1970-01-01 00:00:00.000000000 +0000 +++ phpunit-9.6.7/.github/ISSUE_TEMPLATE/1_BUG.md 2023-04-14 08:58:40.000000000 +0000 @@ -0,0 +1,39 @@ +--- +name: 🐞 Bug Report for PHPUnit 9 and PHPUnit 10 +about: Something is broken in PHPUnit 9 and in PHPUnit 10? +labels: type/bug, version/9, version/10 +--- + + + +| Q | A +| --------------------| --------------- +| PHPUnit version | x.y.z +| PHP version | x.y.z +| Installation Method | Composer / PHAR + +#### Summary + + + +#### Current behavior + + + +#### How to reproduce + + + +#### Expected behavior + + diff -Nru phpunit-9.6.3/.github/ISSUE_TEMPLATE/2_BUG_PHPUNIT_10.md phpunit-9.6.7/.github/ISSUE_TEMPLATE/2_BUG_PHPUNIT_10.md --- phpunit-9.6.3/.github/ISSUE_TEMPLATE/2_BUG_PHPUNIT_10.md 1970-01-01 00:00:00.000000000 +0000 +++ phpunit-9.6.7/.github/ISSUE_TEMPLATE/2_BUG_PHPUNIT_10.md 2023-04-14 08:58:40.000000000 +0000 @@ -0,0 +1,39 @@ +--- +name: 🐞 Bug Report for PHPUnit 10 +about: Something is broken in PHPUnit 10, but it works in PHPUnit 9? +labels: type/bug, version/10 +--- + + + +| Q | A +| --------------------| --------------- +| PHPUnit version | x.y.z +| PHP version | x.y.z +| Installation Method | Composer / PHAR + +#### Summary + + + +#### Current behavior + + + +#### How to reproduce + + + +#### Expected behavior + + diff -Nru phpunit-9.6.3/.github/ISSUE_TEMPLATE/3_BUG_PHPUNIT_9.md phpunit-9.6.7/.github/ISSUE_TEMPLATE/3_BUG_PHPUNIT_9.md --- phpunit-9.6.3/.github/ISSUE_TEMPLATE/3_BUG_PHPUNIT_9.md 1970-01-01 00:00:00.000000000 +0000 +++ phpunit-9.6.7/.github/ISSUE_TEMPLATE/3_BUG_PHPUNIT_9.md 2023-04-14 08:58:40.000000000 +0000 @@ -0,0 +1,39 @@ +--- +name: 🐞 Bug Report for PHPUnit 9 +about: Something is broken in PHPUnit 9, but it works in PHPUnit 10? +labels: type/bug, version/9 +--- + + + +| Q | A +| --------------------| --------------- +| PHPUnit version | x.y.z +| PHP version | x.y.z +| Installation Method | Composer / PHAR + +#### Summary + + + +#### Current behavior + + + +#### How to reproduce + + + +#### Expected behavior + + diff -Nru phpunit-9.6.3/.github/ISSUE_TEMPLATE/4_COMPATIBILITY_PHPUNIT_10.md phpunit-9.6.7/.github/ISSUE_TEMPLATE/4_COMPATIBILITY_PHPUNIT_10.md --- phpunit-9.6.3/.github/ISSUE_TEMPLATE/4_COMPATIBILITY_PHPUNIT_10.md 1970-01-01 00:00:00.000000000 +0000 +++ phpunit-9.6.7/.github/ISSUE_TEMPLATE/4_COMPATIBILITY_PHPUNIT_10.md 2023-04-14 08:58:40.000000000 +0000 @@ -0,0 +1,39 @@ +--- +name: ⚠️ PHP Compatibility Issue in PHPUnit 10 +about: A change in a new version of PHP requires adaption in PHPUnit 10? +labels: type/change-in-php-requires-adaptation, version/10 +--- + + + +| Q | A +| --------------------| --------------- +| PHPUnit version | x.y.z +| PHP version | x.y.z +| Installation Method | Composer / PHAR + +#### Summary + + + +#### Current behavior + + + +#### How to reproduce + + + +#### Expected behavior + + diff -Nru phpunit-9.6.3/.github/ISSUE_TEMPLATE/5_COMPATIBILITY_PHPUNIT_9.md phpunit-9.6.7/.github/ISSUE_TEMPLATE/5_COMPATIBILITY_PHPUNIT_9.md --- phpunit-9.6.3/.github/ISSUE_TEMPLATE/5_COMPATIBILITY_PHPUNIT_9.md 1970-01-01 00:00:00.000000000 +0000 +++ phpunit-9.6.7/.github/ISSUE_TEMPLATE/5_COMPATIBILITY_PHPUNIT_9.md 2023-04-14 08:58:40.000000000 +0000 @@ -0,0 +1,39 @@ +--- +name: ⚠️ PHP Compatibility Issue in PHPUnit 9 +about: A change in a new version of PHP requires adaption in PHPUnit 9? +labels: type/change-in-php-requires-adaptation, version/9 +--- + + + +| Q | A +| --------------------| --------------- +| PHPUnit version | x.y.z +| PHP version | x.y.z +| Installation Method | Composer / PHAR + +#### Summary + + + +#### Current behavior + + + +#### How to reproduce + + + +#### Expected behavior + + diff -Nru phpunit-9.6.3/.github/ISSUE_TEMPLATE/6_COMPATIBILITY_PHPUNIT_8.md phpunit-9.6.7/.github/ISSUE_TEMPLATE/6_COMPATIBILITY_PHPUNIT_8.md --- phpunit-9.6.3/.github/ISSUE_TEMPLATE/6_COMPATIBILITY_PHPUNIT_8.md 1970-01-01 00:00:00.000000000 +0000 +++ phpunit-9.6.7/.github/ISSUE_TEMPLATE/6_COMPATIBILITY_PHPUNIT_8.md 2023-04-14 08:58:40.000000000 +0000 @@ -0,0 +1,39 @@ +--- +name: ⚠️ PHP Compatibility Issue in PHPUnit 8 +about: A change in a new version of PHP requires adaption in PHPUnit 8? +labels: type/change-in-php-requires-adaptation, version/8 +--- + + + +| Q | A +| --------------------| --------------- +| PHPUnit version | x.y.z +| PHP version | x.y.z +| Installation Method | Composer / PHAR + +#### Summary + + + +#### Current behavior + + + +#### How to reproduce + + + +#### Expected behavior + + diff -Nru phpunit-9.6.3/.github/ISSUE_TEMPLATE/7_FEATURE_REQUEST.md phpunit-9.6.7/.github/ISSUE_TEMPLATE/7_FEATURE_REQUEST.md --- phpunit-9.6.3/.github/ISSUE_TEMPLATE/7_FEATURE_REQUEST.md 1970-01-01 00:00:00.000000000 +0000 +++ phpunit-9.6.7/.github/ISSUE_TEMPLATE/7_FEATURE_REQUEST.md 2023-04-14 08:58:40.000000000 +0000 @@ -0,0 +1,7 @@ +--- +name: 🎉 Feature Request +about: You have a neat idea that should be implemented? +labels: type/enhancement +--- + + diff -Nru phpunit-9.6.3/.github/ISSUE_TEMPLATE/BUG.md phpunit-9.6.7/.github/ISSUE_TEMPLATE/BUG.md --- phpunit-9.6.3/.github/ISSUE_TEMPLATE/BUG.md 2023-02-04 13:37:15.000000000 +0000 +++ phpunit-9.6.7/.github/ISSUE_TEMPLATE/BUG.md 1970-01-01 00:00:00.000000000 +0000 @@ -1,39 +0,0 @@ ---- -name: 🐞 Bug Report -about: Something is broken? -labels: type/bug ---- - - - -| Q | A -| --------------------| --------------- -| PHPUnit version | x.y.z -| PHP version | x.y.z -| Installation Method | Composer / PHAR - -#### Summary - - - -#### Current behavior - - - -#### How to reproduce - - - -#### Expected behavior - - diff -Nru phpunit-9.6.3/.github/ISSUE_TEMPLATE/FEATURE_REQUEST.md phpunit-9.6.7/.github/ISSUE_TEMPLATE/FEATURE_REQUEST.md --- phpunit-9.6.3/.github/ISSUE_TEMPLATE/FEATURE_REQUEST.md 2023-02-04 13:37:15.000000000 +0000 +++ phpunit-9.6.7/.github/ISSUE_TEMPLATE/FEATURE_REQUEST.md 1970-01-01 00:00:00.000000000 +0000 @@ -1,7 +0,0 @@ ---- -name: 🎉 Feature Request -about: You have a neat idea that should be implemented? -labels: type/enhancement ---- - - diff -Nru phpunit-9.6.3/.github/workflows/ci.yml phpunit-9.6.7/.github/workflows/ci.yml --- phpunit-9.6.3/.github/workflows/ci.yml 2023-02-04 13:37:15.000000000 +0000 +++ phpunit-9.6.7/.github/workflows/ci.yml 2023-04-14 08:58:40.000000000 +0000 @@ -25,7 +25,7 @@ - name: Install PHP uses: shivammathur/setup-php@v2 with: - php-version: 8.1 + php-version: 8.2 extensions: none, iconv, json, phar, tokenizer coverage: none tools: none @@ -45,7 +45,7 @@ - name: Install PHP uses: shivammathur/setup-php@v2 with: - php-version: 8.1 + php-version: 8.2 extensions: none, ctype, curl, date, dom, json, libxml, mbstring, phar, simplexml, soap, tokenizer, xml, xmlwriter, zlib coverage: none tools: none @@ -195,7 +195,7 @@ - name: Install PHP with extensions uses: shivammathur/setup-php@v2 with: - php-version: 8.1 + php-version: 8.2 coverage: pcov extensions: none, curl, dom, json, libxml, mbstring, phar, soap, tokenizer, xml, xmlwriter ini-values: assert.exception=1, zend.assertions=1, error_reporting=-1, log_errors_max_len=0, display_errors=On @@ -231,7 +231,7 @@ - name: Install PHP with extensions uses: shivammathur/setup-php@v2 with: - php-version: 8.1 + php-version: 8.2 coverage: none extensions: ${{ env.PHP_EXTENSIONS }} ini-values: ${{ env.PHP_INI_VALUES }} diff -Nru phpunit-9.6.3/.phive/phars.xml phpunit-9.6.7/.phive/phars.xml --- phpunit-9.6.3/.phive/phars.xml 2023-02-04 13:37:15.000000000 +0000 +++ phpunit-9.6.7/.phive/phars.xml 2023-04-14 08:58:40.000000000 +0000 @@ -1,8 +1,8 @@ - - - - - + + + + + diff -Nru phpunit-9.6.3/.php-cs-fixer.dist.php phpunit-9.6.7/.php-cs-fixer.dist.php --- phpunit-9.6.3/.php-cs-fixer.dist.php 2023-02-04 13:37:15.000000000 +0000 +++ phpunit-9.6.7/.php-cs-fixer.dist.php 2023-04-14 08:58:40.000000000 +0000 @@ -61,13 +61,10 @@ 'yield_from', ], ], - 'braces' => [ - 'position_after_anonymous_constructs' => 'next', - ], 'cast_spaces' => true, 'class_attributes_separation' => [ 'elements' => [ - 'const' => 'one', + 'const' => 'none', 'method' => 'one', 'property' => 'one' ] @@ -80,7 +77,14 @@ 'compact_nullable_typehint' => true, 'concat_space' => ['spacing' => 'one'], 'constant_case' => true, + 'control_structure_braces' => true, + 'control_structure_continuation_position' => true, + 'curly_braces_position' => [ + 'anonymous_functions_opening_brace' => 'next_line_unless_newline_at_signature_end', + 'anonymous_classes_opening_brace' => 'next_line_unless_newline_at_signature_end', + ], 'declare_equal_normalize' => ['space' => 'none'], + 'declare_parentheses' => true, 'declare_strict_types' => true, 'dir_constant' => true, 'echo_tag_syntax' => true, @@ -153,6 +157,7 @@ 'no_leading_import_slash' => true, 'no_leading_namespace_whitespace' => true, 'no_mixed_echo_print' => ['use' => 'print'], + 'no_multiple_statements_per_line' => true, 'no_multiline_whitespace_around_double_arrow' => true, 'no_null_property_initialization' => true, 'no_php4_constructor' => true, @@ -278,11 +283,12 @@ 'single_import_per_statement' => true, 'single_line_after_imports' => true, 'single_quote' => true, - 'single_space_after_construct' => true, + 'single_space_around_construct' => true, 'single_trait_insert_per_statement' => true, 'space_after_semicolon' => true, 'standardize_increment' => true, 'standardize_not_equals' => true, + 'statement_indentation' => true, 'static_lambda' => true, 'strict_param' => true, 'string_line_ending' => true, diff -Nru phpunit-9.6.3/phpunit phpunit-9.6.7/phpunit --- phpunit-9.6.3/phpunit 2023-02-04 13:37:15.000000000 +0000 +++ phpunit-9.6.7/phpunit 2023-04-14 08:58:40.000000000 +0000 @@ -38,22 +38,31 @@ die(1); } -foreach (['dom', 'json', 'libxml', 'mbstring', 'tokenizer', 'xml', 'xmlwriter'] as $extension) { - if (extension_loaded($extension)) { - continue; +$requiredExtensions = ['dom', 'json', 'libxml', 'mbstring', 'tokenizer', 'xml', 'xmlwriter']; + +$unavailableExtensions = array_filter( + $requiredExtensions, + static function ($extension) { + return !extension_loaded($extension); } +); +if ([] !== $unavailableExtensions) { fwrite( STDERR, sprintf( - 'PHPUnit requires the "%s" extension.' . PHP_EOL, - $extension + 'PHPUnit requires the "%s" extensions, but the "%s" %s not available.' . PHP_EOL, + implode('", "', $requiredExtensions), + implode('", "', $unavailableExtensions), + count($unavailableExtensions) === 1 ? 'extension is' : 'extensions are' ) ); die(1); } +unset($requiredExtensions, $unavailableExtensions); + if (!ini_get('date.timezone')) { ini_set('date.timezone', 'UTC'); } diff -Nru phpunit-9.6.3/.psalm/baseline.xml phpunit-9.6.7/.psalm/baseline.xml --- phpunit-9.6.3/.psalm/baseline.xml 2023-02-04 13:37:15.000000000 +0000 +++ phpunit-9.6.7/.psalm/baseline.xml 2023-04-14 08:58:40.000000000 +0000 @@ -1,9 +1,9 @@ - + - $actualElement->childNodes->item($i) - $expectedElement->childNodes->item($i) + childNodes->item($i)]]> + childNodes->item($i)]]> ClassHasAttribute @@ -24,20 +24,20 @@ Xml::import($expectedElement) Xml::removeCharacterDataNodes($actualElement) Xml::removeCharacterDataNodes($expectedElement) - static::assertEqualXMLStructure( - $expectedElement->childNodes->item($i), - $actualElement->childNodes->item($i), + childNodes->item($i), + $actualElement->childNodes->item($i), $checkAttributes, $message - ) + )]]> - !$actual instanceof Countable && !is_iterable($actual) - !$actual instanceof Countable && !is_iterable($actual) - !$expected instanceof Countable && !is_iterable($expected) - !$expected instanceof Countable && !is_iterable($expected) - !$haystack instanceof Countable && !is_iterable($haystack) - !$haystack instanceof Countable && !is_iterable($haystack) + + + + + + is_int($key) || is_string($key) is_int($key) || is_string($key) is_object($object) @@ -188,7 +188,7 @@ $expected - assert($step['object'] instanceof TestCase) + @@ -384,7 +384,7 @@ $other - (string) $other->getMessage() + getMessage()]]> @@ -405,11 +405,11 @@ - throw new Exception( - $e->getMessage(), - $e->getCode(), + getMessage(), + $e->getCode(), $e - ); + );]]> @@ -417,11 +417,11 @@ ClassHasAttribute - throw new Exception( - $e->getMessage(), - $e->getCode(), + getMessage(), + $e->getCode(), $e - ); + );]]> @@ -455,12 +455,12 @@ - new Differ(new UnifiedDiffOutputBuilder("--- Expected\n+++ Actual\n")) + - throw InvalidArgumentException::create(1, 'non-empty string'); + @@ -473,7 +473,7 @@ - $this->className + className]]> @@ -509,7 +509,7 @@ Filter::getFilteredStacktrace($this) - $t->getPrevious() + getPrevious()]]> @@ -562,10 +562,10 @@ $methods - !is_array($methods) && null !== $methods + - $this->getMock( + getMock( $originalClassName, $methods, $arguments, @@ -574,10 +574,10 @@ $callOriginalClone, $callAutoload, $cloneArguments - ) + )]]> - MockObject&RealInstanceType + $type @@ -586,13 +586,13 @@ getObject - $client->__getFunctions() + __getFunctions()]]> - + $types - + throw $t; @@ -605,15 +605,15 @@ $deferredError - $this->deferredError + deferredError]]> - $this->methodNameRule === null - $this->methodNameRule === null - $this->methodNameRule === null - $this->parametersRule === null + methodNameRule === null]]> + methodNameRule === null]]> + methodNameRule === null]]> + parametersRule === null]]> invoked @@ -624,22 +624,22 @@ $stub - $this->invocationRule !== null - $this->methodNameRule !== null - $this->methodNameRule !== null - $this->parametersRule !== null - $this->parametersRule !== null - $this->parametersRule !== null - $this->stub - $this->stub !== null + invocationRule !== null]]> + methodNameRule !== null]]> + methodNameRule !== null]]> + parametersRule !== null]]> + parametersRule !== null]]> + parametersRule !== null]]> + stub]]> + stub !== null]]> - $this->type - $this->type - $this->type - $this->type + type]]> + type]]> + type]]> + type]]> setMethods @@ -650,9 +650,9 @@ $object - MockObject&MockedType - MockObject&MockedType - MockObject&MockedType + + + $type @@ -660,20 +660,20 @@ - strpos($parameterAsString, '<optional> ') + ')]]> - (string) explode( + ') + strlen(' ') ), 0, -2 ) - )[1] + )[1]]]> (string) var_export($defaultValue, true) @@ -690,7 +690,7 @@ - $this->invocation === null + invocation === null]]> null @@ -700,10 +700,10 @@ $parameterVerificationResult - (bool) $this->parameterVerificationResult + parameterVerificationResult]]> - isset($this->parameterVerificationResult) + parameterVerificationResult)]]> @@ -776,15 +776,15 @@ Filter::getFilteredStacktrace($t) Filter::getFilteredStacktrace($t) - new DataProviderTestSuite( + - throw new Exception('No valid test provided.'); + )]]> + - $this->expectedException + expectedException]]> InvokedAtIndexMatcher @@ -794,17 +794,17 @@ setMethods - $this->backupGlobalsBlacklist - $this->backupGlobalsBlacklist - $this->backupStaticAttributesBlacklist - $this->backupStaticAttributesBlacklist + backupGlobalsBlacklist]]> + backupGlobalsBlacklist]]> + backupStaticAttributesBlacklist]]> + backupStaticAttributesBlacklist]]> - $this->backupStaticAttributes === null - $this->mockObjectGenerator === null - $this->prophet === null - $this->runClassInSeparateProcess === null - $this->runTestInSeparateProcess === null + backupStaticAttributes === null]]> + mockObjectGenerator === null]]> + prophet === null]]> + runClassInSeparateProcess === null]]> + runTestInSeparateProcess === null]]> $header @@ -814,8 +814,8 @@ get_class($mock) - MockObject&RealInstanceType - class-string<MockObject&RealInstanceType> + + ]]> $args @@ -829,10 +829,10 @@ runTest - TestUtil::getMissingRequirements( + + $this->name + )]]> cacheDirectory endTest endTest @@ -916,23 +916,23 @@ getObjectForTrait getObjectForTrait new Differ($header) - new Template( + - new Template( + )]]> + - throw new Exception( - $e->getMessage(), - $e->getCode(), + )]]> + getMessage(), + $e->getCode(), $e - ); - throw new Exception( - $e->getMessage(), - $e->getCode(), + );]]> + getMessage(), + $e->getCode(), $e - ); - throw new Exception('This test uses TestCase::prophesize(), but phpspec/prophecy is not installed. Please run "composer require --dev phpspec/prophecy".'); + );]]> + $beStrictAboutChangesToGlobalState @@ -949,13 +949,13 @@ $runTestInSeparateProcess - (bool) $this->backupStaticAttributes + backupStaticAttributes]]> $this instanceof PhptTestCase - $this->prophet !== null + prophet !== null]]> $e @@ -966,8 +966,8 @@ Prophet - $this->prophet - $this->prophet + prophet]]> + prophet]]> \Prophecy\Exception\Doubler\ClassNotFoundException \Prophecy\Exception\Doubler\DoubleException \Prophecy\Exception\Doubler\InterfaceNotFoundException @@ -985,36 +985,36 @@ private $listeners = []; - $this->listeners - $this->listeners - $this->listeners - $this->listeners - $this->listeners - $this->listeners - $this->listeners - $this->listeners - $this->listeners - $this->listeners - $this->listeners + listeners]]> + listeners]]> + listeners]]> + listeners]]> + listeners]]> + listeners]]> + listeners]]> + listeners]]> + listeners]]> + listeners]]> + listeners]]> - [$test, 'runBare'] + $codeCoverage stop - throw new Exception( - $e->getMessage(), - $e->getCode(), + getMessage(), + $e->getCode(), $e - ); - throw new Exception( - $e->getMessage(), - $e->getCode(), + );]]> + getMessage(), + $e->getCode(), $e - ); + );]]> $linesToBeCovered @@ -1027,14 +1027,15 @@ $isAnyCoverageRequired - $this->codeCoverage !== null - $this->codeCoverage !== null + codeCoverage !== null]]> + codeCoverage !== null]]> addToAssertionCount addToAssertionCount doesNotPerformAssertions doesNotPerformAssertions + doesNotPerformAssertions getActualOutput getName getName @@ -1050,24 +1051,24 @@ $className $className - TestUtil::getDependencies($class->getName(), $methodName) - TestUtil::getDependencies($class->getName(), $methodName) + getName(), $methodName)]]> + getName(), $methodName)]]> - !is_string($theClass) && !$theClass instanceof ReflectionClass + is_string($testClass) - null === $this->backupGlobals - null === $this->backupStaticAttributes - null === $this->beStrictAboutChangesToGlobalState + backupGlobals]]> + backupStaticAttributes]]> + beStrictAboutChangesToGlobalState]]> FileLoader::checkAndLoad($filename) new PhptTestCase($filename) - throw new Exception( - $e->getMessage(), - $e->getCode(), + getMessage(), + $e->getCode(), $e - ); + );]]> $backupGlobals @@ -1079,13 +1080,13 @@ (string) $key - $this->iteratorFilter !== null + iteratorFilter !== null]]> is_bool($backupGlobals) is_bool($backupStaticAttributes) is_bool($beStrictAboutChangesToGlobalState) - null === $this->backupGlobals && is_bool($backupGlobals) - null === $this->backupStaticAttributes && is_bool($backupStaticAttributes) - null === $this->beStrictAboutChangesToGlobalState && is_bool($beStrictAboutChangesToGlobalState) + backupGlobals && is_bool($backupGlobals)]]> + backupStaticAttributes && is_bool($backupStaticAttributes)]]> + beStrictAboutChangesToGlobalState && is_bool($beStrictAboutChangesToGlobalState)]]> @@ -1103,7 +1104,7 @@ - $extensionConfiguration->arguments() + arguments()]]> TestListener @@ -1126,7 +1127,7 @@ $filterMin - $accepted && isset($this->filterMax) + filterMax)]]> @@ -1148,13 +1149,13 @@ cacheDirectory - new Template( + + )]]> stop - $sections['FILEEOF'] + $setting[1] @@ -1178,10 +1179,10 @@ $right - $order === self::ORDER_DURATION && $this->cache !== null - $orderDefects === self::ORDER_DEFECTS_FIRST && $this->cache !== null - $this->cache !== null - $this->cache !== null + cache !== null]]> + cache !== null]]> + cache !== null]]> + cache !== null]]> @@ -1190,11 +1191,11 @@ array_merge(self::LONG_OPTIONS, $additionalLongOptions) - throw new Exception( - $e->getMessage(), - $e->getCode(), + getMessage(), + $e->getCode(), $e - ); + );]]> @@ -1221,7 +1222,7 @@ testSuiteLoaderFile - $class->newInstance($outputStream) + newInstance($outputStream)]]> argument @@ -1243,16 +1244,16 @@ printerClass stop testSuiteLoaderClass - throw new ReflectionException( - $e->getMessage(), - $e->getCode(), + getMessage(), + $e->getCode(), $e - ); - throw new ReflectionException( - $e->getMessage(), - $e->getCode(), + );]]> + getMessage(), + $e->getCode(), $e - ); + );]]> unrecognizedOrderBy @@ -1265,10 +1266,10 @@ $suite - $_SERVER['argv'] + - assert(isset($arguments) && $arguments instanceof Configuration) + new static @@ -1289,8 +1290,8 @@ - $option['desc'] - $option['desc'] + + @@ -1316,8 +1317,8 @@ flushListeners - $this->loader === null - $this->printer === null + loader === null]]> + printer === null]]> $e @@ -1328,14 +1329,14 @@ $e - new $class( - (isset($arguments['stderr']) && $arguments['stderr'] === true) ? 'php://stderr' : null, + + )]]> addFilter @@ -1344,7 +1345,7 @@ addFilter addFilter detect - new Printer($arguments['coverageText']) + reorderTestsInSuite run run @@ -1356,17 +1357,17 @@ $loader - $_SERVER['PHP_SELF'] - $arguments['enforceTimeLimit'] + + $printer - assert($this->printer instanceof CliTestDoxPrinter) + printer instanceof CliTestDoxPrinter)]]> - $this->printer !== null + printer !== null]]> @@ -1394,43 +1395,43 @@ legacyCodeCoverage - (string) $argument->textContent - (string) $const->getAttribute('name') - (string) $const->getAttribute('value') - (string) $directoryNode->getAttribute('group') - (string) $directoryNode->getAttribute('phpVersion') - (string) $directoryNode->getAttribute('phpVersionOperator') - (string) $directoryNode->getAttribute('prefix') - (string) $directoryNode->getAttribute('prefix') - (string) $directoryNode->getAttribute('suffix') - (string) $directoryNode->getAttribute('suffix') - (string) $directoryNode->textContent - (string) $directoryNode->textContent - (string) $document->documentElement->getAttribute('columns') - (string) $element->getAttribute($attribute) - (string) $element->getAttribute($attribute) - (string) $element->getAttribute($attribute) - (string) $element->getAttribute('addUncoveredFilesFromWhitelist') - (string) $element->getAttribute('class') - (string) $element->getAttribute('file') - (string) $element->getAttribute('name') - (string) $element->getAttribute('processUncoveredFilesFromWhitelist') - (string) $excludeNode->textContent - (string) $file->textContent - (string) $fileNode->getAttribute('phpVersion') - (string) $fileNode->getAttribute('phpVersionOperator') - (string) $fileNode->textContent - (string) $group->textContent - (string) $group->textContent - (string) $includePath->textContent - (string) $ini->getAttribute('name') - (string) $ini->getAttribute('value') - (string) $log->getAttribute('target') - (string) $log->getAttribute('target') - (string) $log->getAttribute('type') - (string) $log->getAttribute('type') - (string) $var->getAttribute('name') - (string) $var->getAttribute('value') + textContent]]> + getAttribute('name')]]> + getAttribute('value')]]> + getAttribute('group')]]> + getAttribute('phpVersion')]]> + getAttribute('phpVersionOperator')]]> + getAttribute('prefix')]]> + getAttribute('prefix')]]> + getAttribute('suffix')]]> + getAttribute('suffix')]]> + textContent]]> + textContent]]> + documentElement->getAttribute('columns')]]> + getAttribute($attribute)]]> + getAttribute($attribute)]]> + getAttribute($attribute)]]> + getAttribute('addUncoveredFilesFromWhitelist')]]> + getAttribute('class')]]> + getAttribute('file')]]> + getAttribute('name')]]> + getAttribute('processUncoveredFilesFromWhitelist')]]> + textContent]]> + textContent]]> + getAttribute('phpVersion')]]> + getAttribute('phpVersionOperator')]]> + textContent]]> + textContent]]> + textContent]]> + textContent]]> + getAttribute('name')]]> + getAttribute('value')]]> + getAttribute('target')]]> + getAttribute('target')]]> + getAttribute('type')]]> + getAttribute('type')]]> + getAttribute('name')]]> + getAttribute('value')]]> assert($directoryNode instanceof DOMElement) @@ -1439,12 +1440,12 @@ - throw new Exception('Logger "JUnit XML" is not configured'); - throw new Exception('Logger "Team City" is not configured'); - throw new Exception('Logger "TestDox HTML" is not configured'); - throw new Exception('Logger "TestDox Text" is not configured'); - throw new Exception('Logger "TestDox XML" is not configured'); - throw new Exception('Logger "Text" is not configured'); + + + + + + @@ -1530,12 +1531,12 @@ hasTestSuiteLoaderFile - $this->testSuiteLoaderClass - $this->testSuiteLoaderClass - $this->testSuiteLoaderClass - $this->testSuiteLoaderFile - $this->testSuiteLoaderFile - $this->testSuiteLoaderFile + testSuiteLoaderClass]]> + testSuiteLoaderClass]]> + testSuiteLoaderClass]]> + testSuiteLoaderFile]]> + testSuiteLoaderFile]]> + testSuiteLoaderFile]]> $columns @@ -1544,14 +1545,14 @@ columns - (string) $this->bootstrap - (string) $this->cacheResultFile - (string) $this->defaultTestSuite - (string) $this->extensionsDirectory - (string) $this->printerClass - (string) $this->printerFile - (string) $this->testSuiteLoaderClass - (string) $this->testSuiteLoaderFile + bootstrap]]> + cacheResultFile]]> + defaultTestSuite]]> + extensionsDirectory]]> + printerClass]]> + printerFile]]> + testSuiteLoaderClass]]> + testSuiteLoaderFile]]> @@ -1570,21 +1571,41 @@ + + $recordedOffsets], + array_filter([ + 'setting' => $recordedSettings, + 'extension_versions' => $extensionVersions, + ]) + )]]> + + + parsedRequirements = array_merge( + $requires, + ['__OFFSET' => $recordedOffsets], + array_filter([ + 'setting' => $recordedSettings, + 'extension_versions' => $extensionVersions, + ]) + )]]> + + + &array{__FILE: string}, + * setting?: array, + * extension_versions?: array + * }&array< + * string, + * string|array{version: string, operator: string}|array{constraint: string}|array + * >]]> + throw new SkippedTestError; - - array{ - * __OFFSET: array<string, int>&array{__FILE: string}, - * setting?: array<string, string>, - * extension_versions?: array<string, array{version: string, operator: string}> - * }&array< - * string, - * string|array{version: string, operator: string}|array{constraint: string}|array<int|string, string> - * > - - (string) $matches['value'][$i] + @@ -1604,12 +1625,12 @@ - throw new Exception( + + );]]> @@ -1629,31 +1650,31 @@ - $suite->getName() + getName()]]> JUnit - $this->currentTestCase === null - $this->currentTestCase === null + currentTestCase === null]]> + currentTestCase === null]]> - $this->testSuiteTimes + testSuiteTimes]]> Filter::getFilteredStacktrace($t) parent::__construct($out) - throw new Exception( - $e->getMessage(), - $e->getCode(), + getMessage(), + $e->getCode(), $e - ); - throw new Exception( - $e->getMessage(), - $e->getCode(), + );]]> + getMessage(), + $e->getCode(), $e - ); + );]]> null @@ -1682,11 +1703,11 @@ Filter::getFilteredStacktrace($t) - throw new Exception( - $e->getMessage(), - $e->getCode(), + getMessage(), + $e->getCode(), $e - ); + );]]> $flowId @@ -1705,8 +1726,8 @@ - $this->getException($failures[0]) - $this->getException($warnings[0]) + getException($failures[0])]]> + getException($warnings[0])]]> $exception @@ -1721,10 +1742,10 @@ Exception - strrpos($key, "\0") + - $childResult->getCodeCoverage() + getCodeCoverage()]]> merge @@ -1789,15 +1810,15 @@ stop - $prefix['default'] - $prefix['diff'] - $prefix['last'] - $prefix['message'] - $prefix['start'] - $prefix['trace'] + + + + + + - self::STATUS_STYLES[$result['status']]['message'] + CliTestDoxPrinter @@ -1809,7 +1830,7 @@ HtmlResultPrinter - $this->currentTestClassPrettified + currentTestClassPrettified]]> HtmlResultPrinter @@ -1820,11 +1841,11 @@ $value - throw new UtilException( - $e->getMessage(), - $e->getCode(), + getMessage(), + $e->getCode(), $e - ); + );]]> is_string($value) @@ -1870,16 +1891,16 @@ parent::__construct($out) - throw new Exception( - $e->getMessage(), - $e->getCode(), + getMessage(), + $e->getCode(), $e - ); + );]]> - $suite->getIterator() + getIterator()]]> @@ -1895,28 +1916,28 @@ new $className - (new DOMDocument)->importNode($element, true) + importNode($element, true)]]> xmlToVariable - throw new Exception( - $e->getMessage(), - $e->getCode(), + getMessage(), + $e->getCode(), $e - ); + );]]> DOMElement - (string) $entry->getAttribute('key') + getAttribute('key')]]> - $suite->getIterator() + getIterator()]]> diff -Nru phpunit-9.6.3/SECURITY.md phpunit-9.6.7/SECURITY.md --- phpunit-9.6.3/SECURITY.md 2023-02-04 13:37:15.000000000 +0000 +++ phpunit-9.6.7/SECURITY.md 2023-04-14 08:58:40.000000000 +0000 @@ -1,11 +1,33 @@ # Security Policy -PHPUnit is a framework for writing as well as a commandline tool for running tests. Writing and running tests is a development-time activity. There is no reason why PHPUnit should be installed on a webserver. +If you believe you have found a security vulnerability in PHPUnit, please report it to us through coordinated disclosure. + +**Please do not report security vulnerabilities through public GitHub issues, discussions, or pull requests.** + +Instead, please email `sebastian@phpunit.de`. + +Please include as much of the information listed below as you can to help us better understand and resolve the issue: + +* The type of issue +* Full paths of source file(s) related to the manifestation of the issue +* The location of the affected source code (tag/branch/commit or direct URL) +* Any special configuration required to reproduce the issue +* Step-by-step instructions to reproduce the issue +* Proof-of-concept or exploit code (if possible) +* Impact of the issue, including how an attacker might exploit the issue + +This information will help us triage your report more quickly. + +## Web Context + +PHPUnit is a framework for writing as well as a command-line tool for running tests. Writing and running tests is a development-time activity. There is no reason why PHPUnit should be installed on a webserver and/or in a production environment. **If you upload PHPUnit to a webserver then your deployment process is broken. On a more general note, if your `vendor` directory is publicly accessible on your webserver then your deployment process is also broken.** Please note that if you upload PHPUnit to a webserver "bad things" may happen. [You have been warned.](https://thephp.cc/articles/phpunit-a-security-risk) -## Security Contact Information +PHPUnit is developed with a focus on development environments and the command-line. No specific testing or hardening with regard to using PHPUnit in an HTTP or web context or with untrusted input data is performed. PHPUnit might also contain functionality that intentionally exposes internal application data for debugging purposes. + +If PHPUnit is used in a web application, the application developer is responsible for filtering inputs or escaping outputs as necessary and for verifying that the used functionality is safe for use within the intended context. -After the above, if you still would like to report a security vulnerability, please email `sebastian@phpunit.de`. +Vulnerabilities specific to the use outside a development context will be fixed as applicable, provided that the fix does not have an averse effect on the primary use case for development purposes. diff -Nru phpunit-9.6.3/src/Framework/Assert.php phpunit-9.6.7/src/Framework/Assert.php --- phpunit-9.6.3/src/Framework/Assert.php 2023-02-04 13:37:15.000000000 +0000 +++ phpunit-9.6.7/src/Framework/Assert.php 2023-04-14 08:58:40.000000000 +0000 @@ -1304,7 +1304,7 @@ */ public static function assertObjectHasAttribute(string $attributeName, $object, string $message = ''): void { - self::createWarning('assertObjectHasAttribute() is deprecated and will be removed in PHPUnit 10.'); + self::createWarning('assertObjectHasAttribute() is deprecated and will be removed in PHPUnit 10. Refactor your test to use assertObjectHasProperty() (PHPUnit 10.1.0+) instead.'); if (!self::isValidObjectAttributeName($attributeName)) { throw InvalidArgumentException::create(1, 'valid attribute name'); @@ -1334,7 +1334,7 @@ */ public static function assertObjectNotHasAttribute(string $attributeName, $object, string $message = ''): void { - self::createWarning('assertObjectNotHasAttribute() is deprecated and will be removed in PHPUnit 10.'); + self::createWarning('assertObjectNotHasAttribute() is deprecated and will be removed in PHPUnit 10. Refactor your test to use assertObjectNotHasProperty() (PHPUnit 10.1.0+) instead.'); if (!self::isValidObjectAttributeName($attributeName)) { throw InvalidArgumentException::create(1, 'valid attribute name'); diff -Nru phpunit-9.6.3/src/Framework/Constraint/Equality/IsEqualWithDelta.php phpunit-9.6.7/src/Framework/Constraint/Equality/IsEqualWithDelta.php --- phpunit-9.6.3/src/Framework/Constraint/Equality/IsEqualWithDelta.php 2023-02-04 13:37:15.000000000 +0000 +++ phpunit-9.6.7/src/Framework/Constraint/Equality/IsEqualWithDelta.php 2023-04-14 08:58:40.000000000 +0000 @@ -92,7 +92,7 @@ public function toString(): string { return sprintf( - 'is equal to %s with delta <%F>>', + 'is equal to %s with delta <%F>', $this->exporter()->export($this->value), $this->delta ); diff -Nru phpunit-9.6.3/src/Framework/MockObject/Generator.php phpunit-9.6.7/src/Framework/MockObject/Generator.php --- phpunit-9.6.3/src/Framework/MockObject/Generator.php 2023-02-04 13:37:15.000000000 +0000 +++ phpunit-9.6.7/src/Framework/MockObject/Generator.php 2023-04-14 08:58:40.000000000 +0000 @@ -72,7 +72,6 @@ } } EOT; - private const MOCKED_CLONE_METHOD_WITHOUT_RETURN_TYPE_TRAIT = <<<'EOT' namespace PHPUnit\Framework\MockObject; @@ -84,7 +83,6 @@ } } EOT; - private const UNMOCKED_CLONE_METHOD_WITH_VOID_RETURN_TYPE_TRAIT = <<<'EOT' namespace PHPUnit\Framework\MockObject; @@ -98,7 +96,6 @@ } } EOT; - private const UNMOCKED_CLONE_METHOD_WITHOUT_RETURN_TYPE_TRAIT = <<<'EOT' namespace PHPUnit\Framework\MockObject; diff -Nru phpunit-9.6.3/src/Framework/TestResult.php phpunit-9.6.7/src/Framework/TestResult.php --- phpunit-9.6.3/src/Framework/TestResult.php 2023-02-04 13:37:15.000000000 +0000 +++ phpunit-9.6.7/src/Framework/TestResult.php 2023-04-14 08:58:40.000000000 +0000 @@ -804,6 +804,7 @@ } if ($this->beStrictAboutTestsThatDoNotTestAnything && + !$test->doesNotPerformAssertions() && $test->getNumAssertions() === 0) { $risky = true; } diff -Nru phpunit-9.6.3/src/Runner/Version.php phpunit-9.6.7/src/Runner/Version.php --- phpunit-9.6.3/src/Runner/Version.php 2023-02-04 13:37:15.000000000 +0000 +++ phpunit-9.6.7/src/Runner/Version.php 2023-04-14 08:58:40.000000000 +0000 @@ -41,7 +41,7 @@ } if (self::$version === '') { - self::$version = (new VersionId('9.6.3', dirname(__DIR__, 2)))->getVersion(); + self::$version = (new VersionId('9.6.7', dirname(__DIR__, 2)))->getVersion(); } return self::$version; diff -Nru phpunit-9.6.3/src/TextUI/CliArguments/Builder.php phpunit-9.6.7/src/TextUI/CliArguments/Builder.php --- phpunit-9.6.3/src/TextUI/CliArguments/Builder.php 2023-02-04 13:37:15.000000000 +0000 +++ phpunit-9.6.7/src/TextUI/CliArguments/Builder.php 2023-04-14 08:58:40.000000000 +0000 @@ -121,7 +121,6 @@ 'whitelist=', 'dump-xdebug-filter=', ]; - private const SHORT_OPTIONS = 'd:c:hv'; public function fromParameters(array $parameters, array $additionalLongOptions): Configuration diff -Nru phpunit-9.6.3/src/TextUI/DefaultResultPrinter.php phpunit-9.6.7/src/TextUI/DefaultResultPrinter.php --- phpunit-9.6.3/src/TextUI/DefaultResultPrinter.php 2023-02-04 13:37:15.000000000 +0000 +++ phpunit-9.6.7/src/TextUI/DefaultResultPrinter.php 2023-04-14 08:58:40.000000000 +0000 @@ -47,23 +47,15 @@ */ class DefaultResultPrinter extends Printer implements ResultPrinter { - public const EVENT_TEST_START = 0; - - public const EVENT_TEST_END = 1; - + public const EVENT_TEST_START = 0; + public const EVENT_TEST_END = 1; public const EVENT_TESTSUITE_START = 2; - - public const EVENT_TESTSUITE_END = 3; - - public const COLOR_NEVER = 'never'; - - public const COLOR_AUTO = 'auto'; - - public const COLOR_ALWAYS = 'always'; - - public const COLOR_DEFAULT = self::COLOR_NEVER; - - private const AVAILABLE_COLORS = [self::COLOR_NEVER, self::COLOR_AUTO, self::COLOR_ALWAYS]; + public const EVENT_TESTSUITE_END = 3; + public const COLOR_NEVER = 'never'; + public const COLOR_AUTO = 'auto'; + public const COLOR_ALWAYS = 'always'; + public const COLOR_DEFAULT = self::COLOR_NEVER; + private const AVAILABLE_COLORS = [self::COLOR_NEVER, self::COLOR_AUTO, self::COLOR_ALWAYS]; /** * @var int diff -Nru phpunit-9.6.3/src/TextUI/Help.php phpunit-9.6.7/src/TextUI/Help.php --- phpunit-9.6.3/src/TextUI/Help.php 2023-02-04 13:37:15.000000000 +0000 +++ phpunit-9.6.7/src/TextUI/Help.php 2023-04-14 08:58:40.000000000 +0000 @@ -27,8 +27,7 @@ final class Help { private const LEFT_MARGIN = ' '; - - private const HELP_TEXT = [ + private const HELP_TEXT = [ 'Usage' => [ ['text' => 'phpunit [options] UnitTest.php'], ['text' => 'phpunit [options] '], diff -Nru phpunit-9.6.3/src/TextUI/TestRunner.php phpunit-9.6.7/src/TextUI/TestRunner.php --- phpunit-9.6.3/src/TextUI/TestRunner.php 2023-02-04 13:37:15.000000000 +0000 +++ phpunit-9.6.7/src/TextUI/TestRunner.php 2023-04-14 08:58:40.000000000 +0000 @@ -88,10 +88,8 @@ */ final class TestRunner extends BaseTestRunner { - public const SUCCESS_EXIT = 0; - - public const FAILURE_EXIT = 1; - + public const SUCCESS_EXIT = 0; + public const FAILURE_EXIT = 1; public const EXCEPTION_EXIT = 2; /** diff -Nru phpunit-9.6.3/src/Util/Annotation/DocBlock.php phpunit-9.6.7/src/Util/Annotation/DocBlock.php --- phpunit-9.6.3/src/Util/Annotation/DocBlock.php 2023-02-04 13:37:15.000000000 +0000 +++ phpunit-9.6.7/src/Util/Annotation/DocBlock.php 2023-04-14 08:58:40.000000000 +0000 @@ -67,17 +67,12 @@ */ public const REGEX_DATA_PROVIDER = '/@dataProvider\s+([a-zA-Z0-9._:-\\\\x7f-\xff]+)/'; - private const REGEX_REQUIRES_VERSION = '/@requires\s+(?PPHP(?:Unit)?)\s+(?P[<>=!]{0,2})\s*(?P[\d\.-]+(dev|(RC|alpha|beta)[\d\.])?)[ \t]*\r?$/m'; - + private const REGEX_REQUIRES_VERSION = '/@requires\s+(?PPHP(?:Unit)?)\s+(?P[<>=!]{0,2})\s*(?P[\d\.-]+(dev|(RC|alpha|beta)[\d\.])?)[ \t]*\r?$/m'; private const REGEX_REQUIRES_VERSION_CONSTRAINT = '/@requires\s+(?PPHP(?:Unit)?)\s+(?P[\d\t \-.|~^]+)[ \t]*\r?$/m'; - - private const REGEX_REQUIRES_OS = '/@requires\s+(?POS(?:FAMILY)?)\s+(?P.+?)[ \t]*\r?$/m'; - - private const REGEX_REQUIRES_SETTING = '/@requires\s+(?Psetting)\s+(?P([^ ]+?))\s*(?P[\w\.-]+[\w\.]?)?[ \t]*\r?$/m'; - - private const REGEX_REQUIRES = '/@requires\s+(?Pfunction|extension)\s+(?P([^\s<>=!]+))\s*(?P[<>=!]{0,2})\s*(?P[\d\.-]+[\d\.]?)?[ \t]*\r?$/m'; - - private const REGEX_TEST_WITH = '/@testWith\s+/'; + private const REGEX_REQUIRES_OS = '/@requires\s+(?POS(?:FAMILY)?)\s+(?P.+?)[ \t]*\r?$/m'; + private const REGEX_REQUIRES_SETTING = '/@requires\s+(?Psetting)\s+(?P([^ ]+?))\s*(?P[\w\.-]+[\w\.]?)?[ \t]*\r?$/m'; + private const REGEX_REQUIRES = '/@requires\s+(?Pfunction|extension)\s+(?P([^\s<>=!]+))\s*(?P[<>=!]{0,2})\s*(?P[\d\.-]+[\d\.]?)?[ \t]*\r?$/m'; + private const REGEX_TEST_WITH = '/@testWith\s+/'; /** @var string */ private $docComment; diff -Nru phpunit-9.6.3/src/Util/GlobalState.php phpunit-9.6.7/src/Util/GlobalState.php --- phpunit-9.6.3/src/Util/GlobalState.php 2023-02-04 13:37:15.000000000 +0000 +++ phpunit-9.6.7/src/Util/GlobalState.php 2023-04-14 08:58:40.000000000 +0000 @@ -9,6 +9,8 @@ */ namespace PHPUnit\Util; +use const PHP_MAJOR_VERSION; +use const PHP_MINOR_VERSION; use function array_keys; use function array_reverse; use function array_shift; @@ -48,6 +50,79 @@ ]; /** + * @psalm-var array> + */ + private const DEPRECATED_INI_SETTINGS = [ + '7.3' => [ + 'iconv.input_encoding' => true, + 'iconv.output_encoding' => true, + 'iconv.internal_encoding' => true, + 'mbstring.func_overload' => true, + 'mbstring.http_input' => true, + 'mbstring.http_output' => true, + 'mbstring.internal_encoding' => true, + 'string.strip_tags' => true, + ], + + '7.4' => [ + 'iconv.input_encoding' => true, + 'iconv.output_encoding' => true, + 'iconv.internal_encoding' => true, + 'mbstring.func_overload' => true, + 'mbstring.http_input' => true, + 'mbstring.http_output' => true, + 'mbstring.internal_encoding' => true, + 'pdo_odbc.db2_instance_name' => true, + 'string.strip_tags' => true, + ], + + '8.0' => [ + 'iconv.input_encoding' => true, + 'iconv.output_encoding' => true, + 'iconv.internal_encoding' => true, + 'mbstring.http_input' => true, + 'mbstring.http_output' => true, + 'mbstring.internal_encoding' => true, + ], + + '8.1' => [ + 'auto_detect_line_endings' => true, + 'filter.default' => true, + 'iconv.input_encoding' => true, + 'iconv.output_encoding' => true, + 'iconv.internal_encoding' => true, + 'mbstring.http_input' => true, + 'mbstring.http_output' => true, + 'mbstring.internal_encoding' => true, + 'oci8.old_oci_close_semantics' => true, + ], + + '8.2' => [ + 'auto_detect_line_endings' => true, + 'filter.default' => true, + 'iconv.input_encoding' => true, + 'iconv.output_encoding' => true, + 'iconv.internal_encoding' => true, + 'mbstring.http_input' => true, + 'mbstring.http_output' => true, + 'mbstring.internal_encoding' => true, + 'oci8.old_oci_close_semantics' => true, + ], + + '8.3' => [ + 'auto_detect_line_endings' => true, + 'filter.default' => true, + 'iconv.input_encoding' => true, + 'iconv.output_encoding' => true, + 'iconv.internal_encoding' => true, + 'mbstring.http_input' => true, + 'mbstring.http_output' => true, + 'mbstring.internal_encoding' => true, + 'oci8.old_oci_close_semantics' => true, + ], + ]; + + /** * @throws Exception */ public static function getIncludedFilesAsString(): string @@ -106,6 +181,10 @@ $result = ''; foreach (ini_get_all(null, false) as $key => $value) { + if (self::isIniSettingDeprecated($key)) { + continue; + } + $result .= sprintf( '@ini_set(%s, %s);' . "\n", self::exportVariable($key), @@ -200,4 +279,9 @@ return $result; } + + private static function isIniSettingDeprecated(string $iniSetting): bool + { + return isset(self::DEPRECATED_INI_SETTINGS[PHP_MAJOR_VERSION . '.' . PHP_MINOR_VERSION][$iniSetting]); + } } diff -Nru phpunit-9.6.3/src/Util/TestDox/CliTestDoxPrinter.php phpunit-9.6.7/src/Util/TestDox/CliTestDoxPrinter.php --- phpunit-9.6.3/src/Util/TestDox/CliTestDoxPrinter.php 2023-02-04 13:37:15.000000000 +0000 +++ phpunit-9.6.7/src/Util/TestDox/CliTestDoxPrinter.php 2023-04-14 08:58:40.000000000 +0000 @@ -66,7 +66,6 @@ " \e[36m◑\e[0m running tests", " \e[36m◒\e[0m running tests", ]; - private const STATUS_STYLES = [ BaseTestRunner::STATUS_PASSED => [ 'symbol' => '✔', diff -Nru phpunit-9.6.3/src/Util/TestDox/HtmlResultPrinter.php phpunit-9.6.7/src/Util/TestDox/HtmlResultPrinter.php --- phpunit-9.6.3/src/Util/TestDox/HtmlResultPrinter.php 2023-02-04 13:37:15.000000000 +0000 +++ phpunit-9.6.7/src/Util/TestDox/HtmlResultPrinter.php 2023-04-14 08:58:40.000000000 +0000 @@ -29,26 +29,47 @@ @@ -60,7 +81,7 @@ */ private const CLASS_HEADER = <<<'EOT' -

%s

+

%s

    EOT; @@ -101,7 +122,6 @@ $this->write( sprintf( self::CLASS_HEADER, - $name, $this->currentTestClassPrettified ) ); @@ -114,9 +134,8 @@ { $this->write( sprintf( - "
  • %s %s
  • \n", - $success ? '#555753' : '#ef2929', - $success ? '✓' : '❌', + "
  • %s
  • \n", + $success ? 'success' : 'defect', $name ) ); diff -Nru phpunit-9.6.3/src/Util/Test.php phpunit-9.6.7/src/Util/Test.php --- phpunit-9.6.3/src/Util/Test.php 2023-02-04 13:37:15.000000000 +0000 +++ phpunit-9.6.7/src/Util/Test.php 2023-04-14 08:58:40.000000000 +0000 @@ -331,7 +331,7 @@ /** * @psalm-param class-string $className */ - public static function parseTestMethodAnnotations(string $className, ?string $methodName = ''): array + public static function parseTestMethodAnnotations(string $className, ?string $methodName = null): array { $registry = Registry::getInstance(); diff -Nru phpunit-9.6.3/tests/end-to-end/logging/testdox-html.phpt phpunit-9.6.7/tests/end-to-end/logging/testdox-html.phpt --- phpunit-9.6.3/tests/end-to-end/logging/testdox-html.phpt 2023-02-04 13:37:15.000000000 +0000 +++ phpunit-9.6.7/tests/end-to-end/logging/testdox-html.phpt 2023-04-14 08:58:40.000000000 +0000 @@ -21,36 +21,57 @@ -

    Bank Account (PHPUnit\TestFixture\BankAccount)

    +

    Bank Account (PHPUnit\TestFixture\BankAccount)

      -... 3 / 3 (100%)
    • ✓ Balance is initially zero
    • -
    • ✓ Balance cannot become negative
    • -
    • ✓ Balance cannot become negative
    • +... 3 / 3 (100%)
    • Balance is initially zero
    • +
    • Balance cannot become negative
    • +
    • Balance cannot become negative
    diff -Nru phpunit-9.6.3/tests/end-to-end/regression/2724/SeparateClassRunMethodInNewProcessTest.php phpunit-9.6.7/tests/end-to-end/regression/2724/SeparateClassRunMethodInNewProcessTest.php --- phpunit-9.6.3/tests/end-to-end/regression/2724/SeparateClassRunMethodInNewProcessTest.php 2023-02-04 13:37:15.000000000 +0000 +++ phpunit-9.6.7/tests/end-to-end/regression/2724/SeparateClassRunMethodInNewProcessTest.php 2023-04-14 08:58:40.000000000 +0000 @@ -7,46 +7,41 @@ * For the full copyright and license information, please view the LICENSE * file that was distributed with this source code. */ +use PHPUnit\Framework\TestCase; + /** * @runClassInSeparateProcess */ -class SeparateClassRunMethodInNewProcessTest extends PHPUnit\Framework\TestCase +final class SeparateClassRunMethodInNewProcessTest extends TestCase { - public const PROCESS_ID_FILE_PATH = __DIR__ . '/parent_process_id.txt'; - - public const INITIAL_MASTER_PID = 0; - - public const INITIAL_PID1 = 1; + public const PROCESS_ID_FILE_PATH = __DIR__ . '/parent_process_id.txt'; + public const INITIAL_PARENT_PROCESS_ID = 0; + public const INITIAL_PROCESS_ID = 1; - public static $masterPid = self::INITIAL_MASTER_PID; + public static $parentProcessId = self::INITIAL_PARENT_PROCESS_ID; - public static $pid1 = self::INITIAL_PID1; + public static $processId = self::INITIAL_PROCESS_ID; public static function setUpBeforeClass(): void { - parent::setUpBeforeClass(); - if (\file_exists(self::PROCESS_ID_FILE_PATH)) { - static::$masterPid = (int) \file_get_contents(self::PROCESS_ID_FILE_PATH); + self::$parentProcessId = (int) \file_get_contents(self::PROCESS_ID_FILE_PATH); } } public static function tearDownAfterClass(): void { - parent::tearDownAfterClass(); - if (\file_exists(self::PROCESS_ID_FILE_PATH)) { \unlink(self::PROCESS_ID_FILE_PATH); } } - public function testMethodShouldGetDifferentPidThanMaster(): void + public function testTestMethodIsRunInSeparateProcess(): void { - static::$pid1 = \getmypid(); - - $this->assertNotEquals(self::INITIAL_PID1, static::$pid1); - $this->assertNotEquals(self::INITIAL_MASTER_PID, static::$masterPid); + self::$processId = \getmypid(); - $this->assertNotEquals(static::$pid1, static::$masterPid); + $this->assertNotSame(self::INITIAL_PROCESS_ID, self::$processId); + $this->assertNotSame(self::INITIAL_PARENT_PROCESS_ID, self::$parentProcessId); + $this->assertNotSame(self::$processId, self::$parentProcessId); } } diff -Nru phpunit-9.6.3/tests/end-to-end/regression/2724-diff-pid-from-master-process.phpt phpunit-9.6.7/tests/end-to-end/regression/2724-diff-pid-from-master-process.phpt --- phpunit-9.6.3/tests/end-to-end/regression/2724-diff-pid-from-master-process.phpt 2023-02-04 13:37:15.000000000 +0000 +++ phpunit-9.6.7/tests/end-to-end/regression/2724-diff-pid-from-master-process.phpt 1970-01-01 00:00:00.000000000 +0000 @@ -1,21 +0,0 @@ ---TEST-- -GH-2724: Missing initialization of setRunClassInSeparateProcess() for tests without data providers ---FILE-- - + + + + tests + + + diff -Nru phpunit-9.6.3/tests/end-to-end/regression/5192.phpt phpunit-9.6.7/tests/end-to-end/regression/5192.phpt --- phpunit-9.6.3/tests/end-to-end/regression/5192.phpt 1970-01-01 00:00:00.000000000 +0000 +++ phpunit-9.6.7/tests/end-to-end/regression/5192.phpt 2023-04-14 08:58:40.000000000 +0000 @@ -0,0 +1,14 @@ +--TEST-- +https://github.com/sebastianbergmann/phpunit/issues/5192 +--FILE-- + + * + * For the full copyright and license information, please view the LICENSE + * file that was distributed with this source code. + */ +use PHPUnit\Framework\TestCase; + +final class Issue5210Test extends TestCase +{ + protected function tearDown(): void + { + throw new \Exception('test'); + } + + public function testOne(): void + { + $this->assertTrue(true); + } +} diff -Nru phpunit-9.6.3/tests/end-to-end/regression/5210.phpt phpunit-9.6.7/tests/end-to-end/regression/5210.phpt --- phpunit-9.6.3/tests/end-to-end/regression/5210.phpt 1970-01-01 00:00:00.000000000 +0000 +++ phpunit-9.6.7/tests/end-to-end/regression/5210.phpt 2023-04-14 08:58:40.000000000 +0000 @@ -0,0 +1,27 @@ +--TEST-- +https://github.com/sebastianbergmann/phpunit/issues/5210 +--FILE-- + + * + * For the full copyright and license information, please view the LICENSE + * file that was distributed with this source code. + */ +use PHPUnit\Framework\TestCase; + +final class Issue5288Test extends TestCase +{ + public static function provider(): array + { + return [[true]]; + } + + /** + * @dataProvider provider() + */ + public function testOne(bool $value): void + { + $this->assertTrue($value); + } +} diff -Nru phpunit-9.6.3/tests/end-to-end/regression/5288.phpt phpunit-9.6.7/tests/end-to-end/regression/5288.phpt --- phpunit-9.6.3/tests/end-to-end/regression/5288.phpt 1970-01-01 00:00:00.000000000 +0000 +++ phpunit-9.6.7/tests/end-to-end/regression/5288.phpt 2023-04-14 08:58:40.000000000 +0000 @@ -0,0 +1,19 @@ +--TEST-- +https://github.com/sebastianbergmann/phpunit/issues/5288 +--FILE-- +__phpunit_verify(); // CHECKOUT THIS MORE CAREFULLY -// $this->fail('Expected exception'); + // $this->fail('Expected exception'); } catch (ExpectationFailedException $e) { $this->assertSame( sprintf( diff -Nru phpunit-9.6.3/tests/unit/Runner/PhptTestCaseTest.php phpunit-9.6.7/tests/unit/Runner/PhptTestCaseTest.php --- phpunit-9.6.3/tests/unit/Runner/PhptTestCaseTest.php 2023-02-04 13:37:15.000000000 +0000 +++ phpunit-9.6.7/tests/unit/Runner/PhptTestCaseTest.php 2023-04-14 08:58:40.000000000 +0000 @@ -31,7 +31,6 @@ --EXPECT-- Hello PHPUnit! EOF; - private const EXPECTF_CONTENT = <<<'EOF' --TEST-- EXPECTF test @@ -40,7 +39,6 @@ --EXPECTF-- Hello %s! EOF; - private const EXPECTREGEX_CONTENT = <<<'EOF' --TEST-- EXPECTREGEX test @@ -49,7 +47,6 @@ --EXPECTREGEX-- Hello [HPU]{4}[nit]{3}! EOF; - private const EXPECT_MISSING_ASSERTION_CONTENT = <<<'EOF' --TEST-- Missing EXPECTF value test @@ -57,7 +54,6 @@ --FILE-- EOF; - private const FILE_SECTION = <<<'EOF' diff -Nru phpunit-9.6.3/tests/unit/Runner/TestSuiteSorterTest.php phpunit-9.6.7/tests/unit/Runner/TestSuiteSorterTest.php --- phpunit-9.6.3/tests/unit/Runner/TestSuiteSorterTest.php 2023-02-04 13:37:15.000000000 +0000 +++ phpunit-9.6.7/tests/unit/Runner/TestSuiteSorterTest.php 2023-04-14 08:58:40.000000000 +0000 @@ -34,8 +34,7 @@ */ private const IGNORE_DEPENDENCIES = false; - private const RESOLVE_DEPENDENCIES = true; - + private const RESOLVE_DEPENDENCIES = true; private const MULTIDEPENDENCYTEST_EXECUTION_ORDER = [ MultiDependencyTest::class . '::testOne', MultiDependencyTest::class . '::testTwo', Binary files /tmp/tmpuof1oriw/UeG3mgzVlg/phpunit-9.6.3/tools/composer and /tmp/tmpuof1oriw/qjy5DVCWs0/phpunit-9.6.7/tools/composer differ diff -Nru phpunit-9.6.3/tools/phpab phpunit-9.6.7/tools/phpab --- phpunit-9.6.3/tools/phpab 2023-02-04 13:37:15.000000000 +0000 +++ phpunit-9.6.7/tools/phpab 2023-04-14 08:58:40.000000000 +0000 @@ -128,12 +128,10 @@ 'theseer\\autoload\\parserinterface' => '/phpab/ParserInterface.php', 'theseer\\autoload\\pathcomparator' => '/phpab/PathComparator.php', 'theseer\\autoload\\pharbuilder' => '/phpab/PharBuilder.php', - 'theseer\\autoload\\runner' => '/phpab/Runner.php', 'theseer\\autoload\\sourcefile' => '/phpab/SourceFile.php', 'theseer\\autoload\\staticlistrenderer' => '/phpab/StaticListRenderer.php', 'theseer\\autoload\\staticrenderer' => '/phpab/StaticRenderer.php', 'theseer\\autoload\\staticrequirelistrenderer' => '/phpab/StaticRequireListRenderer.php', - 'theseer\\autoload\\unitvisitor' => '/phpab/UnitVisitor.php', 'theseer\\autoload\\version' => '/phpab/Version.php', 'theseer\\directoryscanner\\directoryscanner' => '/vendor/theseer/directoryscanner/src/directoryscanner.php', 'theseer\\directoryscanner\\exception' => '/vendor/theseer/directoryscanner/src/directoryscanner.php', @@ -152,22 +150,22 @@ ); Phar::mapPhar('phpab.phar'); -define('PHPAB_VERSION', '1.27.1'); +define('PHPAB_VERSION', '1.27.2'); $factory = new \TheSeer\Autoload\Factory(); $factory->getCLI()->run(); exit(0); __HALT_COMPILER(); ?> -* -phpab.phar8vendor/theseer/directoryscanner/src/directoryscanner.php"aA P7vendor/theseer/directoryscanner/src/filesonlyfilter.php -a;l<vendor/theseer/directoryscanner/src/includeexcludefilter.phparŴ1vendor/theseer/directoryscanner/src/phpfilter.php -a\n;'vendor/zetacomponents/base/src/base.phpYa\0vendor/zetacomponents/base/src/base_autoload.phpNaH¬Lvendor/zetacomponents/base/src/exceptions/double_class_repository_prefix.phpVa6w7vendor/zetacomponents/base/src/exceptions/exception.phpa CTsAvendor/zetacomponents/base/src/exceptions/extension_not_found.php6a~9 <vendor/zetacomponents/base/src/exceptions/file_exception.php-a5vendor/zetacomponents/base/src/exceptions/file_io.phpaO;<vendor/zetacomponents/base/src/exceptions/file_not_found.phpJa,T]DX=vendor/zetacomponents/base/src/exceptions/file_permission.php aDg7Ivendor/zetacomponents/base/src/exceptions/functionality_not_supported.php>a V&JFvendor/zetacomponents/base/src/exceptions/init_callback_configured.phpa: Dvendor/zetacomponents/base/src/exceptions/invalid_callback_class.php_a -Z»Bvendor/zetacomponents/base/src/exceptions/invalid_parent_class.phpEa@vendor/zetacomponents/base/src/exceptions/property_not_found.phpa"yAAvendor/zetacomponents/base/src/exceptions/property_permission.phpfaW>D?vendor/zetacomponents/base/src/exceptions/setting_not_found.phpTaH[Y;vendor/zetacomponents/base/src/exceptions/setting_value.php[a3vendor/zetacomponents/base/src/exceptions/value.phpa.Ѵ6vendor/zetacomponents/base/src/exceptions/whatever.php a8K0vendor/zetacomponents/base/src/ezc_bootstrap.phpaU–~P+vendor/zetacomponents/base/src/features.php.a -''vendor/zetacomponents/base/src/file.phpIHau'vendor/zetacomponents/base/src/init.phpVaukoGvendor/zetacomponents/base/src/interfaces/configuration_initializer.phpaE8vendor/zetacomponents/base/src/interfaces/exportable.phpaB59vendor/zetacomponents/base/src/interfaces/persistable.phpa9J +vendor/zetacomponents/base/src/metadata.phpab0vendor/zetacomponents/base/src/metadata/pear.phpa<3vendor/zetacomponents/base/src/metadata/tarball.phpa g^*vendor/zetacomponents/base/src/options.phpaK)vendor/zetacomponents/base/src/struct.php?at<vendor/zetacomponents/base/src/structs/file_find_context.php a-њ?vendor/zetacomponents/base/src/structs/repository_directory.php aL8'U<vendor/zetacomponents/console-tools/src/console_autoload.phprai>vendor/zetacomponents/console-tools/src/dialog/menu_dialog.phpa1wԴBvendor/zetacomponents/console-tools/src/dialog/question_dialog.php"a tQvendor/zetacomponents/console-tools/src/dialog/validators/menu_dialog_default.phpa+Xvendor/zetacomponents/console-tools/src/dialog/validators/question_dialog_collection.phpaONUvendor/zetacomponents/console-tools/src/dialog/validators/question_dialog_mapping.phpaFSvendor/zetacomponents/console-tools/src/dialog/validators/question_dialog_regex.phpa{Rvendor/zetacomponents/console-tools/src/dialog/validators/question_dialog_type.phpCa(9vendor/zetacomponents/console-tools/src/dialog_viewer.php" -a?R28?vendor/zetacomponents/console-tools/src/exceptions/argument.phpaX δRvendor/zetacomponents/console-tools/src/exceptions/argument_already_registered.phpE a/wm'Svendor/zetacomponents/console-tools/src/exceptions/argument_mandatory_violation.phpa Hvendor/zetacomponents/console-tools/src/exceptions/argument_too_many.phpa*Y۴Nvendor/zetacomponents/console-tools/src/exceptions/argument_type_violation.phpsau[:MCvendor/zetacomponents/console-tools/src/exceptions/dialog_abort.phpa"@vendor/zetacomponents/console-tools/src/exceptions/exception.phpaP[ Jvendor/zetacomponents/console-tools/src/exceptions/invalid_option_name.phpadLvendor/zetacomponents/console-tools/src/exceptions/invalid_output_target.phpa]vmwIvendor/zetacomponents/console-tools/src/exceptions/no_position_stored.phpaRGyMvendor/zetacomponents/console-tools/src/exceptions/no_valid_dialog_result.phpaX=vendor/zetacomponents/console-tools/src/exceptions/option.phpa}YPvendor/zetacomponents/console-tools/src/exceptions/option_already_registered.phpa-/ߴQvendor/zetacomponents/console-tools/src/exceptions/option_arguments_violation.phpa~xRvendor/zetacomponents/console-tools/src/exceptions/option_dependency_violation.phparQvendor/zetacomponents/console-tools/src/exceptions/option_exclusion_violation.phpahVmQvendor/zetacomponents/console-tools/src/exceptions/option_mandatory_violation.phphaYXpAKvendor/zetacomponents/console-tools/src/exceptions/option_missing_value.phpaF^Fvendor/zetacomponents/console-tools/src/exceptions/option_no_alias.php aHvendor/zetacomponents/console-tools/src/exceptions/option_not_exists.php$a6ESvendor/zetacomponents/console-tools/src/exceptions/option_string_not_wellformed.php a0Mvendor/zetacomponents/console-tools/src/exceptions/option_too_many_values.phpwaLvendor/zetacomponents/console-tools/src/exceptions/option_type_violation.phpaD/1vendor/zetacomponents/console-tools/src/input.phpa&Ǖ:vendor/zetacomponents/console-tools/src/input/argument.phpah";vendor/zetacomponents/console-tools/src/input/arguments.phpt"aثJvendor/zetacomponents/console-tools/src/input/help_generators/standard.php9aBj8vendor/zetacomponents/console-tools/src/input/option.phpJOa"NEvendor/zetacomponents/console-tools/src/input/validators/standard.phpa x=vendor/zetacomponents/console-tools/src/interfaces/dialog.phpT a*/Z;Gvendor/zetacomponents/console-tools/src/interfaces/dialog_validator.phpa 5Kvendor/zetacomponents/console-tools/src/interfaces/input_help_generator.phpatӁFvendor/zetacomponents/console-tools/src/interfaces/input_validator.phpyaeutovLvendor/zetacomponents/console-tools/src/interfaces/menu_dialog_validator.phpaTPvendor/zetacomponents/console-tools/src/interfaces/question_dialog_validator.phpa&cִ:vendor/zetacomponents/console-tools/src/options/dialog.php2 a3Y?vendor/zetacomponents/console-tools/src/options/menu_dialog.phpa1vf:vendor/zetacomponents/console-tools/src/options/output.phpa0ِI?vendor/zetacomponents/console-tools/src/options/progressbar.phpate%Cvendor/zetacomponents/console-tools/src/options/progressmonitor.phpF a Cvendor/zetacomponents/console-tools/src/options/question_dialog.phpaWia=vendor/zetacomponents/console-tools/src/options/statusbar.php ap~[9vendor/zetacomponents/console-tools/src/options/table.phpL"aseK2vendor/zetacomponents/console-tools/src/output.phpMaW?7vendor/zetacomponents/console-tools/src/progressbar.php:adm|;vendor/zetacomponents/console-tools/src/progressmonitor.phpZaq5vendor/zetacomponents/console-tools/src/statusbar.php aj rM?vendor/zetacomponents/console-tools/src/structs/option_rule.phpa Avendor/zetacomponents/console-tools/src/structs/output_format.phpkah+-Bvendor/zetacomponents/console-tools/src/structs/output_formats.phpab!-1vendor/zetacomponents/console-tools/src/table.phpBtae56vendor/zetacomponents/console-tools/src/table/cell.phpa+(Կ5vendor/zetacomponents/console-tools/src/table/row.php0a -/8vendor/zetacomponents/console-tools/src/tools/string.phpaF)phpab/Application.phpJ&a phpab/AutoloadRenderer.phpc#a - phpab/CLI.php^a 'δphpab/Cache.php@a "9phpab/CacheEntry.phpaд"phpab/CacheWarmingListRenderer.phpasy?phpab/CachingParser.phpaPI!phpab/Collector.php a66phpab/CollectorResult.phpT a-phpab/ComposerIterator.php0aVQBphpab/Config.phpC3a (ܴphpab/DependencySorter.phpmaos:phpab/Factory.php a8phpab/Logger.phpa  Ŵphpab/ParseResult.phpgaWߪphpab/Parser.phpSa{rphpab/ParserInterface.phpaphpab/PathComparator.phpfahaphpab/PharBuilder.phpga= #״phpab/Runner.phpra.Fphpab/SourceFile.phpa%phpab/StaticListRenderer.phpazphpab/StaticRenderer.phpa$Ŵ#phpab/StaticRequireListRenderer.php"aLXOphpab/UnitVisitor.phpa"zMphpab/Version.php -aj&Ӵ"phpab/templates/ci/default.php.tpla/]iphpab/templates/ci/phar.php.tpla~ phpab/templates/ci/php52.php.tpla ^@N"phpab/templates/cs/default.php.tplaBw#phpab/templates/cs/phar.php.tpla2q$ phpab/templates/cs/php52.php.tpla&N˴phpab/templates/static.php.tplap휺"phpab/templates/staticphar.php.tplWaT.ִYsbk CL^_j?[!QI4F6ۻ{:&)nwo{{_~[<,Nޝ;ċURhLÇ??DB/zI*?3JZp'{4 4#"CɄ7 Ld.Z'La4x$E2Â' M$~ +* +phpab.phar8vendor/theseer/directoryscanner/src/directoryscanner.php" cA P7vendor/theseer/directoryscanner/src/filesonlyfilter.php + c;l<vendor/theseer/directoryscanner/src/includeexcludefilter.php crŤ1vendor/theseer/directoryscanner/src/phpfilter.php + c\n;'vendor/zetacomponents/base/src/base.phpY c\0vendor/zetacomponents/base/src/base_autoload.phpN cH¬Lvendor/zetacomponents/base/src/exceptions/double_class_repository_prefix.phpV c6w7vendor/zetacomponents/base/src/exceptions/exception.php c CTsAvendor/zetacomponents/base/src/exceptions/extension_not_found.php6 c~9 <vendor/zetacomponents/base/src/exceptions/file_exception.php- c5vendor/zetacomponents/base/src/exceptions/file_io.php cO;<vendor/zetacomponents/base/src/exceptions/file_not_found.phpJ c,T]DX=vendor/zetacomponents/base/src/exceptions/file_permission.php cDg7Ivendor/zetacomponents/base/src/exceptions/functionality_not_supported.php> c V&JFvendor/zetacomponents/base/src/exceptions/init_callback_configured.php c: Dvendor/zetacomponents/base/src/exceptions/invalid_callback_class.php_ c +Z»Bvendor/zetacomponents/base/src/exceptions/invalid_parent_class.phpE c@vendor/zetacomponents/base/src/exceptions/property_not_found.php c"yAAvendor/zetacomponents/base/src/exceptions/property_permission.phpf cW>D?vendor/zetacomponents/base/src/exceptions/setting_not_found.phpT cH[Y;vendor/zetacomponents/base/src/exceptions/setting_value.php[ c3vendor/zetacomponents/base/src/exceptions/value.php c.Ѥ6vendor/zetacomponents/base/src/exceptions/whatever.php  c8K0vendor/zetacomponents/base/src/ezc_bootstrap.php cU–~P+vendor/zetacomponents/base/src/features.php. c +''vendor/zetacomponents/base/src/file.phpIH cu'vendor/zetacomponents/base/src/init.phpV cukoGvendor/zetacomponents/base/src/interfaces/configuration_initializer.php cE8vendor/zetacomponents/base/src/interfaces/exportable.php cB59vendor/zetacomponents/base/src/interfaces/persistable.php c9J +vendor/zetacomponents/base/src/metadata.php cb0vendor/zetacomponents/base/src/metadata/pear.php c<3vendor/zetacomponents/base/src/metadata/tarball.php c g^*vendor/zetacomponents/base/src/options.php cK)vendor/zetacomponents/base/src/struct.php? ct<vendor/zetacomponents/base/src/structs/file_find_context.php c-њ?vendor/zetacomponents/base/src/structs/repository_directory.php cL8'U<vendor/zetacomponents/console-tools/src/console_autoload.phpr ci>vendor/zetacomponents/console-tools/src/dialog/menu_dialog.php c1wԤBvendor/zetacomponents/console-tools/src/dialog/question_dialog.php" c tQvendor/zetacomponents/console-tools/src/dialog/validators/menu_dialog_default.php c+Xvendor/zetacomponents/console-tools/src/dialog/validators/question_dialog_collection.php cONUvendor/zetacomponents/console-tools/src/dialog/validators/question_dialog_mapping.php cFSvendor/zetacomponents/console-tools/src/dialog/validators/question_dialog_regex.php c{Rvendor/zetacomponents/console-tools/src/dialog/validators/question_dialog_type.phpC c(9vendor/zetacomponents/console-tools/src/dialog_viewer.php" + c?R28?vendor/zetacomponents/console-tools/src/exceptions/argument.php cX ΤRvendor/zetacomponents/console-tools/src/exceptions/argument_already_registered.phpE c/wm'Svendor/zetacomponents/console-tools/src/exceptions/argument_mandatory_violation.php c Hvendor/zetacomponents/console-tools/src/exceptions/argument_too_many.php c*YۤNvendor/zetacomponents/console-tools/src/exceptions/argument_type_violation.phps cu[:MCvendor/zetacomponents/console-tools/src/exceptions/dialog_abort.php c"@vendor/zetacomponents/console-tools/src/exceptions/exception.php cP[ Jvendor/zetacomponents/console-tools/src/exceptions/invalid_option_name.php cdLvendor/zetacomponents/console-tools/src/exceptions/invalid_output_target.php c]vmwIvendor/zetacomponents/console-tools/src/exceptions/no_position_stored.php cRGyMvendor/zetacomponents/console-tools/src/exceptions/no_valid_dialog_result.php cX=vendor/zetacomponents/console-tools/src/exceptions/option.php c}YPvendor/zetacomponents/console-tools/src/exceptions/option_already_registered.php c-/ߤQvendor/zetacomponents/console-tools/src/exceptions/option_arguments_violation.php c~xRvendor/zetacomponents/console-tools/src/exceptions/option_dependency_violation.php crQvendor/zetacomponents/console-tools/src/exceptions/option_exclusion_violation.php chVmQvendor/zetacomponents/console-tools/src/exceptions/option_mandatory_violation.phph cYXpAKvendor/zetacomponents/console-tools/src/exceptions/option_missing_value.php cF^Fvendor/zetacomponents/console-tools/src/exceptions/option_no_alias.php  cHvendor/zetacomponents/console-tools/src/exceptions/option_not_exists.php$ c6ESvendor/zetacomponents/console-tools/src/exceptions/option_string_not_wellformed.php  c0Mvendor/zetacomponents/console-tools/src/exceptions/option_too_many_values.phpw cLvendor/zetacomponents/console-tools/src/exceptions/option_type_violation.php cD/1vendor/zetacomponents/console-tools/src/input.php c&Ǖ:vendor/zetacomponents/console-tools/src/input/argument.php ch";vendor/zetacomponents/console-tools/src/input/arguments.phpt" cثJvendor/zetacomponents/console-tools/src/input/help_generators/standard.php9 cBj8vendor/zetacomponents/console-tools/src/input/option.phpJO c"NEvendor/zetacomponents/console-tools/src/input/validators/standard.php c x=vendor/zetacomponents/console-tools/src/interfaces/dialog.phpT c*/Z;Gvendor/zetacomponents/console-tools/src/interfaces/dialog_validator.php c 5Kvendor/zetacomponents/console-tools/src/interfaces/input_help_generator.php ctӁFvendor/zetacomponents/console-tools/src/interfaces/input_validator.phpy ceutovLvendor/zetacomponents/console-tools/src/interfaces/menu_dialog_validator.php cTPvendor/zetacomponents/console-tools/src/interfaces/question_dialog_validator.php c&c֤:vendor/zetacomponents/console-tools/src/options/dialog.php2 c3Y?vendor/zetacomponents/console-tools/src/options/menu_dialog.php c1vf:vendor/zetacomponents/console-tools/src/options/output.php c0ِI?vendor/zetacomponents/console-tools/src/options/progressbar.php cte%Cvendor/zetacomponents/console-tools/src/options/progressmonitor.phpF c Cvendor/zetacomponents/console-tools/src/options/question_dialog.php cWia=vendor/zetacomponents/console-tools/src/options/statusbar.php cp~[9vendor/zetacomponents/console-tools/src/options/table.phpL" cseK2vendor/zetacomponents/console-tools/src/output.phpM cW?7vendor/zetacomponents/console-tools/src/progressbar.php: cdm|;vendor/zetacomponents/console-tools/src/progressmonitor.phpZ cq5vendor/zetacomponents/console-tools/src/statusbar.php cj rM?vendor/zetacomponents/console-tools/src/structs/option_rule.php c Avendor/zetacomponents/console-tools/src/structs/output_format.phpk ch+-Bvendor/zetacomponents/console-tools/src/structs/output_formats.php cb!-1vendor/zetacomponents/console-tools/src/table.phpBt ce56vendor/zetacomponents/console-tools/src/table/cell.php c+(Կ5vendor/zetacomponents/console-tools/src/table/row.php0 c +/8vendor/zetacomponents/console-tools/src/tools/string.php cF)phpab/Application.phpJ& c lphpab/AutoloadRenderer.phpc# c + phpab/CLI.phpC^ c.C:phpab/Cache.php@ c "9phpab/CacheEntry.php cФ"phpab/CacheWarmingListRenderer.php csy?phpab/CachingParser.php cPI!phpab/Collector.php c66phpab/CollectorResult.phpT c-phpab/ComposerIterator.php0 cVQBphpab/Config.phpC3 c =phpab/DependencySorter.phpm coɢpphpab/Factory.php c#Tphpab/Logger.php c I9~phpab/ParseResult.phpg cWߪphpab/Parser.phpS cphpab/ParserInterface.php cphpab/PathComparator.phpf chaphpab/PharBuilder.phpg c=61_phpab/SourceFile.php c%phpab/StaticListRenderer.php czphpab/StaticRenderer.php c}xȤ#phpab/StaticRequireListRenderer.php" cLXOphpab/Version.php + cj"phpab/templates/ci/default.php.tpl c/]iphpab/templates/ci/phar.php.tpl c~ phpab/templates/ci/php52.php.tpl c ^@N"phpab/templates/cs/default.php.tpl cBw#phpab/templates/cs/phar.php.tpl c2q$ phpab/templates/cs/php52.php.tpl c&Nˤphpab/templates/static.php.tpl cp휺"phpab/templates/staticphar.php.tplW cT.֤Ysbk CL^_j?[!QI4F6ۻ{:&)nwo{{_~[<,Nޝ;ċURhLÇ??DB/zI*?3JZp'{4 4#"CɄ7 Ld.Z'La4x$E2Â' M$~ |^8 9f0#? >!<=Wzni$z)Rēz,M喊4V& $@S\8KZ᪓ <9; ZK (~;7]U{kҊ=\Rfzghh6I 0 ]g3TvL0*#"\xPY`r۬ͨvD%8i0D!det8]]#F@%됓:CIqGepmY]iyٷz9`X4a-\Z4Rj8㫡Hn̶W&-jݕLe$!]тLd8;nWE{`kCffѬEt5ehٺC4z+ t ܒZV'3bh]ue|g|ZxGoi[uOpӮE<Z"]ijpU"bf邑=C.lۘINDf)}}-?NNHdJ  &x!%f8e+9, gct|uu<NFpq/Nx$?:24cAN R\>9 -6N2?=t/'laqk"bK DSLtRI-}Kl5Qiw6Sz=?tg^O/BmCRLF9sojX.AzեIZa&^+L;C1jM XbQ@c1e<1 UK S;?dbfZt%X$ӵ[Ęle n˳Kh. ,1<<Ԅ/؝*"qjL>λL4z|zS ZC/UqNWӦrNbcTE2uG79M܇. #_얃L`BqACX QK`r1VCsY%um) 4ݖ'^U"B+׌۵ c1P:j~:RRhku&e!WF|pw4;>DzzWdgg稕.3MQ}88$*)}:K^cIeVzܰUncQR10o؞86R q|؁Sij SJvҜv\gLT!8^*l:IT`\eIbnnD )lӏt?׵"K!)kl>|L @k!8'~-~xQ5^%J?rxR+dEN'dx+S*|{V+Rכ+vEIbKz6(hT#zYcѵeorF&xJ1`H^|6[J 6rkI$^U2%4i.¹XHpyxd_0dT=M ^j m//R1JWLw\u7Oɵ{mqv0נᛘMX&j,:([?qF6O8aBrS "9y voc0lmp%`urP:yZ,a4O<Yk<$ =s+ȝ%|AI4YEE^xA$ ց.9#m"!ns(xvX80|%&7m[Ѩ'-oW[a0&F&֦sVc~3 2nmghJ!vOz4:F#%cHWN,d8av=휲0oƭ>t:"B2 ` ACR_: eS_sܖZA+`h# |jMw[rJ+ 3 #s,v\GjG`:|"BJtc`~*y?*BsW< E!@ C/@}RUR^([%a)Eؚ8mwzb_n,ZgEE %>6a}:ǜ˱F8^tJa y kIȽD5rȑD~f -^vzQԖ<ޣV,G׮>yܩg㒧Dj_csd3::(%M=[l%J-+Xx"4}"LMK[$cRje8`mXu*ϫ-SRc#cb 3[X.Y$+ !9pS T+#W -jUZ/g\k\&ogcY*bUtЁ7_;S1JZQһDq) 8u'ҟSi a͙U!ERGM٢h-IAu`C*(9rPZ+*ۙa6e jHpɫ>J/:FX%jqe|7TGW2I -SʠD}B*/#q%jQ6[c3Ւlϊ5XPI%8I*)H~;BX()^ˆ?ɂM5U]પT*5$7z$T׬{mbQ}1ݰi=?@8VO/ NGTdL f1n -ƒ3a#a?\鳥>54QC٪ Um 7w{w8{OcG\4(Y2|IlxCSJA".q}c֕@Q9ԨGEzLoJ17S7zFF+!)VhTE=TTTVۋO8Yb_g*gtVSt,k>mVƘ "&RFro^BU9K,7qe FMi -]hªk F窒r6^VJ8 ;Q9[B~u]Fgb(Riw}:UC ^aс Jg?-b0.HB5t!w  -GTYx5,A"-0B%g~!obGͳreTRxQ wx^V7UbJFє"i=dKS.HAF+Wo[cova -s}w媬f]O&>Uݟs/9ǟ*YT8 ,ٺ6aeg_O YmsH_J-"lq: $-J`+j$]_w@\|0h^MnϏ9tQ7&|_/0e$ѝY -}Tߞ7Dm!0u -RBދy#A`gA!Oq.gWAGXr!n!,yf>1hO_ -H\Y&>CvgG 0fq4.e^zn) ,<ОGe?F*`&Z h^ -B?X -ޣ J-ᢵAk9j)x/E1!_b agB~c!e"`ZKAU",ׯBq+Vd?TP %1h/ 게3 -&7G%1a/"i043fi"fgHPI -HZ,.mt,3|otڱ/.={9s±"1'3`}9jԷ -ṕg[n A?ك FsA߾= [J5k1 rٱwRmo@Q #o:i4vFC2gݾi_Y6rzo

    wƮM/{Y3ypD> B=z8`sM| vE >\Znp)&LE^y'JE<0.5ZvH>خrlJ%|vKbׂ}fMʫ]eΌw?osLrQޭBQuտk ,V{tD$kW'9V$O{Y`9 se k5}/Oy74]y*$ fƳ_J,T jN<6ם%isѤGnATWfޗgid@f$bwZeqB}W~^$GPCJK~4f,V -S4ӏ8D7O)H2{( z-mD;xB6\p,I.T>{*骓4-Db>+V^ 4 yhܔD&}`!$U8 Gey-8M[yęL&]2ӏ#E"J>N\S-dLBM8W|܃U2Y|s -]KK(f4CGOiTp;Nie*f3I8ѵy" ΢K@3Q-GH>bA3V8)ccf k-I[+tXl .u:%EP%%f&/iO"TLfZ+ʼ Jg4FӍwi,3cs{s[}|P*^|sE_+"\ @@oiZ16G,x1jXoz0EvNFֲ8%R)3 F4,:LN1%v`6r}ueG)PzڠM18:5 S,>tj:QU0D5L5~"8j2 -5fbh=D:TȳC< WJy2mbfA\JuE}PŖ-U; -vUs>ё+4ȶ4)G8!=(`a|rUAj6Xx`/A: (cԆ_(3/gg>jCq]~V-WvG`Ҿيl1BݟT,;8ϒoK:rAXz%F"'ju1gMox8y 8fÅ Ωлo =|O7W案 -V59\4m~Pd ptDt 0VOYb`IR0e ~(j x3i2:%Sm N6eсx>08]nPWR!@s*:V*Z<āт )3<9%!nĵFcc28UX>#BF4fեWgqNлBpKAdx:DڽT Fz6NQJ3m-}*Mvmŀf; %"i 8Iw\mzbeg\2O mSkYiFMWhgf"&[7ukM]]4(Y3cy pgS=*u goTF#SoV>" '+Ǎ6E݊P2m|AJ@X.,k(7BC׳[ E]^F۰,,Fil)y= ^z#lv 뛮۷]š0. hqUIekӵ8mvs C0BB iiS{TKm}Z+6fNw'ek7r5(yefjQU̘:P.[UMl?nUq욧yT݋/+  3]6qZS=+MksFdk®A^S㱛8咥(euHB#.k4/~}r8WU{Oob5k7ϗ? tuA pnsqa\Bl%8s<&U`qzrxff3?X:u9_ḻLDPGfْ ' ͖G87C<:|vNЂM&?LY W"yBECZS:Kl 8$ {v+j=Մ^47 !d}k^HJÄ-̐d8N9XFn/0h`ex:a^Y߁ɨ{<  _ⁱV 3~ F{6u1nݛvu8H uϺ9%kF03c>n;BTO>R<-6l&!t4 "vv=3:e'?aV+1lgHr p;2, z&{u6.abD`8ZAjJA)ӑqNxz}궍;IqӱQ"V h 鸋C\IwЯ>@wH׃>  ^T>ާPk:Ơ$9>' aY~4mGswlȵF1J[@yр7gdZ=aΧ.2/'KF}x>U+i]WU V6=7WZnvV^] ֓_a`ob dǜi=ݑQj!;jlFP%('Q:! A(! !/fGͻBh>vs&@hE3~șуEM{΄"W51ѴLB\M^`]vP -]}Y\F(ݘ;1-د։Yl39 PcKpX6[yK,y[o\a︅,IsNo)*؍V^6bQBe}?e.g-a>xZvNϟh} љwCijRk|1gGGGl2iݧs ȥx߷9$.ӽR 0CPr3R蚯d)" T^yOf -ikTy$UsvY<@nY榘+v"9{WFZtioZ(UFӚqg Uq - _aj4k0W#sd-we|`AvcfƔc'Ȥfbu$`VaL@ ` -AA3xVt.t+j4\r|%e ﳆYi] ?ĎP%d3P汆,FR.6Ƀ@r &S+C }; MR=!% Mi_.Amw g >_}pЅЩ\ԣ}Gp]P䃫QF#ZBv,n1:m-X-0۵Y'J %DIti+?XP87>34ϗ JhČpV㰎u? xT!0 -yh\uLN*cժsMծ>BLJzTBO8sk1OTslU-`['T0AwTRQ3c (E;K@ v]5H4I&+*VYO.Z!(Z-9h;ꉠ8¬XFPqu45ЪGuNP9NbʪTG}a[-.،{H8?XU`rMz+J ֦Ǎ.ccLbtMkFBnȝ^M%/$$XTi'XlKꊗ[Dw4P"VN#|eq,a"! L&xTA ] -ΤGTY@(Q2x1(=t/7 !AXsi`B -k_}~eLc$ξ!B7UD -GIoJ%SO݅N{s$Io - R59l&*@mKԏ+7PFʣBA r*iR#NF_&Jŝ'=T9J Sڞdҥ P%o5O9E@%@>ٛ *abȱs=+_,%y1^x=3Bqɮ=p/,TNYԶ3nEJyl9'v@Vv"?[rg;x~ "mѿљ4-_. ۂgNiXrPu뵻Xt+GMr]oz2cO 9'9̹{E j-}k4A*j" e{.O2n]>QpXZȨ2ϙ -Ny" ;tgDċbx2N޽!+&_ 9q)t{3pH!Gy]d'n{%:϶Ļ39|&n^~7j!{澻]=kE]@g{XC9|-m'c%8?9|+dʜ|o'ANaO`*I=Z5$E,%J"ox"[bLʄ~W7l`&)^-V\@-,]g! qtS^z{T_%*_*a^C[h!BLR|vJ*8-+MPJͥ} =J2W9_Kd.Op?*~?PT$*ehMC+Lg7a3ruU/_w7y?0.{.~IV,?~KHk\frAE6"jI +Kd,|RAxsVA<>$:EƁ[ +}y9 r-%uS$d<] F "GK1Ycb8]P{`$X)‚pw,20 k@BMBbeY e&碐e.Xf"s3(b +@M;{wt>F_͞уG<4;?ZwAϰlЇ=|:t,fn#L<Ӈ`9 ۆx`"=d`C46`3m@Қ# 3j+ьdްwS1(MgHRn9fw2-4Xm3@7^@`|5w`P1*QT(~30;TgZF!vߺhGr{ltMbiF(5D\l COoQGduI݉eܓ>'7c:ǀѨ'-oWk؟a0&F&ަsVc~3M2aYcghJ#vOz4:F#%cHW,d8aN=04n1t:"BmвL`LAGR_: eS_ ܖzI+`h3 |jOw[rJ+3+s,v\GjG`:|"BJtc`~*y?Uସy-z. +zY胕 rՃcԜ`][xb y" t XGiI?vM96-3 +S| +METEf4*R?!R6u5q"0ίWLL/Yq)>}ZR†S7L/Sst96NjN]~y9 %>ᕤ|\*rAn98ȭ!VÈc4ʖڒ'{bT(]6_q#`3{\H56GL6{>Kӄ#R +,a|ѳUN_!R''BP9[ĜiiKd으,|WZ|,r[?hjK3B"씫U؁$HÌ#pMr><=d%Ă9䂑 gnI@>Vje|*CIZ+ko־<5^qjv6,"&)\eK8| Prg&r}44:9fQE+Jz/(e=0nRsxb0ZZ2t wԔ-ʖؒߔ:L+ jխef,p?~T@@B^ 8wUʟ,'@Qg4q×@-Z!)^cujUovS%5ExQ3it_il56_d{V.' H-gAq' +&#`IbU{V`$ 6(UbU,;kFia)HY7x/ b avz8~ WjU qXK^՝ɘb\%;abWIK}>ji +UAnF[? +pyďiP`eR񆦔 mt[YicY# ׻q%I$z%PM~B٭ N8~l 㙢p=ךK4%`Ša5$lt&o^0I P i,g'/+;0%̥rƁ7ZL"Ig$H!^GF? jԕ Jީ5,tshjd-*7 [5nK8MxˀaqB:De,Y]P*1cbH7M9đRwߖc5cbKGl"^3`=6ίrh,g,tۺz(*ᨨY/i4M 7V~h#$eڊ<J[gJS{1 =pY0kXՌvvDZcb}2fBD .mTf[PjNKOw>Z"I6plVhnU+ӯ5/u{pgoi} +|;W2ZN!8-iNB2垘\Ar8|JUYݿ\RB(@<'19[چB8LJ5.!3+׸C_o{CwT@req]@p!8DG^9 |CnܵWJB[m~~*&Ssiڵ_\׽(0;ba9*HԴS?"\S\>QIb%8ke,^P8 3L`QC膩<*'5(k +r+wsv~%K/h"Zh2-ȗ2X%޲|@?IW:O +_|Emm䱺PIаI#.!M;]N,^^Uo{+H53_gb-u^sYmsH_J-"lq: $-JV,$H]_w@\|0h^MoӣϏ9tQ79&|⟿|`X@';! ^7DmF0uRdBދA2.0Xfd)gWaG'r!o!,sX$A8g>1hO_ +H\y.Her9'0Y!eLB/-d%^f9ړ,=HIDKqf!CSP,Å=ڠ.Z6XBP$B9" % ~.dG8.R6q B=X%d:+WiE#LZ|)(fPE P0!p9Pd<hteQ!mH')bhYVĻ]pӱGݳzйƗtkǾrY 标ϱ;co Ǧǜ<\qX CQF~(1m-g.Z<͡}p7l)լ0<+^f5K=IZh\H]c܇g^hQ9;v+R|xNqloYp1yr]=eƮB!٢Q6Gg9xAA&RmF5%0-pi:}3 z(J֠k!1`VC˱]c+L<&iz,s] 96)6sH "v>ꎻ:3ޥοV&flK1vXGyjP:"kq{W⫓#1VBZipw]eX=>_f5k,ZR',KXA{(~ + 넿gKP!4o40,Rb L\Pwⱹ,aDk~MZy%~e}xVOVd@" +yZƐw|'Ez5D +JGOc|0E>C|$"ϠѨF'[_Y̒BG:OB,ݏb*pr7MIk2ߧf)MrͿ^spxTAL(TEcGdu,; >8R$b@=z5@4B쇳~L=XE !'77l*a}oM$~F3)V&b1CF]'R,*8=c{J{a.Z#$<:iq.Am<2?f˰"rIv\SKQ4 UXbVn)s/cU &ʨ2ob'ꬴtc]\oV_ƾ;,EF\Ŋ5<920йśvVe:^a9LD:+qEN&6cn& 1SL8zM)> C]QA +`6h!@ -Fb/\},3,>tj:QU0D5L5~"8j2 +5fbh=DD :TȳC< WJy2mbfA>ơ-7e[v|G(ӧ 0|#+'W=h;m=hS.Q5p2j䂹>!SU=`U9$Q~%9;4QH,j4L݀r+ji_c<"Jf+ŬN v?B|KYv4M2O|[^=z+G79QN}a6. dpNeޝxĿ|\mx*5EL ֥Ulu@mi_"nX#${H]D}BTMI,(KE VH/O0ɝ)q@8[\˘r: + ~WAUi:e&ύ4NO!`ou@)0 uކf!'vd!0}NcKE7 _n;I+Af[Xtݾz,qFszNjo([+piS4co:IEOR-Fkڰ:ݝ꯱ȱF֠[mVewGW13cfHjJC lU5=mU=x`sDZ+z_*W$9fl㴲z~=/OW|;ksFdk)w +nKXHF&3# =@.k4=~}Z|87ӐU}vͿGo~`5[7O? tuA p;nspa\/Bl!8s<&E`qzrxfd?w)_lıLDPCfٜ3' G85C<; |vNЌ &?LY "yBECZS:Il 8$ {v+j3njB/^Sھq/$kxvaBfftEl2A'IϜqd,a ŸB323욣#$> }x!gRM&F? 42fb-3ut/O: IF!FAS8e'_``^ˠ|{Sc0d)<^55_K` 7`~ aXcN=^Mf0sS$e/bq"&UEL @"85ebûsx8yb.G j2`Ycs%Cއ;" AK,:qiKT5ثKo\{bq]zHFK.7a7߱znfF5)#AwN R.#qkp 0+2%6"Z`%.I$E5*v[kWbn4ޙr(9,Vg³ۡA߄2g*Sfy?-\F|TI8彥Edj;lʚeP~ +ڄAt9(p|sbcS$ޚ0Z}0 +)V6]pBcu^$Wu'|P%eO*Uڐ]Kw|0 g2(M=ӻ}4:.D+Qkq,@zg ]fy-E0 L<͑؂U/JSt cƺpt|_F~ΘCg~EAKG9$.ӽR 0CPrj3R/2]X*Hx'3pPJ9<*w9 v ,HE ,SSLtqڕ~ě"JU{EѴ|\2HlDU%Fܠm'W, ?uʫ\Y]<5qؾsĕ沪1 2BlR̪?F UgJ$R\S[9xP#H[ ҹӵZp9Em$(kb8gIu[,Z4#bK&f扆,FR.6Ƀ@r &S+C f}; Msl4:Pw_`HRmMij/%LkĄ>'ruAANn{:x{VWx I]?ɡe] ,廝drD~lx?3+㊈Eӈ5>nQ +ND HO,zV*y" ;tgDċXx2ֶyEt8|My=ExK!G9]d'nz%:϶Ļ/9|'&n>~5j{nݍΞ|.ٶmS=,V1tՒT^ym_߈!2%_@${P!ąl["GT?ro8*?IKȻH~}[1j%HDZvcVO6 $eAEj=}R‘Ж_K7e_nAI[2_F5?Er9K9!$hrz{ʊ_Ѳ^nD +ۇNܣ$/cHVp wCHXV0.$|vm|5ʃͯ7\Q] Imqy3T\cs?+ݺ WTsR +BRoܒlBQW6`?Ob Y,W-Mִ~4T]O0}ϯ"TE04mo PeŚk[}iB'$Ͻğt Ih5ew-"kPEa0Ab2a_ـIg^6:2:B9Z5jQwH$8K渒X0%39Prxҵܞ_v=45t ߹79 :o$<)%D# 4um D痿tѿ!7@>qkё=c5.G'>):!ˎ.5`>jǓ'۹$֨yPǒ,er(/-GJL=HXgٓJKΑ|u})Pcq I#^sbL'5Xn \ݢrRp{x+P{/-N АjOOj|\nöun0 y 8jM;H5RI#ABNk;X5_b%|39eqOޡ&d&{"/NJAU:Ga:>K!2,=ȇ\owl(Lv3EL@pF.|F.X-^8h <7Q#S5k=//H>] Lvo-.d0ےBnIu*yk7tžfp9o[ĦBfR+-SޫlɈNW;bEfO=5bEn Hs`3 s.jJcv}n [#6h af^0nmu6Ω$w[燣 0,sSEF{k)0->?2k*'BXU|r=}y} ?3ͷ mY#0~lbz8++=W`Q91"vmʶѱr_|o{=<~p$U E=RbNcxN,O}N`BxJ"N6aO4‹8>=Khy& -E~gq|2&6U q.PL~)5YHdZ i[UMN =#xN)0c[QCx7: EdU[i8={3[.",NƬ.-tO4xPlrf@ػbku4;"X0-_(a&P!JxhI,Kg+ɫD-"ۏus}])/wզydHPޭ"9bRm+i]/D-(]vv=]O9<)YZ,cWzX,5Zmo8_Z.\ ]Ul9ֱl"ѱ6mPoDr8m$q8p8j{tyI)V1Q.9}WJЧlm4# nK?`ou&wDB}Mu(]>}"J `}<`Sf)?=nH!nHuֶa_rvЀTW7pvCxAH6vLC^Gc9Exc}Ʒ7U<( -(-EGMB}) `1% D2~oȘenm~}=O-8M $ll]Fyn>#mDήQ#/,r14$t_-|x9<ЦNL _'::t}:,FG"RҚh3ɥf /U='uͤuk R%sհbi03S#H7UF}rYZļP'Ơ.2<z6qH7OC#9׆:>hjj\3 /p6?@d^砣R1P:8HÅ]"Y3ҭl,ojg}df2-LB,|0uҧfϦ]0X{l=2X31PՅaا,T4 Z<%H{ZdOsm:԰utS22tiD ->4HC[2!!{@,c!|G&L4t`%[d҃۵ܯГ`YK,t6՚wЂ`@%hYipaG+u}S5^m4Id>m#DvVg20H opiII6 0@Sn!wXZ}si\(*s;<ՇrT;ô2e~1d0+^H:w_w!Hd'TΏf%DPRJ]UpU$PܳA;]{ c%d-[GT/!_d%)'d"G>b۫` |40=+6f8eꌺ#U#poK΀}Th\_E7 \A_^q$}`e ֮=[Kp䭄y'* UZ gEvدp@S X, +t kCK,lPE #S%i׀3¶31r2ʔ +O{k8,܃#@[!8Ipk+L۴NqaZWY¾ZybmU`*6Xo1 -fJhؘLFal`%9BY 57nCC)w/*HBW 07dBNOQ}N}JY^s=8IeYz]P"9e/ITfַ͓a!;dF{[!w -RH&N=p_r&-QNybH?aV{{6-wm˴)xH46) =TȾգ$t2f*=C~h> ޚ#b71cpyGXS)> -e6+`&/4ώxMyaДK6<.IH;%jNYK*6,qWа%c]M[0cy ~(2JJJf6/Z)ѳ 5 FC']4?x@Z 1uu^$9PeGN=%}z -sxU`jxΤ0h fJrLv1u1N5qSijp,_-p mIq?.8j@ʟ1?V"Vd_ -gb|# ̾"rQ~RԴI.fΧ5y5&\gPaؠlv\UhhC!LV+=TY3N58R][O[ZGqxMsN:BUh&(D4Y$SCj'}?+)9)NNKcSbxy,J`fKn7إTA8RHؽ=m`Z~ZcAџ9HI|`p34VpF*yQ+-!S2PGB' |ON/Y$Ov)|72(r* AqF] J~/IGqR vu_nji -=JBf6u?ccC==ӽq >90o!gܵKC!2  o s7:]x!M~ȭc4#/`@)<}40.+ Lٙ1&N ɚ}U0a -)' uDYG}9`6%hC*5ِ{Aql|+n/f`4hQP58aq7d?s{(5*LM֞sFnϻQ3<}7g8s;=cp&! i!};],J}dR8&8[ zFq#YԞ OXbQӧp.Y[B;8O to&nEkCQV.nm``c+x4d]SPi0 ha Nwٶv=a?e|bTw -GQiM`K-ͿVVFһ˯E Ffvn>tֳ+\>[]Ub"[|͇|)~ACju߈"HnUlDzTYo3d嬐wgłt(l8vA_Qcϰ!80~](0-{JFmO|vfÍ0hǨUUW!{q[핇]Qe5v1]vGVVeZW˰u=:YmOHί!3ʼ~aIYہEBuX9r;j_|8!͐zG) s~_AOcyg_ǀE 3Hy| 4\yCCœu 6IwRMpƄR;n<! C~r#N%a|~!eBi//p HR~tOΐ,u@K2Rq>h"aNpXU?bᖧAH6mP !| 8A %A,iȢe #u<$-'b "^b%i&l9%z\3e0!^$1a eDd?b6H0fَgR^qhYVĻ0]pw;c_3c\4`j/oƒ ۚ bOcNV.jŃk?`;`^.-Ѐ/jC4]9%&gz+πs۞ȻseN ,[xyrMa p3pB:jDe;7K[1 /D+8h՜qnbjЪM@צkDj9K2fiZG+r_lr+?y,9+ȗ"%0"f>]M/cwvǩt(ax -T۰KW1;k1;Zt$ sV҆H+6 Sczr}NJ'7a] NJ؊ LI#j=x>M}!s -+8$rfRv(oKFƝMbNx^jiMj??pxG{0AejmJ IFovQ5 QS9ħ.V -h ^UM]A$V>EKћdxȧCcTJwsLX 5$T榈> &F0ܧxY':0./df1D![@ds}.Iq os6ᠼ@mLɮQA Gq殓$zm[ZVAcyԬ_fz*?T}+g8TR>CKդ¨:]D{n iԒ,[9}2-˾\Z_ڑ=\嘩J"Ux.6T -D_ߺ7\][=)A98%ܳtRQ傜jڛ,@xO&A}5:$Yi5^Zk]dRsbIexI"bAKMmPt SBBdmv9<+SO)O n"-ߵ}ޝڜtE\zKK]k=t!JC݁K}V\O -5ZQdJ\QihG隥[(a0TJbEju0в4w}*6Q8đTb`N@dpbp:Vgw5?95vgUD9TWT֎)}H_]%i8\ZRd| -'Tˇ])+ӑ=¤6=[6Wk['Ys/&]S3RymR)̾GM>Sz+)sJ{w>$I!H8&qwʵT\,bRi e!1`RQW,t&߆|wڨ튥!%ʷ&gpBfAHkBs,mH}S^,7n Vt]+!cܶ!@S'X>OK]}_GUQo6~8yp5֥BKM@{(uFi{U# -$[4tmzA0ݧm{]3DOŊ$},Lhufs8 hDF"aTĸp|HiP!N-!CH0nXİ\ 8HLBڥÂP_No>$C̾O+"U) 3q|&Й:v4 K8$p_m) $.qlc kضuϟq@y6>)/ ;~iu{0Wv .z靃"9Una>9KޗY7͋לJª?Ax#f6wfU.eݻS#kdXZR[obנ]3_(S۸j$mj_罃ILLHr^v)ٖ߮Dp~ZvW7'ϟ?!I;_yLy˭߈M]qD޸I}cBhc:%ltDBls҉šw'?!'Qǔ=9|7&A8ҋI"&`zc4R2̋c:!0MC|432"6hF㝄.R-"iJ8"b{|îTR~{cxB#NOJThfRN@#D^'x1~̄".d4i/[86Z`DdG=6a|wFA%s\AkrBQPuh1%\LoD:S!EY4c3^>W(8q,}14 | !{$p~cmb: Ӈ F>cgb1MCb FϱLI^;XM84ZNI3%I|5|f[Ng܇) 20u!bmdca %Gv"pbɧ;l;Y r"Mb̶?L~fXlI84>JEj!GThv,gCaGmڻ۷FلIyod[(?es8 k>RFw=3?xQl)Ӂ a{  l;"$ -tfIе>}DɲSe#'d#d-? -dKK}bt>ZH<f*}H?= رXȶr}nՖTy ~ -яE{vtW| ڔ_RɟOM28n̞Nz9ׯjM.NI)d`FВpdMall5i(O3Qѵf -HpeB!U>A%s/Y sm*qZn/A; ˟zS% ɨ+õ3ɀsS8}b{OQ -b |2Y(<s҂'t D[R_9Q)kM,h2$f.T`M1+nnbLF}, nUG5"BI @?/hܞ!jԯ}4^rDʆ$U!Ƭ*\|=u˗{e0c`7jI ߋՊjY+oTxpA}yxnH+^Vt9bK2IR9]Nhܩ碭rs, -  PqUC:@zD:|89]cACFD蠢sq*pu!79[`3 AǽMF&>I+SH@'b)tgfi -}\3U!W]>pH47e>^V!F 0uw$L Z [MүkDuI -!3;U9m.zdLD*:JGea@ih+vaaVEy4ERFWӨv6m0KGm}mZ1f5kh{ -J–Do 8Wo> -$/ؕC˘cւc2󏹲 -7Ek8Ê/l0mqǸɤFH kKQd&)>J]oMACjbSJR_"ŋ]8 iο^퀲]yvl!\v -&@beoTh줆 9-pRךlElK3;ޣt X?#e -Dh_ -@G1ȉd"Ml&!g{wap5Vmɔ UV#d}KT+`"MԝF%˷A.fdZB $A)yRw|MqեDM*č@ts5_=P;:Nܧ9bRl'܅)J\^VQS,*iAy#{/F  9 r>́14p9Rp+ul- LQ@3H._|}WS_ktD3h)Qm h6Q0F;i4u. h,V9窞;5.:aapGy5sֵla웆!Н8#<;Nj,!g'՜cv\Β<%zGhZ}a}Ⱥ{`"ʡʼD J@N  nxmZ[2/ԑ4D z;Fe;VNB%mrho=L:PGHiBʎl !\D_Us,Q z1|e3`+ B~O%l[q`7's= &agϨ6^=w6?ljֿS]Bu/:عIbIwpdGu7?-8 z1"6E̞{ȞFfwe~Hl ˑ*/ a?@4u$Q Ӟ?|v.5+?Jm]t^; ڊb;Ƿ?DкLwr"n uwa@^j[4#\vkTRFڡBDIѥd a>'K.jý-IN_P b[e0e/Hu)Qhqae܄N#*>wC@<>^y$AR-"`҅w ap<"zAە|z2Sv$  -qJT;nl6VHn8&q*;C9ƤfVv ]V vNS{R~TM0| Uhc_DJp;icR<3%ɥK_.jj՝p4S`fKRuu[:Ô"G~0sy|M򗪲+Ѹ >Z,}햋j|O|}rz!,f1hd*9 -NΗ>\FdQIR".iTw8+o{|/`'i-~T@g; %|9qp 1ut@&0I:t͜.AjV$*9}K ?un`*\Yns)F#fsشupIC*ڥ,/EU.ld5TɎ?e]©N♷; _j`V>Cy`Q Qj_!o& BW  ]*/#Kטr5Wv -j_b3CMa77bse+$Ր虯 q׌vӆ lbaA|\BK+9!ȃ+M֬˲[k|J6Y -<ܭijʷR9 *vMT?fhH*q+=J+wb.ũ[^I&ڤ!p3ZEI]mA]{ -ĎKbx5o'JԗۚEpB,ZnwEѵefd[#-i:iᾧ{vPǞ"=Q|\{p׃:זXE4`jcX?{|>U X›%\zCeuK=ز_zM|ˣ;;c EQUCĔ5lUbHv ?LHFJ׳`tCX'$O!;NH$oKh)/ -UӃEfh2-+ja_j-MTX 6KPّIO㵿Vf{7zQAN0{Q<= qArM6k[k!i"^dYkΌ~⑂ǖmoRtaR*<=xF&ȁ^P6}F6BGrECgmA&Ap׆fSC^[8X~DX(D􉺥JHgO/\+yUc l1.^v6' ˩C…jbl$B<®D oēvcB2Tӧ-ɶYScVGRn0+% 7!c dvh&i6P4̼Y8>Q`B-H.=l56<%Xa#U1s5 x +E~gq|2&6U q.PL~)5YHdZ i[UMN =#xN)0c[QCx7: EdU[i8={3[.",NƬ.-tO4xPlrf@ػbku4;"X0-_(a&P!JxhI,Kg+ɫD-"ۏus}])/wզydHPޭ"9bRm+i]/D-(]vv=]O9<)YZ,cWzX,5Zmo8_Z.\͡ \nr"c{%٠-Ecml'I(pHpp8׏# Sݭb8]r?^>;QC0ȯ6. iD;68nw](|С˭Y&G/^ d]L6-=F=ili☺d ʎ? +|"iCw).R`rwQ 6EmM K "ȇT Yކ} %Cں;@?DR]m3g K!1 ={UREPV0?(x+ ~" 4 ]h3eĔ$f~.w$KhH,!cYBt/?q(4.tu19F gkC?l2 |Z~fjBl@:&sC3M23~95Gp̚3LKJkKid6&1WL5:֭)JHU҇j ˜L#NTR%gmjBLLDKā#ІjV< r#\Fq4~_zJ@ vgcde.LKFgf' 04~KZa,>vW`!@Bltc͌k`C#W|aPS&ph iqʒv>ϵP2M\MW*H^l[ȹs -D}|B\,_"~63>mm޾8Tvw{s,dӭ݊j-zV i я3sD&kEM& 6vE"³)f ILx$9$YQbD E%&ۀhMAF;ai IsAʣhRB"WQ^DȔffxO;# }Vקi#]@zR:?w9WDsyn>q&DJ[JXژ ┩3꒏WqA/M;Qq|U݀pY|y đ&`Z0_?n-ipbÑETiAe3c­M&'`Flȧ''LЁA-~&C zRFVL!L9_"#bȱ˘*S<Dr<m&%0E`c2}1)gYr԰ =ܱK^Vx  +]/7` 1C:=GA +:˦)e-f{W%J@t&guA j"JG7^'S)5OZ߆ņx2ANloa򖷆N*O*K!8Kt~ +&Ga8y;"iYжe-Ӧ\^#$D&ܞS!V=4N HK +%\xk9D(B/qmN cM}@+M ٬<ӬZ<;"5)^BS.P$#g#o 6+9f-ݫHK'\AÖU^w7n|(B- +p()m++ټTk!D240 Y8lwmiyLPlyg@u^꫷oN;=tM+qU{{c1[tN^+HJ=xszћ7YYEm82 + +Dq/c\-_$*t,SC'T\+4Gb xHB2IiAQ!`!yZ"E!YT@,ib'))4Y )ӆT,^)#$KDVT.4Fh*pځdF(6KM"usZO. +G((SЅޭD)"վdGsA6:,۪&^aB5D#L5f"A n +2J&K$#LqRDiЀ5m">CߔʫFSI8Uxk y{7f6p|~=a960]Wq>!ZQQc;!}NGK0 #5vLFc (Ec!v8;3$`!Y*&lsY!edH1 1{0#ӿ/"1>мmCE>qq?y8\{-Zq # +#,ǣ{nEE޶su(.Ka:գ3I¶%FE=Vk_3b-XOU[#)}]4V=Х~}É|e[uj0ɸ\D苠cedhgnƾ.3Ҍ N['1HY@8dž4鐋AϮ@RH)MG-gc=AѸ_YԞ OX'bQӧp.Y{p{I +u7"۵(^x+c׶YNf0]boNpwM) R4zi[eAk+]m8]ϲ1~O/X(EѱDϺ[#Uwp8M3 L?JhBVzva^ν-ۧzvkUr˿Jl>XrKק7C/2hh7T=;aqYiwmj _hׯ*mtҡroX? '.2t >w0B)QlhK2Rnko|O7nA 5?zZ[Uxr^yVlӵ;:jwdk`UF 8QyuE {*~SY[o~ϯV. zNVD8f(8"K^]/98`O6Cr8/nwG޾=0MvixsǏ~&xg _!m=@hg.E "$8hB~-O`Vkql۠@#BP$~q..QK)lYӐE5G..x(tI&f[NZ'YEJLٲGXsJ$$)g69aBIb:ʈd&l`2Ͳ)P7K)2ѲwnsRw KfΌLpрr̳smkf8.>]x9Yy6>xF+0~_:yLCLZ8bhX顤gKjB9\2+aunz 8G:,u3+Kwirk83ݩ=@`|3e)=F'@2JstG=b5wiLM`nGs%fRXFĬy}Y_w̿c7JNJKE ;Q>wFL03ʯ%G i-w9O%m舔谒k0>GgqxpQpOkFEMP48`΄A?⬖?=K7Mgcؤ2'/1C"`v,e[n(ymk)/愌祖Tan0 AcZR|+gϟeٗݫ \TY;3kiT +:eCV[k˝g22%H#0[N0 +Tº\BM@{%)3S$+7M;K aL\jRpnД|B, 0PY{^,})]ʐ.{ΣcJhV^H#~O9gEq*~)iSyzְݻS󏮈Ko|)0KyǝN5Yi;pɕ2OjkIF+=J,W)+=j6m(]tV%JIHQR;=U>ZwOC&jt8*Zl NL4{ҽQ@uJ>:ƂnSJv(*21J? +oR +߇е[SϵU+EƗpB=A|ؕ>C.Lj>3lsqu+du5lbھѵ;~<#Xz ;~397g=ABDzlrwi LX~g?iq\{&ێ -Lu.P9Ų*&Px +JS&e}Bgmh[a'8})hm-FOlXRy|kYT߬4I}MhޠMo*Ջƍbъ_b6d 6DC^"*])wK.oUn8+EN&AM -6YrE* +٢%"CZneu%̛7?.W]o77ѵI_n n_&e .ڀF'_5%2/LuΡ5jFuQgJWƃyݿjT^lMf$C̾+"UY8>DI~Ѕ%O-O'\0 + +8&̧˜;RN=L"g툂')gV?"A$] +G(*L FN8r5XqV <)Gn[ሕzbVS B6O5@sZ ևufNmnӐ[:hgm-)Yk TWy'nmf;i[,wYgLk7qBJq&<^ܔAģR?{hdp.pnC ' 0%!GwFg*1 cWGvawg~3*γ1Oy`!cOp觹J&wCL vib aS}mu}7_[;j u:Sn0 Mݽ[JSڪʂ["9Ii(e!exxR +$;V#|H5y~i\\1 1<6$~q.Y820R w͆1a%8wW npe2ag%/`E!M(o~s6ۍBipbbR΀OV΂ =*ES?KJOXs+MNb/[F5ֶF%>>9KޗY7͋לJª?Ax#f6wfU.eݻS#kdXZR[obנ]3_(ko8{[dv+.Ul^KnH CD-$~3D2NlCbp8/R~bd'9i;I} /wvr+b>%3׿a7.|w~ߚҷ8ژF4J[tEq.c/O2I, eON= oYΣ& mXǃ`s,n:V}&;CֱorL`?$}_k9جaJ cG]coYXvkXfg Ȁy9>2])."<0Xk54rjnmw8200o#~1c$tpڣy=:9&ywmsj>m&m6ahb?`A7|>qY=G !Ԁ&~ ?!^[&xdsX3(8aێ <Y3wfmbo}lTkhc?0g:7ρJDD}=j%Owƻ;t)n+v,p칻=Gy[F4UE#Fс!]NT p͂j-_)L*ݴ%Rc7l/V+rje#R)% 9]s"ھ d{q[p&HwwW:SqgRY3+T fJWU 3SlOX9CFD蠢sq*pu!9[`s AǽMF&>I+SH@'b)tfo +}\3U!W]>pH,e>^V!F 0uw$L Z [MүkDuI +!s;U9m.zdLD*Kz04@Z;00+~l2 )iT;و6mOvZ-gY $Gd{ +J–Do 8go> +$/ؗC˘cւc2\Y٢5TaT6Oumx 7u=h6|i`I?$6ŧW] C4M)hHMlrT A RX$q׿x/Gd!ӳ8m77P+O[`47;$ݓNPc;쭊"-07n[ZsHmibf{N|W(3!((9Lę?qٌ8l4.QƊ-jWY}\#{U +99XHs$8sgQmjPKY!P3+@P +%pԝ\p;ȱIvY傸32xr&t1crOWxd94ɮ)>x5fMG4sVޖKnnCFS7ha€jELsZCB`V|Wy$@[Y]Ͼi K<̳vrvIK^/$fDž,ɳ_gxԉUg6n쳕HvD%.iWU,mU'LPk}Johw8mڑQ@}y!J A7*sser-i$ECfׁ:FJbVvek]\I"McJfЋ3R([1g{&x*!Owdeޚ04?F1 ?v~F?D]FP?N{c&U#K>8|gm%AG_ЛǍ)btCt4b 6+cF`#X`YPy$``g-K76]; =pW]qQjڠ;߹];!UJ]G qg% *WV+mܢy[j2Z}"N.%+ I=Q^rV[(b5Y~z!u 3Ip_TuQ[M, 7d) 3uI4/%r#n??/]!x= _$X/ivrg'3ewLk =PTJƖlshe+Nc"3cL@a6jmg +eꞰlW;'EaGwX知mf/=iE+7oZ0&M.:S\2KqY݉j 'LZ~`|jwIГJgRHߐWfNtoHRUv%wVqާZqQXO9{HNY/$,L%\cҧH۲auw8j: t$vgf] 5MV%cl9x\0[inw9Ylں͚up!SSszSVMRmKO*6Pdǟ.SZ@[|gB/50 kx NqGMSLtw +45; +Xy[hH ߧfjI*q+=J+wr!ũ[^I&ڤ!f4 ~ƻ,),4zcrsU$Ò3۟(R_n~Q12hM^^ F6W͚nȦe^T䲦*gӯn vJB:{vHDsm} +t\[bҀaLgQSTcCp +oVp/`~Y5pE,MȻ,O~EU StMV!"&.0"#[)b~̃eaI?֖8!%%/W|"V͏D2CiYV R{heb$_ʎtHz9$(>2)'QAN0{Q<= qArM6k[k!i"^dYkΌ~⑂ǖmoRtaR*<=xF&ȁ^P6}F6BGrECgmA&Ap׆fSC^[8X~DX(D􉺥JHgO/\+yUc l1.^v6' ˩C…jbl$B<®D oēvcB2Tӧ-ɶYScVGRn0+% 7!c dvh&i6P4̼Y8>Q`B-H.=l56<%Xa#U1s5 x QL7Qe0)D36=SX4F5,+P0ܐ@4WjZF׭+qF -bݖ  R(&1:iMCe{,O ''yuWAxƚ&;;"25\´K&Un\)SnhYkfp%NwyF0$V>Q= ni'wn+'6O\f^c_,3(N[ E>9fiG8E>EAއYgEQ-k;e?T"5*bw],x?Xmo_qZee\$+mim: 8٨,l1 -Zo 3g̙|^۷R7]a6iӇ}8};Y"ɣrIx2.C@0LH=x3W"dEe IHK)(JHl"8JlE4K|FieN4$` 2A ͣ<!-) -qς?Xq>GM$xT"?ٸotZ8ICZ> g`>T$ͣзHR Pƪ5 y\d5Y **,C%a:YETAyK!R g"^BRR|Ps(Զ7 a|ZĴbT/T'e:ŚI:_#_ b0:P\& iц9=$ĀZ#Í -,Xi&A\, }W.*WBy]|3 aDߗ?594ȽI/Ev ^A .jF#Z8 qht9ʪ#>}V6 ,/(ERvL`L>%UNu%єQ2ZULiC]+e3%♾[كo̿&bi{_OV z|-=&s?6x-tT2XuR-Zyџ4ʱն?cU CAxejQ툫 zʢ:t~T;F5ȕ̗&HWnL(y&+rs{Z-?qF\} -S0M˜8TB:VٷDV)<.ꆈvo m`+g>pִO=V/JFE;/f3{:4ES(urtBdvlyŪK$X6@筘.wRPC5K A_d[(o_kQD/L(P"BF˶(Ntvfk\;9!K򧍌Tp+2E8찞Q߹TjsAE sR=:ng\'9x"Nc{K0 Yg=Sn0 + @4 YK^דCX+6lg."GzK/jܦPsOG0%@s Ub*$ˈi*{@AaX3%֌#c6bK>MD ߱TU5,a/,M!/YZ#mOrzb 9cH\I <$Jb$M܊[Z|D8וLkv cw{Fm[V˲V5s<ˉ̶ -s~&,v`#fs7ffd48t2އ1n%owڶ!6;@̈́Һ7D5N+H8<'t;f|*S3rdVPYӴM -1D-,/PN+Lp݄dܿSYv1F6wXa]@\4Pe m(>o#Ɓgr&oa,l+JnYJI 2CCZ~l:$Y-TFZ~Ugy-10 EwdLŤ.q;%/OOzC3(=dיf/iu''x֑ bq}߮1{S(ZlɌ^IkwXmoH_1"W4[a+4UuKrѩY is]>԰;/<3;ŋzAtE7iA^zW!#K$ b?&">?.Pgm#Ii\fw2<:o92"e IHe.)J(O,je%~@4[:G-M˂Vi-g:3Ik!. -P}P&azRZE;rJ !])|e"㭆$-@5HS l8 ;5h%㟠/ D@?:0 ʕL -Ezc'K -V~!ȏMTv+v)]Id` -Kv^lYY\H$%ؔ\3J IM$ʑبeqjh5eeu݈/JBV$Xޕᘄc#sDkl4׎{4dLFXx< CuxgLK1j:p3Ǽd9rg3¶Gyt>鞑ekp: -X63W0lKLHC@j@{'*fe;lPjlbiVL ^[^ -&%.] ] r2r~eWIUκJ-s2FUIQVp\ߜk?H>VNlZKLM Dct$W['$VRf4VQӑTQ{pK {a%w <%)jȿ%OPN/}Bq=e,BC 5xOG\vD2?^ٞ况wԫ{gdQY >,51v\hY&+Qe'GN>($)NOV7g[G<^o'q%SJoՁXH6Euڎt5e!0ŨUKNo`8^?'L/1QO!]eKbO4TUhiMi=CS ^r\*\yB5+όCOt*6\iJ(?y+|u񨐫uB\,ş*N~.GmhIZ+?]͎aNOND"|> ?LJ=:mg?HYZ8HWk||^e<~\X|އ 64k6#0ӭu :ffas>9-^/_71LNNf+͟CJ㵆8ƍv}uHT,ly6{O!JH{l=xO(^*IZ#;KZq9)𷧩7oZO ܴT*.֖m1CLQz|t$ +m^5 C5uF[#X@B.j w(-aZ&%T}Ta(enwfcOƀ/a+wK!yOCwfs}{;PJ.Z\{"UU"8%zQ3N0 } -&Fw1$$*&I&!w'ҵKvo塌/Д\ pH:|Fȹ1J' +T;$$Ec6ۯ(`u\dVKGnFpcIspK ċV=CRSJ ˄V^ 7S7 !F ma1C}*1T!3BHi]ŜVp@{8,osL;6adO3_Va]nJmX Oz#KaUXzq7m'gfQj07tp ݦҡK8d0tIH'hi=% -yCܽw'=5}Kޟ}8~rZҨi5}?uB~ܪ"Z68u!,J6lՖ.h%5ijriGfe5O4WB;XV--TQ<3N5Ym+ Z6,h?XUrUYl?p|SwsU`Jf n೙z0Sj\:[DBXꓨȜWYͮ{Aϯ(V`?B嫅[!}P,>ž)5ZٔYc7"b:[HCr*kkL>ED3iɺ@4^ JZ[Q4!#ؕ^%֗ZS(ޣ,sA"Hnܘړ8>i4$#/Lc~9Nh>0(M" qVy~1Sb&1$D ΄CΪI=zUUJPIq˭g?bC?W/G^9j-)#^ϕ[߽ _ٌtN0q_4+ -Tp0gO8w^ߏmJ@y9Т5]!PjhzD’ a7NM鰇͟onE9Q= ni'wn+'6O\f^c_,3(N[ E>9fiG8E>EAއYgEQ-k;e?T"5*bw],x?XmoJ_qZee\$UW-I^ɍf`\k1~X>0s9oϜ9lp=u*g9i6oddN$O"%x>cR2!E,\!0yy&$!-(!.P#( Ml.uzO90F7-D6\(M> r`q%4I0R-f㾝ia$ j)s0qSE4&B""I1@jD,IDsգd,ī hm|r.\% +'[ +A.(69* +P˶&\5V&vZnXc5V4L:xHB욧u`PXGH 1a^b}l͘ɚR6xXyΕo&~:wVQ&uk]t{a0jV+7 ?yd05l2=,,Z';>[ˇ[rt7x4:V+˷Y40\[ Lbw{֭;9Oi~pz1akpgfg/w]ufOC-Cg{YPϸ5V X-Z5o窀ϷoҵT6<ӽwA}SzE<EL3,ggپÁo9vAG`c+<}`lJN7&A,L!]* 툱_qlo]vY-ls-嬵,r8T2aBy]+2zw;.Yzavo6勞`< +~24˹`_?ɾn/|5FM~䍪\pD?%e1׋21Am[y I.kP,:(FE+BzFY#Yٛ<0$V 5jB (6mcLh02x_΂n"xUr_-T>3}@c#٧0 &1x95hL&ph$YH/F*y#oZۀ^~nywK[B21&U5;ӎr֕DSFhV%s<3VDv|/n% lhd1[-KI>Zb?;n)I_n4ƫuo1yǪ:n!=u݌lAW}?X^0N8akϯW\nEю,J#)N\Ni ^\|9nb(_qV{$q58,cz-赞 JQqBhabccQ߉rk''dI񷱕jDǟ3;W +Ym.cdN'R`=PAd~i,\}o a;7lr>|_M +1D-,/PN+Lp݄dܿSYv1F6wXa]@\4Pe m(>o#Ɓgr&oa,l+JnYJI 2CCZ~l:$Y-TFZ~Ugy-10 EwdLŤ.q;%/OOzC3(=dיf/iu''x֑ bq}߮1{S(ZlɌ^IkwXmoH_1"W4z.I1>I°NbpyI.:3 ;mNˇvgfg[zu@h -7o~}_IOʬ靏O8XۈcR9e2ٽ [ ȢEYDiB~RK2 ZYD=2VNQqGi~ӲUF(ـ6LZf(dH,B<w~$q%I^V8qe*HCHyx +`٬Hya*I(ze  i;N*x b?ZhKц%O5Lr%B B _,|8 +DFJe%X’t+[i7@V#-$"II&!6% BREr%6*FtY<cMkpA7˸7.wm8&yWbdhpMcƶ52gcpy d;$.=8p'LW'1Z\M#K\ +W=dӥ x5ލz. {V41/,qaN&lZf_#\kgJUrUjI1 V%FD]>Xugq~s2>+X8qj/q2u^6Q>m 4&}\!#WlȒ;JހXEMGRkPFq-1oe+3f%D#Z?!C:QhyN +A 6rIlw{}g{S~m?]G}g5F ,7pZ"'X_z|:68>1n;N2ϗOAZ##(2>|_;|/VIng504+ïh bc$/`1D|<^ks|`JmW'D2qΆiiփ:5RtJ83K{z5LMK8MZѾ^gޏK9/iD+ƐOp̏paRBJ*NFH،(Y?F~g6od 6rtK9j;4dqWm6gJ7 u"h,>My0?ߏ#%[6Rȯ[Ud45RQ'.$EۦRՔ&VM.ȬYhTcժ*ygpFR6meAF=CGSYS4k]oyjR` +Z |6SfsVmKgH+5U5X}u*+uo301 +lGr^|uk7ŧ7Y+2vsZ}CYZ [g iHTez#b'Ȟi&MA"YkZIkY0JX;ռ}BKTkcJ^{%c.HDɭ3B{G7g>dEi̯ g 71&1Iww// pJ$fBPHa™p^pڲ u{rAA +):)¹5Ɯ&ݠypgVM+ew73рN6^ &_KfE*uy4.~mJ@y9Т5]!PjhzD’ a7NM鰇͟onE90֊2q8YVUW5.5-^sކȭT?{ǥ䱜߽bsvX`<ۦ%0},ryn[FYw&X8&b|5,/hIPmJ0s!l >.Z Ŋ Ld;t!C9sz wSIW! .S^8#41|9pʁu4n-igi.2r]FÏ@t %؀c63ZS;:,-*y^+,yr}_hvC7ǧ!<~dwT6l|ۋ0fz8j<:[_hu9^G9Y%~mj0 y vH`K=6= &VRS[wliÏ>IݱK xT$N5G1D @@ -935,5 +925,4 @@ Ŋ Ld*;␇K̽aru=hJeI_ :S}G'w: a@Ld4E(aiX~2)km*ݳ:-O3.OT%z؁ff :Ήx%8,+Ӻ.adv?=hMzkrmRmZ߉QaA :'t&6.򇦨Y uA -@ Es\@@BQpgCh8PSo{?벆T$OBXiYP|Q~3jfK3,n>HAԀXH) q8HAԀXH) q8Qtz" ѨW;Zn㳳PvBEů8r%GBMB \ No newline at end of file Binary files /tmp/tmpuof1oriw/UeG3mgzVlg/phpunit-9.6.3/tools/php-cs-fixer and /tmp/tmpuof1oriw/qjy5DVCWs0/phpunit-9.6.7/tools/php-cs-fixer differ Binary files /tmp/tmpuof1oriw/UeG3mgzVlg/phpunit-9.6.3/tools/php-scoper and /tmp/tmpuof1oriw/qjy5DVCWs0/phpunit-9.6.7/tools/php-scoper differ Binary files /tmp/tmpuof1oriw/UeG3mgzVlg/phpunit-9.6.3/tools/psalm and /tmp/tmpuof1oriw/qjy5DVCWs0/phpunit-9.6.7/tools/psalm differ