Export Media Library - Version 3.0.1

Version Description

  • adjust syntax to ensure plugin compatibility check can run on older php versions (eg. PHP 5.2)
  • removed dependency on ext-mbstring by allowing mbstring polyfill to be used as fallback
  • export zip filename now incorporates blogname and utc date for better consistency and organization
  • clean and end all output buffers by default to ensure PHP doesn't store zip archive in output buffer and run out of memory
Download this release

Release Info

Developer andrej.pavlovic
Plugin Icon wp plugin Export Media Library
Version 3.0.1
Comparing to
See all releases

Code changes from version 3.0.0 to 3.0.1

Files changed (33) hide show
  1. index.php +3 -2
  2. lib/DependencyCheck.php +0 -13
  3. lib/MassEdge/WordPress/Plugin/ExportMediaLibrary/API.php +6 -0
  4. lib/MassEdge/WordPress/Plugin/ExportMediaLibrary/Module/AdminPageExport.php +15 -1
  5. readme.txt +7 -1
  6. vendor/autoload.php +1 -1
  7. vendor/composer/autoload_files.php +10 -0
  8. vendor/composer/autoload_psr4.php +1 -0
  9. vendor/composer/autoload_real.php +22 -4
  10. vendor/composer/autoload_static.php +16 -4
  11. vendor/composer/installed.json +87 -23
  12. vendor/maennchen/zipstream-php/CHANGELOG.md +9 -0
  13. vendor/maennchen/zipstream-php/README.md +53 -11
  14. vendor/maennchen/zipstream-php/composer.json +2 -2
  15. vendor/maennchen/zipstream-php/psalm.xml +55 -0
  16. vendor/maennchen/zipstream-php/src/Bigint.php +4 -4
  17. vendor/maennchen/zipstream-php/src/File.php +8 -11
  18. vendor/maennchen/zipstream-php/src/Stream.php +0 -5
  19. vendor/maennchen/zipstream-php/src/ZipStream.php +8 -2
  20. vendor/maennchen/zipstream-php/test/BigintTest.php +3 -3
  21. vendor/maennchen/zipstream-php/test/ZipStreamTest.php +26 -0
  22. vendor/myclabs/php-enum/README.md +1 -0
  23. vendor/myclabs/php-enum/composer.json +3 -2
  24. vendor/myclabs/php-enum/psalm.xml +20 -0
  25. vendor/myclabs/php-enum/src/Enum.php +40 -6
  26. vendor/symfony/polyfill-mbstring/LICENSE +19 -0
  27. vendor/symfony/polyfill-mbstring/Mbstring.php +847 -0
  28. vendor/symfony/polyfill-mbstring/README.md +13 -0
  29. vendor/symfony/polyfill-mbstring/Resources/unidata/lowerCase.php +1096 -0
  30. vendor/symfony/polyfill-mbstring/Resources/unidata/titleCaseRegexp.php +5 -0
  31. vendor/symfony/polyfill-mbstring/Resources/unidata/upperCase.php +1104 -0
  32. vendor/symfony/polyfill-mbstring/bootstrap.php +141 -0
  33. vendor/symfony/polyfill-mbstring/composer.json +34 -0
index.php CHANGED
@@ -3,7 +3,7 @@
3
  Plugin Name: Export Media Library
4
  Plugin URI: https://github.com/massedge/wordpress-plugin-export-media-library
5
  Description: Allows admins to export media library files as a compressed zip archive.
6
- Version: 3.0.0
7
  Author: Mass Edge Inc.
8
  Author URI: https://www.massedge.com/
9
  License: GPL3
@@ -14,7 +14,8 @@ if (!defined('ABSPATH')) exit; // Exit if accessed directly
14
 
15
  // ensure all dependencies met before fully initializing plugin code
16
  require 'lib/DependencyCheck.php';
17
- if (!(new MassEdgeWordPressPluginExportMediaLibraryDependencyCheck(__FILE__))->run()) return;
 
18
 
19
  define('MASSEDGE_WORDPRESS_PLUGIN_EXPORT_MEDIA_LIBRARY_PLUGIN_PATH', __FILE__);
20
  require 'run.php';
3
  Plugin Name: Export Media Library
4
  Plugin URI: https://github.com/massedge/wordpress-plugin-export-media-library
5
  Description: Allows admins to export media library files as a compressed zip archive.
6
+ Version: 3.0.1
7
  Author: Mass Edge Inc.
8
  Author URI: https://www.massedge.com/
9
  License: GPL3
14
 
15
  // ensure all dependencies met before fully initializing plugin code
16
  require 'lib/DependencyCheck.php';
17
+ $massEdgeWordPressPluginEmlDependencyCheck = new MassEdgeWordPressPluginExportMediaLibraryDependencyCheck(__FILE__);
18
+ if (!$massEdgeWordPressPluginEmlDependencyCheck->run()) return;
19
 
20
  define('MASSEDGE_WORDPRESS_PLUGIN_EXPORT_MEDIA_LIBRARY_PLUGIN_PATH', __FILE__);
21
  require 'run.php';
lib/DependencyCheck.php CHANGED
@@ -5,8 +5,6 @@ class MassEdgeWordPressPluginExportMediaLibraryDependencyCheck {
5
 
6
  const MINIMUM_PHP_VERSION_REQUIRED = '7.1';
7
 
8
- const MBSTRING_EXTENSION_NAME = 'mbstring';
9
-
10
  private $pluginPath;
11
  private $adminNoticePluginDisabledMessage;
12
 
@@ -25,17 +23,6 @@ class MassEdgeWordPressPluginExportMediaLibraryDependencyCheck {
25
  ));
26
  }
27
 
28
- foreach(array(self::MBSTRING_EXTENSION_NAME) as $extensionName) {
29
- // ensure extension is enabled
30
- if (!extension_loaded($extensionName)) {
31
- return self::checkFailed(sprintf(
32
- '%s plugin requires the \'%s\' extension to be enabled in you PHP installation.',
33
- self::PLUGIN_NAME,
34
- $extensionName
35
- ));
36
- }
37
- }
38
-
39
  return true;
40
  }
41
 
5
 
6
  const MINIMUM_PHP_VERSION_REQUIRED = '7.1';
7
 
 
 
8
  private $pluginPath;
9
  private $adminNoticePluginDisabledMessage;
10
 
23
  ));
24
  }
25
 
 
 
 
 
 
 
 
 
 
 
 
26
  return true;
27
  }
28
 
lib/MassEdge/WordPress/Plugin/ExportMediaLibrary/API.php CHANGED
@@ -28,6 +28,7 @@ class API {
28
  'add_attachment_callback' => function($value, $params) { return $value; },
29
  'add_attachment_failed_callback' => function($params) {},
30
  'add_extra_files_callback' => function($params) {},
 
31
  ];
32
  }
33
 
@@ -50,6 +51,11 @@ class API {
50
  $compressionMethod = new MethodOptions(
51
  ($options['compress']) ? MethodOptions::DEFLATE : MethodOptions::STORE
52
  );
 
 
 
 
 
53
 
54
  // create a new zipstream object
55
  $archiveOptions = new ArchiveOptions();
28
  'add_attachment_callback' => function($value, $params) { return $value; },
29
  'add_attachment_failed_callback' => function($params) {},
30
  'add_extra_files_callback' => function($params) {},
31
+ 'purge_output_buffers' => true,
32
  ];
33
  }
34
 
51
  $compressionMethod = new MethodOptions(
52
  ($options['compress']) ? MethodOptions::DEFLATE : MethodOptions::STORE
53
  );
54
+
55
+ // clear output buffers
56
+ if ($options['purge_output_buffers']) {
57
+ while (ob_get_level()) if (!ob_end_clean()) break;
58
+ }
59
 
60
  // create a new zipstream object
61
  $archiveOptions = new ArchiveOptions();
lib/MassEdge/WordPress/Plugin/ExportMediaLibrary/Module/AdminPageExport.php CHANGED
@@ -35,7 +35,7 @@ class AdminPageExport extends Base {
35
  if (!check_admin_referer(self::FIELD_NONCE_DOWNLOAD_ACTION)) return;
36
 
37
  // create name for download
38
- $filename = sprintf('%s_media_library_export.zip', current_time('Y-m-d_H-i-s'));
39
 
40
  // set folder structure
41
  $folderStructure = (
@@ -113,4 +113,18 @@ class AdminPageExport extends Base {
113
  <?php
114
  echo ob_get_clean();
115
  }
 
 
 
 
 
 
 
 
 
 
 
 
 
 
116
  }
35
  if (!check_admin_referer(self::FIELD_NONCE_DOWNLOAD_ACTION)) return;
36
 
37
  // create name for download
38
+ $filename = self::getExportFilename(get_option('blogname'));
39
 
40
  // set folder structure
41
  $folderStructure = (
113
  <?php
114
  echo ob_get_clean();
115
  }
116
+
117
+ private static function getExportFilename($blogname) {
118
+ $name = mb_strtolower($blogname);
119
+ $name = preg_replace('/\s+/', '_', $name);
120
+ $name = preg_replace('/[^\w\d_]/iu','', $name);
121
+
122
+ $unsanatizedFilename = implode('-', [
123
+ 'media_library_export',
124
+ $name,
125
+ current_time('Y_m_d_H_i_s', true),
126
+ ]) . '.zip';
127
+
128
+ return sanitize_file_name($unsanatizedFilename);
129
+ }
130
  }
readme.txt CHANGED
@@ -4,7 +4,7 @@ Tags: export media library, download media library, media library, export, downl
4
  Requires at least: 4.7.10
5
  Tested up to: 5.3
6
  Requires PHP: 7.1
7
- Stable tag: 3.0.0
8
  License: GPLv3
9
  License URI: http://www.gnu.org/licenses/gpl-3.0.html
10
 
@@ -26,6 +26,12 @@ Allows users to export media library files as a compressed zip archive.
26
 
27
  == Changelog ==
28
 
 
 
 
 
 
 
29
  = 3.0.0 =
30
  * bumped minimum php version to 7.1
31
  * flush buffer after every write in order to avoid exceeding memory
4
  Requires at least: 4.7.10
5
  Tested up to: 5.3
6
  Requires PHP: 7.1
7
+ Stable tag: 3.0.1
8
  License: GPLv3
9
  License URI: http://www.gnu.org/licenses/gpl-3.0.html
10
 
26
 
27
  == Changelog ==
28
 
29
+ = 3.0.1 =
30
+ * adjust syntax to ensure plugin compatibility check can run on older php versions (eg. PHP 5.2)
31
+ * removed dependency on ext-mbstring by allowing mbstring polyfill to be used as fallback
32
+ * export zip filename now incorporates blogname and utc date for better consistency and organization
33
+ * clean and end all output buffers by default to ensure PHP doesn't store zip archive in output buffer and run out of memory
34
+
35
  = 3.0.0 =
36
  * bumped minimum php version to 7.1
37
  * flush buffer after every write in order to avoid exceeding memory
vendor/autoload.php CHANGED
@@ -4,4 +4,4 @@
4
 
5
  require_once __DIR__ . '/composer/autoload_real.php';
6
 
7
- return ComposerAutoloaderInit70c1bea2cbce529378170e8f3fa2903d::getLoader();
4
 
5
  require_once __DIR__ . '/composer/autoload_real.php';
6
 
7
+ return ComposerAutoloaderInit2f935c889239f09e679be069f42693f4::getLoader();
vendor/composer/autoload_files.php ADDED
@@ -0,0 +1,10 @@
 
 
 
 
 
 
 
 
 
 
1
+ <?php
2
+
3
+ // autoload_files.php @generated by Composer
4
+
5
+ $vendorDir = dirname(dirname(__FILE__));
6
+ $baseDir = dirname($vendorDir);
7
+
8
+ return array(
9
+ '0e6d7bf4a5811bfa5cf40c5ccd6fae6a' => $vendorDir . '/symfony/polyfill-mbstring/bootstrap.php',
10
+ );
vendor/composer/autoload_psr4.php CHANGED
@@ -7,6 +7,7 @@ $baseDir = dirname($vendorDir);
7
 
8
  return array(
9
  'ZipStream\\' => array($vendorDir . '/maennchen/zipstream-php/src'),
 
10
  'Psr\\Http\\Message\\' => array($vendorDir . '/psr/http-message/src'),
11
  'MyCLabs\\Enum\\' => array($vendorDir . '/myclabs/php-enum/src'),
12
  '' => array($baseDir . '/lib'),
7
 
8
  return array(
9
  'ZipStream\\' => array($vendorDir . '/maennchen/zipstream-php/src'),
10
+ 'Symfony\\Polyfill\\Mbstring\\' => array($vendorDir . '/symfony/polyfill-mbstring'),
11
  'Psr\\Http\\Message\\' => array($vendorDir . '/psr/http-message/src'),
12
  'MyCLabs\\Enum\\' => array($vendorDir . '/myclabs/php-enum/src'),
13
  '' => array($baseDir . '/lib'),
vendor/composer/autoload_real.php CHANGED
@@ -2,7 +2,7 @@
2
 
3
  // autoload_real.php @generated by Composer
4
 
5
- class ComposerAutoloaderInit70c1bea2cbce529378170e8f3fa2903d
6
  {
7
  private static $loader;
8
 
@@ -19,15 +19,15 @@ class ComposerAutoloaderInit70c1bea2cbce529378170e8f3fa2903d
19
  return self::$loader;
20
  }
21
 
22
- spl_autoload_register(array('ComposerAutoloaderInit70c1bea2cbce529378170e8f3fa2903d', 'loadClassLoader'), true, true);
23
  self::$loader = $loader = new \Composer\Autoload\ClassLoader();
24
- spl_autoload_unregister(array('ComposerAutoloaderInit70c1bea2cbce529378170e8f3fa2903d', 'loadClassLoader'));
25
 
26
  $useStaticLoader = PHP_VERSION_ID >= 50600 && !defined('HHVM_VERSION') && (!function_exists('zend_loader_file_encoded') || !zend_loader_file_encoded());
27
  if ($useStaticLoader) {
28
  require_once __DIR__ . '/autoload_static.php';
29
 
30
- call_user_func(\Composer\Autoload\ComposerStaticInit70c1bea2cbce529378170e8f3fa2903d::getInitializer($loader));
31
  } else {
32
  $map = require __DIR__ . '/autoload_namespaces.php';
33
  foreach ($map as $namespace => $path) {
@@ -47,6 +47,24 @@ class ComposerAutoloaderInit70c1bea2cbce529378170e8f3fa2903d
47
 
48
  $loader->register(true);
49
 
 
 
 
 
 
 
 
 
 
50
  return $loader;
51
  }
52
  }
 
 
 
 
 
 
 
 
 
2
 
3
  // autoload_real.php @generated by Composer
4
 
5
+ class ComposerAutoloaderInit2f935c889239f09e679be069f42693f4
6
  {
7
  private static $loader;
8
 
19
  return self::$loader;
20
  }
21
 
22
+ spl_autoload_register(array('ComposerAutoloaderInit2f935c889239f09e679be069f42693f4', 'loadClassLoader'), true, true);
23
  self::$loader = $loader = new \Composer\Autoload\ClassLoader();
24
+ spl_autoload_unregister(array('ComposerAutoloaderInit2f935c889239f09e679be069f42693f4', 'loadClassLoader'));
25
 
26
  $useStaticLoader = PHP_VERSION_ID >= 50600 && !defined('HHVM_VERSION') && (!function_exists('zend_loader_file_encoded') || !zend_loader_file_encoded());
27
  if ($useStaticLoader) {
28
  require_once __DIR__ . '/autoload_static.php';
29
 
30
+ call_user_func(\Composer\Autoload\ComposerStaticInit2f935c889239f09e679be069f42693f4::getInitializer($loader));
31
  } else {
32
  $map = require __DIR__ . '/autoload_namespaces.php';
33
  foreach ($map as $namespace => $path) {
47
 
48
  $loader->register(true);
49
 
50
+ if ($useStaticLoader) {
51
+ $includeFiles = Composer\Autoload\ComposerStaticInit2f935c889239f09e679be069f42693f4::$files;
52
+ } else {
53
+ $includeFiles = require __DIR__ . '/autoload_files.php';
54
+ }
55
+ foreach ($includeFiles as $fileIdentifier => $file) {
56
+ composerRequire2f935c889239f09e679be069f42693f4($fileIdentifier, $file);
57
+ }
58
+
59
  return $loader;
60
  }
61
  }
62
+
63
+ function composerRequire2f935c889239f09e679be069f42693f4($fileIdentifier, $file)
64
+ {
65
+ if (empty($GLOBALS['__composer_autoload_files'][$fileIdentifier])) {
66
+ require $file;
67
+
68
+ $GLOBALS['__composer_autoload_files'][$fileIdentifier] = true;
69
+ }
70
+ }
vendor/composer/autoload_static.php CHANGED
@@ -4,13 +4,21 @@
4
 
5
  namespace Composer\Autoload;
6
 
7
- class ComposerStaticInit70c1bea2cbce529378170e8f3fa2903d
8
  {
 
 
 
 
9
  public static $prefixLengthsPsr4 = array (
10
  'Z' =>
11
  array (
12
  'ZipStream\\' => 10,
13
  ),
 
 
 
 
14
  'P' =>
15
  array (
16
  'Psr\\Http\\Message\\' => 17,
@@ -26,6 +34,10 @@ class ComposerStaticInit70c1bea2cbce529378170e8f3fa2903d
26
  array (
27
  0 => __DIR__ . '/..' . '/maennchen/zipstream-php/src',
28
  ),
 
 
 
 
29
  'Psr\\Http\\Message\\' =>
30
  array (
31
  0 => __DIR__ . '/..' . '/psr/http-message/src',
@@ -43,9 +55,9 @@ class ComposerStaticInit70c1bea2cbce529378170e8f3fa2903d
43
  public static function getInitializer(ClassLoader $loader)
44
  {
45
  return \Closure::bind(function () use ($loader) {
46
- $loader->prefixLengthsPsr4 = ComposerStaticInit70c1bea2cbce529378170e8f3fa2903d::$prefixLengthsPsr4;
47
- $loader->prefixDirsPsr4 = ComposerStaticInit70c1bea2cbce529378170e8f3fa2903d::$prefixDirsPsr4;
48
- $loader->fallbackDirsPsr4 = ComposerStaticInit70c1bea2cbce529378170e8f3fa2903d::$fallbackDirsPsr4;
49
 
50
  }, null, ClassLoader::class);
51
  }
4
 
5
  namespace Composer\Autoload;
6
 
7
+ class ComposerStaticInit2f935c889239f09e679be069f42693f4
8
  {
9
+ public static $files = array (
10
+ '0e6d7bf4a5811bfa5cf40c5ccd6fae6a' => __DIR__ . '/..' . '/symfony/polyfill-mbstring/bootstrap.php',
11
+ );
12
+
13
  public static $prefixLengthsPsr4 = array (
14
  'Z' =>
15
  array (
16
  'ZipStream\\' => 10,
17
  ),
18
+ 'S' =>
19
+ array (
20
+ 'Symfony\\Polyfill\\Mbstring\\' => 26,
21
+ ),
22
  'P' =>
23
  array (
24
  'Psr\\Http\\Message\\' => 17,
34
  array (
35
  0 => __DIR__ . '/..' . '/maennchen/zipstream-php/src',
36
  ),
37
+ 'Symfony\\Polyfill\\Mbstring\\' =>
38
+ array (
39
+ 0 => __DIR__ . '/..' . '/symfony/polyfill-mbstring',
40
+ ),
41
  'Psr\\Http\\Message\\' =>
42
  array (
43
  0 => __DIR__ . '/..' . '/psr/http-message/src',
55
  public static function getInitializer(ClassLoader $loader)
56
  {
57
  return \Closure::bind(function () use ($loader) {
58
+ $loader->prefixLengthsPsr4 = ComposerStaticInit2f935c889239f09e679be069f42693f4::$prefixLengthsPsr4;
59
+ $loader->prefixDirsPsr4 = ComposerStaticInit2f935c889239f09e679be069f42693f4::$prefixDirsPsr4;
60
+ $loader->fallbackDirsPsr4 = ComposerStaticInit2f935c889239f09e679be069f42693f4::$fallbackDirsPsr4;
61
 
62
  }, null, ClassLoader::class);
63
  }
vendor/composer/installed.json CHANGED
@@ -1,24 +1,24 @@
1
  [
2
  {
3
  "name": "maennchen/zipstream-php",
4
- "version": "1.2.0",
5
- "version_normalized": "1.2.0.0",
6
  "source": {
7
  "type": "git",
8
- "url": "https://github.com/maennchen/ZipStream-PHP.git",
9
- "reference": "6373eefe0b3274d7b702d81f2c99aa977ff97dc2"
10
  },
11
  "dist": {
12
  "type": "zip",
13
- "url": "https://api.github.com/repos/maennchen/ZipStream-PHP/zipball/6373eefe0b3274d7b702d81f2c99aa977ff97dc2",
14
- "reference": "6373eefe0b3274d7b702d81f2c99aa977ff97dc2",
15
  "shasum": ""
16
  },
17
  "require": {
18
- "ext-mbstring": "*",
19
  "myclabs/php-enum": "^1.5",
20
  "php": ">= 7.1",
21
- "psr/http-message": "^1.0"
 
22
  },
23
  "require-dev": {
24
  "ext-zip": "*",
@@ -26,7 +26,7 @@
26
  "mikey179/vfsstream": "^1.6",
27
  "phpunit/phpunit": ">= 7.5"
28
  },
29
- "time": "2019-07-17T11:01:58+00:00",
30
  "type": "library",
31
  "installation-source": "source",
32
  "autoload": {
@@ -34,7 +34,6 @@
34
  "ZipStream\\": "src/"
35
  }
36
  },
37
- "notification-url": "https://packagist.org/downloads/",
38
  "license": [
39
  "MIT"
40
  ],
@@ -43,14 +42,14 @@
43
  "name": "Paul Duncan",
44
  "email": "pabs@pablotron.org"
45
  },
46
- {
47
- "name": "Jesse Donat",
48
- "email": "donatj@gmail.com"
49
- },
50
  {
51
  "name": "Jonatan Männchen",
52
  "email": "jonatan@maennchen.ch"
53
  },
 
 
 
 
54
  {
55
  "name": "András Kolesár",
56
  "email": "kolesar@kolesar.hu"
@@ -60,21 +59,24 @@
60
  "keywords": [
61
  "stream",
62
  "zip"
63
- ]
 
 
 
64
  },
65
  {
66
  "name": "myclabs/php-enum",
67
- "version": "1.7.2",
68
- "version_normalized": "1.7.2.0",
69
  "source": {
70
  "type": "git",
71
  "url": "https://github.com/myclabs/php-enum.git",
72
- "reference": "45f01adf6922df6082bcda36619deb466e826acf"
73
  },
74
  "dist": {
75
  "type": "zip",
76
- "url": "https://api.github.com/repos/myclabs/php-enum/zipball/45f01adf6922df6082bcda36619deb466e826acf",
77
- "reference": "45f01adf6922df6082bcda36619deb466e826acf",
78
  "shasum": ""
79
  },
80
  "require": {
@@ -82,10 +84,11 @@
82
  "php": ">=7.1"
83
  },
84
  "require-dev": {
85
- "phpunit/phpunit": "^4.8.35|^5.7|^6.0",
86
- "squizlabs/php_codesniffer": "1.*"
 
87
  },
88
- "time": "2019-08-19T13:53:00+00:00",
89
  "type": "library",
90
  "installation-source": "dist",
91
  "autoload": {
@@ -160,5 +163,66 @@
160
  "request",
161
  "response"
162
  ]
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
163
  }
164
  ]
1
  [
2
  {
3
  "name": "maennchen/zipstream-php",
4
+ "version": "dev-massedge-wp-eml",
5
+ "version_normalized": "dev-massedge-wp-eml",
6
  "source": {
7
  "type": "git",
8
+ "url": "https://github.com/massedge/ZipStream-PHP.git",
9
+ "reference": "2c3cc0c80e0191b0017c0f4adb48f01303deb46f"
10
  },
11
  "dist": {
12
  "type": "zip",
13
+ "url": "https://api.github.com/repos/massedge/ZipStream-PHP/zipball/2c3cc0c80e0191b0017c0f4adb48f01303deb46f",
14
+ "reference": "2c3cc0c80e0191b0017c0f4adb48f01303deb46f",
15
  "shasum": ""
16
  },
17
  "require": {
 
18
  "myclabs/php-enum": "^1.5",
19
  "php": ">= 7.1",
20
+ "psr/http-message": "^1.0",
21
+ "symfony/polyfill-mbstring": "^1.0"
22
  },
23
  "require-dev": {
24
  "ext-zip": "*",
26
  "mikey179/vfsstream": "^1.6",
27
  "phpunit/phpunit": ">= 7.5"
28
  },
29
+ "time": "2020-05-28T17:18:27+00:00",
30
  "type": "library",
31
  "installation-source": "source",
32
  "autoload": {
34
  "ZipStream\\": "src/"
35
  }
36
  },
 
37
  "license": [
38
  "MIT"
39
  ],
42
  "name": "Paul Duncan",
43
  "email": "pabs@pablotron.org"
44
  },
 
 
 
 
45
  {
46
  "name": "Jonatan Männchen",
47
  "email": "jonatan@maennchen.ch"
48
  },
49
+ {
50
+ "name": "Jesse Donat",
51
+ "email": "donatj@gmail.com"
52
+ },
53
  {
54
  "name": "András Kolesár",
55
  "email": "kolesar@kolesar.hu"
59
  "keywords": [
60
  "stream",
61
  "zip"
62
+ ],
63
+ "support": {
64
+ "source": "https://github.com/massedge/ZipStream-PHP/tree/massedge-wp-eml"
65
+ }
66
  },
67
  {
68
  "name": "myclabs/php-enum",
69
+ "version": "1.7.6",
70
+ "version_normalized": "1.7.6.0",
71
  "source": {
72
  "type": "git",
73
  "url": "https://github.com/myclabs/php-enum.git",
74
+ "reference": "5f36467c7a87e20fbdc51e524fd8f9d1de80187c"
75
  },
76
  "dist": {
77
  "type": "zip",
78
+ "url": "https://api.github.com/repos/myclabs/php-enum/zipball/5f36467c7a87e20fbdc51e524fd8f9d1de80187c",
79
+ "reference": "5f36467c7a87e20fbdc51e524fd8f9d1de80187c",
80
  "shasum": ""
81
  },
82
  "require": {
84
  "php": ">=7.1"
85
  },
86
  "require-dev": {
87
+ "phpunit/phpunit": "^7",
88
+ "squizlabs/php_codesniffer": "1.*",
89
+ "vimeo/psalm": "^3.8"
90
  },
91
+ "time": "2020-02-14T08:15:52+00:00",
92
  "type": "library",
93
  "installation-source": "dist",
94
  "autoload": {
163
  "request",
164
  "response"
165
  ]
166
+ },
167
+ {
168
+ "name": "symfony/polyfill-mbstring",
169
+ "version": "v1.17.0",
170
+ "version_normalized": "1.17.0.0",
171
+ "source": {
172
+ "type": "git",
173
+ "url": "https://github.com/symfony/polyfill-mbstring.git",
174
+ "reference": "fa79b11539418b02fc5e1897267673ba2c19419c"
175
+ },
176
+ "dist": {
177
+ "type": "zip",
178
+ "url": "https://api.github.com/repos/symfony/polyfill-mbstring/zipball/fa79b11539418b02fc5e1897267673ba2c19419c",
179
+ "reference": "fa79b11539418b02fc5e1897267673ba2c19419c",
180
+ "shasum": ""
181
+ },
182
+ "require": {
183
+ "php": ">=5.3.3"
184
+ },
185
+ "suggest": {
186
+ "ext-mbstring": "For best performance"
187
+ },
188
+ "time": "2020-05-12T16:47:27+00:00",
189
+ "type": "library",
190
+ "extra": {
191
+ "branch-alias": {
192
+ "dev-master": "1.17-dev"
193
+ }
194
+ },
195
+ "installation-source": "dist",
196
+ "autoload": {
197
+ "psr-4": {
198
+ "Symfony\\Polyfill\\Mbstring\\": ""
199
+ },
200
+ "files": [
201
+ "bootstrap.php"
202
+ ]
203
+ },
204
+ "notification-url": "https://packagist.org/downloads/",
205
+ "license": [
206
+ "MIT"
207
+ ],
208
+ "authors": [
209
+ {
210
+ "name": "Nicolas Grekas",
211
+ "email": "p@tchwork.com"
212
+ },
213
+ {
214
+ "name": "Symfony Community",
215
+ "homepage": "https://symfony.com/contributors"
216
+ }
217
+ ],
218
+ "description": "Symfony polyfill for the Mbstring extension",
219
+ "homepage": "https://symfony.com",
220
+ "keywords": [
221
+ "compatibility",
222
+ "mbstring",
223
+ "polyfill",
224
+ "portable",
225
+ "shim"
226
+ ]
227
  }
228
  ]
vendor/maennchen/zipstream-php/CHANGELOG.md CHANGED
@@ -5,6 +5,15 @@ All notable changes to this project will be documented in this file.
5
  The format is based on [Keep a Changelog](http://keepachangelog.com/en/1.0.0/)
6
  and this project adheres to [Semantic Versioning](http://semver.org/spec/v2.0.0.html).
7
 
 
 
 
 
 
 
 
 
 
8
  ## [1.2.0] - 2019-07-11
9
 
10
  ### Added
5
  The format is based on [Keep a Changelog](http://keepachangelog.com/en/1.0.0/)
6
  and this project adheres to [Semantic Versioning](http://semver.org/spec/v2.0.0.html).
7
 
8
+ ## [2.0.0] - 2020-02-22
9
+ ### Breaking change
10
+ - Only the self opened streams will be closed (#139)
11
+ If you were relying on ZipStream to close streams that the library didn't open,
12
+ you'll need to close them yourself now.
13
+
14
+ ### Changed
15
+ - Minor change to data descriptor (#136)
16
+
17
  ## [1.2.0] - 2019-07-11
18
 
19
  ### Added
vendor/maennchen/zipstream-php/README.md CHANGED
@@ -5,7 +5,7 @@
5
  [![Code Coverage](https://scrutinizer-ci.com/g/maennchen/ZipStream-PHP/badges/coverage.png?b=master)](https://scrutinizer-ci.com/g/maennchen/ZipStream-PHP/)
6
  [![Latest Stable Version](https://poser.pugx.org/maennchen/zipstream-php/v/stable)](https://packagist.org/packages/maennchen/zipstream-php)
7
  [![Total Downloads](https://poser.pugx.org/maennchen/zipstream-php/downloads)](https://packagist.org/packages/maennchen/zipstream-php)
8
- [![License](https://img.shields.io/github/license/maennchen/zipstream-php.svg)](LICENSE)
9
 
10
  ## Overview
11
 
@@ -26,30 +26,30 @@ composer require maennchen/zipstream-php
26
  Here's a simple example:
27
 
28
  ```php
29
- # Autoload the dependencies
30
  require 'vendor/autoload.php';
31
 
32
- # enable output of HTTP headers
33
  $options = new ZipStream\Option\Archive();
34
  $options->setSendHttpHeaders(true);
35
 
36
- # create a new zipstream object
37
  $zip = new ZipStream\ZipStream('example.zip', $options);
38
 
39
- # create a file named 'hello.txt'
40
  $zip->addFile('hello.txt', 'This is the contents of hello.txt');
41
 
42
- # add a file named 'some_image.jpg' from a local file 'path/to/image.jpg'
43
  $zip->addFileFromPath('some_image.jpg', 'path/to/image.jpg');
44
 
45
- # add a file named 'goodbye.txt' from an open stream resource
46
  $fp = tmpfile();
47
  fwrite($fp, 'The quick brown fox jumped over the lazy dog.');
48
  rewind($fp);
49
  $zip->addFileFromStream('goodbye.txt', $fp);
50
  fclose($fp);
51
 
52
- # finish the zip stream
53
  $zip->finish();
54
  ```
55
 
@@ -59,6 +59,18 @@ the current default storage method is 'deflate' i.e files are stored with Compre
59
 
60
  See the [Wiki](https://github.com/maennchen/ZipStream-PHP/wiki) for details.
61
 
 
 
 
 
 
 
 
 
 
 
 
 
62
  ## Upgrade to version 1.0.0
63
 
64
  * All options parameters to all function have been moved from an `array` to structured option objects. See [the wiki](https://github.com/maennchen/ZipStream-PHP/wiki/Available-options) for examples.
@@ -74,8 +86,38 @@ ZipStream-PHP is a collaborative project. Please take a look at the [CONTRIBUTIN
74
 
75
  ## About the Authors
76
 
77
- * Paul Duncan <pabs@pablotron.org> - http://pablotron.org/
78
- * Jonatan Männchen <jonatan@maennchen.ch> - http://commanders.ch
79
  * Jesse G. Donat <donatj@gmail.com> - https://donatstudios.com
80
- * Nicolas CARPi <nicolas.carpi@curie.fr> - https://www.elabftw.net
81
  * Nik Barham <nik@brokencube.co.uk> - https://www.brokencube.co.uk
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
5
  [![Code Coverage](https://scrutinizer-ci.com/g/maennchen/ZipStream-PHP/badges/coverage.png?b=master)](https://scrutinizer-ci.com/g/maennchen/ZipStream-PHP/)
6
  [![Latest Stable Version](https://poser.pugx.org/maennchen/zipstream-php/v/stable)](https://packagist.org/packages/maennchen/zipstream-php)
7
  [![Total Downloads](https://poser.pugx.org/maennchen/zipstream-php/downloads)](https://packagist.org/packages/maennchen/zipstream-php)
8
+ [![Financial Contributors on Open Collective](https://opencollective.com/zipstream/all/badge.svg?label=financial+contributors)](https://opencollective.com/zipstream) [![License](https://img.shields.io/github/license/maennchen/zipstream-php.svg)](LICENSE)
9
 
10
  ## Overview
11
 
26
  Here's a simple example:
27
 
28
  ```php
29
+ // Autoload the dependencies
30
  require 'vendor/autoload.php';
31
 
32
+ // enable output of HTTP headers
33
  $options = new ZipStream\Option\Archive();
34
  $options->setSendHttpHeaders(true);
35
 
36
+ // create a new zipstream object
37
  $zip = new ZipStream\ZipStream('example.zip', $options);
38
 
39
+ // create a file named 'hello.txt'
40
  $zip->addFile('hello.txt', 'This is the contents of hello.txt');
41
 
42
+ // add a file named 'some_image.jpg' from a local file 'path/to/image.jpg'
43
  $zip->addFileFromPath('some_image.jpg', 'path/to/image.jpg');
44
 
45
+ // add a file named 'goodbye.txt' from an open stream resource
46
  $fp = tmpfile();
47
  fwrite($fp, 'The quick brown fox jumped over the lazy dog.');
48
  rewind($fp);
49
  $zip->addFileFromStream('goodbye.txt', $fp);
50
  fclose($fp);
51
 
52
+ // finish the zip stream
53
  $zip->finish();
54
  ```
55
 
59
 
60
  See the [Wiki](https://github.com/maennchen/ZipStream-PHP/wiki) for details.
61
 
62
+ ## Known issue
63
+
64
+ The native Mac OS archive extraction tool might not open archives in some conditions. A workaround is to disable the Zip64 feature with the option `$opt->setEnableZip64(false)`. This limits the archive to 4 Gb and 64k files but will allow Mac OS users to open them without issue. See #116.
65
+
66
+ The linux `unzip` utility might not handle properly unicode characters. It is recommended to extract with another tool like [7-zip](https://www.7-zip.org/). See #146.
67
+
68
+ ## Upgrade to version 2.0.0
69
+
70
+ * Only the self opened streams will be closed (#139)
71
+ If you were relying on ZipStream to close streams that the library didn't open,
72
+ you'll need to close them yourself now.
73
+
74
  ## Upgrade to version 1.0.0
75
 
76
  * All options parameters to all function have been moved from an `array` to structured option objects. See [the wiki](https://github.com/maennchen/ZipStream-PHP/wiki/Available-options) for examples.
86
 
87
  ## About the Authors
88
 
89
+ * Paul Duncan <pabs@pablotron.org> - https://pablotron.org/
90
+ * Jonatan Männchen <jonatan@maennchen.ch> - https://maennchen.dev
91
  * Jesse G. Donat <donatj@gmail.com> - https://donatstudios.com
92
+ * Nicolas CARPi <nico-git@deltablot.email> - https://www.deltablot.com
93
  * Nik Barham <nik@brokencube.co.uk> - https://www.brokencube.co.uk
94
+
95
+ ## Contributors
96
+
97
+ ### Code Contributors
98
+
99
+ This project exists thanks to all the people who contribute. [[Contribute](CONTRIBUTING.md)].
100
+ <a href="https://github.com/maennchen/ZipStream-PHP/graphs/contributors"><img src="https://opencollective.com/zipstream/contributors.svg?width=890&button=false" /></a>
101
+
102
+ ### Financial Contributors
103
+
104
+ Become a financial contributor and help us sustain our community. [[Contribute](https://opencollective.com/zipstream/contribute)]
105
+
106
+ #### Individuals
107
+
108
+ <a href="https://opencollective.com/zipstream"><img src="https://opencollective.com/zipstream/individuals.svg?width=890"></a>
109
+
110
+ #### Organizations
111
+
112
+ Support this project with your organization. Your logo will show up here with a link to your website. [[Contribute](https://opencollective.com/zipstream/contribute)]
113
+
114
+ <a href="https://opencollective.com/zipstream/organization/0/website"><img src="https://opencollective.com/zipstream/organization/0/avatar.svg"></a>
115
+ <a href="https://opencollective.com/zipstream/organization/1/website"><img src="https://opencollective.com/zipstream/organization/1/avatar.svg"></a>
116
+ <a href="https://opencollective.com/zipstream/organization/2/website"><img src="https://opencollective.com/zipstream/organization/2/avatar.svg"></a>
117
+ <a href="https://opencollective.com/zipstream/organization/3/website"><img src="https://opencollective.com/zipstream/organization/3/avatar.svg"></a>
118
+ <a href="https://opencollective.com/zipstream/organization/4/website"><img src="https://opencollective.com/zipstream/organization/4/avatar.svg"></a>
119
+ <a href="https://opencollective.com/zipstream/organization/5/website"><img src="https://opencollective.com/zipstream/organization/5/avatar.svg"></a>
120
+ <a href="https://opencollective.com/zipstream/organization/6/website"><img src="https://opencollective.com/zipstream/organization/6/avatar.svg"></a>
121
+ <a href="https://opencollective.com/zipstream/organization/7/website"><img src="https://opencollective.com/zipstream/organization/7/avatar.svg"></a>
122
+ <a href="https://opencollective.com/zipstream/organization/8/website"><img src="https://opencollective.com/zipstream/organization/8/avatar.svg"></a>
123
+ <a href="https://opencollective.com/zipstream/organization/9/website"><img src="https://opencollective.com/zipstream/organization/9/avatar.svg"></a>
vendor/maennchen/zipstream-php/composer.json CHANGED
@@ -23,7 +23,7 @@
23
  ],
24
  "require": {
25
  "php": ">= 7.1",
26
- "ext-mbstring": "*",
27
  "psr/http-message": "^1.0",
28
  "myclabs/php-enum": "^1.5"
29
  },
@@ -31,7 +31,7 @@
31
  "phpunit/phpunit": ">= 7.5",
32
  "guzzlehttp/guzzle": ">= 6.3",
33
  "ext-zip": "*",
34
- "mikey179/vfsStream": "^1.6"
35
  },
36
  "autoload": {
37
  "psr-4": {
23
  ],
24
  "require": {
25
  "php": ">= 7.1",
26
+ "symfony/polyfill-mbstring": "^1.0",
27
  "psr/http-message": "^1.0",
28
  "myclabs/php-enum": "^1.5"
29
  },
31
  "phpunit/phpunit": ">= 7.5",
32
  "guzzlehttp/guzzle": ">= 6.3",
33
  "ext-zip": "*",
34
+ "mikey179/vfsstream": "^1.6"
35
  },
36
  "autoload": {
37
  "psr-4": {
vendor/maennchen/zipstream-php/psalm.xml ADDED
@@ -0,0 +1,55 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <?xml version="1.0"?>
2
+ <psalm
3
+ totallyTyped="false"
4
+ resolveFromConfigFile="true"
5
+ xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
6
+ xmlns="https://getpsalm.org/schema/config"
7
+ xsi:schemaLocation="https://getpsalm.org/schema/config vendor/vimeo/psalm/config.xsd"
8
+ >
9
+ <projectFiles>
10
+ <directory name="src" />
11
+ <ignoreFiles>
12
+ <directory name="vendor" />
13
+ </ignoreFiles>
14
+ </projectFiles>
15
+
16
+ <issueHandlers>
17
+ <LessSpecificReturnType errorLevel="info" />
18
+
19
+ <!-- level 3 issues - slightly lazy code writing, but provably low false-negatives -->
20
+
21
+ <DeprecatedMethod errorLevel="info" />
22
+ <DeprecatedProperty errorLevel="info" />
23
+ <DeprecatedClass errorLevel="info" />
24
+ <DeprecatedConstant errorLevel="info" />
25
+ <DeprecatedFunction errorLevel="info" />
26
+ <DeprecatedInterface errorLevel="info" />
27
+ <DeprecatedTrait errorLevel="info" />
28
+
29
+ <InternalMethod errorLevel="info" />
30
+ <InternalProperty errorLevel="info" />
31
+ <InternalClass errorLevel="info" />
32
+
33
+ <MissingClosureReturnType errorLevel="info" />
34
+ <MissingReturnType errorLevel="info" />
35
+ <MissingPropertyType errorLevel="info" />
36
+ <InvalidDocblock errorLevel="info" />
37
+ <MisplacedRequiredParam errorLevel="info" />
38
+
39
+ <PropertyNotSetInConstructor errorLevel="info" />
40
+ <MissingConstructor errorLevel="info" />
41
+ <MissingClosureParamType errorLevel="info" />
42
+ <MissingParamType errorLevel="info" />
43
+
44
+ <RedundantCondition errorLevel="info" />
45
+
46
+ <DocblockTypeContradiction errorLevel="info" />
47
+ <RedundantConditionGivenDocblockType errorLevel="info" />
48
+
49
+ <UnresolvableInclude errorLevel="info" />
50
+
51
+ <RawObjectIteration errorLevel="info" />
52
+
53
+ <InvalidStringClass errorLevel="info" />
54
+ </issueHandlers>
55
+ </psalm>
vendor/maennchen/zipstream-php/src/Bigint.php CHANGED
@@ -95,14 +95,14 @@ class Bigint
95
  * Get low FF
96
  *
97
  * @param bool $force
98
- * @return int
99
  */
100
- public function getLowFF(bool $force = false): int
101
  {
102
  if ($force || $this->isOver32()) {
103
- return 0xFFFFFFFF;
104
  }
105
- return $this->getLow32();
106
  }
107
 
108
  /**
95
  * Get low FF
96
  *
97
  * @param bool $force
98
+ * @return float
99
  */
100
+ public function getLowFF(bool $force = false): float
101
  {
102
  if ($force || $this->isOver32()) {
103
+ return (float)0xFFFFFFFF;
104
  }
105
+ return (float)$this->getLow32();
106
  }
107
 
108
  /**
vendor/maennchen/zipstream-php/src/File.php CHANGED
@@ -117,6 +117,7 @@ class File
117
 
118
  $stream = new DeflateStream(fopen($path, 'rb'));
119
  $this->processStream($stream);
 
120
  }
121
  }
122
 
@@ -303,22 +304,18 @@ class File
303
  {
304
 
305
  if ($this->bits & self::BIT_ZERO_HEADER) {
 
 
 
 
 
306
  $fields = [
307
  ['V', ZipStream::DATA_DESCRIPTOR_SIGNATURE],
308
  ['V', $this->crc], // CRC32
309
- ['V', $this->zlen], // Length of compressed data
310
- ['V', $this->len], // Length of original data
311
  ];
312
 
313
- if ($this->zip->opt->isEnableZip64()) {
314
- $fields = [
315
- ['V', ZipStream::DATA_DESCRIPTOR_SIGNATURE],
316
- ['V', $this->crc], // CRC32
317
- ['P', $this->zlen], // Length of compressed data
318
- ['P', $this->len], // Length of original data
319
- ];
320
- }
321
-
322
  $footer = ZipStream::packFields($fields);
323
  $this->zip->send($footer);
324
  } else {
117
 
118
  $stream = new DeflateStream(fopen($path, 'rb'));
119
  $this->processStream($stream);
120
+ $stream->close();
121
  }
122
  }
123
 
304
  {
305
 
306
  if ($this->bits & self::BIT_ZERO_HEADER) {
307
+ // compressed and uncompressed size
308
+ $sizeFormat = 'V';
309
+ if ($this->zip->opt->isEnableZip64()) {
310
+ $sizeFormat = 'P';
311
+ }
312
  $fields = [
313
  ['V', ZipStream::DATA_DESCRIPTOR_SIGNATURE],
314
  ['V', $this->crc], // CRC32
315
+ [$sizeFormat, $this->zlen], // Length of compressed data
316
+ [$sizeFormat, $this->len], // Length of original data
317
  ];
318
 
 
 
 
 
 
 
 
 
 
319
  $footer = ZipStream::packFields($fields);
320
  $this->zip->send($footer);
321
  } else {
vendor/maennchen/zipstream-php/src/Stream.php CHANGED
@@ -22,11 +22,6 @@ class Stream implements StreamInterface
22
  $this->stream = $stream;
23
  }
24
 
25
- public function __destruct()
26
- {
27
- $this->close();
28
- }
29
-
30
  /**
31
  * Closes the stream and any underlying resources.
32
  *
22
  $this->stream = $stream;
23
  }
24
 
 
 
 
 
 
25
  /**
26
  * Closes the stream and any underlying resources.
27
  *
vendor/maennchen/zipstream-php/src/ZipStream.php CHANGED
@@ -268,7 +268,7 @@ class ZipStream
268
  * Add an open stream to the archive.
269
  *
270
  * @param String $name - path of file in archive (including directory).
271
- * @param Resource $stream - contents of file as a stream resource
272
  * @param FileOptions $options
273
  *
274
  * File Options:
@@ -462,8 +462,14 @@ class ZipStream
462
  fwrite($this->opt->getOutputStream(), $str);
463
 
464
  if ($this->opt->isFlushOutput()) {
 
 
 
 
 
 
 
465
  flush();
466
- ob_flush();
467
  }
468
  }
469
 
268
  * Add an open stream to the archive.
269
  *
270
  * @param String $name - path of file in archive (including directory).
271
+ * @param resource $stream - contents of file as a stream resource
272
  * @param FileOptions $options
273
  *
274
  * File Options:
462
  fwrite($this->opt->getOutputStream(), $str);
463
 
464
  if ($this->opt->isFlushOutput()) {
465
+ // flush output buffer if it is on and flushable
466
+ $status = ob_get_status();
467
+ if (isset($status['flags']) && ($status['flags'] & PHP_OUTPUT_HANDLER_FLUSHABLE)) {
468
+ ob_flush();
469
+ }
470
+
471
+ // Flush system buffers after flushing userspace output buffer
472
  flush();
 
473
  }
474
  }
475
 
vendor/maennchen/zipstream-php/test/BigintTest.php CHANGED
@@ -32,8 +32,8 @@ class BigintTest extends TestCase
32
  $this->assertSame(3, $bigint->getLow32());
33
  $this->assertFalse($bigint->isOver32());
34
  $this->assertTrue($bigint->isOver32(true));
35
- $this->assertSame($bigint->getLowFF(), $bigint->getLow32());
36
- $this->assertSame($bigint->getLowFF(true), 0xFFFFFFFF);
37
  }
38
 
39
  public function testAddWithOverflowAtLowestByte(): void
@@ -52,7 +52,7 @@ class BigintTest extends TestCase
52
  $bigint = $bigint->add(Bigint::init(0x01));
53
  $this->assertSame('0x0000000100000000', $bigint->getHex64());
54
  $this->assertTrue($bigint->isOver32());
55
- $this->assertSame(0xFFFFFFFF, $bigint->getLowFF());
56
  }
57
 
58
  public function testAddWithOverflowAtInteger64(): void
32
  $this->assertSame(3, $bigint->getLow32());
33
  $this->assertFalse($bigint->isOver32());
34
  $this->assertTrue($bigint->isOver32(true));
35
+ $this->assertSame($bigint->getLowFF(), (float)$bigint->getLow32());
36
+ $this->assertSame($bigint->getLowFF(true), (float)0xFFFFFFFF);
37
  }
38
 
39
  public function testAddWithOverflowAtLowestByte(): void
52
  $bigint = $bigint->add(Bigint::init(0x01));
53
  $this->assertSame('0x0000000100000000', $bigint->getHex64());
54
  $this->assertTrue($bigint->isOver32());
55
+ $this->assertSame((float)0xFFFFFFFF, $bigint->getLowFF());
56
  }
57
 
58
  public function testAddWithOverflowAtInteger64(): void
vendor/maennchen/zipstream-php/test/ZipStreamTest.php CHANGED
@@ -557,4 +557,30 @@ class ZipStreamTest extends TestCase
557
  $this->assertStringEqualsFile($tmpDir . '/sample.txt', 'Sample String Data');
558
  $this->assertStringEqualsFile($tmpDir . '/test/sample.txt', 'More Simple Sample Data');
559
  }
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
560
  }
557
  $this->assertStringEqualsFile($tmpDir . '/sample.txt', 'Sample String Data');
558
  $this->assertStringEqualsFile($tmpDir . '/test/sample.txt', 'More Simple Sample Data');
559
  }
560
+
561
+ public function testCreateArchiveWithOutputBufferingOffAndFlushOptionSet(): void
562
+ {
563
+ // WORKAROUND (1/2): remove phpunit's output buffer in order to run test without any buffering
564
+ ob_end_flush();
565
+ $this->assertEquals(0, ob_get_level());
566
+
567
+ [$tmp, $stream] = $this->getTmpFileStream();
568
+
569
+ $options = new ArchiveOptions();
570
+ $options->setOutputStream($stream);
571
+ $options->setFlushOutput(true);
572
+
573
+ $zip = new ZipStream(null, $options);
574
+
575
+ $zip->addFile('sample.txt', 'Sample String Data');
576
+
577
+ $zip->finish();
578
+ fclose($stream);
579
+
580
+ $tmpDir = $this->validateAndExtractZip($tmp);
581
+ $this->assertStringEqualsFile($tmpDir . '/sample.txt', 'Sample String Data');
582
+
583
+ // WORKAROUND (2/2): add back output buffering so that PHPUnit doesn't complain that it is missing
584
+ ob_start();
585
+ }
586
  }
vendor/myclabs/php-enum/README.md CHANGED
@@ -3,6 +3,7 @@
3
  [![Build Status](https://travis-ci.org/myclabs/php-enum.png?branch=master)](https://travis-ci.org/myclabs/php-enum)
4
  [![Latest Stable Version](https://poser.pugx.org/myclabs/php-enum/version.png)](https://packagist.org/packages/myclabs/php-enum)
5
  [![Total Downloads](https://poser.pugx.org/myclabs/php-enum/downloads.png)](https://packagist.org/packages/myclabs/php-enum)
 
6
 
7
  Maintenance for this project is [supported via Tidelift](https://tidelift.com/subscription/pkg/packagist-myclabs-php-enum?utm_source=packagist-myclabs-php-enum&utm_medium=referral&utm_campaign=readme).
8
 
3
  [![Build Status](https://travis-ci.org/myclabs/php-enum.png?branch=master)](https://travis-ci.org/myclabs/php-enum)
4
  [![Latest Stable Version](https://poser.pugx.org/myclabs/php-enum/version.png)](https://packagist.org/packages/myclabs/php-enum)
5
  [![Total Downloads](https://poser.pugx.org/myclabs/php-enum/downloads.png)](https://packagist.org/packages/myclabs/php-enum)
6
+ [![psalm](https://shepherd.dev/github/myclabs/php-enum/coverage.svg)](https://shepherd.dev/github/myclabs/php-enum)
7
 
8
  Maintenance for this project is [supported via Tidelift](https://tidelift.com/subscription/pkg/packagist-myclabs-php-enum?utm_source=packagist-myclabs-php-enum&utm_medium=referral&utm_campaign=readme).
9
 
vendor/myclabs/php-enum/composer.json CHANGED
@@ -26,7 +26,8 @@
26
  "ext-json": "*"
27
  },
28
  "require-dev": {
29
- "phpunit/phpunit": "^4.8.35|^5.7|^6.0",
30
- "squizlabs/php_codesniffer": "1.*"
 
31
  }
32
  }
26
  "ext-json": "*"
27
  },
28
  "require-dev": {
29
+ "phpunit/phpunit": "^7",
30
+ "squizlabs/php_codesniffer": "1.*",
31
+ "vimeo/psalm": "^3.8"
32
  }
33
  }
vendor/myclabs/php-enum/psalm.xml ADDED
@@ -0,0 +1,20 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <?xml version="1.0"?>
2
+ <psalm
3
+ totallyTyped="true"
4
+ resolveFromConfigFile="true"
5
+ xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
6
+ xmlns="https://getpsalm.org/schema/config"
7
+ xsi:schemaLocation="https://getpsalm.org/schema/config vendor/vimeo/psalm/config.xsd"
8
+ >
9
+ <projectFiles>
10
+ <directory name="src" />
11
+ <ignoreFiles>
12
+ <directory name="vendor" />
13
+ <directory name="src/PHPUnit" />
14
+ </ignoreFiles>
15
+ </projectFiles>
16
+
17
+ <issueHandlers>
18
+ <MixedAssignment errorLevel="info" />
19
+ </issueHandlers>
20
+ </psalm>
vendor/myclabs/php-enum/src/Enum.php CHANGED
@@ -14,6 +14,9 @@ namespace MyCLabs\Enum;
14
  * @author Matthieu Napoli <matthieu@mnapoli.fr>
15
  * @author Daniel Costa <danielcosta@gmail.com>
16
  * @author Mirosław Filip <mirfilip@gmail.com>
 
 
 
17
  */
18
  abstract class Enum implements \JsonSerializable
19
  {
@@ -21,38 +24,48 @@ abstract class Enum implements \JsonSerializable
21
  * Enum value
22
  *
23
  * @var mixed
 
24
  */
25
  protected $value;
26
 
27
  /**
28
  * Store existing constants in a static cache per object.
29
  *
 
30
  * @var array
 
31
  */
32
  protected static $cache = [];
33
 
34
  /**
35
  * Creates a new value of some type
36
  *
 
37
  * @param mixed $value
38
  *
 
39
  * @throws \UnexpectedValueException if incompatible type is given.
40
  */
41
  public function __construct($value)
42
  {
43
  if ($value instanceof static) {
 
44
  $value = $value->getValue();
45
  }
46
 
47
  if (!$this->isValid($value)) {
48
- throw new \UnexpectedValueException("Value '$value' is not part of the enum " . \get_called_class());
 
49
  }
50
 
 
51
  $this->value = $value;
52
  }
53
 
54
  /**
 
55
  * @return mixed
 
56
  */
57
  public function getValue()
58
  {
@@ -62,6 +75,7 @@ abstract class Enum implements \JsonSerializable
62
  /**
63
  * Returns the enum key (i.e. the constant name).
64
  *
 
65
  * @return mixed
66
  */
67
  public function getKey()
@@ -70,6 +84,8 @@ abstract class Enum implements \JsonSerializable
70
  }
71
 
72
  /**
 
 
73
  * @return string
74
  */
75
  public function __toString()
@@ -83,18 +99,22 @@ abstract class Enum implements \JsonSerializable
83
  *
84
  * This method is final, for more information read https://github.com/myclabs/php-enum/issues/4
85
  *
 
 
86
  * @return bool
87
  */
88
  final public function equals($variable = null): bool
89
  {
90
  return $variable instanceof self
91
  && $this->getValue() === $variable->getValue()
92
- && \get_called_class() === \get_class($variable);
93
  }
94
 
95
  /**
96
  * Returns the names (keys) of all constants in the Enum class
97
  *
 
 
98
  * @return array
99
  */
100
  public static function keys()
@@ -105,12 +125,15 @@ abstract class Enum implements \JsonSerializable
105
  /**
106
  * Returns instances of the Enum class of all Enum constants
107
  *
 
 
108
  * @return static[] Constant name in key, Enum instance in value
109
  */
110
  public static function values()
111
  {
112
  $values = array();
113
 
 
114
  foreach (static::toArray() as $key => $value) {
115
  $values[$key] = new static($value);
116
  }
@@ -121,11 +144,16 @@ abstract class Enum implements \JsonSerializable
121
  /**
122
  * Returns all possible values as an array
123
  *
 
 
 
 
124
  * @return array Constant name in key, constant value in value
125
  */
126
  public static function toArray()
127
  {
128
- $class = \get_called_class();
 
129
  if (!isset(static::$cache[$class])) {
130
  $reflection = new \ReflectionClass($class);
131
  static::$cache[$class] = $reflection->getConstants();
@@ -138,7 +166,8 @@ abstract class Enum implements \JsonSerializable
138
  * Check if is valid enum value
139
  *
140
  * @param $value
141
- *
 
142
  * @return bool
143
  */
144
  public static function isValid($value)
@@ -150,7 +179,8 @@ abstract class Enum implements \JsonSerializable
150
  * Check if is valid enum key
151
  *
152
  * @param $key
153
- *
 
154
  * @return bool
155
  */
156
  public static function isValidKey($key)
@@ -165,6 +195,8 @@ abstract class Enum implements \JsonSerializable
165
  *
166
  * @param $value
167
  *
 
 
168
  * @return mixed
169
  */
170
  public static function search($value)
@@ -179,6 +211,7 @@ abstract class Enum implements \JsonSerializable
179
  * @param array $arguments
180
  *
181
  * @return static
 
182
  * @throws \BadMethodCallException
183
  */
184
  public static function __callStatic($name, $arguments)
@@ -188,7 +221,7 @@ abstract class Enum implements \JsonSerializable
188
  return new static($array[$name]);
189
  }
190
 
191
- throw new \BadMethodCallException("No static method or enum constant '$name' in class " . \get_called_class());
192
  }
193
 
194
  /**
@@ -197,6 +230,7 @@ abstract class Enum implements \JsonSerializable
197
  *
198
  * @return mixed
199
  * @link http://php.net/manual/en/jsonserializable.jsonserialize.php
 
200
  */
201
  public function jsonSerialize()
202
  {
14
  * @author Matthieu Napoli <matthieu@mnapoli.fr>
15
  * @author Daniel Costa <danielcosta@gmail.com>
16
  * @author Mirosław Filip <mirfilip@gmail.com>
17
+ *
18
+ * @psalm-template T
19
+ * @psalm-immutable
20
  */
21
  abstract class Enum implements \JsonSerializable
22
  {
24
  * Enum value
25
  *
26
  * @var mixed
27
+ * @psalm-var T
28
  */
29
  protected $value;
30
 
31
  /**
32
  * Store existing constants in a static cache per object.
33
  *
34
+ *
35
  * @var array
36
+ * @psalm-var array<class-string, array<string, mixed>>
37
  */
38
  protected static $cache = [];
39
 
40
  /**
41
  * Creates a new value of some type
42
  *
43
+ * @psalm-pure
44
  * @param mixed $value
45
  *
46
+ * @psalm-param static<T>|T $value
47
  * @throws \UnexpectedValueException if incompatible type is given.
48
  */
49
  public function __construct($value)
50
  {
51
  if ($value instanceof static) {
52
+ /** @psalm-var T */
53
  $value = $value->getValue();
54
  }
55
 
56
  if (!$this->isValid($value)) {
57
+ /** @psalm-suppress InvalidCast */
58
+ throw new \UnexpectedValueException("Value '$value' is not part of the enum " . static::class);
59
  }
60
 
61
+ /** @psalm-var T */
62
  $this->value = $value;
63
  }
64
 
65
  /**
66
+ * @psalm-pure
67
  * @return mixed
68
+ * @psalm-return T
69
  */
70
  public function getValue()
71
  {
75
  /**
76
  * Returns the enum key (i.e. the constant name).
77
  *
78
+ * @psalm-pure
79
  * @return mixed
80
  */
81
  public function getKey()
84
  }
85
 
86
  /**
87
+ * @psalm-pure
88
+ * @psalm-suppress InvalidCast
89
  * @return string
90
  */
91
  public function __toString()
99
  *
100
  * This method is final, for more information read https://github.com/myclabs/php-enum/issues/4
101
  *
102
+ * @psalm-pure
103
+ * @psalm-param mixed $variable
104
  * @return bool
105
  */
106
  final public function equals($variable = null): bool
107
  {
108
  return $variable instanceof self
109
  && $this->getValue() === $variable->getValue()
110
+ && static::class === \get_class($variable);
111
  }
112
 
113
  /**
114
  * Returns the names (keys) of all constants in the Enum class
115
  *
116
+ * @psalm-pure
117
+ * @psalm-return list<string>
118
  * @return array
119
  */
120
  public static function keys()
125
  /**
126
  * Returns instances of the Enum class of all Enum constants
127
  *
128
+ * @psalm-pure
129
+ * @psalm-return array<string, static>
130
  * @return static[] Constant name in key, Enum instance in value
131
  */
132
  public static function values()
133
  {
134
  $values = array();
135
 
136
+ /** @psalm-var T $value */
137
  foreach (static::toArray() as $key => $value) {
138
  $values[$key] = new static($value);
139
  }
144
  /**
145
  * Returns all possible values as an array
146
  *
147
+ * @psalm-pure
148
+ * @psalm-suppress ImpureStaticProperty
149
+ *
150
+ * @psalm-return array<string, mixed>
151
  * @return array Constant name in key, constant value in value
152
  */
153
  public static function toArray()
154
  {
155
+ $class = static::class;
156
+
157
  if (!isset(static::$cache[$class])) {
158
  $reflection = new \ReflectionClass($class);
159
  static::$cache[$class] = $reflection->getConstants();
166
  * Check if is valid enum value
167
  *
168
  * @param $value
169
+ * @psalm-param mixed $value
170
+ * @psalm-pure
171
  * @return bool
172
  */
173
  public static function isValid($value)
179
  * Check if is valid enum key
180
  *
181
  * @param $key
182
+ * @psalm-param string $key
183
+ * @psalm-pure
184
  * @return bool
185
  */
186
  public static function isValidKey($key)
195
  *
196
  * @param $value
197
  *
198
+ * @psalm-param mixed $value
199
+ * @psalm-pure
200
  * @return mixed
201
  */
202
  public static function search($value)
211
  * @param array $arguments
212
  *
213
  * @return static
214
+ * @psalm-pure
215
  * @throws \BadMethodCallException
216
  */
217
  public static function __callStatic($name, $arguments)
221
  return new static($array[$name]);
222
  }
223
 
224
+ throw new \BadMethodCallException("No static method or enum constant '$name' in class " . static::class);
225
  }
226
 
227
  /**
230
  *
231
  * @return mixed
232
  * @link http://php.net/manual/en/jsonserializable.jsonserialize.php
233
+ * @psalm-pure
234
  */
235
  public function jsonSerialize()
236
  {
vendor/symfony/polyfill-mbstring/LICENSE ADDED
@@ -0,0 +1,19 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ Copyright (c) 2015-2019 Fabien Potencier
2
+
3
+ Permission is hereby granted, free of charge, to any person obtaining a copy
4
+ of this software and associated documentation files (the "Software"), to deal
5
+ in the Software without restriction, including without limitation the rights
6
+ to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
7
+ copies of the Software, and to permit persons to whom the Software is furnished
8
+ to do so, subject to the following conditions:
9
+
10
+ The above copyright notice and this permission notice shall be included in all
11
+ copies or substantial portions of the Software.
12
+
13
+ THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
14
+ IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
15
+ FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
16
+ AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
17
+ LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
18
+ OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
19
+ THE SOFTWARE.
vendor/symfony/polyfill-mbstring/Mbstring.php ADDED
@@ -0,0 +1,847 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <?php
2
+
3
+ /*
4
+ * This file is part of the Symfony package.
5
+ *
6
+ * (c) Fabien Potencier <fabien@symfony.com>
7
+ *
8
+ * For the full copyright and license information, please view the LICENSE
9
+ * file that was distributed with this source code.
10
+ */
11
+
12
+ namespace Symfony\Polyfill\Mbstring;
13
+
14
+ /**
15
+ * Partial mbstring implementation in PHP, iconv based, UTF-8 centric.
16
+ *
17
+ * Implemented:
18
+ * - mb_chr - Returns a specific character from its Unicode code point
19
+ * - mb_convert_encoding - Convert character encoding
20
+ * - mb_convert_variables - Convert character code in variable(s)
21
+ * - mb_decode_mimeheader - Decode string in MIME header field
22
+ * - mb_encode_mimeheader - Encode string for MIME header XXX NATIVE IMPLEMENTATION IS REALLY BUGGED
23
+ * - mb_decode_numericentity - Decode HTML numeric string reference to character
24
+ * - mb_encode_numericentity - Encode character to HTML numeric string reference
25
+ * - mb_convert_case - Perform case folding on a string
26
+ * - mb_detect_encoding - Detect character encoding
27
+ * - mb_get_info - Get internal settings of mbstring
28
+ * - mb_http_input - Detect HTTP input character encoding
29
+ * - mb_http_output - Set/Get HTTP output character encoding
30
+ * - mb_internal_encoding - Set/Get internal character encoding
31
+ * - mb_list_encodings - Returns an array of all supported encodings
32
+ * - mb_ord - Returns the Unicode code point of a character
33
+ * - mb_output_handler - Callback function converts character encoding in output buffer
34
+ * - mb_scrub - Replaces ill-formed byte sequences with substitute characters
35
+ * - mb_strlen - Get string length
36
+ * - mb_strpos - Find position of first occurrence of string in a string
37
+ * - mb_strrpos - Find position of last occurrence of a string in a string
38
+ * - mb_str_split - Convert a string to an array
39
+ * - mb_strtolower - Make a string lowercase
40
+ * - mb_strtoupper - Make a string uppercase
41
+ * - mb_substitute_character - Set/Get substitution character
42
+ * - mb_substr - Get part of string
43
+ * - mb_stripos - Finds position of first occurrence of a string within another, case insensitive
44
+ * - mb_stristr - Finds first occurrence of a string within another, case insensitive
45
+ * - mb_strrchr - Finds the last occurrence of a character in a string within another
46
+ * - mb_strrichr - Finds the last occurrence of a character in a string within another, case insensitive
47
+ * - mb_strripos - Finds position of last occurrence of a string within another, case insensitive
48
+ * - mb_strstr - Finds first occurrence of a string within another
49
+ * - mb_strwidth - Return width of string
50
+ * - mb_substr_count - Count the number of substring occurrences
51
+ *
52
+ * Not implemented:
53
+ * - mb_convert_kana - Convert "kana" one from another ("zen-kaku", "han-kaku" and more)
54
+ * - mb_ereg_* - Regular expression with multibyte support
55
+ * - mb_parse_str - Parse GET/POST/COOKIE data and set global variable
56
+ * - mb_preferred_mime_name - Get MIME charset string
57
+ * - mb_regex_encoding - Returns current encoding for multibyte regex as string
58
+ * - mb_regex_set_options - Set/Get the default options for mbregex functions
59
+ * - mb_send_mail - Send encoded mail
60
+ * - mb_split - Split multibyte string using regular expression
61
+ * - mb_strcut - Get part of string
62
+ * - mb_strimwidth - Get truncated string with specified width
63
+ *
64
+ * @author Nicolas Grekas <p@tchwork.com>
65
+ *
66
+ * @internal
67
+ */
68
+ final class Mbstring
69
+ {
70
+ const MB_CASE_FOLD = PHP_INT_MAX;
71
+
72
+ private static $encodingList = array('ASCII', 'UTF-8');
73
+ private static $language = 'neutral';
74
+ private static $internalEncoding = 'UTF-8';
75
+ private static $caseFold = array(
76
+ array('µ', 'ſ', "\xCD\x85", 'ς', "\xCF\x90", "\xCF\x91", "\xCF\x95", "\xCF\x96", "\xCF\xB0", "\xCF\xB1", "\xCF\xB5", "\xE1\xBA\x9B", "\xE1\xBE\xBE"),
77
+ array('μ', 's', 'ι', 'σ', 'β', 'θ', 'φ', 'π', 'κ', 'ρ', 'ε', "\xE1\xB9\xA1", 'ι'),
78
+ );
79
+
80
+ public static function mb_convert_encoding($s, $toEncoding, $fromEncoding = null)
81
+ {
82
+ if (\is_array($fromEncoding) || false !== strpos($fromEncoding, ',')) {
83
+ $fromEncoding = self::mb_detect_encoding($s, $fromEncoding);
84
+ } else {
85
+ $fromEncoding = self::getEncoding($fromEncoding);
86
+ }
87
+
88
+ $toEncoding = self::getEncoding($toEncoding);
89
+
90
+ if ('BASE64' === $fromEncoding) {
91
+ $s = base64_decode($s);
92
+ $fromEncoding = $toEncoding;
93
+ }
94
+
95
+ if ('BASE64' === $toEncoding) {
96
+ return base64_encode($s);
97
+ }
98
+
99
+ if ('HTML-ENTITIES' === $toEncoding || 'HTML' === $toEncoding) {
100
+ if ('HTML-ENTITIES' === $fromEncoding || 'HTML' === $fromEncoding) {
101
+ $fromEncoding = 'Windows-1252';
102
+ }
103
+ if ('UTF-8' !== $fromEncoding) {
104
+ $s = iconv($fromEncoding, 'UTF-8//IGNORE', $s);
105
+ }
106
+
107
+ return preg_replace_callback('/[\x80-\xFF]+/', array(__CLASS__, 'html_encoding_callback'), $s);
108
+ }
109
+
110
+ if ('HTML-ENTITIES' === $fromEncoding) {
111
+ $s = html_entity_decode($s, ENT_COMPAT, 'UTF-8');
112
+ $fromEncoding = 'UTF-8';
113
+ }
114
+
115
+ return iconv($fromEncoding, $toEncoding.'//IGNORE', $s);
116
+ }
117
+
118
+ public static function mb_convert_variables($toEncoding, $fromEncoding, &$a = null, &$b = null, &$c = null, &$d = null, &$e = null, &$f = null)
119
+ {
120
+ $vars = array(&$a, &$b, &$c, &$d, &$e, &$f);
121
+
122
+ $ok = true;
123
+ array_walk_recursive($vars, function (&$v) use (&$ok, $toEncoding, $fromEncoding) {
124
+ if (false === $v = Mbstring::mb_convert_encoding($v, $toEncoding, $fromEncoding)) {
125
+ $ok = false;
126
+ }
127
+ });
128
+
129
+ return $ok ? $fromEncoding : false;
130
+ }
131
+
132
+ public static function mb_decode_mimeheader($s)
133
+ {
134
+ return iconv_mime_decode($s, 2, self::$internalEncoding);
135
+ }
136
+
137
+ public static function mb_encode_mimeheader($s, $charset = null, $transferEncoding = null, $linefeed = null, $indent = null)
138
+ {
139
+ trigger_error('mb_encode_mimeheader() is bugged. Please use iconv_mime_encode() instead', E_USER_WARNING);
140
+ }
141
+
142
+ public static function mb_decode_numericentity($s, $convmap, $encoding = null)
143
+ {
144
+ if (null !== $s && !\is_scalar($s) && !(\is_object($s) && \method_exists($s, '__toString'))) {
145
+ trigger_error('mb_decode_numericentity() expects parameter 1 to be string, '.\gettype($s).' given', E_USER_WARNING);
146
+
147
+ return null;
148
+ }
149
+
150
+ if (!\is_array($convmap) || !$convmap) {
151
+ return false;
152
+ }
153
+
154
+ if (null !== $encoding && !\is_scalar($encoding)) {
155
+ trigger_error('mb_decode_numericentity() expects parameter 3 to be string, '.\gettype($s).' given', E_USER_WARNING);
156
+
157
+ return ''; // Instead of null (cf. mb_encode_numericentity).
158
+ }
159
+
160
+ $s = (string) $s;
161
+ if ('' === $s) {
162
+ return '';
163
+ }
164
+
165
+ $encoding = self::getEncoding($encoding);
166
+
167
+ if ('UTF-8' === $encoding) {
168
+ $encoding = null;
169
+ if (!preg_match('//u', $s)) {
170
+ $s = @iconv('UTF-8', 'UTF-8//IGNORE', $s);
171
+ }
172
+ } else {
173
+ $s = iconv($encoding, 'UTF-8//IGNORE', $s);
174
+ }
175
+
176
+ $cnt = floor(\count($convmap) / 4) * 4;
177
+
178
+ for ($i = 0; $i < $cnt; $i += 4) {
179
+ // collector_decode_htmlnumericentity ignores $convmap[$i + 3]
180
+ $convmap[$i] += $convmap[$i + 2];
181
+ $convmap[$i + 1] += $convmap[$i + 2];
182
+ }
183
+
184
+ $s = preg_replace_callback('/&#(?:0*([0-9]+)|x0*([0-9a-fA-F]+))(?!&);?/', function (array $m) use ($cnt, $convmap) {
185
+ $c = isset($m[2]) ? (int) hexdec($m[2]) : $m[1];
186
+ for ($i = 0; $i < $cnt; $i += 4) {
187
+ if ($c >= $convmap[$i] && $c <= $convmap[$i + 1]) {
188
+ return Mbstring::mb_chr($c - $convmap[$i + 2]);
189
+ }
190
+ }
191
+
192
+ return $m[0];
193
+ }, $s);
194
+
195
+ if (null === $encoding) {
196
+ return $s;
197
+ }
198
+
199
+ return iconv('UTF-8', $encoding.'//IGNORE', $s);
200
+ }
201
+
202
+ public static function mb_encode_numericentity($s, $convmap, $encoding = null, $is_hex = false)
203
+ {
204
+ if (null !== $s && !\is_scalar($s) && !(\is_object($s) && \method_exists($s, '__toString'))) {
205
+ trigger_error('mb_encode_numericentity() expects parameter 1 to be string, '.\gettype($s).' given', E_USER_WARNING);
206
+
207
+ return null;
208
+ }
209
+
210
+ if (!\is_array($convmap) || !$convmap) {
211
+ return false;
212
+ }
213
+
214
+ if (null !== $encoding && !\is_scalar($encoding)) {
215
+ trigger_error('mb_encode_numericentity() expects parameter 3 to be string, '.\gettype($s).' given', E_USER_WARNING);
216
+
217
+ return null; // Instead of '' (cf. mb_decode_numericentity).
218
+ }
219
+
220
+ if (null !== $is_hex && !\is_scalar($is_hex)) {
221
+ trigger_error('mb_encode_numericentity() expects parameter 4 to be boolean, '.\gettype($s).' given', E_USER_WARNING);
222
+
223
+ return null;
224
+ }
225
+
226
+ $s = (string) $s;
227
+ if ('' === $s) {
228
+ return '';
229
+ }
230
+
231
+ $encoding = self::getEncoding($encoding);
232
+
233
+ if ('UTF-8' === $encoding) {
234
+ $encoding = null;
235
+ if (!preg_match('//u', $s)) {
236
+ $s = @iconv('UTF-8', 'UTF-8//IGNORE', $s);
237
+ }
238
+ } else {
239
+ $s = iconv($encoding, 'UTF-8//IGNORE', $s);
240
+ }
241
+
242
+ static $ulenMask = array("\xC0" => 2, "\xD0" => 2, "\xE0" => 3, "\xF0" => 4);
243
+
244
+ $cnt = floor(\count($convmap) / 4) * 4;
245
+ $i = 0;
246
+ $len = \strlen($s);
247
+ $result = '';
248
+
249
+ while ($i < $len) {
250
+ $ulen = $s[$i] < "\x80" ? 1 : $ulenMask[$s[$i] & "\xF0"];
251
+ $uchr = substr($s, $i, $ulen);
252
+ $i += $ulen;
253
+ $c = self::mb_ord($uchr);
254
+
255
+ for ($j = 0; $j < $cnt; $j += 4) {
256
+ if ($c >= $convmap[$j] && $c <= $convmap[$j + 1]) {
257
+ $cOffset = ($c + $convmap[$j + 2]) & $convmap[$j + 3];
258
+ $result .= $is_hex ? sprintf('&#x%X;', $cOffset) : '&#'.$cOffset.';';
259
+ continue 2;
260
+ }
261
+ }
262
+ $result .= $uchr;
263
+ }
264
+
265
+ if (null === $encoding) {
266
+ return $result;
267
+ }
268
+
269
+ return iconv('UTF-8', $encoding.'//IGNORE', $result);
270
+ }
271
+
272
+ public static function mb_convert_case($s, $mode, $encoding = null)
273
+ {
274
+ $s = (string) $s;
275
+ if ('' === $s) {
276
+ return '';
277
+ }
278
+
279
+ $encoding = self::getEncoding($encoding);
280
+
281
+ if ('UTF-8' === $encoding) {
282
+ $encoding = null;
283
+ if (!preg_match('//u', $s)) {
284
+ $s = @iconv('UTF-8', 'UTF-8//IGNORE', $s);
285
+ }
286
+ } else {
287
+ $s = iconv($encoding, 'UTF-8//IGNORE', $s);
288
+ }
289
+
290
+ if (MB_CASE_TITLE == $mode) {
291
+ static $titleRegexp = null;
292
+ if (null === $titleRegexp) {
293
+ $titleRegexp = self::getData('titleCaseRegexp');
294
+ }
295
+ $s = preg_replace_callback($titleRegexp, array(__CLASS__, 'title_case'), $s);
296
+ } else {
297
+ if (MB_CASE_UPPER == $mode) {
298
+ static $upper = null;
299
+ if (null === $upper) {
300
+ $upper = self::getData('upperCase');
301
+ }
302
+ $map = $upper;
303
+ } else {
304
+ if (self::MB_CASE_FOLD === $mode) {
305
+ $s = str_replace(self::$caseFold[0], self::$caseFold[1], $s);
306
+ }
307
+
308
+ static $lower = null;
309
+ if (null === $lower) {
310
+ $lower = self::getData('lowerCase');
311
+ }
312
+ $map = $lower;
313
+ }
314
+
315
+ static $ulenMask = array("\xC0" => 2, "\xD0" => 2, "\xE0" => 3, "\xF0" => 4);
316
+
317
+ $i = 0;
318
+ $len = \strlen($s);
319
+
320
+ while ($i < $len) {
321
+ $ulen = $s[$i] < "\x80" ? 1 : $ulenMask[$s[$i] & "\xF0"];
322
+ $uchr = substr($s, $i, $ulen);
323
+ $i += $ulen;
324
+
325
+ if (isset($map[$uchr])) {
326
+ $uchr = $map[$uchr];
327
+ $nlen = \strlen($uchr);
328
+
329
+ if ($nlen == $ulen) {
330
+ $nlen = $i;
331
+ do {
332
+ $s[--$nlen] = $uchr[--$ulen];
333
+ } while ($ulen);
334
+ } else {
335
+ $s = substr_replace($s, $uchr, $i - $ulen, $ulen);
336
+ $len += $nlen - $ulen;
337
+ $i += $nlen - $ulen;
338
+ }
339
+ }
340
+ }
341
+ }
342
+
343
+ if (null === $encoding) {
344
+ return $s;
345
+ }
346
+
347
+ return iconv('UTF-8', $encoding.'//IGNORE', $s);
348
+ }
349
+
350
+ public static function mb_internal_encoding($encoding = null)
351
+ {
352
+ if (null === $encoding) {
353
+ return self::$internalEncoding;
354
+ }
355
+
356
+ $encoding = self::getEncoding($encoding);
357
+
358
+ if ('UTF-8' === $encoding || false !== @iconv($encoding, $encoding, ' ')) {
359
+ self::$internalEncoding = $encoding;
360
+
361
+ return true;
362
+ }
363
+
364
+ return false;
365
+ }
366
+
367
+ public static function mb_language($lang = null)
368
+ {
369
+ if (null === $lang) {
370
+ return self::$language;
371
+ }
372
+
373
+ switch ($lang = strtolower($lang)) {
374
+ case 'uni':
375
+ case 'neutral':
376
+ self::$language = $lang;
377
+
378
+ return true;
379
+ }
380
+
381
+ return false;
382
+ }
383
+
384
+ public static function mb_list_encodings()
385
+ {
386
+ return array('UTF-8');
387
+ }
388
+
389
+ public static function mb_encoding_aliases($encoding)
390
+ {
391
+ switch (strtoupper($encoding)) {
392
+ case 'UTF8':
393
+ case 'UTF-8':
394
+ return array('utf8');
395
+ }
396
+
397
+ return false;
398
+ }
399
+
400
+ public static function mb_check_encoding($var = null, $encoding = null)
401
+ {
402
+ if (null === $encoding) {
403
+ if (null === $var) {
404
+ return false;
405
+ }
406
+ $encoding = self::$internalEncoding;
407
+ }
408
+
409
+ return self::mb_detect_encoding($var, array($encoding)) || false !== @iconv($encoding, $encoding, $var);
410
+ }
411
+
412
+ public static function mb_detect_encoding($str, $encodingList = null, $strict = false)
413
+ {
414
+ if (null === $encodingList) {
415
+ $encodingList = self::$encodingList;
416
+ } else {
417
+ if (!\is_array($encodingList)) {
418
+ $encodingList = array_map('trim', explode(',', $encodingList));
419
+ }
420
+ $encodingList = array_map('strtoupper', $encodingList);
421
+ }
422
+
423
+ foreach ($encodingList as $enc) {
424
+ switch ($enc) {
425
+ case 'ASCII':
426
+ if (!preg_match('/[\x80-\xFF]/', $str)) {
427
+ return $enc;
428
+ }
429
+ break;
430
+
431
+ case 'UTF8':
432
+ case 'UTF-8':
433
+ if (preg_match('//u', $str)) {
434
+ return 'UTF-8';
435
+ }
436
+ break;
437
+
438
+ default:
439
+ if (0 === strncmp($enc, 'ISO-8859-', 9)) {
440
+ return $enc;
441
+ }
442
+ }
443
+ }
444
+
445
+ return false;
446
+ }
447
+
448
+ public static function mb_detect_order($encodingList = null)
449
+ {
450
+ if (null === $encodingList) {
451
+ return self::$encodingList;
452
+ }
453
+
454
+ if (!\is_array($encodingList)) {
455
+ $encodingList = array_map('trim', explode(',', $encodingList));
456
+ }
457
+ $encodingList = array_map('strtoupper', $encodingList);
458
+
459
+ foreach ($encodingList as $enc) {
460
+ switch ($enc) {
461
+ default:
462
+ if (strncmp($enc, 'ISO-8859-', 9)) {
463
+ return false;
464
+ }
465
+ // no break
466
+ case 'ASCII':
467
+ case 'UTF8':
468
+ case 'UTF-8':
469
+ }
470
+ }
471
+
472
+ self::$encodingList = $encodingList;
473
+
474
+ return true;
475
+ }
476
+
477
+ public static function mb_strlen($s, $encoding = null)
478
+ {
479
+ $encoding = self::getEncoding($encoding);
480
+ if ('CP850' === $encoding || 'ASCII' === $encoding) {
481
+ return \strlen($s);
482
+ }
483
+
484
+ return @iconv_strlen($s, $encoding);
485
+ }
486
+
487
+ public static function mb_strpos($haystack, $needle, $offset = 0, $encoding = null)
488
+ {
489
+ $encoding = self::getEncoding($encoding);
490
+ if ('CP850' === $encoding || 'ASCII' === $encoding) {
491
+ return strpos($haystack, $needle, $offset);
492
+ }
493
+
494
+ $needle = (string) $needle;
495
+ if ('' === $needle) {
496
+ trigger_error(__METHOD__.': Empty delimiter', E_USER_WARNING);
497
+
498
+ return false;
499
+ }
500
+
501
+ return iconv_strpos($haystack, $needle, $offset, $encoding);
502
+ }
503
+
504
+ public static function mb_strrpos($haystack, $needle, $offset = 0, $encoding = null)
505
+ {
506
+ $encoding = self::getEncoding($encoding);
507
+ if ('CP850' === $encoding || 'ASCII' === $encoding) {
508
+ return strrpos($haystack, $needle, $offset);
509
+ }
510
+
511
+ if ($offset != (int) $offset) {
512
+ $offset = 0;
513
+ } elseif ($offset = (int) $offset) {
514
+ if ($offset < 0) {
515
+ if (0 > $offset += self::mb_strlen($needle)) {
516
+ $haystack = self::mb_substr($haystack, 0, $offset, $encoding);
517
+ }
518
+ $offset = 0;
519
+ } else {
520
+ $haystack = self::mb_substr($haystack, $offset, 2147483647, $encoding);
521
+ }
522
+ }
523
+
524
+ $pos = iconv_strrpos($haystack, $needle, $encoding);
525
+
526
+ return false !== $pos ? $offset + $pos : false;
527
+ }
528
+
529
+ public static function mb_str_split($string, $split_length = 1, $encoding = null)
530
+ {
531
+ if (null !== $string && !\is_scalar($string) && !(\is_object($string) && \method_exists($string, '__toString'))) {
532
+ trigger_error('mb_str_split() expects parameter 1 to be string, '.\gettype($string).' given', E_USER_WARNING);
533
+
534
+ return null;
535
+ }
536
+
537
+ if (1 > $split_length = (int) $split_length) {
538
+ trigger_error('The length of each segment must be greater than zero', E_USER_WARNING);
539
+
540
+ return false;
541
+ }
542
+
543
+ if (null === $encoding) {
544
+ $encoding = mb_internal_encoding();
545
+ }
546
+
547
+ if ('UTF-8' === $encoding = self::getEncoding($encoding)) {
548
+ $rx = '/(';
549
+ while (65535 < $split_length) {
550
+ $rx .= '.{65535}';
551
+ $split_length -= 65535;
552
+ }
553
+ $rx .= '.{'.$split_length.'})/us';
554
+
555
+ return preg_split($rx, $string, null, PREG_SPLIT_DELIM_CAPTURE | PREG_SPLIT_NO_EMPTY);
556
+ }
557
+
558
+ $result = array();
559
+ $length = mb_strlen($string, $encoding);
560
+
561
+ for ($i = 0; $i < $length; $i += $split_length) {
562
+ $result[] = mb_substr($string, $i, $split_length, $encoding);
563
+ }
564
+
565
+ return $result;
566
+ }
567
+
568
+ public static function mb_strtolower($s, $encoding = null)
569
+ {
570
+ return self::mb_convert_case($s, MB_CASE_LOWER, $encoding);
571
+ }
572
+
573
+ public static function mb_strtoupper($s, $encoding = null)
574
+ {
575
+ return self::mb_convert_case($s, MB_CASE_UPPER, $encoding);
576
+ }
577
+
578
+ public static function mb_substitute_character($c = null)
579
+ {
580
+ if (0 === strcasecmp($c, 'none')) {
581
+ return true;
582
+ }
583
+
584
+ return null !== $c ? false : 'none';
585
+ }
586
+
587
+ public static function mb_substr($s, $start, $length = null, $encoding = null)
588
+ {
589
+ $encoding = self::getEncoding($encoding);
590
+ if ('CP850' === $encoding || 'ASCII' === $encoding) {
591
+ return (string) substr($s, $start, null === $length ? 2147483647 : $length);
592
+ }
593
+
594
+ if ($start < 0) {
595
+ $start = iconv_strlen($s, $encoding) + $start;
596
+ if ($start < 0) {
597
+ $start = 0;
598
+ }
599
+ }
600
+
601
+ if (null === $length) {
602
+ $length = 2147483647;
603
+ } elseif ($length < 0) {
604
+ $length = iconv_strlen($s, $encoding) + $length - $start;
605
+ if ($length < 0) {
606
+ return '';
607
+ }
608
+ }
609
+
610
+ return (string) iconv_substr($s, $start, $length, $encoding);
611
+ }
612
+
613
+ public static function mb_stripos($haystack, $needle, $offset = 0, $encoding = null)
614
+ {
615
+ $haystack = self::mb_convert_case($haystack, self::MB_CASE_FOLD, $encoding);
616
+ $needle = self::mb_convert_case($needle, self::MB_CASE_FOLD, $encoding);
617
+
618
+ return self::mb_strpos($haystack, $needle, $offset, $encoding);
619
+ }
620
+
621
+ public static function mb_stristr($haystack, $needle, $part = false, $encoding = null)
622
+ {
623
+ $pos = self::mb_stripos($haystack, $needle, 0, $encoding);
624
+
625
+ return self::getSubpart($pos, $part, $haystack, $encoding);
626
+ }
627
+
628
+ public static function mb_strrchr($haystack, $needle, $part = false, $encoding = null)
629
+ {
630
+ $encoding = self::getEncoding($encoding);
631
+ if ('CP850' === $encoding || 'ASCII' === $encoding) {
632
+ return strrchr($haystack, $needle, $part);
633
+ }
634
+ $needle = self::mb_substr($needle, 0, 1, $encoding);
635
+ $pos = iconv_strrpos($haystack, $needle, $encoding);
636
+
637
+ return self::getSubpart($pos, $part, $haystack, $encoding);
638
+ }
639
+
640
+ public static function mb_strrichr($haystack, $needle, $part = false, $encoding = null)
641
+ {
642
+ $needle = self::mb_substr($needle, 0, 1, $encoding);
643
+ $pos = self::mb_strripos($haystack, $needle, $encoding);
644
+
645
+ return self::getSubpart($pos, $part, $haystack, $encoding);
646
+ }
647
+
648
+ public static function mb_strripos($haystack, $needle, $offset = 0, $encoding = null)
649
+ {
650
+ $haystack = self::mb_convert_case($haystack, self::MB_CASE_FOLD, $encoding);
651
+ $needle = self::mb_convert_case($needle, self::MB_CASE_FOLD, $encoding);
652
+
653
+ return self::mb_strrpos($haystack, $needle, $offset, $encoding);
654
+ }
655
+
656
+ public static function mb_strstr($haystack, $needle, $part = false, $encoding = null)
657
+ {
658
+ $pos = strpos($haystack, $needle);
659
+ if (false === $pos) {
660
+ return false;
661
+ }
662
+ if ($part) {
663
+ return substr($haystack, 0, $pos);
664
+ }
665
+
666
+ return substr($haystack, $pos);
667
+ }
668
+
669
+ public static function mb_get_info($type = 'all')
670
+ {
671
+ $info = array(
672
+ 'internal_encoding' => self::$internalEncoding,
673
+ 'http_output' => 'pass',
674
+ 'http_output_conv_mimetypes' => '^(text/|application/xhtml\+xml)',
675
+ 'func_overload' => 0,
676
+ 'func_overload_list' => 'no overload',
677
+ 'mail_charset' => 'UTF-8',
678
+ 'mail_header_encoding' => 'BASE64',
679
+ 'mail_body_encoding' => 'BASE64',
680
+ 'illegal_chars' => 0,
681
+ 'encoding_translation' => 'Off',
682
+ 'language' => self::$language,
683
+ 'detect_order' => self::$encodingList,
684
+ 'substitute_character' => 'none',
685
+ 'strict_detection' => 'Off',
686
+ );
687
+
688
+ if ('all' === $type) {
689
+ return $info;
690
+ }
691
+ if (isset($info[$type])) {
692
+ return $info[$type];
693
+ }
694
+
695
+ return false;
696
+ }
697
+
698
+ public static function mb_http_input($type = '')
699
+ {
700
+ return false;
701
+ }
702
+
703
+ public static function mb_http_output($encoding = null)
704
+ {
705
+ return null !== $encoding ? 'pass' === $encoding : 'pass';
706
+ }
707
+
708
+ public static function mb_strwidth($s, $encoding = null)
709
+ {
710
+ $encoding = self::getEncoding($encoding);
711
+
712
+ if ('UTF-8' !== $encoding) {
713
+ $s = iconv($encoding, 'UTF-8//IGNORE', $s);
714
+ }
715
+
716
+ $s = preg_replace('/[\x{1100}-\x{115F}\x{2329}\x{232A}\x{2E80}-\x{303E}\x{3040}-\x{A4CF}\x{AC00}-\x{D7A3}\x{F900}-\x{FAFF}\x{FE10}-\x{FE19}\x{FE30}-\x{FE6F}\x{FF00}-\x{FF60}\x{FFE0}-\x{FFE6}\x{20000}-\x{2FFFD}\x{30000}-\x{3FFFD}]/u', '', $s, -1, $wide);
717
+
718
+ return ($wide << 1) + iconv_strlen($s, 'UTF-8');
719
+ }
720
+
721
+ public static function mb_substr_count($haystack, $needle, $encoding = null)
722
+ {
723
+ return substr_count($haystack, $needle);
724
+ }
725
+
726
+ public static function mb_output_handler($contents, $status)
727
+ {
728
+ return $contents;
729
+ }
730
+
731
+ public static function mb_chr($code, $encoding = null)
732
+ {
733
+ if (0x80 > $code %= 0x200000) {
734
+ $s = \chr($code);
735
+ } elseif (0x800 > $code) {
736
+ $s = \chr(0xC0 | $code >> 6).\chr(0x80 | $code & 0x3F);
737
+ } elseif (0x10000 > $code) {
738
+ $s = \chr(0xE0 | $code >> 12).\chr(0x80 | $code >> 6 & 0x3F).\chr(0x80 | $code & 0x3F);
739
+ } else {
740
+ $s = \chr(0xF0 | $code >> 18).\chr(0x80 | $code >> 12 & 0x3F).\chr(0x80 | $code >> 6 & 0x3F).\chr(0x80 | $code & 0x3F);
741
+ }
742
+
743
+ if ('UTF-8' !== $encoding = self::getEncoding($encoding)) {
744
+ $s = mb_convert_encoding($s, $encoding, 'UTF-8');
745
+ }
746
+
747
+ return $s;
748
+ }
749
+
750
+ public static function mb_ord($s, $encoding = null)
751
+ {
752
+ if ('UTF-8' !== $encoding = self::getEncoding($encoding)) {
753
+ $s = mb_convert_encoding($s, 'UTF-8', $encoding);
754
+ }
755
+
756
+ if (1 === \strlen($s)) {
757
+ return \ord($s);
758
+ }
759
+
760
+ $code = ($s = unpack('C*', substr($s, 0, 4))) ? $s[1] : 0;
761
+ if (0xF0 <= $code) {
762
+ return (($code - 0xF0) << 18) + (($s[2] - 0x80) << 12) + (($s[3] - 0x80) << 6) + $s[4] - 0x80;
763
+ }
764
+ if (0xE0 <= $code) {
765
+ return (($code - 0xE0) << 12) + (($s[2] - 0x80) << 6) + $s[3] - 0x80;
766
+ }
767
+ if (0xC0 <= $code) {
768
+ return (($code - 0xC0) << 6) + $s[2] - 0x80;
769
+ }
770
+
771
+ return $code;
772
+ }
773
+
774
+ private static function getSubpart($pos, $part, $haystack, $encoding)
775
+ {
776
+ if (false === $pos) {
777
+ return false;
778
+ }
779
+ if ($part) {
780
+ return self::mb_substr($haystack, 0, $pos, $encoding);
781
+ }
782
+
783
+ return self::mb_substr($haystack, $pos, null, $encoding);
784
+ }
785
+
786
+ private static function html_encoding_callback(array $m)
787
+ {
788
+ $i = 1;
789
+ $entities = '';
790
+ $m = unpack('C*', htmlentities($m[0], ENT_COMPAT, 'UTF-8'));
791
+
792
+ while (isset($m[$i])) {
793
+ if (0x80 > $m[$i]) {
794
+ $entities .= \chr($m[$i++]);
795
+ continue;
796
+ }
797
+ if (0xF0 <= $m[$i]) {
798
+ $c = (($m[$i++] - 0xF0) << 18) + (($m[$i++] - 0x80) << 12) + (($m[$i++] - 0x80) << 6) + $m[$i++] - 0x80;
799
+ } elseif (0xE0 <= $m[$i]) {
800
+ $c = (($m[$i++] - 0xE0) << 12) + (($m[$i++] - 0x80) << 6) + $m[$i++] - 0x80;
801
+ } else {
802
+ $c = (($m[$i++] - 0xC0) << 6) + $m[$i++] - 0x80;
803
+ }
804
+
805
+ $entities .= '&#'.$c.';';
806
+ }
807
+
808
+ return $entities;
809
+ }
810
+
811
+ private static function title_case(array $s)
812
+ {
813
+ return self::mb_convert_case($s[1], MB_CASE_UPPER, 'UTF-8').self::mb_convert_case($s[2], MB_CASE_LOWER, 'UTF-8');
814
+ }
815
+
816
+ private static function getData($file)
817
+ {
818
+ if (file_exists($file = __DIR__.'/Resources/unidata/'.$file.'.php')) {
819
+ return require $file;
820
+ }
821
+
822
+ return false;
823
+ }
824
+
825
+ private static function getEncoding($encoding)
826
+ {
827
+ if (null === $encoding) {
828
+ return self::$internalEncoding;
829
+ }
830
+
831
+ if ('UTF-8' === $encoding) {
832
+ return 'UTF-8';
833
+ }
834
+
835
+ $encoding = strtoupper($encoding);
836
+
837
+ if ('8BIT' === $encoding || 'BINARY' === $encoding) {
838
+ return 'CP850';
839
+ }
840
+
841
+ if ('UTF8' === $encoding) {
842
+ return 'UTF-8';
843
+ }
844
+
845
+ return $encoding;
846
+ }
847
+ }
vendor/symfony/polyfill-mbstring/README.md ADDED
@@ -0,0 +1,13 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ Symfony Polyfill / Mbstring
2
+ ===========================
3
+
4
+ This component provides a partial, native PHP implementation for the
5
+ [Mbstring](https://php.net/mbstring) extension.
6
+
7
+ More information can be found in the
8
+ [main Polyfill README](https://github.com/symfony/polyfill/blob/master/README.md).
9
+
10
+ License
11
+ =======
12
+
13
+ This library is released under the [MIT license](LICENSE).
vendor/symfony/polyfill-mbstring/Resources/unidata/lowerCase.php ADDED
@@ -0,0 +1,1096 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <?php
2
+
3
+ return array(
4
+ 'A' => 'a',
5
+ 'B' => 'b',
6
+ 'C' => 'c',
7
+ 'D' => 'd',
8
+ 'E' => 'e',
9
+ 'F' => 'f',
10
+ 'G' => 'g',
11
+ 'H' => 'h',
12
+ 'I' => 'i',
13
+ 'J' => 'j',
14
+ 'K' => 'k',
15
+ 'L' => 'l',
16
+ 'M' => 'm',
17
+ 'N' => 'n',
18
+ 'O' => 'o',
19
+ 'P' => 'p',
20
+ 'Q' => 'q',
21
+ 'R' => 'r',
22
+ 'S' => 's',
23
+ 'T' => 't',
24
+ 'U' => 'u',
25
+ 'V' => 'v',
26
+ 'W' => 'w',
27
+ 'X' => 'x',
28
+ 'Y' => 'y',
29
+ 'Z' => 'z',
30
+ 'À' => 'à',
31
+ 'Á' => 'á',
32
+ 'Â' => 'â',
33
+ 'Ã' => 'ã',
34
+ 'Ä' => 'ä',
35
+ 'Å' => 'å',
36
+ 'Æ' => 'æ',
37
+ 'Ç' => 'ç',
38
+ 'È' => 'è',
39
+ 'É' => 'é',
40
+ 'Ê' => 'ê',
41
+ 'Ë' => 'ë',
42
+ 'Ì' => 'ì',
43
+ 'Í' => 'í',
44
+ 'Î' => 'î',
45
+ 'Ï' => 'ï',
46
+ 'Ð' => 'ð',
47
+ 'Ñ' => 'ñ',
48
+ 'Ò' => 'ò',
49
+ 'Ó' => 'ó',
50
+ 'Ô' => 'ô',
51
+ 'Õ' => 'õ',
52
+ 'Ö' => 'ö',
53
+ 'Ø' => 'ø',
54
+ 'Ù' => 'ù',
55
+ 'Ú' => 'ú',
56
+ 'Û' => 'û',
57
+ 'Ü' => 'ü',
58
+ 'Ý' => 'ý',
59
+ 'Þ' => 'þ',
60
+ 'Ā' => 'ā',
61
+ 'Ă' => 'ă',
62
+ 'Ą' => 'ą',
63
+ 'Ć' => 'ć',
64
+ 'Ĉ' => 'ĉ',
65
+ 'Ċ' => 'ċ',
66
+ 'Č' => 'č',
67
+ 'Ď' => 'ď',
68
+ 'Đ' => 'đ',
69
+ 'Ē' => 'ē',
70
+ 'Ĕ' => 'ĕ',
71
+ 'Ė' => 'ė',
72
+ 'Ę' => 'ę',
73
+ 'Ě' => 'ě',
74
+ 'Ĝ' => 'ĝ',
75
+ 'Ğ' => 'ğ',
76
+ 'Ġ' => 'ġ',
77
+ 'Ģ' => 'ģ',
78
+ 'Ĥ' => 'ĥ',
79
+ 'Ħ' => 'ħ',
80
+ 'Ĩ' => 'ĩ',
81
+ 'Ī' => 'ī',
82
+ 'Ĭ' => 'ĭ',
83
+ 'Į' => 'į',
84
+ 'İ' => 'i',
85
+ 'IJ' => 'ij',
86
+ 'Ĵ' => 'ĵ',
87
+ 'Ķ' => 'ķ',
88
+ 'Ĺ' => 'ĺ',
89
+ 'Ļ' => 'ļ',
90
+ 'Ľ' => 'ľ',
91
+ 'Ŀ' => 'ŀ',
92
+ 'Ł' => 'ł',
93
+ 'Ń' => 'ń',
94
+ 'Ņ' => 'ņ',
95
+ 'Ň' => 'ň',
96
+ 'Ŋ' => 'ŋ',
97
+ 'Ō' => 'ō',
98
+ 'Ŏ' => 'ŏ',
99
+ 'Ő' => 'ő',
100
+ 'Œ' => 'œ',
101
+ 'Ŕ' => 'ŕ',
102
+ 'Ŗ' => 'ŗ',
103
+ 'Ř' => 'ř',
104
+ 'Ś' => 'ś',
105
+ 'Ŝ' => 'ŝ',
106
+ 'Ş' => 'ş',
107
+ 'Š' => 'š',
108
+ 'Ţ' => 'ţ',
109
+ 'Ť' => 'ť',
110
+ 'Ŧ' => 'ŧ',
111
+ 'Ũ' => 'ũ',
112
+ 'Ū' => 'ū',
113
+ 'Ŭ' => 'ŭ',
114
+ 'Ů' => 'ů',
115
+ 'Ű' => 'ű',
116
+ 'Ų' => 'ų',
117
+ 'Ŵ' => 'ŵ',
118
+ 'Ŷ' => 'ŷ',
119
+ 'Ÿ' => 'ÿ',
120
+ 'Ź' => 'ź',
121
+ 'Ż' => 'ż',
122
+ 'Ž' => 'ž',
123
+ 'Ɓ' => 'ɓ',
124
+ 'Ƃ' => 'ƃ',
125
+ 'Ƅ' => 'ƅ',
126
+ 'Ɔ' => 'ɔ',
127
+ 'Ƈ' => 'ƈ',
128
+ 'Ɖ' => 'ɖ',
129
+ 'Ɗ' => 'ɗ',
130
+ 'Ƌ' => 'ƌ',
131
+ 'Ǝ' => 'ǝ',
132
+ 'Ə' => 'ə',
133
+ 'Ɛ' => 'ɛ',
134
+ 'Ƒ' => 'ƒ',
135
+ 'Ɠ' => 'ɠ',
136
+ 'Ɣ' => 'ɣ',
137
+ 'Ɩ' => 'ɩ',
138
+ 'Ɨ' => 'ɨ',
139
+ 'Ƙ' => 'ƙ',
140
+ 'Ɯ' => 'ɯ',
141
+ 'Ɲ' => 'ɲ',
142
+ 'Ɵ' => 'ɵ',
143
+ 'Ơ' => 'ơ',
144
+ 'Ƣ' => 'ƣ',
145
+ 'Ƥ' => 'ƥ',
146
+ 'Ʀ' => 'ʀ',
147
+ 'Ƨ' => 'ƨ',
148
+ 'Ʃ' => 'ʃ',
149
+ 'Ƭ' => 'ƭ',
150
+ 'Ʈ' => 'ʈ',
151
+ 'Ư' => 'ư',
152
+ 'Ʊ' => 'ʊ',
153
+ 'Ʋ' => 'ʋ',
154
+ 'Ƴ' => 'ƴ',
155
+ 'Ƶ' => 'ƶ',
156
+ 'Ʒ' => 'ʒ',
157
+ 'Ƹ' => 'ƹ',
158
+ 'Ƽ' => 'ƽ',
159
+ 'DŽ' => 'dž',
160
+ 'Dž' => 'dž',
161
+ 'LJ' => 'lj',
162
+ 'Lj' => 'lj',
163
+ 'NJ' => 'nj',
164
+ 'Nj' => 'nj',
165
+ 'Ǎ' => 'ǎ',
166
+ 'Ǐ' => 'ǐ',
167
+ 'Ǒ' => 'ǒ',
168
+ 'Ǔ' => 'ǔ',
169
+ 'Ǖ' => 'ǖ',
170
+ 'Ǘ' => 'ǘ',
171
+ 'Ǚ' => 'ǚ',
172
+ 'Ǜ' => 'ǜ',
173
+ 'Ǟ' => 'ǟ',
174
+ 'Ǡ' => 'ǡ',
175
+ 'Ǣ' => 'ǣ',
176
+ 'Ǥ' => 'ǥ',
177
+ 'Ǧ' => 'ǧ',
178
+ 'Ǩ' => 'ǩ',
179
+ 'Ǫ' => 'ǫ',
180
+ 'Ǭ' => 'ǭ',
181
+ 'Ǯ' => 'ǯ',
182
+ 'DZ' => 'dz',
183
+ 'Dz' => 'dz',
184
+ 'Ǵ' => 'ǵ',
185
+ 'Ƕ' => 'ƕ',
186
+ 'Ƿ' => 'ƿ',
187
+ 'Ǹ' => 'ǹ',
188
+ 'Ǻ' => 'ǻ',
189
+ 'Ǽ' => 'ǽ',
190
+ 'Ǿ' => 'ǿ',
191
+ 'Ȁ' => 'ȁ',
192
+ 'Ȃ' => 'ȃ',
193
+ 'Ȅ' => 'ȅ',
194
+ 'Ȇ' => 'ȇ',
195
+ 'Ȉ' => 'ȉ',
196
+ 'Ȋ' => 'ȋ',
197
+ 'Ȍ' => 'ȍ',
198
+ 'Ȏ' => 'ȏ',
199
+ 'Ȑ' => 'ȑ',
200
+ 'Ȓ' => 'ȓ',
201
+ 'Ȕ' => 'ȕ',
202
+ 'Ȗ' => 'ȗ',
203
+ 'Ș' => 'ș',
204
+ 'Ț' => 'ț',
205
+ 'Ȝ' => 'ȝ',
206
+ 'Ȟ' => 'ȟ',
207
+ 'Ƞ' => 'ƞ',
208
+ 'Ȣ' => 'ȣ',
209
+ 'Ȥ' => 'ȥ',
210
+ 'Ȧ' => 'ȧ',
211
+ 'Ȩ' => 'ȩ',
212
+ 'Ȫ' => 'ȫ',
213
+ 'Ȭ' => 'ȭ',
214
+ 'Ȯ' => 'ȯ',
215
+ 'Ȱ' => 'ȱ',
216
+ 'Ȳ' => 'ȳ',
217
+ 'Ⱥ' => 'ⱥ',
218
+ 'Ȼ' => 'ȼ',
219
+ 'Ƚ' => 'ƚ',
220
+ 'Ⱦ' => 'ⱦ',
221
+ 'Ɂ' => 'ɂ',
222
+ 'Ƀ' => 'ƀ',
223
+ 'Ʉ' => 'ʉ',
224
+ 'Ʌ' => 'ʌ',
225
+ 'Ɇ' => 'ɇ',
226
+ 'Ɉ' => 'ɉ',
227
+ 'Ɋ' => 'ɋ',
228
+ 'Ɍ' => 'ɍ',
229
+ 'Ɏ' => 'ɏ',
230
+ 'Ͱ' => 'ͱ',
231
+ 'Ͳ' => 'ͳ',
232
+ 'Ͷ' => 'ͷ',
233
+ 'Ϳ' => 'ϳ',
234
+ 'Ά' => 'ά',
235
+ 'Έ' => 'έ',
236
+ 'Ή' => 'ή',
237
+ 'Ί' => 'ί',
238
+ 'Ό' => 'ό',
239
+ 'Ύ' => 'ύ',
240
+ 'Ώ' => 'ώ',
241
+ 'Α' => 'α',
242
+ 'Β' => 'β',
243
+ 'Γ' => 'γ',
244
+ 'Δ' => 'δ',
245
+ 'Ε' => 'ε',
246
+ 'Ζ' => 'ζ',
247
+ 'Η' => 'η',
248
+ 'Θ' => 'θ',
249
+ 'Ι' => 'ι',
250
+ 'Κ' => 'κ',
251
+ 'Λ' => 'λ',
252
+ 'Μ' => 'μ',
253
+ 'Ν' => 'ν',
254
+ 'Ξ' => 'ξ',
255
+ 'Ο' => 'ο',
256
+ 'Π' => 'π',
257
+ 'Ρ' => 'ρ',
258
+ 'Σ' => 'σ',
259
+ 'Τ' => 'τ',
260
+ 'Υ' => 'υ',
261
+ 'Φ' => 'φ',
262
+ 'Χ' => 'χ',
263
+ 'Ψ' => 'ψ',
264
+ 'Ω' => 'ω',
265
+ 'Ϊ' => 'ϊ',
266
+ 'Ϋ' => 'ϋ',
267
+ 'Ϗ' => 'ϗ',
268
+ 'Ϙ' => 'ϙ',
269
+ 'Ϛ' => 'ϛ',
270
+ 'Ϝ' => 'ϝ',
271
+ 'Ϟ' => 'ϟ',
272
+ 'Ϡ' => 'ϡ',
273
+ 'Ϣ' => 'ϣ',
274
+ 'Ϥ' => 'ϥ',
275
+ 'Ϧ' => 'ϧ',
276
+ 'Ϩ' => 'ϩ',
277
+ 'Ϫ' => 'ϫ',
278
+ 'Ϭ' => 'ϭ',
279
+ 'Ϯ' => 'ϯ',
280
+ 'ϴ' => 'θ',
281
+ 'Ϸ' => 'ϸ',
282
+ 'Ϲ' => 'ϲ',
283
+ 'Ϻ' => 'ϻ',
284
+ 'Ͻ' => 'ͻ',
285
+ 'Ͼ' => 'ͼ',
286
+ 'Ͽ' => 'ͽ',
287
+ 'Ѐ' => 'ѐ',
288
+ 'Ё' => 'ё',
289
+ 'Ђ' => 'ђ',
290
+ 'Ѓ' => 'ѓ',
291
+ 'Є' => 'є',
292
+ 'Ѕ' => 'ѕ',
293
+ 'І' => 'і',
294
+ 'Ї' => 'ї',
295
+ 'Ј' => 'ј',
296
+ 'Љ' => 'љ',
297
+ 'Њ' => 'њ',
298
+ 'Ћ' => 'ћ',
299
+ 'Ќ' => 'ќ',
300
+ 'Ѝ' => 'ѝ',
301
+ 'Ў' => 'ў',
302
+ 'Џ' => 'џ',
303
+ 'А' => 'а',
304
+ 'Б' => 'б',
305
+ 'В' => 'в',
306
+ 'Г' => 'г',
307
+ 'Д' => 'д',
308
+ 'Е' => 'е',
309
+ 'Ж' => 'ж',
310
+ 'З' => 'з',
311
+ 'И' => 'и',
312
+ 'Й' => 'й',
313
+ 'К' => 'к',
314
+ 'Л' => 'л',
315
+ 'М' => 'м',
316
+ 'Н' => 'н',
317
+ 'О' => 'о',
318
+ 'П' => 'п',
319
+ 'Р' => 'р',
320
+ 'С' => 'с',
321
+ 'Т' => 'т',
322
+ 'У' => 'у',
323
+ 'Ф' => 'ф',
324
+ 'Х' => 'х',
325
+ 'Ц' => 'ц',
326
+ 'Ч' => 'ч',
327
+ 'Ш' => 'ш',
328
+ 'Щ' => 'щ',
329
+ 'Ъ' => 'ъ',
330
+ 'Ы' => 'ы',
331
+ 'Ь' => 'ь',
332
+ 'Э' => 'э',
333
+ 'Ю' => 'ю',
334
+ 'Я' => 'я',
335
+ 'Ѡ' => 'ѡ',
336
+ 'Ѣ' => 'ѣ',
337
+ 'Ѥ' => 'ѥ',
338
+ 'Ѧ' => 'ѧ',
339
+ 'Ѩ' => 'ѩ',
340
+ 'Ѫ' => 'ѫ',
341
+ 'Ѭ' => 'ѭ',
342
+ 'Ѯ' => 'ѯ',
343
+ 'Ѱ' => 'ѱ',
344
+ 'Ѳ' => 'ѳ',
345
+ 'Ѵ' => 'ѵ',
346
+ 'Ѷ' => 'ѷ',
347
+ 'Ѹ' => 'ѹ',
348
+ 'Ѻ' => 'ѻ',
349
+ 'Ѽ' => 'ѽ',
350
+ 'Ѿ' => 'ѿ',
351
+ 'Ҁ' => 'ҁ',
352
+ 'Ҋ' => 'ҋ',
353
+ 'Ҍ' => 'ҍ',
354
+ 'Ҏ' => 'ҏ',
355
+ 'Ґ' => 'ґ',
356
+ 'Ғ' => 'ғ',
357
+ 'Ҕ' => 'ҕ',
358
+ 'Җ' => 'җ',
359
+ 'Ҙ' => 'ҙ',
360
+ 'Қ' => 'қ',
361
+ 'Ҝ' => 'ҝ',
362
+ 'Ҟ' => 'ҟ',
363
+ 'Ҡ' => 'ҡ',
364
+ 'Ң' => 'ң',
365
+ 'Ҥ' => 'ҥ',
366
+ 'Ҧ' => 'ҧ',
367
+ 'Ҩ' => 'ҩ',
368
+ 'Ҫ' => 'ҫ',
369
+ 'Ҭ' => 'ҭ',
370
+ 'Ү' => 'ү',
371
+ 'Ұ' => 'ұ',
372
+ 'Ҳ' => 'ҳ',
373
+ 'Ҵ' => 'ҵ',
374
+ 'Ҷ' => 'ҷ',
375
+ 'Ҹ' => 'ҹ',
376
+ 'Һ' => 'һ',
377
+ 'Ҽ' => 'ҽ',
378
+ 'Ҿ' => 'ҿ',
379
+ 'Ӏ' => 'ӏ',
380
+ 'Ӂ' => 'ӂ',
381
+ 'Ӄ' => 'ӄ',
382
+ 'Ӆ' => 'ӆ',
383
+ 'Ӈ' => 'ӈ',
384
+ 'Ӊ' => 'ӊ',
385
+ 'Ӌ' => 'ӌ',
386
+ 'Ӎ' => 'ӎ',
387
+ 'Ӑ' => 'ӑ',
388
+ 'Ӓ' => 'ӓ',
389
+ 'Ӕ' => 'ӕ',
390
+ 'Ӗ' => 'ӗ',
391
+ 'Ә' => 'ә',
392
+ 'Ӛ' => 'ӛ',
393
+ 'Ӝ' => 'ӝ',
394
+ 'Ӟ' => 'ӟ',
395
+ 'Ӡ' => 'ӡ',
396
+ 'Ӣ' => 'ӣ',
397
+ 'Ӥ' => 'ӥ',
398
+ 'Ӧ' => 'ӧ',
399
+ 'Ө' => 'ө',
400
+ 'Ӫ' => 'ӫ',
401
+ 'Ӭ' => 'ӭ',
402
+ 'Ӯ' => 'ӯ',
403
+ 'Ӱ' => 'ӱ',
404
+ 'Ӳ' => 'ӳ',
405
+ 'Ӵ' => 'ӵ',
406
+ 'Ӷ' => 'ӷ',
407
+ 'Ӹ' => 'ӹ',
408
+ 'Ӻ' => 'ӻ',
409
+ 'Ӽ' => 'ӽ',
410
+ 'Ӿ' => 'ӿ',
411
+ 'Ԁ' => 'ԁ',
412
+ 'Ԃ' => 'ԃ',
413
+ 'Ԅ' => 'ԅ',
414
+ 'Ԇ' => 'ԇ',
415
+ 'Ԉ' => 'ԉ',
416
+ 'Ԋ' => 'ԋ',
417
+ 'Ԍ' => 'ԍ',
418
+ 'Ԏ' => 'ԏ',
419
+ 'Ԑ' => 'ԑ',
420
+ 'Ԓ' => 'ԓ',
421
+ 'Ԕ' => 'ԕ',
422
+ 'Ԗ' => 'ԗ',
423
+ 'Ԙ' => 'ԙ',
424
+ 'Ԛ' => 'ԛ',
425
+ 'Ԝ' => 'ԝ',
426
+ 'Ԟ' => 'ԟ',
427
+ 'Ԡ' => 'ԡ',
428
+ 'Ԣ' => 'ԣ',
429
+ 'Ԥ' => 'ԥ',
430
+ 'Ԧ' => 'ԧ',
431
+ 'Ԩ' => 'ԩ',
432
+ 'Ԫ' => 'ԫ',
433
+ 'Ԭ' => 'ԭ',
434
+ 'Ԯ' => 'ԯ',
435
+ 'Ա' => 'ա',
436
+ 'Բ' => 'բ',
437
+ 'Գ' => 'գ',
438
+ 'Դ' => 'դ',
439
+ 'Ե' => 'ե',
440
+ 'Զ' => 'զ',
441
+ 'Է' => 'է',
442
+ 'Ը' => 'ը',
443
+ 'Թ' => 'թ',
444
+ 'Ժ' => 'ժ',
445
+ 'Ի' => 'ի',
446
+ 'Լ' => 'լ',
447
+ 'Խ' => 'խ',
448
+ 'Ծ' => 'ծ',
449
+ 'Կ' => 'կ',
450
+ 'Հ' => 'հ',
451
+ 'Ձ' => 'ձ',
452
+ 'Ղ' => 'ղ',
453
+ 'Ճ' => 'ճ',
454
+ 'Մ' => 'մ',
455
+ 'Յ' => 'յ',
456
+ 'Ն' => 'ն',
457
+ 'Շ' => 'շ',
458
+ 'Ո' => 'ո',
459
+ 'Չ' => 'չ',
460
+ 'Պ' => 'պ',
461
+ 'Ջ' => 'ջ',
462
+ 'Ռ' => 'ռ',
463
+ 'Ս' => 'ս',
464
+ 'Վ' => 'վ',
465
+ 'Տ' => 'տ',
466
+ 'Ր' => 'ր',
467
+ 'Ց' => 'ց',
468
+ 'Ւ' => 'ւ',
469
+ 'Փ' => 'փ',
470
+ 'Ք' => 'ք',
471
+ 'Օ' => 'օ',
472
+ 'Ֆ' => 'ֆ',
473
+ 'Ⴀ' => 'ⴀ',
474
+ 'Ⴁ' => 'ⴁ',
475
+ 'Ⴂ' => 'ⴂ',
476
+ 'Ⴃ' => 'ⴃ',
477
+ 'Ⴄ' => 'ⴄ',
478
+ 'Ⴅ' => 'ⴅ',
479
+ 'Ⴆ' => 'ⴆ',
480
+ 'Ⴇ' => 'ⴇ',
481
+ 'Ⴈ' => 'ⴈ',
482
+ 'Ⴉ' => 'ⴉ',
483
+ 'Ⴊ' => 'ⴊ',
484
+ 'Ⴋ' => 'ⴋ',
485
+ 'Ⴌ' => 'ⴌ',
486
+ 'Ⴍ' => 'ⴍ',
487
+ 'Ⴎ' => 'ⴎ',
488
+ 'Ⴏ' => 'ⴏ',
489
+ 'Ⴐ' => 'ⴐ',
490
+ 'Ⴑ' => 'ⴑ',
491
+ 'Ⴒ' => 'ⴒ',
492
+ 'Ⴓ' => 'ⴓ',
493
+ 'Ⴔ' => 'ⴔ',
494
+ 'Ⴕ' => 'ⴕ',
495
+ 'Ⴖ' => 'ⴖ',
496
+ 'Ⴗ' => 'ⴗ',
497
+ 'Ⴘ' => 'ⴘ',
498
+ 'Ⴙ' => 'ⴙ',
499
+ 'Ⴚ' => 'ⴚ',
500
+ 'Ⴛ' => 'ⴛ',
501
+ 'Ⴜ' => 'ⴜ',
502
+ 'Ⴝ' => 'ⴝ',
503
+ 'Ⴞ' => 'ⴞ',
504
+ 'Ⴟ' => 'ⴟ',
505
+ 'Ⴠ' => 'ⴠ',
506
+ 'Ⴡ' => 'ⴡ',
507
+ 'Ⴢ' => 'ⴢ',
508
+ 'Ⴣ' => 'ⴣ',
509
+ 'Ⴤ' => 'ⴤ',
510
+ 'Ⴥ' => 'ⴥ',
511
+ 'Ⴧ' => 'ⴧ',
512
+ 'Ⴭ' => 'ⴭ',
513
+ 'Ḁ' => 'ḁ',
514
+ 'Ḃ' => 'ḃ',
515
+ 'Ḅ' => 'ḅ',
516
+ 'Ḇ' => 'ḇ',
517
+ 'Ḉ' => 'ḉ',
518
+ 'Ḋ' => 'ḋ',
519
+ 'Ḍ' => 'ḍ',
520
+ 'Ḏ' => 'ḏ',
521
+ 'Ḑ' => 'ḑ',
522
+ 'Ḓ' => 'ḓ',
523
+ 'Ḕ' => 'ḕ',
524
+ 'Ḗ' => 'ḗ',
525
+ 'Ḙ' => 'ḙ',
526
+ 'Ḛ' => 'ḛ',
527
+ 'Ḝ' => 'ḝ',
528
+ 'Ḟ' => 'ḟ',
529
+ 'Ḡ' => 'ḡ',
530
+ 'Ḣ' => 'ḣ',
531
+ 'Ḥ' => 'ḥ',
532
+ 'Ḧ' => 'ḧ',
533
+ 'Ḩ' => 'ḩ',
534
+ 'Ḫ' => 'ḫ',
535
+ 'Ḭ' => 'ḭ',
536
+ 'Ḯ' => 'ḯ',
537
+ 'Ḱ' => 'ḱ',
538
+ 'Ḳ' => 'ḳ',
539
+ 'Ḵ' => 'ḵ',
540
+ 'Ḷ' => 'ḷ',
541
+ 'Ḹ' => 'ḹ',
542
+ 'Ḻ' => 'ḻ',
543
+ 'Ḽ' => 'ḽ',
544
+ 'Ḿ' => 'ḿ',
545
+ 'Ṁ' => 'ṁ',
546
+ 'Ṃ' => 'ṃ',
547
+ 'Ṅ' => 'ṅ',
548
+ 'Ṇ' => 'ṇ',
549
+ 'Ṉ' => 'ṉ',
550
+ 'Ṋ' => 'ṋ',
551
+ 'Ṍ' => 'ṍ',
552
+ 'Ṏ' => 'ṏ',
553
+ 'Ṑ' => 'ṑ',
554
+ 'Ṓ' => 'ṓ',
555
+ 'Ṕ' => 'ṕ',
556
+ 'Ṗ' => 'ṗ',
557
+ 'Ṙ' => 'ṙ',
558
+ 'Ṛ' => 'ṛ',
559
+ 'Ṝ' => 'ṝ',
560
+ 'Ṟ' => 'ṟ',
561
+ 'Ṡ' => 'ṡ',
562
+ 'Ṣ' => 'ṣ',
563
+ 'Ṥ' => 'ṥ',
564
+ 'Ṧ' => 'ṧ',
565
+ 'Ṩ' => 'ṩ',
566
+ 'Ṫ' => 'ṫ',
567
+ 'Ṭ' => 'ṭ',
568
+ 'Ṯ' => 'ṯ',
569
+ 'Ṱ' => 'ṱ',
570
+ 'Ṳ' => 'ṳ',
571
+ 'Ṵ' => 'ṵ',
572
+ 'Ṷ' => 'ṷ',
573
+ 'Ṹ' => 'ṹ',
574
+ 'Ṻ' => 'ṻ',
575
+ 'Ṽ' => 'ṽ',
576
+ 'Ṿ' => 'ṿ',
577
+ 'Ẁ' => 'ẁ',
578
+ 'Ẃ' => 'ẃ',
579
+ 'Ẅ' => 'ẅ',
580
+ 'Ẇ' => 'ẇ',
581
+ 'Ẉ' => 'ẉ',
582
+ 'Ẋ' => 'ẋ',
583
+ 'Ẍ' => 'ẍ',
584
+ 'Ẏ' => 'ẏ',
585
+ 'Ẑ' => 'ẑ',
586
+ 'Ẓ' => 'ẓ',
587
+ 'Ẕ' => 'ẕ',
588
+ 'ẞ' => 'ß',
589
+ 'Ạ' => 'ạ',
590
+ 'Ả' => 'ả',
591
+ 'Ấ' => 'ấ',
592
+ 'Ầ' => 'ầ',
593
+ 'Ẩ' => 'ẩ',
594
+ 'Ẫ' => 'ẫ',
595
+ 'Ậ' => 'ậ',
596
+ 'Ắ' => 'ắ',
597
+ 'Ằ' => 'ằ',
598
+ 'Ẳ' => 'ẳ',
599
+ 'Ẵ' => 'ẵ',
600
+ 'Ặ' => 'ặ',
601
+ 'Ẹ' => 'ẹ',
602
+ 'Ẻ' => 'ẻ',
603
+ 'Ẽ' => 'ẽ',
604
+ 'Ế' => 'ế',
605
+ 'Ề' => 'ề',
606
+ 'Ể' => 'ể',
607
+ 'Ễ' => 'ễ',
608
+ 'Ệ' => 'ệ',
609
+ 'Ỉ' => 'ỉ',
610
+ 'Ị' => 'ị',
611
+ 'Ọ' => 'ọ',
612
+ 'Ỏ' => 'ỏ',
613
+ 'Ố' => 'ố',
614
+ 'Ồ' => 'ồ',
615
+ 'Ổ' => 'ổ',
616
+ 'Ỗ' => 'ỗ',
617
+ 'Ộ' => 'ộ',
618
+ 'Ớ' => 'ớ',
619
+ 'Ờ' => 'ờ',
620
+ 'Ở' => 'ở',
621
+ 'Ỡ' => 'ỡ',
622
+ 'Ợ' => 'ợ',
623
+ 'Ụ' => 'ụ',
624
+ 'Ủ' => 'ủ',
625
+ 'Ứ' => 'ứ',
626
+ 'Ừ' => 'ừ',
627
+ 'Ử' => 'ử',
628
+ 'Ữ' => 'ữ',
629
+ 'Ự' => 'ự',
630
+ 'Ỳ' => 'ỳ',
631
+ 'Ỵ' => 'ỵ',
632
+ 'Ỷ' => 'ỷ',
633
+ 'Ỹ' => 'ỹ',
634
+ 'Ỻ' => 'ỻ',
635
+ 'Ỽ' => 'ỽ',
636
+ 'Ỿ' => 'ỿ',
637
+ 'Ἀ' => 'ἀ',
638
+ 'Ἁ' => 'ἁ',
639
+ 'Ἂ' => 'ἂ',
640
+ 'Ἃ' => 'ἃ',
641
+ 'Ἄ' => 'ἄ',
642
+ 'Ἅ' => 'ἅ',
643
+ 'Ἆ' => 'ἆ',
644
+ 'Ἇ' => 'ἇ',
645
+ 'Ἐ' => 'ἐ',
646
+ 'Ἑ' => 'ἑ',
647
+ 'Ἒ' => 'ἒ',
648
+ 'Ἓ' => 'ἓ',
649
+ 'Ἔ' => 'ἔ',
650
+ 'Ἕ' => 'ἕ',
651
+ 'Ἠ' => 'ἠ',
652
+ 'Ἡ' => 'ἡ',
653
+ 'Ἢ' => 'ἢ',
654
+ 'Ἣ' => 'ἣ',
655
+ 'Ἤ' => 'ἤ',
656
+ 'Ἥ' => 'ἥ',
657
+ 'Ἦ' => 'ἦ',
658
+ 'Ἧ' => 'ἧ',
659
+ 'Ἰ' => 'ἰ',
660
+ 'Ἱ' => 'ἱ',
661
+ 'Ἲ' => 'ἲ',
662
+ 'Ἳ' => 'ἳ',
663
+ 'Ἴ' => 'ἴ',
664
+ 'Ἵ' => 'ἵ',
665
+ 'Ἶ' => 'ἶ',
666
+ 'Ἷ' => 'ἷ',
667
+ 'Ὀ' => 'ὀ',
668
+ 'Ὁ' => 'ὁ',
669
+ 'Ὂ' => 'ὂ',
670
+ 'Ὃ' => 'ὃ',
671
+ 'Ὄ' => 'ὄ',
672
+ 'Ὅ' => 'ὅ',
673
+ 'Ὑ' => 'ὑ',
674
+ 'Ὓ' => 'ὓ',
675
+ 'Ὕ' => 'ὕ',
676
+ 'Ὗ' => 'ὗ',
677
+ 'Ὠ' => 'ὠ',
678
+ 'Ὡ' => 'ὡ',
679
+ 'Ὢ' => 'ὢ',
680
+ 'Ὣ' => 'ὣ',
681
+ 'Ὤ' => 'ὤ',
682
+ 'Ὥ' => 'ὥ',
683
+ 'Ὦ' => 'ὦ',
684
+ 'Ὧ' => 'ὧ',
685
+ 'ᾈ' => 'ᾀ',
686
+ 'ᾉ' => 'ᾁ',
687
+ 'ᾊ' => 'ᾂ',
688
+ 'ᾋ' => 'ᾃ',
689
+ 'ᾌ' => 'ᾄ',
690
+ 'ᾍ' => 'ᾅ',
691
+ 'ᾎ' => 'ᾆ',
692
+ 'ᾏ' => 'ᾇ',
693
+ 'ᾘ' => 'ᾐ',
694
+ 'ᾙ' => 'ᾑ',
695
+ 'ᾚ' => 'ᾒ',
696
+ 'ᾛ' => 'ᾓ',
697
+ 'ᾜ' => 'ᾔ',
698
+ 'ᾝ' => 'ᾕ',
699
+ 'ᾞ' => 'ᾖ',
700
+ 'ᾟ' => 'ᾗ',
701
+ 'ᾨ' => 'ᾠ',
702
+ 'ᾩ' => 'ᾡ',
703
+ 'ᾪ' => 'ᾢ',
704
+ 'ᾫ' => 'ᾣ',
705
+ 'ᾬ' => 'ᾤ',
706
+ 'ᾭ' => 'ᾥ',
707
+ 'ᾮ' => 'ᾦ',
708
+ 'ᾯ' => 'ᾧ',
709
+ 'Ᾰ' => 'ᾰ',
710
+ 'Ᾱ' => 'ᾱ',
711
+ 'Ὰ' => 'ὰ',
712
+ 'Ά' => 'ά',
713
+ 'ᾼ' => 'ᾳ',
714
+ 'Ὲ' => 'ὲ',
715
+ 'Έ' => 'έ',
716
+ 'Ὴ' => 'ὴ',
717
+ 'Ή' => 'ή',
718
+ 'ῌ' => 'ῃ',
719
+ 'Ῐ' => 'ῐ',
720
+ 'Ῑ' => 'ῑ',
721
+ 'Ὶ' => 'ὶ',
722
+ 'Ί' => 'ί',
723
+ 'Ῠ' => 'ῠ',
724
+ 'Ῡ' => 'ῡ',
725
+ 'Ὺ' => 'ὺ',
726
+ 'Ύ' => 'ύ',
727
+ 'Ῥ' => 'ῥ',
728
+ 'Ὸ' => 'ὸ',
729
+ 'Ό' => 'ό',
730
+ 'Ὼ' => 'ὼ',
731
+ 'Ώ' => 'ώ',
732
+ 'ῼ' => 'ῳ',
733
+ 'Ω' => 'ω',
734
+ 'K' => 'k',
735
+ 'Å' => 'å',
736
+ 'Ⅎ' => 'ⅎ',
737
+ 'Ⅰ' => 'ⅰ',
738
+ 'Ⅱ' => 'ⅱ',
739
+ 'Ⅲ' => 'ⅲ',
740
+ 'Ⅳ' => 'ⅳ',
741
+ 'Ⅴ' => 'ⅴ',
742
+ 'Ⅵ' => 'ⅵ',
743
+ 'Ⅶ' => 'ⅶ',
744
+ 'Ⅷ' => 'ⅷ',
745
+ 'Ⅸ' => 'ⅸ',
746
+ 'Ⅹ' => 'ⅹ',
747
+ 'Ⅺ' => 'ⅺ',
748
+ 'Ⅻ' => 'ⅻ',
749
+ 'Ⅼ' => 'ⅼ',
750
+ 'Ⅽ' => 'ⅽ',
751
+ 'Ⅾ' => 'ⅾ',
752
+ 'Ⅿ' => 'ⅿ',
753
+ 'Ↄ' => 'ↄ',
754
+ 'Ⓐ' => 'ⓐ',
755
+ 'Ⓑ' => 'ⓑ',
756
+ 'Ⓒ' => 'ⓒ',
757
+ 'Ⓓ' => 'ⓓ',
758
+ 'Ⓔ' => 'ⓔ',
759
+ 'Ⓕ' => 'ⓕ',
760
+ 'Ⓖ' => 'ⓖ',
761
+ 'Ⓗ' => 'ⓗ',
762
+ 'Ⓘ' => 'ⓘ',
763
+ 'Ⓙ' => 'ⓙ',
764
+ 'Ⓚ' => 'ⓚ',
765
+ 'Ⓛ' => 'ⓛ',
766
+ 'Ⓜ' => 'ⓜ',
767
+ 'Ⓝ' => 'ⓝ',
768
+ 'Ⓞ' => 'ⓞ',
769
+ 'Ⓟ' => 'ⓟ',
770
+ 'Ⓠ' => 'ⓠ',
771
+ 'Ⓡ' => 'ⓡ',
772
+ 'Ⓢ' => 'ⓢ',
773
+ 'Ⓣ' => 'ⓣ',
774
+ 'Ⓤ' => 'ⓤ',
775
+ 'Ⓥ' => 'ⓥ',
776
+ 'Ⓦ' => 'ⓦ',
777
+ 'Ⓧ' => 'ⓧ',
778
+ 'Ⓨ' => 'ⓨ',
779
+ 'Ⓩ' => 'ⓩ',
780
+ 'Ⰰ' => 'ⰰ',
781
+ 'Ⰱ' => 'ⰱ',
782
+ 'Ⰲ' => 'ⰲ',
783
+ 'Ⰳ' => 'ⰳ',
784
+ 'Ⰴ' => 'ⰴ',
785
+ 'Ⰵ' => 'ⰵ',
786
+ 'Ⰶ' => 'ⰶ',
787
+ 'Ⰷ' => 'ⰷ',
788
+ 'Ⰸ' => 'ⰸ',
789
+ 'Ⰹ' => 'ⰹ',
790
+ 'Ⰺ' => 'ⰺ',
791
+ 'Ⰻ' => 'ⰻ',
792
+ 'Ⰼ' => 'ⰼ',
793
+ 'Ⰽ' => 'ⰽ',
794
+ 'Ⰾ' => 'ⰾ',
795
+ 'Ⰿ' => 'ⰿ',
796
+ 'Ⱀ' => 'ⱀ',
797
+ 'Ⱁ' => 'ⱁ',
798
+ 'Ⱂ' => 'ⱂ',
799
+ 'Ⱃ' => 'ⱃ',
800
+ 'Ⱄ' => 'ⱄ',
801
+ 'Ⱅ' => 'ⱅ',
802
+ 'Ⱆ' => 'ⱆ',
803
+ 'Ⱇ' => 'ⱇ',
804
+ 'Ⱈ' => 'ⱈ',
805
+ 'Ⱉ' => 'ⱉ',
806
+ 'Ⱊ' => 'ⱊ',
807
+ 'Ⱋ' => 'ⱋ',
808
+ 'Ⱌ' => 'ⱌ',
809
+ 'Ⱍ' => 'ⱍ',
810
+ 'Ⱎ' => 'ⱎ',
811
+ 'Ⱏ' => 'ⱏ',
812
+ 'Ⱐ' => 'ⱐ',
813
+ 'Ⱑ' => 'ⱑ',
814
+ 'Ⱒ' => 'ⱒ',
815
+ 'Ⱓ' => 'ⱓ',
816
+ 'Ⱔ' => 'ⱔ',
817
+ 'Ⱕ' => 'ⱕ',
818
+ 'Ⱖ' => 'ⱖ',
819
+ 'Ⱗ' => 'ⱗ',
820
+ 'Ⱘ' => 'ⱘ',
821
+ 'Ⱙ' => 'ⱙ',
822
+ 'Ⱚ' => 'ⱚ',
823
+ 'Ⱛ' => 'ⱛ',
824
+ 'Ⱜ' => 'ⱜ',
825
+ 'Ⱝ' => 'ⱝ',
826
+ 'Ⱞ' => 'ⱞ',
827
+ 'Ⱡ' => 'ⱡ',
828
+ 'Ɫ' => 'ɫ',
829
+ 'Ᵽ' => 'ᵽ',
830
+ 'Ɽ' => 'ɽ',
831
+ 'Ⱨ' => 'ⱨ',
832
+ 'Ⱪ' => 'ⱪ',
833
+ 'Ⱬ' => 'ⱬ',
834
+ 'Ɑ' => 'ɑ',
835
+ 'Ɱ' => 'ɱ',
836
+ 'Ɐ' => 'ɐ',
837
+ 'Ɒ' => 'ɒ',
838
+ 'Ⱳ' => 'ⱳ',
839
+ 'Ⱶ' => 'ⱶ',
840
+ 'Ȿ' => 'ȿ',
841
+ 'Ɀ' => 'ɀ',
842
+ 'Ⲁ' => 'ⲁ',
843
+ 'Ⲃ' => 'ⲃ',
844
+ 'Ⲅ' => 'ⲅ',
845
+ 'Ⲇ' => 'ⲇ',
846
+ 'Ⲉ' => 'ⲉ',
847
+ 'Ⲋ' => 'ⲋ',
848
+ 'Ⲍ' => 'ⲍ',
849
+ 'Ⲏ' => 'ⲏ',
850
+ 'Ⲑ' => 'ⲑ',
851
+ 'Ⲓ' => 'ⲓ',
852
+ 'Ⲕ' => 'ⲕ',
853
+ 'Ⲗ' => 'ⲗ',
854
+ 'Ⲙ' => 'ⲙ',
855
+ 'Ⲛ' => 'ⲛ',
856
+ 'Ⲝ' => 'ⲝ',
857
+ 'Ⲟ' => 'ⲟ',
858
+ 'Ⲡ' => 'ⲡ',
859
+ 'Ⲣ' => 'ⲣ',
860
+ 'Ⲥ' => 'ⲥ',
861
+ 'Ⲧ' => 'ⲧ',
862
+ 'Ⲩ' => 'ⲩ',
863
+ 'Ⲫ' => 'ⲫ',
864
+ 'Ⲭ' => 'ⲭ',
865
+ 'Ⲯ' => 'ⲯ',
866
+ 'Ⲱ' => 'ⲱ',
867
+ 'Ⲳ' => 'ⲳ',
868
+ 'Ⲵ' => 'ⲵ',
869
+ 'Ⲷ' => 'ⲷ',
870
+ 'Ⲹ' => 'ⲹ',
871
+ 'Ⲻ' => 'ⲻ',
872
+ 'Ⲽ' => 'ⲽ',
873
+ 'Ⲿ' => 'ⲿ',
874
+ 'Ⳁ' => 'ⳁ',
875
+ 'Ⳃ' => 'ⳃ',
876
+ 'Ⳅ' => 'ⳅ',
877
+ 'Ⳇ' => 'ⳇ',
878
+ 'Ⳉ' => 'ⳉ',
879
+ 'Ⳋ' => 'ⳋ',
880
+ 'Ⳍ' => 'ⳍ',
881
+ 'Ⳏ' => 'ⳏ',
882
+ 'Ⳑ' => 'ⳑ',
883
+ 'Ⳓ' => 'ⳓ',
884
+ 'Ⳕ' => 'ⳕ',
885
+ 'Ⳗ' => 'ⳗ',
886
+ 'Ⳙ' => 'ⳙ',
887
+ 'Ⳛ' => 'ⳛ',
888
+ 'Ⳝ' => 'ⳝ',
889
+ 'Ⳟ' => 'ⳟ',
890
+ 'Ⳡ' => 'ⳡ',
891
+ 'Ⳣ' => 'ⳣ',
892
+ 'Ⳬ' => 'ⳬ',
893
+ 'Ⳮ' => 'ⳮ',
894
+ 'Ⳳ' => 'ⳳ',
895
+ 'Ꙁ' => 'ꙁ',
896
+ 'Ꙃ' => 'ꙃ',
897
+ 'Ꙅ' => 'ꙅ',
898
+ 'Ꙇ' => 'ꙇ',
899
+ 'Ꙉ' => 'ꙉ',
900
+ 'Ꙋ' => 'ꙋ',
901
+ 'Ꙍ' => 'ꙍ',
902
+ 'Ꙏ' => 'ꙏ',
903
+ 'Ꙑ' => 'ꙑ',
904
+ 'Ꙓ' => 'ꙓ',
905
+ 'Ꙕ' => 'ꙕ',
906
+ 'Ꙗ' => 'ꙗ',
907
+ 'Ꙙ' => 'ꙙ',
908
+ 'Ꙛ' => 'ꙛ',
909
+ 'Ꙝ' => 'ꙝ',
910
+ 'Ꙟ' => 'ꙟ',
911
+ 'Ꙡ' => 'ꙡ',
912
+ 'Ꙣ' => 'ꙣ',
913
+ 'Ꙥ' => 'ꙥ',
914
+ 'Ꙧ' => 'ꙧ',
915
+ 'Ꙩ' => 'ꙩ',
916
+ 'Ꙫ' => 'ꙫ',
917
+ 'Ꙭ' => 'ꙭ',
918
+ 'Ꚁ' => 'ꚁ',
919
+ 'Ꚃ' => 'ꚃ',
920
+ 'Ꚅ' => 'ꚅ',
921
+ 'Ꚇ' => 'ꚇ',
922
+ 'Ꚉ' => 'ꚉ',
923
+ 'Ꚋ' => 'ꚋ',
924
+ 'Ꚍ' => 'ꚍ',
925
+ 'Ꚏ' => 'ꚏ',
926
+ 'Ꚑ' => 'ꚑ',
927
+ 'Ꚓ' => 'ꚓ',
928
+ 'Ꚕ' => 'ꚕ',
929
+ 'Ꚗ' => 'ꚗ',
930
+ 'Ꚙ' => 'ꚙ',
931
+ 'Ꚛ' => 'ꚛ',
932
+ 'Ꜣ' => 'ꜣ',
933
+ 'Ꜥ' => 'ꜥ',
934
+ 'Ꜧ' => 'ꜧ',
935
+ 'Ꜩ' => 'ꜩ',
936
+ 'Ꜫ' => 'ꜫ',
937
+ 'Ꜭ' => 'ꜭ',
938
+ 'Ꜯ' => 'ꜯ',
939
+ 'Ꜳ' => 'ꜳ',
940
+ 'Ꜵ' => 'ꜵ',
941
+ 'Ꜷ' => 'ꜷ',
942
+ 'Ꜹ' => 'ꜹ',
943
+ 'Ꜻ' => 'ꜻ',
944
+ 'Ꜽ' => 'ꜽ',
945
+ 'Ꜿ' => 'ꜿ',
946
+ 'Ꝁ' => 'ꝁ',
947
+ 'Ꝃ' => 'ꝃ',
948
+ 'Ꝅ' => 'ꝅ',
949
+ 'Ꝇ' => 'ꝇ',
950
+ 'Ꝉ' => 'ꝉ',
951
+ 'Ꝋ' => 'ꝋ',
952
+ 'Ꝍ' => 'ꝍ',
953
+ 'Ꝏ' => 'ꝏ',
954
+ 'Ꝑ' => 'ꝑ',
955
+ 'Ꝓ' => 'ꝓ',
956
+ 'Ꝕ' => 'ꝕ',
957
+ 'Ꝗ' => 'ꝗ',
958
+ 'Ꝙ' => 'ꝙ',
959
+ 'Ꝛ' => 'ꝛ',
960
+ 'Ꝝ' => 'ꝝ',
961
+ 'Ꝟ' => 'ꝟ',
962
+ 'Ꝡ' => 'ꝡ',
963
+ 'Ꝣ' => 'ꝣ',
964
+ 'Ꝥ' => 'ꝥ',
965
+ 'Ꝧ' => 'ꝧ',
966
+ 'Ꝩ' => 'ꝩ',
967
+ 'Ꝫ' => 'ꝫ',
968
+ 'Ꝭ' => 'ꝭ',
969
+ 'Ꝯ' => 'ꝯ',
970
+ 'Ꝺ' => 'ꝺ',
971
+ 'Ꝼ' => 'ꝼ',
972
+ 'Ᵹ' => 'ᵹ',
973
+ 'Ꝿ' => 'ꝿ',
974
+ 'Ꞁ' => 'ꞁ',
975
+ 'Ꞃ' => 'ꞃ',
976
+ 'Ꞅ' => 'ꞅ',
977
+ 'Ꞇ' => 'ꞇ',
978
+ 'Ꞌ' => 'ꞌ',
979
+ 'Ɥ' => 'ɥ',
980
+ 'Ꞑ' => 'ꞑ',
981
+ 'Ꞓ' => 'ꞓ',
982
+ 'Ꞗ' => 'ꞗ',
983
+ 'Ꞙ' => 'ꞙ',
984
+ 'Ꞛ' => 'ꞛ',
985
+ 'Ꞝ' => 'ꞝ',
986
+ 'Ꞟ' => 'ꞟ',
987
+ 'Ꞡ' => 'ꞡ',
988
+ 'Ꞣ' => 'ꞣ',
989
+ 'Ꞥ' => 'ꞥ',
990
+ 'Ꞧ' => 'ꞧ',
991
+ 'Ꞩ' => 'ꞩ',
992
+ 'Ɦ' => 'ɦ',
993
+ 'Ɜ' => 'ɜ',
994
+ 'Ɡ' => 'ɡ',
995
+ 'Ɬ' => 'ɬ',
996
+ 'Ʞ' => 'ʞ',
997
+ 'Ʇ' => 'ʇ',
998
+ 'A' => 'a',
999
+ 'B' => 'b',
1000
+ 'C' => 'c',
1001
+ 'D' => 'd',
1002
+ 'E' => 'e',
1003
+ 'F' => 'f',
1004
+ 'G' => 'g',
1005
+ 'H' => 'h',
1006
+ 'I' => 'i',
1007
+ 'J' => 'j',
1008
+ 'K' => 'k',
1009
+ 'L' => 'l',
1010
+ 'M' => 'm',
1011
+ 'N' => 'n',
1012
+ 'O' => 'o',
1013
+ 'P' => 'p',
1014
+ 'Q' => 'q',
1015
+ 'R' => 'r',
1016
+ 'S' => 's',
1017
+ 'T' => 't',
1018
+ 'U' => 'u',
1019
+ 'V' => 'v',
1020
+ 'W' => 'w',
1021
+ 'X' => 'x',
1022
+ 'Y' => 'y',
1023
+ 'Z' => 'z',
1024
+ '𐐀' => '𐐨',
1025
+ '𐐁' => '𐐩',
1026
+ '𐐂' => '𐐪',
1027
+ '𐐃' => '𐐫',
1028
+ '𐐄' => '𐐬',
1029
+ '𐐅' => '𐐭',
1030
+ '𐐆' => '𐐮',
1031
+ '𐐇' => '𐐯',
1032
+ '𐐈' => '𐐰',
1033
+ '𐐉' => '𐐱',
1034
+ '𐐊' => '𐐲',
1035
+ '𐐋' => '𐐳',
1036
+ '𐐌' => '𐐴',
1037
+ '𐐍' => '𐐵',
1038
+ '𐐎' => '𐐶',
1039
+ '𐐏' => '𐐷',
1040
+ '𐐐' => '𐐸',
1041
+ '𐐑' => '𐐹',
1042
+ '𐐒' => '𐐺',
1043
+ '𐐓' => '𐐻',
1044
+ '𐐔' => '𐐼',
1045
+ '𐐕' => '𐐽',
1046
+ '𐐖' => '𐐾',
1047
+ '𐐗' => '𐐿',
1048
+ '𐐘' => '𐑀',
1049
+ '𐐙' => '𐑁',
1050
+ '𐐚' => '𐑂',
1051
+ '𐐛' => '𐑃',
1052
+ '𐐜' => '𐑄',
1053
+ '𐐝' => '𐑅',
1054
+ '𐐞' => '𐑆',
1055
+ '𐐟' => '𐑇',
1056
+ '𐐠' => '𐑈',
1057
+ '𐐡' => '𐑉',
1058
+ '𐐢' => '𐑊',
1059
+ '𐐣' => '𐑋',
1060
+ '𐐤' => '𐑌',
1061
+ '𐐥' => '𐑍',
1062
+ '𐐦' => '𐑎',
1063
+ '𐐧' => '𐑏',
1064
+ '𑢠' => '𑣀',
1065
+ '𑢡' => '𑣁',
1066
+ '𑢢' => '𑣂',
1067
+ '𑢣' => '𑣃',
1068
+ '𑢤' => '𑣄',
1069
+ '𑢥' => '𑣅',
1070
+ '𑢦' => '𑣆',
1071
+ '𑢧' => '𑣇',
1072
+ '𑢨' => '𑣈',
1073
+ '𑢩' => '𑣉',
1074
+ '𑢪' => '𑣊',
1075
+ '𑢫' => '𑣋',
1076
+ '𑢬' => '𑣌',
1077
+ '𑢭' => '𑣍',
1078
+ '𑢮' => '𑣎',
1079
+ '𑢯' => '𑣏',
1080
+ '𑢰' => '𑣐',
1081
+ '𑢱' => '𑣑',
1082
+ '𑢲' => '𑣒',
1083
+ '𑢳' => '𑣓',
1084
+ '𑢴' => '𑣔',
1085
+ '𑢵' => '𑣕',
1086
+ '𑢶' => '𑣖',
1087
+ '𑢷' => '𑣗',
1088
+ '𑢸' => '𑣘',
1089
+ '𑢹' => '𑣙',
1090
+ '𑢺' => '𑣚',
1091
+ '𑢻' => '𑣛',
1092
+ '𑢼' => '𑣜',
1093
+ '𑢽' => '𑣝',
1094
+ '𑢾' => '𑣞',
1095
+ '𑢿' => '𑣟',
1096
+ );
vendor/symfony/polyfill-mbstring/Resources/unidata/titleCaseRegexp.php ADDED
@@ -0,0 +1,5 @@
 
 
 
 
 
1
+ <?php
2
+
3
+ // from Case_Ignorable in https://unicode.org/Public/UNIDATA/DerivedCoreProperties.txt
4
+
5
+ return '/(?<![\x{0027}\x{002E}\x{003A}\x{005E}\x{0060}\x{00A8}\x{00AD}\x{00AF}\x{00B4}\x{00B7}\x{00B8}\x{02B0}-\x{02C1}\x{02C2}-\x{02C5}\x{02C6}-\x{02D1}\x{02D2}-\x{02DF}\x{02E0}-\x{02E4}\x{02E5}-\x{02EB}\x{02EC}\x{02ED}\x{02EE}\x{02EF}-\x{02FF}\x{0300}-\x{036F}\x{0374}\x{0375}\x{037A}\x{0384}-\x{0385}\x{0387}\x{0483}-\x{0487}\x{0488}-\x{0489}\x{0559}\x{0591}-\x{05BD}\x{05BF}\x{05C1}-\x{05C2}\x{05C4}-\x{05C5}\x{05C7}\x{05F4}\x{0600}-\x{0605}\x{0610}-\x{061A}\x{061C}\x{0640}\x{064B}-\x{065F}\x{0670}\x{06D6}-\x{06DC}\x{06DD}\x{06DF}-\x{06E4}\x{06E5}-\x{06E6}\x{06E7}-\x{06E8}\x{06EA}-\x{06ED}\x{070F}\x{0711}\x{0730}-\x{074A}\x{07A6}-\x{07B0}\x{07EB}-\x{07F3}\x{07F4}-\x{07F5}\x{07FA}\x{07FD}\x{0816}-\x{0819}\x{081A}\x{081B}-\x{0823}\x{0824}\x{0825}-\x{0827}\x{0828}\x{0829}-\x{082D}\x{0859}-\x{085B}\x{08D3}-\x{08E1}\x{08E2}\x{08E3}-\x{0902}\x{093A}\x{093C}\x{0941}-\x{0948}\x{094D}\x{0951}-\x{0957}\x{0962}-\x{0963}\x{0971}\x{0981}\x{09BC}\x{09C1}-\x{09C4}\x{09CD}\x{09E2}-\x{09E3}\x{09FE}\x{0A01}-\x{0A02}\x{0A3C}\x{0A41}-\x{0A42}\x{0A47}-\x{0A48}\x{0A4B}-\x{0A4D}\x{0A51}\x{0A70}-\x{0A71}\x{0A75}\x{0A81}-\x{0A82}\x{0ABC}\x{0AC1}-\x{0AC5}\x{0AC7}-\x{0AC8}\x{0ACD}\x{0AE2}-\x{0AE3}\x{0AFA}-\x{0AFF}\x{0B01}\x{0B3C}\x{0B3F}\x{0B41}-\x{0B44}\x{0B4D}\x{0B56}\x{0B62}-\x{0B63}\x{0B82}\x{0BC0}\x{0BCD}\x{0C00}\x{0C04}\x{0C3E}-\x{0C40}\x{0C46}-\x{0C48}\x{0C4A}-\x{0C4D}\x{0C55}-\x{0C56}\x{0C62}-\x{0C63}\x{0C81}\x{0CBC}\x{0CBF}\x{0CC6}\x{0CCC}-\x{0CCD}\x{0CE2}-\x{0CE3}\x{0D00}-\x{0D01}\x{0D3B}-\x{0D3C}\x{0D41}-\x{0D44}\x{0D4D}\x{0D62}-\x{0D63}\x{0DCA}\x{0DD2}-\x{0DD4}\x{0DD6}\x{0E31}\x{0E34}-\x{0E3A}\x{0E46}\x{0E47}-\x{0E4E}\x{0EB1}\x{0EB4}-\x{0EB9}\x{0EBB}-\x{0EBC}\x{0EC6}\x{0EC8}-\x{0ECD}\x{0F18}-\x{0F19}\x{0F35}\x{0F37}\x{0F39}\x{0F71}-\x{0F7E}\x{0F80}-\x{0F84}\x{0F86}-\x{0F87}\x{0F8D}-\x{0F97}\x{0F99}-\x{0FBC}\x{0FC6}\x{102D}-\x{1030}\x{1032}-\x{1037}\x{1039}-\x{103A}\x{103D}-\x{103E}\x{1058}-\x{1059}\x{105E}-\x{1060}\x{1071}-\x{1074}\x{1082}\x{1085}-\x{1086}\x{108D}\x{109D}\x{10FC}\x{135D}-\x{135F}\x{1712}-\x{1714}\x{1732}-\x{1734}\x{1752}-\x{1753}\x{1772}-\x{1773}\x{17B4}-\x{17B5}\x{17B7}-\x{17BD}\x{17C6}\x{17C9}-\x{17D3}\x{17D7}\x{17DD}\x{180B}-\x{180D}\x{180E}\x{1843}\x{1885}-\x{1886}\x{18A9}\x{1920}-\x{1922}\x{1927}-\x{1928}\x{1932}\x{1939}-\x{193B}\x{1A17}-\x{1A18}\x{1A1B}\x{1A56}\x{1A58}-\x{1A5E}\x{1A60}\x{1A62}\x{1A65}-\x{1A6C}\x{1A73}-\x{1A7C}\x{1A7F}\x{1AA7}\x{1AB0}-\x{1ABD}\x{1ABE}\x{1B00}-\x{1B03}\x{1B34}\x{1B36}-\x{1B3A}\x{1B3C}\x{1B42}\x{1B6B}-\x{1B73}\x{1B80}-\x{1B81}\x{1BA2}-\x{1BA5}\x{1BA8}-\x{1BA9}\x{1BAB}-\x{1BAD}\x{1BE6}\x{1BE8}-\x{1BE9}\x{1BED}\x{1BEF}-\x{1BF1}\x{1C2C}-\x{1C33}\x{1C36}-\x{1C37}\x{1C78}-\x{1C7D}\x{1CD0}-\x{1CD2}\x{1CD4}-\x{1CE0}\x{1CE2}-\x{1CE8}\x{1CED}\x{1CF4}\x{1CF8}-\x{1CF9}\x{1D2C}-\x{1D6A}\x{1D78}\x{1D9B}-\x{1DBF}\x{1DC0}-\x{1DF9}\x{1DFB}-\x{1DFF}\x{1FBD}\x{1FBF}-\x{1FC1}\x{1FCD}-\x{1FCF}\x{1FDD}-\x{1FDF}\x{1FED}-\x{1FEF}\x{1FFD}-\x{1FFE}\x{200B}-\x{200F}\x{2018}\x{2019}\x{2024}\x{2027}\x{202A}-\x{202E}\x{2060}-\x{2064}\x{2066}-\x{206F}\x{2071}\x{207F}\x{2090}-\x{209C}\x{20D0}-\x{20DC}\x{20DD}-\x{20E0}\x{20E1}\x{20E2}-\x{20E4}\x{20E5}-\x{20F0}\x{2C7C}-\x{2C7D}\x{2CEF}-\x{2CF1}\x{2D6F}\x{2D7F}\x{2DE0}-\x{2DFF}\x{2E2F}\x{3005}\x{302A}-\x{302D}\x{3031}-\x{3035}\x{303B}\x{3099}-\x{309A}\x{309B}-\x{309C}\x{309D}-\x{309E}\x{30FC}-\x{30FE}\x{A015}\x{A4F8}-\x{A4FD}\x{A60C}\x{A66F}\x{A670}-\x{A672}\x{A674}-\x{A67D}\x{A67F}\x{A69C}-\x{A69D}\x{A69E}-\x{A69F}\x{A6F0}-\x{A6F1}\x{A700}-\x{A716}\x{A717}-\x{A71F}\x{A720}-\x{A721}\x{A770}\x{A788}\x{A789}-\x{A78A}\x{A7F8}-\x{A7F9}\x{A802}\x{A806}\x{A80B}\x{A825}-\x{A826}\x{A8C4}-\x{A8C5}\x{A8E0}-\x{A8F1}\x{A8FF}\x{A926}-\x{A92D}\x{A947}-\x{A951}\x{A980}-\x{A982}\x{A9B3}\x{A9B6}-\x{A9B9}\x{A9BC}\x{A9CF}\x{A9E5}\x{A9E6}\x{AA29}-\x{AA2E}\x{AA31}-\x{AA32}\x{AA35}-\x{AA36}\x{AA43}\x{AA4C}\x{AA70}\x{AA7C}\x{AAB0}\x{AAB2}-\x{AAB4}\x{AAB7}-\x{AAB8}\x{AABE}-\x{AABF}\x{AAC1}\x{AADD}\x{AAEC}-\x{AAED}\x{AAF3}-\x{AAF4}\x{AAF6}\x{AB5B}\x{AB5C}-\x{AB5F}\x{ABE5}\x{ABE8}\x{ABED}\x{FB1E}\x{FBB2}-\x{FBC1}\x{FE00}-\x{FE0F}\x{FE13}\x{FE20}-\x{FE2F}\x{FE52}\x{FE55}\x{FEFF}\x{FF07}\x{FF0E}\x{FF1A}\x{FF3E}\x{FF40}\x{FF70}\x{FF9E}-\x{FF9F}\x{FFE3}\x{FFF9}-\x{FFFB}\x{101FD}\x{102E0}\x{10376}-\x{1037A}\x{10A01}-\x{10A03}\x{10A05}-\x{10A06}\x{10A0C}-\x{10A0F}\x{10A38}-\x{10A3A}\x{10A3F}\x{10AE5}-\x{10AE6}\x{10D24}-\x{10D27}\x{10F46}-\x{10F50}\x{11001}\x{11038}-\x{11046}\x{1107F}-\x{11081}\x{110B3}-\x{110B6}\x{110B9}-\x{110BA}\x{110BD}\x{110CD}\x{11100}-\x{11102}\x{11127}-\x{1112B}\x{1112D}-\x{11134}\x{11173}\x{11180}-\x{11181}\x{111B6}-\x{111BE}\x{111C9}-\x{111CC}\x{1122F}-\x{11231}\x{11234}\x{11236}-\x{11237}\x{1123E}\x{112DF}\x{112E3}-\x{112EA}\x{11300}-\x{11301}\x{1133B}-\x{1133C}\x{11340}\x{11366}-\x{1136C}\x{11370}-\x{11374}\x{11438}-\x{1143F}\x{11442}-\x{11444}\x{11446}\x{1145E}\x{114B3}-\x{114B8}\x{114BA}\x{114BF}-\x{114C0}\x{114C2}-\x{114C3}\x{115B2}-\x{115B5}\x{115BC}-\x{115BD}\x{115BF}-\x{115C0}\x{115DC}-\x{115DD}\x{11633}-\x{1163A}\x{1163D}\x{1163F}-\x{11640}\x{116AB}\x{116AD}\x{116B0}-\x{116B5}\x{116B7}\x{1171D}-\x{1171F}\x{11722}-\x{11725}\x{11727}-\x{1172B}\x{1182F}-\x{11837}\x{11839}-\x{1183A}\x{11A01}-\x{11A0A}\x{11A33}-\x{11A38}\x{11A3B}-\x{11A3E}\x{11A47}\x{11A51}-\x{11A56}\x{11A59}-\x{11A5B}\x{11A8A}-\x{11A96}\x{11A98}-\x{11A99}\x{11C30}-\x{11C36}\x{11C38}-\x{11C3D}\x{11C3F}\x{11C92}-\x{11CA7}\x{11CAA}-\x{11CB0}\x{11CB2}-\x{11CB3}\x{11CB5}-\x{11CB6}\x{11D31}-\x{11D36}\x{11D3A}\x{11D3C}-\x{11D3D}\x{11D3F}-\x{11D45}\x{11D47}\x{11D90}-\x{11D91}\x{11D95}\x{11D97}\x{11EF3}-\x{11EF4}\x{16AF0}-\x{16AF4}\x{16B30}-\x{16B36}\x{16B40}-\x{16B43}\x{16F8F}-\x{16F92}\x{16F93}-\x{16F9F}\x{16FE0}-\x{16FE1}\x{1BC9D}-\x{1BC9E}\x{1BCA0}-\x{1BCA3}\x{1D167}-\x{1D169}\x{1D173}-\x{1D17A}\x{1D17B}-\x{1D182}\x{1D185}-\x{1D18B}\x{1D1AA}-\x{1D1AD}\x{1D242}-\x{1D244}\x{1DA00}-\x{1DA36}\x{1DA3B}-\x{1DA6C}\x{1DA75}\x{1DA84}\x{1DA9B}-\x{1DA9F}\x{1DAA1}-\x{1DAAF}\x{1E000}-\x{1E006}\x{1E008}-\x{1E018}\x{1E01B}-\x{1E021}\x{1E023}-\x{1E024}\x{1E026}-\x{1E02A}\x{1E8D0}-\x{1E8D6}\x{1E944}-\x{1E94A}\x{1F3FB}-\x{1F3FF}\x{E0001}\x{E0020}-\x{E007F}\x{E0100}-\x{E01EF}])(\pL)(\pL*+)/u';
vendor/symfony/polyfill-mbstring/Resources/unidata/upperCase.php ADDED
@@ -0,0 +1,1104 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <?php
2
+
3
+ return array(
4
+ 'a' => 'A',
5
+ 'b' => 'B',
6
+ 'c' => 'C',
7
+ 'd' => 'D',
8
+ 'e' => 'E',
9
+ 'f' => 'F',
10
+ 'g' => 'G',
11
+ 'h' => 'H',
12
+ 'i' => 'I',
13
+ 'j' => 'J',
14
+ 'k' => 'K',
15
+ 'l' => 'L',
16
+ 'm' => 'M',
17
+ 'n' => 'N',
18
+ 'o' => 'O',
19
+ 'p' => 'P',
20
+ 'q' => 'Q',
21
+ 'r' => 'R',
22
+ 's' => 'S',
23
+ 't' => 'T',
24
+ 'u' => 'U',
25
+ 'v' => 'V',
26
+ 'w' => 'W',
27
+ 'x' => 'X',
28
+ 'y' => 'Y',
29
+ 'z' => 'Z',
30
+ 'µ' => 'Μ',
31
+ 'à' => 'À',
32
+ 'á' => 'Á',
33
+ 'â' => 'Â',
34
+ 'ã' => 'Ã',
35
+ 'ä' => 'Ä',
36
+ 'å' => 'Å',
37
+ 'æ' => 'Æ',
38
+ 'ç' => 'Ç',
39
+ 'è' => 'È',
40
+ 'é' => 'É',
41
+ 'ê' => 'Ê',
42
+ 'ë' => 'Ë',
43
+ 'ì' => 'Ì',
44
+ 'í' => 'Í',
45
+ 'î' => 'Î',
46
+ 'ï' => 'Ï',
47
+ 'ð' => 'Ð',
48
+ 'ñ' => 'Ñ',
49
+ 'ò' => 'Ò',
50
+ 'ó' => 'Ó',
51
+ 'ô' => 'Ô',
52
+ 'õ' => 'Õ',
53
+ 'ö' => 'Ö',
54
+ 'ø' => 'Ø',
55
+ 'ù' => 'Ù',
56
+ 'ú' => 'Ú',
57
+ 'û' => 'Û',
58
+ 'ü' => 'Ü',
59
+ 'ý' => 'Ý',
60
+ 'þ' => 'Þ',
61
+ 'ÿ' => 'Ÿ',
62
+ 'ā' => 'Ā',
63
+ 'ă' => 'Ă',
64
+ 'ą' => 'Ą',
65
+ 'ć' => 'Ć',
66
+ 'ĉ' => 'Ĉ',
67
+ 'ċ' => 'Ċ',
68
+ 'č' => 'Č',
69
+ 'ď' => 'Ď',
70
+ 'đ' => 'Đ',
71
+ 'ē' => 'Ē',
72
+ 'ĕ' => 'Ĕ',
73
+ 'ė' => 'Ė',
74
+ 'ę' => 'Ę',
75
+ 'ě' => 'Ě',
76
+ 'ĝ' => 'Ĝ',
77
+ 'ğ' => 'Ğ',
78
+ 'ġ' => 'Ġ',
79
+ 'ģ' => 'Ģ',
80
+ 'ĥ' => 'Ĥ',
81
+ 'ħ' => 'Ħ',
82
+ 'ĩ' => 'Ĩ',
83
+ 'ī' => 'Ī',
84
+ 'ĭ' => 'Ĭ',
85
+ 'į' => 'Į',
86
+ 'ı' => 'I',
87
+ 'ij' => 'IJ',
88
+ 'ĵ' => 'Ĵ',
89
+ 'ķ' => 'Ķ',
90
+ 'ĺ' => 'Ĺ',
91
+ 'ļ' => 'Ļ',
92
+ 'ľ' => 'Ľ',
93
+ 'ŀ' => 'Ŀ',
94
+ 'ł' => 'Ł',
95
+ 'ń' => 'Ń',
96
+ 'ņ' => 'Ņ',
97
+ 'ň' => 'Ň',
98
+ 'ŋ' => 'Ŋ',
99
+ 'ō' => 'Ō',
100
+ 'ŏ' => 'Ŏ',
101
+ 'ő' => 'Ő',
102
+ 'œ' => 'Œ',
103
+ 'ŕ' => 'Ŕ',
104
+ 'ŗ' => 'Ŗ',
105
+ 'ř' => 'Ř',
106
+ 'ś' => 'Ś',
107
+ 'ŝ' => 'Ŝ',
108
+ 'ş' => 'Ş',
109
+ 'š' => 'Š',
110
+ 'ţ' => 'Ţ',
111
+ 'ť' => 'Ť',
112
+ 'ŧ' => 'Ŧ',
113
+ 'ũ' => 'Ũ',
114
+ 'ū' => 'Ū',
115
+ 'ŭ' => 'Ŭ',
116
+ 'ů' => 'Ů',
117
+ 'ű' => 'Ű',
118
+ 'ų' => 'Ų',
119
+ 'ŵ' => 'Ŵ',
120
+ 'ŷ' => 'Ŷ',
121
+ 'ź' => 'Ź',
122
+ 'ż' => 'Ż',
123
+ 'ž' => 'Ž',
124
+ 'ſ' => 'S',
125
+ 'ƀ' => 'Ƀ',
126
+ 'ƃ' => 'Ƃ',
127
+ 'ƅ' => 'Ƅ',
128
+ 'ƈ' => 'Ƈ',
129
+ 'ƌ' => 'Ƌ',
130
+ 'ƒ' => 'Ƒ',
131
+ 'ƕ' => 'Ƕ',
132
+ 'ƙ' => 'Ƙ',
133
+ 'ƚ' => 'Ƚ',
134
+ 'ƞ' => 'Ƞ',
135
+ 'ơ' => 'Ơ',
136
+ 'ƣ' => 'Ƣ',
137
+ 'ƥ' => 'Ƥ',
138
+ 'ƨ' => 'Ƨ',
139
+ 'ƭ' => 'Ƭ',
140
+ 'ư' => 'Ư',
141
+ 'ƴ' => 'Ƴ',
142
+ 'ƶ' => 'Ƶ',
143
+ 'ƹ' => 'Ƹ',
144
+ 'ƽ' => 'Ƽ',
145
+ 'ƿ' => 'Ƿ',
146
+ 'Dž' => 'DŽ',
147
+ 'dž' => 'DŽ',
148
+ 'Lj' => 'LJ',
149
+ 'lj' => 'LJ',
150
+ 'Nj' => 'NJ',
151
+ 'nj' => 'NJ',
152
+ 'ǎ' => 'Ǎ',
153
+ 'ǐ' => 'Ǐ',
154
+ 'ǒ' => 'Ǒ',
155
+ 'ǔ' => 'Ǔ',
156
+ 'ǖ' => 'Ǖ',
157
+ 'ǘ' => 'Ǘ',
158
+ 'ǚ' => 'Ǚ',
159
+ 'ǜ' => 'Ǜ',
160
+ 'ǝ' => 'Ǝ',
161
+ 'ǟ' => 'Ǟ',
162
+ 'ǡ' => 'Ǡ',
163
+ 'ǣ' => 'Ǣ',
164
+ 'ǥ' => 'Ǥ',
165
+ 'ǧ' => 'Ǧ',
166
+ 'ǩ' => 'Ǩ',
167
+ 'ǫ' => 'Ǫ',
168
+ 'ǭ' => 'Ǭ',
169
+ 'ǯ' => 'Ǯ',
170
+ 'Dz' => 'DZ',
171
+ 'dz' => 'DZ',
172
+ 'ǵ' => 'Ǵ',
173
+ 'ǹ' => 'Ǹ',
174
+ 'ǻ' => 'Ǻ',
175
+ 'ǽ' => 'Ǽ',
176
+ 'ǿ' => 'Ǿ',
177
+ 'ȁ' => 'Ȁ',
178
+ 'ȃ' => 'Ȃ',
179
+ 'ȅ' => 'Ȅ',
180
+ 'ȇ' => 'Ȇ',
181
+ 'ȉ' => 'Ȉ',
182
+ 'ȋ' => 'Ȋ',
183
+ 'ȍ' => 'Ȍ',
184
+ 'ȏ' => 'Ȏ',
185
+ 'ȑ' => 'Ȑ',
186
+ 'ȓ' => 'Ȓ',
187
+ 'ȕ' => 'Ȕ',
188
+ 'ȗ' => 'Ȗ',
189
+ 'ș' => 'Ș',
190
+ 'ț' => 'Ț',
191
+ 'ȝ' => 'Ȝ',
192
+ 'ȟ' => 'Ȟ',
193
+ 'ȣ' => 'Ȣ',
194
+ 'ȥ' => 'Ȥ',
195
+ 'ȧ' => 'Ȧ',
196
+ 'ȩ' => 'Ȩ',
197
+ 'ȫ' => 'Ȫ',
198
+ 'ȭ' => 'Ȭ',
199
+ 'ȯ' => 'Ȯ',
200
+ 'ȱ' => 'Ȱ',
201
+ 'ȳ' => 'Ȳ',
202
+ 'ȼ' => 'Ȼ',
203
+ 'ȿ' => 'Ȿ',
204
+ 'ɀ' => 'Ɀ',
205
+ 'ɂ' => 'Ɂ',
206
+ 'ɇ' => 'Ɇ',
207
+ 'ɉ' => 'Ɉ',
208
+ 'ɋ' => 'Ɋ',
209
+ 'ɍ' => 'Ɍ',
210
+ 'ɏ' => 'Ɏ',
211
+ 'ɐ' => 'Ɐ',
212
+ 'ɑ' => 'Ɑ',
213
+ 'ɒ' => 'Ɒ',
214
+ 'ɓ' => 'Ɓ',
215
+ 'ɔ' => 'Ɔ',
216
+ 'ɖ' => 'Ɖ',
217
+ 'ɗ' => 'Ɗ',
218
+ 'ə' => 'Ə',
219
+ 'ɛ' => 'Ɛ',
220
+ 'ɜ' => 'Ɜ',
221
+ 'ɠ' => 'Ɠ',
222
+ 'ɡ' => 'Ɡ',
223
+ 'ɣ' => 'Ɣ',
224
+ 'ɥ' => 'Ɥ',
225
+ 'ɦ' => 'Ɦ',
226
+ 'ɨ' => 'Ɨ',
227
+ 'ɩ' => 'Ɩ',
228
+ 'ɫ' => 'Ɫ',
229
+ 'ɬ' => 'Ɬ',
230
+ 'ɯ' => 'Ɯ',
231
+ 'ɱ' => 'Ɱ',
232
+ 'ɲ' => 'Ɲ',
233
+ 'ɵ' => 'Ɵ',
234
+ 'ɽ' => 'Ɽ',
235
+ 'ʀ' => 'Ʀ',
236
+ 'ʃ' => 'Ʃ',
237
+ 'ʇ' => 'Ʇ',
238
+ 'ʈ' => 'Ʈ',
239
+ 'ʉ' => 'Ʉ',
240
+ 'ʊ' => 'Ʊ',
241
+ 'ʋ' => 'Ʋ',
242
+ 'ʌ' => 'Ʌ',
243
+ 'ʒ' => 'Ʒ',
244
+ 'ʞ' => 'Ʞ',
245
+ 'ͅ' => 'Ι',
246
+ 'ͱ' => 'Ͱ',
247
+ 'ͳ' => 'Ͳ',
248
+ 'ͷ' => 'Ͷ',
249
+ 'ͻ' => 'Ͻ',
250
+ 'ͼ' => 'Ͼ',
251
+ 'ͽ' => 'Ͽ',
252
+ 'ά' => 'Ά',
253
+ 'έ' => 'Έ',
254
+ 'ή' => 'Ή',
255
+ 'ί' => 'Ί',
256
+ 'α' => 'Α',
257
+ 'β' => 'Β',
258
+ 'γ' => 'Γ',
259
+ 'δ' => 'Δ',
260
+ 'ε' => 'Ε',
261
+ 'ζ' => 'Ζ',
262
+ 'η' => 'Η',
263
+ 'θ' => 'Θ',
264
+ 'ι' => 'Ι',
265
+ 'κ' => 'Κ',
266
+ 'λ' => 'Λ',
267
+ 'μ' => 'Μ',
268
+ 'ν' => 'Ν',
269
+ 'ξ' => 'Ξ',
270
+ 'ο' => 'Ο',
271
+ 'π' => 'Π',
272
+ 'ρ' => 'Ρ',
273
+ 'ς' => 'Σ',
274
+ 'σ' => 'Σ',
275
+ 'τ' => 'Τ',
276
+ 'υ' => 'Υ',
277
+ 'φ' => 'Φ',
278
+ 'χ' => 'Χ',
279
+ 'ψ' => 'Ψ',
280
+ 'ω' => 'Ω',
281
+ 'ϊ' => 'Ϊ',
282
+ 'ϋ' => 'Ϋ',
283
+ 'ό' => 'Ό',
284
+ 'ύ' => 'Ύ',
285
+ 'ώ' => 'Ώ',
286
+ 'ϐ' => 'Β',
287
+ 'ϑ' => 'Θ',
288
+ 'ϕ' => 'Φ',
289
+ 'ϖ' => 'Π',
290
+ 'ϗ' => 'Ϗ',
291
+ 'ϙ' => 'Ϙ',
292
+ 'ϛ' => 'Ϛ',
293
+ 'ϝ' => 'Ϝ',
294
+ 'ϟ' => 'Ϟ',
295
+ 'ϡ' => 'Ϡ',
296
+ 'ϣ' => 'Ϣ',
297
+ 'ϥ' => 'Ϥ',
298
+ 'ϧ' => 'Ϧ',
299
+ 'ϩ' => 'Ϩ',
300
+ 'ϫ' => 'Ϫ',
301
+ 'ϭ' => 'Ϭ',
302
+ 'ϯ' => 'Ϯ',
303
+ 'ϰ' => 'Κ',
304
+ 'ϱ' => 'Ρ',
305
+ 'ϲ' => 'Ϲ',
306
+ 'ϳ' => 'Ϳ',
307
+ 'ϵ' => 'Ε',
308
+ 'ϸ' => 'Ϸ',
309
+ 'ϻ' => 'Ϻ',
310
+ 'а' => 'А',
311
+ 'б' => 'Б',
312
+ 'в' => 'В',
313
+ 'г' => 'Г',
314
+ 'д' => 'Д',
315
+ 'е' => 'Е',
316
+ 'ж' => 'Ж',
317
+ 'з' => 'З',
318
+ 'и' => 'И',
319
+ 'й' => 'Й',
320
+ 'к' => 'К',
321
+ 'л' => 'Л',
322
+ 'м' => 'М',
323
+ 'н' => 'Н',
324
+ 'о' => 'О',
325
+ 'п' => 'П',
326
+ 'р' => 'Р',
327
+ 'с' => 'С',
328
+ 'т' => 'Т',
329
+ 'у' => 'У',
330
+ 'ф' => 'Ф',
331
+ 'х' => 'Х',
332
+ 'ц' => 'Ц',
333
+ 'ч' => 'Ч',
334
+ 'ш' => 'Ш',
335
+ 'щ' => 'Щ',
336
+ 'ъ' => 'Ъ',
337
+ 'ы' => 'Ы',
338
+ 'ь' => 'Ь',
339
+ 'э' => 'Э',
340
+ 'ю' => 'Ю',
341
+ 'я' => 'Я',
342
+ 'ѐ' => 'Ѐ',
343
+ 'ё' => 'Ё',
344
+ 'ђ' => 'Ђ',
345
+ 'ѓ' => 'Ѓ',
346
+ 'є' => 'Є',
347
+ 'ѕ' => 'Ѕ',
348
+ 'і' => 'І',
349
+ 'ї' => 'Ї',
350
+ 'ј' => 'Ј',
351
+ 'љ' => 'Љ',
352
+ 'њ' => 'Њ',
353
+ 'ћ' => 'Ћ',
354
+ 'ќ' => 'Ќ',
355
+ 'ѝ' => 'Ѝ',
356
+ 'ў' => 'Ў',
357
+ 'џ' => 'Џ',
358
+ 'ѡ' => 'Ѡ',
359
+ 'ѣ' => 'Ѣ',
360
+ 'ѥ' => 'Ѥ',
361
+ 'ѧ' => 'Ѧ',
362
+ 'ѩ' => 'Ѩ',
363
+ 'ѫ' => 'Ѫ',
364
+ 'ѭ' => 'Ѭ',
365
+ 'ѯ' => 'Ѯ',
366
+ 'ѱ' => 'Ѱ',
367
+ 'ѳ' => 'Ѳ',
368
+ 'ѵ' => 'Ѵ',
369
+ 'ѷ' => 'Ѷ',
370
+ 'ѹ' => 'Ѹ',
371
+ 'ѻ' => 'Ѻ',
372
+ 'ѽ' => 'Ѽ',
373
+ 'ѿ' => 'Ѿ',
374
+ 'ҁ' => 'Ҁ',
375
+ 'ҋ' => 'Ҋ',
376
+ 'ҍ' => 'Ҍ',
377
+ 'ҏ' => 'Ҏ',
378
+ 'ґ' => 'Ґ',
379
+ 'ғ' => 'Ғ',
380
+ 'ҕ' => 'Ҕ',
381
+ 'җ' => 'Җ',
382
+ 'ҙ' => 'Ҙ',
383
+ 'қ' => 'Қ',
384
+ 'ҝ' => 'Ҝ',
385
+ 'ҟ' => 'Ҟ',
386
+ 'ҡ' => 'Ҡ',
387
+ 'ң' => 'Ң',
388
+ 'ҥ' => 'Ҥ',
389
+ 'ҧ' => 'Ҧ',
390
+ 'ҩ' => 'Ҩ',
391
+ 'ҫ' => 'Ҫ',
392
+ 'ҭ' => 'Ҭ',
393
+ 'ү' => 'Ү',
394
+ 'ұ' => 'Ұ',
395
+ 'ҳ' => 'Ҳ',
396
+ 'ҵ' => 'Ҵ',
397
+ 'ҷ' => 'Ҷ',
398
+ 'ҹ' => 'Ҹ',
399
+ 'һ' => 'Һ',
400
+ 'ҽ' => 'Ҽ',
401
+ 'ҿ' => 'Ҿ',
402
+ 'ӂ' => 'Ӂ',
403
+ 'ӄ' => 'Ӄ',
404
+ 'ӆ' => 'Ӆ',
405
+ 'ӈ' => 'Ӈ',
406
+ 'ӊ' => 'Ӊ',
407
+ 'ӌ' => 'Ӌ',
408
+ 'ӎ' => 'Ӎ',
409
+ 'ӏ' => 'Ӏ',
410
+ 'ӑ' => 'Ӑ',
411
+ 'ӓ' => 'Ӓ',
412
+ 'ӕ' => 'Ӕ',
413
+ 'ӗ' => 'Ӗ',
414
+ 'ә' => 'Ә',
415
+ 'ӛ' => 'Ӛ',
416
+ 'ӝ' => 'Ӝ',
417
+ 'ӟ' => 'Ӟ',
418
+ 'ӡ' => 'Ӡ',
419
+ 'ӣ' => 'Ӣ',
420
+ 'ӥ' => 'Ӥ',
421
+ 'ӧ' => 'Ӧ',
422
+ 'ө' => 'Ө',
423
+ 'ӫ' => 'Ӫ',
424
+ 'ӭ' => 'Ӭ',
425
+ 'ӯ' => 'Ӯ',
426
+ 'ӱ' => 'Ӱ',
427
+ 'ӳ' => 'Ӳ',
428
+ 'ӵ' => 'Ӵ',
429
+ 'ӷ' => 'Ӷ',
430
+ 'ӹ' => 'Ӹ',
431
+ 'ӻ' => 'Ӻ',
432
+ 'ӽ' => 'Ӽ',
433
+ 'ӿ' => 'Ӿ',
434
+ 'ԁ' => 'Ԁ',
435
+ 'ԃ' => 'Ԃ',
436
+ 'ԅ' => 'Ԅ',
437
+ 'ԇ' => 'Ԇ',
438
+ 'ԉ' => 'Ԉ',
439
+ 'ԋ' => 'Ԋ',
440
+ 'ԍ' => 'Ԍ',
441
+ 'ԏ' => 'Ԏ',
442
+ 'ԑ' => 'Ԑ',
443
+ 'ԓ' => 'Ԓ',
444
+ 'ԕ' => 'Ԕ',
445
+ 'ԗ' => 'Ԗ',
446
+ 'ԙ' => 'Ԙ',
447
+ 'ԛ' => 'Ԛ',
448
+ 'ԝ' => 'Ԝ',
449
+ 'ԟ' => 'Ԟ',
450
+ 'ԡ' => 'Ԡ',
451
+ 'ԣ' => 'Ԣ',
452
+ 'ԥ' => 'Ԥ',
453
+ 'ԧ' => 'Ԧ',
454
+ 'ԩ' => 'Ԩ',
455
+ 'ԫ' => 'Ԫ',
456
+ 'ԭ' => 'Ԭ',
457
+ 'ԯ' => 'Ԯ',
458
+ 'ա' => 'Ա',
459
+ 'բ' => 'Բ',
460
+ 'գ' => 'Գ',
461
+ 'դ' => 'Դ',
462
+ 'ե' => 'Ե',
463
+ 'զ' => 'Զ',
464
+ 'է' => 'Է',
465
+ 'ը' => 'Ը',
466
+ 'թ' => 'Թ',
467
+ 'ժ' => 'Ժ',
468
+ 'ի' => 'Ի',
469
+ 'լ' => 'Լ',
470
+ 'խ' => 'Խ',
471
+ 'ծ' => 'Ծ',
472
+ 'կ' => 'Կ',
473
+ 'հ' => 'Հ',
474
+ 'ձ' => 'Ձ',
475
+ 'ղ' => 'Ղ',
476
+ 'ճ' => 'Ճ',
477
+ 'մ' => 'Մ',
478
+ 'յ' => 'Յ',
479
+ 'ն' => 'Ն',
480
+ 'շ' => 'Շ',
481
+ 'ո' => 'Ո',
482
+ 'չ' => 'Չ',
483
+ 'պ' => 'Պ',
484
+ 'ջ' => 'Ջ',
485
+ 'ռ' => 'Ռ',
486
+ 'ս' => 'Ս',
487
+ 'վ' => 'Վ',
488
+ 'տ' => 'Տ',
489
+ 'ր' => 'Ր',
490
+ 'ց' => 'Ց',
491
+ 'ւ' => 'Ւ',
492
+ 'փ' => 'Փ',
493
+ 'ք' => 'Ք',
494
+ 'օ' => 'Օ',
495
+ 'ֆ' => 'Ֆ',
496
+ 'ᵹ' => 'Ᵹ',
497
+ 'ᵽ' => 'Ᵽ',
498
+ 'ḁ' => 'Ḁ',
499
+ 'ḃ' => 'Ḃ',
500
+ 'ḅ' => 'Ḅ',
501
+ 'ḇ' => 'Ḇ',
502
+ 'ḉ' => 'Ḉ',
503
+ 'ḋ' => 'Ḋ',
504
+ 'ḍ' => 'Ḍ',
505
+ 'ḏ' => 'Ḏ',
506
+ 'ḑ' => 'Ḑ',
507
+ 'ḓ' => 'Ḓ',
508
+ 'ḕ' => 'Ḕ',
509
+ 'ḗ' => 'Ḗ',
510
+ 'ḙ' => 'Ḙ',
511
+ 'ḛ' => 'Ḛ',
512
+ 'ḝ' => 'Ḝ',
513
+ 'ḟ' => 'Ḟ',
514
+ 'ḡ' => 'Ḡ',
515
+ 'ḣ' => 'Ḣ',
516
+ 'ḥ' => 'Ḥ',
517
+ 'ḧ' => 'Ḧ',
518
+ 'ḩ' => 'Ḩ',
519
+ 'ḫ' => 'Ḫ',
520
+ 'ḭ' => 'Ḭ',
521
+ 'ḯ' => 'Ḯ',
522
+ 'ḱ' => 'Ḱ',
523
+ 'ḳ' => 'Ḳ',
524
+ 'ḵ' => 'Ḵ',
525
+ 'ḷ' => 'Ḷ',
526
+ 'ḹ' => 'Ḹ',
527
+ 'ḻ' => 'Ḻ',
528
+ 'ḽ' => 'Ḽ',
529
+ 'ḿ' => 'Ḿ',
530
+ 'ṁ' => 'Ṁ',
531
+ 'ṃ' => 'Ṃ',
532
+ 'ṅ' => 'Ṅ',
533
+ 'ṇ' => 'Ṇ',
534
+ 'ṉ' => 'Ṉ',
535
+ 'ṋ' => 'Ṋ',
536
+ 'ṍ' => 'Ṍ',
537
+ 'ṏ' => 'Ṏ',
538
+ 'ṑ' => 'Ṑ',
539
+ 'ṓ' => 'Ṓ',
540
+ 'ṕ' => 'Ṕ',
541
+ 'ṗ' => 'Ṗ',
542
+ 'ṙ' => 'Ṙ',
543
+ 'ṛ' => 'Ṛ',
544
+ 'ṝ' => 'Ṝ',
545
+ 'ṟ' => 'Ṟ',
546
+ 'ṡ' => 'Ṡ',
547
+ 'ṣ' => 'Ṣ',
548
+ 'ṥ' => 'Ṥ',
549
+ 'ṧ' => 'Ṧ',
550
+ 'ṩ' => 'Ṩ',
551
+ 'ṫ' => 'Ṫ',
552
+ 'ṭ' => 'Ṭ',
553
+ 'ṯ' => 'Ṯ',
554
+ 'ṱ' => 'Ṱ',
555
+ 'ṳ' => 'Ṳ',
556
+ 'ṵ' => 'Ṵ',
557
+ 'ṷ' => 'Ṷ',
558
+ 'ṹ' => 'Ṹ',
559
+ 'ṻ' => 'Ṻ',
560
+ 'ṽ' => 'Ṽ',
561
+ 'ṿ' => 'Ṿ',
562
+ 'ẁ' => 'Ẁ',
563
+ 'ẃ' => 'Ẃ',
564
+ 'ẅ' => 'Ẅ',
565
+ 'ẇ' => 'Ẇ',
566
+ 'ẉ' => 'Ẉ',
567
+ 'ẋ' => 'Ẋ',
568
+ 'ẍ' => 'Ẍ',
569
+ 'ẏ' => 'Ẏ',
570
+ 'ẑ' => 'Ẑ',
571
+ 'ẓ' => 'Ẓ',
572
+ 'ẕ' => 'Ẕ',
573
+ 'ẛ' => 'Ṡ',
574
+ 'ạ' => 'Ạ',
575
+ 'ả' => 'Ả',
576
+ 'ấ' => 'Ấ',
577
+ 'ầ' => 'Ầ',
578
+ 'ẩ' => 'Ẩ',
579
+ 'ẫ' => 'Ẫ',
580
+ 'ậ' => 'Ậ',
581
+ 'ắ' => 'Ắ',
582
+ 'ằ' => 'Ằ',
583
+ 'ẳ' => 'Ẳ',
584
+ 'ẵ' => 'Ẵ',
585
+ 'ặ' => 'Ặ',
586
+ 'ẹ' => 'Ẹ',
587
+ 'ẻ' => 'Ẻ',
588
+ 'ẽ' => 'Ẽ',
589
+ 'ế' => 'Ế',
590
+ 'ề' => 'Ề',
591
+ 'ể' => 'Ể',
592
+ 'ễ' => 'Ễ',
593
+ 'ệ' => 'Ệ',
594
+ 'ỉ' => 'Ỉ',
595
+ 'ị' => 'Ị',
596
+ 'ọ' => 'Ọ',
597
+ 'ỏ' => 'Ỏ',
598
+ 'ố' => 'Ố',
599
+ 'ồ' => 'Ồ',
600
+ 'ổ' => 'Ổ',
601
+ 'ỗ' => 'Ỗ',
602
+ 'ộ' => 'Ộ',
603
+ 'ớ' => 'Ớ',
604
+ 'ờ' => 'Ờ',
605
+ 'ở' => 'Ở',
606
+ 'ỡ' => 'Ỡ',
607
+ 'ợ' => 'Ợ',
608
+ 'ụ' => 'Ụ',
609
+ 'ủ' => 'Ủ',
610
+ 'ứ' => 'Ứ',
611
+ 'ừ' => 'Ừ',
612
+ 'ử' => 'Ử',
613
+ 'ữ' => 'Ữ',
614
+ 'ự' => 'Ự',
615
+ 'ỳ' => 'Ỳ',
616
+ 'ỵ' => 'Ỵ',
617
+ 'ỷ' => 'Ỷ',
618
+ 'ỹ' => 'Ỹ',
619
+ 'ỻ' => 'Ỻ',
620
+ 'ỽ' => 'Ỽ',
621
+ 'ỿ' => 'Ỿ',
622
+ 'ἀ' => 'Ἀ',
623
+ 'ἁ' => 'Ἁ',
624
+ 'ἂ' => 'Ἂ',
625
+ 'ἃ' => 'Ἃ',
626
+ 'ἄ' => 'Ἄ',
627
+ 'ἅ' => 'Ἅ',
628
+ 'ἆ' => 'Ἆ',
629
+ 'ἇ' => 'Ἇ',
630
+ 'ἐ' => 'Ἐ',
631
+ 'ἑ' => 'Ἑ',
632
+ 'ἒ' => 'Ἒ',
633
+ 'ἓ' => 'Ἓ',
634
+ 'ἔ' => 'Ἔ',
635
+ 'ἕ' => 'Ἕ',
636
+ 'ἠ' => 'Ἠ',
637
+ 'ἡ' => 'Ἡ',
638
+ 'ἢ' => 'Ἢ',
639
+ 'ἣ' => 'Ἣ',
640
+ 'ἤ' => 'Ἤ',
641
+ 'ἥ' => 'Ἥ',
642
+ 'ἦ' => 'Ἦ',
643
+ 'ἧ' => 'Ἧ',
644
+ 'ἰ' => 'Ἰ',
645
+ 'ἱ' => 'Ἱ',
646
+ 'ἲ' => 'Ἲ',
647
+ 'ἳ' => 'Ἳ',
648
+ 'ἴ' => 'Ἴ',
649
+ 'ἵ' => 'Ἵ',
650
+ 'ἶ' => 'Ἶ',
651
+ 'ἷ' => 'Ἷ',
652
+ 'ὀ' => 'Ὀ',
653
+ 'ὁ' => 'Ὁ',
654
+ 'ὂ' => 'Ὂ',
655
+ 'ὃ' => 'Ὃ',
656
+ 'ὄ' => 'Ὄ',
657
+ 'ὅ' => 'Ὅ',
658
+ 'ὑ' => 'Ὑ',
659
+ 'ὓ' => 'Ὓ',
660
+ 'ὕ' => 'Ὕ',
661
+ 'ὗ' => 'Ὗ',
662
+ 'ὠ' => 'Ὠ',
663
+ 'ὡ' => 'Ὡ',
664
+ 'ὢ' => 'Ὢ',
665
+ 'ὣ' => 'Ὣ',
666
+ 'ὤ' => 'Ὤ',
667
+ 'ὥ' => 'Ὥ',
668
+ 'ὦ' => 'Ὦ',
669
+ 'ὧ' => 'Ὧ',
670
+ 'ὰ' => 'Ὰ',
671
+ 'ά' => 'Ά',
672
+ 'ὲ' => 'Ὲ',
673
+ 'έ' => 'Έ',
674
+ 'ὴ' => 'Ὴ',
675
+ 'ή' => 'Ή',
676
+ 'ὶ' => 'Ὶ',
677
+ 'ί' => 'Ί',
678
+ 'ὸ' => 'Ὸ',
679
+ 'ό' => 'Ό',
680
+ 'ὺ' => 'Ὺ',
681
+ 'ύ' => 'Ύ',
682
+ 'ὼ' => 'Ὼ',
683
+ 'ώ' => 'Ώ',
684
+ 'ᾀ' => 'ᾈ',
685
+ 'ᾁ' => 'ᾉ',
686
+ 'ᾂ' => 'ᾊ',
687
+ 'ᾃ' => 'ᾋ',
688
+ 'ᾄ' => 'ᾌ',
689
+ 'ᾅ' => 'ᾍ',
690
+ 'ᾆ' => 'ᾎ',
691
+ 'ᾇ' => 'ᾏ',
692
+ 'ᾐ' => 'ᾘ',
693
+ 'ᾑ' => 'ᾙ',
694
+ 'ᾒ' => 'ᾚ',
695
+ 'ᾓ' => 'ᾛ',
696
+ 'ᾔ' => 'ᾜ',
697
+ 'ᾕ' => 'ᾝ',
698
+ 'ᾖ' => 'ᾞ',
699
+ 'ᾗ' => 'ᾟ',
700
+ 'ᾠ' => 'ᾨ',
701
+ 'ᾡ' => 'ᾩ',
702
+ 'ᾢ' => 'ᾪ',
703
+ 'ᾣ' => 'ᾫ',
704
+ 'ᾤ' => 'ᾬ',
705
+ 'ᾥ' => 'ᾭ',
706
+ 'ᾦ' => 'ᾮ',
707
+ 'ᾧ' => 'ᾯ',
708
+ 'ᾰ' => 'Ᾰ',
709
+ 'ᾱ' => 'Ᾱ',
710
+ 'ᾳ' => 'ᾼ',
711
+ 'ι' => 'Ι',
712
+ 'ῃ' => 'ῌ',
713
+ 'ῐ' => 'Ῐ',
714
+ 'ῑ' => 'Ῑ',
715
+ 'ῠ' => 'Ῠ',
716
+ 'ῡ' => 'Ῡ',
717
+ 'ῥ' => 'Ῥ',
718
+ 'ῳ' => 'ῼ',
719
+ 'ⅎ' => 'Ⅎ',
720
+ 'ⅰ' => 'Ⅰ',
721
+ 'ⅱ' => 'Ⅱ',
722
+ 'ⅲ' => 'Ⅲ',
723
+ 'ⅳ' => 'Ⅳ',
724
+ 'ⅴ' => 'Ⅴ',
725
+ 'ⅵ' => 'Ⅵ',
726
+ 'ⅶ' => 'Ⅶ',
727
+ 'ⅷ' => 'Ⅷ',
728
+ 'ⅸ' => 'Ⅸ',
729
+ 'ⅹ' => 'Ⅹ',
730
+ 'ⅺ' => 'Ⅺ',
731
+ 'ⅻ' => 'Ⅻ',
732
+ 'ⅼ' => 'Ⅼ',
733
+ 'ⅽ' => 'Ⅽ',
734
+ 'ⅾ' => 'Ⅾ',
735
+ 'ⅿ' => 'Ⅿ',
736
+ 'ↄ' => 'Ↄ',
737
+ 'ⓐ' => 'Ⓐ',
738
+ 'ⓑ' => 'Ⓑ',
739
+ 'ⓒ' => 'Ⓒ',
740
+ 'ⓓ' => 'Ⓓ',
741
+ 'ⓔ' => 'Ⓔ',
742
+ 'ⓕ' => 'Ⓕ',
743
+ 'ⓖ' => 'Ⓖ',
744
+ 'ⓗ' => 'Ⓗ',
745
+ 'ⓘ' => 'Ⓘ',
746
+ 'ⓙ' => 'Ⓙ',
747
+ 'ⓚ' => 'Ⓚ',
748
+ 'ⓛ' => 'Ⓛ',
749
+ 'ⓜ' => 'Ⓜ',
750
+ 'ⓝ' => 'Ⓝ',
751
+ 'ⓞ' => 'Ⓞ',
752
+ 'ⓟ' => 'Ⓟ',
753
+ 'ⓠ' => 'Ⓠ',
754
+ 'ⓡ' => 'Ⓡ',
755
+ 'ⓢ' => 'Ⓢ',
756
+ 'ⓣ' => 'Ⓣ',
757
+ 'ⓤ' => 'Ⓤ',
758
+ 'ⓥ' => 'Ⓥ',
759
+ 'ⓦ' => 'Ⓦ',
760
+ 'ⓧ' => 'Ⓧ',
761
+ 'ⓨ' => 'Ⓨ',
762
+ 'ⓩ' => 'Ⓩ',
763
+ 'ⰰ' => 'Ⰰ',
764
+ 'ⰱ' => 'Ⰱ',
765
+ 'ⰲ' => 'Ⰲ',
766
+ 'ⰳ' => 'Ⰳ',
767
+ 'ⰴ' => 'Ⰴ',
768
+ 'ⰵ' => 'Ⰵ',
769
+ 'ⰶ' => 'Ⰶ',
770
+ 'ⰷ' => 'Ⰷ',
771
+ 'ⰸ' => 'Ⰸ',
772
+ 'ⰹ' => 'Ⰹ',
773
+ 'ⰺ' => 'Ⰺ',
774
+ 'ⰻ' => 'Ⰻ',
775
+ 'ⰼ' => 'Ⰼ',
776
+ 'ⰽ' => 'Ⰽ',
777
+ 'ⰾ' => 'Ⰾ',
778
+ 'ⰿ' => 'Ⰿ',
779
+ 'ⱀ' => 'Ⱀ',
780
+ 'ⱁ' => 'Ⱁ',
781
+ 'ⱂ' => 'Ⱂ',
782
+ 'ⱃ' => 'Ⱃ',
783
+ 'ⱄ' => 'Ⱄ',
784
+ 'ⱅ' => 'Ⱅ',
785
+ 'ⱆ' => 'Ⱆ',
786
+ 'ⱇ' => 'Ⱇ',
787
+ 'ⱈ' => 'Ⱈ',
788
+ 'ⱉ' => 'Ⱉ',
789
+ 'ⱊ' => 'Ⱊ',
790
+ 'ⱋ' => 'Ⱋ',
791
+ 'ⱌ' => 'Ⱌ',
792
+ 'ⱍ' => 'Ⱍ',
793
+ 'ⱎ' => 'Ⱎ',
794
+ 'ⱏ' => 'Ⱏ',
795
+ 'ⱐ' => 'Ⱐ',
796
+ 'ⱑ' => 'Ⱑ',
797
+ 'ⱒ' => 'Ⱒ',
798
+ 'ⱓ' => 'Ⱓ',
799
+ 'ⱔ' => 'Ⱔ',
800
+ 'ⱕ' => 'Ⱕ',
801
+ 'ⱖ' => 'Ⱖ',
802
+ 'ⱗ' => 'Ⱗ',
803
+ 'ⱘ' => 'Ⱘ',
804
+ 'ⱙ' => 'Ⱙ',
805
+ 'ⱚ' => 'Ⱚ',
806
+ 'ⱛ' => 'Ⱛ',
807
+ 'ⱜ' => 'Ⱜ',
808
+ 'ⱝ' => 'Ⱝ',
809
+ 'ⱞ' => 'Ⱞ',
810
+ 'ⱡ' => 'Ⱡ',
811
+ 'ⱥ' => 'Ⱥ',
812
+ 'ⱦ' => 'Ⱦ',
813
+ 'ⱨ' => 'Ⱨ',
814
+ 'ⱪ' => 'Ⱪ',
815
+ 'ⱬ' => 'Ⱬ',
816
+ 'ⱳ' => 'Ⱳ',
817
+ 'ⱶ' => 'Ⱶ',
818
+ 'ⲁ' => 'Ⲁ',
819
+ 'ⲃ' => 'Ⲃ',
820
+ 'ⲅ' => 'Ⲅ',
821
+ 'ⲇ' => 'Ⲇ',
822
+ 'ⲉ' => 'Ⲉ',
823
+ 'ⲋ' => 'Ⲋ',
824
+ 'ⲍ' => 'Ⲍ',
825
+ 'ⲏ' => 'Ⲏ',
826
+ 'ⲑ' => 'Ⲑ',
827
+ 'ⲓ' => 'Ⲓ',
828
+ 'ⲕ' => 'Ⲕ',
829
+ 'ⲗ' => 'Ⲗ',
830
+ 'ⲙ' => 'Ⲙ',
831
+ 'ⲛ' => 'Ⲛ',
832
+ 'ⲝ' => 'Ⲝ',
833
+ 'ⲟ' => 'Ⲟ',
834
+ 'ⲡ' => 'Ⲡ',
835
+ 'ⲣ' => 'Ⲣ',
836
+ 'ⲥ' => 'Ⲥ',
837
+ 'ⲧ' => 'Ⲧ',
838
+ 'ⲩ' => 'Ⲩ',
839
+ 'ⲫ' => 'Ⲫ',
840
+ 'ⲭ' => 'Ⲭ',
841
+ 'ⲯ' => 'Ⲯ',
842
+ 'ⲱ' => 'Ⲱ',
843
+ 'ⲳ' => 'Ⲳ',
844
+ 'ⲵ' => 'Ⲵ',
845
+ 'ⲷ' => 'Ⲷ',
846
+ 'ⲹ' => 'Ⲹ',
847
+ 'ⲻ' => 'Ⲻ',
848
+ 'ⲽ' => 'Ⲽ',
849
+ 'ⲿ' => 'Ⲿ',
850
+ 'ⳁ' => 'Ⳁ',
851
+ 'ⳃ' => 'Ⳃ',
852
+ 'ⳅ' => 'Ⳅ',
853
+ 'ⳇ' => 'Ⳇ',
854
+ 'ⳉ' => 'Ⳉ',
855
+ 'ⳋ' => 'Ⳋ',
856
+ 'ⳍ' => 'Ⳍ',
857
+ 'ⳏ' => 'Ⳏ',
858
+ 'ⳑ' => 'Ⳑ',
859
+ 'ⳓ' => 'Ⳓ',
860
+ 'ⳕ' => 'Ⳕ',
861
+ 'ⳗ' => 'Ⳗ',
862
+ 'ⳙ' => 'Ⳙ',
863
+ 'ⳛ' => 'Ⳛ',
864
+ 'ⳝ' => 'Ⳝ',
865
+ 'ⳟ' => 'Ⳟ',
866
+ 'ⳡ' => 'Ⳡ',
867
+ 'ⳣ' => 'Ⳣ',
868
+ 'ⳬ' => 'Ⳬ',
869
+ 'ⳮ' => 'Ⳮ',
870
+ 'ⳳ' => 'Ⳳ',
871
+ 'ⴀ' => 'Ⴀ',
872
+ 'ⴁ' => 'Ⴁ',
873
+ 'ⴂ' => 'Ⴂ',
874
+ 'ⴃ' => 'Ⴃ',
875
+ 'ⴄ' => 'Ⴄ',
876
+ 'ⴅ' => 'Ⴅ',
877
+ 'ⴆ' => 'Ⴆ',
878
+ 'ⴇ' => 'Ⴇ',
879
+ 'ⴈ' => 'Ⴈ',
880
+ 'ⴉ' => 'Ⴉ',
881
+ 'ⴊ' => 'Ⴊ',
882
+ 'ⴋ' => 'Ⴋ',
883
+ 'ⴌ' => 'Ⴌ',
884
+ 'ⴍ' => 'Ⴍ',
885
+ 'ⴎ' => 'Ⴎ',
886
+ 'ⴏ' => 'Ⴏ',
887
+ 'ⴐ' => 'Ⴐ',
888
+ 'ⴑ' => 'Ⴑ',
889
+ 'ⴒ' => 'Ⴒ',
890
+ 'ⴓ' => 'Ⴓ',
891
+ 'ⴔ' => 'Ⴔ',
892
+ 'ⴕ' => 'Ⴕ',
893
+ 'ⴖ' => 'Ⴖ',
894
+ 'ⴗ' => 'Ⴗ',
895
+ 'ⴘ' => 'Ⴘ',
896
+ 'ⴙ' => 'Ⴙ',
897
+ 'ⴚ' => 'Ⴚ',
898
+ 'ⴛ' => 'Ⴛ',
899
+ 'ⴜ' => 'Ⴜ',
900
+ 'ⴝ' => 'Ⴝ',
901
+ 'ⴞ' => 'Ⴞ',
902
+ 'ⴟ' => 'Ⴟ',
903
+ 'ⴠ' => 'Ⴠ',
904
+ 'ⴡ' => 'Ⴡ',
905
+ 'ⴢ' => 'Ⴢ',
906
+ 'ⴣ' => 'Ⴣ',
907
+ 'ⴤ' => 'Ⴤ',
908
+ 'ⴥ' => 'Ⴥ',
909
+ 'ⴧ' => 'Ⴧ',
910
+ 'ⴭ' => 'Ⴭ',
911
+ 'ꙁ' => 'Ꙁ',
912
+ 'ꙃ' => 'Ꙃ',
913
+ 'ꙅ' => 'Ꙅ',
914
+ 'ꙇ' => 'Ꙇ',
915
+ 'ꙉ' => 'Ꙉ',
916
+ 'ꙋ' => 'Ꙋ',
917
+ 'ꙍ' => 'Ꙍ',
918
+ 'ꙏ' => 'Ꙏ',
919
+ 'ꙑ' => 'Ꙑ',
920
+ 'ꙓ' => 'Ꙓ',
921
+ 'ꙕ' => 'Ꙕ',
922
+ 'ꙗ' => 'Ꙗ',
923
+ 'ꙙ' => 'Ꙙ',
924
+ 'ꙛ' => 'Ꙛ',
925
+ 'ꙝ' => 'Ꙝ',
926
+ 'ꙟ' => 'Ꙟ',
927
+ 'ꙡ' => 'Ꙡ',
928
+ 'ꙣ' => 'Ꙣ',
929
+ 'ꙥ' => 'Ꙥ',
930
+ 'ꙧ' => 'Ꙧ',
931
+ 'ꙩ' => 'Ꙩ',
932
+ 'ꙫ' => 'Ꙫ',
933
+ 'ꙭ' => 'Ꙭ',
934
+ 'ꚁ' => 'Ꚁ',
935
+ 'ꚃ' => 'Ꚃ',
936
+ 'ꚅ' => 'Ꚅ',
937
+ 'ꚇ' => 'Ꚇ',
938
+ 'ꚉ' => 'Ꚉ',
939
+ 'ꚋ' => 'Ꚋ',
940
+ 'ꚍ' => 'Ꚍ',
941
+ 'ꚏ' => 'Ꚏ',
942
+ 'ꚑ' => 'Ꚑ',
943
+ 'ꚓ' => 'Ꚓ',
944
+ 'ꚕ' => 'Ꚕ',
945
+ 'ꚗ' => 'Ꚗ',
946
+ 'ꚙ' => 'Ꚙ',
947
+ 'ꚛ' => 'Ꚛ',
948
+ 'ꜣ' => 'Ꜣ',
949
+ 'ꜥ' => 'Ꜥ',
950
+ 'ꜧ' => 'Ꜧ',
951
+ 'ꜩ' => 'Ꜩ',
952
+ 'ꜫ' => 'Ꜫ',
953
+ 'ꜭ' => 'Ꜭ',
954
+ 'ꜯ' => 'Ꜯ',
955
+ 'ꜳ' => 'Ꜳ',
956
+ 'ꜵ' => 'Ꜵ',
957
+ 'ꜷ' => 'Ꜷ',
958
+ 'ꜹ' => 'Ꜹ',
959
+ 'ꜻ' => 'Ꜻ',
960
+ 'ꜽ' => 'Ꜽ',
961
+ 'ꜿ' => 'Ꜿ',
962
+ 'ꝁ' => 'Ꝁ',
963
+ 'ꝃ' => 'Ꝃ',
964
+ 'ꝅ' => 'Ꝅ',
965
+ 'ꝇ' => 'Ꝇ',
966
+ 'ꝉ' => 'Ꝉ',
967
+ 'ꝋ' => 'Ꝋ',
968
+ 'ꝍ' => 'Ꝍ',
969
+ 'ꝏ' => 'Ꝏ',
970
+ 'ꝑ' => 'Ꝑ',
971
+ 'ꝓ' => 'Ꝓ',
972
+ 'ꝕ' => 'Ꝕ',
973
+ 'ꝗ' => 'Ꝗ',
974
+ 'ꝙ' => 'Ꝙ',
975
+ 'ꝛ' => 'Ꝛ',
976
+ 'ꝝ' => 'Ꝝ',
977
+ 'ꝟ' => 'Ꝟ',
978
+ 'ꝡ' => 'Ꝡ',
979
+ 'ꝣ' => 'Ꝣ',
980
+ 'ꝥ' => 'Ꝥ',
981
+ 'ꝧ' => 'Ꝧ',
982
+ 'ꝩ' => 'Ꝩ',
983
+ 'ꝫ' => 'Ꝫ',
984
+ 'ꝭ' => 'Ꝭ',
985
+ 'ꝯ' => 'Ꝯ',
986
+ 'ꝺ' => 'Ꝺ',
987
+ 'ꝼ' => 'Ꝼ',
988
+ 'ꝿ' => 'Ꝿ',
989
+ 'ꞁ' => 'Ꞁ',
990
+ 'ꞃ' => 'Ꞃ',
991
+ 'ꞅ' => 'Ꞅ',
992
+ 'ꞇ' => 'Ꞇ',
993
+ 'ꞌ' => 'Ꞌ',
994
+ 'ꞑ' => 'Ꞑ',
995
+ 'ꞓ' => 'Ꞓ',
996
+ 'ꞗ' => 'Ꞗ',
997
+ 'ꞙ' => 'Ꞙ',
998
+ 'ꞛ' => 'Ꞛ',
999
+ 'ꞝ' => 'Ꞝ',
1000
+ 'ꞟ' => 'Ꞟ',
1001
+ 'ꞡ' => 'Ꞡ',
1002
+ 'ꞣ' => 'Ꞣ',
1003
+ 'ꞥ' => 'Ꞥ',
1004
+ 'ꞧ' => 'Ꞧ',
1005
+ 'ꞩ' => 'Ꞩ',
1006
+ 'a' => 'A',
1007
+ 'b' => 'B',
1008
+ 'c' => 'C',
1009
+ 'd' => 'D',
1010
+ 'e' => 'E',
1011
+ 'f' => 'F',
1012
+ 'g' => 'G',
1013
+ 'h' => 'H',
1014
+ 'i' => 'I',
1015
+ 'j' => 'J',
1016
+ 'k' => 'K',
1017
+ 'l' => 'L',
1018
+ 'm' => 'M',
1019
+ 'n' => 'N',
1020
+ 'o' => 'O',
1021
+ 'p' => 'P',
1022
+ 'q' => 'Q',
1023
+ 'r' => 'R',
1024
+ 's' => 'S',
1025
+ 't' => 'T',
1026
+ 'u' => 'U',
1027
+ 'v' => 'V',
1028
+ 'w' => 'W',
1029
+ 'x' => 'X',
1030
+ 'y' => 'Y',
1031
+ 'z' => 'Z',
1032
+ '𐐨' => '𐐀',
1033
+ '𐐩' => '𐐁',
1034
+ '𐐪' => '𐐂',
1035
+ '𐐫' => '𐐃',
1036
+ '𐐬' => '𐐄',
1037
+ '𐐭' => '𐐅',
1038
+ '𐐮' => '𐐆',
1039
+ '𐐯' => '𐐇',
1040
+ '𐐰' => '𐐈',
1041
+ '𐐱' => '𐐉',
1042
+ '𐐲' => '𐐊',
1043
+ '𐐳' => '𐐋',
1044
+ '𐐴' => '𐐌',
1045
+ '𐐵' => '𐐍',
1046
+ '𐐶' => '𐐎',
1047
+ '𐐷' => '𐐏',
1048
+ '𐐸' => '𐐐',
1049
+ '𐐹' => '𐐑',
1050
+ '𐐺' => '𐐒',
1051
+ '𐐻' => '𐐓',
1052
+ '𐐼' => '𐐔',
1053
+ '𐐽' => '𐐕',
1054
+ '𐐾' => '𐐖',
1055
+ '𐐿' => '𐐗',
1056
+ '𐑀' => '𐐘',
1057
+ '𐑁' => '𐐙',
1058
+ '𐑂' => '𐐚',
1059
+ '𐑃' => '𐐛',
1060
+ '𐑄' => '𐐜',
1061
+ '𐑅' => '𐐝',
1062
+ '𐑆' => '𐐞',
1063
+ '𐑇' => '𐐟',
1064
+ '𐑈' => '𐐠',
1065
+ '𐑉' => '𐐡',
1066
+ '𐑊' => '𐐢',
1067
+ '𐑋' => '𐐣',
1068
+ '𐑌' => '𐐤',
1069
+ '𐑍' => '𐐥',
1070
+ '𐑎' => '𐐦',
1071
+ '𐑏' => '𐐧',
1072
+ '𑣀' => '𑢠',
1073
+ '𑣁' => '𑢡',
1074
+ '𑣂' => '𑢢',
1075
+ '𑣃' => '𑢣',
1076
+ '𑣄' => '𑢤',
1077
+ '𑣅' => '𑢥',
1078
+ '𑣆' => '𑢦',
1079
+ '𑣇' => '𑢧',
1080
+ '𑣈' => '𑢨',
1081
+ '𑣉' => '𑢩',
1082
+ '𑣊' => '𑢪',
1083
+ '𑣋' => '𑢫',
1084
+ '𑣌' => '𑢬',
1085
+ '𑣍' => '𑢭',
1086
+ '𑣎' => '𑢮',
1087
+ '𑣏' => '𑢯',
1088
+ '𑣐' => '𑢰',
1089
+ '𑣑' => '𑢱',
1090
+ '𑣒' => '𑢲',
1091
+ '𑣓' => '𑢳',
1092
+ '𑣔' => '𑢴',
1093
+ '𑣕' => '𑢵',
1094
+ '𑣖' => '𑢶',
1095
+ '𑣗' => '𑢷',
1096
+ '𑣘' => '𑢸',
1097
+ '𑣙' => '𑢹',
1098
+ '𑣚' => '𑢺',
1099
+ '𑣛' => '𑢻',
1100
+ '𑣜' => '𑢼',
1101
+ '𑣝' => '𑢽',
1102
+ '𑣞' => '𑢾',
1103
+ '𑣟' => '𑢿',
1104
+ );
vendor/symfony/polyfill-mbstring/bootstrap.php ADDED
@@ -0,0 +1,141 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <?php
2
+
3
+ /*
4
+ * This file is part of the Symfony package.
5
+ *
6
+ * (c) Fabien Potencier <fabien@symfony.com>
7
+ *
8
+ * For the full copyright and license information, please view the LICENSE
9
+ * file that was distributed with this source code.
10
+ */
11
+
12
+ use Symfony\Polyfill\Mbstring as p;
13
+
14
+ if (!function_exists('mb_convert_encoding')) {
15
+ function mb_convert_encoding($s, $to, $from = null) { return p\Mbstring::mb_convert_encoding($s, $to, $from); }
16
+ }
17
+ if (!function_exists('mb_decode_mimeheader')) {
18
+ function mb_decode_mimeheader($s) { return p\Mbstring::mb_decode_mimeheader($s); }
19
+ }
20
+ if (!function_exists('mb_encode_mimeheader')) {
21
+ function mb_encode_mimeheader($s, $charset = null, $transferEnc = null, $lf = null, $indent = null) { return p\Mbstring::mb_encode_mimeheader($s, $charset, $transferEnc, $lf, $indent); }
22
+ }
23
+ if (!function_exists('mb_decode_numericentity')) {
24
+ function mb_decode_numericentity($s, $convmap, $enc = null) { return p\Mbstring::mb_decode_numericentity($s, $convmap, $enc); }
25
+ }
26
+ if (!function_exists('mb_encode_numericentity')) {
27
+ function mb_encode_numericentity($s, $convmap, $enc = null, $is_hex = false) { return p\Mbstring::mb_encode_numericentity($s, $convmap, $enc, $is_hex); }
28
+ }
29
+ if (!function_exists('mb_convert_case')) {
30
+ function mb_convert_case($s, $mode, $enc = null) { return p\Mbstring::mb_convert_case($s, $mode, $enc); }
31
+ }
32
+ if (!function_exists('mb_internal_encoding')) {
33
+ function mb_internal_encoding($enc = null) { return p\Mbstring::mb_internal_encoding($enc); }
34
+ }
35
+ if (!function_exists('mb_language')) {
36
+ function mb_language($lang = null) { return p\Mbstring::mb_language($lang); }
37
+ }
38
+ if (!function_exists('mb_list_encodings')) {
39
+ function mb_list_encodings() { return p\Mbstring::mb_list_encodings(); }
40
+ }
41
+ if (!function_exists('mb_encoding_aliases')) {
42
+ function mb_encoding_aliases($encoding) { return p\Mbstring::mb_encoding_aliases($encoding); }
43
+ }
44
+ if (!function_exists('mb_check_encoding')) {
45
+ function mb_check_encoding($var = null, $encoding = null) { return p\Mbstring::mb_check_encoding($var, $encoding); }
46
+ }
47
+ if (!function_exists('mb_detect_encoding')) {
48
+ function mb_detect_encoding($str, $encodingList = null, $strict = false) { return p\Mbstring::mb_detect_encoding($str, $encodingList, $strict); }
49
+ }
50
+ if (!function_exists('mb_detect_order')) {
51
+ function mb_detect_order($encodingList = null) { return p\Mbstring::mb_detect_order($encodingList); }
52
+ }
53
+ if (!function_exists('mb_parse_str')) {
54
+ function mb_parse_str($s, &$result = array()) { parse_str($s, $result); }
55
+ }
56
+ if (!function_exists('mb_strlen')) {
57
+ function mb_strlen($s, $enc = null) { return p\Mbstring::mb_strlen($s, $enc); }
58
+ }
59
+ if (!function_exists('mb_strpos')) {
60
+ function mb_strpos($s, $needle, $offset = 0, $enc = null) { return p\Mbstring::mb_strpos($s, $needle, $offset, $enc); }
61
+ }
62
+ if (!function_exists('mb_strtolower')) {
63
+ function mb_strtolower($s, $enc = null) { return p\Mbstring::mb_strtolower($s, $enc); }
64
+ }
65
+ if (!function_exists('mb_strtoupper')) {
66
+ function mb_strtoupper($s, $enc = null) { return p\Mbstring::mb_strtoupper($s, $enc); }
67
+ }
68
+ if (!function_exists('mb_substitute_character')) {
69
+ function mb_substitute_character($char = null) { return p\Mbstring::mb_substitute_character($char); }
70
+ }
71
+ if (!function_exists('mb_substr')) {
72
+ function mb_substr($s, $start, $length = 2147483647, $enc = null) { return p\Mbstring::mb_substr($s, $start, $length, $enc); }
73
+ }
74
+ if (!function_exists('mb_stripos')) {
75
+ function mb_stripos($s, $needle, $offset = 0, $enc = null) { return p\Mbstring::mb_stripos($s, $needle, $offset, $enc); }
76
+ }
77
+ if (!function_exists('mb_stristr')) {
78
+ function mb_stristr($s, $needle, $part = false, $enc = null) { return p\Mbstring::mb_stristr($s, $needle, $part, $enc); }
79
+ }
80
+ if (!function_exists('mb_strrchr')) {
81
+ function mb_strrchr($s, $needle, $part = false, $enc = null) { return p\Mbstring::mb_strrchr($s, $needle, $part, $enc); }
82
+ }
83
+ if (!function_exists('mb_strrichr')) {
84
+ function mb_strrichr($s, $needle, $part = false, $enc = null) { return p\Mbstring::mb_strrichr($s, $needle, $part, $enc); }
85
+ }
86
+ if (!function_exists('mb_strripos')) {
87
+ function mb_strripos($s, $needle, $offset = 0, $enc = null) { return p\Mbstring::mb_strripos($s, $needle, $offset, $enc); }
88
+ }
89
+ if (!function_exists('mb_strrpos')) {
90
+ function mb_strrpos($s, $needle, $offset = 0, $enc = null) { return p\Mbstring::mb_strrpos($s, $needle, $offset, $enc); }
91
+ }
92
+ if (!function_exists('mb_strstr')) {
93
+ function mb_strstr($s, $needle, $part = false, $enc = null) { return p\Mbstring::mb_strstr($s, $needle, $part, $enc); }
94
+ }
95
+ if (!function_exists('mb_get_info')) {
96
+ function mb_get_info($type = 'all') { return p\Mbstring::mb_get_info($type); }
97
+ }
98
+ if (!function_exists('mb_http_output')) {
99
+ function mb_http_output($enc = null) { return p\Mbstring::mb_http_output($enc); }
100
+ }
101
+ if (!function_exists('mb_strwidth')) {
102
+ function mb_strwidth($s, $enc = null) { return p\Mbstring::mb_strwidth($s, $enc); }
103
+ }
104
+ if (!function_exists('mb_substr_count')) {
105
+ function mb_substr_count($haystack, $needle, $enc = null) { return p\Mbstring::mb_substr_count($haystack, $needle, $enc); }
106
+ }
107
+ if (!function_exists('mb_output_handler')) {
108
+ function mb_output_handler($contents, $status) { return p\Mbstring::mb_output_handler($contents, $status); }
109
+ }
110
+ if (!function_exists('mb_http_input')) {
111
+ function mb_http_input($type = '') { return p\Mbstring::mb_http_input($type); }
112
+ }
113
+ if (!function_exists('mb_convert_variables')) {
114
+ function mb_convert_variables($toEncoding, $fromEncoding, &$a = null, &$b = null, &$c = null, &$d = null, &$e = null, &$f = null) { return p\Mbstring::mb_convert_variables($toEncoding, $fromEncoding, $a, $b, $c, $d, $e, $f); }
115
+ }
116
+ if (!function_exists('mb_ord')) {
117
+ function mb_ord($s, $enc = null) { return p\Mbstring::mb_ord($s, $enc); }
118
+ }
119
+ if (!function_exists('mb_chr')) {
120
+ function mb_chr($code, $enc = null) { return p\Mbstring::mb_chr($code, $enc); }
121
+ }
122
+ if (!function_exists('mb_scrub')) {
123
+ function mb_scrub($s, $enc = null) { $enc = null === $enc ? mb_internal_encoding() : $enc; return mb_convert_encoding($s, $enc, $enc); }
124
+ }
125
+ if (!function_exists('mb_str_split')) {
126
+ function mb_str_split($string, $split_length = 1, $encoding = null) { return p\Mbstring::mb_str_split($string, $split_length, $encoding); }
127
+ }
128
+
129
+ if (extension_loaded('mbstring')) {
130
+ return;
131
+ }
132
+
133
+ if (!defined('MB_CASE_UPPER')) {
134
+ define('MB_CASE_UPPER', 0);
135
+ }
136
+ if (!defined('MB_CASE_LOWER')) {
137
+ define('MB_CASE_LOWER', 1);
138
+ }
139
+ if (!defined('MB_CASE_TITLE')) {
140
+ define('MB_CASE_TITLE', 2);
141
+ }
vendor/symfony/polyfill-mbstring/composer.json ADDED
@@ -0,0 +1,34 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ {
2
+ "name": "symfony/polyfill-mbstring",
3
+ "type": "library",
4
+ "description": "Symfony polyfill for the Mbstring extension",
5
+ "keywords": ["polyfill", "shim", "compatibility", "portable", "mbstring"],
6
+ "homepage": "https://symfony.com",
7
+ "license": "MIT",
8
+ "authors": [
9
+ {
10
+ "name": "Nicolas Grekas",
11
+ "email": "p@tchwork.com"
12
+ },
13
+ {
14
+ "name": "Symfony Community",
15
+ "homepage": "https://symfony.com/contributors"
16
+ }
17
+ ],
18
+ "require": {
19
+ "php": ">=5.3.3"
20
+ },
21
+ "autoload": {
22
+ "psr-4": { "Symfony\\Polyfill\\Mbstring\\": "" },
23
+ "files": [ "bootstrap.php" ]
24
+ },
25
+ "suggest": {
26
+ "ext-mbstring": "For best performance"
27
+ },
28
+ "minimum-stability": "dev",
29
+ "extra": {
30
+ "branch-alias": {
31
+ "dev-master": "1.17-dev"
32
+ }
33
+ }
34
+ }