MediaWiki  master
MainConfigSchema.php
Go to the documentation of this file.
1 <?php
10 // phpcs:disable Generic.NamingConventions.UpperCaseConstantName.ClassConstantNotUpperCase
11 // phpcs:disable Generic.Files.LineLength.TooLong
12 namespace MediaWiki;
13 
15 use APCUBagOStuff;
16 use Argon2Password;
18 use BcryptPassword;
21 use CdnPurgeJob;
26 use DateTime;
27 use DateTimeZone;
28 use DeleteLinksJob;
30 use DeletePageJob;
32 use EmaillingJob;
33 use EmptyBagOStuff;
34 use EnotifNotifyJob;
35 use EnqueueJob;
38 use Generator;
39 use HashBagOStuff;
42 use InvalidArgumentException;
44 use JobQueueDB;
47 use LocalIdLookup;
49 use LocalRepo;
50 use LogFormatter;
51 use MediaWiki\Settings\Source\JsonSchemaTrait;
52 use MediaWikiSite;
57 use MWOldPassword;
59 use NamespaceInfo;
60 use NullJob;
62 use Pbkdf2Password;
67 use ReflectionClass;
68 use RefreshLinksJob;
72 use SiteStatsUpdate;
73 use SqlBagOStuff;
74 use TagLogFormatter;
77 use UDPRCFeedEngine;
82 use WANObjectCache;
84 use WebRequest;
87 
120  use JsonSchemaTrait;
121 
143  public static function listDefaultValues( string $prefix = '' ): Generator {
144  $class = new ReflectionClass( self::class );
145  foreach ( $class->getReflectionConstants() as $const ) {
146  if ( !$const->isPublic() ) {
147  continue;
148  }
149 
150  $value = $const->getValue();
151 
152  if ( !is_array( $value ) ) {
153  // Just in case we end up having some other kind of constant on this class.
154  continue;
155  }
156 
157  $name = $const->getName();
158  yield "$prefix$name" => self::getDefaultFromJsonSchema( $value );
159  }
160  }
161 
174  public static function getDefaultValue( string $name ) {
175  $class = new ReflectionClass( self::class );
176  if ( !$class->hasConstant( $name ) ) {
177  throw new InvalidArgumentException( "Unknown setting: $name" );
178  }
179  $value = $class->getConstant( $name );
180 
181  if ( !is_array( $value ) ) {
182  // Might happen if we end up having other kinds of constants on this class.
183  throw new InvalidArgumentException( "Unknown setting: $name" );
184  }
185 
186  return self::getDefaultFromJsonSchema( $value );
187  }
188 
189  /***************************************************************************/
197  public const ConfigRegistry = [
198  'default' => [
199  'main' => 'GlobalVarConfig::newInstance',
200  ],
201  'type' => 'map',
202  ];
203 
207  public const Sitename = [
208  'default' => 'MediaWiki',
209  ];
210 
211  /***************************************************************************/
212  // region Server URLs and file paths
237  public const Server = [
238  'default' => false,
239  ];
240 
250  public const CanonicalServer = [
251  'default' => false,
252  ];
253 
260  public const ServerName = [
261  'default' => false,
262  ];
263 
270  public const AssumeProxiesUseDefaultProtocolPorts = [
271  'default' => true,
272  'type' => 'boolean',
273  ];
274 
285  public const HttpsPort = [
286  'default' => 443,
287  ];
288 
306  public const ForceHTTPS = [
307  'default' => false,
308  'type' => 'boolean',
309  ];
310 
321  public const ScriptPath = [
322  'default' => '/wiki',
323  ];
324 
339  public const UsePathInfo = [
340  'dynamicDefault' => true,
341  ];
342 
346  public static function getDefaultUsePathInfo(): bool {
347  // These often break when PHP is set up in CGI mode.
348  // PATH_INFO *may* be correct if cgi.fix_pathinfo is set, but then again it may not;
349  // lighttpd converts incoming path data to lowercase on systems
350  // with case-insensitive filesystems, and there have been reports of
351  // problems on Apache as well.
352  return !str_contains( PHP_SAPI, 'cgi' ) && !str_contains( PHP_SAPI, 'apache2filter' ) &&
353  !str_contains( PHP_SAPI, 'isapi' );
354  }
355 
361  public const Script = [
362  'default' => false,
363  'dynamicDefault' => [ 'use' => [ 'ScriptPath' ] ]
364  ];
365 
370  public static function getDefaultScript( $scriptPath ): string {
371  return "$scriptPath/index.php";
372  }
373 
381  public const LoadScript = [
382  'default' => false,
383  'dynamicDefault' => [ 'use' => [ 'ScriptPath' ] ]
384  ];
385 
390  public static function getDefaultLoadScript( $scriptPath ): string {
391  return "$scriptPath/load.php";
392  }
393 
400  public const RestPath = [
401  'default' => false,
402  'dynamicDefault' => [ 'use' => [ 'ScriptPath' ] ]
403  ];
404 
409  public static function getDefaultRestPath( $scriptPath ): string {
410  return "$scriptPath/rest.php";
411  }
412 
420  public const StylePath = [
421  'default' => false,
422  'dynamicDefault' => [ 'use' => [ 'ResourceBasePath' ] ]
423  ];
424 
429  public static function getDefaultStylePath( $resourceBasePath ): string {
430  return "$resourceBasePath/skins";
431  }
432 
440  public const LocalStylePath = [
441  'default' => false,
442  'dynamicDefault' => [ 'use' => [ 'ScriptPath' ] ]
443  ];
444 
449  public static function getDefaultLocalStylePath( $scriptPath ): string {
450  // Avoid ResourceBasePath here since that may point to a different domain (e.g. CDN)
451  return "$scriptPath/skins";
452  }
453 
461  public const ExtensionAssetsPath = [
462  'default' => false,
463  'dynamicDefault' => [ 'use' => [ 'ResourceBasePath' ] ]
464  ];
465 
470  public static function getDefaultExtensionAssetsPath( $resourceBasePath ): string {
471  return "$resourceBasePath/extensions";
472  }
473 
481  public const ExtensionDirectory = [
482  'default' => null,
483  'type' => '?string',
484  ];
485 
493  public const StyleDirectory = [
494  'default' => null,
495  'type' => '?string',
496  ];
497 
507  public const BaseDirectory = [
508  'default' => null,
509  ];
510 
518  public const ArticlePath = [
519  'default' => false,
520  'dynamicDefault' => [ 'use' => [ 'Script', 'UsePathInfo' ] ]
521  ];
522 
528  public static function getDefaultArticlePath( string $script, $usePathInfo ): string {
529  if ( $usePathInfo ) {
530  return "$script/$1";
531  }
532  return "$script?title=$1";
533  }
534 
540  public const UploadPath = [
541  'default' => false,
542  'dynamicDefault' => [ 'use' => [ 'ScriptPath' ] ]
543  ];
544 
549  public static function getDefaultUploadPath( $scriptPath ): string {
550  return "$scriptPath/images";
551  }
552 
565  public const ImgAuthPath = [
566  'default' => false,
567  ];
568 
575  public const ThumbPath = [
576  'default' => false,
577  ];
578 
582  public const UploadDirectory = [
583  'default' => false,
584  'dynamicDefault' => [ 'use' => [ 'BaseDirectory' ] ]
585  ];
586 
591  public static function getDefaultUploadDirectory( $baseDirectory ): string {
592  return "$baseDirectory/images";
593  }
594 
600  public const FileCacheDirectory = [
601  'default' => false,
602  'dynamicDefault' => [ 'use' => [ 'UploadDirectory' ] ]
603  ];
604 
609  public static function getDefaultFileCacheDirectory( $uploadDirectory ): string {
610  return "$uploadDirectory/cache";
611  }
612 
621  public const Logo = [
622  'default' => false,
623  'dynamicDefault' => [ 'use' => [ 'ResourceBasePath' ] ]
624  ];
625 
630  public static function getDefaultLogo( $resourceBasePath ): string {
631  return "$resourceBasePath/resources/assets/change-your-logo.svg";
632  }
633 
683  public const Logos = [
684  'default' => false,
685  'type' => 'map|false',
686  ];
687 
717  public const LogoHD = [
718  'default' => false,
719  'type' => 'map|false',
720  'deprecated' => 'since 1.35. Developers should retrieve this logo (and other variants) ' .
721  'using the static function MediaWiki\ResourceLoader\SkinModule::getAvailableLogos. $wgLogos ' .
722  'should be used instead.',
723  ];
724 
730  public const Favicon = [
731  'default' => '/favicon.ico',
732  ];
733 
741  public const AppleTouchIcon = [
742  'default' => false,
743  ];
744 
763  public const ReferrerPolicy = [
764  'default' => false,
765  'type' => 'list|string|false',
766  ];
767 
789  public const TmpDirectory = [
790  'default' => false,
791  ];
792 
799  public const UploadBaseUrl = [
800  'default' => '',
801  ];
802 
815  public const UploadStashScalerBaseUrl = [
816  'default' => false,
817  'deprecated' => 'since 1.36 Use thumbProxyUrl in $wgLocalFileRepo',
818  ];
819 
834  public const ActionPaths = [
835  'default' => [],
836  'type' => 'map',
837  ];
838 
845  public const MainPageIsDomainRoot = [
846  'default' => false,
847  'type' => 'boolean',
848  ];
849 
850  // endregion -- end of server URLs and file paths
851 
852  /***************************************************************************/
853  // region Files and file uploads
865  public const EnableUploads = [
866  'default' => false,
867  ];
868 
872  public const UploadStashMaxAge = [
873  'default' => 6 * 3600, // 6 hours
874  ];
875 
885  public const EnableAsyncUploads = [
886  'default' => false,
887  ];
888 
892  public const UploadMaintenance = [
893  'default' => false,
894  ];
895 
903  public const IllegalFileChars = [
904  'default' => ':\\/\\\\',
905  ];
906 
912  public const DeletedDirectory = [
913  'default' => false,
914  'dynamicDefault' => [ 'use' => [ 'UploadDirectory' ] ]
915  ];
916 
921  public static function getDefaultDeletedDirectory( $uploadDirectory ): string {
922  return "$uploadDirectory/deleted";
923  }
924 
928  public const ImgAuthDetails = [
929  'default' => false,
930  ];
931 
947  public const ImgAuthUrlPathMap = [
948  'default' => [],
949  'type' => 'map',
950  ];
951 
1086  public const LocalFileRepo = [
1087  'default' => false,
1088  'type' => 'map|false',
1089  'dynamicDefault' => [ 'use' => [ 'UploadDirectory', 'ScriptPath', 'Favicon', 'UploadBaseUrl',
1090  'UploadPath', 'HashedUploadDirectory', 'ThumbnailScriptPath',
1091  'GenerateThumbnailOnParse', 'DeletedDirectory', 'UpdateCompatibleMetadata' ] ],
1092  ];
1093 
1094  public static function getDefaultLocalFileRepo(
1095  $uploadDirectory, $scriptPath, $favicon, $uploadBaseUrl, $uploadPath,
1096  $hashedUploadDirectory, $thumbnailScriptPath, $generateThumbnailOnParse, $deletedDirectory,
1097  $updateCompatibleMetadata
1098  ) {
1099  return [
1100  'class' => LocalRepo::class,
1101  'name' => 'local',
1102  'directory' => $uploadDirectory,
1103  'scriptDirUrl' => $scriptPath,
1104  'favicon' => $favicon,
1105  'url' => $uploadBaseUrl ? $uploadBaseUrl . $uploadPath : $uploadPath,
1106  'hashLevels' => $hashedUploadDirectory ? 2 : 0,
1107  'thumbScriptUrl' => $thumbnailScriptPath,
1108  'transformVia404' => !$generateThumbnailOnParse,
1109  'deletedDir' => $deletedDirectory,
1110  'deletedHashLevels' => $hashedUploadDirectory ? 3 : 0,
1111  'updateCompatibleMetadata' => $updateCompatibleMetadata,
1112  'reserializeMetadata' => $updateCompatibleMetadata,
1113  ];
1114  }
1115 
1129  public const ForeignFileRepos = [
1130  'default' => [],
1131  'type' => 'list',
1132  ];
1133 
1143  public const UseInstantCommons = [
1144  'default' => false,
1145  ];
1146 
1174  public const UseSharedUploads = [
1175  'default' => false,
1176  'type' => 'boolean',
1177  ];
1178 
1186  public const SharedUploadDirectory = [
1187  'default' => null,
1188  'type' => '?string',
1189  ];
1190 
1198  public const SharedUploadPath = [
1199  'default' => null,
1200  'type' => '?string',
1201  ];
1202 
1210  public const HashedSharedUploadDirectory = [
1211  'default' => true,
1212  'type' => 'boolean',
1213  ];
1214 
1222  public const RepositoryBaseUrl = [
1223  'default' => 'https://commons.wikimedia.org/wiki/File:',
1224  ];
1225 
1233  public const FetchCommonsDescriptions = [
1234  'default' => false,
1235  'type' => 'boolean',
1236  ];
1237 
1246  public const SharedUploadDBname = [
1247  'default' => false,
1248  'type' => 'false|string',
1249  ];
1250 
1258  public const SharedUploadDBprefix = [
1259  'default' => '',
1260  'type' => 'string',
1261  ];
1262 
1270  public const CacheSharedUploads = [
1271  'default' => true,
1272  'type' => 'boolean',
1273  ];
1274 
1285  public const ForeignUploadTargets = [
1286  'default' => [ 'local', ],
1287  'type' => 'list',
1288  ];
1289 
1299  public const UploadDialog = [
1300  'default' =>
1301  [
1302  'fields' =>
1303  [
1304  'description' => true,
1305  'date' => false,
1306  'categories' => false,
1307  ],
1308  'licensemessages' =>
1309  [
1310  'local' => 'generic-local',
1311  'foreign' => 'generic-foreign',
1312  ],
1313  'comment' =>
1314  [
1315  'local' => '',
1316  'foreign' => '',
1317  ],
1318  'format' =>
1319  [
1320  'filepage' => '$DESCRIPTION',
1321  'description' => '$TEXT',
1322  'ownwork' => '',
1323  'license' => '',
1324  'uncategorized' => '',
1325  ],
1326  ],
1327  'type' => 'map',
1328  ];
1329 
1366  public const FileBackends = [
1367  'default' => [],
1368  'type' => 'map',
1369  ];
1370 
1382  public const LockManagers = [
1383  'default' => [],
1384  'type' => 'list',
1385  ];
1386 
1402  public const ShowEXIF = [
1403  'dynamicDefault' => [ 'callback' => [ self::class, 'getDefaultShowEXIF' ] ],
1404  ];
1405 
1409  public static function getDefaultShowEXIF(): bool {
1410  return function_exists( 'exif_read_data' );
1411  }
1412 
1416  public const UpdateCompatibleMetadata = [
1417  'default' => false,
1418  ];
1419 
1426  public const AllowCopyUploads = [
1427  'default' => false,
1428  ];
1429 
1435  public const CopyUploadsDomains = [
1436  'default' => [],
1437  'type' => 'list',
1438  ];
1439 
1445  public const CopyUploadsFromSpecialUpload = [
1446  'default' => false,
1447  ];
1448 
1454  public const CopyUploadProxy = [
1455  'default' => false,
1456  ];
1457 
1466  public const CopyUploadTimeout = [
1467  'default' => false,
1468  'type' => 'false|integer',
1469  ];
1470 
1477  public const CopyUploadAllowOnWikiDomainConfig = [
1478  'default' => false,
1479  ];
1480 
1501  public const MaxUploadSize = [
1502  'default' => 1024 * 1024 * 100,
1503  ];
1504 
1519  public const MinUploadChunkSize = [
1520  'default' => 1024,
1521  ];
1522 
1534  public const UploadNavigationUrl = [
1535  'default' => false,
1536  ];
1537 
1543  public const UploadMissingFileUrl = [
1544  'default' => false,
1545  ];
1546 
1560  public const ThumbnailScriptPath = [
1561  'default' => false,
1562  ];
1563 
1571  public const SharedThumbnailScriptPath = [
1572  'default' => false,
1573  'type' => 'string|false',
1574  ];
1575 
1581  public const HashedUploadDirectory = [
1582  'default' => true,
1583  'type' => 'boolean',
1584  ];
1585 
1594  public const FileExtensions = [
1595  'default' => [ 'png', 'gif', 'jpg', 'jpeg', 'webp', ],
1596  'type' => 'list',
1597  ];
1598 
1607  public const ProhibitedFileExtensions = [
1608  'default' => [
1609  # HTML may contain cookie-stealing JavaScript and web bugs
1610  'html', 'htm', 'js', 'jsb', 'mhtml', 'mht', 'xhtml', 'xht',
1611  # PHP scripts may execute arbitrary code on the server
1612  'php', 'phtml', 'php3', 'php4', 'php5', 'phps', 'phar',
1613  # Other types that may be interpreted by some servers
1614  'shtml', 'jhtml', 'pl', 'py', 'cgi',
1615  # May contain harmful executables for Windows victims
1616  'exe', 'scr', 'dll', 'msi', 'vbs', 'bat', 'com', 'pif', 'cmd', 'vxd', 'cpl'
1617  ],
1618  'type' => 'list',
1619  ];
1620 
1627  public const MimeTypeExclusions = [
1628  'default' => [
1629  # HTML may contain cookie-stealing JavaScript and web bugs
1630  'text/html',
1631  # Similarly with JavaScript itself
1632  'application/javascript', 'text/javascript', 'text/x-javascript', 'application/x-shellscript',
1633  # PHP scripts may execute arbitrary code on the server
1634  'application/x-php', 'text/x-php',
1635  # Other types that may be interpreted by some servers
1636  'text/x-python', 'text/x-perl', 'text/x-bash', 'text/x-sh', 'text/x-csh',
1637  # Client-side hazards on Internet Explorer
1638  'text/scriptlet', 'application/x-msdownload',
1639  # Windows metafile, client-side vulnerability on some systems
1640  'application/x-msmetafile',
1641  # Files that look like java files
1642  'application/java'
1643  ],
1644  'type' => 'list',
1645  ];
1646 
1652  public const CheckFileExtensions = [
1653  'default' => true,
1654  ];
1655 
1662  public const StrictFileExtensions = [
1663  'default' => true,
1664  ];
1665 
1672  public const DisableUploadScriptChecks = [
1673  'default' => false,
1674  ];
1675 
1679  public const UploadSizeWarning = [
1680  'default' => false,
1681  ];
1682 
1694  public const TrustedMediaFormats = [
1695  'default' => [
1696  MEDIATYPE_BITMAP, // all bitmap formats
1697  MEDIATYPE_AUDIO, // all audio formats
1698  MEDIATYPE_VIDEO, // all plain video formats
1699  "image/svg+xml", // svg (only needed if inline rendering of svg is not supported)
1700  "application/pdf", // PDF files
1701  # "application/x-shockwave-flash", //flash/shockwave movie
1702  ],
1703  'type' => 'list',
1704  ];
1705 
1714  public const MediaHandlers = [
1715  'default' => [],
1716  'type' => 'map',
1717  ];
1718 
1725  public const NativeImageLazyLoading = [
1726  'default' => false,
1727  'type' => 'boolean',
1728  ];
1729 
1734  public const ParserTestMediaHandlers = [
1735  'default' => [
1736  'image/jpeg' => 'MockBitmapHandler',
1737  'image/png' => 'MockBitmapHandler',
1738  'image/gif' => 'MockBitmapHandler',
1739  'image/tiff' => 'MockBitmapHandler',
1740  'image/webp' => 'MockBitmapHandler',
1741  'image/x-ms-bmp' => 'MockBitmapHandler',
1742  'image/x-bmp' => 'MockBitmapHandler',
1743  'image/x-xcf' => 'MockBitmapHandler',
1744  'image/svg+xml' => 'MockSvgHandler',
1745  'image/vnd.djvu' => 'MockDjVuHandler',
1746  ],
1747  'type' => 'map',
1748  ];
1749 
1755  public const UseImageResize = [
1756  'default' => true,
1757  ];
1758 
1768  public const UseImageMagick = [
1769  'default' => false,
1770  ];
1771 
1775  public const ImageMagickConvertCommand = [
1776  'default' => '/usr/bin/convert',
1777  ];
1778 
1784  public const MaxInterlacingAreas = [
1785  'default' => [],
1786  'type' => 'map',
1787  ];
1788 
1792  public const SharpenParameter = [
1793  'default' => '0x0.4',
1794  ];
1795 
1799  public const SharpenReductionThreshold = [
1800  'default' => 0.85,
1801  ];
1802 
1807  public const ImageMagickTempDir = [
1808  'default' => false,
1809  ];
1810 
1823  public const CustomConvertCommand = [
1824  'default' => false,
1825  ];
1826 
1832  public const JpegTran = [
1833  'default' => '/usr/bin/jpegtran',
1834  ];
1835 
1855  public const JpegPixelFormat = [
1856  'default' => 'yuv420',
1857  ];
1858 
1866  public const JpegQuality = [
1867  'default' => 80,
1868  ];
1869 
1874  public const Exiv2Command = [
1875  'default' => '/usr/bin/exiv2',
1876  ];
1877 
1883  public const Exiftool = [
1884  'default' => '/usr/bin/exiftool',
1885  ];
1886 
1897  public const SVGConverters = [
1898  'default' => [
1899  'ImageMagick' => '$path/convert -background "#ffffff00" -thumbnail $widthx$height\\! $input PNG:$output',
1900  'sodipodi' => '$path/sodipodi -z -w $width -f $input -e $output',
1901  'inkscape' => '$path/inkscape -z -w $width -f $input -e $output',
1902  'batik' => 'java -Djava.awt.headless=true -jar $path/batik-rasterizer.jar -w $width -d $output $input',
1903  'rsvg' => '$path/rsvg-convert -w $width -h $height -o $output $input',
1904  'imgserv' => '$path/imgserv-wrapper -i svg -o png -w$width $input $output',
1905  'ImagickExt' => [ 'SvgHandler::rasterizeImagickExt', ],
1906  ],
1907  'type' => 'map',
1908  ];
1909 
1913  public const SVGConverter = [
1914  'default' => 'ImageMagick',
1915  ];
1916 
1920  public const SVGConverterPath = [
1921  'default' => '',
1922  ];
1923 
1927  public const SVGMaxSize = [
1928  'default' => 5120,
1929  ];
1930 
1936  public const SVGMetadataCutoff = [
1937  'default' => 262144,
1938  ];
1939 
1949  public const MediaInTargetLanguage = [
1950  'default' => true,
1951  ];
1952 
1970  public const MaxImageArea = [
1971  'default' => 12500000,
1972  'type' => 'string|integer|false',
1973  ];
1974 
1983  public const MaxAnimatedGifArea = [
1984  'default' => 12500000,
1985  ];
1986 
2002  public const TiffThumbnailType = [
2003  'default' => [],
2004  'type' => 'list',
2005  'mergeStrategy' => 'replace',
2006  ];
2007 
2015  public const ThumbnailEpoch = [
2016  'default' => '20030516000000',
2017  ];
2018 
2026  public const AttemptFailureEpoch = [
2027  'default' => 1,
2028  ];
2029 
2041  public const IgnoreImageErrors = [
2042  'default' => false,
2043  ];
2044 
2065  public const GenerateThumbnailOnParse = [
2066  'default' => true,
2067  'type' => 'boolean',
2068  ];
2069 
2073  public const ShowArchiveThumbnails = [
2074  'default' => true,
2075  ];
2076 
2082  public const EnableAutoRotation = [
2083  'default' => null,
2084  'type' => '?boolean',
2085  ];
2086 
2092  public const Antivirus = [
2093  'default' => null,
2094  'type' => '?string',
2095  ];
2096 
2132  public const AntivirusSetup = [
2133  'default' => [
2134  # setup for clamav
2135  'clamav' => [
2136  'command' => 'clamscan --no-summary ',
2137  'codemap' => [
2138  "0" => AV_NO_VIRUS, # no virus
2139  "1" => AV_VIRUS_FOUND, # virus found
2140  "52" => AV_SCAN_ABORTED, # unsupported file format (probably immune)
2141  "*" => AV_SCAN_FAILED, # else scan failed
2142  ],
2143  'messagepattern' => '/.*?:(.*)/sim',
2144  ],
2145  ],
2146  'type' => 'map',
2147  ];
2148 
2152  public const AntivirusRequired = [
2153  'default' => true,
2154  ];
2155 
2159  public const VerifyMimeType = [
2160  'default' => true,
2161  ];
2162 
2172  public const VerifyMimeTypeIE = [
2173  'default' => true,
2174  ];
2175 
2186  public const MimeTypeFile = [
2187  'default' => 'internal',
2188  ];
2189 
2195  public const MimeInfoFile = [
2196  'default' => 'internal',
2197  ];
2198 
2212  public const MimeDetectorCommand = [
2213  'default' => null,
2214  'type' => '?string',
2215  ];
2216 
2222  public const TrivialMimeDetection = [
2223  'default' => false,
2224  ];
2225 
2231  public const XMLMimeTypes = [
2232  'default' => [
2233  'http://www.w3.org/2000/svg:svg' => 'image/svg+xml',
2234  'svg' => 'image/svg+xml',
2235  'http://www.lysator.liu.se/~alla/dia/:diagram' => 'application/x-dia-diagram',
2236  'http://www.w3.org/1999/xhtml:html' => 'text/html',
2237  'html' => 'text/html',
2238  ],
2239  'type' => 'map',
2240  ];
2241 
2252  public const ImageLimits = [
2253  'default' => [
2254  [ 320, 240 ],
2255  [ 640, 480 ],
2256  [ 800, 600 ],
2257  [ 1024, 768 ],
2258  [ 1280, 1024 ],
2259  [ 2560, 2048 ],
2260  ],
2261  'type' => 'list',
2262  ];
2263 
2269  public const ThumbLimits = [
2270  'default' => [
2271  120,
2272  150,
2273  180,
2274  200,
2275  250,
2276  300
2277  ],
2278  'type' => 'list',
2279  ];
2280 
2291  public const ThumbnailBuckets = [
2292  'default' => null,
2293  'type' => '?list',
2294  ];
2295 
2311  public const ThumbnailMinimumBucketDistance = [
2312  'default' => 50,
2313  ];
2314 
2324  public const UploadThumbnailRenderMap = [
2325  'default' => [],
2326  'type' => 'map',
2327  ];
2328 
2340  public const UploadThumbnailRenderMethod = [
2341  'default' => 'jobqueue',
2342  ];
2343 
2350  public const UploadThumbnailRenderHttpCustomHost = [
2351  'default' => false,
2352  ];
2353 
2360  public const UploadThumbnailRenderHttpCustomDomain = [
2361  'default' => false,
2362  ];
2363 
2371  public const UseTinyRGBForJPGThumbnails = [
2372  'default' => false,
2373  ];
2374 
2390  public const GalleryOptions = [
2391  'default' => [],
2392  'type' => 'map',
2393  ];
2394 
2400  public const ThumbUpright = [
2401  'default' => 0.75,
2402  ];
2403 
2407  public const DirectoryMode = [
2408  'default' => 0777, // octal!
2409  ];
2410 
2417  public const ResponsiveImages = [
2418  'default' => true,
2419  ];
2420 
2429  public const ImagePreconnect = [
2430  'default' => false,
2431  ];
2432 
2433  /***************************************************************************/
2434  // region DJVU settings
2442  public const DjvuDump = [
2443  'default' => null,
2444  'type' => '?string',
2445  ];
2446 
2452  public const DjvuRenderer = [
2453  'default' => null,
2454  'type' => '?string',
2455  ];
2456 
2462  public const DjvuTxt = [
2463  'default' => null,
2464  'type' => '?string',
2465  ];
2466 
2472  public const DjvuPostProcessor = [
2473  'default' => 'pnmtojpeg',
2474  'type' => '?string',
2475  ];
2476 
2480  public const DjvuOutputExtension = [
2481  'default' => 'jpg',
2482  ];
2483 
2484  // endregion -- end of DJvu
2485 
2486  // endregion -- end of file uploads
2487 
2488  /***************************************************************************/
2489  // region Email settings
2497  public const EmergencyContact = [
2498  'default' => false,
2499  ];
2500 
2509  public const PasswordSender = [
2510  'default' => false,
2511  ];
2512 
2518  public const NoReplyAddress = [
2519  'default' => false,
2520  ];
2521 
2527  public const EnableEmail = [
2528  'default' => true,
2529  ];
2530 
2536  public const EnableUserEmail = [
2537  'default' => true,
2538  ];
2539 
2547  public const EnableSpecialMute = [
2548  'default' => false,
2549  ];
2550 
2556  public const EnableUserEmailMuteList = [
2557  'default' => false,
2558  ];
2559 
2569  public const UserEmailUseReplyTo = [
2570  'default' => true,
2571  ];
2572 
2577  public const PasswordReminderResendTime = [
2578  'default' => 24,
2579  ];
2580 
2584  public const NewPasswordExpiry = [
2585  'default' => 3600 * 24 * 7,
2586  ];
2587 
2591  public const UserEmailConfirmationTokenExpiry = [
2592  'default' => 7 * 24 * 60 * 60,
2593  ];
2594 
2599  public const PasswordExpirationDays = [
2600  'default' => false,
2601  ];
2602 
2607  public const PasswordExpireGrace = [
2608  'default' => 3600 * 24 * 7,
2609  ];
2610 
2628  public const SMTP = [
2629  'default' => false,
2630  'type' => 'false|map',
2631  ];
2632 
2636  public const AdditionalMailParams = [
2637  'default' => null,
2638  ];
2639 
2644  public const AllowHTMLEmail = [
2645  'default' => false,
2646  ];
2647 
2657  public const EnotifFromEditor = [
2658  'default' => false,
2659  'type' => 'boolean',
2660  ];
2661 
2668  public const EmailAuthentication = [
2669  'default' => true,
2670  ];
2671 
2675  public const EnotifWatchlist = [
2676  'default' => false,
2677  ];
2678 
2686  public const EnotifUserTalk = [
2687  'default' => false,
2688  ];
2689 
2702  public const EnotifRevealEditorAddress = [
2703  'default' => false,
2704  'type' => 'boolean',
2705  ];
2706 
2720  public const EnotifMinorEdits = [
2721  'default' => true,
2722  ];
2723 
2731  public const EnotifImpersonal = [
2732  'default' => false,
2733  ];
2734 
2739  public const EnotifMaxRecips = [
2740  'default' => 500,
2741  ];
2742 
2746  public const EnotifUseRealName = [
2747  'default' => false,
2748  ];
2749 
2754  public const UsersNotifiedOnAllChanges = [
2755  'default' => [],
2756  'type' => 'map',
2757  ];
2758 
2759  // endregion -- end of email settings
2760 
2761  /***************************************************************************/
2762  // region Database settings
2773  public const DBname = [
2774  'default' => 'my_wiki',
2775  ];
2776 
2785  public const DBmwschema = [
2786  'default' => null,
2787  'type' => '?string',
2788  ];
2789 
2798  public const DBprefix = [
2799  'default' => '',
2800  ];
2801 
2805  public const DBserver = [
2806  'default' => 'localhost',
2807  ];
2808 
2812  public const DBport = [
2813  'default' => 5432,
2814  ];
2815 
2819  public const DBuser = [
2820  'default' => 'wikiuser',
2821  ];
2822 
2826  public const DBpassword = [
2827  'default' => '',
2828  ];
2829 
2833  public const DBtype = [
2834  'default' => 'mysql',
2835  ];
2836 
2844  public const DBssl = [
2845  'default' => false,
2846  ];
2847 
2856  public const DBcompress = [
2857  'default' => false,
2858  ];
2859 
2863  public const DBadminuser = [
2864  'default' => null,
2865  ];
2866 
2870  public const DBadminpassword = [
2871  'default' => null,
2872  ];
2873 
2885  public const SearchType = [
2886  'default' => null,
2887  ];
2888 
2901  public const SearchTypeAlternatives = [
2902  'default' => null,
2903  ];
2904 
2908  public const DBTableOptions = [
2909  'default' => 'ENGINE=InnoDB, DEFAULT CHARSET=binary',
2910  ];
2911 
2919  public const SQLMode = [
2920  'default' => '',
2921  ];
2922 
2930  public const DBDefaultGroup = [
2931  'default' => null,
2932  ];
2933 
2937  public const SQLiteDataDir = [
2938  'default' => '',
2939  ];
2940 
2966  public const SharedDB = [
2967  'default' => null,
2968  'deprecated' => 'since 1.21 In new code, use the $wiki parameter to ' .
2969  'LBFactory::getMainLB() to access remote databases. Using LBFactory::getMainLB() ' .
2970  'allows the shared database to reside on separate servers to the wiki\'s own ' .
2971  'database, with suitable configuration of $wgLBFactoryConf',
2972  ];
2973 
2977  public const SharedPrefix = [
2978  'default' => false,
2979  'dynamicDefault' => [ 'use' => [ 'DBprefix' ] ]
2980  ];
2981 
2986  public static function getDefaultSharedPrefix( $dbPrefix ) {
2987  return $dbPrefix;
2988  }
2989 
2994  public const SharedTables = [
2995  'default' => [
2996  'user',
2997  'user_properties',
2998  'user_autocreate_serial',
2999  ],
3000  'type' => 'list',
3001  ];
3002 
3007  public const SharedSchema = [
3008  'default' => false,
3009  'dynamicDefault' => [ 'use' => [ 'DBmwschema' ] ]
3010  ];
3011 
3016  public static function getDefaultSharedSchema( $dbMwschema ) {
3017  return $dbMwschema;
3018  }
3019 
3074  public const DBservers = [
3075  'default' => false,
3076  'type' => 'false|list',
3077  ];
3078 
3090  public const LBFactoryConf = [
3091  'default' => [
3092  'class' => 'Wikimedia\\Rdbms\\LBFactorySimple',
3093  ],
3094  'type' => 'map',
3095  'mergeStrategy' => 'replace',
3096  ];
3097 
3109  public const DataCenterUpdateStickTTL = [
3110  'default' => 10,
3111  ];
3112 
3116  public const DBerrorLog = [
3117  'default' => false,
3118  ];
3119 
3140  public const DBerrorLogTZ = [
3141  'default' => false,
3142  'dynamicDefault' => [ 'use' => [ 'Localtimezone' ] ]
3143  ];
3144 
3145  public static function getDefaultDBerrorLogTZ( $localtimezone ) {
3146  // NOTE: Extra fallback, in case $localtimezone is ''.
3147  // Many extsing LocalSettings files have $wgLocaltimezone = ''
3148  // in them, erroneously generated by the installer.
3149  return $localtimezone ?: self::getDefaultLocaltimezone();
3150  }
3151 
3165  public const LocalDatabases = [
3166  'default' => [],
3167  'type' => 'list',
3168  'items' => [ 'type' => 'string', ],
3169  ];
3170 
3178  public const DatabaseReplicaLagWarning = [
3179  'default' => 10,
3180  ];
3181 
3186  public const DatabaseReplicaLagCritical = [
3187  'default' => 30,
3188  ];
3189 
3196  public const MaxExecutionTimeForExpensiveQueries = [
3197  'default' => 0,
3198  ];
3199 
3214  public const TemplateLinksSchemaMigrationStage = [
3216  'type' => 'integer',
3217  ];
3218 
3219  // endregion -- End of DB settings
3220 
3221  /***************************************************************************/
3222  // region Content handlers and storage
3233  public const ContentHandlers = [
3234  'default' =>
3235  [
3236  // the usual case
3237  CONTENT_MODEL_WIKITEXT => WikitextContentHandler::class,
3238  // dumb version, no syntax highlighting
3239  CONTENT_MODEL_JAVASCRIPT => JavaScriptContentHandler::class,
3240  // simple implementation, for use by extensions, etc.
3241  CONTENT_MODEL_JSON => JsonContentHandler::class,
3242  // dumb version, no syntax highlighting
3243  CONTENT_MODEL_CSS => CssContentHandler::class,
3244  // plain text, for use by extensions, etc.
3245  CONTENT_MODEL_TEXT => TextContentHandler::class,
3246  // fallback for unknown models, from imports or extensions that were removed
3247  CONTENT_MODEL_UNKNOWN => FallbackContentHandler::class,
3248  ],
3249  'type' => 'map',
3250  ];
3251 
3263  public const NamespaceContentModels = [
3264  'default' => [],
3265  'type' => 'map',
3266  ];
3267 
3279  public const ContentHandlerTextFallback = [
3280  'default' => 'ignore',
3281  'deprecated' => 'since 1.37',
3282  ];
3283 
3299  public const TextModelsToParse = [
3300  'default' => [
3301  CONTENT_MODEL_WIKITEXT, // Just for completeness, wikitext will always be parsed.
3302  CONTENT_MODEL_JAVASCRIPT, // Make categories etc work, people put them into comments.
3303  CONTENT_MODEL_CSS, // Make categories etc work, people put them into comments.
3304  ],
3305  'type' => 'list',
3306  ];
3307 
3314  public const CompressRevisions = [
3315  'default' => false,
3316  ];
3317 
3327  public const ExternalStores = [
3328  'default' => [],
3329  'type' => 'list',
3330  ];
3331 
3351  public const ExternalServers = [
3352  'default' => [],
3353  'type' => 'map',
3354  ];
3355 
3368  public const DefaultExternalStore = [
3369  'default' => false,
3370  'type' => 'list|false',
3371  ];
3372 
3379  public const RevisionCacheExpiry = [
3380  'default' => 86400 * 7,
3381  'type' => 'integer',
3382  ];
3383 
3390  public const PageLanguageUseDB = [
3391  'default' => false,
3392  'type' => 'boolean',
3393  ];
3394 
3407  public const DiffEngine = [
3408  'default' => null,
3409  'type' => '?string',
3410  ];
3411 
3415  public const ExternalDiffEngine = [
3416  'default' => false,
3417  'type' => 'string|false',
3418  ];
3419 
3420  // endregion -- end of Content handlers and storage
3421 
3422  /***************************************************************************/
3423  // region Performance hacks and limits
3435  public const RequestTimeLimit = [
3436  'default' => null,
3437  'type' => '?integer',
3438  ];
3439 
3449  public const TransactionalTimeLimit = [
3450  'default' => 120,
3451  ];
3452 
3467  public const CriticalSectionTimeLimit = [
3468  'default' => 180.0,
3469  'type' => 'float',
3470  ];
3471 
3475  public const MiserMode = [
3476  'default' => false,
3477  ];
3478 
3482  public const DisableQueryPages = [
3483  'default' => false,
3484  ];
3485 
3489  public const QueryCacheLimit = [
3490  'default' => 1000,
3491  ];
3492 
3496  public const WantedPagesThreshold = [
3497  'default' => 1,
3498  ];
3499 
3503  public const AllowSlowParserFunctions = [
3504  'default' => false,
3505  ];
3506 
3510  public const AllowSchemaUpdates = [
3511  'default' => true,
3512  ];
3513 
3517  public const MaxArticleSize = [
3518  'default' => 2048,
3519  ];
3520 
3525  public const MemoryLimit = [
3526  'default' => '50M',
3527  ];
3528 
3564  public const PoolCounterConf = [
3565  'default' => null,
3566  'type' => '?map',
3567  ];
3568 
3576  public const MaxUserDBWriteDuration = [
3577  'default' => false,
3578  'type' => 'integer|false',
3579  ];
3580 
3588  public const MaxJobDBWriteDuration = [
3589  'default' => false,
3590  'type' => 'integer|false',
3591  ];
3592 
3597  public const LinkHolderBatchSize = [
3598  'default' => 1000,
3599  ];
3600 
3604  public const MaximumMovedPages = [
3605  'default' => 100,
3606  ];
3607 
3620  public const ForceDeferredUpdatesPreSend = [
3621  'default' => false,
3622  ];
3623 
3634  public const MultiShardSiteStats = [
3635  'default' => false,
3636  'type' => 'boolean',
3637  ];
3638 
3639  // endregion -- end performance hacks
3640 
3641  /***************************************************************************/
3642  // region Cache settings
3653  public const CacheDirectory = [
3654  'default' => false,
3655  ];
3656 
3674  public const MainCacheType = [
3675  'default' => CACHE_NONE,
3676  ];
3677 
3684  public const MessageCacheType = [
3685  'default' => CACHE_ANYTHING,
3686  ];
3687 
3694  public const ParserCacheType = [
3695  'default' => CACHE_ANYTHING,
3696  ];
3697 
3705  public const SessionCacheType = [
3706  'default' => CACHE_ANYTHING,
3707  ];
3708 
3717  public const LanguageConverterCacheType = [
3718  'default' => CACHE_ANYTHING,
3719  ];
3720 
3725  public const StatsCacheType = [
3726  'default' => CACHE_ANYTHING,
3727  ];
3728 
3793  public const ObjectCaches = [
3794  'default' => [
3795  CACHE_NONE => [ 'class' => EmptyBagOStuff::class, 'reportDupes' => false ],
3796  CACHE_DB => [ 'class' => SqlBagOStuff::class, 'loggroup' => 'SQLBagOStuff' ],
3797 
3798  CACHE_ANYTHING => [ 'factory' => 'ObjectCache::newAnything' ],
3799  CACHE_ACCEL => [ 'factory' => 'ObjectCache::getLocalServerInstance' ],
3800 
3801  'db-replicated' => [
3802  'class' => ReplicatedBagOStuff::class,
3803  'readFactory' => [
3804  'factory' => 'ObjectCache::newFromParams',
3805  'args' => [ [ 'class' => SqlBagOStuff::class, 'replicaOnly' => true ] ]
3806  ],
3807  'writeFactory' => [
3808  'factory' => 'ObjectCache::newFromParams',
3809  'args' => [ [ 'class' => SqlBagOStuff::class, 'replicaOnly' => false ] ]
3810  ],
3811  'loggroup' => 'SQLBagOStuff',
3812  'reportDupes' => false
3813  ],
3814  'memcached-php' => [ 'class' => MemcachedPhpBagOStuff::class, 'loggroup' => 'memcached' ],
3815  'memcached-pecl' => [ 'class' => MemcachedPeclBagOStuff::class, 'loggroup' => 'memcached' ],
3816  'hash' => [ 'class' => HashBagOStuff::class, 'reportDupes' => false ],
3817 
3818  // Deprecated since 1.35.
3819  // - To configure a wg*CacheType variable to use the local server cache,
3820  // use CACHE_ACCEL instead, which will select these automatically.
3821  // - To access the object for the local server cache at run-time,
3822  // use MediaWikiServices::getLocalServerObjectCache()
3823  // instead of e.g. ObjectCache::getInstance( 'apcu' ).
3824  // - To instantiate a new one of these explicitly, do so directly
3825  // by using `new APCUBagOStuff( [ … ] )`
3826  // - To instantiate a new one of these including auto-detection and fallback,
3827  // use ObjectCache::makeLocalServerCache().
3828  'apc' => [ 'class' => APCUBagOStuff::class, 'reportDupes' => false ],
3829  'apcu' => [ 'class' => APCUBagOStuff::class, 'reportDupes' => false ],
3830  'wincache' => [ 'class' => WinCacheBagOStuff::class, 'reportDupes' => false ],
3831  ],
3832  'type' => 'map',
3833  ];
3834 
3857  public const MainWANCache = [
3858  'default' => false,
3859  'type' => 'integer|string|false',
3860  ];
3861 
3888  public const WANObjectCaches = [
3889  'default' => [
3890  CACHE_NONE => [
3891  'class' => WANObjectCache::class,
3892  'cacheId' => CACHE_NONE,
3893  ]
3894  ],
3895  'type' => 'map',
3896  ];
3897 
3908  public const EnableWANCacheReaper = [
3909  'default' => false,
3910  'type' => 'boolean',
3911  ];
3912 
3941  public const MainStash = [
3942  'default' => 'db-replicated',
3943  ];
3944 
3973  public const ParsoidCacheConfig = [
3974  'type' => 'object',
3975  'properties' => [
3976  'StashType' => [ 'type' => 'int|string|null', 'default' => null ],
3977  'StashDuration' => [ 'type' => 'int', 'default' => 24 * 60 * 60 ],
3978  'CacheThresholdTime' => [ 'type' => 'float', 'default' => 0.0 ],
3979  'WarmParsoidParserCache' => [ 'type' => 'bool', 'default' => false ],
3980  ]
3981  ];
3982 
3998  public const ChronologyProtectorStash = [
3999  'default' => null,
4000  'type' => '?string',
4001  ];
4002 
4008  public const ParserCacheExpireTime = [
4009  'default' => 60 * 60 * 24,
4010  ];
4011 
4017  public const OldRevisionParserCacheExpireTime = [
4018  'default' => 60 * 60,
4019  ];
4020 
4024  public const ObjectCacheSessionExpiry = [
4025  'default' => 60 * 60,
4026  ];
4027 
4040  public const PHPSessionHandling = [
4041  'default' => 'enable',
4042  'type' => 'string',
4043  ];
4044 
4052  public const SuspiciousIpExpiry = [
4053  'default' => false,
4054  'type' => 'integer|false',
4055  ];
4056 
4062  public const SessionPbkdf2Iterations = [
4063  'default' => 10001,
4064  ];
4065 
4069  public const MemCachedServers = [
4070  'default' => [ '127.0.0.1:11211', ],
4071  'type' => 'list',
4072  ];
4073 
4078  public const MemCachedPersistent = [
4079  'default' => false,
4080  ];
4081 
4085  public const MemCachedTimeout = [
4086  'default' => 500000,
4087  ];
4088 
4100  public const UseLocalMessageCache = [
4101  'default' => false,
4102  ];
4103 
4111  public const AdaptiveMessageCache = [
4112  'default' => false,
4113  ];
4114 
4146  public const LocalisationCacheConf = [
4147  'properties' => [
4148  'class' => [ 'type' => 'string', 'default' => LocalisationCache::class ],
4149  'store' => [ 'type' => 'string', 'default' => 'detect' ],
4150  'storeClass' => [ 'type' => 'false|string', 'default' => false ],
4151  'storeDirectory' => [ 'type' => 'false|string', 'default' => false ],
4152  'storeServer' => [ 'type' => 'object', 'default' => [] ],
4153  'forceRecache' => [ 'type' => 'bool', 'default' => false ],
4154  'manualRecache' => [ 'type' => 'bool', 'default' => false ],
4155  ],
4156  'type' => 'object',
4157  ];
4158 
4162  public const CachePages = [
4163  'default' => true,
4164  ];
4165 
4175  public const CacheEpoch = [
4176  'default' => '20030516000000',
4177  ];
4178 
4183  public const GitInfoCacheDirectory = [
4184  'default' => false,
4185  ];
4186 
4192  public const UseFileCache = [
4193  'default' => false,
4194  ];
4195 
4202  public const FileCacheDepth = [
4203  'default' => 2,
4204  ];
4205 
4210  public const RenderHashAppend = [
4211  'default' => '',
4212  ];
4213 
4223  public const EnableSidebarCache = [
4224  'default' => false,
4225  ];
4226 
4230  public const SidebarCacheExpiry = [
4231  'default' => 86400,
4232  ];
4233 
4240  public const UseGzip = [
4241  'default' => false,
4242  ];
4243 
4253  public const InvalidateCacheOnLocalSettingsChange = [
4254  'default' => true,
4255  ];
4256 
4271  public const ExtensionInfoMTime = [
4272  'default' => false,
4273  'type' => 'integer|false',
4274  ];
4275 
4282  public const EnableRemoteBagOStuffTests = [
4283  'default' => false,
4284  ];
4285 
4286  // endregion -- end of cache settings
4287 
4288  /***************************************************************************/
4289  // region HTTP proxy (CDN) settings
4308  public const UseCdn = [
4309  'default' => false,
4310  ];
4311 
4320  public const VaryOnXFP = [
4321  'default' => false,
4322  ];
4323 
4333  public const InternalServer = [
4334  'default' => false,
4335  ];
4336 
4346  public const CdnMaxAge = [
4347  'default' => 18000,
4348  ];
4349 
4356  public const CdnMaxageLagged = [
4357  'default' => 30,
4358  ];
4359 
4366  public const CdnMaxageStale = [
4367  'default' => 10,
4368  ];
4369 
4385  public const CdnReboundPurgeDelay = [
4386  'default' => 0,
4387  ];
4388 
4395  public const CdnMaxageSubstitute = [
4396  'default' => 60,
4397  ];
4398 
4404  public const ForcedRawSMaxage = [
4405  'default' => 300,
4406  ];
4407 
4418  public const CdnServers = [
4419  'default' => [],
4420  'type' => 'map',
4421  ];
4422 
4431  public const CdnServersNoPurge = [
4432  'default' => [],
4433  'type' => 'map',
4434  ];
4435 
4456  public const SquidPurgeUseHostHeader = [
4457  'default' => true,
4458  'deprecated' => 'since 1.33',
4459  ];
4460 
4509  public const HTCPRouting = [
4510  'default' => [],
4511  'type' => 'map',
4512  ];
4513 
4519  public const HTCPMulticastTTL = [
4520  'default' => 1,
4521  ];
4522 
4526  public const UsePrivateIPs = [
4527  'default' => false,
4528  ];
4529 
4541  public const CdnMatchParameterOrder = [
4542  'default' => true,
4543  ];
4544 
4545  // endregion -- end of HTTP proxy settings
4546 
4547  /***************************************************************************/
4548  // region Language, regional and character encoding settings
4568  public const LanguageCode = [
4569  'default' => 'en',
4570  ];
4571 
4583  public const GrammarForms = [
4584  'default' => [],
4585  'type' => 'map',
4586  ];
4587 
4591  public const InterwikiMagic = [
4592  'default' => true,
4593  ];
4594 
4598  public const HideInterlanguageLinks = [
4599  'default' => false,
4600  ];
4601 
4616  public const ExtraInterlanguageLinkPrefixes = [
4617  'default' => [],
4618  'type' => 'map',
4619  ];
4620 
4628  public const InterlanguageLinkCodeMap = [
4629  'default' => [],
4630  'type' => 'map',
4631  ];
4632 
4636  public const ExtraLanguageNames = [
4637  'default' => [],
4638  'type' => 'map',
4639  ];
4640 
4655  public const ExtraLanguageCodes = [
4656  'default' => [
4657  'bh' => 'bho',
4658  'no' => 'nb',
4659  'simple' => 'en',
4660  ],
4661  'type' => 'map',
4662  ];
4663 
4672  public const DummyLanguageCodes = [
4673  'default' => [],
4674  'type' => 'map',
4675  ];
4676 
4684  public const AllUnicodeFixes = [
4685  'default' => false,
4686  ];
4687 
4698  public const LegacyEncoding = [
4699  'default' => false,
4700  ];
4701 
4706  public const AmericanDates = [
4707  'default' => false,
4708  ];
4709 
4714  public const TranslateNumerals = [
4715  'default' => true,
4716  ];
4717 
4723  public const UseDatabaseMessages = [
4724  'default' => true,
4725  ];
4726 
4730  public const MaxMsgCacheEntrySize = [
4731  'default' => 10000,
4732  ];
4733 
4737  public const DisableLangConversion = [
4738  'default' => false,
4739  ];
4740 
4744  public const DisableTitleConversion = [
4745  'default' => false,
4746  ];
4747 
4751  public const DefaultLanguageVariant = [
4752  'default' => false,
4753  ];
4754 
4759  public const UsePigLatinVariant = [
4760  'default' => false,
4761  ];
4762 
4773  public const DisabledVariants = [
4774  'default' => [],
4775  'type' => 'map',
4776  ];
4777 
4796  public const VariantArticlePath = [
4797  'default' => false,
4798  ];
4799 
4805  public const LoginLanguageSelector = [
4806  'default' => false,
4807  ];
4808 
4829  public const ForceUIMsgAsContentMsg = [
4830  'default' => [],
4831  'type' => 'map',
4832  ];
4833 
4846  public const RawHtmlMessages = [
4847  'default' => [
4848  'copyright',
4849  'history_copyright',
4850  'googlesearch',
4851  'feedback-terms',
4852  'feedback-termsofuse',
4853  ],
4854  'type' => 'list',
4855  'items' => [ 'type' => 'string', ],
4856  ];
4857 
4882  public const Localtimezone = [
4883  'dynamicDefault' => true,
4884  ];
4885 
4886  public static function getDefaultLocaltimezone(): string {
4887  // This defaults to the `date.timezone` value of the PHP INI option. If this option is not set,
4888  // it falls back to UTC. Prior to PHP 7.0, this fallback produced a warning.
4889  $localtimezone = date_default_timezone_get();
4890  if ( !$localtimezone ) {
4891  // Make doubly sure we have a valid time zone, even if date_default_timezone_get()
4892  // returned garbage.
4893  $localtimezone = 'UTC';
4894  }
4895 
4896  return $localtimezone;
4897  }
4898 
4908  public const LocalTZoffset = [
4909  'dynamicDefault' => [ 'use' => [ 'Localtimezone' ] ]
4910  ];
4911 
4912  public static function getDefaultLocalTZoffset( $localtimezone ): int {
4913  // NOTE: Extra fallback, in case $localtimezone is ''.
4914  // Many extsing LocalSettings files have $wgLocaltimezone = ''
4915  // in them, erroneously generated by the installer.
4916  $localtimezone = $localtimezone ?: self::getDefaultLocaltimezone();
4917 
4918  $offset = ( new DateTimeZone( $localtimezone ) )->getOffset( new DateTime() );
4919  return (int)( $offset / 60 );
4920  }
4921 
4931  public const OverrideUcfirstCharacters = [
4932  'default' => [],
4933  'type' => 'map',
4934  ];
4935 
4936  // endregion -- End of language/charset settings
4937 
4938  /***************************************************************************/
4939  // region Output format and skin settings
4945  public const MimeType = [
4946  'default' => 'text/html',
4947  ];
4948 
4958  public const Html5Version = [
4959  'default' => null,
4960  ];
4961 
4971  public const HTMLFormAllowTableFormat = [
4972  'default' => true,
4973  ];
4974 
4983  public const UseMediaWikiUIEverywhere = [
4984  'default' => false,
4985  ];
4986 
4994  public const EditSubmitButtonLabelPublish = [
4995  'default' => false,
4996  ];
4997 
5014  public const XhtmlNamespaces = [
5015  'default' => [],
5016  'type' => 'map',
5017  ];
5018 
5026  public const SiteNotice = [
5027  'default' => '',
5028  ];
5029 
5042  public const BrowserFormatDetection = [
5043  'default' => 'telephone=no',
5044  'type' => 'string',
5045  ];
5046 
5055  public const SkinMetaTags = [
5056  'default' => [],
5057  'type' => 'map',
5058  ];
5059 
5064  public const DefaultSkin = [
5065  'default' => 'vector',
5066  ];
5067 
5073  public const FallbackSkin = [
5074  'default' => 'fallback',
5075  ];
5076 
5087  public const SkipSkins = [
5088  'default' => [],
5089  'type' => 'map',
5090  ];
5091 
5095  public const DisableOutputCompression = [
5096  'default' => false,
5097  ];
5098 
5128  public const FragmentMode = [
5129  'default' => [ 'html5', 'legacy', ],
5130  'type' => 'list',
5131  ];
5132 
5141  public const ExternalInterwikiFragmentMode = [
5142  'default' => 'legacy',
5143  ];
5144 
5176  public const FooterIcons = [
5177  'default' => [
5178  "copyright" => [
5179  "copyright" => [], // placeholder for the built in copyright icon
5180  ],
5181  "poweredby" => [
5182  "mediawiki" => [
5183  // Defaults to point at
5184  // "$wgResourceBasePath/resources/assets/poweredby_mediawiki_88x31.png"
5185  // plus srcset for 1.5x, 2x resolution variants.
5186  "src" => null,
5187  "url" => "https://www.mediawiki.org/",
5188  "alt" => "Powered by MediaWiki",
5189  ]
5190  ],
5191  ],
5192  'type' => 'map',
5193  ];
5194 
5202  public const UseCombinedLoginLink = [
5203  'default' => false,
5204  ];
5205 
5209  public const Edititis = [
5210  'default' => false,
5211  ];
5212 
5224  public const Send404Code = [
5225  'default' => true,
5226  ];
5227 
5238  public const ShowRollbackEditCount = [
5239  'default' => 10,
5240  ];
5241 
5248  public const EnableCanonicalServerLink = [
5249  'default' => false,
5250  ];
5251 
5252  // endregion -- End of output format settings
5253 
5254  /***************************************************************************/
5255  // region ResourceLoader settings
5265  public const MangleFlashPolicy = [
5266  'default' => true,
5267  'deprecated' => 'since 1.39; no longer has any effect',
5268  ];
5269 
5590  public const ResourceModules = [
5591  'default' => [],
5592  'type' => 'map',
5593  ];
5594 
5689  public const ResourceModuleSkinStyles = [
5690  'default' => [],
5691  'type' => 'map',
5692  ];
5693 
5705  public const ResourceLoaderSources = [
5706  'default' => [],
5707  'type' => 'map',
5708  ];
5709 
5715  public const ResourceBasePath = [
5716  'default' => null,
5717  'dynamicDefault' => [ 'use' => [ 'ScriptPath' ] ]
5718  ];
5719 
5724  public static function getDefaultResourceBasePath( $scriptPath ): string {
5725  return $scriptPath;
5726  }
5727 
5740  public const ResourceLoaderMaxage = [
5741  'default' => [],
5742  'type' => 'map',
5743  ];
5744 
5751  public const ResourceLoaderUseObjectCacheForDeps = [
5752  'default' => false,
5753  ];
5754 
5760  public const ResourceLoaderDebug = [
5761  'default' => false,
5762  ];
5763 
5770  public const IncludeLegacyJavaScript = [
5771  'default' => false,
5772  ];
5773 
5786  public const ResourceLoaderMaxQueryLength = [
5787  'default' => false,
5788  'type' => 'integer|false',
5789  ];
5790 
5798  public const ResourceLoaderValidateJS = [
5799  'default' => true,
5800  ];
5801 
5810  public const ResourceLoaderEnableJSProfiler = [
5811  'default' => false,
5812  ];
5813 
5818  public const ResourceLoaderStorageEnabled = [
5819  'default' => true,
5820  ];
5821 
5828  public const ResourceLoaderStorageVersion = [
5829  'default' => 1,
5830  ];
5831 
5843  public const AllowSiteCSSOnRestrictedPages = [
5844  'default' => false,
5845  ];
5846 
5857  public const VueDevelopmentMode = [
5858  'default' => false,
5859  ];
5860 
5861  // endregion -- End of ResourceLoader settings
5862 
5863  /***************************************************************************/
5864  // region Page titles and redirects
5871  public const MetaNamespace = [
5872  'default' => false,
5873  'dynamicDefault' => [ 'use' => [ 'Sitename' ] ]
5874  ];
5875 
5880  public static function getDefaultMetaNamespace( $sitename ): string {
5881  return str_replace( ' ', '_', $sitename );
5882  }
5883 
5891  public const MetaNamespaceTalk = [
5892  'default' => false,
5893  ];
5894 
5901  public const CanonicalNamespaceNames = [
5902  'default' => NamespaceInfo::CANONICAL_NAMES,
5903  'type' => 'map',
5904  ];
5905 
5932  public const ExtraNamespaces = [
5933  'default' => [],
5934  'type' => 'map',
5935  ];
5936 
5945  public const ExtraGenderNamespaces = [
5946  'default' => [],
5947  'type' => 'map',
5948  ];
5949 
5972  public const NamespaceAliases = [
5973  'default' => [],
5974  'type' => 'map',
5975  ];
5976 
6001  public const LegalTitleChars = [
6002  'default' => ' %!"$&\'()*,\\-.\\/0-9:;=?@A-Z\\\\^_`a-z~\\x80-\\xFF+',
6003  ];
6004 
6012  public const CapitalLinks = [
6013  'default' => true,
6014  ];
6015 
6030  public const CapitalLinkOverrides = [
6031  'default' => [],
6032  'type' => 'map',
6033  ];
6034 
6039  public const NamespacesWithSubpages = [
6040  'default' => [
6041  NS_TALK => true,
6042  NS_USER => true,
6043  NS_USER_TALK => true,
6044  NS_PROJECT => true,
6045  NS_PROJECT_TALK => true,
6046  NS_FILE_TALK => true,
6047  NS_MEDIAWIKI => true,
6048  NS_MEDIAWIKI_TALK => true,
6049  NS_TEMPLATE => true,
6050  NS_TEMPLATE_TALK => true,
6051  NS_HELP => true,
6052  NS_HELP_TALK => true,
6054  ],
6055  'type' => 'map',
6056  ];
6057 
6064  public const ContentNamespaces = [
6065  'default' => [ NS_MAIN ],
6066  'type' => 'list',
6067  ];
6068 
6077  public const ShortPagesNamespaceExclusions = [
6078  'default' => [],
6079  'type' => 'list',
6080  ];
6081 
6090  public const ExtraSignatureNamespaces = [
6091  'default' => [],
6092  'type' => 'list',
6093  ];
6094 
6106  public const InvalidRedirectTargets = [
6107  'default' => [ 'Filepath', 'Mypage', 'Mytalk', 'Redirect' ],
6108  'type' => 'list',
6109  ];
6110 
6119  public const DisableHardRedirects = [
6120  'default' => false,
6121  ];
6122 
6128  public const FixDoubleRedirects = [
6129  'default' => false,
6130  ];
6131 
6132  // endregion -- End of title and interwiki settings
6133 
6134  /***************************************************************************/
6135  // region Interwiki links and sites
6144  public const LocalInterwikis = [
6145  'default' => [],
6146  'type' => 'list',
6147  ];
6148 
6152  public const InterwikiExpiry = [
6153  'default' => 10800,
6154  ];
6155 
6172  public const InterwikiCache = [
6173  'default' => false,
6174  'type' => 'false|map|string',
6175  'mergeStrategy' => 'replace',
6176  ];
6177 
6185  public const InterwikiScopes = [
6186  'default' => 3,
6187  ];
6188 
6192  public const InterwikiFallbackSite = [
6193  'default' => 'wiki',
6194  ];
6195 
6212  public const RedirectSources = [
6213  'default' => false,
6214  ];
6215 
6221  public const SiteTypes = [
6222  'default' => [ 'mediawiki' => MediaWikiSite::class, ],
6223  'type' => 'map',
6224  ];
6225 
6226  // endregion -- Interwiki links and sites
6227 
6228  /***************************************************************************/
6229  // region Parser settings
6237  public const MaxTocLevel = [
6238  'default' => 999,
6239  ];
6240 
6245  public const MaxPPNodeCount = [
6246  'default' => 1000000,
6247  ];
6248 
6256  public const MaxTemplateDepth = [
6257  'default' => 100,
6258  ];
6259 
6263  public const MaxPPExpandDepth = [
6264  'default' => 100,
6265  ];
6266 
6277  public const UrlProtocols = [
6278  'default' => [
6279  'bitcoin:', 'ftp://', 'ftps://', 'geo:', 'git://', 'gopher://', 'http://',
6280  'https://', 'irc://', 'ircs://', 'magnet:', 'mailto:', 'mms://', 'news:',
6281  'nntp://', 'redis://', 'sftp://', 'sip:', 'sips:', 'sms:', 'ssh://',
6282  'svn://', 'tel:', 'telnet://', 'urn:', 'worldwind://', 'xmpp:', '//'
6283  ],
6284  'type' => 'list',
6285  ];
6286 
6290  public const CleanSignatures = [
6291  'default' => true,
6292  ];
6293 
6297  public const AllowExternalImages = [
6298  'default' => false,
6299  ];
6300 
6315  public const AllowExternalImagesFrom = [
6316  'default' => '',
6317  ];
6318 
6330  public const EnableImageWhitelist = [
6331  'default' => false,
6332  ];
6333 
6345  public const AllowImageTag = [
6346  'default' => false,
6347  'deprecated' => 'since 1.35; register an extension tag named <img> instead.',
6348  ];
6349 
6368  public const TidyConfig = [
6369  'default' => [],
6370  'type' => 'map',
6371  ];
6372 
6381  public const ParsoidSettings = [
6382  'default' => [
6383  'useSelser' => true,
6384  ],
6385  'type' => 'map',
6386  ];
6387 
6395  public const ParserEnableLegacyMediaDOM = [
6396  'default' => true,
6397  ];
6398 
6407  public const UseContentMediaStyles = [
6408  'default' => false,
6409  ];
6410 
6417  public const RawHtml = [
6418  'default' => false,
6419  ];
6420 
6430  public const ExternalLinkTarget = [
6431  'default' => false,
6432  ];
6433 
6440  public const NoFollowLinks = [
6441  'default' => true,
6442  ];
6443 
6449  public const NoFollowNsExceptions = [
6450  'default' => [],
6451  'type' => 'list',
6452  ];
6453 
6467  public const NoFollowDomainExceptions = [
6468  'default' => [ 'mediawiki.org', ],
6469  'type' => 'list',
6470  ];
6471 
6476  public const RegisterInternalExternals = [
6477  'default' => false,
6478  ];
6479 
6483  public const AllowDisplayTitle = [
6484  'default' => true,
6485  ];
6486 
6492  public const RestrictDisplayTitle = [
6493  'default' => true,
6494  ];
6495 
6500  public const ExpensiveParserFunctionLimit = [
6501  'default' => 100,
6502  ];
6503 
6508  public const PreprocessorCacheThreshold = [
6509  'default' => 1000,
6510  ];
6511 
6515  public const EnableScaryTranscluding = [
6516  'default' => false,
6517  ];
6518 
6524  public const TranscludeCacheExpiry = [
6525  'default' => 3600,
6526  ];
6527 
6534  public const EnableMagicLinks = [
6535  'default' => [
6536  'ISBN' => false,
6537  'PMID' => false,
6538  'RFC' => false,
6539  ],
6540  'type' => 'map',
6541  ];
6542 
6543  // endregion -- end of parser settings
6544 
6545  /***************************************************************************/
6546  // region Statistics and content analysis
6565  public const ArticleCountMethod = [
6566  'default' => 'link',
6567  ];
6568 
6577  public const ActiveUserDays = [
6578  'default' => 30,
6579  ];
6580 
6593  public const LearnerEdits = [
6594  'default' => 10,
6595  ];
6596 
6602  public const LearnerMemberSince = [
6603  'default' => 4,
6604  ];
6605 
6611  public const ExperiencedUserEdits = [
6612  'default' => 500,
6613  ];
6614 
6620  public const ExperiencedUserMemberSince = [
6621  'default' => 30,
6622  ];
6623 
6642  public const ManualRevertSearchRadius = [
6643  'default' => 15,
6644  'type' => 'integer',
6645  ];
6646 
6659  public const RevertedTagMaxDepth = [
6660  'default' => 15,
6661  'type' => 'integer',
6662  ];
6663 
6664  // endregion -- End of statistics and content analysis
6665 
6666  /***************************************************************************/
6667  // region User accounts, authentication
6676  public const CentralIdLookupProviders = [
6677  'default' => [
6678  'local' => [
6679  'class' => LocalIdLookup::class,
6680  'services' => [
6681  'MainConfig',
6682  'DBLoadBalancer',
6683  ]
6684  ]
6685  ],
6686  'type' => 'map',
6687  ];
6688 
6692  public const CentralIdLookupProvider = [
6693  'default' => 'local',
6694  'type' => 'string',
6695  ];
6696 
6762  public const PasswordPolicy = [
6763  'default' => [
6764  'policies' => [
6765  'bureaucrat' => [
6766  'MinimalPasswordLength' => 10,
6767  'MinimumPasswordLengthToLogin' => 1,
6768  ],
6769  'sysop' => [
6770  'MinimalPasswordLength' => 10,
6771  'MinimumPasswordLengthToLogin' => 1,
6772  ],
6773  'interface-admin' => [
6774  'MinimalPasswordLength' => 10,
6775  'MinimumPasswordLengthToLogin' => 1,
6776  ],
6777  'bot' => [
6778  'MinimalPasswordLength' => 10,
6779  'MinimumPasswordLengthToLogin' => 1,
6780  ],
6781  'default' => [
6782  'MinimalPasswordLength' => [ 'value' => 1, 'suggestChangeOnLogin' => true ],
6783  'PasswordCannotBeSubstringInUsername' => [
6784  'value' => true,
6785  'suggestChangeOnLogin' => true
6786  ],
6787  'PasswordCannotMatchDefaults' => [ 'value' => true, 'suggestChangeOnLogin' => true ],
6788  'MaximalPasswordLength' => [ 'value' => 4096, 'suggestChangeOnLogin' => true ],
6789  'PasswordNotInCommonList' => [ 'value' => true, 'suggestChangeOnLogin' => true ],
6790  ],
6791  ],
6792  'checks' => [
6793  'MinimalPasswordLength' => 'PasswordPolicyChecks::checkMinimalPasswordLength',
6794  'MinimumPasswordLengthToLogin' => 'PasswordPolicyChecks::checkMinimumPasswordLengthToLogin',
6795  'PasswordCannotBeSubstringInUsername' =>
6796  'PasswordPolicyChecks::checkPasswordCannotBeSubstringInUsername',
6797  'PasswordCannotMatchDefaults' => 'PasswordPolicyChecks::checkPasswordCannotMatchDefaults',
6798  'MaximalPasswordLength' => 'PasswordPolicyChecks::checkMaximalPasswordLength',
6799  'PasswordNotInCommonList' => 'PasswordPolicyChecks::checkPasswordNotInCommonList',
6800  ],
6801  ],
6802  'type' => 'map',
6803  'mergeStrategy' => 'array_replace_recursive',
6804  ];
6805 
6825  public const AuthManagerConfig = [
6826  'default' => null,
6827  'type' => '?map',
6828  ];
6829 
6834  public const AuthManagerAutoConfig = [
6835  'default' => [
6836  'preauth' => [
6837  \MediaWiki\Auth\ThrottlePreAuthenticationProvider::class => [
6838  'class' => \MediaWiki\Auth\ThrottlePreAuthenticationProvider::class,
6839  'sort' => 0,
6840  ],
6841  ],
6842  'primaryauth' => [
6843  // TemporaryPasswordPrimaryAuthenticationProvider should come before
6844  // any other PasswordAuthenticationRequest-based
6845  // PrimaryAuthenticationProvider (or at least any that might return
6846  // FAIL rather than ABSTAIN for a wrong password), or password reset
6847  // won't work right. Do not remove this (or change the key) or
6848  // auto-configuration of other such providers in extensions will
6849  // probably auto-insert themselves in the wrong place.
6850  \MediaWiki\Auth\TemporaryPasswordPrimaryAuthenticationProvider::class => [
6851  'class' => \MediaWiki\Auth\TemporaryPasswordPrimaryAuthenticationProvider::class,
6852  'services' => [
6853  'DBLoadBalancer',
6854  'UserOptionsLookup',
6855  ],
6856  'args' => [ [
6857  // Fall through to LocalPasswordPrimaryAuthenticationProvider
6858  'authoritative' => false,
6859  ] ],
6860  'sort' => 0,
6861  ],
6862  \MediaWiki\Auth\LocalPasswordPrimaryAuthenticationProvider::class => [
6863  'class' => \MediaWiki\Auth\LocalPasswordPrimaryAuthenticationProvider::class,
6864  'services' => [
6865  'DBLoadBalancer',
6866  ],
6867  'args' => [ [
6868  // Last one should be authoritative, or else the user will get
6869  // a less-than-helpful error message (something like "supplied
6870  // authentication info not supported" rather than "wrong
6871  // password") if it too fails.
6872  'authoritative' => true,
6873  ] ],
6874  'sort' => 100,
6875  ],
6876  ],
6877  'secondaryauth' => [
6878  \MediaWiki\Auth\CheckBlocksSecondaryAuthenticationProvider::class => [
6879  'class' => \MediaWiki\Auth\CheckBlocksSecondaryAuthenticationProvider::class,
6880  'sort' => 0,
6881  ],
6882  \MediaWiki\Auth\ResetPasswordSecondaryAuthenticationProvider::class => [
6883  'class' => \MediaWiki\Auth\ResetPasswordSecondaryAuthenticationProvider::class,
6884  'sort' => 100,
6885  ],
6886  // Linking during login is experimental, enable at your own risk - T134952
6887  // MediaWiki\Auth\ConfirmLinkSecondaryAuthenticationProvider::class => [
6888  // 'class' => MediaWiki\Auth\ConfirmLinkSecondaryAuthenticationProvider::class,
6889  // 'sort' => 100,
6890  // ],
6891  \MediaWiki\Auth\EmailNotificationSecondaryAuthenticationProvider::class => [
6892  'class' => \MediaWiki\Auth\EmailNotificationSecondaryAuthenticationProvider::class,
6893  'services' => [
6894  'DBLoadBalancer',
6895  ],
6896  'sort' => 200,
6897  ],
6898  ],
6899  ],
6900  'type' => 'map',
6901  'mergeStrategy' => 'array_plus_2d',
6902  ];
6903 
6914  public const RememberMe = [
6915  'default' => 'choose',
6916  'type' => 'string',
6917  ];
6918 
6956  public const ReauthenticateTime = [
6957  'default' => [ 'default' => 300, ],
6958  'type' => 'map',
6959  'additionalProperties' => [ 'type' => 'integer', ],
6960  ];
6961 
6976  public const AllowSecuritySensitiveOperationIfCannotReauthenticate = [
6977  'default' => [ 'default' => true, ],
6978  'type' => 'map',
6979  'additionalProperties' => [ 'type' => 'boolean', ],
6980  ];
6981 
6992  public const ChangeCredentialsBlacklist = [
6993  'default' => [
6994  \MediaWiki\Auth\TemporaryPasswordAuthenticationRequest::class,
6995  ],
6996  'type' => 'list',
6997  'items' => [ 'type' => 'string', ],
6998  ];
6999 
7010  public const RemoveCredentialsBlacklist = [
7011  'default' => [
7012  \MediaWiki\Auth\PasswordAuthenticationRequest::class,
7013  ],
7014  'type' => 'list',
7015  'items' => [ 'type' => 'string', ],
7016  ];
7017 
7024  public const MinimalPasswordLength = [
7025  'default' => false,
7026  'deprecated' => 'since 1.26, use $wgPasswordPolicy\'s MinimalPasswordLength.',
7027  ];
7028 
7040  public const MaximalPasswordLength = [
7041  'default' => false,
7042  'deprecated' => 'since 1.26, use $wgPasswordPolicy\'s MaximalPasswordLength.',
7043  ];
7044 
7051  public const InvalidPasswordReset = [
7052  'default' => true,
7053  ];
7054 
7063  public const PasswordDefault = [
7064  'default' => 'pbkdf2',
7065  ];
7066 
7087  public const PasswordConfig = [
7088  'default' => [
7089  'A' => [
7090  'class' => MWOldPassword::class,
7091  ],
7092  'B' => [
7093  'class' => MWSaltedPassword::class,
7094  ],
7095  'pbkdf2-legacyA' => [
7096  'class' => LayeredParameterizedPassword::class,
7097  'types' => [
7098  'A',
7099  'pbkdf2',
7100  ],
7101  ],
7102  'pbkdf2-legacyB' => [
7103  'class' => LayeredParameterizedPassword::class,
7104  'types' => [
7105  'B',
7106  'pbkdf2',
7107  ],
7108  ],
7109  'bcrypt' => [
7110  'class' => BcryptPassword::class,
7111  'cost' => 9,
7112  ],
7113  'pbkdf2' => [
7114  'class' => Pbkdf2Password::class,
7115  'algo' => 'sha512',
7116  'cost' => '30000',
7117  'length' => '64',
7118  ],
7119  'argon2' => [
7120  'class' => Argon2Password::class,
7121 
7122  // Algorithm used:
7123  // * 'argon2i' is optimized against side-channel attacks (PHP 7.2+)
7124  // * 'argon2id' is optimized against both side-channel and GPU cracking (PHP 7.3+)
7125  // * 'auto' to use best available algorithm. If you're using more than one server, be
7126  // careful when you're mixing PHP versions because newer PHP might generate hashes that
7127  // older versions might would not understand.
7128  'algo' => 'auto',
7129 
7130  // The parameters below are the same as options accepted by password_hash().
7131  // Set them to override that function's defaults.
7132  //
7133  // 'memory_cost' => PASSWORD_ARGON2_DEFAULT_MEMORY_COST,
7134  // 'time_cost' => PASSWORD_ARGON2_DEFAULT_TIME_COST,
7135  // 'threads' => PASSWORD_ARGON2_DEFAULT_THREADS,
7136  ],
7137  ],
7138  'type' => 'map',
7139  ];
7140 
7147  public const PasswordResetRoutes = [
7148  'default' => [
7149  'username' => true,
7150  'email' => true,
7151  ],
7152  'type' => 'map',
7153  ];
7154 
7158  public const MaxSigChars = [
7159  'default' => 255,
7160  ];
7161 
7174  public const SignatureValidation = [
7175  'default' => 'warning',
7176  ];
7177 
7184  public const SignatureAllowedLintErrors = [
7185  'default' => [ 'obsolete-tag', ],
7186  'type' => 'list',
7187  ];
7188 
7193  public const MaxNameChars = [
7194  'default' => 255,
7195  ];
7196 
7203  public const ReservedUsernames = [
7204  'default' => [
7205  'MediaWiki default', // Default 'Main Page' and MediaWiki: message pages
7206  'Conversion script', // Used for the old Wikipedia software upgrade
7207  'Maintenance script', // Maintenance scripts which perform editing, image import script
7208  'Template namespace initialisation script', // Used in 1.2->1.3 upgrade
7209  'ScriptImporter', // Default user name used by maintenance/importSiteScripts.php
7210  'Unknown user', // Used in WikiImporter & RevisionStore for revisions with no author and in User for invalid user id
7211  'msg:double-redirect-fixer', // Automatic double redirect fix
7212  'msg:usermessage-editor', // Default user for leaving user messages
7213  'msg:proxyblocker', // For $wgProxyList and Special:Blockme (removed in 1.22)
7214  'msg:sorbs', // For $wgEnableDnsBlacklist etc.
7215  'msg:spambot_username', // Used by cleanupSpam.php
7216  'msg:autochange-username', // Used by anon category RC entries (parser functions, Lua & purges)
7217  ],
7218  'type' => 'list',
7219  ];
7220 
7228  public const DefaultUserOptions = [
7229  'default' =>
7230  [
7231  'ccmeonemails' => 0,
7232  'date' => 'default',
7233  'diffonly' => 0,
7234  'disablemail' => 0,
7235  'editfont' => 'monospace',
7236  'editondblclick' => 0,
7237  'editsectiononrightclick' => 0,
7238  'email-allow-new-users' => 1,
7239  'enotifminoredits' => 0,
7240  'enotifrevealaddr' => 0,
7241  'enotifusertalkpages' => 1,
7242  'enotifwatchlistpages' => 1,
7243  'extendwatchlist' => 1,
7244  'fancysig' => 0,
7245  'forceeditsummary' => 0,
7246  'gender' => 'unknown',
7247  'hideminor' => 0,
7248  'hidepatrolled' => 0,
7249  'hidecategorization' => 1,
7250  'imagesize' => 2,
7251  'minordefault' => 0,
7252  'newpageshidepatrolled' => 0,
7253  'nickname' => '',
7254  'pst-cssjs' => 1,
7255  'norollbackdiff' => 0,
7256  'previewonfirst' => 0,
7257  'previewontop' => 1,
7258  'rcdays' => 7,
7259  'rcenhancedfilters-disable' => 0,
7260  'rclimit' => 50,
7261  'search-match-redirect' => true,
7262  'search-special-page' => 'Search',
7263  'searchlimit' => 20,
7264  'showhiddencats' => 0,
7265  'shownumberswatching' => 1,
7266  'showrollbackconfirmation' => 0,
7267  'skin' => false,
7268  'thumbsize' => 5,
7269  'underline' => 2,
7270  'uselivepreview' => 0,
7271  'usenewrc' => 1,
7272  'watchcreations' => 1,
7273  'watchdefault' => 1,
7274  'watchdeletion' => 0,
7275  'watchuploads' => 1,
7276  'watchlistdays' => 7,
7277  'watchlisthideanons' => 0,
7278  'watchlisthidebots' => 0,
7279  'watchlisthideliu' => 0,
7280  'watchlisthideminor' => 0,
7281  'watchlisthideown' => 0,
7282  'watchlisthidepatrolled' => 0,
7283  'watchlisthidecategorization' => 1,
7284  'watchlistreloadautomatically' => 0,
7285  'watchlistunwatchlinks' => 0,
7286  'watchmoves' => 0,
7287  'watchrollback' => 0,
7288  'wlenhancedfilters-disable' => 0,
7289  'wllimit' => 250,
7290  'useeditwarning' => 1,
7291  'prefershttps' => 1,
7292  'requireemail' => 0,
7293  'skin-responsive' => 1,
7294  ],
7295  'type' => 'map',
7296  ];
7297 
7301  public const HiddenPrefs = [
7302  'default' => [],
7303  'type' => 'list',
7304  ];
7305 
7312  public const InvalidUsernameCharacters = [
7313  'default' => '@:>',
7314  ];
7315 
7325  public const UserrightsInterwikiDelimiter = [
7326  'default' => '@',
7327  ];
7328 
7337  public const SecureLogin = [
7338  'default' => false,
7339  ];
7340 
7350  public const AuthenticationTokenVersion = [
7351  'default' => null,
7352  'type' => '?string',
7353  ];
7354 
7364  public const SessionProviders = [
7365  'type' => 'map',
7366  'default' => [
7367  \MediaWiki\Session\CookieSessionProvider::class => [
7368  'class' => \MediaWiki\Session\CookieSessionProvider::class,
7369  'args' => [ [
7370  'priority' => 30,
7371  'callUserSetCookiesHook' => true,
7372  ] ],
7373  ],
7374  \MediaWiki\Session\BotPasswordSessionProvider::class => [
7375  'class' => \MediaWiki\Session\BotPasswordSessionProvider::class,
7376  'args' => [ [
7377  'priority' => 75,
7378  ] ],
7379  'services' => [
7380  'GrantsInfo'
7381  ],
7382  ],
7383  ],
7384  ];
7385 
7393  public const AllowRequiringEmailForResets = [
7394  'default' => false,
7395  ];
7396 
7444  public const AutoCreateTempUser = [
7445  'properties' => [
7446  'enabled' => [ 'type' => 'bool', 'default' => false ],
7447  'actions' => [ 'type' => 'list', 'default' => [ 'edit' ] ],
7448  'genPattern' => [ 'type' => 'string', 'default' => '*Unregistered $1' ],
7449  'matchPattern' => [ 'type' => 'string', 'default' => '*$1' ],
7450  'serialProvider' => [ 'type' => 'object', 'default' => [ 'type' => 'local' ] ],
7451  'serialMapping' => [ 'type' => 'object', 'default' => [ 'type' => 'plain-numeric' ] ]
7452  ],
7453  'type' => 'object',
7454  ];
7455 
7456  // endregion -- end user accounts
7457 
7458  /***************************************************************************/
7459  // region User rights, access control and monitoring
7465  public const AutoblockExpiry = [
7466  'default' => 86400,
7467  ];
7468 
7476  public const BlockAllowsUTEdit = [
7477  'default' => true,
7478  ];
7479 
7494  public const BlockCIDRLimit = [
7495  'default' => [
7496  'IPv4' => 16,
7497  'IPv6' => 19,
7498  ],
7499  'type' => 'map',
7500  ];
7501 
7509  public const BlockDisablesLogin = [
7510  'default' => false,
7511  ];
7512 
7518  public const EnablePartialActionBlocks = [
7519  'default' => false,
7520  'type' => 'boolean',
7521  ];
7522 
7542  public const WhitelistRead = [
7543  'default' => false,
7544  ];
7545 
7573  public const WhitelistReadRegexp = [
7574  'default' => false,
7575  ];
7576 
7581  public const EmailConfirmToEdit = [
7582  'default' => false,
7583  ];
7584 
7589  public const HideIdentifiableRedirects = [
7590  'default' => true,
7591  ];
7592 
7617  public const GroupPermissions = [
7618  'type' => 'map',
7619  'additionalProperties' => [
7620  'type' => 'map',
7621  'additionalProperties' => [ 'type' => 'boolean', ],
7622  ],
7623  'mergeStrategy' => 'array_plus_2d',
7624  'default' => [
7625  '*' => [
7626  'createaccount' => true,
7627  'read' => true,
7628  'edit' => true,
7629  'createpage' => true,
7630  'createtalk' => true,
7631  'writeapi' => true,
7632  'viewmywatchlist' => true,
7633  'editmywatchlist' => true,
7634  'viewmyprivateinfo' => true,
7635  'editmyprivateinfo' => true,
7636  'editmyoptions' => true,
7637  ],
7638  'user' => [
7639  'move' => true,
7640  'move-subpages' => true,
7641  'move-rootuserpages' => true,
7642  'move-categorypages' => true,
7643  'movefile' => true,
7644  'read' => true,
7645  'edit' => true,
7646  'createpage' => true,
7647  'createtalk' => true,
7648  'writeapi' => true,
7649  'upload' => true,
7650  'reupload' => true,
7651  'reupload-shared' => true,
7652  'minoredit' => true,
7653  'editmyusercss' => true,
7654  'editmyuserjson' => true,
7655  'editmyuserjs' => true,
7656  'editmyuserjsredirect' => true,
7657  'purge' => true,
7658  'sendemail' => true,
7659  'applychangetags' => true,
7660  'changetags' => true,
7661  'editcontentmodel' => true,
7662  ],
7663  'autoconfirmed' => [
7664  'autoconfirmed' => true,
7665  'editsemiprotected' => true,
7666  ],
7667  'bot' => [
7668  'bot' => true,
7669  'autoconfirmed' => true,
7670  'editsemiprotected' => true,
7671  'nominornewtalk' => true,
7672  'autopatrol' => true,
7673  'suppressredirect' => true,
7674  'apihighlimits' => true,
7675  'writeapi' => true,
7676  ],
7677  'sysop' => [
7678  'block' => true,
7679  'createaccount' => true,
7680  'delete' => true,
7681  'bigdelete' => true,
7682  'deletedhistory' => true,
7683  'deletedtext' => true,
7684  'undelete' => true,
7685  'editinterface' => true,
7686  'editsitejson' => true,
7687  'edituserjson' => true,
7688  'import' => true,
7689  'importupload' => true,
7690  'move' => true,
7691  'move-subpages' => true,
7692  'move-rootuserpages' => true,
7693  'move-categorypages' => true,
7694  'patrol' => true,
7695  'autopatrol' => true,
7696  'protect' => true,
7697  'editprotected' => true,
7698  'rollback' => true,
7699  'upload' => true,
7700  'reupload' => true,
7701  'reupload-shared' => true,
7702  'unwatchedpages' => true,
7703  'autoconfirmed' => true,
7704  'editsemiprotected' => true,
7705  'ipblock-exempt' => true,
7706  'blockemail' => true,
7707  'markbotedits' => true,
7708  'apihighlimits' => true,
7709  'browsearchive' => true,
7710  'noratelimit' => true,
7711  'movefile' => true,
7712  'unblockself' => true,
7713  'suppressredirect' => true,
7714  'mergehistory' => true,
7715  'managechangetags' => true,
7716  'deletechangetags' => true,
7717  ],
7718  'interface-admin' => [
7719  'editinterface' => true,
7720  'editsitecss' => true,
7721  'editsitejson' => true,
7722  'editsitejs' => true,
7723  'editusercss' => true,
7724  'edituserjson' => true,
7725  'edituserjs' => true,
7726  ],
7727  'bureaucrat' => [
7728  'userrights' => true,
7729  'noratelimit' => true,
7730  ],
7731  'suppress' => [
7732  'hideuser' => true,
7733  'suppressrevision' => true,
7734  'viewsuppressed' => true,
7735  'suppressionlog' => true,
7736  'deleterevision' => true,
7737  'deletelogentry' => true,
7738  ],
7739  ],
7740  ];
7741 
7751  public const RevokePermissions = [
7752  'default' => [],
7753  'type' => 'map',
7754  'mergeStrategy' => 'array_plus_2d',
7755  ];
7756 
7776  public const GroupInheritsPermissions = [
7777  'default' => [],
7778  'type' => 'map',
7779  'additionalProperties' => [ 'type' => 'string', ],
7780  ];
7781 
7785  public const ImplicitGroups = [
7786  'default' => [ '*', 'user', 'autoconfirmed' ],
7787  'type' => 'list',
7788  ];
7789 
7814  public const GroupsAddToSelf = [
7815  'default' => [],
7816  'type' => 'map',
7817  ];
7818 
7822  public const GroupsRemoveFromSelf = [
7823  'default' => [],
7824  'type' => 'map',
7825  ];
7826 
7835  public const RestrictionTypes = [
7836  'default' => [ 'create', 'edit', 'move', 'upload' ],
7837  'type' => 'list',
7838  ];
7839 
7851  public const RestrictionLevels = [
7852  'default' => [ '', 'autoconfirmed', 'sysop' ],
7853  'type' => 'list',
7854  ];
7855 
7865  public const CascadingRestrictionLevels = [
7866  'default' => [ 'sysop', ],
7867  'type' => 'list',
7868  ];
7869 
7882  public const SemiprotectedRestrictionLevels = [
7883  'default' => [ 'autoconfirmed', ],
7884  'type' => 'list',
7885  ];
7886 
7894  public const NamespaceProtection = [
7895  'default' => [],
7896  'type' => 'map',
7897  ];
7898 
7908  public const NonincludableNamespaces = [
7909  'default' => [],
7910  'type' => 'map',
7911  ];
7912 
7936  public const AutoConfirmAge = [
7937  'default' => 0,
7938  ];
7939 
7951  public const AutoConfirmCount = [
7952  'default' => 0,
7953  ];
7954 
8012  public const Autopromote = [
8013  'default' => [
8014  'autoconfirmed' => [ '&',
8015  [ APCOND_EDITCOUNT, null ], // NOTE: null means $wgAutoConfirmCount
8016  [ APCOND_AGE, null ], // NOTE: null means AutoConfirmAge
8017  ],
8018  ],
8019  'type' => 'map',
8020  ];
8021 
8042  public const AutopromoteOnce = [
8043  'default' => [ 'onEdit' => [], ],
8044  'type' => 'map',
8045  ];
8046 
8052  public const AutopromoteOnceLogInRC = [
8053  'default' => true,
8054  ];
8055 
8085  public const AddGroups = [
8086  'default' => [],
8087  'type' => 'map',
8088  ];
8089 
8093  public const RemoveGroups = [
8094  'default' => [],
8095  'type' => 'map',
8096  ];
8097 
8103  public const AvailableRights = [
8104  'default' => [],
8105  'type' => 'list',
8106  ];
8107 
8112  public const DeleteRevisionsLimit = [
8113  'default' => 0,
8114  ];
8115 
8121  public const DeleteRevisionsBatchSize = [
8122  'default' => 1000,
8123  ];
8124 
8134  public const HideUserContribLimit = [
8135  'default' => 1000,
8136  ];
8137 
8163  public const AccountCreationThrottle = [
8164  'default' => [ [
8165  'count' => 0,
8166  'seconds' => 86400,
8167  ] ],
8168  'type' => 'int|list',
8169  ];
8170 
8181  public const SpamRegex = [
8182  'default' => [],
8183  'type' => 'list',
8184  ];
8185 
8189  public const SummarySpamRegex = [
8190  'default' => [],
8191  'type' => 'list',
8192  ];
8193 
8200  public const EnableDnsBlacklist = [
8201  'default' => false,
8202  ];
8203 
8228  public const DnsBlacklistUrls = [
8229  'default' => [ 'http.dnsbl.sorbs.net.', ],
8230  'type' => 'list',
8231  ];
8232 
8241  public const ProxyList = [
8242  'default' => [],
8243  'type' => 'string|list',
8244  ];
8245 
8250  public const ProxyWhitelist = [
8251  'default' => [],
8252  'type' => 'list',
8253  ];
8254 
8262  public const SoftBlockRanges = [
8263  'default' => [],
8264  'type' => 'list',
8265  'items' => [ 'type' => 'string', ],
8266  ];
8267 
8273  public const ApplyIpBlocksToXff = [
8274  'default' => false,
8275  ];
8276 
8318  public const RateLimits = [
8319  'default' => [
8320  // Page edits
8321  'edit' => [
8322  'ip' => [ 8, 60 ],
8323  'newbie' => [ 8, 60 ],
8324  'user' => [ 90, 60 ],
8325  ],
8326  // Page moves
8327  'move' => [
8328  'newbie' => [ 2, 120 ],
8329  'user' => [ 8, 60 ],
8330  ],
8331  // File uploads
8332  'upload' => [
8333  'ip' => [ 8, 60 ],
8334  'newbie' => [ 8, 60 ],
8335  ],
8336  // Page rollbacks
8337  'rollback' => [
8338  'user' => [ 10, 60 ],
8339  'newbie' => [ 5, 120 ]
8340  ],
8341  // Triggering password resets emails
8342  'mailpassword' => [
8343  'ip' => [ 5, 3600 ],
8344  ],
8345  // Emailing other users using MediaWiki
8346  'emailuser' => [
8347  'ip' => [ 5, 86400 ],
8348  'newbie' => [ 5, 86400 ],
8349  'user' => [ 20, 86400 ],
8350  ],
8351  'changeemail' => [
8352  'ip-all' => [ 10, 3600 ],
8353  'user' => [ 4, 86400 ]
8354  ],
8355  // since 1.33 - rate limit email confirmations
8356  'confirmemail' => [
8357  'ip-all' => [ 10, 3600 ],
8358  'user' => [ 4, 86400 ]
8359  ],
8360  // Purging pages
8361  'purge' => [
8362  'ip' => [ 30, 60 ],
8363  'user' => [ 30, 60 ],
8364  ],
8365  // Purges of link tables
8366  'linkpurge' => [
8367  'ip' => [ 30, 60 ],
8368  'user' => [ 30, 60 ],
8369  ],
8370  // Files rendered via thumb.php or thumb_handler.php
8371  'renderfile' => [
8372  'ip' => [ 700, 30 ],
8373  'user' => [ 700, 30 ],
8374  ],
8375  // Same as above but for non-standard thumbnails
8376  'renderfile-nonstandard' => [
8377  'ip' => [ 70, 30 ],
8378  'user' => [ 70, 30 ],
8379  ],
8380  // Stashing edits into cache before save
8381  'stashedit' => [
8382  'ip' => [ 30, 60 ],
8383  'newbie' => [ 30, 60 ],
8384  ],
8385  // Stash base HTML for VE edits
8386  'stashbasehtml' => [
8387  'ip' => [ 5, 60 ],
8388  'newbie' => [ 5, 60 ],
8389  ],
8390  // Adding or removing change tags
8391  'changetag' => [
8392  'ip' => [ 8, 60 ],
8393  'newbie' => [ 8, 60 ],
8394  ],
8395  // Changing the content model of a page
8396  'editcontentmodel' => [
8397  'newbie' => [ 2, 120 ],
8398  'user' => [ 8, 60 ],
8399  ],
8400  ],
8401  'type' => 'map',
8402  'mergeStrategy' => 'array_plus_2d',
8403  ];
8404 
8410  public const RateLimitsExcludedIPs = [
8411  'default' => [],
8412  'type' => 'list',
8413  ];
8414 
8420  public const PutIPinRC = [
8421  'default' => true,
8422  ];
8423 
8428  public const QueryPageDefaultLimit = [
8429  'default' => 50,
8430  ];
8431 
8444  public const PasswordAttemptThrottle = [
8445  'default' => [
8446  // Short term limit
8447  [ 'count' => 5, 'seconds' => 300 ],
8448  // Long term limit. We need to balance the risk
8449  // of somebody using this as a DoS attack to lock someone
8450  // out of their account, and someone doing a brute force attack.
8451  [ 'count' => 150, 'seconds' => 60 * 60 * 48 ],
8452  ],
8453  'type' => 'list',
8454  ];
8455 
8466  public const GrantPermissions = [
8467  'default' => [
8468  'basic' => [
8469  'autocreateaccount' => true,
8470  'autoconfirmed' => true,
8471  'autopatrol' => true,
8472  'editsemiprotected' => true,
8473  'ipblock-exempt' => true,
8474  'nominornewtalk' => true,
8475  'patrolmarks' => true,
8476  'purge' => true,
8477  'read' => true,
8478  'writeapi' => true,
8479  'unwatchedpages' => true,
8480  ],
8481  'highvolume' => [
8482  'bot' => true,
8483  'apihighlimits' => true,
8484  'noratelimit' => true,
8485  'markbotedits' => true,
8486  ],
8487  'import' => [
8488  'import' => true,
8489  'importupload' => true,
8490  ],
8491  'editpage' => [
8492  'edit' => true,
8493  'minoredit' => true,
8494  'applychangetags' => true,
8495  'changetags' => true,
8496  'editcontentmodel' => true,
8497  ],
8498  'editprotected' => [
8499  'edit' => true,
8500  'minoredit' => true,
8501  'applychangetags' => true,
8502  'changetags' => true,
8503  'editcontentmodel' => true,
8504  'editprotected' => true,
8505  ],
8506  'editmycssjs' => [
8507  'edit' => true,
8508  'minoredit' => true,
8509  'applychangetags' => true,
8510  'changetags' => true,
8511  'editcontentmodel' => true,
8512  'editmyusercss' => true,
8513  'editmyuserjson' => true,
8514  'editmyuserjs' => true,
8515  ],
8516  'editmyoptions' => [
8517  'editmyoptions' => true,
8518  'editmyuserjson' => true,
8519  ],
8520  'editinterface' => [
8521  'edit' => true,
8522  'minoredit' => true,
8523  'applychangetags' => true,
8524  'changetags' => true,
8525  'editcontentmodel' => true,
8526  'editinterface' => true,
8527  'edituserjson' => true,
8528  'editsitejson' => true,
8529  ],
8530  'editsiteconfig' => [
8531  'edit' => true,
8532  'minoredit' => true,
8533  'applychangetags' => true,
8534  'changetags' => true,
8535  'editcontentmodel' => true,
8536  'editinterface' => true,
8537  'edituserjson' => true,
8538  'editsitejson' => true,
8539  'editusercss' => true,
8540  'edituserjs' => true,
8541  'editsitecss' => true,
8542  'editsitejs' => true,
8543  ],
8544  'createeditmovepage' => [
8545  'edit' => true,
8546  'minoredit' => true,
8547  'applychangetags' => true,
8548  'changetags' => true,
8549  'editcontentmodel' => true,
8550  'createpage' => true,
8551  'createtalk' => true,
8552  'delete-redirect' => true,
8553  'move' => true,
8554  'move-rootuserpages' => true,
8555  'move-subpages' => true,
8556  'move-categorypages' => true,
8557  'suppressredirect' => true,
8558  ],
8559  'uploadfile' => [
8560  'upload' => true,
8561  'reupload-own' => true,
8562  ],
8563  'uploadeditmovefile' => [
8564  'upload' => true,
8565  'reupload-own' => true,
8566  'reupload' => true,
8567  'reupload-shared' => true,
8568  'upload_by_url' => true,
8569  'movefile' => true,
8570  'suppressredirect' => true,
8571  ],
8572  'patrol' => [
8573  'patrol' => true,
8574  ],
8575  'rollback' => [
8576  'rollback' => true,
8577  ],
8578  'blockusers' => [
8579  'block' => true,
8580  'blockemail' => true,
8581  ],
8582  'viewdeleted' => [
8583  'browsearchive' => true,
8584  'deletedhistory' => true,
8585  'deletedtext' => true,
8586  ],
8587  'viewrestrictedlogs' => [
8588  'suppressionlog' => true,
8589  ],
8590  'delete' => [
8591  'edit' => true,
8592  'minoredit' => true,
8593  'applychangetags' => true,
8594  'changetags' => true,
8595  'editcontentmodel' => true,
8596  'browsearchive' => true,
8597  'deletedhistory' => true,
8598  'deletedtext' => true,
8599  'delete' => true,
8600  'bigdelete' => true,
8601  'deletelogentry' => true,
8602  'deleterevision' => true,
8603  'undelete' => true,
8604  ],
8605  'oversight' => [
8606  'suppressrevision' => true,
8607  'viewsuppressed' => true,
8608  ],
8609  'protect' => [
8610  'edit' => true,
8611  'minoredit' => true,
8612  'applychangetags' => true,
8613  'changetags' => true,
8614  'editcontentmodel' => true,
8615  'editprotected' => true,
8616  'protect' => true,
8617  ],
8618  'viewmywatchlist' => [
8619  'viewmywatchlist' => true,
8620  ],
8621  'editmywatchlist' => [
8622  'editmywatchlist' => true,
8623  ],
8624  'sendemail' => [
8625  'sendemail' => true,
8626  ],
8627  'createaccount' => [
8628  'createaccount' => true,
8629  ],
8630  'privateinfo' => [
8631  'viewmyprivateinfo' => true,
8632  ],
8633  'mergehistory' => [
8634  'mergehistory' => true,
8635  ],
8636  ],
8637  'type' => 'map',
8638  'mergeStrategy' => 'array_plus_2d',
8639  'additionalProperties' => [
8640  'type' => 'map',
8641  'additionalProperties' => [ 'type' => 'boolean', ],
8642  ],
8643  ];
8644 
8648  public const GrantPermissionGroups = [
8649  'default' =>
8650  [
8651  // Hidden grants are implicitly present
8652  'basic' => 'hidden',
8653 
8654  'editpage' => 'page-interaction',
8655  'createeditmovepage' => 'page-interaction',
8656  'editprotected' => 'page-interaction',
8657  'patrol' => 'page-interaction',
8658 
8659  'uploadfile' => 'file-interaction',
8660  'uploadeditmovefile' => 'file-interaction',
8661 
8662  'sendemail' => 'email',
8663 
8664  'viewmywatchlist' => 'watchlist-interaction',
8665  'editviewmywatchlist' => 'watchlist-interaction',
8666 
8667  'editmycssjs' => 'customization',
8668  'editmyoptions' => 'customization',
8669 
8670  'editinterface' => 'administration',
8671  'editsiteconfig' => 'administration',
8672  'rollback' => 'administration',
8673  'blockusers' => 'administration',
8674  'delete' => 'administration',
8675  'viewdeleted' => 'administration',
8676  'viewrestrictedlogs' => 'administration',
8677  'protect' => 'administration',
8678  'oversight' => 'administration',
8679  'createaccount' => 'administration',
8680  'mergehistory' => 'administration',
8681  'import' => 'administration',
8682 
8683  'highvolume' => 'high-volume',
8684 
8685  'privateinfo' => 'private-information',
8686  ],
8687  'type' => 'map',
8688  'additionalProperties' => [ 'type' => 'string', ],
8689  ];
8690 
8694  public const EnableBotPasswords = [
8695  'default' => true,
8696  'type' => 'boolean',
8697  ];
8698 
8704  public const BotPasswordsCluster = [
8705  'default' => false,
8706  'type' => 'string|false',
8707  ];
8708 
8717  public const BotPasswordsDatabase = [
8718  'default' => false,
8719  'type' => 'string|false',
8720  ];
8721 
8722  // endregion -- end of user rights settings
8723 
8724  /***************************************************************************/
8725  // region Security
8731  public const SecretKey = [
8732  'default' => false,
8733  ];
8734 
8740  public const AllowUserJs = [
8741  'default' => false,
8742  ];
8743 
8749  public const AllowUserCss = [
8750  'default' => false,
8751  ];
8752 
8759  public const AllowUserCssPrefs = [
8760  'default' => true,
8761  ];
8762 
8766  public const UseSiteJs = [
8767  'default' => true,
8768  ];
8769 
8773  public const UseSiteCss = [
8774  'default' => true,
8775  ];
8776 
8781  public const BreakFrames = [
8782  'default' => false,
8783  ];
8784 
8804  public const EditPageFrameOptions = [
8805  'default' => 'DENY',
8806  ];
8807 
8819  public const ApiFrameOptions = [
8820  'default' => 'DENY',
8821  ];
8822 
8830  public const CSPHeader = [
8831  'default' => false,
8832  'type' => 'false|object',
8833  ];
8834 
8840  public const CSPReportOnlyHeader = [
8841  'default' => false,
8842  'type' => 'false|object',
8843  ];
8844 
8854  public const CSPFalsePositiveUrls = [
8855  'default' => [
8856  'https://3hub.co' => true,
8857  'https://morepro.info' => true,
8858  'https://p.ato.mx' => true,
8859  'https://s.ato.mx' => true,
8860  'https://adserver.adtech.de' => true,
8861  'https://ums.adtechus.com' => true,
8862  'https://cas.criteo.com' => true,
8863  'https://cat.nl.eu.criteo.com' => true,
8864  'https://atpixel.alephd.com' => true,
8865  'https://rtb.metrigo.com' => true,
8866  'https://d5p.de17a.com' => true,
8867  'https://ad.lkqd.net/vpaid/vpaid.js' => true,
8868  'https://ad.lkqd.net/vpaid/vpaid.js?fusion=1.0' => true,
8869  'https://t.lkqd.net/t' => true,
8870  'chrome-extension' => true,
8871  ],
8872  'type' => 'map',
8873  ];
8874 
8882  public const AllowCrossOrigin = [
8883  'default' => false,
8884  'type' => 'boolean',
8885  ];
8886 
8900  public const RestAllowCrossOriginCookieAuth = [
8901  'default' => false,
8902  'type' => 'boolean',
8903  ];
8904 
8913  public const SessionSecret = [
8914  'default' => false,
8915  ];
8916 
8925  public const SessionInsecureSecrets = [
8926  'default' => false,
8927  ];
8928 
8939  public const HKDFSecret = [
8940  'default' => false,
8941  ];
8942 
8951  public const HKDFAlgorithm = [
8952  'default' => 'sha256',
8953  ];
8954 
8955  // endregion -- end of security
8956 
8957  /***************************************************************************/
8958  // region Cookie settings
8964  public const CookieExpiration = [
8965  'default' => 30 * 86400,
8966  ];
8967 
8974  public const ExtendedLoginCookieExpiration = [
8975  'default' => 180 * 86400,
8976  ];
8977 
8982  public const CookieDomain = [
8983  'default' => '',
8984  ];
8985 
8990  public const CookiePath = [
8991  'default' => '/',
8992  ];
8993 
9004  public const CookieSecure = [
9005  'default' => 'detect',
9006  'dynamicDefault' => [ 'use' => [ 'ForceHTTPS' ] ]
9007  ];
9008 
9009  public static function getDefaultCookieSecure( $forceHTTPS ): bool {
9010  return $forceHTTPS || ( WebRequest::detectProtocol() === 'https' );
9011  }
9012 
9019  public const DisableCookieCheck = [
9020  'default' => false,
9021  ];
9022 
9028  public const CookiePrefix = [
9029  'default' => false,
9030  'dynamicDefault' => [
9031  'use' => [ 'SharedDB', 'SharedPrefix', 'SharedTables', 'DBname', 'DBprefix' ]
9032  ],
9033  ];
9034 
9035  public static function getDefaultCookiePrefix(
9036  $sharedDB, $sharedPrefix, $sharedTables, $dbName, $dbPrefix
9037  ): string {
9038  if ( $sharedDB && in_array( 'user', $sharedTables ) ) {
9039  return $sharedDB . ( $sharedPrefix ? "_$sharedPrefix" : '' );
9040  }
9041  return $dbName . ( $dbPrefix ? "_$dbPrefix" : '' );
9042  }
9043 
9049  public const CookieHttpOnly = [
9050  'default' => true,
9051  ];
9052 
9062  public const CookieSameSite = [
9063  'default' => null,
9064  'type' => '?string',
9065  ];
9066 
9074  public const UseSameSiteLegacyCookies = [
9075  'default' => false,
9076  'type' => 'boolean',
9077  ];
9078 
9082  public const CacheVaryCookies = [
9083  'default' => [],
9084  'type' => 'list',
9085  ];
9086 
9090  public const SessionName = [
9091  'default' => false,
9092  ];
9093 
9101  public const CookieSetOnAutoblock = [
9102  'default' => true,
9103  ];
9104 
9112  public const CookieSetOnIpBlock = [
9113  'default' => true,
9114  ];
9115 
9116  // endregion -- end of cookie settings
9117 
9118  /***************************************************************************/
9119  // region Profiling, testing and debugging
9121  // See $wgProfiler for how to enable profiling.
9122 
9134  public const DebugLogFile = [
9135  'default' => '',
9136  ];
9137 
9141  public const DebugLogPrefix = [
9142  'default' => '',
9143  ];
9144 
9150  public const DebugRedirects = [
9151  'default' => false,
9152  ];
9153 
9168  public const DebugRawPage = [
9169  'default' => false,
9170  ];
9171 
9180  public const DebugComments = [
9181  'default' => false,
9182  ];
9183 
9191  public const DebugDumpSql = [
9192  'default' => false,
9193  ];
9194 
9200  public const TrxProfilerLimits = [
9201  'default' => [
9202  // HTTP GET/HEAD requests.
9203  // Primary queries should not happen on GET requests
9204  'GET' => [
9205  'masterConns' => 0,
9206  'writes' => 0,
9207  'readQueryTime' => 5,
9208  'readQueryRows' => 10000
9209  ],
9210  // HTTP POST requests.
9211  // Primary reads and writes will happen for a subset of these.
9212  'POST' => [
9213  'readQueryTime' => 5,
9214  'writeQueryTime' => 1,
9215  'readQueryRows' => 100000,
9216  'maxAffected' => 1000
9217  ],
9218  'POST-nonwrite' => [
9219  'writes' => 0,
9220  'readQueryTime' => 5,
9221  'readQueryRows' => 10000
9222  ],
9223  // Deferred updates that run after HTTP response is sent for GET requests
9224  'PostSend-GET' => [
9225  'readQueryTime' => 5,
9226  'writeQueryTime' => 1,
9227  'readQueryRows' => 10000,
9228  'maxAffected' => 1000,
9229  // Log primary queries under the post-send entry point as they are discouraged
9230  'masterConns' => 0,
9231  'writes' => 0,
9232  ],
9233  // Deferred updates that run after HTTP response is sent for POST requests
9234  'PostSend-POST' => [
9235  'readQueryTime' => 5,
9236  'writeQueryTime' => 1,
9237  'readQueryRows' => 100000,
9238  'maxAffected' => 1000
9239  ],
9240  // Background job runner
9241  'JobRunner' => [
9242  'readQueryTime' => 30,
9243  'writeQueryTime' => 5,
9244  'readQueryRows' => 100000,
9245  'maxAffected' => 500 // ballpark of $wgUpdateRowsPerQuery
9246  ],
9247  // Command-line scripts
9248  'Maintenance' => [
9249  'writeQueryTime' => 5,
9250  'maxAffected' => 1000
9251  ]
9252  ],
9253  'type' => 'map',
9254  ];
9255 
9288  public const DebugLogGroups = [
9289  'default' => [],
9290  'type' => 'map',
9291  ];
9292 
9314  public const MWLoggerDefaultSpi = [
9315  'default' => [ 'class' => 'MediaWiki\\Logger\\LegacySpi', ],
9316  'mergeStrategy' => 'replace',
9317  'type' => 'map',
9318  ];
9319 
9325  public const ShowDebug = [
9326  'default' => false,
9327  ];
9328 
9332  public const SpecialVersionShowHooks = [
9333  'default' => false,
9334  ];
9335 
9343  public const ShowExceptionDetails = [
9344  'default' => false,
9345  ];
9346 
9350  public const LogExceptionBacktrace = [
9351  'default' => true,
9352  ];
9353 
9358  public const PropagateErrors = [
9359  'default' => true,
9360  ];
9361 
9365  public const ShowHostnames = [
9366  'default' => false,
9367  ];
9368 
9376  public const OverrideHostname = [
9377  'default' => false,
9378  ];
9379 
9384  public const DevelopmentWarnings = [
9385  'default' => false,
9386  ];
9387 
9393  public const DeprecationReleaseLimit = [
9394  'default' => false,
9395  ];
9396 
9463  public const Profiler = [
9464  'default' => [],
9465  'type' => 'map',
9466  'mergeStrategy' => 'replace',
9467  ];
9468 
9479  public const StatsdServer = [
9480  'default' => false,
9481  ];
9482 
9490  public const StatsdMetricPrefix = [
9491  'default' => 'MediaWiki',
9492  ];
9493 
9502  public const StatsdSamplingRates = [
9503  'default' => [],
9504  'type' => 'map',
9505  ];
9506 
9515  public const MetricsTarget = [
9516  'default' => null,
9517  'type' => '?string',
9518  ];
9519 
9529  public const MetricsFormat = [
9530  'default' => null,
9531  'type' => '?string',
9532  ];
9533 
9543  public const MetricsPrefix = [
9544  'default' => 'mediawiki',
9545  'type' => 'string',
9546  ];
9547 
9554  public const PageInfoTransclusionLimit = [
9555  'default' => 50,
9556  ];
9557 
9571  public const ParserTestFiles = [
9572  'default' => [],
9573  'type' => 'map',
9574  'deprecated' => 'since 1.30',
9575  ];
9576 
9580  public const EnableJavaScriptTest = [
9581  'default' => false,
9582  ];
9583 
9589  public const CachePrefix = [
9590  'default' => false,
9591  ];
9592 
9601  public const DebugToolbar = [
9602  'default' => false,
9603  ];
9604 
9605  // endregion -- end of profiling, testing and debugging
9606 
9607  /***************************************************************************/
9608  // region Search
9614  public const DisableTextSearch = [
9615  'default' => false,
9616  ];
9617 
9622  public const AdvancedSearchHighlighting = [
9623  'default' => false,
9624  ];
9625 
9630  public const SearchHighlightBoundaries = [
9631  'default' => '[\\p{Z}\\p{P}\\p{C}]',
9632  ];
9633 
9644  public const OpenSearchTemplate = [
9645  'default' => false,
9646  'deprecated' => 'since 1.25 ' .
9647  'Use $wgOpenSearchTemplates[\'application/x-suggestions+json\'] instead',
9648  ];
9649 
9658  public const OpenSearchTemplates = [
9659  'default' => [
9660  'application/x-suggestions+json' => false,
9661  'application/x-suggestions+xml' => false,
9662  ],
9663  'type' => 'map',
9664  ];
9665 
9672  public const EnableOpenSearchSuggest = [
9673  'default' => true,
9674  'deprecated' => 'since 1.35 No longer used',
9675  ];
9676 
9681  public const OpenSearchDefaultLimit = [
9682  'default' => 10,
9683  ];
9684 
9689  public const OpenSearchDescriptionLength = [
9690  'default' => 100,
9691  ];
9692 
9696  public const SearchSuggestCacheExpiry = [
9697  'default' => 1200,
9698  ];
9699 
9704  public const DisableSearchUpdate = [
9705  'default' => false,
9706  ];
9707 
9718  public const NamespacesToBeSearchedDefault = [
9719  'default' => [ NS_MAIN => true, ],
9720  'type' => 'map',
9721  ];
9722 
9727  public const DisableInternalSearch = [
9728  'default' => false,
9729  ];
9730 
9748  public const SearchForwardUrl = [
9749  'default' => null,
9750  ];
9751 
9757  public const SitemapNamespaces = [
9758  'default' => false,
9759  'type' => 'false|list',
9760  ];
9761 
9778  public const SitemapNamespacesPriorities = [
9779  'default' => false,
9780  'type' => 'false|map',
9781  ];
9782 
9788  public const EnableSearchContributorsByIP = [
9789  'default' => true,
9790  ];
9791 
9802  public const SpecialSearchFormOptions = [
9803  'default' => [],
9804  'type' => 'map',
9805  ];
9806 
9815  public const SearchMatchRedirectPreference = [
9816  'default' => false,
9817  'type' => 'boolean',
9818  ];
9819 
9826  public const SearchRunSuggestedQuery = [
9827  'default' => true,
9828  'type' => 'boolean',
9829  ];
9830 
9831  // endregion -- end of search settings
9832 
9833  /***************************************************************************/
9834  // region Edit user interface
9841  public const Diff3 = [
9842  'default' => '/usr/bin/diff3',
9843  ];
9844 
9848  public const Diff = [
9849  'default' => '/usr/bin/diff',
9850  ];
9851 
9857  public const PreviewOnOpenNamespaces = [
9858  'default' => [
9859  NS_CATEGORY => true
9860  ],
9861  'type' => 'map',
9862  ];
9863 
9869  public const UniversalEditButton = [
9870  'default' => true,
9871  ];
9872 
9878  public const UseAutomaticEditSummaries = [
9879  'default' => true,
9880  ];
9881 
9882  // endregion -- end edit UI
9883 
9884  /***************************************************************************/
9885  // region Maintenance
9887  // See also $wgSiteNotice
9888 
9892  public const CommandLineDarkBg = [
9893  'default' => false,
9894  ];
9895 
9904  public const ReadOnly = [
9905  'default' => null,
9906  ];
9907 
9913  public const ReadOnlyWatchedItemStore = [
9914  'default' => false,
9915  'type' => 'boolean',
9916  ];
9917 
9926  public const ReadOnlyFile = [
9927  'default' => false,
9928  'dynamicDefault' => [ 'use' => [ 'UploadDirectory' ] ]
9929  ];
9930 
9935  public static function getDefaultReadOnlyFile( $uploadDirectory ): string {
9936  return "$uploadDirectory/lock_yBgMBwiR";
9937  }
9938 
9948  public const UpgradeKey = [
9949  'default' => false,
9950  ];
9951 
9955  public const GitBin = [
9956  'default' => '/usr/bin/git',
9957  ];
9958 
9972  public const GitRepositoryViewers = [
9973  'default' => [
9974  'https://(?:[a-z0-9_]+@)?gerrit.wikimedia.org/r/(?:p/)?(.*)' => 'https://gerrit.wikimedia.org/g/%R/+/%H',
9975  'ssh://(?:[a-z0-9_]+@)?gerrit.wikimedia.org:29418/(.*)' => 'https://gerrit.wikimedia.org/g/%R/+/%H',
9976  ],
9977  'type' => 'map',
9978  ];
9979 
9980  // endregion -- End of maintenance
9981 
9982  /***************************************************************************/
9983  // region Recent changes, new pages, watchlist and history
9992  public const RCMaxAge = [
9993  'default' => 90 * 24 * 3600,
9994  ];
9995 
10003  public const WatchersMaxAge = [
10004  'default' => 180 * 24 * 3600,
10005  ];
10006 
10015  public const UnwatchedPageSecret = [
10016  'default' => 1,
10017  ];
10018 
10026  public const RCFilterByAge = [
10027  'default' => false,
10028  ];
10029 
10034  public const RCLinkLimits = [
10035  'default' => [ 50, 100, 250, 500 ],
10036  'type' => 'list',
10037  ];
10038 
10045  public const RCLinkDays = [
10046  'default' => [ 1, 3, 7, 14, 30 ],
10047  'type' => 'list',
10048  ];
10049 
10113  public const RCFeeds = [
10114  'default' => [],
10115  'type' => 'map',
10116  ];
10117 
10125  public const RCEngines = [
10126  'default' => [
10127  'redis' => RedisPubSubFeedEngine::class,
10128  'udp' => UDPRCFeedEngine::class,
10129  ],
10130  'type' => 'map',
10131  ];
10132 
10145  public const RCWatchCategoryMembership = [
10146  'default' => false,
10147  ];
10148 
10157  public const UseRCPatrol = [
10158  'default' => true,
10159  ];
10160 
10167  public const StructuredChangeFiltersLiveUpdatePollingRate = [
10168  'default' => 3,
10169  ];
10170 
10178  public const UseNPPatrol = [
10179  'default' => true,
10180  ];
10181 
10190  public const UseFilePatrol = [
10191  'default' => true,
10192  ];
10193 
10197  public const Feed = [
10198  'default' => true,
10199  ];
10200 
10205  public const FeedLimit = [
10206  'default' => 50,
10207  ];
10208 
10218  public const FeedCacheTimeout = [
10219  'default' => 60,
10220  ];
10221 
10226  public const FeedDiffCutoff = [
10227  'default' => 32768,
10228  ];
10229 
10245  public const OverrideSiteFeed = [
10246  'default' => [],
10247  'type' => 'map',
10248  ];
10249 
10256  public const FeedClasses = [
10257  'default' => [
10258  'rss' => 'RSSFeed',
10259  'atom' => 'AtomFeed',
10260  ],
10261  'type' => 'map',
10262  ];
10263 
10268  public const AdvertisedFeedTypes = [
10269  'default' => [ 'atom', ],
10270  'type' => 'list',
10271  ];
10272 
10276  public const RCShowWatchingUsers = [
10277  'default' => false,
10278  ];
10279 
10283  public const RCShowChangedSize = [
10284  'default' => true,
10285  ];
10286 
10292  public const RCChangedSizeThreshold = [
10293  'default' => 500,
10294  ];
10295 
10300  public const ShowUpdatedMarker = [
10301  'default' => true,
10302  ];
10303 
10308  public const DisableAnonTalk = [
10309  'default' => false,
10310  ];
10311 
10316  public const UseTagFilter = [
10317  'default' => true,
10318  ];
10319 
10337  public const SoftwareTags = [
10338  'default' => [
10339  'mw-contentmodelchange' => true,
10340  'mw-new-redirect' => true,
10341  'mw-removed-redirect' => true,
10342  'mw-changed-redirect-target' => true,
10343  'mw-blank' => true,
10344  'mw-replace' => true,
10345  'mw-rollback' => true,
10346  'mw-undo' => true,
10347  'mw-manual-revert' => true,
10348  'mw-reverted' => true,
10349  'mw-server-side-upload' => true,
10350  ],
10351  'type' => 'map',
10352  'additionalProperties' => [ 'type' => 'boolean', ],
10353  ];
10354 
10362  public const UnwatchedPageThreshold = [
10363  'default' => false,
10364  ];
10365 
10391  public const RecentChangesFlags = [
10392  'default' => [
10393  'newpage' => [
10394  'letter' => 'newpageletter',
10395  'title' => 'recentchanges-label-newpage',
10396  'legend' => 'recentchanges-legend-newpage',
10397  'grouping' => 'any',
10398  ],
10399  'minor' => [
10400  'letter' => 'minoreditletter',
10401  'title' => 'recentchanges-label-minor',
10402  'legend' => 'recentchanges-legend-minor',
10403  'class' => 'minoredit',
10404  'grouping' => 'all',
10405  ],
10406  'bot' => [
10407  'letter' => 'boteditletter',
10408  'title' => 'recentchanges-label-bot',
10409  'legend' => 'recentchanges-legend-bot',
10410  'class' => 'botedit',
10411  'grouping' => 'all',
10412  ],
10413  'unpatrolled' => [
10414  'letter' => 'unpatrolledletter',
10415  'title' => 'recentchanges-label-unpatrolled',
10416  'legend' => 'recentchanges-legend-unpatrolled',
10417  'grouping' => 'any',
10418  ],
10419  ],
10420  'type' => 'map',
10421  ];
10422 
10428  public const WatchlistExpiry = [
10429  'default' => false,
10430  'type' => 'boolean',
10431  ];
10432 
10443  public const WatchlistPurgeRate = [
10444  'default' => 0.1,
10445  'type' => 'float',
10446  ];
10447 
10462  public const WatchlistExpiryMaxDuration = [
10463  'default' => '6 months',
10464  'type' => '?string',
10465  ];
10466 
10467  // endregion -- end RC/watchlist
10468 
10469  /***************************************************************************/
10470  // region Copyright and credits settings
10480  public const RightsPage = [
10481  'default' => null,
10482  ];
10483 
10490  public const RightsUrl = [
10491  'default' => null,
10492  ];
10493 
10502  public const RightsText = [
10503  'default' => null,
10504  ];
10505 
10509  public const RightsIcon = [
10510  'default' => null,
10511  ];
10512 
10516  public const UseCopyrightUpload = [
10517  'default' => false,
10518  ];
10519 
10527  public const MaxCredits = [
10528  'default' => 0,
10529  ];
10530 
10536  public const ShowCreditsIfMax = [
10537  'default' => true,
10538  ];
10539 
10540  // endregion -- end of copyright and credits settings
10541 
10542  /***************************************************************************/
10543  // region Import / Export
10569  public const ImportSources = [
10570  'default' => [],
10571  'type' => 'map',
10572  ];
10573 
10582  public const ImportTargetNamespace = [
10583  'default' => null,
10584  ];
10585 
10592  public const ExportAllowHistory = [
10593  'default' => true,
10594  ];
10595 
10601  public const ExportMaxHistory = [
10602  'default' => 0,
10603  ];
10604 
10608  public const ExportAllowListContributors = [
10609  'default' => false,
10610  ];
10611 
10623  public const ExportMaxLinkDepth = [
10624  'default' => 0,
10625  ];
10626 
10630  public const ExportFromNamespaces = [
10631  'default' => false,
10632  ];
10633 
10637  public const ExportAllowAll = [
10638  'default' => false,
10639  ];
10640 
10647  public const ExportPagelistLimit = [
10648  'default' => 5000,
10649  ];
10650 
10655  public const XmlDumpSchemaVersion = [
10656  'default' => XML_DUMP_SCHEMA_VERSION_11,
10657  ];
10658 
10659  // endregion -- end of import/export
10660 
10661  /***************************************************************************/
10662  // region Wiki Farm
10674  public const WikiFarmSettingsDirectory = [
10675  'default' => null
10676  ];
10677 
10686  public const WikiFarmSettingsExtension = [
10687  'default' => 'yaml'
10688  ];
10689 
10690  // endregion -- End Wiki Farm
10691 
10692  /***************************************************************************/
10693  // region Extensions
10700  public const ExtensionFunctions = [
10701  'default' => [],
10702  'type' => 'list',
10703  ];
10704 
10732  public const ExtensionMessagesFiles = [
10733  'default' => [],
10734  'type' => 'map',
10735  ];
10736 
10765  public const MessagesDirs = [
10766  'default' => [],
10767  'type' => 'map',
10768  ];
10769 
10776  public const ExtensionEntryPointListFiles = [
10777  'default' => [],
10778  'type' => 'map',
10779  ];
10780 
10797  public const ParserOutputHooks = [
10798  'default' => [],
10799  'type' => 'map',
10800  ];
10801 
10805  public const EnableParserLimitReporting = [
10806  'default' => true,
10807  ];
10808 
10834  public const ValidSkinNames = [
10835  'default' => [],
10836  'type' => 'map',
10837  ];
10838 
10845  public const SpecialPages = [
10846  'default' => [],
10847  'type' => 'map',
10848  ];
10849 
10858  public const AutoloadAttemptLowercase = [
10859  'default' => false,
10860  'deprecated' => 'since 1.35',
10861  ];
10862 
10921  public const ExtensionCredits = [
10922  'default' => [],
10923  'type' => 'map',
10924  ];
10925 
10955  public const Hooks = [
10956  'default' => [],
10957  'type' => 'map',
10958  'mergeStrategy' => 'array_merge_recursive',
10959  ];
10960 
10973  public const ServiceWiringFiles = [
10974  'default' => [],
10975  'type' => 'list',
10976  ];
10977 
10986  public const JobClasses = [
10987  'default' => [
10988  'deletePage' => DeletePageJob::class,
10989  'refreshLinks' => RefreshLinksJob::class,
10990  'deleteLinks' => DeleteLinksJob::class,
10991  'htmlCacheUpdate' => HTMLCacheUpdateJob::class,
10992  'sendMail' => EmaillingJob::class,
10993  'enotifNotify' => EnotifNotifyJob::class,
10994  'fixDoubleRedirect' => DoubleRedirectJob::class,
10995  'AssembleUploadChunks' => AssembleUploadChunksJob::class,
10996  'PublishStashedFile' => PublishStashedFileJob::class,
10997  'ThumbnailRender' => ThumbnailRenderJob::class,
10998  'recentChangesUpdate' => RecentChangesUpdateJob::class,
10999  'refreshLinksPrioritized' => RefreshLinksJob::class,
11000  'refreshLinksDynamic' => RefreshLinksJob::class,
11001  'activityUpdateJob' => ActivityUpdateJob::class,
11002  'categoryMembershipChange' => CategoryMembershipChangeJob::class,
11003  'clearUserWatchlist' => ClearUserWatchlistJob::class,
11004  'watchlistExpiry' => WatchlistExpiryJob::class,
11005  'cdnPurge' => CdnPurgeJob::class,
11006  'userGroupExpiry' => UserGroupExpiryJob::class,
11007  'clearWatchlistNotifications' => ClearWatchlistNotificationsJob::class,
11008  'userOptionsUpdate' => UserOptionsUpdateJob::class,
11009  'revertedTagUpdate' => RevertedTagUpdateJob::class,
11010  'enqueue' => EnqueueJob::class, // local queue for multi-DC setups
11011  'null' => NullJob::class,
11012  'userEditCountInit' => UserEditCountInitJob::class,
11013  ],
11014  'type' => 'map',
11015  ];
11016 
11028  public const JobTypesExcludedFromDefaultQueue = [
11029  'default' => [ 'AssembleUploadChunks', 'PublishStashedFile' ],
11030  'type' => 'list',
11031  ];
11032 
11042  public const JobBackoffThrottling = [
11043  'default' => [],
11044  'type' => 'map',
11045  'additionalProperties' => [ 'type' => 'float', ],
11046  ];
11047 
11061  public const JobSerialCommitThreshold = [
11062  'default' => false,
11063  'type' => 'float|false',
11064  ];
11065 
11073  public const JobTypeConf = [
11074  'default' => [
11075  'default' => [
11076  'class' => JobQueueDB::class,
11077  'order' => 'random',
11078  'claimTTL' => 3600
11079  ],
11080  ],
11081  'additionalProperties' => [
11082  'type' => 'object',
11083  'properties' => [
11084  'class' => [ 'type' => 'string' ],
11085  'order' => [ 'type' => 'string' ],
11086  'claimTTL' => [ 'type' => 'int' ]
11087  ],
11088  ],
11089  'type' => 'map',
11090  ];
11091 
11104  public const JobQueueIncludeInMaxLagFactor = [
11105  'default' => false,
11106  ];
11107 
11113  public const SpecialPageCacheUpdates = [
11114  'default' => [
11115  'Statistics' => [ SiteStatsUpdate::class, 'cacheUpdate' ]
11116  ],
11117  'type' => 'map',
11118  ];
11119 
11128  public const PagePropLinkInvalidations = [
11129  'default' => [ 'hiddencat' => 'categorylinks', ],
11130  'type' => 'map',
11131  ];
11132 
11133  // endregion -- End extensions
11134 
11135  /***************************************************************************/
11136  // region Categories
11143  public const CategoryMagicGallery = [
11144  'default' => true,
11145  ];
11146 
11150  public const CategoryPagingLimit = [
11151  'default' => 200,
11152  ];
11153 
11180  public const CategoryCollation = [
11181  'default' => 'uppercase',
11182  ];
11183 
11195  public const TempCategoryCollations = [
11196  'default' => [],
11197  'type' => 'list',
11198  ];
11199 
11214  public const TrackingCategories = [
11215  'default' => [],
11216  'type' => 'list',
11217  'deprecated' => 'since 1.25 Extensions should now register tracking categories using ' .
11218  'the new extension registration system.',
11219  ];
11220 
11221  // endregion -- End categories
11222 
11223  /***************************************************************************/
11224  // region Logging
11236  public const LogTypes = [
11237  'default' => [
11238  '',
11239  'block',
11240  'protect',
11241  'rights',
11242  'delete',
11243  'upload',
11244  'move',
11245  'import',
11246  'patrol',
11247  'merge',
11248  'suppress',
11249  'tag',
11250  'managetags',
11251  'contentmodel',
11252  ],
11253  'type' => 'list',
11254  ];
11255 
11263  public const LogRestrictions = [
11264  'default' => [ 'suppress' => 'suppressionlog', ],
11265  'type' => 'map',
11266  ];
11267 
11286  public const FilterLogTypes = [
11287  'default' => [
11288  'patrol' => true,
11289  'tag' => true,
11290  'newusers' => false,
11291  ],
11292  'type' => 'map',
11293  ];
11294 
11304  public const LogNames = [
11305  'default' => [
11306  '' => 'all-logs-page',
11307  'block' => 'blocklogpage',
11308  'protect' => 'protectlogpage',
11309  'rights' => 'rightslog',
11310  'delete' => 'dellogpage',
11311  'upload' => 'uploadlogpage',
11312  'move' => 'movelogpage',
11313  'import' => 'importlogpage',
11314  'patrol' => 'patrol-log-page',
11315  'merge' => 'mergelog',
11316  'suppress' => 'suppressionlog',
11317  ],
11318  'type' => 'map',
11319  ];
11320 
11330  public const LogHeaders = [
11331  'default' => [
11332  '' => 'alllogstext',
11333  'block' => 'blocklogtext',
11334  'delete' => 'dellogpagetext',
11335  'import' => 'importlogpagetext',
11336  'merge' => 'mergelogpagetext',
11337  'move' => 'movelogpagetext',
11338  'patrol' => 'patrol-log-header',
11339  'protect' => 'protectlogtext',
11340  'rights' => 'rightslogtext',
11341  'suppress' => 'suppressionlogtext',
11342  'upload' => 'uploadlogpagetext',
11343  ],
11344  'type' => 'map',
11345  ];
11346 
11354  public const LogActions = [
11355  'default' => [],
11356  'type' => 'map',
11357  ];
11358 
11366  public const LogActionsHandlers = [
11367  'default' => [
11368  'block/block' => BlockLogFormatter::class,
11369  'block/reblock' => BlockLogFormatter::class,
11370  'block/unblock' => BlockLogFormatter::class,
11371  'contentmodel/change' => ContentModelLogFormatter::class,
11372  'contentmodel/new' => ContentModelLogFormatter::class,
11373  'delete/delete' => DeleteLogFormatter::class,
11374  'delete/delete_redir' => DeleteLogFormatter::class,
11375  'delete/delete_redir2' => DeleteLogFormatter::class,
11376  'delete/event' => DeleteLogFormatter::class,
11377  'delete/restore' => DeleteLogFormatter::class,
11378  'delete/revision' => DeleteLogFormatter::class,
11379  'import/interwiki' => ImportLogFormatter::class,
11380  'import/upload' => ImportLogFormatter::class,
11381  'managetags/activate' => LogFormatter::class,
11382  'managetags/create' => LogFormatter::class,
11383  'managetags/deactivate' => LogFormatter::class,
11384  'managetags/delete' => LogFormatter::class,
11385  'merge/merge' => MergeLogFormatter::class,
11386  'move/move' => MoveLogFormatter::class,
11387  'move/move_redir' => MoveLogFormatter::class,
11388  'patrol/patrol' => PatrolLogFormatter::class,
11389  'patrol/autopatrol' => PatrolLogFormatter::class,
11390  'protect/modify' => ProtectLogFormatter::class,
11391  'protect/move_prot' => ProtectLogFormatter::class,
11392  'protect/protect' => ProtectLogFormatter::class,
11393  'protect/unprotect' => ProtectLogFormatter::class,
11394  'rights/autopromote' => RightsLogFormatter::class,
11395  'rights/rights' => RightsLogFormatter::class,
11396  'suppress/block' => BlockLogFormatter::class,
11397  'suppress/delete' => DeleteLogFormatter::class,
11398  'suppress/event' => DeleteLogFormatter::class,
11399  'suppress/reblock' => BlockLogFormatter::class,
11400  'suppress/revision' => DeleteLogFormatter::class,
11401  'tag/update' => TagLogFormatter::class,
11402  'upload/overwrite' => UploadLogFormatter::class,
11403  'upload/revert' => UploadLogFormatter::class,
11404  'upload/upload' => UploadLogFormatter::class,
11405  ],
11406  'type' => 'map',
11407  ];
11408 
11418  public const ActionFilteredLogs = [
11419  'default' => [
11420  'block' => [
11421  'block' => [ 'block' ],
11422  'reblock' => [ 'reblock' ],
11423  'unblock' => [ 'unblock' ],
11424  ],
11425  'contentmodel' => [
11426  'change' => [ 'change' ],
11427  'new' => [ 'new' ],
11428  ],
11429  'delete' => [
11430  'delete' => [ 'delete' ],
11431  'delete_redir' => [ 'delete_redir', 'delete_redir2' ],
11432  'restore' => [ 'restore' ],
11433  'event' => [ 'event' ],
11434  'revision' => [ 'revision' ],
11435  ],
11436  'import' => [
11437  'interwiki' => [ 'interwiki' ],
11438  'upload' => [ 'upload' ],
11439  ],
11440  'managetags' => [
11441  'create' => [ 'create' ],
11442  'delete' => [ 'delete' ],
11443  'activate' => [ 'activate' ],
11444  'deactivate' => [ 'deactivate' ],
11445  ],
11446  'move' => [
11447  'move' => [ 'move' ],
11448  'move_redir' => [ 'move_redir' ],
11449  ],
11450  'newusers' => [
11451  'create' => [ 'create', 'newusers' ],
11452  'create2' => [ 'create2' ],
11453  'autocreate' => [ 'autocreate' ],
11454  'byemail' => [ 'byemail' ],
11455  ],
11456  'protect' => [
11457  'protect' => [ 'protect' ],
11458  'modify' => [ 'modify' ],
11459  'unprotect' => [ 'unprotect' ],
11460  'move_prot' => [ 'move_prot' ],
11461  ],
11462  'rights' => [
11463  'rights' => [ 'rights' ],
11464  'autopromote' => [ 'autopromote' ],
11465  ],
11466  'suppress' => [
11467  'event' => [ 'event' ],
11468  'revision' => [ 'revision' ],
11469  'delete' => [ 'delete' ],
11470  'block' => [ 'block' ],
11471  'reblock' => [ 'reblock' ],
11472  ],
11473  'upload' => [
11474  'upload' => [ 'upload' ],
11475  'overwrite' => [ 'overwrite' ],
11476  'revert' => [ 'revert' ],
11477  ],
11478  ],
11479  'type' => 'map',
11480  ];
11481 
11485  public const NewUserLog = [
11486  'default' => true,
11487  ];
11488 
11494  public const PageCreationLog = [
11495  'default' => true,
11496  ];
11497 
11498  // endregion -- end logging
11499 
11500  /***************************************************************************/
11501  // region Special pages (general and miscellaneous)
11507  public const AllowSpecialInclusion = [
11508  'default' => true,
11509  ];
11510 
11517  public const DisableQueryPageUpdate = [
11518  'default' => false,
11519  ];
11520 
11525  public const CountCategorizedImagesAsUsed = [
11526  'default' => false,
11527  ];
11528 
11533  public const MaxRedirectLinksRetrieved = [
11534  'default' => 500,
11535  ];
11536 
11543  public const RangeContributionsCIDRLimit = [
11544  'default' => [
11545  'IPv4' => 16,
11546  'IPv6' => 32,
11547  ],
11548  'type' => 'map',
11549  'additionalProperties' => [ 'type' => 'integer', ],
11550  ];
11551 
11552  // endregion -- end special pages
11553 
11554  /***************************************************************************/
11555  // region Actions
11564  public const Actions = [
11565  'default' => [],
11566  'type' => 'map',
11567  ];
11568 
11569  // endregion -- end actions
11570 
11571  /***************************************************************************/
11572  // region Robot (search engine crawler) policy
11574  // See also $wgNoFollowLinks.
11575 
11581  public const DefaultRobotPolicy = [
11582  'default' => 'index,follow',
11583  ];
11584 
11600  public const NamespaceRobotPolicies = [
11601  'default' => [],
11602  'type' => 'map',
11603  ];
11604 
11634  public const ArticleRobotPolicies = [
11635  'default' => [],
11636  'type' => 'map',
11637  ];
11638 
11650  public const ExemptFromUserRobotsControl = [
11651  'default' => null,
11652  'type' => '?list',
11653  ];
11654 
11655  // endregion End robot policy
11656 
11657  /***************************************************************************/
11658  // region Action API and REST API
11675  public const DebugAPI = [
11676  'default' => false,
11677  ];
11678 
11714  public const APIModules = [
11715  'default' => [],
11716  'type' => 'map',
11717  ];
11718 
11727  public const APIFormatModules = [
11728  'default' => [],
11729  'type' => 'map',
11730  ];
11731 
11740  public const APIMetaModules = [
11741  'default' => [],
11742  'type' => 'map',
11743  ];
11744 
11753  public const APIPropModules = [
11754  'default' => [],
11755  'type' => 'map',
11756  ];
11757 
11766  public const APIListModules = [
11767  'default' => [],
11768  'type' => 'map',
11769  ];
11770 
11775  public const APIMaxDBRows = [
11776  'default' => 5000,
11777  ];
11778 
11784  public const APIMaxResultSize = [
11785  'default' => 8388608,
11786  ];
11787 
11792  public const APIMaxUncachedDiffs = [
11793  'default' => 1,
11794  ];
11795 
11802  public const APIMaxLagThreshold = [
11803  'default' => 7,
11804  ];
11805 
11810  public const APIRequestLog = [
11811  'default' => false,
11812  ];
11813 
11817  public const APICacheHelpTimeout = [
11818  'default' => 60 * 60,
11819  ];
11820 
11825  public const APIUselessQueryPages = [
11826  'default' => [
11827  'MIMEsearch',
11828  'LinkSearch',
11829  ],
11830  'type' => 'list',
11831  ];
11832 
11836  public const AjaxUploadDestCheck = [
11837  'default' => true,
11838  ];
11839 
11843  public const AjaxLicensePreview = [
11844  'default' => true,
11845  ];
11846 
11869  public const CrossSiteAJAXdomains = [
11870  'default' => [],
11871  'type' => 'map',
11872  ];
11873 
11879  public const CrossSiteAJAXdomainExceptions = [
11880  'default' => [],
11881  'type' => 'map',
11882  ];
11883 
11887  public const AllowedCorsHeaders = [
11888  'default' => [
11889  /* simple headers (see spec) */
11890  'Accept',
11891  'Accept-Language',
11892  'Content-Language',
11893  'Content-Type',
11894  /* non-authorable headers in XHR, which are however requested by some UAs */
11895  'Accept-Encoding',
11896  'DNT',
11897  'Origin',
11898  /* MediaWiki whitelist */
11899  'User-Agent',
11900  'Api-User-Agent',
11901  /* Allowing caching preflight requests, see T269636 */
11902  'Access-Control-Max-Age',
11903  ],
11904  'type' => 'list',
11905  ];
11906 
11912  public const RestAPIAdditionalRouteFiles = [
11913  'default' => [],
11914  'type' => 'list',
11915  ];
11916 
11917  // endregion -- End AJAX and API
11918 
11919  /***************************************************************************/
11920  // region Shell and process control
11926  public const MaxShellMemory = [
11927  'default' => 307200,
11928  ];
11929 
11934  public const MaxShellFileSize = [
11935  'default' => 102400,
11936  ];
11937 
11941  public const MaxShellTime = [
11942  'default' => 180,
11943  ];
11944 
11949  public const MaxShellWallClockTime = [
11950  'default' => 180,
11951  ];
11952 
11976  public const ShellCgroup = [
11977  'default' => false,
11978  ];
11979 
11983  public const PhpCli = [
11984  'default' => '/usr/bin/php',
11985  ];
11986 
11999  public const ShellRestrictionMethod = [
12000  'default' => 'autodetect',
12001  'type' => 'string|false',
12002  ];
12003 
12007  public const ShellboxUrl = [
12008  'default' => null,
12009  'deprecated' => 'since 1.37; use $wgShellboxUrls instead',
12010  ];
12011 
12025  public const ShellboxUrls = [
12026  'default' => [ 'default' => null, ],
12027  'type' => 'map',
12028  'additionalProperties' => [
12029  'type' => 'string|false|null',
12030  ],
12031  ];
12032 
12039  public const ShellboxSecretKey = [
12040  'default' => null,
12041  'type' => '?string',
12042  ];
12043 
12044  // endregion -- end Shell and process control
12045 
12046  /***************************************************************************/
12047  // region HTTP client
12055  public const HTTPTimeout = [
12056  'default' => 25,
12057  'type' => 'float',
12058  ];
12059 
12067  public const HTTPConnectTimeout = [
12068  'default' => 5.0,
12069  'type' => 'float',
12070  ];
12071 
12079  public const HTTPMaxTimeout = [
12080  'default' => 0,
12081  'type' => 'float',
12082  ];
12083 
12091  public const HTTPMaxConnectTimeout = [
12092  'default' => 0,
12093  'type' => 'float',
12094  ];
12095 
12101  public const HTTPImportTimeout = [
12102  'default' => 25,
12103  ];
12104 
12108  public const AsyncHTTPTimeout = [
12109  'default' => 25,
12110  ];
12111 
12115  public const HTTPProxy = [
12116  'default' => '',
12117  ];
12118 
12134  public const LocalVirtualHosts = [
12135  'default' => [],
12136  'type' => 'map',
12137  ];
12138 
12150  public const LocalHTTPProxy = [
12151  'default' => false,
12152  'type' => 'string|false',
12153  ];
12154 
12160  public const AllowExternalReqID = [
12161  'default' => false,
12162  ];
12163 
12164  // endregion -- End HTTP client
12165 
12166  /***************************************************************************/
12167  // region Job queue
12176  public const JobRunRate = [
12177  'default' => 1,
12178  ];
12179 
12187  public const RunJobsAsync = [
12188  'default' => false,
12189  ];
12190 
12194  public const UpdateRowsPerJob = [
12195  'default' => 300,
12196  ];
12197 
12201  public const UpdateRowsPerQuery = [
12202  'default' => 100,
12203  ];
12204 
12205  // endregion -- End job queue
12206 
12207  /***************************************************************************/
12208  // region Miscellaneous
12216  public const RedirectOnLogin = [
12217  'default' => null,
12218  ];
12219 
12256  public const VirtualRestConfig = [
12257  'default' => [
12258  'paths' => [],
12259  'modules' => [],
12260  'global' => [
12261  # Timeout in seconds
12262  'timeout' => 360,
12263  # 'domain' is set to $wgCanonicalServer in Setup.php
12264  'forwardCookies' => false,
12265  'HTTPProxy' => null
12266  ]
12267  ],
12268  'mergeStrategy' => 'array_plus_2d',
12269  'type' => 'map',
12270  ];
12271 
12294  public const EventRelayerConfig = [
12295  'default' => [
12296  'default' => [ 'class' => EventRelayerNull::class, ],
12297  ],
12298  'type' => 'map',
12299  ];
12300 
12318  public const Pingback = [
12319  'default' => false,
12320  'type' => 'boolean',
12321  ];
12322 
12328  public const OriginTrials = [
12329  'default' => [],
12330  'type' => 'list',
12331  ];
12332 
12339  public const ReportToExpiry = [
12340  'default' => 86400,
12341  'type' => 'integer',
12342  ];
12343 
12350  public const ReportToEndpoints = [
12351  'default' => [],
12352  'type' => 'list',
12353  ];
12354 
12363  public const FeaturePolicyReportOnly = [
12364  'default' => [],
12365  'type' => 'list',
12366  ];
12367 
12373  public const SkinsPreferred = [
12374  'default' => [ 'vector-2022', 'vector' ],
12375  'type' => 'list',
12376  ];
12377 
12378  // endregion -- End Miscellaneous
12379 
12380 }
const SCHEMA_COMPAT_WRITE_BOTH
Definition: Defines.php:273
const AV_SCAN_FAILED
Definition: Defines.php:99
const AV_VIRUS_FOUND
Definition: Defines.php:97
const APCOND_AGE
Definition: Defines.php:179
const NS_HELP
Definition: Defines.php:76
const NS_USER
Definition: Defines.php:66
const CONTENT_MODEL_CSS
Definition: Defines.php:213
const CACHE_NONE
Definition: Defines.php:86
const CACHE_ANYTHING
Definition: Defines.php:85
const NS_MEDIAWIKI_TALK
Definition: Defines.php:73
const NS_MAIN
Definition: Defines.php:64
const NS_PROJECT_TALK
Definition: Defines.php:69
const NS_MEDIAWIKI
Definition: Defines.php:72
const NS_TEMPLATE
Definition: Defines.php:74
const CACHE_ACCEL
Definition: Defines.php:89
const NS_FILE_TALK
Definition: Defines.php:71
const XML_DUMP_SCHEMA_VERSION_11
Definition: Defines.php:317
const CONTENT_MODEL_WIKITEXT
Definition: Defines.php:211
const SCHEMA_COMPAT_READ_OLD
Definition: Defines.php:266
const CONTENT_MODEL_JSON
Definition: Defines.php:215
const NS_HELP_TALK
Definition: Defines.php:77
const NS_CATEGORY_TALK
Definition: Defines.php:79
const CONTENT_MODEL_TEXT
Definition: Defines.php:214
const CACHE_DB
Definition: Defines.php:87
const AV_SCAN_ABORTED
Definition: Defines.php:98
const APCOND_EDITCOUNT
Definition: Defines.php:178
const NS_TALK
Definition: Defines.php:65
const AV_NO_VIRUS
Definition: Defines.php:96
const NS_USER_TALK
Definition: Defines.php:67
const CONTENT_MODEL_UNKNOWN
Definition: Defines.php:216
const NS_PROJECT
Definition: Defines.php:68
const NS_CATEGORY
Definition: Defines.php:78
const CONTENT_MODEL_JAVASCRIPT
Definition: Defines.php:212
const NS_TEMPLATE_TALK
Definition: Defines.php:75
if(!defined('MW_SETUP_CALLBACK'))
The persistent session ID (if any) loaded at startup.
Definition: WebStart.php:82
This is a wrapper for APCu's shared memory functions.
Job for updating user activity like "last viewed" timestamps.
Implements Argon2, a modern key derivation algorithm designed to resist GPU cracking and side-channel...
Assemble the segments of a chunked upload.
A Bcrypt-hashed password.
This class formats block log entries.
Job to add recent change entries mentioning category membership changes.
Job to purge a set of URLs from CDN.
Definition: CdnPurgeJob.php:30
Job to clear a users watchlist in batches.
Job for clearing all of the "last viewed" timestamps for a user's watchlist, or setting them all to t...
Content handler for CSS pages.
Job to prune link tables for pages that were deleted.
This class formats delete log entries.
Class DeletePageJob.
This diff implementation is mainly lifted from the LCS algorithm of the Eclipse project which in turn...
Definition: DiffEngine.php:47
Class representing a 'diff' between two sequences of strings.
Definition: Diff.php:32
Job to fix double redirects after moving a page.
Old job used for sending single notification emails; kept for backwards-compatibility.
A BagOStuff object with no objects in it.
Job for email notification mails.
Router job that takes jobs and enqueues them to their proper queues.
Definition: EnqueueJob.php:37
No-op class for publishing messages into a PubSub system.
Content handler implementation for unknown content.
Maintenance script that fixes double redirects.
Job to purge the HTML/file cache for all pages that link to or use another page or file.
Simple store for keeping values in an associative array for the current process.
Hooks class.
Definition: Hooks.php:38
This class formats import log entries.
Content handler for JavaScript pages.
Class to handle job queues stored in the DB.
Definition: JobQueueDB.php:36
Content handler for JSON text.
Methods for dealing with language codes.
This password hash type layers one or more parameterized password types on top of each other.
A CentralIdLookup provider that just uses local IDs.
Local repository that stores files in the local filesystem and registers them in the wiki's own datab...
Definition: LocalRepo.php:39
Caching for the contents of localisation files.
Implements the default log formatting.
The old style of MediaWiki password hashing.
The old style of MediaWiki password hashing, with a salt.
Class representing a MediaWiki site.
This class contains schema declarations for all configuration variables known to MediaWiki core.
static getDefaultLocalTZoffset( $localtimezone)
Site language code.
static getDefaultLogo( $resourceBasePath)
static getDefaultLoadScript( $scriptPath)
static getDefaultUploadDirectory( $baseDirectory)
static getDefaultLocalFileRepo( $uploadDirectory, $scriptPath, $favicon, $uploadBaseUrl, $uploadPath, $hashedUploadDirectory, $thumbnailScriptPath, $generateThumbnailOnParse, $deletedDirectory, $updateCompatibleMetadata)
Allow users to upload files.
static getDefaultValue(string $name)
Returns the default value of the given config setting.
static getDefaultUploadPath( $scriptPath)
static getDefaultMetaNamespace( $sitename)
static getDefaultExtensionAssetsPath( $resourceBasePath)
static getDefaultDeletedDirectory( $uploadDirectory)
static listDefaultValues(string $prefix='')
Returns a generator for iterating over all config settings and their default values.
static getDefaultScript( $scriptPath)
static getDefaultResourceBasePath( $scriptPath)
static getDefaultDBerrorLogTZ( $localtimezone)
Current wiki database name.
static getDefaultSharedPrefix( $dbPrefix)
static getDefaultSharedSchema( $dbMwschema)
static getDefaultLocalStylePath( $scriptPath)
static getDefaultStylePath( $resourceBasePath)
static getDefaultFileCacheDirectory( $uploadDirectory)
static getDefaultArticlePath(string $script, $usePathInfo)
static getDefaultLocaltimezone()
Site language code.
static getDefaultRestPath( $scriptPath)
The MediaWiki class is the helper class for the index.php entry point.
Definition: MediaWiki.php:38
A wrapper class for the PECL memcached client.
A wrapper class for the pure-PHP memcached client, exposing a BagOStuff interface.
This class formats merge log entries.
This class formats move log entries.
This is a utility class for dealing with namespaces that encodes all the "magic" behaviors of them ba...
const CANONICAL_NAMES
Definitions of the NS_ constants are in Defines.php.
Degenerate job that does nothing, but can optionally replace itself in the queue and/or sleep for a b...
Definition: NullJob.php:49
This class formats patrol log entries.
A PBKDF2-hashed password.
Send information about this MediaWiki instance to mediawiki.org.
Definition: Pingback.php:45
Profiler base class that defines the interface and some shared functionality.
Definition: Profiler.php:36
This class formats protect log entries.
Upload a file from the upload stash into the local file repo.
Job for pruning recent changes.
Send recent change to a Redis Pub/Sub channel.
Job to update link tables for pages.
A cache class that directs writes to one set of servers and reads to another.
Job for deferring the execution of RevertedTagUpdate.
This class formats rights log entries.
Class for handling updates to the site_stats table.
RDBMS-based caching module.
This program is free software; you can redistribute it and/or modify it under the terms of the GNU Ge...
Base content handler implementation for flat text contents.
Job for asynchronous rendering of thumbnails.
This class performs some operations related to tracking categories, such as creating a list of all su...
Send recent change notifications to a destination address over UDP.
This class formats upload log entries.
Job that initializes an user's edit count if it's not yet set or the current value is outdated.
Job that updates a user's preferences.
Multi-datacenter aware caching interface.
The WebRequest class encapsulates getting at data passed in the URL or via a POSTed form stripping il...
Definition: WebRequest.php:44
Content handler for wiki text pages.
Wrapper for WinCache object caching functions; identical interface to the APC wrapper.
return[0=> 'ـ', 1=> ' ', 2=> '`', 3=> '´', 4=> '˜', 5=> '^', 6=> '¯', 7=> '‾', 8=> '˘', 9=> '˙', 10=> '¨', 11=> '˚', 12=> '˝', 13=> '᾽', 14=> '῝', 15=> '¸', 16=> '˛', 17=> '_', 18=> '‗', 19=> '῀', 20=> '﮲', 21=> '﮳', 22=> '﮴', 23=> '﮵', 24=> '﮶', 25=> '﮷', 26=> '﮸', 27=> '﮹', 28=> '﮺', 29=> '﮻', 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=> '࠷', 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=> '။', 160=> '។', 161=> '៕', 162=> '᪨', 163=> '᪩', 164=> '᪪', 165=> '᪫', 166=> '᭞', 167=> '᭟', 168=> '꧈', 169=> '꧉', 170=> '꩝', 171=> '꩞', 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 => '⋆', 1007 => '⋇', 1008 => '⋈', 1009 => '⋉', 1010 => '⋊', 1011 => '⋋', 1012 => '⋌', 1013 => '⋍', 1014 => '⋎', 1015 => '⋏', 1016 => '⋐', 1017 => '⋑', 1018 => '⋒', 1019 => '⋓', 1020 => '⋔', 1021 => '⋕', 1022 => '⋖', 1023 => '⋗', 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 => '⌨', 1097 => '⌫', 1098 => '⌬', 1099 => '⌭', 1100 => '⌮', 1101 => '⌯', 1102 => '⌰', 1103 => '⌱', 1104 => '⌲', 1105 => '⌳', 1106 => '⌴', 1107 => '⌵', 1108 => '⌶', 1109 => '⌷', 1110 => '⌸', 1111 => '⌹', 1112 => '⌺', 1113 => '⌻', 1114 => '⌼', 1115 => '⌽', 1116 => '⌾', 1117 => '⌿', 1118 => '⍀', 1119 => '⍁', 1120 => '⍂', 1121 => '⍃', 1122 => '⍄', 1123 => '⍅', 1124 => '⍆', 1125 => '⍇', 1126 => '⍈', 1127 => '⍉', 1128 => '⍊', 1129 => '⍋', 1130 => '⍌', 1131 => '⍍', 1132 => '⍎', 1133 => '⍏', 1134 => '⍐', 1135 => '⍑', 1136 => '⍒', 1137 => '⍓', 1138 => '⍔', 1139 => '⍕', 1140 => '⍖', 1141 => '⍗', 1142 => '⍘', 1143 => '⍙', 1144 => '⍚', 1145 => '⍛', 1146 => '⍜', 1147 => '⍝', 1148 => '⍞', 1149 => '⍟', 1150 => '⍠', 1151 => '⍡', 1152 => '⍢', 1153 => '⍣', 1154 => '⍤', 1155 => '⍥', 1156 => '⍦', 1157 => '⍧', 1158 => '⍨', 1159 => '⍩', 1160 => '⍪', 1161 => '⍫', 1162 => '⍬', 1163 => '⍭', 1164 => '⍮', 1165 => '⍯', 1166 => '⍰', 1167 => '⍱', 1168 => '⍲', 1169 => '⍳', 1170 => '⍴', 1171 => '⍵', 1172 => '⍶', 1173 => '⍷', 1174 => '⍸', 1175 => '⍹', 1176 => '⍺', 1177 => '⍻', 1178 => '⍼', 1179 => '⍽', 1180 => '⍾', 1181 => '⍿', 1182 => '⎀', 1183 => '⎁', 1184 => '⎂', 1185 => '⎃', 1186 => '⎄', 1187 => '⎅', 1188 => '⎆', 1189 => '⎇', 1190 => '⎈', 1191 => '⎉', 1192 => '⎊', 1193 => '⎋', 1194 => '⎌', 1195 => '⎍', 1196 => '⎎', 1197 => '⎏', 1198 => '⎐', 1199 => '⎑', 1200 => '⎒', 1201 => '⎓', 1202 => '⎔', 1203 => '⎕', 1204 => '⎖', 1205 => '⎗', 1206 => '⎘', 1207 => '⎙', 1208 => '⎚', 1209 => '⎛', 1210 => '⎜', 1211 => '⎝', 1212 => '⎞', 1213 => '⎟', 1214 => '⎠', 1215 => '⎡', 1216 => '⎢', 1217 => '⎣', 1218 => '⎤', 1219 => '⎥', 1220 => '⎦', 1221 => '⎧', 1222 => '⎨', 1223 => '⎩', 1224 => '⎪', 1225 => '⎫', 1226 => '⎬', 1227 => '⎭', 1228 => '⎮', 1229 => '⎯', 1230 => '⎰', 1231 => '⎱', 1232 => '⎲', 1233 => '⎳', 1234 => '⎴', 1235 => '⎵', 1236 => '⎶', 1237 => '⎷', 1238 => '⎸', 1239 => '⎹', 1240 => '⎺', 1241 => '⎻', 1242 => '⎼', 1243 => '⎽', 1244 => '⎾', 1245 => '⎿', 1246 => '⏀', 1247 => '⏁', 1248 => '⏂', 1249 => '⏃', 1250 => '⏄', 1251 => '⏅', 1252 => '⏆', 1253 => '⏇', 1254 => '⏈', 1255 => '⏉', 1256 => '⏊', 1257 => '⏋', 1258 => '⏌', 1259 => '⏍', 1260 => '⏎', 1261 => '⏏', 1262 => '⏐', 1263 => '⏑', 1264 => '⏒', 1265 => '⏓', 1266 => '⏔', 1267 => '⏕', 1268 => '⏖', 1269 => '⏗', 1270 => '⏘', 1271 => '⏙', 1272 => '⏚', 1273 => '⏛', 1274 => '⏜', 1275 => '⏝', 1276 => '⏞', 1277 => '⏟', 1278 => '⏠', 1279 => '⏡', 1280 => '⏢', 1281 => '⏣', 1282 => '⏤', 1283 => '⏥', 1284 => '⏦', 1285 => '⏧', 1286 => '⏨', 1287 => '⏩', 1288 => '⏪', 1289 => '⏫', 1290 => '⏬', 1291 => '⏭', 1292 => '⏮', 1293 => '⏯', 1294 => '⏰', 1295 => '⏱', 1296 => '⏲', 1297 => '⏳', 1298 => '␀', 1299 => '␁', 1300 => '␂', 1301 => '␃', 1302 => '␄', 1303 => '␅', 1304 => '␆', 1305 => '␇', 1306 => '␈', 1307 => '␉', 1308 => '␊', 1309 => '␋', 1310 => '␌', 1311 => '␍', 1312 => '␎', 1313 => '␏', 1314 => '␐', 1315 => '␑', 1316 => '␒', 1317 => '␓', 1318 => '␔', 1319 => '␕', 1320 => '␖', 1321 => '␗', 1322 => '␘', 1323 => '␙', 1324 => '␚', 1325 => '␛', 1326 => '␜', 1327 => '␝', 1328 => '␞', 1329 => '␟', 1330 => '␠', 1331 => '␡', 1332 => '␢', 1333 => '␣', 1334 => '␤', 1335 => '␥', 1336 => '␦', 1337 => '⑀', 1338 => '⑁', 1339 => '⑂', 1340 => '⑃', 1341 => '⑄', 1342 => '⑅', 1343 => '⑆', 1344 => '⑇', 1345 => '⑈', 1346 => '⑉', 1347 => '⑊', 1348 => '─', 1349 => '━', 1350 => '│', 1351 => '┃', 1352 => '┄', 1353 => '┅', 1354 => '┆', 1355 => '┇', 1356 => '┈', 1357 => '┉', 1358 => '┊', 1359 => '┋', 1360 => '┌', 1361 => '┍', 1362 => '┎', 1363 => '┏', 1364 => '┐', 1365 => '┑', 1366 => '┒', 1367 => '┓', 1368 => '└', 1369 => '┕', 1370 => '┖', 1371 => '┗', 1372 => '┘', 1373 => '┙', 1374 => '┚', 1375 => '┛', 1376 => '├', 1377 => '┝', 1378 => '┞', 1379 => '┟', 1380 => '┠', 1381 => '┡', 1382 => '┢', 1383 => '┣', 1384 => '┤', 1385 => '┥', 1386 => '┦', 1387 => '┧', 1388 => '┨', 1389 => '┩', 1390 => '┪', 1391 => '┫', 1392 => '┬', 1393 => '┭', 1394 => '┮', 1395 => '┯', 1396 => '┰', 1397 => '┱', 1398 => '┲', 1399 => '┳', 1400 => '┴', 1401 => '┵', 1402 => '┶', 1403 => '┷', 1404 => '┸', 1405 => '┹', 1406 => '┺', 1407 => '┻', 1408 => '┼', 1409 => '┽', 1410 => '┾', 1411 => '┿', 1412 => '╀', 1413 => '╁', 1414 => '╂', 1415 => '╃', 1416 => '╄', 1417 => '╅', 1418 => '╆', 1419 => '╇', 1420 => '╈', 1421 => '╉', 1422 => '╊', 1423 => '╋', 1424 => '╌', 1425 => '╍', 1426 => '╎', 1427 => '╏', 1428 => '═', 1429 => '║', 1430 => '╒', 1431 => '╓', 1432 => '╔', 1433 => '╕', 1434 => '╖', 1435 => '╗', 1436 => '╘', 1437 => '╙', 1438 => '╚', 1439 => '╛', 1440 => '╜', 1441 => '╝', 1442 => '╞', 1443 => '╟', 1444 => '╠', 1445 => '╡', 1446 => '╢', 1447 => '╣', 1448 => '╤', 1449 => '╥', 1450 => '╦', 1451 => '╧', 1452 => '╨', 1453 => '╩', 1454 => '╪', 1455 => '╫', 1456 => '╬', 1457 => '╭', 1458 => '╮', 1459 => '╯', 1460 => '╰', 1461 => '╱', 1462 => '╲', 1463 => '╳', 1464 => '╴', 1465 => '╵', 1466 => '╶', 1467 => '╷', 1468 => '╸', 1469 => '╹', 1470 => '╺', 1471 => '╻', 1472 => '╼', 1473 => '╽', 1474 => '╾', 1475 => '╿', 1476 => '▀', 1477 => '▁', 1478 => '▂', 1479 => '▃', 1480 => '▄', 1481 => '▅', 1482 => '▆', 1483 => '▇', 1484 => '█', 1485 => '▉', 1486 => '▊', 1487 => '▋', 1488 => '▌', 1489 => '▍', 1490 => '▎', 1491 => '▏', 1492 => '▐', 1493 => '░', 1494 => '▒', 1495 => '▓', 1496 => '▔', 1497 => '▕', 1498 => '▖', 1499 => '▗', 1500 => '▘', 1501 => '▙', 1502 => '▚', 1503 => '▛', 1504 => '▜', 1505 => '▝', 1506 => '▞', 1507 => '▟', 1508 => '■', 1509 => '□', 1510 => '▢', 1511 => '▣', 1512 => '▤', 1513 => '▥', 1514 => '▦', 1515 => '▧', 1516 => '▨', 1517 => '▩', 1518 => '▪', 1519 => '▫', 1520 => '▬', 1521 => '▭', 1522 => '▮', 1523 => '▯', 1524 => '▰', 1525 => '▱', 1526 => '▲', 1527 => '△', 1528 => '▴', 1529 => '▵', 1530 => '▶', 1531 => '▷', 1532 => '▸', 1533 => '▹', 1534 => '►', 1535 => '▻', 1536 => '▼', 1537 => '▽', 1538 => '▾', 1539 => '▿', 1540 => '◀', 1541 => '◁', 1542 => '◂', 1543 => '◃', 1544 => '◄', 1545 => '◅', 1546 => '◆', 1547 => '◇', 1548 => '◈', 1549 => '◉', 1550 => '◊', 1551 => '○', 1552 => '◌', 1553 => '◍', 1554 => '◎', 1555 => '●', 1556 => '◐', 1557 => '◑', 1558 => '◒', 1559 => '◓', 1560 => '◔', 1561 => '◕', 1562 => '◖', 1563 => '◗', 1564 => '◘', 1565 => '◙', 1566 => '◚', 1567 => '◛', 1568 => '◜', 1569 => '◝', 1570 => '◞', 1571 => '◟', 1572 => '◠', 1573 => '◡', 1574 => '◢', 1575 => '◣', 1576 => '◤', 1577 => '◥', 1578 => '◦', 1579 => '◧', 1580 => '◨', 1581 => '◩', 1582 => '◪', 1583 => '◫', 1584 => '◬', 1585 => '◭', 1586 => '◮', 1587 => '◯', 1588 => '◰', 1589 => '◱', 1590 => '◲', 1591 => '◳', 1592 => '◴', 1593 => '◵', 1594 => '◶', 1595 => '◷', 1596 => '◸', 1597 => '◹', 1598 => '◺', 1599 => '◻', 1600 => '◼', 1601 => '◽', 1602 => '◾', 1603 => '◿', 1604 => '☀', 1605 => '☁', 1606 => '☂', 1607 => '☃', 1608 => '☄', 1609 => '★', 1610 => '☆', 1611 => '☇', 1612 => '☈', 1613 => '☉', 1614 => '☊', 1615 => '☋', 1616 => '☌', 1617 => '☍', 1618 => '☎', 1619 => '☏', 1620 => '☐', 1621 => '☑', 1622 => '☒', 1623 => '☓', 1624 => '☔', 1625 => '☕', 1626 => '☖', 1627 => '☗', 1628 => '☘', 1629 => '☙', 1630 => '☚', 1631 => '☛', 1632 => '☜', 1633 => '☝', 1634 => '☞', 1635 => '☟', 1636 => '☠', 1637 => '☡', 1638 => '☢', 1639 => '☣', 1640 => '☤', 1641 => '☥', 1642 => '☦', 1643 => '☧', 1644 => '☨', 1645 => '☩', 1646 => '☪', 1647 => '☫', 1648 => '☬', 1649 => '☭', 1650 => '☮', 1651 => '☯', 1652 => '☸', 1653 => '☹', 1654 => '☺', 1655 => '☻', 1656 => '☼', 1657 => '☽', 1658 => '☾', 1659 => '☿', 1660 => '♀', 1661 => '♁', 1662 => '♂', 1663 => '♃', 1664 => '♄', 1665 => '♅', 1666 => '♆', 1667 => '♇', 1668 => '♈', 1669 => '♉', 1670 => '♊', 1671 => '♋', 1672 => '♌', 1673 => '♍', 1674 => '♎', 1675 => '♏', 1676 => '♐', 1677 => '♑', 1678 => '♒', 1679 => '♓', 1680 => '♔', 1681 => '♕', 1682 => '♖', 1683 => '♗', 1684 => '♘', 1685 => '♙', 1686 => '♚', 1687 => '♛', 1688 => '♜', 1689 => '♝', 1690 => '♞', 1691 => '♟', 1692 => '♠', 1693 => '♡', 1694 => '♢', 1695 => '♣', 1696 => '♤', 1697 => '♥', 1698 => '♦', 1699 => '♧', 1700 => '♨', 1701 => '♩', 1702 => '♪', 1703 => '♫', 1704 => '♬', 1705 => '♰', 1706 => '♱', 1707 => '♲', 1708 => '♳', 1709 => '♴', 1710 => '♵', 1711 => '♶', 1712 => '♷', 1713 => '♸', 1714 => '♹', 1715 => '♺', 1716 => '♻', 1717 => '♼', 1718 => '♽', 1719 => '♾', 1720 => '♿', 1721 => '⚀', 1722 => '⚁', 1723 => '⚂', 1724 => '⚃', 1725 => '⚄', 1726 => '⚅', 1727 => '⚆', 1728 => '⚇', 1729 => '⚈', 1730 => '⚉', 1731 => '⚐', 1732 => '⚑', 1733 => '⚒', 1734 => '⚓', 1735 => '⚔', 1736 => '⚕', 1737 => '⚖', 1738 => '⚗', 1739 => '⚘', 1740 => '⚙', 1741 => '⚚', 1742 => '⚛', 1743 => '⚜', 1744 => '⚝', 1745 => '⚞', 1746 => '⚟', 1747 => '⚠', 1748 => '⚡', 1749 => '⚢', 1750 => '⚣', 1751 => '⚤', 1752 => '⚥', 1753 => '⚦', 1754 => '⚧', 1755 => '⚨', 1756 => '⚩', 1757 => '⚪', 1758 => '⚫', 1759 => '⚬', 1760 => '⚭', 1761 => '⚮', 1762 => '⚯', 1763 => '⚰', 1764 => '⚱', 1765 => '⚲', 1766 => '⚳', 1767 => '⚴', 1768 => '⚵', 1769 => '⚶', 1770 => '⚷', 1771 => '⚸', 1772 => '⚹', 1773 => '⚺', 1774 => '⚻', 1775 => '⚼', 1776 => '⚽', 1777 => '⚾', 1778 => '⚿', 1779 => '⛀', 1780 => '⛁', 1781 => '⛂', 1782 => '⛃', 1783 => '⛄', 1784 => '⛅', 1785 => '⛆', 1786 => '⛇', 1787 => '⛈', 1788 => '⛉', 1789 => '⛊', 1790 => '⛋', 1791 => '⛌', 1792 => '⛍', 1793 => '⛎', 1794 => '⛏', 1795 => '⛐', 1796 => '⛑', 1797 => '⛒', 1798 => '⛓', 1799 => '⛔', 1800 => '⛕', 1801 => '⛖', 1802 => '⛗', 1803 => '⛘', 1804 => '⛙', 1805 => '⛚', 1806 => '⛛', 1807 => '⛜', 1808 => '⛝', 1809 => '⛞', 1810 => '⛟', 1811 => '⛠', 1812 => '⛡', 1813 => '⛢', 1814 => '⛣', 1815 => '⛤', 1816 => '⛥', 1817 => '⛦', 1818 => '⛧', 1819 => '⛨', 1820 => '⛩', 1821 => '⛪', 1822 => '⛫', 1823 => '⛬', 1824 => '⛭', 1825 => '⛮', 1826 => '⛯', 1827 => '⛰', 1828 => '⛱', 1829 => '⛲', 1830 => '⛳', 1831 => '⛴', 1832 => '⛵', 1833 => '⛶', 1834 => '⛷', 1835 => '⛸', 1836 => '⛹', 1837 => '⛺', 1838 => '⛻', 1839 => '⛼', 1840 => '⛽', 1841 => '⛾', 1842 => '⛿', 1843 => '✁', 1844 => '✂', 1845 => '✃', 1846 => '✄', 1847 => '✅', 1848 => '✆', 1849 => '✇', 1850 => '✈', 1851 => '✉', 1852 => '✊', 1853 => '✋', 1854 => '✌', 1855 => '✍', 1856 => '✎', 1857 => '✏', 1858 => '✐', 1859 => '✑', 1860 => '✒', 1861 => '✓', 1862 => '✔', 1863 => '✕', 1864 => '✖', 1865 => '✗', 1866 => '✘', 1867 => '✙', 1868 => '✚', 1869 => '✛', 1870 => '✜', 1871 => '✝', 1872 => '✞', 1873 => '✟', 1874 => '✠', 1875 => '✡', 1876 => '✢', 1877 => '✣', 1878 => '✤', 1879 => '✥', 1880 => '✦', 1881 => '✧', 1882 => '✨', 1883 => '✩', 1884 => '✪', 1885 => '✫', 1886 => '✬', 1887 => '✭', 1888 => '✮', 1889 => '✯', 1890 => '✰', 1891 => '✱', 1892 => '✲', 1893 => '✳', 1894 => '✴', 1895 => '✵', 1896 => '✶', 1897 => '✷', 1898 => '✸', 1899 => '✹', 1900 => '✺', 1901 => '✻', 1902 => '✼', 1903 => '✽', 1904 => '✾', 1905 => '✿', 1906 => '❀', 1907 => '❁', 1908 => '❂', 1909 => '❃', 1910 => '❄', 1911 => '❅', 1912 => '❆', 1913 => '❇', 1914 => '❈', 1915 => '❉', 1916 => '❊', 1917 => '❋', 1918 => '❌', 1919 => '❍', 1920 => '❎', 1921 => '❏', 1922 => '❐', 1923 => '❑', 1924 => '❒', 1925 => '❓', 1926 => '❔', 1927 => '❕', 1928 => '❖', 1929 => '❗', 1930 => '❘', 1931 => '❙', 1932 => '❚', 1933 => '❛', 1934 => '❜', 1935 => '❝', 1936 => '❞', 1937 => '❟', 1938 => '❠', 1939 => '❡', 1940 => '❢', 1941 => '❣', 1942 => '❤', 1943 => '❥', 1944 => '❦', 1945 => '❧', 1946 => '❨', 1947 => '❩', 1948 => '❪', 1949 => '❫', 1950 => '❬', 1951 => '❭', 1952 => '❮', 1953 => '❯', 1954 => '❰', 1955 => '❱', 1956 => '❲', 1957 => '❳', 1958 => '❴', 1959 => '❵', 1960 => '➔', 1961 => '➕', 1962 => '➖', 1963 => '➗', 1964 => '➘', 1965 => '➙', 1966 => '➚', 1967 => '➛', 1968 => '➜', 1969 => '➝', 1970 => '➞', 1971 => '➟', 1972 => '➠', 1973 => '➡', 1974 => '➢', 1975 => '➣', 1976 => '➤', 1977 => '➥', 1978 => '➦', 1979 => '➧', 1980 => '➨', 1981 => '➩', 1982 => '➪', 1983 => '➫', 1984 => '➬', 1985 => '➭', 1986 => '➮', 1987 => '➯', 1988 => '➰', 1989 => '➱', 1990 => '➲', 1991 => '➳', 1992 => '➴', 1993 => '➵', 1994 => '➶', 1995 => '➷', 1996 => '➸', 1997 => '➹', 1998 => '➺', 1999 => '➻', 2000 => '➼', 2001 => '➽', 2002 => '➾', 2003 => '➿', 2004 => '⟀', 2005 => '⟁', 2006 => '⟂', 2007 => '⟃', 2008 => '⟄', 2009 => '⟅', 2010 => '⟆', 2011 => '⟇', 2012 => '⟈', 2013 => '⟉', 2014 => '⟊', 2015 => '⟌', 2016 => '⟎', 2017 => '⟏', 2018 => '⟐', 2019 => '⟑', 2020 => '⟒', 2021 => '⟓', 2022 => '⟔', 2023 => '⟕', 2024 => '⟖', 2025 => '⟗', 2026 => '⟘', 2027 => '⟙', 2028 => '⟚', 2029 => '⟛', 2030 => '⟜', 2031 => '⟝', 2032 => '⟞', 2033 => '⟟', 2034 => '⟠', 2035 => '⟡', 2036 => '⟢', 2037 => '⟣', 2038 => '⟤', 2039 => '⟥', 2040 => '⟦', 2041 => '⟧', 2042 => '⟨', 2043 => '⟩', 2044 => '⟪', 2045 => '⟫', 2046 => '⟰', 2047 => '⟱', 2048 => '⟲', 2049 => '⟳', 2050 => '⟴', 2051 => '⟵', 2052 => '⟶', 2053 => '⟷', 2054 => '⟸', 2055 => '⟹', 2056 => '⟺', 2057 => '⟻', 2058 => '⟼', 2059 => '⟽', 2060 => '⟾', 2061 => '⟿', 2062 => '⤀', 2063 => '⤁', 2064 => '⤂', 2065 => '⤃', 2066 => '⤄', 2067 => '⤅', 2068 => '⤆', 2069 => '⤇', 2070 => '⤈', 2071 => '⤉', 2072 => '⤊', 2073 => '⤋', 2074 => '⤌', 2075 => '⤍', 2076 => '⤎', 2077 => '⤏', 2078 => '⤐', 2079 => '⤑', 2080 => '⤒', 2081 => '⤓', 2082 => '⤔', 2083 => '⤕', 2084 => '⤖', 2085 => '⤗', 2086 => '⤘', 2087 => '⤙', 2088 => '⤚', 2089 => '⤛', 2090 => '⤜', 2091 => '⤝', 2092 => '⤞', 2093 => '⤟', 2094 => '⤠', 2095 => '⤡', 2096 => '⤢', 2097 => '⤣', 2098 => '⤤', 2099 => '⤥', 2100 => '⤦', 2101 => '⤧', 2102 => '⤨', 2103 => '⤩', 2104 => '⤪', 2105 => '⤫', 2106 => '⤬', 2107 => '⤭', 2108 => '⤮', 2109 => '⤯', 2110 => '⤰', 2111 => '⤱', 2112 => '⤲', 2113 => '⤳', 2114 => '⤴', 2115 => '⤵', 2116 => '⤶', 2117 => '⤷', 2118 => '⤸', 2119 => '⤹', 2120 => '⤺', 2121 => '⤻', 2122 => '⤼', 2123 => '⤽', 2124 => '⤾', 2125 => '⤿', 2126 => '⥀', 2127 => '⥁', 2128 => '⥂', 2129 => '⥃', 2130 => '⥄', 2131 => '⥅', 2132 => '⥆', 2133 => '⥇', 2134 => '⥈', 2135 => '⥉', 2136 => '⥊', 2137 => '⥋', 2138 => '⥌', 2139 => '⥍', 2140 => '⥎', 2141 => '⥏', 2142 => '⥐', 2143 => '⥑', 2144 => '⥒', 2145 => '⥓', 2146 => '⥔', 2147 => '⥕', 2148 => '⥖', 2149 => '⥗', 2150 => '⥘', 2151 => '⥙', 2152 => '⥚', 2153 => '⥛', 2154 => '⥜', 2155 => '⥝', 2156 => '⥞', 2157 => '⥟', 2158 => '⥠', 2159 => '⥡', 2160 => '⥢', 2161 => '⥣', 2162 => '⥤', 2163 => '⥥', 2164 => '⥦', 2165 => '⥧', 2166 => '⥨', 2167 => '⥩', 2168 => '⥪', 2169 => '⥫', 2170 => '⥬', 2171 => '⥭', 2172 => '⥮', 2173 => '⥯', 2174 => '⥰', 2175 => '⥱', 2176 => '⥲', 2177 => '⥳', 2178 => '⥴', 2179 => '⥵', 2180 => '⥶', 2181 => '⥷', 2182 => '⥸', 2183 => '⥹', 2184 => '⥺', 2185 => '⥻', 2186 => '⥼', 2187 => '⥽', 2188 => '⥾', 2189 => '⥿', 2190 => '⦀', 2191 => '⦁', 2192 => '⦂', 2193 => '⦙', 2194 => '⦚', 2195 => '⦛', 2196 => '⦜', 2197 => '⦝', 2198 => '⦞', 2199 => '⦟', 2200 => '⦠', 2201 => '⦡', 2202 => '⦢', 2203 => '⦣', 2204 => '⦤', 2205 => '⦥', 2206 => '⦦', 2207 => '⦧', 2208 => '⦨', 2209 => '⦩', 2210 => '⦪', 2211 => '⦫', 2212 => '⦬', 2213 => '⦭', 2214 => '⦮', 2215 => '⦯', 2216 => '⦰', 2217 => '⦱', 2218 => '⦲', 2219 => '⦳', 2220 => '⦴', 2221 => '⦵', 2222 => '⦶', 2223 => '⦷', 2224 => '⦸', 2225 => '⦹', 2226 => '⦺', 2227 => '⦻', 2228 => '⦼', 2229 => '⦽', 2230 => '⦾', 2231 => '⦿', 2232 => '⧀', 2233 => '⧁', 2234 => '⧂', 2235 => '⧃', 2236 => '⧄', 2237 => '⧅', 2238 => '⧆', 2239 => '⧇', 2240 => '⧈', 2241 => '⧉', 2242 => '⧊', 2243 => '⧋', 2244 => '⧌', 2245 => '⧍', 2246 => '⧎', 2247 => '⧏', 2248 => '⧐', 2249 => '⧑', 2250 => '⧒', 2251 => '⧓', 2252 => '⧔', 2253 => '⧕', 2254 => '⧖', 2255 => '⧗', 2256 => '⧘', 2257 => '⧙', 2258 => '⧚', 2259 => '⧛', 2260 => '⧜', 2261 => '⧝', 2262 => '⧞', 2263 => '⧟', 2264 => '⧠', 2265 => '⧡', 2266 => '⧢', 2267 => '⧣', 2268 => '⧤', 2269 => '⧥', 2270 => '⧦', 2271 => '⧧', 2272 => '⧨', 2273 => '⧩', 2274 => '⧪', 2275 => '⧫', 2276 => '⧬', 2277 => '⧭', 2278 => '⧮', 2279 => '⧯', 2280 => '⧰', 2281 => '⧱', 2282 => '⧲', 2283 => '⧳', 2284 => '⧴', 2285 => '⧵', 2286 => '⧶', 2287 => '⧷', 2288 => '⧸', 2289 => '⧹', 2290 => '⧺', 2291 => '⧻', 2292 => '⧾', 2293 => '⧿', 2294 => '⨀', 2295 => '⨁', 2296 => '⨂', 2297 => '⨃', 2298 => '⨄', 2299 => '⨅', 2300 => '⨆', 2301 => '⨇', 2302 => '⨈', 2303 => '⨉', 2304 => '⨊', 2305 => '⨋', 2306 => '⨍', 2307 => '⨎', 2308 => '⨏', 2309 => '⨐', 2310 => '⨑', 2311 => '⨒', 2312 => '⨓', 2313 => '⨔', 2314 => '⨕', 2315 => '⨖', 2316 => '⨗', 2317 => '⨘', 2318 => '⨙', 2319 => '⨚', 2320 => '⨛', 2321 => '⨜', 2322 => '⨝', 2323 => '⨞', 2324 => '⨟', 2325 => '⨠', 2326 => '⨡', 2327 => '⨢', 2328 => '⨣', 2329 => '⨤', 2330 => '⨥', 2331 => '⨦', 2332 => '⨧', 2333 => '⨨', 2334 => '⨩', 2335 => '⨪', 2336 => '⨫', 2337 => '⨬', 2338 => '⨭', 2339 => '⨮', 2340 => '⨯', 2341 => '⨰', 2342 => '⨱', 2343 => '⨲', 2344 => '⨳', 2345 => '⨴', 2346 => '⨵', 2347 => '⨶', 2348 => '⨷', 2349 => '⨸', 2350 => '⨹', 2351 => '⨺', 2352 => '⨻', 2353 => '⨼', 2354 => '⨽', 2355 => '⨾', 2356 => '⨿', 2357 => '⩀', 2358 => '⩁', 2359 => '⩂', 2360 => '⩃', 2361 => '⩄', 2362 => '⩅', 2363 => '⩆', 2364 => '⩇', 2365 => '⩈', 2366 => '⩉', 2367 => '⩊', 2368 => '⩋', 2369 => '⩌', 2370 => '⩍', 2371 => '⩎', 2372 => '⩏', 2373 => '⩐', 2374 => '⩑', 2375 => '⩒', 2376 => '⩓', 2377 => '⩔', 2378 => '⩕', 2379 => '⩖', 2380 => '⩗', 2381 => '⩘', 2382 => '⩙', 2383 => '⩚', 2384 => '⩛', 2385 => '⩜', 2386 => '⩝', 2387 => '⩞', 2388 => '⩟', 2389 => '⩠', 2390 => '⩡', 2391 => '⩢', 2392 => '⩣', 2393 => '⩤', 2394 => '⩥', 2395 => '⩦', 2396 => '⩧', 2397 => '⩨', 2398 => '⩩', 2399 => '⩪', 2400 => '⩫', 2401 => '⩬', 2402 => '⩭', 2403 => '⩮', 2404 => '⩯', 2405 => '⩰', 2406 => '⩱', 2407 => '⩲', 2408 => '⩳', 2409 => '⩷', 2410 => '⩸', 2411 => '⩹', 2412 => '⩺', 2413 => '⩻', 2414 => '⩼', 2415 => '⩽', 2416 => '⩾', 2417 => '⩿', 2418 => '⪀', 2419 => '⪁', 2420 => '⪂', 2421 => '⪃', 2422 => '⪄', 2423 => '⪅', 2424 => '⪆', 2425 => '⪇', 2426 => '⪈', 2427 => '⪉', 2428 => '⪊', 2429 => '⪋', 2430 => '⪌', 2431 => '⪍', 2432 => '⪎', 2433 => '⪏', 2434 => '⪐', 2435 => '⪑', 2436 => '⪒', 2437 => '⪓', 2438 => '⪔', 2439 => '⪕', 2440 => '⪖', 2441 => '⪗', 2442 => '⪘', 2443 => '⪙', 2444 => '⪚', 2445 => '⪛', 2446 => '⪜', 2447 => '⪝', 2448 => '⪞', 2449 => '⪟', 2450 => '⪠', 2451 => '⪡', 2452 => '⪢', 2453 => '⪣', 2454 => '⪤', 2455 => '⪥', 2456 => '⪦', 2457 => '⪧', 2458 => '⪨', 2459 => '⪩', 2460 => '⪪', 2461 => '⪫', 2462 => '⪬', 2463 => '⪭', 2464 => '⪮', 2465 => '⪯', 2466 => '⪰', 2467 => '⪱', 2468 => '⪲', 2469 => '⪳', 2470 => '⪴', 2471 => '⪵', 2472 => '⪶', 2473 => '⪷', 2474 => '⪸', 2475 => '⪹', 2476 => '⪺', 2477 => '⪻', 2478 => '⪼', 2479 => '⪽', 2480 => '⪾', 2481 => '⪿', 2482 => '⫀', 2483 => '⫁', 2484 => '⫂', 2485 => '⫃', 2486 => '⫄', 2487 => '⫅', 2488 => '⫆', 2489 => '⫇', 2490 => '⫈', 2491 => '⫉', 2492 => '⫊', 2493 => '⫋', 2494 => '⫌', 2495 => '⫍', 2496 => '⫎', 2497 => '⫏', 2498 => '⫐', 2499 => '⫑', 2500 => '⫒', 2501 => '⫓', 2502 => '⫔', 2503 => '⫕', 2504 => '⫖', 2505 => '⫗', 2506 => '⫘', 2507 => '⫙', 2508 => '⫚', 2509 => '⫛', 2510 => '⫝', 2511 => '⫞', 2512 => '⫟', 2513 => '⫠', 2514 => '⫡', 2515 => '⫢', 2516 => '⫣', 2517 => '⫤', 2518 => '⫥', 2519 => '⫦', 2520 => '⫧', 2521 => '⫨', 2522 => '⫩', 2523 => '⫪', 2524 => '⫫', 2525 => '⫬', 2526 => '⫭', 2527 => '⫮', 2528 => '⫯', 2529 => '⫰', 2530 => '⫱', 2531 => '⫲', 2532 => '⫳', 2533 => '⫴', 2534 => '⫵', 2535 => '⫶', 2536 => '⫷', 2537 => '⫸', 2538 => '⫹', 2539 => '⫺', 2540 => '⫻', 2541 => '⫼', 2542 => '⫽', 2543 => '⫾', 2544 => '⫿', 2545 => '⬀', 2546 => '⬁', 2547 => '⬂', 2548 => '⬃', 2549 => '⬄', 2550 => '⬅', 2551 => '⬆', 2552 => '⬇', 2553 => '⬈', 2554 => '⬉', 2555 => '⬊', 2556 => '⬋', 2557 => '⬌', 2558 => '⬍', 2559 => '⬎', 2560 => '⬏', 2561 => '⬐', 2562 => '⬑', 2563 => '⬒', 2564 => '⬓', 2565 => '⬔', 2566 => '⬕', 2567 => '⬖', 2568 => '⬗', 2569 => '⬘', 2570 => '⬙', 2571 => '⬚', 2572 => '⬛', 2573 => '⬜', 2574 => '⬝', 2575 => '⬞', 2576 => '⬟', 2577 => '⬠', 2578 => '⬡', 2579 => '⬢', 2580 => '⬣', 2581 => '⬤', 2582 => '⬥', 2583 => '⬦', 2584 => '⬧', 2585 => '⬨', 2586 => '⬩', 2587 => '⬪', 2588 => '⬫', 2589 => '⬬', 2590 => '⬭', 2591 => '⬮', 2592 => '⬯', 2593 => '⬰', 2594 => '⬱', 2595 => '⬲', 2596 => '⬳', 2597 => '⬴', 2598 => '⬵', 2599 => '⬶', 2600 => '⬷', 2601 => '⬸', 2602 => '⬹', 2603 => '⬺', 2604 => '⬻', 2605 => '⬼', 2606 => '⬽', 2607 => '⬾', 2608 => '⬿', 2609 => '⭀', 2610 => '⭁', 2611 => '⭂', 2612 => '⭃', 2613 => '⭄', 2614 => '⭅', 2615 => '⭆', 2616 => '⭇', 2617 => '⭈', 2618 => '⭉', 2619 => '⭊', 2620 => '⭋', 2621 => '⭌', 2622 => '⭐', 2623 => '⭑', 2624 => '⭒', 2625 => '⭓', 2626 => '⭔', 2627 => '⭕', 2628 => '⭖', 2629 => '⭗', 2630 => '⭘', 2631 => '⭙', 2632 => '⳥', 2633 => '⳦', 2634 => '⳧', 2635 => '⳨', 2636 => '⳩', 2637 => '⳪', 2638 => '⠀', 2639 => '⠁', 2640 => '⠂', 2641 => '⠃', 2642 => '⠄', 2643 => '⠅', 2644 => '⠆', 2645 => '⠇', 2646 => '⠈', 2647 => '⠉', 2648 => '⠊', 2649 => '⠋', 2650 => '⠌', 2651 => '⠍', 2652 => '⠎', 2653 => '⠏', 2654 => '⠐', 2655 => '⠑', 2656 => '⠒', 2657 => '⠓', 2658 => '⠔', 2659 => '⠕', 2660 => '⠖', 2661 => '⠗', 2662 => '⠘', 2663 => '⠙', 2664 => '⠚', 2665 => '⠛', 2666 => '⠜', 2667 => '⠝', 2668 => '⠞', 2669 => '⠟', 2670 => '⠠', 2671 => '⠡', 2672 => '⠢', 2673 => '⠣', 2674 => '⠤', 2675 => '⠥', 2676 => '⠦', 2677 => '⠧', 2678 => '⠨', 2679 => '⠩', 2680 => '⠪', 2681 => '⠫', 2682 => '⠬', 2683 => '⠭', 2684 => '⠮', 2685 => '⠯', 2686 => '⠰', 2687 => '⠱', 2688 => '⠲', 2689 => '⠳', 2690 => '⠴', 2691 => '⠵', 2692 => '⠶', 2693 => '⠷', 2694 => '⠸', 2695 => '⠹', 2696 => '⠺', 2697 => '⠻', 2698 => '⠼', 2699 => '⠽', 2700 => '⠾', 2701 => '⠿', 2702 => '⡀', 2703 => '⡁', 2704 => '⡂', 2705 => '⡃', 2706 => '⡄', 2707 => '⡅', 2708 => '⡆', 2709 => '⡇', 2710 => '⡈', 2711 => '⡉', 2712 => '⡊', 2713 => '⡋', 2714 => '⡌', 2715 => '⡍', 2716 => '⡎', 2717 => '⡏', 2718 => '⡐', 2719 => '⡑', 2720 => '⡒', 2721 => '⡓', 2722 => '⡔', 2723 => '⡕', 2724 => '⡖', 2725 => '⡗', 2726 => '⡘', 2727 => '⡙', 2728 => '⡚', 2729 => '⡛', 2730 => '⡜', 2731 => '⡝', 2732 => '⡞', 2733 => '⡟', 2734 => '⡠', 2735 => '⡡', 2736 => '⡢', 2737 => '⡣', 2738 => '⡤', 2739 => '⡥', 2740 => '⡦', 2741 => '⡧', 2742 => '⡨', 2743 => '⡩', 2744 => '⡪', 2745 => '⡫', 2746 => '⡬', 2747 => '⡭', 2748 => '⡮', 2749 => '⡯', 2750 => '⡰', 2751 => '⡱', 2752 => '⡲', 2753 => '⡳', 2754 => '⡴', 2755 => '⡵', 2756 => '⡶', 2757 => '⡷', 2758 => '⡸', 2759 => '⡹', 2760 => '⡺', 2761 => '⡻', 2762 => '⡼', 2763 => '⡽', 2764 => '⡾', 2765 => '⡿', 2766 => '⢀', 2767 => '⢁', 2768 => '⢂', 2769 => '⢃', 2770 => '⢄', 2771 => '⢅', 2772 => '⢆', 2773 => '⢇', 2774 => '⢈', 2775 => '⢉', 2776 => '⢊', 2777 => '⢋', 2778 => '⢌', 2779 => '⢍', 2780 => '⢎', 2781 => '⢏', 2782 => '⢐', 2783 => '⢑', 2784 => '⢒', 2785 => '⢓', 2786 => '⢔', 2787 => '⢕', 2788 => '⢖', 2789 => '⢗', 2790 => '⢘', 2791 => '⢙', 2792 => '⢚', 2793 => '⢛', 2794 => '⢜', 2795 => '⢝', 2796 => '⢞', 2797 => '⢟', 2798 => '⢠', 2799 => '⢡', 2800 => '⢢', 2801 => '⢣', 2802 => '⢤', 2803 => '⢥', 2804 => '⢦', 2805 => '⢧', 2806 => '⢨', 2807 => '⢩', 2808 => '⢪', 2809 => '⢫', 2810 => '⢬', 2811 => '⢭', 2812 => '⢮', 2813 => '⢯', 2814 => '⢰', 2815 => '⢱', 2816 => '⢲', 2817 => '⢳', 2818 => '⢴', 2819 => '⢵', 2820 => '⢶', 2821 => '⢷', 2822 => '⢸', 2823 => '⢹', 2824 => '⢺', 2825 => '⢻', 2826 => '⢼', 2827 => '⢽', 2828 => '⢾', 2829 => '⢿', 2830 => '⣀', 2831 => '⣁', 2832 => '⣂', 2833 => '⣃', 2834 => '⣄', 2835 => '⣅', 2836 => '⣆', 2837 => '⣇', 2838 => '⣈', 2839 => '⣉', 2840 => '⣊', 2841 => '⣋', 2842 => '⣌', 2843 => '⣍', 2844 => '⣎', 2845 => '⣏', 2846 => '⣐', 2847 => '⣑', 2848 => '⣒', 2849 => '⣓', 2850 => '⣔', 2851 => '⣕', 2852 => '⣖', 2853 => '⣗', 2854 => '⣘', 2855 => '⣙', 2856 => '⣚', 2857 => '⣛', 2858 => '⣜', 2859 => '⣝', 2860 => '⣞', 2861 => '⣟', 2862 => '⣠', 2863 => '⣡', 2864 => '⣢', 2865 => '⣣', 2866 => '⣤', 2867 => '⣥', 2868 => '⣦', 2869 => '⣧', 2870 => '⣨', 2871 => '⣩', 2872 => '⣪', 2873 => '⣫', 2874 => '⣬', 2875 => '⣭', 2876 => '⣮', 2877 => '⣯', 2878 => '⣰', 2879 => '⣱', 2880 => '⣲', 2881 => '⣳', 2882 => '⣴', 2883 => '⣵', 2884 => '⣶', 2885 => '⣷', 2886 => '⣸', 2887 => '⣹', 2888 => '⣺', 2889 => '⣻', 2890 => '⣼', 2891 => '⣽', 2892 => '⣾', 2893 => '⣿', 2894 => '⚊', 2895 => '⚋', 2896 => '⚌', 2897 => '⚍', 2898 => '⚎', 2899 => '⚏', 2900 => '☰', 2901 => '☱', 2902 => '☲', 2903 => '☳', 2904 => '☴', 2905 => '☵', 2906 => '☶', 2907 => '☷', 2908 => '䷀', 2909 => '䷁', 2910 => '䷂', 2911 => '䷃', 2912 => '䷄', 2913 => '䷅', 2914 => '䷆', 2915 => '䷇', 2916 => '䷈', 2917 => '䷉', 2918 => '䷊', 2919 => '䷋', 2920 => '䷌', 2921 => '䷍', 2922 => '䷎', 2923 => '䷏', 2924 => '䷐', 2925 => '䷑', 2926 => '䷒', 2927 => '䷓', 2928 => '䷔', 2929 => '䷕', 2930 => '䷖', 2931 => '䷗', 2932 => '䷘', 2933 => '䷙', 2934 => '䷚', 2935 => '䷛', 2936 => '䷜', 2937 => '䷝', 2938 => '䷞', 2939 => '䷟', 2940 => '䷠', 2941 => '䷡', 2942 => '䷢', 2943 => '䷣', 2944 => '䷤', 2945 => '䷥', 2946 => '䷦', 2947 => '䷧', 2948 => '䷨', 2949 => '䷩', 2950 => '䷪', 2951 => '䷫', 2952 => '䷬', 2953 => '䷭', 2954 => '䷮', 2955 => '䷯', 2956 => '䷰', 2957 => '䷱', 2958 => '䷲', 2959 => '䷳', 2960 => '䷴', 2961 => '䷵', 2962 => '䷶', 2963 => '䷷', 2964 => '䷸', 2965 => '䷹', 2966 => '䷺', 2967 => '䷻', 2968 => '䷼', 2969 => '䷽', 2970 => '䷾', 2971 => '䷿', 2972 => '𝌀', 2973 => '𝌁', 2974 => '𝌂', 2975 => '𝌃', 2976 => '𝌄', 2977 => '𝌅', 2978 => '𝌆', 2979 => '𝌇', 2980 => '𝌈', 2981 => '𝌉', 2982 => '𝌊', 2983 => '𝌋', 2984 => '𝌌', 2985 => '𝌍', 2986 => '𝌎', 2987 => '𝌏', 2988 => '𝌐', 2989 => '𝌑', 2990 => '𝌒', 2991 => '𝌓', 2992 => '𝌔', 2993 => '𝌕', 2994 => '𝌖', 2995 => '𝌗', 2996 => '𝌘', 2997 => '𝌙', 2998 => '𝌚', 2999 => '𝌛', 3000 => '𝌜', 3001 => '𝌝', 3002 => '𝌞', 3003 => '𝌟', 3004 => '𝌠', 3005 => '𝌡', 3006 => '𝌢', 3007 => '𝌣', 3008 => '𝌤', 3009 => '𝌥', 3010 => '𝌦', 3011 => '𝌧', 3012 => '𝌨', 3013 => '𝌩', 3014 => '𝌪', 3015 => '𝌫', 3016 => '𝌬', 3017 => '𝌭', 3018 => '𝌮', 3019 => '𝌯', 3020 => '𝌰', 3021 => '𝌱', 3022 => '𝌲', 3023 => '𝌳', 3024 => '𝌴', 3025 => '𝌵', 3026 => '𝌶', 3027 => '𝌷', 3028 => '𝌸', 3029 => '𝌹', 3030 => '𝌺', 3031 => '𝌻', 3032 => '𝌼', 3033 => '𝌽', 3034 => '𝌾', 3035 => '𝌿', 3036 => '𝍀', 3037 => '𝍁', 3038 => '𝍂', 3039 => '𝍃', 3040 => '𝍄', 3041 => '𝍅', 3042 => '𝍆', 3043 => '𝍇', 3044 => '𝍈', 3045 => '𝍉', 3046 => '𝍊', 3047 => '𝍋', 3048 => '𝍌', 3049 => '𝍍', 3050 => '𝍎', 3051 => '𝍏', 3052 => '𝍐', 3053 => '𝍑', 3054 => '𝍒', 3055 => '𝍓', 3056 => '𝍔', 3057 => '𝍕', 3058 => '𝍖', 3059 => '꒐', 3060 => '꒑', 3061 => '꒒', 3062 => '꒓', 3063 => '꒔', 3064 => '꒕', 3065 => '꒖', 3066 => '꒗', 3067 => '꒘', 3068 => '꒙', 3069 => '꒚', 3070 => '꒛', 3071 => '꒜', 3072 => '꒝', 3073 => '꒞', 3074 => '꒟', 3075 => '꒠', 3076 => '꒡', 3077 => '꒢', 3078 => '꒣', 3079 => '꒤', 3080 => '꒥', 3081 => '꒦', 3082 => '꒧', 3083 => '꒨', 3084 => '꒩', 3085 => '꒪', 3086 => '꒫', 3087 => '꒬', 3088 => '꒭', 3089 => '꒮', 3090 => '꒯', 3091 => '꒰', 3092 => '꒱', 3093 => '꒲', 3094 => '꒳', 3095 => '꒴', 3096 => '꒵', 3097 => '꒶', 3098 => '꒷', 3099 => '꒸', 3100 => '꒹', 3101 => '꒺', 3102 => '꒻', 3103 => '꒼', 3104 => '꒽', 3105 => '꒾', 3106 => '꒿', 3107 => '꓀', 3108 => '꓁', 3109 => '꓂', 3110 => '꓃', 3111 => '꓄', 3112 => '꓅', 3113 => '꓆', 3114 => '𐄷', 3115 => '𐄸', 3116 => '𐄹', 3117 => '𐄺', 3118 => '𐄻', 3119 => '𐄼', 3120 => '𐄽', 3121 => '𐄾', 3122 => '𐄿', 3123 => '𐅹', 3124 => '𐅺', 3125 => '𐅻', 3126 => '𐅼', 3127 => '𐅽', 3128 => '𐅾', 3129 => '𐅿', 3130 => '𐆀', 3131 => '𐆁', 3132 => '𐆂', 3133 => '𐆃', 3134 => '𐆄', 3135 => '𐆅', 3136 => '𐆆', 3137 => '𐆇', 3138 => '𐆈', 3139 => '𐆉', 3140 => '𐆐', 3141 => '𐆑', 3142 => '𐆒', 3143 => '𐆓', 3144 => '𐆔', 3145 => '𐆕', 3146 => '𐆖', 3147 => '𐆗', 3148 => '𐆘', 3149 => '𐆙', 3150 => '𐆚', 3151 => '𐆛', 3152 => '𐇐', 3153 => '𐇑', 3154 => '𐇒', 3155 => '𐇓', 3156 => '𐇔', 3157 => '𐇕', 3158 => '𐇖', 3159 => '𐇗', 3160 => '𐇘', 3161 => '𐇙', 3162 => '𐇚', 3163 => '𐇛', 3164 => '𐇜', 3165 => '𐇝', 3166 => '𐇞', 3167 => '𐇟', 3168 => '𐇠', 3169 => '𐇡', 3170 => '𐇢', 3171 => '𐇣', 3172 => '𐇤', 3173 => '𐇥', 3174 => '𐇦', 3175 => '𐇧', 3176 => '𐇨', 3177 => '𐇩', 3178 => '𐇪', 3179 => '𐇫', 3180 => '𐇬', 3181 => '𐇭', 3182 => '𐇮', 3183 => '𐇯', 3184 => '𐇰', 3185 => '𐇱', 3186 => '𐇲', 3187 => '𐇳', 3188 => '𐇴', 3189 => '𐇵', 3190 => '𐇶', 3191 => '𐇷', 3192 => '𐇸', 3193 => '𐇹', 3194 => '𐇺', 3195 => '𐇻', 3196 => '𐇼', 3197 => '𝀀', 3198 => '𝀁', 3199 => '𝀂', 3200 => '𝀃', 3201 => '𝀄', 3202 => '𝀅', 3203 => '𝀆', 3204 => '𝀇', 3205 => '𝀈', 3206 => '𝀉', 3207 => '𝀊', 3208 => '𝀋', 3209 => '𝀌', 3210 => '𝀍', 3211 => '𝀎', 3212 => '𝀏', 3213 => '𝀐', 3214 => '𝀑', 3215 => '𝀒', 3216 => '𝀓', 3217 => '𝀔', 3218 => '𝀕', 3219 => '𝀖', 3220 => '𝀗', 3221 => '𝀘', 3222 => '𝀙', 3223 => '𝀚', 3224 => '𝀛', 3225 => '𝀜', 3226 => '𝀝', 3227 => '𝀞', 3228 => '𝀟', 3229 => '𝀠', 3230 => '𝀡', 3231 => '𝀢', 3232 => '𝀣', 3233 => '𝀤', 3234 => '𝀥', 3235 => '𝀦', 3236 => '𝀧', 3237 => '𝀨', 3238 => '𝀩', 3239 => '𝀪', 3240 => '𝀫', 3241 => '𝀬', 3242 => '𝀭', 3243 => '𝀮', 3244 => '𝀯', 3245 => '𝀰', 3246 => '𝀱', 3247 => '𝀲', 3248 => '𝀳', 3249 => '𝀴', 3250 => '𝀵', 3251 => '𝀶', 3252 => '𝀷', 3253 => '𝀸', 3254 => '𝀹', 3255 => '𝀺', 3256 => '𝀻', 3257 => '𝀼', 3258 => '𝀽', 3259 => '𝀾', 3260 => '𝀿', 3261 => '𝁀', 3262 => '𝁁', 3263 => '𝁂', 3264 => '𝁃', 3265 => '𝁄', 3266 => '𝁅', 3267 => '𝁆', 3268 => '𝁇', 3269 => '𝁈', 3270 => '𝁉', 3271 => '𝁊', 3272 => '𝁋', 3273 => '𝁌', 3274 => '𝁍', 3275 => '𝁎', 3276 => '𝁏', 3277 => '𝁐', 3278 => '𝁑', 3279 => '𝁒', 3280 => '𝁓', 3281 => '𝁔', 3282 => '𝁕', 3283 => '𝁖', 3284 => '𝁗', 3285 => '𝁘', 3286 => '𝁙', 3287 => '𝁚', 3288 => '𝁛', 3289 => '𝁜', 3290 => '𝁝', 3291 => '𝁞', 3292 => '𝁟', 3293 => '𝁠', 3294 => '𝁡', 3295 => '𝁢', 3296 => '𝁣', 3297 => '𝁤', 3298 => '𝁥', 3299 => '𝁦', 3300 => '𝁧', 3301 => '𝁨', 3302 => '𝁩', 3303 => '𝁪', 3304 => '𝁫', 3305 => '𝁬', 3306 => '𝁭', 3307 => '𝁮', 3308 => '𝁯', 3309 => '𝁰', 3310 => '𝁱', 3311 => '𝁲', 3312 => '𝁳', 3313 => '𝁴', 3314 => '𝁵', 3315 => '𝁶', 3316 => '𝁷', 3317 => '𝁸', 3318 => '𝁹', 3319 => '𝁺', 3320 => '𝁻', 3321 => '𝁼', 3322 => '𝁽', 3323 => '𝁾', 3324 => '𝁿', 3325 => '𝂀', 3326 => '𝂁', 3327 => '𝂂', 3328 => '𝂃', 3329 => '𝂄', 3330 => '𝂅', 3331 => '𝂆', 3332 => '𝂇', 3333 => '𝂈', 3334 => '𝂉', 3335 => '𝂊', 3336 => '𝂋', 3337 => '𝂌', 3338 => '𝂍', 3339 => '𝂎', 3340 => '𝂏', 3341 => '𝂐', 3342 => '𝂑', 3343 => '𝂒', 3344 => '𝂓', 3345 => '𝂔', 3346 => '𝂕', 3347 => '𝂖', 3348 => '𝂗', 3349 => '𝂘', 3350 => '𝂙', 3351 => '𝂚', 3352 => '𝂛', 3353 => '𝂜', 3354 => '𝂝', 3355 => '𝂞', 3356 => '𝂟', 3357 => '𝂠', 3358 => '𝂡', 3359 => '𝂢', 3360 => '𝂣', 3361 => '𝂤', 3362 => '𝂥', 3363 => '𝂦', 3364 => '𝂧', 3365 => '𝂨', 3366 => '𝂩', 3367 => '𝂪', 3368 => '𝂫', 3369 => '𝂬', 3370 => '𝂭', 3371 => '𝂮', 3372 => '𝂯', 3373 => '𝂰', 3374 => '𝂱', 3375 => '𝂲', 3376 => '𝂳', 3377 => '𝂴', 3378 => '𝂵', 3379 => '𝂶', 3380 => '𝂷', 3381 => '𝂸', 3382 => '𝂹', 3383 => '𝂺', 3384 => '𝂻', 3385 => '𝂼', 3386 => '𝂽', 3387 => '𝂾', 3388 => '𝂿', 3389 => '𝃀', 3390 => '𝃁', 3391 => '𝃂', 3392 => '𝃃', 3393 => '𝃄', 3394 => '𝃅', 3395 => '𝃆', 3396 => '𝃇', 3397 => '𝃈', 3398 => '𝃉', 3399 => '𝃊', 3400 => '𝃋', 3401 => '𝃌', 3402 => '𝃍', 3403 => '𝃎', 3404 => '𝃏', 3405 => '𝃐', 3406 => '𝃑', 3407 => '𝃒', 3408 => '𝃓', 3409 => '𝃔', 3410 => '𝃕', 3411 => '𝃖', 3412 => '𝃗', 3413 => '𝃘', 3414 => '𝃙', 3415 => '𝃚', 3416 => '𝃛', 3417 => '𝃜', 3418 => '𝃝', 3419 => '𝃞', 3420 => '𝃟', 3421 => '𝃠', 3422 => '𝃡', 3423 => '𝃢', 3424 => '𝃣', 3425 => '𝃤', 3426 => '𝃥', 3427 => '𝃦', 3428 => '𝃧', 3429 => '𝃨', 3430 => '𝃩', 3431 => '𝃪', 3432 => '𝃫', 3433 => '𝃬', 3434 => '𝃭', 3435 => '𝃮', 3436 => '𝃯', 3437 => '𝃰', 3438 => '𝃱', 3439 => '𝃲', 3440 => '𝃳', 3441 => '𝃴', 3442 => '𝃵', 3443 => '𝄀', 3444 => '𝄁', 3445 => '𝄂', 3446 => '𝄃', 3447 => '𝄄', 3448 => '𝄅', 3449 => '𝄆', 3450 => '𝄇', 3451 => '𝄈', 3452 => '𝄉', 3453 => '𝄊', 3454 => '𝄋', 3455 => '𝄌', 3456 => '𝄍', 3457 => '𝄎', 3458 => '𝄏', 3459 => '𝄐', 3460 => '𝄑', 3461 => '𝄒', 3462 => '𝄓', 3463 => '𝄔', 3464 => '𝄕', 3465 => '𝄖', 3466 => '𝄗', 3467 => '𝄘', 3468 => '𝄙', 3469 => '𝄚', 3470 => '𝄛', 3471 => '𝄜', 3472 => '𝄝', 3473 => '𝄞', 3474 => '𝄟', 3475 => '𝄠', 3476 => '𝄡', 3477 => '𝄢', 3478 => '𝄣', 3479 => '𝄤', 3480 => '𝄥', 3481 => '𝄦', 3482 => '♭', 3483 => '♮', 3484 => '♯', 3485 => '𝄪', 3486 => '𝄫', 3487 => '𝄬', 3488 => '𝄭', 3489 => '𝄮', 3490 => '𝄯', 3491 => '𝄰', 3492 => '𝄱', 3493 => '𝄲', 3494 => '𝄳', 3495 => '𝄴', 3496 => '𝄵', 3497 => '𝄶', 3498 => '𝄷', 3499 => '𝄸', 3500 => '𝄹', 3501 => '𝄩', 3502 => '𝄺', 3503 => '𝄻', 3504 => '𝄼', 3505 => '𝄽', 3506 => '𝄾', 3507 => '𝄿', 3508 => '𝅀', 3509 => '𝅁', 3510 => '𝅂', 3511 => '𝅃', 3512 => '𝅄', 3513 => '𝅅', 3514 => '𝅆', 3515 => '𝅇', 3516 => '𝅈', 3517 => '𝅉', 3518 => '𝅊', 3519 => '𝅋', 3520 => '𝅌', 3521 => '𝅍', 3522 => '𝅎', 3523 => '𝅏', 3524 => '𝅐', 3525 => '𝅑', 3526 => '𝅒', 3527 => '𝅓', 3528 => '𝅔', 3529 => '𝅕', 3530 => '𝅖', 3531 => '𝅗', 3532 => '𝅘', 3533 => '𝅙', 3534 => '𝅚', 3535 => '𝅛', 3536 => '𝅜', 3537 => '𝅝', 3538 => '𝅪', 3539 => '𝅫', 3540 => '𝅬', 3541 => '𝆃', 3542 => '𝆄', 3543 => '𝆌', 3544 => '𝆍', 3545 => '𝆎', 3546 => '𝆏', 3547 => '𝆐', 3548 => '𝆑', 3549 => '𝆒', 3550 => '𝆓', 3551 => '𝆔', 3552 => '𝆕', 3553 => '𝆖', 3554 => '𝆗', 3555 => '𝆘', 3556 => '𝆙', 3557 => '𝆚', 3558 => '𝆛', 3559 => '𝆜', 3560 => '𝆝', 3561 => '𝆞', 3562 => '𝆟', 3563 => '𝆠', 3564 => '𝆡', 3565 => '𝆢', 3566 => '𝆣', 3567 => '𝆤', 3568 => '𝆥', 3569 => '𝆦', 3570 => '𝆧', 3571 => '𝆨', 3572 => '𝆩', 3573 => '𝆮', 3574 => '𝆯', 3575 => '𝆰', 3576 => '𝆱', 3577 => '𝆲', 3578 => '𝆳', 3579 => '𝆴', 3580 => '𝆵', 3581 => '𝆶', 3582 => '𝆷', 3583 => '𝆸', 3584 => '𝆹', 3585 => '𝆺', 3586 => '𝇁', 3587 => '𝇂', 3588 => '𝇃', 3589 => '𝇄', 3590 => '𝇅', 3591 => '𝇆', 3592 => '𝇇', 3593 => '𝇈', 3594 => '𝇉', 3595 => '𝇊', 3596 => '𝇋', 3597 => '𝇌', 3598 => '𝇍', 3599 => '𝇎', 3600 => '𝇏', 3601 => '𝇐', 3602 => '𝇑', 3603 => '𝇒', 3604 => '𝇓', 3605 => '𝇔', 3606 => '𝇕', 3607 => '𝇖', 3608 => '𝇗', 3609 => '𝇘', 3610 => '𝇙', 3611 => '𝇚', 3612 => '𝇛', 3613 => '𝇜', 3614 => '𝇝', 3615 => '𝈀', 3616 => '𝈁', 3617 => '𝈂', 3618 => '𝈃', 3619 => '𝈄', 3620 => '𝈅', 3621 => '𝈆', 3622 => '𝈇', 3623 => '𝈈', 3624 => '𝈉', 3625 => '𝈊', 3626 => '𝈋', 3627 => '𝈌', 3628 => '𝈍', 3629 => '𝈎', 3630 => '𝈏', 3631 => '𝈐', 3632 => '𝈑', 3633 => '𝈒', 3634 => '𝈓', 3635 => '𝈔', 3636 => '𝈕', 3637 => '𝈖', 3638 => '𝈗', 3639 => '𝈘', 3640 => '𝈙', 3641 => '𝈚', 3642 => '𝈛', 3643 => '𝈜', 3644 => '𝈝', 3645 => '𝈞', 3646 => '𝈟', 3647 => '𝈠', 3648 => '𝈡', 3649 => '𝈢', 3650 => '𝈣', 3651 => '𝈤', 3652 => '𝈥', 3653 => '𝈦', 3654 => '𝈧', 3655 => '𝈨', 3656 => '𝈩', 3657 => '𝈪', 3658 => '𝈫', 3659 => '𝈬', 3660 => '𝈭', 3661 => '𝈮', 3662 => '𝈯', 3663 => '𝈰', 3664 => '𝈱', 3665 => '𝈲', 3666 => '𝈳', 3667 => '𝈴', 3668 => '𝈵', 3669 => '𝈶', 3670 => '𝈷', 3671 => '𝈸', 3672 => '𝈹', 3673 => '𝈺', 3674 => '𝈻', 3675 => '𝈼', 3676 => '𝈽', 3677 => '𝈾', 3678 => '𝈿', 3679 => '𝉀', 3680 => '𝉁', 3681 => '𝉅', 3682 => '🀀', 3683 => '🀁', 3684 => '🀂', 3685 => '🀃', 3686 => '🀄', 3687 => '🀅', 3688 => '🀆', 3689 => '🀇', 3690 => '🀈', 3691 => '🀉', 3692 => '🀊', 3693 => '🀋', 3694 => '🀌', 3695 => '🀍', 3696 => '🀎', 3697 => '🀏', 3698 => '🀐', 3699 => '🀑', 3700 => '🀒', 3701 => '🀓', 3702 => '🀔', 3703 => '🀕', 3704 => '🀖', 3705 => '🀗', 3706 => '🀘', 3707 => '🀙', 3708 => '🀚', 3709 => '🀛', 3710 => '🀜', 3711 => '🀝', 3712 => '🀞', 3713 => '🀟', 3714 => '🀠', 3715 => '🀡', 3716 => '🀢', 3717 => '🀣', 3718 => '🀤', 3719 => '🀥', 3720 => '🀦', 3721 => '🀧', 3722 => '🀨', 3723 => '🀩', 3724 => '🀪', 3725 => '🀫', 3726 => '🀰', 3727 => '🀱', 3728 => '🀲', 3729 => '🀳', 3730 => '🀴', 3731 => '🀵', 3732 => '🀶', 3733 => '🀷', 3734 => '🀸', 3735 => '🀹', 3736 => '🀺', 3737 => '🀻', 3738 => '🀼', 3739 => '🀽', 3740 => '🀾', 3741 => '🀿', 3742 => '🁀', 3743 => '🁁', 3744 => '🁂', 3745 => '🁃', 3746 => '🁄', 3747 => '🁅', 3748 => '🁆', 3749 => '🁇', 3750 => '🁈', 3751 => '🁉', 3752 => '🁊', 3753 => '🁋', 3754 => '🁌', 3755 => '🁍', 3756 => '🁎', 3757 => '🁏', 3758 => '🁐', 3759 => '🁑', 3760 => '🁒', 3761 => '🁓', 3762 => '🁔', 3763 => '🁕', 3764 => '🁖', 3765 => '🁗', 3766 => '🁘', 3767 => '🁙', 3768 => '🁚', 3769 => '🁛', 3770 => '🁜', 3771 => '🁝', 3772 => '🁞', 3773 => '🁟', 3774 => '🁠', 3775 => '🁡', 3776 => '🁢', 3777 => '🁣', 3778 => '🁤', 3779 => '🁥', 3780 => '🁦', 3781 => '🁧', 3782 => '🁨', 3783 => '🁩', 3784 => '🁪', 3785 => '🁫', 3786 => '🁬', 3787 => '🁭', 3788 => '🁮', 3789 => '🁯', 3790 => '🁰', 3791 => '🁱', 3792 => '🁲', 3793 => '🁳', 3794 => '🁴', 3795 => '🁵', 3796 => '🁶', 3797 => '🁷', 3798 => '🁸', 3799 => '🁹', 3800 => '🁺', 3801 => '🁻', 3802 => '🁼', 3803 => '🁽', 3804 => '🁾', 3805 => '🁿', 3806 => '🂀', 3807 => '🂁', 3808 => '🂂', 3809 => '🂃', 3810 => '🂄', 3811 => '🂅', 3812 => '🂆', 3813 => '🂇', 3814 => '🂈', 3815 => '🂉', 3816 => '🂊', 3817 => '🂋', 3818 => '🂌', 3819 => '🂍', 3820 => '🂎', 3821 => '🂏', 3822 => '🂐', 3823 => '🂑', 3824 => '🂒', 3825 => '🂓', 3826 => '🂠', 3827 => '🂡', 3828 => '🂢', 3829 => '🂣', 3830 => '🂤', 3831 => '🂥', 3832 => '🂦', 3833 => '🂧', 3834 => '🂨', 3835 => '🂩', 3836 => '🂪', 3837 => '🂫', 3838 => '🂬', 3839 => '🂭', 3840 => '🂮', 3841 => '🂱', 3842 => '🂲', 3843 => '🂳', 3844 => '🂴', 3845 => '🂵', 3846 => '🂶', 3847 => '🂷', 3848 => '🂸', 3849 => '🂹', 3850 => '🂺', 3851 => '🂻', 3852 => '🂼', 3853 => '🂽', 3854 => '🂾', 3855 => '🃁', 3856 => '🃂', 3857 => '🃃', 3858 => '🃄', 3859 => '🃅', 3860 => '🃆', 3861 => '🃇', 3862 => '🃈', 3863 => '🃉', 3864 => '🃊', 3865 => '🃋', 3866 => '🃌', 3867 => '🃍', 3868 => '🃎', 3869 => '🃏', 3870 => '🃑', 3871 => '🃒', 3872 => '🃓', 3873 => '🃔', 3874 => '🃕', 3875 => '🃖', 3876 => '🃗', 3877 => '🃘', 3878 => '🃙', 3879 => '🃚', 3880 => '🃛', 3881 => '🃜', 3882 => '🃝', 3883 => '🃞', 3884 => '🃟', 3885 => '🌀', 3886 => '🌁', 3887 => '🌂', 3888 => '🌃', 3889 => '🌄', 3890 => '🌅', 3891 => '🌆', 3892 => '🌇', 3893 => '🌈', 3894 => '🌉', 3895 => '🌊', 3896 => '🌋', 3897 => '🌌', 3898 => '🌍', 3899 => '🌎', 3900 => '🌏', 3901 => '🌐', 3902 => '🌑', 3903 => '🌒', 3904 => '🌓', 3905 => '🌔', 3906 => '🌕', 3907 => '🌖', 3908 => '🌗', 3909 => '🌘', 3910 => '🌙', 3911 => '🌚', 3912 => '🌛', 3913 => '🌜', 3914 => '🌝', 3915 => '🌞', 3916 => '🌟', 3917 => '🌠', 3918 => '🌰', 3919 => '🌱', 3920 => '🌲', 3921 => '🌳', 3922 => '🌴', 3923 => '🌵', 3924 => '🌷', 3925 => '🌸', 3926 => '🌹', 3927 => '🌺', 3928 => '🌻', 3929 => '🌼', 3930 => '🌽', 3931 => '🌾', 3932 => '🌿', 3933 => '🍀', 3934 => '🍁', 3935 => '🍂', 3936 => '🍃', 3937 => '🍄', 3938 => '🍅', 3939 => '🍆', 3940 => '🍇', 3941 => '🍈', 3942 => '🍉', 3943 => '🍊', 3944 => '🍋', 3945 => '🍌', 3946 => '🍍', 3947 => '🍎', 3948 => '🍏', 3949 => '🍐', 3950 => '🍑', 3951 => '🍒', 3952 => '🍓', 3953 => '🍔', 3954 => '🍕', 3955 => '🍖', 3956 => '🍗', 3957 => '🍘', 3958 => '🍙', 3959 => '🍚', 3960 => '🍛', 3961 => '🍜', 3962 => '🍝', 3963 => '🍞', 3964 => '🍟', 3965 => '🍠', 3966 => '🍡', 3967 => '🍢', 3968 => '🍣', 3969 => '🍤', 3970 => '🍥', 3971 => '🍦', 3972 => '🍧', 3973 => '🍨', 3974 => '🍩', 3975 => '🍪', 3976 => '🍫', 3977 => '🍬', 3978 => '🍭', 3979 => '🍮', 3980 => '🍯', 3981 => '🍰', 3982 => '🍱', 3983 => '🍲', 3984 => '🍳', 3985 => '🍴', 3986 => '🍵', 3987 => '🍶', 3988 => '🍷', 3989 => '🍸', 3990 => '🍹', 3991 => '🍺', 3992 => '🍻', 3993 => '🍼', 3994 => '🎀', 3995 => '🎁', 3996 => '🎂', 3997 => '🎃', 3998 => '🎄', 3999 => '🎅', 4000 => '🎆', 4001 => '🎇', 4002 => '🎈', 4003 => '🎉', 4004 => '🎊', 4005 => '🎋', 4006 => '🎌', 4007 => '🎍', 4008 => '🎎', 4009 => '🎏', 4010 => '🎐', 4011 => '🎑', 4012 => '🎒', 4013 => '🎓', 4014 => '🎠', 4015 => '🎡', 4016 => '🎢', 4017 => '🎣', 4018 => '🎤', 4019 => '🎥', 4020 => '🎦', 4021 => '🎧', 4022 => '🎨', 4023 => '🎩', 4024 => '🎪', 4025 => '🎫', 4026 => '🎬', 4027 => '🎭', 4028 => '🎮', 4029 => '🎯', 4030 => '🎰', 4031 => '🎱', 4032 => '🎲', 4033 => '🎳', 4034 => '🎴', 4035 => '🎵', 4036 => '🎶', 4037 => '🎷', 4038 => '🎸', 4039 => '🎹', 4040 => '🎺', 4041 => '🎻', 4042 => '🎼', 4043 => '🎽', 4044 => '🎾', 4045 => '🎿', 4046 => '🏀', 4047 => '🏁', 4048 => '🏂', 4049 => '🏃', 4050 => '🏄', 4051 => '🏆', 4052 => '🏇', 4053 => '🏈', 4054 => '🏉', 4055 => '🏊', 4056 => '🏠', 4057 => '🏡', 4058 => '🏢', 4059 => '🏣', 4060 => '🏤', 4061 => '🏥', 4062 => '🏦', 4063 => '🏧', 4064 => '🏨', 4065 => '🏩', 4066 => '🏪', 4067 => '🏫', 4068 => '🏬', 4069 => '🏭', 4070 => '🏮', 4071 => '🏯', 4072 => '🏰', 4073 => '🐀', 4074 => '🐁', 4075 => '🐂', 4076 => '🐃', 4077 => '🐄', 4078 => '🐅', 4079 => '🐆', 4080 => '🐇', 4081 => '🐈', 4082 => '🐉', 4083 => '🐊', 4084 => '🐋', 4085 => '🐌', 4086 => '🐍', 4087 => '🐎', 4088 => '🐏', 4089 => '🐐', 4090 => '🐑', 4091 => '🐒', 4092 => '🐓', 4093 => '🐔', 4094 => '🐕', 4095 => '🐖', 4096 => '🐗', 4097 => '🐘', 4098 => '🐙', 4099 => '🐚', 4100 => '🐛', 4101 => '🐜', 4102 => '🐝', 4103 => '🐞', 4104 => '🐟', 4105 => '🐠', 4106 => '🐡', 4107 => '🐢', 4108 => '🐣', 4109 => '🐤', 4110 => '🐥', 4111 => '🐦', 4112 => '🐧', 4113 => '🐨', 4114 => '🐩', 4115 => '🐪', 4116 => '🐫', 4117 => '🐬', 4118 => '🐭', 4119 => '🐮', 4120 => '🐯', 4121 => '🐰', 4122 => '🐱', 4123 => '🐲', 4124 => '🐳', 4125 => '🐴', 4126 => '🐵', 4127 => '🐶', 4128 => '🐷', 4129 => '🐸', 4130 => '🐹', 4131 => '🐺', 4132 => '🐻', 4133 => '🐼', 4134 => '🐽', 4135 => '🐾', 4136 => '👀', 4137 => '👂', 4138 => '👃', 4139 => '👄', 4140 => '👅', 4141 => '👆', 4142 => '👇', 4143 => '👈', 4144 => '👉', 4145 => '👊', 4146 => '👋', 4147 => '👌', 4148 => '👍', 4149 => '👎', 4150 => '👏', 4151 => '👐', 4152 => '👑', 4153 => '👒', 4154 => '👓', 4155 => '👔', 4156 => '👕', 4157 => '👖', 4158 => '👗', 4159 => '👘', 4160 => '👙', 4161 => '👚', 4162 => '👛', 4163 => '👜', 4164 => '👝', 4165 => '👞', 4166 => '👟', 4167 => '👠', 4168 => '👡', 4169 => '👢', 4170 => '👣', 4171 => '👤', 4172 => '👥', 4173 => '👦', 4174 => '👧', 4175 => '👨', 4176 => '👩', 4177 => '👪', 4178 => '👫', 4179 => '👬', 4180 => '👭', 4181 => '👮', 4182 => '👯', 4183 => '👰', 4184 => '👱', 4185 => '👲', 4186 => '👳', 4187 => '👴', 4188 => '👵', 4189 => '👶', 4190 => '👷', 4191 => '👸', 4192 => '👹', 4193 => '👺', 4194 => '👻', 4195 => '👼', 4196 => '👽', 4197 => '👾', 4198 => '👿', 4199 => '💀', 4200 => '💁', 4201 => '💂', 4202 => '💃', 4203 => '💄', 4204 => '💅', 4205 => '💆', 4206 => '💇', 4207 => '💈', 4208 => '💉', 4209 => '💊', 4210 => '💋', 4211 => '💌', 4212 => '💍', 4213 => '💎', 4214 => '💏', 4215 => '💐', 4216 => '💑', 4217 => '💒', 4218 => '💓', 4219 => '💔', 4220 => '💕', 4221 => '💖', 4222 => '💗', 4223 => '💘', 4224 => '💙', 4225 => '💚', 4226 => '💛', 4227 => '💜', 4228 => '💝', 4229 => '💞', 4230 => '💟', 4231 => '💠', 4232 => '💡', 4233 => '💢', 4234 => '💣', 4235 => '💤', 4236 => '💥', 4237 => '💦', 4238 => '💧', 4239 => '💨', 4240 => '💩', 4241 => '💪', 4242 => '💫', 4243 => '💬', 4244 => '💭', 4245 => '💮', 4246 => '💯', 4247 => '💰', 4248 => '💱', 4249 => '💲', 4250 => '💳', 4251 => '💴', 4252 => '💵', 4253 => '💶', 4254 => '💷', 4255 => '💸', 4256 => '💹', 4257 => '💺', 4258 => '💻', 4259 => '💼', 4260 => '💽', 4261 => '💾', 4262 => '💿', 4263 => '📀', 4264 => '📁', 4265 => '📂', 4266 => '📃', 4267 => '📄', 4268 => '📅', 4269 => '📆', 4270 => '📇', 4271 => '📈', 4272 => '📉', 4273 => '📊', 4274 => '📋', 4275 => '📌', 4276 => '📍', 4277 => '📎', 4278 => '📏', 4279 => '📐', 4280 => '📑', 4281 => '📒', 4282 => '📓', 4283 => '📔', 4284 => '📕', 4285 => '📖', 4286 => '📗', 4287 => '📘', 4288 => '📙', 4289 => '📚', 4290 => '📛', 4291 => '📜', 4292 => '📝', 4293 => '📞', 4294 => '📟', 4295 => '📠', 4296 => '📡', 4297 => '📢', 4298 => '📣', 4299 => '📤', 4300 => '📥', 4301 => '📦', 4302 => '📧', 4303 => '📨', 4304 => '📩', 4305 => '📪', 4306 => '📫', 4307 => '📬', 4308 => '📭', 4309 => '📮', 4310 => '📯', 4311 => '📰', 4312 => '📱', 4313 => '📲', 4314 => '📳', 4315 => '📴', 4316 => '📵', 4317 => '📶', 4318 => '📷', 4319 => '📹', 4320 => '📺', 4321 => '📻', 4322 => '📼', 4323 => '🔀', 4324 => '🔁', 4325 => '🔂', 4326 => '🔃', 4327 => '🔄', 4328 => '🔅', 4329 => '🔆', 4330 => '🔇', 4331 => '🔈', 4332 => '🔉', 4333 => '🔊', 4334 => '🔋', 4335 => '🔌', 4336 => '🔍', 4337 => '🔎', 4338 => '🔏', 4339 => '🔐', 4340 => '🔑', 4341 => '🔒', 4342 => '🔓', 4343 => '🔔', 4344 => '🔕', 4345 => '🔖', 4346 => '🔗', 4347 => '🔘', 4348 => '🔙', 4349 => '🔚', 4350 => '🔛', 4351 => '🔜', 4352 => '🔝', 4353 => '🔞', 4354 => '🔟', 4355 => '🔠', 4356 => '🔡', 4357 => '🔢', 4358 => '🔣', 4359 => '🔤', 4360 => '🔥', 4361 => '🔦', 4362 => '🔧', 4363 => '🔨', 4364 => '🔩', 4365 => '🔪', 4366 => '🔫', 4367 => '🔬', 4368 => '🔭', 4369 => '🔮', 4370 => '🔯', 4371 => '🔰', 4372 => '🔱', 4373 => '🔲', 4374 => '🔳', 4375 => '🔴', 4376 => '🔵', 4377 => '🔶', 4378 => '🔷', 4379 => '🔸', 4380 => '🔹', 4381 => '🔺', 4382 => '🔻', 4383 => '🔼', 4384 => '🔽', 4385 => '🕐', 4386 => '🕑', 4387 => '🕒', 4388 => '🕓', 4389 => '🕔', 4390 => '🕕', 4391 => '🕖', 4392 => '🕗', 4393 => '🕘', 4394 => '🕙', 4395 => '🕚', 4396 => '🕛', 4397 => '🕜', 4398 => '🕝', 4399 => '🕞', 4400 => '🕟', 4401 => '🕠', 4402 => '🕡', 4403 => '🕢', 4404 => '🕣', 4405 => '🕤', 4406 => '🕥', 4407 => '🕦', 4408 => '🕧', 4409 => '🗻', 4410 => '🗼', 4411 => '🗽', 4412 => '🗾', 4413 => '🗿', 4414 => '😁', 4415 => '😂', 4416 => '😃', 4417 => '😄', 4418 => '😅', 4419 => '😆', 4420 => '😇', 4421 => '😈', 4422 => '😉', 4423 => '😊', 4424 => '😋', 4425 => '😌', 4426 => '😍', 4427 => '😎', 4428 => '😏', 4429 => '😐', 4430 => '😒', 4431 => '😓', 4432 => '😔', 4433 => '😖', 4434 => '😘', 4435 => '😚', 4436 => '😜', 4437 => '😝', 4438 => '😞', 4439 => '😠', 4440 => '😡', 4441 => '😢', 4442 => '😣', 4443 => '😤', 4444 => '😥', 4445 => '😨', 4446 => '😩', 4447 => '😪', 4448 => '😫', 4449 => '😭', 4450 => '😰', 4451 => '😱', 4452 => '😲', 4453 => '😳', 4454 => '😵', 4455 => '😶', 4456 => '😷', 4457 => '😸', 4458 => '😹', 4459 => '😺', 4460 => '😻', 4461 => '😼', 4462 => '😽', 4463 => '😾', 4464 => '😿', 4465 => '🙀', 4466 => '🙅', 4467 => '🙆', 4468 => '🙇', 4469 => '🙈', 4470 => '🙉', 4471 => '🙊', 4472 => '🙋', 4473 => '🙌', 4474 => '🙍', 4475 => '🙎', 4476 => '🙏', 4477 => '🚀', 4478 => '🚁', 4479 => '🚂', 4480 => '🚃', 4481 => '🚄', 4482 => '🚅', 4483 => '🚆', 4484 => '🚇', 4485 => '🚈', 4486 => '🚉', 4487 => '🚊', 4488 => '🚋', 4489 => '🚌', 4490 => '🚍', 4491 => '🚎', 4492 => '🚏', 4493 => '🚐', 4494 => '🚑', 4495 => '🚒', 4496 => '🚓', 4497 => '🚔', 4498 => '🚕', 4499 => '🚖', 4500 => '🚗', 4501 => '🚘', 4502 => '🚙', 4503 => '🚚', 4504 => '🚛', 4505 => '🚜', 4506 => '🚝', 4507 => '🚞', 4508 => '🚟', 4509 => '🚠', 4510 => '🚡', 4511 => '🚢', 4512 => '🚣', 4513 => '🚤', 4514 => '🚥', 4515 => '🚦', 4516 => '🚧', 4517 => '🚨', 4518 => '🚩', 4519 => '🚪', 4520 => '🚫', 4521 => '🚬', 4522 => '🚭', 4523 => '🚮', 4524 => '🚯', 4525 => '🚰', 4526 => '🚱', 4527 => '🚲', 4528 => '🚳', 4529 => '🚴', 4530 => '🚵', 4531 => '🚶', 4532 => '🚷', 4533 => '🚸', 4534 => '🚹', 4535 => '🚺', 4536 => '🚻', 4537 => '🚼', 4538 => '🚽', 4539 => '🚾', 4540 => '🚿', 4541 => '🛀', 4542 => '🛁', 4543 => '🛂', 4544 => '🛃', 4545 => '🛄', 4546 => '🛅', 4547 => '🜀', 4548 => '🜁', 4549 => '🜂', 4550 => '🜃', 4551 => '🜄', 4552 => '🜅', 4553 => '🜆', 4554 => '🜇', 4555 => '🜈', 4556 => '🜉', 4557 => '🜊', 4558 => '🜋', 4559 => '🜌', 4560 => '🜍', 4561 => '🜎', 4562 => '🜏', 4563 => '🜐', 4564 => '🜑', 4565 => '🜒', 4566 => '🜓', 4567 => '🜔', 4568 => '🜕', 4569 => '🜖', 4570 => '🜗', 4571 => '🜘', 4572 => '🜙', 4573 => '🜚', 4574 => '🜛', 4575 => '🜜', 4576 => '🜝', 4577 => '🜞', 4578 => '🜟', 4579 => '🜠', 4580 => '🜡', 4581 => '🜢', 4582 => '🜣', 4583 => '🜤', 4584 => '🜥', 4585 => '🜦', 4586 => '🜧', 4587 => '🜨', 4588 => '🜩', 4589 => '🜪', 4590 => '🜫', 4591 => '🜬', 4592 => '🜭', 4593 => '🜮', 4594 => '🜯', 4595 => '🜰', 4596 => '🜱', 4597 => '🜲', 4598 => '🜳', 4599 => '🜴', 4600 => '🜵', 4601 => '🜶', 4602 => '🜷', 4603 => '🜸', 4604 => '🜹', 4605 => '🜺', 4606 => '🜻', 4607 => '🜼', 4608 => '🜽', 4609 => '🜾', 4610 => '🜿', 4611 => '🝀', 4612 => '🝁', 4613 => '🝂', 4614 => '🝃', 4615 => '🝄', 4616 => '🝅', 4617 => '🝆', 4618 => '🝇', 4619 => '🝈', 4620 => '🝉', 4621 => '🝊', 4622 => '🝋', 4623 => '🝌', 4624 => '🝍', 4625 => '🝎', 4626 => '🝏', 4627 => '🝐', 4628 => '🝑', 4629 => '🝒', 4630 => '🝓', 4631 => '🝔', 4632 => '🝕', 4633 => '🝖', 4634 => '🝗', 4635 => '🝘', 4636 => '🝙', 4637 => '🝚', 4638 => '🝛', 4639 => '🝜', 4640 => '🝝', 4641 => '🝞', 4642 => '🝟', 4643 => '🝠', 4644 => '🝡', 4645 => '🝢', 4646 => '🝣', 4647 => '🝤', 4648 => '🝥', 4649 => '🝦', 4650 => '🝧', 4651 => '🝨', 4652 => '🝩', 4653 => '🝪', 4654 => '🝫', 4655 => '🝬', 4656 => '🝭', 4657 => '🝮', 4658 => '🝯', 4659 => '🝰', 4660 => '🝱', 4661 => '🝲', 4662 => '🝳', 4663 => '㆐', 4664 => '㆑', 4665 => '', 4666 => '�', 4667 => '৴', 4668 => '৵', 4669 => '৶', 4670 => '৷', 4671 => '৸', 4672 => '৹', 4673 => '୲', 4674 => '୳', 4675 => '୴', 4676 => '୵', 4677 => '୶', 4678 => '୷', 4679 => '꠰', 4680 => '꠱', 4681 => '꠲', 4682 => '꠳', 4683 => '꠴', 4684 => '꠵', 4685 => '௰', 4686 => '௱', 4687 => '௲', 4688 => '൰', 4689 => '൱', 4690 => '൲', 4691 => '൳', 4692 => '൴', 4693 => '൵', 4694 => '፲', 4695 => '፳', 4696 => '፴', 4697 => '፵', 4698 => '፶', 4699 => '፷', 4700 => '፸', 4701 => '፹', 4702 => '፺', 4703 => '፻', 4704 => '፼', 4705 => 'ↀ', 4706 => 'ↁ', 4707 => 'ↂ', 4708 => 'ↆ', 4709 => 'ↇ', 4710 => 'ↈ', 4711 => '𐹩', 4712 => '𐹪', 4713 => '𐹫', 4714 => '𐹬', 4715 => '𐹭', 4716 => '𐹮', 4717 => '𐹯', 4718 => '𐹰', 4719 => '𐹱', 4720 => '𐹲', 4721 => '𐹳', 4722 => '𐹴', 4723 => '𐹵', 4724 => '𐹶', 4725 => '𐹷', 4726 => '𐹸', 4727 => '𐹹', 4728 => '𐹺', 4729 => '𐹻', 4730 => '𐹼', 4731 => '𐹽', 4732 => '𐹾', 4733 => '⳽', 4734 => '𐌢', 4735 => '𐌣', 4736 => '𐄐', 4737 => '𐄑', 4738 => '𐄒', 4739 => '𐄓', 4740 => '𐄔', 4741 => '𐄕', 4742 => '𐄖', 4743 => '𐄗', 4744 => '𐄘', 4745 => '𐄙', 4746 => '𐄚', 4747 => '𐄛', 4748 => '𐄜', 4749 => '𐄝', 4750 => '𐄞', 4751 => '𐄟', 4752 => '𐄠', 4753 => '𐄡', 4754 => '𐄢', 4755 => '𐄣', 4756 => '𐄤', 4757 => '𐄥', 4758 => '𐄦', 4759 => '𐄧', 4760 => '𐄨', 4761 => '𐄩', 4762 => '𐄪', 4763 => '𐄫', 4764 => '𐄬', 4765 => '𐄭', 4766 => '𐄮', 4767 => '𐄯', 4768 => '𐄰', 4769 => '𐄱', 4770 => '𐄲', 4771 => '𐄳', 4772 => '𐅀', 4773 => '𐅁', 4774 => '𐅄', 4775 => '𐅅', 4776 => '𐅆', 4777 => '𐅇', 4778 => '𐅉', 4779 => '𐅊', 4780 => '𐅋', 4781 => '𐅌', 4782 => '𐅍', 4783 => '𐅎', 4784 => '𐅐', 4785 => '𐅑', 4786 => '𐅒', 4787 => '𐅓', 4788 => '𐅔', 4789 => '𐅕', 4790 => '𐅖', 4791 => '𐅗', 4792 => '𐅠', 4793 => '𐅡', 4794 => '𐅢', 4795 => '𐅣', 4796 => '𐅤', 4797 => '𐅥', 4798 => '𐅦', 4799 => '𐅧', 4800 => '𐅨', 4801 => '𐅩', 4802 => '𐅪', 4803 => '𐅫', 4804 => '𐅬', 4805 => '𐅭', 4806 => '𐅮', 4807 => '𐅯', 4808 => '𐅰', 4809 => '𐅱', 4810 => '𐅲', 4811 => '𐅴', 4812 => '𐅵', 4813 => '𐅶', 4814 => '𐅷', 4815 => '𐅸', 4816 => '𐏓', 4817 => '𐏔', 4818 => '𐏕', 4819 => '𐩾', 4820 => '𐩿', 4821 => '𐤗', 4822 => '𐤘', 4823 => '𐤙', 4824 => '𐡛', 4825 => '𐡜', 4826 => '𐡝', 4827 => '𐡞', 4828 => '𐡟', 4829 => '𐭜', 4830 => '𐭝', 4831 => '𐭞', 4832 => '𐭟', 4833 => '𐭼', 4834 => '𐭽', 4835 => '𐭾', 4836 => '𐭿', 4837 => '𑁛', 4838 => '𑁜', 4839 => '𑁝', 4840 => '𑁞', 4841 => '𑁟', 4842 => '𑁠', 4843 => '𑁡', 4844 => '𑁢', 4845 => '𑁣', 4846 => '𑁤', 4847 => '𑁥', 4848 => '𐩄', 4849 => '𐩅', 4850 => '𐩆', 4851 => '𐩇', 4852 => '𒐲', 4853 => '𒐳', 4854 => '𒑖', 4855 => '𒑗', 4856 => '𒑚', 4857 => '𒑛', 4858 => '𒑜', 4859 => '𒑝', 4860 => '𒑞', 4861 => '𒑟', 4862 => '𒑠', 4863 => '𒑡', 4864 => '𒑢', 4865 => '𝍩', 4866 => '𝍪', 4867 => '𝍫', 4868 => '𝍬', 4869 => '𝍭', 4870 => '𝍮', 4871 => '𝍯', 4872 => '𝍰', 4873 => '𝍱', 4874 => 'ː', 4875 => 'ˑ', 4876 => 'ॱ', 4877 => 'ๆ', 4878 => 'ໆ', 4879 => 'ᪧ', 4880 => 'ꧏ', 4881 => 'ꩰ', 4882 => 'ꫝ', 4883 => 'ゝ', 4884 => 'ー', 4885 => 'ヽ', 4886 => '¤', 4887 => '¢', 4888 => '$', 4889 => '£', 4890 => '¥', 4891 => '؋', 4892 => '৲', 4893 => '৳', 4894 => '৻', 4895 => '૱', 4896 => '꠸', 4897 => '௹', 4898 => '฿', 4899 => '៛', 4900 => '₠', 4901 => '₡', 4902 => '₢', 4903 => '₣', 4904 => '₤', 4905 => '₥', 4906 => '₦', 4907 => '₧', 4908 => '₩', 4909 => '₪', 4910 => '₫', 4911 => '€', 4912 => '₭', 4913 => '₮', 4914 => '₯', 4915 => '₰', 4916 => '₱', 4917 => '₲', 4918 => '₳', 4919 => '₴', 4920 => '₵', 4921 => '₶', 4922 => '₷', 4923 => '₸', 4924 => '₹', 4925 => '0', 4926 => '1', 4927 => '2', 4928 => '3', 4929 => '4', 4930 => '5', 4931 => '6', 4932 => '7', 4933 => '8', 4934 => '9', 4935 => 'A', 4936 => 'ᴀ', 4937 => 'Ⱥ', 4938 => 'ᶏ', 4939 => 'ᴁ', 4940 => 'ᴂ', 4941 => 'Ɐ', 4942 => 'Ɑ', 4943 => 'ᶐ', 4944 => 'Ɒ', 4945 => 'B', 4946 => 'ʙ', 4947 => 'Ƀ', 4948 => 'ᴯ', 4949 => 'ᴃ', 4950 => 'ᵬ', 4951 => 'ᶀ', 4952 => 'Ɓ', 4953 => 'Ƃ', 4954 => 'C', 4955 => 'ᴄ', 4956 => 'Ȼ', 4957 => 'Ƈ', 4958 => 'ɕ', 4959 => 'Ↄ', 4960 => 'Ꜿ', 4961 => 'D', 4962 => 'ᴅ', 4963 => 'ᴆ', 4964 => 'ᵭ', 4965 => 'ᶁ', 4966 => 'Ɖ', 4967 => 'Ɗ', 4968 => 'ᶑ', 4969 => 'Ƌ', 4970 => 'ȡ', 4971 => 'ꝱ', 4972 => 'ẟ', 4973 => 'E', 4974 => 'ᴇ', 4975 => 'Ɇ', 4976 => 'ᶒ', 4977 => 'ⱸ', 4978 => 'Ǝ', 4979 => 'ⱻ', 4980 => 'Ə', 4981 => 'ᶕ', 4982 => 'Ɛ', 4983 => 'ᶓ', 4984 => 'ɘ', 4985 => 'ɚ', 4986 => 'ɜ', 4987 => 'ᶔ', 4988 => 'ᴈ', 4989 => 'ɝ', 4990 => 'ɞ', 4991 => 'ʚ', 4992 => 'ɤ', 4993 => 'F', 4994 => 'ꜰ', 4995 => 'ᵮ', 4996 => 'ᶂ', 4997 => 'Ƒ', 4998 => 'Ⅎ', 4999 => 'ꟻ', 5000 => 'G', 5001 => 'ɡ', 5002 => 'ɢ', 5003 => 'Ǥ', 5004 => 'ᶃ', 5005 => 'Ɠ', 5006 => 'ʛ', 5007 => 'ᵷ', 5008 => 'Ꝿ', 5009 => 'Ɣ', 5010 => 'Ƣ', 5011 => 'H', 5012 => 'ʜ', 5013 => 'Ƕ', 5014 => 'ɦ', 5015 => 'Ⱨ', 5016 => 'Ⱶ', 5017 => 'Ꜧ', 5018 => 'ɧ', 5019 => 'ʻ', 5020 => 'ʽ', 5021 => 'I', 5022 => 'ı', 5023 => 'ɪ', 5024 => 'ꟾ', 5025 => 'ᴉ', 5026 => 'Ɨ', 5027 => 'ᵻ', 5028 => 'ᶖ', 5029 => 'Ɩ', 5030 => 'ᵼ', 5031 => 'J', 5032 => 'ȷ', 5033 => 'ᴊ', 5034 => 'Ɉ', 5035 => 'ʝ', 5036 => 'ɟ', 5037 => 'ʄ', 5038 => 'K', 5039 => 'ᴋ', 5040 => 'ᶄ', 5041 => 'Ƙ', 5042 => 'Ⱪ', 5043 => 'Ꝁ', 5044 => 'Ꝃ', 5045 => 'Ꝅ', 5046 => 'ʞ', 5047 => 'L', 5048 => 'ʟ', 5049 => 'Ꝇ', 5050 => 'ᴌ', 5051 => 'Ꝉ', 5052 => 'Ƚ', 5053 => 'Ⱡ', 5054 => 'Ɫ', 5055 => 'ɬ', 5056 => 'ᶅ', 5057 => 'ɭ', 5058 => 'ꞎ', 5059 => 'ȴ', 5060 => 'ꝲ', 5061 => 'ɮ', 5062 => 'Ꞁ', 5063 => 'ƛ', 5064 => 'ʎ', 5065 => 'M', 5066 => 'ᴍ', 5067 => 'ᵯ', 5068 => 'ᶆ', 5069 => 'Ɱ', 5070 => 'ꟽ', 5071 => 'ꟿ', 5072 => 'ꝳ', 5073 => 'N', 5074 => 'ɴ', 5075 => 'ᴻ', 5076 => 'ᴎ', 5077 => 'ᵰ', 5078 => 'Ɲ', 5079 => 'Ƞ', 5080 => 'Ꞑ', 5081 => 'ᶇ', 5082 => 'ɳ', 5083 => 'ȵ', 5084 => 'ꝴ', 5085 => 'Ŋ', 5086 => 'O', 5087 => 'ᴏ', 5088 => 'ᴑ', 5089 => 'ɶ', 5090 => 'ᴔ', 5091 => 'ᴓ', 5092 => 'Ɔ', 5093 => 'ᴐ', 5094 => 'ᴒ', 5095 => 'ᶗ', 5096 => 'Ꝍ', 5097 => 'ᴖ', 5098 => 'ᴗ', 5099 => 'ⱺ', 5100 => 'Ɵ', 5101 => 'Ꝋ', 5102 => 'ɷ', 5103 => 'Ȣ', 5104 => 'ᴕ', 5105 => 'P', 5106 => 'ᴘ', 5107 => 'Ᵽ', 5108 => 'Ꝑ', 5109 => 'ᵱ', 5110 => 'ᶈ', 5111 => 'Ƥ', 5112 => 'Ꝓ', 5113 => 'Ꝕ', 5114 => 'ꟼ', 5115 => 'ɸ', 5116 => 'ⱷ', 5117 => 'Q', 5118 => 'Ꝗ', 5119 => 'Ꝙ', 5120 => 'ʠ', 5121 => 'Ɋ', 5122 => 'ĸ', 5123 => 'R', 5124 => 'Ʀ', 5125 => 'Ꝛ', 5126 => 'ᴙ', 5127 => 'Ɍ', 5128 => 'ᵲ', 5129 => 'ɹ', 5130 => 'ᴚ', 5131 => 'ɺ', 5132 => 'ᶉ', 5133 => 'ɻ', 5134 => 'ⱹ', 5135 => 'ɼ', 5136 => 'Ɽ', 5137 => 'ɾ', 5138 => 'ᵳ', 5139 => 'ɿ', 5140 => 'ʁ', 5141 => 'ꝵ', 5142 => 'ꝶ', 5143 => 'Ꝝ', 5144 => 'S', 5145 => 'ꜱ', 5146 => 'ᵴ', 5147 => 'ᶊ', 5148 => 'ʂ', 5149 => 'Ȿ', 5150 => 'ẜ', 5151 => 'ẝ', 5152 => 'Ʃ', 5153 => 'ᶋ', 5154 => 'ƪ', 5155 => 'ʅ', 5156 => 'ᶘ', 5157 => 'ʆ', 5158 => 'T', 5159 => 'ᴛ', 5160 => 'Ŧ', 5161 => 'Ⱦ', 5162 => 'ᵵ', 5163 => 'ƫ', 5164 => 'Ƭ', 5165 => 'Ʈ', 5166 => 'ȶ', 5167 => 'ꝷ', 5168 => 'ʇ', 5169 => 'U', 5170 => 'ᴜ', 5171 => 'ᴝ', 5172 => 'ᴞ', 5173 => 'ᵫ', 5174 => 'Ʉ', 5175 => 'ᵾ', 5176 => 'ᶙ', 5177 => 'Ɥ', 5178 => 'ʮ', 5179 => 'ʯ', 5180 => 'Ɯ', 5181 => 'ꟺ', 5182 => 'ᴟ', 5183 => 'ɰ', 5184 => 'Ʊ', 5185 => 'ᵿ', 5186 => 'V', 5187 => 'ᴠ', 5188 => 'Ꝟ', 5189 => 'ᶌ', 5190 => 'Ʋ', 5191 => 'ⱱ', 5192 => 'ⱴ', 5193 => 'Ỽ', 5194 => 'Ʌ', 5195 => 'W', 5196 => 'ᴡ', 5197 => 'Ⱳ', 5198 => 'ʍ', 5199 => 'X', 5200 => 'ᶍ', 5201 => 'Y', 5202 => 'ʏ', 5203 => 'Ɏ', 5204 => 'Ƴ', 5205 => 'Ỿ', 5206 => 'Z', 5207 => 'ᴢ', 5208 => 'Ƶ', 5209 => 'ᵶ', 5210 => 'ᶎ', 5211 => 'Ȥ', 5212 => 'ʐ', 5213 => 'ʑ', 5214 => 'Ɀ', 5215 => 'Ⱬ', 5216 => 'Ꝣ', 5217 => 'Ʒ', 5218 => 'ᴣ', 5219 => 'Ƹ', 5220 => 'ᶚ', 5221 => 'ƺ', 5222 => 'ʓ', 5223 => 'Ȝ', 5224 => 'Þ', 5225 => 'Ꝥ', 5226 => 'Ꝧ', 5227 => 'Ƿ', 5228 => 'Ꝩ', 5229 => 'Ꝫ', 5230 => 'Ꝭ', 5231 => 'Ꝯ', 5232 => 'ꝸ', 5233 => 'ƻ', 5234 => 'Ꜫ', 5235 => 'Ꜭ', 5236 => 'Ꜯ', 5237 => 'Ƨ', 5238 => 'Ƽ', 5239 => 'Ƅ', 5240 => 'ʔ', 5241 => 'Ɂ', 5242 => 'ˀ', 5243 => 'ʼ', 5244 => 'ˮ', 5245 => 'ʾ', 5246 => 'Ꜣ', 5247 => 'Ꞌ', 5248 => 'ʕ', 5249 => 'ʿ', 5250 => 'ˁ', 5251 => 'ᴤ', 5252 => 'ᴥ', 5253 => 'Ꜥ', 5254 => 'ʡ', 5255 => 'ʢ', 5256 => 'ʖ', 5257 => 'ǀ', 5258 => 'ǁ', 5259 => 'ǂ', 5260 => 'ǃ', 5261 => 'ʗ', 5262 => 'ʘ', 5263 => 'ʬ', 5264 => 'ʭ', 5265 => 'Α', 5266 => 'Β', 5267 => 'Γ', 5268 => 'ᴦ', 5269 => 'Δ', 5270 => 'Ε', 5271 => 'Ϝ', 5272 => 'Ͷ', 5273 => 'Ϛ', 5274 => 'Ζ', 5275 => 'Ͱ', 5276 => 'Η', 5277 => 'Θ', 5278 => 'Ι', 5279 => 'ϳ', 5280 => 'Κ', 5281 => 'Λ', 5282 => 'ᴧ', 5283 => 'Μ', 5284 => 'Ν', 5285 => 'Ξ', 5286 => 'Ο', 5287 => 'Π', 5288 => 'ᴨ', 5289 => 'Ϻ', 5290 => 'Ϟ', 5291 => 'Ϙ', 5292 => 'Ρ', 5293 => 'ᴩ', 5294 => 'ϼ', 5295 => 'Σ', 5296 => 'Ͼ', 5297 => 'Ͻ', 5298 => 'Ͽ', 5299 => 'Τ', 5300 => 'Υ', 5301 => 'Φ', 5302 => 'Χ', 5303 => 'Ψ', 5304 => 'ᴪ', 5305 => 'Ω', 5306 => 'Ϡ', 5307 => 'Ͳ', 5308 => 'Ϸ', 5309 => 'Ⲁ', 5310 => 'Ⲃ', 5311 => 'Ⲅ', 5312 => 'Ⲇ', 5313 => 'Ⲉ', 5314 => 'Ⲷ', 5315 => 'Ⲋ', 5316 => 'Ⲍ', 5317 => 'Ⲏ', 5318 => 'Ⲑ', 5319 => 'Ⲓ', 5320 => 'Ⲕ', 5321 => 'Ⲹ', 5322 => 'Ⲗ', 5323 => 'Ⲙ', 5324 => 'Ⲛ', 5325 => 'Ⲻ', 5326 => 'Ⲽ', 5327 => 'Ⲝ', 5328 => 'Ⲟ', 5329 => 'Ⲡ', 5330 => 'Ⲣ', 5331 => 'Ⲥ', 5332 => 'Ⲧ', 5333 => 'Ⲩ', 5334 => 'Ⲫ', 5335 => 'Ⲭ', 5336 => 'Ⲯ', 5337 => 'Ⲱ', 5338 => 'Ⲿ', 5339 => 'Ⳁ', 5340 => 'Ϣ', 5341 => 'Ⳬ', 5342 => 'Ⳃ', 5343 => 'Ⳅ', 5344 => 'Ⳇ', 5345 => 'Ϥ', 5346 => 'Ϧ', 5347 => 'Ⳉ', 5348 => 'Ϩ', 5349 => 'Ⳋ', 5350 => 'Ⳍ', 5351 => 'Ⳏ', 5352 => 'Ⳑ', 5353 => 'Ⳓ', 5354 => 'Ⳕ', 5355 => 'Ϫ', 5356 => 'Ⳮ', 5357 => 'Ⳗ', 5358 => 'Ϭ', 5359 => 'Ⳙ', 5360 => 'Ⳛ', 5361 => 'Ⳝ', 5362 => 'Ϯ', 5363 => 'Ⲳ', 5364 => 'Ⲵ', 5365 => 'Ⳟ', 5366 => 'Ⳡ', 5367 => 'Ⳣ', 5368 => 'А', 5369 => 'Ӑ', 5370 => 'Ӓ', 5371 => 'Ә', 5372 => 'Ӛ', 5373 => 'Ӕ', 5374 => 'Б', 5375 => 'В', 5376 => 'Г', 5377 => 'Ғ', 5378 => 'Ӻ', 5379 => 'Ҕ', 5380 => 'Ӷ', 5381 => 'Д', 5382 => 'Ԁ', 5383 => 'Ꚁ', 5384 => 'Ђ', 5385 => 'Ꙣ', 5386 => 'Ԃ', 5387 => 'Ѓ', 5388 => 'Ҙ', 5389 => 'Е', 5390 => 'Ӗ', 5391 => 'Є', 5392 => 'Ж', 5393 => 'Ꚅ', 5394 => 'Ӝ', 5395 => 'Җ', 5396 => 'З', 5397 => 'Ꙁ', 5398 => 'Ԅ', 5399 => 'Ԑ', 5400 => 'Ӟ', 5401 => 'Ꙃ', 5402 => 'Ѕ', 5403 => 'Ꙅ', 5404 => 'Ӡ', 5405 => 'Ꚉ', 5406 => 'Ԇ', 5407 => 'Ꚃ', 5408 => 'И', 5409 => 'Ҋ', 5410 => 'Ӥ', 5411 => 'І', 5412 => 'Ꙇ', 5413 => 'Ї', 5414 => 'Й', 5415 => 'Ј', 5416 => 'Ꙉ', 5417 => 'К', 5418 => 'Қ', 5419 => 'Ӄ', 5420 => 'Ҡ', 5421 => 'Ҟ', 5422 => 'Ҝ', 5423 => 'Ԟ', 5424 => 'Ԛ', 5425 => 'Л', 5426 => 'ᴫ', 5427 => 'Ӆ', 5428 => 'Ԓ', 5429 => 'Ԡ', 5430 => 'Љ', 5431 => 'Ꙥ', 5432 => 'Ԉ', 5433 => 'Ԕ', 5434 => 'М', 5435 => 'Ӎ', 5436 => 'Ꙧ', 5437 => 'Н', 5438 => 'Ӊ', 5439 => 'Ң', 5440 => 'Ӈ', 5441 => 'Ԣ', 5442 => 'Ҥ', 5443 => 'Њ', 5444 => 'Ԋ', 5445 => 'О', 5446 => 'Ӧ', 5447 => 'Ө', 5448 => 'Ӫ', 5449 => 'П', 5450 => 'Ԥ', 5451 => 'Ҧ', 5452 => 'Ҁ', 5453 => 'Р', 5454 => 'Ҏ', 5455 => 'Ԗ', 5456 => 'С', 5457 => 'Ԍ', 5458 => 'Ҫ', 5459 => 'Т', 5460 => 'Ꚍ', 5461 => 'Ԏ', 5462 => 'Ҭ', 5463 => 'Ꚋ', 5464 => 'Ћ', 5465 => 'Ќ', 5466 => 'У', 5467 => 'Ў', 5468 => 'Ӱ', 5469 => 'Ӳ', 5470 => 'Ү', 5471 => 'Ұ', 5472 => 'Ꙋ', 5473 => 'Ѹ', 5474 => 'Ф', 5475 => 'Х', 5476 => 'Ӽ', 5477 => 'Ӿ', 5478 => 'Ҳ', 5479 => 'Һ', 5480 => 'Ԧ', 5481 => 'Ꚕ', 5482 => 'Ѡ', 5483 => 'Ѿ', 5484 => 'Ꙍ', 5485 => 'Ѽ', 5486 => 'Ѻ', 5487 => 'Ц', 5488 => 'Ꙡ', 5489 => 'Ꚏ', 5490 => 'Ҵ', 5491 => 'Ꚑ', 5492 => 'Ч', 5493 => 'Ꚓ', 5494 => 'Ӵ', 5495 => 'Ҷ', 5496 => 'Ӌ', 5497 => 'Ҹ', 5498 => 'Ꚇ', 5499 => 'Ҽ', 5500 => 'Ҿ', 5501 => 'Џ', 5502 => 'Ш', 5503 => 'Ꚗ', 5504 => 'Щ', 5505 => 'Ꙏ', 5506 => 'ⸯ', 5507 => 'ꙿ', 5508 => 'Ъ', 5509 => 'Ꙑ', 5510 => 'Ы', 5511 => 'Ӹ', 5512 => 'Ь', 5513 => 'Ҍ', 5514 => 'Ѣ', 5515 => 'Ꙓ', 5516 => 'Э', 5517 => 'Ӭ', 5518 => 'Ю', 5519 => 'Ꙕ', 5520 => 'Ꙗ', 5521 => 'Я', 5522 => 'Ԙ', 5523 => 'Ѥ', 5524 => 'Ѧ', 5525 => 'Ꙙ', 5526 => 'Ѫ', 5527 => 'Ꙛ', 5528 => 'Ѩ', 5529 => 'Ꙝ', 5530 => 'Ѭ', 5531 => 'Ѯ', 5532 => 'Ѱ', 5533 => 'Ѳ', 5534 => 'Ѵ', 5535 => 'Ѷ', 5536 => 'Ꙟ', 5537 => 'Ҩ', 5538 => 'Ԝ', 5539 => 'Ӏ', 5540 => 'Ⰰ', 5541 => 'Ⰱ', 5542 => 'Ⰲ', 5543 => 'Ⰳ', 5544 => 'Ⰴ', 5545 => 'Ⰵ', 5546 => 'Ⰶ', 5547 => 'Ⰷ', 5548 => 'Ⰸ', 5549 => 'Ⰹ', 5550 => 'Ⰺ', 5551 => 'Ⰻ', 5552 => 'Ⰼ', 5553 => 'Ⰽ', 5554 => 'Ⰾ', 5555 => 'Ⰿ', 5556 => 'Ⱀ', 5557 => 'Ⱁ', 5558 => 'Ⱂ', 5559 => 'Ⱃ', 5560 => 'Ⱄ', 5561 => 'Ⱅ', 5562 => 'Ⱆ', 5563 => 'Ⱇ', 5564 => 'Ⱈ', 5565 => 'Ⱉ', 5566 => 'Ⱊ', 5567 => 'Ⱋ', 5568 => 'Ⱌ', 5569 => 'Ⱍ', 5570 => 'Ⱎ', 5571 => 'Ⱏ', 5572 => 'Ⱐ', 5573 => 'Ⱑ', 5574 => 'Ⱒ', 5575 => 'Ⱓ', 5576 => 'Ⱔ', 5577 => 'Ⱕ', 5578 => 'Ⱖ', 5579 => 'Ⱗ', 5580 => 'Ⱘ', 5581 => 'Ⱙ', 5582 => 'Ⱚ', 5583 => 'Ⱛ', 5584 => 'Ⱜ', 5585 => 'Ⱝ', 5586 => 'Ⱞ', 5587 => 'ა', 5588 => 'Ⴀ', 5589 => 'ბ', 5590 => 'Ⴁ', 5591 => 'გ', 5592 => 'Ⴂ', 5593 => 'დ', 5594 => 'Ⴃ', 5595 => 'ე', 5596 => 'Ⴄ', 5597 => 'ვ', 5598 => 'Ⴅ', 5599 => 'ზ', 5600 => 'Ⴆ', 5601 => 'ჱ', 5602 => 'Ⴡ', 5603 => 'თ', 5604 => 'Ⴇ', 5605 => 'ი', 5606 => 'Ⴈ', 5607 => 'კ', 5608 => 'Ⴉ', 5609 => 'ლ', 5610 => 'Ⴊ', 5611 => 'მ', 5612 => 'Ⴋ', 5613 => 'ნ', 5614 => 'Ⴌ', 5615 => 'ჲ', 5616 => 'Ⴢ', 5617 => 'ო', 5618 => 'Ⴍ', 5619 => 'პ', 5620 => 'Ⴎ', 5621 => 'ჟ', 5622 => 'Ⴏ', 5623 => 'რ', 5624 => 'Ⴐ', 5625 => 'ს', 5626 => 'Ⴑ', 5627 => 'ტ', 5628 => 'Ⴒ', 5629 => 'ჳ', 5630 => 'Ⴣ', 5631 => 'უ', 5632 => 'Ⴓ', 5633 => 'ფ', 5634 => 'Ⴔ', 5635 => 'ქ', 5636 => 'Ⴕ', 5637 => 'ღ', 5638 => 'Ⴖ', 5639 => 'ყ', 5640 => 'Ⴗ', 5641 => 'შ', 5642 => 'Ⴘ', 5643 => 'ჩ', 5644 => 'Ⴙ', 5645 => 'ც', 5646 => 'Ⴚ', 5647 => 'ძ', 5648 => 'Ⴛ', 5649 => 'წ', 5650 => 'Ⴜ', 5651 => 'ჭ', 5652 => 'Ⴝ', 5653 => 'ხ', 5654 => 'Ⴞ', 5655 => 'ჴ', 5656 => 'Ⴤ', 5657 => 'ჯ', 5658 => 'Ⴟ', 5659 => 'ჰ', 5660 => 'Ⴠ', 5661 => 'ჵ', 5662 => 'Ⴥ', 5663 => 'ჶ', 5664 => 'ჷ', 5665 => 'ჸ', 5666 => 'ჹ', 5667 => 'ჺ', 5668 => 'Ա', 5669 => 'Բ', 5670 => 'Գ', 5671 => 'Դ', 5672 => 'Ե', 5673 => 'Զ', 5674 => 'Է', 5675 => 'Ը', 5676 => 'Թ', 5677 => 'Ժ', 5678 => 'Ի', 5679 => 'Լ', 5680 => 'Խ', 5681 => 'Ծ', 5682 => 'Կ', 5683 => 'Հ', 5684 => 'Ձ', 5685 => 'Ղ', 5686 => 'Ճ', 5687 => 'Մ', 5688 => 'Յ', 5689 => 'Ն', 5690 => 'Շ', 5691 => 'Ո', 5692 => 'Չ', 5693 => 'Պ', 5694 => 'Ջ', 5695 => 'Ռ', 5696 => 'Ս', 5697 => 'Վ', 5698 => 'Տ', 5699 => 'Ր', 5700 => 'Ց', 5701 => 'Ւ', 5702 => 'Փ', 5703 => 'Ք', 5704 => 'Օ', 5705 => 'Ֆ', 5706 => 'ՙ', 5707 => 'א', 5708 => 'ב', 5709 => 'ג', 5710 => 'ד', 5711 => 'ה', 5712 => 'ו', 5713 => 'ז', 5714 => 'ח', 5715 => 'ט', 5716 => 'י', 5717 => 'ך', 5718 => 'ל', 5719 => 'ם', 5720 => 'ן', 5721 => 'ס', 5722 => 'ע', 5723 => 'ף', 5724 => 'ץ', 5725 => 'ק', 5726 => 'ר', 5727 => 'ש', 5728 => 'ת', 5729 => '𐤀', 5730 => '𐤁', 5731 => '𐤂', 5732 => '𐤃', 5733 => '𐤄', 5734 => '𐤅', 5735 => '𐤆', 5736 => '𐤇', 5737 => '𐤈', 5738 => '𐤉', 5739 => '𐤊', 5740 => '𐤋', 5741 => '𐤌', 5742 => '𐤍', 5743 => '𐤎', 5744 => '𐤏', 5745 => '𐤐', 5746 => '𐤑', 5747 => '𐤒', 5748 => '𐤓', 5749 => '𐤔', 5750 => '𐤕', 5751 => 'ࠀ', 5752 => 'ࠁ', 5753 => 'ࠂ', 5754 => 'ࠃ', 5755 => 'ࠄ', 5756 => 'ࠅ', 5757 => 'ࠆ', 5758 => 'ࠇ', 5759 => 'ࠈ', 5760 => 'ࠉ', 5761 => 'ࠊ', 5762 => 'ࠋ', 5763 => 'ࠌ', 5764 => 'ࠍ', 5765 => 'ࠎ', 5766 => 'ࠏ', 5767 => 'ࠐ', 5768 => 'ࠑ', 5769 => 'ࠒ', 5770 => 'ࠓ', 5771 => 'ࠔ', 5772 => 'ࠕ', 5773 => 'ࠚ', 5774 => 'ء', 5775 => 'آ', 5776 => 'أ', 5777 => 'ٲ', 5778 => 'ٱ', 5779 => 'ؤ', 5780 => 'إ', 5781 => 'ٳ', 5782 => 'ݳ', 5783 => 'ݴ', 5784 => 'ئ', 5785 => 'ا', 5786 => 'ٮ', 5787 => 'ب', 5788 => 'ٻ', 5789 => 'پ', 5790 => 'ڀ', 5791 => 'ݐ', 5792 => 'ݑ', 5793 => 'ݒ', 5794 => 'ݓ', 5795 => 'ݔ', 5796 => 'ݕ', 5797 => 'ݖ', 5798 => 'ة', 5799 => 'ت', 5800 => 'ث', 5801 => 'ٹ', 5802 => 'ٺ', 5803 => 'ټ', 5804 => 'ٽ', 5805 => 'ٿ', 5806 => 'ج', 5807 => 'ڃ', 5808 => 'ڄ', 5809 => 'چ', 5810 => 'ڿ', 5811 => 'ڇ', 5812 => 'ح', 5813 => 'خ', 5814 => 'ځ', 5815 => 'ڂ', 5816 => 'څ', 5817 => 'ݗ', 5818 => 'ݘ', 5819 => 'ݮ', 5820 => 'ݯ', 5821 => 'ݲ', 5822 => 'ݼ', 5823 => 'د', 5824 => 'ذ', 5825 => 'ڈ', 5826 => 'ډ', 5827 => 'ڊ', 5828 => 'ڋ', 5829 => 'ڌ', 5830 => 'ڍ', 5831 => 'ڎ', 5832 => 'ڏ', 5833 => 'ڐ', 5834 => 'ۮ', 5835 => 'ݙ', 5836 => 'ݚ', 5837 => 'ر', 5838 => 'ز', 5839 => 'ڑ', 5840 => 'ڒ', 5841 => 'ړ', 5842 => 'ڔ', 5843 => 'ڕ', 5844 => 'ږ', 5845 => 'ڗ', 5846 => 'ژ', 5847 => 'ڙ', 5848 => 'ۯ', 5849 => 'ݛ', 5850 => 'ݫ', 5851 => 'ݬ', 5852 => 'ݱ', 5853 => 'س', 5854 => 'ش', 5855 => 'ښ', 5856 => 'ڛ', 5857 => 'ڜ', 5858 => 'ۺ', 5859 => 'ݜ', 5860 => 'ݭ', 5861 => 'ݰ', 5862 => 'ݽ', 5863 => 'ݾ', 5864 => 'ص', 5865 => 'ض', 5866 => 'ڝ', 5867 => 'ڞ', 5868 => 'ۻ', 5869 => 'ط', 5870 => 'ظ', 5871 => 'ڟ', 5872 => 'ع', 5873 => 'غ', 5874 => 'ڠ', 5875 => 'ۼ', 5876 => 'ݝ', 5877 => 'ݞ', 5878 => 'ݟ', 5879 => 'ف', 5880 => 'ڡ', 5881 => 'ڢ', 5882 => 'ڣ', 5883 => 'ڤ', 5884 => 'ڥ', 5885 => 'ڦ', 5886 => 'ݠ', 5887 => 'ݡ', 5888 => 'ٯ', 5889 => 'ق', 5890 => 'ڧ', 5891 => 'ڨ', 5892 => 'ك', 5893 => 'ک', 5894 => 'ڪ', 5895 => 'ګ', 5896 => 'ڬ', 5897 => 'ݿ', 5898 => 'ڭ', 5899 => 'ڮ', 5900 => 'گ', 5901 => 'ڰ', 5902 => 'ڱ', 5903 => 'ڲ', 5904 => 'ڳ', 5905 => 'ڴ', 5906 => 'ݢ', 5907 => 'ػ', 5908 => 'ؼ', 5909 => 'ݣ', 5910 => 'ݤ', 5911 => 'ل', 5912 => 'ڵ', 5913 => 'ڶ', 5914 => 'ڷ', 5915 => 'ڸ', 5916 => 'ݪ', 5917 => 'م', 5918 => 'ݥ', 5919 => 'ݦ', 5920 => 'ن', 5921 => 'ں', 5922 => 'ڻ', 5923 => 'ڼ', 5924 => 'ڽ', 5925 => 'ڹ', 5926 => 'ݧ', 5927 => 'ݨ', 5928 => 'ݩ', 5929 => 'ه', 5930 => 'ھ', 5931 => 'ہ', 5932 => 'ۃ', 5933 => 'ۿ', 5934 => 'ە', 5935 => 'و', 5936 => 'ۄ', 5937 => 'ۅ', 5938 => 'ۆ', 5939 => 'ۇ', 5940 => 'ۈ', 5941 => 'ۉ', 5942 => 'ۊ', 5943 => 'ۋ', 5944 => 'ۏ', 5945 => 'ݸ', 5946 => 'ݹ', 5947 => 'ى', 5948 => 'ي', 5949 => 'ی', 5950 => 'ۍ', 5951 => 'ێ', 5952 => 'ې', 5953 => 'ۑ', 5954 => 'ؽ', 5955 => 'ؾ', 5956 => 'ؿ', 5957 => 'ؠ', 5958 => 'ݵ', 5959 => 'ݶ', 5960 => 'ݷ', 5961 => 'ے', 5962 => 'ݺ', 5963 => 'ݻ', 5964 => 'ܐ', 5965 => 'ܒ', 5966 => 'ܓ', 5967 => 'ܖ', 5968 => 'ܕ', 5969 => 'ܗ', 5970 => 'ܘ', 5971 => 'ܙ', 5972 => 'ݍ', 5973 => 'ܚ', 5974 => 'ܛ', 5975 => 'ܝ', 5976 => 'ܞ', 5977 => 'ܟ', 5978 => 'ݎ', 5979 => 'ܠ', 5980 => 'ܡ', 5981 => 'ܢ', 5982 => 'ܣ', 5983 => 'ܥ', 5984 => 'ܦ', 5985 => 'ݏ', 5986 => 'ܨ', 5987 => 'ܩ', 5988 => 'ܪ', 5989 => 'ܫ', 5990 => 'ܬ', 5991 => 'ࡀ', 5992 => 'ࡁ', 5993 => 'ࡂ', 5994 => 'ࡃ', 5995 => 'ࡄ', 5996 => 'ࡅ', 5997 => 'ࡆ', 5998 => 'ࡇ', 5999 => 'ࡈ', 6000 => 'ࡉ', 6001 => 'ࡊ', 6002 => 'ࡋ', 6003 => 'ࡌ', 6004 => 'ࡍ', 6005 => 'ࡎ', 6006 => 'ࡏ', 6007 => 'ࡐ', 6008 => 'ࡑ', 6009 => 'ࡒ', 6010 => 'ࡓ', 6011 => 'ࡔ', 6012 => 'ࡕ', 6013 => 'ࡖ', 6014 => 'ࡗ', 6015 => 'ࡘ', 6016 => 'ހ', 6017 => 'ޙ', 6018 => 'ޚ', 6019 => 'ށ', 6020 => 'ނ', 6021 => 'ރ', 6022 => 'ޜ', 6023 => 'ބ', 6024 => 'ޅ', 6025 => 'ކ', 6026 => 'އ', 6027 => 'ޢ', 6028 => 'ޣ', 6029 => 'ވ', 6030 => 'ޥ', 6031 => 'މ', 6032 => 'ފ', 6033 => 'ދ', 6034 => 'ޛ', 6035 => 'ތ', 6036 => 'ޘ', 6037 => 'ޠ', 6038 => 'ޡ', 6039 => 'ލ', 6040 => 'ގ', 6041 => 'ޤ', 6042 => 'ޏ', 6043 => 'ސ', 6044 => 'ޝ', 6045 => 'ޞ', 6046 => 'ޟ', 6047 => 'ޑ', 6048 => 'ޒ', 6049 => 'ޓ', 6050 => 'ޔ', 6051 => 'ޕ', 6052 => 'ޖ', 6053 => 'ޗ', 6054 => 'ޱ', 6055 => 'ߊ', 6056 => 'ߋ', 6057 => 'ߌ', 6058 => 'ߍ', 6059 => 'ߎ', 6060 => 'ߏ', 6061 => 'ߐ', 6062 => 'ߑ', 6063 => 'ߒ', 6064 => 'ߓ', 6065 => 'ߔ', 6066 => 'ߕ', 6067 => 'ߖ', 6068 => 'ߗ', 6069 => 'ߘ', 6070 => 'ߙ', 6071 => 'ߚ', 6072 => 'ߛ', 6073 => 'ߜ', 6074 => 'ߝ', 6075 => 'ߞ', 6076 => 'ߟ', 6077 => 'ߠ', 6078 => 'ߡ', 6079 => 'ߢ', 6080 => 'ߣ', 6081 => 'ߤ', 6082 => 'ߥ', 6083 => 'ߦ', 6084 => 'ߧ', 6085 => 'ߴ', 6086 => 'ߵ', 6087 => 'ⴰ', 6088 => 'ⴱ', 6089 => 'ⴲ', 6090 => 'ⴳ', 6091 => 'ⴴ', 6092 => 'ⴵ', 6093 => 'ⴶ', 6094 => 'ⴷ', 6095 => 'ⴸ', 6096 => 'ⴹ', 6097 => 'ⴺ', 6098 => 'ⴻ', 6099 => 'ⴼ', 6100 => 'ⴽ', 6101 => 'ⴾ', 6102 => 'ⴿ', 6103 => 'ⵀ', 6104 => 'ⵁ', 6105 => 'ⵂ', 6106 => 'ⵃ', 6107 => 'ⵄ', 6108 => 'ⵅ', 6109 => 'ⵆ', 6110 => 'ⵇ', 6111 => 'ⵈ', 6112 => 'ⵉ', 6113 => 'ⵊ', 6114 => 'ⵋ', 6115 => 'ⵌ', 6116 => 'ⵍ', 6117 => 'ⵎ', 6118 => 'ⵏ', 6119 => 'ⵐ', 6120 => 'ⵑ', 6121 => 'ⵒ', 6122 => 'ⵓ', 6123 => 'ⵔ', 6124 => 'ⵕ', 6125 => 'ⵖ', 6126 => 'ⵗ', 6127 => 'ⵘ', 6128 => 'ⵙ', 6129 => 'ⵚ', 6130 => 'ⵛ', 6131 => 'ⵜ', 6132 => 'ⵝ', 6133 => 'ⵞ', 6134 => 'ⵟ', 6135 => 'ⵠ', 6136 => 'ⵡ', 6137 => 'ⵢ', 6138 => 'ⵣ', 6139 => 'ⵤ', 6140 => 'ⵥ', 6141 => 'ⵯ', 6142 => 'ሀ', 6143 => 'ሁ', 6144 => 'ሂ', 6145 => 'ሃ', 6146 => 'ሄ', 6147 => 'ህ', 6148 => 'ሆ', 6149 => 'ሇ', 6150 => 'ለ', 6151 => 'ሉ', 6152 => 'ሊ', 6153 => 'ላ', 6154 => 'ሌ', 6155 => 'ል', 6156 => 'ሎ', 6157 => 'ሏ', 6158 => 'ⶀ', 6159 => 'ሐ', 6160 => 'ሑ', 6161 => 'ሒ', 6162 => 'ሓ', 6163 => 'ሔ', 6164 => 'ሕ', 6165 => 'ሖ', 6166 => 'ሗ', 6167 => 'መ', 6168 => 'ሙ', 6169 => 'ሚ', 6170 => 'ማ', 6171 => 'ሜ', 6172 => 'ም', 6173 => 'ሞ', 6174 => 'ሟ', 6175 => 'ᎀ', 6176 => 'ᎁ', 6177 => 'ᎂ', 6178 => 'ᎃ', 6179 => 'ⶁ', 6180 => 'ሠ', 6181 => 'ሡ', 6182 => 'ሢ', 6183 => 'ሣ', 6184 => 'ሤ', 6185 => 'ሥ', 6186 => 'ሦ', 6187 => 'ሧ', 6188 => 'ረ', 6189 => 'ሩ', 6190 => 'ሪ', 6191 => 'ራ', 6192 => 'ሬ', 6193 => 'ር', 6194 => 'ሮ', 6195 => 'ሯ', 6196 => 'ⶂ', 6197 => 'ሰ', 6198 => 'ሱ', 6199 => 'ሲ', 6200 => 'ሳ', 6201 => 'ሴ', 6202 => 'ስ', 6203 => 'ሶ', 6204 => 'ሷ', 6205 => 'ⶃ', 6206 => 'ꬁ', 6207 => 'ꬂ', 6208 => 'ꬃ', 6209 => 'ꬄ', 6210 => 'ꬅ', 6211 => 'ꬆ', 6212 => 'ሸ', 6213 => 'ሹ', 6214 => 'ሺ', 6215 => 'ሻ', 6216 => 'ሼ', 6217 => 'ሽ', 6218 => 'ሾ', 6219 => 'ሿ', 6220 => 'ⶄ', 6221 => 'ቀ', 6222 => 'ቁ', 6223 => 'ቂ', 6224 => 'ቃ', 6225 => 'ቄ', 6226 => 'ቅ', 6227 => 'ቆ', 6228 => 'ቇ', 6229 => 'ቈ', 6230 => 'ቊ', 6231 => 'ቋ', 6232 => 'ቌ', 6233 => 'ቍ', 6234 => 'ቐ', 6235 => 'ቑ', 6236 => 'ቒ', 6237 => 'ቓ', 6238 => 'ቔ', 6239 => 'ቕ', 6240 => 'ቖ', 6241 => 'ቘ', 6242 => 'ቚ', 6243 => 'ቛ', 6244 => 'ቜ', 6245 => 'ቝ', 6246 => 'በ', 6247 => 'ቡ', 6248 => 'ቢ', 6249 => 'ባ', 6250 => 'ቤ', 6251 => 'ብ', 6252 => 'ቦ', 6253 => 'ቧ', 6254 => 'ᎄ', 6255 => 'ᎅ', 6256 => 'ᎆ', 6257 => 'ᎇ', 6258 => 'ⶅ', 6259 => 'ቨ', 6260 => 'ቩ', 6261 => 'ቪ', 6262 => 'ቫ', 6263 => 'ቬ', 6264 => 'ቭ', 6265 => 'ቮ', 6266 => 'ቯ', 6267 => 'ተ', 6268 => 'ቱ', 6269 => 'ቲ', 6270 => 'ታ', 6271 => 'ቴ', 6272 => 'ት', 6273 => 'ቶ', 6274 => 'ቷ', 6275 => 'ⶆ', 6276 => 'ቸ', 6277 => 'ቹ', 6278 => 'ቺ', 6279 => 'ቻ', 6280 => 'ቼ', 6281 => 'ች', 6282 => 'ቾ', 6283 => 'ቿ', 6284 => 'ⶇ', 6285 => 'ኀ', 6286 => 'ኁ', 6287 => 'ኂ', 6288 => 'ኃ', 6289 => 'ኄ', 6290 => 'ኅ', 6291 => 'ኆ', 6292 => 'ኇ', 6293 => 'ኈ', 6294 => 'ኊ', 6295 => 'ኋ', 6296 => 'ኌ', 6297 => 'ኍ', 6298 => 'ነ', 6299 => 'ኑ', 6300 => 'ኒ', 6301 => 'ና', 6302 => 'ኔ', 6303 => 'ን', 6304 => 'ኖ', 6305 => 'ኗ', 6306 => 'ⶈ', 6307 => 'ኘ', 6308 => 'ኙ', 6309 => 'ኚ', 6310 => 'ኛ', 6311 => 'ኜ', 6312 => 'ኝ', 6313 => 'ኞ', 6314 => 'ኟ', 6315 => 'ⶉ', 6316 => 'አ', 6317 => 'ኡ', 6318 => 'ኢ', 6319 => 'ኣ', 6320 => 'ኤ', 6321 => 'እ', 6322 => 'ኦ', 6323 => 'ኧ', 6324 => 'ⶊ', 6325 => 'ከ', 6326 => 'ኩ', 6327 => 'ኪ', 6328 => 'ካ', 6329 => 'ኬ', 6330 => 'ክ', 6331 => 'ኮ', 6332 => 'ኯ', 6333 => 'ኰ', 6334 => 'ኲ', 6335 => 'ኳ', 6336 => 'ኴ', 6337 => 'ኵ', 6338 => 'ኸ', 6339 => 'ኹ', 6340 => 'ኺ', 6341 => 'ኻ', 6342 => 'ኼ', 6343 => 'ኽ', 6344 => 'ኾ', 6345 => 'ዀ', 6346 => 'ዂ', 6347 => 'ዃ', 6348 => 'ዄ', 6349 => 'ዅ', 6350 => 'ወ', 6351 => 'ዉ', 6352 => 'ዊ', 6353 => 'ዋ', 6354 => 'ዌ', 6355 => 'ው', 6356 => 'ዎ', 6357 => 'ዏ', 6358 => 'ዐ', 6359 => 'ዑ', 6360 => 'ዒ', 6361 => 'ዓ', 6362 => 'ዔ', 6363 => 'ዕ', 6364 => 'ዖ', 6365 => 'ዘ', 6366 => 'ዙ', 6367 => 'ዚ', 6368 => 'ዛ', 6369 => 'ዜ', 6370 => 'ዝ', 6371 => 'ዞ', 6372 => 'ዟ', 6373 => 'ⶋ', 6374 => 'ꬑ', 6375 => 'ꬒ', 6376 => 'ꬓ', 6377 => 'ꬔ', 6378 => 'ꬕ', 6379 => 'ꬖ', 6380 => 'ዠ', 6381 => 'ዡ', 6382 => 'ዢ', 6383 => 'ዣ', 6384 => 'ዤ', 6385 => 'ዥ', 6386 => 'ዦ', 6387 => 'ዧ', 6388 => 'የ', 6389 => 'ዩ', 6390 => 'ዪ', 6391 => 'ያ', 6392 => 'ዬ', 6393 => 'ይ', 6394 => 'ዮ', 6395 => 'ዯ', 6396 => 'ደ', 6397 => 'ዱ', 6398 => 'ዲ', 6399 => 'ዳ', 6400 => 'ዴ', 6401 => 'ድ', 6402 => 'ዶ', 6403 => 'ዷ', 6404 => 'ⶌ', 6405 => 'ꬉ', 6406 => 'ꬊ', 6407 => 'ꬋ', 6408 => 'ꬌ', 6409 => 'ꬍ', 6410 => 'ꬎ', 6411 => 'ዸ', 6412 => 'ዹ', 6413 => 'ዺ', 6414 => 'ዻ', 6415 => 'ዼ', 6416 => 'ዽ', 6417 => 'ዾ', 6418 => 'ዿ', 6419 => 'ⶍ', 6420 => 'ጀ', 6421 => 'ጁ', 6422 => 'ጂ', 6423 => 'ጃ', 6424 => 'ጄ', 6425 => 'ጅ', 6426 => 'ጆ', 6427 => 'ጇ', 6428 => 'ⶎ', 6429 => 'ገ', 6430 => 'ጉ', 6431 => 'ጊ', 6432 => 'ጋ', 6433 => 'ጌ', 6434 => 'ግ', 6435 => 'ጎ', 6436 => 'ጏ', 6437 => 'ጐ', 6438 => 'ጒ', 6439 => 'ጓ', 6440 => 'ጔ', 6441 => 'ጕ', 6442 => 'ጘ', 6443 => 'ጙ', 6444 => 'ጚ', 6445 => 'ጛ', 6446 => 'ጜ', 6447 => 'ጝ', 6448 => 'ጞ', 6449 => 'ጟ', 6450 => 'ⶓ', 6451 => 'ⶔ', 6452 => 'ⶕ', 6453 => 'ⶖ', 6454 => 'ጠ', 6455 => 'ጡ', 6456 => 'ጢ', 6457 => 'ጣ', 6458 => 'ጤ', 6459 => 'ጥ', 6460 => 'ጦ', 6461 => 'ጧ', 6462 => 'ⶏ', 6463 => 'ጨ', 6464 => 'ጩ', 6465 => 'ጪ', 6466 => 'ጫ', 6467 => 'ጬ', 6468 => 'ጭ', 6469 => 'ጮ', 6470 => 'ጯ', 6471 => 'ⶐ', 6472 => 'ꬠ', 6473 => 'ꬡ', 6474 => 'ꬢ', 6475 => 'ꬣ', 6476 => 'ꬤ', 6477 => 'ꬥ', 6478 => 'ꬦ', 6479 => 'ጰ', 6480 => 'ጱ', 6481 => 'ጲ', 6482 => 'ጳ', 6483 => 'ጴ', 6484 => 'ጵ', 6485 => 'ጶ', 6486 => 'ጷ', 6487 => 'ⶑ', 6488 => 'ጸ', 6489 => 'ጹ', 6490 => 'ጺ', 6491 => 'ጻ', 6492 => 'ጼ', 6493 => 'ጽ', 6494 => 'ጾ', 6495 => 'ጿ', 6496 => 'ꬨ', 6497 => 'ꬩ', 6498 => 'ꬪ', 6499 => 'ꬫ', 6500 => 'ꬬ', 6501 => 'ꬭ', 6502 => 'ꬮ', 6503 => 'ፀ', 6504 => 'ፁ', 6505 => 'ፂ', 6506 => 'ፃ', 6507 => 'ፄ', 6508 => 'ፅ', 6509 => 'ፆ', 6510 => 'ፇ', 6511 => 'ፈ', 6512 => 'ፉ', 6513 => 'ፊ', 6514 => 'ፋ', 6515 => 'ፌ', 6516 => 'ፍ', 6517 => 'ፎ', 6518 => 'ፏ', 6519 => 'ᎈ', 6520 => 'ᎉ', 6521 => 'ᎊ', 6522 => 'ᎋ', 6523 => 'ፐ', 6524 => 'ፑ', 6525 => 'ፒ', 6526 => 'ፓ', 6527 => 'ፔ', 6528 => 'ፕ', 6529 => 'ፖ', 6530 => 'ፗ', 6531 => 'ᎌ', 6532 => 'ᎍ', 6533 => 'ᎎ', 6534 => 'ᎏ', 6535 => 'ⶒ', 6536 => 'ፘ', 6537 => 'ፙ', 6538 => 'ፚ', 6539 => 'ⶠ', 6540 => 'ⶡ', 6541 => 'ⶢ', 6542 => 'ⶣ', 6543 => 'ⶤ', 6544 => 'ⶥ', 6545 => 'ⶦ', 6546 => 'ⶨ', 6547 => 'ⶩ', 6548 => 'ⶪ', 6549 => 'ⶫ', 6550 => 'ⶬ', 6551 => 'ⶭ', 6552 => 'ⶮ', 6553 => 'ⶰ', 6554 => 'ⶱ', 6555 => 'ⶲ', 6556 => 'ⶳ', 6557 => 'ⶴ', 6558 => 'ⶵ', 6559 => 'ⶶ', 6560 => 'ⶸ', 6561 => 'ⶹ', 6562 => 'ⶺ', 6563 => 'ⶻ', 6564 => 'ⶼ', 6565 => 'ⶽ', 6566 => 'ⶾ', 6567 => 'ⷀ', 6568 => 'ⷁ', 6569 => 'ⷂ', 6570 => 'ⷃ', 6571 => 'ⷄ', 6572 => 'ⷅ', 6573 => 'ⷆ', 6574 => 'ⷈ', 6575 => 'ⷉ', 6576 => 'ⷊ', 6577 => 'ⷋ', 6578 => 'ⷌ', 6579 => 'ⷍ', 6580 => 'ⷎ', 6581 => 'ⷐ', 6582 => 'ⷑ', 6583 => 'ⷒ', 6584 => 'ⷓ', 6585 => 'ⷔ', 6586 => 'ⷕ', 6587 => 'ⷖ', 6588 => 'ⷘ', 6589 => 'ⷙ', 6590 => 'ⷚ', 6591 => 'ⷛ', 6592 => 'ⷜ', 6593 => 'ⷝ', 6594 => 'ⷞ', 6595 => 'ॐ', 6596 => 'ॲ', 6597 => 'ऄ', 6598 => 'अ', 6599 => 'आ', 6600 => 'ॳ', 6601 => 'ॴ', 6602 => 'ॵ', 6603 => 'ॶ', 6604 => 'ॷ', 6605 => 'इ', 6606 => 'ई', 6607 => 'उ', 6608 => 'ऊ', 6609 => 'ऋ', 6610 => 'ॠ', 6611 => 'ऌ', 6612 => 'ॡ', 6613 => 'ऍ', 6614 => 'ऎ', 6615 => 'ए', 6616 => 'ऐ', 6617 => 'ऑ', 6618 => 'ऒ', 6619 => 'ओ', 6620 => 'औ', 6621 => 'क', 6622 => 'ख', 6623 => 'ग', 6624 => 'ॻ', 6625 => 'घ', 6626 => 'ङ', 6627 => 'च', 6628 => 'छ', 6629 => 'ज', 6630 => 'ॹ', 6631 => 'ॼ', 6632 => 'झ', 6633 => 'ञ', 6634 => 'ट', 6635 => 'ठ', 6636 => 'ड', 6637 => 'ॾ', 6638 => 'ढ', 6639 => 'ण', 6640 => 'त', 6641 => 'थ', 6642 => 'द', 6643 => 'ध', 6644 => 'न', 6645 => 'प', 6646 => 'फ', 6647 => 'ब', 6648 => 'ॿ', 6649 => 'भ', 6650 => 'म', 6651 => 'य', 6652 => 'ॺ', 6653 => 'र', 6654 => 'ल', 6655 => 'ळ', 6656 => 'व', 6657 => 'श', 6658 => 'ष', 6659 => 'स', 6660 => 'ह', 6661 => 'ऽ', 6662 => 'ॽ', 6663 => 'ᳩ', 6664 => 'ꣲ', 6665 => 'ꣻ', 6666 => 'অ', 6667 => 'আ', 6668 => 'ই', 6669 => 'ঈ', 6670 => 'উ', 6671 => 'ঊ', 6672 => 'ঋ', 6673 => 'ৠ', 6674 => 'ঌ', 6675 => 'ৡ', 6676 => 'এ', 6677 => 'ঐ', 6678 => 'ও', 6679 => 'ঔ', 6680 => 'ক', 6681 => 'খ', 6682 => 'গ', 6683 => 'ঘ', 6684 => 'ঙ', 6685 => 'চ', 6686 => 'ছ', 6687 => 'জ', 6688 => 'ঝ', 6689 => 'ঞ', 6690 => 'ট', 6691 => 'ঠ', 6692 => 'ড', 6693 => 'ঢ', 6694 => 'ণ', 6695 => 'ত', 6696 => 'থ', 6697 => 'দ', 6698 => 'ধ', 6699 => 'ন', 6700 => 'প', 6701 => 'ফ', 6702 => 'ব', 6703 => 'ভ', 6704 => 'ম', 6705 => 'য', 6706 => 'র', 6707 => 'ৰ', 6708 => 'ল', 6709 => 'ৱ', 6710 => 'শ', 6711 => 'ষ', 6712 => 'স', 6713 => 'হ', 6714 => 'ঽ', 6715 => 'ੴ', 6716 => 'ੳ', 6717 => 'ਉ', 6718 => 'ਊ', 6719 => 'ਓ', 6720 => 'ਅ', 6721 => 'ਆ', 6722 => 'ਐ', 6723 => 'ਔ', 6724 => 'ੲ', 6725 => 'ਇ', 6726 => 'ਈ', 6727 => 'ਏ', 6728 => 'ਸ', 6729 => 'ਹ', 6730 => 'ਕ', 6731 => 'ਖ', 6732 => 'ਗ', 6733 => 'ਘ', 6734 => 'ਙ', 6735 => 'ਚ', 6736 => 'ਛ', 6737 => 'ਜ', 6738 => 'ਝ', 6739 => 'ਞ', 6740 => 'ਟ', 6741 => 'ਠ', 6742 => 'ਡ', 6743 => 'ਢ', 6744 => 'ਣ', 6745 => 'ਤ', 6746 => 'ਥ', 6747 => 'ਦ', 6748 => 'ਧ', 6749 => 'ਨ', 6750 => 'ਪ', 6751 => 'ਫ', 6752 => 'ਬ', 6753 => 'ਭ', 6754 => 'ਮ', 6755 => 'ਯ', 6756 => 'ਰ', 6757 => 'ਲ', 6758 => 'ਵ', 6759 => 'ੜ', 6760 => 'ૐ', 6761 => 'અ', 6762 => 'આ', 6763 => 'ઇ', 6764 => 'ઈ', 6765 => 'ઉ', 6766 => 'ઊ', 6767 => 'ઋ', 6768 => 'ૠ', 6769 => 'ઌ', 6770 => 'ૡ', 6771 => 'ઍ', 6772 => 'એ', 6773 => 'ઐ', 6774 => 'ઑ', 6775 => 'ઓ', 6776 => 'ઔ', 6777 => 'ક', 6778 => 'ખ', 6779 => 'ગ', 6780 => 'ઘ', 6781 => 'ઙ', 6782 => 'ચ', 6783 => 'છ', 6784 => 'જ', 6785 => 'ઝ', 6786 => 'ઞ', 6787 => 'ટ', 6788 => 'ઠ', 6789 => 'ડ', 6790 => 'ઢ', 6791 => 'ણ', 6792 => 'ત', 6793 => 'થ', 6794 => 'દ', 6795 => 'ધ', 6796 => 'ન', 6797 => 'પ', 6798 => 'ફ', 6799 => 'બ', 6800 => 'ભ', 6801 => 'મ', 6802 => 'ય', 6803 => 'ર', 6804 => 'લ', 6805 => 'વ', 6806 => 'શ', 6807 => 'ષ', 6808 => 'સ', 6809 => 'હ', 6810 => 'ળ', 6811 => 'ઽ', 6812 => 'ଅ', 6813 => 'ଆ', 6814 => 'ଇ', 6815 => 'ଈ', 6816 => 'ଉ', 6817 => 'ଊ', 6818 => 'ଋ', 6819 => 'ୠ', 6820 => 'ଌ', 6821 => 'ୡ', 6822 => 'ଏ', 6823 => 'ଐ', 6824 => 'ଓ', 6825 => 'ଔ', 6826 => 'କ', 6827 => 'ଖ', 6828 => 'ଗ', 6829 => 'ଘ', 6830 => 'ଙ', 6831 => 'ଚ', 6832 => 'ଛ', 6833 => 'ଜ', 6834 => 'ଝ', 6835 => 'ଞ', 6836 => 'ଟ', 6837 => 'ଠ', 6838 => 'ଡ', 6839 => 'ଢ', 6840 => 'ଣ', 6841 => 'ତ', 6842 => 'ଥ', 6843 => 'ଦ', 6844 => 'ଧ', 6845 => 'ନ', 6846 => 'ପ', 6847 => 'ଫ', 6848 => 'ବ', 6849 => 'ଭ', 6850 => 'ମ', 6851 => 'ଯ', 6852 => 'ୟ', 6853 => 'ର', 6854 => 'ଲ', 6855 => 'ଳ', 6856 => 'ଵ', 6857 => 'ୱ', 6858 => 'ଶ', 6859 => 'ଷ', 6860 => 'ସ', 6861 => 'ହ', 6862 => 'ଽ', 6863 => 'ௐ', 6864 => 'அ', 6865 => 'ஆ', 6866 => 'இ', 6867 => 'ஈ', 6868 => 'உ', 6869 => 'ஊ', 6870 => 'எ', 6871 => 'ஏ', 6872 => 'ஐ', 6873 => 'ஒ', 6874 => 'ஓ', 6875 => 'ஔ', 6876 => 'ஃ', 6877 => 'க', 6878 => 'ங', 6879 => 'ச', 6880 => 'ஞ', 6881 => 'ட', 6882 => 'ண', 6883 => 'த', 6884 => 'ந', 6885 => 'ப', 6886 => 'ம', 6887 => 'ய', 6888 => 'ர', 6889 => 'ல', 6890 => 'வ', 6891 => 'ழ', 6892 => 'ள', 6893 => 'ற', 6894 => 'ன', 6895 => 'ஜ', 6896 => 'ஶ', 6897 => 'ஷ', 6898 => 'ஸ', 6899 => 'ஹ', 6900 => 'అ', 6901 => 'ఆ', 6902 => 'ఇ', 6903 => 'ఈ', 6904 => 'ఉ', 6905 => 'ఊ', 6906 => 'ఋ', 6907 => 'ౠ', 6908 => 'ఌ', 6909 => 'ౡ', 6910 => 'ఎ', 6911 => 'ఏ', 6912 => 'ఐ', 6913 => 'ఒ', 6914 => 'ఓ', 6915 => 'ఔ', 6916 => 'క', 6917 => 'ఖ', 6918 => 'గ', 6919 => 'ఘ', 6920 => 'ఙ', 6921 => 'చ', 6922 => 'ౘ', 6923 => 'ఛ', 6924 => 'జ', 6925 => 'ౙ', 6926 => 'ఝ', 6927 => 'ఞ', 6928 => 'ట', 6929 => 'ఠ', 6930 => 'డ', 6931 => 'ఢ', 6932 => 'ణ', 6933 => 'త', 6934 => 'థ', 6935 => 'ద', 6936 => 'ధ', 6937 => 'న', 6938 => 'ప', 6939 => 'ఫ', 6940 => 'బ', 6941 => 'భ', 6942 => 'మ', 6943 => 'య', 6944 => 'ర', 6945 => 'ఱ', 6946 => 'ల', 6947 => 'వ', 6948 => 'శ', 6949 => 'ష', 6950 => 'స', 6951 => 'హ', 6952 => 'ళ', 6953 => 'ఽ', 6954 => 'ಅ', 6955 => 'ಆ', 6956 => 'ಇ', 6957 => 'ಈ', 6958 => 'ಉ', 6959 => 'ಊ', 6960 => 'ಋ', 6961 => 'ೠ', 6962 => 'ಌ', 6963 => 'ೡ', 6964 => 'ಎ', 6965 => 'ಏ', 6966 => 'ಐ', 6967 => 'ಒ', 6968 => 'ಓ', 6969 => 'ಔ', 6970 => 'ಕ', 6971 => 'ಖ', 6972 => 'ಗ', 6973 => 'ಘ', 6974 => 'ಙ', 6975 => 'ಚ', 6976 => 'ಛ', 6977 => 'ಜ', 6978 => 'ಝ', 6979 => 'ಞ', 6980 => 'ಟ', 6981 => 'ಠ', 6982 => 'ಡ', 6983 => 'ಢ', 6984 => 'ಣ', 6985 => 'ತ', 6986 => 'ಥ', 6987 => 'ದ', 6988 => 'ಧ', 6989 => 'ನ', 6990 => 'ಪ', 6991 => 'ಫ', 6992 => 'ಬ', 6993 => 'ಭ', 6994 => 'ಮ', 6995 => 'ಯ', 6996 => 'ರ', 6997 => 'ಱ', 6998 => 'ಲ', 6999 => 'ವ', 7000 => 'ಶ', 7001 => 'ಷ', 7002 => 'ಸ', 7003 => 'ಹ', 7004 => 'ಳ', 7005 => 'ೞ', 7006 => 'ಽ', 7007 => 'ೱ', 7008 => 'ೲ', 7009 => 'അ', 7010 => 'ആ', 7011 => 'ഇ', 7012 => 'ഈ', 7013 => 'ഉ', 7014 => 'ഊ', 7015 => 'ഋ', 7016 => 'ൠ', 7017 => 'ഌ', 7018 => 'ൡ', 7019 => 'എ', 7020 => 'ഏ', 7021 => 'ഐ', 7022 => 'ഒ', 7023 => 'ഓ', 7024 => 'ഔ', 7025 => 'ക', 7026 => 'ഖ', 7027 => 'ഗ', 7028 => 'ഘ', 7029 => 'ങ', 7030 => 'ച', 7031 => 'ഛ', 7032 => 'ജ', 7033 => 'ഝ', 7034 => 'ഞ', 7035 => 'ട', 7036 => 'ഠ', 7037 => 'ഡ', 7038 => 'ഢ', 7039 => 'ണ', 7040 => 'ത', 7041 => 'ഥ', 7042 => 'ദ', 7043 => 'ധ', 7044 => 'ന', 7045 => 'ഩ', 7046 => 'പ', 7047 => 'ഫ', 7048 => 'ബ', 7049 => 'ഭ', 7050 => 'മ', 7051 => 'യ', 7052 => 'ര', 7053 => 'ല', 7054 => 'വ', 7055 => 'ശ', 7056 => 'ഷ', 7057 => 'സ', 7058 => 'ഹ', 7059 => 'ള', 7060 => 'ഴ', 7061 => 'റ', 7062 => 'ഺ', 7063 => 'ഽ', 7064 => 'අ', 7065 => 'ආ', 7066 => 'ඇ', 7067 => 'ඈ', 7068 => 'ඉ', 7069 => 'ඊ', 7070 => 'උ', 7071 => 'ඌ', 7072 => 'ඍ', 7073 => 'ඎ', 7074 => 'ඏ', 7075 => 'ඐ', 7076 => 'එ', 7077 => 'ඒ', 7078 => 'ඓ', 7079 => 'ඔ', 7080 => 'ඕ', 7081 => 'ඖ', 7082 => 'ක', 7083 => 'ඛ', 7084 => 'ග', 7085 => 'ඝ', 7086 => 'ඞ', 7087 => 'ඟ', 7088 => 'ච', 7089 => 'ඡ', 7090 => 'ජ', 7091 => 'ඣ', 7092 => 'ඤ', 7093 => 'ඥ', 7094 => 'ඦ', 7095 => 'ට', 7096 => 'ඨ', 7097 => 'ඩ', 7098 => 'ඪ', 7099 => 'ණ', 7100 => 'ඬ', 7101 => 'ත', 7102 => 'ථ', 7103 => 'ද', 7104 => 'ධ', 7105 => 'න', 7106 => 'ඳ', 7107 => 'ප', 7108 => 'ඵ', 7109 => 'බ', 7110 => 'භ', 7111 => 'ම', 7112 => 'ඹ', 7113 => 'ය', 7114 => 'ර', 7115 => 'ල', 7116 => 'ව', 7117 => 'ශ', 7118 => 'ෂ', 7119 => 'ස', 7120 => 'හ', 7121 => 'ළ', 7122 => 'ෆ', 7123 => 'ꯀ', 7124 => 'ꯁ', 7125 => 'ꯂ', 7126 => 'ꯃ', 7127 => 'ꯄ', 7128 => 'ꯅ', 7129 => 'ꯆ', 7130 => 'ꯇ', 7131 => 'ꯈ', 7132 => 'ꯉ', 7133 => 'ꯊ', 7134 => 'ꯋ', 7135 => 'ꯌ', 7136 => 'ꯍ', 7137 => 'ꯎ', 7138 => 'ꯏ', 7139 => 'ꯐ', 7140 => 'ꯑ', 7141 => 'ꯒ', 7142 => 'ꯓ', 7143 => 'ꯔ', 7144 => 'ꯕ', 7145 => 'ꯖ', 7146 => 'ꯗ', 7147 => 'ꯘ', 7148 => 'ꯙ', 7149 => 'ꯚ', 7150 => 'ꯛ', 7151 => 'ꯜ', 7152 => 'ꯝ', 7153 => 'ꯞ', 7154 => 'ꯟ', 7155 => 'ꯠ', 7156 => 'ꯡ', 7157 => 'ꯢ', 7158 => 'ꠀ', 7159 => 'ꠁ', 7160 => 'ꠃ', 7161 => 'ꠄ', 7162 => 'ꠅ', 7163 => 'ꠇ', 7164 => 'ꠈ', 7165 => 'ꠉ', 7166 => 'ꠊ', 7167 => 'ꠌ', 7168 => 'ꠍ', 7169 => 'ꠎ', 7170 => 'ꠏ', 7171 => 'ꠐ', 7172 => 'ꠑ', 7173 => 'ꠒ', 7174 => 'ꠓ', 7175 => 'ꠔ', 7176 => 'ꠕ', 7177 => 'ꠖ', 7178 => 'ꠗ', 7179 => 'ꠘ', 7180 => 'ꠙ', 7181 => 'ꠚ', 7182 => 'ꠛ', 7183 => 'ꠜ', 7184 => 'ꠝ', 7185 => 'ꠞ', 7186 => 'ꠟ', 7187 => 'ꠠ', 7188 => 'ꠡ', 7189 => 'ꠢ', 7190 => 'ꢂ', 7191 => 'ꢃ', 7192 => 'ꢄ', 7193 => 'ꢅ', 7194 => 'ꢆ', 7195 => 'ꢇ', 7196 => 'ꢈ', 7197 => 'ꢉ', 7198 => 'ꢊ', 7199 => 'ꢋ', 7200 => 'ꢌ', 7201 => 'ꢍ', 7202 => 'ꢎ', 7203 => 'ꢏ', 7204 => 'ꢐ', 7205 => 'ꢑ', 7206 => 'ꢒ', 7207 => 'ꢓ', 7208 => 'ꢔ', 7209 => 'ꢕ', 7210 => 'ꢖ', 7211 => 'ꢗ', 7212 => 'ꢘ', 7213 => 'ꢙ', 7214 => 'ꢚ', 7215 => 'ꢛ', 7216 => 'ꢜ', 7217 => 'ꢝ', 7218 => 'ꢞ', 7219 => 'ꢟ', 7220 => 'ꢠ', 7221 => 'ꢡ', 7222 => 'ꢢ', 7223 => 'ꢣ', 7224 => 'ꢤ', 7225 => 'ꢥ', 7226 => 'ꢦ', 7227 => 'ꢧ', 7228 => 'ꢨ', 7229 => 'ꢩ', 7230 => 'ꢪ', 7231 => 'ꢫ', 7232 => 'ꢬ', 7233 => 'ꢭ', 7234 => 'ꢮ', 7235 => 'ꢯ', 7236 => 'ꢰ', 7237 => 'ꢱ', 7238 => 'ꢲ', 7239 => 'ꢳ', 7240 => '𑂃', 7241 => '𑂄', 7242 => '𑂅', 7243 => '𑂆', 7244 => '𑂇', 7245 => '𑂈', 7246 => '𑂉', 7247 => '𑂊', 7248 => '𑂋', 7249 => '𑂌', 7250 => '𑂍', 7251 => '𑂎', 7252 => '𑂏', 7253 => '𑂐', 7254 => '𑂑', 7255 => '𑂒', 7256 => '𑂓', 7257 => '𑂔', 7258 => '𑂕', 7259 => '𑂖', 7260 => '𑂗', 7261 => '𑂘', 7262 => '𑂙', 7263 => '𑂛', 7264 => '𑂝', 7265 => '𑂞', 7266 => '𑂟', 7267 => '𑂠', 7268 => '𑂡', 7269 => '𑂢', 7270 => '𑂣', 7271 => '𑂤', 7272 => '𑂥', 7273 => '𑂦', 7274 => '𑂧', 7275 => '𑂨', 7276 => '𑂩', 7277 => '𑂪', 7278 => '𑂬', 7279 => '𑂭', 7280 => '𑂮', 7281 => '𑂯', 7282 => 'ᮃ', 7283 => 'ᮄ', 7284 => 'ᮅ', 7285 => 'ᮆ', 7286 => 'ᮇ', 7287 => 'ᮈ', 7288 => 'ᮉ', 7289 => 'ᮊ', 7290 => 'ᮮ', 7291 => 'ᮋ', 7292 => 'ᮌ', 7293 => 'ᮍ', 7294 => 'ᮎ', 7295 => 'ᮏ', 7296 => 'ᮐ', 7297 => 'ᮑ', 7298 => 'ᮒ', 7299 => 'ᮓ', 7300 => 'ᮔ', 7301 => 'ᮕ', 7302 => 'ᮖ', 7303 => 'ᮗ', 7304 => 'ᮘ', 7305 => 'ᮙ', 7306 => 'ᮚ', 7307 => 'ᮛ', 7308 => 'ᮜ', 7309 => 'ᮝ', 7310 => 'ᮞ', 7311 => 'ᮟ', 7312 => 'ᮯ', 7313 => 'ᮠ', 7314 => '𑀅', 7315 => '𑀆', 7316 => '𑀇', 7317 => '𑀈', 7318 => '𑀉', 7319 => '𑀊', 7320 => '𑀋', 7321 => '𑀌', 7322 => '𑀍', 7323 => '𑀎', 7324 => '𑀏', 7325 => '𑀐', 7326 => '𑀑', 7327 => '𑀒', 7328 => '𑀓', 7329 => '𑀔', 7330 => '𑀕', 7331 => '𑀖', 7332 => '𑀗', 7333 => '𑀘', 7334 => '𑀙', 7335 => '𑀚', 7336 => '𑀛', 7337 => '𑀜', 7338 => '𑀝', 7339 => '𑀞', 7340 => '𑀟', 7341 => '𑀠', 7342 => '𑀡', 7343 => '𑀢', 7344 => '𑀣', 7345 => '𑀤', 7346 => '𑀥', 7347 => '𑀦', 7348 => '𑀧', 7349 => '𑀨', 7350 => '𑀩', 7351 => '𑀪', 7352 => '𑀫', 7353 => '𑀬', 7354 => '𑀭', 7355 => '𑀮', 7356 => '𑀯', 7357 => '𑀰', 7358 => '𑀱', 7359 => '𑀲', 7360 => '𑀳', 7361 => '𑀃', 7362 => '𑀄', 7363 => '𑀴', 7364 => '𑀵', 7365 => '𑀶', 7366 => '𑀷', 7367 => '𐨀', 7368 => '𐨐', 7369 => '𐨑', 7370 => '𐨒', 7371 => '𐨓', 7372 => '𐨕', 7373 => '𐨖', 7374 => '𐨗', 7375 => '𐨙', 7376 => '𐨚', 7377 => '𐨛', 7378 => '𐨜', 7379 => '𐨝', 7380 => '𐨞', 7381 => '𐨟', 7382 => '𐨠', 7383 => '𐨡', 7384 => '𐨢', 7385 => '𐨣', 7386 => '𐨤', 7387 => '𐨥', 7388 => '𐨦', 7389 => '𐨧', 7390 => '𐨨', 7391 => '𐨩', 7392 => '𐨪', 7393 => '𐨫', 7394 => '𐨬', 7395 => '𐨭', 7396 => '𐨮', 7397 => '𐨯', 7398 => '𐨰', 7399 => '𐨱', 7400 => '𐨲', 7401 => '𐨳', 7402 => 'ก', 7403 => 'ข', 7404 => 'ฃ', 7405 => 'ค', 7406 => 'ฅ', 7407 => 'ฆ', 7408 => 'ง', 7409 => 'จ', 7410 => 'ฉ', 7411 => 'ช', 7412 => 'ซ', 7413 => 'ฌ', 7414 => 'ญ', 7415 => 'ฎ', 7416 => 'ฏ', 7417 => 'ฐ', 7418 => 'ฑ', 7419 => 'ฒ', 7420 => 'ณ', 7421 => 'ด', 7422 => 'ต', 7423 => 'ถ', 7424 => 'ท', 7425 => 'ธ', 7426 => 'น', 7427 => 'บ', 7428 => 'ป', 7429 => 'ผ', 7430 => 'ฝ', 7431 => 'พ', 7432 => 'ฟ', 7433 => 'ภ', 7434 => 'ม', 7435 => 'ย', 7436 => 'ร', 7437 => 'ฤ', 7438 => 'ล', 7439 => 'ฦ', 7440 => 'ว', 7441 => 'ศ', 7442 => 'ษ', 7443 => 'ส', 7444 => 'ห', 7445 => 'ฬ', 7446 => 'อ', 7447 => 'ฮ', 7448 => 'ฯ', 7449 => 'ะ', 7450 => 'า', 7451 => 'ำ', 7452 => 'เ', 7453 => 'แ', 7454 => 'โ', 7455 => 'ใ', 7456 => 'ไ', 7457 => 'ๅ', 7458 => 'ກ', 7459 => 'ຂ', 7460 => 'ຄ', 7461 => 'ງ', 7462 => 'ຈ', 7463 => 'ສ', 7464 => 'ຊ', 7465 => 'ຍ', 7466 => 'ດ', 7467 => 'ຕ', 7468 => 'ຖ', 7469 => 'ທ', 7470 => 'ນ', 7471 => 'ບ', 7472 => 'ປ', 7473 => 'ຜ', 7474 => 'ຝ', 7475 => 'ພ', 7476 => 'ຟ', 7477 => 'ມ', 7478 => 'ຢ', 7479 => 'ຣ', 7480 => 'ລ', 7481 => 'ວ', 7482 => 'ຫ', 7483 => 'ອ', 7484 => 'ຮ', 7485 => 'ຯ', 7486 => 'ະ', 7487 => 'າ', 7488 => 'ຳ', 7489 => 'ຽ', 7490 => 'ເ', 7491 => 'ແ', 7492 => 'ໂ', 7493 => 'ໃ', 7494 => 'ໄ', 7495 => 'ꪀ', 7496 => 'ꪁ', 7497 => 'ꪂ', 7498 => 'ꪃ', 7499 => 'ꪄ', 7500 => 'ꪅ', 7501 => 'ꪆ', 7502 => 'ꪇ', 7503 => 'ꪈ', 7504 => 'ꪉ', 7505 => 'ꪊ', 7506 => 'ꪋ', 7507 => 'ꪌ', 7508 => 'ꪍ', 7509 => 'ꪎ', 7510 => 'ꪏ', 7511 => 'ꪐ', 7512 => 'ꪑ', 7513 => 'ꪒ', 7514 => 'ꪓ', 7515 => 'ꪔ', 7516 => 'ꪕ', 7517 => 'ꪖ', 7518 => 'ꪗ', 7519 => 'ꪘ', 7520 => 'ꪙ', 7521 => 'ꪚ', 7522 => 'ꪛ', 7523 => 'ꪜ', 7524 => 'ꪝ', 7525 => 'ꪞ', 7526 => 'ꪟ', 7527 => 'ꪠ', 7528 => 'ꪡ', 7529 => 'ꪢ', 7530 => 'ꪣ', 7531 => 'ꪤ', 7532 => 'ꪥ', 7533 => 'ꪦ', 7534 => 'ꪧ', 7535 => 'ꪨ', 7536 => 'ꪩ', 7537 => 'ꪪ', 7538 => 'ꪫ', 7539 => 'ꪬ', 7540 => 'ꪭ', 7541 => 'ꪮ', 7542 => 'ꪯ', 7543 => 'ꪱ', 7544 => 'ꪵ', 7545 => 'ꪶ', 7546 => 'ꪹ', 7547 => 'ꪺ', 7548 => 'ꪻ', 7549 => 'ꪼ', 7550 => 'ꪽ', 7551 => 'ꫀ', 7552 => 'ꫂ', 7553 => 'ꫛ', 7554 => 'ꫜ', 7555 => 'ཀ', 7556 => 'ཫ', 7557 => 'ཁ', 7558 => 'ག', 7559 => 'ང', 7560 => 'ཅ', 7561 => 'ཆ', 7562 => 'ཇ', 7563 => 'ཉ', 7564 => 'ཊ', 7565 => 'ཋ', 7566 => 'ཌ', 7567 => 'ཎ', 7568 => 'ཏ', 7569 => 'ཐ', 7570 => 'ད', 7571 => 'ན', 7572 => 'པ', 7573 => 'ཕ', 7574 => 'བ', 7575 => 'མ', 7576 => 'ཙ', 7577 => 'ཚ', 7578 => 'ཛ', 7579 => 'ཝ', 7580 => 'ཞ', 7581 => 'ཟ', 7582 => 'འ', 7583 => 'ཡ', 7584 => 'ར', 7585 => 'ཬ', 7586 => 'ལ', 7587 => 'ཤ', 7588 => 'ཥ', 7589 => 'ས', 7590 => 'ཧ', 7591 => 'ཨ', 7592 => 'ྈ', 7593 => 'ྉ', 7594 => 'ྌ', 7595 => 'ྊ', 7596 => 'ྋ', 7597 => 'ᰀ', 7598 => 'ᰁ', 7599 => 'ᰂ', 7600 => 'ᰃ', 7601 => 'ᰄ', 7602 => 'ᰅ', 7603 => 'ᰆ', 7604 => 'ᰇ', 7605 => 'ᰈ', 7606 => 'ᰉ', 7607 => 'ᱍ', 7608 => 'ᱎ', 7609 => 'ᱏ', 7610 => 'ᰊ', 7611 => 'ᰋ', 7612 => 'ᰌ', 7613 => 'ᰍ', 7614 => 'ᰎ', 7615 => 'ᰏ', 7616 => 'ᰐ', 7617 => 'ᰑ', 7618 => 'ᰒ', 7619 => 'ᰓ', 7620 => 'ᰔ', 7621 => 'ᰕ', 7622 => 'ᰖ', 7623 => 'ᰗ', 7624 => 'ᰘ', 7625 => 'ᰙ', 7626 => 'ᰚ', 7627 => 'ᰛ', 7628 => 'ᰜ', 7629 => 'ᰝ', 7630 => 'ᰞ', 7631 => 'ᰟ', 7632 => 'ᰠ', 7633 => 'ᰡ', 7634 => 'ᰢ', 7635 => 'ᰣ', 7636 => 'ꡀ', 7637 => 'ꡁ', 7638 => 'ꡂ', 7639 => 'ꡃ', 7640 => 'ꡄ', 7641 => 'ꡅ', 7642 => 'ꡆ', 7643 => 'ꡇ', 7644 => 'ꡩ', 7645 => 'ꡪ', 7646 => 'ꡫ', 7647 => 'ꡬ', 7648 => 'ꡈ', 7649 => 'ꡉ', 7650 => 'ꡊ', 7651 => 'ꡋ', 7652 => 'ꡌ', 7653 => 'ꡍ', 7654 => 'ꡎ', 7655 => 'ꡏ', 7656 => 'ꡐ', 7657 => 'ꡑ', 7658 => 'ꡒ', 7659 => 'ꡓ', 7660 => 'ꡧ', 7661 => 'ꡔ', 7662 => 'ꡕ', 7663 => 'ꡖ', 7664 => 'ꡗ', 7665 => 'ꡨ', 7666 => 'ꡭ', 7667 => 'ꡘ', 7668 => 'ꡱ', 7669 => 'ꡲ', 7670 => 'ꡙ', 7671 => 'ꡚ', 7672 => 'ꡮ', 7673 => 'ꡛ', 7674 => 'ꡜ', 7675 => 'ꡯ', 7676 => 'ꡰ', 7677 => 'ꡝ', 7678 => 'ꡢ', 7679 => 'ꡣ', 7680 => 'ꡤ', 7681 => 'ꡥ', 7682 => 'ꡞ', 7683 => 'ꡟ', 7684 => 'ꡠ', 7685 => 'ꡡ', 7686 => 'ꡦ', 7687 => 'ꡳ', 7688 => 'ᤀ', 7689 => 'ᤁ', 7690 => 'ᤂ', 7691 => 'ᤃ', 7692 => 'ᤄ', 7693 => 'ᤅ', 7694 => 'ᤆ', 7695 => 'ᤇ', 7696 => 'ᤈ', 7697 => 'ᤉ', 7698 => 'ᤊ', 7699 => 'ᤋ', 7700 => 'ᤌ', 7701 => 'ᤍ', 7702 => 'ᤎ', 7703 => 'ᤏ', 7704 => 'ᤐ', 7705 => 'ᤑ', 7706 => 'ᤒ', 7707 => 'ᤓ', 7708 => 'ᤔ', 7709 => 'ᤕ', 7710 => 'ᤖ', 7711 => 'ᤗ', 7712 => 'ᤘ', 7713 => 'ᤙ', 7714 => 'ᤚ', 7715 => 'ᤛ', 7716 => 'ᤜ', 7717 => 'ᜀ', 7718 => 'ᜁ', 7719 => 'ᜂ', 7720 => 'ᜃ', 7721 => 'ᜄ', 7722 => 'ᜅ', 7723 => 'ᜆ', 7724 => 'ᜇ', 7725 => 'ᜈ', 7726 => 'ᜉ', 7727 => 'ᜊ', 7728 => 'ᜋ', 7729 => 'ᜌ', 7730 => 'ᜎ', 7731 => 'ᜏ', 7732 => 'ᜐ', 7733 => 'ᜑ', 7734 => 'ᜠ', 7735 => 'ᜡ', 7736 => 'ᜢ', 7737 => 'ᜣ', 7738 => 'ᜤ', 7739 => 'ᜥ', 7740 => 'ᜦ', 7741 => 'ᜧ', 7742 => 'ᜨ', 7743 => 'ᜩ', 7744 => 'ᜪ', 7745 => 'ᜫ', 7746 => 'ᜬ', 7747 => 'ᜭ', 7748 => 'ᜮ', 7749 => 'ᜯ', 7750 => 'ᜰ', 7751 => 'ᜱ', 7752 => 'ᝀ', 7753 => 'ᝁ', 7754 => 'ᝂ', 7755 => 'ᝃ', 7756 => 'ᝄ', 7757 => 'ᝅ', 7758 => 'ᝆ', 7759 => 'ᝇ', 7760 => 'ᝈ', 7761 => 'ᝉ', 7762 => 'ᝊ', 7763 => 'ᝋ', 7764 => 'ᝌ', 7765 => 'ᝍ', 7766 => 'ᝎ', 7767 => 'ᝏ', 7768 => 'ᝐ', 7769 => 'ᝑ', 7770 => 'ᝠ', 7771 => 'ᝡ', 7772 => 'ᝢ', 7773 => 'ᝣ', 7774 => 'ᝤ', 7775 => 'ᝥ', 7776 => 'ᝦ', 7777 => 'ᝧ', 7778 => 'ᝨ', 7779 => 'ᝩ', 7780 => 'ᝪ', 7781 => 'ᝫ', 7782 => 'ᝬ', 7783 => 'ᝮ', 7784 => 'ᝯ', 7785 => 'ᝰ', 7786 => 'ᨀ', 7787 => 'ᨁ', 7788 => 'ᨂ', 7789 => 'ᨃ', 7790 => 'ᨄ', 7791 => 'ᨅ', 7792 => 'ᨆ', 7793 => 'ᨇ', 7794 => 'ᨈ', 7795 => 'ᨉ', 7796 => 'ᨊ', 7797 => 'ᨋ', 7798 => 'ᨌ', 7799 => 'ᨍ', 7800 => 'ᨎ', 7801 => 'ᨏ', 7802 => 'ᨐ', 7803 => 'ᨑ', 7804 => 'ᨒ', 7805 => 'ᨓ', 7806 => 'ᨔ', 7807 => 'ᨕ', 7808 => 'ᨖ', 7809 => 'ᯀ', 7810 => 'ᯂ', 7811 => 'ᯅ', 7812 => 'ᯇ', 7813 => 'ᯉ', 7814 => 'ᯋ', 7815 => 'ᯎ', 7816 => 'ᯐ', 7817 => 'ᯑ', 7818 => 'ᯒ', 7819 => 'ᯔ', 7820 => 'ᯖ', 7821 => 'ᯘ', 7822 => 'ᯛ', 7823 => 'ᯝ', 7824 => 'ᯞ', 7825 => 'ᯠ', 7826 => 'ᯡ', 7827 => 'ᯢ', 7828 => 'ᯣ', 7829 => 'ᯤ', 7830 => 'ᯥ', 7831 => 'ꤰ', 7832 => 'ꤱ', 7833 => 'ꤲ', 7834 => 'ꤳ', 7835 => 'ꤴ', 7836 => 'ꤵ', 7837 => 'ꤶ', 7838 => 'ꤷ', 7839 => 'ꤸ', 7840 => 'ꤹ', 7841 => 'ꤺ', 7842 => 'ꤻ', 7843 => 'ꤼ', 7844 => 'ꤽ', 7845 => 'ꤾ', 7846 => 'ꤿ', 7847 => 'ꥀ', 7848 => 'ꥁ', 7849 => 'ꥂ', 7850 => 'ꥃ', 7851 => 'ꥄ', 7852 => 'ꥅ', 7853 => 'ꥆ', 7854 => 'ꤊ', 7855 => 'ꤋ', 7856 => 'ꤌ', 7857 => 'ꤍ', 7858 => 'ꤎ', 7859 => 'ꤏ', 7860 => 'ꤐ', 7861 => 'ꤑ', 7862 => 'ꤒ', 7863 => 'ꤓ', 7864 => 'ꤔ', 7865 => 'ꤕ', 7866 => 'ꤖ', 7867 => 'ꤗ', 7868 => 'ꤘ', 7869 => 'ꤙ', 7870 => 'ꤚ', 7871 => 'ꤛ', 7872 => 'ꤜ', 7873 => 'ꤝ', 7874 => 'ꤞ', 7875 => 'ꤟ', 7876 => 'ꤠ', 7877 => 'ꤡ', 7878 => 'ꤢ', 7879 => 'ꤣ', 7880 => 'ꤤ', 7881 => 'ꤥ', 7882 => 'က', 7883 => 'ၵ', 7884 => 'ခ', 7885 => 'ၶ', 7886 => 'ဂ', 7887 => 'ၷ', 7888 => 'ꩠ', 7889 => 'ဃ', 7890 => 'င', 7891 => 'ၚ', 7892 => 'စ', 7893 => 'ၸ', 7894 => 'ꩡ', 7895 => 'ဆ', 7896 => 'ꩢ', 7897 => 'ဇ', 7898 => 'ꩣ', 7899 => 'ၹ', 7900 => 'ꩲ', 7901 => 'ဈ', 7902 => 'ၛ', 7903 => 'ꩤ', 7904 => 'ၡ', 7905 => 'ဉ', 7906 => 'ၺ', 7907 => 'ꩥ', 7908 => 'ည', 7909 => 'ဋ', 7910 => 'ꩦ', 7911 => 'ဌ', 7912 => 'ꩧ', 7913 => 'ဍ', 7914 => 'ꩨ', 7915 => 'ဎ', 7916 => 'ꩩ', 7917 => 'ဏ', 7918 => 'ၮ', 7919 => 'တ', 7920 => 'ထ', 7921 => 'ဒ', 7922 => 'ၻ', 7923 => 'ဓ', 7924 => 'ꩪ', 7925 => 'န', 7926 => 'ၼ', 7927 => 'ꩫ', 7928 => 'ပ', 7929 => 'ဖ', 7930 => 'ၽ', 7931 => 'ၾ', 7932 => 'ꩯ', 7933 => 'ႎ', 7934 => 'ဗ', 7935 => 'ၿ', 7936 => 'ဘ', 7937 => 'မ', 7938 => 'ယ', 7939 => 'ရ', 7940 => 'ꩳ', 7941 => 'ꩺ', 7942 => 'လ', 7943 => 'ဝ', 7944 => 'ႀ', 7945 => 'ၐ', 7946 => 'ၑ', 7947 => 'ၥ', 7948 => 'သ', 7949 => 'ꩬ', 7950 => 'ဟ', 7951 => 'ႁ', 7952 => 'ꩭ', 7953 => 'ꩮ', 7954 => 'ꩱ', 7955 => 'ဠ', 7956 => 'ၜ', 7957 => 'ၝ', 7958 => 'ၯ', 7959 => 'ၰ', 7960 => 'ၦ', 7961 => 'အ', 7962 => 'ဢ', 7963 => 'ဣ', 7964 => 'ဤ', 7965 => 'ဥ', 7966 => 'ဦ', 7967 => 'ၒ', 7968 => 'ၓ', 7969 => 'ၔ', 7970 => 'ၕ', 7971 => 'ဧ', 7972 => 'ဨ', 7973 => 'ဩ', 7974 => 'ဪ', 7975 => 'ꩴ', 7976 => 'ꩵ', 7977 => 'ꩶ', 7978 => 'ក', 7979 => 'ខ', 7980 => 'គ', 7981 => 'ឃ', 7982 => 'ង', 7983 => 'ច', 7984 => 'ឆ', 7985 => 'ជ', 7986 => 'ឈ', 7987 => 'ញ', 7988 => 'ដ', 7989 => 'ឋ', 7990 => 'ឌ', 7991 => 'ឍ', 7992 => 'ណ', 7993 => 'ត', 7994 => 'ថ', 7995 => 'ទ', 7996 => 'ធ', 7997 => 'ន', 7998 => 'ប', 7999 => 'ផ', 8000 => 'ព', 8001 => 'ភ', 8002 => 'ម', 8003 => 'យ', 8004 => 'រ', 8005 => 'ល', 8006 => 'វ', 8007 => 'ឝ', 8008 => 'ឞ', 8009 => 'ស', 8010 => 'ហ', 8011 => 'ឡ', 8012 => 'អ', 8013 => 'ៜ', 8014 => 'ឣ', 8015 => 'ឤ', 8016 => 'ឥ', 8017 => 'ឦ', 8018 => 'ឧ', 8019 => 'ឨ', 8020 => 'ឩ', 8021 => 'ឪ', 8022 => 'ឫ', 8023 => 'ឬ', 8024 => 'ឭ', 8025 => 'ឮ', 8026 => 'ឯ', 8027 => 'ឰ', 8028 => 'ឱ', 8029 => 'ឲ', 8030 => 'ឳ', 8031 => 'ᥐ', 8032 => 'ᥑ', 8033 => 'ᥒ', 8034 => 'ᥓ', 8035 => 'ᥔ', 8036 => 'ᥕ', 8037 => 'ᥖ', 8038 => 'ᥗ', 8039 => 'ᥘ', 8040 => 'ᥙ', 8041 => 'ᥚ', 8042 => 'ᥛ', 8043 => 'ᥜ', 8044 => 'ᥝ', 8045 => 'ᥞ', 8046 => 'ᥟ', 8047 => 'ᥠ', 8048 => 'ᥡ', 8049 => 'ᥢ', 8050 => 'ᥣ', 8051 => 'ᥤ', 8052 => 'ᥥ', 8053 => 'ᥦ', 8054 => 'ᥧ', 8055 => 'ᥨ', 8056 => 'ᥩ', 8057 => 'ᥪ', 8058 => 'ᥫ', 8059 => 'ᥬ', 8060 => 'ᥭ', 8061 => 'ᥰ', 8062 => 'ᥱ', 8063 => 'ᥲ', 8064 => 'ᥳ', 8065 => 'ᥴ', 8066 => 'ᦀ', 8067 => 'ᦁ', 8068 => 'ᦂ', 8069 => 'ᦃ', 8070 => 'ᦄ', 8071 => 'ᦅ', 8072 => 'ᦆ', 8073 => 'ᦇ', 8074 => 'ᦈ', 8075 => 'ᦉ', 8076 => 'ᦊ', 8077 => 'ᦋ', 8078 => 'ᦌ', 8079 => 'ᦍ', 8080 => 'ᦎ', 8081 => 'ᦏ', 8082 => 'ᦐ', 8083 => 'ᦑ', 8084 => 'ᦒ', 8085 => 'ᦓ', 8086 => 'ᦔ', 8087 => 'ᦕ', 8088 => 'ᦖ', 8089 => 'ᦗ', 8090 => 'ᦘ', 8091 => 'ᦙ', 8092 => 'ᦚ', 8093 => 'ᦛ', 8094 => 'ᦜ', 8095 => 'ᦝ', 8096 => 'ᦞ', 8097 => 'ᦟ', 8098 => 'ᦠ', 8099 => 'ᦡ', 8100 => 'ᦢ', 8101 => 'ᦣ', 8102 => 'ᦤ', 8103 => 'ᦥ', 8104 => 'ᦦ', 8105 => 'ᦧ', 8106 => 'ᦨ', 8107 => 'ᦩ', 8108 => 'ᦪ', 8109 => 'ᦫ', 8110 => 'ᧁ', 8111 => 'ᧂ', 8112 => 'ᧃ', 8113 => 'ᧄ', 8114 => 'ᧅ', 8115 => 'ᧆ', 8116 => 'ᧇ', 8117 => 'ᨠ', 8118 => 'ᨡ', 8119 => 'ᨢ', 8120 => 'ᨣ', 8121 => 'ᨤ', 8122 => 'ᨥ', 8123 => 'ᨦ', 8124 => 'ᨧ', 8125 => 'ᨨ', 8126 => 'ᨩ', 8127 => 'ᨪ', 8128 => 'ᨫ', 8129 => 'ᨬ', 8130 => 'ᨭ', 8131 => 'ᨮ', 8132 => 'ᨯ', 8133 => 'ᨰ', 8134 => 'ᨱ', 8135 => 'ᨲ', 8136 => 'ᨳ', 8137 => 'ᨴ', 8138 => 'ᨵ', 8139 => 'ᨶ', 8140 => 'ᨷ', 8141 => 'ᨸ', 8142 => 'ᨹ', 8143 => 'ᨺ', 8144 => 'ᨻ', 8145 => 'ᨼ', 8146 => 'ᨽ', 8147 => 'ᨾ', 8148 => 'ᨿ', 8149 => 'ᩀ', 8150 => 'ᩁ', 8151 => 'ᩂ', 8152 => 'ᩃ', 8153 => 'ᩄ', 8154 => 'ᩅ', 8155 => 'ᩆ', 8156 => 'ᩇ', 8157 => 'ᩈ', 8158 => 'ᩉ', 8159 => 'ᩊ', 8160 => 'ᩋ', 8161 => 'ᩌ', 8162 => 'ᩓ', 8163 => 'ᩍ', 8164 => 'ᩎ', 8165 => 'ᩏ', 8166 => 'ᩐ', 8167 => 'ᩑ', 8168 => 'ᩒ', 8169 => 'ꨀ', 8170 => 'ꨁ', 8171 => 'ꨂ', 8172 => 'ꨃ', 8173 => 'ꨄ', 8174 => 'ꨅ', 8175 => 'ꨆ', 8176 => 'ꨇ', 8177 => 'ꨈ', 8178 => 'ꨉ', 8179 => 'ꨊ', 8180 => 'ꨋ', 8181 => 'ꨌ', 8182 => 'ꨍ', 8183 => 'ꨎ', 8184 => 'ꨏ', 8185 => 'ꨐ', 8186 => 'ꨑ', 8187 => 'ꨒ', 8188 => 'ꨓ', 8189 => 'ꨔ', 8190 => 'ꨕ', 8191 => 'ꨖ', 8192 => 'ꨗ', 8193 => 'ꨘ', 8194 => 'ꨙ', 8195 => 'ꨚ', 8196 => 'ꨛ', 8197 => 'ꨜ', 8198 => 'ꨝ', 8199 => 'ꨞ', 8200 => 'ꨟ', 8201 => 'ꨠ', 8202 => 'ꨡ', 8203 => 'ꨢ', 8204 => 'ꨣ', 8205 => 'ꨤ', 8206 => 'ꨥ', 8207 => 'ꨦ', 8208 => 'ꨧ', 8209 => 'ꨨ', 8210 => 'ꩀ', 8211 => 'ꩁ', 8212 => 'ꩂ', 8213 => 'ꩄ', 8214 => 'ꩅ', 8215 => 'ꩆ', 8216 => 'ꩇ', 8217 => 'ꩈ', 8218 => 'ꩉ', 8219 => 'ꩊ', 8220 => 'ꩋ', 8221 => 'ᬅ', 8222 => 'ᬆ', 8223 => 'ᬇ', 8224 => 'ᬈ', 8225 => 'ᬉ', 8226 => 'ᬊ', 8227 => 'ᬋ', 8228 => 'ᬌ', 8229 => 'ᬍ', 8230 => 'ᬎ', 8231 => 'ᬏ', 8232 => 'ᬐ', 8233 => 'ᬑ', 8234 => 'ᬒ', 8235 => 'ᬓ', 8236 => 'ᭅ', 8237 => 'ᭆ', 8238 => 'ᬔ', 8239 => 'ᬕ', 8240 => 'ᬖ', 8241 => 'ᬗ', 8242 => 'ᬘ', 8243 => 'ᬙ', 8244 => 'ᬚ', 8245 => 'ᬛ', 8246 => 'ᬜ', 8247 => 'ᬝ', 8248 => 'ᬞ', 8249 => 'ᬟ', 8250 => 'ᬠ', 8251 => 'ᬡ', 8252 => 'ᬢ', 8253 => 'ᭇ', 8254 => 'ᬣ', 8255 => 'ᬤ', 8256 => 'ᬥ', 8257 => 'ᬦ', 8258 => 'ᬧ', 8259 => 'ᭈ', 8260 => 'ᬨ', 8261 => 'ᬩ', 8262 => 'ᬪ', 8263 => 'ᬫ', 8264 => 'ᬬ', 8265 => 'ᬭ', 8266 => 'ᬮ', 8267 => 'ᬯ', 8268 => 'ᭉ', 8269 => 'ᬰ', 8270 => 'ᬱ', 8271 => 'ᬲ', 8272 => 'ᭊ', 8273 => 'ᭋ', 8274 => 'ᬳ', 8275 => 'ꦄ', 8276 => 'ꦅ', 8277 => 'ꦆ', 8278 => 'ꦇ', 8279 => 'ꦈ', 8280 => 'ꦉ', 8281 => 'ꦊ', 8282 => 'ꦋ', 8283 => 'ꦌ', 8284 => 'ꦍ', 8285 => 'ꦎ', 8286 => 'ꦏ', 8287 => 'ꦐ', 8288 => 'ꦑ', 8289 => 'ꦒ', 8290 => 'ꦓ', 8291 => 'ꦔ', 8292 => 'ꦕ', 8293 => 'ꦖ', 8294 => 'ꦗ', 8295 => 'ꦘ', 8296 => 'ꦙ', 8297 => 'ꦚ', 8298 => 'ꦛ', 8299 => 'ꦜ', 8300 => 'ꦝ', 8301 => 'ꦞ', 8302 => 'ꦟ', 8303 => 'ꦠ', 8304 => 'ꦡ', 8305 => 'ꦢ', 8306 => 'ꦣ', 8307 => 'ꦤ', 8308 => 'ꦥ', 8309 => 'ꦦ', 8310 => 'ꦧ', 8311 => 'ꦨ', 8312 => 'ꦩ', 8313 => 'ꦪ', 8314 => 'ꦫ', 8315 => 'ꦭ', 8316 => 'ꦮ', 8317 => 'ꦯ', 8318 => 'ꦰ', 8319 => 'ꦱ', 8320 => 'ꦲ', 8321 => 'ᢀ', 8322 => 'ᢁ', 8323 => 'ᢂ', 8324 => 'ᢃ', 8325 => 'ᢄ', 8326 => 'ᢅ', 8327 => 'ᢆ', 8328 => 'ᡃ', 8329 => 'ᠠ', 8330 => 'ᢇ', 8331 => 'ᠡ', 8332 => 'ᡄ', 8333 => 'ᡝ', 8334 => 'ᠢ', 8335 => 'ᡅ', 8336 => 'ᡞ', 8337 => 'ᡳ', 8338 => 'ᢈ', 8339 => 'ᡟ', 8340 => 'ᠣ', 8341 => 'ᡆ', 8342 => 'ᠤ', 8343 => 'ᡇ', 8344 => 'ᡡ', 8345 => 'ᠥ', 8346 => 'ᡈ', 8347 => 'ᠦ', 8348 => 'ᡉ', 8349 => 'ᡠ', 8350 => 'ᠧ', 8351 => 'ᠨ', 8352 => 'ᠩ', 8353 => 'ᡊ', 8354 => 'ᡢ', 8355 => 'ᢊ', 8356 => 'ᢛ', 8357 => 'ᠪ', 8358 => 'ᡋ', 8359 => 'ᠫ', 8360 => 'ᡌ', 8361 => 'ᡦ', 8362 => 'ᠬ', 8363 => 'ᡍ', 8364 => 'ᠭ', 8365 => 'ᡎ', 8366 => 'ᡤ', 8367 => 'ᢚ', 8368 => 'ᡥ', 8369 => 'ᠮ', 8370 => 'ᡏ', 8371 => 'ᠯ', 8372 => 'ᠰ', 8373 => 'ᠱ', 8374 => 'ᡧ', 8375 => 'ᢜ', 8376 => 'ᢝ', 8377 => 'ᢢ', 8378 => 'ᢤ', 8379 => 'ᢥ', 8380 => 'ᠲ', 8381 => 'ᡐ', 8382 => 'ᡨ', 8383 => 'ᠳ', 8384 => 'ᡑ', 8385 => 'ᡩ', 8386 => 'ᠴ', 8387 => 'ᡒ', 8388 => 'ᡱ', 8389 => 'ᡜ', 8390 => 'ᢋ', 8391 => 'ᠵ', 8392 => 'ᡓ', 8393 => 'ᡪ', 8394 => 'ᡷ', 8395 => 'ᠶ', 8396 => 'ᡕ', 8397 => 'ᡲ', 8398 => 'ᠷ', 8399 => 'ᡵ', 8400 => 'ᠸ', 8401 => 'ᡖ', 8402 => 'ᠹ', 8403 => 'ᡫ', 8404 => 'ᡶ', 8405 => 'ᠺ', 8406 => 'ᡗ', 8407 => 'ᡣ', 8408 => 'ᡴ', 8409 => 'ᢉ', 8410 => 'ᠻ', 8411 => 'ᠼ', 8412 => 'ᡔ', 8413 => 'ᡮ', 8414 => 'ᠽ', 8415 => 'ᡯ', 8416 => 'ᡘ', 8417 => 'ᡬ', 8418 => 'ᠾ', 8419 => 'ᡙ', 8420 => 'ᡭ', 8421 => 'ᠿ', 8422 => 'ᡀ', 8423 => 'ᡁ', 8424 => 'ᡂ', 8425 => 'ᡚ', 8426 => 'ᡛ', 8427 => 'ᡰ', 8428 => 'ᢌ', 8429 => 'ᢞ', 8430 => 'ᢍ', 8431 => 'ᢎ', 8432 => 'ᢟ', 8433 => 'ᢏ', 8434 => 'ᢐ', 8435 => 'ᢘ', 8436 => 'ᢠ', 8437 => 'ᢑ', 8438 => 'ᢡ', 8439 => 'ᢒ', 8440 => 'ᢓ', 8441 => 'ᢨ', 8442 => 'ᢔ', 8443 => 'ᢣ', 8444 => 'ᢕ', 8445 => 'ᢙ', 8446 => 'ᢖ', 8447 => 'ᢗ', 8448 => 'ᢦ', 8449 => 'ᢧ', 8450 => 'ᢪ', 8451 => 'ᱚ', 8452 => 'ᱛ', 8453 => 'ᱜ', 8454 => 'ᱝ', 8455 => 'ᱞ', 8456 => 'ᱟ', 8457 => 'ᱠ', 8458 => 'ᱡ', 8459 => 'ᱢ', 8460 => 'ᱣ', 8461 => 'ᱤ', 8462 => 'ᱥ', 8463 => 'ᱦ', 8464 => 'ᱧ', 8465 => 'ᱨ', 8466 => 'ᱩ', 8467 => 'ᱪ', 8468 => 'ᱫ', 8469 => 'ᱬ', 8470 => 'ᱭ', 8471 => 'ᱮ', 8472 => 'ᱯ', 8473 => 'ᱰ', 8474 => 'ᱱ', 8475 => 'ᱲ', 8476 => 'ᱳ', 8477 => 'ᱴ', 8478 => 'ᱵ', 8479 => 'ᱶ', 8480 => 'ᱷ', 8481 => 'ᱸ', 8482 => 'ᱹ', 8483 => 'ᱺ', 8484 => 'ᱻ', 8485 => 'ᱼ', 8486 => 'ᱽ', 8487 => 'Ꭰ', 8488 => 'Ꭱ', 8489 => 'Ꭲ', 8490 => 'Ꭳ', 8491 => 'Ꭴ', 8492 => 'Ꭵ', 8493 => 'Ꭶ', 8494 => 'Ꭷ', 8495 => 'Ꭸ', 8496 => 'Ꭹ', 8497 => 'Ꭺ', 8498 => 'Ꭻ', 8499 => 'Ꭼ', 8500 => 'Ꭽ', 8501 => 'Ꭾ', 8502 => 'Ꭿ', 8503 => 'Ꮀ', 8504 => 'Ꮁ', 8505 => 'Ꮂ', 8506 => 'Ꮃ', 8507 => 'Ꮄ', 8508 => 'Ꮅ', 8509 => 'Ꮆ', 8510 => 'Ꮇ', 8511 => 'Ꮈ', 8512 => 'Ꮉ', 8513 => 'Ꮊ', 8514 => 'Ꮋ', 8515 => 'Ꮌ', 8516 => 'Ꮍ', 8517 => 'Ꮎ', 8518 => 'Ꮏ', 8519 => 'Ꮐ', 8520 => 'Ꮑ', 8521 => 'Ꮒ', 8522 => 'Ꮓ', 8523 => 'Ꮔ', 8524 => 'Ꮕ', 8525 => 'Ꮖ', 8526 => 'Ꮗ', 8527 => 'Ꮘ', 8528 => 'Ꮙ', 8529 => 'Ꮚ', 8530 => 'Ꮛ', 8531 => 'Ꮜ', 8532 => 'Ꮝ', 8533 => 'Ꮞ', 8534 => 'Ꮟ', 8535 => 'Ꮠ', 8536 => 'Ꮡ', 8537 => 'Ꮢ', 8538 => 'Ꮣ', 8539 => 'Ꮤ', 8540 => 'Ꮥ', 8541 => 'Ꮦ', 8542 => 'Ꮧ', 8543 => 'Ꮨ', 8544 => 'Ꮩ', 8545 => 'Ꮪ', 8546 => 'Ꮫ', 8547 => 'Ꮬ', 8548 => 'Ꮭ', 8549 => 'Ꮮ', 8550 => 'Ꮯ', 8551 => 'Ꮰ', 8552 => 'Ꮱ', 8553 => 'Ꮲ', 8554 => 'Ꮳ', 8555 => 'Ꮴ', 8556 => 'Ꮵ', 8557 => 'Ꮶ', 8558 => 'Ꮷ', 8559 => 'Ꮸ', 8560 => 'Ꮹ', 8561 => 'Ꮺ', 8562 => 'Ꮻ', 8563 => 'Ꮼ', 8564 => 'Ꮽ', 8565 => 'Ꮾ', 8566 => 'Ꮿ', 8567 => 'Ᏸ', 8568 => 'Ᏹ', 8569 => 'Ᏺ', 8570 => 'Ᏻ', 8571 => 'Ᏼ', 8572 => 'ᐁ', 8573 => 'ᐂ', 8574 => 'ᐃ', 8575 => 'ᐄ', 8576 => 'ᐅ', 8577 => 'ᐆ', 8578 => 'ᐇ', 8579 => 'ᐈ', 8580 => 'ᐉ', 8581 => 'ᐊ', 8582 => 'ᐋ', 8583 => 'ᐌ', 8584 => 'ᐍ', 8585 => 'ᐎ', 8586 => 'ᐏ', 8587 => 'ᐐ', 8588 => 'ᐑ', 8589 => 'ᐒ', 8590 => 'ᐓ', 8591 => 'ᐔ', 8592 => 'ᐕ', 8593 => 'ᐖ', 8594 => 'ᐗ', 8595 => 'ᐘ', 8596 => 'ᐙ', 8597 => 'ᐚ', 8598 => 'ᐛ', 8599 => 'ᐜ', 8600 => 'ᐝ', 8601 => 'ᐞ', 8602 => 'ᐟ', 8603 => 'ᐠ', 8604 => 'ᐡ', 8605 => 'ᐢ', 8606 => 'ᐣ', 8607 => 'ᐤ', 8608 => 'ᐥ', 8609 => 'ᐦ', 8610 => 'ᐧ', 8611 => 'ᐨ', 8612 => 'ᐩ', 8613 => 'ᐪ', 8614 => 'ᐫ', 8615 => 'ᐬ', 8616 => 'ᐭ', 8617 => 'ᐮ', 8618 => 'ᐯ', 8619 => 'ᐰ', 8620 => 'ᐱ', 8621 => 'ᐲ', 8622 => 'ᐳ', 8623 => 'ᐴ', 8624 => 'ᐵ', 8625 => 'ᐶ', 8626 => 'ᐷ', 8627 => 'ᐸ', 8628 => 'ᐹ', 8629 => 'ᐺ', 8630 => 'ᐻ', 8631 => 'ᐼ', 8632 => 'ᐽ', 8633 => 'ᐾ', 8634 => 'ᐿ', 8635 => 'ᑀ', 8636 => 'ᑁ', 8637 => 'ᑂ', 8638 => 'ᑃ', 8639 => 'ᑄ', 8640 => 'ᑅ', 8641 => 'ᑆ', 8642 => 'ᑇ', 8643 => 'ᑈ', 8644 => 'ᑉ', 8645 => 'ᑊ', 8646 => 'ᑋ', 8647 => 'ᑌ', 8648 => 'ᑍ', 8649 => 'ᑎ', 8650 => 'ᑏ', 8651 => 'ᑐ', 8652 => 'ᑑ', 8653 => 'ᑒ', 8654 => 'ᑓ', 8655 => 'ᑔ', 8656 => 'ᑕ', 8657 => 'ᑖ', 8658 => 'ᑗ', 8659 => 'ᑘ', 8660 => 'ᑙ', 8661 => 'ᑚ', 8662 => 'ᑛ', 8663 => 'ᑜ', 8664 => 'ᑝ', 8665 => 'ᑞ', 8666 => 'ᑟ', 8667 => 'ᑠ', 8668 => 'ᑡ', 8669 => 'ᑢ', 8670 => 'ᑣ', 8671 => 'ᑤ', 8672 => 'ᑥ', 8673 => 'ᑦ', 8674 => 'ᑧ', 8675 => 'ᑨ', 8676 => 'ᑩ', 8677 => 'ᑪ', 8678 => 'ᑫ', 8679 => 'ᑬ', 8680 => 'ᑭ', 8681 => 'ᑮ', 8682 => 'ᑯ', 8683 => 'ᑰ', 8684 => 'ᑱ', 8685 => 'ᑲ', 8686 => 'ᑳ', 8687 => 'ᑴ', 8688 => 'ᑵ', 8689 => 'ᑶ', 8690 => 'ᑷ', 8691 => 'ᑸ', 8692 => 'ᑹ', 8693 => 'ᑺ', 8694 => 'ᑻ', 8695 => 'ᑼ', 8696 => 'ᑽ', 8697 => 'ᑾ', 8698 => 'ᑿ', 8699 => 'ᒀ', 8700 => 'ᒁ', 8701 => 'ᒂ', 8702 => 'ᒃ', 8703 => 'ᒄ', 8704 => 'ᒅ', 8705 => 'ᒆ', 8706 => 'ᒇ', 8707 => 'ᒈ', 8708 => 'ᒉ', 8709 => 'ᒊ', 8710 => 'ᒋ', 8711 => 'ᒌ', 8712 => 'ᒍ', 8713 => 'ᒎ', 8714 => 'ᒏ', 8715 => 'ᒐ', 8716 => 'ᒑ', 8717 => 'ᒒ', 8718 => 'ᒓ', 8719 => 'ᒔ', 8720 => 'ᒕ', 8721 => 'ᒖ', 8722 => 'ᒗ', 8723 => 'ᒘ', 8724 => 'ᒙ', 8725 => 'ᒚ', 8726 => 'ᒛ', 8727 => 'ᒜ', 8728 => 'ᒝ', 8729 => 'ᒞ', 8730 => 'ᒟ', 8731 => 'ᒠ', 8732 => 'ᒡ', 8733 => 'ᒢ', 8734 => 'ᒣ', 8735 => 'ᒤ', 8736 => 'ᒥ', 8737 => 'ᒦ', 8738 => 'ᒧ', 8739 => 'ᒨ', 8740 => 'ᒩ', 8741 => 'ᒪ', 8742 => 'ᒫ', 8743 => 'ᒬ', 8744 => 'ᒭ', 8745 => 'ᒮ', 8746 => 'ᒯ', 8747 => 'ᒰ', 8748 => 'ᒱ', 8749 => 'ᒲ', 8750 => 'ᒳ', 8751 => 'ᒴ', 8752 => 'ᒵ', 8753 => 'ᒶ', 8754 => 'ᒷ', 8755 => 'ᒸ', 8756 => 'ᒹ', 8757 => 'ᒺ', 8758 => 'ᒻ', 8759 => 'ᒼ', 8760 => 'ᒽ', 8761 => 'ᒾ', 8762 => 'ᒿ', 8763 => 'ᓀ', 8764 => 'ᓁ', 8765 => 'ᓂ', 8766 => 'ᓃ', 8767 => 'ᓄ', 8768 => 'ᓅ', 8769 => 'ᓆ', 8770 => 'ᓇ', 8771 => 'ᓈ', 8772 => 'ᓉ', 8773 => 'ᓊ', 8774 => 'ᓋ', 8775 => 'ᓌ', 8776 => 'ᓍ', 8777 => 'ᓎ', 8778 => 'ᓏ', 8779 => 'ᓐ', 8780 => 'ᓑ', 8781 => 'ᓒ', 8782 => 'ᓓ', 8783 => 'ᓔ', 8784 => 'ᓕ', 8785 => 'ᓖ', 8786 => 'ᓗ', 8787 => 'ᓘ', 8788 => 'ᓙ', 8789 => 'ᓚ', 8790 => 'ᓛ', 8791 => 'ᓜ', 8792 => 'ᓝ', 8793 => 'ᓞ', 8794 => 'ᓟ', 8795 => 'ᓠ', 8796 => 'ᓡ', 8797 => 'ᓢ', 8798 => 'ᓣ', 8799 => 'ᓤ', 8800 => 'ᓥ', 8801 => 'ᓦ', 8802 => 'ᓧ', 8803 => 'ᓨ', 8804 => 'ᓩ', 8805 => 'ᓪ', 8806 => 'ᓫ', 8807 => 'ᓬ', 8808 => 'ᓭ', 8809 => 'ᓮ', 8810 => 'ᓯ', 8811 => 'ᓰ', 8812 => 'ᓱ', 8813 => 'ᓲ', 8814 => 'ᓳ', 8815 => 'ᓴ', 8816 => 'ᓵ', 8817 => 'ᓶ', 8818 => 'ᓷ', 8819 => 'ᓸ', 8820 => 'ᓹ', 8821 => 'ᓺ', 8822 => 'ᓻ', 8823 => 'ᓼ', 8824 => 'ᓽ', 8825 => 'ᓾ', 8826 => 'ᓿ', 8827 => 'ᔀ', 8828 => 'ᔁ', 8829 => 'ᔂ', 8830 => 'ᔃ', 8831 => 'ᔄ', 8832 => 'ᔅ', 8833 => 'ᔆ', 8834 => 'ᔇ', 8835 => 'ᔈ', 8836 => 'ᔉ', 8837 => 'ᔊ', 8838 => 'ᔋ', 8839 => 'ᔌ', 8840 => 'ᔍ', 8841 => 'ᔎ', 8842 => 'ᔏ', 8843 => 'ᔐ', 8844 => 'ᔑ', 8845 => 'ᔒ', 8846 => 'ᔓ', 8847 => 'ᔔ', 8848 => 'ᔕ', 8849 => 'ᔖ', 8850 => 'ᔗ', 8851 => 'ᔘ', 8852 => 'ᔙ', 8853 => 'ᔚ', 8854 => 'ᔛ', 8855 => 'ᔜ', 8856 => 'ᔝ', 8857 => 'ᔞ', 8858 => 'ᔟ', 8859 => 'ᔠ', 8860 => 'ᔡ', 8861 => 'ᔢ', 8862 => 'ᔣ', 8863 => 'ᔤ', 8864 => 'ᔥ', 8865 => 'ᔦ', 8866 => 'ᔧ', 8867 => 'ᔨ', 8868 => 'ᔩ', 8869 => 'ᔪ', 8870 => 'ᔫ', 8871 => 'ᔬ', 8872 => 'ᔭ', 8873 => 'ᔮ', 8874 => 'ᔯ', 8875 => 'ᔰ', 8876 => 'ᔱ', 8877 => 'ᔲ', 8878 => 'ᔳ', 8879 => 'ᔴ', 8880 => 'ᔵ', 8881 => 'ᔶ', 8882 => 'ᔷ', 8883 => 'ᔸ', 8884 => 'ᔹ', 8885 => 'ᔺ', 8886 => 'ᔻ', 8887 => 'ᔼ', 8888 => 'ᔽ', 8889 => 'ᔾ', 8890 => 'ᔿ', 8891 => 'ᕀ', 8892 => 'ᕁ', 8893 => 'ᕂ', 8894 => 'ᕃ', 8895 => 'ᕄ', 8896 => 'ᕅ', 8897 => 'ᕆ', 8898 => 'ᕇ', 8899 => 'ᕈ', 8900 => 'ᕉ', 8901 => 'ᕊ', 8902 => 'ᕋ', 8903 => 'ᕌ', 8904 => 'ᕍ', 8905 => 'ᕎ', 8906 => 'ᕏ', 8907 => 'ᕐ', 8908 => 'ᕑ', 8909 => 'ᕒ', 8910 => 'ᕓ', 8911 => 'ᕔ', 8912 => 'ᕕ', 8913 => 'ᕖ', 8914 => 'ᕗ', 8915 => 'ᕘ', 8916 => 'ᕙ', 8917 => 'ᕚ', 8918 => 'ᕛ', 8919 => 'ᕜ', 8920 => 'ᕝ', 8921 => 'ᕞ', 8922 => 'ᕟ', 8923 => 'ᕠ', 8924 => 'ᕡ', 8925 => 'ᕢ', 8926 => 'ᕣ', 8927 => 'ᕤ', 8928 => 'ᕥ', 8929 => 'ᕦ', 8930 => 'ᕧ', 8931 => 'ᕨ', 8932 => 'ᕩ', 8933 => 'ᕪ', 8934 => 'ᕫ', 8935 => 'ᕬ', 8936 => 'ᕭ', 8937 => 'ᕮ', 8938 => 'ᕯ', 8939 => 'ᕰ', 8940 => 'ᕱ', 8941 => 'ᕲ', 8942 => 'ᕳ', 8943 => 'ᕴ', 8944 => 'ᕵ', 8945 => 'ᕶ', 8946 => 'ᕷ', 8947 => 'ᕸ', 8948 => 'ᕹ', 8949 => 'ᕺ', 8950 => 'ᕻ', 8951 => 'ᕽ', 8952 => 'ᙯ', 8953 => 'ᕾ', 8954 => 'ᕿ', 8955 => 'ᖀ', 8956 => 'ᖁ', 8957 => 'ᖂ', 8958 => 'ᖃ', 8959 => 'ᖄ', 8960 => 'ᖅ', 8961 => 'ᖆ', 8962 => 'ᖇ', 8963 => 'ᖈ', 8964 => 'ᖉ', 8965 => 'ᖊ', 8966 => 'ᖋ', 8967 => 'ᖌ', 8968 => 'ᖍ', 8969 => 'ᙰ', 8970 => 'ᖎ', 8971 => 'ᖏ', 8972 => 'ᖐ', 8973 => 'ᖑ', 8974 => 'ᖒ', 8975 => 'ᖓ', 8976 => 'ᖔ', 8977 => 'ᖕ', 8978 => 'ᙱ', 8979 => 'ᙲ', 8980 => 'ᙳ', 8981 => 'ᙴ', 8982 => 'ᙵ', 8983 => 'ᙶ', 8984 => 'ᖖ', 8985 => 'ᖗ', 8986 => 'ᖘ', 8987 => 'ᖙ', 8988 => 'ᖚ', 8989 => 'ᖛ', 8990 => 'ᖜ', 8991 => 'ᖝ', 8992 => 'ᖞ', 8993 => 'ᖟ', 8994 => 'ᖠ', 8995 => 'ᖡ', 8996 => 'ᖢ', 8997 => 'ᖣ', 8998 => 'ᖤ', 8999 => 'ᖥ', 9000 => 'ᖦ', 9001 => 'ᕼ', 9002 => 'ᖧ', 9003 => 'ᖨ', 9004 => 'ᖩ', 9005 => 'ᖪ', 9006 => 'ᖫ', 9007 => 'ᖬ', 9008 => 'ᖭ', 9009 => 'ᖮ', 9010 => 'ᖯ', 9011 => 'ᖰ', 9012 => 'ᖱ', 9013 => 'ᖲ', 9014 => 'ᖳ', 9015 => 'ᖴ', 9016 => 'ᖵ', 9017 => 'ᖶ', 9018 => 'ᖷ', 9019 => 'ᖸ', 9020 => 'ᖹ', 9021 => 'ᖺ', 9022 => 'ᖻ', 9023 => 'ᖼ', 9024 => 'ᖽ', 9025 => 'ᖾ', 9026 => 'ᖿ', 9027 => 'ᗀ', 9028 => 'ᗁ', 9029 => 'ᗂ', 9030 => 'ᗃ', 9031 => 'ᗄ', 9032 => 'ᗅ', 9033 => 'ᗆ', 9034 => 'ᗇ', 9035 => 'ᗈ', 9036 => 'ᗉ', 9037 => 'ᗊ', 9038 => 'ᗋ', 9039 => 'ᗌ', 9040 => 'ᗍ', 9041 => 'ᗎ', 9042 => 'ᗏ', 9043 => 'ᗐ', 9044 => 'ᗑ', 9045 => 'ᗒ', 9046 => 'ᗓ', 9047 => 'ᗔ', 9048 => 'ᗕ', 9049 => 'ᗖ', 9050 => 'ᗗ', 9051 => 'ᗘ', 9052 => 'ᗙ', 9053 => 'ᗚ', 9054 => 'ᗛ', 9055 => 'ᗜ', 9056 => 'ᗝ', 9057 => 'ᗞ', 9058 => 'ᗟ', 9059 => 'ᗠ', 9060 => 'ᗡ', 9061 => 'ᗢ', 9062 => 'ᗣ', 9063 => 'ᗤ', 9064 => 'ᗥ', 9065 => 'ᗦ', 9066 => 'ᗧ', 9067 => 'ᗨ', 9068 => 'ᗩ', 9069 => 'ᗪ', 9070 => 'ᗫ', 9071 => 'ᗬ', 9072 => 'ᗭ', 9073 => 'ᗮ', 9074 => 'ᗯ', 9075 => 'ᗰ', 9076 => 'ᗱ', 9077 => 'ᗲ', 9078 => 'ᗳ', 9079 => 'ᗴ', 9080 => 'ᗵ', 9081 => 'ᗶ', 9082 => 'ᗷ', 9083 => 'ᗸ', 9084 => 'ᗹ', 9085 => 'ᗺ', 9086 => 'ᗻ', 9087 => 'ᗼ', 9088 => 'ᗽ', 9089 => 'ᗾ', 9090 => 'ᗿ', 9091 => 'ᘀ', 9092 => 'ᘁ', 9093 => 'ᘂ', 9094 => 'ᘃ', 9095 => 'ᘄ', 9096 => 'ᘅ', 9097 => 'ᘆ', 9098 => 'ᘇ', 9099 => 'ᘈ', 9100 => 'ᘉ', 9101 => 'ᘊ', 9102 => 'ᘋ', 9103 => 'ᘌ', 9104 => 'ᘍ', 9105 => 'ᘎ', 9106 => 'ᘏ', 9107 => 'ᘐ', 9108 => 'ᘑ', 9109 => 'ᘒ', 9110 => 'ᘓ', 9111 => 'ᘔ', 9112 => 'ᘕ', 9113 => 'ᘖ', 9114 => 'ᘗ', 9115 => 'ᘘ', 9116 => 'ᘙ', 9117 => 'ᘚ', 9118 => 'ᘛ', 9119 => 'ᘜ', 9120 => 'ᘝ', 9121 => 'ᘞ', 9122 => 'ᘟ', 9123 => 'ᘠ', 9124 => 'ᘡ', 9125 => 'ᘢ', 9126 => 'ᘣ', 9127 => 'ᘤ', 9128 => 'ᘥ', 9129 => 'ᘦ', 9130 => 'ᘧ', 9131 => 'ᘨ', 9132 => 'ᘩ', 9133 => 'ᘪ', 9134 => 'ᘫ', 9135 => 'ᘬ', 9136 => 'ᘭ', 9137 => 'ᘮ', 9138 => 'ᘯ', 9139 => 'ᘰ', 9140 => 'ᘱ', 9141 => 'ᘲ', 9142 => 'ᘳ', 9143 => 'ᘴ', 9144 => 'ᘵ', 9145 => 'ᘶ', 9146 => 'ᘷ', 9147 => 'ᘸ', 9148 => 'ᘹ', 9149 => 'ᘺ', 9150 => 'ᘻ', 9151 => 'ᘼ', 9152 => 'ᘽ', 9153 => 'ᘾ', 9154 => 'ᘿ', 9155 => 'ᙀ', 9156 => 'ᙁ', 9157 => 'ᙂ', 9158 => 'ᙃ', 9159 => 'ᙄ', 9160 => 'ᙅ', 9161 => 'ᙆ', 9162 => 'ᙇ', 9163 => 'ᙈ', 9164 => 'ᙉ', 9165 => 'ᙊ', 9166 => 'ᙋ', 9167 => 'ᙌ', 9168 => 'ᙍ', 9169 => 'ᙎ', 9170 => 'ᙏ', 9171 => 'ᙐ', 9172 => 'ᙑ', 9173 => 'ᙒ', 9174 => 'ᙓ', 9175 => 'ᙔ', 9176 => 'ᙕ', 9177 => 'ᙖ', 9178 => 'ᙗ', 9179 => 'ᙘ', 9180 => 'ᙙ', 9181 => 'ᙚ', 9182 => 'ᙛ', 9183 => 'ᙜ', 9184 => 'ᙝ', 9185 => 'ᙞ', 9186 => 'ᙟ', 9187 => 'ᙠ', 9188 => 'ᙡ', 9189 => 'ᙢ', 9190 => 'ᙣ', 9191 => 'ᙤ', 9192 => 'ᙥ', 9193 => 'ᙦ', 9194 => 'ᙧ', 9195 => 'ᙨ', 9196 => 'ᙩ', 9197 => 'ᙪ', 9198 => 'ᙫ', 9199 => 'ᙬ', 9200 => 'ᙷ', 9201 => 'ᙸ', 9202 => 'ᙹ', 9203 => 'ᙺ', 9204 => 'ᙻ', 9205 => 'ᙼ', 9206 => 'ᙽ', 9207 => 'ᙾ', 9208 => 'ᙿ', 9209 => 'ᢰ', 9210 => 'ᢱ', 9211 => 'ᢲ', 9212 => 'ᢳ', 9213 => 'ᢴ', 9214 => 'ᢵ', 9215 => 'ᢶ', 9216 => 'ᢷ', 9217 => 'ᢸ', 9218 => 'ᢹ', 9219 => 'ᢺ', 9220 => 'ᢻ', 9221 => 'ᢼ', 9222 => 'ᢽ', 9223 => 'ᢾ', 9224 => 'ᢿ', 9225 => 'ᣀ', 9226 => 'ᣁ', 9227 => 'ᣂ', 9228 => 'ᣃ', 9229 => 'ᣄ', 9230 => 'ᣅ', 9231 => 'ᣆ', 9232 => 'ᣇ', 9233 => 'ᣈ', 9234 => 'ᣉ', 9235 => 'ᣊ', 9236 => 'ᣋ', 9237 => 'ᣌ', 9238 => 'ᣍ', 9239 => 'ᣎ', 9240 => 'ᣏ', 9241 => 'ᣐ', 9242 => 'ᣑ', 9243 => 'ᣒ', 9244 => 'ᣓ', 9245 => 'ᣔ', 9246 => 'ᣕ', 9247 => 'ᣖ', 9248 => 'ᣗ', 9249 => 'ᣘ', 9250 => 'ᣙ', 9251 => 'ᣚ', 9252 => 'ᣛ', 9253 => 'ᣜ', 9254 => 'ᣝ', 9255 => 'ᣞ', 9256 => 'ᣟ', 9257 => 'ᣠ', 9258 => 'ᣡ', 9259 => 'ᣢ', 9260 => 'ᣣ', 9261 => 'ᣤ', 9262 => 'ᣥ', 9263 => 'ᣦ', 9264 => 'ᣧ', 9265 => 'ᣨ', 9266 => 'ᣩ', 9267 => 'ᣪ', 9268 => 'ᣫ', 9269 => 'ᣬ', 9270 => 'ᣭ', 9271 => 'ᣮ', 9272 => 'ᣯ', 9273 => 'ᣰ', 9274 => 'ᣱ', 9275 => 'ᣲ', 9276 => 'ᣳ', 9277 => 'ᣴ', 9278 => 'ᣵ', 9279 => 'ᚁ', 9280 => 'ᚂ', 9281 => 'ᚃ', 9282 => 'ᚄ', 9283 => 'ᚅ', 9284 => 'ᚆ', 9285 => 'ᚇ', 9286 => 'ᚈ', 9287 => 'ᚉ', 9288 => 'ᚊ', 9289 => 'ᚋ', 9290 => 'ᚌ', 9291 => 'ᚍ', 9292 => 'ᚎ', 9293 => 'ᚏ', 9294 => 'ᚐ', 9295 => 'ᚑ', 9296 => 'ᚒ', 9297 => 'ᚓ', 9298 => 'ᚔ', 9299 => 'ᚕ', 9300 => 'ᚖ', 9301 => 'ᚗ', 9302 => 'ᚘ', 9303 => 'ᚙ', 9304 => 'ᚚ', 9305 => 'ᚠ', 9306 => 'ᚢ', 9307 => 'ᚦ', 9308 => 'ᚨ', 9309 => 'ᚯ', 9310 => 'ᚰ', 9311 => 'ᚱ', 9312 => 'ᚲ', 9313 => 'ᚷ', 9314 => 'ᚹ', 9315 => 'ᚺ', 9316 => 'ᚾ', 9317 => 'ᛁ', 9318 => 'ᛃ', 9319 => 'ᛅ', 9320 => 'ᛇ', 9321 => 'ᛈ', 9322 => 'ᛉ', 9323 => 'ᛊ', 9324 => 'ᛏ', 9325 => 'ᛒ', 9326 => 'ᛖ', 9327 => 'ᛗ', 9328 => 'ᛚ', 9329 => 'ᛜ', 9330 => 'ᛞ', 9331 => 'ᛟ', 9332 => 'ᚪ', 9333 => 'ᚫ', 9334 => 'ᚣ', 9335 => 'ᛠ', 9336 => 'ᛣ', 9337 => 'ᚸ', 9338 => 'ᛤ', 9339 => 'ᛡ', 9340 => 'ᛢ', 9341 => 'ᛥ', 9342 => 'ᛦ', 9343 => '𐰀', 9344 => '𐰂', 9345 => '𐰃', 9346 => '𐰅', 9347 => '𐰆', 9348 => '𐰇', 9349 => '𐰉', 9350 => '𐰋', 9351 => '𐰍', 9352 => '𐰏', 9353 => '𐰑', 9354 => '𐰓', 9355 => '𐰔', 9356 => '𐰖', 9357 => '𐰘', 9358 => '𐰚', 9359 => '𐰜', 9360 => '𐰞', 9361 => '𐰠', 9362 => '𐰡', 9363 => '𐰢', 9364 => '𐰣', 9365 => '𐰤', 9366 => '𐰦', 9367 => '𐰨', 9368 => '𐰪', 9369 => '𐰬', 9370 => '𐰭', 9371 => '𐰯', 9372 => '𐰰', 9373 => '𐰱', 9374 => '𐰲', 9375 => '𐰴', 9376 => '𐰶', 9377 => '𐰸', 9378 => '𐰺', 9379 => '𐰼', 9380 => '𐰽', 9381 => '𐰾', 9382 => '𐰿', 9383 => '𐱁', 9384 => '𐱃', 9385 => '𐱅', 9386 => '𐱇', 9387 => '𐱈', 9388 => 'ꔀ', 9389 => 'ꔁ', 9390 => 'ꔂ', 9391 => 'ꔃ', 9392 => 'ꔄ', 9393 => 'ꔅ', 9394 => 'ꔆ', 9395 => 'ꔇ', 9396 => 'ꔈ', 9397 => 'ꔉ', 9398 => 'ꔊ', 9399 => 'ꔋ', 9400 => 'ꔌ', 9401 => 'ꔍ', 9402 => 'ꔎ', 9403 => 'ꔏ', 9404 => 'ꔐ', 9405 => 'ꔑ', 9406 => 'ꔒ', 9407 => 'ꔓ', 9408 => 'ꔔ', 9409 => 'ꔕ', 9410 => 'ꔖ', 9411 => 'ꔗ', 9412 => 'ꔘ', 9413 => 'ꔙ', 9414 => 'ꔚ', 9415 => 'ꔛ', 9416 => 'ꔜ', 9417 => 'ꔝ', 9418 => 'ꔞ', 9419 => 'ꔟ', 9420 => 'ꔠ', 9421 => 'ꔡ', 9422 => 'ꔢ', 9423 => 'ꔣ', 9424 => 'ꔤ', 9425 => 'ꔥ', 9426 => 'ꔦ', 9427 => 'ꔧ', 9428 => 'ꔨ', 9429 => 'ꔩ', 9430 => 'ꔪ', 9431 => 'ꔫ', 9432 => 'ꔬ', 9433 => 'ꔭ', 9434 => 'ꔮ', 9435 => 'ꔯ', 9436 => 'ꔰ', 9437 => 'ꔱ', 9438 => 'ꔲ', 9439 => 'ꔳ', 9440 => 'ꔴ', 9441 => 'ꔵ', 9442 => 'ꔶ', 9443 => 'ꔷ', 9444 => 'ꔸ', 9445 => 'ꔹ', 9446 => 'ꔺ', 9447 => 'ꔻ', 9448 => 'ꔼ', 9449 => 'ꔽ', 9450 => 'ꔾ', 9451 => 'ꔿ', 9452 => 'ꕀ', 9453 => 'ꕁ', 9454 => 'ꕂ', 9455 => 'ꕃ', 9456 => 'ꕄ', 9457 => 'ꕅ', 9458 => 'ꕆ', 9459 => 'ꕇ', 9460 => 'ꕈ', 9461 => 'ꕉ', 9462 => 'ꕊ', 9463 => 'ꕋ', 9464 => 'ꕌ', 9465 => 'ꕍ', 9466 => 'ꕎ', 9467 => 'ꕏ', 9468 => 'ꕐ', 9469 => 'ꕑ', 9470 => 'ꕒ', 9471 => 'ꕓ', 9472 => 'ꕔ', 9473 => 'ꕕ', 9474 => 'ꕖ', 9475 => 'ꕗ', 9476 => 'ꕘ', 9477 => 'ꕙ', 9478 => 'ꕚ', 9479 => 'ꕛ', 9480 => 'ꕜ', 9481 => 'ꕝ', 9482 => 'ꕞ', 9483 => 'ꕟ', 9484 => 'ꕠ', 9485 => 'ꕡ', 9486 => 'ꕢ', 9487 => 'ꕣ', 9488 => 'ꕤ', 9489 => 'ꕥ', 9490 => 'ꕦ', 9491 => 'ꕧ', 9492 => 'ꕨ', 9493 => 'ꕩ', 9494 => 'ꕪ', 9495 => 'ꕫ', 9496 => 'ꕬ', 9497 => 'ꕭ', 9498 => 'ꕮ', 9499 => 'ꕯ', 9500 => 'ꕰ', 9501 => 'ꕱ', 9502 => 'ꕲ', 9503 => 'ꕳ', 9504 => 'ꕴ', 9505 => 'ꕵ', 9506 => 'ꕶ', 9507 => 'ꕷ', 9508 => 'ꕸ', 9509 => 'ꕹ', 9510 => 'ꕺ', 9511 => 'ꕻ', 9512 => 'ꕼ', 9513 => 'ꕽ', 9514 => 'ꕾ', 9515 => 'ꕿ', 9516 => 'ꖀ', 9517 => 'ꖁ', 9518 => 'ꖂ', 9519 => 'ꖃ', 9520 => 'ꖄ', 9521 => 'ꖅ', 9522 => 'ꖆ', 9523 => 'ꖇ', 9524 => 'ꖈ', 9525 => 'ꖉ', 9526 => 'ꖊ', 9527 => 'ꖋ', 9528 => 'ꖌ', 9529 => 'ꖍ', 9530 => 'ꖎ', 9531 => 'ꖏ', 9532 => 'ꖐ', 9533 => 'ꖑ', 9534 => 'ꖒ', 9535 => 'ꖓ', 9536 => 'ꖔ', 9537 => 'ꖕ', 9538 => 'ꖖ', 9539 => 'ꖗ', 9540 => 'ꖘ', 9541 => 'ꖙ', 9542 => 'ꖚ', 9543 => 'ꖛ', 9544 => 'ꖜ', 9545 => 'ꖝ', 9546 => 'ꖞ', 9547 => 'ꖟ', 9548 => 'ꖠ', 9549 => 'ꖡ', 9550 => 'ꖢ', 9551 => 'ꖣ', 9552 => 'ꖤ', 9553 => 'ꖥ', 9554 => 'ꖦ', 9555 => 'ꖧ', 9556 => 'ꖨ', 9557 => 'ꖩ', 9558 => 'ꖪ', 9559 => 'ꖫ', 9560 => 'ꖬ', 9561 => 'ꖭ', 9562 => 'ꖮ', 9563 => 'ꖯ', 9564 => 'ꖰ', 9565 => 'ꖱ', 9566 => 'ꖲ', 9567 => 'ꖳ', 9568 => 'ꖴ', 9569 => 'ꖵ', 9570 => 'ꖶ', 9571 => 'ꖷ', 9572 => 'ꖸ', 9573 => 'ꖹ', 9574 => 'ꖺ', 9575 => 'ꖻ', 9576 => 'ꖼ', 9577 => 'ꖽ', 9578 => 'ꖾ', 9579 => 'ꖿ', 9580 => 'ꗀ', 9581 => 'ꗁ', 9582 => 'ꗂ', 9583 => 'ꗃ', 9584 => 'ꗄ', 9585 => 'ꗅ', 9586 => 'ꗆ', 9587 => 'ꗇ', 9588 => 'ꗈ', 9589 => 'ꗉ', 9590 => 'ꗊ', 9591 => 'ꗋ', 9592 => 'ꗌ', 9593 => 'ꗍ', 9594 => 'ꗎ', 9595 => 'ꗏ', 9596 => 'ꗐ', 9597 => 'ꗑ', 9598 => 'ꗒ', 9599 => 'ꗓ', 9600 => 'ꗔ', 9601 => 'ꗕ', 9602 => 'ꗖ', 9603 => 'ꗗ', 9604 => 'ꗘ', 9605 => 'ꗙ', 9606 => 'ꗚ', 9607 => 'ꗛ', 9608 => 'ꗜ', 9609 => 'ꗝ', 9610 => 'ꗞ', 9611 => 'ꗟ', 9612 => 'ꗠ', 9613 => 'ꗡ', 9614 => 'ꗢ', 9615 => 'ꗣ', 9616 => 'ꗤ', 9617 => 'ꗥ', 9618 => 'ꗦ', 9619 => 'ꗧ', 9620 => 'ꗨ', 9621 => 'ꗩ', 9622 => 'ꗪ', 9623 => 'ꗫ', 9624 => 'ꗬ', 9625 => 'ꗭ', 9626 => 'ꗮ', 9627 => 'ꗯ', 9628 => 'ꗰ', 9629 => 'ꗱ', 9630 => 'ꗲ', 9631 => 'ꗳ', 9632 => 'ꗴ', 9633 => 'ꗵ', 9634 => 'ꗶ', 9635 => 'ꗷ', 9636 => 'ꗸ', 9637 => 'ꗹ', 9638 => 'ꗺ', 9639 => 'ꗻ', 9640 => 'ꗼ', 9641 => 'ꗽ', 9642 => 'ꗾ', 9643 => 'ꗿ', 9644 => 'ꘀ', 9645 => 'ꘁ', 9646 => 'ꘂ', 9647 => 'ꘃ', 9648 => 'ꘄ', 9649 => 'ꘅ', 9650 => 'ꘆ', 9651 => 'ꘇ', 9652 => 'ꘈ', 9653 => 'ꘉ', 9654 => 'ꘊ', 9655 => 'ꘋ', 9656 => 'ꘌ', 9657 => 'ꚠ', 9658 => 'ꚡ', 9659 => 'ꚢ', 9660 => 'ꚣ', 9661 => 'ꚤ', 9662 => 'ꚥ', 9663 => 'ꚦ', 9664 => 'ꚧ', 9665 => 'ꚨ', 9666 => 'ꚩ', 9667 => 'ꚪ', 9668 => 'ꚫ', 9669 => 'ꚬ', 9670 => 'ꚭ', 9671 => 'ꚮ', 9672 => 'ꚯ', 9673 => 'ꚰ', 9674 => 'ꚱ', 9675 => 'ꚲ', 9676 => 'ꚳ', 9677 => 'ꚴ', 9678 => 'ꚵ', 9679 => 'ꚶ', 9680 => 'ꚷ', 9681 => 'ꚸ', 9682 => 'ꚹ', 9683 => 'ꚺ', 9684 => 'ꚻ', 9685 => 'ꚼ', 9686 => 'ꚽ', 9687 => 'ꚾ', 9688 => 'ꚿ', 9689 => 'ꛀ', 9690 => '